详解DPoS共识算法
一、DPoS 的誕生
想象這樣一家公司:公司員工總數有1000人,每個人都持有數額不等的公司股份。每隔一段時間,員工可以把手里的票投向自己最認可的10個人來領導公司,其中每個員工的票權和他手里持有的股份數成正比。等所有人投完票以后,得票率最高的10個人成為公司的領導。如果有領導能力不勝任或做了不利于公司的事,那員工可以撤銷對改領導的投票,讓他的得票率無法進入前10名,從而退出管理層。這就是對DPoS(Delegated Proof of Stake)共識機制的一個形象描述。
DPoS 是一種區塊鏈的共識算法, 2014年4月由Bitshares 的首席開發者 Dan Larimer (現為EOS CTO)提出并應用。當時Dan觀察到比特幣系統共識算法POW的一些問題:比如礦池導致算力越來越集中、電力耗費過大等。所以他提出了一種更加快速、安全且能源消耗比較小的算法,這就是后來的DPOS。
二、DPoS的選舉機制
在DPoS共識算法中,區塊鏈的正常運轉依賴于受托人(Delegates),這些受托人是完全等價的。受托人的職責主要有:
1. 提供一臺服務器節點,保證節點的正常運行;
2. 節點服務器收集網絡里的交易;
3. 節點驗證交易,把交易打包到區塊;
4. 節點廣播區塊,其他節點驗證后把區塊添加到自己的數據庫;
5. 帶領并促進區塊鏈項目的發展;
受托人的節點服務器相當于比特幣網絡里的礦機,在完成本職工作的同時可以領取區塊獎勵和交易的手續費。
一個區塊鏈項目的受托人個數由項目發起方決定,一般是101個受托人。任何一個持幣用戶都可以參與到投票和競選受托人這兩個過程中。用戶可以隨時投票、撤票,每個用戶投票的權重和自己的持幣量成正比。投票和撤票可以隨時進行,在每一輪(round)選舉結束后,得票率最高的101(一般為101,也可以是其他數字,具體由區塊鏈項目方決定)個用戶則成為該項目的受托人,負責打包區塊、維持系統的運轉并獲得相應的獎勵。
選舉的根本目的,是通過每個人的投票選舉出社區里對項目發展和運行最有利的101個用戶。這101個用戶的服務器節點既可以高效維護系統的運轉,而他們也會貢獻自己的能力促進區塊鏈項目的發展,這有點類似于我國的‘人民代表’制度(但是周期更短、效率更高)。通過這種方式,既達到了去中心化的選舉共識,又保證了整個系統的運行效率和減少能源浪費。
三、DPoS的偽代碼實現
先來看一下DPoS的偽代碼實現:
for round i //分成很多個round,round無限持續dlist_i = get N delegates sort by votes //根據投票結果選出得票率最高的N個受托人dlist_i = shuffle(dlist_i) //隨機改變順序loop //round完了,退出循環slot = global_time_offset / block_intervalpos = slot % Nif dlist_i[pos] exists in this node //delegate在這個節點generateBlock(keypair of dlist_i[pos]) //產生blockelseskip偽代碼參考了用偽代碼理解DPoS
可以看到,在每一輪循環里,系統會重新統計得票排名。在選出最高的N個受托人里,系統采用先打亂順序,然后受托人依此生產區塊。一輪區塊生產完畢后進入下一個周期。
四、知名 DPoS 項目
1. Bitshares
最早應用DPoS機制的項目,其DPoS機制里包含見證人(Witnesses)和受托人(Delegates), 見證人負責區塊的打包,受托人負責系統參數的修改。
2. EOS
共識算法我DPoS + BFT, 有21個受托人。
3. Asch
共識算法為DPoS + PBFT, 有101個受托人, 目前正在開放競選。
參考:
Explain Delegated Proof of Stake Like I’m 5 – Hacker Noon
Delegated Proof of Stake (DPOS) vs Proof of Work (POW)
DPOS Consensus Algorithm - The Missing White Paper — Steemit
Delegated Proof-of-Stake Consensus - BitShares
Delegated Proof of Stake (DPOS) White Paper by Daniel Larimer
Explanation of DPoS+BFT
https://zhuanlan.zhihu.com/p/34107097
總結
以上是生活随笔為你收集整理的详解DPoS共识算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通俗易懂理解PBFT拜占庭容错的回答
- 下一篇: Paxos算法小结