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 方法,只有当你有足够的余额并且允许智能合约花费足够的代币时,才会将你的代币发送到另一个钱包。
所以不,你不需要在批准的时候检查钱包是否有足够的余额,因为只有在转移令牌时才需要这个条件。
希望此信息有用:)
我正在阅读 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 方法,只有当你有足够的余额并且允许智能合约花费足够的代币时,才会将你的代币发送到另一个钱包。
所以不,你不需要在批准的时候检查钱包是否有足够的余额,因为只有在转移令牌时才需要这个条件。
希望此信息有用:)