EOS从入门到精通-设计背景与DPOS算法(文字稿)
大家好,非常感謝參加《EOS從入門到精通》系列課程,我是王巨。先跟大家匯報一下上周六試講的情況,上周6的試講已經有6000多小伙伴參與了試聽,在此我非常感謝大家的信任。同時在試講的過程中大家反饋比較多的問題有兩個,一個是在講課的過程中好像是在一字一句的讀,第二個是每次發的語音時間都比較短。這個我解釋一下,我確實是一字一句讀的,為了保證課程的質量,我現在大概會花費一整天的時間來準備課程,同時我暫時不具備脫稿將整個課程講清楚的能力,因此我都會將我要講的內容只字不差的寫成文字稿,然后再練習一遍,然后再在直播間中跟大家講一遍,為了能清楚準確的表達我想要講的內容,以我現在的能力大部分內容只能讀文字稿,同時讀太多中途出錯的概率就會變大,我就只能縮短每次表達的時間了。后面我會盡最大努力來改善這種情況,同時在每節課之后幾天內我會放出課程的文字稿供大家參考。
好的,我們開始我們的課程,從本節課開始,我們著重解讀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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
以上是生活随笔為你收集整理的EOS从入门到精通-设计背景与DPOS算法(文字稿)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EOS经济系统分析[转载]
- 下一篇: EOS从入门到精通-账户体系(文字稿)