Exonum的自定義區塊鏈共識演算法

買賣虛擬貨幣
Exonum平臺是構建區塊鏈解決方案的領先開源框架。它是拜占庭式的容錯演算法,專注於效率合安全性,不需要您的區塊鏈來“挖掘”塊。以下是我們的共識演算法的不同之處。求解一個共識演算法區塊鏈是一種數字分散式資料賬本,以區塊鏈的形式組織起來。只有在下列情況下才有可能向鏈中新增新塊:a)網路成員節點就相同的建議塊達成協議;b)建議的塊是準確的。要做出此決定,節點需要遵循規則。這些規則還允許網路管理員評估成員節點的活動。簡而言之:需要一種共識演算法,以確保對等網路成員能夠對新的賬本狀態達成一致意見(換句話說,對區塊鏈中的新塊的內容達成聯合決策)。
比特幣區塊鏈的普遍演算法是工作量證明(PoW)演算法。在這裡,確定參與者(礦工)執行的新塊的複雜計算工作,以及他為此獲得的報酬,保證了網路當前狀態的正確性。PoW演算法為系統的正常執行提供了經濟保證。PoW、PoS證明及其混合形式的下一個主要替代方案也提供了透過投資或花費參與者自己的物質資源達成共識的機會。在這種情況下,人們認為,即使不是完全無利可圖,不公平的活動至少也會變得極其昂貴。然而,儘管比特幣被認為是目前存在的最可靠的分散式系統,但它和它的替代品都沒有從根本上解決拜占庭式節點行為的問題。拜占庭將軍的故事大家都知道,所以我們就不解釋了。就本文而言,我們的意思是試圖為任何“拜占庭節點行為”(即任何故意惡意的、旨在破壞或完全停止共識演算法操作的活動)找到一個解決方案。當在私有區塊鏈網路中處理這個問題時,您必須用數學方法表示協商一致的屬性。這是透過在網路中建立嚴格的行為規則來實現的,與PoW和其他基於經濟的協商一致演算法相比,這些演算法幾乎不需要自發地執行。其中一些基於數學的共識(特別是拜占庭容錯共識(BFT))有一個明確的演算法,可以選擇提出新塊建議的領導節點。共識演算法還必須考慮到區塊鏈中可能出現的常見問題,即:節點與網路失去連線(網路參與者之間的通訊失敗)、節點沒有在任意時間點執行(斷開連線)以及節點工作時的不正確。所有這些問題都描述了節點的“拜占庭行為”。此外,不影響在區塊鏈中採用新塊的最大允許異常數取決於網路及其處理器/節點的屬性。例如,網路中節點之間通訊的同步。20世紀80年代的經典研究表明,要在包含拜占庭行為節點的非同步網路中實現共識性的穩定執行是不可能的。網路中誠實的成員將無法區分拜占庭節點和不活躍的節點(所謂的“FLP Impossibili”),為了保證系統對上述故障的穩定性,必須至少部分同步。同時,為了正確工作,共識演算法至少應該具有以下屬性:· 活躍性-在有限的時間內隨時接受新區塊進入鏈條的能力。換句話說,每個節點最終都會決定下一個塊;
· 一致性-網路中所有節點上的基本狀態的標識。換句話說,最終,關於下一個塊的所有誠實節點的決策將是相同的。如果我們說到共識演算法是專門應用於區塊鏈的,那麼另一個特性就變得很重要。這就是審查阻力,這意味著缺乏對交易的審查,這是區塊鏈共識的一個特定特徵。它防止節點故意只為塊選擇某些交易,而將其他交易留在未經確認的交易池中。基於相同的研究結果,對於一個已知節點數量的網路,最優的是一個抵抗拜占庭節點行為的演算法模型。在具有部分同步節點的網路中,該模型最多可以容忍網路中三分之一的惡意(拜占庭式)成員。鑑於我們的目標和Exonum框架的目標,我們選擇這個模型來形成我們的共識演算法。總之,我們設計的共識演算法能夠確定網路中每個誠實成員的行為,在這種情況下,大多數成員的行為都是誠實的,有些成員的行為可能是任意的。我們需要設計一個誠實節點對傳入事件(來自其他節點的訊息)的響應方案。這些反應包括髮送適當的響應訊息或“意識到”某個決定已經由網路做出。這決定了區塊鏈的日常操作。
達成共識的關鍵門檻: 2/3對1/3的選票共識演算法的基本操作有兩個步驟。首先,某個驗證器節點(參與協商一致的節點)提出一個新的塊建議,並在網路中的所有節點之間進行廣播。其次,其餘的驗證器節點為這個提議投票(“贊成”/“反對”)。當其中一個節點首先從其他驗證器接收到一定數量的相同響應時,該決策對整個網路有效。與現實世界中這一程序最接近的類比是總統選舉的情況。這是在兩位候選人之間做出的選擇。選民的數量是有限的,有些人可能會投給一個候選人,有些人會投給另一個候選人。在非拜占庭系統(例如,Cassandra)中,當提案獲得超過50%的選票時,就會被認為是做出了決定。由於每個成員只投票一次,其餘的選票不計算在內。值得一提的是,由於投票的數量與網路參與者的數量一致,因此在這種情況下不需要確定選民。然而,在拜占庭系統中情況就不同了。在這裡,投票是公開的,即每個人都知道成員的身份。然而,只要我們假設某些節點可能以任意方式執行,我們就會面臨許多問題。拜占庭節點可以透過忽略投票過程來破壞投票過程,或者向不同的成員傳送關於其決策的不同資料。事實上,這種情況類似於選舉中的選票造假。基於50%以上多數投票的決定違反了系統一致性的性質。這是因為現在選票的數量(或選票的數量)不等於選民的數量(網路中的節點數量)。
在這種情況下,節點在某個時間點上沒有系統狀態的統一檢視。而系統本身並沒有一個單獨的中心來收集和溝通最終的決定。因此,拜占庭共識的問題不在於選擇的正確與否,而在於:· 整個系統必須對最終結果達成一致決定。· 只要至少有一些網路成員有興趣這樣做,最終的結果必須是可以達到的。讓我們來確定網路中誠實驗證器的臨界質量,它將允許系統達成共識並接受區塊鏈中的新塊。假設我們有' h '誠實的驗證器節點和' f '(錯誤的)拜占庭節點,那麼驗證器的總數是' N = h + f '。如上所述,所有驗證器都為兩個提名候選人中的一個投票。每個人都從投票過程中的其他成員那裡收集選票。每個人都可以根據閾值規則來決定誰是贏家。規則說:數量的選票獲勝的候選人必須“≥α* N”、“α”的範圍從“0”到“1”。例如,絕對多數選票時達到“α> 1/2”。在投票結束時,每個驗證器獨立決定哪位候選人獲勝。值得注意的是,驗證器可能無法做出決策。例如,如果太少的驗證器廣播了他們的投票,就會發生這種情況。這可能會發生,特別是因為拜占庭驗證器可以向不同的誠實驗證器廣播不同的投票,或者完全跳過投票。
為了避免這種情況,在我們的推理中,我們必須觀察兩個條件:1. 誠實的驗證器應該能夠做出選擇,即使沒有拜占庭節點的參與。這意味著即使拜占庭節點有意跳過投票,共識性演算法的活性也得到了保留。這種情況可以透過下列不等式表示:“h≥α* N ';2. 投票給少數誠實驗證者的替代方案不能克服"α* N”的門檻。也就是說,即使拜占庭節點有意且一貫地將一名候選人的選票廣播給一些誠實的驗證者,並且投票給第二個候選人 ,也保留共識演算法的一致性屬性 - 其餘為誠實驗證。讓我們將這種情況表達如下:'[h / 2] = f [= = N',其中"{h / 2}"是數字"h / 2"的整數部分。  解1和2的不等式,我們得到:h f > 2,α> 2/3,
N≥3f + 1因此,網路中允許正確一致操作的拜占庭節點的最大數量是驗證器總數的' <1/3 '。這個結果很容易驗證。假設所有拜占庭節點都決定投票兩次。他們向一些誠實的驗證者廣播一個候選人的投票,並向其餘誠實的驗證者廣播第二個候選人的投票。如果拜占庭節點的數量是驗證器總數的1/3,那麼根據投票結果得到的投票總數將是4/3。因此,只投票一次(2/3)的誠實節點的數量將恰好佔總投票數的50%。這樣,為了獲得大多數誠實投票並達成共識,誠實節點的數量至少應該是驗證器總數的“2/3 +1”。共識演算法的階段在現代區塊鏈操作中,使用者對系統速度和效能的期望很高。經典的演算法解決方案沒有提供這些特性。我們回顧了其他幾個升級的替代方案,但是它們也不能完全滿足我們的研究團隊,因為這些演算法不能滿足專家對框架的所有要求。因此,我們開發了自己的演算法。Exonum的共識演算法依賴於inTendermint提出的一些思想。然而,它包含了許多特性,使它有別於Tendermint和其他用於基於區塊鏈的解決方案的一致演算法。

下面我們將討論Exonum共識演算法的機制。一般來說,計劃如下:

達成一致意見的過程首先由一個領導節點(一個領導者)形成一個必須新增到區塊鏈的交易列表(建立一個建議)。領導者是透過一個單獨的演算法來選擇的。根據我們的演算法,領導者每輪都會改變。然後,將提案透過網路廣播到驗證器節點(驗證器)。

驗證器檢查接收到的訊息是否與序列化格式相對應。如果出現錯誤,節點將完全忽略接收到的訊息。例如,驗證器忽略向區塊鏈中間新增塊或複製已存在事務的建議。如果一切就緒,那麼投票階段就開始了。

提案獲得驗證者2/3以上批准的節點,將失去對其他驗證者提案投票的機會,並且無法更改自己的提案。這種狀態稱為鎖的驗證。
在領導者從驗證器收集到所需的投票數之後,它將批准的交易放入一個塊中,並廣播一條特殊的訊息——precommit。
precommit包含更新後的區塊鏈狀態的雜湊值,指示節點準備將建議的塊新增到區塊鏈。當大多數驗證器響應類似的預提交訊息時(使用相同的雜湊值),塊就被新增到區塊鏈中。達成一致意見,並對隨後的每個塊重複該過程。

為了提高系統的穩定性,驗證器之間會週期性地交換和阻塞訊息。如果節點缺少任何事務資料,則需要使用前者。後者用於將關於一個事務塊的資訊傳輸到一個滯後節點(例如,節點關閉了一段時間)。這允許同步整個網路的工作。

所提出的共識性演算法對每個高度都是正確的,即滿足了活動性、一致性和抗審查性。共識屬性的正式證明可以在我們的白皮書中找到。

效能測試

為了評估Exonum共識性演算法的效率,我們檢查了區塊鏈如何使用它使用兩種配置。這些配置包括一個資料中心和幾個地理上分佈的資料中心。在測試期間,對不同數量的驗證器估計了TPS引數(每秒交易數)。下面的圖表顯示了使用加密貨幣的區塊鏈(黑色圖表)和使用時間戳的區塊鏈(藍色圖表)中的網路效能變化。

TPS是單個資料中心中驗證器數量的函式

TPS是多個資料中心中驗證器數量的函式
根據網路配置的不同,Exonum及其針對區塊鏈的新拜占庭容錯共識性演算法平均每秒可以處理2,000到13,000個交易。在生產解決方案方面,該演算法可以在全球分散式網路上以0.5秒的塊接受時間每秒處理4000個交易。Exonum的效能在出現故障停止驗證器時是穩定的,但是隨著驗證器總數的增加,Exonum的效能會顯著下降。

免責聲明:

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

推荐阅读

;