技術乾貨 | Libra 技術解讀,詳解Libra共識協議!

買賣虛擬貨幣


01  libra 區塊鏈簡介


libra 區塊鏈的目標是成為金融服務的基礎,包括打造一種新的全球支付系統,滿足數十 十億人的日常金融需求。透過對現有區塊鏈解決方案的評估, libra 決定基於下列三項要求構 建一個新的區塊鏈:


  1. 能夠擴充套件到數十億帳戶,這要求區塊鏈具有極高的交易吞吐量和低延遲等特點,並擁 有一個高效且高容量的儲存系統。

  2. 高度安全可靠,可保障資金和金融資料的安全。

  3. 靈活多變,為未來金融服務創新提供動力。


libra 區塊鏈就是為了了全面滿足這些要求,並從現有專案和研究中獲得的經驗教訓為基礎。libra 區塊鏈的三項核心決策:


  • 設計和使用 move 程式語言。

  • 使用拜占庭容錯 (bft) 共識機制。

  • 迭代改善已廣泛採用的區塊鏈資料結構


02 設計和使用 move 程式語言


“move”是一種新的程式語言, 用於在 libra 區塊鏈中實現自定義交易邏輯和“智慧 合約”。由於 libra 協會的目標是有朝一日為數十億人服務,因此 move 語言的設計首先考慮 到安全性和可靠性。libra 開發團隊從以往區塊鏈平臺中發生的與智慧合約相關的安全事件 中吸取經驗教訓, 從而創造的一種新的智慧合約程式語言 move。


move 從本質上令人更加 輕鬆地編寫符合作者意圖的程式碼,從而降低了出現意外漏洞或安全事件的風險。具體而 言,move 從設計上可防止數字資產被複制。它使得將數字資產限制為與真實資產具有相同屬性的“資源型別”成為現實:每個資源只有唯一的所有者, 資源只能花費一次,並限制建立新資 源。


move 語言還便於自動驗證交易是否滿足特定屬性。例如,僅更改付款人和收款人帳戶 餘額的付款交易。透過優先實現這些特性,move 可幫助保持 libra 區塊鏈的安全性。move  允許輕鬆和安全地定義 libra 網路的核心元素,例如支付傳輸和驗證節點的管理。最後,move  是將合規機制(例如促進旅行規則合規和協議級制裁篩選的機制)構建到 libra 網路中的一種 方式。


libra 協會致力於對智慧合約實施適當的審查和風險控制。首先,只有協會批准和釋出 的智慧合約才能與 libra 支付系統直接互動。隨著時間的推移,協會將探索適當的控制措施, 以允許第三方方釋出智慧合約。


03  使用拜占庭容錯 (bft) 共識機制


libra 區塊鏈採用了基於 librabft 共識協議的 bft 機制,來實現所有驗證者節點就將 要執行的交易及其執行的順序達成一致。這種機制實現了三個重要目標:


  • 首先,它可以在網路中建立信任,因為即使某些驗證者節點(最多三分之一的網路)被破 壞或發生故障,bft 共識協議的設計也能夠確保網路正常執行。

  • 第二,與其他一些區塊鏈中使用的“工作量證明”機制相比,這類共識協議還可實現高 交易處理量、低延遲和更高能效的共識方法。

  • 第三,librabft 協議有助於清楚地描述交易的最終性,因此當參與者看到來自足夠數量 驗證者的交易確認時,他們可以確保交易已經完成。



bft 的安全性取決於驗證者的質量,因此協會將對潛在驗證者進行盡職調查。libra 網路的設 計以安全第一為原則,並考慮到了複雜的網路和關鍵基礎設施攻擊。


該網路的結構是為了加 強驗者執行軟體的保證,包括利用關鍵程式碼分離等技術、測試共識演算法的創新方法以及對依 賴關係的謹慎管理。最後,libra 網路將定義在出現嚴重漏洞或需要升級時重新配置 libra 區 塊鏈的策略及過程。


