以太坊 ERC20 与 ERC721 深度解密

去年11月份的一段时间,Ethereum网络突然变的特别拥堵,原因是兴起了一款以太坊养猫的Dapp游戏,超级可爱的猫形象,再加上配种,繁殖和拍卖等丰富的玩法,风靡了币圈。 一时间币圈大大小小的人都在撸猫,以太坊网络不堪负荷,最近更是爆出消息,一只猫可以拍到8w 多人民币。基于以太猫,国内也兴起了一整浪潮,后续又出款了很多的类似的游戏,网易招财猫,百度莱茨狗和加密鱼等等,不过玩法套路都是差不多。

实际上,这款游戏的核心是以太坊的智能合约,也是第一款基于智能合约的游戏,这款游戏的核心是基于ERC721的。

基于以太坊养猫,我们可以先理解一下ERC721 的概念。

ERC是以太坊代币标准的缩写。常见ERC标准有ERC20, ERC721和ERC825。

ERC20是标准Token接口,这个规定了Token的基本功能, 方便第三方使用。在一些开源组织的工作推动下,ERC20的标准已经简单到能5分钟
发行一个ERC20的Token。ERC721是针对不可置换Token的智能合约标准接口,(non-fungiletokens)不可置换Token简称NFTs,操作标准
API的实现方法。以太坊养猫中的猫都是ERC721的Token,每只猫都是拥有不一样基因的猫, 归根到底也就是拥有不一样属性的Token。
猫的编号其实也就是Token的编号,猫的基因也就是Token的属性。

撸猫归根到底其实是改变ERC721标准下的Token属性,从而达到每个猫都具有不一样的基因。

ERC20 与ERC721 标准的区别

首先且先说ERC20,他是基于同质化的代币,是可置换的,意味着所有的Token直接没有区别,、所有Token都是一样的,我有两个ERC20的Token,并不会因为我花的方式不一样而不一样。

然而ERC721 的代币是基于是非同质化的,不可互换的Token,简单理解为每个Token都是独一无二的。也就是说ERC721的每个Token都拥有独立唯一的tokenId编号。像在CryptoKitties中的猫都被赋予拥有基因,每只猫的基因都是不一样的,零代猫是最有收藏价值的。另外在某些情况下, 某些猫的属性比较罕见, 也会受到追捧。

基于ERC20 和基于ERC721 应用场景.

ERC20 是基于标准的代币协议,它能够用于网站流通价值的积分,虚拟币等等.ERC721的NFT让数字资产变得更有收藏价值,尤其是在加密货币收藏和网络游戏领域拥有巨大的潜力,用ERC20 的代币用于游戏的流通价值积分,用ERC721代表网站的虚拟装备,独一无二的道具等等,设计出基于双重代币游戏模型。

ERC20 和ERC721 的具体接口实现.

基于ERC20 的代币实现

contract ERC20{
    //总共要发多少币   
    function totalSupply() constant returns (uint totalSupply); 
    //返回当前指定地址的余额
    function balanceOf(address _owner) constant returns (uint balance); 
    //调用transfer 将自己的token 转移 到 _to 地址  _value 为转账到数量
    function transfer(address _to, uint _value) returns (bool success); 
    //与_approve 函数配合使用, _approve 批准之后,调用transerFrom 转移token
    function transferFrom(address _from, address _to, uint _value) returns (bool success); 
    // 授权_spender 可以从 自己的账户转移的余额,可以分多次转移.
    function approve(address _spender, uint _value) returns (bool success);
    // 返回spender 还能提取的token 数量.
    function allowance(address _owner, address _spender) constant returns (uint remaining); 
    // 当token 转移之后会触发事件
    event Transfer(address indexed _from, address indexed _to, uint _value); 
     //当任何的approve 被触发之后,都会调用此函数.                  .
    event Approval(address indexed _owner, address indexed _spender, uint _value);
}

基于ERC721 的接口标准

contract ERC721{
    //发行代币的总量
    function totalSupply() public view returns (uint256 total);
    //根据指定的地址返回代币的数量
    function balanceOf(address _owner) public view returns (uint256 balance);
    //根据指定的tokenId 返回 当前拥有者
    function ownerOf(uint256 _tokenId) external view returns (address owner);
    //当前用户是否有转移代币的权力.
    function approve(address _to, uint256 _tokenId) external;
    //tokenid 资产转移。
    function transfer(address _to, uint256 _tokenId) external;
    //将指定的tokenid 从 _from 转移 到 _to
    function transferFrom(address _from, address _to, uint256 _tokenId) external;
    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);
}

知识星球二维码380.png

猜你喜欢

转载自www.cnblogs.com/tokenpai/p/9175962.html