12.24 安全與效率不可兼得?PoW、PoS、DPoS沒實現的,DPoW實現了

安全與效率不可兼得?PoW、PoS、DPoS沒實現的,DPoW實現了 | 火星技術帖

免責聲明:本文旨在傳遞更多市場信息,不構成任何投資建議。文章僅代表作者觀點,不代表火星財經官方立場。

概要

區塊鏈是建立在P2P網絡,由節點參與的分佈式賬本系統,最大的特點是“去中心化”,在系統內彼此之間只需依靠區塊鏈協議系統就能實現交易,然而目前流行的共識機制PoW、PoS、DPoS各有優劣。而路雲區鏈卻在其實驗鏈Dpperin中,獨創的DPoW共識機制卻實現了安全與效率的兼得。

傳統的PoW(Proof of Work)作為最經典的共識算法,秉持著長鏈優先原則,通過算力維護鏈的安全性和穩定性。參與挖礦的算力越大,鏈的安全性越高,因為隨著總算力的增加,惡意節點作惡的成本也會直線上升。理論上來說,如果惡意節點的算力超過全鏈算力的51%,那麼惡意節點就可以偽造一條更長的鏈替代原先的主鏈,這就是著名的51%算力攻擊。正是因為有51%算力攻擊的可能,所以PoW的區塊不是立即確認的,它是概率性的確認。例如,比特幣網絡需要大約6個區塊確認一筆交易。

針對PoW非立即確認這一缺點,路雲區鏈在Dipperin研發中,獨創了DPoW(Deterministic Proof of Work)共識算法,吸收了PoW和PBFT(實用拜占庭容錯)的優點。另外,Dipperin使用了VRF(可驗證隨機函數)挑選可信驗證者;防卡死機制解決大多數驗證者不在線的問題。這樣能夠在獲得高擴展性的同時保證安全性並且儘可能的去中心化。

Map Reduce挖礦算法

對於傳統的PoW算法,路雲區鏈的Dipperin做了一定的改進,使用了Map Reduce挖礦算法,它的特點是將挖礦過程分工,由Master(分片服務器)和Worker(礦工節點)協作完成,其基本原理如下:

1.Master將挖礦的整個搜索空間劃分成多個部分,需要保證劃分的各小區間之間不會有覆蓋,然後將其分配給為其工作的Worker。

2.Worker將會在被分配的搜索空間上計算hash難題。在計算過程中,Worker需要定時監聽Master的消息通知,以防Master更新挖礦搜索空間或重新分配任務。一旦Worker挖礦完成,便會將滿足條件的區塊提交給Master。

3.Master接收到Worker提交的區塊後,將其提交給驗證者集群,並等待驗證結果。

PBFT流程

PBFT在共識算法中是強一致性和高效的代表。Dipperin使用PBFT算法旨在選取驗證者對礦工挖出的區塊進行投票確認,如果區塊有超過三分之二的票數,那麼區塊會被立即確認。

安全与效率不可兼得?PoW、PoS、DPoS没实现的,DPoW实现了 | 火星技术帖

如上圖所示,PBFT過程分為以下幾步:

1. 礦工廣播挖到的區塊給當前輪的22個驗證者

2. 直接進入Propose階段,由主驗證者挑選共識區塊後廣播給所有驗證者(主驗證者輪流當選)

3. 驗證者收到區塊後進入Prevote階段,對區塊進行驗證和投票並廣播給所有驗證者

4. 驗證者收到2/3以上Prevote信息後進入PreCommit階段,所有驗證者再次對區塊進行投票並廣播給所有驗證者

5. 驗證者收到2/3以上Precommit信息後進入Commit階段,驗證者把區塊和15個簽名信息廣播給所有節點

另外,PBFT過程中有幾點需要特別注意:

1. 對當前區塊的Commitlist(15個驗證者的簽名信息)放在下一個區塊中解釋:不把Commitlist放在當前塊,而是放在下一個塊的目的是為了削弱主驗證者挑選驗證者的權利。所有驗證者得到2/3的投票信息就可以廣播區塊,且這個區塊是唯一的。礦工創建區塊時有權利選擇任意15個簽名信息作為Commitlist。

