erc20 区块链
摘要:
ERC20 是什么?(核心定义)ERC20 是一个技术标准(Technical Standard),而不是一个具体的代币,ERC:是 "Ethereum Request for C... ERC20 是什么?(核心定义)
ERC20 是一个技术标准(Technical Standard),而不是一个具体的代币。
- ERC:是 "Ethereum Request for Comments" 的缩写,意思是“以太坊意见征求稿”,它就像以太坊社区提出的一个“技术规范说明书”或“蓝图”。
- 20:是这个规范的编号,ERC20 是第 20 号提案。
核心比喻: 你可以把 ERC20 想象成 “USB 接口标准”。
(图片来源网络,侵删)
- 无论是 U 盘、键盘、鼠标还是移动硬盘,只要它们遵循 USB 标准,就可以插到任何电脑的 USB 接口上正常工作。
- 同样,任何代币,只要遵循 ERC20 标准,就可以在以太坊生态系统的钱包、交易所、DApp(去中心化应用)中无缝使用。
ERC20 的核心作用:为什么需要它?
在 ERC20 标准出现之前,每个开发者创建的代币都有自己的规则,互不兼容,A 代币的转账函数叫 send(),B 代币的叫 transfer(),钱包和交易所需要为每个代币单独编写适配代码,这造成了巨大的混乱和开发成本。
ERC20 标准的诞生就是为了解决这个问题,它规定了一个统一的接口,所有符合这个标准的代币都必须实现以下基本功能,从而确保了互操作性。
ERC20 的核心功能(接口规范)
一个 ERC20 代币必须实现以下至少 9 个函数和 2 个事件,你可以把它们看作是“说明书”上必须列出的功能清单。
必须实现的函数
| 函数名 | 描述 | 返回值 |
|---|---|---|
name() |
返回代币的全称,"USD Coin"。 | string |
symbol() |
返回代币的简称,通常是 2-4 个字母,"USDC"。 | string |
decimals() |
返回代币使用的小数位数,ETH 的 decimals() 是 18,表示最小单位是 1e-18 ETH。 |
uint8 |
totalSupply() |
返回代币的总供应量。 | uint256 |
balanceOf(address _owner) |
查询指定地址 _owner 拥有的代币数量。 |
uint256 |
transfer(address _to, uint256 _value) |
向地址 _to 转账 _value 数量的代币,调用者(msg.sender)的余额必须足够。 |
bool (成功返回 true,失败返回 false) |
transferFrom(address _from, address _to, uint256 _value) |
允许 _from 地址授权第三方(msg.sender)从其账户中转移 _value 数量的代币给 _to,这需要先调用 approve()。 |
bool (成功返回 true,失败返回 false) |
approve(address _spender, uint256 _value) |
授权 _spender 地址,可以从你的账户中最多提取 _value 数量的代币。 |
bool |
allowance(address _owner, address _spender) |
查询 _owner 已经授权给 _spender 的代币数量。 |
uint256 |
必须触发的事件
| 事件名 | 描述 |
|---|---|
Transfer(address _from, address _to, uint256 _value) |
每当发生代币转账时(无论是 transfer 还是 transferFrom),都必须触发此事件。_from 是转出地址,_to 是接收地址,_value 是转账数量。 |
Approval(address _owner, address _spender, uint256 _value) |
每当调用 approve() 函数修改授权额度时,必须触发此事件。_owner 是授权者,_spender 是被授权者,_value 是新的授权额度。 |
一个简单的例子:USDC (USD Coin)
USDC 是全球最知名的稳定币之一,它就是完全遵循 ERC20 标准创建的。
(图片来源网络,侵删)
- 它是一个代币:你可以把它存入钱包、发送给他人、在交易所交易。
- 它遵循标准:
name()返回 "USD Coin"。symbol()返回 "USDC"。decimals()返回 6。- 你可以用任何兼容 ERC20 的钱包(如 MetaMask)查看 USDC 余额。
- 你可以用任何支持 ERC20 的交易所(如 Uniswap, Coinbase)交易 USDC。
正是因为遵循了 ERC20 标准,USDC 才能如此广泛地被集成和使用。
ERC20 的工作流程与关键概念
理解 approve 和 transferFrom 是理解 ERC20 的关键,这涉及到代币授权机制。
场景: Alice 想让她的朋友 Bob 从她的钱包里,自动提取最多 100 个 USDC 代币,用于支付某个 DApp 的服务费。
-
授权 (
approve)(图片来源网络,侵删)- Alice 在她的钱包(如 MetaMask)中,调用 USDC 代币的
approve函数。 - 她输入:
_spender(被授权者): DApp 的智能合约地址。_value(授权额度): 100 (乘以decimals的数量,即 100 * 10^6)。
- 结果:
Approval事件被触发,DApp 的智能合约知道,Alice 授权了它最多可以提取 100 个 USDC。
- Alice 在她的钱包(如 MetaMask)中,调用 USDC 代币的
-
转账 (
transferFrom)- 当 Bob 使用 DApp 的服务时,DApp 的智能合约需要支付 USDC,它会调用 USDC 代币的
transferFrom函数。 - 它输入:
_from(转出方): Alice 的钱包地址。_to(接收方): 服务提供方的地址。_value(转账数量): 10 (即 10 * 10^6)。
- 结果:
- USDC 智能合约会检查 Alice 是否授权给 DApp 至少 10 个 USDC,检查通过。
- Alice 的 USDC 余额减少 10。
- 服务提供方的 USDC 余额增加 10。
- DApp 的授权额度从 100 减少到 90。
Transfer事件被触发。
- 当 Bob 使用 DApp 的服务时,DApp 的智能合约需要支付 USDC,它会调用 USDC 代币的
这个机制让 DApp 可以安全地代表用户进行代币操作,而无需用户主动发起每一次转账。
ERC20 的优点与缺点
优点:
- 互操作性:最大的优点,所有 ERC20 代币都可以在同一个生态中兼容,极大地降低了开发和使用成本。
- 标准化:开发者和用户都有了一个清晰、统一的预期。
- 广泛支持:几乎所有以太坊钱包、交易所和 DeFi 协议都原生支持 ERC20 代币。
- 可组合性:这是 DeFi 的核心,你可以将不同的 ERC20 代币组合起来,用于提供流动性、借贷、交易等复杂操作,在 Uniswap 上交易 ETH 和 USDC,两者都是 ERC20。
缺点:
- 交易费用:在以太坊主网上,每笔 ERC20 代币的转账或授权都需要支付 Gas 费,这有时会变得非常昂贵。
- 安全性风险:一旦你授权 (
approve) 了一个恶意的 DApp,它就可能窃取你授权的全部代币,历史上发生过很多“授权攻击”事件。 - 可扩展性限制:以太坊主网的交易处理速度有限,导致网络拥堵和高 Gas 费问题。
ERC20 的演进与未来
由于 ERC20 存在的一些缺点,社区也发展出了新的代币标准,
- ERC777:一个更先进的代币标准,提供了更好的用户体验(如发送时附带数据)、更强的安全性(防止意外授权)和更灵活的钩子函数。
- ERC1155:多代币标准,它允许在一个智能合约中管理多种代币(就像游戏里的一个背包可以装装备、材料、货币等),极大地提高了效率,特别适用于游戏和 NFT 领域。
尽管有这些新标准,ERC20 依然是使用最广泛、最重要的代币标准,是理解区块链代币经济的基础。
| 特性 | 描述 |
|---|---|
| 本质 | 一个以太坊代币的技术标准/接口规范。 |
| 作用 | 确保所有代币都具有统一的转账、查询、授权等功能,实现互操作性。 |
| 核心功能 | name, symbol, decimals, totalSupply, balanceOf, transfer, transferFrom, approve, allowance。 |
| 关键机制 | 通过 approve 授权,再由 transferFrom 执行代币转移,实现第三方支付。 |
| 优点 | 生态兼容、标准化、可组合性强。 |
| 缺点 | Gas 费高、存在授权安全风险。 |
| 地位 | 以太坊生态的基石,是迄今为止最重要和最广泛使用的代币标准。 |
文章版权及转载声明
作者:咔咔本文地址:https://jits.cn/content/19419.html发布于 2025-12-02
文章转载或复制请以超链接形式并注明出处杰思科技・AI 股讯



还没有评论,来说两句吧...