← COMP5567 全部讲次
L05 · 第 4 周

L05 PoW 与 PoS:算力自己会守恒,币不会,只好拿罚没补上

出块权从烧电换成押币之后冒出 Nothing at Stake,三张期望收益图把罚没的必要性算清楚;再加上信标链的 12 秒、32、128 和两种投票。

一句话版

PoW 拿算力当选票,算力劈成两半就真的只剩一半,矿工自己会挑一条链挖;PoS 拿质押的币当选票,同一笔币在两条链上各签一次不花钱,只好用罚没人工造出一份稀缺性。

一个类比:两家规矩不同的赌桌

第一家赌场用实体筹码。想押哪桌就得把筹码搬过去;两桌都押也行,那每桌只放一半,赔率跟着减半。算下来全押胜率高的那桌最划算——没人立规矩,筹码的数量就把行为管住了。

第二家赌场改成报口令。喊一句「我押这桌」就算押上,同一笔存款能在两桌同时喊,于是人人两桌都喊,反正哪桌开出来自己都在赢的那边——到后来没有哪桌凑得出多数,赌局散了。第三家加了一条:查到同一人在两桌都喊,存款全部没收,双喊的收益被按成负数,玩家又退回只押一桌。三家的玩家一样理性,行为差了三种,差别全在规矩上。

类比在哪里失效:赌场靠监察员盯梢,协议不用——你在两条链上的那两个签名就是铁证,谁捡到都能提交领举报奖励,判定不需要知道哪条链才对。赌场抓到顶多赶你出去,以太坊的罚金还按同期一起被抓的人数放大:一个人失手只丢一点,一批人协同作恶才没收全部质押。

概念卡

1. PoW 的合法条件(Proof of Work)

人话定义:矿工把区块头六个字段喂进 SHA-256,哈希值 ≤ 目标阈值 Target 就算挖到,不中就把 Nonce 加一再来。六个字段里只有 Nonce 是自由变量。

例子:课件 p.8 流程图里 Prev Hash 是 0000008bb8…,那串前导 0 说明前一个块自己也过了 PoW;Merkle Root 06c056519733 没有前导 0,它不需要满足任何条件。

常见误解:合法条件可以写成「前 N 个字节全为 0」

只有当 Target 恰好是 2 的整字节次幂时两种说法才等价。真实 Target 由 nBits 编码,一般落在字节边界之间。考试问「PoW 的合法条件」,答 H(block_header) ≤ Target(p.7、p.8)。

2. 币龄选择(Coin Age Based Selection)

人话定义:只按余额挑出块人会富者恒富,币龄选择是补救之一。币龄 = 质押币数 × 持有天数,条件从 Hash(block_header) < Target 改成 Hash(block_header) < Target × CoinAge——币龄越大,能通过的哈希区间越宽。

例子:押 100 枚放 40 天和押 400 枚放 10 天币龄同为 4000,这一轮中签概率相同;但谁签了块谁的币龄立刻归零,下一轮轮到另一个。

常见误解:PoS 只是把挖矿难度调低了

PoS 不烧电是因为没有 Nonce 可试。PoW 矿工每秒改几万亿次 Nonce 反复投骰子;币龄公式等号右边三个量都不由出块人自由选,每个时间单位只有一次机会。省掉的是重试,不是难度(p.13、p.14)。

3. Nothing at Stake:双押为什么在 PoS 里是理性的

人话定义:链分叉时 PoS 的出块人可以在两条分支上各签一个块,签名几乎零成本,最后哪条赢他都在赢的那边。双押于是成了收益最高的策略,分叉收敛不了。

例子:课件 p.18、p.19、p.21 是同一张四格图换了三次参数,并排看就是整讲的题眼。

三个面板对照 PoW、无罚没 PoS、加罚没 PoS 三种规则下四个策略的期望收益。三个面板用同一组分叉概率 0.9 与 0.1。PoW 面板里都不投是 0、只投 A 是 0.9、只投 B 是 0.1、把算力劈成两半是 0.05 加 0.45 等于 0.5,理性选择是只投 A。无罚没 PoS 面板前三行数字相同,两边都投变成 0.1 加 0.9 等于 1,理性选择改成两边都投。加罚没 PoS 面板里两边都投是 1 减 5 等于负 4,理性选择回到只投 A

