江苏体彩网|首页_江苏体彩网官方

071-15024415

在线客服| 微信关注
当前位置: 首页 > 企业新闻

江苏体彩网|首页:ERC777 功能型代币(通证)最佳实践


江苏体彩网

江苏体彩网|首页|毕竟,很多同学都是ERC20创立过奖牌[1]。 也许你被上司拒绝在ERC20奖牌上建立一些可选功能。 如果有自由选择,就必须自由选择ERC777。

ERC20的问题是,有一天上司来找你(开发者),最近存钱很受欢迎。 我们也签约吧。 用户付钱给他算利息。

好像是非常简单的市场需求。 你答应说话,毕竟自己研究,用在ERC20的标准上是不可能的。 根据ERC20的标准,通过让用户再次调用ERC20的approve允许移动金额的存款栖息合同(这一步通常称为水平),可以灵活地完成两个客户组。

在某种程度上,ERC20标准没有账户通报机制,因此很多ERC20令牌误转移到合同后,很久不能转移货币,已经有很多ERC20因此故障。 例如,故障的QTUM[2]、故障的EOS[3]。 另一个问题是,对于ERC20帐户,有客户想让用户使用ERC20奖牌的销售商品。

由于帐户没有附加信息,用户的奖牌会移动,不会向用户明确销售哪个商品,因此需要额外的在线通信成本。 ERC777很好地解决了这些问题,ERC777也符合ERC20标准。 因此,强烈建议将新开发的令牌用于ERC777标准。

ERC777在ERC20中定义send(dest,value,data )并移动到令牌,send函数的附加参数用于加载其他信息,send函数检查所有者和接收者是否构建了适当的挂接函数ERC1820模块注册表合同即使是普通用户地址、网桌新闻网络,也可以在某种程度上建立ERC777账户的监听,一起听起来有点神秘,这是根据ERC1820模块注册表合同ERC1820是这种最重要的,所以ERC777要分别作为EIP卸下。 ERC1820是全球合同,在唯一的以太网链上拥有完全相同的合同地址,它始终是0x 1820 a 4b 7618 BDE 71 DC E8 CDC 73 AAB 6c 95905 FAD 24,该合同以非常精巧的方式展开。 ERC 1820合同的官方构建代码可以在ERC 1820文档[5]中查询。

下面说明合同构建的主要内容。 ERC1820协议涉及两个主要模块: setinterfaceimplementer (address _ addr,bytes32 _interfaceHash,address _implementer )。 名为getinterfaceimplementer (address _ addr,byte s32 _ interface hash ) externalviewreturns (address )的函数用于搜索地址() setInterfaceImplementer函数在记录地址(第一个键)的模块(第二个键)的构筑地址(第二个值) mapping(address=)的接口同源域中记录参数信息比较不合适的getInterfaceImplementer ()通过名为interfaces的mapping取得模块的构建。

