# 深入 ERC-20 标准 —— 币的基石

By [David Yang](https://paragraph.com/@davidyangplus) · 2022-03-01

---

很多人会把币圈、NFT 圈划开界限，虽然本人两个都炒，但是 2021 年 NFT 爆发以来，有很多曾经不炒币，甚至完全不懂区块链的的新人入圈买图片，整个 NFT 市场异常火热而且相对独立。这两个圈子不仅有交易人群上的区分，还在更底层的标准上有区别。

具体来说，币圈的交易标的是遵循 ERC-20 标准的同质化代币，NFT 圈交易标的是遵循 ERC-721/1155 标准的非同质化代币。这篇文章主要想拆解一下， ERC-20 到底是什么呢？

* * *

第一步当然是打开官方文档，以太坊的官方文档是这么说的：

> The ERC-20 introduces a standard for Fungible Tokens
> 
> ERC-20 引入了一个关于 "同质化通证（代币） "的标准

所谓同质化，指的就是每一枚代币“完全相同”，而这个相同包含了一切用途上的相同，正如我们手上的纸钞，每一张 100￥ 的钞票，不论新旧，不论编号、版次，我们都能买到市场价值为 100￥ 的大米、面粉或者一切别的商品。

其中的 ERC 全称“Ethereum Request for Comments” ，也就是“以太坊征求意见”。 ERC-20 则是这些“征求意见”中一种被广泛采用的方案。

两个概念
----

ERC-20 合约下有两个重要概念，一个叫**方法**（Method），一个叫**事件**（Event）。对于没有编程经历的读者，可以这么理解：

*   **方法**就是合约具有的某种能力，方法名就是你触发这种能力的口令，例如，你说一声`name`, 合约就会告诉你：“这个代币的名字叫 USDT！”
    
*   **事件**就类似于银行流水里的记录，“转入”、“转出”、“定期存款”、“活期存款”等等，为了记录在这个合约地址上发生了哪些事
    

### 方法

![ERC-20 方法](https://storage.googleapis.com/papyrus_images/9c228db915a245b815dc52bd32a0ebff91a0d166b4f5061d7c0766903ab6b6a3.png)

ERC-20 方法

*   `decimal` ：这个属性代表了代币的最小单位， 例如设置为 8 ，就表示持有者可以拥有 0.00000001 单位个代币。注意一点，在上表中，只有`decimal`是非必要的。
    
*   `approve & allowance`：任何需要赋予第三方转移你的代币权限的操作，都涉及到这两个方法。举个例子说，小明他妈派他去买菜，妈妈告诉小明：“你可以用我钱包里的人民币，但是不能超过 100 元。”，这句话被钱包里的智能机器人听见，就起到了 `approve` 的作用。每次小明尝试从钱包里拿钱，机器人就会先计算小明用了这 100 块里的多少，然后汇报一个余额，如果超出 100 就会阻止钱包打开，这就和 `allowance` 作用类似。总结一下，就是 `approve` 负责赋予权限，allowance 负责鉴定权限，注意这里的权限都是仅限于当前合约下的 ERC-20 代币的。
    

我们尝试把一个 ERC-20 合约理解成一个游戏客服，你可以随时去问他：我的角色名是什么？我的点券还剩多少？这游戏现在多少人玩？你也可以委托客服，帮我向某个人转多少游戏币。

### 事件

![ERC-20 事件](https://storage.googleapis.com/papyrus_images/c56f316497231bedc9995b8c12cf0200d5f9e8c9e42d4632848a6d1cdc4e309a.png)

ERC-20 事件

有个小细节：创建新代币的代币合约应该在创建代币时触发 Transfer 事件，并将 \_from 地址设置为 0x0，也就是说你会看到第一批产生的代币从 0x0 地址转出。

对于一些链上事件，我们通过 etherscan 上就能看到事件记录：

![](https://storage.googleapis.com/papyrus_images/57cfc0ad152f45556f26b7ed137d4d418790371f6bc92631afb153273d6e788d.png)

总结
--

*   ERC-20 是以太坊上同质化代币最广泛采用的标准
    
*   遵循这套标准的合约中，包含方法和事件两个概念
    
*   这 6 个基本的方法，`total supply`、`balance of`、`allowance`、`transfer`、`approve`、`transfer from`，实现了以太坊上不同代币的共有能力：包含代币的查询、转移、调用权限的授予和鉴定等
    
*   如 OpenZepplin/Consensys 只是提供了标准的不同实现形式，理论上只要符合 ERC-20 标准的合约铸造的代币，我们都可以称之为 ERC-20 代币，也都具有上述能力，**这是以太坊上所有非同质化代币相互交易和存储的基础**
    

* * *

**参考资料**

*   Fabian Vogelsteller, Vitalik Buterin, "EIP-20: Token Standard," _Ethereum Improvement Proposals_, no. 20, November 2015. \[Online serial\]. Available: [https://eips.ethereum.org/EIPS/eip-20](https://eips.ethereum.org/EIPS/eip-20).
    
*   [openzeppelin-contracts/ERC20.sol at abdb20a6bdb1700d58ea9e01b7471dafdef52a68 · OpenZeppelin/openzeppelin-contracts](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/abdb20a6bdb1700d58ea9e01b7471dafdef52a68/contracts/token/ERC20/ERC20.sol#L158)
    
*   [What Is ERC-20 and What Does It Mean for Ethereum?](https://www.investopedia.com/news/what-erc20-and-what-does-it-mean-ethereum/)

---

*Originally published on [David Yang](https://paragraph.com/@davidyangplus/erc-20)*
