Filecoin Spec 翻譯 —— 【1】概述(下)

IPFS星際聯盟發表於2020-03-21

原文連結:filecoin-project.github.io/specs/#intr…

本文由星際聯盟Boni Liu翻譯,轉載請註明出處。

星際聯盟提供對Filecoin Spec 的全文翻譯,便於Filecoin專案廣大中國參與者理解Filecoin的深層原理。文章將定期更新章節,請持續關注"IPFS星際聯盟"&"星際聯盟Filecoin"公眾號。

1.5 更改日誌 - 版本歷史

1.5.1 v1.1 - 2019-10-30 - c3f6a6dd -

鏈上交易

  • 儲存交易

  • 完整的儲存市場Actor邏輯:

    • 客戶和礦工的收支:押金,鎖定,費用和取款
    • 質押削減
  • 完整的StorageMinerActor邏輯:

    • sector狀態,狀態轉換,狀態核算,算力核算
    • 故障宣告 + 修復Sectors流程
    • 提交扇區流程
    • 提交選舉或SubmitSurprisePoSt流
      • 扇區驗證,故障,恢復和到期
    • OnMissedSurprisePost流
      • 故障扇區,掉電,到期等等
  • StoragePowerActor

    • 算力核算基於StoragePowerActor狀態的更改
    • 抵押品:存款,鎖定,提款
    • 削減質押
  • Interactive-Post

    • StorageMinerActor: 預提交扇區 和 提交扇區
  • Surprise-Post

    • 挑戰流程為 CronActor -> StoragePowerActor -> StorageMiner -
  • 虛擬機器

    • 從區塊鏈中提取VM系統
    • 地址
    • Actors
      • 程式碼和狀態的分離
    • 訊息
      • 方法呼叫表示
    • 執行時間
      • 縮小的介面
      • 安全狀態獲取,釋放,提交流程
      • 退出碼 - 完整的呼叫流程
      • 更安全的遞迴上下文構造
      • 錯誤級別和處理
      • 檢測和處理gas錯誤
    • 解釋程式
      • 申請訊息
      • {扣除,存款} -> 轉移 - 更安全
      • gas核算
    • VM系統參與者
      • InitActor基本流程,插入執行時
      • CronActor全流程,靜態登錄檔
    • AccountActor基本流程
  • 資料傳輸

    • 完整的資料傳輸流程
      • push, pull, 1-RTT pull
      • 協議,資料結構,介面
      • 圖表
  • 區塊鏈/鏈同步

    • 鏈同步協議描述的第一個版本
    • 包括協議狀態機描述
    • 網路載入程式–連線性和狀態
    • 漸進區塊驗證 - 漸進區塊傳播
  • 其他

    • 細則部分狀態指示燈
    • 變更日誌

1.5.2 v1.0 - 2019-10-07 - 583b1d06

  • 全面細則重組

  • 工具

    • 新增了構建系統以編譯工具
    • 新增了繪圖工具(dot, mermaid等)
    • 新增了附屬圖安裝
    • 新增了Orient以計算協議引數
  • 內容

    • filecoin節點
      • 型別 - 不同FileCoin節點型別的概述
      • 儲存庫 - 本地資料結構儲存
      • 網路介面 - 連線到libp2p
      • 時鐘 - 掛鐘
    • 檔案和資料
      • file - 資料的基本表示
      • piece - 表示儲存在filecoin中的資料
    • 區塊鏈
      • blocks - 基本的區塊鏈資料結構(blocks, tipset, chain等)
      • 儲存算力共識 - SPC的基本演算法和加密工件
      • StoragePowerActor 基礎
    • 代幣
      • 骨架部分
    • 儲存挖礦
      • 儲存礦工:控制和協調儲存挖礦的模組
      • 扇區:儲存單位,密封,加密工件等
      • 扇區索引:描述扇區數量和後設資料
      • 儲存證明:印章,posts等
    • 市場
      • 交易:儲存市場交易基礎
      • 儲存市場:StorageMarketActor基礎
    • Orient
      • 確定模型和區塊大小的orient模型
    • 圖書館
      • filcrypto-密封,PoRep,PoSt演算法
      • ipld - cids, ipldstores
      • libp2p - 主機/節點表示
      • ipfs - graphsync 和 bitswap - 多種格式
      • multihash,multiaddr
    • 圖表
      • 系統總覽
      • 完整的協議美人魚流

