Web3.py

獲取從 Web3.py 傳輸的令牌

  • February 7, 2022

我試圖找出 etherscan 如何使用給定事務的日誌找到“轉移的令牌”。以這個0x52caaf79bf913064a70a6c9d917fd4190cdb099fe79e7d3a9dfe0600e1cfbc81任意交易為例。

在此處輸入圖像描述

我使用以下程式碼(web3.py)在交易收據中查找日誌:

from web3 import Web3
provider = Web3.HTTPProvider('https://mainnet.infura.io/v3/XXXXXXXXXXXXX')
w3 = Web3(provider)

receipt=  w3.eth.getTransactionReceipt('0x52caaf79bf913064a70a6c9d917fd4190cdb099fe79e7d3a9dfe0600e1cfbc81')

執行receipt["logs"]會生成可以在 Etherscan 中的“事件日誌”下找到的日誌。但是,只有 3 個日誌索引會導致令牌轉移部分(日誌 156、158 和 162)。

有人可以幫助我了解 etherscan 是如何從所有日誌中知道只有這些應該出現在上面的圖片中的嗎?

它搜尋所有事件:

  1. 已由指定的 ERC20 代幣合約發出,在您的情況下是:

To: Contract 0xc73e0383f3aff3215e6f04b0331d58cecf0ab849

此值應出現在 to交易收據的欄位中 2. 誰的第一個主題(topics[0])等於Transfer事件簽名的雜湊:

在 Javascript 中,此值為Web3.utils.keccak256("Transfer(address,address,uint256)")

如果需要,可以使用 Python 中的等效程式碼…

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