ERC20代币合约:批准功能是否需要检查调用者余额?

ERC20 token contract: does approve function need to check caller balance?

我正在阅读 ERC20.sol 源代码。 approve函数有问题

function _approve(
    address owner,
    address spender,
    uint256 amount
) internal virtual {
    require(owner != address(0), "ERC20: approve from the zero address");
    require(spender != address(0), "ERC20: approve to the zero address");

    _allowances[owner][spender] = amount;
    emit Approval(owner, spender, amount);
}

在函数中,需要owner != address(0) 和spender != address(0)。我只是想知道我们是否应该在函数中进行金额检查? 如:

require(amount <= _balances[owner]);

谢谢。

should we do the amount check in the function?

没有。 批准功能仅允许 third-party 消费者代表您使用您的代币。您只需允许某人或智能合约使用您的 ERC20 代币。这并不意味着他们可以花费无限的代币。

假设您让智能合约花费 1000 个 ERC20 代币。该智能合约将能够代表您从您的余额中支出最多 1000 个代币。但前提是您有足够的余额来进行交易。因此允许的智能合约可以调用 transferFrom 方法,只有当你有足够的余额并且允许智能合约花费足够的代币时,才会将你的代币发送到另一个钱包。

所以不,你不需要在批准的时候检查钱包是否有足够的余额,因为只有在转移令牌时才需要这个条件。

希望此信息有用:)