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.
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");
gisdev_p
gisdev_p
David_Zizu
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.