Tendermint共识算法
1 Abstract
区块链作为一个去中心化的分布式记账本,最近几年取得了飞速发展。究其原因,去中心化让其更加可靠,去信任化让其更加安全。从根本而言,区块链是个大型的分布式数据库系统,在这个分布式系统中有着众多的参与节点,我们现在探究的就是如何让众多参与节点达成一个一致性结果。
共识算法可以分为两类,一类是Byzantine Fault Tolerance,也就是我们俗称的拜占庭容错算法,比较有代表性的有PBFT,PoW,PoS等。另一类是Fail-Stop Failure,也就是非拜占庭容错的共识算法,比较有代表性的有Paxos,Raft等。
今天我们着重介绍的是基于拜占庭容错的一个十分经典的共识算法----Tendermint[^1]
2 Introduction
算法分为共识阶段(加粗)和非共识阶段(非加粗)
NewHeigth->Propose->Prevote->Precommit->Commit
算法规定三个共识阶段是一个Round,一个块的提交可能要经过多个Round,从图中我们也可以看出,其分为多个阶段。
参与节点分为Validator节点和Non-Validator节点,Validator节点是负责参与共识的节点。
作为一种拜占庭容错算法,算法才用了2/3这个条件去限制整个过程,这种方式与PBFT类似。
A set of +2/3 of prevotes for a particular block or at (H,R) is called a proof-of-lock-change or PoLC for short.
from:https://github.com/tendermint/tendermint/wiki/Byzantine-Consensus-Algorithm
PoLC(Proof of Lock Change)表示的是在某个高度轮数(height,Round),对某个块的Prevote投票集合超过2/3,也就是Prevote的投票集。正是有了它的存在让Validator节点永远不可能在同一高度提交冲突块。详细的解释将会在第三部分中的Prevote阶段介绍。
3 Algorithm Details
首先,创世区块高度(Height=0),通过Round Robin[^2]随机选取一个Validator节点作为Proposal一个Block的节点,然后剩下的Validator节点对其进行投票。
下面分NewHeigth->Propose->Prevote->Precommit->Commit阶段阐述整个共识过程。
这里谈一下我自己的一点儿理解
Prevote和Pre