1.2.3 Tendermint Core
构建互联互通的Cosmos网络的蓝图令人兴奋,但切实构建区块链网络需要直面区块链开发中的诸多技术挑战。为了催生更多的应用专属区块链系统,需要消除区块链领域的创新障碍。针对这一问题,Tendermint团队构建了以Tendermint Core和Cosmos-SDK为核心的区块链开发框架。Cosmos Hub网络的客户端Gaia便是基于Tendermint Core和Cosmos-SDK构建的。Cosmos Hub主网上线以来的平稳运行,展示了Tendermint Core和Cosmos-SDK的可靠性。
Tendermint团队将区块链系统自下而上拆解为3层:对等网络通信层、共识协议层以及上层应用层。区块链系统的3层结构如图1-3所示。Tendermint Core中提供了对等网络通信层与共识协议层的实现,并抽象出区块链应用接口(application blockchain interface,ABCI)来完成共识协议层与上层应用层的互动。
图1-3 区块链系统的3层结构
- 对等网络通信层:对等网络通信,确保交易、区块、共识协议的消息能够快速地在整个网络内广播。
- 共识协议层:构建新的区块,并通过共识协议确保全网就区块内容(交易、上层应用状态等)达成共识。
- 上层应用层:根据共识协议层构建的区块,通过ABCI与上层应用交互,执行区块中的交易并完成上层应用的状态更新。
在这种分层结构中,共识协议层不关心交易的具体内容,而将所有的交易看作简单的字节切片。共识协议完成的主要任务,是在全网就交易的顺序达成共识。与以太坊类似,Tendermint Core要求上层应用状态更新是确定性的过程,即从相同初始状态开始,按照相同顺序处理交易之后,上层应用的状态在全网之间应保持一致。为了确保这种状态更新的一致性,共识协议层在利用区块就交易顺序达成共识之外,也会在区块中包含上层应用状态的“数字指纹”,确保在每个区块开始执行之前,全网对上层应用状态也达成了共识。
前文提到过,PoW 机制与中本聪共识协议带来的大量资源消耗以及效率低下等问题被广为诟病。随着区块链技术的演进,PoS机制与BFT共识协议的组合成为应对该问题的“良方”。然而PBFT共识协议存在通信复杂度大的问题,这导致其无法妥善处理区块链这种大规模分布式系统的情形。Tendermint团队在工程创新之外,也就该问题进行了理论创新:通过改进PBFT共识协议,构造了适用于区块链场景的Tendermint共识协议。基于BFT的Tendermint共识协议,在支撑几百个共识节点的情况下,依然可以实现秒级出块的速度。Tendermint共识协议逐块最终化(finality)的特性,既保证了区块链不会发生比特币或者以太坊中的重组事件,也实现了交易的秒级确认。
Jae Kwon在2014年开始Tendermint共识协议的研发,2015年Ethan Buchman参与进来一同进行相关协议和软件的开发,并最终构建了Tendermint Core的原型系统。BFT共识协议通常要求在执行一轮共识协议之前,要先确定协议的参与者(后文称之为验证者),Tendermint共识协议也不例外。但Tendermint Core并没有硬编码选择验证者的规则,而是通过适当的机制设计以及ABCI,为上层应用保留了更新验证者集合的权利。
Tendermint共识协议在每一轮共识协议执行开始前,都会有一个验证者成为新区块提案者(proposer),提案者通过打包交易构建新的区块,并通过对等网络将区块广播到全网。所有验证者根据收到的信息和自身状态就区块内容进行两阶段投票:预投票(prevote)和预提交(precommit)。Tendermint共识协议执行过程。投票可以投给新构造的区块,表示验证者认同该区块内容;也可以投给空值,表示验证者因为某种原因无法认同该区块的内容。对区块足够多的预投票(超过2/3),可以促使验证者进入下一阶段的投票过程;而针对区块足够多(超过2/3)的预提交,可以促使所有节点提交(commit)该区块。区块被提交之后,Tendermint Core的共识协议层通过ABCI与上层应用互动,完成区块内交易的处理,执行结果也通过ABCI返回给共识协议层。
为了支持上层应用的深度定制,Tendermint Core将共识协议层与上层应用的互动通过ABCI进行了抽象。通过将区块的执行过程合理划分为多个步骤,上层应用甚至可以定制筛选验证者的逻辑,赋予了应用专属区块链系统完全的自主权。基于ABCI开发上层应用,应用只需要实现特定的接口,就可以复用Tendermint Core提供的Tendermint共识协议以及对等网络通信。通过这种方式,应用开发者可以专注于上层应用的开发,由此应用专属区块链系统的开发周期从通常的几年缩短为几个月。