Ethereum ERC20和x27;s如果函数不';你不符合要求吗?
我正在学习OpenZeppelin的ERC20合同,并对批准功能感到好奇:Ethereum ERC20和x27;s如果函数不';你不符合要求吗?,ethereum,solidity,Ethereum,Solidity,我正在学习OpenZeppelin的ERC20合同,并对批准功能感到好奇: function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[send
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
_approve(sender, _msgSender(), currentAllowance - amount);
return true;
}
从逻辑上讲,只有当当前津贴>=金额
时,您才能将<代码>金额从<代码>发送方转移到<代码>接收方
但是,正如您在此函数体中所看到的,调用\u transfer(发送者、接收者、金额)
后,要求(当前津贴>=金额)
发生
现在我记得读到以太坊事务是原子的。在这种情况下,是否意味着如果require条件失败,那么\u传输也不会执行
这是否意味着如果require条件失败,那么_传输也不会执行
从技术上讲,它会被执行,但随后由于失效的require
条件产生的无效操作码,它会恢复
因此,没有状态变化(这可能是您所说的“未执行”)但气体已被使用(用于执行)
编辑以澄清:在这种情况下,没有状态更改意味着没有令牌被传输