ERC20 代币标准
ERC20 代币标准
以太坊改进建议:EIP-20: Token Standard
摘要
ERC20 标准允许在智能合约中为代币实施标准 API。该标准提供了转移代币的基本功能,并允许代币获得批准,以便其它链上第三方使用。
方法
name
- 返回代币的名称。
- 可选 - 此方法可用于提高可用性,但接口和其它合约不得期望这些值存在。
symbol
- 返回代币的符号。
- 可选 - 此方法可用于提高可用性,但接口和其他合约不得期望这些值存在。
decimals
- 返回代币使用的小数位数,比如
8
表示将代币数量除以100000000
得到其用户表示。 - 可选 - 此方法可用于提高可用性,但接口和其他合约不得期望这些值存在。
totalSupply
- 返回代币的总供应量
balanceOf
- 返回另一个地址为
_owner
的账户的账户余额
transfer
- 将
_value
数量的代币转移到地址_to
,并且必须触发Transfer
事件。如果消息调用者的账户余额没有足够的代币可以花费,则该函数应当throw
。 - 注意,
0
值的 Transfer 必须被视为正常传输并触发Transfer
事件。
transferFrom
- 将
_value
数量的代币从地址_from
转移到地址_to
,并且必须触发Transfer
事件。 transferFrom
方法用于提款工作流,允许合约代表您转移代币。例如,这可用于允许合约代表您转移代币和/或以子货币收取费用。除非_from
账户通过某种机制有意授权消息的发送者,否则该函数应当throw
。- 注意,0 值的 Transfer 必须被视为正常传输并触发
Transfer
事件。
approve
- 允许
_spender
从你的账户提款多次,直到_value
数量的金额。如果该函数再次被调用,它将用_value
覆盖当前的允许值。 - 注意:为了防止这里描述和讨论的攻击向量,客户端应该确保在创建用户接口时先将允许值设置为
0
,然后再为相同的花费者(spender)设置另一个值。尽管合约本身不应该强制执行它,以允许与之前部署的合约向后兼容。
allowance
- 返回仍然允许
_spender
从_owner
提取的金额。
事件
Transfer
- 必须在代币被转移时触发,包括
0
金额转账。 - 创建新代币的代币合约应当在创建代币时触发一个
_from
地址设为0x0
的Transfer
事件。
Approval
- 必须在任何成功调用
approve(address _spender, uint256 _value)
的地方触发。
实现
以太坊网络上已经部署了大量符合 ERC20 的代币。不同的团队编写了不同的实现,并且有着不同的权衡,比如从节省 gas 到安全性:
ERC20 代币标准
https://alphafitz.com/2022/10/22/erc20-token-standard/