Go-Ethereum

從節點讀取交易數據

  • January 7, 2021

我已連接到我管理的乙太坊節點(執行 Geth),並且能夠使用 RPC 連接到它。發布後我可以在終端中訪問 web3 geth console我可以訪問和執行此處文件中列出的 RPC 函式呼叫。我必須在 webpy 和 web3.js 等不同的庫之間切換,所以兩者的實現都應該沒問題。

給定交易雜湊,我可以獲取交易詳細資訊,例如使用web3.eth.getTransaction(transaction_hash). 但我得到的所有細節只包括:hash, input, nonce, from, to, transaction_index, value, v, r, s.

我很好奇的是,這個網站如何訪問關於轉移了多少代幣的其他豐富細節。更具體地說,我們如何讀取(給定交易中涉及的發送者和合約地址)所轉移代幣的價值,即函式呼叫的 value 參數

來自上述網站的此類詳細資訊的快照。(如何計算 Token Transfer,如下圖所示)

在此處輸入圖像描述

它來自輸入欄位嗎?如果是這樣,如何將十六進制解釋為實際值和呼叫的函式?

他們很可能正在監聽每個智能合約生成的事件,並在本地數據庫中對它們進行索引。

標準的 ERC20 兼容智能合約會Transfer()為每筆交易生成一個事件。如果你想監控智能合約產生的所有事件,你可以為你的客戶端訂閱 allEvents

要訪問被呼叫函式的名稱、函式參數的名稱、參數的類型(uint256、地址等)以及這些參數的值,您需要解碼“輸入數據”欄位.

解碼輸入數據的一種簡單方法是使用已經建構的解碼器,例如ethereum-input-data-decoder

事件不是訪問此數據的可靠方式,因為許多合約函式不會觸發事件,而且您永遠無法確定事件是否為您提供了參數的真實值。

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