我应该检查合同中是否有道德
Should I check whether there is a eth in contract
我不明白什么时候恢复是 运行ning。我有这个代码:
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时,我没有revert,函数也是运行。但是虽然 1ETH+1ETH+1ETH = 3ETH,但在合约中我只有 2 ETH。
为什么还原不起作用?是因为require()
是运行ning之后的合约变更吗?我该怎么做:当合约没有足够的 eth 时恢复!
我应该检查合约中是否有eth?如果我调用一些将 ETH 发送到帐户的函数,但我在合同中没有 ETH,我会恢复吗?我应该检查合约余额吗?
我应该设置 require(addres(this).balance > 0)
还是不设置?
你的需求没有失败,因为当你开始一个余额为 2 ETH 的合约并且你在测试调用时发送了 1 ETH,然后合约余额变成了 3 ETH 并且满足需求的条件.
所以,你必须重新审视你的逻辑,例如通过检查是否 getContractBalance() - msg.value >= <desired-start-value-before-the-call>
我不明白什么时候恢复是 运行ning。我有这个代码:
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时,我没有revert,函数也是运行。但是虽然 1ETH+1ETH+1ETH = 3ETH,但在合约中我只有 2 ETH。
为什么还原不起作用?是因为require()
是运行ning之后的合约变更吗?我该怎么做:当合约没有足够的 eth 时恢复!
我应该检查合约中是否有eth?如果我调用一些将 ETH 发送到帐户的函数,但我在合同中没有 ETH,我会恢复吗?我应该检查合约余额吗?
我应该设置 require(addres(this).balance > 0)
还是不设置?
你的需求没有失败,因为当你开始一个余额为 2 ETH 的合约并且你在测试调用时发送了 1 ETH,然后合约余额变成了 3 ETH 并且满足需求的条件.
所以,你必须重新审视你的逻辑,例如通过检查是否 getContractBalance() - msg.value >= <desired-start-value-before-the-call>