【NFT实现原理】当你点开Opensea上的一个NFT,这背后发生了什么?

熊猫撸白.nft
2023-01-12 05:08
发布于 Mirror

Web3是一场以技术驱动的革命,我认为了解一些基本的技术原理对于每一个参与者都很有必要。

相信大部分都知道NFT是非同质化代币,但是对于NFT如何实现非同质化以及如何展现出各种不同属性的可能不太了解。本文试图以点开一个Opensea的nft,背后发生的一系列过程,带大家了解NFT到底是如何实现的。

流程简图

整个过程可以简化成下图所示,接下来我们会一一进行讲解

发送http请求

首先,当我们点击一个nft集合时(这里以无聊猿为例),我们注意观察一下上方的网络链接, 在collection的下一级boredapeyachtclub 就是用于区分具体的某个集合。

但是,当我们点击合集中的某个nft之后,我们再来观察一下上方的网络链接就变成了如下所示,我们主要关注的是:

  1. 合约地址:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d

  2. nft的编号:4873

当浏览器得到这两个参数之后,就携带参数向服务端发起一个http请求

 调用合约获取tokenURI

首先介绍一下什么是智能合约,所谓的智能合约就是运行在以太坊上的一个程序,它是位于以太坊区块链上一个特定地址的一系列代码(函数)和数据(状态)。

为了便于开发人员对合约进行扩展以及实现定制化的功能,以太坊基金会便为合约制定了标准的规范,比如常见的有ERC20,ERC721,ERC1155等。NFT最常见的标准就是ERC721,其规范方法如下:

// 查询NFT中某个owner拥有的数量
balanceOf(owner)

// 查询NFT中某个编号属于的是哪个人,例如查询某个编号的猴属于哪个owner
ownerOf(tokenId)

// 返回NFT的名字
name()

// 返回NFT的符号
symbol()

// NFT总发行量
totalSupply()

// 返回某个NFT的URI,这个URI就是这个NFT的一切描述信息
tokenURI(tokenId)

// 按index序号返回该owner的所有持有NFT的编号
tokenOfOwnerByIndex(owner, index)

// 按index序号返回NFT的编号
tokenByIndex(index)

// 允许to这个地址可以转移他的tokenId编号的NFT(攸关你的NFT安全!)
approve(to, tokenId)

// 查询tokenId编号的NFT授权给了谁(查询谁可以转走你的NFT!)
getApproved(tokenId)

// 授权或者取消授权operator这个地址转移你这一Collection下的所有NFT(攸关你的NFT安全!)
setApprovalForAll(operator, approved)

// 查询某个operator是否有权转移某个owner的这一Collection中的所有NFT(查询某个地址是否可以转走你这个Collection的所有NFT!)
isApprovedForAll(owner, operator)

// 将from这个地址的tokenID编号的NFT转给to这个地址(需要授权才行)
transferFrom(from, to, tokenId)

当后台收到请求之后,就会将参数4873传入函数tokenURI(tokenId),并执行该方法,所获得的返回值是这个样子的:

ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/4873

这里也教一下大家如何自己去查看nft的tokenURI,首先点击opensea上无聊猿的合约地址。

接着会跳转到Etherscan,接着切换到点击"Contract"切换到合约页面,选择"Read Contract"。

找到tokenURI方法,输入tokenId即可获得URI。

元数据(Metadata)

你可能会对上面这个像网址一样的tokenURI感到奇怪,你可以在浏览器中输入以下网址:

https://ipfs.io/ipfs/QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/4873

就可以看到如下的结果,这个链接指向的就是存储nft元数据的地址

所谓的元数据存储了nft所有的信息,包括背景,衣服,眼睛,帽子等属性,就是你在opensea上看到的这些信息。

除了上面这些属性之外,元数据中还包含了每一个nft展示的图片的存储地址,这只4873无聊猿的图片地址如下,输入到浏览器中即可查看。

https://ipfs.io/ipfs/QmaSrtCwcXtQx5hErJVTxcdvk6p5cT1S14h8p2oYcs88Ru

元数据的存储方式

常见的元数据存储方式有去中心化存储和中心化存储

去中心化存储

去中心化存储是将元数据存储到分布式文件系统中,比如IPFSInterPlanetary File System,星际文件系统),去中心化存储可以保证nft的元数据不被篡改,更符合加密精神,而且存储成本更低,是现在主流的存储方式,无聊猿的元数据就是存储在ipfs中。

中心化存储

中心化存储是指将元数据存储在中心化服务器上,比如之前大火的链游Axie的tokenURI就是指向一个中心化的网站地址。这种存储方式长期看将面临两个主要风险。一是数据可以被网站的所有者所篡改,二是网站有可能在某一天失去维护导致链接无法访问。

所以NFT的非同质化主要体现在每个nft所保存的元数据的不同,这就要求元数据是无法被篡改的,特别是头像类nft,元数据中保存的图片地址直接决定了其价值的高低。

前端渲染服务端响应的数据

最后根据官方api文档描述,后端会返回如下的数据,当前端拿到这些数据之后就会将数据渲染成一个比较好看的样式,比如展示图片,展示属性值,展示稀有度等等。更多api信息可以点击文档链接:https://docs.opensea.io/reference/asset-object

总结:

以上就是关于nft背后的技术原理的简单介绍,如果你想了解更多关于nft的知识,欢迎添加下方微信,备注”撸白“,加入免费交流群

1
粉丝
1
获赞
37
精选
相关文章
数据来源区块链,不构成投资建议!
网站只展示作者的精选文章
2022 Tagge. With ❤️ from Lambda