什么是共識
一個系統想要正常運行,就必須要有一個系統成員都認可的規則來說明如何分工、誰來領導、獎罰機制等問題,
在中心化系統中,所有節點都只需要詢問超級節點就能得到一致的結果,
而區塊鏈是去中心化的資料庫,且區塊鏈實行少數服從多數的機制,所以區塊鏈中的節點只能通過相互通信得知哪些規則(即區塊中的交易)被大多數節點認可,區塊鏈中大多數節點都認可一條交易的程序,就是區塊鏈對這條交易達成共識的程序,
為什么會出現達不成共識的情況
系統中的惡意節點會給不同的節點發送不同的資訊,
比如,系統中有A,B,C三個節點 ,其中C是惡意節點,C給A發送交易“小明給小黃轉5元”,C給B發送交易“小明給小黃轉50元”,A節點會在賬本中記載“小明-5元,小黃+5元”,B節點會在帳本中記載“小明-50元,小黃+50元”,最后,A,B節點會在小黃到底有多少錢這個問題上達不成共識,(這就是著名的拜占庭將軍問題)
未達成共識的體現
區塊鏈分叉,可分為正常的分叉和惡意的分叉攻擊
正常分叉
因為網路的延遲導致的分叉
硬分叉
大部分節點進行了軟體升級(new node),少數節點沒有進行軟體升級(old node),new node發布的區塊在old node處驗證不通過,
硬分叉是永久性分叉【old node的本地區塊鏈中只有old node生成的區塊,new node的本地區塊鏈中由new node發布的區塊所在的鏈成為最長合法鏈】
軟分叉
大部分節點進行了軟體升級(new node),少數節點沒有進行軟體升級(old node),old node發布的區塊在new node處驗證不通過,
軟分叉是暫時性分叉【new node的本地區塊鏈只有new node生成的區塊,old node的本地區塊鏈中會出現分叉(new node發布的區塊和old node發布的區塊),因為new node占大多數,最終new node發布的區塊所在的鏈會成為最長合法鏈】
分叉攻擊


區塊鏈不可能三角問題
區塊鏈不可能在scalability,security,decentralization這三個方面同時達到最優,
- scalability高效可擴展【對標用戶體驗感】
----高效:每秒能夠處理的交易數量多(交易吞吐量高),單個交易能在很短的時間內被處理(交易時延短)
----可擴展:很多個節點加入系統后,系統仍然能夠提供良好的服務 - security安全
- decentralization區塊生成者的去中心化程度
----區塊生成者的數量
----區塊生成者的地理位置分布
----區塊生成者是否是同一利益共同體
突破區塊鏈不可能三角問題的方向
- 共識演算法
- 區塊結構
DAG - 系統實作
側鏈技術、分片技術、多鏈并行……
最基礎的共識演算法
PoW(Proof of Work)
1.所有節點通過挖礦爭奪記賬權,
2.爭到記賬權的節點將交易打包進區塊并廣播區塊,其他節點驗證區塊并將驗證通過的區塊加入本地區塊鏈中,
挖礦的實質
先看位元幣系統中區塊的塊頭結構【PoW在位元幣系統中使用】

挖礦就是節點使用窮舉法暴力尋找nonce的值使得
H(block head)<target
這個不等式成立的程序(target就是難度目標)
分析
PoW犧牲了scalability
優點
PoW是目前使用時間最長、最安全、去中心化程度最好的共識演算法
缺點
1.PoW效率低
2.PoW費電,每個節點都在通過尋找nonce值來爭奪記賬權
實作
隨著礦池和算力優于CPU的ASCI的出現,PoW的去中心化程度和安全性受到阻礙
PoS(Proof of Stake)
1.節點交押金,成為驗證者,系統通過節點提交的押金給節點分配權益,【權益= 押金 * 幣齡】
2.每一輪中,權益最大的驗證者擁有記賬權,其余驗證者驗證區塊并將驗證通過的區塊加入本地區塊鏈中,
3.一輪過后,生成區塊的節點提交的押金的幣齡清零,
PoW中節點通過算力競爭記賬權,PoS節點通過權益爭奪記賬權
分析
PoS犧牲了scalability
decentralization:PoS會導致“富人越富”的現象出現,“區塊生成者是否是同一利益共同體”的去中心化程度低
優點
效率高于PoW【nonce值的計算難度低于PoW】
缺點
1.效率低
2.鼓勵節點離線和囤積貨幣,幣齡僅隨著天數增長,和節點是否在線無關,所以某些節點會先離線囤積幣齡后再上線,
3.nothing-at-stake attack
實作
目前還沒有實作很優秀的純PoS演算法的區塊鏈平臺
PBFT(Practical BFT)

