深入了解波卡跨共识消息 XCM(1)

共 5646字,需浏览 12分钟

 ·

2022-06-08 12:22

加入 PolkaWorld 社区,共建 Web 3.0!

在近期的 Zero Knowledge 播客节目中,Parity 联合创始人 Rob Habermeier 分享了 XCM 如何允许平行链相互通信。PolkaWorld 翻译了该播客内容,本文是第一部分,接下来的部分会在近期发布在 PolkaWorld 公众号上。


AnnaRose:欢迎来到 Zero Knowledge,我是主持人 AnnaRose。在这档播客中,我们将探索最新的零知识研究和去中心化网络,以及有望改变我们在线互动和交易方式的新范式。


本周,我与来自 Parity 的朋友 Robert Habermeier 聊了聊 XCM,即跨共识消息传递格式。我们讨论了 XCM 允许平行链通过中继链上的验证人相互传递消息的方式,这是 Polkadot 原生互操作性协议。这里做一个小修正,在对话中我混淆了两个术语 —— XCM 代表跨共识消息,XCMP 代表跨链消息传递。


Rob 也是我多年的朋友,有时也和我共同主持这个节目。欢迎回来,Rob。


Rob:谢谢,很高兴来到这里。


AnnaRose:今天我们将了解 Polkadot 的一些进展,回顾一下自从上一次你来到节目后发生的事情。我想先深入聊聊 XCM 的定义。


Rob:好的。XCM 代表跨共识消息,随着时间的推移,我们可以用它来连接起许多不同的生态。一开始,它主要关注接入到中继链的平行链之间的通信,或者说 Polkadot/Kusama 生态中的区块链。


AnnaRose:我刚刚提到了 XCM,但还有个类似但不一样的术语叫 XCMP。它们都是什么意思?


Rob:这个确实值得注意一下。首先说明一下,我们之后很可能会把 XCM 的名称改掉,改成一个更吸引人的名称。XCM 代表跨共识消息,它只是一种格式和协议,而不是消息的实际数据传递。消息的传递就是我们所说的 XCMP,即跨共识消息传递或跨链消息传递,也就是让 Polkadot 生态系统中的平行链互相发送基本原始数据的机制,这样它们就可以发送任何类型的字节。但我们还创建了跨共识消息格式 XCM,它将语义含义附加到这些字节,并且作为生态系统内的标准,用于表示链可能对每个字节采取的不同类型的操作。


AnnaRose:我们应该深入聊聊这一点。但在这之前,我想了解一下,自从我们上次采访你以来你一直在做什么,上一次采访应该是 2019 年夏天。从那以后发生了很多事情,可以简单介绍一下过去快三年里,你经历了什么吗?


Rob:让我们把时间拉回到过去,这中间真的发生了好多好多事情。2019 年夏天我们聊的时候,我们的重点主要是在开发 Substrate 上,包括区块链 SDK、共识机制和 Polkadot 平行链如何实际运作的研究。所以当时,除了平行链协议如何运作的原型之外,我们没有任何东西。那么在 2019 年,我们在努力做什么呢?我们在构建可插拔的共识和 Substrate,我们在构建 WebAssembly 执行的东西,用于构建我们称之为 ENCO 的 runtime,即链的业务逻辑,我们正在致力于让 libP2P 可以用于生产环境。这是在 Kusama 发布前不久,它于 2019 年秋季上线。


Kusama 网络本质上是 Polkadot 的金丝雀网络,代码可以在其中以实际价值投入生产,它也是权益证明网络,只是与 Polkadot 主网不同级别的权益。所以简而言之,在 2019 年我们刚刚起步。我认为 Polkadot 在很多方面都是一个独特的项目,因为我们几乎从头开始构建了整个技术栈。这包括网络、WebAssembly 执行、WebAssembly 编译、区块格式、Gossip 协议。我的意思是,绝对一切都是内部构建的代码。所以我们在那段时间里一直在培养,很多专业知识,但就实际所做的而言,我觉得今天(5 月 11 日)实际上是我们谈论 XCM 的好日子,因为今天刚好是 XCM 在波卡启动的日子。


XCM 已经在 Kusama 上启动了几个月了,我记得有三四个月了,平行链已经能够相互打开通道并发送消息。但是今天,一项 Runtime 升级通过了治理的批准并在 Polkadot 上实施,这让平行链能够在 Polkadot 上做完全相同的事情。所以我们现在可以让价值在平行链之间 “飞行” 了。但与此同时,从 2019 年开始,我们基本构建了整个平行链协议。我们完成了大量的研究,并构建了这个协议的生产化实现。这是为了实际构建平行链区块,发送给验证人进行验证,包括整个数据可用性层和安全协议、批准和争议,我有一个很长的博客文章总结了所有这些东西。因此,我们不必在此深入讨论所有这些东西,但这些都已经处理好了。从去年年底发布后,我们正在慢慢推出所有剩下的功能。


