Когда мы вызываем событие следующим образом:
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
, мы видим вывод следующим образом:
Что 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
]
Все аргументы вашего события, которые не индексируются, хранятся в части данных квитанции о транзакции.
sha('MyEvent(uint256'))
event_signature_hash = w3.sha3(text='MyEvent(uint256)').hex() #Event name without input arguments
web3.utils.sha3('TokenSold(uint256 tokenId,uint256 oldPrice,uint256 newPrice,address prevOwner,address winner,string name)')
это дало мне неправильный хеш...web3.utils.sha3('TokenSold(uint256, uint256, uint256, address, address, string)')
. Добавьте только тип вашей переменной
Спрашивающий
Спрашивающий
Спрашивающий