5. 在 round 0 的超时计数器逾期后(我们假定 GST 尚未达到),所有的节点进入高度为 h 的 round 1。
然后 Pi 广播如下的动静给所有的节点
3. precommit:
◎Pj 从 Pi 收到的⟨PROPOSAL, h, r, v, vr⟩中 vr = −1: 假如 lockedR = −1 或 validV =v,那么 Pj 对所有节点广播如下动静 ⟨PREVOTE,h,r,H(v)⟩。不然 Pj 对所有节点广播如下动静 ⟨PREVOTE,h,r,nil⟩。Pj 置 step = prevote。
4. 因为每个节点收到至多 1+1=2 个 pre-commit 动静,没有节点可以在 round 0 抉择高度为 h 的区块。
所有节点 Pj 初始化其超时计数器函数 OnTimeoutPropose(h, r)。6. 超时计数器函数:
Pj 置 step = prevote.
●假如 step = prevote,那么 Pj 置 lockedV = v, lockedR = r, 向所有节点广播动静 ⟨PRECOMMIT, h, r, H(v)⟩, 并配置 step = precommit。
-E. Buchman, J. Kwon, and Z. Milosevic. The latest gossip on BFT consensus. Preprint arXiv:1807.04938, 2018. https://arxiv.org/pdf/1807.04938.pdf6. 以后之后,,节点 P1 进入睡眠状态而且不在参加任何协议的执行。
可是我们所要留意的是,Tendermint BFT 固然利用了以上异步网络模子,可是它也有一个额为的很强的假设:
2. prevote: 所有在 step = propose 的节点 Pj 区分以下三种景象:
◎r>0 而且 validV¹nil:Pi 置 v=validV 并置 vr=ValidR
1. 在高度 h 的 round 0,P1 选择一个最小大概的正当区块 v 作为其提议。P1 对节点 P1,P2, P3 广播动静⟨PROPOSAL, h, 0, v, −1⟩。
◎每当处于 prevote 状态的节点 Pj 收到 2t + 1 个动静 ⟨PREVOTE, h, r, nil⟩,Pj 向所有节点广播动静 ⟨PRECOMMIT, h, r, nil⟩ 并置 step = precommit。
-所有的节点之间都有一个安详靠得住的点对点的通信渠道。也就是说,假如一个节点 A 向节点 B 发送一个动静。那么节点 B 必然会在 GST 之后的某个时间收到这个信息。
●Pj 配置 validV = v 和 validR = r。
2. 收到动静 ⟨PROPOSAL, h, 0, v, −1⟩后,P1 对节点 P2, P3 广播动静 ⟨PREVOTE, h, 0, H(v)⟩,节点 P2 和 P3 对所有的节点广播动静⟨PREVOTE, h, 0, H(v)⟩。节点 P1,P2, P3 配置 step = prevote。
◎o Pj 从 Pi 收到的⟨PROPOSAL, h, r, v, vr⟩中 vr >−1 而且 Pj 已经收到了至少 2t + 1 个⟨PREVOTE, h, vr, H(v)⟩:Pj 区分以下两种景象
Sperax 首席科学家王永革:PoS 有中心化的嫌疑,PoTR 是现今最好的办理方法
(c) OnTimeoutPrecommit(h, r): 进入高度为 h 的 round r + 1。
Tendermint BFT 的作者称其协议是在异步网络里安详的。在前边文章中,我们提到过,常用的异步网络是用如下的模子来刻画的:
7. 如果 round 1 的提倡人是 P2(或 P3),P2 对所有的节点广播动静 ⟨PROPOSAL, h, 1, v, 0⟩。因为节点 P4 在 round 0 收到了至多 t + 1 个对 v 的 provote 动静,因此在超时计数器逾期之前 P4 什么都不做。因此没有厚道的节点可以收到足够多的 prevote 动静让协议进入下一步。在 round 1 的超时计数器逾期后(我们假定 GST 尚未达到),所有的节点进入高度为 h 的 round 2。
8. 如果 round 1 的提倡人是 P4, P4 对所有的节点广播动静 ⟨PROPOSAL, h, 1, v′, −1⟩。因为节点 P0 在 round 0 选取了最小的正当区块 v,在已往的一段时间,新的生意业务已经被提交,所有在很或许率状况下,v′和 v 是纷歧样的。因此节点 P2 与 P3 不会接管 v′,而是对所有的节点广播动静⟨PROVOTE, h, 1, nil⟩。在 round 1 的超时计数器逾期后(我们假定 GST 尚未达到),所有的节点进入高度为 h 的 round 2。
5. 自动 round 更新: 在任何时候假如节点 Pj 收到 t + 1 个 round r′ > r 的动静,那么 Pj 自动进入到 round r′。
作者:王永革传授,著名华裔暗码学家,北卡罗来纳大学夏洛特分校 (UNC, Charlotte) 计较机系终身传授,德国海德堡大学得到博士学位。 ●lockedR ≤ vr 或 lockedV = v:Pj 对所有节点广播如下动静 ⟨PREVOTE, h, r, H(v)⟩ 3. 节点 P2 和 P3 收到 2 + 1=3 个动静 ⟨PREVOTE, h, 0, H(v)⟩。所以节点 P2 和 P3 配置 lockedV = v, lockedR = 0, step = precommit, validV = v, validR = 0。然后节点 P2 和 P3 向所有节点广播动静 ⟨PRECOMMIT, h, 0, H(v)⟩。 9. 这样的进程将一直一连下去。所有高度为 h 的区块永远无法生成。系统进入死轮回。 这是个很强的假设。好比说,在这个模子里,DoS 进攻一般是不被答允的。本日我们来阐明 Tendermint BFT 协议。我们的阐明功效是:纵然在如上很强的网络假设下,Tendermint BFT 也不是安详的。在阐明其安详性之前,我们先给出其协议的形式化描写。 ⟨PREVOTE,h,vr,H(v)⟩:Pj 什么都不做。 ●不然 Pj 对所有节点广播如下动静 ⟨PREVOTE,h,r,nil⟩ -存在一个 Global Stabilization Time (GST),在 GST 之前,任何动静大概丢失(好比 DoS 进攻),或被从头排序。在 GST 之后,网络变为同步网络。GST 什么时候开始,没人知道。 我们以上的进攻是在异步网络的 GST 之前是可以展开的。所以当网络进入同步后,由于各个节点所锁定的值差异,所以系统一直无律例复运行。 -Yongge Wang. Byzantine Fault Tolerance in Partially Connected Asynchronous Networks ⟨PROPOSAL, h, r, v, vr⟩ ◎r=0 或 validV=nil: Pi 选择她本身的提议 v 并置 vr=−1。 ◎Pj 从 Pi 收到的⟨PROPOSAL, h, r, v, vr⟩中 vr >−1 可是 Pj 尚未收到 2t+1 个 1.propose: 提倡人 Pi = proposer(h, r) 区分一下两种景象: ◎每当处于 prevote 状态的节点 Pj 收到 2t + 1 个动静 ⟨PREVOTE, h, r, ∗⟩,Pj 初始化超时计数器函数 OnTimeoutPrevote(h, r)。 郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
拜占庭共鸣已经无法满意本日公链和同盟链的安详需求-区块律动 BlockBeats
(a) OnTimeoutPropose(h, r): 广播 ⟨PREVOTE, h, r,nil⟩ 并配置 step = prevote.