// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;
// EIP中定义的ERC20标准接口
interface IERC20 {
// 返回存在的代币数量
function totalSupply() external view returns (uint256);
// 返回 account 拥有的代币数量
function balanceOf(address account) external view returns (uint256);
// 将 amount 代币从调用者账户移动到 recipient
// 返回一个布尔值表示操作是否成功
// 发出 {Transfer} 事件
function transfer(address recipient, uint256 amount)
external
returns (bool);
// 返回 spender 允许 owner 通过 {transferFrom}消费剩余的代币数量
function allowance(address owner, address spender)
external
view
returns (uint256);
// 调用者设置 spender 消费自己amount数量的代币
function approve(address spender, uint256 amount) external returns (bool);
// 将amount数量的代币从 sender 移动到 recipient ,从调用者的账户扣除 amount
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
// 当value数量的代币从一个form账户移动到另一个to账户
event Transfer(address indexed from, address indexed to, uint256 value);
// 当调用{approve}时,触发该事件
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
// ERC20 标准中可选元数据功能的接口
interface IERC20Metadata is IERC20 {
// 返回代币名称
function name() external view returns (string memory);
// 返回代币符号
function symbol() external view returns (string memory);
// 返回代币的精度(小数位数)
function decimals() external view returns (uint8);
}
// 提供有关当前执行上下文的信息,包括事务的发送者及其数据。 虽然这些通常可以通过 msg.sender 和 msg.data 获得,但不应以这种直接方式访问它们,因为在处理元交易时,发送和支付执行的帐户可能不是实际的发送者(就应用而言)。
// 只有中间的、类似程序集的合约才需要这个合约。
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _m
标准的IERC20智能合约实现
最新推荐文章于 2025-01-02 12:57:26 发布