我应该检查合同中是否有道德规范

时间:2019-01-24 17:41:42

标签: solidity

我不明白恢复运行的时间。我有以下代码:

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)

1 个答案:

答案 0 :(得分:1)

您的需求不会失败,因为当您开始使用余额为2 ETH的合同并发送1 ETH和测试电话时,合约余额将变为3 ETH,并且满足需求的条件。 / p>

因此,您必须重新审视自己的逻辑,例如通过检查getContractBalance() - msg.value >= <desired-start-value-before-the-call>