分析
PBFT犧牲了decentralization和security
decentralization:PBFT只適用于聯盟鏈和私有鏈,“區塊生成者是否屬于同一利益共同體”和“區塊生成者的地理位置”的去中心化程度低
security:惡意節點m個,系統中總結點n > 3m 時安全
scalability:通信復雜度O(N*N),節點數少時效率高,系統可擴展性差
優點
系統中節點數少時效率高
缺點
不適用于節點數量多、惡意節點多、網路易丟包的情況
可擴展性差
實作
可以實作
改進的共識演算法
我將我了解到的共識演算法根據改進的方向分為兩部分:
- 降低挖礦難度(target) + 隨機選擇出塊節點
- 部分節點代替全部節點達成共識
降低挖礦難度(target) + 隨機選擇出塊節點
PoA(Proof of Activity)
1.節點競爭生成區塊塊頭【區塊塊頭僅包括version、time、preHash、target、nonce,沒有和交易相關的MerkleRoot】
2.最先生成區塊塊頭的節點廣播塊頭,其他節點接收塊頭,使用一系列計算匯出N名幸運股權節點
3.前N-1名幸運股權節點將自己的簽名發給第N名幸運股權節點,第N名幸運股權節點打包交易和N名幸運股權節點的簽名,廣播區塊(N個簽名缺一不可)
4.所有節點驗證區塊
分析
犧牲了scalability
PoW+PoS的改進演算法
優點
1.效率高于PoW和PoS
2.解決了PoS的鼓勵節點離線問題(幸運股權節點是隨機選的)
缺點
1.效率低
2.費電,所有節點競爭生成塊頭
實作
可以實作
Ouroboros
通過可驗證隨機函式VRF(Verifiable Random Function)選擇出塊節點
分析
Ouroboros是第一個具有嚴格安全證明的共識演算法
PoS改進演算法
犧牲了scalability
優點
安全
分叉概率極低
缺點
效率低
實作
可實作
部分節點代替全部節點達成共識
DPoS
1.節點交押金進入系統,系統分配權益
2.節點通過投票選出一個委員會,委員會中的節點成為見證人(票的權重和投票節點的權益相關)
3.見證人輪流發布區塊,見證人一起驗證區塊
分析
犧牲了decentalization和security
decentralization:不是所有節點都參與共識程序
seciruty:攻擊者可以通過攻擊見證人來趕走好的見證人
PoS改進演算法
優點
效率高
缺點
較其他演算法不安全:
- 好的見證人容易遭受諸如DDoS攻擊等攻擊,從而被取消見證人身份
- 比賽造假:惡意節點為了成為見證人討好誠實節點騙取票數
實作
可以實作
Algorand
1.通過可驗證隨機函式VRF選擇委員會(委員會中的節點分為leader和verifier)
2.委員會中的leader發布區塊
3.委員會中的verifier通過BA*演算法驗證區塊(第一階段GC演算法對候選區塊達成共識,第二階段BBA演算法對是否寫候選區塊達成共識)
分析
犧牲了scalability和decentralization
PoS+BFT改進演算法
優點
分叉概率極低
效率優于PoS
缺點
效率較低
實作
可實作
dBFT
1.節點交押金進入系統,系統分配權益
2.根據權益選擇一部分節點組成委員會
3.委員會中的節點使用BFT演算法達成共識
分析
犧牲了decentralization
優點
效率高
一般不分叉
缺點
中心化程度高
不適用于網路易丟包的情況
實作
可實作
共識演算法應對各種攻擊
sybli attack女巫攻擊
定義:一個節點模擬多個身份進行攻擊
例子:一臺計算機利用多個ip地址刷贊
PoW:獲得記賬權的概率僅取決于算力,和身份數量無關【不會遭受該攻擊】
PoS:獲得記賬權的概率僅取決于權益(押金量,幣齡),和身份數量無關【不會遭受該攻擊】
PBFT:投票時“一身份一票”【可能遭受該攻擊】
PoA:同PoW和PoS【不會遭受該攻擊】
Ouroboros:系統決定產生區塊的節點【不會遭受該攻擊】
DPoS:同PoS【不會遭受該攻擊】
Algorand:同PoS【不會遭受該攻擊】
dBFT:成為委員會的概率取決于節點權益【不會遭受該攻擊】
nothing-at-stake attack無權益攻擊
定義:在遇到分叉時,礦工同時在多條分叉鏈上挖礦
PoW: 在多條鏈上挖礦會分散算力,使得節點挖礦成功的概率降低,所以節點在遇到分叉時會選擇一條鏈并在該鏈上挖礦【不會遭受該攻擊】
PoS: 節點將權益分配在多條鏈上就可以在多條鏈上同時挖礦【可能遭受該攻擊】
PBFT: 強一致性,一般不會分叉【不會遭受該攻擊】
PoA: 同PoS【可能遭受該攻擊】
Ouroboros: 系統決定產生區塊的節點【不會遭受該攻擊】
DPoS: 參與共識階段的節點少,一般不會分叉【不會遭受該攻擊】
Algorand: 一般不分叉【不會遭受該攻擊】
dBFT: 一般不分叉【不會遭受該攻擊】
long range attack長程攻擊
定義:惡意節點發布一條從創世區塊開始的鏈取代當前的最長合法鏈
long range attack理論上可實作,實際中還未碰見
PoW: 需要很大的算力才能實作【不會遭受該攻擊】
PoS: 需要很大的權益才能實作【可能遭受該攻擊】
PBFT: 強一致性,一般不會分叉【不會遭受該攻擊】
PoA: 出塊者隨機選擇【不會遭受該攻擊】
Ouroboros: 系統決定產生區塊的節點【不會遭受該攻擊】
DPoS: 參與共識階段的節點少,一般不會分叉【不會遭受該攻擊】
Algorand: 一般不分叉【不會遭受該攻擊】
dBFT: 一般不分叉【不會遭受該攻擊】
各共識演算法總體比較

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/225407.html
標籤:區塊鏈
