Ultrain NFT 发行框架介绍

NFT(Non-Fungible Token)资产也称为异质化代币,是区块链上最经常发行的一类资产。它代表的是一类具有唯一性的资产,如艺术品,奢侈品,门票……这一类资产的有一个共同的特点,即它们都具有唯一性。当它们数字化之后在链上发行后,能够与物理世界的物品产生一一对应的关系。
NFT资产在以太坊平台上由ERC721和ERC2477描述,在Ultrain上由UIP09协议描述。符合这些协议描述的资产,可以方便的在对应区块链网络发行和转移。
发行区块链上的NFT资产存在一定的学习门槛,这些问题导致普通的业务公司不能简单便捷地发布和管理NFT,同时由于区块链的透明性,也会有一些隐私方面的顾虑。为了解决这些问题,Ultrain开发了一个专门用于NFT发行管理的框架–DAIF(Digital Assets Issuing Framework)。基于该框架,开发者可以快速的发行NFT资产,通过该框架发行的NFT资产,不仅可以独立运行,也可以互相交互,组合,形成新的NFT资产。
Ultrain同时也在进行NFT数字资产交易平台的研发,我们希望能提供一个类似Uniswap的交易平台,让基于DAIF框架发行的NFT数字资产可以在该平台上去中心化的流转。
本文介绍NFT的发行和管理中需要面对的问题、解决这些问题的方法以及如何利用Ultrain DAIF来完成NFT的发行和管理。
1. 我们面对的一些问题
区块链能够解决现实社会生活中的许多问题,但是因为区块链的透明性,这就意味着所有的信息都是公开的,每个人都可以看到这些信息。这当然是很一个很美妙的特性,但是在某些特定的商业应用中,并不是所有的信息都适合公开给每一个人。那么有没有办法,既能保持区块链技术的透明和不可篡改性,又能满足保护隐私的要求呢?
在目前主流的区块链应用平台上,无论是以太坊还是EOS,存储大数据都是一件很昂贵的事情。大数据除了会占用共识节点的大量资源,同时还会拖累区块链的网络速度。甚至在很多情况下,将大数据保存在区块链上根本就是一件不可能完成的任务。但是在实际的商业应用中,保存产品图片、创作的文章、发行某个具有知识产权的软件……都是非常普遍的行为。那么,就不能将这些大数据保存在区块链上,同时保持高效吗?
当区块链逐渐变成一种基础服务的时候,是不是每一个公司都要同时配置区块链开发的人员,同时又要配置业务开发人员呢?每个区块链平台的开发人员都要配置吗?
2. 我们准备怎样解决这些问题
上面我们提到了三个主要问题:隐私保护、大数据存储、链和业务逻辑隔离。
对于隐私保护问题,DAIF利用Merkle树的可验证原理,允许业务开发人员自己来决定哪些数据要公开源数据,哪些数据只公开源数据的hash。不管是公开源数据还是公布hash,都可以保证可验证性,即批露的源数据必定是原始数据的一部分。
对于大数据存储问题,DAIF可以方便的与去中心化存储网络IPFS集成,将图片、音乐、软件……的原始文件保存在IPFS 上,然后在区块链上只保存这些文件的IPFS检索地址hash。任何对这些文件感兴趣的人,都可以通过 地址hash下载到这些文件,就能够验证这些文件的真伪。
对于隔离区块链和业务逻辑,DAIF提供了经过审查的合约源码。这些源码实现了以太坊平台上标准的ERC721和ERC2477协议, 以及Ultrain平台上的UIP06和UIP09协议。同时,DAIF提供了钱包插件、网络插件、交易插件等丰富的插件。业务开发人员只需要关注自己的业务,然后调用这些插件的API,就可以轻松的将交易发送到对应的链上,不需要关注不同区块链之间的差异。
3. 我们是怎么做到的
DAIF为了完成上述目标,引入了以下关键概念和相应的工作流程。
一、关键概念
1、Schema文件

Schema文件用来描述NFT资产的属性信息,包括属性(一般是JSON格式)的结构、每个字段的数据类型。每一个字段叫做一个节点。一个典型的schema文件定义如下:

Schema文件是一个公开文件,任何人可以查阅。Schema文件本身无须上链,但是它的hash,称为schemaId,必须上链,以便于验证内容是否被更改。
2、Metadata
Metadata是满足schema定义的子数据结构,也就是已经被批露的信息。如果我们按照上述定义的schema,发行一个如下的NFT:

同时, 我们决定批露以下路径的信息:

那么产生的metadata就是如下的信息:

Metadata是能够公开出来的数据,无需上链。
3、Evidence文件
Evidence文件是保存在中心服务器上的证明文件,它的内容包括NFT属性中每 个节点内容的hash,如果这个节点的内容被批露了的话,也包括批露的节点内容明文。上述metadata定义的NFT信息所生成的evidence如下:

4、imprint
imprint是一个hash值,它由NFT所有节点的evidence组成的Merkle树的根节点的hash值 。这个值在NFT发行时就已经确定,并且被记录到链上。除非将来变更了NFT的属性,否则imprint值不会改变。它的主要作用是用来验证批露的节点信息是否正确。
上述发行的NFT的imprint将会是如下值:

二、工作流程
DAIF封装了NFT发行过程中的所有操作,业务开发人员只需要调用对应的API即可,无须关注实现细节。
1、发行NFT
利用DAIF发行NFT相当简单,只要按以下几个步骤定义好NFT的属性信息和发行信息。
首先,在Schema文件中的描述NFT属性信息,然后对schema文件进行hash,得到SchemaId。
然后,定义好需要批露的数据paths。
接着,准备好NFT的数据,计算出它的imprint和metadata。
接着,将imprint信息发布到链上;将evidence信息发布到公共服务器上。
至此,发行NFT的工作就完成了。
如果以实际代码来表示上述流程的话,那么它应该是这样的:

2、验证NFT的信息
在实际的应用过程中,如果NFT持有人向你提供如下的Metadata信息,表示这个NFT确实有满足你的需求的信息,那么你要怎么验证他提供的Metadata未经篡改呢?

在发行NFT过程中,我们已经提到,每一个NFT都有一个对应的evidence文件,它是公开的,通过这份Metadata,我们就能够知道这个NFT的schema信息和evidence文件的URL。同时,imprint是保存在链上的,也可以方便的拿到它。那么在DAIF里面,就能够很方便验证这份Metadata是否真实了。

3、变更批露信息
由于变更批露信息不涉及修改NFT的原始信息,所以也就不会改变imprint。因而只需要将发行NFT步骤中的部分操作抽取出来,重新生成metadata和evidence就可以了,不用更新链上信息。
4、变更NFT的原始信息
和变更批露信息不同,变更原始信息会导致imprint改变,所以如果需要变更NFT的原始信息,就相当于把发行NFT的步骤重新走一遍,然后在链上更新imprint信息,同时更新evidence和metadata信息。
4. 总结
在前面的章节中,我们描述了致力于解决的问题、解决这些问题的原理、以及利用DAIF框架来实际操作。通过这些章节,我们就能够利用DAIF框架,满足我们发行NFT资产的需求。