Solana POH+POS共识
1、整体架构图
首先让我用 Mermaid 绘制 Solana 的核心架构图:
2、多线程架构
2.1 核心线程
Validator 线程:验证节点主线程
TPU (Transaction Processing Unit):交易处理
TVU (Transaction Validation Unit):交易验证
Gossip:网络通信
PoH:时间证明生成
账本管理线程
2.2 线程间通信
fn record_or_hash( next_record: &mut Option<Record>, poh_recorder: &Arc<RwLock<PohRecorder>>, timing: &mut PohTiming, record_receiver: &Receiver<Record>, // channel 的接收端 hashes_per_batch: u64, poh: &Arc<Mutex<Poh>>, target_ns_per_tick: u64, ) -> bool { // ... // 使用 try_recv 非阻塞接收数据 if let Ok(record) = record_receiver.try_recv() { *next_record = Some(record); break; } // ... }
fn record_or_hash( next_record: &mut Option<Record>, poh_recorder: &Arc<RwLock<PohRecorder>>, // 共享的 PohRecorder timing: &mut PohTiming, record_receiver: &Receiver<Record>, hashes_per_batch: u64, poh: &Arc<Mutex<Poh>>, // 共享的 Poh target_ns_per_tick: u64, ) -> bool { match next_record.take() { Some(mut record) => { // 获取写锁 let mut lock_time = Measure::start("lock"); let mut poh_recorder_l = poh_recorder.write().unwrap(); lock_time.stop(); timing.total_lock_time_ns += lock_time.as_ns(); // 使用被保护的数据 let mut record_time = Measure::start("record"); loop { let res = poh_recorder_l.record( record.slot, record.mixin, std::mem::take(&mut record.transactions), ); // ... } } None => { // 获取互斥锁 let mut lock_time = Measure::start("lock"); let mut poh_l = poh.lock().unwrap(); lock_time.stop(); timing.total_lock_time_ns += lock_time.as_ns(); // 使用被保护的数据 loop { timing.num_hashes += hashes_per_batch; let mut hash_time = Measure::start("hash"); let should_tick = poh_l.hash(hashes_per_batch); // ... } } } }
3、网络传播机制
使用Gossip 协议
每 100ms 进行一次 gossip 传播
选择 log(N) 个节点进行通信
使用布隆过滤器避免重复传输
T+100ms: 7 个节点 T+200ms: 49 个节点 T+300ms: 343 个节点 T+400ms: 1000+ 个节点
A节点率先知道了某个流言(msg),它首先将此信息传播到集群中的部分节点(比如相邻的两个节点)B和C,后者再将其传递到它们所选择的“部分”节点,例如B选择了D和E,C选择了将流言传播到B和F。以此类推,最终来自于A的这条流言在3轮交互后被传播到了集群中的所有节点。
4、共识机制
4.1 混合共识模型
PoH 提供全局时钟
PoS 提供验证者选择+共识机制
4.2时间证明机制 (PoH)
PoH 提供全局时钟和事件排序
4.2.1 Hash 链生成
从代码实现来看,Hash 是 PoH 的最基本单位:
pub const DEFAULT_HASHES_PER_BATCH: u64 = 64;
这里定义了每批处理的 hash 数量,是性能优化的关键参数。
4.2.2. 时间单位层级
Hash -> Tick -> Slot 的层级关系:
1 Tick = 64 Hashes
1 Slot = 64 Ticks = 4096 Hashes
1 Slot = 400ms
1秒产生:10,240 hashes/second
// hash 生成 let should_tick = poh_l.hash(hashes_per_batch); // tick 检查 if should_tick { poh_recorder.write().unwrap().tick(); }
4.2.3. 风险
PoH生成器(如Solana的Leader节点)可能成为单点故障
4.3共识机制(POS)
验证者管理共识机制
验证节点(Validator): 目前大约有 1500-3000 个活跃验证节点
4.3.1 Tower BFT 投票确认
Solana 使用的 Tower BFT拜占庭容错算法:
以太坊 2.0 (PoS) 使用的是 Casper FFG (Friendly Finality Gadget):
4.3.2.并行处理
多个 slot 同时处理
4.3.3.流水线确认
Slot N : 生成区块
Slot N+1: 乐观确认
Slot N+2: 最终确认
4.3.4. 分层快速确认机制
乐观确认机制:
33% 质押量的投票
快速交易反馈/UI 显示交易状态/非关键性操作
最终确认机制:
67% 质押量的投票
大额交易/关键业务操作/跨链交易
5、总结
Solana 通过创新的架构设计实现了高性能:
-
PoH 提供可靠的时间证明
-
多线程架构提升并行处理能力
-
Gossip 协议优化网络传播
-
流水线确认提高交易吞吐量
这些机制共同保证了 Solana 的高性能和可扩展性,同时通过 PoS 和投票机制保证了安全性。

浙公网安备 33010602011771号