您现在的位置是:主页 > 币圈资讯 >

文储研习社第01期 | ERC721介绍

2021-10-15 17:07币圈资讯 人已围观

简介 文储研习社是文储区块链技术人员自发组织的学习交流社区,旨在于追踪区块链时下最新热点,解码热点蕴含的未知...

eIKuLAgnf4Tvqc1AZLmr2lew8tPKA2BnehnYk2fM.jpeg

文储研习社是文储区块链技术人员自发组织的学习交流社区,旨在于追踪区块链时下最新热点,解码热点蕴含的未知领域,享受思想交流的碰撞,欢迎志同道合的小伙伴加入我们,共同学习与成长。

第01期:ERC721介绍

作者:小范

NFT全名为Non-Fungible Token,中文为非同质化Token,其特点为不可替代性,不可分割性,以及独一无二的三种特性。与其相对应的概念就是FT(Fungble Token),也就是同质化Token,比如以太坊ETH、UNI等等在交易所中的代币。非同质化Token,顾名思义,是本质不同的Token,每个Token都是独一无二的。有时小伙伴会在opensea等平台看到一些音乐或者美术作品,有的每个作品只有一份,有的作品会有多份的copy,但是每一份会有不同的编号,这些就是非同质化Token了。

目前主流的NFT都以智能合约的形式出现,较多分布在以太坊,bsc,solana,Waves 等支持智能合约的平台。本文将简单介绍NFT在以太坊以及类似公链上的实现逻辑。

ERC721是以太坊上的标准版型,只有满足的这个版中的函数以及事件,才会被叫做NFT Token。而这些函数以及事件其实是一些最基本的功能,我们在openzeppelin的网站中可以看到对其的描述:

https://docs.openzeppelin.com/contracts/4.x/api/token/erc721

...

...

...

首先是函数:

balanceOf(owner)

返回这个地址中有几个token(返回owner 的token数量)

ownerOf(tokenId)

返回这个token的持有地址(查找tokenID的持有address)

safeTransferFrom(from, to, tokenId)

转移token(从from地址将token转移到to地址,检查to地址是否有接受的能力)

transferFrom(from, to, tokenId)

转移token(从from地址将token转移到to地址)

approve(to, tokenId)

授权token(将tokenId授权到to地址)

getApproved(tokenId)

查询token被授权给谁(token被授权的address)

setApprovalForAll(operator, _approved)

授权给他人所有token的控制权(approve所有token给operator)

isApprovedForAll(owner, operator)

检查是否setApprovalForAll(operator, _approved)

safeTransferFrom(from, to, tokenId, data)

转移token(从from地址将token转移到to地址,检查to地址是否有接受的能力)

同时,还有三个事件(event)是必须要有的。简单来讲,event就是记录,为了能够方便地查询或者统计,在发生某些函数时,我们同时把它们记录下来,这样就可以方便查询,同时也能提醒区块链中的所有人发生了什么事情。这三个事件分别是:

  • Transfer(from, to, tokenId)转移

  • Approval(owner, approved, tokenId)授权

  • ApprovalForAll(owner,operator, approved)授权所有

  • 也就是说,当我们转移Token和授权Token的时候,我们需要将信息记录下来。

     以上是erc721需要implement 的功能。

    ...

    ...

    ...

    非同质化Token的智能合约也像erc20一样,是一个小的数据结构,其中有几个map是实现的关键:

    mapping(uint256 => address) private _owners;

    tokenid和owner一一对应的map

    mapping(address => uint256) private _balances;

    owner和owner持有数量的对应

    mapping(uint256=>address)private_tokenApprovals;

    tokenid 和 授权地址的对应

    mapping(address => mapping(address => bool)) private _operatorApprovals;

    owner和operator的对应

    mapping(uint256=>string)private_tokenURIs;(可选,可以存储更多的信息)

    tokenid和数据URI的对应

    从上面的map中我们可以梳理出,NFT Token的实现是很清晰明了的:首先是将tokenid和owner address对应起来,我们就能知道Token的归属权,然后再将Tokenid与数据对应起来,我们就能知道每个Token代表着什么,与哪些数据相连,以及数据归属的问题。

    Tags:

    标签云

    站点信息