手机版
扫描查看手机站
首页 > 文章 > 加密世界 > 正文

以太坊科普:理解ERC-20 token合约

时间:2025-07-01 15:49:00来源:525游

ETH(Ethereum)以太坊钱包基本概念介绍:https://www.jb51.net/blockchain/801260.html

这篇文章会简单介绍各种符合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。

以太坊科普:理解ERC-20 token合约

当token从一个账户被转移到另一个账户的时候,token合约更新两个账户的余额。比如,一笔从 0x2299…3ab7 到 0x1f59…3492 的10个token的转账将导致余额列表如下图所示进行更新:

以太坊科普:理解ERC-20 token合约

如果该token合约允许的话,变更一种token的总供给可能有两种办法。token的总供给可以通过铸造新token来增加。举个例子,铸造出100个token到地址 0x4ba5…ae22 将导致余额如下图所示进行更新:

以太坊科普:理解ERC-20 token合约

token的总供给也可以通过“销毁”现有的token来减少。比如, 0x4919…413d 销毁了50个token,这将导致余额如下图所示更新:

以太坊科普:理解ERC-20 token合约

销毁token的另一种方式是将token发送到一个未创建私钥的地址,通常来说就是0地址。这会使得这些token不可用,在这方面,它与销毁token有同样的效果,但并没有减少token的总数。比如, 0x93f1…1b09 用此种方式销毁了50个token将导致如下图所示的余额:

以太坊科普:理解ERC-20 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个小数位(即完全不可切分)到18位小数(几乎是连续的),如果需要,可以有更多的小数位。从技术上来说,小数位的意义在于显示token价值在屏幕上的时候小数点后面跟着的位数。小数位存在的理由是以太坊并不处理有小数的数字,只显示整数的数字价值。考虑下面两个例子:

第一个例子是LicenseToken,一个为给定软件产品显示软件许可分配的token合约;持有一个LicenseToken,使用者就可以使用该软件。而持有小于1个的LicenseToken则没有任何意义,所以token创建者将小数位设为0。一些LicenseToken的持有人账户余额如下。

以太坊科普:理解ERC-20 token合约

可以看到,在这里有100份许可,主要被一个账户所持有。当用户购买一份许可的时候,一个token将从持有账户转账到购买者账户。而许可验证者可以查看一个特定的账户是否真的持有一个LicenseToken,然后做出相应的行动。

第二个例子是GoldToken,一个表示物理黄金所有权的token合约。合约创建者希望每单位表示1千克黄金的单位,但同样希望允许用户以克的级别(但不能更低)持有和交易黄金。因为以太坊并不支持小数因此1个token必须表示1克黄金,以及,为了向外界表示1000克作为单一的1Kg单位,小数位要设置成3(因为 10^3 克也就是1千克黄金才是token合约创建者希望显示为1token的单位)。一些GoldToken的持有者可以用图像表示在下方。

以太坊科普:理解ERC-20 token合约

在这里你可以看到总共有50Kg的黄金被表示出来(每token 1克乘以50,000个token)。

但是,如果小数位被设成3,用户的情形就会像下面这样:

以太坊科普:理解ERC-20 token合约

可以看到,将小数位设置成3在字面上就意味着在显示GoldToken余额的时候,应该有3位数跟在小数点后面。

小数位经常被称为是一个人性化的元素,因为它允许token合约定义他们希望余额怎样显示给用户。GoldToken并不在内部处理小数位,也从不将小数位用在它自己的计算中因为一切都是用克来计算的,但它允许用户使用黄金的共通单位(千克)而不是在合约中使用的单位(克)。

正如在上述GoldToken中显示的,可切分性的观念允许token合约显示非常小的小数值,并且token也常常把小数位设成18,以给予token一个近乎连续的价值范围。

总结一下,在决定要取几个小数位时,下述规则是应该被遵循的:

token合约表示的是一个不可切分的物体吗?(如果是)那么将小数位设为0

token合约表示的是一个有特定小数位的物体吗?那么将小数位设置到那个数字

如果上述两者都不是,请设置小数位为18

