天天看點

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

點選檢視第二章

IPFS原理與實踐

董天一 戴嘉樂 黃禹銘 著

第1章

認識IPFS

歡迎大家來到第1章。在這一章裡,我們首先将從宏觀上介紹IPFS。在了解技術細節之前,我們先來回答如下問題:什麼是IPFS?為什麼我們需要IPFS?它與正常的區塊鍊系統相比有什麼異同?IPFS和Filecoin會給現在的區塊鍊技術帶來什麼樣的改變?相信讀者讀完這一章後,會對上述幾個問題有自己的了解。

1.1 IPFS概述

早在2017年上半年,國内大部分投資人或開發者就已經接觸到了IPFS和Filecoin項目。那麼IPFS和Filecoin究竟是什麼?IPFS與區塊鍊到底是什麼關系?其有什麼優勢,竟然會得到如此廣泛的關注?其未來的應用前景到底如何?本節我們就來解答這幾個問題。

1.1.1 IPFS的概念和定義

IPFS(InterPlanetary File System)是一個基于内容尋址的、分布式的、新型超媒體傳輸協定。IPFS支援建立完全分布式的應用。它旨在使網絡更快、更安全、更開放。IPFS是一個分布式檔案系統,它的目标是将所有計算裝置連接配接到同一個檔案系統,進而成為一個全球統一的存儲系統。某種意義上講,這與Web最初的目标非常相似,但是它是利用BitTorrent協定進行Git資料對象的交換來達到這一個目的的。IPFS正在成為現在網際網路的一個子系統。IPFS有一個更加宏偉而瘋狂的目标:補充和完善現有的網際網路,甚至最終取代它,進而成為新一代的網際網路。這聽起來有些不可思議,甚至有些瘋狂,但的确是IPFS正在做的事情。圖1-1所示為IPFS的官方介紹。

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

IPFS項目通過整合已有的技術(BitTorrent、DHT、Git和SFS),建立一種點對點超媒體協定,試圖打造一個更加快速、安全、開放的下一代網際網路,實作網際網路中永久可用、資料可以永久儲存的全球檔案存儲系統。同時,該協定有内容尋址、版本化特性,嘗試補充甚至最終取代伴随了我們20多年的超文本傳輸協定(即HTTP協定)。IPFS是一個協定,也是一個P2P網絡,它類似于現在的BT網絡,隻是擁有更強大的功能,使得IPFS擁有可以取代HTTP的潛力。

Filecoin是運作在IPFS上的一個激勵層,是一個基于區塊鍊的分布式存儲網絡,它把雲存儲變為一個算法市場,代币(FIL)在這裡起到了很重要的作用。代币是溝通資源(存儲和檢索)使用者(IPFS使用者)和資源的提供者(Filecoin礦工)之間的中介橋梁,Filecoin協定擁有兩個交易市場—資料檢索和資料存儲,交易雙方在市場裡面送出自己的需求,達成交易。

IPFS和Filecoin互相促進,共同成長,解決了網際網路的資料存儲和資料分發的問題,特别是對于無數的區塊鍊項目,IPFS和Filecoin将作為一個基礎設施存在。這就是為什麼我們看到越來越多的區塊鍊項目采取了IPFS作為存儲解決方案,因為它提供了更加便宜、安全、可快速內建的存儲解決方案。

1.1.2 IPFS的起源

全球化分布式存儲網絡并不是最近幾年的新鮮品,其中最有名的3個就是BitTorrent、Kazaa、和Napster, 至今這些系統在全世界依舊擁有上億活躍使用者。尤其是BitTorrent用戶端,現在BitTorrent網絡每天依然有超過1000萬個節點在上傳資料。(不少剛從高校畢業的朋友應該還記得在校内網IPv6上分享電影和遊戲資源的情景)但令人遺憾的是,這些應用最初就是根據特定的需求來設計的,在這三者基礎上靈活搭建更多的功能顯然很難實作。雖然在此之前學術界和工業界做過一些嘗試,但自始至終沒有出現一個能實作全球範圍内低延時并且完全去中心化的通用分布式檔案系統。

之是以普及進展十分緩慢,一個原因可能是目前廣泛使用的HTTP協定已經足夠好用。截至目前,HTTP是已經部署的分布式檔案系統中最成功的案例。它和浏覽器的組合是網際網路資料傳輸和展示的最佳搭檔。然而,網際網路技術的進步從未停止,甚至一直在加速。随着網際網路的規模越來越龐大,現有技術也越來越暴露出了諸多弊端,龐大的基礎設施投資也讓新技術的普及異常困難。

但我們說,技術都有其适用的範圍,HTTP也是如此。四大問題使得HTTP面臨越來越艱巨的困難:

1)極易受到攻擊,防範攻擊成本高。随着Web服務變得越來越中心化,使用者非常依賴于少數服務供應商。HTTP是一個脆弱的、高度中心化的、低效的、過度依賴于骨幹網的協定,中心化的伺服器極易成為攻擊的目标。目前,為了維護伺服器正常運轉,服務商不得不使用各類昂貴的安防方案,防範攻擊成本越來越高。這已經成為HTTP幾乎無法克服的問題。

