Filecoin:一種去中心化的存儲網絡(一)


開始初步了解學習Filecoin,如下是看白皮書的內容整理。

參考:

白皮書中文版 http://chainx.org/paper/index/index/id/13.html

白皮書英文版 https://filecoin.io/filecoin.pdf

 -------------------------------------------------------------------------------------------------------------------

IPFS通過分散的網頁自身已經證明了內容尋址的有效性,它提供了全球點對點網絡數十億文件使用。它解放了孤島數據,網絡分區存活,離線工作,審查制度路線,產生了持久的數字信息。

Filecoin是一個去中心化存儲網絡,它讓雲存儲變成一個算法市場。這個市場運行在有着本地協議令牌(也叫做Filecoin)的區塊鏈。區塊鏈中的曠工可以通過為客戶提供存儲來獲取Filecoin,相反的,客戶可以通過花費Filecoin來雇佣曠工來存儲或分發數據。和比特幣一樣,Filecoin的曠工們為了巨大的獎勵而競爭式挖區塊,但Filecoin的挖礦效率是與存儲活躍度成比例的,這直接為客戶提供了有用的服務(不像比特幣的挖礦僅是為了維護區塊鏈的共識)。這種方式給曠工們創造了強大的激勵,激勵他們盡可能多的聚集存儲器並且把它們出租給客戶們。Filecoin協議將這些聚集的資源編織成世界上任何人都能依賴的自我修復的存儲網絡。該網絡通過復制和分散內容實現魯棒性,同時自動檢測和修復副本失敗。客戶可以選擇復制參數來防范不同的威脅模型。該協議的雲存儲網絡還提供了安全性,因為內容是在客戶端端對端加密的,而存儲提供者不能訪問到解密秘鑰。Filecoin的成果作為可以為任何數據提供存儲基礎架構的IPFS最上面的激勵層。它對去中心化數據,構建和運行分布式應用程序,以及實現智能合同都非常有用。

這些工作包括以下幾部分內容:

(a)介紹Filecoin網絡,概述這個協議以及詳細介紹幾個組件。

(b)形式化去中心化存儲網絡(DSN)的計划與內容,然后構建Filecoin作為一個DSN。

(c)介紹一種叫“復制證明”的新型存儲證明方案,它允許驗證任何數據副本都存儲在物理上獨立的存儲器中。

(d)介紹一種新型的以基於順序復制和存儲作為激勵度量的有用工作共識。

(e)形成可驗證市場,並構建兩個市場,存儲市場和檢索市場,它們分別管理如何從Filecoin寫入和讀取數據。

(f)討論用例,如何連接其他系統以及如何使用這個協議。

----------------------------------------------------------------------------------------

1.介紹

Filecoin是一種協議令牌,其區塊鏈運行在一種叫“時空證明”的新型證明機制上,其區塊被存儲數據的礦工所挖。Filecoin協議通過不依賴於單個協調員的獨立存儲提供商組成的網絡提供數據存儲服務和數據檢索服務。其中:

  • 用戶為數據存儲和檢索支付令牌
  • 存儲礦工通過提供存儲空間賺取令牌
  • 檢索礦工通過提供數據服務賺取令牌

1.1 基本組件

Filecoin協議由四個新型組件組成

  • 去中心化存儲網絡(Decentralized Storage Network)(DSN):我們提供一個由提供存儲和檢索服務的獨立服務商網絡的抽象(在第二節)。接着我們提出了Filecoin協議作為激勵,可審計和可驗證的DSN構建(在第4節)。
  • 新型的存儲證明:我們提出了兩種新型存儲證明方案(在第三節):(1)“復制證明”(Proof-of-Replication)允許存儲提供商證明數據已經被復制到了他自己唯一專用的物理存儲設備上了。執行唯一的物理副本使驗證者能夠檢查證明者是否不存在將多個數據副本重復拷貝到同一存儲空間。(2)“時空證明”(Proof-of-Spacetime)允許存儲提供商證明在指定的時間內存儲了某些數據。
  • 可驗證市場:我們將存儲請求和檢索需求作為兩個由Filecoin網絡操作的去中心化可驗證市場的訂單進行建模(在第五節)。驗證市場確保了當一個服務被正確提供的時候能執行付款。我們介紹了客戶和礦工可以分別提交存儲和檢索訂單的存儲市場和檢索市場。
  • 有效的工作量證明(Proof-of-Work):我們展示了如何基於“時空證明”來構建有效的工作量證明來應用於共識協議。曠工們不需要花費不必要的計算來挖礦,但相反的必須存儲數據於網絡中。