AnnaRose:酷。你认为 Polkadot 的形成方式与其他一些协议有什么不同吗?我看到有很多东西是后来新加进去的,你觉得这些内容都是先计划好了,现在只是交付计划的内容呢,还是你觉得有一些战略、技术、概念会随着你们不断前进而有所发展?你们有没有遇到在实施过程中需要更改最初计划好的内容的情况?


Rob:当然不同。Polkadot 不是 Geth 的分叉,最大区别之一是我们拥有自己的代码库,我认为这可以追溯到 Parity,也就是曾经的 EthCore 的精神,它是第一个真正严肃的以太坊替代客户端,以 Rust 实现,并且是将 Rust 带入区块链世界的首创。所以我们本质上是区块链节点编写者,这给了我们理由来再次实现很多东西,并以我们自己的方式去做,从过去编写区块链节点中吸取教训。我们有边实践边学吗?绝对的。开发过程中的好玩的地方,但也很烦人的地方就是,你需要面对现实情况,面对碎片化和嵌套的复杂性。


你可以说 “我们只是要执行这段代码”。那么,你是在一个单独的进程中做到这一点的吗?比如万一机器宕机了,你想怎样把它持久化到硬盘上?而这些东西,在你刚写论文,做最小化假设时,是很难把它们都考虑到的。当你写论文的时候,你只是说 “不能有三分之一的节点出故障”。但是在工程实践中,你必须非常小心,确保没有人可以发送一个消息包,把所有节点都宕掉。还要注意你正在使用的资源类型,你的实际内存限制是多少等等。所以我们当然必须得适应现实情况。其实 Polkadot 白皮书中描述的内容更类似于现在的 Optimistic Rollups。


AnnaRose:哇哦。也就是更像是博弈论性质的?中继链和平行链之间的安全性不是欺诈证明?


Rob:是的,有点类似。还有很多细节还没有探索,比如链如何终结?终结的必要先决条件是什么?你需要什么样的分叉选择规则来确保避免坏区块,以及类似的事情。因此,我们现在会解释说,对于 Rollup 生态来说,是一种分割并选择的 Rollup,我们我们使用随机抽样和主动检查以确保平行链区块的状态转换实际上是有效的,而不是像欺诈证明机制那样,只是做出某种潜在的经济假设 —— 如果现在还没有人说这件事是坏的,那它可能是好的。我们实际上有一个更主动的检查,就像是 —— 现在有这么多人检查它,如果他们中的一些人消失了,我们会招募更多的人来检查它。如果有人提出异议,就会升级到每个人都检查。然后我们就知道,这些人都已经签署了良好的区块,因此我们可以终结它。所以在安全模型方面,我们现在更像是 ZK Rollups,而不是 Optimistic Rollups 之类的东西。


AnnaRose:然而它也不是 ZK,它不是有效性证明。你还在做某种检查,本质上是抽样。


Rob:是的,没错。你可以在此模型中做 ZK Rollups。当然,ZK Rollups 的经典问题是你创建的电路的复杂性。在 Polkadot 模型中,我们提供的是让你能够检查状态转换是否有效的见证数据。然后大家实际上必须去检查并确保它真的是有效的,而不是仅仅在 Layer 1 共识机制上执行。


AnnaRose:这种新模式是如何产生的?中继链是数据可用性链吗?也就是 Rollups 这类的东西存储的地方?


Rob:是的,数据存储在中继链的验证人集中。所以我们不做轻客户端可用性抽样,这是一种潜在的经济假设,即会有足够的轻客户端。我们只是说,好吧,这些是中继链的验证人。他们的任务之一是提供数据。因此,我们做了纠删码,让其中任何三分之一的验证人片段都可以重建整个数据。在考虑包含平行链区块之前,三分之二的验证人必须确认他们拥有自己的区块。于是就有了这种纠删码和代码块分配机制。这是中继链和平行链机制的一部分。


中继链为平行链提供了许多服务,但最重要的是数据可用性、安全性和分叉选择规则。这个分叉选择规则非常重要,因为我们实际上已经将中继链的分叉选择规则与平行链或 Rollup 有效性集成在一起,这意味着你可以非常及时地处理平行链之间的消息,甚至在你知道它们是有效的之前,因为如果你发现它们是无效的,你只需在那个无效区块处分叉就行。


AnnaRose :这个过程会很麻烦吗?还是说你们把它实现得很简单?


