Go-Ethereum
檢測 EVM
我需要獲得所有契約內部交易。為此,我需要檢測乙太坊 EVM。
我的問題是:我應該怎麼做才能獲得交易細節?現在,我正在查看程式碼,但如果有人能指出程式碼的正確部分,我將不勝感激。
為此,您需要定義一個實現StructLogCollector的 VM 日誌收集器。該函式在 VM 的每一步都被呼叫,並提供記憶體、堆棧和儲存的修改部分的副本,以及程序計數器、目前操作碼、剩餘氣體和其他數據。當發生導致事務失敗的錯誤時也會呼叫它。
要提取您想要的數據,您需要注意幾件事:“CREATE”、“CALL”、“CALLCODE”和“DELEGATECALL”操作碼,它們呼叫新合約或帳戶並可能轉移價值,以及“SUICIDE”返回值給來電者。您還需要注意導致呼叫返回的任何事情以及上述錯誤。
在跟踪時,您需要維護一個堆棧,該堆棧表示目前事務進行的呼叫堆棧,每個堆棧幀都包含到目前為止已進行的值傳輸的列表。非錯誤返回彈出一個堆棧幀,將其所有值傳輸添加到下面的幀。錯誤返回會彈出幀,丟棄所有傳輸。當您彈出最後一幀時,其中的一組傳輸是作為事務的一部分最終確定的傳輸。
所有這些的實現都可以看作是我的 Etherquery 程式碼的一部分。