2)資料存儲成本高。經過十多年網際網路的飛速發展,網際網路資料存儲量每年呈現指數級增長。2011年全球資料總量已經達到0.7ZB(1ZB等于1萬億GB);2015年,全球的資料總量為8.6ZB;2016年,這個數字是16.1ZB。到2025年,全球資料預計将增長至驚人的163ZB,相當于2016年所産生16.1ZB資料的10倍。如果我們預計存儲4000GB(4TB)的資料,AWS簡單存儲服務(S3)的報價是對于第1個TB每GB收取0.03美金,對于接下來的49TB每GB收取0.0295美金的費用,那麼每個月将花費118.5美金用于磁盤空間。資料量高速增長,但存儲的價格依舊高昂,這就導緻伺服器-用戶端架構在今後的成本将會面臨嚴峻的挑戰。

3)資料的中心化帶來洩露風險。服務提供商們在為使用者提供各類友善服務的同時,也存儲了大量的使用者隐私資料。這也意味着一旦資料中心産生大規模資料洩露,這将是一場數字核爆。對于個人而言,使用者資訊洩露,則使用者賬号面臨被盜風險,個人隐私及财産安全難以保障;對于企業而言,資訊洩露事件會導緻其在公衆中的威望和信任度下降,會直接使客戶改變原有的選擇傾向,可能會使企業失去一大批已有的或者潛在的客戶。這并不是危言聳聽,幾乎每一年都會發生重大資料庫洩露事件。2018年5月,推特被曝出現安全漏洞,洩露3.3億使用者密碼;2017年11月,美國五角大樓意外洩露自2009年起收錄的18億條使用者資訊;2016年,LinkedIn 超1.67億個賬戶在黑市被公開銷售;2015年,機鋒網被曝洩露2300萬使用者資訊。有興趣的讀者可以嘗試在公開密碼洩露資料庫中查詢,是否自己的常用資訊或常用密碼被洩露,但自己卻毫不知情。

4)大規模資料存儲、傳輸和維護難。現在逐漸進入大資料時代,目前HTTP協定已無法滿足新技術的發展要求。如何存儲和分發PB級别的大資料、如何處理高清晰度的媒體流資料、如何對大規模資料進行修改和版本疊代、如何避免重要的檔案被意外丢失等問題都是阻礙HTTP繼續發展的大山。

IPFS就是為解決上述問題而誕生的。它的優勢如下:

1)下載下傳速度快。如圖1-2所示,HTTP上的網站大多經曆了中心化至分布式架構的變遷。與HTTP相比,IPFS将中心化的傳輸方式變為分布式的多點傳輸。IPFS使用了BitTorrent協定作為資料傳輸的方式,使得IPFS系統在資料傳輸速度上大幅度提高,并且能夠節省約60%的網絡帶寬。

2)優化全球存儲。IPFS采用為資料塊内容建立哈希去重的方式存儲資料,資料的存儲成本将會顯著下降。

3)更加安全。與現有的中心化的雲存儲或者個人搭建存儲服務相比,IPFS、Filecoin的分布式特性與加密算法使得資料存儲更加安全,甚至可以抵擋黑客攻擊。

4)資料的可持續儲存。目前的Web頁面平均生命周期隻有100天,每天會有大量的網際網路資料被删除。網際網路上的資料是人類文明的記錄和展示,IPFS提供了一種使網際網路資料可以被可持續儲存的存儲方式,并且提供資料曆史版本(Git)的回溯功能。

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

上文我們提到IPFS技術積累已經有很多年了,它至少參考了4種技術的優點,并将它們整合在一起。這4種技術分别是分布式哈希表DHT、Kademlia、Git和自驗證檔案系統(Self-Certifying File System)。

第一種對IPFS有借鑒意義的技術是DHT,全稱為分布式哈希表(Distributed Hash Table),是一種分布式存儲方法。DHT的原理是:在不需要伺服器的情況下,每一個用戶端存儲一小部分資料,并負責一定區域的檢索,進而實作整個DHT網絡的尋址和檢索。新版BitComet允許同時連接配接DHT網絡和Tracker,可以在無Tracker的情況下進行下載下傳。

IPFS借鑒的第二種技術是Kademlia。在Kademlia網絡中,所有資訊均以哈希表條目的形式加以存儲,這些資訊被分散地存儲在各個節點上,進而以全網構成一張巨大的分布式哈希表。可以形象地把這張哈希大表看成一本字典:隻要知道了資訊索引的key,便可以通過Kademlia協定來查詢與其對應的value資訊,而不管這個value資訊究竟是存儲在哪一個節點之上。正是這一特性確定了IPFS成為沒有中心排程節點的分布式系統。IPFS還借鑒了BitTorrent網絡。首先是消極上傳者的懲罰措施,在BitTorrent的用戶端上傳資料會獎勵積分,而長期不上傳的消極節點會被扣分,如果分數低于一定限度,那麼網絡會拒絕再為他們提供服務;其次是檔案可用性檢查,BitTorrent優先把稀缺的檔案分享出去,各個用戶端之間互相補充,這樣種子不容易失效,傳輸效率也提高了。針對BitTorrent我們不再詳細展開,有感興趣的讀者可以查閱BitTorrent相關文檔。

