假设我们有一个具有以下定义功能的合同:
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?
答案 0 :(得分:2)
如果您在交易过程中用尽了汽油,它将失败。您只需为使用的计算付费,这意味着直到失败为止,所有使用过的气体将不返回,而其余将返回。
您可以在Ethereum Book
的这一章中了解有关气体的更多信息答案 1 :(得分:1)
用尽所有事务将失败,并且不会更新任何状态变量。如this out of gas
示例中所示,失败的事务仍然包含在一个块中。
在您的示例中,将不会执行seo_url_id
,并且balances[msg.sender] -= result
将保持与交易之前完全相同。
交易发送者仍会向矿工支付费用,以将交易包括在区块中。
This帖子在解决各种失败情况方面做得很好。