1.2 協議概述

  • Filecoin協議是構建於區塊鏈和帶有原生令牌的去中心化存儲網絡。客戶花費令牌來存儲數據和檢索數據,而礦工們通過提供存儲和檢索數據來賺取令牌。
  • Filecoin DSN 分別通過兩個可驗證市場來處理存儲請求和檢索請求:存儲市場和檢索市場。客戶和礦工設定所要求服務的價格和提供服務的價格,並將其訂單提交到市場。
  • 市場由Filecoin網絡來操作,該網絡采用了“時空證明”和“復制證明”來確保礦工們正確存儲他們承諾存儲的數據。
  • 最后,礦工們能參與到區塊鏈新區塊的鍛造。礦工對下一個區塊鏈的影響與他們在網絡中當前存儲使用量成正比。

1.3 論文組織

本文的其余部分安排如下:我們在第二節中介紹了對一個理論上的DNS方案的定義和需求。在第三節中我們定義和介紹我們的“復制證明”和“時空證明”協議,以及Filecoin將其用於加密地驗證數據按照訂單的要求被持續不斷的存儲。第四節描述了Filecoin DSN的具體實例,描述了數據結構,協議,以及參與者之間的交互。第5節定義和描述可驗證市場的概念,還有存儲市場和檢索市場的實施。第6節描述了使用“時空證明”協議進行演示,並且評估礦工對網絡的貢獻,這對擴展區塊鏈塊和區塊獎勵是必要的。第7節簡要介紹了Filecoin中的智能合約。在第8節中討論了未來的工作作為結束。

---------------------------------------------------------------------------------------------

2 DSN定義

DSNs聚集了由多個獨立存儲提供商提供的存儲,並且能自我協調的提供存儲數據和檢索數據服務給客戶。這種協調是去中心化的、無需信任的:通過協議的協調與個體參與者能實施驗證操作,系統可以獲得安全性操作。DSNs可以使用不同的協調策略,包括拜占庭協議,gossip協議或者CRDTs,這取決於系統的需求。在后面,第四節,我們提供Filecoin DSN的的一個構建。

定義 2.1

DSN方案(Π)是由存儲提供商和客戶運行的協議元組: (Put, Get, Manage)

  • Put(data) → key: 客戶端執行Put協議以將數據存儲在唯一的標識符秘鑰下。

  • Get(key) → data: 客戶端執行Get協議來檢索當前使用秘鑰存儲的數據。

  • Manage(): 網絡的參與者通過管理協議來協調:控制可用的存儲,審核提供商提供的服務並修復可能的故障、

    管理協議由存儲提供商來運行,並且經常與客戶或者審計網絡結合(在管理協議依賴區塊鏈的情況下,我們認為礦工是審計人員,因為他們驗證和協調存儲提供商)。

DSN方案(Π)必須保證數據的完整性和可恢復性,並且能夠容忍在后面章節中所定義的管理和存儲故障。

2.1 故障容錯

2.1.1 管理故障

管理故障定義為管理協議的參與者引起的拜占庭故障。一個DSN方案依賴於它的基礎管理協議的故障容錯。違反故障容錯的管理故障假設可能會影響系統的活躍度和安全性。

例如,考慮一個DSN方案,其中管理協議要求拜占庭容錯來審核存儲提供商。在這樣的協議中,網絡收集到來自存儲提供商的存儲證明,並運行拜占庭容錯對這些證明的有效性達成共識。如果在總共n個節點中,拜占庭容錯最多容忍f個故障節點。那么我們的DSN可以容忍f<n/2 (?)個故障節點。在違反了這些假設的情況下,審計上就要做出妥協。

2.1.2 存儲故障

我們將存儲故障定位為拜占庭故障,阻止了客戶檢索數據。例如存儲礦工丟失了他們的數據,檢索礦工停止了他們的服務。一個成功的Put操作的定義是(f,m),既是它的輸入數據被存儲在m個獨立的存儲提供商(總共有n個)中,並且它可以容忍最多f個拜占庭存儲提供商。參數f和m取決於協議的實現。協議設計者可以固定f和m,或者留給用戶自己選擇。將Put(data) 擴展為Put(data,f,m)。如果有小於f個故障存儲提供商,則對存儲數據的Get操作是成功的。