第三種對IPFS有重大影響的項目是Git。我們在進行大檔案傳輸或修改的時候總會遇到存儲或傳輸壓力大的問題,而Git在版本疊代方面非常出色。Git存儲時會把檔案拆成若幹個部分,并計算各個部分的哈希值,利用這些建構起與檔案對應的有向無環圖(DAG),DAG的根節點也就是該檔案的哈希值。這樣的好處十分明顯:如果需要修改檔案,那麼隻需要修改少數圖中節點即可;需要分享檔案,等價于分享這個圖;需要傳輸全部的檔案,按照圖中的哈希值下載下傳合并即可。

最後一種是具有自驗證功能的分布式檔案系統(Self-certifying File System,SFS),它将所有的檔案儲存在同一個目錄下,所有的檔案都可以在相對路徑中找到,其SFS路徑名是其原路徑與公鑰的哈希。聰明的讀者會發現,這樣的設計包含身份的隐式驗證功能,這就是為什麼SFS被稱為自驗證檔案系統了。

1.2 IPFS與區塊鍊的關系

現在提到IPFS就一定會提到區塊鍊。那麼區塊鍊和IPFS之間到底有什麼關系呢?在介紹二者關系之前,我們需要先來了解一下區塊鍊。

1.2.1 區塊鍊基礎

那麼區塊鍊又是什麼呢?在最早期,區塊鍊僅僅被認為是比特币的底層技術之一,是一種不可篡改的鍊式資料結構。經過幾年的發展,區塊鍊被越來越多的人熟知,它也從單純的資料結構變成分布式賬本的一系列技術的總稱。它整合了加密、共識機制、點對點網絡等技術。近些年,區塊鍊的非賬本類應用開始逐漸興起,大家開始将區塊鍊描述為分布式的資料庫,認為它是價值傳遞網絡,它逐漸被賦予了更多的内涵。

從技術方面來講,區塊鍊是一種分布式資料庫,旨在維護各個互相不信任的節點中資料庫的一緻性,并且不可篡改。信用和記錄會被儲存到區塊鍊上,每一個新的區塊中存有上一個區塊的數字指紋、該區塊的信用和記錄,以及生成新區塊的時間戳。這樣一來,區塊鍊會持續增長,并且很難被篡改,一旦修改區塊鍊上任意一個區塊的資訊,那麼後續區塊的數字指紋也就全部失效了。

鍊式資料結構使得區塊鍊曆史很難被篡改,而在各個互不信任的節點之間保持資料的一緻性,則需要共識機制完成。共識機制是網絡預先設定的規則,以此判斷每一筆記錄及每一個區塊的真實性,隻有那些判斷為真的區塊會被記錄到區塊鍊中;相反,不能通過共識機制的新區塊會被網絡抛棄,區塊裡記錄的資訊也就不再被網絡認可。目前常見的共識機制包括PoW(工作量證明)、PoS(權益證明)、PBFT(實用拜占庭容錯)等。

比特币、以太币、比特币現金及大部分加密數字貨币使用的是PoW工作量證明。維護比特币賬本的節點被稱為礦工,礦工每次在記錄一個新區塊的時候,會得到一定的比特币作為獎勵。是以,礦工們會為自己的利益盡可能多地去争奪新的區塊記賬權力,并獲得全網的認可。工作量證明要求新的區塊哈希值必須擁有一定數量的前導0。礦工們把交易資訊不斷地與一個新的随機數進行哈希運算,計算得到區塊的哈希值。一旦這個哈希值擁有要求數目的前導0,這個區塊就是合法的,礦工會把它向全網廣播确認。而其他的礦工收到這一新的區塊,會檢查這一區塊的合法性,如果合法,新的區塊會寫入該礦工自己的賬本中。這一結構如圖1-3所示。

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

與要求證明人執行一定量的計算工作不同,PoS權益證明要求證明人提供一定數量加密貨币的所有權即可。權益證明機制的運作方式是,當創造一個新區塊時,礦工需要建立一個“币權”交易,交易會按照預先設定的比例把一些币發送給礦工。權益證明機制根據每個節點擁有代币的比例和時間,依據算法等比例降低節點的挖礦難度。這種共識機制可以加快共識,也因礦工不再繼續競争算力,網絡能耗會大大降低。但也有專家指出,PoS權益證明犧牲部分網絡去中心化的程度。

目前,PoW和PoS是加密數字貨币的主流算法,其他幾個常見的共識機制有DPoS和PBFT,限于篇幅,這裡不再進一步展開了。

1.2.2 區塊鍊發展

1976年是奠定區塊鍊的密碼學基礎的一年,這一年Whitfield Diffie與Martin Hellman(見圖1-4)首次提出Diffie-Hellman算法,并且證明了非對稱加密是可行的。與對稱算法不同,非對稱算法會擁有兩個密鑰—公開密鑰和私有密鑰。公開密鑰與私有密鑰是一對,如果用公開密鑰對資料進行加密,隻有用對應的私有密鑰才能解密;如果用私有密鑰對資料進行加密,那麼隻有用對應的公開密鑰才能解密。這是後來比特币加密算法的核心之一,我們使用比特币錢包生成私鑰和位址時,通過橢圓曲線加密算法,生成一對公鑰和私鑰。有了私鑰我們可以對一筆轉賬簽名,而公鑰則可以驗證這一筆交易是由這個比特币錢包的所有者簽名過的,是合法的。将公鑰通過哈希運算,可以計算出我們的錢包位址。

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

