EOS從入門到精通-設計背景與DPOS算法

先簡單說一下EOS的背景,我們知道EOS主要開發人員是Dan Larimer江湖人稱Byte Master簡稱BM,在他開發EOS之前已經有兩個成功的區塊鏈項目了,一個是去中心化的交易所BTS,一個是去中心化的社交平臺steamit,這兩個去中心化應用都非常成功,提供了堪比中心化應用的用戶體驗。雖然這兩個項目在成功後BM就退出了,但就我個人而言我是能理解BM爲了自己的理想而放棄這兩個項目的行爲。EOS就是大概率能實現BM部分理想的項目。

我們順着白皮書的思路看一下,一個區塊鏈應用的需求 或者說 真實世界對區塊鏈應用的要求,白皮書上說了6點,分別是:

支持大量用戶
免費使用
方便的升級和Bug修復
低延時
時序性能
併發性能

支持大量用戶大家都能理解,用戶數量其實是一切應用的基礎,對於一個應用如果不能支持大量用戶,或同時使用的人多了網絡就擁堵這在用戶體驗上就是沒辦法接受的。所以支持大量用戶是一切DApp成功的前提。

免費使用,在上一講我也說過了,是否跟用戶收費是應用服務商決定的,不是基礎平臺決定的。這點btc和eth做得都不好。當然不將他們看成平臺,而只是看成一個區塊鏈應用,那麼他們收費也沒有問題。顯然EOS是奔着平臺的設計目標去的。

方便的升級和Bug修復,在講爲什麼之前,我們先看看現有區塊鏈升級和解決問題的方式:軟分叉和硬分叉。軟分叉在9月份之前比特幣上體現比較多,比如說曠工支持軟分叉,社區支持軟分叉,軟分叉就是在一段時間內新舊代碼一起用,新舊代碼產生的塊都是相互認可的,只是新代碼在某個舊代碼不關心的數據結構中加了一個自己的標識,實現新的邏輯。

硬分叉現在越來越多了,比如說:比特幣的各種兒子,對吧,這種硬分叉已經不是爲了解決實際問題了,基本都是利益驅動了,這裏我們不去講。當然最著名的一次硬分叉還是要屬eth,分叉的原因是由於合約漏洞,theDAO 項目衆籌的eth被盜,後來eth社區爲了挽回損失將區塊進行了回滾和硬分叉。講了這麼多,大家發現了一個問題沒有,不管是硬分叉還是軟分叉,都有點像事後的補救措施,而事前沒有約定好遇到問題了應該怎麼解決。凡是軟件都會有Bug,這是不可避免的,而方便的升級和Bug修復理念會很好的解決這個問題。平臺本身應該具備這種魯棒性以應對這種不可避免的Bug。

低延時、時序性能、併發性能在上一節課中已經大家講過了,這裏再稍微說一下:
延時是用戶體驗殺手,現在的App用戶對延時的容忍度越來越低了,一旦延時高到用戶沒法接受的程度,那用戶就會放棄這款軟件。
再說一下時序性能,一些應用因爲順序依賴關係而不能使用併發算法實現。 比如交易所就需要足夠的時序性能來處理很高的交易量,因此高時序性能對於平臺來講是必須的。這其實體現的是平臺的縱向擴展能力。
併發性能:這個不多說了,這體現的是平臺的橫向擴展能力,平臺能否支持大量的應用主要看平臺的併發處理能力,而且應用之間相互之間不能存在性能依賴。

好了,區塊鏈應用的需求我們就講到這裏,下面講一下DPOS共識算法:

講到共識算法就不能不談一下拜占庭將軍問題,相信來聽EOS課程的同學大部分都是聽過比特幣課程的,一般比特幣課程講共識的時候都會講拜占庭將軍問題。我在這裏簡單描述一下拜占庭將軍的問題,想象一下,在拜占庭時代有一個堅固的城邦,拜占庭,高牆之內有多到它的鄰居無法想象的財富。它被其他10個城邦所環繞,這10個城邦也很富饒,但和拜占庭相比就微不足道了。它的十個鄰居都覬覦拜占庭的財富,並希望侵略並佔領它。
但是,拜占庭的防禦非常強大。任何單一城邦的入侵行動都會失敗,而入侵者的軍隊也會被殲滅,使得其自身容易遭到其他九個城邦的入侵和掠奪。這十個城邦之間也互相覬覦對方的財富並持續互相對抗着。而且,拜占庭的防禦強大到,要十個鄰居的一半以上同時進攻才能攻破它。

也就是說,如果六個或者更多的相鄰國家一起進攻,他們就會成功佔領拜占庭,並獲得拜占庭的財富。然而,如果其中有一個或者更多背叛了其他人,答應一起入侵但在其他人進攻的時候又不幹了,也就導致只有五支或者更少的軍隊在同時進攻,那麼所有的進攻軍隊都會被殲滅,並隨後被其他的(包括背叛他們的那(幾)個)鄰居所劫掠。這是一個由不互相信任的各方構成的網絡,但他們又必須一起努力以完成共同的使命。城邦不能聚到一起開會(分佈式),同時各個城邦間可以可以進行點對點通訊,大家可以想象一下,如果沒有共識協議那麼城邦間的通訊是否能正常進行?a說9點攻城,b不相信,說要10點開始最終所有的信息都變得不可信任、相互矛盾而完全沒有用處。

上面簡單的將問題說了一下,那比特幣的網絡是怎麼解決在不互相信任的網絡中達成共識的呢?比特幣精妙的設計了一個工作量證明的機制,就是讓每個節點在記賬前完成大量的運算,然後再廣播全網,全網節點收到後大家都認可該節點的記賬。這就是POW共識算法的原理。