例如,考慮一個簡單的方案。它的Put協議設計為每個存儲提供商存儲所有的數據。在這個方案里,m=n,並且f=m-1。但總是f=m-1嗎,不一定的,有些方案可能采用可擦除式設計(erasure coding),其中每個存儲供應商存儲數據的特定部分,這樣使得m個存儲供應商中的x個需要檢索數據,在這種場景下f=m-x。

2.2 屬性

我們描述DSN方案所必須的兩個屬性,然后提出Filecoin DSN所需要的其他屬性。

2.2.1 數據完整性

該屬性要求沒有有限的對手A可以讓客戶在Get操作結束的時候接受被更改或者偽造的數據。

定義 2.2

一個DSN方案(Π)提供了數據完整性:如果有任意成功的Put操作將數據d設置在鍵k下,那不存在計算有限的對手A能使得客戶在對鍵k執行Get操作結束的時候接受d‘,其中d' 不等於d。

2.2.2 可恢復性

該屬性滿足了以下要求:考慮到我們的Π的容錯假設,如果有些數據已經成功存儲在Π並且存儲提供商繼續遵循協議,那么客戶最終能夠檢索到數據。

定義2.3

一個DSN方案(Π)提供了可恢復性:如果有任意成功的Put操作將數據d設置在鍵k下,且存在一個成功的客戶Get操作通過對鍵K執行檢索得到數據(這個定義並不保證每次Get操作都能成功,如果每次Get操作最終都能返回數據,那這個方案是公平的)。

2.3 其他屬性

DSNs可以提供特定於其應用程序的其他屬性。我們定義了Filecoin DSN所需要的三個關鍵屬性:公開可驗證性、可審查性和激勵兼容性

定義2.4

一個DSN方案(Π)是公開可驗證的:對於每個成功的Put操作,存儲網絡的供應商可以生成數據當前正在被存儲的證明。這個存儲證明必須說服任何只知道鍵但並不能訪問鍵所對應的數據的有效驗證者。

定義2.5

一個DSN方案(Π)是可審查的:如果它產生了可驗證的操作軌跡,並且在未來能被檢查在正確的時間上數據確實被存儲了。

定義2.6

一個DSN方案(Π)是激勵可兼容的:如果存儲提供商由於成功提供了存儲數據和檢索數據的服務而獲得激勵,或者因為作弊而得到懲罰。所有存儲提供商的優勢策略是存儲數據。

-----------------------------------------------------------------------------------------------

3 復制證明與時空證明

存儲供應商必須讓他們的客戶相信,客戶所付費的數據已經被他們存儲。在實踐中,存儲供應商將生成"存儲證明"(POS)給區塊鏈網絡(或客戶自己)來驗證。我們介紹和概述在Filecoin中所使用的“復制證明”n (PoRep)和“時空證明”(PoSt)實現方案。

3.1 動機

存儲證明(POS)方案類似“數據持有性驗證”(PDP)[2]和“可恢復性證明”(PoR)[3,4]方案。它允許一個將數據外包給服務器(既證明人P)的用戶(既驗證者V)可以反復檢查服務器是否依然存儲數據D。用戶可以用比下載數據還高效的方式來驗證他外包給服務器的數據的完整性。服務器通過對一組隨機數據塊進行采樣和提交小量數據來生成擁有的概率證明作為給用戶的響應協議

PDP和PoR方案只保證了證明人在響應的時候擁有某些數據。在Filecoin中,我們需要更強大的保障能阻止作惡礦工利用不提供存儲卻獲得獎勵的三種類型攻擊:女巫攻擊(Sybil attack)、外包攻擊(outsourcing attacks)、代攻擊?(generation attacks)。

  • 女巫攻擊:作惡礦工可能通過創建多個女巫身份假裝物理存儲很多副本(從中獲取獎勵),但實際上只存儲一次。
  • 外包攻擊:依賴於可以快速從其他存儲提供商獲取數據,作惡礦工可能承諾能存儲比他們實際物理存儲容量更大的數據。
  • 代攻擊:作惡礦工可能宣稱要存儲大量的數據,相反的他們使用小程序有效地生成請求。如果這個小程序小於所宣稱要存儲的數據,則作惡礦工在Filecoin獲取區塊獎勵的可能性增加了,因為這是和礦工當前使用量成正比的。

