Warum erhalte ich Serialisierungsfehler beim Aufrufen von Ereignissen?

Ich habe einige Ereignisse so in meine Verträge aufgenommen

event TokenTransfer(address indexed sender,address indexed receiver,uint32 indexed num_tokens);
event ExceptionEvent(uint16 indexed retcode,address indexed userAddress,string context);

In meinem nodejs-Skript mache ich so etwas

iouContractInstance.TokenTransfer({},{fromBlock: 0, toBlock: 'latest'}).watch(function(blockWatchError, blockWatchResult){
    console.log("Looking out for Tokentransfer data");
    console.log("TokenTranfer Error:"+blockWatchError);
    if(!blockWatchError){
        console.log("The event data result is:"+blockWatchResult);
    }
});

iouContractInstance.ExceptionEvent({},{fromBlock:0,toBlock:'latest'}).watch(function(blockWatchError, blockWatchResult){
    console.log("Looking out for ExceptionEvent event data");
    console.log("ExceptionEvent Error:"+blockWatchError);
    if(!blockWatchError){
        console.log("The event data result is:"+blockWatchResult);
    }
});

Auf meiner node js-Konsole bekomme ich so etwas

Looking out for Tokentransfer data
TokenTranfer Error:Error: Can only serialize integers
Looking out for ExceptionEvent event data
ExceptionEvent Error:Error: Can only serialize integers
Looking out for Tokentransfer data

Kann jemand sagen, was ich falsch mache? Meine Umgebung ist: Blockchain:hydrachain Solidity:solc 0.2.0-1 Ubuntu 14:04

Dies könnte durchaus ein Fehler in Pyethereum sein, auf dem Hydrachain basiert. Können Sie überprüfen, ob Ihr Event-Code mit go-ethereum funktioniert?
Bump, gibt es Neuigkeiten zu diesem @codestruggle?
@Joel Hallo, eigentlich habe ich gerade keine Zeit, mich darauf zu konzentrieren. Ich muss mich um ein paar dringende Dinge kümmern, aber sobald ich Zeit habe, werde ich mich darum kümmern.
Ich glaube nicht, dass es Hydrachain ist, ich benutze Geth und habe das gelegentlich gesehen. Leider kann ich mich nicht erinnern, wie ich es behoben habe. Neu kompilieren? Nicht sicher , ob ,string contextder Typ vielleicht etwas ist, mit dem web3.js nicht richtig umgeht?
Ich fange an zu glauben, dass dies Pythereum sein könnte. Ich habe das gesehen, als ich eine der TestRPC-Implementierungen verwendet habe, glaube ich. Ich kann Geth nicht reproduzieren.
Ich erinnere mich auch, dass ich einige ähnliche Probleme hatte, als die ABI, die ich verwendete, sich von dem unterschieden, was sich tatsächlich auf der Blockchain befand.

Antworten (2)

Es gibt eine Problemumgehung, die hier dokumentiert ist:

https://gitter.im/ethereum/web3.js/archives/2016/01/09

Ändern Sie das fromBlock: 0in fromBlock: 'latest'entsprechend diesem Chat.

AFAICT niemand hat eine Grundursache identifiziert.

Auch in meinem Code verwende ich die gesamte contract.allEventsAPI und habe kein Problem. Sie können versuchen, Ihre eigenen speziellen Ereignisse von dort aus zu senden oder sie einfach aus dem txreceipt zu analysieren, anstatt das Ereignissystem überhaupt zu verwenden. Ich stoße immer wieder auf Probleme mit dem Ereignissystem, daher verwende ich außer allEvents zur Überwachung eines Vertrags für Debugging und Analyse überhaupt keine Ereignisse.

Vielen Dank für Ihre Antwort. Ich werde versuchen, zu implementieren und zu sehen.

AFAIK die Variable blockWatchResult enthält ein Objekt mit vielen Eigenschaften; In der Eigenschaft .args sollten Sie Ihre Ereignisparameter finden: .args['sender'], .args['receiver']...