推薦:市場牛熊不定又遇上烏克蘭局勢,點擊此處加入PANews群組一起抱團取暖
原標題:潛力股公鏈DFINITY新版白皮書解讀| 連接Web3.0時代的底層技術是什麼
作者:TinTinLand
1
導語
2022 年2 月初,基於DFINITY 生態開發的首個隱私郵件DApp Dmail 獲得Amino Capital 戰略投資。據悉,Dmail能做到與傳統郵箱互發郵件,且相較於傳統郵箱,具有區塊鏈屬性的Dmail 還能實現信息的加密傳輸和郵箱名NFT化。這是對於Web3.0 時代的通訊軟件預備,以“數字身份”的形式作為去中心化網站和DApp 的入口。筆者想提出的問題是,Dmail 為什麼選擇Dfinity 呢?
相比於區塊鏈’半壁江山’的公鏈們,Dfinity 嶄露頭角的次數並不多。沒有DeFi 大火的時候展示一點火花,也沒有在“NFT”元年掙個席位。但是從上線後,類似Dmail 能讓人窺見Web3.0 具體實現樣貌一角的例子並不少見。
DFINITY 於2020 年7 月發布了開源版本短視頻社交軟件“CanCan”,我們可以簡單地將其對標Web2.0的抖音。 CanCan 基於DFINITY 的編程語言Motoko 打造,所有代碼數不到1000 行。這與抖音的、Facebook 的幾千萬行代碼相比,可以稱得上是令人驚嘆。同時CanCan 的代碼是開源的,產品的所有權不屬於任何中心化機構。同年10月1日,DFINITY公開了其治理系統和代幣經濟模型,項目估值一度達到95 億美元,排名躍然於前五。同年12 月月底,完成了從銅到汞五條網絡的里程碑演變。 DFINITY 基金會創始人兼首席科學家Dominic Williams 在「2020 FAT 價值時代高峰論壇暨頒獎盛典」上曾表示:互聯網計算機是區塊鏈的第三次偉大創新。
本文將解讀DFINITY 白皮書原文,從官方說明的最底層邏輯出發,看看DFINITY 如何能從技術出發,打破互聯網Big tech,讓各種Web2.0 軟件利用自治軟件和去中心化的治理實現開源商業的協同效應,從而真正實Web3.0;同時也想通過白皮書提到的架構來看DFINITY 所設想和構建的“世界計算機”系統的技術實現。無區塊鏈行業經驗的讀者閱讀本文時,可能會有閱讀門檻,但也歡迎將產生的問題評論在下方,也許會得到出於意料的答案。
2
概要
縱觀區塊鏈的發展歷史和目前進程,BTC 帶來了去中心化貨幣時代、ETH 代表了操作系統領域、Filecoin 代表了存儲,DFINITY 則代表了計算領域的革新和Web3.0 的落地實現。 Internet Computer (下文簡稱IC)是主網絡,是一個第一層協議,旨在開發一個去中心化的公共網絡,DFINITY 是開放式的虛擬區塊鏈計算機和技術,延伸了以太坊生態鏈到廣泛的商業應用場景中。本文將採用白皮書官方說法“Internet Computer”來稱呼目前傳播場景下常使用的“DFINITY”鏈。本部分主要說明一些IC 涉及的技術術語,及與其他公鏈相比技術和實現上的不同,或者說技術和功能上的閃光點。可以說IC 是對於可擴展性、去中心化和安全組合的一次全新嘗試。
2.1 共識協議
從共識協議來看待IC 和其他幾大公鏈,IC 採用了一個混合模型DAO 控製網絡(DAO-controlled network),即在擁有有許可協議的效率的同時,又能提供去中心化PoS 協議的許多好處。 Bitcoin,Ethereum 和Algorand 的共識協議基於區塊鏈,採用工作量證明(Proof of Work,PoW)或是權益證明機制(Proof of Stake,POS)。儘管這些協議是完全去中心化的,但是其效率相較於有許可的協議更低。
DAO 的運行機制為:每個子網運行一個有許可的共識協議,由一個DAO 決定哪些實體可以提供節點副本,配置網絡,提供公鑰基礎設施,並且控制節點副本部署的協議版本。 IC 的DAO 被稱為網絡神經系統(NNS),基於Pos 協議,即相關決策都由社區成員決定,社區成員的投票權由其在NNS 中質押的IC 原生治理代幣(ICP)數量決定。通過這個基於PoS協議創建的治理機制,可以創建新的子網並在現有子網中增加或者移除節點副本,也可以部署軟件更新並且可以對IC 進行其他調整。
從這個角度我們也能理解,為什麼DFINITY 稱IC 是一個交互複製狀態機(replicated state machines)的網絡,因為NNS 本身就是複制狀態機。和其他狀態機一樣運行在特定的子網上,其成員資格由上文提及的同一套基於PoS 的治理系統所決定。同時維護一個稱為註冊表的數據庫,記錄哪些節點副本屬於哪個子網,節點副本的公鑰等等數據。因此DAO 控製網絡作為去中心化的共識協議,讓IC 能獲得有效的共識但同時又因為DAO 的運行機制使得IC 也保留了去中心化的既有優勢。
IC 的共識協議同時還採用了公鑰加密技術,比如NNS 維護的註冊表將公鑰綁定至節點副本及子網從而形成一個整體,這被稱作為鏈鑰密碼學;對共識協議和執行複制狀態機的協議時,IC 對於通信模型也給出了設想:希望採用更為可行和穩健的異步模型(對於發送的任意消息,敵對方可以延遲其傳遞任意有限時間,因此對於傳遞消息沒有時間限制)來應對拜占庭故障。但目前來說,沒有已知的共識模型在異步模型下是真正可行的,在下文對IC 架構解讀中,本文會更加詳細說明針對這一現實情況IC 的技術處理方法。
2.2 鏈鑰密碼學
上文提到過IC 的共識協議也採用了公鑰加密技術—— 鏈鑰密碼學,組成鏈鑰密碼學有幾個主要部分。鏈鑰密碼學的第一個組成部分是閾值簽名:閾值簽名是一個成熟的加密技術,它允許子網擁有一個公共的驗證簽名密鑰,對應的簽名私鑰分成多份分配給子網中的節點副本,而分配保證作惡節點無法偽造任何簽名,而誠實節點擁有的私鑰片段可以允許子網生成符合IC 原則和協議的簽名。
這些閾值簽名的一個關鍵應用在於:一個子網的單獨輸出可以由另一個子網或是外部用戶進行驗證,驗證可以簡單地利用改子網(第一個子網)的公共驗證簽名密鑰來驗證電子簽名實現。
正如我們所看到的,這些閾值簽名在IC 中還有許多其他應用。一個應用於讓子網中的每個節點副本可以訪問無法預測的偽隨機數位(衍生於此類閾值簽名)。這是共識層使用的隨機信標和執行層使用的隨機磁帶的基礎。
為了安全地部署閾值簽名,IC 採用了創新性的分佈式密鑰生成(以下簡稱DKG)協議,來構建公共簽名驗證密鑰,並為每個節點副本提供對應簽名私鑰的一個片段,用於之前提及過的拜占庭故障和異步模型。
2.3 ICP
ICP 有以下功能:
NNS 質押,即促進網絡治理。
ICP 可以用於在NNS 中質押獲得投票權,從而參與控制IC 網絡的DAO。在NNS 中質押代幣並參與NNS 治理的用戶還會收到新鑄造的ICP 代幣作為投票獎勵。獎勵數量由NNS 制定和執行的政策所決定。
兌換Cycles,即作為生產動力。
ICP 用於支付IC 的使用費用。更具體來說,ICP 可以兌換成cycles(即銷毀),這些cycles 可以用於支付創建儲罐和儲罐所使用的資源(存儲,CPU和帶寬)費用。 ICP 兌換成cycle 的比例由NNS 決定。
支付節點提供者,即作為獎勵給予參與者。
ICP 用於支付節點提供者——這些實體擁有和運營著計算節點,來託管構成IC 的節點副本。 NNS 定期(當前每月一次)決定每個節點提供者應收到的新鑄造ICP 並發放至其賬戶。根據NNS 制定和執行的政策,支付ICP 的前提是節點提供者為IC 提供可靠的服務。
2.4 NNS 的執行
如前所述,IC 的複制狀態機可以執行任意的程序。 IC 中的基本計算單元叫做儲罐,它和進程的概念大致相同,包含了程序和其狀態(隨時間變化)。儲罐的程序用WebAssembly (以下簡稱Wasm)進行編碼,是一種基於堆棧的虛擬機的二機制指令格式。 Wasm 是一種開源標準,儘管它最初設計是為了實現網⻚端的高性能應用,但它也非常適合用於通用計算。
IC 提供了一個運行時環境,用於儲罐內執行Wasm 程序,並與其他儲罐和外部用戶通信(通過消息傳遞)。雖然原則上可以用任何能編譯成Wasm 的語言去編寫儲罐程序,但前文提及過的稱為Motoko 的語言,它與IC 的操作語義十分一致,支持在IC 中使用。
Motoko 是一種強類型,基於actor 2 的編程程序,內置支持正交持久性3 和異步消息傳遞。正交持久性意味著儲罐維護的內存會自動持久化(即不必寫入文件)。 Motoko 具有許多生產力和安全特性,包括自動內存管理,泛型,類型推斷,模式匹配,以及任意和固定精度的算術。
除了Motoko 之外,IC 還提供了一個消息接口定義語言和數據格式稱為Candid,用於固定類型、高級語言及跨語言互操作性。這使得任何兩個儲罐,即使是用不同的高級語言編寫,也可以輕鬆地相互通信。為了提供全面支持任何給定編程語言的儲罐開發,除了該語言的Wasm 編譯器外,還必須提供特定的運行時支持。當前除了Motoko 之外,IC 還全面支持了Rust 編程語言的儲罐開發。
由此可見,IC 支持更安全和更具跨語言操作性的編程語言,這也是提升開發者在IC 上創作更為有效和安全的重要因素之一。
2.5 NNS 的決策
在DFINITY 區塊鍊網絡中,BNS(區塊鏈神經系統)是網絡運行的治理系統,它是區塊鍊網絡中最重要的構建基塊之一,它可以自動進入系統並具有很高的權限。它承擔了超級節點的角色。任何人通過在所謂的神經元(neurons)中質押ICP 參與NNS 治理。神經元的持有者可以提議關於IC 應該如何改變的提案並投票,例如子網的拓撲結構或者協議該如何改變。神經元的投票權利是基於PoS 的。直觀地說,質押更多ICP 的神經元投票權利更大。但是,投票權也取決於神經元的其他特徵,例如願意質押代幣更⻓時間的神經元持有人,被賦予了更大的投票權。
每一個提案有確定的投票期限。如果投票期結束時,參與投票的簡單多數贊成該提案,並且贊成票數超過了給定的總投票權法定人數要求(現在是3%),則該提案被採納。否則,該提案被否決。除此之外,任何時候只要絕對多數(超過總投票一半)贊成或反對該提案,該提案相應被採納或否決。
用更通俗的語言來說,BNS 整個治理過程分為了四個階段:創建神經元、提案、投票以及執行。
創建神經元:按照上文提及的區塊鏈神經系統允許用戶使用ICP 來創建投票神經元。任何人都可以創建一個神經元,未來可能會有數以萬計的神經元被創建出來,它們將共同表達社區的意志,通過算法進行調解。
提案:任何運行神經元的用戶都可以進行BNS 上的提案,BNS 會對提案進行審核,審核標準是提案的合理性和其是否提供解決辦法。而提出提案的用戶是需要支付兩筆費用的:一是支付專業審核人員及參與投票神經元的酬勞,二是提案保證金,提案被採納後,BNS 即退還保證金至神經元,這個金額的設置能夠激勵高質量的提案。
投票:除了提案的用戶,其他用戶在投票階段也需要質押代幣至神經元並能夠選擇主動投票或者跟隨投票。有自主判斷能力的用戶可以選擇主動投票,而跟隨投票的場景適合一些用戶無法準確判斷提案,對於超出自身認知的提案,用戶可以選擇跟隨投票,選擇跟隨信賴的神經元投票。投票時間截止後,BNS 會蒐集神經網絡的結果,根據投票結果,並自動判斷提案通過與否。
執行:剛才有解讀IC共識的執行層,落實到BNS治理系統的具體執行又是怎麼樣呢?首先通過的提案執行方式分為被動執行和主動執行。被動執行的提案主要涉及DFINITY 上智能合約的參數改變,如神經元的質押參數。更新的提案參數會被動地寫入BNS 的智能合約數據庫中,後續執行時會直接生效。有一種特殊情況是如果提案超出BNS 智能合約的控制範圍,例如涉及BNS 規章層次,就會需要人為主動執行去覆蓋DFINITY “代碼即法律”的部分。舉例來說,修改系統代碼的漏洞或是凍結違反BNS 規章的智能合約或神經元。主動執行過程需要通過調用添加到以太坊虛擬機上的特殊操作碼來實現。這一步的操作更為人性和合理,而不是目前區塊鏈世界中的“代碼即法律”“代碼即一切”。從人性的角度覆蓋代碼無法決策的場景,能夠帶來更有效更智能的治理,某種程度上也真正觸達到“共識”的底層意圖。
3
架構解讀
IC 協議包括了四層(如下圖),分別是P2P 層、共識層、路由層和執行層。在這個部分,本文只對四層架構進行角色和作用的解讀,對整體架構的搭建進行分析。如對某一層具體的技術實現想有更詳細的了解,請參閱DFINITY 白皮書原文。
3.1 P2P 層
P2P 層作為互聯網計算機協議層中用於消息獲取和排序的層級,其任務是在子網的節點副本中傳遞協議消息。
協議消息包括兩種:用於實現共識的消息;外部用戶發起的輸入消息。
我們可以理解為P2P 層基本上提供的是一個“最大努力(best effort)”廣播通道,即如果一個誠實的節點副本廣播一條消息,這條消息最終會被子網中的所有城市節點所接收。
P2P 層的設計目標如下:
有限資源。所有的算法都在有限的資源(內存,帶寬,CPU)下運轉。
優先級。根據特定的屬性(例如類型,大小和輪次),不同的消息將按照不同的優先級進行排序。並且這些優先級的規則可能隨著時間將會改變。
高效。高吞吐量比低延遲更重要。高吞吐量也是DFINITY 相比其他公鏈從底層更為有效的原因。
抗DOS/SPAM。故障節點將不會影響誠實節點副本間的相互通信。
3.2 共識層
3.2.1 共識層概述
IC 共識層的任務是對輸入消息進行排序,以確保所有的節點副本按照相同的順序處理輸入消息。現在已有很多文獻中的協議是為了解決這一問題。 IC 採用了一種全新的共識協議,本文將用概括性的語言對其進行闡述。任何安全的共識協議都應當確保兩個屬性,大體上就是:
安全性: 所有的節點副本都事實上同意相同的輸入順序。
活性:所有的節點副本都應當逐一更新狀態。
IC 共識層的設計目標其實很好理解:當存在個別惡意節點時,性能會柔性下降。像許多的共識協議一樣,IC 共識協議是基於區塊鏈的。伴隨著協議的推進,以創世區塊為根節點的區塊樹將不斷生⻓。每一個非創世區塊都包含一個荷載(payload),由一系列輸入和父區塊的哈希組成。
誠實節點副本對這個區塊樹有一致的視⻆:儘管每個節點副本可能對這個區塊樹有不同的局部視⻆,但是所有的節點副本看到的都是這一相同的區塊樹。此外,伴隨著協議的推進,區塊樹中總會有一條最終確認區塊的路徑。同樣地,誠實節點副本對這一路徑有一致的視⻆:儘管每個節點副本可能對這條路徑有不同的局部視⻆,但是所有的節點副本看到的都是這一相同的路徑。沿著這條路徑的區塊的荷載中的輸入,是已經排序好的輸入並將由IC 的執行層進行處理。
共識協議依賴於電子簽名在節點副本中去驗證消息。為實現這一點,每一個節點副本都與簽名協議的一個公共驗證密鑰相關聯。而節點副本和公鑰之間的關聯性可以從NNS 維護的註冊表中獲取。這也符合上文所提及的鏈鑰密碼學在IC 中的作用和角色。
3.2.2 假設
在第二部分討論過,IC 提出假設:
一個子網包含n 個節點副本,和其中最多 f
故障節點副本可能表現出隨意、惡意(即拜占庭故障)的行為。我們假設通信為異步且不存在先驗對節點副本間消息延遲的限制,即上文所提的異步模型。這時消息傳遞的調度可能完全處於敵對狀態。在此弱通信假設下,IC 共識協議可以確保安全性。但是為確保活性,我們需要假設一定形態的部分同步,意味著網絡在較短的間隔中保持週期性的同步。在此同步間隔下,所有未遞交信息將在時間完成遞交,即固定的時間限制δ。時間限制δ不會被事先得知(協議會初始化合理的邊界值但動態的調節該值,且當時間限製過小時提高限制值)。無論網絡為異步或是部分同步,我們假設誠實節點副本發送給另一個節點副本的消息最終都會遞交。
3.2.3 協議概述
像許多的共識協議一樣,IC 共識協議是基於區塊鏈的。伴隨著協議的推進,以創世區塊(genesis block)為根節點的區塊樹(例見3.2.4)將不斷生⻓。每一個非創世區塊都包含一個荷載(payload),由一系列輸入和父區塊的哈希組成。誠實節點副本對這個區塊樹有一致的視⻆:儘管每個節點副本可能對這個區塊樹有不同的局部視⻆,但是所有的節點副本看到的都是這一相同的區塊樹。此外,伴隨著協議的推進,區塊樹中總會有一條最終確認區塊的路徑。同樣地,誠實節點副本對這一路徑有一致的視⻆;儘管每個節點副本可能對這條路徑有不同的局部視⻆,但是所有的節點副本看到的都是這一相同的路徑。沿著這條路徑的區塊的荷載中的輸入,已經排序好由執行層進行處理,具體的執行層有在前面的部分做解讀。
3.2.4 實際例證
下圖展示了一顆區塊樹。每一個區塊都被標記了塊高(30,31 ,32,···) 和區塊生成者的排位,該圖同時展示了區塊樹中的每一個區塊經過了公證,並以符號N標記。這意味著每一個區塊樹里的經公證的區塊至少得到了nf個不同節點副本的公證支持。可以發現,在指定的塊高可以存在超過一個經公證的區塊。舉例說明,在塊高32,我們可以看到2 個經公證的區塊,一個由排位為1的區塊生成者提議,而另一個由排位2 的提議,同樣的事情也是發生在塊高34。我們也可以看到塊高36 的區塊也明確的被最終確認,就如符號F所標識。這意味著nf 不同個節點副本支持過該區塊的最終確認,意味著這些節點副本(或至少這些中誠實節點副本)不支持其它任何區塊的公證。該區塊被灰色填充的所有祖先都被認為得到了隱性的最終確認。
3.2.5 公正性
公平是共識的基礎,因此在共識協議中另一個重要的屬性是公平性。不同於設定一個普遍的定義,我們簡單的觀察到生⻓不變性也暗示著一個有用的公平性屬性。回顧一下,活性不變性本質上意味著在任何一輪中,當主節點為誠實且網絡為同步時,則主節點提議的區塊也將被最終確認。在該情形發生的輪次中,誠實的主節點事實上確保它區塊的荷載中包含它所知道的所有輸入(取決於荷載大小的模塊限制)。因此,粗略的來說,任何傳播給足夠節點副本的輸入,都將大概率在合理時間內被包含入最終確認的區塊中。
3.3 路由層
如前文所述,IC 中的基本計算單元叫做儲罐。 IC提供了運行環境,使得儲罐中可以執行程序,並可以(通過消息)與其他儲罐和外部用戶通信。共識層將輸入打包進區塊的荷載中,並隨著區塊被最紅確認,相應的荷載會被傳遞給消息路由層並由執行環境處理。執行層將隨之更新復制狀態機中相應儲罐中的狀態,並將輸出交由消息路由層處理。
有必要區分兩種輸入類型:
入口消息:來自外部用戶的消息。
跨子網消息:來自其他子網的儲罐的消息。
我們同樣可以區分兩種輸出類型:
入口消息響應:對於入口消息的響應(可被外部用戶取回)。
跨子網消息:傳輸給其他子網儲罐的消息。
當收到來自共識的負載後,這些負載中的輸入會被置入不同的輸入隊列。對於一個子網下的每一個儲罐C,都存在多個輸入隊列:用於發給C 的入口消息,用於和C 通信的每一個別的儲罐C’,用於C 到C’ 的跨子網消息。
在每一輪中,執行層都會消耗這些隊列中的一些輸入,更新相應儲罐中的複制狀態,並將輸出置於不同的隊列中。對於一個子網下的每一個儲罐,都存在多個輸出隊列:對於每一個與通信的儲罐,都有一個用於C 到C’ 的跨子網消息的隊列。消息的路由層將取得消息隊列中的消息並置入子網-到-子網的數據流,以被跨子網傳輸協議處理,該協議的工作是將這些消息實際傳輸到其他子網。
除了這些輸出隊列外,同時存在一種入口消息的歷史數據結構。一旦一條入口消息已被儲罐處理,對該條入口消息的響應將被記錄在該數據結構中。此刻,提供該條入口消息的外部用戶將能夠獲取相關的響應。 (注意入口歷史並不保留所有入口消息的完整歷史)。
有兩個需要提出說明的點是,第一,節點副本的狀態包括儲罐的狀態以及“系統狀態”。 “系統狀態”包括上述提及的隊列, 數據流以及入口歷史的數據結構。因此,消息路由層和執行層同時參與更新和維護子網的副本狀態。此狀態應全部在完全確定性的原則下被更新,這樣所有的節點都會維護完全相同的狀態。
第二點需要注意的是,共識層前於於消息路由層以及執行層,也就是說傳入荷載之前,共識區塊鏈中的任何分叉都已經被解決了。事實上,共識層允許提前運行,並不需要和消息路由層保持完全一致的進度。
路由層的解釋和說明讓我們更清楚地了解到,共識協議是怎麼通過消息路由進行傳入和輸出的,同時又是怎麼和執行層產生連接,從而達到促進共識協議的協同和一致。
3.4 執行層
執行環境每次處理一條輸入,該輸入取自輸入隊列中的一個並被導向一個儲罐,取決於該條輸入以及儲罐的狀態,執行環境更新儲罐的狀態並可以額外添加消息至輸出隊列。並且更新入口歷史(可能連同此前入口消息的響應)。在給定輪次,執行環境將處理多條輸入。定時管理器(scheduler)會判斷哪些輸入將在指定輪次被何種順序下執行。我們這裡不深入討論過多scheduler 的細節,而是突出強調一些目標:
它必須是確定性的,即僅僅取決於給定數據;
它應當公平的在儲罐間分佈工作量(但是對吞吐而不是延遲進行優化)。
每輪的完成的工作數量使用cycles 為計量單位,且應當接近一些前置判定的數量。
另一個執行環境必須處理的任務是該情形,即當某子網的一個儲罐的生產跨子網消息的速度比其他子網能夠消耗的速度更快。針對該情況,我們實現了一種自我監管的機制用於給生產儲罐降速。這裡存在的很多需被運行環境處理的其他資源管理以及簿記任務,但是,全部的這些任務均須被確定性的處理。
4
鏈鑰密碼學
在概要中我們解釋了IC 的共識協議也採用了公鑰加密技術—— 鏈鑰密碼學,組成鏈鑰密碼學的一個重要部分是閾值簽名。事實上,鏈鑰密碼學包括一系列複雜的技術,都用於隨時間推移健壯和安全地維護基於區塊鏈的複制狀態機,統稱為鏈演進技術。每個子網在包含多輪(通常大約是幾百輪)的時期(Epoch)內運行。鏈演技術實現了許多按epoch 定期執行的基本維護工作:垃圾回收,快速轉發,子網成員變更,主動秘密轉發和協議升級。
對鏈演進技術的了解,也就是對於IC 共識協議安全性的技術實現的了解。鏈演進技術包含兩個基本組成部分:摘要塊(summary blocks)和追趕包(catch-up packages,以下簡稱CUPs)。
4.1 摘要塊
每個epoch 的第一個區塊是摘要塊。摘要塊包含特殊數據,用於管理不同閾值簽名方案的密鑰片段。其中有兩種閾值簽名方案:
閾值結構為f + 1/n 的方案中,每個epoch 生成新的簽名密鑰;
閾值結構為nf/n 的方案中,每個epoch 重新共享一次簽名密鑰。
閾值低的方案用於隨機信標和隨機磁帶,而閾值高的方案用於驗證子網的複制狀態。回想一下,DKG 協議要求,對於每個簽名密鑰,有一個dealing 的集合,而每個節點副本可以根據這組dealing,非交互式得獲取它的簽名密鑰片段。再回想一下,除了別的之外,NNS 還維護著決定子網成員的註冊表。註冊表(以及子網成員)會隨時間改變。因此,子網必須對在不同時間和不同目的下,對使用的註冊表版本達共識。這一信息也存儲在摘要塊中。
4.2 CUPs
講完了摘要塊,讓我們來看看追趕包,也就是CUPs。在闡述CUP 之前,我們首先需要指出隨機信標的一個細節:每一輪的隨機信標取決於前一輪的隨機信標。它不是CUP 的基本特性,但是影響了CUP 的設計。 CUP 是一種特殊的(不在區塊鏈上的)消息,擁有一個節點副本在不知道先前epoch 任何信息下,在epoch 的起始點工作時所需的一切。它包含如下的數據字段:
整個複制狀態的默克爾哈希樹的根(與章節1.6 中的每輪驗證的部分狀態不同)。
epoch 的摘要塊。
epoch 第一輪的隨機信標。
子網對上述字段的(n – f)/n 的閾值簽名。
為生成給定epoch 的CUP,節點副本必須等到該epoch 的摘要塊已經被最終確認,並且對應的每輪狀態經過驗證。如前所述,整個複制狀態必須經哈希函數處理為一個默克爾樹。儘管有很多技術用於加快這一過程,這個成本代價仍然非常大,這也是為什麼每個epoch 僅處理一次。因為CUP 僅包含這個默克爾樹的根,因此我們使用了一個狀態同步子協議,允許節點副本從對等節點中提取它所需要的任何狀態。同樣地,我們用了很多技術來加快這一過程,它的成本代價仍然很大。因為我們對CUP 使用了高閾值簽名,因此可以保證在任何epoch 只有一個有效的CUP,而且可以從很多對等節點中提取狀態。
4.3 鏈演進技術實現
垃圾回收:因為CUP 包含特定epoch 的信息,因此每個節點副本可以安全地清除該epoch 前所有已處理的輸入,以及對這些輸入排序的共識層消息。
快速轉發:如果一個子網中的節點副本大幅落後於其同步節點(因為其宕機或是網絡斷連很⻓時間),或是一個新的節點副本被添加入子網,他們可以通過快速轉發至最新epoch 的起始點,不需要運行共識協議並處理該點之前的所有輸入。該節點副本可以通過獲取最新CUP 做到。利用從CUP 中包含的摘要塊和隨機信標,以及來自其他節點副本的(還沒有被清除的)共識消息,該節點副本可以從相應epoch 的起始點開始,向前運行共識協議。該節點也可以使用狀態同步子協議來獲取對應epoch 開始時的複制狀態,這樣它也可以開始處理共識層產生的輸入。
下圖描繪了快速轉發。此處,我們假設需要一個需要追趕的節點副本處於epoch 起始點,(比方說) 塊高為101,有一個CUP。這個CUP 包含了塊高101 的複制狀態的默克爾樹的根,塊高101 的摘要塊和塊高101 的隨機信標。該節點會使用狀態同步子協議,從它的對等節點中獲取塊高101的所有復制狀態,並用CUP 中的默克爾樹來驗證此狀態。在獲取到該狀態後,節點副本可以參與到協議之中,從對等節點中獲取塊高102,103 等等的區塊(以及其他和共識相關的消息),並更新其複制狀態的副本。如果其對等節點已經確認了更高高度的區塊,該節點副本將盡快處理(以及公證和最終確認)這些從對等節點獲取的已最終確認區塊(以執行層所允許的最快速度)。
5
結語
同以太坊一樣,DFINITY 的願景也是打造“世界超級計算機”,通過前文對於其白皮書的部分解讀和技術說明。這個願景下的IC 是非常有機會去實現的。
我們從共識協議的混合模型DAO,從快速出塊、高吞吐量的技術創新,從BNS 神經元系統及其生態治理方案,都能看出IC 對實現其願景的技術革新和技術可行性。與目前以太坊代碼即法律不同的是,IC 代碼治理的基礎上加入了群眾智慧的要素,不以建立完美的代碼架構為目標,而是以系統能夠迅速調整規則為目標。這一點不僅具有技術創造,更閃耀著人性光輝。區塊鏈世界中,共識的建立、維護和修改不能僅僅是代碼化,其本質核心應該是人。以人為中心的群體之間才能達成有效且公平的共識,這也是區塊鏈行業的核心,是眾多去中心化Dapp 的吸引力所在。
本文對IC 白皮書的部分內容作出引用和解讀,原文中更加詳細地描述了NNS 的更多細節,共識層上子網的每輪認證狀態,入口消息的查詢調用和更新調用,鏈鑰密碼學中的分佈式密鑰分發、PVSS 方案、基礎協議和再共享協議等等。對於想要更為全面和細緻了解IC 底層技術的開發者來說,閱讀白皮書原文能夠有更詳細的解釋和說明。