我正在听我部署合同的事件。每当事务完成并触发事件时,接收响应会导致以下错误:
未捕获的错误:返回的值无效,是否已用完气体? ABICoder.push ../ node_modules / web3-eth-abi / src / index.js.ABICoder.decodeParameters(index.js:227)at ABICoder.push ../ node_modules / web3-eth-abi / src / index。 js.ABICoder.decodeLog(index.js:277)
Web3版本:1.0.0-beta36
Metamask版本:4.16.0
怎么解决?
尝试命令truffle migrate --reset
,以便将所有先前的值重置为其原始值
在事务内部引发相同的错误时,它会生成具有相同名称和相同参数的不同事件。就我而言,这是来自ERC721和ERC20的转移事件。重命名其中一个解决了这个问题,但当然这不是正确的方法。
这是web3js中的一个错误,讨论了here。
以下更改修复了它(source):
patch-package
--- a/node_modules/web3-eth-abi/src/index.js
+++ b/node_modules/web3-eth-abi/src/index.js
@@ -280,7 +280,7 @@ ABICoder.prototype.decodeLog = function (inputs, data, topics) {
var nonIndexedData = data;
- var notIndexedParams = (nonIndexedData) ? this.decodeParameters(notIndexedInputs, nonIndexedData) : [];
+ var notIndexedParams = (nonIndexedData && nonIndexedData !== '0x') ? this.decodeParameters(notIndexedInputs, nonIndexedData) : [];
var returnValue = new Result();
returnValue.__length__ = 0;
编辑:也降级到web3-1.0.0.beta33也修复了这个问题。
请检查您的Metamask登录,当您要么退出Metamask时,通常会填充此问题,或者更糟糕的情况是您的帐户中剩余0以太。