本文整理自 10 月 14 日波卡聯合創始人 Robert Habermeier 在「Sub0 Online 2021」Substrate 開發者大會上關于平行鏈的演講,由 PolkaWorld 翻譯和整理。
我今天其實就是要講講平行鏈,包括:怎樣實現、目前到什么階段了、未來有什么計劃,
我是 Polkadot 的創始人之一,從 2016 年就開始和 Gav 一起在做 Polkadot,我也是平行鏈代碼庫和實現的主程式員和團隊負責人,所以我今天分享的內容是來自第一線的。
平行鏈 V1 開發線路圖
首先我們來看看時間線,看看平行鏈是怎樣發展到今天的。
在 Polkadot 的開發周期初期我們花了大量的時間,去構建 Substrate、BABE 和 GRANDPA 共識算法、lib p2p。其實平行鏈的開發,需要提前完成這里面的很多基礎組件,所以我們在 5 月發表了《實現者指南》的第一版草案,這個指南其實就是一個巨大的實現文檔,它描述了我們的動機,我們在寫這樣大量的代碼時的想法,因為當你深入到一個很大的軟體開發項目時,你真的需要去思考所有的部分要怎樣組合在一起。這些部分不會自然地融合到一起,你不能今天寫點這塊,明天寫點那塊,你需要去思考每一塊要怎樣放在正確的位置,所以說,如果你要做某件事情,就像我們在做的事 —— 上線平行鏈一樣,那么類似《實現者指南》這樣的東西就至關重要,它可以確保代碼是經得起推敲的,它是一個基本的基礎設施組件,
所以《實現者指南》是在 2020 年 5 月發表的,這時我們就鄭重地開始開始去構建。它所做的一件事是,把平行鏈代碼分為了四個主要部分:
1、支持和可用性:驗證人從收集人那里找到區塊,然后說我覺得這個區塊不錯,把它包含到鏈上,然后保證檢查區塊所需的數據存在。
2、批準檢查:安全性的一大部分就來自于這里,它是一種方式,一旦平行鏈區塊上鏈了,驗證人通過一種安全的方式隨機自我選擇,這種方式就會檢查是否他們應該恢復這些數據,然后自己檢查區塊。
3、爭議處理:也就是如果一個驗證人檢測到了某個東西是惡意的,那么它就需要去聯系其他的驗證人,讓他們可以參與和檢查。這種情況發生的概率極低,比如是 20 個小數點左右的概率,在批準檢查階段沒有人發現這個區塊是惡意的,此時事態就會迅速升級,所以說這些組件其實都是環環相扣的,來保證平行鏈的安全性和可擴展性。如果你去攻擊這條鏈的話,你不會失去幾百萬美金的概率只有十萬億分之一,而且在每一次你去攻擊時都是一樣的。
4、審計:在過去的幾個月中,我們雇了 SR Labs 去做代碼審計,去檢查實現,試圖找出 Bug,他們進行了獨立的評審,檢查了平行鏈的不同部分。現在我們也請他們做了其他一些部分代碼的審計。他們提出了幾個 Bug,不算太多,目前我們修復了 50% 左右,剩下的也有了解決方案,
這就引出了技術敏捷性的概念,也就是在 Rococo 和 Kusama 上進行審計和重大部署之后,平行鏈已經準備好初始產品版本發布了,要注意的是,我們要修復顯著的審計問題,安排在 12 月之前完成。真實環境下的部署也非常重要,我們有一個 Rococo 測試網,是一個多地區測試網,Parity 運行著它所有的節點,這個網路也沒有經濟價值,所以它只是用來試一試技術是否可行,我們可以看到在幾百個節點的情況下這項技術有什么表現,
我們還會看到在 Kusama 上的真實環境測試,因為在進入到真實環境之前,你永遠不知道實際上會發生什么。我們可以試著在 Rococo 上盡可能地去中心化,但是直到進入真實世界前,你其實也不知道真實的情況會如何。Kusama 上有 900 個驗證人,分布在全球,你根本不知道這些節點是誰在運行,他們只是在自己買來或租來的電腦上運行了一個程式而已,
敏捷 vs 成熟
那么,敏捷和成熟相比,意味著什么呢?
敏捷的意思就是,它能用,但是它還沒有到達最終形態。代碼的功能都完整了,該有的功能都有。也用高標準測試過了,在各種邊緣情況下都測試了,和各種模塊都結合地很好。還有安全專業機構進行了獨立的評審,我們還模擬了可能的攻擊,看看該系統是否可靠。實際上如果你現在去看 Rococo 測試網的話,你會發現有敵對的節點正在試圖去破壞網路,但是沒有成功,但是,如果說某個東西是敏捷的,它可能還是存在 Bug,可能還需要重大優化,
相對的就是成熟的這一類代碼,當某件事已經演化到一個階段,經過了幾年的使用后,它已經是一個基礎性的、大負載的、可靠性很高的基礎設施,我們就會說它是成熟的,所以有很多優化可以去做,它是經過了實戰考驗的,比如說以太坊在 2016 年經歷的上海攻擊,那時大家真的在努力地試著去摧毀以太坊網路。當現實世界中的某些東西被證明可以承受經濟攻擊時,這是朝著成熟邁出的一大步。
代碼是穩定的,更多地在維護代碼,而不是開發代碼。這意味著在這這時創新并沒有那么多了,因為它的基礎設施和增長更多地都是一些邊緣創新。
走向成熟的道路
那么,我們走向成熟的道路是什么?沿著這條道路前進的一些步驟是什么?我將介紹一些主要的步驟,
我認為其中的一些非常重要的即將發生的事情是上下文執行、平行線程和一般的網路優化。所以我將深入聊聊這三件事。
如果你觀察過 Kusama 或 Rococo 網路,你會看到每 12 秒包含一個區塊。這不是出于協議的限制,而是實現的限制,所以上下文執行就是為了從 12 秒出塊加速到 6 秒出塊。在我們目前 Rococo 和 Kusama 上的很短的區塊執行時間中,又只有很少的時間是真正用于區塊的執行的,
上下文執行的想法是顯著增加區塊執行時間,它基本上是關于提前準備區塊,有點像是在鏈下進一步構建平行鏈,然后慢慢地把這些東西放到主中繼鏈上,而不是在平行鏈區塊馬上就要被包含到中繼鏈上時再去構建這些區塊。這是我們已經制定好的優化方案,我們已經為它制定了設計,它是接下來的優先事項之一,
另一件即將發生的有趣事情是平行線程,它是建立在一個區塊又一個區塊的基礎上的平行鏈插槽的動態調度,這是什么意思呢?目前平行鏈是有專用的執行時間的,這些時間通過拍賣來購買,可能是 6 個月、12 個月或 24 個月的時間專屬于我,我可以在任何我想使用系統的時候去執行一個區塊。而平行線程更像是一種即用即付的模型,它和平行鏈非常相似,其實代碼實際上并沒有特別不同,它實際上只影響我們所說的支持和收集階段,對于我之前說到的一些階段,比如可用性、批準檢查和爭議等,平行線程和平行鏈是一模一樣的,
網路優化是一個比較大的部分。這是點對點網路,正如 Gav 在之前的演講中提到的一樣,點對點網路是一個挑戰,它非常困難,因為在客戶端服務器模型中,你必須標記一些服務器,就能快速回復。但是當你在做點對點網路的時候,挑戰就是盡可能有效和快速地分發數據,并且具有低冗余和高交付保證,其實很難做到這一點。我認為在網路優化方面有很多馬上就要夠得到的成果,這將極大地提高實現的性能,
所以我覺得這些都是平行鏈方面在不久的將來可以關注的一些點,
重構 Rococo
接下來我想聊聊 Rococo 測試網,包括這對社區意味著什么,大家可以怎樣參與進來。
之前我提到了 Parity 在運行所有的 Rococo 節點,它的作用主要集中在內部測試上,我們會運行前沿代碼,快速修改,部署對抗性節點之類的。但這確實意味著當我們在開發過程中發現了錯誤,我們偶爾會破壞這條鏈,這使得對于想在上面部署自己的平行鏈的團隊來說,這條鏈變成了一個非常困難的部署環境,Substrate 開發者需要有一個地方來部署和測試跨鏈解決方案。隨著目前版本的 XCM 更加穩定,大家已經可以真正使用那些跨鏈創新了,那么一個測試環境就變得非常重要。
所以在這里我要向你隆重介紹 Rococo 改造計劃,
我們的想法是,Parity 會在 Rococo 測試網上保持向后兼容性,以確保它不會重新啟動,所以當你注冊平行鏈的時候,不用像在 Kusama 和 Westend 里那樣再去更新你的節點或 runtime,這意味著你可以計劃在更長的時間內使用 Rococo,并真正將其用作與其他團隊合作的地方,
另一點是自動平行鏈插槽。我們構建了一種調度程式,將 Rococo 上的時間分配給注冊使用它的團隊,這樣他們就可以獲得長度為一周插槽。這些插槽會在可用性的基礎上自動且公平地分配給團隊。不過我們特別會優先考慮已在實時網路上部署鏈的團隊,也會優先考慮加入了 Substrate Builder Program 的團隊。
當然我們也會非常注重社區,我們鼓勵在 Rococo 上進行跨鏈通信和實驗,尤其是在更高層次上,不僅是部署平行鏈,還包括在平行鏈鏈之上部署一些東西,比如我們希望可以看到用戶界面或去中心化應用程式開發者,可以去利用多條平行鏈,并且享受在這個測試網中進行創造,而不僅僅是那些超級硬核的特別底層的開發者。
我在這列出了一個時間表,說明一些 Rococo 改造的計劃是什么樣的,
今天我宣布了我們打算改造 Rococo,我們還將很快發表一篇更長的部落格文章來詳細描述,
然后就是技術方面的跟進,包括制定新的鏈規范,制定一些參數,比如 Session 是多長時間,更換驗證人的頻率如何等,我們會把這些都自動化。
最后就是朝著 Rococo 的最終重啟進發,我們將不再把這條鏈用于內部測試。目標是在 11 月底完成這一步。
以上就是我的演講,謝謝!