准备将 ERC777 用起来了

  • Ashton
  • 更新于 2019-06-29 23:52
  • 阅读 3232

准备将 ERC777 用起来了

一直以来,在以太坊上创建代币都是用的 ERC20 协议,这个协议简单易实现,但确实存在着很多问题:

  1. totalSupply 具体表示什么模糊不清,有的合约用它来表示发行上限,但实际发行量是另外一个数字,有的合约用它来表示实际发行量,总发行量是另外一个数字。上周还有朋友问我为啥把 etherscan 上某个代币转账历史涉及的账户余额加起来和 totalSupply 不一致。

  2. decimals 不统一,增加很多麻烦。因为以太币的最小单位是 wei,一个 以太币有 10 ** 18 wei,decimals 和以太币不一致,就要单独存储和处理。

  3. 最要命的,把代币发送到合约上之后,合约无法感知,这可能会导致两种情况: a. 发送到合约的代币永远取不出来了。 b. 用户发送代币到合约后,需要另外一个交易来处理用户的转账。

这些问题,ERC777 都不存在了,并且 ERC777 和 ERC20 完全兼容。OpenZeppelin 也添加了对 ERC777 的支持,代码写起来也不太费事了。下面是基于 OpenZeppelin 的 ERC777 示例代码。

pragma solidity ^0.5.0;

import "openzeppelin-solidity/contracts/token/ERC777/ERC777.sol";

contract GLDToken is ERC777 {
    constructor(uint256 initialSupply, address[] memory defaultOperators) ERC777("Gold", "GLD", defaultOperators) public {
        _mint(msg.sender, msg.sender, initialSupply, "", "");
    }
}
点赞 0
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Ashton
Ashton
0x53b3...c54F
专注于 EVM 和比特币生态的区块链开发者