Events

“事件日誌”中的“主題”是什麼意思?

  • May 25, 2018

當我們如下呼叫事件時:

event MyEvent(uint256 indexed _id, bytes32 _action, bytes32 _player, bytes32 _actionState,  address _owner);

emit MyEvent(uint256(_public_id), bytes32(_action), bytes32(_player), bytes32(_actionState), _owner);

EtherScan中,我們看到如下輸出:

EtherScan 事件日誌

是什麼Topics [0] 0x22b8025a23f25c3f52cdbc1f53a831dbd4e3b4aaeebe121d36c858abea974bc7意思?

在 的情況下MyEvent[1] 0x0000000000000000000000000000000000000000000000000000000000000001意味著_public_id = 1

然而,不知0x22b8025a23f25c3f52cdbc1f53a831dbd4e3b4aaeebe121d36c858abea974bc7從何而來?一般來說,這個詞是Topics什麼意思?

在交易收據中,topics欄位對應indexed於您的智能合約中的事件參數。對於所有事件,您將找到事件名稱的雜湊作為第一個參數,然後是indexed六字節的數據。

所以在你的情況下,topics你會發現

'topics':[hash_event_name,// w3.sha3(text='myEvent(uint256)').hex() where Event name without input argumentsname
        0x000000...000000001//your first argument '_id' because is indexed 
        ]

您所有未編入索引的事件參數都儲存在交易收據的數據部分

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