3.2 復制證明

“復制證明”(PoRep)是一個新型的存儲證明。它允許服務器(既證明人P)說服用戶(既驗證者V)一些數據D已被復制到它唯一的專用物理存儲上了。我們的方案是一種交互式協議。當證明人P:(a)承諾存儲某數據D的n個不同的副本(獨立物理副本),然后(b)通過響應協議來說服驗證者V,P確實已經存儲了每個副本。據我們所知PoRep改善了PDP和PoR方案,阻止了女巫攻擊、外包攻擊、代攻擊

請注意,正式的定義,它的屬性描述,和PoRep的深入研究,我們參考了[5]

定義3.1

PoRep方案使得有效的證明人P能說服驗證者V,數據D的一個P專用的獨立物理副本R已被存儲。PoRep協議其特征是多項式時間算法的元組: (Setup, Prove, Verify)

  • PoRep.Setup(1λ, D) → R, SP , SV , 其中SP和SV是P和V的特點方案的設置變量,λ是一個安全參數。PoRep.Setup用來生成副本R,並且給予P和V必要的信息來運行PoRep.Prove 和 PoRep.Verify。一些方案可能要求證明人或者是有互動的第三方去運算PoRep.Setup。
  • PoRep.Prove(SP , R, c) → πc,其中c是驗證人V發出的隨機驗證, πc是證明人產生的可以訪問數據D的特定副本R的證明。PoRep.Prove由P(證明人)為V(驗證者)運行生成πc。
  • PoRep.Verify(Sv , c, πc) → {0, 1},用來檢測證明是否是正確。PoRep.Verify由V運行和說服V相信P已經存儲了R。

3.3 時空證明

存儲證明方案允許用戶請求檢查存儲提供商當時是否已經存儲了外包數據。我們如何使用PoS方案來證明數據在一段時間內都已經被存儲了?這個問題的一個自然的答案是要求用戶重復(例如每分鍾)對存儲提供商發送請求。然而每次交互所需要的通信復雜度會成為類似Filecoin這樣的系統的瓶頸,因為存儲提供商被要求提交他們的證明到區塊鏈網絡

為了回答這個問題,我們介紹了新的證明,“時空證明”,它可以讓驗證者檢查存儲提供商是否在一段時間內存儲了他/她的外包數據。這對提供商的直接要求是:(1)生成順序的存儲證明(在我們的例子里是“復制證明”)來作為確定時間的一種方法 (2)組成遞歸執行來生成簡單的證明。

定義3.2

*(時空證明)Post方案使得有效的證明人P能夠說服一個驗證者V相信P在一段時間內已經存儲了一些數據D。PoSt其特征是多項式時間算法的元組: (Setup, Prove, Verify)

  • PoSt.Setup(1λ,D)->Sp,Sv,其中SP和SV是P和V的特點方案的設置變量,λ是一個安全參數。PoSt.Setup用來給予P和V必要的信息來運行PoSt.Prove 和 PoSt.Prove。一些方案可能要求證明人或者是有互動的第三方去運算PoSt.Setup。
  • PoSt.Prove(Sp , D, c, t) → πc,其中c是驗證人V發出的隨機驗證, πc是證明人在一段時間內可以訪問數據D的的證明。PoSt.Prove由P(證明人)為V(驗證者)運行生成πc。
  • PoSt.Verify(Sv , c, t, πc) → {0, 1},用來檢測證明是否是正確。PoSt.Verify由V運行和說服V相信P在一段時間內已經存儲了R。

3.4 PoRep和PoSt實際應用

    我們感興趣的是PoRep和PoSt的應用構建,可以應用於現存系統並且不依賴於可信任的第三方或者硬件。我們給出了PoRep的一個構建(請參見基於密封的復制證明[5]),它在Setup過程中需要一個非常慢的順序計算密封的執行來生成副本。PoRep和PoSt的協議草圖在圖4給出,Post的底層機制的證明步驟在圖3中。

3.4.1 構建加密區塊

