2020更新
更新下帖子... 之前刚学碰到的问题, 现总接下
只要出现类似的错误(括号中的数字可能不一样), 就表示该笔交易无法成功, 强制发送出去也是失败的;
如果是自己开发的合约,在require(xx,"tips"),不满足xx的条件就会提示 tips;
两种情况
在remix中,发交易,是会提示上面写的tips,
如果是dapp web端,可以将交易发送出去,然后在区块浏览器中可以看到自己定义的tips (注意:tips需要英文!,以太坊会显示,波场不显示...)
下面中的情况就是因为require不满足,所以有该问题,下面的require没有写第二个参数tips,所以交易发出去只会提示fail
对于开发合约碰到这类问题,一般都是require不满足,或者是其他条件不满足,
比如:转币的时候,实际没有代币, 或者输入金额过大,执行减法报错了等
使用remix调用合约的approve方法给予授权,第一次没啥问题,之后都提示Gas estimation failed,以为gas给少了。 搞了一下午,后面注意到还有两个方法decreaseApproval,increaseApproval,发现使用后授权量有改变...
这个帖子给了点提示【Solidity】Gas estimation failed-Gas estimation errored with the following message
是不是代码有问题。。。
然后去看合约代码(都是网上直接复制的合约代码...)
function approve(address _spender, uint256 _value) public returns (bool) {
// To change the approve amount you first have to reduce the addresses`
// allowance to zero by calling `approve(_spender, 0)` if it is not
// already 0 to mitigate the race condition described here:
// https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
require((_value == 0) || (allowed[msg.sender][_spender] == 0));
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
solidity语言还不是很懂,上面的require 猜测是value等于0或者是该sender没有设置过授权额度。
测试效果是也确实是这样, 要么调用另外两个方法去增加减少,否则就调用一次(addr,0)进行复位, 然后再次设置所想要的值!