文档章节

ERC-777以太坊新代币标准解读

汇智网教程
 汇智网教程
发布于 10/22 06:36
字数 1360
阅读 15
收藏 0

ERC777是一个新的高级代币标准,可以视为ERC20的升级版本,因此它解决了ERC20以及ERC223存在的一些问题,开发者可以根据自己的具体需求进行选型。

1、使用ERC820进行合约注册

有别于ERC20的自由散漫,ERC777利用了新的ERC820标准提供的集中式的智能合约注册表和合约接口实现查询功能,以实现某种程度的内省。中心化的注册机制有助于后向兼容性以及更好的功能扩展。一个期望调用ERC777的DApp或智能合约,就可以利用EIP-820返回的ITokenReceipt接口来确定目标合约是否实现了期望的接口。

2、ERC777概述

ERC777改进了ERC20代币中存在的很多不足,例如,ERC777支持操作员白名单,提供以太币兼容的send()接口,利用ERC20实现后向兼容等。下图展示了ERC777代币的转账实现流程:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l1uEb5mi-1571697124280)(erc-777-anatomy/transfer.png)]

要快速掌握以太坊区块链应用开发,推荐汇智网的在线互动教程:

以太坊DApp开发入门 | 以太坊电商DApp实战 | ERC721以太坊通证实战 Web3j以太坊开发详解 | Php以太坊开发详解 | Python以太坊开发详解 | C#以太坊开发详解 | Flutter以太坊开发详解 |

与ERC20相比,ERC777有以下方面的优势:

  • 采用与以太币一致的哲学发送代币,即采用接口send(dest,value,data)
  • 任何合约都可以定义收到代币时触发的tokensReceived事件,这避免了在ERC20代币 中存在的双重调用问题。
  • 合约和常规地址都可以通过注册一个tokensToSendtokensReceivedFunction 函数来控制或拒绝发送或接收的代币,避免ERC20代币中存在的代币卡死问题。
  • 代币持有者可以授权或回收管理其代币的操作员权限。这些操作员通常是交易所 合约或自动收费系统中的支付处理器。
  • 每个代币交易都包含userData数据字段,在操作员操作时也有类似的operatorData 字段,从而可以自由地将数据传递给接收方。
  • 可以后向兼容那些不支持tokensReceived函数的钱包。

3、ERC777规范

下面是ERC777规范的内容,完整描述可以到官网查看:

interface ERC777Token {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function totalSupply() external view returns (uint256);
    function balanceOf(address holder) external view returns (uint256);
    function granularity() external view returns (uint256);

    function defaultOperators() external view returns (address[] memory);
    function isOperatorFor(
        address operator,
        address holder
    ) external view returns (bool);
    function authorizeOperator(address operator) external;
    function revokeOperator(address operator) external;

    function send(address to, uint256 amount, bytes calldata data) external;
    function operatorSend(
        address from,
        address to,
        uint256 amount,
        bytes calldata data,
        bytes calldata operatorData
    ) external;

    function burn(uint256 amount, bytes calldata data) external;
    function operatorBurn(
        address from,
        uint256 amount,
        bytes calldata data,
        bytes calldata operatorData
    ) external;

    event Sent(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 amount,
        bytes data,
        bytes operatorData
    );
    event Minted(
        address indexed operator,
        address indexed to,
        uint256 amount,
        bytes data,
        bytes operatorData
    );
    event Burned(
        address indexed operator,
        address indexed from,
        uint256 amount,
        bytes data,
        bytes operatorData
    );
    event AuthorizedOperator(
        address indexed operator,
        address indexed holder
    );
    event RevokedOperator(address indexed operator, address indexed holder);
}

ERC777代币合约必须通过ERC820标准注册ERC777Token接口。基准单位必须是10¹⁸。

Logo

在这里插入图片描述

ERC777代币logo采用Creative Commons Attribution-ShareAlike 4.0授权,并且不可以用于广告、推广或其他任何不兼容ERC777的技术。

后向兼容性

ERC777没有引入后向不兼容问题,因此可以兼容之前的ERC20代币标准。

在这个RIP中,没有使用transfertransferFrom进行代币转账,而是使用sendoperatorSend来避免混淆与潜在的错误。与此同时,ERC777允许你实现ERC20中的transfertransferFromapproveallowance以便兼容ERC20。

因此一个代币合约可以同时实现ERC20和ERC777。只读函数例如namesymbolbalanceOftokenSupply以及内部数据例如余额映射表等都可以毫无问题的重叠使用。但是需要注意的是,以下函数是ERC777规范强制要求的:namesymbol,不过decimal并非ERC777标准中的要求。