ERC777用于send帐户时,所有者和收件人地址分别用于ERC1820的getInterfaceImplementer函数展开检索,调查是否有对应的构筑合同,ERC777标准规格中包含模块和函数名 ERC777标准规格ERC777模块ERC777为了构筑与ERC20的兼容性,除了检索函数与ERC20完全一致以外,与操作员模块使用的独立国家的命名(用完全相同的命令无法判别哪个基准, 要拒绝所有ERC777令牌合同,请使用接口er c777 token { function name () externalviewreturns (string memory ); function symbol () externalviewreturns (string memory ); functiontotalsupply () externalviewreturns (uint 256 ); functionbalanceof (地址保持器) externalviewreturns (uint 256 ); //定义代币大的区分粒度function granularity () externalviewreturns (uint 256 ); //操作员所涉及的操作员(操作员可以代表所有者发送和归档令牌的帐户地址) functiondefaultoperators () externalviewreturns (address [ ] memory 功能操作器(地址操作器,地址持牌器)外部视图(bool ); functionauthorizeoperator (地址操作器) external; functionrevokeoperator (地址操作器) external; //发送到令牌函数send (address to,uint256 amount,bytes calldata data) external。 functionoperatorsend (address from,address to,uint256 amount,bytes calldata data,bytescalldataoperatordata ) ees//令牌function b functionoperatorburn (地址从,uint256 amount,bytes calldata data,bytescalldataoperatordata ) external; //令牌发送事件event sent (addressindexedoperator,address indexed from,address indexed to,uint256 amount,bytes data, )//铸币事件event minted (addressindexedoperator,address indexed to,uint256 amount,bytes data, bytes operatorData) //令牌归档事件event burned (addressindexedoperator,address indexed from,uint256 amount,bytes data, bytes operatorData) //许可证操作员事件eventauthorizedoperator (addressindexedoperator,address indexed holder) //操作员事件eventrevor 接口定义在openzeppelin代码库[6]中搜索,路径为contracts/token/er c777/ier c777.sol。 模块解释和构建誓约所有ERC777合同除了需要构建上述模块外,还有必须遵守的誓约(ERC777官方文件必须广泛且屎.哭~ )。

ERC777合同必须通过ERC1820注册ERC777Token模块。 这样每个人都可以检查合同是否是ERC777标准的合同。 注册方法是:调用ERC1820注册合同的setInterfaceImplementer方法,参数_addr和_implementer都是合同地址, _interfaceHash是ERC777Token的keccak256哈希值(0xac7fbab5.177054)erc777构建ERC20标准时ERC777信息解释函数name (),symbol granularity ()用于定义代币较大的区分粒度(=1),拒绝在创立时制作原作,之后不能变更。 无论铸造货币、发送、存档工作者的奖牌数如何,都必须是粒度的整数倍。

granularity与ERC20的decimals不同,decimals用于定义小数位数,decimals是ERC20可选函数,为了与ERC20令牌兼容,decimals函数需要返回18 granularity根据大于位数(内部存储器)的区分粒度进行响应。 例如,0.5个令牌被存储为500,000,000,000,000 (0.5x 10 ^ 18 ),如果粒度为2,则大于账户单位是2 (500,000,000 ),相对于此,操作员ERC777定义了新的操作员角色每个住所都直观地移动自己的奖牌,将所有者和操作员的概念分离,可以得到更大的灵活性。 与ERC20的approve、transferFrom不同,没有具体定义批准后地址的作用。

此外,ERC777还可以定义轮廓操作员(轮廓操作员列表在代币创立时不能定义,不能变更)。 配置文件操作员是所有所有者允许的操作员,便于项目方管理奖牌。

与操作员相关的函数:提供•defaultOperators():奖牌合同配置文件的操作员列表. authorize revoke operator (address operator ) :必须取消msg.sender上的operator操作员的权限,并在启动时启动RevokedOperator事件。 isoperatorfor (地址操作器,地址持牌器) :是否是某个所有者的操作员。 发送给令牌ERC777令牌以send(address to,uint256 amount,bytescalldatadata ) externalfunctionoperatorsend (addressffind )这两种方法使用bytes calldata data, bytescalldataoperatordata ) externaloperatorsend通过参数operatordata加载操作者的信息,除了继续执行与令牌对应的账户馀额以外, 1 .如果所有者在ERC1820上注册了ERC777TokensSender构建模块,则令牌合同必须调用该tokensToSend挂接函数。

2 .如果收件人在ERC1820上注册了ERC777TokensRecipient构建模块,则令牌合同必须调用该tokensReceived挂接函数。 如果有tokensToSend挂接函数,则必须在更改余额状态之前调用。 如果有tokensReceived挂接函数,则必须在更改余额状态后调用。

5 .调用挂接函数及启动时事件时,tokensToSend和tokensReceived函数有可能根据该数据中止账户(启动时revert ),因此data和operatorData直接传送ERC777TokensSender接口被定义为接口er c777 tokens sender { functiontokenstosend (address to operator,address from,address ) 如果所有者希望在帐户时收到令牌迁移通报,则必须在ERC1820合同中注册和构建ERC777TokensSender模块(几天后有案例研究)。必须注意,对于所有ERC777合同,一个所有者地址不能注册一个ERC777TokensSender模块的构建。 因此,ERC777TokensSender的构建不会由多个ERC777合同调用。

在ERC777TokensSender模块的构建合同中,msg.sender是ERC777合同地址,不是操作者。 ERC777TokensRecipient接口定义如下:接口er c777 tokens recipient { functiontokensreceived (地址操作器,地址从)escalldataoperatordata ) external; 如果收件人希望在帐户时收到令牌转移通报,则必须在ERC1820合同中注册和构建ERC777TokensRecipient模块。 如果收件人是合同方,则必须注册和构建ERC777TokensRecipient模块(这可以避免令牌出现故障)。

如果不构建,ERC777令牌合同必须在revert中重置交易状态。 铸造货币和档案铸造货币(开采)是生成新货币的过程,档案货币被无视,在ERC20中没有具体定义这两个不道德,一般不传递transfer法和transfer事件。

ERC777定义代币从铸造货币转移到归档之前的整个生命周期。 ERC777没有定义铸造货币的方法名,只定义了Minted事件。 因为许多奖牌在创立时确认了奖牌的数量。

如果有必要的合同,可以自己定义铸造货币函数。 构建时拒绝铸造货币函数。

1 .启动时Minted事件2 .发行量必须加上铸造货币量。 收件人不是0,收件人余额加上铸造货币量。

3 .如果收件人在ERC1820上注册了ERC777TokensRecipient构建模块,令牌合同必须调用该tokensReceived挂接函数。 ERC777将两个函数定义为归档奖章(burn和operatorBurn ),使钱包和dapps有统一的模块交互变得容易。 拒绝构建burn和operatorBurn .需要启动时的Burned事件。

2 .总供应量必须增加代币归档量,所有者余额必须增加代币归档的数量。 3 .如果所有者是在ERC1820注册ERC777TokensSender中构建的,则需要调用所有者tokensToSend挂接函数。 请注意,零令牌数的交易(无论移管、铸造还是归档)也是合法的,在某种程度上与“粒度”(granularity )的整数倍一致,因此必须正确处理。 ERC777令牌构建了OpenZeppelin,构建了ERC777的基础合同。

要构建自己的ERC777令牌,必须由OpenZeppelin ERC777接管。 我想理解OpenZeppelin的ERC777的构建读者ERC777源代码分析[7]。 如果大家是Truffle开发(或Node工程),NPM install @ openzeppelin/contracts以发行2100个LBC7令牌的代码的方式追加open zeppelin合同库我是prage。 import ' @ open zeppelin/contracts/token/er c777/er c777.sol '; contractmyerc 777 iserc 777 { constructor (address [ ] memorydefaultoperators ) er c777 (' myer c777 ',' LBC7') _mint(msg.sender,M 构建主要有两个阶段:用基类ERC777的构造函数证明令牌名、符号及配置文件操作员(空可),调用_mint初始化发行量,注意发行量的小数位数是相同的18位(与ether一致),在合同内部拦截代币收款的我们假设有市场需要,即寺院为了建立功德箱合同并交接捐款,功德箱合同必须记录各赡养的善款金额。

此时,通过构建ERC777TokensRecipient模块完成了此操作。 代码也很简单: pragma solidity ^0.5.0import ' @ open zeppelin/contracts/token/er c777/ier c777 recipient.sol '; import ' @ open zeppelin/contracts/token/er c777/ier c777.sol '; import ' @ open zeppelin/contracts/introspection/ierc 1820 registry.sol '; contractmeritisierc 777 recipient { mapping (address=uint ) public givers; address _owner; IERC777 _token; ierc 1820 registry private _ ERC 1820=ierc 1820 registry (0x 1820 a 4b 7618 bde 71 DC E8 CDC 73 AAB 6c 95905 FAD 24 ); //kec cak 256 (' er c777 tokens recipient ' ) byte s32 constantprivatetokens _ recipient _ interface _ hash=000 constructor (ier c777 token ) public { _ ERC 1820.setinterfaceimplementer (address (this ),tokens_reen _owner=msg.sender; _token=token; //收款时functiontokensreceived (address operator,address from,address to,uint amount, bytescalldatauserdatation //方丈是功德箱tokenfunctionwithdraw () external { require (MSG.sender=_ owner,' no Permision ' ) uint balance ' _token.send(_owner,balance,' ' ); 功德箱合同在结构时调用ERC1820注册表合同的setInterfaceImplementer函数注册ERC777TokensRecipient模块构建(模块的构建是自己),收到令牌时调用tokens re 注:如果是本地开发人员网络环境,可能没有ERC1820注册表合同。

如果必须展开ERC1820注册表合同,请参考eip-1820中文文档[8]。 功德箱这个实例意味着投球,告诉他收款时信息传递的构建方法,之后如果有时间的话,我会写原始的存款栖息应用。 普通账户地址是监听令牌持有功德箱合同的例子,收款地址和收款监听是同一合同,现在考虑普通用户地址,如何委托合同监听令牌的补充? 通过拦截令牌的补充,所有者可以更多地管理收到的令牌。

例如,所有者可以设置黑名单,禁令操作员可以管理黑名单中的帐户账户,References[1] ERC20可以是代币33603359 Learnblockchain.cn/2018/01/12/CRR0x9a 642 d6b 3368 DDC 662 CA 244 BAD F32 CDA 716005 BC [3]故障的EOS 33603359 Etherscan.IO/Address/0x 86 FA 049857 e 0209 AA 7d 9e 611 EIP 1820文档36 DOCS/EIPS/EIP-1820.HTML [5] ERC 1820文档33603359 LearnblockChaain open ZePPelin代码库33603359 GITHB.com erc777源代码分析:3359learnblockccck eip-1820中文文档33603359 learnblockchain.cn/docs/eips/EIP-1820.html [9]我的专栏33603359-江苏体彩网|首页。

本文来源:江苏体彩网|首页-www.ebiz-wiki.com

客户案例Customer case
  • 【江苏体彩网】规则意识欠缺是对英雄精神最大的亵渎_时事政治_中公教育网
  • 江苏体彩网官方-中纪委上半年“反腐答卷”的三点启示_时事政治_中公教育网
  • 你离群众有多近,群众就跟你有多近_时事政治_中公教育网
  • 【江苏体彩网|首页】光器件行业并购频繁静待Finisar-JDSU合并
  • 反射式激光莫尔信号的精密定位控制
  • 进一步释放国内市场需求潜力_江苏体彩网|首页
  • 江苏体彩网官方|别漏掉“偏门”,却养肥了“苍蝇”_时事政治_中公教育网
  • 单身无奈,租友回家过年:江苏体彩网|首页
  • 亚投行选对了方向走对了路_时事政治_中公教育网|江苏体彩网|首页
  • 开启品牌强国新征程:江苏体彩网|首页