背景
上一章節(jié)已經(jīng)簡(jiǎn)單的介紹了EOS節(jié)點(diǎn)的共識(shí)流程日丹,下面舉例說明節(jié)點(diǎn)生產(chǎn)的區(qū)塊是如何達(dá)成共識(shí)的:
EOS共識(shí)分為兩個(gè)部分:
-?共識(shí)出備選不可逆塊:當(dāng)區(qū)塊有(2/3 + 1)個(gè)節(jié)點(diǎn)確認(rèn)后浙宜,則這個(gè)區(qū)塊被加入到備選不可逆塊列表中叁征。
-?從備選不可逆塊列表中選出最終的不可逆區(qū)塊:對(duì)備選不可逆列表中的塊進(jìn)行從小到大排序葛菇,取1/3處嚎研,即為最終的不可逆塊序號(hào)挨约,小于此序號(hào)的都認(rèn)為已成為不可逆塊叉橱。
1. 共識(shí)出備選不可逆塊
prduce block : 生產(chǎn)節(jié)點(diǎn)生產(chǎn)的區(qū)塊
confirm block : 生產(chǎn)節(jié)點(diǎn)要確認(rèn)的區(qū)塊(本地生產(chǎn)+接收到的塊)
accept block : 非生產(chǎn)節(jié)點(diǎn)接收到的區(qū)塊
plib : 加入到備選的不可逆塊序號(hào)
lib : 最終的不可逆區(qū)塊序號(hào)
下面的舉例不考慮網(wǎng)絡(luò)延遲導(dǎo)致的漏塊情況:
假如有A,B,C,D四個(gè)生產(chǎn)者按A->B->C->D順序出塊,每個(gè)節(jié)點(diǎn)出12個(gè)塊胖烛,eos啟動(dòng)后眼姐,此時(shí)A為生產(chǎn)者,A先出12個(gè)塊佩番,自己會(huì)把1-12的塊確認(rèn)一次众旗,并分別發(fā)給B,C,D,此時(shí)節(jié)點(diǎn)B,C,D只接收塊趟畏,即B,C,D每個(gè)節(jié)點(diǎn)上都有序號(hào)為1->12塊待確認(rèn)贡歧;
生產(chǎn)者切換到B后,B開始生產(chǎn)塊的序號(hào)為13->24赋秀,總共12塊利朵,此時(shí)B會(huì)把A發(fā)來的1->12的塊確認(rèn),并把自己生產(chǎn)的序號(hào)為13->24的塊確認(rèn)一次猎莲,并發(fā)給A,C,D,此時(shí)節(jié)點(diǎn)A生產(chǎn)的序號(hào)為1->12的塊被確認(rèn)兩次绍弟,收到序號(hào)為13->24的塊,節(jié)點(diǎn)C,D上有新接收的13->24的塊著洼,即有序號(hào)為1->24的塊待確認(rèn);
生產(chǎn)者切換到C后樟遣,C開始生產(chǎn)塊,生產(chǎn)塊的序號(hào)為25->36身笤,總共12塊豹悬,此時(shí)C會(huì)把A發(fā)來的1->12的塊和B發(fā)來的序號(hào)為13->24的塊確認(rèn),此時(shí)節(jié)點(diǎn)A生產(chǎn)的序號(hào)為1->12的塊已經(jīng)被確認(rèn)了三次展鸡,B生產(chǎn)的序號(hào)為13->24的塊已經(jīng)被確認(rèn)了兩次屿衅,C并把自己生產(chǎn)的序號(hào)為25->36的塊確認(rèn)一次,并發(fā)給A,B,D,此時(shí)A節(jié)點(diǎn)接收到序號(hào)為25->36的塊莹弊,即有序號(hào)為13->36的塊待確認(rèn);B節(jié)點(diǎn)接收到序號(hào)為25->36的塊涤久,即有序號(hào)為25->36的塊待確認(rèn); D節(jié)點(diǎn)接收到序號(hào)為25->36的塊涡尘,即有序號(hào)為1->36的塊待確認(rèn);
此時(shí)節(jié)點(diǎn)A生產(chǎn)的序號(hào)為1->12的塊被確認(rèn)了三次,因?yàn)橛兴膫€(gè)節(jié)點(diǎn)响迂,那么需要確認(rèn)(4*2/3 + 1 = 3)即需要被確認(rèn)三次考抄,即可成為備選不可逆塊。此時(shí)蔗彤,生產(chǎn)者為C川梅,序號(hào)為12的塊成為備選不可逆塊,會(huì)被加入到備選不可逆區(qū)塊列表中然遏;
生產(chǎn)者切換到D后贫途,依次按照此邏輯進(jìn)行共識(shí),序號(hào)為24的塊就會(huì)被加入到備選不可逆區(qū)塊列表中待侵;
生產(chǎn)者切換到A后丢早,依次按照此邏輯進(jìn)行共識(shí),序號(hào)為36的塊就會(huì)被加入到備選不可逆區(qū)塊列表中秧倾;
生產(chǎn)者切換到B后怨酝,依次按照此邏輯進(jìn)行共識(shí),序號(hào)為48的塊就會(huì)被加入到備選不可逆區(qū)塊列表中那先;
2. 從備選不可逆塊列表中選出最終的不可逆區(qū)塊
根據(jù)上面的描述农猬,可以知道C節(jié)點(diǎn)確認(rèn)出的備選不可逆塊序號(hào)為12,D節(jié)點(diǎn)確認(rèn)出的備選不可逆塊序號(hào)為24售淡,A節(jié)點(diǎn)確認(rèn)出的備選不可逆塊序號(hào)為36斤葱,B節(jié)點(diǎn)確認(rèn)出的備選不可逆塊序號(hào)為48;
此時(shí)勋又,備選不可逆塊列表中的內(nèi)容為:[12,24,36,48]苦掘,根據(jù)EOS中給出的算法,從小到大排序楔壤,取1/3處鹤啡,那么12為最終的不可逆塊序號(hào)。
總結(jié)
EOS共識(shí)需要理解以下三點(diǎn):
1.各個(gè)節(jié)點(diǎn)需要共識(shí)出備選不可逆塊蹲嚣。
2.從備選不可逆塊列表中選出最終的不可逆區(qū)塊递瑰。
3.一個(gè)區(qū)塊成為最終的不可逆塊序號(hào),經(jīng)過了2輪(2/3+1)的確認(rèn)隙畜。
鏈接