En la documentación y los enlaces sugeridos y esta pregunta, se menciona que los eventos están vinculados a los métodos y se activan cuando se llama a un método (a través de una transacción). Hay un ejemplo de un contrato:
contract ClientReceipt {
event Deposit(
address indexed _from,
bytes32 indexed _id,
uint _value
);
function deposit(bytes32 _id) {
// Any call to this function (even deeply nested) can
// be detected from the JavaScript API by filtering
// for `Deposit` to be called.
Deposit(msg.sender, _id, msg.value);
}
}
en el que se activa un evento cada vez que se llama al método deposit() . Intenté cambiar los tipos de argumentos y escribí el siguiente contrato simplificado:
contract ClientReceipt {
event Deposit(
uint256 a
);
function deposit(uint256 a) {
// Any call to this function (even deeply nested) can
// be detected from the JavaScript API by filtering
// for `Deposit` to be called.
Deposit(a);
}
}
pero me sale el error:
TypeError: Cannot read property 'event' of undefined
al implementar y llamar al método (en browser-solidity ).
Editar:
El detector de eventos de Javascript:
var abi = /* abi as generated by the compiler */;
var ClientReceipt = web3.eth.contract(abi);
var clientReceipt = ClientReceipt.at(0x123 /* address */);
var event = clientReceipt.Deposit(function(error, result) {
if (!error)
console.log(result);
else {
// Based on the result call another method of the contract
clientReceipt.callMethod({gas: 4700000});
}
});
De su ejemplo de código, los eventos se activan correctamente.
Puede usar eventos en un servidor si ejecuta un NodeJs. Tal vez alguien más pueda intervenir con problemas de confiabilidad.
El evento se activa cuando se extrae el bloque. Entonces, sí, el evento se dispara después de que el estado haya cambiado.
Nota al margen. Un patrón emergente es prefijar sus eventos con Log. Así que llámalo event LogDeposit(uint a);
.
El objeto en cadena devolvió:
{ "índice de registro": 0, "índice de transacción": 0, "transacciónHash": "0xa1a1e96217d05ca3f305ea051104da6de62c0df479d680494cc3e4dc013a846d", "blockHash": "0x923ede06e8027f07d239980b3d1502397e81958882a06008676647ad62c18e9d", "número de bloque": 504, "dirección": "0x1c7dc63b49a32c4b6cbc9c1a0e816b574c00e2fa", "tipo": "minado", "evento": "Depósito", "argumentos": { "un": "1" } }
geth
ellos se disparan.
Xavier Leprêtre B9lab
Sebí
Xavier Leprêtre B9lab
event
variable es extraño. Sin embargo, cuando probé su código, con un cambio menor para trabajar dentro de Truffle, funcionó como se esperaba.Sebí