本文为万向区块链技术中心研究组撰写。
1. Tendermint简介
Tendermint被设计用于构建各种分布式应用,易于理解和使用,并且高效。
Tendermint基于状态机副本复制技术,适用于区块链的账本存储。它是BFT(拜占庭容错)的,能够容许不超过1/3 的拜占庭节点的存在,也就是说,在这个前提下,系统能够保证所有正常节点拥有相同的交易列表,并按相同的顺序执行交易,最终得到相同的状态。
Tendermint 包含两个主要的模块:
(1)共识引擎称作Tendermint Core, 用于保证各节点按相同的顺序记录相同的交易列表。
(2)应用接口称作Application BlockChain Interface,简称 ABCI 。ABCI允许开发者使用任意的编程语言和开发环境编写应用逻辑,例如交易的处理逻辑等。
通过将共识引擎与应用逻辑解耦,Tendermint 可以用于构建各种分布式应用,包括各种区块链等。例如
Cosmos、 Ethermint 和 Hyperledger Burrow 等都基于 Tendermint 共识引擎而构建。
2. Tendermint共识算法
本部分详细介绍Tendermint共识算法。 Tendermint共识算法属于拜占庭容错类的共识算法,在拜占庭节点数不超过 1/3的情况下,能够保证共识的安全性(safety)。严格来说,由于系统中 validator节点的投票权(voting power)可能不一样,因此,容错性更准确地说,是指拜占庭节点的投票权不超过 1/3。
2.1. Tendermint共识算法
2.1.1. 系统模型
系统中,节点分为两种类型:validator和非validator节点。
validator节点参与共识,也就是对区块(包含一批交易)进行共识,包括propose区块,对提议的区块进行投票。而非validator节点不参与共识,但会帮助传播区块和投票消息,以及相互同步状态等。
节点之间不一定两两相连,和一个节点直接相连的那些节点称作peers。
无论是validator节点,还是非validator节点,都包含与共识过程相关的一些状态,如区块链当前高度height,round,以及step等。
节点之间运行gossip协议,相互同步共识状态和区块链状态信息。
2.1.2. 状态机概览
2.1.2.1. 算法主体流程
Tendermint算法主流程如下所示: