Tower BFT: Solana的高性能PBFT实现

了解使Solana成为世界上性能最好的区块链的7项关键技术之一
Solana是世界上性能最好的非许可区块链。在Solana测试网的当前迭代中,当使用GPU运行时,由200个物理上不同的节点组成的网络支持每秒超过50,000个事务的持续吞吐量。要实现这一目标,需要实现一些优化和新技术,其结果是网络容量的突破,标志着区块链开发进入了一个新阶段。
有7项关键创新使得Solana网络成为可能:
历史证明 (POH):共识之前的时序;
Tower BFT: PoH -PBFT 的优化版本;
Turbine:区块传播协议;
Gulf Stream :内存池-快速事务转发协议;
Sealevel :并行智能合约运行时;
Cloudbreak :水平扩展的帐户数据库;
复制器 :分布式帐本存储
在这篇博客文章中,我们将探讨Tower BFT,这是Solana对PBFT的自定义实现,它更喜欢灵活性而不是一致性。Tower BFT利用Solana的PoH作为共识前的时钟,以减少消息开销和延迟。
为了提供灵活性,如果副本无法执行请求,它们必须移动到一个新视图。然而,重要的是要最大限度地延长这段时间,当至少2f + 1个没有错误的副本在同一视图中,并确保这段时间成倍增长,直到一些请求的操作执行为止”(实际Byzantine Fault Tolerance, Miguel Castro和Barbara Liskov)。
Solana是PBFT的衍生品,但有一个基本区别。历史证明(PoH)为达成共识提供了一个全球性的时间来源。PBFT的操作使用PoH作为网络时钟的时间,在PBFT中使用的副本的超时以指数递增时,可以在PoH本身中进行计算和强制执行。
PoH是一个可验证的延迟函数,实现为一个序列哈希函数。我们使用一个松散的VDF定义,因为验证需要(计算时间)/(内核数量)。PoH运作的基本原则如下:

Sha256的循环尽可能快,这样每个输出都是下一个输入。

对循环进行采样,并记录迭代次数和状态。
记录的样本表示编码表示可验证数据结构的时间的流逝。此外,此循环可用于记录事件。

引用任何示例的消息都保证在示例之后创建。
2.消息可以插入到循环中,并与状态一起哈希。这确保在下一次插入之前创建好一条消息。
这种数据结构保证了嵌入其中的事件的时间和顺序,并且这个核心思想是Solana中所有主要技术优化的基础。
换句话说:假设你在一个岛上,一个瓶子漂浮着,里面有一个U盘驱动器。在那个驱动器上是Solana PoH账本。仅使用PoH账本,您就可以计算网络中所有节点的状态。例如,如果没有在最后的X哈希表中记录对帐本的投票,则节点的操作被认为是失败的。如果在过去的X次哈希中哈希了已签名验证消息的网络的绝对多数,则可以认为账本是有效的。

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

PoH哈希唯一地标识账本的分支;和
3.验证投票消息只有在它所投票的PoH哈希出现在账本中时才有效。
这就引出了投票和PBFT。由于分类账本身作为一个可靠的网络时钟工作,我们可以在分类账本身中编码PBFT超时。

投票以N个哈希中的超时开始。
验证人保证(带有惩罚)一旦对PoH哈希进行了投票,验证人将不会对任何不是该投票的子级的PoH哈希进行投票,至少对n个哈希进行投票。

所有前任的暂停时间都增加了一倍。
为了使操作更易于管理,投票被限制在一个固定的哈希周期内,我们称之为时隙。我们对时隙的目标是表示约400ms的哈希数。每400ms,网络就有一个潜在的回滚点,但是每次后续的投票都会使网络在展开该投票之前必须停顿的实时时间增加一倍。
假设每个验证人在过去12秒内已经投票32次。投票12秒前有一个超时2³²时隙,约54年。实际上,这次投票将永远不会被网络取消。而最近一次投票的超时时间为2个时隙,即约800ms。随着新区块的加入,旧区块越来越有可能得到确认,因为每一个区块,或者说每400毫秒,旧区块的投票数量都会翻一番。
注意,虽然这听起来像共识机制中的概率终结,但它不是。一旦⅔验证人已经投票表决一些PoH哈希,这些PoH哈希是规范化的,不能回滚。这与共识机制不同,在共识机制中没有规范化的概念。
为了防止被锁在网络的其他部分之外,每个验证人确保只有当他们看到网络的绝对多数也在同一分类账上投票时,他们才会投票。每个验证人都监视上代投票的超时何时会超过预定义的阈值(例如从5分钟增加到10分钟),并确保网络的绝对多数都对包含该投票的分叉进行了投票。在实践中,验证人:

检查是否绝对多数已经对一个超时10分钟的时隙进行了投票

如果没有,就不要投票
那么在分区和超时期间,网络会发生什么情况呢?

任何已过期的选票都将被清除

当且仅当子节点具有相同的超时时,上代节点的超时将加倍
例如,让我们考虑一个场景,其中当前超时是:
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验证人和社区:参加Tour de SOL并获得代币!”
Solana对 Tower BFT的实现,以及历史证明、复制证明和Gulf Stream等创新,共同创造了世界上性能最好的区块链。Solana的测试网今天是实时的。您可以在http://explorer.solana.com/上看到它。出于成本考虑,我们只运行少数几个节点。但是,我们已经在许多实例上将它扩展到超过200个物理上不同的节点(不在共享硬件上),这些节点跨越了AWS、GCE和Azure上的23个数据中心,用于基准测试。
运行时今天运行正常,开发人员现在就可以在testnow上部署代码。开发人员现在可以在C语言中构建智能合约,我们正在积极地开发Rust工具链。Rust将成为Solana智能合约开发的旗舰语言。Rust工具链作为Solana Javascript SDK的一部分公开可用,我们正在进一步迭代软件开发工具包。
Solana将很快推出一个公开测试版,鼓励验证人通过Tour de SOL运行节点(类似于 Cosmos 的 Game of Stakes ),这向公众提出了一个挑战,即在测试Solana网络的极限的同时,还要为此获得代币。