复盤:互聯網計算機節點如何快速趕上區塊鏈最新狀態


解釋複製如何使互聯網計算機區塊鏈上的節點恢復並趕上協議的最新狀態。

作者:Manu Drijvers,工程經理(共識)| DFINITY

互聯網計算機區塊鏈由數百個節點創建——最終在未來十年內擴展到​​數百萬個——位於世界各地運行互聯網計算機協議(ICP) 的獨立數據中心。這提供了一種安全可靠的方式來運行容器智能合約,以直接在開放的互聯網上構建dapp、DeFi 平台、NFT、網站和互聯網服務。互聯網計算機是第一個可擴展的區塊鏈,網絡可以通過添加新的子網(又名區塊鏈)來無限增加其容量,在這些子網中,成組的罐子一起運行。

在每個子網中,互聯網計算機確保容器安全可靠地運行:

安全地,意味著容器的狀態僅根據容器的規則而改變,並且不能被篡改以致容器的狀態與其代碼不一致。可靠地,這意味著子網中的容器不會突然停止運行。

網絡要求容器通過稱為複制的方法獲得這種安全性和可靠性。如果你深入了解子網,你會發現它由多個副本驅動。每個副本保存容器和進程的所有狀態,以及容器應該處理的所有消息。互聯網計算機規定,即使為子網供電的某些副本離線或什至是惡意的,子網仍會繼續處理容器的消息。更準確地說,只要這些副本中不到三分之一處於離線或惡意狀態(即,其中三分之二以上在線、可用並參與協議),子網就會繼續進行複制。該網絡使用共識協議,以便所有副本都通過區塊鏈處理相同的消息。

“互聯網計算機的子網旨在以更少的延遲處理更多的數據。”

互聯網計算機子網上的每個副本都有自己的區塊鏈視圖,每個副本都試圖通過八卦網絡交易所工件。但有時某些副本可能不可用——例如,在由副本1、2、3 和4 組成的四副本子網中,副本4 可能會暫時與Internet 斷開連接。由於Internet 計算機協議以容錯方式工作,因此即使副本4 處於離線狀態,子網上的其餘三個副本也應該能夠取得進展。如果另一個副本現在不可用,那麼這將不起作用,因為超過三分之一的副本將處於脫機狀態。如果副本四現在重新上線,它就能夠完全趕上協議的最新狀態。由於超過三分之二的節點可用,區塊鏈應繼續增長,網絡的子網應繼續處理消息。

https://medium.com/media/47311dd55599d01db36fd7dd6edca0e8/href

此外,網絡可能在某個時候想要向子網添加一個節點,也許是為了增加子網的容錯能力,但是這個節點在不知道子網狀態的情況下進入。再次,節點需要能夠完全趕上子網的最新狀態,以便它可以參與協議。每當子網上超過三分之二的節點在線且可用時,子網必須增長,以便子網上的容器以非常可靠的方式運行,即使為子網供電的某些節點離線或惡意。這樣做的結果是,無論落後多遠,誠實的副本必須始終能夠趕上最新狀態。

像比特幣和以太坊這樣的傳統區塊鏈通過永久存儲它們的塊來實現這一特性,並且它們的所有塊都需要能夠以加密貨幣方式驗證交易並參與區塊鏈。例如,目前估計比特幣區塊鏈的大小約為350 GB,而以太坊約為900 GB,因此完全同步它們是一項困難的工作。互聯網計算機的子網旨在以更少的延遲處理更多的數據,因此要求所有參與者都擁有完整的區塊鏈在網絡上運行是不可行的。這提出了一個挑戰:假設副本一遠遠落後於子網的其他副本,以至於所有其他子網副本都已經刪除了副本一正在尋找的區塊鏈部分?

另一個複雜因素是給定子網的節點會隨著時間而改變。由於我們的協議依賴於驗證來自子網節點的簽名,因此後面的副本很難知道要信任哪些簽名,因為它不知道哪些節點當前正在為子網供電。

因此,互聯網計算機實現了一種新的恢復方法,允許節點完全參與(並執行所有必需的加密貨幣驗證),而無需所有歷史塊,建立在鏈密鑰加密貨幣技術上。每個子網(即每個區塊鏈)都有一個不隨時間變化的固定公鑰。相應的密鑰實際上在子網的參與者之間共享。如果子網的成員發生變化,那麼秘密共享將安全地重新分配到新節點。我們子網的節點現在可以代表子網協作簽署工件。現在可以使用此固定子網密鑰驗證此類工件。

這將使驗證由子網簽名的對像變得非常容易,因為所需要的只是一個不會隨時間改變的固定公鑰。即使是非常落後且不知道子網當前節點的副本也可以驗證這樣的簽名。

