NFT商城系统开发NFT交易技术

简介:   tokenId和tokenUrl一对一关系,代表每份数据一个链上的唯一id,同时tokenUrl没要求是唯一,但在调用方,一般会把tokenUrl设置唯一,即使不唯一也没关系,冲突的时候,tokenId越小的,其当初被设置的时间就越早;

  NFT智能合约可以基于不同的公链开发,它不局限于任何一条公链。不同公链的智能合约方案实现也不同,下面以以太坊公链举例说明。

  在以太坊上面,开发NFT智能合约,已经有很多标准,比如ERC-7211155998,各有各的特点,但它们的特点是在基础属性上拓展而来的。

  如果选择ERC-721标准开发NFT智能合约,在元数据存储部分,就有tokenUrl这项,它相当于物质的唯一id,像下面的样子,_tokenURIs存储的就是通证当前计数id与其对应的tokenUrl,这里的tokenUrl是字符串格式,一般是文件url,存储在IPFS或其他服务上面的文件的链接,但不局限于链接,也可以是其它的内容。

  //伪代码

  contract MyERC721 is IERC721Metadata,...{

  ...

  mapping(uint256=>address)private _tokenOwner;

  mapping(uint256=>string)private _tokenURIs;

  uint256 public tokenCounter;//计数,当前总的NFT的数量,累增

  constructor()public ERC721("name","symbol"){

  tokenCounter=0;

  }

  //外部调用方,调用这个函数,传参数:tokenURI即物质的id,tokenURI唯一

  function createNFT(string memory tokenURI)public returns(uint256){

  uint256 tokenId=tokenCounter;

  _mint(msg.sender,tokenId);//将交易发送者和当前的tokenId绑定

  _setTokenURI(tokenId,tokenURI);//tokenId映射到tokenUrl

  tokenCounter=tokenCounter+1;//累加

  return tokenId;

  }

  //_exists函数判断tokenId是否存在,_tokenOwner[tokenId]

  //根据id读取对应的url

  function tokenURI(uint256 tokenId)external view returns(string memory){

  require(_exists(tokenId));

  return _tokenURIs[tokenId];

  }

  //根据tokenId和url建立map数据关系

  function _setTokenURI(uint256 tokenId,string memory uri)internal{

  require(_exists(tokenId));//_exists

  _tokenURIs[tokenId]=uri;

  }

  ...//省略系列接口,包含读接口

  }

  复制代码

  上面的tokenUrl是标准要求的存储数据项。整个合约具备下面约束功能:

  NFT持有者,即msg.sender(owner)和tokenId一对多关系,代表一个人可以拥有多个NFT;

  tokenId和tokenUrl一对一关系,代表每份数据一个链上的唯一id,同时tokenUrl没要求是唯一,但在调用方,一般会把tokenUrl设置唯一,即使不唯一也没关系,冲突的时候,tokenId越小的,其当初被设置的时间就越早;

  NFT持有者在将数据写入链上后,能够获取NFT的链上唯一id,后续可以根据id进行系列的读写操作。

  一般来说,我们常规的NFT有一个和数据建立关系的项就足够了,但并不局限于此,合约在实现了标准要求的接口后,完全可以自己添加自定义数据项及其读写函数。

  第三步:展示与修改

  展示NFT内容

  所谓展示,就是对NFT的数据进行读取再展示。一般的流程如下:

  根据当初设置NFT数据到链上时获得的id去智能合约读取信息;

  将获得的信息通过某介质应用还原出原始的NFT数据。

  比如将图片NFT展示出。(借助上面的721合约标准和IPFS结合为例)

  假设调用合约存储数据时候得到的tokenId是3,那么使用这个tokenId去调用合约的读数据方法;

  执行完1步骤,可以得到tokenUrl,即文件存储在IPFS中所得到的链接;

  直接将tokenUrl链接在浏览器打开,看到图片。

  修改NFT内容

  修改是一项NFT智能合约的拓展功能,可有可无,具体是怎样的方式,完全看需求的实现。比如:

  允许重置tokenId所对应的内容;

  在NFT原数据中增加其他字段内容,再允许修改这些字段;

  转让NFT,可以把某tokenId对应的NFT信息转让给其他owner,达到转让目的;

  出售NFT、拍卖NFT等操作....

  所有权共识

  目前NFT,非同质化通证。本质是想借助区块链的属性来标示一种资产的所有权证明。

  比如曾拍卖出6000多万美金的数字作品(图片)《Everydays:The First 5000 Days》,中标者能获得原图和该图的NFT。这两样东西,一样是实质的作品,一样是它的所有权者的证明。

  我们假设下,如果持有某作品的人,是一位匿名者A,过了多年后,该作品本身不小心被盗并被找回。那么如何证明A是真正的拥有者,此时A只需要展示他对该作品的NFT拥有权,就可以证明。

  那么NFT是不是类似于我们现实中的证书?不全是,分两点:

  NFT和证书都能证明某资产的所有权;

  对比的存储介质与永恒时效:

  证书可能要找个保险柜保养放着,但它终究占据一方土地,仅受一方土地容纳的保险柜保证安全,在时过境迁的影响下,持续性存储下去的时间会较短;

  NFT存储在区块链上,受整个互联网的链节点所保护。它能够存活到整个链网络垮掉那天,对于节点数量众多的公链来说,这个概率几乎等同于互联网终结那天。