除了在這些情況下確保系統的安全恢復之外,這種準備將阻止攻擊,因為 攻擊者將知道他們的行為可以被反擊。


04 迭代改善已廣泛採用的區塊鏈資料結構


為了保障所儲存的交易資料的安全,libra 區塊鏈中的資料會受到默克爾樹(merkle  tree)的保護,它是一種已在其他區塊鏈中被廣泛使用的資料結構,可以偵測到現有資料的任何 變化。與以往將區塊鏈視為交易區塊集合的區塊鏈專案不同,libra 區塊鏈是一種單一的資料結構,其可?期記錄交易歷史和狀態。這種實現方式簡化了訪問區塊鏈的應用程式的工作量, 允許它們從任何時間點讀取任何資料,並使用統一框架驗證該資料的完整性。


上述設計決策的一個結果是,libra 區塊鏈將提供公共可驗證性,這意味著任何人(驗證 者、libra 網路、虛擬資產服務提供商(vasp)、執法部門或任何第三方)都可以稽覈所有操作 的準確性。交易將以加密方式簽名,以便即使所有驗證者都被破壞,也不能接受來自具有安全 簽名金鑰的偽造交易。該設計與硬體金鑰管理和高價值金鑰的離線儲存相容。


上述設計決策的另一個結果是,libra 區塊鏈將支援一種隱私方方法,該方法將考慮網路 上參與者的多樣性。協會會監督 libra 區塊鏈協議和網路的發展,並在考慮適用的監管要求的 同時,不斷評估新技術以增強區塊鏈上的隱私合規性。


05  librabft 詳解


5.1 概述


libra 的共識機制採用的是 librabft 共識,是一個為 libra 設計的健壯、高效的狀態 複製系統。它基於一種新型的 bft 共識演算法,hotstuff(bft consensus in lens of blockchain),在擴充套件性和一致性上達到了較高的水平。librabft 在 hotstuff 的基礎上引 入顯示活躍度的機制並提供了具體的延時分析。


librabft 在 3f+1 個驗證節點之間收集投票, 這些驗證者可能是誠實的節點也可能是拜占庭節點。在網路中有 2f+1 個誠實節點的前提下, libra 能夠抵禦 f 個驗證節點的雙花攻擊和分叉攻擊。


librabft 在一個有全域性統一時間 (gst),並且網路最大延時(δt)可控的 partial synchrony 的網路中是有效的。並且, librabft 在所有驗證節點都重啟的情況下,也能夠保證網路的一致性。


為了能夠更好地理解 librabft,我們回顧一下 pbft 和 hotstuff 共識協議。


5.2 pbft


原始的拜占庭容錯系統由於需要展示其理論上的可行性而缺乏實用性,另外需要額外 的時鐘同步機制支援,演算法的複雜度也是隨節點增加而指數級增加。castro and liskov 在 1999 年提出實用拜占庭容錯系統(practical byzantine fault tolerance,pbft),降低了 拜占庭協議的執行復雜度,從指數級別降低到多項式級別(polynomial),使拜占庭協議 在分散式系統中應用成為可能。


pbft 是一類狀態機拜占庭系統,要求整個系統共同維護一個狀態,所有節點採取的 行動一致。為此,需要執行三類基本協議,包括一致性協議、檢查點協議和檢視更換協議。檢視轉換協議保證共識協議的活性(liveness)。當主節點出故障時能保證共識能繼續進行。pbft 的檢視轉換協議是非常複雜的,涉及到很多訊息的重傳。hotstuff 的最重要的改進, 主要是針對檢視更換的協議。



 5.3 hotstuff


hotstuff 的基本假設是系統有固定的節點數 n = 3f+1,其中 f 是系統能容忍的最大拜 佔庭節點數。系統通訊是點對點的認證和可靠通訊。網路通訊的假設是半同步,也就是說, 網路有一個知道的延遲 d,以及一個不知道的全網穩定時間(global stabilization time, 簡稱 gst),當 gst 過後,任意兩個節點之間的通訊都將在 d 時間內完成。hotstuff 能總 保證正確性(safety),在 gst 後的訊息時延在一定限度(d)內能保證活性 (liveness)。


