【发布时间】:2021-01-14 12:09:31
【问题描述】:
我正在尝试找出解决此问题的方法,以处理交易确认订单并将值设置为0
pragma solidity ^0.5.17;
contract Test {
uint256 amount;
constructor() public {}
function join() public {
amount += 100;
}
function leave() public {
amount -= 100;
}
}
鉴于这些交易(在 ropsten 上测试):
tx 1) 呼叫加入 确认
amount == 100
tx 2) 呼叫加入(gas 价格 1) 待处理
amount == 100 should tx3 get mined first
tx 3) Call Leave (gas price 100) Pending
amount == 0
但是,只要将 amount 设置回 0,tx 2 就会始终失败并出现 out of gas 错误。如果该值高于0,则不会发生这种情况。我的理解是,将值设置为 0 状态而不是正整数会花费更多的气体,并且气体估计没有考虑到这一点。我已经尝试delete,希望这会返还gas以补偿太低的gas限制,但它仍然失败了。
有没有一种优雅的方式来处理这种情况?我能想到的唯一方法是高估所有join 交易的gas,这有其明显的缺点,或者永远不要将amount 设置回0。
【问题讨论】:
标签: ethereum solidity smartcontracts erc20