查看原文
其他

波卡入门系列丨波卡国度商务交流规则 XCMP

BluemountainLabs BluemountainLabs 2022-04-08






XCMP协议是波卡跨链传递信息的核心,它保证了有序、及时、公平的传递和处理,且其设计思维非常的严谨。


文章能表达的有限,11月25日晚8点将会在BML直播间为大家详细讲解XCMP,另外我们将在下周五出一篇关于平行链插槽拍卖的文章,敬请期待。

 


 

摘要


平行链上会有很多的DApp,信息有序、即时、公平的传递会使DApp间更便捷地传递信息,而波卡通过XCMP保证了信息传递的便捷,以繁荣波卡网络里的交易
开通XCMP需要两条平行链双方同意,类似于达成合作且需要押定DOT,这是一个对输出价值的监督。不是所有信息都可以跨链,项目方需要注意跨链内容,不然容易被单方面结束合作,关闭通道,被关闭次数多了容易以后没得合作。
这篇文章先简要说明XCMP是怎么运行的,再通过问答方式说明在XCMP运行过程中设置一些条件限制的原因。
以下我们把发送信息的平行链称为发送链,接收信息的平行链称为接收链。每条平行链都有自己的收集者和验证者。  什么是XCMP? 总的来说,XCMP 是平行链之间的信息传递流程,传递过程中需要发送链和接收链的收集者、验证者一起参与。
XCMP 的细节还在完善中,在完成之前都会使用 HRMP 来传递信息,其功能和交互界面都是一样的,只是 HRMP 会把信息都存储在中继链上,所以对整个网络资源更加依赖,但前期网络中信息量相对少,中继链可以承担这些存储。
XCMP 是以元哈希的方式存储相关传送链信息的元数据在中继链上,而不是存储全部完整的信息,如此也节约中继链存储空间,且,以备平行链出现问题时需要回滚恢复状态(这也是共享安全之一)。  

XCMP的全过程


首先,XCMP 序列的发起必须先在两个平行链之间打开一个通道,通道里的信息只能被发送链和接收链的收集者相互识别。
两个平行链之间最多拥有一条通道,在通道中有一条单向的发送信息的队列,一条单向接收信息的队列。通道需要押定一定的 DOT 来打开,当通道关闭的时候 DOT 也会还回去。(详见后文问题2)
其次,通道打开后开始传递信息,由收集者和验证者写作完成。这些信息有最大比特值限制。(详见后文问题3) 

传递信息的过程中:


  • 收集者节点:负责传递处理链之间的信息,会例行公事般的击打网络中所有其它平行链的收集者节点,看看其他链有没给自己发送新信息,新信息会加入到进站序列(ingress)等待收集者的处理并把处理好了的交易广播至接收链网络中。这些信息会通过目标阈过滤,以匹配接收链的收集者获得工作。收集者节点上发现新信息、读取入站序列、处理出站序列信息、块生成打包是同步进行的。


  • 验证者节点:验证者验证把平行链输出序列(outgress)上的交易,并传递到目标链的输入序列(ingress)上,以及储存相关信息元数据的哈希值在中继链上。同时,验证者都会实时阅读自己链的出站序列(outgress)信息,识别信息的传递有没有发生。



完整的传递信息的流程



收集者 A 是平行链 A 的全节点,会负责把链 A 要传递给其他平行链的信息附上目的地和时间戳,打包生成新块,通过链 A 的输出序列,传递给中继链上链 A 的验证者 A。
验证者 A 通过提前存储在中继链上的链 A 的 STF 和收集者 A 传递的证明来验证信息的有效性,并将验证后有效的信息传递给目标平行链 B 的验证者 B,信息经验证后又打包进入链 B 的输入序列传给收集者 B,收集者 B 解读和处理有平行链 A 想要发送给平行链B的信息。
被传递的信息会触发目标链上的智能合约,以完成预期的资产或信息转移。  波卡在保证扩展性的同时也想要保证网络信息有序、即时、公平的传递,如此网络里的交易才能更加有效且顺滑的运行。XCMP 的设计完全是围绕这个观点来设计的。
接下来我们将以问答方式为大家解释为什么要在XCMP运行过程中设置一些条件限制。
以下篇幅小白可以不看,内容较复杂,大家做好准备,深呼吸......



Q1:什么叫做信息的有序、公平传递?
有序、公平是形成一个自洽、自主运行的网络的基础之一。

