当 PBFT 的 消息复杂度与 PoW 的能耗都成为瓶颈时,新一代共识算法开始探索折中路径:Tendermint 将 BFT 与 PoS 绑定,HotStuff 将消息复杂度降为线性,PoA 直接引入权威信任,PoH 则试图用序列化时钟打破全局同步假设。
5.7.1 Tendermint:BFT + 质押的交汇
Tendermint(Tendermint Core / Cosmos 的核心共识引擎)将权益质押与确定性 BFT 融合:
- 验证者集:按质押量排序选出前 名验证者;
- 区块提议:轮替提议(类似 DPoS);
- 预投票 / 预提交:两阶段 BFT 投票达成共识:
- Pre-vote:验证者对区块哈希投票;
- Pre-commit:达到 2/3+ 质押权重后锁定该区块。
Tendermint 的容错为 ,消息复杂度 ,但通过轮替主节点避免了 PBFT 复杂视图变更的活性问题。
ts
// tendermint-vote.ts
// 两阶段 BFT 投票简化实现
const VoteType = { PreVote: 0, PreCommit: 1 } as const;
interface TendermintRound {
validators: { id: string; stake: bigint; }[];
totalStake: bigint;
blockHash: string | null;
votes: Map<string, { type: number; hash: string }[]>;
}
function countVotes(
round: TendermintRound,
hash: string,
voteType: number
): bigint {
let sum = 0n;
for (const v of round.validators) {
const vts = round.votes.get(v.id) || [];
const match = vts.find(x => x.type === voteType && x.hash === hash);
if (match) sum += v.stake;
}
return sum;
}
function isCommitted(round: TendermintRound, hash: string): boolean {
const threshold = (round.totalStake * 2n) / 3n;
return countVotes(round, hash, VoteType.PreCommit) > threshold;
}5.7.2 HotStuff:线性通信复杂度的 BFT 突破
PBFT 的 复杂度源于每个阶段每个节点需要向所有节点广播。2019 年 Yin 等人提出的 HotStuff(基于 HotStuff 共识的 Libra / Diem BFT) 引入阈值签名聚合:
- 每个节点向 Leader 发送独立投票;
- Leader 将 个签名聚合成一个单一阈值签名;
- Leader 广播该聚合签名,所有节点验证即可。
正常流程的消息复杂度从 降为 。
HotStuff 还引入流水线流水线(pipelined HotStuff),将多轮共识重叠执行,进一步降低延迟。Diem(原 Libra)BFT 即基于三链式 HotStuff 构建。
5.7.3 PoA:权威证明——中心化的实用选择
PoA(Proof of Authority)直接假设少数权威节点是可信任的:
- 验证者身份公开、可追责(如企业联盟链中各参与方的已知公钥);
- 出块权由权威节点轮替,无需质押或算力;
- 安全性来自社会契约而非密码学/经济学。
适用场景:测试网、企业内网、高信任联盟。不适合无许可公链。
5.7.4 PoH:历史证明——Solana 的序列化时钟
传统 BFT 需要全网就“时间”达成一致——这是分布式系统的老大难。Solana 的 PoH 引入可验证的延迟函数(VDF) 作为全局序列器:
- 连续运行一种计算密集型哈希链(如 SHA-256 循环),前一个输出作为下一个输入;
- 由于哈希是顺序计算的,天然形成单调递增的事件序列;
- 节点可以将交易“锚定”到这个序列的某个刻度上,实现有序执行。
ts
// poh-sequence.ts
// 纯内置:PoH 序列生成器
function sha256Round(input: Uint8Array): Uint8Array {
// 简化:用 Web Crypto API 的 sha-256 实现
// 实际版本应使用原生 SHA-256
// 此处仅作结构演示
}
function* pohSequence(seed: Uint8Array, steps: number): Generator<{ index: number; hash: string; elapsed: number }> {
let current = seed;
const start = Date.now();
for (let i = 0; i < steps; i++) {
// 模拟顺序哈希链(真实实现应连续计算 SHA-256 数千次)
current = new Uint8Array([...current, ...(new TextEncoder().encode(`${i}`))].slice(0, 32));
yield { index: i, hash: [...current].map(b => b.toString(16).padStart(2, '0')).join(''), elapsed: Date.now() - start };
}
}
// 生成 10 步 PoH 序列
const seed = new TextEncoder().encode('solana-poh-seed-2026');
const seq = pohSequence(seed, 10);
for (const step of seq) {
console.log(`PoH[{step.hash.slice(0, 16)}... (${step.elapsed}ms)`);
}5.7.5 各变体关键参数对比
graph LR
subgraph 共识变体对比
A[Tendermint] -->|BFT+PoS| B[Cosmos]
C[HotStuff] -->|线性复杂度| D[Diem]
E[PoA] -->|社会信任| F[POA Network]
G[PoH] -->|序列化时钟| H[Solana]
end
I[工程需求] -->|选择| A
I -->|选择| C
I -->|选择| E
I -->|选择| G
| 特性 | Tendermint | HotStuff | PoA | PoH |
|---|---|---|---|---|
| 消息复杂度 | ||||
| 最终性 | 确定性 | 确定性 | 确定性 | 概率性 |
| 节点准入 | 质押 | 许可/质押 | 权威 | 无许可 |
| 代表应用 | Cosmos | Diem/Libra | POA Network | Solana |
| 核心创新 | BFT + PoS | 阈值聚合签名 | 社会信任 | 序列化时钟 |
关键认知:共识设计是不可能三角的工程折中。不存在“最好”的共识,只存在对特定场景的“最合适”。
← 5.6 PBFT | 前往 → 5.8 分叉深度解析与治理
评论
0评论加载中…