Day 19【ERC-721】用兵之道在一个奇字,2999兵分2999路

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/73e388da-dfa1-4f26-a232-6f20ab1128ed/aCHSyLdl.jpg

【前言】
之前在 Day 3 有介绍过 Non-fungible Token(非同质化代币)与相关的代币标准,其实 ERC-721 Token 的叙述就是 NFT。今天的文章会着重在程序码与开发的部分,内容可能有点复杂但我会尽力以我的小脑袋理解并叙述给各位的!

【NFTs & ERC-721】
ERC-721 正式应用为 2018-01-24 由 William Entriken, Dieter Shirley, Jacob Evans, Nastassia Sachs 发行,Dieter Shirley 也是 Axiom Zen 的技术总监,就是第一个使用 ERC-721 作为去中心化游戏应用 CryptoKitties 的公司。用於处理不可替换资产的另一种以太坊代币标准。我们有在 Day 16 短暂介绍过什麽是智能合约,这边就不再重复叙述,直接介绍重点!

所有的 NFTs 都会拥有一个 uint256 也就是 256 位元的代号,也就是 tokenId 所以在每个 ERC-721 的合约之中, 每组 contract address, uint256 tokenId 都是独一无二的,这种代币可以通过区块链上的智能合约追踪,从而形塑数位化的资产。在 dApp 都有一个 "converter" 可以以 tokenId 为输入并输出有趣又特别的图片。也就是众所皆知的 NFT 艺术收藏品!也就是说每一个代币的代号都会被记录,就像 2020 年的孔明已经不再是指挥一个军队,而是把每一个小兵的动向都运筹得淋漓尽致!

513duf.jpg

【ERC-20 的功能函数、事件与资讯】

ERC-20 在 2015-11-19 由 Fabian Vogelsteller, Vitalik Buterin 提出。ERC-20 为目前以太坊上最多人使用的标准,此标准除了提高 Token 的互换性,还能在 Dapp 上面进行同样的运行。常见的应用有:

稳定币:与法定货币锚定的代币,发行者可能持有相对应的抵押资产,或储蓄。
安全代币:为股权型代币的一种,可能是有价证券,例如股票、债券或实物资产。
功能型代币:游戏货币、Dapp 燃料、忠诚度积分。

ERC-20 包含六个功能函式、两个事件以及三个 Token 资讯的函式。

/*【功能函式】--------------------------------------------*/
function totalSupply() public view returns (uint256):
// Token 的总供应量,也就是这个智能合约的总供应量。

function balanceOf(address _owner) public view returns (uint256 balance):
// 可查询 _owner 地址中的余额。
// 在以太坊中帐户都是公开的,只要知道地址就能查询所有帐户的余额。

function transfer(address _to, uint256 _value) public returns (bool success):
// 转移代币;发送数量为 _value 的 Token 到地址 _to,触发 Transfer 事件。

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success):
// 从地址 _from 发送数量为 _value 的通证到地址 _to,触发 Transfer 事件。

function approve(address _spender, uint256 _value) public returns (bool success):
// 批准代币转移;批准 _spender 提取一定数量的金额。

function allowance(address _owner, address _spender) public view returns (uint256 remaining):
// 回传批准给地址的代币数量;回报 _spender 从 _owner 提取的金额。

/*【事件函式】--------------------------------------------*/
event Transfer(address indexed _from, address indexed _to, uint256 _value):
// 转移代币事件;当token被转移时则会触发。

event Approval(address indexed _owner, address indexed _spender, uint256 _value):
// 代币批准触发事件;成功调用approve方法後则会触发。

/*【Token 资讯函式】--------------------------------------------*/
function name() public view returns (string):
// 代币的全名;也就是发行Token之名称

function symbol() public view returns (string):
// 发行Token之代称,也能称作代币缩写。

function decimals() public view returns (uint8):
// 代币的最小单位数值;设定此Token最多能达到小位数点後多少位数。

EIP-20: ERC-20 Token Standard
ERC-20 Token Standard | ethereum.org

【ERC-721 的功能函数、事件与资讯】

ERC-721 除了本身兼容了 ERC-20 内的规则,还包含以下的函式:

/*【Token 资讯函式】--------------------------------------------*/
function name() external view returns (string _name);

function symbol() external view returns (string _symbol);

function tokenURI(uint256 _tokenId) external view returns (string);
// A distinct Uniform Resource Identifier (URI) for a given asset.

/*【功能函式】--------------------------------------------*/
function totalSupply() external view returns (uint256);
// return A count of valid NFTs tracked by this contract

function tokenByIndex(uint256 _index) external view returns (uint256);
// return The token identifier for the `_index`th NFT,

function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
// return The token identifier for the `_index`th NFT assigned to `_owner`,
// 每个所有者可以同时拥有一个以上的 NFT。其独特的 ID 可以识别每一个 NFT,结果可能会变得难以跟踪 ID。所以合约将这些 ID 存储在一个数组中,tokenOfOwnerByIndex 函数让我们从数组中检索这些信息。

function balanceOf(address _owner) external view returns (uint256);
// return The number of NFTs owned by `_owner`, possibly zero

function ownerOf(uint256 _tokenId) external view returns (address); 代币所有权发送
// Find the owner of an NFT

function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;

function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
// Transfers the ownership of an NFT from one address to another address

function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
// Transfer ownership of an NFT

function approve(address _approved, uint256 _tokenId) external payable;

function setApprovalForAll(address _operator, bool _approved) external;

function getApproved(uint256 _tokenId) external view returns (address);

function isApprovedForAll(address _owner, address _operator) external view returns (bool);

/*【事件函式】--------------------------------------------*/
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);

event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);

event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

可以看到兼容 ERC-20 的函式有几个,但在 ERC-721 中也出现新的函式。开发者让智能合约能够支持记录及转移代币的所有权。此外在 ERC-721 中 approve 以及 transfer 都被重新设计。

ERC-721 Non-Fungible Token Standard | ethereum.org
EIP-721: ERC-721 Non-Fungible Token Standard

【小结】
今天篇幅好像够了,其实加上理解程序码之後能讲的东西很多,所以关於以太坊代币标准 ERC-721 的内容就分成两篇吧。如果对 ERC-721 有兴趣的人明天请记得也来关注一下啊!

h4c9ha5brag71.png

【参考资料】
ERC: Non-fungible Token Standard · Issue #721 · ethereum/EIPs
https://coincentral.com/future-of-erc-721-and-unique-assets/
EIPs/eip-721.md at master · ethereum/EIPs


<<:  Day 19 : KNN 与 K-means

>>:  【Day 16】从一开始的 Anti-Debug 生活 - Anti-Debug

WordPress外挂总小小整理

详细可以参考这个网站页面的整理,下面是我协杠玩WordPress半年来的心得 https://109...

爬虫怎麽爬 从零开始的爬虫自学 DAY27 python网路爬虫开爬8-储存问题解决

前言 各位早安,书接上回我们将程序码的规模扩大成多档案的规模,也发现了三个大问题,今天我们就要来解决...

讯息是怎麽进到网际网路的(一)?封包的传递路径:区域网路

我们现在知道,你所传递的讯息,会被包裹起来丢到网路上的节点中转运,直至抵达目的地。那具体会通过怎麽样...

第27天~CRUD

C-新增 R-查询 U-更改 D-删除 流程: 建置 设定 show 4.一定会有key:value...

Day 9 利用 docker 安装 Mautic

Mautic 是一个开源的自动化行销工具平台。你可以利用其监测网站的流量、纪录用户的浏览资讯、电子信...