以太坊 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);
}
以太坊 ERC20 与 ERC721 深度解密的更多相关文章
- 以太坊ERC20代币开发
以太坊ERC20代币开发首先需要对以太坊,代币,ERC20,智能合约等以太坊代币开发中的基本概念有了解.根据我们的示例代码就可以发行自己的以太坊代币. 什么是ERC20 可以把ERC20简单理解成以太 ...
- 零门槛,包教会。让你在5分钟内使用以太坊ERC20智能合约发行属于自己的空气币
前言 目前区块链是互联网中最最火的风口,没有之一.我周围的很多朋友也加入了“炒币”行列,但很不幸,几乎都被“割韭菜”了.而经过我的几天研究,发现,如果自己要发行一种空气币,简直太简单了.只需要下面几个 ...
- 以太坊erc20转账失败的情况和原因
以太坊erc20转账失败的情况和原因 eth转账失败有多种情况,除了手续费过低以外(Out of gas),众筹额度满了(Bad instruction)也会失败链上转账有可能失败,转账失败转账的币退 ...
- 一键创建以太坊ERC20代币教程
30秒极速创建以太坊ERC20代币 傻瓜式创建,界面化创建,自动创建代币,简单好用 合约采用新版 5.10 新版合约编译器,合约代码100%安全无任何漏洞 下面是详细的使用和创建教程 1.点击创建ER ...
- 以太坊ERC20代币合约案例
一.ERC20代币合约与web3调用 ERC20代币合约在小白看来觉得很高大上,但其实就是一个代币的定义标准,方便其他dapp统一调用各种代币的方法.如图: 二.ERC20合约标准 [官方链接] co ...
- 10分钟 5步 发布以太坊 ERC20 代币
1.安装 METAMASK Brings Ethereum to your browser 一个可以浏览器上进行操作的以太坊钱包,推荐 Chrome. Chrome 插件安装地址: https://c ...
- 【Ethereum】以太坊ERC20 Token标准完整说明
什么是ERC20 token 市面上出现了大量的用ETH做的代币,他们都遵守REC20协议,那么我们需要知道什么是REC20协议. 概述 token代表数字资产,具有价值,但是并不是都符合特定的规范. ...
- 模仿以太坊 ERC20 规范的 Hyperledger Fabric 实现 Token 通证
合约: package main /* -------------------------------------------------- Author: netkiller <netkill ...
- 以太坊上发行ERC20代币
ERC20 代币生成 环境 虚拟主机: ubuntu 18虚拟机 宿主主机: win10; ip:192.168.0.160 1.部署以太坊 1.1 安装GO 安装go,并编译geth 将下载好的go ...
随机推荐
- SpringBoot2.0应用(五):SpringBoot2.0整合MyBatis
如何整合MyBatis 1.pom依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <ar ...
- Ubuntu 18.04.1 搭建Java环境和HelloWorld
一.搭建Java环境 系统环境 Ubuntu 18.04.1 JDK 8 IDEA 2018.2 1.下载JDK 官网地址:http://www.oracle.com/technetwork/java ...
- 【SqlServer系列】数据库三大范式
1 概述 一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,即第一范式要求确保表中每列的原子性,也就是不可拆分:第二范式要求确保表中每列与主键相关,而不能只与主键的某部分相关 ...
- SHELL脚本--read命令
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 1.1 shell read简介 要与Linux交互,脚本获取 ...
- 华为路由器帧中继 FR 实验
帧中继简介 帧中继( Frame Relay)是一种用于连接计算机系统的面向分组的通信方法.它主要用在公共或专用网上的局域网互联以及广域网连接.大多数公共电信局都提供帧中继服务,把它作为建立高性能的虚 ...
- 分布式系统监视zabbix讲解十一之zabbix升级--技术流ken
思考 现在有这样一个需求,业务场景想要使用的监控模版没有3.0版本的,只有2.0,我们都知道2.0的模版无法导入进3.0版本的zabbix中,这个时候应该怎么获得3.0的监控模版哪?本篇博客将详细演示 ...
- Jquery里的特定小技巧
jQuery 动态设置样式: https://blog.csdn.net/xiaoyuncc/article/details/70854925 jquery如 ...
- Web部分_2
详细描述MVC 基于Java的Web应用系统采用MVC架构模式,即model(模型).view(视图).controller(控制)分离设计:这是目前Web应用服务系统的主流设计方向. Model:即 ...
- .NET CORE 设置cookie以及获取cookie
使用我这个方式的前提是在mvc中,确认你安装了:Microsoft.AspNetCore.Mvc. 然后在继承了Controller的类型中使用我所说的方法. 直接使用即可,我是封装了方法供我自己使用 ...
- 获取json串里的某个属性值
string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\& ...