1.5.3 pre v1.0


1.6 系統分解

1.6.1 什麼是系統? 它們如何工作?

Filecoin將其功能解構並模組化為鬆散連線的系統。每個檢視重要的功能,通常用來實現一系列重要且緊密相關的目標。

例如,區塊鏈系統提供了諸如區塊,區塊集合、鏈之類的結構,並提供了諸如區塊同步,區塊廣播,區塊驗證,鏈選擇和鏈訪問之類的功能。 這與檔案,片段,片段準備和資料傳輸分開。 這些系統都是與市場分開,提供訂單,交易,市場可見性和交易結算。

1.6.1.1 為什麼系統解耦是有用的?

這種解耦對於以下方面很有用:

  • 實現邊界:可以只用一部分子系統來構建實現Filecoin。這對於實現多樣性特別有用:我們需要安全性關鍵系統(例如,區塊鏈)的許多實現,但不需要可以解構的系統的許多實現。
  • 執行解耦:系統耦使後,構建和執行將系統隔離到單獨程式甚至單獨物理計算機中的Filecoin節點變得更加容易。
  • 安全隔離:一些系統比其他系統需要更高的操作安全性。系統解耦使實現能夠滿足其安全性和功能性需求。一個很好的例子是將區塊鏈處理與資料傳輸分開。
  • 可伸縮性:系統和各種用例可能會為不同的操作者帶來不同的效能要求。系統解耦使得操作者更容易根據系統邊界來衡量他們的部署。

1.6.1.2 Filecoin節點不需要所有系統

Filecoin節點差異很大,並且不需要所有系統。大多數系統僅在部分用例中才需要。

例如,需要區塊鏈系統來同步鏈,參與安全共識,儲存挖掘和鏈驗證。 許多Filecoin節點不需要鏈,只需從其信任的節點中從最新StateTree中獲取內容即可執行其工作。 當然,這樣的節點:

注意:Filecoin不使用在比特幣和其他區塊鏈網路中廣泛使用的“完整節點”或“輕客戶端”術語。 在Filecoin中,這些術語定義不明確。 最好根據節點的功能來定義節點,因此也要根據它們所執行的系統來定義節點。 例如:

  • 鏈驗證節點:執行區塊鏈系統。可以同步和驗證鏈;無法挖掘或生產區塊。
  • 客戶端節點:執行區塊鏈。市場和資料傳輸系統;可以同步和驗證鏈;無法挖掘或生產區塊。
  • 檢索礦工節點:執行市場和資料傳輸系統;不需要鏈; 可以進行檢索交易(檢索提供方);可以傳送客戶端的資料並得到報酬。
  • 儲存礦工節點:執行區塊鏈,儲存市場,儲存挖掘系統。 可以同步和驗證鏈。 可以進行儲存交易(儲存提供方)。 可以將儲存的資料密封到扇區中。 可以獲得儲存共識算力。 能夠挖掘和生產區塊。

1.6.1.3 分離系統

我們如何確定一個功能是屬於哪個子系統?

在系統之間劃定界限是將緊密相關的功能與無關部分分開的藝術。 從某種意義上說,我們試圖將緊密整合的元件保持在同一系統中,並遠離其他無關的元件。 有時這很簡單,界限來自資料的結構或功能。 例如,我們可以很容易觀察到,客戶和礦工彼此協商交易與虛擬機器執行無關。

有時這很難,並且需要整理,新增或刪除抽象概念。 例如,StoragePowerActor和StorageMarketActor以前是單個Actor。 這導致整個StorageDeal製造,StorageMarket,整個市場與儲存採礦,扇區密封,PoSt生成等之間的功能耦合。 理順這兩組相關功能需要將一個參與者分成兩個。

1.6.1.4 在系統內分解

系統本身分解為較小的子單元。 這些有時稱為“子系統”,以避免與更大的一流系統混淆。 子系統本身可以進一步分解。 此處的命名沒有嚴格執行,這些細分與協議和實現工程方面的問題更多地相關,而不是與使用者功能有關。

1.6.2 實施系統

1.6.2.1 系統要求

為了使將功能與系統解耦更加容易,Filecoin協議假定了一組可用於所有系統的功能。此功能可以通過實現以多種方式來實現,並應將此處的指南作為建議(應當)。

