Мы с другом думали о транзакционных издержках, есть ли дополнительные расходы на отправку перевода на новый адрес, который раньше не хранился в цепочке? Итак, мы начали копать.
Первым делом позвонили с переводом на новый адрес и еще один, который уже использовался ранее, как и ожидалось, стоимость 21000 для обоих.
Новый адрес: https://ropsten.etherscan.io/tx/0xec05af75ec938aa1cc78612b13d8d2e3c8f4212f60173161450297c9a25ea5a3
Адрес майнера (использовался ранее): https://ropsten.etherscan.io/tx/0x7fe1c8c699901923d89e07a9b66e7d952c67064bcc9d86bf84bad07cac2391b1
Затем мы попытались сделать перевод из СЦ, вот эту функцию мы и используем:
function test (address receiver) public payable { receiver.transfer(msg.value); }
Достаточно просто, мы начали тестирование, вызвали функцию по новому адресу:
https://ropsten.etherscan.io/tx/0x38dabd569350fa985e11f892f7175ad09a32a0c067b993f68152f34d7ca4dcb3
Первым удивительным моментом была стоимость выполнения этой функции, она составила 55356 газа, что намного выше, чем 21000, которые мы видели раньше, мы снова назвали это:
https://ropsten.etherscan.io/tx/0xa2d23ea51102cc98f92b6ef89ed452a5be0e0ebbc26c136fc43f9a5a67a99a52
К нашему удивлению, теперь затраты на газ были 30356 намного меньше, чем раньше, почему??
Мы попытались вызвать функцию по используемому адресу (который уже должен быть сохранен в цепочке), чтобы увидеть, является ли отправка на новый адрес дифференциальным фактором, мы сделали это дважды:
https://ropsten.etherscan.io/tx/0xf9eb2e6536db2ec933ac21fb5bd8c422b6ae3b811f4bd72be4a55e02a6aec227
https://ropsten.etherscan.io/tx/0x4ef30764af81df4dc0dcc98bd4db5424c0c2bea99257df829b1c347a8764048f
И стоил 30356 в обоих.
Почему так происходит, почему отправка эфира на новый адрес из СЦ стоит более чем на 50% дороже, чем отправка на старый адрес?
Да, это правда. Если вы читали желтую бумагу Ethereum, вы можете увидеть в Приложении H, что вам придется платить за дополнительный газ, если вы отправляете эфир на новую учетную запись.
Это делается для того, чтобы адреса не отправляли большое количество транзакций на новые адреса, таким образом увеличивая размер цепочки.
пользователь19510
transfer
звонка не должна зависеть от того, был ли получатель получателем более ранних переводов, но трудно дать вам объяснение, не видя кода.пользователь19510
Энрике Алькасар
пользователь19510