×
  • 澳门新莆京娱乐网站
  • 问卷调查
  • 问卷调查系统
  • 区块链
  • 大数据
  • 数据中心
  • 创建问卷
问卷调查系统工具软件推荐
区块链

777 代币合约

ERC-777 是一种新的代币合约标准,解决了 ERC-20 的一些安全问题,可以让合约创建者、代币持有者和受众在无需更改代币合约的情况下扩展其功能。ERC-777 从 ERC-20 和 ERC-223 等标准处汲取了很多想法,并在此基础上发展成为新一代标准,为开发者和用户提供了很多强大的特性。

本文主要介绍了代币合约,并讲解了 ERC-777 代币合约的特性、功能和用途。请注意,本文不涉及 ERC-20 。如果你想了解关于 ERC-20 代币合约的信息,可以看看另一篇文章(编者注:中译本见文末超链接《理解ERC-20 token合约》)。

什么是代币合约?

代币合约指的是一个包含了一组账户地址及其对应余额的智能合约,如下图所示。余额表示由合约创建者定义的一种价值:代币合约可以使用余额来表示实物、币值或持币者的声誉。一个单位的余额就是我们通常所说的代币。

需要注意的是,一个最终用户可能会拥有任意多个地址。造成这种情况的原因有很多,例如,用户想把自己所持有的代币分散到不同的逻辑账户(储蓄、税务、开支等)中,或使用不同的账户来代表不同的来源(ICO、投资、服务费支付等)。

每当代币从一个账户转移到另一个账户,代币合约就会更新这两个账户的余额。例如,从 0x2299…3ab7 向 0x1f59…3492 转移 10 个代币之后,余额更新情况如下表所示:

可以通过铸成新的代币来增加其总供应量(通常是代币合约所有者的功能)。例如,在 0x4ba5..ae22 中铸成 100 个代币,则余额的更新情况如下表所示:

代币的总供给量可以通过销毁已有代币来减少(如果合约允许的话,任何代币持有者都可以销毁代币)。例如,0x4919…413d 销毁了 50 个代币之后,余额的变化情况如下表所示:

简单的代币合约会将上述信息保存在地址与余额的映射表中。如果是在更复杂的场景下,如分红等,通常会另外采用更加强大的结构。然而,无论具体的实现细节如何,代币余额情况始终如上文的图表所示。

ERC-777 代币合约的运营者

ERC-777 代币合约引入了 运营者 的概念。运营者是代表代币持有者进行操作的第三方,可以将代币从持有者的地址转移出来。请注意,由于运营者拥有很大权力,应该谨慎添加。

每个地址都包含一个经授权的运营者列表,如上表所示:

如上表所示,代币持有地址 0x1f59…3492 拥有两个运营者,其他两个地址各自拥有一个运营者。当然了,没有运营者的地址也是有效的。

使用运营者的一个简单例子是,用户在多个地址代币上都有代币,必须分别管理这些地址。在一般情况下,在将代币从一个地址发送到另一个地址之前,要先确保发送者的地址内有一笔 ETH ,足以用来支付 gas 费用。因此,在将 ETH 从一个账户发送到另一个账户之时,发送者需要先完成几个交易,如下图所示:

如上图所示,地址 0x93f1…1b09 先向地址 0x1f59…3492 发送 ETH ,等待该交易完成后,地址 0x1f59…3492 向 0x4ba5…ae22 发送代币。如此繁多的步骤既降低了用户体验,又加大了网络负载量。

有了运营者之后,只要一个账户里有 ETH ,其他账户里有其他代币,即可由持有 ETH 的账户进行代币转账。接着上一个例子往下看,如果把 0x93f1…1b09 作为 0x1f59…3492 的运营者,那么由 0x1f59…3492 向 0x4ba5…ae22 发送代币的过程就可以简化为:

这就大大降低了用户的负担。此外,这可以让用户在通过一个运营者账户控制 ETH 资金的同时,确保其代币分散于多个持币账户之中。

运营者也有可能是合约的形式(即 “代币运营者合约”),而且在代币合约创建的时候就可以为所有持币者预先定义好代币运营者合约。这样一来,运营者可以为所有持币用户提供服务,同时其功能又被限制在智能合约的功能范围内,代币合约就可以不费吹灰之力地为持有者提供更多功能。后文将详细阐述代币合约运营者拥有哪些权力。

ERC-777 代币合约的定义

每个部署到以太坊上的 ERC-777 代币合约都会被分配一个地址,即代币地址。这个代币合约将会包含一些定义合约操作的参数。

首先要理解的是,由于代币合约缺少一个中心化的注册表,无法保证名称或符号具有唯一性。这样一来,获得并保有唯一身份的最佳方法就是公开你的代币合约。一旦你创建了一个代币合约,就应该把它添加到一些常用网站上,如 Etherscan、MyEtherWallet、MyCrypto 和 CoinMarketCap 等等,不过要确保遵守每个网站的要求,这样你的提交得到接受的可能性才最大。

代币合约的 name 就是用来指代合约本身的长名称,例如 “My token”。名称的长度并没有限制,但是一些钱包应用可能会将过长的名称截短,因此要将名称的长度控制在较短的范围内。

代币合约的 symbol 就是用来指代合约本身的短符号,例如 “MYT”。这个符号跟股票代码差不多,虽然没有长度限制,但是通常都在 3 至 4 个字符左右。

Solidity(以太坊主要使用的编程语言)不支持小数,但是可分割性对于代币来说是一个常见需求。ERC-777 采用的解决方案是,所有代币的内部所示数额均使用其实际数额的 1018 整数倍来表示。例如,终端用户看到的 1.2345 代币其实在内部是用 1.2345×1018 来表示的。这样一来,即使一个代币被分割成了 0.000000000000000001 ,在内部也依旧是以整数表示的,如下表所示:

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

人已赞赏
区块链

为什么LINK使用ERC

2019-11-19 12:12:23

区块链

Dragonfly Capital 研究员说,可攻破 Mimblewimble 隐私模

2019-11-19 12:13:27

问卷调查系统工具软件推荐
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索
XML 地图 | Sitemap 地图