Вот часть моего JS-скрипта, в которой я получаю событие:
EthProj.Message({}, { fromBlock: 0, toBlock: 'latest' }).get((error, eventResult) => {
if (error)
console.info('Error in setEvent event handler: ' + error);
else
console.info('setEvent: ' + JSON.stringify(eventResult.args));
});
}
А вот сценарий моего контракта:
pragma solidity ^0.4.18;
contract EthProj {
string fName;
string age;
event Message(string name, string age);
function setMessage(string _fName, string _age) public {
fName = _fName;
age = _age;
emit Message(_fName, _age);
}
function getName() public constant returns (string) {
return (fName);
}
function getMessage() public constant returns (string) {
return (age);
}
}
Когда я вызываю setMessage, я получаю undefined. Понятия не имею, что делаю не так. Кто-нибудь может помочь? Я не получаю должным образом события или просто их не настраиваю?
Вы должны запустить watch
по событию, прежде чем что-либо будет возвращено. Пока watch
работает, вы можете получать новые события по мере их поступления или повторно извлекать события с помощью get
.
var events = EthProj.Message({}, { fromBlock: 0, toBlock: 'latest' });
events.watch((error, results) => {
console.info(results); // Will show a single event object
});
events.get((error, eventResult) => {
if (error)
console.info('Error in setEvent event handler: ' + error);
else
console.info('Event count: ' + eventResult.length); // Notice object returned is an array
eventResult.forEach(element => console.info('setEvent: ' + JSON.stringify(element)));
});