1. 程式人生 > >BlockChain技術系列(五)- 拜占庭共識

BlockChain技術系列(五)- 拜占庭共識

obcpbft包是PBFT共識協議[1]的實現,其中提供了驗證器之間的共識,雖然驗證器的閾作為Byzantine,即,惡意的或不可預測的方式失敗。在預設的配置中,PBFT容忍t<n/3的拜占庭驗證器。

處理提供PBFT共識協議的參考實現,obcpbft 外掛還包含了新穎的Sieve共識協議的實現。基本上Sieve背後的思想為non-deterministic交易提供了fabric層次的保護,這是PBFT和相似的協議沒有提供的,obcpbft可以很容易配置為使用經典的PBFT或Sieve。

在預設配置中,PBFT和Sieve設計執行在至少3t +1 *驗證器(副本),最多容忍

T個出現故障(包括惡意或拜占庭*)副本。

5.1 概覽

obcpbft外掛提供實現了CPI介面的模組,他可以配置執行PBFT還是Sieve共識協議。模組化來自於,在內部,obcpbft定義了innerCPI 介面(即, inner consensus programming interface),現在包含在 pbft-core.go中。

innerCPI介面定義的所有PBFT內部共識(這裡稱為core PBFT並在pbft-core.go實現)和使用core PBFT的外部共識之間的相互作用。obcpbft包包含幾個core PBFT消費者實現

  • obc-classic.go, core PBFT周圍的shim,實現了innerCPI介面並呼叫CPI介面;
  • obc-batch.go, obc-classic的變種,為PBFT新增批量能力;
  • obc-sieve.go, core PBFT消費者,實現Sieve共識協議和innerCPI介面, 呼叫CPI interface.

總之,除了呼叫傳送訊息給其他 peer(innerCPI.broadcast 和 innerCPI.unicast),innerCPI介面定義了給消費者暴露的共識協議。 這使用了用來表示資訊的原子投遞的innerCPI.execute

呼叫的一個經典的總序(原子)廣播 API[2]。經典的總序廣播在external validity checks [2]中詳細討論(innerCPI.verify)和一個功能相似的對不可靠的領導失敗的檢查Ω 3.

除了innerCPI, core PBFT 定義了core PBFT的方法。core PBFT最重要的方法是request有效地呼叫總序廣播原語[2]。在下文中,我們首先概述core PBFT的方法和innerCPI介面的明細。然後,我們簡要地描述,這將在更多的細節Sieve共識協議。

5.2 Core PBFT函式

下面的函式使用非遞迴鎖來控制併發,因此可以從多個並行執行緒呼叫。然而,函式一般執行到完成,可能呼叫從CPI傳入的函式。必須小心,以防止活鎖。

5.2.1 newPbftCore

簽名:

func newPbftCore(id uint64, config *viper.Viper, consumer innerCPI, ledger consensus.Ledger) *pbftCore

newPbftCore構造器使用指定的id來例項化一個新的PBFT箱子例項。config引數定義了PBFT網路的操作引數:副本數量N,檢查點週期K,請求完成的超時時間,檢視改變週期。

configuration key type example value description
general.N integer 4 Number of replicas
general.K integer 10 Checkpoint period
general.timeout.request duration 2s Max delay between request reception and execution
general.timeout.viewchange duration 2s Max delay between view-change start and next request execution

介面中傳遞的consumerledger引數是一旦它們全部排好序後用來查詢應用狀態和呼叫應用請求的。參閱下面這些介面的相應部分。