Transactions

如何從任何交易中獲取 Eth 轉移資訊,尤其是具有內部“交易”的交易?

  • July 5, 2021

如果我想跟踪交易中的 ERC-20 代幣轉移,即使它們是智能合約執行的結果,我也可以讀取這些事件。

但是,如果交易呼叫了智能合約並且該合約將 Eth 發送到某處,我如何以程式方式檢測到呢?對於任意交易,我想知道哪些地址的 Eth 增加或減少。

如果這需要啟用調試模組的存檔節點,那麼有關如何執行此操作的詳細資訊將很有幫助。

這裡唯一提出的其他問題是:如何以程式方式掃描從智能合約到我的地址的乙太幣轉移?但它沒有得到答案。

你混淆了兩件事:

  • 代幣轉移
  • 乙太幣轉賬

如果您想要令牌傳輸只需監聽Transfer事件,非常符合 ERC20 的令牌將發出此事件,無論它發出的堆棧幀有多深:

Transfer(from, to, value)

不需要存檔節點,如果您使用 Infura 的免費 API 密鑰,則根本不需要節點

現在,如果你想要 ETH 轉移,這要復雜得多。

您需要跟踪塊中的每筆交易。ETH 轉賬將按照以下說明進行:

CALL 
CALLCODE 
DELEGATECALL 
STATICALL 
CREATE
CREATE2
SUICIDE (SELFDESTRUCT)

也有在 EVM 之外進行的轉移,它們是:

  • 為交易購買氣體(在呼叫 EVM 之前)
  • 挖礦獎勵(區塊處理完畢後)

跟踪日誌將包含堆棧,因此要獲取傳輸的 ETH 值,您需要讀取堆棧的最後一個元素。

如果要生成從現在到未來的數據,則不需要存檔節點,但如果您想要過去的歷史存檔節點是必須的。此外,如果您想驗證您是否有正確的實現(沒有錯誤),您將需要歸檔節點,因為完整節點僅跟踪最後 128 個塊,舊塊的狀態被修剪

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