重要的是要知道小数位对合约创建的影响。被创建的Token数量应该等于token的全部数量,要求是10^小数位的倍数。正如在GoldToken例子中可以看到的,token创建者希望创建token来表示50千克的黄金,但因为3位小数,他们必须发行50,000 token(50×10^3)来做成这件事。

总供给是定义一个ERC-20 token合约的最后一个东西,并且,正如我们提到过的,它是唯一的强制参数。虽然在ERC-20说明书中并没有明确提到,但总供给的概念是简单的:总供给等于所有余额的和。上面的例子中一直显示着总供给,所以这里就无需赘述了。

一个ERC-20 token合约的功能

ERC-20 token合约拥有一系列的功能,允许用户发现用户的余额,也允许余额经过验证从一个账户转账到另一个账户。下面来描述一下这些功能。

balance()函数提供了被一个给定地址持有的token的数量。记住,任何人都可以查到任何地址的余额,正如所有数据在区块链上都是公开的。

从一个地址发送token到另一个地址有两种办法。tranfer()函数可以从信息发送者那里直接转一些token到林一个地址。记住,人们不会查验接收地址,因此确保接收者按预期的方式行动是发送者的责任。

虽然用transfer()来发送toke给另一个用户是很棒的,但当token要被用来为一个智能合约中的函数进行支付的时候,它就起不了作用了。这是因为,当智能合约运行的时候,它没办法获得哪个地址转账到哪里的细节,因此也就无法保证调用这个合约的用户已经支付了启动合约要求数量的资金。

想象一下,有一个合约Doer被部署在网络上。Doer拥有一个函数dosomething(),它要求10 Do token来运行。Joe希望调用dosomething(),也有50Do token在他的账户上。Joe怎样能够支付给Doer以致后者可以成功运行dosomething()呢?

approve()和transferFrom()是两个方程,它们使用一个两步过程,可以解决上面的问题。第一步,一个token持有者给另一个地址(常常是一个智能合约)批准从本地转出一个最大特定数量的token,也就是所谓的配额(allowence)。Token持有者使用approve()来提供这些信息。

以太坊科普:理解ERC-20 token合约

在上述例子中,第二行显示,地址为 0x1f59…3492 的Joe已经允许地址为 0xd8f0…c028 的Doer从Joe的账户中转出25个token。

一旦一个许可被创建,智能合约就可以从一个用户的配额中占用许可数量的token,作为该合约运行的一部分。继续这个例子。Joe现在可以调用dosomething(),而dosomething()可以使用transferFrom()以从Joe的账户中获得10个Do token, 然后开始它的工作。如果Joe的账户上没有10个token,或者配额低于10个token,dosomething()就会当机。

allowance()函数提供了允许从一个给定地址提取到另一个给定地址的token的数量。记住,任何人都可以查到任何地址的余额,正如所有信息在区块链上都是公开的。重要的是知道,配额是“软性”的,因为所有单独的或者累积的配额可以超过一个地址的余额。在上面展示的表格中,持有者 0x2299…3ab7 许可了最高500个token的转出,但他的余额,如上所示,只有90个token。任何使用allowance()的合约,在计算可用的token数量的时候,都必须额外考虑用户的余额。

一个ERC-20 token合约中的事件

ERC-20定义了在合约采取了相关行动的时候,两类事件是必须被触发的。第一类事件是Transfer(),就是放出从一个地址转移到另一个地址的token转移的细节。第二类事件是Approval(),就是放出从一个地址许可转移token到另一个地址的细节。这些可以被用来跟踪地址余额和配额的变更,而无需查询区块链。

铸造token会发出了一个带有o地址的Transfer()事件作为源。

当token被销毁的时候,没有事件会发出。因为这一点,ERC-20 token 合约常常通过transfer()发送token到0地址来销毁token,代替真正的销毁。

超越ERC-20

ERC-20提供了一个良好的基础来构建token合约,但也并不是没有问题。ERC-223协议提供了额外的特性和安全措施,但与ERC-20并不兼容。Token合约的建构在今天还要继续遵循ERC-20,而开发者应该跟踪 ERC-223协议,并为它做出贡献。

