Go-Ethereum
契約事件未在 web3 節點控制台中觸發
當我在乙太坊錢包 gui 中處理契約時,我的節點應用程序中似乎沒有觸發我的事件。
- 我通過乙太坊錢包部署了一個自定義合約
- 我已經開火了
geth attach
- 在 geth 我已經啟動了 rpc
admin.startRPC("127.0.0.1", 8545, "*", "web3,db,net,eth")
- 在節點 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