Tendermint plus 1

   我们首先从论文的角度来深度解析下此类BFT-POS算法,这是一个很有意思的提法。虽然在Tendermint自己的官网上写到自己是BFT算法,但业内认为是一个带有BFT特性的POS算法,到底是如何,所有现在从论文的角度来解析。
   《最新的gossip基于BFT共识》
   一句话介绍一下Tendermint协议:其通过依赖节点间的点对点gossip协议,对该主题的经典学术工作进行了现代化,并简化了BFT算法的设计。
   先从它的模型说起:
   A.模型
   网络层是gossip协议,所有节点不是对等连接,这点与比特币类似。
   半同步系统模型:如果一个正确进程P在t时刻收到一些消息m,所有正确的进程将在max{t, GST } + ∆之前收到m。

   B.状态机器复制
   复制协调。所有非故障副本接受和处理一样的请求序列。仅仅只有被客户端提出的请求被执行,Tendermint进程将询问服务是否请求合法的并仅处理合法的请求。

   C.共识算法
    •协议:没有两个正确的进程决定不同的值。
    •终止:所有正确的进程最终决定一个值。
    •有效性:决定的值是有效的,即它满足表示为valid()的预定义谓词。

   第三部分是具体算法
   1.提议者在每轮的映射对于所有节点来说都是已知的,可以通过函数proposer(h,round)来获得。提议者选择函数是加权循环法,其中过程与其投票权成比例地旋转。
   2.三种超时机制:提议超时、预投票超时和预提交超时。每一轮超时时间:timeoutX(r) = initT imeoutX +r ∗ timeoutDelta,在每一个新的高度重置。
   3.一共3轮通讯2轮投票:PROPOSAL消息是唯一携带交易集合区块信息的,PREVOTE和PRECOMMIT消息则携带一个小的恒定大小的值id。
   4. 每个进程在算法1中维护以下变量:step,lockedValue,lockedRound,validValue和validRound。
      step表示内部Tendermint状态机的当前状态。 
      lockedValue存储已发送PRECOMMIT消息的最新值(相对于轮数)。 
      lockedRound是进程发送PRECOMMIT消息的最后一轮,该消息非nil。正确的进程通过在发送id(v)的PRECOMMIT消息之前设置lockedValue = v和lockedRound = r来锁定轮r中的值v。
      validValue变量的作用是存储最新的可能决策值; 
      validRound是更新validValue的最后一轮。除了这些变量之外,进程还存储当前的共识实例(h_p,在Tendermint中称为height)和当前的轮数(round_p)并将它们附加到每个消息。最后,一个过程还存储了一系列decisions,decision_p(Tendermint假定一系列共识实例,每个高度一个)。
   5.共识过程
   如果外部有效函数对值v返回true,并且如果p未锁定任何值(lockedRound = -1)或p具有正确的进程p,则接受值v的提议(对于id(v)发送PREVOTE)锁定值v(lockedValue = v);如果建议的对是(v,vr≥0)并且正确的进程p锁定了某个值,则它将接受v,如果它是更新的可能决策值8,vr> lockedRoundp,或者如果是lockV alue = v(见第29行)。否则,正确的进程将通过发送带有nil值的PREVOTE消息来拒绝该提议。正确的进程将发送带有nil值的PREVOTE消息,以防timeoutP ropose到期(当正确的进程开始新一轮时触发)并且进程尚未在当前轮次中发送PREVOTE消息(参见第57行)。
   如果正确的进程收到针对id(v)的某些值v和2f + 1 PREVOTE消息的PROPOSAL消息,则它发送带有id(v)的PRECOMMIT消息。否则,它发送PRECOMMIT为零。正确的进程将发送带有nil值的PRECOMMIT消息,以防超时Prevote到期(当正确的进程发送PREVOTE消息并收到任何2f + 1 PREVOTE消息时启动)并且进程尚未在当前轮次中发送PRECOMMIT消息(见第65行)。正确的过程决定某个值v,如果它在某个轮次的r PROPOSAL消息中收到v和2f + 1 PRECOMMIT消息的id(v)(参见第51行)。为了防止算法阻塞并永远等待此条件成立,算法1依赖于超时Precommit。在进程收到当前轮次的任何2f + 1个PRECOMMIT消息集后触发。如果超时Precommit到期并且进程尚未确定,则该过程开始下一轮(参见第65行)。当正确的过程p决定时,它开始下一个共识实例(对于下一个高度)。 Gossip通信属性确保导致p决定的PROPOSAL和2f + 1 PREVOTE消息最终被所有正确的进程接收,因此他们也将决定。

   A.终止机制
   主要通过两个值来决定:validValue = v和validRound = r。由提议者使用,验证者收到提议和2/3+的预投票后修改这些值
   在好周期里,如果一个正确进程p在相同的round r中锁定一个值v,所有正确进程将更新validValue = v和validRound = r在此轮结束之前。

   Tendermint共识算法的证明

你可能感兴趣的:(Tendermint plus 1)