解析平行鏈:實現過程、技術難點、未來發展方向等

買賣虛擬貨幣

平行鏈是如何從研究論文,變成程式碼實現的?

平行執行緒、巢狀中繼鏈等,未來將如何發展?

平行鏈可擴充套件性的極限在哪裡?

在 2021 Polkadot Decoded 的圓桌討論 “解析平行鏈:誰做了平行鏈?平行鏈是什麼?為什麼要有平行鏈?” 中,研究員 Jeff、程式碼實現者 Rob 和主持人 Joe 一起討論了一些對於平行鏈發展很重要的問題。PolkaWorld 在本文中總結了該圓桌主要內容。

Jeff:Jeff Burdges,W3F 密碼學研究員,做了很多平行鏈開發方面的研究

Rob:Robert Habermeier波卡聯合創始人/Parity 核心開發者,帶領實現團隊讓平行鏈能夠在實際中執行起來

Joe:Joe Petrowski,W3F 技術整合負責人,本場圓桌主持人

Joe:大約一年半以前,Jeff 帶領著一個團隊發表了一篇關於可用性和有效性的論文。在實現時,這個方案已經改變了很多。Jeff,你可以簡單談一談這篇論文的想法是如何產生的嗎?

Jeff:我們從以太坊生態那裡獲得了一些想法,比如使用糾刪碼的想法。但是圍繞這些想法的一些具體的東西,比如如何最佳化分片,都沒有正式確定下來。

在 2019 年末,我們決定要把這些想法正式化,提出更精確的方法。一般來說,我們設計複雜協議的方式是,我會寫下所有可能的設計選項,然後用排除法。

在 2020 年初,我寫下了這個設計,並且和大家討論,我們注意到了一些問題,我想出了一個叫 “Two-phase inclusion” 的技巧。也就是說在真正開始之前,平行鏈中繼鏈必須知道一個區塊,驗證人必須說這個區塊是有效的。

之後我們開始做糾刪碼,然後開始做真正的檢查它的工作。這樣做的好處之一是,因為有人在這個過程中投入了很多切身利益,從而會限制其可以嘗試的次數。從而做到如果你要攻擊它,那麼你也會毀掉你自己。它不是加密學安全性,而是分散式系統安全性,但是是合理的。

Joe:對於不熟悉分片的人來說剛剛說的可能有點抽象。其實就是,我們有一千個驗證人,當你想要包含這些平行鏈區塊中的一個時,你其實需要把資料塊發給所有驗證人,涉及到費用、複雜性、網路、儲存等,讓所有人都得處理這個訊息,所以你想要真正確保這些訊息是有效訊息,而且是有理由的。

Jeff:是的。糾刪碼其實挺老了,有不同型別的糾刪碼。不過一般來說當如果你用密碼學的話,一般是使用一些基於拉格朗日插值法或者裡德-所羅門碼之類的。原因是它的閾值很陡峭,所以我們可以從任何三分之一的碎片,來恢復全貌。

那我們怎麼做呢?我們有平行鏈區塊,叫做候選區塊,我們有 3f+1 個驗證人。那麼我們把這些東西糾刪碼為 3f+1 個碎片,你只要有了任何的 f+1 個碎片,就可以重構原始區塊。也就是說只要比 1/3 多一點點的碎片,你就可以重構原始區塊。

這是一種很古老的數學方法,實際上是讓我們的速度更快。根據我們目前的驗證人數量,我們必須找到一些比較新的論文,來進行最佳化。這就是我們今年做的事 —— 去大大最佳化糾刪碼。我們讓它的執行速度快了 400 倍,漸進地看其實更快。從 O(N²)演算法到了 O(log n) 演算法。這讓計算變得沒有那麼的有負擔。之後我們可能還會做得更好。這是我們最近的一個突破,當然瞭如果我們能在更早就解決的話就好了哈哈哈。

Joe:把這些研究變成程式碼,其實也是很大的挑戰。我們去年年中上線了 Rococo 測試網,Rob 可以談談這個協議的實現早期遇到的一些挑戰嗎?