第四行那个加号是全部秘密所在,下面的完整例题逐栏走一遍。

常见误解:双押赚的是「两份奖励」

双押只兑现一份奖励,输掉那条链上的块作废。优势是把「10% 概率白干」消掉,期望值从 0.9 抬到 1。讲成「赚两份」,后面 p.21 那个 −5 就对不上(p.18)。

4. 罚没(Slashing):把经济问题改写成密码学问题

人话定义:签名便宜改不了,能改的是「被抓到就没收本金」。以太坊列了两类可被密码学证明的作恶——同一个 slot 里签两个不同的块,以及同一个 epoch 里投两个不同的 FFG 目标、或新票的 source–target 区间完全包住旧票区间。

例子:课件 p.21 给的罚金是 5,双押的期望收益被按成 −4,最优策略当场退回「只投会赢的那条」。

常见误解:漏投票也算 slashing

离线、漏投、投得晚,扣的都是奖励量级的小钱。slashing 扣本金并强制退出验证者集合,触发条件必须是能拿出两条互相矛盾签名的行为。两档混着写容易丢分(p.20、p.31)。

5. 信标链的时间表:slot、epoch、committee

人话定义:合并后的以太坊按固定节拍走。一个 slot 12 秒,一个 epoch 装 32 个 slot 共 6.4 分钟;每个 slot 由至少 128 人的委员会投票,分组靠 RANDAO 这个伪随机过程。每个验证者每 epoch 被分到恰好一个 slot、投恰好一票。

例子:验算一遍 32 × 12 = 384 秒 = 6.4 分钟。角色三种:proposer 被伪随机选中造块,attester 投票,aggregator 把成千上万条 attestation 聚合成一条塞进块里。

常见误解:每 12 秒必定产出一个块

slot 是一次出块机会,可以是空的——提案者离线,或块没能及时传播出去。「slot 可以为空」后面还要用两次:分叉选择要处理「有人没收到块」,检查点那条兜底规则整个为它而写(p.23)。

6. LMD GHOST:比重不比长

人话定义:PoS 的分叉选择从「最长链」换成「最重子树」。从已敲定的位置出发,每步比较当前节点的直接孩子,选累积 attestation 权重最大的走下去,直到没有孩子。权重只算每个验证者最新的一票。

例子:课件 p.27 那棵树一次讲清「长」和「重」的差别。

一棵分叉树。左边三个青绿方块权重都是 7,是已经 justified 的主链前段。第三个方块分出两支:上支是权重 2、2、1 的三个灰方块,虽然多出一个块但累积权重只有 2;下支是权重 5 的青绿方块,被选中。权重 5 的方块又分出三个孩子,权重分别是 0、4、1,算法选权重最大的 4,它没有孩子,于是成为链头

名字拆开就是规则本身:LMD 是 Latest Message Driven(只算最新一票),GHOST 是 Greedy Heaviest Observed SubTree(贪心、最重、子树)。

常见误解:以太坊也是最长链获胜

图里上支三个块、下支两个,赢的是下支:短而票重的分支会压过长而没人投票的分支。「只算最新一票」和罚没的作用一致,都是逼验证者任何时刻只支持一条链,只是一个事前不计票、一个事后罚钱(p.26、p.27)。

7. Checkpoint 与两步敲定

人话定义:checkpoint 是每个 epoch 第一个 slot 里的块,那个 slot 空了就往前取最近的块。验证者除 LMD 票还发一个 FFG 票,内容是 (source, target) 两个检查点,意思是「这一段历史是对的」。检查点拿到 2/3 的 FFG 票叫 justified,下一个 epoch 的检查点也 justified 之后才 finalized。

例子:课件 p.28 里 epoch 2 的检查点本该在 slot 128,那个 slot 空了,于是往前取 slot 64 的块——同一个块因此同时担任两个 epoch 的检查点。

