Tendermint的學習

weixin_34075551發表於2018-03-02

簡介

什麼是Tendermint?

Tendermint是一個基於pBFT(實用拜占庭容錯)共識機制生成的狀態機,可用於在多臺機器安全一致地複製一個應用。安全指的是即使有多達 1/3 的機器出現任意故障的情況下, Tendermint 仍然能夠正常工作,這叫拜占庭容錯。一致指的是每一個正常工作的機器都會有著同樣的交易日誌,計算相同的狀態,這就是區塊鏈的特性。所以,用Tendermint實現的區塊鏈有高速和易用的特點。它主要有兩部分:Tendermint Core是實現共識機制部分,ABCI(Application Blockchain Interface)是一個支援多種語言寫智慧合約的程式介面。使用Tendermint,各種去中心化應用可以很容易的搭建底層區塊鏈。 現在Tendermint主要使用在Cosmos這個專案上。

主要文件
https://tendermint.readthedocs.io/en/master/introduction.html#consensus-overview

程式碼
Tendermint Core: https://github.com/tendermint/tendermint
ABCI: https://github.com/tendermint/abci

什麼是Cosmos?
Cosmos想做成一個區塊鏈的網際網路。只要是通過任何能快速達成終極共識的機制做成的區塊鏈,都可以加入Cosmos,在這個平臺上實現鏈與鏈之間的交易。Cosmos支援各種能快速達到終極共識的區塊鏈。BFT就是這樣一種鏈。Tendermint是它的主選,Cosmos中心鏈(Cosmos Hub)就是通過他來實現。

Tendermint共識演算法。

Tendermint實現的是POS權益證明,每個生成的區塊需要每個Validator投票決定。根據持幣量不同有不同的投票權重,也加入了對作惡節點的經濟懲罰機制。

Tendermint使用的pBFT來對協議達成共識。這個演算法分三步,propose,prevote,precommit。(這和Zilliqa是類似的。)

propose階段
參加協議的節點(Validator)輪流提出一個區塊發給所有其他節點。

prevote階段
所有節點對區塊驗證並進行投票。超過2/3的節點同意。去第三步,超過1/3的反對,回到第一步,由新的Validator提出新區塊。

precommit階段
所有節點通知Validator自己同意使用新節點。超過2/3的節點同意,區塊就正式生效並加到鏈上。

Tendermint vs. Casper

另外一個知名的POS,叫Casper共識。這是選定的將來在以太坊上實現的POS共識。Tendermint和Casper最大的區別是:
Tendermint使用pBFT,所以每次選出來的塊都有最終確定性,不會有分叉,這樣能達到共識安全。但是也有達不成共識使得鏈停滯不前的隱患。
Casper考慮更多的是可用性而非一致性,所以使用的是基於鏈的權益證明,它每次選出來塊都是最長的鏈上的一個塊,然後進行投票。這樣還是會有分叉的存在。當然Casper還在不斷髮展中,也為了配合以太坊的逐步升級做了一些調整。現在是一個PoW和PoS的混合體。將來會慢慢發展成一個真正的POS協議。

總結一下,所有的pBFT演算法,都是由單一的節點發起新區塊,區塊的最終決定還是要投票決定。但是發起節點不固定,這樣就不會成為外部攻擊目標。如果發起節點固定,那就成了dPOS,類似EOS那種。dPOS的區塊發起節點是一個超級節點,要抵押很多的代幣,才能得到這個權益。他們都是不差錢的金主,也有足夠的資金和足夠的理由來保護他們的節點伺服器不受外部攻擊。

相關文章