想知道更多關於區塊鏈技術知識,請百度【鏈客區塊鏈技術問答社區】 鏈客,有問必答!!
EOS在初版白皮書中使用的DPOS共識機制,而在新一版的白書中,對共識機制進行了改進,使用BFT+DPOS混合共識機制。使出塊速度從原來的3秒變爲0.5秒,tps顯著提升,達到測試3590次/秒。算法
EOS初版共識機制DPOS
EOS如今系統運行的鏈用的共識機制是初版白皮書的,也就是純DPOS共識機制。
DPOS即受權權益證實共識機制。相比於比特幣的POW機制,DPOS不用浪費算力資源去爭奪記帳權,而是經過賦予EOS通證持有人的投票選舉,選出21個超級節點擔任記帳人的角色,保證整個網絡的正常運行。值得一提的是,人們的投票所佔的比重取決於他們持有多少token。這意味着擁有更多token的人將比擁有極少token的人更多地影響網絡。這其實很好理解,由於持有網絡的運行的好壞會對持有更多token的人的利益產生更大的影響,這使得他們的投票更謹慎。
21個超級節點輪流負責記帳。每輪都會隨機打亂他們的出塊順序,每一個超級節點做爲出塊節點時,只負責出一個塊。每個區塊產生後會按照順序傳遞給下一個超級節點中。第二個超級節點要負責打包新的區塊,同時還要確認上一個區塊的內容。當某一個區塊被超過2/3的超級節點確認後,則該區塊將成爲不可逆轉區塊,即上鍊區塊。網絡
該算法有些地方明顯須要改良。好比容易出現漏塊現象。21個超級節點分佈世界各地,若是隨機打亂順序,致使老是依次順序的節點相距地理位置很遠,如中國和美國,這兩國的網絡傳輸單向時間是300毫秒,一來一回總共600毫秒。那麼中國這邊出塊,而後通過其餘20個節點確認後返回,假設時間總共是4秒;而接下來美國出塊,反饋回來的時間是3秒,比中國快1秒,確定是先上鍊的,結果中國出的塊就被丟棄掉了。當前目前設的出塊時間是3秒,理論上可以解決這種漏塊現象,但想提升eos的性能,這塊確定是要改進的。性能
EOS最新版共識機制BFT-DPOS
BFT即拜占庭容錯算法。EOS引入這個算法,主要是賦予出塊節點更大的權力,加快出塊速度,解決節點出的塊都被漏掉的問題。區塊鏈
EOS共識算法的升級,勢必須要超級節點們更新代碼,使用新的程序,而後在當前鏈上繼續運行。但若是超過1/3的節點拒絕更新代碼,可能會出現硬分叉問題。因此如何很好地作好過渡是EOS最大難題。測試
咱們一塊兒分析下改進後的共識機制是如何工做的。code
EOS使用BFT+DPOS共識機制後,再也不按照出塊順序讓超級節點一個個驗證區塊內容,而是讓出塊節點成爲主節點。出塊後,同時向其餘20個超級節點進行廣播該區塊,並得到他們的驗證。若是超過2/3的節點驗證經過後,則該區塊將成爲不可逆轉區塊。token
BFT可使EOS出塊速度顯著增長。目前使用BFT+DPOS共識機制的EOS,能夠實現0.5秒的出塊速度,1秒實現區塊的不可逆轉。爲避免因出塊速度過快而漏塊,EOS的超級節點按照其餘的地理位置依次輪流成爲主節點,儘量減小超級節點的網絡延遲。好比超級節點有中國、美國、加拿大、日本,那麼成爲主節點的順序是中國>日本>美國>加拿大或者反過來,總之保證相鄰最近的超級節點要依次交接主節點角色。資源
同時規定每一個主節點連續生產6個區塊,至少保證6個區塊的前幾個能確認完成,不存在整個超級節點被跳過的現象。能夠看出每輪記帳節點的出塊總時間仍是3秒鐘,在這3秒裏,由於他對他本身出的塊是信任的,因此能夠持續出塊。一邊出塊一邊廣播,3秒以內率先廣播的區塊確定可以獲得確認,在網絡通暢的狀況下,6個區塊都會可能獲得確認。社區
EOS共識處理分叉問題很是簡單,和比特幣同樣,節點只會承認最長的鏈做爲合法鏈。假如某個節點開始做惡,本身出塊並生成本身的鏈,也就是每次輪到它就產生6個塊。可是超級節點總共21個,每輪產生理論126個塊。根據選擇最長鏈做爲主鏈原則,確定做惡的鏈得不到承認。因此EOS不會發生分叉問題。比特幣