每個(gè)區(qū)塊鏈協(xié)議都使用一個(gè)共識(shí)算法來維護(hù)一個(gè)區(qū)塊鏈。區(qū)塊鏈場景中最著名的是來自比特幣的中本共識(shí)(Nakamoto consensus),它基于工作量證明(Proof of Work, PoW)。它只以概率的方式獲得最終結(jié)果,從而實(shí)現(xiàn)了很大程度的分散,其中多個(gè)分支可以相互競爭,并隨著時(shí)間的推移逐漸演變?yōu)橐粋€(gè)分支。另一個(gè)極端是源于傳統(tǒng)拜占庭協(xié)議(BA)。它們通過限制分散化的程度來保證即時(shí)的塊結(jié)果。
Aergo的DPoS共識(shí)主要是介于上述兩者之間的中間地帶。它將生成區(qū)塊的特殊權(quán)利委托給一組經(jīng)過選舉產(chǎn)生的區(qū)塊生產(chǎn)者(BPs),同時(shí)允許在有限范圍內(nèi)進(jìn)行重組。根據(jù)PoS共識(shí)和只保留有限數(shù)量的BPs,它解決了性能問題以及基于功率共識(shí)中發(fā)現(xiàn)的過度能耗問題。
本文詳細(xì)介紹了在Aergo區(qū)塊鏈中實(shí)現(xiàn)的DPoS。在本文的剩馀部分中,除非另有說明,否則“DPoS”指在Aergo區(qū)塊鏈中實(shí)現(xiàn)的DPoS。
Aergo上的DPoS
塊生產(chǎn)
在DPoS中,只有有限數(shù)量?節(jié)點(diǎn),稱為有源組件生產(chǎn)商(BPs),允許生成模塊。它們是通過利益相關(guān)者之間的投票過程選出的。時(shí)間被均勻地劃分為槽,對(duì)于每個(gè)槽,最多生成一個(gè)塊?;顒?dòng)BPs通過投票得分在這些插槽上進(jìn)行調(diào)度,并輪流生成區(qū)塊。
為了簡單起見,讓我們考慮一個(gè)BPs活動(dòng)的例子,它們分別是按投票得分遞減順序排列的A、B、C和D。塊間隔是1秒。如果一切正常,區(qū)塊鏈將繼續(xù)執(zhí)行,如圖1所示。
圖1:正常生產(chǎn)情況下的塊生產(chǎn);
每個(gè)盒子里的字母是塊的制造者。這里,每個(gè)BP每4秒生成一個(gè)塊。但是,當(dāng)前一個(gè)塊沒有及時(shí)接收到時(shí),下一個(gè)BPs應(yīng)該生成它。例如,假設(shè)A生成塊“1”,然后B在生成塊“2”之前崩潰。在這種情況下,C應(yīng)該來生成塊“2”,而不是B來生成塊2。
圖2:當(dāng)B崩潰時(shí)阻塞生產(chǎn)
由于B沒有與槽“1”、“5” 碰撞對(duì)應(yīng)的塊,使得塊在時(shí)間上分布不均勻;塊“1”和塊“2”之間的時(shí)間間隔大約是正常塊(1s)的兩倍(2s)。
分叉
另一方面,DPoS允許像比特幣一樣進(jìn)行分叉和重組。假設(shè)B由于網(wǎng)絡(luò)故障而與其他BPs斷開連接。即使在這種情況下,B和其他(A、C、D)也不會(huì)停止塊生產(chǎn)。它們各自管理自己的區(qū)塊鏈,如圖3所示。
圖3:分叉由網(wǎng)絡(luò)分割引導(dǎo);B和(A, C, D)相互斷開
注意主鏈上的槽“1”和“5”是空的,因?yàn)椋ˋ, C, D)網(wǎng)絡(luò)分裂沒有接收到B產(chǎn)生的塊。
B管理的下鏈?zhǔn)莻?cè)鏈,因?yàn)樗攘硪粭l短;當(dāng)主鏈的高度達(dá)到7時(shí),側(cè)鏈的高度仍然只有3。因此,根據(jù)最長鏈規(guī)則,一旦網(wǎng)絡(luò)問題解決,主鏈的塊被發(fā)送到B, B就知道它的鏈比另一個(gè)短。最后,它將遵循主鏈(重組)。
終結(jié): 最后一個(gè)不可逆塊
如果一個(gè)塊連接到一個(gè)區(qū)塊鏈,它可以被看作是鑄造塊本身。在此基礎(chǔ)上,提出了最后不可逆塊(LIB)的概念。一旦一個(gè)塊變成了一個(gè)庫,任何超出它的重組都是被禁止的。因此,保證了庫和之前的塊的終結(jié)性。在正常情況下,除了初始引導(dǎo)期外,庫會(huì)不斷更新到更高的數(shù)字。
從技術(shù)上講,庫的確定分為兩個(gè)階段:
1. 當(dāng)大多數(shù)(?+)BPs附加了區(qū)塊鏈,其中第一個(gè)可以自由的被提出。
2. 當(dāng)從另一個(gè)大多數(shù)BPs中添加塊時(shí),所提議的庫最終成為一個(gè)終結(jié)庫。
最初,一個(gè)集團(tuán)的投票范圍沒有限制。換句話說,連接到鏈的塊被認(rèn)為是為塊本身和所有父塊投票。然而,后來改變是避免沖突的LIBs3。在修改后的版本中,BP X生成的塊只確定了BP X最后生成的塊之后的范圍。
圖4:最后一個(gè)不可逆塊
如圖4所示,確定在一個(gè)4 BPs的案例中。這是一個(gè)4 BPs的DPoS網(wǎng)絡(luò)案例;它的多數(shù)票是3票。在這種情況下,在決定自由民主黨的每個(gè)階段,分別需要3個(gè)基點(diǎn)的贊成票才能達(dá)成共識(shí)。因此,如圖3所示,當(dāng)塊“3”連接到鏈(第1階段)時(shí), 塊“1”就成為一個(gè)被提議的LIB。然后,當(dāng)添加塊“5”時(shí)(第二階段),塊“1”最終被提升到一個(gè)LIB。在正常情況下,一旦一個(gè)塊被最終確定為一個(gè)庫,每當(dāng)連接一個(gè)新塊時(shí),庫的高度就會(huì)繼續(xù)增加1;一個(gè)新的塊伴隨一個(gè)新的庫。
押注、投票及選舉
活躍的BPs由Aergo用戶選出。盡管用戶限制為每天1票,但參與投票的人可以自由地投給多個(gè)候選人(最多30人)。此選舉方案如圖5所示。在這里,在“700”處的BPs是根據(jù)在“600”(而不是“700”)處收集的排名來選擇的。它的目的是降低重組所導(dǎo)致的不必要政權(quán)更迭的可能性,因?yàn)檫^去的區(qū)塊比最近的區(qū)塊更不可能進(jìn)行重組。
圖5。BPs的選舉計(jì)劃
到目前為止,通過一個(gè)由4BPs組成的簡單系統(tǒng)示例,我們已經(jīng)解釋了DPoS的工作原理。它的主要成分是:
· 由有限數(shù)目的選出的BPs
· 只有在有限的塊范圍內(nèi)才能進(jìn)行重組。
前者保證了區(qū)塊生產(chǎn)的快速性和穩(wěn)定性,而后者則保證了只要大多數(shù)BPs處于正常運(yùn)行狀態(tài),區(qū)塊具有絕對(duì)終結(jié)性。通過它們,DPoS可以在交易結(jié)束程度適中的情況下實(shí)現(xiàn)高性能。這種性能和最終結(jié)果之間的平衡是我們選擇DPoS作為Aergo 主網(wǎng)共識(shí)的最重要因素之一。
評(píng)論
查看更多