http://www.7klian.com

Tendermint BFT 拜占庭协议安详性阐明 | Sperax 专栏

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.pdf

6. 以后之后,,节点 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) 计较机系终身传授,德国海德堡大学得到博士学位。
拜占庭共鸣已经无法满意本日公链和同盟链的安详需求-区块律动 BlockBeats
    (a) OnTimeoutPropose(h, r): 广播 ⟨PREVOTE, h, r,nil⟩ 并配置 step = prevote.

该文章的阐明结论是 Tendermint BFT 共鸣协议在异步网络里是不安详的。我们在本文,简朴的先容我们设计了在异步网络里对 Tendermint BFT 协议的进攻步伐。为了简化我们的描写,我们假定系统有 n=3+1=4 个节点 P1,P2, P3, P4。个中节点 P1 被进攻者节制。别的我们假定 round 0 的提倡人是 P1。我们的进攻在 round 0 展开:

        ●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 什么时候开始,没人知道。

    (b) OnTimeoutPrevote(h, r): 广播 ⟨PRECOMMIT, h, r,nil⟩ 并配置 step = precommit

我们以上的进攻是在异步网络的 GST 之前是可以展开的。所以当网络进入同步后,由于各个节点所锁定的值差异,所以系统一直无律例复运行。

-Yongge Wang. Byzantine Fault Tolerance in Partially Connected Asynchronous Networks

⟨PROPOSAL, h, r, v, vr⟩

    ◎r=0 或 validV=nil: Pi 选择她本身的提议 v 并置 vr=−1。

在前一篇文章中我们阐明白 PBFT
拜占庭协议的安详性问题。本日我们探讨别的一个被系统遍及利用的 Tendermint BFT 拜占庭协议的安详性问题。Tendermint BFT 拜占庭协议可以认为是 PBFT 拜占庭协议的改造版。据最新的统计,Tendermint BFT 拜占庭协议被高出 40% 的 PoS 区块链所利用(参阅 Jae Kwon 最近的演讲:Tendermint powers 40%+ of all proof-of-stake blockchains )。好比,公链 Cosmos(常被称为「Internet of Blockchain」)和同盟链 Hyperledger burrow 都利用了 Tendermint BFT 拜占庭协议。我们的阐明是基于以下论文中的 Tendermint BFT 协议:

    ◎Pj 从 Pi 收到的⟨PROPOSAL, h, r, v, vr⟩中 vr >−1 可是 Pj 尚未收到 2t+1 个

1.propose: 提倡人 Pi = proposer(h, r) 区分一下两种景象:

PBFT 拜占庭协议安详性阐明:不适合同盟链或公链-区块律动 BlockBeats

    ◎每当处于 prevote 状态的节点 Pj 收到 2t + 1 个动静 ⟨PREVOTE, h, r, ∗⟩,Pj 初始化超时计数器函数 OnTimeoutPrevote(h, r)。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读