1980年,Martin Hellman的學生Merkle Ralf提出了Merkle Tree(默克爾樹)資料結構和生成算法。默克爾樹最早是要建立數字簽名證書的公共目錄,能夠確定在點對點網絡中傳輸的資料塊是完整的,并且是沒有被篡改的。我們前面提到,在比特币網絡中,每一個區塊都包含了交易資訊的哈希值。這一哈希值并不是直接将交易順序連接配接,然後計算它們的哈希,而是通過默克爾樹生成的。默克爾樹如圖1-5所示。默克爾樹生成算法會将每筆交易做一次哈希計算,然後兩兩将計算後的哈希值再做哈希,直到計算到默克爾根。而這個默克爾根就包含了全部的交易資訊。這樣,能大大節省錢包的空間占用。例如,在輕錢包中,我們隻需下載下傳與自己錢包對應的交易資訊,需要驗證的時候,隻需找到一條從交易資訊的葉節點到根節點的哈希路徑即可,而不需要下載下傳區塊鍊的全部資料。在IPFS項目裡,也借鑒了默克爾樹的思想。資料分塊存放在有向無環圖中,如果資料被修改了,隻需要修改對應默克爾有向無環圖中的節點資料,而不需要向網絡重新更新整個檔案。值得一提的是,Merkle在提出默克爾樹時,分布式技術尚未成型,更别提數字貨币了,而他在當時就能察覺并提出這樣的方法,實在是令人贊歎。

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

非對稱加密算法和默克爾樹數字結構是後續數字貨币和區塊鍊的理論基礎。而真正将密碼學用于數字貨币的嘗試,則晚了許多。數字貨币興起于1990年的數字朋克(CyberPunk)運動,它是由一批熱愛網絡的極客們推動的。數字朋克們大多是密碼學的專家,對于個人隐私十分向往,希望建立一套獨立于現實中的國家、等級制度以外的空間。其中最典型的代表是David Chaum,他最早提出了盲簽名技術,并将其應用到了Digit Cash項目(又名Ecash)中。盲簽名是一種保護隐私的簽名方式,它的簽名者對其簽署的消息不可見。比如,使用者需要簽署一個轉賬資訊,而這一資訊需要銀行簽名,使用者為了保護隐私,不希望銀行看到其具體的轉賬對象,就可以使用盲簽名。David在他的論文中提出了用盲簽名實作匿名貨币的想法,具體方式是使用者在本地計算機的Ecash程式中以數字格式存儲現金,再交給銀行進行盲簽名。這套系統已經與當時的銀行系統非常接近了,差一點獲得了成功。但是Digit Cash始終需要中心化的銀行伺服器支援。在後續,沒有一家銀行願意再支援他的項目,最終項目失敗了。數字朋克運動中誕生的系統及關鍵人物如表1-1所示。

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

在Digit Cash失敗後的幾年裡,人們幾乎放棄了數字現金的構想。僅有少數數字朋克繼續着研究。一個名為Hashcash的想法是在1997年由當時同為數字朋克的博士後研究員Adam Back獨立發明的。Hashcash的想法很簡單:它沒有後門,也不需要中心第三方,它隻使用哈希函數而不是數字簽名。Hashcash基于一個簡單的原理:哈希函數在某些實際用途中表現為随機函數,這意味着找到哈希到特定輸出的輸入的唯一方法是嘗試各種輸入,直到産生期望的輸出為止。而且,為了找到這樣一個符合條件的輸入,唯一方法是再次逐個嘗試對不同的輸入進行哈希。是以,如果讓你嘗試找到一個輸入,使得哈希值前10位是0,你将不得不嘗試大量的輸入,你每次嘗試成功的機會是(1/2)10。這就是工作量證明的早期來源,也是礦工們每天在重複做的事情。他甚至在技術設計上做了一些修改,使其看起來更像一種貨币。但顯然,他的方案不能檢驗節點是否作弊,不能作為真正的數字現金。

還有兩位有傑出貢獻的數字朋克—Hal Finney和Nick Szabo,他們經過重新考慮将技術整合了起來。Nick Szabo不僅是一位計算機科學家,同時精通法律。Szabo受到David Chaum的啟發後,希望利用密碼協定和安全機制,提出了數字合約的構想。數字合約能在網絡上不依靠第三方協助而是利用程式來驗證并執行合同,它與傳統合同相比更安全,并且減少了煩瑣溝通的成本。這對後續的加密數字貨币設計有着極大的影響。比特币網絡可以提供非圖靈完備的腳本語言實作部分智能合約功能;以太坊則進一步在EVM上運作Solidity語言,提供了圖靈完備的智能合約環境,這也為後續分布式應用開發奠定了基礎。

