Transactions

一種擷取每筆交易實際使用的氣體的方法

  • September 1, 2020

兩個問題,相關:

  1. getGasUsed()TransactionReceipt 上的 真的是實際使用的 gas,而不是估計gasLimit的 gas 嗎?看起來像但是…
  2. 實際使用的氣體是否可以在 TransactionReceipt 之外獲得(“可讀”)?您可以使用 tx 雜湊或其他材料事後確定實際使用的氣體嗎?

編輯: 剛剛在 web3j 的測試驅動程序中遇到了這個:

EthGetTransactionReceipt etxr = web3j.ethGetTransactionReceipt(txhash).send();
assertTrue(ethGetTransactionReceipt.getTransactionReceipt().isPresent());                   
TransactionReceipt TXr = etxr.getTransactionReceipt().get();

我試過了,它有效。事後(如在過濾器或 Flowable 中),當我得到 TXhash 時,我可以得到 TXreceipt 並因此得到實際使用的氣體。

為什麼這不容易被發現?

  1. 是的,gasUsed交易收據上的是交易使用的真實氣體。
  2. 習慣的唯一(合理)方法是閱讀收據。

其他不理想的方法是 (a) 從 tx 中讀取所有 OPCODES 並將其成本相加,或 (b) 讀取總塊中使用的氣體並減去塊gasUsed中所有其他交易的氣體。

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