Proof-of-History (PoH) 是 Solana 区块链提出的一种创新的共识机制,它并不是传统意义上的共识算法,而是一种利用加密哈希链来确定全局时间和交易顺序的技术。PoH 不仅仅通过哈希函数确保数据的完整性,还提供了一个无需节点间同步的可靠时间证明机制,从而提高区块链的效率和吞吐量。

本文将深入探讨 PoH 的核心概念、实现细节以及它如何与其他共识机制(如 Proof-of-Stake)结合使用,最终为 Solana 区块链提供高效、安全的交易处理能力。

一、核心概念:哈希链与时间证明

1. 加密哈希函数

PoH 的核心概念是通过一个连续的哈希链来生成时间证明。每个新区块的哈希值都依赖于前一个区块的哈希值,这样形成一个不可篡改的时间顺序链。PoH 使用加密哈希函数,尤其是 SHA-256,它是用于计算数据完整性的重要工具。给定一个输入 X,SHA-256 会输出唯一的哈希值 Y,任何对 X 的改动都会导致输出 Y 完全不同。

这种特性是 PoH 的关键,它确保了区块数据的顺序和完整性。

在 Solana 的 PoH 序列中,通过将每个区块的哈希值作为下一个区块哈希函数输入的一部分,形成一个链条,这样,任何变动都会改变区块的哈希值,确保数据的不可篡改性。

2. 时间戳的生成

PoH 通过链式哈希实现了时间证明。每个区块的哈希值不仅代表了区块的内容,还携带了时间信息,确保了区块之间的时间顺序。区块链网络中的节点无需依赖传统的时间同步协议,它们只需通过验证哈希链中的时间顺序来确认每个事件的发生顺序。

具体地,Solana 的实现是通过构造一个连续的哈希流(即 PoH 链)来实现“时间戳”功能。区块的顺序即为 PoH 链中的哈希流的顺序。因此,节点可以通过查看 PoH 链中的哈希值,快速确定一个区块的生成时间,而无需依赖外部时间源。

3. POH序列与SHA-256

Solana 的 PoH 序列使用 SHA-256 哈希算法来确保交易的顺序和完整性。举个例子,如果将交易打包成一个区块并生成相应的 SHA-256 哈希值,则区块内的交易顺序就被确定了。任何对交易的更改都会导致该区块的哈希值发生变化,而该哈希值又会成为下一个区块的输入,形成链条式的时间证明。

这个过程的核心就是 Proof of History:上一个区块的哈希值作为下一个区块哈希函数的一部分,通过哈希链不断地“证明”历史交易的顺序。

POH序列,图源:Solana白皮书

POH序列示意图,图源:Solana白皮书

二、PoH 的具体实现:哈希链的生成与验证

1. 区块生成过程

PoH 的区块生成过程由 Solana 网络中的领导者节点(Leader)负责。该节点从交易池中收集交易并将其排序,生成 PoH 链,最终创建新区块并广播给其他节点。

  1. 初始化哈希链:系统从一个初始的哈希值开始,这个哈希值可能是一个随机数或特定的时间戳。

  2. 生成新区块:领导者节点通过将前一个区块的哈希值与当前区块的数据(如交易信息)结合,使用 SHA-256 计算出新区块的哈希值。

  3. 广播新区块:生成的新区块会广播给网络中的其他节点,其他节点通过验证新区块的哈希值与前一个区块的哈希值的一致性来确保区块的有效性。

  4. 验证哈希链:每个节点验证新区块时,都会检查当前区块的哈希值是否依赖于上一个区块的哈希值,从而确保哈希链的顺序性和一致性。

交易Flow架构图,图源:Solana白皮书

2. PoH 时间验证机制

PoH 的时间验证与传统的时间同步协议(如 NTP)不同。通常,在区块链中,时间同步是通过各个节点交换时间戳来实现的。但是,PoH 的实现方式则是让每个新区块的哈希值与前一个区块的哈希值绑定,从而自动构建一个可信的时间线。

具体地,假设某个区块的时间戳为 T,该时间戳并不是由节点直接提供的,而是通过哈希链中的序列来确定。也就是说,区块的生成顺序(而非实际时间)决定了其时间戳。PoH 保证了即使网络中的节点时间不同,区块的时间顺序依然是可信的。

三、PoH 与 Proof-of-Stake (PoS) 的结合

PoH 并不是一个独立的共识机制,而是与其他共识机制(如 Proof-of-Stake)结合使用。在 Solana 中,PoH 与 PoS 结合,提供了一个高效的共识机制,能够确保区块的顺序性和时间验证。

1. PoH 与 PoS 的结合

