首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在创建新的ERC-777时,如何定义操作符?

在创建新的ERC-777时,如何定义操作符?
EN

Stack Overflow用户
提问于 2021-05-02 13:24:05
回答 1查看 305关注 0票数 1

我的理解是,您可以在实例化自定义ERC-777时定义一个运算符,该运算符可以进行传输,而无需使用operatorSend函数得到发件人的批准。但是,似乎无法获得将令牌部署到继承构造函数中的契约地址。我试着将地址推入构造函数体中的数组中,但似乎没有。

代码语言:javascript
复制
contract MainToken is ERC777 {
    address[] ops=;
  constructor ()  ERC777("MYTOKEN", "MTK",ops) {
      ops.push(msg.sender);
    }
...
}

如果我尝试将它直接放入构造函数中,如so ERC777("MYTOKEN", "MTK",[msg.sender]),我将得到

修饰符调用中参数的

无效类型。请求从address1内存到address[]内存的无效隐式转换。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-02 16:52:01

Solidity目前不允许在一个表达式中定义动态大小的数组。注意:示例中的[msg.sender]是一个固定大小的数组定义。

另外,定义ops属性的方法无法工作,这是因为EVM处理构造函数的顺序。

  1. 将子构造函数(MainToken)构造器参数存储到内存(在本例中为无参数)

执行父构造函数的

在您的示例中,ERC777("MYTOKEN", "MTK", ops)的执行失败,因为存储变量ops还不可用。

执行子构造函数的ops.push(msg.sender);) (在您的例子中是

  1. )

所以我能想到的最简单的解决方案就是从MyToken参数中传递地址。如果您控制了部署过程,并且在部署契约时可以手动传递msg.sender的值,这是非常有用的。

代码语言:javascript
复制
pragma solidity 0.8.4;

import 'https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC777/ERC777.sol';

contract MyToken is ERC777 {

    constructor(address[] memory defaultOperators)
        ERC777('MYTOKEN', 'MTK', defaultOperators) {
    }

}

如果您无法控制部署,并且需要在构造函数中分配msg.sender,我建议在本地复制ERC777合同并修改其构造函数,以便它只添加msg.sender

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67356893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档