2. 所有驗證者都對相同區塊進行了兩次投票,且他們缺一不可解釋:Prevote的投票目的是確認所有的驗證者在同一個Height(區塊高度)和同一個Round(共識回合)上,並且確認驗證者對該區塊的投票意願;Precommit的投票目的是對區塊達成最終共識。如果只有一輪投票,那麼很可能導致鏈分叉。假設有4個驗證者節點A,B,C,D,他們共識出一個區塊Block1,但是隻有A上鍊了,其他驗證者因為網絡問題沒有在規定時間內收集夠投票而進入到了下一輪。在新一輪中B,C,D對Block2達成共識,此時在同一高度有了不同的兩個區塊形成分叉。

3. PBFT過程加入鎖和解鎖機制防止驗證者作惡解釋:驗證者一旦對某個區塊A進行Prevote投票就會被"鎖住",在同一個Height內無法對不同的區塊B進行第二次的Prevote投票,同時該驗證者只能對區塊A進行Precommit投票。如果驗證者收到有2/3以上的更高Round的其他驗證者投票就會對區塊A解鎖。

基於VRF的驗證者選取

然而,在PBFT的過程中,驗證者集群必須有超過2/3的誠實節點才能保證系統的安全性;超過1/3的誠實節點才能保證系統的存活性。因此,如何從廣大節點中選取出誠實節點作為驗證者代表變得極為重要。路雲區鏈在Dipperin中設計了一套基於VRF(可驗證隨機函數)密碼擲籤的驗證者選取機制。為了抵禦女巫攻擊,對每個用戶設定了權重,而這個權重則來源於用戶自身的信譽。為了讓新加入的節點有機會當選為驗證者,引入了“幸運值”,且這個“幸運值”是可以被所有節點驗證的。

信譽:Reputation=F(Stake,Performance,Nonce),衡量信譽的因子有3個,Stake(押金數)代表著作惡成本。其他數據相同的情況下,押金數越多,信譽值越高。Performance績效代表著過去用戶作為驗證者時的業績。在其他數據相同的情況下,績效越高,信譽值越高。

決定績效的有3個因子:

1. 作為驗證者時,平均Commit率;

2. 作為Primary(主驗證者)的出塊率;

3. 被舉報次數。

Nonce是該帳號相關的交易數,其他數據相同的情況下,交易數越高,信譽值越高。Stake和Nonce的引入是為了防止女巫攻擊,如,對手將錢放入多個新建賬戶中試圖參與競選。如果是這種情況,每個賬戶的Stake和Nonce會很低,對信譽影響非常大。

要想了解幸運值的產生過程首先需要了解VRF算法,對於一個公認的輸入(input),用戶使用私鑰SK和一個Hash函數可以產生一個Hash值和一個Proof。其他用戶則可以通過這個Hash值和Proof,結合該用戶的公鑰PK,驗證這個Hash值是否是由這個用戶針對Input所產生的,並且在這個過程中,該用戶的私鑰自始至終沒有洩露。這個Hash值其實就是Seed,礦工利用私鑰SK和上一個區塊頭中的Seed可生成新的Seed和證明這個Seed的Proof,之後礦工只需把Seed、Proof、公鑰PK放入新的區塊頭即可。所有節點都可以根據Proof和公鑰PK驗證Seed的合法性。

安全与效率不可兼得?PoW、PoS、DPoS没实现的,DPoW实现了 | 火星技术帖

每個區塊頭的Seed連起來形成了鏈式結構,但是並不是每個區塊頭的Seed都是有用的。只有每一輪的最後一個區塊中的Seed參與了幸運值的計算。例如,一輪有110個區塊,0~109是第一輪,110~219是第二輪以此類推。那麼前兩輪的驗證者是默認的驗證者,即官方的驗證者。非官方驗證者則是從第三輪開始進行選取,且第三輪驗證者的幸運值由109號區塊的Seed決定。

總結

從比特幣、以太坊,到EOS以及當前很多公鏈,效率與安全是一直存在的問題,並且長期困擾了區塊鏈技術的落地應用。

路雲區鏈Dipperin的DPoW的共識算法綜合考慮了系統的去中心化程度和交易的效率問題,從目前的測試效果來看,可以達到秒級出塊,3000TPS的效率,採用VRF密碼擲籤避免PoS算法中的公正性和DPoS中的中心化問題。


分享到:


相關文章: