nft系统架构,开发nft系统需要的底层技术

NFT(Non-fungibletokens)即非同质化代币,是一种被称为区块链数位账本上的数据单位,通常是指开发者在以太坊平台上根据ERC721标准/协议所发行的代币。

每个代币对应一个独一无二、不可篡改的数字ID,这个数字ID一般包括以该NFT作为所有权凭证的资产的元数据(或者元数据链接)、所有的交易信息、交易方的数字签名等。

由于其不能互换,非同质化代币可以代表数位文件,如画作、声音、影片、游戏中的项目或其他形式的创意作品。

NFT系统架构

1.基础设施层:NFT的基础技术架构

NFT产业链底层是基础设施,具体包括底层公链、侧链/Layer2、开发工具、代币标准、存储和钱包等,上面基于协议层衍生出各类NFT应用及服务。

CryptoKitties在2017年以太坊上陷入停滞后,其背后公司DapperLabs意识到现有区块链不能满足现有需求,因此决定开发一个新型区块链—Flow。

Flow专门为NFT数字藏品和大型加密游戏等事物而设计,能解决区块链上的网络拥堵问题,还可实现大规模扩展性,提供高速低成本交易,目前许多开发人员已与Flow签约。该层除以太坊、Flow等底层公链外,还涵盖侧链、开发工具、钱包等基础设施。

2.协议层:NFT铸造协议及一级市场

该层不仅包括艺术、数字藏品、游戏IP等领域的铸造交易平台,还覆盖了TheSandbox、Cryptovoxels等虚拟空间。它们往往直接撮合创作者与用户,与NFT未来主流走向息息相关。

3.应用层:由基于协议层产生的代币而衍生出的应用为主

包括OpenSea、TokenTrove等泛二级市场,Nonfungible、CryptoSlam等数据平台,Nifty’s、Showtime等社交平台。

该层主要通过聚集流量和提供服务来体现自身价值。

开发nft系统需要的底层技术

NFT基于的底层技术——区块链。NFT所具有的唯一公开、不可篡改、可交易等属性均是基于当前的区块链技术实现。

nft的系统架构大概是这样的:

开发nft系统需要的底层技术
开发nft系统需要的底层技术

nft需要什么技术

最底层当然还是区块链,这一层主要是提供基础设施,比如共识算法,P2P网络等。这个链可以是公链,也可以是联盟链,甚至是私链。

公链领域当然首先要提以太坊,以太坊是NFT最早的公链。但是由于后来以太坊主网的拥堵,后来又出现了一些别的公链,比如flow,SOLANA等。关于以太坊拥堵的前后背景,如果想了解可以看下面这篇文章:

https://blog.csdn.net/pony_maggie/article/details/124809235

像我们前面提到的BAYC,就是在以太坊主网发行的NFT。

区块链本身是一个去中心化的分布式账本,其使用的哈希加密算法是具有原像抗性和次原像抗性,我们在区块链上发行的NFT本身就是在链上确认的交易,那么交易一旦确认形成区块加入主链,那这个NFT就是不能被恶意篡改的,它具有唯一的标识。

再往上看,是虚拟机EVM,EVM(ETHereum Virtual Machine)是「以太坊虚拟机」的缩写,EVM的存在是为了能让我们编写的智能合约代码,能够被解析并运行在公链环境中。关于EVM里面的一些细节,可以看我以前写的一篇文章:

https://blog.csdn.net/pony_maggie/article/details/124696748

下一个要说的技术点是智能合约。基于区块链的智能合约使用图灵完备的脚本语言来实现复杂功能的兼容,并通过依靠共识算法来进行执行,以保证一致性。智能合约让不依赖第三方信用中介的公平交易成为可能,可以实现跨行业、跨领域、跨生态的价值交互。

NFT的本质其实是由智能合约创建、维护、执行的非同质化数字资产通证。要创建NFT,首先你要有一个智能合约,这个智能合约在以太坊主链上会有一个唯一的地址,比如前面提到的BAYC,它智能合约的地址是