Rob:它不是手动的,是完全自动化的。在良好的网络条件下,整个过程只需要几分钟。让坏区块被废弃,并在其位置上构建一个新区块。


AnnaRose:你们真的见过坏区块吗?


Rob:在主网上还没有,在我们的测试网上有过。在推出这个功能之前,我们编写了一个测试网,其中包含一千个全球分布的验证人。我们编写了恶意验证人,它们会尝试以多种不同的方式对其进行攻击。比如说,假设不分发数据块或分发坏的数据块,或者让数据无效或泄露,还有比如把好的说成坏的,坏的说成好的。我们会以非常高的速度运行这些攻击,测试网络连续几周每 10 秒重组一次。我们以这种方式发现了许多问题。在我们上线到主网之前,已经连续运行了几周。


AnnaRose:我们又聊回 XCM 吧。你在开头定义了 XCMP 和 XCM 之间的区别,我可以把 XCM 看作和 IBC 同类的东西吗?是不是 XCM 是规则和标准,XCMP 是 action 或者中继器?


Rob:我们使用的一个比喻是,XCM 和 XCMP 的关系,就像 HTTP 服务器开发中的 REST 和 RESTful 的关系。RESTful 是指你如何回答请求,是无状态的,接收请求,做出响应;而 REST API 本身就是 API。


AnnaRose:XCM 是 API,XCMP 是 action 吗?


Rob:只是数据,它是数据和该数据会送达的保证。


AnnaRose:好的,我假设大多数听众都知道 Polkadot 的架构,有中继链,有平行链接入到上面。对于接入到波卡的平行链,除非它们之间打通一种独特的桥,否则没有任何代币可以在平行链之间移动,是这样吗?


Rob:是的,有点像侧通道桥,或者更像是团队创建的临时桥。但安全保障的级别不同。因此,XCMP 的一个关键点是,本质上每条平行链都可以创建连接到其他每条平行链的桥,我们称这些桥为 “通道”。每条平行链的安全保障都是一样的,都有最高级别的安全性。因此,它们之间的消息传递也有着相同级别的安全性。所以这里面没有最薄弱的一环,你可以即时传递消息。


AnnaRose:我猜想 XCM 的主要使用场景之一是移动代币,但你们不称之为代币移动,它不是桥,而是一些消息。如果你要用 XCM 来移动代币的话,这个过程如何实际发生?是不是说,它是一条自动路径,但你还是会在两侧构建某些东西,例如锁定/解锁,铸造/销毁等。


Rob:有很多不同的路径,我解释一下消息/action 的情况。就像你在邮件中收到一张支票,你可以存入那张支票,你可以用那张支票做你想做的事,但这个过程独立于邮局,对吧?邮局只是投递这张纸,但还有一种通用语言,比如支票的语言,和我们知道如何解释和检查这些东西上的签名。所以 XCMP 就像邮政系统一样,XCM 就像让我们能理解支票内容的文件。那么说到代币转移,这是你可以使用 XCM 做的事情之一,并且有几种不同的方法可以做到这一点。


一种方法是我们所说的传送(Teleport),即销毁/铸造。但我们有一个 “值得信赖的传送者” 的概念,也就是其他链信任哪些链来实际铸造和销毁他们的代币。他们不一定能控制代码,这些代码在其他人的平行链或 Rollup 上执行,这些链可能有自己的治理系统。这与在以太坊或其他一些智能合约平台上的可升级合约的安全保证级别相同。因为代码可以改变,你也不一定知道一年后会运行什么。所以如果用传送,你要确保相信这条链不会不负责任地铸造和销毁代币。


还有另一种类型的转移,称为储备转移。也就是你有另一条链充当某种代币的规范储备,在波卡中就是中继链,其他链的储备管理帐户都在上面。因此,他们可以与储备链对话,来在储备链中移动账户余额。所以我们有一个已经上线的公共利益链,Kusama 上的叫  Statemine,波卡上的叫 Statemint。它们是通用的资产储备链,你可以在那里创建一个代币,然后它会自动为该代币提供储备功能,然后该代币就可以在生态系统中的任何地方使用。


  • PolkaWorld Telegram 群:

    t.me/polkaworld

  • PolkaWorld Youtube 频道:

    https://www.youtube.com/c/PolkaWorld

  • PolkaWorld Twitter:

    @polkaworld_org

  • PolkaWorld 网站:

    https://polkaworld.pro/

更多内容


Gavin Wood:Web3 应用为何没有普及?障碍在哪?

Gavin Wood 认为区块链可以修复社交媒体!

提名池上线 Kusama 网络!查看奖励计划!

关注 PolkaWorld

发现 Web 3.0 时代新机遇


点个 “在看” 再走吧!

浏览 68
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报