Rob:我記得第一次跟平行鏈相關的程式碼提交是在 2018 年下半年,2019 年中有了我們所說的 V0 協議的初稿,在最初的幾年中,我們更多地投入在 BABE、GRANDPA 共識上,也就是出塊和區塊確認方面,那時候其實還沒有真的深入研究平行鏈的東西,因為平行鏈的部分更復雜,需要更多的開發時間。

從 2019 年中後期到 2020 年初左右,事情有了很大的進展,就像剛剛 Jeff 提到的,研究團隊開始真正把協議確定下來了,像是可用性確保了平行鏈區塊仍然存在,以便其他人可以檢查它們,來進行額外的檢查,從而確保安全性。

我覺得實現所有的這些研究其實非常困難。如果你在構建任何型別的系統,那麼你每向系統新增一點額外的複雜性,那麼建立該系統所需的時間就會指數級增加。這個規則也同樣適用於程式碼,因為一旦你達到了一定的程式碼量,其實真的很難再新增更多的東西,因為新的東西一定會擾亂、破壞之前做好的一些東西。

所以說有一個好的設計和規劃是很重要的,在我們迭代協議的時候,我們肯定會來來回回做一些研究。但是 2020 年的時候,我們把精力放在了《實現者指南》上,在那裡面進行迭代,而不是在程式碼裡。我可以和 Jeff 和 Al(Alistair) 通話,來討論論文草案裡的內容,然後寫一個頁面來說明 “我們會這樣寫程式碼”,而不是直接就去寫程式碼,我們用這種方法節省了幾周的時間,之後我可以把這些寫程式碼的工作分配給很多個開發者。

所以我覺得在建設這樣的系統的時候,有一個很好的計劃很重要。還有就是有一個模組化的系統,這樣的話你可以新增一個獨立部分的程式碼,你可以把這些程式碼整理成小的包,而不是一整個系統,因為一個人很難搞定一整個龐雜的系統。

Joe:說到目前的階段。現在 Kusama 已經上線了 Shell 空白鏈,Rococo 上已經有了 12 條平行鏈,但是 Kusama 的出塊時間在 12 秒左右,我們正在解決這個問題。為了將出塊時間提高到 6 秒,並且在 Kusama 上上線更多的鏈,短期內我們面臨的挑戰是什麼?

Rob:我覺得這一切本質上說都歸結到網路。Kusama 有 900 個驗證人,這些驗證人都是一些擁有 KSM 的人,在全球部署了節點來同步鏈。這件事很酷,這可能是全球最大的驗證人集之一。

但是當你向這個網路新增一些複雜性,比如新增平行鏈的時候,肯定就會增加很多負載。其實我們之前也在 Rococo 上用相同的引數測試過,但是在 Kusama 上的效果卻完全不同,因為在 Kusama 上驗證人節點在全球各地執行,所以最主要的挑戰就是讓網路程式碼儘可能平穩地執行。我們寫網路程式碼的時候,做了很多反作弊的機制,這種東西就是,如果沒人搗亂的時候你都注意不到它的存在,但是如果有人作惡,你就會發現這些防禦機制非常重要。

Jeff:沒錯。當我們新增越來越多的平行鏈的時候,會出現更多的計算負載,我們會看看到時候會如何發展,我們會如何在這個過程中成長。其實觀察這些操作會如何影響網路,也是一個漸進的學習過程。

Joe:這就是 Kusama 存在的意義,不是嗎?

Rob:沒錯。隨著平行鏈變多,驗證人的負載肯定會變多的。因為驗證人要驗證一個區塊,並且要把自己的幣抵押在區塊背後,其他的一些驗證人就會自我選擇去做檢查。平行鏈越多,你要做的計算就會越多,雖然計算量應該比平行鏈增加的數量慢,這也是為什麼這個網路是可擴充套件的,而不是像其他一些區塊鏈一樣不可擴充套件。但是作為驗證人,你可能還是需要在每秒內驗證幾十個區塊。

