信息:
此页面是Polkadot Parachain Host Implementer's Guide中协议概述章节的摘要
该协议旨在通过一个可以对每个连接到中继链的平行链重复并并行执行的过程,将平行链的区块从生成到被包含(在中继链中)。
主要角色
Validators(验证者):
验证者负责通过检查区块的有效性证明(PoV)来验证建议的平行链区块,并确保该PoV在指定期限内可用。他们有“利益攸关”,这意味着他们在链上拥有经过绑定的资金,如果发生错误行为,网络可以部分或完全没收这些资金。
Collators(整理者):
整理者创建PoV供验证者检查。创建PoV需要熟悉特定平行链的交易格式和区块创作规则,并且能够访问其全部状态。
平行链协议
平行链协议可以概括为以下三个主要步骤:
- 整理者将带有PoV的平行链区块(parablock)发送到分配给该平行链的验证者集合(即para-validators)。
- 验证者验证parablock是否遵循平行链的状态转换规则,并签署可能具有肯定或否定结果的声明。
- 在获得足够的肯定声明(positive statements)后,将该块添加到中继链中。
下图显示了一个带有整理者和验证者的平行链表示。图中还展示了区块(白色方块)通过三个主要步骤的旅程,以及包含管道和批准过程发生的部分(请参见以下章节)。
签署的否定声明将导致争议,如果存在错误的否定声明,则在争议解决后谁处于错误的一方就会被削减(Slash)。错误的肯定声明也可能发生;负责此行为的参与者也将被削减。
为了检测错误的肯定声明,必须在将区块添加到中继链后提供PoV信息,以便验证者可以检查工作。PoV通常大小在1 MB至10 MB之间,并不包含在中继链区块中。然而,作为数据可用性方案的一部分,它们在网络上可用一段时间,以便验证者可以执行必要的检查。
包含流程
包含流程(Inclusion Pipeline)是平行链区块(或parablock)从创建到加入中继链的路径。
译者注:Inclusion Pipeline 是波卡平行链协议的一个组成部分,它描述了一个平行链区块从生成到被包含在中继链中的过程,这个过程可以对每个连接到中继链的平行链重复并并行执行。
该路径的主要检查点如下:
1.验证者通过验证者分配的例行程序分配到各个平行链。
2.整理者生成带有PoV的平行链区块(称为候选区块或候选者)。
3.整理者通过整理者分发子系统将候选者和PoV转发给分配给同一平行链的验证者。
4.被分配到该平行链的验证者参与候选支持子系统。收集到足够的签署有效声明的候选区块被视为“可支持的”,其支持是签署声明的集合。
5.中继链区块作者(由BABE选出)可以为每个平行链选择最多一个可支持的候选区块,并将其与其支持者一起包含在中继链区块中。一旦被包含在中继链中,该候选区块就被认为是在该中继链分支上可支持的。
6.一旦在中继链中可支持,该候选者被认为处于“待用性”状态。只有在证明可用后,它才能被认为是平行链的一部分。
7.在接下来的中继链区块中,验证者将参与可用性分发子系统以确保候选者的可用性。随后的中继链区块将记录有关候选者可用性的信息。
8.一旦中继链状态机拥有足够的信息来考虑候选者的PoV已经可用,该候选者被视为平行链的一部分,并晋升为完整的平行链区块。
上图显示了候选区块通过Inclusion Pipeline的路径。该区块通过此路径更改其状态,如下所示:
候选区块(Candidate):一个区块由一个整理者(Collator)提交给一个平行链验证者(Para-validator)(在本例中为V1)。候选区块显示为带有一个白色勾号的白色正方形(来自整理者的有效性证明PoV)。请注意,候选区块尚未有效,仍可能无法包含在中继链中。
被提名(Seconded):区块由平行链验证者V1提交给其他平行链验证者(在本例中为V2和V3)。第二个区块显示为带有一个白色勾号和两个黄色勾号的白色正方形。黄色标记表示平行链验证者的有效性证明PoV。
可支持(Backable):一个区块得到了大多数平行链验证者的证明。可支持的区块显示为带有一个白色勾号和三个黄色勾号的白色正方形。黄色标记表示平行链验证者的有效性证明PoV。
被支持(Backed):一个区块被支持并被中继链区块作者(在本例中为V4)记录在中继链的一个分支上。被支持的区块显示为一个白色背景和黄色边框的方块。被支持的区块仍然有可能无法被包含在中继链中。注意为了简单起见,这里被支持的平行链区块被表示为中继链的一个区块,但实际上一个中继链区块包含了多个平行链区块。
等待可用(Pending availability):一个区块被支持但还没有被认为是可用的。
被包含(Included):一个区块被支持并被认为是可用(我们有了一个平行链区块)。平行链区块显示为一个白色背景和黄色边框包围着一个“P”的方块。
一旦平行链区块被认为是可用的并且是平行链的一部分,它仍然处于“待批准”状态。对于特定的平行链,必须完成包含流程(Inclusion Pipeline)才能接受该平行链上的新区块。在包含流程之后,审批流程(Approval Process)开始,并且可以同时进行多个平行链区块的批准。
候选区块(candidate)可能因为以下任何一种原因而无法被包含在平行链中:
- 整理者无法将区块传播给任何被分配的验证者。
- 候选区块没有得到参与候选支持(Candidate Backing)子系统的验证者的支持。
- 候选区块没有被中继链区块的作者选中。
- 候选区块的有效性证明PoV在超时之内没有被认为是可用的,并且被从中继链中丢弃。
审批流程
一旦平行链区块被认为是可用的并且是平行链的一部分,它仍然处于“待批准”状态。在这个阶段,平行链区块是暂时性地包含在平行链中,尽管还需要更多的确认。
事实上,被分配到平行链的验证者(即parachain validator)是从一个验证者集合中随机抽样的,这个集合在最坏的情况下被假设有1/3是不诚实的。在这种情况下,很有可能特定平行链的随机抽样的大多数平行链验证者是不诚实的,并且可以错误地支持一个候选区块。
为了解决这个问题,审批流程允许在事后检测不良行为,而不需要分配更多的平行链验证者,否则这最终会降低系统的吞吐量。由于平行链区块在被认为可用之后可以接受子区块,因此如果未通过审批流程,将使平行链区块及其后代(子区块)无效。只有支持有问题的区块的验证者会被削减,而不是支持后代区块的验证者。
审批流程可以分为以下步骤:
1、已由Inclusion Pipeline包含的平行链区块正在等待称为二次检查窗口的时间窗口进行批准。
2、在二次检查窗口期间,验证者(二次检查者)随机自我选择对每个平行链区块执行二次检查。
3、二次检查者获取具有有效性证明PoV的平行链区块并重新运行验证函数。
4、二次检查者传播他们检查结果的消息。如果出现矛盾的结果,就会升级为所有验证者都必须检查该区块。失败方的验证者将被惩罚。
5、在流程结束时,平行链区块要么被批准,要么被拒绝。
下图显示了当平行链区块离开包含流程Inclusion Pipeline并进入审批流程Approval Process时的路径。当平行链区块被支持、可用且没有争议时,就会被接受。平行链区块由一部分验证者(V5、V6和V7)进行第二次检查,如果没有矛盾的结果,则该块将被批准并传播到其他中继链验证者。请注意,经过二次检查的平行链区块显示为具有白色背景、黄色边框并包含三个白色勾号的正方形,“P”按顺序排列。已批准的平行链区块显示为变为灰色的黄色正方形。
网络异步性
我们已经提到,中继链区块作者必须选择候选者并在中继链上记录它(我们称之为该区块被支持)。中继链区块作者由BABE(共识机制)选择,这是一种有分叉的算法。
这意味着同时会有不同的区块作者被选中,而且他们可能不会在同一个区块的父节点上工作(也就是说,前面的图示是简化的)。此外,验证者和平行链的集合也不是固定的,并且验证者对平行链的分配也是灵活的。
我们说网络是异步的,因为会有一些验证者收到了一个区块,而另一些验证者没有。因此,网络是可变的,并且存在多种状态。
在下面的图中(左),由于网络异步性,第一组收到了区块C,而第二组没有。第二组的验证者可以在B上构建另一个区块,称为C,而另一些验证者只知道其中之一(右)。
第三组的验证者必须知道每个头部(C和C')的网络状态,并且他们可能在两个头部都做出一些或全部贡献。
由于网络异步性,有可能两个分叉会并行增长一段时间,但最终一个分叉会被最终性工具选择。在没有敌对网络的情况下,两个分叉同时存在一段时间是不太可能的,因为会有验证者同时知道两个链头。