Go-Ethereum

契約事件未在 web3 節點控制台中觸發

  • February 28, 2018

當我在乙太坊錢包 gui 中處理契約時,我的節點應用程序中似乎沒有觸發我的事件。

  1. 我通過乙太坊錢包部署了一個自定義合約
  2. 我已經開火了geth attach
  3. 在 geth 我已經啟動了 rpcadmin.startRPC("127.0.0.1", 8545, "*", "web3,db,net,eth")
  4. 在節點 repl shell 中,我做了以下事情:
> 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 方法時,合約餘額會發生變化,但控制台日誌不會發生在我的節點應用程序中。

我認為您應該將 watch 添加到事件對象,而不是函式。

堅固性:

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

引用自:https://ethereum.stackexchange.com/questions/2084