我最近刚刚完成了与 Remix IDE 的一项相当复杂的合同。我现在将 web3 附加到前端,但是当我调用应该失败的函数时,它们仍然会通过 Metamask。
在 Remix 中测试我的合约时,我经常单击并调用某些需要语句的函数,我知道这些语句会失败,只是为了确认合约状态被正确记录。Remix 没有将事务发送到 metamask,而是输出错误消息,我也想自己处理事务错误。
我如何检查我的合同调用以查看它是否会失败。我必须使用预测气体的方法并以这种方式检测它吗?如果是,如何?我当前的代码如下:
contract.callFunction(function(error, result) {
if (!error) alert(result);
else alert(error);
}
上面的代码将拒绝元掩码确认视为错误,但应该失败的交易会通过设置异常高的气体限制的元掩码。函数 callFunction 在合约中,不带参数,但对区块链有影响,因此需要交易。函数的第一行是“require(state == 1);” 我目前将合同设置为状态 2,所以我预计交易会失败,我只想检测到它失败。