Robert:平行鏈的未來規(guī)劃和 Rococo 的重構(gòu)
加入 PolkaWorld 社區(qū),共建 Web 3.0!

本文整理自 10 月 14 日波卡聯(lián)合創(chuàng)始人 Robert Habermeier 在「Sub0 Online 2021」Substrate 開發(fā)者大會上關(guān)于平行鏈的演講,由 PolkaWorld 翻譯和整理。

我今天其實(shí)就是要講講平行鏈,包括:怎樣實(shí)現(xiàn)、目前到什么階段了、未來有什么計劃。
我是 Polkadot 的創(chuàng)始人之一,從 2016 年就開始和 Gav 一起在做 Polkadot,我也是平行鏈代碼庫和實(shí)現(xiàn)的主程序員和團(tuán)隊負(fù)責(zé)人。所以我今天分享的內(nèi)容是來自第一線的。
平行鏈 V1 開發(fā)線路圖
首先我們來看看時間線,看看平行鏈?zhǔn)窃鯓影l(fā)展到今天的。

在 Polkadot 的開發(fā)周期初期我們花了大量的時間,去構(gòu)建 Substrate、BABE 和 GRANDPA 共識算法、lib p2p。其實(shí)平行鏈的開發(fā),需要提前完成這里面的很多基礎(chǔ)組件。所以我們在 5 月發(fā)表了《實(shí)現(xiàn)者指南》的第一版草案,這個指南其實(shí)就是一個巨大的實(shí)現(xiàn)文檔,它描述了我們的動機(jī),我們在寫這樣大量的代碼時的想法。因為當(dāng)你深入到一個很大的軟件開發(fā)項目時,你真的需要去思考所有的部分要怎樣組合在一起。這些部分不會自然地融合到一起,你不能今天寫點(diǎn)這塊,明天寫點(diǎn)那塊,你需要去思考每一塊要怎樣放在正確的位置。所以說,如果你要做某件事情,就像我們在做的事 —— 上線平行鏈一樣,那么類似《實(shí)現(xiàn)者指南》這樣的東西就至關(guān)重要,它可以確保代碼是經(jīng)得起推敲的,它是一個基本的基礎(chǔ)設(shè)施組件。
所以《實(shí)現(xiàn)者指南》是在 2020 年 5 月發(fā)表的,這時我們就鄭重地開始開始去構(gòu)建。它所做的一件事是,把平行鏈代碼分為了四個主要部分:
1、支持和可用性:驗證人從收集人那里找到區(qū)塊,然后說我覺得這個區(qū)塊不錯,把它包含到鏈上,然后保證檢查區(qū)塊所需的數(shù)據(jù)存在。
2、批準(zhǔn)檢查:安全性的一大部分就來自于這里,它是一種方式,一旦平行鏈區(qū)塊上鏈了,驗證人通過一種安全的方式隨機(jī)自我選擇,這種方式就會檢查是否他們應(yīng)該恢復(fù)這些數(shù)據(jù),然后自己檢查區(qū)塊。
3、爭議處理:也就是如果一個驗證人檢測到了某個東西是惡意的,那么它就需要去聯(lián)系其他的驗證人,讓他們可以參與和檢查。這種情況發(fā)生的概率極低,比如是 20 個小數(shù)點(diǎn)左右的概率,在批準(zhǔn)檢查階段沒有人發(fā)現(xiàn)這個區(qū)塊是惡意的,此時事態(tài)就會迅速升級。所以說這些組件其實(shí)都是環(huán)環(huán)相扣的,來保證平行鏈的安全性和可擴(kuò)展性。如果你去攻擊這條鏈的話,你不會失去幾百萬美金的概率只有十萬億分之一,而且在每一次你去攻擊時都是一樣的。
4、審計:在過去的幾個月中,我們雇了 SR Labs 去做代碼審計,去檢查實(shí)現(xiàn),試圖找出 Bug。他們進(jìn)行了獨(dú)立的評審,檢查了平行鏈的不同部分。現(xiàn)在我們也請他們做了其他一些部分代碼的審計。他們提出了幾個 Bug,不算太多,目前我們修復(fù)了 50% 左右,剩下的也有了解決方案。
這就引出了技術(shù)敏捷性的概念,也就是在 Rococo 和 Kusama 上進(jìn)行審計和重大部署之后,平行鏈已經(jīng)準(zhǔn)備好初始產(chǎn)品版本發(fā)布了,要注意的是,我們要修復(fù)顯著的審計問題,安排在 12 月之前完成。真實(shí)環(huán)境下的部署也非常重要,我們有一個 Rococo 測試網(wǎng),是一個多地區(qū)測試網(wǎng),Parity 運(yùn)行著它所有的節(jié)點(diǎn),這個網(wǎng)絡(luò)也沒有經(jīng)濟(jì)價值,所以它只是用來試一試技術(shù)是否可行,我們可以看到在幾百個節(jié)點(diǎn)的情況下這項技術(shù)有什么表現(xiàn)。
我們還會看到在 Kusama 上的真實(shí)環(huán)境測試,因為在進(jìn)入到真實(shí)環(huán)境之前,你永遠(yuǎn)不知道實(shí)際上會發(fā)生什么。我們可以試著在 Rococo 上盡可能地去中心化,但是直到進(jìn)入真實(shí)世界前,你其實(shí)也不知道真實(shí)的情況會如何。Kusama 上有 900 個驗證人,分布在全球,你根本不知道這些節(jié)點(diǎn)是誰在運(yùn)行,他們只是在自己買來或租來的電腦上運(yùn)行了一個程序而已。
敏捷 vs 成熟

