Parity

Parity trace_transaction 呼叫的響應值實際上代表什麼?

  • December 20, 2017

Parity 實現了一個非常有用的跟踪模組,用於深入研究區塊和交易。

一種特殊的方法trace_transaction允許您調查事務的 EVM 執行路徑。

然而,在文件中並不清楚各種響應值代表什麼。

大多數值(我相信)相當明顯。讓我感到困惑的是結果的屬性和gas屬性內。action``gasUsed``result

我假設它們代表該給定步驟中可用的最大氣體量,並且該步驟分別使用的氣體量但是初始gas值不等於交易發送的值,並且這些值的總和gasUsed不等於 gasUsed 的值通過呼叫返回getTransactionReceipt

一個例子。

Ropsten 測試網上的這個(隨機)交易。

第一次呼叫的 gas 值為576552,而交易的 gas 限制為600000

值的總和gasUsed102979,而呼叫getTransactionReceipt返回的總氣體使用量為93518

Geth 調試模組還顯示第一個和最後一個 EVM 命令之間的差異為93518 。

誰能弄清楚這些值實際代表什麼?

在 Parity 工作的任何人都沒有收到任何消息後,我繼續進行了進一步調查。

該屬性返回該步驟gasUsed使用的氣體量。第一個跟踪(帶有 null 的)表示使用者送出的事務。所有其他跟踪都是子跟踪,例如呼叫的函式呼叫另一個函式。traceAddress

初始gasUsed跟踪不包括預設事務成本21000OR4零字節數據和非零字節數據的輸入數據成本68黃皮書(第 20 頁)對此進行了概述。

如果你取gasUsed初始跟踪的值,加上 21000,然後計算輸入數據成本,那麼你確實得到了返回的 gas used 值getTransactionReceipt

雖然我在這裡,要計算輸入數據成本,刪除0x前綴,並每兩個字元拆分十六進制輸入數據(每個十六進製字元為 4 位)。

0xa600bc由三個字節的數據組成:a600bc。那是兩個非零字節和一個零字節。

這並不能解釋為什麼ParitygasUsed以這種方式返回。它真的可以與記錄有關。

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