Joe:我們聊點更實際的吧,聊下接下來一年波卡和 Kusama 的計劃吧。我們有一個平行執行緒的規劃,其實現在在 UI 裡面已經能看到了,因為鏈在升級為平行鏈之前,都是以平行執行緒的形式註冊的。但是之後我們會讓平行執行緒更加的實用,你們可以談談平行執行緒的設計、實現,為了實現它還剩下哪些工作待完成嗎?

Rob:平行執行緒跟平行鏈差不多,主要區別在於它被排程的方式不同。我們有一個排程程式,如果你是平行鏈,那麼每個區塊都會被安排到;如果你是平行執行緒,那麼你需要進行拍賣,平行執行緒收集人可以互相競爭,來獲得寫入區塊的的權利。這會帶來收集方面的網路改變,當你是平行執行緒出塊人的時候,你需要讓驗證人知道你有區塊要提交。

所以總的來說挑戰有三點:排程程式、拍賣、網路方面的改變。

Jeff:其實當時做平行執行緒有種設計,但是最後我們選擇了有拍賣的這個。因為這個設計可以更好地防止作弊,但是對於平行執行緒來說,如果它們出於某些原因無法提交區塊的話,它們可能會丟失資源。所以我們還得再看看一些經濟方面的問題。

Joe:我們說過會把一些核心功能從中繼鏈中釋放出來,下放到平行鏈中,來進一步實現可擴充套件性,和實現巢狀中繼鏈(Nested relaychain)的想法。你們想談談為什麼要這樣做嗎?

Jeff:其實相比 “巢狀中繼鏈” 的說法,我更願意稱其為 “中繼鏈分片”,因為巢狀中繼鏈聽起來像是某一條鏈是主導地位。

從某種意義上說,中繼鏈的分片比我們現在已經做到的(平行鏈分片)還要簡單一些。不過我覺得可能會在超過 3000 個驗證人的時候來做這個事,我想告訴大家現在還不用急著去實現它。在這之前,我們希望能先讓中繼鏈的功能儘可能簡單,我覺得這樣對於開發者來說工作量是最小的。

Rob:目前來看,Staking 和選舉模組和一些治理功能其實是比較重的,會給中繼鏈帶來較大的負載。所有中繼鏈上發生的事,中繼鏈驗證人都需要去執行。而根據設計,發生在平行鏈上的事情只需要驗證人的子集來處理。所以這就是可擴充套件性的來源,把每個驗證人機器都需要執行的事變得儘可能少。

我覺得安全地去提煉出 Staking 和治理之類的東西其實挺難的。因為波卡有一些故障模式,比如一個機制是在進行爭議分析的時候的時候,鏈可能會被阻止出塊。你可能無法進行 Slash 交易,驗證人集無法更新交易等。這些都是很棘手的挑戰。

不過這個其實也不是很緊急。在這之前,我們應該會最佳化節點那邊,比如如何處理平行鏈和網路訊息,來獲得更高的擴充套件性,和執行更多的平行鏈。

Jeff:我覺得我們的目標應該是,雖然這個目標可能無法達到,但是目標應該是達到同等水平,讓每條平行鏈有一個驗證人。這個可能無法實現,但是當我們到達這個情況的時候,我們應該知道這個極限的存在,然後朝其他的方向努力。

Joe:剛剛你說 3000 個驗證人,意味著 3000 條平行鏈。Rob 你作為實現者,怎麼評價這個目標?

Rob:(笑)暫時還做不到,這是肯定的。我覺得程式碼經過一輪最佳化之後能執行 80-100 條平行鏈,我就很開心了,而且這對社羣來說也綽綽有餘了。

Jeff:是的。最終我們可能會到達一個點,使用者耗盡了,我們得開始說服更多的人來使用,所以我猜可能會有很多次這樣的爆發。

Rob:我想是的,我覺得這有點像波卡治理遇到的挑戰 —— 拍賣計劃的長尾效應是什麼?因為在某些時候,如果所有的技術進展順利,那麼我們可能有能力執行更多的平行鏈,甚至可能超出市場對平行鏈的需求。但是我們也不希望平行鏈的資源被一些垃圾專案填滿,佔用個兩年,當然之後社羣的發展趕上來了(平行鏈的位子又會不夠用),肯定會有這種來來回回的發展過程。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读