彻底理解 ERC20 代币标准中的转账逻辑
在看 Solidity 文档 https://solidity-by-example.org/app/erc20/ 时,对于其中一段授权额的编码逻辑有点不明白,经过一翻查找资料才算彻底搞明白它的操作逻辑,这里特意将其记录一下。
ERC20代币标准 在ERC20代币标准(https://eips.ethereum.org/EIPS/eip-20) 中定义了一系列的接口方法
interface IERC20 { function totalSupply() external view returns (uint256); // 返回代币总供应量。 function balanceOf(address account) external view returns (uint256); // 查询某个账户的代币余额。 function transfer(address recipient, uint256 amount) external returns (bool); // 从调用者账户向其他地址转移代币。 function allowance(address owner, address spender) external view returns (uint256); // 查询某地址被授权从另一个账户转移的额度。 function approve(address spender, uint256 amount) external returns (bool); // 授权某地址从调用者账户转移一定数量的代币。 function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); // 由授权地址代表其他地址转移代币。 } 除此之外还有两个事件,虽然不是必须的,但还是强烈建议实现,方便以后排查错误。 注意上面的接口并不表示一定全部实现,需要根据场景来做判断。有些函数如 totalSupply() ,如果使用声明变量 uint256 public totalSupply; 的方式的话,将自动生成对应的getter函数,因此就没有必要手动再实现了。
read more