Events
查找主題000, 話題111, 話題222
正如什麼是主題中所建議的那樣$$ 0 $$在事件日誌中?我正在嘗試找出“事件雜湊”,但它與以下事務的輸出不匹配。
輸入數據
Function: transfer(address _to, uint256 _value) *** MethodID: 0xa9059cbb [0]:0000000000000000000000000d2b2fb39b10cd50cab7aa8e834879069ab1a8d4 [1]:0000000000000000000000000000000000000000000000000000010e6a06cb00
事件日誌
Topics [0] 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef [1] 0x0000000000000000000000004dc8f417d4eb731d179a0f08b1feaf25216cefd0 [2] 0x0000000000000000000000000d2b2fb39b10cd50cab7aa8e834879069ab1a8d4
但是,當我嘗試查找
keccak
雜湊時,它顯示了不同的雜湊。from Crypto.Hash import keccak keccak_hash = keccak.new(digest_bits=256) keccak_hash.update("transfer(address,uint256)") print keccak_hash.hexdigest() >>a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b
0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
正是事件簽名的 sha3 散列
Transfer(address,address,uint256)
- ERC20 令牌事件簽名。嘗試使用web3 的 sha3 雜湊實用程序來驗證這一點。此外,topics[1]
和topics[2]
是事件的索引參數,在這種情況下,它們是您的from address
價值和to address
價值。每個合約都可以定義不同事件的列表。但是,如果合約是基於 ERC20 標準編寫的,它將包含 ERC20 的標準事件,這些事件為所有合約提供相同的簽名,並且肯定會給出相同的事件簽名雜湊值。
回到這個輸入:
MethodID: 0xa9059cbb [0]:0000000000000000000000000d2b2fb39b10cd50cab7aa8e834879069ab1a8d4 [1]:0000000000000000000000000000000000000000000000000000010e6a06cb00
0000000000000000000000000000000000000000000000000000010e6a06cb00
在此轉賬中logs data
稱為代幣金額。並且0000000000000000000000000d2b2fb39b10cd50cab7aa8e834879069ab1a8d4
顯然是to address
在這筆交易中。
topics[0]
是事件簽名的雜湊,在您的情況下是Transfer(address,address,uint256)
針對 ERC20Transfer
事件。如果您採用keccak 雜湊值,您可以確認。您已經獲取了
transfer()
函式簽名的雜湊值。它的前四個字節a9059cbb
正確地為您提供了函式的 MethodIDtransfer()
,但這是不同的,與Transfer
EventID 沒有任何關係,即topics[0]
.