防碰撞散列 我們使用一個防碰撞的散列函數:CRH : {0, 1}* → {0, 1}O(λ)。我們還使用了一個防碰撞散列函數MerkleCRH,它將字符串分割成多個部分,構造出二叉樹並遞歸應用CRH,然后輸出樹根。

zk-SNARKs 我們的PoRep和PoSt的實際實現依賴於零知識證明的簡潔的非交互式知識論(zk-SNARKs)[6,7,8]。因為zk-SNARKs是簡潔的,所以證明很短並且很容易驗證。更正式地,讓L為NP語言,C為L的決策電路。受信任的一方進行一次設置階段,產生兩個公共密鑰:證明密鑰pk和驗證密鑰vk。證明密鑰pk使任何(不可信)的證明者都能產生證明證明π,對於她選擇的實例x,x∈L。非交互式證明π是零知識和知識證明。任何人都可以使用驗證密鑰vk驗證證明π。特別是zk-SNARK的證明可公開驗證:任何人都可以驗證π,而不與產生π的證明者進行交互。證明π具有恆定的大小,並且可以在| x |中線性的時間內驗證。

可滿足電路可靠?的zk-SNARKs是多項式時間算法的元組:(KeyGen, Prove, Verify)

  • KeyGen(1λ,C)→ (pk, vk),輸入安全參數λ和電路C,KeyGen產生概率樣本pk和vk。這兩個鍵作為公共參數發布,可在Lc上用於證明/驗證。

  • Prove(pk, x, w) → π 在輸入pk、輸入x和NP聲明w的見證時,證明人為語句x∈LC輸出非交互式證明π。

  • Verify(vk, x, π) → {0, 1} 當輸入vk,輸入x和證明 π,驗證者驗證輸出1是否滿足x ∈ LC。

我們建議感興趣的讀者參看[6,7,8]對zk-SNARK系統的正式介紹和實現。

通常而言這些系統要求KeyGen是由可信任參與方來運行。創新的可擴展計算完整性和隱私(SCIP)系統[9]展示了在假設信任的前提下,一個有希望的方向來避免這個初始化步驟。

3.4.2 密封操作(Seal)

密封操作的作用是(1)通過要求證明人存儲對於他們公鑰唯一的數據D的偽隨機排列副本成為物理的獨立復制,使得提交存儲n個副本導致了n個獨立的磁盤空間(因此是副本存儲大小的n倍)和(2)在PoRep.Setup的時候強制生成副本實質上會花費比預計響應請求更多的時間。有關密封操作的更正式定義,請參見[5]。上述的操作可以用SealτAES−256來實現,並且τ使得SealτAES−256需要花費比誠實的證明驗證請求序列多10-100倍的時間。請注意,對τ的選擇是重要的,這使得運行SealτBC比證明人隨機訪問R花費更多時間顯得更加明顯。

3.4.3 PoRep構建實踐

這節描述PoRep協議的構建並已在圖4包括了一個簡單協議草圖。實現和優化的細節略過了。

創建副本 Setup算法通過密封算法生成一個副本並提供證明。證明人生成副本並將輸出(不包括R)發送給驗證者。

證明存儲 Prove算法生成副本的存儲證明。證明人收到來自驗證者的隨機挑戰,要求在樹根為rt的Merkle樹R中確認特定的葉子節點Rc。證明人生成關於從樹根rt到葉子Rc的路徑的知識證明。

驗證證明 Verify算法檢查所給的源數據的哈希和副本的Merkle樹根的存儲證明的有效性。證明是公開可驗證的:分布式系統的節點維護賬本和對特定數據感興趣的可以驗證這些證明。

3.4.4 PoSt構建實踐

這節描述Post協議的構建並已在圖4中包含了一個簡單協議草圖。實現和優化的細節略過了。

Setup和Verify算法和上面的PoRep構建是一樣的。所以我們這里值描述Prove。

空間和空間的證明 Prove算法為副本生成“時空證明”。證明人接收到來自於驗證者的隨機挑戰,並順序生成”復制證明“,然后使用證明的輸出作為另一個輸入做指定t次迭代(見圖3)。

3.5 在Filecoin的應用

Filecoin協議采用”時空證明“來審核礦工提供的存儲。為了在Filecoin中使用PoSt,因為沒有指定的驗證者,並且我們想要任何網絡成員都能夠驗證,所以我們把方案改成了非交互式。因為我們的驗證者是在public-coin模型中運行,所以我們可以從區塊鏈中提取隨機性來發出挑戰。

 -------------------------------------------------------------------------

