免責聲明:本文旨在傳遞更多市場信息,不構成任何投資建議。文章僅代表作者觀點,不代表火星財經官方立場。
小編:記得關注哦
來源:開源存儲Filecoin
Filecoin:一種去中心化的存儲網絡
協議實驗室
2017年7月19日
摘要
當前網際網路正處於一場革命中:集中式專有服務正在被去中心化開放服務所代替;信任式參與被可驗證式計算所代替;脆弱的位置尋址被彈性的內容尋址所代替;低效率的整體式服務被點對點算法市場所代替;比特幣、以太坊和其他的區塊鏈網絡已經證明了去中心化交易帳本的有效性。這些公共帳本處理複雜的智能合約應用程式和交易價值數百億美金的加密資產。這些系統的參與者們形成去中心化的、沒有中心管理機構或者可信任黨派的網絡提供了有用的支付服務,這是廣泛網際網路開放服務的第一個實例。IPFS通過分散的網頁自身已經證明了內容尋址的有效性,它提供了全球點對點網絡數十億文件使用。它解放了孤島數據,網絡分區存活,離線工作,審查制度路線,產生了持久的數字信息。
Filecoin是一個去中心化存儲網絡,它讓雲存儲變成一個算法市場。這個市場運行在有著本地協議令牌(也叫做Filecoin)的區塊鏈。區塊鏈中的礦工可以通過為客戶提供存儲來獲取Filecoin,相反的,客戶可以通過花費Filecoin來僱傭礦工來存儲或分發數據。和比特幣一樣,Filecoin的礦工們為了巨大的獎勵而競爭式挖區塊,但Filecoin的挖礦效率是與存儲活躍度成比例的,這直接為客戶提供了有用的服務(不像比特幣的挖礦僅是為了維護區塊鏈的共識)。這種方式給礦工們創造了強大的激勵,激勵他們儘可能多的聚集存儲器並且把它們出租給客戶們。Filecoin協議將這些聚集的資源編織成世界上任何人都能依賴的自我修復的存儲網絡。該網絡通過複製和分散內容實現魯棒性,同時自動檢測和修復副本失敗。客戶可以選擇複製參數來防範不同的威脅模型。該協議的雲存儲網絡還提供了安全性,因為內容是在客戶端端對端加密的,而存儲提供者不能訪問到解密秘鑰。Filecoin的成果作為可以為任何數據提供存儲基礎架構的IPFS最上面的激勵層。它對去中心化數據,構建和運行分布式應用程式,以及實現智能合同都非常有用。
這些工作包括以下幾部分內容:
介紹Filecoin網絡,概述這個協議以及詳細介紹幾個組件。形式化去中心化存儲網絡(DSN)的計劃與內容,然後構建Filecoin作為一個DSN。介紹一種叫「複製證明」的新型存儲證明方案,它允許驗證任何數據副本都存儲在物理上獨立的存儲器中。介紹一種新型的以基於順序複製和存儲作為激勵度量的有用工作共識。形成可驗證市場,並構建兩個市場,存儲市場和檢索市場,它們分別管理如何從Filecoin寫入和讀取數據。討論用例,如何連接其他系統以及如何使用這個協議。注意:Filecoin是一項正在進行的工作。正在進行積極的研究,本文的新版本將會出現在https://filecoin.io。
如有意見和建議,請通過research@filecoin.io與我們聯繫。
1. 介紹
Filecoin是一種協議令牌,其區塊鏈運行在一種叫「時空證明」的新型證明機制上,其區塊被存儲數據的礦工所挖。Filecoin協議通過不依賴於單個協調員的獨立存儲提供商組成的網絡提供數據存儲服務和數據檢索服務。其中:
用戶為數據存儲和檢索支付令牌存儲礦工通過提供存儲空間賺取令牌檢索礦工通過提供數據服務賺取令牌1.1 基本組件 Elementary Components
Filecoin協議由四個新型組件組成:
去中心化存儲網絡(Decentralized Storage Network)(DSN):我們提供一個由提供存儲和檢索服務的獨立服務商網絡的抽象(在第二節)。接著我們提出了Filecoin協議作為激勵,可審計和可驗證的DSN構建(在第4節)。新型的存儲證明:我們提出了兩種新型存儲證明方案(在第三節):(1)「複製證明」(Proof-of-Replication)允許存儲提供商證明數據已經被複製到了他自己唯一專用的物理存儲設備上了。執行唯一的物理副本使驗證者能夠檢查證明者是否不存在將多個數據副本重複拷貝到同一存儲空間。(2)「時空證明」(Proof-of-Spacetime)允許存儲提供商證明在指定的時間內存儲了某些數據。可驗證市場:我們將存儲請求和檢索需求作為兩個由Filecoin網絡操作的去中心化可驗證市場的訂單進行建模(在第五節)。驗證市場確保了當一個服務被正確提供的時候能執行付款。我們介紹了客戶和礦工可以分別提交存儲和檢索訂單的存儲市場和檢索市場。有效的工作量證明(Proof-of-Work):我們展示了如何基於「時空證明」來構建有效的工作量證明來應用於共識協議。礦工們不需要花費不必要的計算來挖礦,但相反的必須存儲數據於網絡中。1.2 協議概述Protocol Overview
Filecoin協議是構建於區塊鏈和帶有原生令牌的去中心化存儲網絡。客戶花費令牌來存儲數據和檢索數據,而礦工們通過提供存儲和檢索數據來賺取令牌。Filecoin DSN 分別通過兩個可驗證市場來處理存儲請求和檢索請求:存儲市場和檢索市場。客戶和礦工設定所要求服務的價格和提供服務的價格,並將其訂單提交到市場。市場由Filecoin網絡來操作,該網絡採用了「時空證明」和「複製證明」來確保礦工們正確存儲他們承諾存儲的數據。最後,礦工們能參與到區塊鏈新區塊的鍛造。礦工對下一個區塊鏈的影響與他們在網絡中當前存儲使用量成正比。圖一是使用了術語定義之後的Filecoin協議草圖,伴隨著一個例子如圖2所示。
圖1:Filecoin 協議草圖
圖2:Filecoin 協議實例與用戶礦機交互
1.3 論文組Paper organization
本文的其餘部分安排如下:我們在第2節中介紹了對一個理論上的DNS方案的定義和需求。在第3節中我們定義和介紹我們的「複製證明」和「時空證明」協議,以及Filecoin將其用於加密地驗證數據按照訂單的要求被持續不斷的存儲。第4節描述了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嗎,不一定的,有些方案可能採用可擦除式設計,其中每個存儲供應商存儲數據的特定部分,這樣使得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. 複製證明與時空證明
在Filecoin協議中,存儲供應商必須讓他們的客戶相信,客戶所付費的數據已經被他們存儲。在實踐中,存儲供應商將生成「存儲證明」(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的深入研究,我們參考了Technical Report: Proof-of-Replication, 2007。
定義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 密封操作
密封操作的作用是(1)通過要求證明人存儲對於他們公鑰唯一的數據D的偽隨機排列副本成為物理的獨立複製,使得提交存儲n個副本導致了n個獨立的磁碟空間(因此是副本存儲大小的n倍)和(2)在PoRep.Setup的時候強制生成副本實質上會花費比預計響應請求更多的時間。有關密封操作的更正式定義,請參見[5]。上述的操作可以用SealτAES256來實現,並且τ使得SealτAES256需要花費比誠實的證明驗證請求序列多10-100倍的時間。請注意,對τ的選擇是重要的,這使得運行SealτBC比證明人隨機訪問R花費更多時間顯得更加明顯。
3.4.3 PoRep構建實踐
這節描述PoRep協議的構建並已在圖4包括了一個簡單協議草圖。實現和優化的細節略過了。
創建副本 Setup算法通過密封算法生成一個副本並提供證明。證明人生成副本並將輸出(不包括R)發送給驗證者。Setup inputs:– prover key pair (pkP ,skP )– prover SEAL key pkSEAL– data D outputs:
replica R
Merkle root rt of R
proof πSEAL
證明存儲 Prove算法生成副本的存儲證明。證明人收到來自驗證者的隨機挑戰,要求在樹根為rt的Merkle樹R中確認特定的葉子節點Rc。證明人生成關於從樹根rt到葉子Rc的路徑的知識證明。
Prove inputs:– prover Proof-of-Storage key pkPOS– replica R– random challenge c outputs: a proof πPOS
驗證證明 Verify算法檢查所給的源數據的哈希和副本的Merkle樹根的存儲證明的有效性。證明是公開可驗證的:分布式系統的節點維護帳本和對特定數據感興趣的可以驗證這些證明。Verify inputs:– prover public key, pkP– verifier SEAL and POS keys vkSEAL, vkPOS– hash of data D, hD– Merkle root of replica R, rt– random challenge, c– tuple of proofs, (πSEAL, πPOS) outputs: bit b, equals 1 if proofs are valid
3.4.4 PoSt構建實踐
這節描述Post協議的構建並已在圖4中包含了一個簡單協議草圖。實現和優化的細節略過了。
Setup和Verify算法和上面的PoRep構建是一樣的。所以我們這裡值描述Prove。
空間和空間的證明 Prove算法為副本生成「時空證明」。證明人接收到來自於驗證者的隨機挑戰,並順序生成「複製證明」,然後使用證明的輸出作為另一個輸入做指定t次迭代(見圖3)。Prove inputs:– prover PoSt key pkPOST– replica R– random challenge c– time parameter t outputs: a proof πPOST
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請求存儲數據或者檢索數據,並為此付費。存儲礦工為網絡提供數據存儲。存儲礦工通過提供他們的磁碟空間和響應Pug請求來參與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和Pug協議的方法,和在圖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.Pledge Sector,抵押品被抵押一段期限是為了提供服務,如果礦工為他們所承諾提交存儲的數據生成存儲證明,抵押品就回返還給他們。如果存儲證明失敗了,一定數量的抵押品就會損失。他們設定價格並向市場訂單簿提交報價訂單,一旦抵押交易在區塊鏈中出現,礦工就能在存儲市場中提供他們的存儲。
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 Mj3. 密封:存儲礦工為未來的證明準備碎片。
存儲礦工的存儲切分為扇區,每個扇區包括了分配給礦工的碎片。網絡通過分配表來跟蹤每個存儲礦工的扇區。當存儲礦工的扇區填滿了,這個扇區就被密封起來。密封是一種緩慢的順序操作。將扇區中的數據轉換成為副本,然後將數據的唯一物理副本與存儲礦工的公鑰相關聯。在「複製證明」期間密封式必須的操作。如下所述在第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 πPOS4.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'
2. 修復:網絡發現故障並試圖進行修復。
所有的存儲分配對於網絡中的每個參與者都是公開的。對於每個塊,網絡會檢查每個需要的證明都存在,檢查它們是否有效,因此採取行動: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)的證明到區塊鏈。網絡中的任意用戶都可以在不訪問外包數據的情況下驗證這些證明的有效性。另外由於這些證明都是存儲在區塊鏈上的,所以操作痕跡可以隨時審核。實現激勵兼容性: 不正式的說,礦工通過提供存儲而獲得獎勵。當礦工承諾存儲一些數據的時候,它們需要生成證明。如果礦工忽略了證明就回被懲罰(通過損失部分抵押品),並且不會收到存儲的獎勵。實現保密性: 如果客戶希望他們的數據被隱私存儲,那客戶必須在數據提交到網絡之前先進行加密。
5. Filecoin的存儲和檢索市場
Filecoin有兩個市場:存儲市場和檢索市場。這兩個市場有同樣的結構但不同的設計。存儲市場允許客戶為礦工存儲數據而付費。檢索數據允許客戶為礦工提供檢索數據傳遞而付費。在這兩種情況下,客戶和礦工可以設置報價和需求價格或者接受當前報價。這個交易是由網絡來運行的Filecoin中全節點是擬人化的。網絡保證礦工在提供服務時可以得到客戶的獎勵。
5.1 驗證市場
交易市場是促進特定商品和服務交換的協議。它們使得買家和買家促成交易。對於我們而言,我們要求交易是可驗證的:去中心化網絡的參與者必須能夠在買家和賣家間驗證交易。我們提出驗證市場的概念。它沒有單一的實體來管理交易,交易是透明的,任何人都可以匿名參與。可驗證市場協議使得服務的交易去中心化:訂單簿的一致性,訂單結算和服務的正確執行是可以由參與者獨立驗證的-在Filecoin裡面的礦工和全節點。我們簡化可驗證市場來進行以下構建:
定義5.1
可驗證市場是一個有兩個階段的協議:訂單匹配和結算。訂單是購買意圖或者出售商品或服務安全性的表述,訂單簿就是所有可用訂單的列表。
5.2 存儲市場
存儲市場是可驗證的市場,它允許客戶(即買家)請求他們的存儲數據和存儲礦工(即賣家)提供他們的存儲空間。
5.2.1 需求
我們根據以下需求來設計存儲市場協議:
鏈式訂單簿:重要的是(1)存儲空格的訂單式公開的,所以最低價格的訂單總是網絡知名的,客戶可以對訂單做出明智的決定(2)客戶訂單必須始終提交給訂單,即使他們接受接受最低的價格,這樣市場就可以對新的報價做出反應。因此我們要求訂單添加到Filecoin區塊鏈,為的時能被加入訂單簿。參與者投入資源:我們要求參與雙方承諾他們的資源作為避免損害的一種方式。為了避免存儲礦工不提供服務和避免客戶沒有可用的資金。為了參與存儲市場,存儲礦工必須保證在DSN中存入與其存儲量成比例的抵押品(更多詳細信息請參看第4.3.3節)。通過這種方式,網絡可以懲罰那些承諾存儲數據但又不提供存儲證明的存儲礦工。同樣的,客戶必須向訂單充入特定數量的資金,以這種方式保證在結算期間的資金可用性。故障自處理:只有在存儲礦工反覆證明他們已經在約定的時間內存儲了數據的情況下,訂單才會結算給礦工。網絡必須能夠驗證這些證明的存在性和正確性並且它們是按照規則來處理的。在4.3.4節有修復部分的概述。5.2.2 數據結構
Put訂單。有三種類型的訂單:出價訂單,詢價訂單和交易訂單。存儲礦工創建詢價訂單添加存儲,客戶創建出價訂單請求存儲,當雙方對價格達成一致時,他們共同創建處理訂單。訂單的數據結構和訂單參數的明確定義如圖10所示。
Put訂單簿。存儲市場的訂單簿是目前有效和開放的詢價,出價和 交易訂單的集合。用戶可以通過Put協議中定義的方法與訂單簿進行交互:AddOrders,MatchOrders如圖7所示。
訂單簿是公開的,並且每個誠實的用戶都有同樣的訂單簿試圖。在每個周期,如果新的訂單交易出現在新的區塊中那它將被添加到訂單簿中。如果訂單被取消,取消或者結算,則會被刪除。訂單將被添加到區塊鏈中,因此在訂單簿中如果是有效的:
定義5.2
我們定義出價、詢價、交易訂單的有效性:(有效出價單)從客戶端發出的投標單Ci,Obid:= (hsize, funds[, price,time, coll, coding])>Ci,如果滿足下面的條件就是有效的:
Ci 在他們的帳戶裡面至少有可用的資金時間沒有超時訂單必須保證最少的存儲周期(這是個系統參數)(有效詢價單) 從存儲礦工發出的詢價單Mi,Oask:= (hspace, pricei)Mi,如果滿足下面的條件就是有效的:
Mi承諾為礦工,並且質押期不會在訂單周期之前到期空間必須小於Mi的可用存儲。Mi在訂單中減去承諾的存儲(在詢價訂單和交易訂單中)(有效交易訂單) 交易訂單Odeal:= (hask, bid,ts)Ci,Mj,如果滿足下面的條件就是有效的:
詢問參考訂單Oask,使得:它由Ci籤署,且在存儲市場的訂單簿中沒有其他訂單涉及它。出價訂單參考訂單Obid,使得:它由Mj籤署,且在存儲市場的訂單簿中沒有其他訂單涉及它。ts 不能設置為將來時間或者太早的時間如果作惡客戶端從存儲礦工出收到了籤名的交易,但從來沒有將其添加到訂單簿,那麼存儲礦工就無法重新使用訂單中提交的存儲。這個欄位ts就可以防止這種攻擊,因為,在超過ts之後,訂單變得無效,將無法在訂單簿中提交。
5.2.3 存儲市場協議
簡而言之,存儲市場協議分為兩個階段:訂單匹配和結算。
訂單匹配:客戶端和存儲礦工通過提交交易到區塊鏈來將訂單提交到訂單簿(步驟1)。當訂單匹配時,客戶端發送數據碎片給存儲礦工,雙方籤署交易並提交到訂單簿(步驟2)。結算:存儲礦工密封扇區(步驟3a),生成扇區所包含的碎片的存儲證明,並將其定期提交到區塊鏈(步驟3b);同時,其餘的網絡必須驗證礦工生成的證明並修復可能的故障(步驟3c)。存儲市場協議在圖11中詳細描述。
5.3 檢索市場
檢索市場允許客戶端請求檢索特定的數據,由檢索礦工提供這個服務。與存儲礦工不同,檢索礦工不要求在特定時間周期內存儲數據或者生成存儲證明。在網絡中的任何用戶都可以成為檢索礦工,通過提供提供檢索服務來賺取Filecoin令牌。檢索礦工可以直接從客戶端或者檢索接收數據碎片,也可以存儲它們成為存儲礦工。
5.3.1 需求
我們根據以下的需求來設計檢索市場協議:
鏈下訂單簿:客戶端必須能夠找到提供所需要數據碎片的檢索礦工,並且在定價之後直接交換。這意味著訂單簿不能通過區塊鏈來運行。因為這將成為快速檢索請求的瓶頸。相反的,參與者只能看到訂單簿的部分視圖。我們要求雙方傳播自己的訂單。無信任方檢索:公平交換的不可能性[10]提醒我們雙方不可能沒有信任方的進行交流。在存儲市場中,區塊鏈網絡作為去中心化信任方來驗證存儲礦工提供的存儲。在檢索市場,檢索礦工和客戶端在沒有網絡見證所交換文件的情況下來交換數據。我們通過要求檢查礦工將數據分割成多個部分並將每個部分發送給客戶端來達到這個目的,礦工們將收到付款。在這種方式中,如果客戶端停止付款,或者礦工停止發送數據,任何一方都可以終止這個交易。注意的是,我們必須總是假設總是有一個誠實的檢索礦工。支付通道:客戶端當提交付款的時候可以立即進行檢索感興趣的碎片。檢索礦工只有在確認收到付款的時候才會提供數據碎片。通過公共帳本來確認交易可能會成為檢索請求的瓶頸,所以,我們必須依靠有效的鏈下支付。Filecoin區塊鏈必須支持快速的支付通道,只有樂觀交易和僅在出現糾紛的情況下才使用區塊鏈。通過這種方式,檢索礦工和客戶端可以快速發送Filecoin協議所要求的小額支付。未來的工作裡包含了創建一個如[11,12]所述的支付通道網絡。5.3.2 數據結構
獲取訂單。檢索市場中包含有三種類型的訂單:客戶端創建的出價單 Obid,檢索礦工創建的詢價單Oask,和存儲礦工和客戶端達成的交易訂單Odeal。訂單的數據結構如圖10所示。
獲取訂單簿。檢索市場的訂單簿是有效的和公開出價訂單,詢價訂單和交易訂單的集合。與存儲市場不同,每個用戶有不同的訂單簿試圖,因為訂單式在網絡中傳播的,每個礦工和客戶端只會跟蹤他們所感興趣的訂單。
5.3.3 檢索市場協議
簡而言之,檢索市場協議分為兩個階段:訂單匹配和結算:
訂單匹配:客戶端和檢索礦工通過廣播將訂單提交給訂單簿(步驟1)。當訂單匹配的時候,客戶端和檢索礦工簡歷小額支付通道(步驟2)。結算:檢索礦工發送小部分的碎片給到客戶端,然後對每個碎片客戶端會向礦工發送收妥的收據(步驟3)。檢索礦工向區塊鏈出示收據從而獲得獎勵(步驟4)。該協議在圖12中詳細解釋。
6. 有用工作共識
Filecoin DSN協議可以在允許驗證的任何共識協議之上實現Filecoin的證明。在本節中,我們將結算如何基於有用來引導共識協議。Filecoin礦工生成「時空證明」來參與共識,而不是浪費的POW。
有用。如果計算的輸出對網絡來說是有價值的,而不僅僅是為了保證區塊鏈的安全。我們認為礦工在共識協議中所作的工作是有用的。
6.1 動機
確保區塊鏈的安全是至關重要的。POW的證明方案往往要求不能重複使用的或者需要大量的浪費計算才能找到難題的解決方案。
不可重複利用的工作:大多數無許可型的區塊鏈要求礦工解決硬計算難題,譬如反轉哈希函數。通常情況下這些解決方案都是無用的,除了保護網絡安全之外,沒有其他任何價值。我們可以重新設計讓這件事有用嗎?嘗試重複使用的工作:已經有幾個嘗試重複使用挖礦電路進行有用的計算。有些嘗試是要求礦工與標準的POW同時進行一些特殊計算,其他一些嘗試用有用問題替代POW的依然難以解決。例如,Primecoin重新使用礦工的計算能力來找到新的素數,以太坊要求礦工與工作證明一起執行小程序,同時證明某些數據正在歸檔。雖然這些嘗試中的大多數都執行有用的工作,但在這些計算中浪費的工作量仍然很普遍的。浪費的工作:解決難題在機器成本和能力消耗方面是非常昂貴的,特別是如果這些難題完全依賴計算能力。當挖礦算法不能並發的時候,那解決難題的普通因素就是計算的功率。我們可以減少浪費的工作嗎?試圖減少浪費:理想情況下,大部分網絡資源應該花費在有用的工作上。一些嘗試是要求礦工使用更節能的解決方案。例如,「空間挖礦」(?Spacemint)要求礦工致力於磁碟空間而不是計算;雖然更加節能,但磁碟空間依然」浪費「,因為它們被隨時的數據填滿了。其他的嘗試是用基於權益證明的傳統拜佔庭協議來代替難題的解決,其中利益相關方在下一個塊的投票與其在系統中所佔有的貨幣份額成正比。我們著手設計一個基於用戶數據存儲的有用工作的共識協議。
6.2 Filecoin 共識
我們提出了一個有用工作共識協議,其中網絡選擇一個礦工創建一個新礦區的概率(我們稱之為礦工的投票權)與他們當前網絡中正在使用的儲量成正比關係。我們設計 Filecoin 協議,能讓礦工們投資存儲,而非在算力上並行化採礦計算。礦工提供存儲並重新使用計算來證明數據被存儲以參與共識。
6.21 挖礦功率建模
功率容錯。在我們的技術報告中,我們提出了功率容錯,這是對在參與者對協議結果的影響方面重新構建拜佔庭故障的抽象。每個參與者控制了網絡總功率n中的一部分功率,其中f是故障節點或作惡節點所控制的功率佔比。
Filecoin功率。在Filecoin中,在時刻t,礦工Mi的功率Pt>i是Mi總和的存儲任務。Mi的 Iti是網絡中Mi總功率的影響因子。
在Filecoin中,功率有以下屬性:
公開:網絡中當前正在使用的存儲總量是公開的。通過讀取區塊鏈,任何人都可以計算每個礦工的存儲任務-因此任何人都可以計算出在任意時間點的每個礦工的功率和總功率。可公開驗證的:對於每個存儲任務,礦工都需要生成」時空證明「,證明持續提供服務。通過讀取區塊鏈,任何人都可以驗證礦工的功率聲明是否是正確的。變量:在任意時間點,礦工都可以通過增加新增扇區和扇區補充的抵押來增加新的存儲。這樣礦工就能變更他們能提供的功率。6.2.2 功率會計與時空證明
每個proof 區塊(proof 是系統參數),礦工們都必須向網絡提交「時空證明」,只有網絡中大多數功率認為它們是有效的,才會被城管添加到區塊鏈。在每個區塊中,每個圈節點會更新分配表(AllocTable),添加新的存儲分配、刪除過期的和標記缺少證明的記錄。
可以通過對分配表的記錄來對礦工Mi的功率進行計算和驗證。這些可以通過兩種方式來完成:
全節點驗證:如果節點擁有完整的區塊鏈記錄,則可以從創始塊開始運行網絡協議直到當前區塊,這個過程中驗證每一個分配給Mi的「時空證明」。簡單存儲驗證:假設輕客戶端可以訪問廣播最新區塊的信任源。請客戶端可以從網絡中的節點請求(1)Mi在當前分配表中的記錄,(2)該記錄被包含在最新區塊的狀態樹中的Merkle路徑(3)從創世塊到當前區塊的區塊頭。這樣請客戶端就可以將「時空證明」的驗證委託給網絡。功率計算的安全性來自於「時空證明」的安全性。在這個設置裡面,Post保證了礦工無法對他們所分配的存儲數量說謊。事實上,他們不能聲稱能夠存儲超過他們的存儲空間的數據,因為這會花費時間來運行PoSt.Setup,另外PoSt.Prove是串行的計算,並不能並行化的快速生成證明。
6.2.3 使用功率達成共識
我們預計通過擴展現在(和未來)的權益證明共識協議來實現Filecoin共識的多種策略,其中權益被替換為分配的存儲。我們預計了權益證明協議的改進,我們提出了一個基於我們前期工作,稱為預期共識的構建[14]。我們的策略是在每一輪選舉一個(或多個)礦工,使得贏得選舉的概率與每個礦工分配的存儲成比例。
預期共識。預期共識的基本直覺是確定性的,不可預測的。並在每個周期內秘密選舉一個小的Leader集合。預期的期望是每個周期內當選的Leader是1,但一些周期內可能有0個或者許多的Leader。Leader們通過創建新區塊並廣播來擴展區塊鏈網絡。在每個周期,每個區塊鏈被延伸一個或多個區塊。在某個無Leader的周期內,控區塊被添加到區塊鏈中。雖然鏈中的區塊可以線性排序,其數據結構是有向無環圖。EC是一個概率共識,每個周期都使得比前面的區塊更加確定,最終達到了足夠的確定性,且出現不同的歷史塊鏈的可能性是足夠小的。如果大多數的參與者都通過籤署區塊鏈來擴展區塊鏈,加大這個區塊所屬鏈的權重,那麼這個區塊就被確認了。
選舉礦工,在每個周期,每個礦工檢查他們是否被選為Leader,這類似於完成前面的協議:CoA[15],白皮書[16],和算法[17]。
譯者註:下面的公式表達式請參考英文原版為佳
定義6.1。如果下面的條件是滿足的,則在時刻t 礦工Mi 是Leader:
其中rand(t)是在時刻t,可以從區塊鏈中提取出來的公開的隨機變量,Pt>i是Mi的功率。考慮對於任意的m,L是H(m)的大小,H是一種安全的加密散列函數,其中(m)Mi是Mi對消息m的籤名,使得:
在圖13中,我們描述了礦工(ProveElect)和網絡節點(VerifyElect)之間的協議。這種選舉方案提供了三個屬性:公平,保密和公開的可驗證性。
公平:每個參與者每次選舉只有一次試驗,因為籤名是確定性的,而且t和rand(t)是固定的。假設H是安全的加密散列函數,則H(Mi)/2L必須是從(0,1)均勻選擇的實數,因此,可能使得方程等式為true必須是Pti/Σjptj,這等於礦工在在網絡中的部分功率。因為這個概率在功率上市線性的,這種可能性在分裂或者匯集功率情況下被保留。注意隨機值rand(t)在時刻t之前是未知的。保密:由於有能力的攻擊者不擁有Mi用來計算籤名的秘鑰,考慮到數字籤名的假設,這個是可以忽略不計的。公開可驗證:當選Leader i ∈ Lt 可以通過給出t,rand(t),H(i)/2L,來說服一個有效的驗證者。鑑於前面的觀點,有能力的攻擊者在不擁有獲勝秘密秘鑰的情況下不能生成證明。
7. 智能合約
Filecoin為終端用戶提供了兩個基本元:Get和Put。這些基元允許客戶以優惠的價格存儲數據並從市場中檢索數據。儘管基元涵蓋了 Filecoin 的默認使用案例,但我們通過支持智能合約的部署,允許在Get和Put之上設計更複雜的操作。用戶可以對我們分類為文件合同以及通用智能合同的新的細粒度存儲/檢索請求進行編程。我們整合了一個合同系統和一個Bridge系統,將Filecoin存儲裝入其他區塊鏈,反之亦然,將其他區塊鏈的功能帶入Filecoin。
我們期望在 Filecoin 生態系統中能有大量的智能合約,我們期待著一個智能合約的開發者社區。
7.1 Filecoin智能合約
智能合約使得Filecoin的用戶可以編寫有狀態的程序,來花費令牌向市場請求存儲J/檢索數據和驗證存儲證明。用戶可以通過將交易發送到帳本觸發合約中的功能函數來與智能合約交互。
我們擴展了智能合約系統來支持Filecoin的特定操作(如市場操作,證明驗證)。
文件合約:我們允許用戶對他們提供的存儲服務進行條件編程。有幾個例子值得一提:(1)承包礦工:客戶可以提前指定礦工提供服務而不參與市場 (2)付款策略:客戶可以為礦工設計不同的獎勵策略,例如合約可以給礦工支付隨著時間的推移越來高的費用 ,另一個合約可以由值得信任的Oracle的通知來設置存儲的價格。(3)票務服務:合約可以允許礦工存放令牌和用於代表用戶的存儲/檢索的支付 (4)更複雜的操作:客戶可以創建合約來運行數據更新。智能合約:用戶可以將程序關聯到其他系統(如以太坊[18])他們的交易上,他們不直接依賴存儲的使用。我們預見了以下的應用程式:去中心化命名服務,資產跟蹤和預售平臺。7.2 與其他系統的集成
橋是旨在連接不同區塊鏈的工具;現在正在處理中的,我們計劃支持跨鏈交互,以便能將Filecoin存儲帶入其他基於區塊鏈的平臺,同時也將其他平臺的功能帶入Filecoin。
Filecoin進入其他平臺:其他的區塊鏈系統,如比特幣[19],Zcash [20],特別是Ethereum [18]和Tezos,允許開發人員寫智能合約;然而,這些平臺只提供很少的存儲能力和非常高的成本。我們計劃提供橋將存儲和檢索支持帶入這些平臺。我們注意到,IPFS已經被作為幾個智能合約(和協議令牌)引用和分發內容的一種方式來使用。增加到Filecoin的支持將允許這些系統以交換Filecoin令牌的方式來保證IPFS存儲內容。其他平臺進入Filecoin:我們計劃提供Filecoin連接其他區塊鏈服務的橋。例如,與Zcash的集成將支持發送隱私數據的存儲請求。8. 未來的工作
這項工作為Filecoin網絡的建設提供了一個清晰和凝聚的道路;但是,我們也認為這項工作將成為今後研究去中心化存儲系統的起點。在這個我們識別和填充三類未來 工作。這包括已經完成只是等待描述和發布的工作,提出改進當前協議的開放式問題,和協議的形式化。
8.1 正在進行的工作
以下主題代表正在進行的工作。
每個塊中的Filecoin狀態樹的規範。Filecoin及其組件的詳細績效估計和基準。完全可實現的Filecoin協議規範。贊助檢索票務模型,其中通過分配每個可持票花費的令牌,任何客戶端C1可以贊助另一個客戶端C2的下載。分層共識協議,其中Filecoin子網可以在臨時或永久分區進行分區並繼續處理事務。使用SNARK / STARK增量區塊鏈快照。FileCoin-Ethereum合約接口和協議。使用編織(Braid?)進行區塊鏈歸檔和區塊鏈間衝壓。只有在區塊鏈解決衝突的時候才發布'時空證明」。正式證明實現了Filecoin DSN和新型存儲證明。8.2 開放式問題
作為一個整體,有一些公開的問題,其答案有可能可以大大改善網絡。儘管事實上,在正式啟動之前並不是必須必須解決的問題。
一個更好的原始的'複製證明「密封功能,理想情況下是O(n)解碼(不是O(nm)),可公開驗證,無需SNARK / STARK。「複製證明」功能的一個更好的原語,可以公開驗證和透明沒有SNARK / STARK。一個透明,可公開驗證的可檢索證明或其他存儲證明。在檢索市場中進行檢索的新策略(例如,基於概率支付,零知識條件支付)。「預期共識」更好的秘密Leader選舉,在每個周期,只有一位當選Leader。更好的可信賴的SNARK設置方案,允許增加擴展公共參數(可以運行MPC序列的方案,其中每個附加的MPC嚴格降低故障概率,並且每個MPC的輸出可用於系統)。8.3 證明和正式的驗證
由於證明和正式驗證的明確價值,我們計劃證明Filecoin網絡的許多屬性,並在未來幾個月和幾年內開發正式驗證的協議規範。幾個證明正在進行中還有些正在思考中。但注意,要證明Filecoin的許多屬性(如伸縮,離線)將是艱難的,長期的工作。
預期共識和變體的正確性證明。功率故障容錯正確性的證明,異步1/2不可能導致分叉。在通用組合框架中制定Filecoin DSN,描述Get,Put和Manage作為理想的功能,並證明我們的實現。自動自愈保證的正式模型和證明。正式驗證協議描述(例如TLA +或Verdi)。正式驗證實現(例如Verdi)。Filecoin激勵的遊戲理論分析。致謝
這項工作是Protocol Labs團隊中多個人的累積努力,如果沒有實驗室的合作者和顧問的幫助、評論和審查這是不可能完成的。Juan Benet在2014年寫了原始的Filecoin白皮書,為這項工作奠定了基礎。他和尼古拉·格雷科(Nicola Greco)開發了新的協議,並與提供了有用的貢獻、評論、審查意見的團隊其他人合作編寫了這份白皮書。特別是大衛,「大衛」Dalrymple提出了訂單範例和其他想法,Matt Zumwalt改進了在這篇論文中的結構,伊萬·米亞佐諾(Evan Miyazono)創建了插圖,並完成了這篇論文,在設計協議時,Jeromy Johnson提出了深刻的見解,Steven Allen提供了深刻的問題和清晰的說明。我們也感謝所有的合作者和顧問進行有用的對話;尤其是Andrew Miller和Eli Ben-Sasson。
英文版白皮書地址:
https://filecoin.io/filecoin.pd