相关文章
|
安全 Linux Shell
【内网安全-CS】Cobalt Strike启动运行&上线方法&插件
【内网安全-CS】Cobalt Strike启动运行&上线方法&插件
3268 0
【内网安全-CS】Cobalt Strike启动运行&上线方法&插件
|
Java Serverless
Serverless 实战 —— 快速搭建 SpringBoot 应用
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。
14385 0
|
存储 运维 负载均衡
构建高可用性GraphRAG系统:分布式部署与容错机制
【10月更文挑战第28天】作为一名数据科学家和系统架构师,我在构建和维护大规模分布式系统方面有着丰富的经验。最近,我负责了一个基于GraphRAG(Graph Retrieval-Augmented Generation)模型的项目,该模型用于构建一个高可用性的问答系统。在这个过程中,我深刻体会到分布式部署和容错机制的重要性。本文将详细介绍如何在生产环境中构建一个高可用性的GraphRAG系统,包括分布式部署方案、负载均衡、故障检测与恢复机制等方面的内容。
756 4
构建高可用性GraphRAG系统:分布式部署与容错机制
|
Java C# Swift
Java Stream中peek和map不为人知的秘密
本文通过一个Java Stream中的示例,探讨了`peek`方法在流式处理中的应用及其潜在问题。首先介绍了`peek`的基本定义与使用,并通过代码展示了其如何在流中对每个元素进行操作而不返回结果。接着讨论了`peek`作为中间操作的懒执行特性,强调了如果没有终端操作则不会执行的问题。文章指出,在某些情况下使用`peek`可能比`map`更简洁,但也需注意其懒执行带来的影响。
748 2
Java Stream中peek和map不为人知的秘密
|
9月前
|
人工智能 搜索推荐 定位技术
让兵马俑“活”过来——增强现实正在悄悄改变我们的旅游体验
让兵马俑“活”过来——增强现实正在悄悄改变我们的旅游体验
328 11
|
存储 JSON API
作为开发者,我如何提高任务型大模型应用的响应性能
本文基于实际场景,分享了作为开发者提高大模型响应性能的四个实用方法。
2854 58
|
机器学习/深度学习 文字识别 自然语言处理
医疗行业化验单智能识别技术探讨:OCR与表格识别的应用
本文探讨了OCR与表格识别技术在医疗化验单处理中的应用,通过自动化数据提取和录入,显著提高了效率和准确性,降低了人工劳动强度和错误率。技术实现包括图像预处理、文字识别和表格解析等核心算法的优化,支持与医院信息管理系统集成,未来将向跨模态数据融合、多语言适配及数据安全方向发展。
1398 9
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
DynamicCity:上海AI Lab开源4D场景神器助力自动驾驶场景!128帧动态LiDAR生成,1:1还原城市早晚高峰
DynamicCity 是上海 AI Lab 推出的 4D 动态场景生成框架,专注于生成具有语义信息的大规模动态 LiDAR 场景,适用于自动驾驶、机器人导航和交通流量分析等多种应用场景。
336 1
|
Java 消息中间件 缓存
JAVA中BIO、NIO、AIO的分析理解
本文分析阻塞、非阻塞、同步和异步概念上的区别以及各种IO模型的操作流程,同时分析BIO、 NIO、 AIO的通信机制,并通过demo深入比较三种IO的优缺点。输入输出(IO)是指计算机同任何外部设备之间的数据传递。常见的输入输出设备有文件、键盘、打印机、屏幕等。数据可以按记录(或称数据块)的方式传递,也可以 流的方式传递 。所谓记录,是指有着内部结构的数据块。记录内部除了有需要处理的实际数据之外,还可能包含附加信息,这些附加信息通常是对本记录数据的描述。
14688 5