两个标准中的写操作函数都是解耦的,可以彼此独立的操作。注意ERC20函数应当仅限于既有合约的调用。

如果代币合约实现了ERC20,那么它必须通过ERC820注册ERC20Token接口。如果合约支持切换启用或禁止ERC20的方法,那么每次进行切换时,该代币合约必须通过ERC820注册或解除RC20Token接口的注册。

对于实现ERC20的新合约而言,唯一的区别在于ERC777TokensSender和ERC777TokensRecipient通过ERC820的注册必须早于ERC20的注册。这意味着即使是对ERC20的transfer方法的调用,代币合约也必须通过ERC820检查fromto是否实现了tokensToSend/tokensReceived接口并在可用时进行调用。注意当调用合约的ERC20的transfer方法时,如果合约没有实现tokensReceived接口,那么transfer也应当被接受,这意味着代币可能会被锁定。


原文链接:ERC777 vs. ERC20 - 汇智网

© 著作权归作者所有

汇智网教程
粉丝 18
博文 255
码字总数 315863
作品 0
东城
私信 提问
一步步教你创建自己的数字货币(代币)进行ICO

【汇新云】为大家定期更新文章,【汇新云】IT软硬件项目商务平台 本文从技术角度详细介绍如何基于以太坊ERC20创建代币的流程. 写在前面 本文所讲的代币是使用以太坊智能合约创建,阅读本文前...

久随
2018/03/06
0
0
ETH 800 亿美元市值的幕后功臣:ERC20

  “之前有大佬宣传10分钟可以创建并发行一个数字货币,是这样么,本文从技术的角度分析,为什么ETH上发币体验如此极致。”   前几天Roy Li讲ETH生态,提到ETH的用户体验做的非常好,确实...

乌镇智库
2018/02/26
0
0
你养的加密猫到底是什么——ERC721解析

是什么 知识星球 待字闺中官方区块链知识星球,已经有接近500人加入星球,期待你的加入。 一起讨论区块链、数字货币。做区块链社区中的精品良心社区。 往期推荐: 扒一下互联网公司的区块链布...

待字闺中
2018/02/28
0
0
以太坊ERC标准简介:ERC20/ERC721/ERC223/ERC621/ERC827

最著名的两个以太坊通证标准是代币标准ERC20和数字资产标准ERC721。在本文中,除了介绍这两个流行的ERC标准,还将介绍其他一些针对特定应用场景的ERC20改进标准:ERC223、ERC621和ERC827。 ...

汇智网教程
2018/05/03
234
0
以太坊通证标准包括(ERC20、ERC721、ERC223、ERC621、ERC827、RFC、EIP)

最著名的两个以太坊通证标准是代币标准ERC20和数字资产标准ERC721。在本文中,除了介绍这两个流行的ERC以太坊标准,还将介绍其他一些针对特定应用场景的ERC20改进标准:ERC223、ERC621和ERC...

马拉喀什
2018/05/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端的一些雕虫小技,从100%和滚动条说起

1、100%和滚动条 当我们在css中把html和body同时设为100%时,会出现滚动条 html, body { width: 100%; height: 100%; } 原因是html和b...

wphmoon
44分钟前
6
0
电力区块链应用案例【2019】

随着区块链技术的日益普及,出现了大量创业企业尝试使用区块链技术来解决能源与电力行业中存在的问题。在本文中,我们将介绍其中的三个能源区块链项目。 能源行业以价格不透明著称:消费者很...

汇智网教程
今天
7
0
聊聊rocketmq的adjustThreadPoolNumsThreshold

序 本文主要研究一下rocketmq的adjustThreadPoolNumsThreshold DefaultMQPushConsumer rocketmq-client-4.5.2-sources.jar!/org/apache/rocketmq/client/consumer/DefaultMQPushConsumer.ja......

go4it
今天
10
0
关于早起

早起是非常好的事情,但是像如果前一天睡得晚,或者第二天早上是非常冷的时候,那就不是很美好了。 但是本身早起是一件非常棒的事情,我记得我每次早起 如果不觉得困的话,世界是那么安静,脑...

T型人才追梦者
今天
7
0
Java输入输出

JDK中的InputStream/OutputStream构成了IO输入输出继承层次的基础。它们都是面向字节序列的,每次可以从序列中读入或者写出一个字节或者指定大小的字节数组。但是面向字节流的输入输出不便于...

ytuan996
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部