So greifen Sie auf Eingabevariablen zu, wenn ein Ereignis ausgelöst wird

Ich habe mehrere Methoden ausprobiert, aber ich kann immer noch nicht auf die Daten zugreifen, die im Code an das Ereignis übergeben werden. Nehmen wir an, ich habe den folgenden Vertrag mit einem Ereignis:

contract EtherBay { event NewEvent(address addr, uint intValue, bytes32 name); function withdraw() returns (bool) { NewEvent({ addr: 0, intValue: 10, name: 'someString'}); } }

Dann verwende ich in der js-Datei web3, um das ausgelöste Ereignis abzufangen. Hier ist der Code:web3.eth.filter("NewEvent") .watch(function(error, result) { console.log(result) });

Die App tritt in den obigen Filer ein, aber ich bin mir nicht sicher, wie ich die Daten abrufen kann, die ich beim Auslösen des Ereignisses übergeben habe (addr, intValue, name). Ich habe mehrere Tutorials online befolgt, aber keines davon hat funktioniert. Ich habe auch versucht, über transactionHash auf die Transaktion zuzugreifen, aber ich konnte nur intValue und name abrufen. Wenn ich versuche, den Namen in ASCII umzuwandeln, erhalte ich außerdem einige seltsame Zeichen zusammen mit dem Namen selbst. Die Solidity-Version ist 0.4.18.

Bitte posten Sie, wie Sie versucht haben, auf die Daten zuzugreifen, und wie es fehlgeschlagen ist
Und posten Sie bitte die Zeichenfolge, die beim Konvertieren in Ascii seltsame Zeichen zurückgibt
@gisdev_p Entschuldigung, daran habe ich nicht gedacht. Ich habe versucht, mit der getTransaction-Methode von web3 auf die Daten zuzugreifen. Folgendes habe ich getan: inputHex = web3.eth.getTransaction(transactionHash).input. Wie ich verstanden habe, ist Input genau das, wonach ich suche. Dann habe ich versucht, die Eingabe mit der Methode web3.toAscii zu dekodieren: web3.toAscii(inputHex). Das Ergebnis des letzten Befehls ist gleich: ' {±àCoke\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000 '. Wie Sie sehen können, ist name=Coke.

Antworten (1)

Die Vertragssyntax ist falsch, es sollte nicht einmal kompiliert werden.

contract EtherBay {
    event NewEvent(address addr, uint intValue, bytes32 name);

    function withdraw() returns (bool) {
enter preformatted text here
        NewEvent({ addr: 0, intValue: 10, name: 'someString'}); // This is incorrect.
    }
 }

Sie sollten das Ereignis wie folgt auslösen:

NewEvent(0x0...., 10, "someString");
Ich habe das bereits versucht und es gibt mir einen Fehler, wenn ich das Ereignis so auslöse.
Eigentlich habe ich das gerade ausprobiert und es scheint zu funktionieren. Ich bin mir nicht sicher, warum ich zuvor einen Fehler hatte. Ich habe jedoch immer noch Schwierigkeiten, die Eingabe zu decodieren. Ich nehme auch den transactionHash, schaue dann diese Transaktion nach und entschlüssele die Eingabe. Das Ergebnis ist immer noch dasselbe: ' {±àCoke\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000\u000\u000\u000 u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000 '.