Nick做出的貢獻還不隻是發明了智能合約,在2008年,他發起了Bit Gold項目。在項目計劃書中,Nick闡述的Bit Gold架構與現在的比特币完全相同,同樣是工作量證明機制,同樣是鍊式網絡結構,同樣的新區塊包含舊區塊的數字指紋,包含時間戳等諸多特性。然而,最終Bit Gold項目還是沒有順利完成。目前,Bit Gold可查尋的源頭隻有在Bitcoin Talk論壇中的文章,後續的可查證資料就很少了。有一些比特币愛好者們一度認為Szabo就是中本聰本人,不僅因為Bit Gold與Bitcoin的也相似之處令大家充滿想象,甚至是在詞法和句法上,中本聰的比特币論文與Bit Gold論文也有相似之處。而且Nick家不遠的地方,有一位叫中本聰的日本人,大家猜測這是Nick為了掩人耳目而故意隐藏自己的身份。Nick本人對此表示否認,并覺得這是個很搞笑的八卦。當然這也成為數字貨币裡最大謎團,究竟中本聰是誰呢?

再之後,到了2009年,中本聰發表了比特币論文。他提出了一整套加密協定,而不僅僅是加密貨币。比特币使用計算機程式控制貨币的發行,發行總量2100萬枚。比特币的賬本記錄在成千上萬台計算機上,黑客無法入侵;每個賬戶都是加密位址,你不知道誰在花錢,但是每個比特币的流通都被記錄,你知道它的來源和去向的位址。比特币是第一個達到上述全部思想的項目,整合了之前30多年的技術積累。

比特币在設計之時,考慮到網絡的穩定性和抵禦惡意攻擊,它使用的是非圖靈完備的腳本語言(主要不能使用循環語句)。2013年,Vitalik Buterin 認為,比特币需要一種圖靈完備的腳本語言來支援多樣的應用開發。這個思路沒有被比特币社群支援,于是 Buterin考慮用更通用的腳本語言開發一個新的平台,這就是後來的以太坊。以太坊在大緻思路上與比特币相似,在賬戶狀态、UTXO、位址形式上進行了一些優化。其最大的亮點在于,開發了Solidity智能合約程式設計語言和以太坊虛拟機(EVM)這一以太坊智能合約的運作環境,用于按照預期運作相同的代碼。正因為EVM和Solidity,區塊鍊的平台應用(DAPP)迅速興起了。以太坊平台提出了許多新用途,包括那些不可能或不可行的用途,例如金融、物聯網服務、供應鍊服務、電力采購和定價及博彩等。時至今日,基于DAPP的各類應用還在迅速發展,新的市場和需求在進一步被發現。後續區塊鍊會如何發展,我們拭目以待。

1.2.3 IPFS為區塊鍊帶來了什麼改變

區塊鍊的誕生本是為了做到去中心化,在沒有中心機構的情況下達成共識,共同維護一個賬本。它的設計動機并不是為了高效、低能耗,抑或是擁有可擴充性(如果追求高效、低能耗和擴充性,中心化程式可能是更好的選擇)。IPFS與區塊鍊協同工作,能夠補充區塊鍊的兩大缺陷:

  • 區塊鍊存儲效率低,成本高。
  • 跨鍊需要各個鍊之間協同配合,難以協調。

針對第1個問題,區塊鍊網絡要求全部的礦工維護同一個賬本,需要每一個礦工留有一個賬本的備份在本地。那麼在區塊鍊中存放的資訊,為了保證其不可篡改,也需要在各個礦工手中留有一份備份,這樣是非常不經濟的。設想,現在全網有1萬個礦工,即便我們希望在網絡儲存1MB資訊,全網消耗的存儲資源将是10GB。目前,也有折中的方案來緩解這一問題。在搭建去中心化應用DAPP時,大家廣泛采取的方式是,僅在區塊鍊中存放哈希值,将需要存儲的資訊存放在中心化資料庫中。而這樣,存儲又成為去中心化應用中的一個短闆,是網絡中脆弱的一環。IPFS則提出了另一個解決方法:可以使用IPFS存儲檔案資料,并将唯一永久可用的IPFS位址放置到區塊鍊事務中,而不必将資料本身放在區塊鍊中。針對第2個問題,IPFS能協助各個不同的區塊鍊網絡傳遞資訊和檔案。比特币和以太坊區塊結構不同,通過IPLD可以定義不同的分布式資料結構。這一功能目前還在開發中,目前的IPLD元件,已經實作了将以太坊智能合約代碼通過IPFS存儲,在以太坊交易中隻需存儲這個連結。

1.2.4 Filecoin:基于IPFS技術的區塊鍊項目

在1.1節中我們介紹了IPFS的結構。Filecoin是IPFS的激勵層。我們知道,IPFS網絡要想穩定運作需要使用者貢獻他們的存儲空間、網絡帶寬,如果沒有恰當的獎勵機制,那麼巨大的資源開銷很難維持網絡持久運轉。受到比特币網絡的啟發,将Filecoin作為IPFS的激勵層就是一種解決方案了。對于使用者,Filecoin能提高存取速度和效率,能帶來去中心化等應用;對于礦工,貢獻網絡資源可以獲得一筆不錯的收益;而對于業務夥伴,例如資料中心,也能貢獻他們的空閑計算資源用于獲得一定的報酬。Filecoin會用于支付存儲、檢索和網絡中的交易。與比特币類似,它的代币總量為2億枚,其中70%會通過網絡挖礦獎勵貢獻給礦工,15%為開發團隊持有,10%給投資人,剩下5%為Filecoin基金會持有。投資人和礦工獲得的代币按照區塊發放,而基金會和開發團隊的代币按照6年時間線性發放。由此可見,Filecoin與比特币挖礦機制完全不同。我們前面提到,為了避免攻擊,比特币通過PoW工作量證明機制,要求礦工挖出下一個滿足哈希值包含多個前導0的新區塊。這個過程會需要大量的哈希運算。Filecoin使用的是複制證明(Proof of Replication,RoRep)。複制證明是礦工算力證明形成的主要方式,證明礦工在自己的實體儲存設備上實際存儲了資料,可以防止惡意礦工的各種攻擊,網絡中的驗證節點會随機檢查礦工是否在作弊。如果礦工不能提供正确的複制證明,那麼它将被扣除一定的Filecoin作為懲罰。相比于PoW機制帶來的算力競争,PoRep顯得環保的多。