0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D

我们可以在以太坊的浏览器中查看这个地址:

然后基于这个合约,我们可以创建NFTs,这里加s表示可以创建多个不同的NFT,比如BAYC就有10000个不同的猿,每个猿的区别是他们的元数据(metadata)不同,所以才会展示不同的图像效果。

有了智能合约后,如果要创建NFT,通常我们遵循某个协议,现自常用的协议是ERC721,ERC1155和ERC998三种。使用不同的协议创建NFT,一般是出于不同的使用场景,比如ERC1155的交易速度比ERC721高等,我们只需要关注其中一种协议创建nft的方法,其他的也不难。

所以这里我就以ERC721为例,简单说明下创建NFT的过程。下面的内容会展示小部分代码,这些代码的语法是solidity,这是在以太坊编写智能合约的一个语言。不会这个语言也没关系,大概能看懂什么意思就可以了。

ERC721协议定义了一组接口方法和事件,你写一个智能合约只要实现了这些方法和事件,它就是一个NFT的智能合约。

方法,

    function balanceOf(address _owner) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    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);

随便挑几个方法解释下,

ownerOf函数,参数是_tokenId,它返回该token的持有者地址

approve函数,可以授权给另外一个人转移代币的权利

事件,

    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);

上面这些是标准接口,还有一些扩展接口,根据需要决定是否实现。比如还有 ERC721Metadata 接口,这个是元数据接口,前面我们也提到了元数据。

/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension
/// @dev See https://eips.ethereum.org/EIPS/eip-721
///  Note: the ERC-165 identifier for this interface is 0x5b5e139f.
interface ERC721Metadata /* is ERC721 */ {
    /// @notice A descriptive name for a collection of NFTs in this contract
    function name() external view returns (string _name);

    /// @notice An abbreviated name for NFTs in this contract
    function symbol() external view returns (string _symbol);

    /// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
    /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
    ///  3986. The URI may point to a JSON file that conforms to the "ERC721
    ///  Metadata JSON Schema".
    function tokenURI(uint256 _tokenId) external view returns (string);
}

还有枚举相关的接口,

/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
/// @dev See https://eips.ethereum.org/EIPS/eip-721
///  Note: the ERC-165 identifier for this interface is 0x780e9d63.
interface ERC721Enumerable /* is ERC721 */ {
    /// @notice Count NFTs tracked by this contract
    /// @return A count of valid NFTs tracked by this contract, where each one of
    ///  them has an assigned and queryable owner not equal to the zero address
    function totalSupply() external view returns (uint256);

    /// @notice Enumerate valid NFTs
    /// @dev Throws if `_index` >= `totalSupply()`.
    /// @param _index A counter less than `totalSupply()`
    /// @return The token identifier for the `_index`th NFT,
    ///  (sort order not specified)
    function tokenByIndex(uint256 _index) external view returns (uint256);

    /// @notice Enumerate NFTs assigned to an owner
    /// @dev Throws if `_index` >= `balanceOf(_owner)` or if
    ///  `_owner` is the zero address, representing invalid NFTs.
    /// @param _owner An address where we are interested in NFTs owned by them
    /// @param _index A counter less than `balanceOf(_owner)`
    /// @return The token identifier for the `_index`th NFT assigned to `_owner`,
    ///   (sort order not specified)
    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
}

下面这个链接,你可以看到一个实现了ERC721的例子:

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol

这里例子属于OpenZeppelin的一部分,Openzeppelin是一个开源的智能合约库,我们可以很方便的通过直接继承它里面的一些实现好的类来写一个自己的NFT,比如:

 pragma solidity ^0.8.0;

   import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
   import "@openzeppelin/contracts/utils/Counters.sol";
   import "@openzeppelin/contracts/access/Ownable.sol";
   import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";

   contract MyNFT is ERC721URIStorage, Ownable {
       using Counters for Counters.Counter;
       Counters.Counter private _tokenIds;

       constructor() ERC721("MyNFT", "NFT") {}

       function mintNFT(address recipient, string memory tokenURI)
           public onlyOwner
           returns (uint256)
       {
           _tokenIds.increment();

           uint256 newItemId = _tokenIds.current();
           _mint(recipient, newItemId);
           _setTokenURI(newItemId, tokenURI);

           return newItemId;
       }
   }

