真的很介意写博客!
当我创建一个新的合同时,我很难检查我正在处理的令牌的哪个版本。
我如何容易地告诉令牌,我需要传输的是ERC20、ERC223或ERC677?(除721名外)
(我知道,与223相比,677更适合向下兼容20 )
在我看来,所有这些迟早都会失控,除非我们在契约中实现一个简单的字段来判断这个令牌是哪个版本。
示例:
string public tokenSpec;
function MyToken() public {
tokenSpec = "ERC223";
}发布于 2018-05-12 08:26:49
Ethereum有一种机制-- ERC165 --允许联系人报告它们实现的接口。不幸的是,它似乎还没有被令牌契约广泛使用。目前还没有安全的方法同时处理这三种令牌(这很讽刺,因为较新的变体是为了提高安全性),所以您最好的选择是为每种令牌类型设置单独的代码(最好确保您的UI知道您将要处理的所有令牌的类型,这样您的用户就不会弄错它),或者选择一个可以安全处理的子集(比如ERC-20和ERC-677),并且只支持这一点。
发布于 2018-05-12 06:53:54
我认为,一个优秀的开发人员可以通过注释或构造函数来说明用于特定令牌(例如来自Guaranteed Entrance Token (GET) )的协议,当通过EtherScan.io查看合同的代码时,我发现这是前12行代码。
/**
* @title ERC20Basic
* @dev Simpler version of ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/179
*/
contract ERC20Basic {
uint256 public totalSupply;
function balanceOf(address who) constant returns (uint256);
function transfer(address to, uint256 value) returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}从我以类似方式审查过的令牌中,我发现没有什么偏差,但最终我同意应该有一个字段来说明令牌协议,但不确定在所有项目中一致这样做有多现实。
https://ethereum.stackexchange.com/questions/48301
复制相似问题