链中自有黄金屋--NFT浅析

本文介绍了NFT(非同质化代币)的概念,包括同质化和非同质化代币的区别,以及NFT的铸造过程。通过一个实际的NFT铸造示例,展示了如何将图片上传到IPFS并使用智能合约在以太坊上创建NFT。文章还讨论了NFT在盲盒场景中的应用和随机数安全问题,强调了安全随机数生成的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链中自有黄金屋–NFT浅析

前言

​ 2021年3月11日,佳士得历史上首次拍卖以 NFT 形式展现的纯数字艺术品,这幅底价100美元的作品最终以6934.6万美元成交,一举成为在世艺术家成交作品第三高价。

​ 这一事件,将越来越多的目光吸引向 NFT 的世界。对于区块链行业外的人士而言,NFT 还是一个新鲜事物。但实际上,NFT 很早就已经出现了——即 在2017 年末以太坊上兴起的谜恋猫游戏。“谜恋猫是世界首款区块链游戏。“区块链”是支持类似比特币这样的加密货币的运作技术基础。尽管谜恋猫不是数字货币,但它也能提供同样的安全保障:每一只谜恋猫都是独一无二的,而且100%归您所有。它无法被复制、拿走、或销毁。”当时这款游戏推出后便风靡一时,一度导致了以太坊网络的堵塞。

​ 不过相信大多数人还是对NFT停留在应用上的认知,今天我们来尝试从新的角度来认识它。

什么是NFT

​ NFT 是 Non-Fungible Token 的缩写,中文称为「非同质化代币」,通常是指开发者在以太坊平台上根据 ERC721 标准/协议所发行的代币。

​ 既然NFT被称作「非同质化代币」,那么相应的肯定有「同质化代币」,下图是二者一个形象的举例。

在这里插入图片描述

同质化代币

​ 同质化代币的典型代表就是以 ERC20 标准/协议发行的 token。 在 ERC20 标准/协议我们中可以知道,ERC20 的 token 是指定小数位数的,也就是 token 可以任意分割,token 与 token 之间是等价的。简单来说同质化代币就是一种能够相互替换、具有统一性、可被拆分的代币。就像美元之间可以进行交换,即使序号不同,价值却不会有任何不同。

非同质化代币

​ 非同质化代币的典型代表就是以 ERC721 标准/协议发行的 token。而在 ERC721标准/协议 中则定义的是一种不可分割的 token ,每个 token 都是独一无二的,我们可以追踪每个 token 的转移和其价值的变动的。可以认识到非同质化代币就是由于包含了记录在其智能合约中的识别信息使得每种代币都具有独一无二的特性,因此不能被另一种代币直接取代。

NFT铸造

​ 说了NFT的独特,那我们再来谈谈它是怎么被铸造的,基于什么逻辑实现它的独一无二。

以下非同质化代币的铸造分析,原始代码参考以太坊ERC721 提案

​ 首先非同质化代币的铸造会执行

_safeMint 函数,该函数存在两个参数,他们分别的作用是:

  • to:新铸的代币接受地址

  • tokenId:新铸代币的 id 序列

    function _safeMint(address to, uint256 tokenId) internal virtual {
   
   
        _safeMint(to, tokenId, "");//接收以上两个参数加上空字符凑齐3个参数传入同名 _safeMint 函数(重载)
    }

​ 可以看到接下来调用三参数同名 _safeMint 函数,

    function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {
   
   //接收_safeMint 函数传参
        _mint(to, tokenId);//将传参 to 和  tokenId  传入 _mint 函数
        require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");//调用_checkOnERC721Received函数来检测函数接口合法性
    }

​ 最后调用 _mint 函数进行铸币:

    function _mint(address to, uint256 tokenId) internal virtual {
   
   //接收来自_safeMint 函数的传参
        require(to != address(0)
### 回答1: aframe-ar-nft.js是一个基于WebAR技术的开源JavaScript库,它可以使开发者快速构建AR应用程序。该库主要针对基于NFT(Natrual Feature Tracking)技术的AR应用开发,NFT是一种AR技术,可以通过识别真实世界中的物体并与虚拟信息相结合来增强增强现实体验。该库与Three.js进行了整合,开发者可以使用Three.js中已有的功能和API完成AR应用程序的开发。同时,该库还支持在模型和纹理之间进行切换,可以根据需要在AR场景中加入图像、视频、3D模型等虚拟元素。 使用aframe-ar-nft.js开发AR应用程序非常方便,只需要在HTML文件中引入需要加载的模型和纹理文件,然后实例化NFTMarker类,即可开始AR应用的开发。开发者可以根据需要配置AR场景中的元素,例如相机、灯光、模型等,使用该库还可以实现手势控制和声音效果。 总的来说,aframe-ar-nft.js可以让开发者轻松地创建基于NFT技术的AR应用程序,通过与Three.js的整合,可以很容易地进行二次开发和定制。这为AR应用程序的开发提供了更加便利和高效的解决方案。 ### 回答2: aframe-ar-nft.js是一个能够让用户在webAR中使用NFT(可识别图像)来构建虚拟现实场景的javascript库。该库的主要优势是,与传统的AR技术不同,它基于NFT技术,不需要使用额外的标记或器具来触发虚拟现实效果,简单易用。aframe-ar-nft.js提供了完整的API文档,使得开发人员可以快速轻松地在自己的网站或应用中使用AR技术。它具有高度的灵活性,可以应用于各种网站和应用场景,例如:游戏、虚拟演示、教育、医疗等等。该库的使用方法也非常简单,只需几行代码即可实现AR效果。总之,aframe-ar-nft.js是一款易用、灵活、高性能的javascript库,为开发人员提供了一种强大的AR开发工具。 ### 回答3: aframe-ar-nft.js是一款基于WebAR技术的扩展库,它提供了简单易用的NFT(Natural Feature Tracking,自然特征跟踪)功能,可以实现在现实场景中识别NFT图像,从而在图像上展示虚拟3D模型。 通过在A-Frame中使用aframe-ar-nft.js,用户可以很方便地创建AR体验,比如将虚拟模型置于某个位置,或者通过手势交互与用户互动,展示出身临其境的AR效果。 此外,aframe-ar-nft.js还提供了丰富的配置选项,可以针对不同的NFT图像进行自定义设置,例如调整图像的大小、定义图像的旋转方向等等,从而获得更出色的AR效果。 总的来说,aframe-ar-nft.js是一款非常实用的WebAR库,它通过简洁易用的接口和多样化的配置选项,为WebAR开发者提供了便捷、高效、灵活的开发体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值