一旦创建了平行链区块,重要的是由PoV块和平行链的出站消息集组成的平行链blob在一段时间内是可用的。乐观的解决方案是向所有中继链节点广播平行链blobs,这不是一个可行的方案,因为有很多平行链和PoV块可能很大。我们希望找到一个有效的解决方案,以确保任何最近创建的平行链区块中PoV块是可用的。
对于独立的链,如比特币,只要51%的哈希值是诚实的,不提供区块数据就能确保没有诚实的矿工在其上生产区块,所以它将不会出现在最终的链上。然而,Polkadot中的平行链间共识是由中继链共识决定的。当一个平行链区块头在中继链上时,这是典型的形式。我们不能保证除收集人和平行链验证人之外的任何其他人都看到PoV块。如果这些人串通好了,那么其他的平行链网络就不需要有平行链区块,那么大多数收集人无法构建新区块,这个区块的无效性可能不会被发现。我们希望共识的参与者,也就是验证人,能够共同确保可用性,而不是依靠少数节点。
为此,我们设计了一个可用性方案,使用擦除编码(见附录4),将PoV块分配给所有验证人。当检测到任何不当行为,特别是与无效性有关的行为时,可以从分布式的擦除编码的块中重建该blob。
如果一个区块是可用的,那么平行链的所有节点,以及任何拥有PoV的轻客户端,都可以检查其有效性。我们在Polkadot中有三个级别的有效性检查。PoV块的第一个有效性检查是由相应的平行链验证人执行的。如果他们验证了PoV块,那么他们会签署并分发blob的擦除代码,包括PoV块,给每个验证人。我们依靠充当钓鱼节点来报告一个blob的无效性,作为第二层的有效性检查。他们需要质押自己的DOT来支持任何主张。我们假设大多数收集人都是钓鱼人,因为他们对链持续有效性有兴趣,并且已经在运行完整的节点,所以他们所需要是DOT质押收益。第三层的有效性检查是由一些随机和私人分配的验证人执行的。考虑到钓鱼人提供的无效报告和收集人提供的不可用报告的数量,我们确定第三级有效性检查中的验证人数量。如果检测到一个无效的平行链区块,为其有效性签名的验证人就会被砍掉。我们等待足够多的这些随机分配的检查者检查该区块,然后在GRANDPA中对其投票。我们还希望在选择随机分配的验证人之前,确保该区块是可用的。这意味着平行链验证人必须承诺因为得到一个无效区块的小概率而承担被惩罚的高风险。这意味着让一个无效区块进入Polkadot的预期成本高于质押单个平行链的收益。
我们的可用性和有效性方案的安全性取决于GRANDPA最终性确定装置的安全性(见第4.3.2节)和每个BABE epoch中产生的随机性的质量(见第4.3.1节)。关于可用性和有效性方案的更多细节,请参见附录A。