一、從HTTP到IPFS
我們平時上網時,最熟悉的莫過于網址里的“http://”字樣,其實HTTP是萬維網 (WWW: World Wide Web)服務器傳輸超文本到本地瀏覽器的傳送協議。協議全稱是Hyper Text Transfer Protocol,即超文本傳輸協議。
萬維網如何利用HTTP工作呢?這又涉及到TCP/IP通信協議。簡單來說,假設用戶A在電腦上操作將文件上傳至瀏覽器,而用戶B需要從瀏覽器下載這個文件,那么這之間會經歷一個過程。首先TCP程序會把A要發送的文件分解成很多數據,然后壓縮成多個壓縮包。這些壓縮包又統統被裝進一個IP里通過URL[ URL,全稱是Uniform Resource Locator,中文叫統一資源定位符,是互聯網上用來標識某一處資源的地址。向HTTP服務端即WEB服務器發送請求。Web服務器根據接收到的請求后,向客戶端發送響應信息,于是A的文件上傳成功。
而用戶B下載這個文件時,需要輸入IP地址或者域名,好讓電腦知道去哪里找到對應信息(基于位置的尋址Location based addressing)。之后電腦上會向WEB服務器發送請求,TCP會將發下載的壓縮后的數據按序還原。如果接收TCP發現部分文件受損,會請求再發送一次。這樣的話,就會有以下一些問題:
1)在互聯網中,所有數據都會被存儲在一個中心服務器上。無論用戶時上傳/下載文件或者是瀏覽網頁,都需要一次一次從服務器上獲取資料。一旦服務器出現故障、被限制或是被攻擊,就會出現文件丟失或者網頁無法打開的情況(錯誤404)。
2)基于位置的尋址方式也存在不確定性。比如,一旦IP被刪,或者服務器關閉,那么用戶將無法下載該文件。
3)如果這個文件是很多人都需要的,那么每個人都得去下載才能使用,造成很大的存儲空間浪費問題。
所以互聯網雖然是四通八達又涵蓋廣泛的工具,但是也不可避免的有其局限性。
IPFS在構建信息交換的橋梁這一點上,與互聯網很相像,不同的是IPFS是去中心化的。也就是說IPFS沒有一個中心服務器,所以不存在信息丟失或者被篡改的問題。并且IPFS可以將實現文件共享,從而節省存儲空間。
二、IPFS的極簡主義
2014年5月,墨西哥小哥Juan Benet與他的幾個斯坦福大學同學一起發明了IPFS。在創辦IPFS之前,Juan Benet是典型的國外常春藤學生極客,有一個開掛般的人生。他是斯坦福大學的本科和碩士畢業,在斯坦福讀碩士的期間就參與創立了Loki studios,擔任聯合創始人和CTO,這是一家手游公司,后來被雅虎收購。2011年入駐斯坦福學生創業孵化中心StartX EIR,2012年,畢業后創辦了Athena,這是一個做了一年多的時間后,于2014年5月份創辦Protocal Labs。
Protocal Labs剛以創立就得以加入美國硅谷頂級孵化器Y-Combinator,IPFS是他們做的第一個產品。Protocol Labs在創建IPFS的時候給它取名為“InterPlanetary File System(星際文件傳輸)”也是有深刻含義的。Protocol Labs希望構建一個點對點的分布式文件系統,通過底層協議,讓全世界所有人都能夠輕松從IPFS系統上提取文件,且不受防火墻的影響。甚至如果科技發展到一定程度,需要進行星球與星球信息傳輸時,IPFS也可以提供快速存儲文件的服務。
存儲
在IPFS中,信息可以存儲進IPFS系統中的塊(block)里,這些塊可以存儲至多256kb的數據,它們還可以鏈接向其他IPFS塊。也就是說,存儲小于256kb的文件時,只需將這個文件放進一個塊內就可以了。而大于256kb的文件會被分成多個256kb然后放進塊中,之后IPFS將創建一個空塊,該塊將鏈接到文件的所有其他部分。這個空塊就類似于一個大信封,里面會涵蓋整個文件的所有部分。
系統會給同一個文件的每一個塊計算一次哈希值a,所有塊的哈希值a計算完畢之后,會將所有的哈希值a拼湊成一個數組b,再計算一次哈希值,從而得到最終的哈希值c。最后把最終的哈希值c和原文件捆綁起來,組成一個對象,從而形成一個索引結構d。把塊和最終的索引結構d上傳至IPFS節點,文件便同步到網絡了。
此外,還有一種小于1kb的小文件,如果這些小文件也單獨放進一個塊里的話,也會造成一定的浪費。于是,IPFS把小于1kb的數據內容直接和哈希索引放在一起上傳給IPFS節點,不會再額外的占用一個塊。
可見IPFS的創作理念,是盡可能少的使用存儲空間,盡量分散的存儲文件。另外,對于相同的文件,IPFS只創建一個文件夾,系統也會自動刪除重復的文件,并修改的版本歷史記錄,這樣可以大大節省存儲空間,保證整個系統的運行速度,并保證存儲文件的安全,和使用的便捷。
讀取
同樣作為信息價值交換的基礎,用戶在IPFS上傳或者使用文件時,不再是基于位置的尋址(Location based addressing),而是基于內容的尋址(Content based addressing)。也就是把“去哪找信息”的指令換成“想找什么內容”的指令。
在互聯網內,下載文件或者瀏覽信息需要一個IP地址或者域名,而在IPFS內,每個文件都有自己的哈希值,并且一個哈希值只對應一個文件。不存在一個文件有多個哈希值,或者多個哈希值對應同一個文件的問題。因而,用戶只需在IPFS內輸入需要文件的哈希值,系統就會出現對應的文件。這些文件是分布存儲的,所以只要有一個用戶有對應的文件,就算部分節點罷工或者不在線,也不會影響文件的讀取。
具體在IPFS系統種下載文件時,首先,需要礦工根據最終哈希數值搜索該哈希的索引結構,并下載下來。然后,用戶就可以根據哈希索引搜索到文件所在的節點位置。用戶將節點上的塊下載下來之后,IPFS將根據哈希數組的順序,把文件重新組合出來,用戶就可以使用了。
可以看出,IPFS將文件細分,使上傳略顯復雜,其目的是使用戶在下載時更加便捷。畢竟,小文件的下載比大文件來得更加簡單方便。
三、IPFS的缺陷
1)信息不可撤銷、不可篡改是IPFS的優點,但是,如果是一個需操作的文件,或者說是內容錯誤、信息需要更新的文件,那么不可撤銷、不可更改將會成為一個很麻煩的事情。
對此,IPFS給出的對應措施是:可以將修改之后的文件上傳至IPFS,IPFS也會對文件進行更新,在IPFS內可搜索到文件更新的所有歷史紀錄。
2)IPFS將大文件分別存放于不同的塊中,也不可避免的有一個隱患,即:如果一部分存放文件的節點統統下線不可用了,并且該文件沒有備份,那么整個文件都是不可用的。
對此,有兩種解決方案,一是激勵更多的節點去存儲這個信息,二是積極分發文件,使得更多節點存儲這個信息。IPFS也認識到了這個問題,于是創始團隊又推出Filecoin幫助解決這個問題。Filecoin共發行20億枚,并在2017年7月進行代幣私募,8月進行了代幣眾籌,融資超過2.5億美元,成為史上規模最大的代幣發行之一。
Filecoin是建立在IPFS基礎上的一條公鏈,旨在創立一個分布式的儲存市場,幫助IPFS激勵用戶利用多余的空間存儲鏈上信息,維系IPFS生態的正常運行與發展。Filecoin激勵用戶出租自己的閑置硬盤、磁盤等存儲空間,用于接收鏈內存儲信息,防止部分節點下線或破壞導致文件不可用問題。出租了自己存儲空間的用戶便成為礦工,只需連接到Filecoin網絡,然后等著協議來處理文件傳輸和交易就行。礦工貢獻的存儲空間越大,獲得的Filecoin(FIL)就越多。當然,客戶也可以通過花費Filecoin來雇傭礦工來存儲或分發數據。
五、基于IPFS的項目
2016年,IPFS一度成為區塊鏈行業中最受青睞的技術之一,數千名開發人員稱之為“WEB的未來”。同年,協議實驗室還創建了libp2p、IPLD、multiformats、Orbit以及其他項目。直到現在,IPFS都保持著非常好的開發進度。到目前為止,基于IPFS而開發的項目很多,包括Akasha,BlockCat,Mana,DistrictOx,TokenClub等等。ETE也是基于ETH和IPFS的架構開發出來的。
自Protocol Labs成立以來,一直潛心技術,在市場上十分低調。直到近期,Protocol Labs開始新聞不斷,剛在7月中旬舉辦完《IPFS & libp2p開發者大會》,又在8月3日在舊金山舉辦LAB DAY2018活動,即實驗室日2018。此次活動中,Protocol Labs從項目展示、黑客破解模擬和協議相互協作為主等方面,向投資機構等關注者展示協議實驗室生態系統最新的動態資訊。
IPFS在區塊鏈行業內其實一直保持著非常高的關注度,從誕生之日起,就被廣泛的討論和傳播,在主網未上線的時候,Filecoin的期貨就已經最高達到10.19美元,市場總估值達到203.8億美金,各種礦機廠商的IPFS礦機被搶購一空,可見市場對其期望之高。Protocol Labs創立了Filecoin和IPFS,兩者互為補充。Filecoin可以為IPFS在全球范圍內提供大量節點,與此同時還帶著一個巨大的分布式存儲空間,同時解決了IPFS的存儲問題,而IPFS則為Filecoin提供了一個堅實的價值基礎及技術架構。
正如我們現在對于互聯網和移動互聯網的使用習以為常一樣,IPFS實則是重構了我們傳遞、獲取、存儲信息的方式,而Filecoin則為這一系統建立了激勵體系來確保系統的運轉,IPFS的前沿或許會在不久的將來,徹底改變我們看待信息的方式,成為我們日常生活的一部分。不管是區塊鏈本身帶來的金融自由,還是IPFS給我們帶來的信息自由,無疑都將是人類進化史上重要的一個里程碑。