Что означает «Темы» в «Журнале событий»? [дубликат]

Когда мы вызываем событие следующим образом:

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что значит?

@Ismael, да, ты прав, я не видел этого вопроса .... Извини ....
@Ismael Однако я думаю, что ответ пользователя Lbrth_BoC больше связан с тем, что я ожидал. Спасибо
@Ismael Если вы хотите удалить этот вопрос, вы можете это сделать, но я думаю, что было бы лучше оставить ответ пользователя Lbrth_BoC. Спасибо

Ответы (1)

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