其他
波卡入门系列丨 XCMP番外篇
摘要
XCMP是平行链之间的信息传递流程,需要两条平行链达成合作意愿,并押定一定DOT在中继链上才能进行,且此部分DOT无收益。整个过程需要两条链的收集人、验证者共同参与。传递信息时,传送链的状态也会保存在中继链上,以备链出问题需要回滚恢复状态。
上一篇文章《波卡入门系列丨波卡上的角色介绍及如何确保波卡网络安全?》,我们在前半段解释清楚了信息是如何传递跨链的,但是后半段的内容,对很多刚开始了解的朋友来说,有点晦涩抽象,今天我们把抽象具体化,用比喻说明,看不完就看最后总结部分以及可以先收藏。
不想看为什么、怎么实现的伙伴,也可以直接跳到最后看总结。
好,开始了。
首先跨链,就是两条平行链之间要合作项目,押定的DOT就是诚意金,信息跨链就是合作过程中的沟通。
即然是沟通,那么想想生活、工作中,怎样才算有效沟通?需要至少满足三个基本因素。
1、沟通到位:说完整且直接说给需要了解信息的人。若第三方传达,可能出现没有传达、没传达完整、或意思有偏差。2、沟通清晰明了有次序:有逻辑或时间顺序,或其它你们习惯的次序。3、准确,无篡改。(当然每次最好别说太多,不好表达也不好消化) 波卡在帮助平行链传递信息的时候也要做到这三点,信息跨链传递到位、有序、准确,这样网络里的交易才能更加有效率。XCMP 的设计便是围绕这个观点来设计的。
1、传递到位2、传递有序公平3、传递快速安全
一、传递到位
SPREE模块&Cumulus模块,两者本质上都是Wasm Blob。波卡的跨链信息解读转换是通过Wasm来完成的。
通俗的说,信息传递到位需要双方直接沟通,避免第三方带来的遗漏或者没传达。SPREE在这个过程中实现了信息的点对点通信传达,Cumulus则实现了信息的转换。
就像一个中国人和韩国人聊天,他们直接对话是SPREE;两人用非母语英语沟通使双方都听得懂,这个非母语转换就是Cumulus。
1、SPREE
XCMP流程保证了信息从A传到B,但不确保信息会在B链上被准确解读和执行。SPREE提供了这个保证。
所以,XCMP是通过中继链的共享安全实现了无信任的消息传递,而SPREE是实现了消息在链之间的无信任执行。怎么做到的呢?
① SPREE是独立的,一个链的SPREE可以向其他链的SPREE发送消息,且它的执行和状态,不受平行链其余部分逻辑的影响。这确保了消息的准确到达。
② SPREE模块会上传到中继链,平行链加入共享该模块就会被强制执行该模块的逻辑。这确保了只知道SPREE模块的代码就能完成信息的解读和执行。 2、Cumulus
Cumulus是一个数据库,相当于是一个转换器,会把各链不同的Runtime逻辑转换为中继链验证者可以验证的函数。 二、传递有序
沟通的时候表达有一定的逻辑,会让听者更容易理解沟通的内容。
链A会接收其它很多条链B\C\D等发送过来的信息,波卡为了避免这些信息被不公平处理(被挑着优先处理或不处理),波卡设定了两个规则:
1、所有信息有次序的排入接收链的输入队列
来自不同发送链的信息,会根据系统预先设定好的规则被有序的识别处理。即:多个接收通道的信息,会融合到一个单独的输入序列里,一起传递给接收链。融合的规则是系统提前设置好的,接收链只需要按序处理这个输入序列的信息就行。
2、接收链每次必须至少验证一个块里的一条新信息
强制按顺序处理 + 每次至少处理一个信息 = 所有消都会被处理。如此就保证了发送链的信息一定会被接收方处理,不会有信息因为无穷的延迟而留下不被处理。
相比之下,虽然 Cosmos 也允许选择有序发送,但由于缺乏用于此目的的通用激励模型,可能无法保证消息一定会到达。 三、传递快速安全
这部分有点复杂,我们休息5秒钟,深呼吸~
先放专业点的解释,看不下去就直接跳过,这部分是很多条链一起工作,相互存在交易依赖时需要考虑的。
Polkadot的共享安全性确保了平行链上传递过来消息的正确性和真实性。但当某条平行链出现问题时要怎么确保恢复到之前的数据,确保后面的交易不会因为链出问题而发生问题呢?
验证历史一致性
①平行链的运行本身会成为中继链历史状态的一部分,因为跨链信息传递过程中,平行链状态会以元数据形式存储在中继链上。
②中继链上的一个分叉可能会改变整个波卡网络历史,以及连接到波卡网络的平行链的历史。
③因此,对于会引用中继链中特定历史状态的平行链来说(即对引用存储在中继链上的这些交易信息的平行链来说),中继链上信息的稳定和准确就特别重要。
④所以,波卡希望对这些在特定历史状态中交互的信息采取措施,保证它们的稳定准确,以确保所有平行链的安全稳定。
我们来类比以上4句话。
先有个前提,比如现在A、B、C互相之间做一笔交易。A是个商人,要卖一批货赚差价,他找了很多制造商一起供货,其中包括B。B制作商品时需要原料供应商就找到了C。现在A能获得多少成品取决B能生产多少,B能生产多少取决于C能提供多少原料。
也就是这个过程需要B和C先交易,然后才有B和A交易。为了保证整个合作流程诚实、准确,整个过程的所有交易会有一个中立的备案公司介入,用于记录交易和提供给ABC查阅,备案公司和各方自己记录的信息一致则整个交易无误。
所以,初级学者注意,开始对应上面4句话。
①无论A和B,还是B和C的交易,都会被写入备份公司的记录系统里。所以A和B、B和C的交易信息,都是这个备份公司记录系统里信息的一部分。
②备份公司记录系统出错会影响自己的业务信誉,也会影响实际交易方的交易。因为A和B的交易基于B和C,若记录的BC交易有误,会导致信息不对称,A就可能做出错误的最终交易数,或无法确认最终的交易数也无法确认B信息的真实度。
③因此,对需要引用这个备份公司记录系统里交易信息的商家来说,备份公司系统里信息的准确、真实就显得特别的重要。
④所以,现在备份公司需要做的事情时把这些信息保存好,不丢失、不被更改。这才会有益所有的商家,同时自己也才有生意可以做。 波卡中继链就相当于这个备份公司的记录系统。跨链信息就是这些备份的信息。整个中继链的稳定安全就是这些信息的稳定安全,也是这些交易商交易的安全保障。波卡通过NPOS机制+插槽拍卖+混合共识GRANDPA & BABE来保证网络的安全稳定。
网络的稳定安全,就是信息传递的稳定安全,就是网络信息存储的稳定安全。这意味着必须使用中继链对消息进行验证,因为消息传递和记录是发生在中继链上的。 为了保证中继链的传递高效传递和可伸缩性,波卡使处理这些信息所需的算力和数据存储在中继链上尽可能的轻。这就包括了最小化中继链上数据的存储,以及特别的,需要不变的或者近乎不会变的信息大小。
所以,一方面限制了通道数量,另一方面限制了XCMP每次传递的信息的大小。如此,当有100个平行链在一个单独的中继链块上发送信息到10000个目的链的时候,才不会因为不堪重负而出现问题。
补充:
通道数量:DOT开通双向通道(无收益)
Polkadot限制了发送链可以向多少个不同的接收链发送消息。这是因为向多个链发送和接收消息都需要网络资源。
通过只允许在彼此之间建立了通道的平行链来强制执行此限制。达成合作,建立通道需要押定DOT在中继链上,目前具体的数额还不知道,但应该不会是小额度的。
这部分DOT是不流动且不会有任何收益的,存在的意义就是制约:限制通道数量,节约网络资源。且促进了项目之间的良性合作。
因为这部分DOT完全可以去质押获得收益,或者在二级市场流动,所以一般一定是有深度和做的两个项目方才会互相愿意开通道,不然从经济利益上来说是很不划算的。
给自己鼓个掌,已经看到了最后,最难的部分已经讲完了。
接下来这一部分,我们改天再细讲。
讲完了左边的123部分,还差右边两个角色。《角色》提及了他们具体的工作是什么,但是大家知道这两个角色被设计出来的原因是什么吗?相互间怎么帮忙和监督的呢?以及每个角色存在多少合适呢?
总之核心思想是防止作恶和减轻平行链工作量。
总结
资料参考:
https://wiki.polkadot.network/docs/en/learn-spree
https://wiki.polkadot.network/docs/en/learn-crosschain
https://research.web3.foundation/en/latest/polkadot/networking/4-xcmp.html
https://research.web3.foundation/en/latest/polkadot/XCMP/index.html#xcmp-and-spree
-往期精彩看点-
一文了解Polkadot(波卡)是什么?
关于波卡平行链,你需要了解的知识
什么是Phala,隐私计算又为何重要?
Polkadot主要名词解释(上)Polkadot主要名词解释(下)
Crust:波卡生态上去中心化云存储的未来
区块链中的《头号玩家》——Darwinia
END