區(qū)塊鏈核心算法之共識機制
共識機制在區(qū)塊鏈系統(tǒng)中起到決定誰負責生成新區(qū)塊的作用。
一、什么是共識?
在理解共識的概念之前,先簡單粗爆地假設——咱們村有100人,現(xiàn)在要投票選舉誰當村長,如果100人都親自到場投出自己的一票,那參與度是100%;如果這100人選出了10個代表去投票,參與度則只有10%。這兩種投票,哪一種投票更能代表民意呢?毫無疑問是前者,因為參與度更高;相反,后者選出了10位代表去投票,參與度低,難免以偏蓋全。通過這個假設,我們可以對什么是參與度有一個簡單粗暴的理解。
共識(Consensus)是一切交易的基礎,達成共識越分散(參與度越高),其效率就越低,但滿意度越高,因此也越穩(wěn)定;相反,達成共識越集中(參與度越低),效率越高,也越容易出現(xiàn)獨裁和腐敗現(xiàn)象。
區(qū)塊鏈技術的偉大之處在于去中心化和去信任(或降低信用成本),如何在一個完全陌生的網絡環(huán)境里,通過代碼撮合交易?言外之意,這些代碼究竟發(fā)揮了何種神奇的魔力,讓買賣雙方產生信任呢?
答案就是共識機制。
共識機制
區(qū)塊鏈系統(tǒng)的核心是有系統(tǒng)中節(jié)點競爭記賬,這個競爭的過程稱為共識機制,區(qū)塊鏈的底層有四部分構成,一個分布式的數(shù)據(jù)庫用來存儲以往和將來的交易數(shù)據(jù),密碼學的公私密鑰體系用來確認交易雙方的身份,P2P網絡用來廣播和蔓延各類消息(如節(jié)點加入消息,節(jié)點失效消息,得到挖礦數(shù)據(jù)的消息)和 用來決定節(jié)點記賬權利的共識機制。
共識機制在區(qū)塊鏈中扮演著核心的地位,共識機制決定了誰有記賬的權利,以及記賬權利的選擇過程和理由。不用的虛擬貨幣采用共識機制不同,常見的共識機制如POW,POS,DPOS 拜占庭容錯等。現(xiàn)梳理如下:
目前區(qū)塊鏈的共識機制大致可以分為PoW(工作量證明)、PoS(權益證明)、DPoS(股份授權證明)以及分布式一致性算法幾類。
(一):工作量證明PoW
POW(Proof of Work),即工作量證明機制。整個系統(tǒng)中每個節(jié)點為整個系統(tǒng)提供計算能力(簡稱算力),通過一個競爭機制,讓計算工作完成最出色的節(jié)點獲得系統(tǒng)的獎勵,也就是完成新生成貨幣的分配。區(qū)塊鏈是一個持續(xù)增長的順序塊組成的,每個塊包含了頭文件和一系列的交易信TXi,其中頭文件中保護了timestamp Ti ,上一個塊的索引Hi-1,和nounce Ni-1,區(qū)塊鏈是密碼上的安全,對于每一輪只要找到相應的HASG的碰撞就算成功,HASG的碰撞的意思可以了解為hash值的前多少位相同,我們知道何難找到兩個hash一模一樣的文件,但是我們可以找到前幾位相同的,我們將一個完整的挖礦過程整理如下:
其中Di是難度系數(shù),可以認為是前多少位的碰撞。挖礦的過程就是在不停的嘗試找Ni的過程。下面我們給出一個模擬挖礦的例子。測試環(huán)境說明:
運行如下腳本:
對結果進行排序,找到前9位對撞成功的n的值.
實驗結果如下:
雖然只是模擬實驗,但是完整的反映了POW的運作原理。
(二):權益證明PoS
POS(Proof of Stake)即股權證明。顧名思義,指的是直接根據(jù)所持有的份額來達成共識機制。其目的在于讓鏈上所謂的“股權持有者”來代替POW里的礦工,這本質上的共識過程是以“股權所有”代替“挖礦”過程。
在PoW機制中,由于想要找到符合條件的 nonce.nonce往往需要花費大量的電力和時間成本,因此,為了使每個Block更快被生成,PoS機制去掉了窮舉 noncenonce這一過程,繼而采用以下更快速的算法:
SHA256(SHA256(Bprev),A,t)≤balance(A)m
H 某個哈希函數(shù)
t 為 UTC 時間戳
Bprev指的是上一個區(qū)塊
balance(A)代表賬戶A的賬戶的余額
唯一可以不斷調整的參數(shù)是t,等式右邊m是某個固定的實數(shù),因此,當balance(A)越大,找到合理t的概率越大,網絡中,普遍對于t的范圍有所限制,如可以嘗試的時間戳不能超過標準時間戳1小時,也就說,一個節(jié)點可以嘗試 7200次,來找到一個符合條件的t,如果找不到即可放棄。因此,在PoS中,一個賬戶的余額越多,在同等算力下,就越容易發(fā)現(xiàn)下一個區(qū)塊。
但是它和POW機制一樣解決問題的思想也導致了它與POW擁有一樣的缺點,也是犧牲了一部分的共識(同樣分叉),而且需要等待多個確認。
優(yōu)點:對節(jié)點性能要求低,達成共識時間短(網絡環(huán)境好的話可實現(xiàn)毫秒級);
缺點:沒有最終一致性
PoW與PoS流程對比圖:
(三):股份授權證明DPos:
是基于POS衍生出的更專業(yè)的解決方案,股份授權證明類似于董事會投票,假設某個區(qū)塊鏈系統(tǒng)的世界里有10萬人,現(xiàn)在這10萬人投票選出了4位股東作為代表來行駛記賬權,這4位董事分別是A、B、C、D,在記賬過程中,按順序每位董事有兩秒鐘的時間來記賬,如果在規(guī)定的時間內記賬失敗,則直接把權限交給下一位董事,這樣原本10萬人參與記賬競爭的游戲,現(xiàn)在變成了4人。
這樣做的優(yōu)點是大幅縮減了參與驗證和記賬的數(shù)量,形成共識幾乎可以達到秒級,缺點是固定數(shù)量的董事作為記賬候選人,與去中心化的理念相違背,董事數(shù)量太少,參與度太低,也缺乏一定的代表性。
對比這三種最常用的共識算法,不難發(fā)現(xiàn)各有利弊,它們的誕生都圍繞著一個核心——如何更加公平、公正、透明、輕量(不過多消耗資源)、高效(更快)地達成共識,挑選出記賬的人(節(jié)點)。
PoS與DPoS對比圖:
結論:
PoW采用簡單粗暴但極為有效的方式,通過節(jié)點首先自證其資質后才進行廣播的方式,大幅度減少了網絡間的通訊壓力,但與之帶來的問題則在于自證資質的計算資源消耗極大。
PoS采用與傳統(tǒng)分布式一致性驗證類似的機制,通過代幣數(shù)量(或存儲容量等指標)作為權重依據(jù),使用某種分布式算法選舉出每次的檢查點節(jié)點。這種機制的好處在于沒有消耗計算資源的自證資質過程,但是帶來的問題在于每次選舉時在大量節(jié)點的網絡中對網絡壓力極大。
DPoS作為PoS的變形,通過縮小選舉節(jié)點的數(shù)量以減少網絡壓力,是一種典型的分治策略:將所有節(jié)點分為***與跟隨者,只有***之間達成共識后才會通知跟隨者。該機制能夠在不增加計算資源的前提下有效減少網絡壓力,在優(yōu)秀的軟件實現(xiàn)中將會具有較強的應用價值。
在區(qū)塊鏈的共識機制中,其本質與分布式數(shù)據(jù)庫的一致性算法存在極多的相似之處。拜占庭問題的引入僅僅從算法和選舉節(jié)點數(shù)量上對網絡結構做出一些調整,但是并不從本質上改變分布式系統(tǒng)一致性選舉的機制。