去年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. 【web开发】docker中的数据库

    注:自从开始使用docker,部署方面的事情就简单多了.使用docker构建的数据库容器不用直接安装,开启后就可以使用,也比以前方便很多.下面将一些要点记录下来. 下面的例子使用以下环境: - 系统( ...

  2. Swing——布局管理器

    前言 在编写图形界面时,总是需要考虑的就是组件放在哪里,组件怎么大才合适.在Swing中就有现成的布局管理器帮我们做这些事情,我们不必写代码去一一安排.下面将介绍什么是布局管理器.Swing中常用布局 ...

  3. TCP首部

    TCP的首部格式 字段解释 源端口和目的端口 用于多路复用/分解来自或送到上层应用的数据 数据偏移 TCP中数据的开始处距离TCP报文段的起始位置有多远 == TCP报文段的首部长度 表示长度以32位 ...

  4. Nacos系列:欢迎来到Nacos的世界!

    什么是Nacos? Nacos 是构建以"服务"为中心的现代应用架构 (例如微服务范式.云原生范式) 的服务基础设施. Nacos可以做什么? 1.动态配置服务:支持以中心化.外部 ...

  5. OJ:奇怪的类复制

    描述 程序填空,使其输出9 22 5 #include <iostream> using namespace std; class Sample { public: int v; // 在 ...

  6. js如何获取url参数

    匹配URL参数的正则是: var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", ...

  7. [转]用virtualBox安装centos设置网络和通信

    本文转自:https://blog.csdn.net/hsl_1990_08_15/article/details/51644451 具体的安装和在VM Ware中安装的方式大同小异 安装好后我们设置 ...

  8. Web部分_2

    详细描述MVC 基于Java的Web应用系统采用MVC架构模式,即model(模型).view(视图).controller(控制)分离设计:这是目前Web应用服务系统的主流设计方向. Model:即 ...

  9. 程序猿制造Bug的根本原因竟然是....

    传说中: 「杀一个程序猿不需要用枪,改三次需求就可以了.」 而且, 「这竟然也是程序猿制造Bug的根本原因....」 ↓↓↓↓↓↓↓ #/原始需求/#   你去饭店,坐下来. “服务员,给我来份宫保鸡 ...

  10. python进程间通信

    Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信. 1. Queue的使用 可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个 ...