如何从 web3.eth.Contract.MyMethod.estiamteGas 解析 "Internal error"
How to resolve "Internal error" from web3.eth.Contract.MyMethod.estiamteGas
我从 Express 服务器调用 estimateGas 到私有 Hyperledger Besu 链,昨天一切正常,但今天当我 运行 使用相同的方法时,它 returning “错误:返回错误:内部错误”。从昨天到今天,代码没有任何变化,我什至不知道从哪里开始进行故障排除。
这就是错误的程度,没有给出更多的描述,在谷歌搜索了几个小时后,我没有找到任何可以帮助的东西。堆栈跟踪指向 web3 节点模块中的错误处理程序文件。
代码(出于安全原因省略实际方法和参数):
console.log("Estimating Gas");
let gas = await this.myContract.methods
.myMethod(
address,
uint256,
address,
address,
uint256
)
.estimateGas({ from: address });
console.log("This call will probably take " + gas + " gas");
预期行为:
return 估计气体量
实际行为:
记录第一条消息,但是从 estimateGas 方法中捕获了 returns 内部错误,并且永远不会进入第二条消息
有谁知道我如何检索更具体的错误或如何修复它?
这可能是您的 web3 提供商的问题,但更可能的选择是执行 myMethod()
会导致交易恢复 - 这就是它可能抛出错误的原因。
您可以将方法封装在 try/catch 块中以捕获错误消息。
try {
let gas = await this.myContract.methods
.myMethod(
address,
uint256,
address,
address,
uint256
)
.estimateGas({ from: address });
} catch (err) {
console.log(err);
}
它可以 return 一个特定的还原消息,您可以使用定义此消息的 require()
语句根据您的 Solidity 代码进行验证。
或者它 return 是通用的“所需气体超出限额”,这可能是由任何失败的 require
/assert
条件、throw
或 revert
语句,或尝试进行无效操作(例如自 Solidity 0.8 以来算术运算期间的整数溢出)。如果它是通用消息,您将需要调试合约变量值、return 它可能正在调用的外部合约的值等。
我从 Express 服务器调用 estimateGas 到私有 Hyperledger Besu 链,昨天一切正常,但今天当我 运行 使用相同的方法时,它 returning “错误:返回错误:内部错误”。从昨天到今天,代码没有任何变化,我什至不知道从哪里开始进行故障排除。
这就是错误的程度,没有给出更多的描述,在谷歌搜索了几个小时后,我没有找到任何可以帮助的东西。堆栈跟踪指向 web3 节点模块中的错误处理程序文件。
代码(出于安全原因省略实际方法和参数):
console.log("Estimating Gas");
let gas = await this.myContract.methods
.myMethod(
address,
uint256,
address,
address,
uint256
)
.estimateGas({ from: address });
console.log("This call will probably take " + gas + " gas");
预期行为: return 估计气体量
实际行为: 记录第一条消息,但是从 estimateGas 方法中捕获了 returns 内部错误,并且永远不会进入第二条消息
有谁知道我如何检索更具体的错误或如何修复它?
这可能是您的 web3 提供商的问题,但更可能的选择是执行 myMethod()
会导致交易恢复 - 这就是它可能抛出错误的原因。
您可以将方法封装在 try/catch 块中以捕获错误消息。
try {
let gas = await this.myContract.methods
.myMethod(
address,
uint256,
address,
address,
uint256
)
.estimateGas({ from: address });
} catch (err) {
console.log(err);
}
它可以 return 一个特定的还原消息,您可以使用定义此消息的 require()
语句根据您的 Solidity 代码进行验证。
或者它 return 是通用的“所需气体超出限额”,这可能是由任何失败的 require
/assert
条件、throw
或 revert
语句,或尝试进行无效操作(例如自 Solidity 0.8 以来算术运算期间的整数溢出)。如果它是通用消息,您将需要调试合约变量值、return 它可能正在调用的外部合约的值等。