信标链两步敲定的时间轴。时间轴分成三段 epoch,每段 32 个 slot。slot 0 是创世块按定义就是 finalized,slot 32 是 Epoch 1 的检查点状态为 finalized,slot 64 是 Epoch 2 的检查点状态为 justified,slot 96 是当前链头。两条弧线表示 slot 64 的块里含有对 32 的 attestation、slot 96 的块里含有对 64 的 attestation

常见误解:拿到 2/3 票就已经不可回滚了

justified 只证明此刻有 2/3 的验证者认可它,这批人事后还能再去认可另一条分支。要等下一个检查点也拿到 2/3——两个 2/3 的集合至少交叠 1/3,回滚就得让这 1/3 留下互相矛盾的签名、全部被罚没。两步才换来「经济上不可回滚」(p.30)。

把它们串起来

整讲是一条单线:换资源 → 出新洞 → 打补丁 → 补丁带来一整套新机制。

PoW 用链外的电力当选票,安全性靠物理成本撑着。PoS 把选票换成链内的质押资产省掉电费,代价是冒出两个洞。第一个是富者恒富,修补办法是随机数选择和币龄选择,后者靠「出块后币龄归零」掐断正反馈。第二个才是主线:币不像算力那样会被分叉稀释,双押因此成了最优策略。

Casper 的答案是罚没——不试图让签名变贵(做不到),而是让双押可被证明,再对被证明的人没收本金。p.21 那个 −5 就是这个动作的量化版本。

罚没要落地就得回答「谁在什么时候投了什么票」,于是整套时间结构被拉出来:时间切成 slot 和 epoch,验证者按 epoch 分进委员会,每人每 epoch 投一票。这一票装两件事——LMD GHOST 票回答「现在跟哪条链」,随时可改;FFG 票回答「哪段历史不可回滚」,改了就是作恶。两套合起来叫 Gasper。

最后落到最终性上。比特币的确定是概率性的:等得越久越安全,但概率永远不为零。以太坊的是经济性的:12.8 分钟后想回滚,得先烧掉至少 1/3 的总质押——代价是「作恶有成本」这件事得自己重造一遍。

课件里的坑

  • [课件有误] p.7 小字写「The highest 20 bytes are all 0 for a hashed value」→ SHA-256 一共只有 32 字节,最高 20 字节全 0 等于把 Target 压到 2⁹⁶;按近年的挖矿难度真实 Target 在 2¹⁷⁷ 量级、前导 0 约 9 到 10 个字节,两者差约 2⁸⁰ 倍(p.7)
  • [课件有误] p.6 称「奖励随时间递减,降低了 51% 攻击的可能」→ 方向反了。奖励递减压缩的是保护链的安全预算,买到过半算力反而更便宜(p.6)
  • [课件有误] p.9 的信息图称 PoS 社区更去中心化 → 没有证据。以太坊转 PoS 后质押高度集中在少数流动性质押协议和交易所手里(p.9)
  • [口径差异] p.7 的 66.7% 和上一讲的 51% 不矛盾 → 50% 回答「能否重组已上链的交易」,66.7% 回答「诚实挖矿是否最优策略」,后者来自自私挖矿分析的 1/3 门槛(p.7)
  • [口径差异] p.28–29 那张图按一个 epoch 64 个 slot 画,p.23 正文和 p.30 都按 32 → 图取自 Gasper 论文的示例参数,主网是 32,考试答 32(p.28)
  • [读图提醒] p.19 的标题「Proof of Work – not lucrative」易被读成「PoW 不赚钱」→ 省略的主语是上一页那个双押策略,先看第四格的数字再下结论(p.19)
  • [口径差异] p.31 写罚没「从 0.5 ETH 起直到全部质押」→ 下限随协议升级调整,别当常量背;考点是区间两端的含义——下限小到操作失误不至于倾家荡产(p.31)

课后 10 分钟:考点复习

这 10 分钟怎么用:合上页面默写三样——三格 EV 的九个数字、slot/epoch/committee 三个参数、justified 与 finalized 的判定;再做变式题;最后回查两个易错点:把双押 EV 讲成「赚两份」、把 LMD GHOST 讲成最长链。