為了解決恢復問題,互聯網電腦推出了一個特殊的神器,叫做追趕包(CUP)。這個CUP 允許副本安全地跳到更新的高度,跳過區塊鏈的一部分。它使用這個固定的子網密鑰進行簽名,這樣即使是後面的副本也可以始終驗證其真實性並趕上最新狀態。一個誠實的副本確保它始終有一個可用的CUP,這允許其他副本始終完全趕上協議的最新狀態。

剩下的問題是:這個CUP 究竟必須包含哪些內容,以便副本可以安全地跳過?為了回答這個問題,讓我們首先看看協議的細節。 Internet Computer區塊鏈對應該在子網上執行的消息進行排序,從而導致子網的複制狀態,其中包含容器的所有內存。使用先前複製的狀態和塊中的消息,每個副本都可以計算下一個複制狀態。為了讓副本趕上,它需要具有這些複製狀態之一,以便它可以自己計算下一個狀態。此外,塊是指這些複製狀態,並且根據此復制狀態的某些部分和區塊鏈中的後續塊檢查它們的有效性。例如,這允許互聯網計算機要求一條消息不會在區塊鏈中多次出現並且不會被多次處理。要進行此類檢查,副本不僅需要具有正確的複制狀態,還需要具有區塊鏈的某些部分,這是CUP 所需的另一個要素。

最後,還有隨機信標。在每個高度,都有一個看起來隨機的偽像,稱為隨機信標,這是一個不可預測的值,過去的隨機信標需要驗證下一個隨機信標。還需要隨機信標來驗證共識工件,因為隨機信標用於選擇共識協議中的角色。副本可能需要有一個隨機信標才能完全趕上。

這樣,CUP 就可以定義了。副本將定期創建CUP(例如,每200 個高度)。一旦達到高度200,副本將檢查是否該創建CUP。副本檢查它們是否有可用的隨機信標、該高度的塊以及復制狀態。此外,他們檢查區塊鍊是否已經發展到不再需要比高度200 更舊的狀態的地步。如果所有這些都得到滿足,那麼副本就準備好創建一個高度為200 的CUP。它們將復制的狀態、一個塊和一個隨機信標組合到一個單一的工件中,並使用該特殊的子網公鑰對其進行簽名。

現在這個神器應該足以讓其他副本趕上。請注意,複製狀態實際上太大而無法包含在CUP 中。因此,只包括複製狀態的散列。 (完整狀態可以通過一個單獨的狀態同步協議獲得,這超出了這篇博文的範圍。)每當副本成功創建這樣一個CUP,他們現在可以扔掉所有舊的工件,因為他們知道副本將被能夠趕上。如果一個遠遠落後於其他副本的副本通過網絡獲得CUP,因為它是在仍然已知的子網公鑰下以特殊方式簽名的,則可以驗證該工件的真實性並且其內容是可信的。

讓我們考慮副本如何使用CUP 來趕上區塊鏈的最新狀態。它從CUP 獲得一個隨機信標、一個塊和一個複制狀態,它信任這些狀態,因為它們是通過鏈密鑰加密貨幣術進行身份驗證的。這樣,副本就可以遵循隨機信標鏈,因為現在副本有一個前一個信標來驗證下一個信標。副本也有一個塊,以便它可以跟隨後續塊並驗證公證和終結。由於它有一個複制狀態和隨後的塊,副本可以計算下一個狀態。副本現在擁有最新的區塊鍊和隨機信標工件以及最新的複制狀態,這意味著它完全是最新的並且可以參與協議。

總之,互聯網計算機以可靠的方式運行容器,即使為子網供電的某些機器處於離線狀態。更準確地說,只要子網上有三分之二以上的副本是誠實和在線的,子網就應該取得進展,區塊鏈應該會增長。這樣做的結果是,無論落後多遠,每個誠實的副本都必須始終能夠趕上最新狀態。同時,區塊鏈可以變得非常大,因此副本最終必須刪除區塊鏈的所有部分。使用固定子網公鑰對稱為追趕包(CUP) 的特殊工件進行身份驗證。 CUP 包含副本安全地跳過區塊鏈的一部分並跳轉到最近的狀態以便它可以完全參與協議所需的一切。
____

在smartcontracts.org 開始構建,並在forum.dfinity.org 加入我們的開發者社區。

恢復:互聯網計算機節點如何快速趕上區塊鏈的最新狀態最初發表在媒體的互聯網計算機評測中,人們通過突出顯示和回應這個故事來繼續對話。

資訊來源:由0x資訊編譯自BITCOININSIDER。版權歸作者Anonymous所有,未經許可,不得轉載


0X簡體中文版:复盤:互聯網計算機節點如何快速趕上區塊鏈最新狀態

Total
0
Shares
Related Posts