我不明白恢复运行的时间。我有以下代码:
function test() public payable returns(uint){
require(getContractBalance() >= msg.value.add(msg.value).add(_foo), "Not enough eth in contract");
_foo= _foo.add(msg.value.mul(5).div(1000));
return _foo;
}
在合同中,我有2个ETH,而_foo
var有1e18 wei;
当我调用test()
函数并发送1 ETH时,我没有还原,并且该函数以相同的方式运行。但是虽然1ETH + 1ETH + 1ETH = 3ETH,但在合约中我只有2ETH。
为什么还原不起作用?这是因为require()
在合同更改后正在运行吗?我该怎么做:当合同没有足够的eth时恢复!
我应该检查合同中是否有道德规范?如果我调用某个将ETH发送到帐户的功能,但是合同中没有eth,我会得到回复吗?我应该检查合同余额吗?
我是否应该设置require(addres(this).balance > 0)
?
答案 0 :(得分:1)
您的需求不会失败,因为当您开始使用余额为2 ETH的合同并发送1 ETH和测试电话时,合约余额将变为3 ETH,并且满足需求的条件。 / p>
因此,您必须重新审视自己的逻辑,例如通过检查getContractBalance() - msg.value >= <desired-start-value-before-the-call>