教程区块链区块链技术ch055.7 共识变体:Tendermint、HotStuff、PoA 与 PoH

本页目录

当 PBFT 的 O(N2)O(N^2) 消息复杂度与 PoW 的能耗都成为瓶颈时,新一代共识算法开始探索折中路径:Tendermint 将 BFT 与 PoS 绑定,HotStuff 将消息复杂度降为线性,PoA 直接引入权威信任,PoH 则试图用序列化时钟打破全局同步假设。


5.7.1 Tendermint:BFT + 质押的交汇

Tendermint(Tendermint Core / Cosmos 的核心共识引擎)将权益质押确定性 BFT 融合:

  1. 验证者集:按质押量排序选出前 NN 名验证者;
  2. 区块提议:轮替提议(类似 DPoS);
  3. 预投票 / 预提交:两阶段 BFT 投票达成共识:
  • Pre-vote:验证者对区块哈希投票;
  • Pre-commit:达到 2/3+ 质押权重后锁定该区块。

Tendermint 的容错为 f=(N1)/3f = \lfloor (N-1)/3 \rfloor,消息复杂度 O(N2)O(N^2),但通过轮替主节点避免了 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 的 O(N2)O(N^2) 复杂度源于每个阶段每个节点需要向所有节点广播。2019 年 Yin 等人提出的 HotStuff(基于 HotStuff 共识的 Libra / Diem BFT) 引入阈值签名聚合

  1. 每个节点向 Leader 发送独立投票;
  2. Leader 将 2f+12f+1 个签名聚合成一个单一阈值签名
  3. Leader 广播该聚合签名,所有节点验证即可。

正常流程的消息复杂度从 O(N2)O(N^2) 降为 O(N)O(N)

σaggregate=AggregateSign(σ1,σ2,...,σ2f+1)\sigma_{\text{aggregate}} = \text{AggregateSign}(\sigma_1, \sigma_2, ..., \sigma_{2f+1})

HotStuff 还引入流水线流水线(pipelined HotStuff),将多轮共识重叠执行,进一步降低延迟。Diem(原 Libra)BFT 即基于三链式 HotStuff 构建。


5.7.3 PoA:权威证明——中心化的实用选择

PoA(Proof of Authority)直接假设少数权威节点是可信任的

  • 验证者身份公开、可追责(如企业联盟链中各参与方的已知公钥);
  • 出块权由权威节点轮替,无需质押或算力;
  • 安全性来自社会契约而非密码学/经济学。

适用场景:测试网、企业内网、高信任联盟。不适合无许可公链。


5.7.4 PoH:历史证明——Solana 的序列化时钟

传统 BFT 需要全网就“时间”达成一致——这是分布式系统的老大难。Solana 的 PoH 引入可验证的延迟函数(VDF) 作为全局序列器:

  1. 连续运行一种计算密集型哈希链(如 SHA-256 循环),前一个输出作为下一个输入;
  2. 由于哈希是顺序计算的,天然形成单调递增的事件序列
  3. 节点可以将交易“锚定”到这个序列的某个刻度上,实现有序执行。
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.index]:{step.index}]:{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
特性TendermintHotStuffPoAPoH
消息复杂度O(N2)O(N^2)O(N)O(N)O(N)O(N)O(N)O(N)
最终性确定性确定性确定性概率性
节点准入质押许可/质押权威无许可
代表应用CosmosDiem/LibraPOA NetworkSolana
核心创新BFT + PoS阈值聚合签名社会信任序列化时钟

关键认知:共识设计是不可能三角的工程折中。不存在“最好”的共识,只存在对特定场景的“最合适”


← 5.6 PBFT | 前往 → 5.8 分叉深度解析与治理

评论

0

评论加载中…

发表评论

0/2000