1. 程式人生 > 實用技巧 >Polkadot 平行鏈線路圖出來了!

Polkadot 平行鏈線路圖出來了!

在這裡插入圖片描述

Crust 提供了 Web3 生態系統的去中心化儲存網路,支援包括 IPFS 在內的多種儲存層協議,並對應用層提供介面。Crust
的技術棧還能夠支援去中心化計算層。Crust 旨在構建一個重視資料隱私和所有權的分散式雲生態系統。

本文是平行鏈底層核心技術的路線圖 —— 內容關於需要哪些協議、API 和程式碼路徑才能完全展示一個自給自足和安全的平行鏈。本文不會涵蓋平行鏈工具包需要公開哪些 API 才能使用平行鏈功能 —— 而是僅僅介紹這些功能的實現方式,以及它們提供給驗證功能的底層 API(如果有的話)。

在這裡插入圖片描述

類別

我們將使用以下類別來描述功能:

Runtime:中繼鏈的 runtime 程式碼,用於指定共識關鍵狀態,並更新所有全節點必須維護或執行的狀態。

網路(Networking): 用於節點相互交流並在網路中傳輸資訊的協議。

節點(Node): 部分或所有鏈下節點必須維護或執行的狀態或更新。通常與網路元件互動,並引用 runtime 狀態。

子專案和功能:

本節包含了不同的子專案和構成這些子專案的功能。

基礎架構/API

對等集管理

類別:網路
分配給平行鏈的驗證者需要一種發現並連線到整理者的方法,以便獲得新鮮的平行鏈塊進行驗證。
整理者需要發現並連線到驗證者,以便提交平行鏈區塊。
漁民需要與驗證者和核對者交談,以獲取可用資料並分發報告。
有些連線是長期存在的,有些僅用於單個請求。

對等集管理

類別:網路
分配給平行鏈的驗證人需要一種發現並連線到收集人的方法,以便獲得新鮮的平行鏈區塊進行驗證。

收集人需要發現並連線到驗證人,以便提交平行鏈區塊。
釣魚人需要和驗證人和收集人交流,來獲取可用資料並分發報告。
有些連線是長期存在的,有些僅用於單個請求。

自定義 libp2p 子協議

波卡平行鏈涉及許多不同的網路協議。理想情況下,我們可以將每個任務作為單獨的未來任務產生,並根據需要來通過通道與其他協議或節點程式碼進行通訊。這需要在 Substrate 和 libp2p 中進行更改。

分配

拍賣

類別: Runtime
平行鏈的拍賣和註冊。此功能已經實現,並且遵循 Parachain Allocation — Research at W3F 文件。
平行鏈拍賣

類別: Runtime
平行執行緒(Parathreads)是即付即用的平行鏈。這包括一個鏈上機制,用於解決收集人的拍賣並確保他們生成一個區塊。

平行執行緒的節點側部分的作用,是讓收集人實際投放出價,並被配置為在何種條件下投放出價。
驗證人分配

類別: Runtime
將驗證人分配給平行鏈。驗證人僅在短時間內分配給平行鏈。可調整的引數包括分配給每個平行鏈的時間長度和網路知道驗證人分配的提前時間。

協議

見證迴圈

類別: 網路
一種黑箱網路元件,用於在任意給定鏈的驗證人之間迴圈傳送證明訊息(Candidate, Valid, Invalid),以建立可在其上包含區塊的 quorum。
可用性糾刪碼

類別:節點/網路
對於每個潛在的、被視為平行鏈的區塊,對區塊的 PoV 和傳出訊息執行擦除編碼。為中繼鏈區塊呼叫中繼鏈上的區塊數量,此平行鏈區塊被考慮包含在 n 中。擦除碼分為 n 個部分,其中任何 f + 1 都可以恢復(f 是允許的最大故障節點數 = ~ n / 3)。第 i 個驗證人儲存第 i 個編碼並將其提供給任何詢問者。
PoV 區塊獲取

類別:網路
一種黑箱網路元件,用於平行鏈上的驗證人或釣魚人,以獲取證明中雜湊所引用的 PoV 區塊,以進行驗證。當獲取 “當前” PoV 區塊(靠近鏈的開頭,或與當前正在構建的區塊有關)時,這應該很快。當獲取 “舊的” PoV 區塊時,應該有可能並且要藉助於從可用性擦除編碼中恢復。

