从ERC20 到 ERC721

ERC20的问题点

我们熟悉的基于以太坊的ICO,通常使用ERC20标准发行Token。

ERC20标准的Token主要有两个问题。

第一个问题是,如果错误地将ERC20的Token发送到了非用户地址(比如合约地址)上,大多数情况下,该合约不具备处理相应Token的能力,所以这笔Token就看永久性丧失了。

第二个问题,基于ERC20发行的Token,相同的Token都具有可替代性(fungible), 拿简单的例子来说,我拥有的5ETH和别人拥有的5ETH并没有本质上的区别,相同条件下都可以在交易所换成相同数量的法币。这个性质本身没有什么问题,但是就Token的使用来说,其功能就会受到很大限制。

ERC223 解决了第一个问题。当发送者错误发送到不支持相应Token的合约地址上的是时候,错误发送的Token可以允许被召回。ERC223的细节就此不展开了。我们主要集中讨论第二个问题。

ERC721 以及 Non-fungible

ERC721是Non-fungible Token的标准。著名的以太坊上的游戏CryptoKitties就是基于ERC721的Token。现实生活中,有很多价值是Non-fungible的,最简单的例子就是你在游戏里抽的扭蛋。

ERC721与ERC20的不同之处,主要有两处。

第一,任何一个Token都有相应的一个id,合约本身会用一个mapping记录token的id以及相应的所有者。

为了满足Non-fungible的特性,任何一个Token都会有相应的MetaData。直接将每一个Token本身的特性记录在Blokchain上通常代价很昂贵,所以,我们通常的做法是保持一个Token id和ipfs或者外部https链接的mapping。例如下面的例子。

1
2
3
4
5
6
contract MyNFT {
mapping(uint256 => string) tokenLinks;
function tokenMetadata(uint256 _tokenId) constant returns (string infoUrl) {
return tokenLinks[_tokenId];
}
}

参考资料

更加进一步的说明可能比较多余。建议直接看下面的参考资料。

参考1

参考2

参考3