1.3 IPFS的優勢與價值

前文描述了IPFS大概的基礎知識和與區塊鍊的關系,這節我們詳細介紹一下IPFS的優勢和價值來源。

1.3.1 IPFS的優勢

IPFS的優勢在于其強大的技術積澱、精巧的架構設計及強大的開發者生态。

1.技術優勢

IPFS技術可以分為多層子協定棧,從上至下為身份層、網絡層、路由層、交換層、對象層、檔案層、命名層,每個協定棧各司其職,又互相協同。圖1-6所示為IPFS協定棧的構成。接下來我們逐一進行解釋。

(1)身份層和路由層

對等節點身份資訊的生成以及路由規則是通過Kademlia協定生成制定的,該協定實質上是建構了一個分布式哈希表,簡稱DHT。每個加入這個DSHT網絡的節點都要生成自己的身份資訊,然後才能通過這個身份資訊去負責存儲這個網絡裡的資源資訊和其他成員的聯系資訊。

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

(2)網絡層

比較核心,所使用的Libp2p可以支援主流傳輸層協定。NAT技術能讓内網中的裝置共用同一個外網IP,我們都體驗過的家庭路由器就是這個原理。

(3)交換層

IPFS吸取了BitTorrent的技術,并在其之上進行了再創新,自研了BitSwap子產品。使用BitSwap進行資料的分發和交換,使用者上傳分享資料會增加信用分,分享得越多信用分越高;使用者下載下傳資料會降低信用分,當信用分低于一定值時,将會被其他節點忽略。簡單來講就是,你樂于分享資料,其他節點也樂于發送資料給你,如果你不願意分享,那麼其他節點也不願意給你資料。

(4)對象層和檔案層

這兩層适合結合起來看,它們管理了IPFS上80%的資料結構,大部分資料對象都是以Merkle-DAG的結構存在,這為内容尋址和去重提供了便利。檔案層具有blob、tree、list、commit等多種結構體,并采用與Git類似的方式來支援版本控制。

(5)命名層

具有自我驗證的特性(當其他使用者擷取該對象時,将交換節點公鑰進行驗簽,即驗證公鑰資訊是否與NodeID比對,進而來驗證使用者釋出對象的真實性),并且加入了IPNS這個巧妙的設計使得哈希過後的内容路徑名稱可定義,增強可閱讀性。

新舊技術的更替無非兩點:其一,能夠提高系統效率;其二,能夠降低系統成本。IPFS把這兩點都做到了。

圖1-7是一個IPFS技術子產品的和功能間的映射關系圖,同時也是一個縱向資料流圖。前文所描述的多層協定,每一層的實作都綁定在對應的子產品下,非常直覺。

協定實驗室在開發IPFS時,采用了高度子產品內建化的方式,像搭積木一樣去開發整個項目。截至2017年,協定實驗室主要精力集中在設計并實作 IPLD、LibP2P、Multiformats 等基礎子產品,這些子產品服務于IPFS協定的底層。

Multiformats是一系列散列函數和自描述方式(從值上就可以知道值是如何生成的)的集合,目前擁有多種主流的散列處理方式,用以加密和描述NodeID以及内容ID的生成。基于Multiformats使用者可以很便捷地添加新的雜湊演算法,或者在不同的雜湊演算法之間遷移。

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

LibP2P是IPFS子產品體系核心心中的核心,用以适配各式各樣的傳輸層協定以及連接配接衆多複雜的網絡裝置,它可以幫助開發者迅速建立一個高效可用的P2P網絡層,非常利于區塊鍊的網絡層搭建。這也是IPFS技術被衆多區塊鍊項目青睐的緣由。

IPLD是一個轉換中間件,将現有的異構資料結構統一成一種格式,友善不同系統之間的資料交換和互操作。目前,IPLD已經支援了比特币、以太坊的區塊資料。這也是IPFS受到區塊鍊系統歡迎的另一個原因,IPLD中間件可以把不同的區塊結構統一成一個标準進行傳輸,為開發者提供了簡單、易用、健壯的基礎元件。

IPFS将這幾個子產品內建為一種系統級的檔案服務,以指令行(CLI)和Web服務的形式供大家使用。

最後是Filecoin,該項目最早于2014年提出,2017年7月正式融資對外宣傳。Filecoin把這些應用的資料價值化,通過類似比特币的激勵政策和經濟模型,讓更多的人去建立節點,去讓更多的人使用IPFS。

