编者按:本文来自PolkaWorld,Odaily星球日报经授权转载。本文是平行链底层核心技术的路线图——内容关于需要哪些协议、API和代码路径才能完全展示一个自给自足和安全的平行链。本文不会涵盖平行链工具包需要公开哪些API才能使用平行链功能——而是仅仅介绍这些功能的实现方式,以及它们提供给验证功能的底层API。类别
我们将使用以下类别来描述功能:Runtime:中继链的runtime代码,用于指定共识关键状态,并更新所有全节点必须维护或执行的状态。网络:用于节点相互交流并在网络中传输信息的协议。节点:部分或所有链下节点必须维护或执行的状态或更新。通常与网络组件交互,并引用runtime状态。子项目和功能:
本节包含了不同的子项目和构成这些子项目的功能。基础架构/API
对等集管理类别:网络分配给平行链的验证者需要一种发现并连接到整理者的方法,以便获得新鲜的平行链块进行验证。整理者需要发现并连接到验证者,以便提交平行链区块。渔民需要与验证者和核对者交谈,以获取可用数据并分发报告。有些连接是长期存在的,有些仅用于单个请求。对等集管理类别:网络分配给平行链的验证人需要一种发现并连接到收集人的方法,以便获得新鲜的平行链区块进行验证。收集人需要发现并连接到验证人,以便提交平行链区块。钓鱼人需要和验证人和收集人交流,来获取可用数据并分发报告。有些连接是长期存在的,有些仅用于单个请求。自定义libp2p子协议波卡平行链涉及许多不同的网络协议。理想情况下,我们可以将每个任务作为单独的未来任务产生,并根据需要来通过通道与其他协议或节点代码进行通信。这需要在Substrate和libp2p中进行更改。分配
拍卖类别:Runtime平行链的拍卖和注册。此功能已经实现,并且遵循ParachainAllocation—ResearchatW3F文档。平行链拍卖类别:Runtime平行线程是即付即用的平行链。这包括一个链上机制,用于解决收集人的拍卖并确保他们生成一个区块。平行线程的节点侧部分的作用,是让收集人实际投放出价,并被配置为在何种条件下投放出价。验证人分配类别:Runtime将验证人分配给平行链。验证人仅在短时间内分配给平行链。可调整的参数包括分配给每个平行链的时间长度和网络知道验证人分配的提前时间。协议
见证循环类别:网络一种黑箱网络组件,用于在任意给定链的验证人之间循环发送证明消息,以创建可在其上包含区块的quorum。可用性纠删码类别:节点/网络对于每个潜在的、被视为平行链的区块,对区块的PoV和传出消息执行擦除编码。为中继链区块调用中继链上的区块数量,此平行链区块被考虑包含在n中。擦除码分为n个部分,其中任何f+1都可以恢复。第i个验证人存储第i个编码并将其提供给任何询问者。PoV区块获取类别:网络一种黑箱网络组件,用于平行链上的验证人或钓鱼人,以获取证明中哈希所引用的PoV区块,以进行验证。当获取“当前”PoV区块时,这应该很快。当获取“旧的”PoV区块时,应该有可能并且要借助于从可用性擦除编码中恢复。平行线程拍卖投票类别:节点/网络配置收集人在平行线程拍卖中投票的方式和时间。收集循环类别:节点/网络收集人节点的主要事件循环:新的中继链区块B同步新的平行链头Pw.r.t.B建立P的新子区块提交给验证人跨链消息传递
https://hackmd.io/ILoQltEISP697oMYe4HbrA?viewhttps://github.com/paritytech/polkadot/issues/597平行链路线图中最大的子项目——平行链之间如何发送消息。这涉及传入消息的状态机排序、用于获取这些消息的协议以及用于持久保存消息的节点逻辑。它的设计基于平行链之间由发送者和接收者组成的单向通道概念。在每个中继链区块,每条平行链有机会在其控制的每个通道上发送消息,它控制了发送部分的一半。它还将尝试按顺序在它控制的每个接收通道的一半上处理消息:在块高“b”发送的消息,必须先于在块高“b+1”发送的消息处理。对于在相同块高发送的不同通道上的消息,将按照一些明确定义的顺序进行处理。这意味着,对于最近处理的消息在其接收的所有通道上的发送高度,接收段的最大高度差为1。接收段的最小已处理发送高度叫作“水印(watermark)”。在水印之前或水印高度的所有通道上发送到此段的所有消息均已处理。终结CandidateReceipt格式类别:Runtime/节点CandidateReceipt是对提交给runtime的parablock头的包装器。它包含对数据的加密承诺,这对于验证或解释parablock至关重要,包括见证数据和传出消息数据的哈希。CandidateReceipt格式应根据上面提到的XCMP来终结——最重要的是,它应更改为保留以加密方式提交到每个开放通道状态的bitfield和message_root域。终结PovBlock格式类别:Runtime/节点PovBlock或Proof-of-Validity区块包含验证parablock所需的所有数据。它将需要包含传入的消息队列以及潜在的传出消息队列。CST更新程序类别:Runtime基于中继链区块中提供的CandidateReceipt的通道状态表的存储定义和更新逻辑。CST准入证明的生成和检查类别:节点中继链的全节点在CST中生成项目证明的工具,轻客户端或被裁剪的节点检查这些证明的工具。MQC存储和分发协议类别:节点每个通道的状态都由消息队列链描述,该队列是一个哈希链,其中的链接由“(M,b,H)”定义:最近发送的消息、先前发送的消息所在的块高度、以及先前链接的哈希值。sending平行链的全节点有责任维护MQC的所有链接,直到并包括b小于receiving平行链的水印的链接。该para的完整节点将知道其通道的所有MQC头,因为它们是通过执行该块产生的。这将需要与Cumulus团队在API上进行协作。我们将需要一个网络,平行链的收集人可以在该网络中发现并获取从所有通道传入的MQC的相关部分。通道注册者和经济学类别:Runtime平行链通过存放一笔存款来打开或关闭通道的runtime逻辑。平行线程可以打开的通道数量将受到限制。paras用于runtime逻辑通过放下存款来打开和关闭通道。parathread可以打开的通道数量将受到限制。待关闭的通道应保持打开状态,直到接收者的水印达到关闭所要求的区块高度为止。钓鱼/Slashing
有效性/可用性报告处理程序类别:Runtime在Polkadot中,恶意的平行链组可以强制包含无效或不可用的平行链区块。钓鱼人的工作是监测这些区块并将其报告给runtime。此项与报告处理程序有关。关于可用性/有效性的W3F研究文章提供了争议解决过程的整体视角:可用性和有效性-W3F研究。未解决且需要采取的主要行为之一,是在争端解决流程断定出现错误时发生的“回滚”。当我们将平行链区块标记为无效或不可用时,我们需要将所有平行链回滚到此状态之前的某个点。我们还需要回滚中继链的状态,因为可能已经有一条消息从平行链发送到中继链,现在需要回滚。最简单的方法是通过延迟向上消息来回避该问题,但这将极大地影响平行链参与插槽拍卖、理事会投票等的用户体验。假设我们无法回避这一点,我们将必须找到一种方法来回滚中继链的指定状态。双重投票Slash处理程序类别:Runtime在见证过程中,验证人只能为给定的中继链区块提交一个“候选”消息。如果在平行链区块上发布“候选”消息,则不能在该平行链区块上发布“有效”或“无效”投票,因为“候选”消息是隐性有效性投票。否则,在给定的平行链区块上同时进行“有效”和“无效”投票是非法的。Runtime处理程序需要两个相互冲突的投票作为参数,并需要对违反者进行slash。有效性/可用性钓鱼类别:节点验证者也可以根据VRF可用性和有效性-W3F研究自行选择,并采用此代码路径。验证人和钓鱼人将选择平行链区块进行重新验证。在这些步骤中:尝试恢复PoV区块,并退回到纠删码。如果不可用,则发布报告。尝试验证PoV区块。如果无效,则发布报告。双重投票钓鱼类别:节点在见证过程中观察到双重投票的节点应向链提交报告以触发Slash。阶段该路线图分为多个阶段,相对于上一个阶段来说,每个阶段代表另一组的交付成果或黑箱组件上的迭代。阶段0:MVP
最初的阶段——这是无slashing或跨链消息传递的平行链。它根本上就是注册和验证正常运行的PoC。基础架构/API:
自定义libp2p子协议对等集管理任务:
拍卖平行线程拍卖验证人分配协议:
证明流通可用性纠删码PoV区块获取收集循环跨链消息传递:
终结CandidateReceipt格式阶段1:钓鱼和Slashing
此阶段标志着平行链安全性的进步。一旦完成,平行链就是成熟的加密经济学上安全的汇总基元。此阶段还包括有关XCMP的实现工作,但还没有完全启用。协议
可用性纠删码PoV区块获取钓鱼/Slashing
有效性/可用性报告处理程序双重投票Slash处理程序有效性/可用性钓鱼双重投票钓鱼跨链消息传递:
终结PoVBlock格式。阶段2:消息传递
此阶段标志着跨链消息传递的交付。包括XCMP部分剩下的几乎所有内容。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。