【发布时间】:2017-03-14 19:33:02
【问题描述】:
我正在尝试制作一份合约,其中包含用于合约不同方面的两种不同代币。我希望这两个令牌都能够符合 ERC20 标准,但我不确定如何为每个令牌指定唯一的变量和函数。
【问题讨论】:
我正在尝试制作一份合约,其中包含用于合约不同方面的两种不同代币。我希望这两个令牌都能够符合 ERC20 标准,但我不确定如何为每个令牌指定唯一的变量和函数。
【问题讨论】:
如果您考虑 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。如果您的要求是它们需要通过单个合同进行接口,那么您可以编写第三个合同来管理它们。
【讨论】:
如今,“多代币”标准 ERC1155 似乎是需要多个代币的合约的不错选择:
https://github.com/ethereum/EIPs/issues/1155
简单总结:
管理多种代币类型的合约的标准接口。一种 单个部署的合约可能包括可替代的任意组合 代币、不可替代的代币或其他配置(例如 半同质代币)。
【讨论】: