简单来说,ERC20是以太坊上的一种技术标准,用于创建和发行代币(Token)。它规定了一系列所有以太坊代币都必须遵守的基本规则,从而确保这些代币能够与以太坊生态系统中的各种应用程序(如钱包、交易所、智能合约)无缝协作。

您可以把它想象成 USB标准。全世界所有的USB设备(U盘、键盘、手机)和所有的USB接口都遵循同一套规则,所以它们可以即插即用,而不用担心品牌或生产商不同。ERC20就是以太坊代币世界的“USB标准”。
核心概念
ERC: 代表 Ethereum Request for Comments(以太坊意见征求稿)。它是一系列旨在为以太坊社区提供改进建议的文档编号。ERC20就是其中的第20号提案。
标准: 它不是一个软件或代码,而是一个规范或接口。代币开发者通过在自己的智能合约中实现这个接口,来使他们的代币成为ERC20代币。
ERC20标准规定的必须实现的6个核心功能
为了让一个代币成为ERC20代币,其背后的智能合约必须至少实现以下6个基本函数:
totalSupply()
:作用: 获取该代币的总供应量。
例子: 查询像USDT、UNI这样的代币总共发行了多少枚。
balanceOf(address _owner)
:作用: 查询某个特定地址(_owner)的账户余额。
例子: 查看你的钱包里有多少个这个代币。
transfer(address _to, uint256 _value)
:作用: 向地址
_to
发送数量为_value
的代币。例子: 你向朋友转账10个代币。
transferFrom(address _from, address _to, uint256 _value)
:作用: 从一个地址(_from)向另一个地址(_to)转移代币。这通常用于允许第三方(如交易所)代表你花费你的代币。
例子: 你在Uniswap上进行交易时,智能合约需要从你的账户中划走代币给对方。
approve(address _spender, uint256 _value)
:作用: 授权另一个地址(_spender)可以从你的账户中最多花费指定数量(_value)的代币。
例子: 在授权交易所替你操作时,你需要先调用这个函数。
allowance(address _owner, address _spender)
:作用: 查询
_spender
地址仍然被允许从_owner
地址那里花费多少代币。例子: 检查你之前授权给某个DeFi协议的额度还剩多少。
此外,标准还定义了 2个可选的事件(Event) 和 3个可选的数据字段(代币名称、符号、小数位数),这些现在已成为惯例。
name
(可选): 代币的全名(如:USD Tether)symbol
(可选): 代币的缩写(如:USDT)decimals
(可选): 代币支持的小数位数(如:18,表示1个代币可以细分为 10^18 份)
为什么ERC20标准如此重要?
互操作性:
这是最重要的原因。因为所有代币都遵循同一个规则,钱包(如MetaMask)、去中心化交易所(如Uniswap)、借贷平台(如Aave)等应用程序只需要编写一套代码就可以支持所有ERC20代币。如果没有这个标准,每个应用都需要为每种新代币进行定制开发,生态将无法发展。降低了发币门槛:
开发者无需从零开始编写复杂的代币合约。他们可以使用经过审计的、标准化的模板(如OpenZeppelin库中的ERC20合约)来快速、安全地部署自己的代币。建立了一个繁荣的生态:
绝大多数在以太坊上发行的代币都是ERC20代币,包括著名的稳定币(USDT, USDC, DAI)、治理代币(UNI, AAVE) 和无数其他项目代币。它构成了整个DeFi(去中心化金融)和大部分NFT项目的基础设施层。
ERC20的局限性
尽管非常成功,ERC20也存在一些缺陷,后续的其他标准试图弥补:
无法处理非代币交易: 早期有些项目误将ERC20代币直接发送到交易所的智能合约地址(而非充值地址),导致代币永久丢失。这是因为ERC20标准最初没有设计处理这种情况的机制。
功能单一: ERC20标准只定义了代币的基本转账功能。对于更复杂的功能(如投票、质押、收益 farming),需要其他标准(如ERC721 for NFTs, ERC1155, ERC777等)或自行扩展。
总结
ERC20是以太坊网络中最基础、最重要、应用最广泛的代币标准。它通过规定一套统一的规则,确保了不同代币之间的兼容性,极大地降低了发行代币的技术门槛,并成为了构建整个以太坊DeFi生态的基石。