当发送方在执行函数过程中用尽所有电量时会发生什么?

时间:2018-11-28 20:09:01

标签: ethereum solidity evm

假设我们有一个具有以下定义功能的合同:

   function send(address receiver, uint amount) public {
        if (balances[msg.sender] < amount) return;
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        emit Sent(msg.sender, receiver, amount);
    }

,并假设发送方在以下几行之后用尽了所有电量:

balances[msg.sender] -= amount;

状态变量发生了什么?区块中是否包含不完整的TX?

2 个答案:

答案 0 :(得分:2)

如果您在交易过程中用尽了汽油,它将失败。您只需为使用的计算付费,这意味着直到失败为止,所有使用过的气体将返回,而其余将返回。

您可以在Ethereum Book

的这一章中了解有关气体的更多信息

答案 1 :(得分:1)

用尽所有事务将失败,并且不会更新任何状态变量。如this out of gas示例中所示,失败的事务仍然包含在一个块中。

在您的示例中,将不会执行seo_url_id,并且balances[msg.sender] -= result将保持与交易之前完全相同。

交易发送者仍会向矿工支付费用,以将交易包括在区块中。

This帖子在解决各种失败情况方面做得很好。