Skip to main content

One post tagged with "tower-bft"

View All Tags

· 9 min read
Davirain

在这篇博文中,我们将探讨 Tower BFT,这是 Solana 的 PBFT 自定义实现,它更喜欢活跃性而不是一致性。 Tower BFT 在达成共识之前利用 Solana 的 PoH 作为时钟,以减少消息传递开销和延迟。

info

为了提供活力,如果副本无法执行请求,则必须移动到新视图。然而,当至少 2f + 1 个无故障副本处于同一视图中时,最大化时间段非常重要,并确保这段时间呈指数增长,直到执行某些请求的操作

Solana 实现了 PBFT 的一种衍生,但有一个根本区别。历史证明(PoH)提供了达成共识之前的全球时间来源。我们的 PBFT 实现使用 PoH 作为网络时间时钟,并且副本在 PBFT 中使用的指数增长超时可以在 PoH 本身中计算和强制执行。

PoH 是一种可验证延迟函数,以顺序哈希函数的形式实现。我们使用 VDF 的松散定义,因为验证需要(计算时间)/(核心数量)。 PoH 工作的基本原理如下:

  1. Sha256 尽可能快地循环,使得每个输出都是下一个输入。
  2. 对循环进行采样,并记录迭代次数和状态。

记录的样本代表了编码为可验证数据结构的时间流逝。此外,该循环还可用于记录事件。

  1. 引用任何示例的消息都保证是在该示例之后创建的。

  2. 消息可以插入到循环中并与状态一起进行哈希处理。这保证了在下一次插入之前创建了一条消息。

这种数据结构保证了嵌入事件的时间和顺序,这一核心思想是 Solana 中所有主要技术优化的基础。

换句话说:想象一下你在一座岛上,一个瓶子漂过,里面有一个拇指驱动器。该驱动器上是 Solana PoH 分类账。仅使用 PoH 账本,您就可以计算网络中所有节点的状态。例如,如果对账本的投票尚未记录在最后 X 个哈希值中,则节点被视为失败。如果在过去的 X 个哈希中,对已签署验证消息的网络的绝大多数进行哈希处理,我们就可以认为账本是有效的。

  1. 检查此数据结构的所有节点将计算完全相同的结果,而不需要任何点对点通信。

  2. PoH 哈希唯一标识账本的该分叉;和

  3. 仅当验证投票消息所投票的 PoH 哈希值存在于账本中时,验证投票消息才有效。

这就引出了投票和 PBFT。由于账本本身可作为可靠的网络时钟,因此我们可以在账本本身中对 PBFT 超时进行编码。

  1. 投票以 N 个哈希超时开始。

验证者保证(通过削减)一旦对 PoH 哈希进行投票,验证者将不会投票给任何不是该投票子项的 PoH 哈希,至少 N 个哈希。

  1. 所有前任投票的超时时间加倍

为了使操作更易于管理,投票被限制在固定的哈希周期内,我们称之为时隙。我们对时隙的目标是代表 400 毫秒左右的哈希数。每 400 毫秒,网络就有一个潜在的回滚点,但随后的每一次投票都会使网络在展开该投票之前必须停滞的实时时间加倍。

想象一下,每个验证者在过去 12 秒内投票了 32 次。 12 秒前的投票现在有 232 个时隙的超时,即大约 54 年。实际上,这次投票永远不会被网络回滚。而最近的投票有 2 个时隙的超时,即大约 800 毫秒。随着新区块被添加到账本中,旧区块被确认的可能性越来越大,因为旧投票的时隙数量会在每个时隙或每 400 毫秒增加一倍。

请注意,虽然这听起来像是工作量证明中的概率最终性,但事实并非如此。一旦 2/3 的验证者对某个 PoH 哈希进行了投票,该 PoH 哈希就会被规范化,并且无法回滚。这与工作量证明不同,工作量证明中没有规范化的概念。

为了防止被网络其他部分锁定,每个验证者确保只有在看到绝大多数网络也在同一账本上投票时才进行投票。每个验证器都会监控祖先投票的超时时间何时超过预定义的阈值(例如从 5 到 10 分钟),并确保网络的绝大多数人已对包含该投票的分叉进行了投票。在实践中,验证者:

  1. 检查是否有绝大多数人对一个将承诺 10 分钟超时的插槽进行了投票

  2. 如果没有,请不要投票

那么在分区期间网络会发生什么并且超时实际上开始到期呢?

  1. 任何已过期的投票都会被清除

  2. 当且仅当孩子有相同的超时时,祖先的超时加倍

例如,让我们考虑当前超时的场景:

64, 32, 16, 8, 4, 2

如果验证者停止对 17 个插槽进行投票并再次投票,则验证者的超时结果将是:

64, 32, 2

还需要连续4次投票,所有祖先的暂停时间才会再次加倍。

64, 32, 4, 2

64, 32, 8, 4, 2

64, 32, 16, 4, 2

最后第四次投票将使所有超时加倍

128, 64, 32, 16, 8, 4, 2

这种方法允许网络连续传输区块,而不会导致账本停滞,直到绝大多数人观察到相同的账本。另一个值得注意的方面是,网络中的每个参与者都可以计算每个其他参与者的超时,而无需任何 P2P 通信。这就是 Tower BFT 异步的原因。

我们预计会有许多微分叉很快被丢弃。当验证者检测到多个分叉时,诚实的验证者会计算每个分叉的有效权益加权超时并选择最重的一个。仅针对达到 2³² 超时的投票生成验证者奖励。因此,验证者在最重的分叉之上进行投票是兼容激励的,因为具有最大量权益加权超时的分叉将为网络产生最大量的奖励。