Web3js

Ropsten infura 測試網路 + web3 js 事件監聽器

  • January 21, 2022

我已經在 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 事件。

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