Force Think | 你存在IPFS上的NFT還缺點(diǎn)什么…

IPFS原力區(qū)原作
目前,社區(qū)中出現(xiàn)了一些工具,如IPFS社區(qū)的Minty和Filecoin社區(qū)的Filecoin box,幫助我們把在去中心化網(wǎng)絡(luò)(IPFS或Filecoin)創(chuàng)建并存儲(chǔ)的數(shù)字資產(chǎn)(如畫作、著作、音視頻等)發(fā)布到以太坊網(wǎng)絡(luò)中Token化,制作成NFT(非同質(zhì)化代幣)。然而,這些工具幫你在IPFS上存儲(chǔ)的資產(chǎn)信息完整嗎?
筆者就當(dāng)前IPFS上存儲(chǔ)的NFT信息的完整性提出了一些自己的思考:
NFT的創(chuàng)建過程是怎樣的?
怎么樣的NFT信息才是完整的?
IPFS上的NFT缺少了什么信息?
“不在IPFS上的NFT,不是你的NFT”
在這之前,由于以太坊數(shù)據(jù)存儲(chǔ)成本過高的問題,數(shù)字資產(chǎn)本身由各個(gè)中心化網(wǎng)站的服務(wù)器保管。資產(chǎn)和區(qū)塊鏈之間是靠NFT的鏈上元數(shù)據(jù)(metadata)中的一段URI鏈接的。
帶來的弊端就是一旦網(wǎng)站癱瘓或者服務(wù)器數(shù)據(jù)丟失,該鏈接失效,數(shù)字資產(chǎn)隨即丟失或損毀,也因此丟掉了NFT永久保存和不可篡改的兩個(gè)最基本的屬性。
打個(gè)比方,你的NFT是一幅畫,那么IPFS是畫的紙,區(qū)塊鏈?zhǔn)?span lang="en-US" style="font-weight: bold;">保險(xiǎn)箱或者是藝術(shù)館的相框,而你的私鑰就是打開它們的鑰匙。如果紙這個(gè)載體不穩(wěn)定,存在風(fēng)險(xiǎn),數(shù)字資產(chǎn)也就有可能化為烏有。
在去中心化網(wǎng)絡(luò)這個(gè)載體中存儲(chǔ)體積較大的數(shù)字資產(chǎn)可以避免這一問題。
NFT的創(chuàng)建過程是怎樣的?
下面,我們來看看近期出現(xiàn)的這些工具的做法,并發(fā)現(xiàn)一些問題。
我們可以在opensea.io輕松地鑄造一個(gè)NFT:
連接錢包,給你即將創(chuàng)建的NFT們一個(gè)所有者地址;
創(chuàng)建一個(gè)新項(xiàng)目,輸入NFT的名稱、描述和NFT資產(chǎn)的鏈接;
最后,點(diǎn)擊添加即可完成。
最為核心的上鏈操作由opensea代為執(zhí)行。然而,從Minty(https://github.com/yusefnapora/minty)我們可以窺見這個(gè)黑盒,即NFT在以太坊中實(shí)際的創(chuàng)建過程:

1. 部署合約
在以太坊上發(fā)送一筆交易,部署創(chuàng)建NFT的智能合約。該合約包含創(chuàng)建NFT以及交易等相關(guān)的功能。
2. 創(chuàng)作內(nèi)容
在創(chuàng)作者本地完成NFT的內(nèi)容創(chuàng)作,如一幅畫.png或一篇文章.pdf,并上傳、固定到IPFS或Filecoin網(wǎng)絡(luò),得到一個(gè)內(nèi)容數(shù)據(jù)的鏈接:Content URI(ipfs://+CID)。
注:CID是對(duì)一段內(nèi)容的描述的唯一標(biāo)識(shí)符(內(nèi)容的哈希值)。
3. Token化
將創(chuàng)作的內(nèi)容加上它的名字和一些說明構(gòu)成元數(shù)據(jù)(metadata)完成創(chuàng)作內(nèi)容的Token化,形成一筆數(shù)字資產(chǎn)。并將元數(shù)據(jù)上傳IPFS,獲得metadata URI(ipfs://+CID)。
4. 資產(chǎn)上鏈
創(chuàng)作者從他的外部賬戶發(fā)送一筆包含NFT元數(shù)據(jù)URI的交易到1中的智能合約,來調(diào)用合約中的鑄造方法,然后返回該枚NFT在當(dāng)前合約中的唯一標(biāo)識(shí)符——Token ID。Token ID的返回標(biāo)志著NFT創(chuàng)建成功。待這筆交易礦工打包進(jìn)區(qū)塊并獲得確認(rèn)后,合約會(huì)觸發(fā)一個(gè)轉(zhuǎn)移事件(transfer event),將Token ID發(fā)送給創(chuàng)作者。該事件的發(fā)生標(biāo)志著NFT所有權(quán)和使用權(quán)的確認(rèn)。
如此一來,你可以在以太坊上查看并驗(yàn)證你NFT背后的數(shù)字資產(chǎn)。換句話說,以太坊上的NFT是完整的。但是,IPFS上保存的NFT元數(shù)據(jù)和NFT資產(chǎn)數(shù)據(jù)并不能提供在區(qū)塊鏈上驗(yàn)證該NFT的全部信息。也就是IPFS上的NFT并不完整。
怎么樣的NFT信息才是完整的?
以下是Minty(或者其他工具)在IPFS上存儲(chǔ)的NFT全部數(shù)據(jù)。

我們看到,IPFS上的NFT數(shù)據(jù)只有元數(shù)據(jù)和元數(shù)據(jù)中包含的內(nèi)容數(shù)據(jù)(上圖中的asset data),缺少token的鏈上信息。如果我們要通過Chainlink這樣的預(yù)言機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)IPFS或Filecoin的雙向通信,這部分鏈上信息必不可少。
那么,IPFS上完整的NFT資產(chǎn)到底應(yīng)該長(zhǎng)什么樣子?
IPFS上的NFT缺少了什么信息?
我們需要先了解如何定位一個(gè)NFT。
在ERC-721標(biāo)準(zhǔn)的智能合約中,每個(gè)NFT都有一個(gè)唯一的uint256 ID標(biāo)識(shí)。NFT的所有數(shù)據(jù)都存在智能合約的數(shù)據(jù)庫(kù)中。此標(biāo)識(shí)碼在本合約存續(xù)的有效期內(nèi)不得變更。(合約地址,uint256 tokenId)是以太坊鏈上某個(gè)特定資產(chǎn)的全局唯一標(biāo)識(shí)符,并且能夠完成NFT的查詢和驗(yàn)證。

所以,我們的做法是:在上傳metadata信息的方法中,如minty中的createNFTFromAssetData(),在NFT鑄造完成后,添加下面的鏈上信息,執(zhí)行方法后存儲(chǔ)在IPFS上。
Contract address + TokenID + Owner address(可選)
根據(jù)合約地址和TokenID可以檢索到創(chuàng)建NFT時(shí)創(chuàng)作者發(fā)送的創(chuàng)建交易,也能跟蹤到后續(xù)NFT變更所有者的交易數(shù)據(jù)。因此,這里所有者地址并不是必要數(shù)據(jù)項(xiàng)。
結(jié)論
綜上,
(metadata + Contract address + TokenID)
才是IPFS上NFT資產(chǎn)的完整信息。
引用
https://eips.ethereum.org/EIPS/eip-721
https://docs.ipfs.io/how-to/mint-nfts-with-ipfs/#minty
https://blog.ipfs.io/2021-04-05-storing-nfts-on-ipfs/
https://www.trufflesuite.com/boxes/filecoin#gallery-ui


