我正在尝试制定一份合同,其中有两个不同的代币用于合同的不同方面。我希望这两个令牌都能够符合 ERC20 标准,但我不确定如何为每个令牌指定唯一的变量和函数。
2 回答
如果您考虑 ERC 20 代币的结构:https ://github.com/ConsenSys/Tokens/blob/master/Token_Contracts/contracts/Token.sol ,您会看到您提出的建议虽然可能,但将是一个有点乱。但更重要的是,它会将您的代币合约转换为非 ERC20 代币。
uint256 公共总供应;需要用映射或两个单独的参数替换。
管理余额也是如此,您需要更改每个方法的签名以采用附加参数来指定您想要的令牌或为合约中的每个令牌创建特定方法:
函数 balanceOf(address _owner) 常量返回 (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
简单总结:
管理多种代币类型的合约的标准接口。单个部署的合约可能包括可替代代币、不可替代代币或其他配置(例如半可替代代币)的任意组合。