理解ERC20代币合约
ERC20代币合约可以说在发币中算是听到非常多的一个名词了,说到发币都会想到这个合约。本文我们就谈谈如何理解ERC20代币合约。
有关ERC20标准可以参考官方文档,可以说比较抽象,使用Solidity描述的ERC20的接口。
ERC-20最初作为一种尝试,旨在为以太坊(Ethereum)上的token合约提供一个特征与接口的共同标准,并且,它现在已经被证明是非常成功的了。ERC-20有很多好处,包括允许钱包显示数以百计不同token的账户余额;创建一个交易工具,只需提供token合约的地址就可以将更多token列入表中。创建ERC-20兼容token的好处很多,以至于在今天,很少有其他token合约用其他方式创建。
什么是代币(token)合约
目前依旧有“代币(token)合约到底是什么”的争论。本质上来说,一个代币合约就是一个包含了一个对账户地址及其余额的映射的智能合约。账户余额表示一种由合约创建者定义的值:一个代币合约也许使用余额来表示物理对象,或是表示另一种货币价值,还可以表示持有人的名望。余额的单位通常被称为token。
当token从一个账户被转移到另一个账户的时候,代币合约更新两个账户的余额。例如,从 0x2299…3ab7 转移到 0x1f59…3492 10个token将导致余额列表如下图所示进行更新:
如果该token合约允许的话,改变token总体数量有两种方案。token的总数可以通过铸造新token来增加。举个例子,铸造出100个token到地址 0x4ba5…ae22 余额变更如下图所示:
也可以通过“销毁”减少token总量,比如,0x4919…413d 销毁50枚token将导致余额如下方式变化:
销毁token的另一种方式是将token发送到一个未创建私钥的地址,通常来说就是0地址。这会使得这些token不可用,在这方面,它与销毁token有同样的效果,但并没有减少token的总数。比如, 0x93f1…1b09 用此种方式销毁了50枚token将导致如下图所示的余额:
简单的代币合约在一个从地址到余额的映射中保存上述信息。当更多复杂的情景出现时,比如分红,替代性结构或者增补性结构往往更强一些。但是,不管操作上的细节的话,对外部可见的token余额总是像上面的图示那样的。
ERC20代币合约的定义
ERC20 合约是通过合约的地址以及可用的token总数来定义的,但通常还提供一些可选项目,也是为用户提供更多细节。比如token的名字
、符号
、小数位
等等。
在深入了解之前,必须明确一点:代币合约没有中心化的登记处,因此无法保证特定名字和符号的唯一性。一旦你创建了一个代币合约,你应该申请将它加入公共站点,如Etherscan,MyEtherWallet 以及 CoinMarketCap。当然,确保符合网站上的说明,可以最大限度提高申请被接受的机会。
代币合约的名字
是代币的完整名称,比如“My token”。名字长度没有限制,但是太长的话在某些钱包应用中可能显示不完整,所以最好保持名字的简洁。
代币合约的符号
是代币的符号,比如“MYT”。大体相当于股票行情自动收录机。尽管没有长度限制,但通常都是三四个字符长度。
小数位
这个概念通常容易混淆,通过解释还是很容易理解的。小数位
代表一个token的可分割程度,小数位可取值从0(完全不可分割)到18(几乎是连续的),甚至还可以更高。技术上讲,小数位
的数字就是显示在屏幕上小数点后面跟着的数字。存在小数位
的意义在于以太坊不处理小数,将所有的数字价值都当做整数处理。
总发行量
是ERC20代币合约最后定义的项,而且是唯一一个强制参数。尽管在ERC20标准中没有明确规定,但是定义总发行量
十分简单:总发行量
等于所有余额的总和。总发行量
在上面的例子中已经给出,无须赘述。
参考原文: https://medium.com/@jgm.orinoco/understanding-erc-20-token-contracts-a809a7310aa5 在原文基础上做了翻译和部分理解内容。