本節隻對IPFS的技術特性進行了概要介紹,每個子子產品的細節将在原理篇中做深度詳解。

2.社群優勢

協定實驗室由Juan Benet在2014年5月創立。Juan Benet畢業于斯坦福大學,在建立IPFS項目之前,他創辦的第一家公司被雅虎收購。2015年,他發起的IPFS項目在YCombinator孵化競賽中拿到了巨額投資,并于2017年8月底,完成了Filecoin項目的全球衆籌,在Coinlist(協定實驗室獨立開發、嚴格遵從SAFT協定的融資平台)上共募集了2.57億美金。如圖1-8所示,協定實驗室具有強大的投資者和開發者社群。

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

IPFS的社群由協定實驗室團隊維護,到目前為止,開發者社群已經擁有上百位代碼貢獻者和數十位核心開發人員,如圖1-9所示。IPFS目前已經釋出了30餘個版本疊代,開發進度一直保持良好。

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

同時,協定實驗室官方也授權了部分社群(IPFS Community)中的Co-Organizer牽頭全球性的推廣交流活動。目前,已在美國芝加哥、美國華盛頓、英國倫敦、印度德裡、哥斯達黎加聖何塞、巴西聖保羅、西班牙巴塞羅那、加拿大蒙特利爾、德國柏林以及中國的北京、深圳、福州等數十個城市開展了社群自治的Meetup線下活動,擁有來自世界各地廣泛的支援者。

1.3.2 Filecoin與其他區塊鍊存儲技術的對比

目前,全球去中心存儲區塊鍊項目出現了包括Filecoin、Sia、StorJ、Burst、Bluzelle等一批優質的區塊鍊項目,欲搶占存儲市場制高點,如圖1-10所示。它們都能夠提供類似的去中心化存儲功能,但在具體技術手段和應用場景上則略有差異。下面将重點闡述IPFS和Filecoin所建構的區塊鍊存儲體系與其他區塊鍊項目的對比。

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

1.Burst

Burst作為第一個使用容量證明(Proof-of-capacity)的項目,還是具有很大的進步意義的。該項目是2014年8月10日在Bitcointalk上發起的,發起人的賬号是 “Burstcoin”。一年後,創始人“Burstcoin”跟中本聰一樣消失了。由于項目是開源的,2016年1月11日,一些社群成員将這個開源項目重新激活,獨立營運開發,并且在Bitcointalk上新開了一個專區闆塊來維護。

相較Filecoin所采用的複制證明和時空證明,Burst使用的是一種叫作容量證明(Proof-of-capacity)的機制,即:挖礦的時候,利用礦機未使用的硬碟驅動器空間,而不是處理器和顯示卡。礦工可以提前生成的大量資料,這裡資料被稱為plot,然後儲存到硬碟。plot的生成隻需要計算一次,能耗方面表現得更加友好,且實作起來更為簡單。

2. Sia

Sia是一個2015年7月釋出的去中心化的存儲項目,通過運用加密技術、加密合約和備援備份,Sia能夠使一群互不了解和互不信任的計算機節點聯合起來,成為一種有統一運作邏輯和程式的雲存儲平台。其傾向于在P2P和企業級領域與現有存儲解決方案進行競争。Sia不是從集中供應商處租用存儲,而是從彼此個體節點租用存儲。

Sia采用的是PoW(Proof Of Work)和PoS(Proof Of Storage)的組合證明計模式,要使用Sia,在資料存儲空間的提供者和租用者必須簽訂協定。租用者需要提前購置一筆代币,用以抵押至鍊上,如果滿足了協定條款,那些代币就會支付給提供者。如果協定沒有按照預期的那樣完成,代币就會返給租用者。對于存儲使用者而言,需要為檔案的上傳、下載下傳和存儲付費。

3. StorJ

StorJ是一個去中心化的、僞區塊鍊的分布式雲存儲系統,主要功能與中心化的Dropbox、Onedrive類似。StorJ激勵使用者分享自己的剩餘空間和流量,以獲得獎勵。因為其充分利用使用者資源,是以成本極低,并且資料采用端對端加密的備援存儲,更加安全可靠。StorJ已經與開源FTP檔案傳輸項目FileZilla達成合作。

相較于Filecoin,StorJ代币為基于ERC2.0的以太坊衆籌币種,沒有區塊鍊架構,采用按月支付結算的方式,在這種方式裡租用者頻繁地給托管主機付款,如果使用者不見了或不線上,托管主機将得不到報酬。StorJ更像一個被項目方撮合的共享存儲經濟體,不存在礦工挖礦産生區塊的概念。

4. Bluzelle

Bluzelle是一款快速的、低成本的、可擴充的、使用于全球DApp的去中心化資料庫服務,填補了去中心化基礎架構的一個關鍵空白。

軟體通常處理兩種類型的資料:檔案和資料字段。以IPFS和Filecoin為基礎的項目側重于對大檔案提供分布式的存儲和分發解決方案,而Bluzelle想要打造的是将那些通常很小且大小固定,按照數組、集合等結構的資料字段進行結構化存儲,以便于快速存儲和檢索。資料字段存儲在資料庫中可以實作最佳的安全性、性能和可擴充性,并提供建立、讀取、更新和删除(CRUD)等基本功能,差別于類似IPFS和Filecoin這樣的分布式檔案存儲服務。