4 Filecoin:DSN構建

Filecoin DSN是可升級,可公開驗證和激勵式設計的去中心化的存儲網絡。客戶為了存儲數據和檢索數據向礦工網絡付費。礦工提供磁盤空間和帶寬來賺取費用。礦工只有在網絡可以審計他們的服務是否正確提供的時候才會收到付款。

在本節中,我們介紹基於DSN的定義和”時空證明“的Filecoin DSN構建。

4.1 環境

4.1.1 參與者

任何用戶都可以作為客戶端、存儲礦工和/或檢索礦工來參與Filecoin網絡。

  • 客戶在DSN中通過Put和Get請求存儲數據或者檢索數據,並為此付費。

  • 存儲礦工為網絡提供數據存儲。存儲礦工通過提供他們的磁盤空間和響應Put請求來參與Filecoin。要想成為存儲礦工,用戶必須用與存儲空間成比例的抵押品來抵押。存儲礦工通過在特定時間存儲數據來響應用戶的Put請求。存儲礦工生成"時空證明”,並提交到區塊鏈網絡來證明他們在特定時間內存儲了數據。假如證明無效或丟失,那存儲礦工將被罰沒他們的部分抵押品。存儲礦工也有資格挖取新區塊,如果挖到了新塊,礦工就能得到挖取新塊的獎勵和包含在塊中的交易費

  • 檢索礦工為網絡提供數據檢索服務。檢索礦工通過提供用戶Get請求所需要的數據來參與Filecoin。和存儲礦工不同,他們不需要抵押,不需要提交存儲數據,不需要提供存儲證明。存儲礦工可以同時也作為檢索礦工參與網絡。檢索礦工可以直接從客戶或者從檢索市場賺取收益。

4.1.2 網絡 N

我們將運行所有運行Filecoin全節點的所有用戶細化為一個抽象實體:網絡。該網絡作為運行管理協議的中介。簡單的說,Filecoin區塊鏈的每個新塊,全節點管理可用的存儲,驗證抵押品,審核存儲證明已經修復可能的故障。

4.1.3 賬本

我們的協議適用於基於賬本的貨幣。為了通用,我們稱之為“賬本” L。在任何給定的時間t(稱為時期),所有的用戶都能訪問Lt。當處於時期t的時候,賬本是追加式的,它由順序的一系列交易組成。Filecoin DSN協議可以在運行驗證Filecoin的證明的任意賬本上實現。在第六節中我們展示了我們如何基於有用的工作構建一個賬本。

4.1.4 市場

存儲需求和供給組成了兩個Filecoin市場:存儲市場和檢索市場。這兩個市場是兩個去中心化交易所,這會在第5節中詳細解釋。簡而言之,客戶和礦工們通過向各自的市場提交訂單來設定他們請求服務或者提供服務的訂單的價格。交易所為客戶和礦工們提供了一種方式來查看匹配出價並執行訂單。如果服務請求被成功滿足,通過運行管理協議,網絡保證了礦工得到報酬,客戶將被收取費用。

4.2 數據結構

  • 碎片 碎片是客戶在DSN所存儲數據的一部分。例如,數據是可以任意划分為許多片,並且每片都可以有不同集合的存儲礦工來存儲。
  • 扇區 扇區是存款礦工向網絡提供的一些磁盤空間。礦工將客戶數據的碎片存儲到扇區,並通過他們的服務來賺取令牌。為了存儲碎片,礦工們必須向網絡抵押他們的扇區。
  • 分配表 分配表是一種數據結構,可以跟蹤碎片和其分配的扇區。分配表在賬本的每個區塊都會更新,Merkle根存儲在最新的區塊中。在實踐中,該表用來保持DSN的狀態,它使得在證明驗證的過程中可以快速查找。更詳細的信息,請參看圖5。
  • 訂單 訂單式請求或提供服務的意向聲明。客戶向市場提交投標訂單來請求服務(存儲數據的存儲市場和檢索數據的檢索市場),礦工們提交報價訂單來提供服務。訂單數據結構如圖10所示。市場協議將在第5節詳細介紹。
  • 訂單簿 訂單簿是訂單的集合。請查看第5.2.2節的存儲市場訂單簿和第5.3.3節的檢索市場訂單簿。
  • 抵押 抵押是像網絡提供存儲(特別是扇區)的承諾。存儲礦工必須將抵押提交給賬本,以便能在存儲市場接受訂單。抵押包括了抵押扇區的大小和存儲礦工的存放的抵押品。

