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

很多人会把币圈、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 方法
ERC-20 方法
  • decimal :这个属性代表了代币的最小单位, 例如设置为 8 ,就表示持有者可以拥有 0.00000001 单位个代币。注意一点,在上表中,只有decimal是非必要的。

  • approve & allowance:任何需要赋予第三方转移你的代币权限的操作,都涉及到这两个方法。举个例子说,小明他妈派他去买菜,妈妈告诉小明:“你可以用我钱包里的人民币,但是不能超过 100 元。”,这句话被钱包里的智能机器人听见,就起到了 approve 的作用。每次小明尝试从钱包里拿钱,机器人就会先计算小明用了这 100 块里的多少,然后汇报一个余额,如果超出 100 就会阻止钱包打开,这就和 allowance 作用类似。总结一下,就是 approve 负责赋予权限,allowance 负责鉴定权限,注意这里的权限都是仅限于当前合约下的 ERC-20 代币的。

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

事件

ERC-20 事件
ERC-20 事件

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

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

post image

总结

  • ERC-20 是以太坊上同质化代币最广泛采用的标准

  • 遵循这套标准的合约中,包含方法和事件两个概念

  • 这 6 个基本的方法,total supplybalance ofallowancetransferapprovetransfer from,实现了以太坊上不同代币的共有能力:包含代币的查询、转移、调用权限的授予和鉴定等

  • 如 OpenZepplin/Consensys 只是提供了标准的不同实现形式,理论上只要符合 ERC-20 标准的合约铸造的代币,我们都可以称之为 ERC-20 代币,也都具有上述能力,这是以太坊上所有非同质化代币相互交易和存储的基础


参考资料