Parity

–no-ancient-blocks 是否會影響掛起塊的 trace_call?

  • January 5, 2021

請解釋 –no-ancient-blocks 標誌如何為 openethereum 工作。

我已經檢查過,使用此標誌我將無法為古代塊發出請求 eth_getBlockByNumber。

但是對於依賴於在古代區塊中創建的合約狀態的待處理區塊的交易呢?

例如,在 block_number=1 中創建了一個合約 0x123123123123123123。該合約有一個公共方法 getMyValue(),它返回一個儲存值 my_value。此狀態 my_value 在 block_number=1 中設置。

是否可以對該合約的待處理塊進行 trace_call 並獲取與 –no-ancient-flag 同步的 openethereum 節點的 my_value?

根據 Solidity 文件:https ://docs.soliditylang.org/en/v0.5.3/units-and-global-variables.html#block-and-transaction-properties

事務最多只能訪問 256 個塊舊的狀態。即前第 256 個區塊雜湊。如果您嘗試基於過去足夠遠的塊跟踪交易,以至於交易最終引用了一個古老的塊,那麼您的呼叫很可能(儘管我沒有通過實驗證明)您的呼叫將失敗,因為狀態不會存在於您的節點上。

簡而言之:除非客戶端有任何更大的限制,否則在沒有古代塊的待處理塊上進行跟踪應該沒問題。

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