那么,敏捷和成熟相比,意味著什么呢?
敏捷的意思就是,它能用,但是它還沒有到達(dá)最終形態(tài)。代碼的功能都完整了,該有的功能都有。也用高標(biāo)準(zhǔn)測試過了,在各種邊緣情況下都測試了,和各種模塊都結(jié)合地很好。還有安全專業(yè)機(jī)構(gòu)進(jìn)行了獨(dú)立的評審,我們還模擬了可能的攻擊,看看該系統(tǒng)是否可靠。實(shí)際上如果你現(xiàn)在去看 Rococo 測試網(wǎng)的話,你會發(fā)現(xiàn)有敵對的節(jié)點(diǎn)正在試圖去破壞網(wǎng)絡(luò),但是沒有成功。但是,如果說某個東西是敏捷的,它可能還是存在 Bug,可能還需要重大優(yōu)化。
相對的就是成熟的這一類代碼,當(dāng)某件事已經(jīng)演化到一個階段,經(jīng)過了幾年的使用后,它已經(jīng)是一個基礎(chǔ)性的、大負(fù)載的、可靠性很高的基礎(chǔ)設(shè)施,我們就會說它是成熟的。所以有很多優(yōu)化可以去做,它是經(jīng)過了實(shí)戰(zhàn)考驗的。比如說以太坊在 2016 年經(jīng)歷的上海攻擊,那時大家真的在努力地試著去摧毀以太坊網(wǎng)絡(luò)。當(dāng)現(xiàn)實(shí)世界中的某些東西被證明可以承受經(jīng)濟(jì)攻擊時,這是朝著成熟邁出的一大步。
代碼是穩(wěn)定的,更多地在維護(hù)代碼,而不是開發(fā)代碼。這意味著在這這時創(chuàng)新并沒有那么多了,因為它的基礎(chǔ)設(shè)施和增長更多地都是一些邊緣創(chuàng)新。
走向成熟的道路
那么,我們走向成熟的道路是什么?沿著這條道路前進(jìn)的一些步驟是什么?我將介紹一些主要的步驟。
我認(rèn)為其中的一些非常重要的即將發(fā)生的事情是上下文執(zhí)行、平行線程和一般的網(wǎng)絡(luò)優(yōu)化。所以我將深入聊聊這三件事。

如果你觀察過 Kusama 或 Rococo 網(wǎng)絡(luò),你會看到每 12 秒包含一個區(qū)塊。這不是出于協(xié)議的限制,而是實(shí)現(xiàn)的限制。所以上下文執(zhí)行就是為了從 12 秒出塊加速到 6 秒出塊。在我們目前 Rococo 和 Kusama 上的很短的區(qū)塊執(zhí)行時間中,又只有很少的時間是真正用于區(qū)塊的執(zhí)行的。
上下文執(zhí)行的想法是顯著增加區(qū)塊執(zhí)行時間,它基本上是關(guān)于提前準(zhǔn)備區(qū)塊,有點(diǎn)像是在鏈下進(jìn)一步構(gòu)建平行鏈,然后慢慢地把這些東西放到主中繼鏈上。而不是在平行鏈區(qū)塊馬上就要被包含到中繼鏈上時再去構(gòu)建這些區(qū)塊。這是我們已經(jīng)制定好的優(yōu)化方案,我們已經(jīng)為它制定了設(shè)計,它是接下來的優(yōu)先事項之一。
另一件即將發(fā)生的有趣事情是平行線程,它是建立在一個區(qū)塊又一個區(qū)塊的基礎(chǔ)上的平行鏈插槽的動態(tài)調(diào)度。這是什么意思呢?目前平行鏈?zhǔn)怯袑S玫膱?zhí)行時間的,這些時間通過拍賣來購買,可能是 6 個月、12 個月或 24 個月的時間專屬于我,我可以在任何我想使用系統(tǒng)的時候去執(zhí)行一個區(qū)塊。而平行線程更像是一種即用即付的模型,它和平行鏈非常相似,其實(shí)代碼實(shí)際上并沒有特別不同,它實(shí)際上只影響我們所說的支持和收集階段。對于我之前說到的一些階段,比如可用性、批準(zhǔn)檢查和爭議等,平行線程和平行鏈?zhǔn)且荒R粯拥摹?/p>
網(wǎng)絡(luò)優(yōu)化是一個比較大的部分。這是點(diǎn)對點(diǎn)網(wǎng)絡(luò),正如 Gav 在之前的演講中提到的一樣,點(diǎn)對點(diǎn)網(wǎng)絡(luò)是一個挑戰(zhàn),它非常困難,因為在客戶端服務(wù)器模型中,你必須標(biāo)記一些服務(wù)器,就能快速回復(fù)。但是當(dāng)你在做點(diǎn)對點(diǎn)網(wǎng)絡(luò)的時候,挑戰(zhàn)就是盡可能有效和快速地分發(fā)數(shù)據(jù),并且具有低冗余和高交付保證,其實(shí)很難做到這一點(diǎn)。我認(rèn)為在網(wǎng)絡(luò)優(yōu)化方面有很多馬上就要夠得到的成果,這將極大地提高實(shí)現(xiàn)的性能。
所以我覺得這些都是平行鏈方面在不久的將來可以關(guān)注的一些點(diǎn)。
重構(gòu) Rococo
接下來我想聊聊 Rococo 測試網(wǎng),包括這對社區(qū)意味著什么,大家可以怎樣參與進(jìn)來。

