событие контракта не запускается в консоли узла web3

Похоже, мои события не запускаются в моем приложении узла, когда я заключаю контракт в графическом интерфейсе кошелька ethereum.

  1. Я развернул пользовательский контракт через ethereum-кошелек
  2. я загорелсяgeth attach
  3. в geth я запустил rpcadmin.startRPC("127.0.0.1", 8545, "*", "web3,db,net,eth")
  4. в оболочке 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.

немного сложно отлаживать, если мы не видим код, который генерирует событие. Пожалуйста, включите хотя бы фрагмент кода, создающего событие. Вы можете попробовать allEvents и посмотреть, не проблема ли это с фильтрацией.
одна из возможных причин — когда web3.eth.defaultAccountне установлено или нет эфира. Тогда он по-прежнему может вызывать функции только для чтения, но не будет генерировать события.

Ответы (2)

Я думаю, вы должны добавить часы к объекту события, а не к функции.

Прочность:

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 вызывает событие с неправильным именем.

Прослушивание событий доступно только для провайдера WebSocket или IPC.

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