¿Por qué obtengo errores de serialización en los eventos de llamada?

He puesto algunos eventos en mis contratos como este

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

En mi script de nodejs estoy haciendo algo como esto

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

En mi consola node js obtengo algo como esto

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

¿Alguien puede decir qué estoy haciendo mal? Mi entorno es: Blockchain: hydrachain Solidity: solc 0.2.0-1 Ubuntu 14:04

Esto bien podría ser un error en pyethereum, en el que se basa hydrachain. ¿Puede verificar si su código de evento funciona con go-ethereum?
Bump, ¿alguna noticia sobre este @codestruggle?
@Joel Hola Sin embargo, en realidad no tengo tiempo para concentrarme en esto ahora. Tengo algunas cosas urgentes de las que ocuparme, pero tan pronto como tenga tiempo, investigaré esta.
No creo que sea hydrachain, uso geth y vi esto de vez en cuando. Lamentablemente no recuerdo cómo lo arreglé. ¿Recompilar? No estoy seguro de que ,string contextel tipo tal vez no sea algo que web3.js trate correctamente.
Estoy empezando a pensar que esto podría ser pythereum. Vi esto cuando estaba usando una de las implementaciones de testRPC, creo. No puedo reproducir en geth.
También recuerdo haber tenido algunos problemas similares cuando la ABI que estaba usando difería de la que realmente estaba en la cadena de bloques.

Respuestas (2)

Hay una solución documentada aquí:

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

Cambie el fromBlock: 0a de fromBlock: 'latest'acuerdo con ese chat.

AFAICT nadie ha identificado una causa raíz.

También en mi código uso toda la contract.allEventsAPI y no tengo ningún problema. podría intentar enviar sus propios eventos particulares a partir de eso, o simplemente analizarlos desde el txreceipt en lugar de usar el sistema de eventos en absoluto. Sigo teniendo problemas con el sistema de eventos, por lo que, aparte de allEvents para monitorear un contrato para la depuración y el análisis, no uso eventos en absoluto.

Muchas gracias por tu respuesta. Intentaré implementar y ver.

AFAIK, la variable blockWatchResult contendrá un objeto con muchas propiedades; en la propiedad .args deberías encontrar los parámetros de tus eventos: .args['sender'], .args['receiver']...