之前我提到了 Parity 在運(yùn)行所有的 Rococo 節(jié)點(diǎn),它的作用主要集中在內(nèi)部測試上,我們會運(yùn)行前沿代碼,快速修改,部署對抗性節(jié)點(diǎn)之類的。但這確實(shí)意味著當(dāng)我們在開發(fā)過程中發(fā)現(xiàn)了錯誤,我們偶爾會破壞這條鏈,這使得對于想在上面部署自己的平行鏈的團(tuán)隊來說,這條鏈變成了一個非常困難的部署環(huán)境。Substrate 開發(fā)者需要有一個地方來部署和測試跨鏈解決方案。隨著目前版本的 XCM 更加穩(wěn)定,大家已經(jīng)可以真正使用那些跨鏈創(chuàng)新了,那么一個測試環(huán)境就變得非常重要。
所以在這里我要向你隆重介紹 Rococo 改造計劃。

我們的想法是,Parity 會在 Rococo 測試網(wǎng)上保持向后兼容性,以確保它不會重新啟動。所以當(dāng)你注冊平行鏈的時候,不用像在 Kusama 和 Westend 里那樣再去更新你的節(jié)點(diǎn)或 runtime,這意味著你可以計劃在更長的時間內(nèi)使用 Rococo,并真正將其用作與其他團(tuán)隊合作的地方。
另一點(diǎn)是自動平行鏈插槽。我們構(gòu)建了一種調(diào)度程序,將 Rococo 上的時間分配給注冊使用它的團(tuán)隊,這樣他們就可以獲得長度為一周插槽。這些插槽會在可用性的基礎(chǔ)上自動且公平地分配給團(tuán)隊。不過我們特別會優(yōu)先考慮已在實(shí)時網(wǎng)絡(luò)上部署鏈的團(tuán)隊,也會優(yōu)先考慮加入了 Substrate Builder Program 的團(tuán)隊。
當(dāng)然我們也會非常注重社區(qū)。我們鼓勵在 Rococo 上進(jìn)行跨鏈通信和實(shí)驗,尤其是在更高層次上,不僅是部署平行鏈,還包括在平行鏈鏈之上部署一些東西,比如我們希望可以看到用戶界面或去中心化應(yīng)用程序開發(fā)者,可以去利用多條平行鏈,并且享受在這個測試網(wǎng)中進(jìn)行創(chuàng)造。而不僅僅是那些超級硬核的特別底層的開發(fā)者。
我在這列出了一個時間表,說明一些 Rococo 改造的計劃是什么樣的。

今天我宣布了我們打算改造 Rococo,我們還將很快發(fā)表一篇更長的博客文章來詳細(xì)描述。
然后就是技術(shù)方面的跟進(jìn),包括制定新的鏈規(guī)范,制定一些參數(shù),比如 Session 是多長時間,更換驗證人的頻率如何等,我們會把這些都自動化。
最后就是朝著 Rococo 的最終重啟進(jìn)發(fā),我們將不再把這條鏈用于內(nèi)部測試。目標(biāo)是在 11 月底完成這一步。
以上就是我的演講,謝謝!
歡迎學(xué)習(xí) Substrate:?
https://substrate.dev/
關(guān)注 Substrate 進(jìn)展:
https://github.com/paritytech/substrate
關(guān)注 Polkadot 進(jìn)展:
https://github.com/paritytech/polkadot

更多內(nèi)容:
給朋友和家人送一份 Polkadot 和 Kusama 禮物吧!
Kusama 開啟一系列連續(xù)不斷的平行鏈插槽 Auction!
掃碼關(guān)注公眾號,回復(fù) “1” 加入波卡群
關(guān)注 PolkaWorld
發(fā)現(xiàn)?Web 3.0 時代新機(jī)遇
點(diǎn)個 “在看” 再走吧!
