Go-Ethereum
從節點讀取交易數據
我已連接到我管理的乙太坊節點(執行 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。
事件不是訪問此數據的可靠方式,因為許多合約函式不會觸發事件,而且您永遠無法確定事件是否為您提供了參數的真實值。