这周(译者注:原文发表于9月15日)的早些时候,ERC-20 token接口正式成为了改进协议,明确了其定义。这篇文章会简单介绍各种符合ERC-20标准的token,解释ERC-20的特征和功能,以供读者了解什么是token合约,以及开发者应该如何使用该标准。
ERC-20最初作为一种尝试,旨在为以太坊(Ethereum)上的token合约提供一个特征与接口的共同标准,并且,它现在已经被证明是非常成功的了。ERC-20有很多好处,包括允许钱包显示数以百计不同token的账户余额;创建一个交易工具,只需提供token合约的地址就可以将更多token列入表中。创建ERC-20兼容token的好处很多,以至于在今天,很少有其他token合约用其他方式创建。
Token合约是什么?
现在仍存在着大量关于“token合约到底是什么”的争论。本质上来说,一个token合约就是一个包含了一个对账户地址及其余额的映射的智能合约(Smart Contract)。账户余额表示一种由合约创建者定义的值:一个token合约也许使用余额来表示物理对象,或是表示另一种货币价值,还可以表示持有人的名誉。余额的单位通常被称为token。
当token从一个账户被转移到另一个账户的时候,token合约更新两个账户的余额。比如,一笔从 0x2299…3ab7 到 0x1f59…3492 的10个token的转账将导致余额列表如下图所示进行更新:
如果该token合约允许的话,变更一种token的总供给可能有两种办法。token的总供给可以通过铸造新token来增加。举个例子,铸造出100个token到地址 0x4ba5…ae22 将导致余额如下图所示进行更新:
token的总供给也可以通过“销毁”现有的token来减少。比如, 0x4919…413d 销毁了50个token,这将导致余额如下图所示更新:
销毁token的另一种方式是将token发送到一个未创建私钥的地址,通常来说就是0地址。这会使得这些token不可用,在这方面,它与销毁token有同样的效果,但并没有减少token的总数。比如, 0x93f1…1b09 用此种方式销毁了50个token将导致如下图所示的余额:
简单的token合约在一个从地址到余额的映射中保存上述信息。当更多复杂的情景出现时,比如发放股息,替代性结构或者增补性结构常常要变得更强悍。但是,不管那些操作上的细节的话,对外部可见的token余额总是像上面的图示那样的。
一个ERC-20 token合约的定义
一个ERC-20 合约是通过合约的地址以及它可用的token总供给来定义的,但它通常还提供一些非必须的东西,也是为用户提供更多细节。它们包括该token的名字、标志、小数位。这些中的每一个都会包括在下面的细节中。
在深入到细节之前,理解这件事情是重要的:token合约没有一个中心化的登记处,因此无法保证特定名字和符号的唯一性。一旦你已经创建了一个token合约,你应该请求将它加入公共站点,比如:Etherscan,MyEtherWallet 以及 CoinMarketCap。当然,确保符合网站上的说明可以最大化你的申请被接受的机会。
Token合约的名字乃是该token合约应该被知道的完整名称,比如“My Token”。名字的长度没有限制,但完整名称在一些钱包应用中更容易显示不完全,所以,最好让名字短一点。
Token合约的标志乃是该token合约应该被知道的符号,比如“MYT”。广义上,它是股票代码的对应物,而且,虽然没有严格的长度限制,但它在长度上常常是3或4个字母。
小数位常常是混淆的来源,但经过合理的解释这是非常容易理解的。小数位意味着一个token的可切分性,从0个小数位(即完全不可