在进行下面的阅读之间,需要科普一下什么是tendermint。

tendermint是一种共识框架,主要用来解决区块链系统中的共识的问题。常见的共识方式有很多,比如比特币的POW机制,以太坊的POS机制,EOS的DPOS机制,PBFT,PAXOS,RAFT等。

我们介绍的tendermint是基于PBFT的一种共识框架。下面用一张图来说明tendermint实现的PBFT的共识的原理。
pbft原理.jpeg
如上图所示,tendermint中的PBFT需要有一下几个流程:

  • 一个peer提出自己的propose,然后传递出去
  • 其他的节点接收到当前的propose,然后进行投票处理,也就是图中所示的prevote,如果节点发现当前的propose有多于2/3的验证节点同意的话,则完成对该propose的prevote工作,进入下一轮。如果没有收到数据(也就是说收到的数据是nil)那么则直接对nil进行prevote操作。
  • 如果当前的propose已经完成了超过2/3的节点的prevote的话,则进入porecommit的过程,如果没有超过2/3的prevote或者超时,则对nil进行precommit
  • 等待接收到超过2/3的precommit,如果已经接收到的话,则进行commit,如果没有收到超过2/3的precommit的话,则放弃当前的propose,然后在原来的高度上开始新的一轮propose,同时更新当前的共识的round数据。

经过prevote和precommit,则进入commit阶段,此时的tendermint通过ABCI(Applicaton Blockchain Interface)接口将自己的收到的propose消息发送给app,然后app进行相关的验证工作,则实现一个区块的工作。