如何使用 IPFS 在區(qū)塊鏈上存儲(chǔ)文件?
在本系列中,我們將討論在區(qū)塊鏈上存儲(chǔ)文件文檔的鏈上和鏈下方法。
稍后,我們將學(xué)習(xí)如何使用由Moralis[1]和Infura IPFS[2]提供支持的星際文件系統(tǒng) (IPFS) 網(wǎng)絡(luò)在鏈下存儲(chǔ)圖像、PDF 或任何其他數(shù)字資產(chǎn)等文件。
在本教程系列結(jié)束時(shí),您將能夠在 IPFS 網(wǎng)絡(luò)上存儲(chǔ)和訪問文件。
區(qū)塊鏈作為數(shù)據(jù)庫
作為數(shù)據(jù)庫,區(qū)塊鏈?zhǔn)且粋€(gè)不可變的數(shù)字交易賬本,分布在多個(gè)計(jì)算機(jī)網(wǎng)絡(luò)上。它使我們能夠存儲(chǔ)數(shù)據(jù),即NFT 元數(shù)據(jù)[3](包括文件),并以與任何其他數(shù)據(jù)庫相同的方式檢索它們。
在區(qū)塊鏈上存儲(chǔ)文件(鏈上)
鏈上是指直接在區(qū)塊鏈上發(fā)生的經(jīng)過驗(yàn)證的活動(dòng)或交易。在這種情況下,將文件直接上傳到區(qū)塊鏈也是一種鏈上活動(dòng)。
但是,我們應(yīng)該直接在鏈上存儲(chǔ)文件嗎?將文件保存在鏈上是個(gè)好主意嗎?區(qū)塊鏈存儲(chǔ)成本是多少?
在區(qū)塊鏈上存儲(chǔ)文件的成本(鏈上)
在區(qū)塊鏈上存儲(chǔ)大文件的成本可能非常昂貴。根據(jù) IBM第 9 頁[4]的“區(qū)塊鏈技術(shù)的存儲(chǔ)需求 - 觀點(diǎn)文檔” ,1GB 的存儲(chǔ)在區(qū)塊鏈上的成本約為 100 美元,比傳統(tǒng)存儲(chǔ)貴 500 倍。
區(qū)塊鏈(On-Chain)文件存儲(chǔ)性能
除了昂貴之外,在區(qū)塊鏈上存儲(chǔ)大量文件會(huì)增加文件的訪問延遲[5](增加從區(qū)塊鏈上傳/下載文件所需的時(shí)間)。
文件存儲(chǔ)需要低延遲才能快速訪問。但是,當(dāng)文件過重導(dǎo)致延遲增加時(shí),這可能會(huì)降低區(qū)塊鏈系統(tǒng)的性能,并使維護(hù)變得非常困難。
不建議將文件、合同、文檔、PDF 和個(gè)人信息等非交易數(shù)據(jù)直接存儲(chǔ)在區(qū)塊鏈上,但您應(yīng)該考慮將它們存儲(chǔ)在鏈下。
將文件存儲(chǔ)在區(qū)塊鏈之外(鏈下)
術(shù)語“鏈下”是指發(fā)生在區(qū)塊鏈之外的活動(dòng)或交易。在這種情況下,鏈下資產(chǎn)是不直接上傳到區(qū)塊鏈上的文件。
由于不建議存儲(chǔ)非交易數(shù)據(jù),因此文件被上傳到另一個(gè)服務(wù)器或數(shù)據(jù)庫(IPFS、MongoDB、Oracle 等),為上傳的文件生成的 HashID 將作為元數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈上。
什么是 IPFS?
Web3 數(shù)據(jù)庫
星際文件系統(tǒng)(IPFS)是一個(gè)去中心化的存儲(chǔ)系統(tǒng)。一種協(xié)議和點(diǎn)對(duì)點(diǎn) (p2p) 網(wǎng)絡(luò),用于在區(qū)塊鏈等分布式文件系統(tǒng)中存儲(chǔ)、訪問和共享數(shù)據(jù)。
IPFS 基于基于內(nèi)容的身份 (CID) 或基于內(nèi)容的尋址,其創(chuàng)建速度比保存文件的傳統(tǒng)基于位置的尋址方法更快。
什么是基于位置的尋址?
HTTP:“哪里”是你想要的內(nèi)容?♂?
基于位置的尋址是訪問 Internet 上的照片、音樂和文件等內(nèi)容的傳統(tǒng)方法,它需要通過提供內(nèi)容的絕對(duì)路徑或地址來指定內(nèi)容的托管位置,如下所示:
基于位置的尋址的局限性在于它使用集中式服務(wù)器,如果托管它們的服務(wù)器出現(xiàn)故障,則內(nèi)容將不可用。
在 Twitter 和 Facebook 等集中式服務(wù)器中,它們獨(dú)立控制用戶保存的內(nèi)容的傳遞方式(即 URL),您只能通過 Twitter URL 而不是 Facebook URL 訪問 Twitter 個(gè)人資料圖像。
什么是基于內(nèi)容的尋址?
IPFS:你想要“什么”內(nèi)容
在基于內(nèi)容的尋址或內(nèi)容尋址存儲(chǔ) (CAS) 中,每個(gè)上傳的內(nèi)容都有自己的唯一標(biāo)識(shí)符,稱為Hash,可以將其與指紋進(jìn)行比較,并且沒有兩個(gè)內(nèi)容可以共享相同的哈希。
照片、音樂和文件等內(nèi)容可以通過其唯一的 IPFS 哈希而不是它們的位置來訪問。
任何上傳到 IPFS 的內(nèi)容都可以通過支持的 IPFS 公共網(wǎng)關(guān)訪問。例如,當(dāng)通過 Moralis IPFS 上傳文件時(shí),我們可以使用 Infura IPFS URL 訪問文件。
上傳的內(nèi)容存儲(chǔ)在一個(gè) IPFS 對(duì)象中,該對(duì)象是一個(gè)具有兩個(gè)字段的數(shù)據(jù)結(jié)構(gòu),一個(gè)數(shù)據(jù)可以容納最多 256 KB 的 blob 數(shù)據(jù),另一個(gè)是links,它是指向其他 IPFS 對(duì)象的鏈接數(shù)組。
/* IPFS Object Example */
{
Data: "",
Links: [
{
Name: “”,
Hash: “”,
Size: 256000
}
]
}
當(dāng)內(nèi)容大小超過 256kb 時(shí),IPFS 會(huì)自動(dòng)將其分解為多個(gè)對(duì)象并創(chuàng)建一個(gè)空 IPFS 以將所有哈希鏈接在一起。
存儲(chǔ)在 IPFS 上的內(nèi)容不能像在區(qū)塊鏈上那樣更改。相反,IPFS 支持您的內(nèi)容的版本控制,稱為 IPFS 提交對(duì)象,它連接到以前的版本對(duì)象。
IPFS 最初由 Protocol Labs 的創(chuàng)始人 Juan Benet 于 2015 年 2 月創(chuàng)建。
IPFS 數(shù)據(jù)存儲(chǔ)在哪里?
緩存文件夾
存儲(chǔ)在 IPFS 上的數(shù)據(jù)保存在本地計(jì)算機(jī)的緩存文件夾中,并提供給通過 IPFS 網(wǎng)關(guān)請(qǐng)求它的其他人。數(shù)據(jù)也緩存在新用戶的計(jì)算機(jī)上。
緩存的數(shù)據(jù)在垃圾收集期間被丟棄,這可能導(dǎo)致數(shù)據(jù)丟失。為了將您的數(shù)據(jù)永久保存在 IPFS 上,您需要將其固定到 IPFS 網(wǎng)絡(luò)之一。
IPFS 的優(yōu)勢(shì)是什么?
1. 快速記錄檢索。
2. 它適用于所有技術(shù)。
3. 只能存儲(chǔ)單個(gè)內(nèi)容實(shí)例(不能重復(fù))。
4. 上傳的內(nèi)容具有唯一標(biāo)識(shí)符是真實(shí)的。
5. 上傳的內(nèi)容不能更改。
IPFS 和 HTTP 存儲(chǔ)之間的區(qū)別
IPFS(基于內(nèi)容的尋址)HTTP(基于位置的尋址)它基于分散的服務(wù)器它基于一個(gè)集中的源服務(wù)器它利用內(nèi)容尋址它利用位置尋址具有相同內(nèi)容的所有對(duì)象只存儲(chǔ)一次所有具有相同內(nèi)容的對(duì)象都可以存儲(chǔ)多次文件在多個(gè)節(jié)點(diǎn)之間共享并且始終可以訪問服務(wù)器關(guān)閉時(shí)無法訪問文件它有很大的市場(chǎng)它的市場(chǎng)低不可變(版本控制)可變的。
總結(jié)
星際文件系統(tǒng)(IPFS)是一種可靠的去中心化存儲(chǔ)系統(tǒng)。它也被廣泛認(rèn)為是文件存儲(chǔ)的未來。
在本文中,我們了解了 HTTP 和 IPFS 存儲(chǔ)之間的區(qū)別,以及在區(qū)塊鏈上存儲(chǔ)文件的鏈上和鏈下(IPFS)方法。
引用鏈接
[1] Moralis: https://moralis.io/
[2] Infura IPFS: https://infura.io/
[3] NFT 元數(shù)據(jù): https://docs.opensea.io/docs/metadata-standards
[4] 根據(jù) IBM第 9 頁: https://www.ibm.com/downloads/cas/LA8XBQGR
[5] 訪問延遲: https://www.igi-global.com/dictionary/access-latency/267