教程区块链区块链技术ch055.4 权益证明、Casper FFG 与质押经济

本页目录

如果说 PoW 用能源作为“不可伪造的commitment”,PoS 则用资本作为“经济抵押”。从 Peercoin 到 Ethereum 2.0,PoS 经历了从“基于币龄”到“基于质押”的范式跃迁。本节从 LMD-GHOST 分叉选择到 Casper FFG 最终性,完整拆解 PoS 的安全逻辑与经济设计。


5.4.1 基本思想:以资本承诺替代算力消耗

PoS 的核心公式可概括为:

P(被选为提议者)SiStotalP(\text{被选为提议者}) \propto \frac{S_i}{S_{\text{total}}}

其中 SiS_i 为验证者 ii 质押的 ETH(或代币),StotalS_{\text{total}} 为全网总质押。与 PoW 的“算力彩票”不同,PoS 的随机性来自链上可验证的种子 + VRF,避免了物理算力的消耗。

验证者的收益(年化)可建模为:

rvalidator=Bepoch365StotalSi32r_{\text{validator}} = \frac{B_{\text{epoch}} \cdot 365}{S_{\text{total}}} \cdot \frac{S_i}{32}

BepochB_{\text{epoch}} 为每 epoch 基础奖励,32 为最小质押单位(ETH2 设定)。


5.4.2 LMD-GHOST:分叉选择规则与累积权重

在存在临时分叉时,节点需要一种规则决定跟随哪条分支。LMD-GHOST(Latest Message Driven Greediest Heaviest Observed Sub-Tree)是目前 PoS 链的主流选择:

  1. 从创世块开始,逐层向下;
  2. 在每个分叉点,选择子树中最近消息权重和最大的分支;
  3. 重复直到到达叶子。
ts
// lmd-ghost-fork-choice.ts
// 简化版 LMD-GHOST:累积权重最大分支获胜

interface BlockNode {
  id: string;
  weight: bigint;
  parent?: BlockNode;
  children: BlockNode[];
}

function lmdGhost(root: BlockNode): BlockNode {
  let current = root;
  while (current.children.length > 0) {
    let maxWeight = -1n;
    let bestChild: BlockNode | null = null;
    for (const child of current.children) {
      const subtreeWeight = computeSubtreeWeight(child);
      if (subtreeWeight > maxWeight) {
        maxWeight = subtreeWeight;
        bestChild = child;
      }
    }
    if (!bestChild) break;
    current = bestChild;
  }
  return current;
}

function computeSubtreeWeight(node: BlockNode): bigint {
  let sum = node.weight;
  for (const child of node.children) {
    sum += computeSubtreeWeight(child);
  }
  return sum;
}

// 示例:创世 -> A(权重2) -> B(权重3)
//               -> C(权重1)
// LMD-GHOST 路径:创世 -> A -> B(子树权重 3 > 1)

5.4.3 Casper FFG:可证明的最终性保障

LMD-GHOST 提供的是活性(liveness)保证——区块总会被选出,但安全性(safety)需要额外机制。Casper FFG(Friendly Finality Gadget)通过检查点投票引入最终性:

  • 检查点:每 NN 个 epoch 的第一个区块;
  • justified:2/3 质押权重投票支持;
  • finalized:其子检查点也被 justified。
Finalized(B)BChildren(B):Justified(B)SuperMajorityLink(BB)\text{Finalized}(B) \Leftrightarrow \exists B' \in \text{Children}(B) : \text{Justified}(B') \land \text{SuperMajorityLink}(B \to B')

一旦区块被 finalized,除非 1/3 质押被 slash,否则不可回滚。

ts
// casper-ffg-vote.ts
// 检查点状态机简化实现

const VoteState = { None: 0, Prepared: 1, Committed: 2 } as const;

type Checkpoint = { epoch: number; rootHash: string; votes: bigint };

function processVote(
  checkpoint: Checkpoint,
  stake: bigint,
  totalStake: bigint,
  state: number
): { newState: number; finalized: boolean } {
  const threshold = (totalStake * 2n) / 3n; // 2/3 阈值
  let newState = state;
  let finalized = false;

  if (checkpoint.votes + stake > threshold && state === VoteState.Prepared) {
    newState = VoteState.Committed;
    finalized = true; // 子检查点达到 supermajority,父检查点 finalized
  } else if (checkpoint.votes + stake > threshold && state === VoteState.None) {
    newState = VoteState.Prepared;
  }
  return { newState, finalized };
}

5.4.4 质押经济学:收益率、退出队列与流动性风险

质押收益 = 共识奖励 + MEV(最大可提取价值)- 罚没风险(slashing)。年化收益率随总质押量动态调整:

APR=kStotalStotal=kStotal\text{APR} = \frac{k \cdot \sqrt{S_{\text{total}}}}{S_{\text{total}}} = \frac{k}{\sqrt{S_{\text{total}}}}

kk 为协议参数,保证质押总量越大,单个验证者收益率递减。

退出队列是 Ethereum 2.0 的关键设计:每个 epoch 只允许固定数量验证者退出,防止质押大量撤出导致的共识不稳定。


5.4.5 Nothing-at-Stake 攻击与弱主观性

Nothing-at-Stake:在 PoS 早期设计中,验证者可以在所有分叉上同时投票,因为投票不消耗真实资源。Casper 通过罚没(slashing)机制解决:

Slash=αSi+βInactivityPenalty\text{Slash} = \alpha \cdot S_i + \beta \cdot \text{InactivityPenalty}

如果在冲突检查点上双重投票,质押资金将被销毁。

弱主观性:新加入网络的节点需要一个“可信的最近检查点”来区分主链与长程攻击链。这与 PoW 的“创世块即可自举”不同,PoS 需要社会层提供弱主观性检查点。

graph TD
    A[验证者质押 32 ETH] --> B[获得提议/投票权]
    B --> C[遵循 LMD-GHOST 投票]
    C --> D[检查点达到 2/3]
    D --> E[区块 Finalized]
    E --> F[不可回滚]
    B -.->|在冲突分支投票| G[质押被 Slash]
    style G fill:#f44,color:#fff

关键认知:PoS 用“经济罚没”替代了 PoW 的“物理能耗”,其安全边界是经济成本(质押价值)而非物理成本(电力)。这使得 PoS 在能耗效率上有数量级优势,但也引入了弱主观性与罚没机制的设计复杂度。


回到 5.3 PoW 激励与安全 ← | 前往 → 5.5 委托权益证明(DPoS)

评论

0

评论加载中…

发表评论

0/2000