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