✅ 正确认解:PoH 不是提前计算好的,而是 Leader 实时顺序计算并广播的。
🧠 PoH(Proof of History)是这样工作的:
-
Leader 被 PoS 选出后,开始处理一批待打包的交易。
-
Leader 维护一个连续的哈希链(PoH 时间线):
- 每笔交易会附带进来后时刻的哈希值作为“时间戳”。
- Leader 会在交易之间继续“空转”哈希,构建出连续、有序、可验证的 Hash 序列。
-
广播时,Leader 会发送:
- 一组交易
- 交易在哈希序列中的插入位置
- 对应的 PoH 哈希序列(哈希链)
-
验证者收到后不会重新计算哈希链,而是验证哈希链连续性和交易顺序是否正确。
✅ 简明对比
| 问题 | 是否提前计算 |
|---|---|
| Leader 的 PoH 哈希链 | ❌ 否,是实时进行 |
| PoH 哈希函数(逻辑) | ✅ 是设计好但执行时动态进行 |
| PoH 哈希链是否可验证 | ✅ 是,任意节点可复算验证 |
| 交易排序是否靠 PoH | ✅ 是,PoH 保证顺序不靠广播顺序 |
✅ 补充解释
PoH 的核心优势是避免了传统区块链中“谁先广播,谁先到达”的问题——在 Solana 中,时间顺序不是靠网络广播顺序决定的,而是靠 Leader 构建的哈希链决定的,这就让交易排序不再是瓶颈,从而实现高吞吐。
以下是 模拟 Solana PoH 的完整逻辑细节与结果说明,帮助你更好地理解:
✅ 模拟内容
我们构建了一个类 PoHSimulator,每插入一个交易,就推进一定步数的连续哈希,形成一个时间线(PoH)。每笔交易被打上一个“逻辑时间戳”——即在哈希链中的位置。
✅ 模拟交易和结果(节选)
| 交易内容 | 时间戳(UTC) | 哈希位置 | 哈希值(PoH 链) |
|---|---|---|---|
Alice → Bob: 10 SOL |
2025-06-12T04:52:11.951239 | 3 | 67199a8e58bb2c69315a8e3496d10544012ae62808f9d7a45d920855e27fca4a |
Charlie → Dave: 20 SOL |
2025-06-12T04:52:11.951309 | 6 | c11ee93ee60414736a3a8c236f9a6e75c324f7b0912b712c9953d32b53e95aeb |
Eve → Frank: 5 SOL |
2025-06-12T04:52:11.951374 | 9 | b0ec8e18b89200255f488fc4c28f1422811d55b9437924b9a8eedfbf0c97e1aa |
✅ 核心要点(非常重要)
| 原理点 | 模拟体现 |
|---|---|
| 连续哈希形成时间线 | 每次插入交易前推进 n 次哈希 |
| 交易打上时间戳 | 每笔交易标记了当前哈希链的位置 |
| 可验证性 | 节点只需验证连续哈希是否匹配 |
| 不可预计算、防篡改 | 后续哈希依赖前一个,不能伪造顺序 |
以下是一个基于 .NET 6 的 C# 控制台程序,用于模拟 Solana 的 PoH(Proof of History)核心原理,包括:
- 哈希链的构建
- 交易顺序打标
- 可验证时间线
- 详细注释说明每一步机制
✅ 创建步骤:
你可以用 Visual Studio / VS Code 新建一个 .NET 6 控制台项目,然后粘贴以下代码:
📄 Program.cs
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
namespace PoHSimulator
{
// 模拟交易结构
public class PoHTransaction
{
public string Content {
get; set; }
public DateTime Timestamp {

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