平行執行緒拍賣投票

類別:節點/網路
配置收集人在平行執行緒拍賣中投票的方式和時間。
收集迴圈

類別:節點/網路
收集人節點的主要事件迴圈:
新的中繼鏈區塊 B
同步新的平行鏈頭 P w.r.t. B
建立 P 的新子區塊
提交給驗證人

跨鏈訊息傳遞

https://hackmd.io/ILoQltEISP697oMYe4HbrA?view https://github.com/paritytech/polkadot/issues/597
平行鏈路線圖中最大的子專案 —— 平行鏈之間如何傳送訊息。這涉及傳入訊息的狀態機排序、用於獲取這些訊息的協議以及用於持久儲存訊息的節點邏輯。

它的設計基於平行鏈之間由傳送者和接收者組成的單向通道概念。在每個中繼鏈區塊,每條平行鏈有機會在其控制的每個通道上傳送訊息,它控制了傳送部分的一半。它還將嘗試按順序在它控制的每個接收通道的一半上處理訊息:在塊高 “b” 傳送的訊息,必須先於在塊高 “b + 1” 傳送的訊息處理。對於在相同塊高發送的不同通道上的訊息,將按照一些明確定義的順序進行處理。

這意味著,對於最近處理的訊息在其接收的所有通道上的傳送高度,接收段的最大高度差為 1。接收段的最小已處理髮送高度叫作 “水印 (watermark)”。在水印之前或水印高度的所有通道上傳送到此段的所有訊息均已處理。
終結 CandidateReceipt 格式

類別:Runtime / 節點
CandidateReceipt 是對提交給 runtime 的 parablock 頭的包裝器。它包含對資料的加密承諾,這對於驗證或解釋 parablock 至關重要,包括見證資料和傳出訊息資料的雜湊。

CandidateReceipt 格式應根據上面提到的 XCMP 來終結 —— 最重要的是,它應更改為保留以加密方式提交到每個開放通道狀態的 bitfield 和 message_root 域。
終結 PovBlock 格式

類別:Runtime / 節點
PovBlock 或 Proof-of-Validity 區塊包含驗證 parablock 所需的所有資料。它將需要包含傳入的訊息佇列以及潛在的傳出訊息佇列。

CST 更新程式

類別:Runtime
基於中繼鏈區塊中提供的 CandidateReceipt 的通道狀態表(CST)的儲存定義和更新邏輯。
CST 准入證明的生成和檢查

類別:節點
中繼鏈的全節點在 CST 中生成專案證明的工具,輕客戶端或被裁剪的節點檢查這些證明的工具。
MQC 儲存和分發協議

類別:節點
每個通道的狀態都由訊息佇列鏈(MQC,Message Queue Chain)描述,該佇列是一個雜湊鏈,其中的連結由 “(M, b, H)” 定義:最近傳送的訊息、先前傳送的訊息所在的塊高度、以及先前連結的雜湊值。

sending 平行鏈的全節點有責任維護 MQC 的所有連結,直到幷包括 b 小於 receiving 平行鏈的水印的連結。

