Tendermint:“新派”共識的代表

摘要:區塊鍊網絡共識算法的進步,代表著更高的效率和安全級別,在我們了解了比特幣的pow和以太坊以及其他鏈的pos共識之後,可以發現很多共識是從bft共識改進而來。不過,其中也有另一方向的創新者,就是 Tendermint, Tendermint最典型的代表是Cosmos以及使用Cosm …

區塊鍊網絡共識算法的進步,代表著更高的效率和安全級別,在我們了解了比特幣的pow和以太坊以及其他鏈的pos共識之後,可以發現很多共識是從bft共識改進而來。不過,其中也有另一方向的創新者,就是Tendermint, Tendermint最典型的代表是Cosmos以及使用Cosmos SDK創造的項目,還有例如Oasis這樣的網絡也使用Tendermint。

本文中,我們總結一下Tendermint的資料,用來整體了解。

Tendermint是用於在多台機器上安全且一致地複制的應用程序,其安全性表示為即使多達1/3的機器以任意方式發生故障,Tendermint也能正常工作;一致是指每台沒有故障的機器看到相同的事務日誌併計算相同的狀態。

容忍機器以任意方式發生故障(包括成為惡意)的能力被稱為拜占庭容錯(BFT)。區塊鏈技術對BFT進行改造為更強調點對點網絡和加密身份驗證。交易在塊中被批處理形成了一條鏈,這種區塊鏈數據結構實際上優化了BFT設計。

而Tendermint改進後可以稱為是一種易於理解的、異步的BFT共識協議。該協議遵循如下所示的簡單狀態機運行方式:

rrZdPC8GvZuWNvQx934dWygEoD1nQKxU20hDBEWd.png

其中協議的參與者稱為驗證者,他們輪流提出交易區塊並對其進行投票。塊在鏈中提交,每個高度都有一個塊。當一個區塊無法提交時,協議會進入下一輪,新的驗證者可以針對該高度再提出一個區塊。

成功提交區塊需要兩個階段的投票;稱為pre-vote和pre-commit。當超過2/3的驗證者在同一輪中為同一塊預先提交時,這個塊被提交。

圖示的右下角有一張一對夫婦在跳polka舞的照片,當超過三分之二的驗證者為同一個區塊預先投票時,稱之為polka。每個預先提交都必須在同一輪中通過一個polka來證明是合理的。

驗證者可能由於多種原因未能提交區塊,例如當前提議者可能離線,或者網絡可能很慢。 Tendermint允許他們確定應該跳過驗證者。因為驗證者等待時間的超時使Tendermint 成為弱同步協議,而不是異步協議。不過,協議的其餘部分是異步進行的,最終驗證者只有在收到超過三分之二的驗證者集的意見後才能取得進展。 Tendermint的一個簡化元素是它使用相同的機制來提交一個塊,就像它跳到下一輪一樣。

假設少於三分之一的驗證者是拜占庭的,Tendermint保證永遠不會違反安全性,即驗證者永遠不會在同一高度提交衝突的塊。為此,引入了鎖定規則,這些規則調節流程圖中可以遵循的路徑,一旦驗證者預先提交了一個區塊,它就會被鎖定在該區塊上。該驗證者必須為它鎖定的塊投票,並且如果在後面的一輪中有一個用於該塊的polka,該驗證者只能解鎖並預先提交一個新塊。

在軟件層面,Tendermint由兩個主要技術組件組成:區塊鏈共識引擎和通用應用程序接口。稱為Tendermint Core的共識引擎確保相同的交易以相同的順序記錄在每台機器上。應用程序接口,稱為應用程序塊鏈接口(ABCI),使交易能夠以任何編程語言處理。與其他預裝了內置狀態機的區塊鍊和共識解決方案不同,開發人員可以使用Tendermint可以對任何編程語言編寫的應用程序進行BFT狀態機複製。因此,可見Tendermint被設計為易於使用、易於理解、高性能且適用於各種分佈式應用程序。

Tendermint已經發展成為可以託管任意應用程序狀態的通用區塊鏈共識引擎。這意味著它可以用作其他區塊鏈軟件共識引擎的即插即用替代品。

Tendermint Core主要通過滿足ABCI的協議要求與應用程序通信。 Tendermint能夠通過在應用程序流程和共識流程之間提供一個非常簡單的API(即ABCI)來分解區塊鏈設計。

ABCI 由以下3 種主要的消息類型組成,它們從核心傳遞到應用程序。應用程序回復相應的響應消息。

DeliverTx消息,區塊鏈中的每筆交易都通過此消息傳遞。應用程序需要根據當前狀態、應用程序協議和交易的加密憑證來驗證通過DeliverTx消息接收到的每筆交易。然後,經過驗證的事務需要更新應用程序狀態。

CheckTx消息類似於DeliverTx,但僅用於驗證交易。 Tendermint Core 的內存池首先使用CheckTx檢查交易的有效性,並且僅將有效交易中繼給其對等方。 。

Commit消息用於計算對當前應用程序狀態的加密承諾,以放入下一個區塊頭中。

所以可以總結為,Tendermint Core中創建到應用程序的三個ABCI 連接;一種用於在內存池中廣播時驗證交易,一種用於共識引擎運行區塊提案,另一種用於查詢應用程序狀態。

Total
0
Shares
Related Posts