綜上對比,以IPFS和Filecoin所建構的區塊鍊存儲體系,同時從基礎層和應用層對傳統雲存儲模式進行了颠覆,是以決定了其應用的範圍更加廣闊,其對應的加密數字貨币增長空間也更大。

1.4 IPFS的應用領域

IPFS的應用領域如圖1-11所示。

帶你讀《IPFS原理與實踐》之一:認識IPFS第1章

1.建立長久資訊檔案

IPFS提供了一個弱備援的、高性能的叢集化存儲方案。僅僅通過現有的網際網路模式來組織這個世界的資訊是遠遠不夠的,我們需要建立一個可以被世界長久記住、随着人類曆史發展而一直存在的資訊檔案。

2.降低存儲、帶寬成本

IPFS提供了一個安全的點對點内容分發網絡,如果你的公司業務需要分發大量的資料給使用者,IPFS可以幫你節約大量的帶寬成本。在雲計算時代,我們大部分的網絡帶寬和網絡存儲服務都由第三方服務平台來支援,例如YouTube這樣的大型視訊平台,需要支付高額的流量費用給ISP(網際網路服務提供商),而YouTube也将通過各種商業廣告及收費會員的商業形式把這部分的成本轉嫁到廣大使用者身上,整個流程體系的總成本是相當龐大的。為了激勵人們參與IPFS協定,協定實驗室團隊借鑒了比特币的經濟模型,設計了基于IPFS的區塊鍊項目Filecoin。Filecoin将IPFS網絡參與者分為兩類:Storage Miner(為網絡提供空閑的存儲空間)和Retriver(為網絡中的節點提供帶寬,幫助其他使用者傳輸檔案),通過這種共享模型充分利用閑置資源,降低了系統總成本,并為使用者降低了使用成本。目前,将這個應用方向做得比較成功的項目叫Dtube,它是一個搭建在Steemit上的去中心化視訊播放平台,其使用者上傳的視訊檔案都經過IPFS協定進行存儲,具有唯一辨別。相較于傳統視訊網站,它降低了同資源備援程度。

3.與區塊鍊完美結合

IPFS和區塊鍊是完美的搭配,我們可以使用IPFS處理大量資料,并将不變的、永久的IPFS連結放置到區塊鍊事務中,而不必将資料本身放在區塊鍊中。畢竟,區塊鍊的本質是分布式賬本,本身的瓶頸之一就是賬本的存儲能力,目前大部分公鍊的最大問題是沒法存儲大量的資料在自己的鍊上。比特币至今全部的區塊資料也才數百GB,以太坊這樣可程式設計的區塊鍊項目也隻能執行和存儲小段合約代碼,DApp的發展受到了很大的制約。運用IPFS技術解決存儲瓶頸是可行方案之一。

4.為内容創作帶來自由

IPFS為網絡内容創作帶來了自由和獨立的精神,可以幫助使用者以一種去中介化的方式傳遞内容。Akasha是一個典型的應用,它是一個基于以太坊和IPFS的社交部落格創作平台,使用者創作的部落格内容通過一個IPFS網絡進行釋出,而非中心伺服器。同時,将使用者與以太坊錢包賬戶綁定,使用者可以對優質内容進行ETH打賞,内容創作者能以此賺取ETH。它沒有太多審查的限制,也沒有中間商分利,内容收益直接歸創作者所有。

1.5 本章小結

本章主要為讀者建構IPFS大緻的概念和架構,隻涉及很少量的技術描述。我們知道了,IPFS是一種基于内容檢索、去中心化、點對點的分布式檔案系統 。IPFS項目通過整合已有的分布式存儲方式和密碼學的成果,力圖實作網際網路中高可用、資料可持續儲存的全球存儲系統。它整合了分布式哈希表、BitTorrent、Git和自驗證檔案系統4種技術的優點。使用DHT實作内容檢索;借鑒BitTorrent,實行分塊存儲、分塊傳輸和獎勵機制;Git中應用的默克爾DAG使得大檔案分享、修改變得簡單高效;而自驗證檔案系統確定了資料釋出的真實性。我們還回顧了區塊鍊的基本知識和重要研究曆史,了解了區塊鍊從加密算法到比特币和以太坊的曆史程序。同時,我們指出了目前區塊鍊和網際網路難以解決的問題,以及IPFS在這二者中有可能會帶來哪些改變。Filecoin是IPFS的激勵層,可激勵礦工貢獻出更多的網絡資源和存儲資源,礦工越多,IPFS 和 Filecoin 的網絡越健壯、高速。我們還提到了IPFS的多層協定棧,從上至下為身份、網絡、路由、交換、對象、檔案、命名這幾層協定,以及IPLD、LibP2P、Multiformats三個元件。同時介紹了Filecoin與Burst、Storj和Sia等區塊鍊存儲項目的差別。第4節裡,主要介紹了應用領域的幾個典型的例子,包括分布式社交創作平台Akasha,基于Steemit的去中心化視訊平台Dtube,以及目前區塊鍊與IPFS結合使用的方式。下一章我們将開始介紹IPFS的底層原理。