要說什么人有錢姑丑,當然是中國大媽蛤签,永遠在屯黃金,為什么大媽們?nèi)绱擞绣X彻坛,每一個愛屯黃金的大媽的身后顷啼,都有一個愛挖礦的大叔。什么是挖礦昌屉?挖礦需要了解哪些知識钙蒙?下面講給大家講解IPFS挖礦的重要部分IPFS。
IPFS對象通常由Base58編碼的散列引用间驮。例如躬厌,我們來看看使用IPFS命令。
例如竞帽,讓我們使用IPFS命令行工具來查看使用散列QmarHSr9aSNaPSR6G9KFPbuLV9aEqJfTk1y9B8pdwqK4Rq的IPFS對象:
在上面的例子中扛施,前面兩個字節(jié)的十六進制數(shù)是1220,其中12表示這是SHA256哈希函數(shù)屹篓,而20是哈希的長度(以字節(jié)為單位) - 32個字節(jié)疙渣。
數(shù)據(jù)和已命名的鏈接為IPFS對象的集合提供了一個Merkle DAG - DAG(指向無環(huán)圖)的結(jié)構(gòu),Merkle表示這是一個使用加密哈希來加密內(nèi)容的加密認證的數(shù)據(jù)結(jié)構(gòu)堆巧。
為了可視化圖形結(jié)構(gòu)妄荔,我們將通過節(jié)點中的數(shù)據(jù)以圖形形象化IPFS對象,并且鏈接將圖形邊緣定向到其他IPFS對象谍肤,其中鏈接的名稱是圖形邊緣上的標簽啦租。上面的例子可視化如下:
現(xiàn)在我們將給出可以由IPFS對象表示的各種數(shù)據(jù)結(jié)構(gòu)的示例。
文件系統(tǒng)
IPFS可以輕松地表示由文件和目錄組成的文件系統(tǒng)
小文件
一個小文件(<256 kB)由一個IPFS對象來表示荒揣,其中數(shù)據(jù)是文件內(nèi)容(加上一個小的頁眉和頁腳)并且沒有鏈接篷角,即鏈接數(shù)組是空的。請注意系任,文件名不是IPFS對象的一部分恳蹲,因此具有不同名稱和相同內(nèi)容的兩個文件將具有相同的IPFS對象表示形式虐块,并因此具有相同的散列。
我們可以使用命令ipfs add將一個小文件添加到IPFS:
我們可以使用ipfs cat查看上述IPFS對象的文件內(nèi)容:
用ipfs對象查看底層結(jié)構(gòu)get yield:
我們將這個文件可視化如下:
大文件
大文件(> 256 kB)由指向<256 kB的文件塊的鏈接列表表示阱缓,并且只有極小的數(shù)據(jù)說明此對象表示大文件非凌。 文件塊的鏈接具有空字符串作為名稱。
目錄結(jié)構(gòu)
目錄由代表文件或其他目錄的IPFS對象的鏈接列表表示荆针。?鏈接的名稱是文件和目錄的名稱敞嗡。?例如,考慮目錄test_dir的以下目錄結(jié)構(gòu):
文件hello.txt和my_file.txt都包含字符串Hello World航背!\ n喉悴。 文件testing.txt包含字符串Testing 123 \ n。
將此目錄結(jié)構(gòu)表示為IPFS對象時玖媚,它看起來像這樣:
注意包含Hello World箕肃!\ n的文件的自動重復(fù)數(shù)據(jù)刪除,此文件中的數(shù)據(jù)只存儲在IPFS中的一個邏輯位置(由其哈希尋址)今魔。
IPFS命令行工具可以無縫地跟蹤目錄鏈接名稱來遍歷文件系統(tǒng):
版本化的文件系統(tǒng)
IPFS可以表示Git使用的數(shù)據(jù)結(jié)構(gòu)勺像,以允許版本化的文件系統(tǒng)。 Git提交對象在Git Book中有描述错森。 IPFS Commit對象的結(jié)構(gòu)在撰寫本文時尚未完全明確吟宦,討論正在進行中。
Commit對象的主要屬性是它有一個或多個帶有名稱parent0涩维,parent1等指向前一條的鏈接殃姓,和一個連接名稱目標(這就是所謂的樹在git)指向文件系統(tǒng)結(jié)構(gòu)被提交。
我們作為一個例子瓦阐,我們以前的文件系統(tǒng)的目錄結(jié)構(gòu)蜗侈,以及兩個承諾:第一個承諾是原來的結(jié)構(gòu),并在第二承諾我們更新文件my_file.txt睡蟋。
注意這里我們有自動重復(fù)數(shù)據(jù)刪除踏幻,因此在第二新對象將是主目錄,該目錄我的_你和更新的文件我_ file.txt戳杀。
blockchains
這是最令人興奮的情況下使用規(guī)一叫倍。在過去的一個blockchain塊總是與哈希從后來的自然的DAG結(jié)構(gòu)。更先進的blockchains像伊斯利恩Blockchain也有相關(guān)狀態(tài)數(shù)據(jù)庫具有帕特麗夏梅克爾樹的結(jié)構(gòu)豺瘤,也可以模擬使用規(guī)對象。
我們假設(shè)一個簡單的blockchain每個塊包含以下數(shù)據(jù)模型:
一系列的交易對象
一個鏈接到前一個塊
一個國家的樹/哈希數(shù)據(jù)庫
該blockchain可以模擬在規(guī)如下:
我們的重復(fù)數(shù)據(jù)刪除的增益將狀態(tài)數(shù)據(jù)庫規(guī)?-?兩塊只有國家項目已經(jīng)改變听诸,需要顯式地存儲坐求。
這里有一個有趣的點之間的數(shù)據(jù)存儲在blockchain散列和存儲在blockchain數(shù)據(jù)的差異。在伊斯利恩平臺相關(guān)國家數(shù)據(jù)庫的數(shù)據(jù)存儲付出相當大的費用晌梨,為了減少國家數(shù)據(jù)庫膨脹(“blockchain膨脹”)桥嗤。因此须妻,這是一個常見的設(shè)計模式。
如果與它相關(guān)聯(lián)的狀態(tài)數(shù)據(jù)庫blockchain已經(jīng)規(guī)在儲存雜湊在blockchain在blockchain數(shù)據(jù)存儲變得有些模糊的區(qū)別表示泛领,在這種情況下荒吏,如果有人儲存在blockchain的IPFS鏈接我們可以無縫地點擊這個鏈接訪問數(shù)據(jù),如果數(shù)據(jù)被存儲在blockchain本身渊鞋。
我們?nèi)匀豢梢詤^(qū)分鏈斷鏈數(shù)據(jù)存儲绰更,但是。我們通過看什么礦工需要的過程創(chuàng)建一個新的塊時锡宋。在當前的伊斯利恩網(wǎng)絡(luò)礦工需要交易的過程中儡湾,將更新狀態(tài)數(shù)據(jù)庫。為此他們需要為了獲得充分的狀態(tài)數(shù)據(jù)庫能夠更新它执俩。
因此在blockchain狀態(tài)數(shù)據(jù)庫代表規(guī)我們?nèi)孕枰獦撕灁?shù)據(jù)作為“鏈”或“斷鏈”徐钠。“鏈”的數(shù)據(jù)會保留在本地礦工為了我的需要役首,而這個數(shù)據(jù)會被交易的直接影響尝丐。“斷鏈”的數(shù)據(jù)會被更新的用戶不需要感動的礦工衡奥。