任何接收链可以接受来自多个输入通道里的信息。在 XCMP 中,波卡保证接收方必须公平的执行这些信息,也就是由秩序的全部执行,毕竟信息交互是因为链之间先许可合作才发送的。
如何保证信息有序、公平的处理:
  1. 来自不同发送链的信息,会根据预先设定好的规则被有序的识别处理,这一点不被接收链控制。换句话说,多个接收通道的信息会融合到一个单独的输入序列里一起传递给接收链,融合的规则是系统提前设置好的,接收方只需要按序处理这个输入序列的信息就行。

  2. 接收方每次必须验证一个区块里的至少一条新信息,如此就保证了发送方的信息一定会被接收方处理,不会有信息因为无穷的延迟而留下不被处理。


相比之下,虽然 Cosmos 也允许选择有序发送,但由于缺乏用于此目的的通用激励模型,可能无法保证消息会永远到达。



Q2:为什么XCMP传递的信息有最大值限定?


为了保证中继链验证信息的效率,且不影响扩展性,从而提高网络工作效率。
  1. 由于中继链负责所有平行链的安全共享,使得中继链上的一个分叉可能会改变整个波卡网络,以及连接到波卡网络的的平行链的历史。

  2. 前面也说到,平行链状态会以元哈希的形式存储在中继链上,意思是平行链的运行本身会成为中继链历史状态的一部分。


因此,对于需要引用中继链中特定历史状态的平行链来说,中继链上信息的稳定和准确就特别重要
所以波卡希望对这些在特定历史状态中交互的信息采取措施,保证它们的稳定准确,以确保所有平行链的安全稳定。这意味着波卡必须用中继链来鉴定信息(因为中继链是独立于平行链的,不存在利益冲突)。
同时,为了让中继链鉴定信息有效率且同时保有扩展性,波卡使处理这些信息所需的算力和存储在中继链上尽可能的轻。这就包括了最小化中继链上数据的存储,以及特别的,需要不变的或者近乎不会变的信息大小。 
所以就从源头上限制了 XCMP 传递的信息的大小。如此,当有100个平行链在一个单独的中继链块上发送信息到10000个目的链的时候,才不会因为不堪重负而出现问题。



Q3:为什么要押定DOT才能打开信息传递通道?
  • 为节约网络算力资源即保证扩展性从而提高网络工作效率。

  • 为促进项目方友好合作,有价值输出的合作。


同时向多条链发送,或同时接收多条链的信息,都会需要更多的网络资源,所以波卡限制了一条发送链同时可以向多少条接收链发送信息的名额。XCMP只能在彼此之间建立了通道的两条链中运行,这样就实现了上面的发送接受链数量的限制。

单独的平行链最多有100个通道。而全网所有链之间的总通道数,波卡通过押定一定数量的 DOT 来限制,此部分 DOT 是没有是收益的。因此从经济角度,开通通道需要来自双方的持续的合作才划算,因此设置通道需要两条链都同意押定 DOT 才能打开。
当然,系统允许单方面结束合作,如果接收链觉得被某些发送链的垃圾信息包围,他们可以有选择性地关闭这些通道。 
总结
终于到最后总结了,让我们回到摘要从两个角度分析。
  • 交互角度:平行链上会有很多的 DApp,信息有序、即时、公平的传递会使 DApp 之间信息的传递非常便捷。波卡通过 XCMP 保证了这样的信息传递,以繁荣波卡网络里的交易。


  • 经济角度:开通 XCMP 需要双方都同意,相当于合作,需要 DOT 且可单方面结束合作,这是一个输出价值的监督。所以跨链也不是什么信息都跨,项目方自己要注意自己在外合作的声誉,就要注意跨链内容。不然容易被关,关多了容易以后没得合作。


最后留个问题给大家思考:XCMP协议从哪些方面为中继链节约网络算力和存储资源?(答案就在文章里哦)  
补充:
SPREE运用在进一步去信任以及代币转账中。
SPREE模块是parachain逻辑中的代码片段,在许多链之间共享,通过使平行链用共享SPREE代码并强制他们执行这段代码,提供了一种进一步减少信任的方法。
它的执行和状态与平行链的其他逻辑和状态是分开的。意思是,无论任何一方的平行链逻辑的其余部分是什么,XCMP将允许一个链上的SPREE模块向另一个链上的SPREE模块发送消息,并确保该消息正确到达;这确保了只知道SPREE模块的代码就足以确定如何对特定消息进行操作,以及该模块提供的任何保证都将得到实现。


-往期精彩看点-
一文了解Polkadot(波卡)是什么?
波卡入门系列丨Substrate和Runtime
什么是Phala,隐私计算又为何重要?
Polkadot主要名词解释(上)Polkadot主要名词解释(下)
波卡生态系列丨什么是ChainX?
区块链中的《头号玩家》——Darwinia





END




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存