Похоже, мои события не запускаются в моем приложении узла, когда я заключаю контракт в графическом интерфейсе кошелька ethereum.
geth attach
admin.startRPC("127.0.0.1", 8545, "*", "web3,db,net,eth")
в оболочке node repl я сделал следующее:
> 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+"]");
});
Когда я затем вызываю метод Transfer для моего контракта в кошельке ethereum, баланс контракта изменяется, но консольное ведение журнала не происходит в моем приложении Node.
Я думаю, вы должны добавить часы к объекту события, а не к функции.
Прочность:
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);
}
});
Прослушивание событий доступно только для провайдера WebSocket или IPC.
https://github.com/ethereum/web3.js/issues/989#issuecomment-369232471
Пол С
диди_X8
web3.eth.defaultAccount
не установлено или нет эфира. Тогда он по-прежнему может вызывать функции только для чтения, но не будет генерировать события.