Gas 成本測試:向新地址發送交易更昂貴?
我和一個朋友在考慮交易成本,將轉賬發送到以前沒有儲存在鏈上的新地址是否有任何附加成本?於是我們開始探勘。
首先,我們呼叫了轉移到一個新地址和另一個以前使用過的地址,正如預期的那樣,它們的成本都是 21000。
新地址:https ://ropsten.etherscan.io/tx/0xec05af75ec938aa1cc78612b13d8d2e3c8f4212f60173161450297c9a25ea5a3
礦工(之前用過)地址: https ://ropsten.etherscan.io/tx/0x7fe1c8c699901923d89e07a9b66e7d952c67064bcc9d86bf84bad07cac2391b1
然後我們嘗試從 SC 進行傳輸,這是我們正在使用的功能:
function test (address receiver) public payable { receiver.transfer(msg.value); }
很簡單,我們開始測試,將函式呼叫到一個新地址:
https://ropsten.etherscan.io/tx/0x38dabd569350fa985e11f892f7175ad09a32a0c067b993f68152f34d7ca4dcb3
第一個令人驚訝的是執行這個函式的成本,是 55356 gas,比我們之前看到的 21000 高得多,我們再次呼叫它:
https://ropsten.etherscan.io/tx/0xa2d23ea51102cc98f92b6ef89ed452a5be0e0ebbc26c136fc43f9a5a67a99a52
令我們驚訝的是,現在的 gas 成本比以前少了 30356,為什麼?
我們嘗試在使用過的地址(應該已經儲存在鏈上)上呼叫函式來查看發送到新地址是否是差異因素,我們做了兩次:
https://ropsten.etherscan.io/tx/0xf9eb2e6536db2ec933ac21fb5bd8c422b6ae3b811f4bd72be4a55e02a6aec227
https://ropsten.etherscan.io/tx/0x4ef30764af81df4dc0dcc98bd4db5424c0c2bea99257df829b1c347a8764048f
兩者都花費了30356。
為什麼會發生這種情況,為什麼從 SC 將乙太幣發送到新地址的成本比發送到使用過的地址高 50% 以上?
是的,這是真的。如果你閱讀了乙太坊黃皮書,你可以在附錄 H 中看到,如果你將乙太幣發送到一個新賬戶,你必須支付額外的 gas。
這是為了阻止地址向新地址發送大量交易,從而像這樣炸毀鏈的大小。