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.
geth attach
admin.startRPC("127.0.0.1", 8545, "*", "web3,db,net,eth")
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.
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);
}
});
La escucha de eventos solo está disponible para WebSocket o proveedor de IPC
https://github.com/ethereum/web3.js/issues/989#issuecomment-369232471
pablo s
didi_X8
web3.eth.defaultAccount
no está configurado o no tiene Ether. Entonces aún puede llamar a funciones de solo lectura, pero no emitirá eventos.