目前,社區中出現了一些工具,如IPFS社區的Minty和Filecoin社區的Filecoin box,幫助我們把在去中心化網路(IPFS或Filecoin)創建并存儲的數字資產(如畫作、著作、音視訊等)發布到以太坊網路中Token化,制作成NFT(非同質化代幣)。然而,這些工具幫你在IPFS上存儲的資產資訊完整嗎?
筆者就當前IPFS上存儲的NFT資訊的完整性提出了一些自己的思考:
-
NFT的創建過程是怎樣的?
-
怎么樣的NFT資訊才是完整的?
-
IPFS上的NFT缺少了什么資訊?
“不在IPFS上的NFT,不是你的NFT”
在這之前,由于以太坊數據存儲成本過高的問題,數字資產本身由各個中心化網站的服務器保管,資產和區塊鏈之間是靠NFT的鏈上元數據(metadata)中的一段URI鏈接的,
帶來的弊端就是一旦網站癱瘓或者服務器數據丟失,該鏈接失效,數字資產隨即丟失或損毀,也因此丟掉了NFT永久保存和不可篡改的兩個最基本的屬性。
打個比方,你的NFT是一幅畫,那么IPFS是畫的紙,區塊鏈是保險箱或者是藝術館的相框,而你的私鑰就是打開它們的鑰匙,如果紙這個載體不穩定,存在風險,數字資產也就有可能化為烏有,
在去中心化網路這個載體中存儲體積較大的數字資產可以避免這一問題,
NFT的創建過程是怎樣的?
下面,我們來看看近期出現的這些工具的做法,并發現一些問題。
我們可以在opensea.io輕松地鑄造一個NFT:
連接錢包,給你即將創建的NFT們一個所有者地址;
創建一個新項目,輸入NFT的名稱、描述和NFT資產的鏈接;
最后,點擊添加即可完成。
最為核心的上鏈操作由opensea代為執行。然而,從Minty(https://github.com/yusefnapora/minty)我們可以窺見這個黑盒,即NFT在以太坊中實際的創建過程:
1. 部署合約
在以太坊上發送一筆交易,部署創建NFT的智能合約,該合約包含創建NFT以及交易等相關的功能。
2. 創作內容
在創作者本地完成NFT的內容創作,如一幅畫.png或一篇文章.pdf,并上傳、固定到IPFS或Filecoin網路,得到一個內容數據的鏈接:Content URI(ipfs://+CID)。
注:CID是對一段內容的描述的唯一標識符(內容的哈希值)。
3. Token化
將創作的內容加上它的名字和一些說明構成元數據(metadata)完成創作內容的Token化,形成一筆數字資產。并將元數據上傳IPFS,獲得metadata URI(ipfs://+CID)。
4. 資產上鏈
創作者從他的外部賬戶發送一筆包含NFT元數據URI的交易到1中的智能合約,來調用合約中的鑄造方法,然后返回該枚NFT在當前合約中的唯一標識符——Token ID。Token ID的返回標志著NFT創建成功,待這筆交易礦工打包進區塊并獲得確認后,合約會觸發一個轉移事件(transfer event),將Token ID發送給創作者,該事件的發生標志著NFT所有權和使用權的確認。
如此一來,你可以在以太坊上查看并驗證你NFT背后的數字資產。換句話說,以太坊上的NFT是完整的。但是,IPFS上保存的NFT元數據和NFT資產數據并不能提供在區塊鏈上驗證該NFT的全部資訊。也就是IPFS上的NFT并不完整。
怎么樣的NFT資訊才是完整的?
以下是Minty(或者其他工具)在IPFS上存儲的NFT全部數據。
我們看到,IPFS上的NFT數據只有元數據和元數據中包含的內容數據(上圖中的asset data),缺少token的鏈上資訊。如果我們要通過Chainlink這樣的預言機網路實現IPFS或Filecoin的雙向通信,這部分鏈上資訊必不可少。
那么,IPFS上完整的NFT資產到底應該長什么樣子?
IPFS上的NFT缺少了什么資訊?
我們需要先了解如何定位一個NFT,
在ERC-721標準的智能合約中,每個NFT都有一個唯一的uint256 ID標識。NFT的所有數據都存在智能合約的資料庫中,此標識碼在本合約存續的有效期內不得變更。(合約地址,uint256 tokenId)是以太坊鏈上某個特定資產的全局唯一標識符,并且能夠完成NFT的查詢和驗證,
所以,我們的做法是:在上傳metadata資訊的方法中,如minty中的createNFTFromAssetData(),在NFT鑄造完成后,添加下面的鏈上資訊,執行方法后存儲在IPFS上。
Contract address + TokenID + Owner address(可選)
根據合約地址和TokenID可以檢索到創建NFT時創作者發送的創建交易,也能跟蹤到后續NFT變更所有者的交易數據。因此,這里所有者地址并不是必要數據項。
結論
綜上,
(metadata + Contract address + TokenID)
才是IPFS上NFT資產的完整資訊。
引用
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
PS:本文僅供研究分析,不做投資建議,忘投資者謹慎投資。