首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >克隆ERC20 20/ERC20 721

克隆ERC20 20/ERC20 721
EN

Ethereum用户
提问于 2022-09-05 19:41:29
回答 1查看 111关注 0票数 0

我正在使用Clone Factory模式来创建更便宜的新实例。我意识到,每个字段,在构造函数中预置或设置,都有默认值。假设我有这样的合同:

代码语言:javascript
复制
contract MyToken is ERC20, Ownable {
    uint256 public presetValue = 1;
    uint256 public constructorValue;

    constructor() ERC20("MyToken", "MTKN") {
        constructorValue = 2;
    }
}

这个合同是我的,让我们称之为“主合同”或“基本合同”。然后,我与createClone函数有一个合同:

代码语言:javascript
复制
  function createClone(address target) internal returns (address result) {
    bytes20 targetBytes = bytes20(target);
    assembly {
      let clone := mload(0x40)
      mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
      mstore(add(clone, 0x14), targetBytes)
      mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
      result := create(0, clone, 0x37)
    }
  }

MyToken的新实例将使name()等于空字符串,symbol()也等于空字符串(ERC20字段)。这是一个必须解决的问题。由于OpenZeppelin的ERC20 20/721有私有字段,我假设我需要使用setName()setSymbol()函数来实现自己的ERC20 20/721令牌,然后使用某种名为initialize()的聚合来调用这两个函数并设置这些值和其他值?另外,presetValueconstructorValue在克隆合同中哪一个明显是空的?还是有别的办法?

EN

回答 1

Ethereum用户

发布于 2022-09-06 00:46:21

听起来你把它弄下来了。克隆的一个很大的缺点,但“克隆然后init”是标准的。许多项目都没有在系统中插入并留下漏洞,所以最好的做法之一是编写保护措施,要求init在运行之前运行。

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

https://ethereum.stackexchange.com/questions/135058

复制
相关文章

相似问题

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