【问题标题】:ERC20 for Multiple Tokens in a single contractERC20 用于单个合约中的多个代币
【发布时间】:2017-03-14 19:33:02
【问题描述】:

我正在尝试制作一份合约,其中包含用于合约不同方面的两种不同代币。我希望这两个令牌都能够符合 ERC20 标准,但我不确定如何为每个令牌指定唯一的变量和函数。

【问题讨论】:

    标签: ethereum solidity


    【解决方案1】:

    如果您考虑 ERC 20 代币的结构:https://github.com/ConsenSys/Tokens/blob/master/Token_Contracts/contracts/Token.sol,您会发现您提出的建议虽然可能,但会有点混乱。但更重要的是,它会将您的代币合约转换为非 ERC20 代币

    uint256 public totalSupply; 需要替换为一个映射或两个单独的参数。

    管理余额也是如此,您需要更改每个方法的签名以采用附加参数来指定您想要的令牌或为合约中的每个令牌创建特定方法:

    function balanceOf(address _owner) constant returns (uint256 balance);

    需要是:

    function balanceOf(address _owner, uint256 token_id) constant returns (uint256 balance);

    function balanceOfTokenA(address _owner) constant returns (uint256 balance);

    function balanceOfTokenB(address _owner) constant returns (uint256 balance);

    但就像我说的,任何一种实现都会使你的代币合约成为非 ERC20 代币。


    你最好有两个合约,然后两者都兼容 ERC20。如果您的要求是它们需要通过单个合同进行接口,那么您可以编写第三个合同来管理它们。

    【讨论】:

    • 我该如何管理它们?我知道你可以有两个独特的合约来代表适合 ERC20 的不同代币,但是当调用第三个合约中的变量时,你如何保持一个彼此分开,因为代币合约将具有相同的变量。我想这是一个问题,在这里进行继承的最佳方式是什么?
    • 你不能只拥有 2 个 ERC20 代币合约的原因是什么?
    【解决方案2】:

    如今,“多代币”标准 ERC1155 似乎是需要多个代币的合约的不错选择:

    https://github.com/ethereum/EIPs/issues/1155

    简单总结:

    管理多种代币类型的合约的标准接口。一种 单个部署的合约可能包括可替代的任意组合 代币、不可替代的代币或其他配置(例如 半同质代币)。

    另请参阅openzeppelin implementation

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 2021-09-17
      • 2022-09-27
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      相关资源
      最近更新 更多