去年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);
}

以太坊 ERC20 与 ERC721 深度解密的更多相关文章

  1. 以太坊ERC20代币开发

    以太坊ERC20代币开发首先需要对以太坊,代币,ERC20,智能合约等以太坊代币开发中的基本概念有了解.根据我们的示例代码就可以发行自己的以太坊代币. 什么是ERC20 可以把ERC20简单理解成以太 ...

  2. 零门槛,包教会。让你在5分钟内使用以太坊ERC20智能合约发行属于自己的空气币

    前言 目前区块链是互联网中最最火的风口,没有之一.我周围的很多朋友也加入了“炒币”行列,但很不幸,几乎都被“割韭菜”了.而经过我的几天研究,发现,如果自己要发行一种空气币,简直太简单了.只需要下面几个 ...

  3. 以太坊erc20转账失败的情况和原因

    以太坊erc20转账失败的情况和原因 eth转账失败有多种情况,除了手续费过低以外(Out of gas),众筹额度满了(Bad instruction)也会失败链上转账有可能失败,转账失败转账的币退 ...

  4. 一键创建以太坊ERC20代币教程

    30秒极速创建以太坊ERC20代币 傻瓜式创建,界面化创建,自动创建代币,简单好用 合约采用新版 5.10 新版合约编译器,合约代码100%安全无任何漏洞 下面是详细的使用和创建教程 1.点击创建ER ...

  5. 以太坊ERC20代币合约案例

    一.ERC20代币合约与web3调用 ERC20代币合约在小白看来觉得很高大上,但其实就是一个代币的定义标准,方便其他dapp统一调用各种代币的方法.如图: 二.ERC20合约标准 [官方链接] co ...

  6. 10分钟 5步 发布以太坊 ERC20 代币

    1.安装 METAMASK Brings Ethereum to your browser 一个可以浏览器上进行操作的以太坊钱包,推荐 Chrome. Chrome 插件安装地址: https://c ...

  7. 【Ethereum】以太坊ERC20 Token标准完整说明

    什么是ERC20 token 市面上出现了大量的用ETH做的代币,他们都遵守REC20协议,那么我们需要知道什么是REC20协议. 概述 token代表数字资产,具有价值,但是并不是都符合特定的规范. ...

  8. 模仿以太坊 ERC20 规范的 Hyperledger Fabric 实现 Token 通证

    合约: package main /* -------------------------------------------------- Author: netkiller <netkill ...

  9. 以太坊上发行ERC20代币

    ERC20 代币生成 环境 虚拟主机: ubuntu 18虚拟机 宿主主机: win10; ip:192.168.0.160 1.部署以太坊 1.1 安装GO 安装go,并编译geth 将下载好的go ...

随机推荐

  1. LINUX负载均衡LVS-DR搭建

    1.搭建前的规划工作 这里从lvs官方网站找了一个nat模型的图,如下: 我这里使用虚拟机模拟出了4台rhel6机器.一台服务器作为lvs调度器(和宿主机桥接),3台服务器作为具体的web服务器(使用 ...

  2. 解决Linux下Jexus验证码无法显示

    1:安装mono相关字体 yum install -y dejavu-fonts-common dejavu-lgc-sans-mono-fonts 2:重启jexus /usr/jexus/jws ...

  3. MySQL数据库——表操作

    I.表操作 一.创建表 基本语法如下: create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGINE=InnoDB DEFAULT CHARSET=utf8: ...

  4. docsify网站文档工具用法总结

    docsify , 网站文档动态生成工具,类似gitbook 特性 无需构建,写完文档直接发布 容易使用并且轻量 (~19kB gzipped) 智能的全文搜索 提供多套主题 丰富的 API 支持 E ...

  5. Jenkins入门之执行Powershell脚本

    之前章节提到过powershell,如果需要构建复杂的任务时,使用cmd不是很方便(也可能是由于笔者不太熟悉cmd命令,这里见笑了),这时候powershell就派上用场了,这里并不详细介绍power ...

  6. centos7安装Wkhtmltopdf

    从官网下载预编译版安装: wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12 ...

  7. final关键字。

    final关键之代表最终,不可变的. 用法: 1.修饰类 2.修饰方法 3.修饰局部变量. 4.修饰成员变量. 修饰类: 不能有任何子类.(太监类) public final class MyClas ...

  8. HTML学习感悟

    HTML是一个超文本语言,原本并不打算做网站的我发现学习信息根本离不开web前端的掌握,因此需要对HTML进行一定程度的学习.对了,它可以说是网页的一个标志,打开任何网页我们看到的都是HTML的文本, ...

  9. Startup在不同环境中的处理

    ASP.NET Core引进了在多种环境中对控制应用程序行为的进一步支持,例如开发环境(Development Environment).预发布环境(Staging Environment),和生产环 ...

  10. springMVC_07乱码及restful风格

    乱码的解决 通过过滤器解决乱码问题:CharacterEncodingFilter 配置web.xml文件 <filter> <filter-name>encoding< ...