4.3 協議

在本節中,我們通過描述客戶端、礦工和網絡執行的操作來概述Filecoin DSN。我們在圖7中介紹了Get和Put協議的方法,和在圖8中的管理協議。一個協議執行的示例如圖6所示。圖1是Filecoin協議概覽。

4.3.1 客戶生命周期

我們給出客戶生命周期的概覽:在第5節接下來的協議會做深度的解析。

  1. Put:客戶將數據存儲於Filecoin

    客戶可以通過向Filecoin中的礦工支付令牌來存儲他們的數據。第5.2節詳細介紹了Put協議。

    客戶通過Put協議向存儲市場的訂單簿提交投標訂單。當找到礦工的匹配報價訂單的時候,客戶會將數據發給礦工,並且雙方簽署交易訂單將其提交到存儲市場訂單簿。客戶可以通過提交的訂單來決定數據的物理副本數量。更高的冗余度會有更高的存儲故障容忍度。

  2. Get:客戶從Filecoin檢索數據。客戶可以通過使用Filecoin 令牌向存儲礦工付費來檢索任何數據。Get協議在第5.3節有詳細描述。客戶端通過執行Get協議向檢索市場訂單簿提交投標訂單。當找到匹配的礦工報價訂單后,客戶會收到來自礦工的碎片。當收到的時候,雙方對交易訂單進行簽名提交到區塊鏈來確認交易成功。

4.3.2 挖礦周期(對於存儲礦工)

我們給出一個非正式的挖礦周期概述。

  1. 抵押:存儲礦工向網絡抵押存儲。

    存儲礦工通過在抵押交易中存放抵押品來保證向區塊鏈提供存儲。通過 Manage.PledgeSector ,抵押品被抵押一段期限是為了提供服務,如果礦工為他們所承諾提交存儲的數據生成存儲證明,抵押品就回返還給他們。如果存儲證明失敗了,一定數量的抵押品就會損失。他們設定價格並向市場訂單簿提交報價訂單,一旦抵押交易在區塊鏈中出現,礦工就能在存儲市場中提供他們的存儲。

    Manage.PledgeSector • inputs:

    – current allocation table allocTable

    – pledge request pledge

    • outputs: allocTable'

  2. 接收訂單:存儲礦工從存儲市場獲取存儲請求。他們設定價格並通關過Put.AddOrders向市場訂單簿提交報價訂單,一旦抵押交易出現在區塊鏈中,礦工就能在存儲市場中提供他們的存儲。

    Put.AddOrders

    • inputs: list of orders O1..On

    • outputs: bit b, equals 1 if successful

     

    通過Put.MatchOrders 來檢查是否和客戶的報價訂單匹配一致。

    Put.MatchOrders

    • inputs:

    – the current Storage Market OrderBook – query order to match Oq

    • outputs: matching orders O1..On

    一定訂單匹配,客戶會講他們的數據發給存儲礦工。存儲礦工接收到數據的時候,運行Put.ReceivePiece 。數據被接收完之后,礦工和客戶簽收訂單並將其提交到區塊鏈。

    Put.ReceivePiece

    • inputs: – signing key for Mj

    – current orderbook OrderBook

    – ask order Oask

    – bid order Obid

    – piece p

    • outputs: deal order Odeal signed by Ci and Mj

     

  3. 密封:存儲礦工為未來的證明准備碎片。

    存儲礦工的存儲切分為扇區,每個扇區包括了分配給礦工的碎片。網絡通過分配表來跟蹤每個存儲礦工的扇區。當存儲礦工的扇區填滿了,這個扇區就被密封起來。密封是一種緩慢的順序操作。將扇區中的數據轉換成為副本,然后將數據的唯一物理副本與存儲礦工的公鑰相關聯。在“復制證明”期間密封式必須的操作。如下所述在第3.4節。

    Manage.SealSector • inputs:

    – miner public/private key pair M

    – sector index j

    – allocation table allocTable

    • outputs: a proof πSEAL, a root hash rt

  4. 證明:存儲礦工證明他們正在存儲所承諾的碎片(數據)。

    當存儲礦工分配數據時,必須重復生成復制證明以保證他們正在存儲數據(有關更多詳細信息,請參看第3節)證明發布在區塊鏈中,並由網絡來驗證。

    Manage.ProveSector

    • inputs:

    – miner public/private key pair M

    – sector index j

    – challenge c

    • outputs: a proof πPOS

     