这个代码很短,它包含一个计数器(Counter)、一个构造函数(constructor),和一个函数(mintNFT)。是的,这些代码我们就实现了一个简单的NFT。这要得益于ERC721URIStorage,这个的OpenZeppelin合约类,它已经帮我们实现了前面提到的协议接口中的大部分方法。

区块链的数据结构分为区块头、区块体,不同区块之间通过前一区块头的哈希值连接,形成链式结构,区块头与区块体之间通过默克尔根字段相连。以以太坊为例,区块头中存储的数据主要包括父区块头哈希值、当前区块交易相关的默克尔树根节点哈希值、区块难度值、矿工地址、区块高度、Gas上限、Gas使用、时间戳、Nonce值等,区块体中存储的数据包括交易记录表和叔区块,其中NFT的交易记录存储于区块体的数据记录表中,由矿工打包。

区块链结构简易图如下

开发nft系统需要的底层技术
开发nft系统需要的底层技术

区块链上确认打包入块的数据不可篡改,将永久存于链上。NFT的数据信息上链确认后,将无法再进行修改。当矿工或者超级节点采用共识算法完成出块后,会通过P2P协议向全网广播(P2P协议是一种分布式网络协议,早于区块链技术出现),各个节点在收到广播信息确认后,会将信息更新,这一机制实现了去中心化的分布式记录,通过共识算法保证恶意节点无法篡改信息。

国内NFT生态版图的底部通信层包括:

阿里的蚂蚁链、腾讯的至信链等联盟链;

国产公链Conflux、波场TRON、小蚁NEO、比原链BTM、量子链Qtum等。

整体来看,我国NFT生态的底层架构尚未成熟,蚂蚁链、至信链等联盟链作为半中心化的区块链,技术比较成熟、安全可控,但联盟链之间互不相通、市场交易半径有限,而国内尚未孵化出一个完善监管体系内安全可控、具备足够的公信力和市场影响力的国产公链。

在目前不完备的监管体系和底层架构环境下,我国NFT交易平台、NFT项目创作者和投资者三方都处于谨慎探索阶段,NFT交易主要局限在数字藏品的一级交易市场。

NFT系统的原理

区块链上允许C端或B端用户将个人数据或商业数据(比如个人ID、证书、公司财务数据甚至某些行业数据)等放置在区块链网络上,而非同质化代币也因此成为了互联网行业的下一个热点。

现阶段NFT尚处于发展初期,更多的应用于个人资产保护,但由NFT代表的区块链技术将成为构筑元宇宙的基础,长期将在更多领域发挥价值。

NFT系统的生态

相比于过去几年早已通过宣传炒作而市值暴涨的大多数虚拟货币都是同质化代币,非同质化代币有明显的区别。

同质化代币(FT)中的同类型FT均可实现互换,即每一枚FT都是完全一样的,可以实现较低成本的大量复制,从而在虚拟世界中有极强的货币属性。

非同质化代币(NFT)中即便基于相同底层协议标准,每一枚代币也是不同的,即每一枚代币都有其独特性,可以用于存储独特的信息,对比FT,NFT更表象的作用是标记物品的归属。

NFT发展至今已经出现了三种底层协议,根据上线时间分别为ERC-721,ERC-1155和ERC-998。

NFT价值产业链

NFT产业价值链按照Token流动分为三层,由下至上依次为基础设施层、协议层以及应用层。

总结:开发一个nft的系统对于技术上没的要求还是比较高的,如果你也有nft系统开发上面的疑问可以在首页添加我的微信沟通交流哦,或者底部留言也行。

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/399/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年 6月 24日 1:44:06
下一篇 2022年 6月 24日 10:46:33

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!