Solidity
觀看 Solidity 事件會出現錯誤:TypeError: watch is not a function
我正在嘗試在我的 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,因為它可以輕鬆與區塊鏈狀態同步,其中包括事件……
參考: