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 是同一张四格图换了三次参数,并排看就是整讲的题眼。
第四行那个加号是全部秘密所在,下面的完整例题逐栏走一遍。
常见误解:双押赚的是「两份奖励」
双押只兑现一份奖励,输掉那条链上的块作废。优势是把「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 那棵树一次讲清「长」和「重」的差别。
名字拆开就是规则本身: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 的检查点。
常见误解:拿到 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 讲成最长链。
必背
- PoW 的合法条件是 H(block_header) ≤ Target;「最高 20 字节全为 0」是错的,真实前导 0 约 9 到 10 个字节。
- 币龄 = 币数 × 持有天数;满 30 天起参与、出块后归零、90 天封顶;条件是 Hash(block_header) < Target × CoinAge。
- 三格 EV:PoW 劈算力 0.05 + 0.45 = 0.5 < 0.9;无罚没 PoS 双押 0.1 + 0.9 = 1 > 0.9;加罚没后 0.1 + 0.9 − 5 = −4。
- slot = 12 秒,epoch = 32 个 slot = 6.4 分钟,每个 slot 的委员会至少 128 个验证者;每个验证者每 epoch 恰好投一票。
- LMD GHOST 比累积 attestation 权重,不比链长;逐层贪心选权重最大的孩子,每个验证者只算最新一票。
- checkpoint 是 epoch 第一个 slot 的块;该 slot 为空则往前取最近的块,此时一个块会同时担任多个 epoch 的检查点。
- justified = 检查点在 epoch 结束时拿到 2/3 的 FFG 票;finalized = A 已 justified 且下一个 epoch 的检查点也 justified,典型 2 个 epoch = 12.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 课程页。
个人整理的学习笔记,不是官方材料;数字与结论以课件和讲师为准。