Filecoin: 一個去中心式存儲網(wǎng)絡
4.Filecoin:一個DSN架構
Filecoin DSN是一個建立在激勵機制上,可審計、可查證的去中心化存儲網(wǎng)絡??蛻粝虻V工支付代幣來獲取數(shù)據(jù)存儲和檢索數(shù)據(jù)服務,礦工提供存儲空間和傳輸帶寬來獲得回報。礦工們只有當網(wǎng)絡能夠查證他們在正確提供服務的時候才能獲得報酬。
在本節(jié)中,我們通過DSN的定義和“時空證明”來梳理Filecoin DSN架構。
4.1 設置
4.1.1 參與者
任何用戶都可以成為、存儲礦工和/或檢索礦工。
- 客戶在DSN中通過Put和Get請求存儲或檢索數(shù)據(jù),并支付代幣。
- 存儲礦工為網(wǎng)絡提供數(shù)據(jù)存儲。存儲礦工通過提供磁盤空間和響應Put請求來參與Filecoin運作。要想成為存儲礦工,用戶必須用與存儲空間成比例的抵押品來抵押。存儲礦工通過在特定時間內(nèi)存儲數(shù)據(jù),來響應用戶的Put請求。存儲礦工生成時空證明并提交到區(qū)塊鏈網(wǎng)絡,來證明他們在特定時間內(nèi)存儲了數(shù)據(jù)。如果數(shù)據(jù)失效或丟失,存儲礦工將被罰沒部分抵押品。存儲礦工也可以挖掘新區(qū)塊。如果挖到了新區(qū)塊,礦工就能獲得挖取新塊的獎勵和新區(qū)塊中的交易費用。
- 檢索礦工為網(wǎng)絡提供數(shù)據(jù)檢索服務。檢索礦工通過提供用戶Get請求所需要的數(shù)據(jù)來參與Filecoin運作。和存儲礦工不同,他們不需要抵押品,不需要提交存儲數(shù)據(jù),也不需要提供存儲證明。存儲礦工同樣可以擔任檢索礦工。檢索礦工可以直接從客戶或者從檢索市場賺取收益。
4.1.2 網(wǎng)絡,N
我們將運行在Filecoin各個節(jié)點上的全體用戶抽象為一個實體:網(wǎng)絡。這個網(wǎng)絡作為中介運行整個管理協(xié)議。簡單來說,區(qū)塊鏈中的每個新區(qū)塊,都由全節(jié)點構成的網(wǎng)絡來管理。網(wǎng)絡可以管理可用存儲,驗證抵押品,審核存儲證明以及修復可能存在的故障。
4.1.3 賬本
我們的協(xié)議應用在基于賬本的貨幣上。一般來說,我們管這個叫賬本 L。在任意給定的時間t(也叫時期)內(nèi),所有的用戶都能訪問t時期的賬本Lt,它是這段時期內(nèi)交易序列的記錄。賬本只能被追加,不能被篡改。Filecoin DSN協(xié)議可以運行在任意可驗證Filecoin證明的賬本上。在第六節(jié)中我們會展示了如何基于有效工作建立一個賬本。
4.1.4 市場
存儲的需求和供給在兩個Filecoin市場相遇:存儲市場和檢索市場。這兩個市場屬于去中心化交易所,我們第5節(jié)中對其進行闡述。簡而言之,客戶和礦工們通過向各自的市場提交訂單來為服務定價。交易所為客戶和礦工們提供了匹配交易和牽線的方法。運行管理協(xié)議后,如果服務請求被成功提供,網(wǎng)絡會確保礦工得到獎勵,客戶得到服務。
4.2 數(shù)據(jù)結構
片段 片段指客戶在DSN所存數(shù)據(jù)的某一部分。例如,數(shù)據(jù)可以被隨意劃分為許多片段,每個片段可以由不同的存儲礦工來存儲。
扇區(qū) 扇區(qū)指存儲礦工向網(wǎng)絡提供的磁盤空間。礦工將客戶的數(shù)據(jù)片段存儲到扇區(qū),并以此賺取代幣。為了存儲片段,礦工們必須向網(wǎng)絡抵押他們的扇區(qū)。
分配表 分配表是一個數(shù)據(jù)表,記錄數(shù)據(jù)片段的流向和其分配的扇區(qū)。分配表在賬目下的區(qū)塊中都會更新,它的Merkle根存儲在***的區(qū)塊中。在實際操作中,該表用來維持DSN的狀態(tài),證明驗證的過程中能夠保證快速查找。詳細內(nèi)容請參考圖5。
訂單 訂單是請求或提供服務的聲明。客戶向市場提交出價來請求服務(分別在存儲數(shù)據(jù)的存儲市場和檢索數(shù)據(jù)的檢索市場),礦工們提交應答訂單來提供服務。訂單數(shù)據(jù)結構如圖10所示。市場協(xié)議將在第5節(jié)詳細介紹。
訂單簿 訂單簿是訂單的集合。存儲市場訂單簿請查看第5.2.2節(jié),檢索市場訂單簿第5.3.3節(jié)。
抵押 抵押是向網(wǎng)絡提供存儲(特別是扇區(qū))的承諾。想要在存儲市場接受訂單,存儲礦工必須將抵押提交給總賬。抵押包括了抵押扇區(qū)的大小和存儲礦工的抵押品(詳見圖5)。
Figure 5: Data Structures in a DSN scheme
4.3 協(xié)議
本節(jié)中我們通過對客戶、網(wǎng)絡和礦工的介紹,對Filecoin DSN有了一個整體的概括。我們在圖7中給出了Get和Put協(xié)議的方法,在圖8中給出了Manage協(xié)議,并用圖6給出了一個協(xié)議實例。Filecoin整體的協(xié)議概覽請參見圖1。
4.3.1 客戶周期
本節(jié)會簡要介紹客戶周期的概念;下文中各協(xié)議的深入解釋請參考第五節(jié)。
Put:客戶在Filecoin 中存儲數(shù)據(jù)。
客戶通過向礦工支付代幣可以對數(shù)據(jù)進行存儲。Put協(xié)議在節(jié)中有詳細介紹。
客戶向存儲市場的訂單簿發(fā)起投標(通過向區(qū)塊鏈提交訂單),就啟動了Put協(xié)議。當有匹配的礦工應答時,客戶就可以將數(shù)據(jù)片段發(fā)送給礦工。雙方簽署交易訂單,并將其發(fā)送到存儲市場的訂單簿。
客戶應當能夠通過提交多重訂單(或者在訂單中指定復制扇區(qū))來決定數(shù)據(jù)的拷貝數(shù)量。更高的冗余度可以提高儲存的容錯率。
Get:客戶從Filecoin中取回數(shù)據(jù)。
客戶可以通過向檢索礦工支付代幣來獲取DSN中的任何數(shù)據(jù)。Get協(xié)議在5.3節(jié)中有更詳細的解釋。
客戶向檢索市場的訂單簿投標(向網(wǎng)絡提交訂單),就開始了get協(xié)議。當有匹配的礦工應答被找到,客戶就會從礦工處得到數(shù)據(jù)片段。收到片段后,雙方簽署交易協(xié)議并提交到區(qū)塊鏈,證明交易已完成。
4.3.2 挖礦周期(對存儲礦工)
我們簡單介紹一下挖礦周期。
Pledge:存儲礦工向網(wǎng)絡抵押存儲。
存儲礦工通過Manage.PledgeSector在區(qū)塊鏈中存放抵押品,來保證向網(wǎng)絡提供穩(wěn)定的存儲。抵押品為了保證服務而存在,如果礦工為所存儲的數(shù)據(jù)生成了存儲量證明,抵押品就會被退回。如果沒有成功生成存儲量證明,礦工就得不到抵押品了。
一旦抵押交易在區(qū)塊鏈中出現(xiàn),礦工就可以在存儲市場中提供存。礦工們設置價格,并響應市場訂單簿中的訂單要求。
Receive Orders:存儲礦工從存儲市場獲取存儲請求。
一旦抵押交易出現(xiàn)在區(qū)塊鏈中(在AllocTable中),礦工就能在存儲市場中提供存儲。他們設定價格并通過Put.AddOrders向市場訂單簿響應訂單。
一旦訂單匹配,客戶就將數(shù)據(jù)發(fā)給存儲礦工。存儲礦工接收到數(shù)據(jù)后,運行Put.ReceivePiece 。數(shù)據(jù)接收完成后,礦工和客戶簽署交易訂單并提交到區(qū)塊鏈。
Seal:存儲礦工為數(shù)據(jù)片段準備未來證明。
存儲礦工的存儲空間被切分為很多扇區(qū),每個扇區(qū)包括了分配給礦工的數(shù)據(jù)片段。網(wǎng)絡通過分配表來記錄每個存儲礦工的扇區(qū)。當一個扇區(qū)被填滿了,這個扇區(qū)就被密封(sealed)起來。密封是一種緩慢的順序操作。密封可以將扇區(qū)中的數(shù)據(jù)轉(zhuǎn)換成為唯一的物理副本,并與存儲礦工的公鑰相關聯(lián)。密封在復制證明中是一項必須的操作,相關問題可參見第3.4節(jié)。
Prove:存儲礦工證明他們正在存儲數(shù)據(jù)。
當存儲礦工被分配了數(shù)據(jù)時,必須重復生成復制證明來確保他們正在存儲數(shù)據(jù)(詳情參看第3節(jié))。證明被發(fā)布在區(qū)塊鏈中,并由網(wǎng)絡來驗證。
4.3.3 挖礦周期(對于檢索礦工)
本節(jié)簡要概括檢索礦工的挖礦周期。
Receive Orders:檢索礦工從檢索市場得到獲取數(shù)據(jù)的請求。
檢索礦工設置價格并發(fā)送到市場訂單簿,并通過向網(wǎng)絡發(fā)送報價。
Send:檢索礦工向客戶發(fā)送數(shù)據(jù)碎片。
一旦訂單匹配,檢索礦工就將數(shù)據(jù)發(fā)送給客戶(第5.3節(jié))。數(shù)據(jù)接收完成后,礦工和客戶就簽署交易訂單提交到區(qū)塊鏈。
4.3.4 網(wǎng)絡周期
本節(jié)給出簡單的網(wǎng)絡操作概述。
Assign:網(wǎng)絡將客戶的數(shù)據(jù)片段分配給存儲礦工的扇區(qū)。
客戶通過向存儲市場提交訂單來啟動Put協(xié)議。當詢價單和報價單匹配的時候,參與各方共同為交易擔保并向市場提交訂單。此時,網(wǎng)絡將數(shù)據(jù)分配給礦工,并將其記錄到分配表中。
Repair:網(wǎng)絡發(fā)現(xiàn)故障并試圖修復
所有的存儲分配都是全網(wǎng)公開的。在每個區(qū)塊中,網(wǎng)絡都會檢查儲存分配的證明是否存在,以確保它們有效,并按照下列要求正確工作:
如果有部分證明丟失或失效,網(wǎng)絡會罰沒部分抵押品來懲罰存儲礦工。
如果存在大量的證明丟失或失效(由系統(tǒng)參數(shù)Δfault定義),網(wǎng)絡會認定存儲礦工存在故障,將訂單設定為失效,并為這部分數(shù)據(jù)引入新訂單,重新進入市場。
如果所有該數(shù)據(jù)的存儲礦工都發(fā)生故障,則認定該數(shù)據(jù)丟失,客戶獲得退款。
Figure 6: Example execution of the Filecoin DSN, grouped by party and sorted chronologically by row
4.4 擔保和要求
以下是關于Filecoin DSN如何實現(xiàn)完整性、可恢復性、公開可驗證性和激勵兼容性的相關條款。
完整性的實現(xiàn):數(shù)據(jù)片段以加密的哈希值來命名,在Put請求后,客戶只需要存儲哈希即可通過Get操作來檢索數(shù)據(jù),并可對收到的數(shù)據(jù)進行完整性檢查。
可恢復性的實現(xiàn):在Put請求中,客戶可以指定復制參數(shù)和糾刪碼的類型,還可以將存儲方式指定為(f, m)-tolerant。它的意思是如果給定m個存儲礦工存儲數(shù)據(jù)時,最多可以容忍f個故障。使用更多的存儲礦工進行存儲,可以讓客戶增加數(shù)據(jù)恢復的機會,以防存儲礦工下線或消失。
公開可驗證和可審核性的實現(xiàn):存儲礦工需要提交其存儲量證明 (πSEAL, πPOST)到區(qū)塊鏈。網(wǎng)絡中任意用戶都可以在不訪問數(shù)據(jù)本身的情況下,驗證這些證明的有效性。由于這些證明都存儲在區(qū)塊鏈上,所有的操作過程都可以被隨時查驗。
激勵兼容性的實現(xiàn):一般來說,礦工通過提供存儲數(shù)據(jù)獲得回報。當?shù)V工承諾存儲數(shù)據(jù)時,他們必須生成證明。如果忽略了證明,礦工就會被懲罰(通過罰沒部分抵押品),并且不會得到儲存回報。
保密性的實現(xiàn):如果客戶希望維護數(shù)據(jù)的隱私性,就必須在提交到網(wǎng)絡之前,對數(shù)據(jù)進行加密。