hotstuff 採用門限簽名機制,門限設定是(k, n)。n 個節點中所有的節點共用一個 公鑰,但每一個節點有自己的私鑰。每個節點用自己的私鑰簽名訊息 m,叫部分簽名訊息, 多個節點的部分簽名訊息可以用來生成一個聯合簽名訊息,當至少有 k = 2f+1 個節點提供部 分簽名訊息時,其它任何一個節點能用公鑰驗證該聯合簽名訊息。其中 f 是系統能容忍的拜 佔庭節點總數,n = 3f+1。


hotstuff 論文中提出一個“認證複雜度”的概念。認證複雜度簡單來說,統計協議交 互時通訊的認證訊息數,也就是部分簽名或聯合簽名訊息的個數。


hotstuff 兩個重要的優點


  • 一個是 linearity,指的是通訊的複雜程度和節點數成線性關係;

  • 另一個是 responsiveness,指的是當網路通訊成為同步的時候,hotstuff 能產生 正確的 leader 來推動協議在網路延遲的實際值內而非最大值達到共識。


hotstuff 在原先諸多的 bft 共識協議中提升了效率,降低了複雜度。基於這些特性, hotstuff 適合於構建大規模的狀態複製服務。因此,不難看出,libra 從眾多的區塊鏈共識 演算法中挑選 hotstuff,看中的是 hotstuff 的效率、線性的擴充套件性,以及拜占庭容錯的安全 性。


這也體現了 libra 的平衡術 – 在去中心、安全、擴充套件性這個棘手的區塊鏈三難問題上, 巧妙的選擇一個平衡點。


5.4 librabft


嚴格說來,librabft 是基於 hotstuff 的一個變種,叫鏈式 hotstuff(chained hotstuff)。鏈式 hotstuff 是在基本 hotstuff(basic hotstuff)上引入流水線概念,進一 步提升效率的一個改進共識協議。librabft 最初會選擇一些在不同地理上分佈的創始成員做共識節點,以後逐漸的,共識節點會對外開放,並基於 libra 穩定幣的多少來選擇共識節點, 也就是轉變成 pos 機制。


librabft 的共識流程是分為不同輪次(rounds),每一輪中一個 leader 主節點被選 出。主節點會提議一個區塊,裡面包括多個交易。該區塊將廣播給其它共識節點。其它共識 節點會驗證區塊裡的交易,並對其投票。主節點收到大多數(超過 2f+1,f 是系統中能容忍 的拜占庭節點數)節點的投票後,主節點把確認訊息發給所有共識節點確認。如果主節點沒 收到大多數投票,或者主節點出現故障,副本共識節點的定時將超時,副本節點會發起新的 一輪提議。


librabft 在 hotstuff 基礎上的改進主要在於提供一個詳細的參與同步輪次的 pacemaker 設計和實現。並提供對實際交易確認的活性分析。librabft 提供對共識節點投 票權力的重配置機制。同時它給出了對提議節點和投票節點激勵的機制。白皮書給出瞭如何 檢測投票節點破壞正確性的行為,為今後在協議中加入懲罰機制打下基礎。同時白皮書也詳 細討論如何做同步,使得投票節點能同步它們的狀態。librabft 白皮書採用 rust 語言來描 述協議。


在 librabft 中,為了更好地支援 libra 生態系統的目標,librabft 以多種方式擴充套件 和調整了核心 hotstuff 協議和實現。重要的是,librabft 重新定義了安全條件,並提供了 安全、存活度和更高響應度的擴充套件證明。librabft 還實現了一些附加功能。