所有的系統,如本文件中定義,要求如下:

  • 資料庫
    • 本地IpldStore。用於資料結構(小型結構化物件)的一定數量的持久本地儲存。系統期望使用IpldStore進行初始化,其中的儲存資料結構在崩潰中也會持續存在。
    • 使用者配置值。少量使用者可編輯的配置值。這些應該使終端使用者易於訪問,檢視和編輯。
    • 本地安全金鑰庫。用於生成和使用加密金鑰的工具,必須對Filecoin節點保密。 系統不能直接訪問金鑰,必須通過抽象(即KeyStore)來實現,該抽象提供了加密,解密,簽名,簽名驗證等功能。
    • 本地檔案儲存。某些檔案的持久的本地儲存(大位元組陣列)。 系統期望使用能儲存大檔案的FileStore進行初始化。某些系統(例如Markets)可能需要儲存和刪除大量較小的檔案(1MB-10GB)。其他系統(如儲存挖礦)可能需要儲存和刪除大量的大型檔案(1GB - 1TB)。
    • 網路。大多數系統需要訪問網路,才能連線到他們對應的Filecoin節點。 系統會使用libp2p.Node進行初始化,並可以在其上安裝自己的協議。
    • 時鐘。有些系統需要訪問當前的網路時間,而有些系統對浮動的容差較低。系統初始化會使用一個時鐘來得知網路時間。一些系統(如區塊鏈)需要很少的時鐘浮動,並且需要安全的時間。 為此,我們使用FilecoinNode資料結構,該資料結構會在初始化時傳遞給所有系統:
import repo "github.com/filecoin-project/specs/systems/filecoin_nodes/repository" 
import filestore "github.com/filecoin-project/specs/systems/filecoin_files/file" 
import clock "github.com/filecoin-project/specs/systems/filecoin_nodes/clock" 
import libp2p "github.com/filecoin-project/specs/libraries/libp2p" 
import message_pool "github.com/filecoin-project/specs/systems/filecoin_blockchain/message_pool" 
type FilecoinNode struct { 
    Node        libp2p.Node 
    Repository  repo.Repository 
    FileStore   filestore.FileStore 
    Clock       clock.UTCClock 
    
    MessagePool message_pool.MessagePoolSubsystem 
} 
複製程式碼
import ipld "github.com/filecoin-project/specs/libraries/ipld" 
import key_store "github.com/filecoin-project/specs/systems/filecoin_nodes/repository/key_store" import config "github.com/filecoin-project/specs/systems/filecoin_nodes/repository/config" 
type Repository struct { 
   Config     config.Config 
   KeyStore   key_store.KeyStore 
   ChainStore ipld.GraphStore 
   StateStore ipld.GraphStore 
} 
複製程式碼

1.6.2.2 系統限制

此外,系統必須遵守以下限制:

  • 隨機崩潰。一個Filecoin節點可能隨時崩潰。 當崩潰時,系統必須是安全且一致的。這主要是通過限制持久狀態的使用,通過Ipld資料結構持久化這種狀態,以及通過使用檢查狀態的初始化例程,以及糾正可能錯誤來實現的。

  • 隔離。系統必須通過定義明確的獨立介面進行通訊。 他們不得在共享記憶體空間上構建關鍵功能。(注意:為了提高效能,共享記憶體抽象化可用於為IpldStore,FileStore和libp2p提供算力,但是系統本身不應該需要它)。這不僅僅是操作上的問題;它還顯著的簡化了協議,並使之更易於理解,分析,除錯和更改。

  • 無直接訪問主機操作檔案系統或磁碟。系統無法直接訪問磁碟,而是通過FileStore和IpldStore抽象來進行。這將為最終端使用者提供高度的移動性和靈活性,尤其針對於儲存礦工和需儲存大量資料的客戶,這需要能夠簡單替換其Filecoin節點訪問本地儲存的方式。

  • 無直接訪問主機作業系統的網路堆疊或TCP / IP。系統無法直接訪問網路-它們通過libp2p庫進行訪問。不得有任何其他種類的網路接入。這為跨平臺和網路協議提供了高度的移動性,使Filecoin節點(及其所有關鍵系統)在多種設定下可以使用各種協議(例如,藍芽,LAN等)執行。

相關文章