再說一下POS共識算法,該算法記賬權不是使用工作量證明,消耗的不是計算資源,消耗的是POS網絡內的一個叫幣天的概念。幣天是什麼意思呢?大概等於 持有的幣 乘以 在系統裏面的未被使用的天數。幣天越大得到記賬權的概率也就越大,當然記完賬之後你的幣還在,未被使用的天數會被清零。以上是POS共識算法的基本原理。

那POW和POS共識的缺點是什麼呢?POW的算法決定了性能不會高,同時需要浪費大量的能源,做一些hash運算,而這些運算本身是沒有意義的。典型應用比特幣和以太坊。同時現在挖礦已經出現了大礦池算力過大的風險。
POS相對於POW在性能上會有比較大的提高,當然提高也是相對的,對於一個應用平臺來講這是遠遠不夠的。缺點主要是來做於系統內貧富差距會被拉大的問題。

我們再來看看DPOS算法的介紹,這部分會根據白皮書重點講一下:

DPOS算法目前來看 是唯一能滿足區塊鏈之上 應用性能需求 的 去中心化共識算法。
在這種算法下,區塊鏈上持有Token的人可以通過投票系統選擇區塊生產者,當然任何人也都可以選擇參與區塊生產,並有機會生產與總票數成正比的區塊。 對於私有鏈,管理員可以使用Token來添加和刪除IT人員。
DPOS協議一般規定每3秒產生一個區塊,爲什麼是3秒,這可能是基於當時的性能需求的考慮認爲3秒時間已經非常短了,Github上顯示EOS的開發團隊正在測試亞秒級的區塊生產,將區塊的生產效率進一步提升。目前EOS使用的還是3秒產生一個區塊。
DPOS算法一般規定,區塊生產者的個數爲21個或101個,也可以是其他的數量。目前EOS使用的數量是21。由 21 名生產者輪流產生新的區塊。

在一般情況下,一個 DPOS 區塊鏈不會經歷任何的分叉,因爲被選舉出來的區塊生產者是通過合作而非競爭的方式來生產區塊。 即便真的出現了分叉,共識也將自動的切換到最長的鏈上。
區塊添加到一個區塊鏈分叉的速率與公用同一共識的區塊生產者比例是相關的。 換句話說,具有更多生產者的區塊鏈分叉會比擁有較少生產的那一個條增長的速度更快。 而且,沒有一個生產者會同時在兩個分叉上同時生產區塊。 如果一個區塊生產者被抓到做這樣的事兒,那麼這個生產者將被投票投出。

交易確認

典型的DPOS區塊鏈 100% 有區塊生產者參與。一個交易從廣播開始後平均 1.5 秒就可以 99.9% 被認爲是確認了。爲什麼是1.5s而不是3s我這點也還沒想明白。等我們提高篇開課時會將該問題討論清楚。
在一些特殊情況下會有例外,比如,軟件出現 bug,網絡擁塞,或一個惡意的區塊生產者製造了兩個或更多的分叉。 爲了確保一個交易絕對是不可逆的,一個節點可以選擇等待 21 個區塊生產者中的 15 個給出確認。一般情況這個過程平均需要 45 秒的時間。 默認情況下,所有的節點將認爲當 21 個生產者中有 15 個給出確認後這一區塊就是不可逆的了,並且不管長度如何都不會切換到沒有這一區塊的分叉。

在分叉開始的 9 秒內,一個節點就可以警告用戶他們極可能正處於分叉中。 在連續丟失 2 個區塊後,有 95% 的概率可以確認一個節點處於分叉中。 在連續丟失 3 個區塊後就有 99% 的概率確認。

講了這麼多,DPOS共識的優點和缺點是什麼呢?
主要優點就是超高性能,這是其他算法沒辦法匹敵的,僅這一點,再對應到EOS的設計目標,EOS在共識算法的選擇上就不會有其他的選項。那爲什麼會有這麼高的性能呢?我們可以看到在一個記賬週期內參與記賬的見證人是固定的,這就避免了找節點記賬帶來的時間損耗。從實際運行情況來看bts、steamit以及在公信寶都是落地項目,已經穩定運行非常長的時間了,證明該算法經得起時間的考驗。
再說一下競爭對手經常被批評DPOS的中心化風險:
對比一下POW算法與POS算法,DPOS默認使用21個節點來產生區塊,看起來比比特幣和以太坊的成千上萬個節點少太多了,從數量上看DPOS算法絕對有中心化的嫌疑,但是真實情況如何呢?POW算法的比特幣算力前三的礦池佔算力接近50%,POS算法會有拉大貧富差距的嫌疑,幣會越來越想富人身上聚集。所以目前來看,POW和POS並沒有解決趨向於中心化的問題。而DPOS算法從算法層面定義了一個分佈範圍,21個活躍節點,當然還有非常多的沒有記賬權的節點等待接班。只要節點作惡就會被投票出局,因此其設計上中心化的風險反而相對比較低。

好了今天的課程就到這裏,總結一下今天講了兩方面的內容:區塊鏈應用的需求以及共識算法簡介。區塊鏈應用需求分別是:支持大量用戶、免費使用、方便的升級和Bug修復、低延時、時序性能、併發性能。共識算法簡介介紹了:POW算法、POS算法、重點介紹了DPOS算法,介紹了這些算法的優點與缺點。



作者:王巨
鏈接:https://www.jianshu.com/p/0bad616c48df
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章