Es scheint, dass es ein Problem mit der Behandlung von Vertragsereignissen gibt, und ich bin mir nicht sicher, ob es sich um die EVM-Ebene oder nur um web3js handelt.
Ich habe 2 Verträge "SomeCoin" und "SomeConcert". Beide Verträge geben ein "Transfer"-Ereignis aus, wenn ein Artikel von einer Adresse an eine andere übertragen wird. Bei „SomeCoin“ ist der Übertragungsgegenstand ein Coin/Token, bei „SomeConcert“ sind Konzertkarten (die in „SomeCoins“ bepreist sind) der Übertragungsgegenstand.
Wenn ich die „SomeConcert“-Methode aufgerufen habe, um Tickets zu kaufen, überträgt die Logik einige „SomeCoins“ von meiner Adresse an die „SomeConcert“-Adresse. Bis auf das Event-Handling ist alles schön und gut. Ich habe 2 Ereignisse gesehen, die vom Vertrag „SomeConcert“ und „Transfer“ vom Vertrag „SomeCoin“ gesendet wurden. Wenn ich das Ereignis „Transfer“ im Vertrag „SomeCoin“ in „TransferCoin“ umbenannt habe, sehe ich nur das Ereignis „Kaufen“.
Anscheinend verwechselt also entweder web3 oder die darunter liegende Schicht die Ereignisse, die vom Vertrag der inneren Schicht mit dem Vertrag der äußeren Schicht ausgegeben werden. Zu diesem Schluss bin ich zumindest gekommen.
Ist das ein web3js-Bug? Gibt es etwas, das ich bei der Ereignisbehandlung übersehen habe, das die Verwirrung hätte verhindern können? Der Code, den ich für die Ereignisbehandlung habe, ist eher Standard
... return someConcertInstance.buyTickets(3, {from: customer1}); }).then(function(receipt) { assert.equal(receipt.logs.length, 1, "should have received 1 events for buy-ticket)"); assert.equal(receipt.logs[0].args._numberOfTickets, 3, "Number of tix bought must be 3");
Der Testfall ist beim ersten Assertion fehlgeschlagen und ich habe herausgefunden, dass 2 Ereignisse ausgegeben werden (Transfer und Kauf).
In den Kommentaren oben aussortiert und zu einer Antwort für zukünftige Leser übergegangen.
Der Code in der Frage verwendet truffle
. Wenn Sie eine Transaktion in Trüffel senden, hat das Ergebnis, das Sie zurückerhalten, ein logs
Feld, das über diesen Code zusammengestellt wird: https://github.com/trufflesuite/truffle-contract/blob/develop/contract.js#L44 .
Dieser Code verwirft Protokolle mit Themen, die keiner bekannten Ereignissignatur in der ABI des aufgerufenen Vertrags entsprechen. Ich halte dieses Verhalten für einen Designfehler.
Benutzer19510
Thomas
Benutzer19510
Thomas
Benutzer19510
Benutzer19510
Thomas
Benutzer19510
Benutzer19510
address
Feld verfügbar machen, sodass Sie einfach danach filtern können.Benutzer19510
Thomas
Benutzer19510