我們首先從論文的角度來深度解析下此類BFT-POS算法,這是一個(gè)很有意思的提法。雖然在Tendermint自己的官網(wǎng)上寫到自己是BFT算法,但業(yè)內(nèi)認(rèn)為是一個(gè)帶有BFT特性的POS算法,到底是如何,所有現(xiàn)在從論文的角度來解析。
《最新的gossip基于BFT共識(shí)》
一句話介紹一下Tendermint協(xié)議:其通過依賴節(jié)點(diǎn)間的點(diǎn)對(duì)點(diǎn)gossip協(xié)議,對(duì)該主題的經(jīng)典學(xué)術(shù)工作進(jìn)行了現(xiàn)代化,并簡(jiǎn)化了BFT算法的設(shè)計(jì)。
先從它的模型說起:
A.模型
網(wǎng)絡(luò)層是gossip協(xié)議,所有節(jié)點(diǎn)不是對(duì)等連接,這點(diǎn)與比特幣類似。
半同步系統(tǒng)模型:如果一個(gè)正確進(jìn)程P在t時(shí)刻收到一些消息m,所有正確的進(jìn)程將在max{t, GST } + ?之前收到m。
B.狀態(tài)機(jī)器復(fù)制
復(fù)制協(xié)調(diào)。所有非故障副本接受和處理一樣的請(qǐng)求序列。僅僅只有被客戶端提出的請(qǐng)求被執(zhí)行,Tendermint進(jìn)程將詢問服務(wù)是否請(qǐng)求合法的并僅處理合法的請(qǐng)求。
C.共識(shí)算法
?協(xié)議:沒有兩個(gè)正確的進(jìn)程決定不同的值。
?終止:所有正確的進(jìn)程最終決定一個(gè)值。
?有效性:決定的值是有效的,即它滿足表示為valid()的預(yù)定義謂詞。
第三部分是具體算法
1.提議者在每輪的映射對(duì)于所有節(jié)點(diǎn)來說都是已知的,可以通過函數(shù)proposer(h,round)來獲得。提議者選擇函數(shù)是加權(quán)循環(huán)法,其中過程與其投票權(quán)成比例地旋轉(zhuǎn)。
2.三種超時(shí)機(jī)制:提議超時(shí)、預(yù)投票超時(shí)和預(yù)提交超時(shí)。每一輪超時(shí)時(shí)間:timeoutX(r) = initT imeoutX +r ? timeoutDelta,在每一個(gè)新的高度重置。
3.一共3輪通訊2輪投票:PROPOSAL消息是唯一攜帶交易集合區(qū)塊信息的,PREVOTE和PRECOMMIT消息則攜帶一個(gè)小的恒定大小的值id。
4. 每個(gè)進(jìn)程在算法1中維護(hù)以下變量:step,lockedValue,lockedRound,validValue和validRound。
step表示內(nèi)部Tendermint狀態(tài)機(jī)的當(dāng)前狀態(tài)。
lockedValue存儲(chǔ)已發(fā)送PRECOMMIT消息的最新值(相對(duì)于輪數(shù))。
lockedRound是進(jìn)程發(fā)送PRECOMMIT消息的最后一輪,該消息非nil。正確的進(jìn)程通過在發(fā)送id(v)的PRECOMMIT消息之前設(shè)置lockedValue = v和lockedRound = r來鎖定輪r中的值v。
validValue變量的作用是存儲(chǔ)最新的可能決策值;
validRound是更新validValue的最后一輪。除了這些變量之外,進(jìn)程還存儲(chǔ)當(dāng)前的共識(shí)實(shí)例(h_p,在Tendermint中稱為height)和當(dāng)前的輪數(shù)(round_p)并將它們附加到每個(gè)消息。最后,一個(gè)過程還存儲(chǔ)了一系列decisions,decision_p(Tendermint假定一系列共識(shí)實(shí)例,每個(gè)高度一個(gè))。
5.共識(shí)過程
如果外部有效函數(shù)對(duì)值v返回true,并且如果p未鎖定任何值(lockedRound = -1)或p具有正確的進(jìn)程p,則接受值v的提議(對(duì)于id(v)發(fā)送PREVOTE)鎖定值v(lockedValue = v);如果建議的對(duì)是(v,vr≥0)并且正確的進(jìn)程p鎖定了某個(gè)值,則它將接受v,如果它是更新的可能決策值8,vr> lockedRoundp,或者如果是lockV alue = v(見第29行)。否則,正確的進(jìn)程將通過發(fā)送帶有nil值的PREVOTE消息來拒絕該提議。正確的進(jìn)程將發(fā)送帶有nil值的PREVOTE消息,以防timeoutP ropose到期(當(dāng)正確的進(jìn)程開始新一輪時(shí)觸發(fā))并且進(jìn)程尚未在當(dāng)前輪次中發(fā)送PREVOTE消息(參見第57行)。
如果正確的進(jìn)程收到針對(duì)id(v)的某些值v和2f + 1 PREVOTE消息的PROPOSAL消息,則它發(fā)送帶有id(v)的PRECOMMIT消息。否則,它發(fā)送PRECOMMIT為零。正確的進(jìn)程將發(fā)送帶有nil值的PRECOMMIT消息,以防超時(shí)Prevote到期(當(dāng)正確的進(jìn)程發(fā)送PREVOTE消息并收到任何2f + 1 PREVOTE消息時(shí)啟動(dòng))并且進(jìn)程尚未在當(dāng)前輪次中發(fā)送PRECOMMIT消息(見第65行)。正確的過程決定某個(gè)值v,如果它在某個(gè)輪次的r PROPOSAL消息中收到v和2f + 1 PRECOMMIT消息的id(v)(參見第51行)。為了防止算法阻塞并永遠(yuǎn)等待此條件成立,算法1依賴于超時(shí)Precommit。在進(jìn)程收到當(dāng)前輪次的任何2f + 1個(gè)PRECOMMIT消息集后觸發(fā)。如果超時(shí)Precommit到期并且進(jìn)程尚未確定,則該過程開始下一輪(參見第65行)。當(dāng)正確的過程p決定時(shí),它開始下一個(gè)共識(shí)實(shí)例(對(duì)于下一個(gè)高度)。 Gossip通信屬性確保導(dǎo)致p決定的PROPOSAL和2f + 1 PREVOTE消息最終被所有正確的進(jìn)程接收,因此他們也將決定。
A.終止機(jī)制
主要通過兩個(gè)值來決定:validValue = v和validRound = r。由提議者使用,驗(yàn)證者收到提議和2/3+的預(yù)投票后修改這些值
在好周期里,如果一個(gè)正確進(jìn)程p在相同的round r中鎖定一個(gè)值v,所有正確進(jìn)程將更新validValue = v和validRound = r在此輪結(jié)束之前。
Tendermint共識(shí)算法的證明
Tendermint plus 1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 在有添加或刪除tableview一行的時(shí)候,一般報(bào)這個(gè)錯(cuò)的原因都是,[tableView deleteRowsAt...
- 小伙伴們,對(duì)C語(yǔ)言編程有疑問的,可以加微信交流:poo_poo或者掃描我的頭像,驗(yàn)證時(shí)請(qǐng)注明是“知友” 之前在 C...
- 小伙伴們,對(duì)C語(yǔ)言編程有疑問的,可以加微信交流:poo_poo或者掃描我的頭像,驗(yàn)證時(shí)請(qǐng)注明是“知友” 一、題目描...
- 很多時(shí)候,我們聽歌,其實(shí)不是在聽歌,是在歌里面尋找自己的故事,讓自己的故事在發(fā)酵,生長(zhǎng),最終感動(dòng)自己,獨(dú)自帶著耳機(jī)...
- ? 請(qǐng)保持獨(dú)立 ? 最近看了《我的前半生》里面羅子君的悲傷婚姻之后,突然想起了一個(gè)小姐妹。 她是一個(gè),特別希望依靠...