在 Solana 网络中,PoS 负责选择验证者节点,这些节点通过锁定代币来获得生成新区块的机会,而 PoH 负责为区块生成提供时间戳。

  • PoS:确定了哪些节点有资格生成新区块。
  • PoH:为区块生成提供了时间验证,确保了区块的顺序性。

通过这种结合,Solana 可以高效且安全地生成和验证区块,避免了传统共识机制的性能瓶颈。

2. 领导者节点的选举与时间线

Solana 网络采用 Leader Rotation 机制周期性地轮换领导者节点,每个周期由 PoS 确定新的领导者节点,领导者节点负责通过 PoH 生成新区块并广播给其他节点。PoH 的连续性保证了时间的顺序性,领导者节点在每个时隙(slot)内生成并广播区块,不依赖其他节点的时间同步。

四、Leader节点与时间限制

为了避免单点故障,Solana 引入了时间限制机制。在 Solana 中,时间单位以 epoch 进行划分,每个 epoch 包含 432,000 个时隙(slot),每个时隙持续 400 毫秒。在每个时隙内,PoS 会分配一个新的领导者节点,该节点必须在 400 毫秒内完成区块的生成并广播,否则会跳过该时隙并重新选举新的领导者节点。

Leader选举机制,图源:Helius

通过这种机制,Solana 网络能够在每个时隙内保证新区块的生成,同时通过 PoH 保证了交易的历史顺序。

五、Tower BFT 共识机制

虽然 PoH 提供了高效的时间证明,但单靠 PoH 还不足以保证区块链的最终一致性和安全性。因此,Solana 使用了 Tower BFT 共识机制 来对区块进行最终的验证和达成共识。

Tower BFT(拜占庭容错共识协议)是 Solana 网络的核心共识机制之一,它基于传统的 BFT 共识算法,并且与 Proof-of-History(PoH)紧密结合,提供了一种高效、去中心化的方式来确保区块链网络的安全性和一致性。

1. Tower BFT 的基本原理

Tower BFT 协议是 BFT 共识算法的一种具体实现,核心理念是通过验证者节点的投票来达成共识。与传统的共识机制不同,Tower BFT 通过 PoH 提供的历史时间证明和哈希链来进行投票,避免了传统机制中的冗余数据和投票冲突。

在 Tower BFT 中,验证者的投票不仅仅是对区块的选择,它还作为交易的历史证明。每个区块的哈希值以及它与前一个区块的关联信息在整个网络中得到一致确认,确保了区块的顺序性和不可篡改性。

Tower BFT协议,图源:Helius

2. 投票机制与区块确认

在 Tower BFT 协议中,验证者节点会对新区块进行投票。具体而言,如果超过2/3的验证者对一个区块投出了“同意”(approve)票,那么该区块就会被确认并最终加入到区块链中。这种投票机制的优势在于,它通过简单的哈希序列投票来确认区块的有效性,而不需要额外的资源来传递区块本身。这样做不仅节省了内存,还避免了传统共识机制中由于区块广播和冗余数据传输而产生的网络拥堵。

投票图示

这种设计减少了区块传播时的冗余,避免了传统方法中每个验证者接收到的区块需要向周围的节点再次广播的问题,减少了网络带宽的压力,提高了整个系统的效率。

3. PoH与Tower BFT的协作

Tower BFT 与 Proof-of-History(PoH)技术密切结合,PoH 提供了一个可靠的、不可篡改的时间证明,验证者可以根据 PoH 链中的历史证明来投票。每个区块的哈希不仅代表着区块的内容,还承载了与历史区块的关联信息,保证了交易顺序的不可篡改性。

PoH 确保了区块链的时间顺序,而 Tower BFT 确保了区块的最终一致性和网络中的验证者对区块的共识。两者的结合极大提升了区块链的性能和安全性。

六、总结

Proof-of-History (PoH) 是一种利用加密哈希链提供时间证明的技术,它通过确保区块的顺序性和不可篡改性来提高区块链网络的效率。PoH 通过与 Proof-of-Stake (PoS) 相结合,帮助 Solana 网络在高吞吐量的情况下,保持区块生成和验证的安全性。

Tower BFT 进一步提高了网络的共识效率,通过投票机制与 PoH 紧密结合,减少了冗余通信并提高了容错性。PoH 和 Tower BFT 的结合使 Solana 成为一个高效、低延迟且具有高吞吐量的区块链网络,在高频交易和大规模应用场景中具有广泛的应用潜力。随着区块链技术的不断发展,PoH 和 Tower BFT 技术有望推动更多区块链应用的普及与创新。