这篇文章主要讲解了“ERC777规范内容是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ERC777规范内容是什么”吧!
有别于ERC20的自由散漫,ERC777利用了新的ERC820标准提供的集中式的智能合约注册表和合约接口实现查询功能,以实现某种程度的内省。中心化的注册机制有助于后向兼容性以及更好的功能扩展。一个期望调用ERC777的DApp或智能合约,就可以利用EIP-820返回的ITokenReceipt接口来确定目标合约是否实现了期望的接口。
ERC777改进了ERC20代币中存在的很多不足,例如,ERC777支持操作员白名单,提供以太币兼容的send()
接口,利用ERC20实现后向兼容等。下图展示了ERC777代币的转账实现流程:
要快速掌握以太坊区块链应用开发,推荐汇智网的在线互动教程:
以太坊DApp开发入门 | 以太坊电商DApp实战 | ERC721以太坊通证实战 Web3j以太坊开发详解 | Php以太坊开发详解 | Python以太坊开发详解 | C#以太坊开发详解 | Flutter以太坊开发详解 |
与ERC20相比,ERC777有以下方面的优势:
采用与以太币一致的哲学发送代币,即采用接口send(dest,value,data)
。
任何合约都可以定义收到代币时触发的tokensReceived
事件,这避免了在ERC20代币 中存在的双重调用问题。
合约和常规地址都可以通过注册一个tokensToSend
或tokensReceivedFunction
函数来控制或拒绝发送或接收的代币,避免ERC20代币中存在的代币卡死问题。
代币持有者可以授权或回收管理其代币的操作员权限。这些操作员通常是交易所 合约或自动收费系统中的支付处理器。
每个代币交易都包含userData
数据字段,在操作员操作时也有类似的operatorData
字段,从而可以自由地将数据传递给接收方。
可以后向兼容那些不支持tokensReceived
函数的钱包。
下面是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¹⁸。
ERC777代币logo采用Creative Commons Attribution-ShareAlike 4.0授权,并且不可以用于广告、推广或其他任何不兼容ERC777的技术。
ERC777没有引入后向不兼容问题,因此可以兼容之前的ERC20代币标准。
在这个RIP中,没有使用transfer
和transferFrom
进行代币转账,而是使用send
和operatorSend
来避免混淆与潜在的错误。与此同时,ERC777允许你实现ERC20中的transfer
、transferFrom
、approve
和allowance
以便兼容ERC20。
因此一个代币合约可以同时实现ERC20和ERC777。只读函数例如name
、symbol
、balanceOf
、tokenSupply
以及内部数据例如余额映射表等都可以毫无问题的重叠使用。但是需要注意的是,以下函数是ERC777规范强制要求的:name
、 symbol
,不过decimal
并非ERC777标准中的要求。
两个标准中的写操作函数都是解耦的,可以彼此独立的操作。注意ERC20函数应当仅限于既有合约的调用。
如果代币合约实现了ERC20,那么它必须通过ERC820注册ERC20Token接口。如果合约支持切换启用或禁止ERC20的方法,那么每次进行切换时,该代币合约必须通过ERC820注册或解除RC20Token接口的注册。
对于实现ERC20的新合约而言,唯一的区别在于ERC777TokensSender和ERC777TokensRecipient通过ERC820的注册必须早于ERC20的注册。这意味着即使是对ERC20的transfer
方法的调用,代币合约也必须通过ERC820检查from
或to
是否实现了tokensToSend
/tokensReceived
接口并在可用时进行调用。注意当调用合约的ERC20的transfer
方法时,如果合约没有实现tokensReceived
接口,那么transfer
也应当被接受,这意味着代币可能会被锁定。
感谢各位的阅读,以上就是“ERC777规范内容是什么”的内容了,经过本文的学习后,相信大家对ERC777规范内容是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。