EOS从入门到精通-设计背景与DPOS算法(文字稿)
大家好,非常感謝參加《EOS從入門到精通》系列課程,我是王巨。先跟大家匯報一下上周六試講的情況,上周6的試講已經(jīng)有6000多小伙伴參與了試聽,在此我非常感謝大家的信任。同時在試講的過程中大家反饋比較多的問題有兩個,一個是在講課的過程中好像是在一字一句的讀,第二個是每次發(fā)的語音時間都比較短。這個我解釋一下,我確實是一字一句讀的,為了保證課程的質(zhì)量,我現(xiàn)在大概會花費一整天的時間來準(zhǔn)備課程,同時我暫時不具備脫稿將整個課程講清楚的能力,因此我都會將我要講的內(nèi)容只字不差的寫成文字稿,然后再練習(xí)一遍,然后再在直播間中跟大家講一遍,為了能清楚準(zhǔn)確的表達(dá)我想要講的內(nèi)容,以我現(xiàn)在的能力大部分內(nèi)容只能讀文字稿,同時讀太多中途出錯的概率就會變大,我就只能縮短每次表達(dá)的時間了。后面我會盡最大努力來改善這種情況,同時在每節(jié)課之后幾天內(nèi)我會放出課程的文字稿供大家參考。
好的,我們開始我們的課程,從本節(jié)課開始,我們著重解讀EOS的官方文檔,今天解讀白皮書的第一二兩部分,區(qū)塊鏈應(yīng)用的要求和DPOS算法介紹。先簡單說一下EOS的背景,我們知道EOS主要開發(fā)人員是Dan Larimer江湖人稱Byte Master簡稱BM,在他開發(fā)EOS之前已經(jīng)有兩個成功的區(qū)塊鏈項目了,一個是去中心化的交易所BTS,一個是去中心化的社交平臺steamit,這兩個去中心化應(yīng)用都非常成功,提供了堪比中心化應(yīng)用的用戶體驗。雖然這兩個項目在成功后BM就退出了,但就我個人而言我是能理解BM為了自己的理想而放棄這兩個項目的行為。EOS就是大概率能實現(xiàn)BM部分理想的項目。
我們順著白皮書的思路看一下,一個區(qū)塊鏈應(yīng)用的需求 或者說 真實世界對區(qū)塊鏈應(yīng)用的要求,白皮書上說了6點,分別是:
支持大量用戶
免費使用
方便的升級和Bug修復(fù)
低延時
時序性能
并發(fā)性能
支持大量用戶大家都能理解,用戶數(shù)量其實是一切應(yīng)用的基礎(chǔ),對于一個應(yīng)用如果不能支持大量用戶,或同時使用的人多了網(wǎng)絡(luò)就擁堵這在用戶體驗上就是沒辦法接受的。所以支持大量用戶是一切DApp成功的前提。
免費使用,在上一講我也說過了,是否跟用戶收費是應(yīng)用服務(wù)商決定的,不是基礎(chǔ)平臺決定的。這點btc和eth做得都不好。當(dāng)然不將他們看成平臺,而只是看成一個區(qū)塊鏈應(yīng)用,那么他們收費也沒有問題。顯然EOS是奔著平臺的設(shè)計目標(biāo)去的。
方便的升級和Bug修復(fù),在講為什么之前,我們先看看現(xiàn)有區(qū)塊鏈升級和解決問題的方式:軟分叉和硬分叉。軟分叉在9月份之前比特幣上體現(xiàn)比較多,比如說曠工支持軟分叉,社區(qū)支持軟分叉,軟分叉就是在一段時間內(nèi)新舊代碼一起用,新舊代碼產(chǎn)生的塊都是相互認(rèn)可的,只是新代碼在某個舊代碼不關(guān)心的數(shù)據(jù)結(jié)構(gòu)中加了一個自己的標(biāo)識,實現(xiàn)新的邏輯。
硬分叉現(xiàn)在越來越多了,比如說:比特幣的各種兒子,對吧,這種硬分叉已經(jīng)不是為了解決實際問題了,基本都是利益驅(qū)動了,這里我們不去講。當(dāng)然最著名的一次硬分叉還是要屬eth,分叉的原因是由于合約漏洞,theDAO 項目眾籌的eth被盜,后來eth社區(qū)為了挽回?fù)p失將區(qū)塊進(jìn)行了回滾和硬分叉。講了這么多,大家發(fā)現(xiàn)了一個問題沒有,不管是硬分叉還是軟分叉,都有點像事后的補(bǔ)救措施,而事前沒有約定好遇到問題了應(yīng)該怎么解決。凡是軟件都會有Bug,這是不可避免的,而方便的升級和Bug修復(fù)理念會很好的解決這個問題。平臺本身應(yīng)該具備這種魯棒性以應(yīng)對這種不可避免的Bug。
低延時、時序性能、并發(fā)性能在上一節(jié)課中已經(jīng)大家講過了,這里再稍微說一下:
延時是用戶體驗殺手,現(xiàn)在的App用戶對延時的容忍度越來越低了,一旦延時高到用戶沒法接受的程度,那用戶就會放棄這款軟件。
再說一下時序性能,一些應(yīng)用因為順序依賴關(guān)系而不能使用并發(fā)算法實現(xiàn)。 比如交易所就需要足夠的時序性能來處理很高的交易量,因此高時序性能對于平臺來講是必須的。這其實體現(xiàn)的是平臺的縱向擴(kuò)展能力。
并發(fā)性能:這個不多說了,這體現(xiàn)的是平臺的橫向擴(kuò)展能力,平臺能否支持大量的應(yīng)用主要看平臺的并發(fā)處理能力,而且應(yīng)用之間相互之間不能存在性能依賴。
好了,區(qū)塊鏈應(yīng)用的需求我們就講到這里,下面講一下DPOS共識算法:
講到共識算法就不能不談一下拜占庭將軍問題,相信來聽EOS課程的同學(xué)大部分都是聽過比特幣課程的,一般比特幣課程講共識的時候都會講拜占庭將軍問題。我在這里簡單描述一下拜占庭將軍的問題,想象一下,在拜占庭時代有一個堅固的城邦,拜占庭,高墻之內(nèi)有多到它的鄰居無法想象的財富。它被其他10個城邦所環(huán)繞,這10個城邦也很富饒,但和拜占庭相比就微不足道了。它的十個鄰居都覬覦拜占庭的財富,并希望侵略并占領(lǐng)它。
但是,拜占庭的防御非常強(qiáng)大。任何單一城邦的入侵行動都會失敗,而入侵者的軍隊也會被殲滅,使得其自身容易遭到其他九個城邦的入侵和掠奪。這十個城邦之間也互相覬覦對方的財富并持續(xù)互相對抗著。而且,拜占庭的防御強(qiáng)大到,要十個鄰居的一半以上同時進(jìn)攻才能攻破它。
也就是說,如果六個或者更多的相鄰國家一起進(jìn)攻,他們就會成功占領(lǐng)拜占庭,并獲得拜占庭的財富。然而,如果其中有一個或者更多背叛了其他人,答應(yīng)一起入侵但在其他人進(jìn)攻的時候又不干了,也就導(dǎo)致只有五支或者更少的軍隊在同時進(jìn)攻,那么所有的進(jìn)攻軍隊都會被殲滅,并隨后被其他的(包括背叛他們的那(幾)個)鄰居所劫掠。這是一個由不互相信任的各方構(gòu)成的網(wǎng)絡(luò),但他們又必須一起努力以完成共同的使命。城邦不能聚到一起開會(分布式),同時各個城邦間可以可以進(jìn)行點對點通訊,大家可以想象一下,如果沒有共識協(xié)議那么城邦間的通訊是否能正常進(jìn)行?a說9點攻城,b不相信,說要10點開始最終所有的信息都變得不可信任、相互矛盾而完全沒有用處。
上面簡單的將問題說了一下,那比特幣的網(wǎng)絡(luò)是怎么解決在不互相信任的網(wǎng)絡(luò)中達(dá)成共識的呢?比特幣精妙的設(shè)計了一個工作量證明的機(jī)制,就是讓每個節(jié)點在記賬前完成大量的運算,然后再廣播全網(wǎng),全網(wǎng)節(jié)點收到后大家都認(rèn)可該節(jié)點的記賬。這就是POW共識算法的原理。
再說一下POS共識算法,該算法記賬權(quán)不是使用工作量證明,消耗的不是計算資源,消耗的是POS網(wǎng)絡(luò)內(nèi)的一個叫幣天的概念。幣天是什么意思呢?大概等于 持有的幣 乘以 在系統(tǒng)里面的未被使用的天數(shù)。幣天越大得到記賬權(quán)的概率也就越大,當(dāng)然記完賬之后你的幣還在,未被使用的天數(shù)會被清零。以上是POS共識算法的基本原理。
那POW和POS共識的缺點是什么呢?POW的算法決定了性能不會高,同時需要浪費大量的能源,做一些hash運算,而這些運算本身是沒有意義的。典型應(yīng)用比特幣和以太坊。同時現(xiàn)在挖礦已經(jīng)出現(xiàn)了大礦池算力過大的風(fēng)險。
POS相對于POW在性能上會有比較大的提高,當(dāng)然提高也是相對的,對于一個應(yīng)用平臺來講這是遠(yuǎn)遠(yuǎn)不夠的。缺點主要是來做于系統(tǒng)內(nèi)貧富差距會被拉大的問題。
我們再來看看DPOS算法的介紹,這部分會根據(jù)白皮書重點講一下:
DPOS算法目前來看 是唯一能滿足區(qū)塊鏈之上 應(yīng)用性能需求 的 去中心化共識算法。
在這種算法下,區(qū)塊鏈上持有Token的人可以通過投票系統(tǒng)選擇區(qū)塊生產(chǎn)者,當(dāng)然任何人也都可以選擇參與區(qū)塊生產(chǎn),并有機(jī)會生產(chǎn)與總票數(shù)成正比的區(qū)塊。 對于私有鏈,管理員可以使用Token來添加和刪除IT人員。
DPOS協(xié)議一般規(guī)定每3秒產(chǎn)生一個區(qū)塊,為什么是3秒,這可能是基于當(dāng)時的性能需求的考慮認(rèn)為3秒時間已經(jīng)非常短了,Github上顯示EOS的開發(fā)團(tuán)隊正在測試亞秒級的區(qū)塊生產(chǎn),將區(qū)塊的生產(chǎn)效率進(jìn)一步提升。目前EOS使用的還是3秒產(chǎn)生一個區(qū)塊。
DPOS算法一般規(guī)定,區(qū)塊生產(chǎn)者的個數(shù)為21個或101個,也可以是其他的數(shù)量。目前EOS使用的數(shù)量是21。由 21 名生產(chǎn)者輪流產(chǎn)生新的區(qū)塊。
在一般情況下,一個 DPOS 區(qū)塊鏈不會經(jīng)歷任何的分叉,因為被選舉出來的區(qū)塊生產(chǎn)者是通過合作而非競爭的方式來生產(chǎn)區(qū)塊。 即便真的出現(xiàn)了分叉,共識也將自動的切換到最長的鏈上。
區(qū)塊添加到一個區(qū)塊鏈分叉的速率與公用同一共識的區(qū)塊生產(chǎn)者比例是相關(guān)的。 換句話說,具有更多生產(chǎn)者的區(qū)塊鏈分叉會比擁有較少生產(chǎn)的那一個條增長的速度更快。 而且,沒有一個生產(chǎn)者會同時在兩個分叉上同時生產(chǎn)區(qū)塊。 如果一個區(qū)塊生產(chǎn)者被抓到做這樣的事兒,那么這個生產(chǎn)者將被投票投出。
交易確認(rèn)
典型的DPOS區(qū)塊鏈 100% 有區(qū)塊生產(chǎn)者參與。一個交易從廣播開始后平均 1.5 秒就可以 99.9% 被認(rèn)為是確認(rèn)了。為什么是1.5s而不是3s我這點也還沒想明白。等我們提高篇開課時會將該問題討論清楚。
在一些特殊情況下會有例外,比如,軟件出現(xiàn) bug,網(wǎng)絡(luò)擁塞,或一個惡意的區(qū)塊生產(chǎn)者制造了兩個或更多的分叉。 為了確保一個交易絕對是不可逆的,一個節(jié)點可以選擇等待 21 個區(qū)塊生產(chǎn)者中的 15 個給出確認(rèn)。一般情況這個過程平均需要 45 秒的時間。 默認(rèn)情況下,所有的節(jié)點將認(rèn)為當(dāng) 21 個生產(chǎn)者中有 15 個給出確認(rèn)后這一區(qū)塊就是不可逆的了,并且不管長度如何都不會切換到?jīng)]有這一區(qū)塊的分叉。
在分叉開始的 9 秒內(nèi),一個節(jié)點就可以警告用戶他們極可能正處于分叉中。 在連續(xù)丟失 2 個區(qū)塊后,有 95% 的概率可以確認(rèn)一個節(jié)點處于分叉中。 在連續(xù)丟失 3 個區(qū)塊后就有 99% 的概率確認(rèn)。
講了這么多,DPOS共識的優(yōu)點和缺點是什么呢?
主要優(yōu)點就是超高性能,這是其他算法沒辦法匹敵的,僅這一點,再對應(yīng)到EOS的設(shè)計目標(biāo),EOS在共識算法的選擇上就不會有其他的選項。那為什么會有這么高的性能呢?我們可以看到在一個記賬周期內(nèi)參與記賬的見證人是固定的,這就避免了找節(jié)點記賬帶來的時間損耗。從實際運行情況來看bts、steamit以及在公信寶都是落地項目,已經(jīng)穩(wěn)定運行非常長的時間了,證明該算法經(jīng)得起時間的考驗。
再說一下競爭對手經(jīng)常被批評DPOS的中心化風(fēng)險:
對比一下POW算法與POS算法,DPOS默認(rèn)使用21個節(jié)點來產(chǎn)生區(qū)塊,看起來比比特幣和以太坊的成千上萬個節(jié)點少太多了,從數(shù)量上看DPOS算法絕對有中心化的嫌疑,但是真實情況如何呢?POW算法的比特幣算力前三的礦池占算力接近50%,POS算法會有拉大貧富差距的嫌疑,幣會越來越想富人身上聚集。所以目前來看,POW和POS并沒有解決趨向于中心化的問題。而DPOS算法從算法層面定義了一個分布范圍,21個活躍節(jié)點,當(dāng)然還有非常多的沒有記賬權(quán)的節(jié)點等待接班。只要節(jié)點作惡就會被投票出局,因此其設(shè)計上中心化的風(fēng)險反而相對比較低。
好了今天的課程就到這里,總結(jié)一下今天講了兩方面的內(nèi)容:區(qū)塊鏈應(yīng)用的需求以及共識算法簡介。區(qū)塊鏈應(yīng)用需求分別是:支持大量用戶、免費使用、方便的升級和Bug修復(fù)、低延時、時序性能、并發(fā)性能。共識算法簡介介紹了:POW算法、POS算法、重點介紹了DPOS算法,介紹了這些算法的優(yōu)點與缺點。
非常感謝大家的參與,現(xiàn)在大家可以就上面的話題提出問題,我會選一些能回答的問題跟大家共同討論。謝謝大家。
作者:王巨
鏈接:https://www.jianshu.com/p/0bad616c48df
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
總結(jié)
以上是生活随笔為你收集整理的EOS从入门到精通-设计背景与DPOS算法(文字稿)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EOS经济系统分析[转载]
- 下一篇: EOS从入门到精通-账户体系(文字稿)