繁体   English   中英

ERC20 代币合约:批准 function 需要检查调用者余额吗?

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

我正在阅读 ERC20.sol 源代码。 有一个关于批准 function 的问题。

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);
}

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

require(amount <= _balances[owner]);

谢谢。

我们应该在 function 中检查金额吗?

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

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

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

希望这些信息有用:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM