evento de contrato que no se activa en la consola del nodo web3

Parece que mis eventos no se activan en mi aplicación de nodo cuando realizo la transacción del contrato en la interfaz gráfica de usuario de la billetera ethereum.

  1. Implementé un contrato personalizado a través de ethereum-wallet
  2. me he encendidogeth attach
  3. en geth he iniciado el rpcadmin.startRPC("127.0.0.1", 8545, "*", "web3,db,net,eth")
  4. dentro del shell de respuesta del nodo he hecho lo siguiente:

    > var Web3 = require('web3')
    > web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
    > var contractAddress = "0x807bF45B0245d8FA96F68E319116E18a15b07A10"
    > var contractCode = "<paste in the code above for the contract>"
    > var compiledContract = web3.eth.compile.solidity(contractCode)
    > var contractDefinition = compiledContract.ShareClass.info.abiDefinition
    > var reference = web3.eth.contract(contractDefinition).at(contractAddress)
    > reference.Transfer().watch(
         function(error, result){
             console.log(result.args.from + " => "+result.args.to + " ["+result.args.value+"]");
         });
    

Cuando luego llamo al método Transfer en mi contrato en la billetera ethereum, el saldo del contrato cambia, pero el registro de la consola no se lleva a cabo en mi aplicación de nodo.

un poco difícil de depurar si no podemos ver el código que emite el evento. Incluya al menos el fragmento de código que emite el evento. Puede probar allEvents y ver si se trata de un problema de filtrado.
una posible razón es cuando web3.eth.defaultAccountno está configurado o no tiene Ether. Entonces aún puede llamar a funciones de solo lectura, pero no emitirá eventos.

Respuestas (2)

Creo que se supone que debes agregar el reloj al objeto del evento, no a la función.

Solidez:

contract Test {
    Event MyLog(string);

    function MyFunction() {
        MyLog("Hello World!");
    }
}

JavaScript:

// NOT reference.MyFunction().watch
reference.MyLog().watch(function(error, result) {
    if (!err) {
        console.log(result);
    } else {
        console.log("Error! + " error);
    } 
});
MyFunction está llamando al evento con el nombre incorrecto.

La escucha de eventos solo está disponible para WebSocket o proveedor de IPC

https://github.com/ethereum/web3.js/issues/989#issuecomment-369232471