一句话先说清
GRANDPA(全称围绕“基于 GHOST 的递归祖先前缀协议”)是一类最终性部件(finality gadget):它与区块生产机制解耦,专职对“哪段链前缀不可逆”达成共识。它的招牌动作是投前缀而不是投单个区块——验证者投“我确认某条链直到此处”,协议找所有此类声明的公共前缀,于是网络通畅时一轮可以最终化几百上千个区块。它服务于 Polkadot 的 GRANDPA 与 BABE 组合(相关论文 2020 年挂出,作者 Fish、Lu、Reitz 等),运行在部分同步假设下,容忍三分之一作恶验证者。

最终性部件是干什么的
一个链可以有两台引擎:引擎一负责不停出块,保证活性,哪怕网络混乱也能往前滚;引擎二负责事后给滚出去的车厢挂上“永不脱钩”的封条,提供可证明最终性。把两件事拆开的好处是:出块器可以随便选(比如按 VRF 抽签的 BABE),不必为了最终性逼所有系统都走同一套两阶段提交;轻客户端和跨链桥也不用盯直播——封条本身是一组可验证签名,任何时候拿出来都能证明“这段链已定”。以太坊的 Casper FFG 是同一个思路的另一个实现,GRANDPA 论文里明确把自己与 FFG 归为一族。
投前缀的巧妙之处
普通 BFT 协议每轮争取“全体同意同一个值”,一个区块一个区块地确认。GRANDPA 里,每个验证者的选票是一个区块哈希,含义是“这条到此为止的前缀我接受”。协议定义一个函数:当作恶者不足三分之一时,把所有选票沿祖先方向投影,能得到一段所有诚实票公共的最长前缀——数学上可以证明这些投影必然落在同一条链上。投票分预投票、预提交两轮,凑够三分之二门槛后,公共前缀里到某个高度以下的所有区块一次性变成最终。卡住的轮次不会让一切推倒重来,下一轮从更高的公共前缀继续。
它接受了什么代价
论文明说:确定性异步网络下同时满足安全性与活性不可能,所以 GRANDPA 的部分同步版本在极端网络分区下可能停止最终化(出块继续,封条暂停);论文给出的第二个方案则用超时换弱同步下的前进能力,代价是可能牺牲活性。对普通用户的翻译:波卡式的链在“网络正常但慢”时依然能持续最终化,只有网络被切到分区级别才会见到“块在出、最终性不动”的窗口。轮内没有固定节拍器,等待用的是网络延迟估计——这是它与同步式 BFT 的根本气质差别。
谁在使用这个思路
GRANDPA 是波卡中继链的封条机:出块交给按 VRF 抽签的 BABE,安全预算独立结算。它的设计自述里多次向 Casper FFG 致敬——两者都属于“生产与最终性分家”的部件家族,只是 FFG 以检查点纪元为节拍,GRANDPA 以任意高度的前缀为对象。同样的部件思想也能在其他地方看到影子:跨链桥用“最终性证明”代替数确认数,模块化区块链里数据可用性层与结算层各司其职,都是把“快”和“稳”拆给两台引擎的变体。评估任何自称“有最终性”的系统时,GRANDPA 给的检验清单同样好用:谁投票、投的是什么、门槛多少、违规能不能被第三方检测。
快速问答
问:GRANDPA 会签“状态”吗?不会,它只对区块(及其前缀)投票,与执行结果无关,这正是部件化的含义。 问:为什么能一轮定几千块?因为票投的是前缀不是区块,只要 2/3 的验证者都把某个高块写进选票,其公共前缀以下全部盖章,与块数无关。 问:和确认数是什么关系?确认数是概率式“大概率不会被重组”,最终性部件给的是密码学证书:要推翻已最终化的区块,需要三分之一以上验证者留下可检测的违规签名证据。
常见误区
一是把 GRANDPA 当完整共识:它不产生区块,没有出块器配合它就是一张静止的封条机。二是把“轮次卡住”读成链坏了:活性风险只在极端分区下出现,重组风险与最终性风险是两码事。三是以为前缀投票更弱:恰恰相反,公共前缀上的每个区块都经过与两阶段提交同等强度的签名门槛。
风险提示:本文为共识机制科普,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。