Was bedeutet „Themen“ im „Ereignisprotokoll“? [Duplikat]

Wenn wir ein Ereignis wie folgt aufrufen:

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);

In EtherScansehen wir eine Ausgabe wie folgt:

EtherScan-Ereignisprotokoll

Was Topics [0] 0x22b8025a23f25c3f52cdbc1f53a831dbd4e3b4aaeebe121d36c858abea974bc7bedeutet ?

Im Falle von MyEventbedeutet[1] 0x0000000000000000000000000000000000000000000000000000000000000001_public_id = 1

Allerdings weiß ich nicht 0x22b8025a23f25c3f52cdbc1f53a831dbd4e3b4aaeebe121d36c858abea974bc7woher kommt? und im Allgemeinen, Topicswas bedeutet der Begriff?

@Ismael, Ja, du hast Recht, ich habe diese Frage nicht gesehen .... Entschuldigung ....
@Ismael Ich denke jedoch, dass die Antwort des Benutzers Lbrth_BoC eher mit dem zusammenhängt, was ich erwartet hatte. Vielen Dank
@Ismael Wenn Sie diese Frage löschen möchten, können Sie dies tun, aber ich denke, es wäre besser, die Antwort des Benutzers Lbrth_BoC beizubehalten. Vielen Dank

Antworten (1)

In einer Transaktionsquittung topicsentsprechen die Felder Ihren Ereignisargumenten, die sich indexedin Ihrem Smart Contract befinden. Für alle Ereignisse finden Sie als erstes Argument den Hash des Ereignisnamens und dann die Daten, die indexedin Hexabyte angegeben sind.

In Ihrem Fall werden topicsSie also finden

'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 
         ]

Alle Ihre nicht indizierten Ereignisargumente werden im Datenteil des Transaktionsbelegs gespeichert

Bist du dir bei diesem Teil sicher?sha('MyEvent(uint256'))
Bei web3.py ist das Richtige:event_signature_hash = w3.sha3(text='MyEvent(uint256)').hex() #Event name without input arguments
Ich versuche, web3js 1.0 zu verwenden, um den Sha meines Ereignisses zu erhalten: web3.utils.sha3('TokenSold(uint256 tokenId,uint256 oldPrice,uint256 newPrice,address prevOwner,address winner,string name)')Dies gab mir den falschen Hash ...
Ja, weil Sie den Namen Ihrer Argumente in die sha3-Funktionen eingeben. Sie sollten also mit : den richtigen Hash erhalten web3.utils.sha3('TokenSold(uint256, uint256, uint256, address, address, string)'). Fügen Sie nur den Typ Ihrer Variablen hinzu
Vielen Dank! Ich habe den richtigen Hash mit Ihrer Lösung, aber ohne die Leerzeichen! Prost Kumpel!!
Bitte ! Ich erinnere mich, dass ich ein paar Stunden damit verbracht habe, auch den richtigen Hash zu bekommen