該 para 的完整節點將知道其通道的所有 MQC 頭,因為它們是通過執行該塊產生的。這將需要與 Cumulus 團隊(https://github.com/paritytech/cumulus)在 API 上進行協作。
我們將需要一個網路,平行鏈的收集人可以在該網路中發現並獲取從所有通道傳入的 MQC 的相關部分。
通道註冊者和經濟學

類別:Runtime
平行鏈通過存放一筆存款來開啟或關閉通道的 runtime 邏輯。平行執行緒可以開啟的通道數量將受到限制。

paras 用於 runtime 邏輯通過放下存款來開啟和關閉通道。parathread可以開啟的通道數量將受到限制。待關閉的通道應保持開啟狀態,直到接收者的水印達到關閉所要求的區塊高度為止。

釣魚/Slashing

有效性/可用性報告處理程式

類別:Runtime
在 Polkadot 中,惡意的平行鏈組可以強制包含無效或不可用的平行鏈區塊。釣魚人的工作是監測這些區塊並將其報告給 runtime。此項與報告處理程式有關。

關於可用性/有效性的 W3F 研究文章提供了爭議解決過程的整體視角:可用性和有效性 - W3F 研究。

未解決且需要採取的主要行為之一,是在爭端解決流程斷定出現錯誤時發生的 “回滾”。當我們將平行鏈區塊標記為無效或不可用時,我們需要將所有平行鏈回滾到此狀態之前的某個點。我們還需要回滾中繼鏈的狀態,因為可能已經有一條訊息從平行鏈傳送到中繼鏈,現在需要回滾。最簡單的方法是通過延遲向上訊息來回避該問題,但這將極大地影響平行鏈參與插槽拍賣、理事會投票等的使用者體驗。假設我們無法迴避這一點,我們將必須找到一種方法來回滾中繼鏈的指定狀態。

雙重投票 Slash 處理程式

類別:Runtime
在見證過程中,驗證人只能為給定的中繼鏈區塊提交一個“候選”訊息。如果在平行鏈區塊上釋出“候選”訊息,則不能在該平行鏈區塊上釋出 “有效” 或 “無效” 投票,因為 “候選” 訊息是隱性有效性投票。否則,在給定的平行鏈區塊上同時進行 “有效” 和 “無效” 投票是非法的。

Runtime 處理程式需要兩個相互衝突的投票作為引數,並需要對違反者進行 slash。
有效性/可用性釣魚

類別:節點

驗證者也可以根據 VRF 可用性和有效性 - W3F 研究自行選擇,並採用此程式碼路徑。驗證人和釣魚人將選擇平行鏈區塊進行重新驗證。在這些步驟中:
嘗試恢復 PoV 區塊,並退回到糾刪碼。如果不可用,則釋出報告。
嘗試驗證 PoV 區塊。如果無效,則釋出報告。
雙重投票釣魚

類別:節點
在見證過程中觀察到雙重投票的節點應向鏈提交報告以觸發 Slash。

階段

該路線圖分為多個階段,相對於上一個階段來說,每個階段代表另一組的交付成果或黑箱元件上的迭代。

階段 0: MVP

最初的階段 —— 這是無 slashing(完全安全)或跨鏈訊息傳遞的平行鏈。它根本上就是註冊和驗證正常執行的 PoC。
基礎架構/API:

自定義 libp2p 子協議
對等集管理
任務:

拍賣
平行執行緒拍賣
驗證人分配
協議:

證明流通(黑箱:八卦)
可用性糾刪碼(黑箱:八卦)
PoV 區塊獲取(黑箱:八卦)
收集迴圈
跨鏈訊息傳遞:

終結 CandidateReceipt 格式
階段 1: 釣魚和 Slashing

此階段標誌著平行鏈安全性的進步。一旦完成,平行鏈就是成熟的加密經濟學上安全的彙總基元。此階段還包括有關 XCMP 的實現工作,但還沒有完全啟用。
協議

可用性糾刪碼(黑箱:定向分發)
PoV 區塊獲取(黑箱:定向分發和獲取)
釣魚/Slashing

有效性/可用性報告處理程式
雙重投票 Slash 處理程式
有效性/可用性釣魚
雙重投票釣魚
跨鏈訊息傳遞:

終結 PoVBlock 格式。
階段 2: 訊息傳遞

此階段標誌著跨鏈訊息傳遞的交付。
包括 XCMP 部分剩下的幾乎所有內容。

關於 Crust Network

Crust 提供了 Web3 生態系統的去中心化儲存網路,支援包括 IPFS 在內的多種儲存層協議,並對應用層提供介面。Crust 的技術棧還能夠支援去中心化計算層。Crust 旨在構建一個重視資料隱私和所有權的分散式雲生態系統。

目前上線了公開測試網 Maxwell CC2,歡迎各位加入測試體驗。Crust Network 先後加入 Substrate Builders Program、Web3.0 Bootcamp,以及獲得 Web3 基金會 Grant 。

Crust 相關:
Crust 技術白皮書 v1.9.3 版
Crust Network 經濟白皮書 v.0.7
Crust 經濟白皮書第 1 期 · 概述
Crust 經濟白皮書第2期·參與方
Crust 經濟白皮書第 3 期·經濟模型
一文快速瞭解 Crust Network 分散式雲

官網:https://crust.network/
Twitter:@CrustNetwork
Medium:https://medium.com/@crustnetwork
GitHub:https://github.com/crustio
Telegram:https://t.me/CrustNetwork

在這裡插入圖片描述