Tower BFT:Solana实现的高性能PBFT算法

本文详细介绍了Solana区块链中的Tower BFT技术,它是一种基于PBFT的高性能实现,利用Proof of History(PoH)作为共识前的时钟,减少消息传递开销和延迟。文章还探讨了Tower BFT的工作原理、时间管理机制及其在Solana网络中的实际应用。

理解使 Solana 成为全球性能最佳区块链的 8 项关键技术之一

Solana 是全球性能最佳的无许可区块链。在 Solana 测试网 的当前版本中,由 200 个物理上独立的节点组成的网络在 GPU 运行时支持每秒超过 50,000 笔交易的持续吞吐量。实现这一目标需要引入多种优化和新技术的实施,其结果是网络容量的突破,标志着区块链发展的一个新阶段。

Solana 网络的实现依赖于 8 项关键创新:

在这篇博文中,我们将探讨 Tower BFT,这是 Solana 对 PBFT 的自定义实现,优先考虑活性而非一致性。Tower BFT 利用 Solana 的 PoH 作为共识的时钟,以减少消息开销和延迟。

“为了提供活性,如果副本无法执行请求,它们必须转移到新视图。然而,最大化至少 2f + 1 个非故障副本在同一视图中的时间段,并确保该时间段呈指数增长,直到某些请求的操作被执行,这一点非常重要。” (Practical Byzantine Fault Tolerance , Miguel Castro and Barbara Liskov)

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

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

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

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

  1. 引用任何样本的消息保证在该样本之后创建。
  2. 消息可以插入到循环中并与状态一起哈希。这保证了消息在下一次插入之前创建。

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

换句话说:想象你在一座岛屿上,一个瓶子漂过,里面有一个 U 盘。在这个驱动器上是 Solana 的 PoH 账本。仅使用 PoH 账本,你就可以计算网络中所有节点的状态。例如,如果在过去的 X 个哈希中没有记录对账本的投票,则认为节点失败。如果过去的 X 个哈希中,网络中大多数节点已经签署了验证消息,我们可以认为账本是有效的。

  1. 所有检查此数据结构的节点将计算出完全相同的结果,不需要任何点对点通信
  2. POH 哈希唯一标识了该账本的分叉;
  3. 验证投票消息只有在它投票的 POH 哈希存在于账本中时才有效。

这让我们进入投票和 PBFT。由于账本本身充当可靠的网络时钟,我们可以在账本本身中编码 PBFT 的超时。

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

验证者保证(通过削减)一旦为 PoH 哈希投了票,验证者在至少 N 个哈希内不会为任何不是该投票子项的 PoH 哈希投票。

2. 所有先前投票的超时时间翻倍。

为了使操作更易于管理,投票被限制在固定数量的哈希内,我们称之为槽。我们对槽的目标是代表大约 400ms 的哈希数量。每 400ms,网络有一个潜在的回滚点,但每个后续投票会使网络在展开该投票之前必须等待的实际时间翻倍。

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

需要注意的是,虽然这听起来像是工作量证明中的概率最终性,但并非如此。一旦 ⅔ 的验证者为某个 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³² 超时的投票生成。因此,验证者在最重的分叉上投票是激励兼容的,因为具有最大权益加权超时的分叉将为网络生成最大数量的奖励。

Solana 的验证者和社区:参加 Tour de SOL 并获得代币!

Solana 的 Tower BFT 实现,连同历史证明(Proof of History)、复制证明(Proof of Replication)和 Gulf Stream 等创新,共同创建了全球性能最佳的区块链。Solana 的测试网现已上线。你可以在 https://testnet.solana.com 上查看。出于成本考虑,我们只运行了少量节点。然而,我们已经在 AWS、GCE 和 Azure 的 23 个数据中心上的多个实例中启动,总计 200 多个物理上独立的节点(不在共享硬件上),以进行基准测试。

该运行时今天已正常运行,开发者现在可以在测试网上部署代码。开发者现在可以使用 C 语言构建智能合约,我们正在积极推进 Rust 工具链的开发。Rust 将成为 Solana 智能合约开发的旗舰语言。Rust 工具链作为 Solana Javascript SDK 的一部分已公开可用,我们正在进一步迭代软件开发套件。

Solana 即将启动一个公开测试版,鼓励验证者通过 Tour de SOL 运行节点 — 类似于 Cosmos 的 Stakes 游戏 — 挑战广大公众测试 Solana 网络的极限,同时赚取代币。

  • 原文链接: medium.com/solana-labs/t...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
anatolyyakovenko
anatolyyakovenko
江湖只有他的大名,没有他的介绍。