Solidity

觀看 Solidity 事件會出現錯誤:TypeError: watch is not a function

  • February 8, 2019

我正在嘗試在我的 React 應用程序中觀看 Solidity 事件,但我不斷收到以下異常錯誤:

TypeError: MyEvent.watch is not a function

我確信該事件出現在MyContract.json. 這是我的程式碼的樣子:

componentDidMount = async () => {
   try {
     // Get network provider and web3 instance.
     const web3 = await getWeb3();

     // Get the contract instance.
     const Contract = truffleContract(MyContract);
     Contract.setProvider(web3.currentProvider);
     const contractInstance = await Contract.deployed();

     // Watch for MyEvent
     contractInstance.MyEvent().watch((error, result) => {});


   } catch (error) {
     console.log(error);  // always gives: TypeError: contractInstance.MyEvent(...).watch is not a function
   }
 };

這就是 MyContract.sol 程式碼的樣子:

pragma solidity ^0.4.24;

contract MyContract {
   event MyEvent();

   function myFunction() public {
       emit MyEvent();
   }
}

實際上,myContract.MyEvent.watch已在Web3 v1中進行了更改。就是現在myContract.events.MyEvent

但是,Web3 v1.x 中的事件列表需要在連接的節點上啟用 websocket。而且,Ganache 版本 6 及以下版本不支持 websocket。但是,websockets 在版本 7 中可用;但它現在是 alpha 版本。

所以,你可以試試Ganache 7。您還可以在開發人員模式下使用最新的 Geth 版本。或者您可以探索Drizzle,因為它可以輕鬆與區塊鏈狀態同步,其中包括事件……

參考:

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