未捕获的错误:返回的值无效,是不是耗尽了 Gas?
Posted
技术标签:
【中文标题】未捕获的错误:返回的值无效,是不是耗尽了 Gas?【英文标题】:Uncaught Error: Returned values aren't valid, did it run Out of Gas?未捕获的错误:返回的值无效,是否耗尽了 Gas? 【发布时间】:2019-03-28 03:10:04 【问题描述】:我正在监听我部署的合约的事件。每当事务完成并触发接收响应的事件时,都会导致以下错误:
未捕获的错误:返回值无效,是否耗尽了 Gas? 在 ABICoder.push../node_modules/web3-eth-abi/src/index.js.ABICoder.decodeParameters (index.js:227) 在 ABICoder.push../node_modules/web3-eth-abi/src/index.js.ABICoder.decodeLog (index.js:277)
Web3 版本:1.0.0-beta36
元掩码版本:4.16.0
如何解决?
【问题讨论】:
【参考方案1】:对我来说解决方案是更换供应商。使用 Infura 时错误消失了,但使用 Alchemy 时仍在发生。
【讨论】:
【参考方案2】:这发生在我的 react 应用上。
我部署到与 Ropsten 网络签约,但 metamask 使用的是 Rinkeby 帐户。因此,请确保无论您部署了哪个网络,metamask 都应该使用该网络中的帐户。
【讨论】:
谢谢!我也是这种情况。【参考方案3】:在检查您的 ABI 或重新部署之前,请检查以确保 Metamask 已连接到您的合同实际部署的任何网络。我走开了,当我退出 Metamask 时,我想我并没有密切关注,当我在 localhost 上工作时,我连接到了 Ropsten。简单的错误,浪费了一个小时左右试图弄清楚。希望这对其他人有所帮助!
【讨论】:
【参考方案4】:当 Ganache 中的 MNEMONIC 值与您在 truffle.js 或 truffle-config.js 文件中的值不同时,也会发生这种情况。
【讨论】:
【参考方案5】:请检查您的 Metamask 登录,此问题通常会在您退出 Metamask 或更糟的情况下出现,您的帐户中还剩下 0 个以太币。
【讨论】:
【参考方案6】:在事务内部生成具有相同名称和相同参数的不同事件时会引发相同的错误。就我而言,这是来自 ERC721 和 ERC20 的 Transfer 事件。重命名其中一个可以解决这个问题,但这当然不是正确的方法。
【讨论】:
就是这样,非常感谢。首先检查其他任何内容:继承问题、气体限制……在重命名所有 ERC721 事件后,问题消失了。【参考方案7】:尝试使用命令truffle migrate --reset
,以便将所有先前的值重置为其原始值
【讨论】:
这在我使用 Truffle Suite 和 Ganache 时帮助了我。谢谢。【参考方案8】:这是 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 也解决了这个问题。
【讨论】:
如果我使用的是 Truffle 套件,我必须在哪里添加此代码?以上是关于未捕获的错误:返回的值无效,是不是耗尽了 Gas?的主要内容,如果未能解决你的问题,请参考以下文章
返回值无效,它是不是用尽了 Gas? web3 1.5.0 和 sol-0.5.15