Parity

了解“eth_estimateGas”結果估算氣體

  • February 27, 2018

我一直在玩 parity 的“eth_estimateGas”呼叫來確定不同的代幣氣體需求。一般使用這段程式碼:

let transfer_data = contract.transfer.getData("<destinaton ETH address>", 1);
   let gas_limit = await rpcCall("eth_estimateGas",[{
       to: contractData.contractAddress,
       from: "<source ETH address>",
       data:transfer_data
   }]);

根據發件人地址,我得到不同的結果。如果該地址已經完成了數千筆交易(如交易所),那麼使用的 gas 量明顯高於僅完成 10 筆交易的地址。除了發件人地址之外沒有其他任何修改。

我唯一的理論是,如果 nonce 非常高,合約或 evm 必須做更多的驗證,以確保它確實有正確的餘額來完成發送。

我錯過了什麼?

編輯:這是一個範例數據。代幣:FunFair

發件人地址具有較高的現時 契約地址:0x419d0d8bdd9af5e606ae2232ed285aff190e711b從地址:0xfbb1b73c4f0bda4f67dca266ce6ef42f520fbb98要地址:0x6d8401b8ed8755bb4d01a89072860c98c236dc78 https://etherscan.io/tx/0xc407d8320f44745f88244400c3750875e1858e0ee6a1106bafbde424c289a6ef所 用氣體:58999

發件人地址具有低現時 契約地址:0x419d0d8bdd9af5e606ae2232ed285aff190e711b從地址:0x8c301c986e6d23117f17394722272fcd16d43efd要地址:0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be https://etherscan.io/tx/0x708fb93a22f4ddd3d410f7280fb3800c8ff96deed5d4fafa12244d0f74e48045所 用氣體:29127

將這些值插入奇偶校驗呼叫,估計結果具有大致相同的變異數。

我懶得 100% 確認,但我很確定在你給出的範例中,關鍵區別在於更便宜的交易是針對發件人的全部代幣餘額。這意味著他們最終的餘額為零。將儲存中的值從非零值設置為零值可為您提供 gas 退款,從而降低交易成本。(這會激勵清理儲存。)

引用自:https://ethereum.stackexchange.com/questions/41103