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

以太坊科普:理解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合约的资料请关其它相关文章!


消逝的光芒2幸存者感知怎么按不出来(消逝的光芒幸存者技能怎么刷) BNT币怎么样?BNT币历史最高价是多少? CREAM币怎么买?CREAM币交易和购买操作步骤教程 冰原守卫者75级副本怎么打(冰原守卫者武器大全) cf安全分怎么快速恢复(cf安全分查询官网) 炒币平台APP哪个最好?币圈目前最好的炒币软件2025排名 王者荣耀皮肤销量数据哪里看(王者皮肤累计销量排行榜) 火币网app怎么提现人民币教程(支付宝/微信/银行卡) 传奇超变sf哪里能玩(传奇超变sf999) OE交易所是合法的吗?OE交易所Web 3资金安全评测 王者荣耀钟馗S26怎么出装(王者荣耀钟馗的最强出装和铭文) HyperPay钱包OTC使用教程 波卡入门系列:什么是插槽拍卖?什么是Kusama? csgo玩什么模式容易掉箱子(csgo什么模式掉箱子快) csgo完美平台怎么实名认证(csgo完美平台怎么实名认证2022) 时空猎人赚钱详细攻略(时空猎人能挣钱吗能赚人民币吗) 欧易/okex交易所买比特币安全吗? 币安矿池怎么挖矿?币安矿池挖矿教程入门篇 火币提现手续费是多少?火币提现人民币手续费明细 三国志幻想大陆最强阵营(三国志幻想大陆最强队伍) 阴阳师小袖之手值得培养吗(阴阳师小袖之手怎么样) 45岁至50岁找工作还能做什么?4种职业推荐简单又靠谱 送元宝的放置手游有哪些(送元宝送vip的手游真的假的) 诛仙手游金币怎么交易(诛仙手游金币交易人工审核) 什么是BananoDOS?BananoDOS功能概述 USDT泰达币交易靠谱吗?USDT交易安全吗? 和平精英如何第二次实名认证(和平精英第二次实名认证怎么弄?) 洛克王国金爪狂狮怎么进化(洛克王国金爪狮王技能) Binance在中国还可以用吗?Binance US支持哪些国家用户与Binance区别分析 DeFi领域龙头币是什么?DeFi热门产品项目盘点 G币是什么有前景吗?G币最新价格今日行情未来价格预测 比特派钱包里Token工厂创建BSC、HECO、ETH链代币使用教程 ok币是什么意思?欧易平台币OKB介绍 如何进行OKEx期权交易?OKEx期权合约怎么玩? 以太坊imToken钱包转账失败的常见解决办法 STEX交易所如何充币?STEX交易所注册、充值、提现全教程 dnf100级超时空之战单人门槛是什么(dnf100版本单人超时空) UNI币最新价格行情,UNI币价格今日行情最新消息历史走势 区块链技术分为哪几方面?区块链技术的优缺点分析 芝麻交易所是哪个国家开的?芝麻交易所app下载最新版官网地址 创造与魔法基础魔法有哪些(创造与魔法六种魔法) 消逝的光芒2豪华版武器领不了怎么办(消逝的光芒2购买哪一种) 和平精英枪口往上飘灵敏度怎么调() 我的世界隐身药水怎么做?8分钟视频教程教你制作的详细步骤 区块链科普:加密货币的来历,演变历史 破解带拾取回收的传奇有哪些(实物回收传奇) 洛克王国破茧重生怎么选(洛克王国破茧重生推荐宠物) NFT项目有哪些?盘点值得重点关注的10个NFT项目 造梦4鱼纹多久返场一次(造梦4鱼纹头冠) 区块链扫盲:区块链中的空投是什么意思? JustSwap交易所手续费多少?JustSwap费用详细介绍 三款顶级应用(安卓手机必备黑科技软件推荐) 梦幻诛仙手游宝宝化生技巧(梦幻诛仙手游135级宠物化生) 比特币当周/次周/当季/次季合约是什么意思?一文读懂比特币合约类型 工作量证明共识机制 Bit-Z交易平台数字货币充值与提现教程 支持HECO火币生态链钱包有哪些?如何设置PC端以太坊钱包? 公链是什么意思?有哪些公链生态排名 okex是什么交易平台?一文了解okex交易平台 柴犬币SHIB是什么? 柴犬币SHIB详细介绍 宝可梦传说阿尔宙斯谢米在哪能抓(阿尔宙斯gf) Coinbase官网版App功能介绍,Coinbase交易所官网登录入口 进击的巨人第四季下半部什么时候出?2022明年1月份播出时间已定 英雄联盟鼠标灵敏度调成多少合适(英雄联盟鼠标设置灵敏设置) 创造与魔法中怎么获得青青猪(创造与魔法哪里刷青青猪几率大) csgo胸章可以在战绩栏显示吗(csgo胸章装备上就不能卖了么) dnf点卷充值充错了怎么办(dnf点券充值错了可以找回吗) 冰原守卫者佣兵实力怎么升(冰原守卫者攻略) 归零币是什么意思?归零币会不会被下架 科普:区块链为什么能防伪、防篡改? 王者荣耀怎么不花钱获得赵云(王者荣耀怎么样才能免费获得赵云) 比特币挖矿一定要用显卡吗? 非小号排名前50的交易所都有哪些?非小号全球交易所查询地址入口 xrp瑞波币最新消息_xrp瑞波币会归零吗 安币官网资料官方介绍,安币交易市场2025官网登录入口 什么手游网页游戏上线送vip(网页游戏会员app) 宝可梦阿尔宙斯传说三蜜蜂有几只眼睛(宙斯赐给蜜蜂武器告诉我们的道理是什么) 原神兰随尼在哪(原神兰随尼哪个武器好) 区块链ANY币在哪买?ANY币上线交易所大盘点 欧易/okex币交易手续费多少钱?okex币手续费怎么计算? 创造与魔法大船怎么收回(创造与魔法大船收回建筑还在吗) 冰原守卫者军团有啥用(冰原守卫者好玩吗) 币圈交易软件带监控提醒哪个好?币圈交易所app下载官网 哪里有无限元宝变态手游(无限元宝的游戏) win10分辨率怎么调 windows屏幕分辨率怎么调 csgo怎么删除机器人(csgo怎样删除机器人) 和平精英怎么发表情包(和平精英怎么发表情包动态) USDK币怎么卖?USDK币在欧易买卖交易操作教程 如何在币安创建API并绑定到威牛AI?币安创建API使用教程 binance中国能用吗?binance交易平台官网最新地址 csgo双ak到菊花要多少胜场(csgo 双ak) 创造与魔法怎么升等级才能很快(创造与魔法怎样升级才快?) 魔兽世界工程学分支哪个好(魔兽世界里的工程学) Trump币川普币今日行情最新消息,TRUMP特朗普币历史走势图 洛克王国黑炎怎么获得(洛克王国黑炎技能搭配) 宝可梦阿尔宙斯村民利一在哪里(阿尔宙斯去哪里抓) 元宇宙虚拟货币有哪些?盘点元宇宙虚拟货币 梦幻西游法宝任务攻略(梦幻西游法宝任务怎么过) Deribit是什么交易所?Deribit交易所团队成员介绍 不收押金可以在家做的手工活有哪些?四个可以操作的小项目真是可靠

热门文章

推荐专题

更多>>

游戏推荐

更多>>