为什么会有这么多代币?
了解ERC-20如何让代币可以在以太坊各类应用之间通用,以及即便有了统一标准,为什么依然存在重要的风险。

速读
以太坊让程序可以被公开共享,而ERC-20则为许多这类程序提供了一种通用的方式,来表示彼此可以互换的单位。这节课会讲清楚:为什么有了标准,钱包和应用就能处理不同的代币;为什么代币和ETH、和网络本身不是一回事;以及哪些合约风险和授权风险仍然存在。
需要记住的要点
- 代币是智能合约在某条它并不拥有的网络上保存的记录,这也是为什么代币不会仅仅因为有了名字和符号,就自动拥有自己的区块链。
- ERC-20是一种兼容性接口,它能告诉你的只是钱包可以处理这个代币,并不能说明这个代币或其发行方是否可靠。
- 真正能识别一个代币的是合约地址和所在网络;名字、符号和图标都只是展示信息,任何人都可以照搬复制。
- 一次授权给出的是可以反复使用的支出权限,而不只是批准一笔转账,因此确认前务必先看清楚被授权的地址和额度。
可编程合约出现后,为什么代币会大量涌现?
以太坊让智能合约可以自己保存一份记录,记下有多少单位、又分别由哪些账户掌控。这些单位通常被称为代币(token)。代币可以代表许多不同的东西,但它并不会仅仅因为有了名字或符号,就拥有属于自己的区块链。
ETH则不同:它是以太坊的原生资产,用来支付Gas费。而ERC-20代币是以太坊上一份智能合约记录。在以太坊上转移这类代币,仍然需要用ETH支付网络手续费。
ERC-20统一了什么?
ERC-20是同质化代币的通用接口。有了它,不需要每个项目各自发明一套查询余额或发送代币的方法——只要合约兼容ERC-20,就会公开一组大家都熟悉的函数,例如balanceOf、transfer、approve和allowance。
这种统一的接口形态,让一个钱包或应用可以同时对接许多不同的代币合约,而不必为每一个都单独开发一套集成。这只是一条兼容性规则,并不代表每个代币都有相同的用途、发行方或风险水平。
| 问题 | ETH | ERC-20代币 |
|---|---|---|
| 规则来自哪里? | 以太坊的协议规则。 | 智能合约的代码,通常遵循ERC-20接口。 |
| 谁来支付以太坊的Gas费? | ETH。 | 转账仍然需要用ETH支付Gas费。 |
| 熟悉的名字或符号能证明什么? | 在这个语境下,它标识的就是原生资产本身。 | 本身几乎说明不了什么;名字和符号只是展示信息,不是安全检查。 |
为什么通用接口对应用来说很重要?
以太坊上的智能合约是公开的程序,其他应用都可以调用它们。当代币合约公开了一套大家熟悉的接口时,新应用就可以把现成的部件组合起来使用,而不用从零开始搭建。这被称为可组合性(composability):各个独立的组件可以协同工作,组合出一项新的服务。
可组合性可以解释,为什么同一个代币会出现在好几个不同的钱包、应用和交易场所里。但这并不意味着这些产品出自同一家公司,也不意味着每一次集成都经过了安全审查。
这项标准没有承诺什么?
ERC-20描述的只是一套接口,它并不说明一个项目是否值得信任、一个代币是否有价值、是否有资产或储备做支撑,也不说明合约的设计是否安全。就连标准里的name、symbol和decimals这几个方法,都只是为了方便使用而设的可选功能,所以一个看起来熟悉的名称,并不能证明身份或价值支撑。
真正决定使用的是哪个程序的,是合约地址以及它所运行的网络。一个在界面里看起来眼熟的代币,实际上仍然可能是一个毫不相关、规则完全不同的合约。把代币部署在以太坊上,并不代表以太坊对它做过任何审批或背书。
为什么授权是另一种风险?
ERC-20的转账(transfer)会直接移动代币。**授权(approval)**则不同:它设定一个授权额度(allowance),允许另一个地址——往往是一个智能合约——之后通过transferFrom来动用最多这个额度的代币。这项许可可以被反复使用,直到授权额度被用完或被替换为止。
这种灵活性有助于不同应用协同工作,但也意味着一次授权并不只是对某一笔转账的预览,而是依据代币合约的规则,授予某个特定被授权地址的一项许可。
结论
代币之所以大量涌现,是因为以太坊让智能合约可以自己保存一份记录,记下有多少单位、又分别由哪些账户掌控,而ERC-20则为这些合约提供了一种统一的方式,来响应余额查询或转账指令。正是这套共用的接口,让一个钱包可以同时处理成千上万种不同的代币,而不必为每一种都单独开发集成;也正是它,让新应用可以把现成的部件组合起来使用,而不用从零开始。
这项标准最关键的一点,就是它不会为任何事情做担保。ERC-20描述的只是一套接口,并不说明一个项目是否值得信任、一个代币是否有任何东西做支撑,也不说明它的合约是否被安全地编写。就连name、symbol和decimals,都只是为了方便展示而设的可选项,所以一个看起来熟悉的标签,并不能证明身份。真正能识别一个代币的,是它的合约地址和所运行的网络——界面里显示的任何内容,都不能替代对这两者的核实。
授权之所以值得单独关注,是因为它的行为方式和转账不一样。一笔转账只移动一次代币;而一次授权,则是给某个被授权地址一份授权额度,对方可以通过transferFrom反复支取,直到这个额度被用完或被替换。如果把授权提示只当作某一笔交易的预览,就低估了自己实际授予的权限。在确认授权之前,务必先确认被授权的是哪个地址,以及授权了多少额度。
标准帮助许多应用和资产共享了以太坊这个可编程环境。但这种实用性也意味着,会有更多活动来争夺同一个Layer 1网络的执行资源和区块空间。下一课将探讨,随着需求增长,一个共用的基础层为什么会变得昂贵或拥堵。
常见问题
ERC-20是以太坊上同质化代币的通用接口。一个兼容的合约会公开一组大家都熟悉的函数,例如balanceOf、transfer、approve和allowance,这样钱包和应用就可以处理许多不同的代币,而不必为每一种都单独开发集成。它只是一条兼容性规则,并不是在说明某个代币的用途或质量。
「币」(coin)通常指一个网络的原生资产,由该网络自己的协议规则发行和管理——比如比特币网络上的BTC、以太坊上的ETH。而「代币」(token)则是由运行在某条网络上、但并不属于该网络的智能合约所保存的一份记录。代币并不会仅仅因为有了名字、符号和价格,就拥有属于自己的区块链。
不是。ETH是以太坊的原生资产,它的规则来自以太坊协议本身,而ERC-20代币的规则则来自智能合约的代码。这是一个常见的混淆点,因为很多界面会把二者并排显示,但它们其实处在同一种体验下的不同层级。
需要。转移一笔ERC-20代币,本质上是在以太坊上发起一笔交易,而以太坊上的交易都要用ETH支付。如果你持有代币余额却没有ETH,就没办法为这笔转账付费——这也是为什么钱包里有时会显示一笔你实际上动不了的代币余额。
授权会设定一个授权额度,允许另一个地址——往往是一个智能合约——之后通过transferFrom动用最多这个额度的代币。和转账不同,这项许可可以被反复使用,直到授权额度被用完或被替换。风险在于,你授予的是某个特定被授权地址持续性的支出权限,而不只是批准某一笔转账。
不是。这项标准描述的只是合约可以如何被调用,并不说明它是否被安全地编写,背后的项目是否合法,也不说明这个代币是否有任何东西做支撑。把代币部署在以太坊上,并不代表以太坊对它做过审查或背书。
要看合约地址和它所运行的网络,因为真正决定用的是哪个程序的,正是这两样。名字和符号只是展示信息,任何人都可以重复使用,所以一个在界面里看起来眼熟的代币,实际上可能是一个规则完全不同、毫不相关的合约。核实地址时,请对照你本来就信任的来源,而不是别人发给你的链接。
可组合性是指各个独立的组件可以协同工作,组合出一项新的服务。因为智能合约是公开的程序,其他应用都能调用它们,所以新应用可以基于现有的代币合约来搭建,而不必从零开始。这可以解释为什么同一个代币会出现在很多钱包和交易场所里,但并不代表这些产品共用同一个运营方,也不代表每一次集成都经过了审查。
因为创建一个代币的成本很低,而且有了这个标准,它一诞生就能直接被使用。只要一个合约能自己保存一份单位记录,并公开ERC-20接口,现有的钱包和应用就能直接处理它,不需要任何修改。创建成本低,再加上即时的兼容性,这样的组合会产生数量庞大的代币,其中大多数并没有代表任何有实际意义的活动。
相关币种
继续学习
根据本课推荐的后续阅读。




