﻿---
title: "ERC-20"
description: "ERC-20 是以太坊同质化代币的标准接口。了解余额、转账、额度和授权如何运作，以及这一标准不保证哪些事项。"
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ERC-20

> 仅供教育用途，不构成投资建议。投资可能导致损失。

<a id="answer"></a>

## 直接答案

ERC-20 是以太坊上同质化代币合约的标准接口。钱包、交易所和去中心化应用可以使用相同的调用来读取供应量或余额、转移代币，以及授权另一个地址在限定额度内支出。同质化是指同一代币的等量单位可相互替代。

核心接口包括：

- 用于读取供应量和账户余额的 `totalSupply` 与 `balanceOf`；
- 用于转出调用者代币的 `transfer`；
- 用于设置和读取支出方额度的 `approve` 与 `allowance`；
- 用于在额度内从所有者余额中支出的 `transferFrom`；以及
- 用于记录转账和授权的 `Transfer` 与 `Approval` 事件。

这一标准定义的是互操作性，而不是资产质量。符合 ERC-20 并不保证供应量固定、市场价值公允、能够赎回、具有流动性、管理安全，甚至不保证各种实现的行为完全一致。

<a id="mechanism"></a>

## 运作方式

ERC-20 余额是代币合约状态中与某个地址关联的一条记录。钱包只是显示该状态，并不持有单独的代币文件。当 `transfer(to, amount)` 成功时，合约会减少调用者的余额、增加接收方的余额，并发出 `Transfer` 事件。用户通常以 ETH 支付网络 Gas。如果执行回滚，代币状态变更会被撤销，但已经消耗的 Gas 不会全额退还。

委托支出使用额度。调用 `approve(spender, amount)` 会设定该支出方可以从调用者余额中使用的金额。随后，支出方可以调用 `transferFrom(owner, to, amount)`，而 `allowance(owner, spender)` 会显示剩余额度。一项授权只属于一个网络上一份代币合约中的一组所有者与支出方，并非对钱包内全部资产的许可。

再次调用 `approve` 会覆盖原有额度。EIP-20 规范提醒用户界面，在把现有额度改为另一个非零值之前，先将其设为 `0`；否则，交易排序可能使支出方同时使用新旧两个额度。把额度设为 `0` 可以阻止该所有者、支出方与代币组合未来的 `transferFrom` 调用，但不能追回已经转出的代币。

在 EIP-20 中，`name`、`symbol` 和 `decimals` 是可选的元数据方法。`decimals` 影响显示单位，不影响合约中的整数记账。该标准也不规定代币如何铸造或销毁、转账能否暂停或征税、地址能否被冻结，或代理逻辑能否升级。这些行为必须通过已部署代码、当前实现和管理权限来核查。

<a id="example"></a>

## 示例

假设一个钱包持有 1,000 单位的 ERC-20 代币，用户想通过去中心化交易所路由器兑换其中 100 单位。用户先提交 `approve(router, 100)`。如果成功，路由器就可以调用 `transferFrom(user, pool, 100)`；全部支出后，通常的剩余额度为 0。授权交易和兑换交易是两项独立的链上操作，因此可能各自需要 Gas，也可能分别失败。

批准可设置的最大值可以避免反复授权，但如果路由器、其升级权限或用于获取授权的界面遭到入侵，就会有更大金额在更长时间内处于风险中。限定额度可以缩小这种风险敞口，但无法消除智能合约、代币价格、流动性或交易风险。

<a id="risks"></a>

## 风险

- **合约或网络错误：** 名称、符号和图标都可以仿冒；请核实目标网络上的合约地址。
- **额度过高：** 恶意或遭到入侵的支出方可能使用尚未用完的额度，直至批准上限。
- **非标准行为：** 一些广泛使用的代币不会完全按预期返回值，另一些则会收取转账费、对余额进行重基准、屏蔽地址或暂停转账。
- **管理控制：** 铸造、冻结、升级或其他特权操作可能在用户取得代币后改变其风险。
- **转账无法追回：** 将代币发送到错误地址或无法处理代币的合约，可能导致资产无法找回。

ERC-20 标准化降低了集成阻力，但不会消除合约、发行方、托管、市场或操作风险。签名前，请检查网络、代币合约、支出方地址、授权金额和交易调用。

<a id="misconceptions"></a>

## 常见误区

### 误区 1：标注 ERC-20 就能证明代币合法可靠

任何人都可以用熟悉的名称或符号部署合约。这个标签只表明其接口声称符合标准。应先核实合约地址，再分别评估代码、权限、发行方、流动性和市场。

### 误区 2：授权会立即转出获批额度内的代币

`approve` 通常只会更改额度，本身并不会把代币转给支出方。之后的 `transferFrom` 调用才会移动代币。不过，尚未使用的额度是一项真实权限，在被用完、替换或设为 `0` 之前可能一直有效。

### 误区 3：所有 ERC-20 代币的行为都相同

该标准只规定最低限度的通用接口。它不要求采用某种供应政策，也不禁止费用、暂停、黑名单、重基准或可升级性。集成方必须根据实际实现处理，而不能只依赖 ERC-20 标签。

<a id="related"></a>

## 相关主题

- [社交恢复钱包](/zh-cn/crypto/social-recovery-wallet/)
- [代币标准](/zh-cn/crypto/token-standard/)
- [Coin 和 Token 有什么区别？](/zh-cn/crypto/token-vs-coin/)
- [钱包授权](/zh-cn/crypto/wallet-approval/)
- [ZK Rollup](/zh-cn/crypto/zk-rollup/)

<a id="sources"></a>

## 来源

- [ERC-20: Token Standard](https://eips.ethereum.org/EIPS/eip-20) - Ethereum Improvement Proposals（查阅日期：2026-08-20）
- [ERC-20 Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/) - Ethereum.org（查阅日期：2026-08-20）

Source: https://wiki.fcontext.com/zh-cn/crypto/erc20/index.mdx