首先,透過讓 驗證器對塊的結果狀態(而不僅僅是交易序列)進行集體簽名,librabft 使協議更能抵抗非確 定性錯誤。還允許客戶端使用法定人數證書來驗證讀取的資料庫。


其次,librabft 設計了 一個發出明確超時的起搏器,驗證器依靠法定人數來進入下一輪 - 不需要同步時鐘。


第三, librabft 打算設計一個不可預測的領導者選舉機制,其中一輪的領導者由最新提交的塊的 提議者使用可驗證的隨機函式 vrf 確定。這種機制限制了攻擊者可以針對領導者發起有效 拒絕服務攻擊的時間視窗。


第四,librabft 使用聚合簽名來保留簽署仲裁證書的驗證者的 身份。這使我們能夠為有助於仲裁證書的驗證人提供激勵,聚合簽名也不需要複雜的 金鑰 閾值設定。


5.5 實現細節


librabft 共識元件最主要的是實現了 actor 程式模型,它使用訊息傳遞在不同的子 元件之間進行通訊,其中 tokio 框架用作任務執行時。actor 模型的主要例外是(因為它是由 幾個子元件並行訪問的)是共識資料結構 blockstore,它管理塊、執行、仲裁證書和其他共 享資料結構。共識元件中的主要子元件是:


  • txnmanager 是記憶體池元件的介面,支援拉取交易以及刪除已提交的交易。提議者使 用來自記憶體池中的按需拉取交易來形成提議塊。

  • statecomputer 是訪問執行元件的介面。它可以執行塊,提交塊,並可以同步狀態。

  • blockstore 維護提議塊樹,塊執行,投票,仲裁證書和持久儲存。它負責維護這些 資料結構組合的一致性,並且可以由其他子元件同時訪問。

  • eventprocessor 負責處理各個事件 (例如, process_new_round, process_proposal, process_vote). 它公開每個事件型別的非同步處理函式和驅動協議。

  • pacemaker 負責共識協議的活躍性。它由於超時證書或仲裁證書而改變輪次,並在 它是當前輪次的提議者時提出阻止。

  • safetyrules 負責共識協議的安全性。它處理仲裁證書和分類資訊以瞭解新的提交, 並保證遵循兩個投票規則 — 即使在重啟的情況下(因為所有安全資料都持久儲存到 本地儲存)。


所有共識訊息都由其建立者簽名,並由其接收者驗證。訊息驗證發生在離網路層最近的地方, 以避免無效或不必要的資料進入協商一致協議。



06 總結


libra 區塊鏈的架構設計汲取了 bitcoin 和 ethereum 的兩大區塊鏈技術的精華,使 用了新的智慧合約語言。如果把 bitcoin 的指令碼指令比作組合語言(asm),那麼 ethereum 的 solidity 就是類似於 javascript 的動態語言, 組合語言效率最高但難於編寫, 動態語言靈活強大但容易產生難於覺察的 bug, 這兩種語言用來編寫和金融相關的業務都不 是最優的。move 語言借鑑了 rust 語言的所有權(ownership)管理機制,在編寫智慧合 約時既保證了安全性又不失靈活性。


librabft 基於鏈式 hotstuff,其確認規則遵從 3-chain 的確認規則。libra 能在眾多 的共識協議中選擇 hotstuff,顯示了 libra 團隊的眼光,以及在區塊鏈三難問題上巧妙的平 衡術。librabft 繼承了 hotstuff,使得它的共識協議具有正確性(safety),在半同步網路 下的活性(liveness),最終性(finality);同時具有通訊線性複雜度(linearity)和響 應性(responsiveness)。


libra 的實現也展示了簡易性(simplicity)和模組化 (modularity)的實現。同時也體現了 sustainability(可持續性),不需要工作量證明以 降低能耗。


參誇文獻

  1. 《libra 白皮書 2.0》

  2. 《librabft 共識協議》(鄒均)

來源丨bittribelab   作者丨孫海濤

免責聲明:

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

推荐阅读

;