bc: Tendermint: 共識概覽

fix pic of

https://blog.csdn.net/simple_the_best/article/details/77198837

content:

Tendermint 是一個易於理解,大部分操作爲異步的 BFT 共識協議。下圖是一個簡單的狀態機,它展示了協議遵循的規則:

在這裏插入圖片描述
協議中的參與者叫着 “驗證人”(validator)。他們輪流對交易區塊進行提議,並對這些區塊進行投票。區塊會被提交到鏈上,每一個塊佔據一個“高度”(height)。提交塊可能會失敗,如果失敗,協議就會開始下一輪的提交,並且一個新的驗證人會繼續提交那個高度的區塊。要想成功提交一個塊,需要有兩個階段的投票:“預投票”(pre-vote)和“預提交”(pre-commit)。在同一輪提交中,只有超過 2/3 的驗證人對同一個塊進行了預提交,這個塊才能被提交到鏈上。

上圖右下角有一對夫婦在跳波卡舞,因爲驗證人做的事情就像是在跳波卡舞。當超過 2/3 的驗證人對同一個塊進行了預投票,我們就把它叫做一個“波卡”(polka)。每一個預提交都必須被同一輪中的一個波卡所證明。

由於一些原因,驗證人可能在提交一個塊時失敗:當前提議者可能離線了,或者網絡非常慢。Tendermint 允許他們證實一個驗證人應該被跳過。在進行下一輪的投票前,驗證人會等待一小段時間從提議者那裏接收一個完整的提議塊。這種對於超時的依賴,使得 Tendermint 成爲了一個弱同步協議,而非一個異步協議。但是,協議的剩餘部分都是異步的,只有在接收到超過 2/3 的驗證人集合時,驗證人才會採取下一步操作。Tendermint 能夠簡化的一個原因就是它使用了同樣的機制來提交一個塊和跳過直接進入下一輪。

基於不到 1/3 的驗證人是拜占庭節點的前提,Tendermint 保證了永遠都不會違背其安全性 – 也就是說,驗證人永遠不會在同一高度提交衝突塊。爲了達到這一點,它引入了一些 “鎖定”(locking)的規則,這些規則對流程圖中的路徑進行了模塊化。一旦一個驗證人預提交了一個塊,它就被“鎖定”在了那個塊上。然後,

它必須爲被鎖定的那個塊進行預投票
只有在之後的輪中,有了那個塊的一個波卡,它才能夠解鎖,併爲一個新塊進行預提交。
Stake
在許多系統中,並非所有的驗證人都在共識協議有着同樣的“高度”(height)。因此,我們對 1/3 還是 2/3 的驗證人並不十分感興趣,而是關心在所有投票力量所佔的比例,在個體驗證人中,這些比例可能並不是均勻分佈的。

由於 Tendermint 可以複製任意的應用程序,定義一種貨幣,並用該貨幣來計算投票權力是完全有可能的。當使用貨幣決定投票權時,這個系統通常叫做權益證明(Proof-of-Stake)系統。通過應用邏輯,可以將驗證人的貨幣持有強制綁定到一個押金賬戶中。如果他們被發現在共識協議中表現不端,這些錢就會被銷燬。這就給協議的安全性增加了一個經濟因素,能夠讓人們量化違反共識假設的成本,這個假設就是隻有不到 1/3 的投票權來自拜占庭節點。

Cosmos Network 的設計目的,是在 實現爲 ABCI 應用的加密貨幣中使用這個權益證明機制。

本文譯自:Consensus Overview

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章