平行链区块不进中继链:Polkadot 怎么用纠删码切片确认数据可用 图 1
平行链区块不进中继链:Polkadot 怎么用纠删码切片确认数据可用 · 图 1

很多人把 Polkadot 的安全模型理解成”所有验证者都看着每条平行链”,但中继链区块里其实塞不下那么多数据。官方协议文档给出的答案是:平行链的 PoV 区块根本不进中继链,链上只留一张固定大小的候选收据,数据本体被切成小片散在所有验证者手里。这套”切片加门限”的机制决定了什么叫数据可用,也解释了一个容易被忽略的时间边界。

PoV 太大,中继链只能放摘要

按 Polkadot 文档的记载,平行链区块带有证明有效性所需的证明数据(PoV),体积通常在一兆字节到十兆字节之间,且不进入中继链区块。中继链要扩容到数百条平行链,就必须用更小的东西代表这些数据,于是引入候选收据(candidate receipt)。

文档列出了构造收据的那名平行链验证者需要签名的字段:平行链标识、负责出块的收集者标识与签名、父区块候选收据的哈希、该区块纠删码分片构成的默克尔根、出站消息的默克尔根、区块哈希,以及执行前与执行后两个状态根。这套信息是常量大小的,任何人后来拿到完整的 PoV 区块,都能据此校验里面包含的状态转换。换句话说,中继链记录的是”承诺”,不是数据本身。

切片怎么切:份数等于验证者数

在把候选收据送进中继链交易队列之前,构造收据的验证者还要先对整个平行链区块做纠删编码。文档对纠删码的描述很直白:把一条消息变成一组更小的消息,只要拿到其中一小部分就能重建原文。Polkadot 的参数配置是,小消息的总份数等于验证者总数,而重建所需的比例是三分之一。所用的是 Reed-Solomon 码,文档还举了光盘工业用同种编码修补盘面划伤的例子。

图:一条光带被切成等宽的平行薄片,少数薄片回聚成完整方块

切完之后,验证者把这些分片放进一棵默克尔树,再把每一片连同候选收据发给中继链上对应的那名验证者。收到收据与分片的验证者会把收据排进中继链队列,等出块者把它写进区块。也就是说,任何一个验证者手里都只有整体的一小片,谁都没有完整副本。

三分之一加一:可用性的判定线

真正定义”可用”的是可用性分发与不可用性这两个阶段。被指派的验证者在可用性分发子系统里彼此转发纠删码分片,文档给出的门限是:至少三分之一加一名验证者报告自己持有属于自己的那一片,网络才认为这个候选区块可用。达到门限后,这个块才升格为真正的平行链块,它的区块头被纳入那条中继链分叉,可用性信息随后记录在该分叉的后续中继链区块里。

这条线不是随便取的。文档明确说明,能够重建完整平行链状态数据所需的三分之一加一响应门限,对应的正是 Polkadot 对拜占庭节点数量的安全假设:只要诚实方超过三分之一且响应及时,数据就还能被拼回来。

需要分清的是,出块者做的可用性检查只保证中继链收录那些验证者已经分发完分片的候选,它并不担保执行结果有效。有效性要靠后面的批准流程与二次检查,被采样的一小批验证者会重新执行候选区块;那一批人被假定最坏情况下三分之一是恶意方,因此背书样本可能出错,这也是流程要放在纳入之后、并能事后翻案的原因。

两条容易踩到的边界

第一条是留存时长。文档写明,重建平行链区块与 PoV 所需的纠删码分片保存在中继链验证者的硬件(磁盘)上,并向中继链网络提供最多二十四小时;这些数据既不在中继链区块里,也不在链状态里,嵌进区块保存的只有那些分片的根。对下游系统来说,含义很直接:想在窗口之外重新拿到某段历史 PoV,不能指望中继链本身,需要自建归档或用别的数据源。

第二条是纳入失败。文档列了几种候选进不了平行链的情形:收集者无法把区块传播给任何被指派的验证者;候选没有得到候选背书子系统的背书;中继链出块者没有选中它;或者候选的 PoV 在一个超时窗口内没有被判定可用,于是被从中继链丢弃。最后一种正是可用性判定没过关的结果——收据可能已经上过链,数据却没能凑齐。

这套机制在比较什么

把 Polkadot 的做法和常见的数据可用性层放在一起看会更清楚。两者都不要求每个节点保存全部数据,但 Polkadot 的切片对象是当前轮次的中继链验证者集合,判定线写死在拜占庭假设里,切片生命周期以小时计;它没有把数据可用性外包给一条独立链,也没有一套面向外部使用者的采样凭证需要长期挂载。选择哪种形态,取决于你更在意的是共享同一验证者集合的安全,还是把可用性做成可单独采购的模块。

风险与阅读建议

本文只描述协议机制,涉及的字段与门限以 Polkadot 官方协议文档为准,不同运行时版本、参数变更或子系统重写都可能改变具体实现细节。分片保留时长是可被工程配置与网络状况影响的边界,不应把它当成永久归档承诺。内容不构成任何投资建议,也不涉及代币价格或买卖时机判断。