以上就是以太坊科普:理解ERC-20 token合约的详细内容,更多关于理解ERC-20 token合约的资料请关其它相关文章!


帝国战纪和帝国纪元是一个游戏吗(帝国战纪游戏怎么样) 宝可梦阿尔宙斯碎片有什么用(阿尔宙斯gf) Coinglass是什么平台安全吗?看盘软件Coinglass官方资料百科 冰原守卫者度假岛怎么去(冰原守卫者游戏视频) ipfs一币能涨到多少钱?IPFS值得投资吗? 问道手游狼和老虎哪个好(问道手游老虎好还是龙好) 帝国战纪游戏船坞怎么得到(帝国战纪战役攻略) 欧易交易所怎么做多做空?OKEX/欧易交易所做多做空操作教程 以太坊和比特币区别是什么?以太币和比特币哪个更有价值? 有没有不烧钱的古风武侠游戏(不花钱的古风手游) 苹果手机nfc怎么复制门禁卡?iOS 15 最强新功能抢先体验 和平精英改了名字之后要过多久可以改第二次(和平精英改名后几天可以再改) 阴阳师两面佛怎么获得(阴阳师ssr两面佛的获取方式) HitBTC数字货币交易所注册流程全解析 王者荣耀战力够了怎么没有称号(王者荣耀战力够了却没有称号) 端游cf生化头上血条怎么弄的(cf生化显示血条的角色) 猫币兑人民币今日价格行情,(CAT/CNY)实时汇率历史走势 一文弄懂区块链和以太坊智能合约的由来和运行原理 江南百景图印章怎么获得(江南百景图截图印章有什么用) DNF贵族机要小队模式需要奶吗(贵族1需要多少钱) dnf武器幻化武器哪个好看?幻化最高成本武器来了 问道手游狰兽在哪里(问道狰兽在哪个地图) 和平精英多久可以改一次名字(和平精英几天能改名一次) 王者荣耀碎片商店多久更新一次2022(王者荣耀碎片商店多久更新一次?) AT币是什么币种?Artfinity/AT币全面介绍 闪电网络和雷电网络是什么?闪电和雷电网络的区别是什么? TEP是什么币种?邓普顿TEP币前景和价值分析 问道手游引灵幡满级是多少(问道引灵幡技能等级高有什么用) 第五人格慈善家怎么加点(第五人格慈善家天赋怎么点) 云顶之弈金鳞龙装备能重铸么(金龙鳞姿态) 在币圈怎么用几千赚几十万?币圈最挣钱的十种办法详解 宝可梦传说阿尔宙斯特典卡片有什么用(阿尔宙斯限定机) csgo受信任的启动怎么解决(csgo收信任的启动) 暗黑破坏神不朽传奇宝石怎么获得(暗黑破坏神不朽传奇宝石获得历史) xDai指南:如何在xDai网络中转移POAP NFT? 英雄联盟加载界面卡住切不出去怎么办(英雄联盟加载页面卡住) 元气骑士空中支援碎片怎么获得(元气骑士空中支援碎片在哪) dnf武器幻化有什么用2022(dnf武器幻化有什么效果) 和平精英淘汰效果是所有枪都能用吗(和平精英淘汰数是什么) cf高跳怎么跳(cf端游高跳怎么跳) 和平精英送皮肤必须满72小时吗(和平精英送皮肤必须三天以上好友吗) 有什么新出的网游游戏推荐(新出的网络游戏有哪些) cf浙江一区是什么战区(cf浙江一区和哪几个区合并) CHR币幻彩币怎么样?CHR币幻彩币未来价值如何 笔记本电脑无线上网的方法?笔记本怎么实现无线上网功能 梦幻新诛仙悟道丹怎么获得(梦幻新诛仙吾道丹) 五款剪辑软件(五款剪辑软件,那个更好用一些) 和平精英购买点券失败请重试怎么办(和平精英显示购买点卷失败) 建筑工程相关专业(建筑工程专业找工作最好的网站?) 洛克王国火云神怎么获得(洛克王国火云神是什么徽章) 媒体tomshardware公布2023年CPU排名(2023年cpu哪个性能最强) 蜀门手游土豪应该选择什么职业(蜀门手游月赚6000) 魔兽世界进入血色修道院任务在哪交(魔兽世界怀旧服血色修道院怎么进) OpenEx交易所合法吗怎么用?OpenSea中文NFT交易所App官网下载 英雄联盟手游ad卡牌怎么出装(lol手游ad卡牌出装) 比特儿交易所法币OTC交易操作教程 宝可梦传说阿尔宙斯御三家在哪抓(宝可梦传说阿尔宙斯宝可梦) 魔兽世界小龙人怎么解锁人形态(小龙人怎么打书) 哪些国家的比特币挖矿事业蒸蒸日上? 有没有什么不花钱的手游(不花钱的好手游) 2024挖一颗比特币要多久 ?挖比特币用显卡还是cpu 英雄联盟手游龙的传人能白嫖吗(英雄联盟龙的传人值多少) 和平精英极限追猎卫星楼的门怎么开(和平精英极限追猎探测仪怎么用) 有什么新出免费的回合网游游戏(免费回合制网游排行榜前十名) 冰原守卫者龙骨之地外围在哪里(冰原守卫者黑龙) 深入分析区块链出块速度越快越好吗?区块链出块奖励怎么算? gete.io/芝麻开门交易所怎么样?gate.io交易平台优势 ZB.com官网怎么登录不了?中币交易所ZB币官网登录入口 消逝的光芒2帧数怎么调(消逝的光芒2怎么全屏) 英雄联盟手游段位级别排列,英雄联盟手游排位升段机制详解 诛仙手游平民攻略(诛仙手游平民攻略图) 诛仙手游焚天炎武器怎么获得(诛仙武器外观焚天炎怎么获得) 以太坊是什么?以太坊的发展及以太币ETH历年价格走势(2016~2022) 穿越火线是哪国制作的游戏(穿越火线是哪一国的游戏) okex挖矿怎么挖?okex挖矿具体操作步骤 比特币害我家破人亡_比特币骗局全揭秘 冰原守卫者怎么更快提升龙的等级(冰原守卫者怎么快速升级) 宝可梦剑盾坚盾剑怪种族值多少(宝可梦剑盾坚盾剑怪技能表) 梦幻新诛仙探灵位置在哪(梦幻新诛仙探灵在哪里) 囤币是什么意思?为什么炒币不如囤币? 洛克王国石王技能怎么搭配(洛克王国石王技能搭配pvp) 使命召唤手游Koshka配件怎么搭配(使命召唤手游kac) 比特币季度合约交割时间具体是什么时候? 艾尔登法环太刀好用吗(艾尔登法环什么类型) 英雄联盟手游排位可以跨几个段位(英雄联盟手游可以跨段位排位吗) 我的世界工具匠的职业方块是什么(我的世界工具商的职业方块是什么) 第五人格邪恶天赋玩法介绍(第五人格邪恶的监管者) 王者荣耀遇见飞天是谁的皮肤(王者荣耀遇见飞天返场多少钱) 以太经典为什么不爆发?值得长期持有吗?以太经典币ETC前景价格预测 冰原守卫者各地图详解及攻略(冰原守卫者wiki) 区块链百科:密码朋克是什么意思? 自媒体app有哪些最赚钱?自媒体赚钱的十大平台排行榜 纯白和弦树脂有什么用(纯白和弦wiki) 穿越火线河南一区属于哪个战区(穿越火线河南一区和哪个区合区了) 魔兽世界纳拉克在哪(9.0纳拉克多久刷新) 地下城堡3塔莱辛魔像在哪里(地下城堡3 塔顶平台) 世界公认的冷钱包有哪些?盘点十大冷钱包 王者荣耀怎么向别人申请亲密关系(王者荣耀怎么申请亲密好友) binance中国官网地址入口?binance中国用户怎么注册 原神中适合培养的平民角色(原神平民培养什么)

热门文章

推荐专题

更多>>

游戏推荐

更多>>