Web3js
Ropsten infura 測試網路 + web3 js 事件監聽器
我已經在 ropsten 測試網路上部署了合約。松露.js
ropsten: { provider: function() { return new HDWalletProvider(mnemonic, "https://ropsten.infura.io/<api-token>") }, network_id: '*', gas:"4000000" }
商店.sol
pragma solidity ^0.4.17; contract SimpleStorage { uint myVariable; event emitval(); function setValue(uint x) public { emitval(); myVariable = x; } function getValue() public returns (uint) { emitval(); return myVariable; } }
在我的節點 js 程式碼中,我使用 web3 js 從契約中呼叫/監聽方法/事件。
我的節點 js 文件是
web3.setProvider(new Web3.providers.WebsocketProvider('https://ropsten.infura.io/<api-token>'));
對於我寫的監聽事件
var contracts = new web3.eth.Contract(importedjson.abi, deployedaddressat) contracts.events.emitval(function(error, result){ if(error) { console.log(error);} else { console.log('Event setVal:', result);} })
當我呼叫 solidity 方法(setValue() 或 getValue() 發出 emitval() 事件)時,我無法在節點 js 程式碼上監聽它。
你能幫幫我嗎?
我正在使用最新的 web3js 版本“1.0.0-beta.33”。
我在你的契約中看不到這樣
setVal
的事件。確實,在契約中,名字是emitval
。您可以嘗試更改您的程式碼contract.events.emitval(函式(錯誤,結果){ 如果(錯誤){ console.log(錯誤);} else { console.log('Event setVal:', result);} });
另一種方法是使用 . 監聽所有合約事件
myContract.events.allEvents
。參考
您可以嘗試替換 web3.setProvider(new Web3.providers.WebsocketProvider(‘https://ropsten.infura.io/'));
和
web3.setProvider(new Web3.providers.WebsocketProvider(‘wss://ropsten.infura.io/’));
這可能是 websocket 問題,因為 web3 1.0 不支持 http 事件。