必背

  1. PoW 的合法条件是 H(block_header) ≤ Target;「最高 20 字节全为 0」是错的,真实前导 0 约 9 到 10 个字节。
  2. 币龄 = 币数 × 持有天数;满 30 天起参与、出块后归零、90 天封顶;条件是 Hash(block_header) < Target × CoinAge。
  3. 三格 EV:PoW 劈算力 0.05 + 0.45 = 0.5 < 0.9;无罚没 PoS 双押 0.1 + 0.9 = 1 > 0.9;加罚没后 0.1 + 0.9 − 5 = −4。
  4. slot = 12 秒,epoch = 32 个 slot = 6.4 分钟,每个 slot 的委员会至少 128 个验证者;每个验证者每 epoch 恰好投一票。
  5. LMD GHOST 比累积 attestation 权重,不比链长;逐层贪心选权重最大的孩子,每个验证者只算最新一票。
  6. checkpoint 是 epoch 第一个 slot 的块;该 slot 为空则往前取最近的块,此时一个块会同时担任多个 epoch 的检查点。
  7. justified = 检查点在 epoch 结束时拿到 2/3 的 FFG 票;finalized = A 已 justified 且下一个 epoch 的检查点也 justified,典型 2 个 epoch = 12.8 分钟。
  8. The Merge 发生在 2022-09-15;Beacon Chain 早在 2020-12 就已上线,作为独立链与 PoW 主网并行运行。

完整例题

题目:某条链分叉,分支 A 获胜概率 0.9,分支 B 是 0.1,出块奖励为 1。在 PoW、无罚没 PoS、罚金为 5 的 PoS 三种规则下分别算出「两边都参与」的期望收益,并指出各自的最优策略。

解:

PoW 下算力守恒,劈成两半则两边中签率同时减半,A 支 0.45、B 支 0.05,合计 0.5 < 只挖 A 的 0.9,最优策略是只挖 A。

无罚没的 PoS 下签名可复用,两条分支各签一个块,获胜那条上必然有一个自己的,期望收益 0.1 + 0.9 = 1 > 0.9,最优策略变成两边都投——这就是 Nothing at Stake。

罚金为 5 时双押要扣 5,期望收益 0.1 + 0.9 − 5 = −4,四个选项里最差,最优策略回到只投 A。

一句话结论:算力是竞争性资源,分叉会自动稀释它;币是非竞争性资源,稀释得靠罚没人工造(p.18、p.19、p.21)。

变式题(先自己做)

1. 某条 PoS 链把罚金定为 0.5(其余条件同上例)。双押还是最优策略吗?由此说明罚金该怎么定。

提示

先算双押的期望收益,再和只投 A 的 0.9 比大小。注意比较对象是「次优策略的收益」而非零。

参考答案与自检(非官方评分标准)

双押的期望收益是 0.1 + 0.9 − 0.5 = 0.5 < 只投 A 的 0.9,罚金已经起作用。威慑下界是「双押比最优诚实策略多赚的那部分」,即 1 − 0.9 = 0.1,0.5 远超这条线。真实协议定得远高于下界,因为攻击者可能同时从链外获益(p.21)。

2. 某个 epoch 的第一个 slot 有块,但这个 epoch 里超过 1/3 的验证者离线了。这个 epoch 的检查点会被 justified 吗?链会停在哪一步?

提示

先回忆 justified 的票数门槛,再想凑不到门槛时协议是降门槛还是继续等。

参考答案与自检(非官方评分标准)

不会。justified 要求 2/3 的 FFG 票,超过 1/3 离线就凑不齐,链停止 finalize——出块本身不停,LMD GHOST 照样选链头,停的只是 FFG 这一层。协议宁可不 finalize 也不降门槛,随后启动 inactivity leak 扣减不投票者的余额,直到在线部分重新占到 2/3(p.30)。