4.3.3 挖礦周期(對於檢索礦工)

我們給出一個非正式的挖礦周期概述。

  1. 收到訂單:檢索礦工從檢索市場得到獲取數據的請求。

    檢索礦工設置價格並向市場訂單簿增加報價訂單,並通過向網絡發送報價單來提供數據。

    Get.AddOrders

    • inputs: list of orders O1..On

    • outputs: none

    然后檢索礦工檢查是否與客戶的報價訂單匹配一致。

    Get.MatchOrders

    • inputs:

    – the current Retrieval Market OrderBook

    – query order to match Oq

    • outputs: matching orders O1..On

  2. 發送:檢索礦工向客戶發送數據碎片。

    一旦訂單匹配,檢索礦工就將數據發送給客戶(第5.3節有詳細描述)。當數據被接收完成,礦工和客戶就簽署交易比ing提交到區塊鏈。

    Put.SendPieces

    • inputs: – an ask order Oask

    – a bid order Obid

    – a piece p

    • outputs: a deal order Odeal signed by Mi

4.3.4 網絡周期

我們給出一個非正式的網絡操作概述。

1.分配:網絡將客戶的碎片分配給存儲礦工的扇區。

客戶通過向存儲市場提交報價訂單來啟動Put協議。當詢價單和報價單匹配的時候,參與的各方共同承諾交易並向市場提交成交的訂單。此時,網絡將數據分配給礦工,並將其記錄到分配表中。

Manage.AssignOrders

• inputs:

– deal orders O1deal..Ondeal

– allocation table allocTable

• outputs: updated allocation table allocTable'

  1. 修復:網絡發現故障並試圖進行修復

    所有的存儲分配對於網絡中的每個參與者都是公開的。對於每個塊,網絡會檢查每個需要的證明都存在,檢查它們是否有效,因此采取行動:

    Manage.RepairOrders

    • inputs:

    – current time t

    – current ledger L

    – table of storage allocations allocTable

    • outputs: orders to repair O1deal..Ondeal, updated allocation table allocTable

  • 如果有任何證明的丟失或無效,網絡會通過扣除部分抵押品的方式來懲罰存儲礦工。
  • 如果大量證明丟失或無效(由系統參數Δfault定義),網絡會認定存儲礦工存在故障,將訂單設定為失敗,並為同樣的數據引入新訂單進入市場。
  • 如果所有存儲該數據的存儲礦工都有故障,則該數據丟失,客戶獲得退款。

 

4.4 擔保和要求

以下是Filecoin DSN如何實現完整性、可檢索性,公開可驗證性和激勵兼容性。

  • 實現完整性 數據碎片以加密哈希命名。一個Put請求后,客戶只需要存儲哈希即可通過Get操作來檢索數據,並可以驗證收到的數據的完整性。

  • 實現可恢復性 在Put請求中,客戶指定副本因子和代碼期望擦除類型。假設給定的m個存儲礦工存儲數據,可以容忍最多f個故障,則該方式是(f, m)-tolerant存儲。通過在不同的存儲提供商存儲數據,客戶端可以增加恢復的機會,以防存儲礦工下線或者消失。

  • 實現公開可驗證和可審核性 存儲礦工需要提交其存儲 (πSEAL, πPOST)的證明到區塊鏈。網絡中的任意用戶都可以在不訪問外包數據的情況下驗證這些證明的有效性。另外由於這些證明都是存儲在區塊鏈上的,所以操作痕跡可以隨時審核。

  • 實現激勵兼容性 不正式的說,礦工通過提供存儲而獲得獎勵。當礦工承諾存儲一些數據的時候,它們需要生成證明。如果礦工忽略了證明就回被懲罰(通過損失部分抵押品),並且不會收到存儲的獎勵。

  • 實現保密性 如果客戶希望他們的數據被隱私存儲,那客戶必須在數據提交到網絡之前先進行加密。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM