區塊鏈淺談5 - 共識演算法

甚麼是共識演算法?

簡單的說,就是要如何讓區塊鏈網路中成員的帳本一致所要遵守的方法。共識演算法代表著區塊鏈網路的安全性,可能包含著競爭與獎勵機制,促使加入成員去維護整個區塊鏈網路。在研究區塊鏈中,拜占庭將軍問題很常被提到,其問題大致上是說,當一群將軍彼此相距遙遠,要如何達成是否攻打的共識?誰說了算?你到底有沒有收到我的訊息?這就類似要如何讓帳本一致,而解決方法有很多種,以下簡單介紹目前主流的三種解法所代表的演算法

PoW(工作量證明演算法)

工作量證明演算法是消耗電腦的CPU/GPU去暴力計算題目的演算法,其預先付出成本,也就是電腦算力,再在區塊鏈中擁有生成區塊與拿取獎勵的權利。用拜占庭將軍中回答,就像是先奉獻資產證明自己,讓其他將軍聽從自己,如果所下的決定都沒背叛,則每次下決定後都回饋固定金額。

PoS(股權證明演算法)

股權證明機制是區塊鏈資產的押金多寡決定區塊生成的權利,押金多則驗證區塊生成的機會大,破壞區塊鏈網路會導致網路整體資產下降,且押金也會被銷毀,而不會去破壞,因為成本大於收益。用拜占庭將軍問題回答,每個將軍抵押自己的土地,多的有較大的決定權,一旦發現背叛則沒收所有抵押土地,沒背叛則每次下決定後都回饋固定土地。

BFT(拜占庭容錯演算法)

拜占庭演算法是一個沒有獎勵機制的方法,只要只有三分之一以內的人是壞的,就能依靠回傳結果的一致性去決定現在所有人要做甚麼。用拜占庭將軍問題回答,就是如果這次結果有三分之一以上的人回傳給我一樣的結果,我就按照這結果去做,前提是壞的將軍不能超過三分之一。為什麼是三分之一以上,先看看以下情境

將軍發出詢問,可能發生的情形

  1. 接到回應
    • 正確
    • 錯誤
  2. 沒接到回應
    • 不知道其他將軍是否已回傳訊息?
    • 是因為他沒收到我的訊息?
    • 他是背叛的將軍故意不回我? 不管是何種情形,將軍們都希望能有共同共識。

以下證明三分之一容錯

假設全部總共有m個將軍,全部將軍裡有n個是壞的,
1.根據上面沒接到回應的情形,有可能壞的將軍都不回傳,所以每個將軍必須要能在m-n個回應裡就能下正確的決定,因為她不知道剩下n個是沒接到回應的哪一種。
2.因為要能下正確的決定,所以m-n個回應裡好將軍的回應數量要大於壞將軍的回應數量,
3.再假設最壞情形,所有壞將軍回應n全部在這m-n個回應裡

結合以上三條就可以列出以下不等式
(m-n)-n>n 
m > 3n 
m 最小為 3n + 1

所以將軍們中可以容忍三分之一以內的壞將軍也能達成共識,這就是拜占庭容錯演算法

演算法比較


下一章預計介紹各平台與公私有鏈






Search

    Post Directory