3. 一棵分叉树的根权重是 9,它有两个孩子:左孩子权重 6,右孩子权重 3。左孩子下面只有一个孩子、权重 1;右孩子下面有两个孩子,权重分别是 3 和 0。LMD GHOST 选出的链头是哪个?

提示

一层一层走,每步只看当前节点的直接孩子,别去比末端的数字。

参考答案与自检(非官方评分标准)

链头是权重 1 的那个块。第一步比根的两个孩子,6 > 3,走左边;左孩子只有一个孩子,走到权重 1 的块就没有孩子了,算法停下。陷阱在于右子树那个权重 3 的块比末端的 1 大,但算法第一层已经拐进左边,不回头比较——这正是 Greedy 的含义(p.27)。

闪卡自测

1. 写出 PoW 的合法出块条件,并指出「最高 20 字节全为 0」错在哪。

条件是 H(block_header) ≤ Target。SHA-256 输出共 32 字节,最高 20 字节全 0 把 Target 压到 2⁹⁶,而真实 Target 在 2¹⁷⁷ 量级、前导 0 约 9 到 10 字节,差约 2⁸⁰ 倍;判据本就是和阈值比大小,「前 N 字节为 0」只是 Target 落在整字节边界时的特例(p.7、p.8)。

2. 币龄选择的三条规则是什么?哪一条专门掐断富者恒富?

满 30 天的币才参与竞争、签完一个块币龄归零、概率在 90 天封顶。归零那条掐断正反馈:赢家赢完就被清零,没法用刚拿到的优势接着赢(p.13)。

3. 为什么双押的期望收益是把两个概率相加,而不是加权平均?

两条分支上各有一个自己的块,获胜那条上必然有一个中了,中奖成了必然事件。相加等于把「10% 概率白干」这个折扣消掉,期望值从 0.9 抬到 1(p.18)。

4. 说出两类会触发 slashing 的行为,以及它和「漏投票扣奖励」的区别。

同一个 slot 里签两个不同的块;同一个 epoch 里投两个不同的 FFG 目标,或新票区间包住旧票区间。共同点是能拿出互相矛盾的签名做铁证。漏投票扣奖励量级的小钱,slashing 没收本金并强制退出(p.20、p.31)。

5. 一个 epoch 多长?每个 slot 的委员会下限是多少?为什么设这个下限?

32 个 slot、每 slot 12 秒,共 6.4 分钟。委员会至少 128 个验证者。下限为了让「攻击者凭运气占满某个委员会 2/3 席位」的概率小到可忽略——委员会太小有被包场的风险(p.23、p.25)。

6. 从四个维度区分 LMD GHOST 票和 FFG 票。

对象:前者投一个块,后者投 (source, target) 两个检查点。频率:前者每 slot 由委员会投,后者每 epoch 一次。回答:前者是现在跟哪条链,后者是哪段历史不可回滚。改票后果:前者随时可改,后者改了就是作恶。两票装在同一条 attestation 里(p.26、p.29)。

7. 为什么 FFG 票要写成 (source, target) 两段,一段不行吗?

两段构成一条有向链接,说的是「从 source 到 target 这段历史是对的」,justify 因此能串成链条而非一堆孤立点赞。更关键的是包围投票只有两段式才定义得出来——新票区间完全包住旧票区间,才构成可被证明的矛盾(p.29)。

8. 比较 PoW 与 PoS 的最终性,各说清含义和典型等待时间。

PoW 是概率性的:等的块越多被反超概率越低,但永远不为零,典型六个确认约一小时。PoS 是经济性的:12.8 分钟后回滚需要至少 1/3 的总质押被罚没,代价是一次性的本金损失(p.30)。

下一讲

下一讲转到许可链上的共识。PoW 和 PoS 属于「成员不固定、用稀缺资源投票」那一支,接下来换到「成员固定、按节点数计票」那一支,核心参数从算力占比变成 n 与 f 的关系。带一个问题去听:finality 那个 2/3 门槛,和许可链里的 2f + 1 是不是同一件事?

下一讲的通俗笔记上完课会补,先回 COMP5567 课程页。

个人整理的学习笔记,不是官方材料;数字与结论以课件和讲师为准。