以太坊DPoS實踐及開源DPoS分析
BFTF技术社区联盟
2018-08-10 06:09
本文约1433字,阅读全文需要约6分钟
美圖如何基於以太坊實現DPoS 的共識算法?同時比較分析其他的一些開源DPoS 實現。

圖片描述

圖片描述

圖片描述

美圖雲事業部系統研發工程師,主要工作內容包括美圖區塊鍊和雲直播。

編者按:本文來自BFTF技術社區聯盟,作者:BFTF技術社區聯盟,經授權發布。

 

本次演講主要分成四部分,第一部分簡單介紹以太坊的基礎架構,第一部分概述目前幾種共識算法,第三部分是美圖以太坊DPoS的實踐,最後再對比EOS中的DPoS。


以太坊的基本結構如圖,包含了對外的HTTP接口,共識算法模塊,EVM,存儲模塊等。


其中交易處理模塊,節點收到交易後,保存到交易池中,打包過程中從交易池中獲取滿足條件的交易。發生塊回滾等操作,已經打包的交易會被重新放入交易池中。


以太坊的賬號餘額數據是存儲在由Patricia Trie 和Merkle Trie 組成的(MPT)樹上,主要利用Patricia Trie 的特性實現賬號餘額的快速查找和Merkle Trie 來證明交易是否被篡改過。


PoW通過滿足一定的工作量證明達到共識,這是一個經過比特幣和以太幣長期考驗的共識算法,但需要消耗大量的計算資源,且交易的QPS較低。 PoS是通過引入持有者的權益來完成隨機數查找,用戶擁有的資產越多,那麼就找到正確隨機數的概率也會越大。 PoS存在賬本分叉,長距離攻擊,幣齡攻擊等問題。 DPoS被認為是PoS 的改進版本,DPoS 通過每隔一段時間進行一次選舉,然後由這些選舉出來的節點來負責出塊和互相監督驗證,這樣就可以大大降低出塊以及塊確認的時間。


算法實現主要包含兩個核心部分:塊驗證人選舉,塊驗證人調度。


在以太坊要增加一個共識算法,就是需要實現共識Engine所定義的接口。


打包流程:礦工會定時通過CheckValidator 去檢查當前的validator 是否為當前節點,如果是的話則通過CreateNewWork 來創建一個新的打塊任務。


某個節點想要成為驗證人,首先要成為候選人,接著其他人才能對這個候選人進行投票。不管是投票還是成為候選人,對於節點來說其實都是一筆交易,之前的交易主要是轉賬或者合約調用,因此現在多增加幾種交易類型。


另外由於DPoS 為了避免每次選舉都從創世塊開始回放歷史數據,增加了幾個全局狀態樹用來記錄選舉和投票的狀態, 並把樹對應的root 存儲到塊頭。


選舉:判斷塊的周期;根據上個週期出塊的情況把一些被選上但出塊數達不到要求的候選人踢掉;截止到上一塊為止,選出票數最高的前N 個候選人作為驗證人;打亂驗證人順序。


當接收到一個新塊時,需要更新最後不可逆塊的信息;最後不可逆塊是被三分之二的節點確認的塊。

fast sync 模式下會直接丟棄廣播的塊,只有在進入full sync 之後才會接收。如果我們同時以默認同步方式(fast sync)啟動多個節點,由於節點之間出塊的頻率一樣導致所有節點都無法進入full sync 模式,節點之間同步的塊都會被丟棄。解決方案是創始節點以full sync 方式啟動。由於驗證人的信息在區塊體中保存,所以不能僅僅通過區塊頭來驗證一個區塊。

https://v.qq.com/x/page/o0736irezov.html 


BFTF技术社区联盟
作者文库