Notes

Posted on Nov 04, 2022Read on Mirror.xyz

Polymer:区块链间通信 (IBC) 指南

https://mirror.xyz/coincapital.eth/bkoHDG-fZl3qxFVzANZWTbQ-yQhyN3LxFKilKge4mM4

IBC概述

本文将深入地探讨该协议,下图显示了IBC 核心模块如何构成IBC-Go 模块的高级表示。

IBC的基础

要了解IBC的基本构建块,必须分解几个组件:

· 轻客户端

· 中继器

· IBC 连接、通道和数据包

轻客户端

轻客户端因占用空间比全节点“更”而得名。它的主要作用是跟踪其他区块链的共识状态,并具有必要的证明规范,以验证针对客户端共识状态的证明。

轻客户端使用区块头来确认最新的区块链共识状态,而不是执行和存储区块数据和状态。轻客户端协议还包括允许无信任验证的默克尔证明。

中继器

中继器是从一个链到另一个链的 IBC 数据包的载体。它们不断检查来自发送链的IBC连接上的新数据包,一旦找到,就将它们中继到另一条链。中继器对发送方链和接收方链上的节点具有完全访问权限,这使他们能够成功地将消息从一个链传输到另一个链。

在中继IBC数据包之前,源链将在其链上提交承诺证明,然后由接收链进行验证;这就是轻客户端发挥作用的地方。中继是无需信任的,这意味着通过使用中继器,无需信任第三方跨链发送数据包,例如因被利用而臭名昭著的网桥。对于IBC,我们只信任源链和目的地链。

连接

IBC 连接封装两个有状态对象,连接在两个单独的区块链上结束。连接是通过每条链上的轻客户端之间的中继器建立的,这有助于使用通道进行数据包中继。使用握手协议安全地建立连接。

连接状态在具有以下接口的链上跟踪。

interface ConnectionEnd {    
     state: ConnectionState    
     counterpartyConnectionIdentifier: Identifier 
     counterpartyPrefix: CommitmentPrefix    
     clientIdentifier: Identifier    
     counterpartyClientIdentifier: Identifier 
    version: string
}

· 状态字段描述连接端的当前状态。

· 交易对手连接标识符字段标识与此连接关联的交易对手分类账上的连接端。

· CounterpartyPrefix 字段包含用于在与此连接关联的交易对手账本上进行状态验证的前缀。

· 客户端标识符字段标识与此连接关联的客户端。

· 交易对手客户标识符字段标识与此连接关联的交易对手分类账上的客户端。

· 版本字段是一个不透明的字符串,可用于确定使用此连接的通道或数据包的编码或协议。

渠道

IBC 通道充当数据包的管道,确保它们从一个链的模块中继到另一个链。它还确保信息仅按照发送顺序传递一次,并传递到目标链上的相应模块。每个IBC连接可以有多个IBC通道。

使用以下结构在链上跟踪通道的状态:

enum ChannelState {    
     INIT,    
     TRYOPEN,    
     OPEN,    
     CLOSED,
}

· 处于 INIT 状态的通道结束刚刚开始开场握手。

· 处于 TRYOPEN 状态的通道端已确认交易对手账本上的握手步骤。

· 处于 OPEN 状态的通道端已完成握手,并准备好发送和接收数据包。

· 处于 CLOSED 状态的通道端已关闭,不能再用于发送或接收数据包。

IBC 数据包包含使用特定接口通过通道从一个模块传输到另一个模块的数据:

interface Packet {    
      sequence: uint64    
      timeoutHeight: uint64    
      timeoutTimestamp: uint64    
      sourcePort: Identifier    
      sourceChannel: Identifier    
      destPort: Identifier     
      destChannel: Identifier    
      data: bytes
}

· 序列号对应于发送和接收的顺序,其中具有较早序列号的数据包必须在具有较晚序列号的数据包之前发送和接收。

· timeoutHeight 表示目标账本上的共识高度,在此高度之后,数据包将不再被处理,而是计为超时。

· timeoutTimestamp 指示目标账本上的时间戳,在此时间戳之后,数据包将不再被处理,而是计为超时。

· 源端口标识发送账本上的端口。

· 源通道标识发送账本上的通道端。

· destPort 标识接收账本上的端口。

· destChannel 标识接收账本上的通道端。

· 数据是一个不透明的值,可以由相关模块的应用程序逻辑定义。

IBC流程

现在我们已经介绍了一些基础知识,让我们更深入地了解IBC的流程。为了将数据包从一个链发送到另一个链,必须建立连接。与 Web2 中的 TCP 握手非常相似,连接握手允许两个单独的链相互确认。在继续之前,每个链必须就以下内容达成一致:

· 连接版本

· 共识状态

· 标识符

形成连接是一个多步骤的过程:

1. 链A:“嗨!我想打开一个连接。这是我的共识状态,我认为你的共识状态是什么,我想使用的版本,以及我存储了这些信息的一些证据。(ConnOpenInit)

2. 链B:“我承认你正在尝试打开一个连接。你对我的共识状态的记录是正确的。我可以使用要求的相同版本。我已经验证了您的证明,并为我创建的连接对象提供了我自己的证明。(ConnOpenTry)

3. 链A:“我已经验证了你的证明,并且已经建立了连接。这就是一个证明。(ConnOpenAck)

4. 链B:“我也会建立联系。(ConnOpen确认)

创建连接后,下一步是创建一个通道以在模块之间中继 IBC 数据包。作为参考,IBC 连接是电话线,IBC 通道是电话呼叫。

设置频道的过程也是一个多步骤的过程:

1. 链A:“嗨!我的链上的模块想要打开一个带有链上的模块的通道。这里有一些频道信息,证明我已经存储了它。(ChanOpenInit)

2. 链 B:“我已经验证了您的证明,并且请求的模块已接受打开通道的尝试。这是我存储频道信息的证据。(陈开嘀)

3. 链A:“我已经验证了你的证明,频道现在已经上线了。(陈开)

4. 链B:“既然你的频道现在上线了,我的频道也上线了。(陈开确)

现在连接和通道已上线,最后一步是发送或中继IBC数据包。回到电话线类比,IBC数据包是通过电话线发送的信号,在接收线上被解释。

发送 IBC 数据包的过程也是一个多步骤过程:

1. 链A:“嗨!这是一个 IBC 数据包;存储有关连接、通道、消息和证明的所有信息。我已经在我的链上添加了IBC消息。(发送数据包)

2. 链 B:“我已经验证了您链上的 IBC 消息;接收并解释 IBC 数据包。这是致谢。(接收包)

3. 链A:“我收到了你的确认,祝你有美好的一天!(确认包)

IBC应用

IBC通过使建立在协议之上的dApp能够做更多的事情来推动创新。这里有几个例子。

链间账户

使用真实世界的例子,通过IBC,拥有美国银行账户的人现在可以访问法国虚拟银行账户的交易,IBC允许用户通过链间账户跨链访问账户。它有助于跨链共享数据并在另一条链上写入状态。

链间查询

链间查询允许链跨链查询信息。链间账户主要用于跨链交易,这意味着它有一个额外的身份验证层。

跨链验证

跨链验证允许在一个链上运行证明逻辑,并使用IBC跨链传递证明结果和相关信息。假设链 A 运行证明逻辑来验证链 B 上的块,并将证明结果中继给链 C。这个概念将允许跨链验证,这在实现链间安全方面起着至关重要的作用。

Polymer 将IBC缩放到所有链

Polymer正在开发一种通用路由器链,该链支持跨所有链的e2e IBC连接,在没有原生 IBC 集成(例如 Cosmos SDK 链)的情况下,我们将 IBC 直接集成到交易对手链的 VM 中。

Polymer 旨在成为跨异构网络的最高效的 e2e IBC 协议,该团队继续致力于核心协议的优化,并投资于零知识的研发工作(在以后的文章中会详细介绍)和基础设施。

作为IBC原生协议,Polymer将支持跨所有链的高效光客户端证明验证,并将提供核心IBC原语,例如非原生IBC链虚拟机中的连接和通道。

关于Polymer:

Polymer是第一个基于IBC的模块化网络协议。聚合物链将实现跨所有集成链的ZK-IBC连接,具有基于轻客户端状态证明验证的无信任架构。Polymer相信多链未来主要由一个开源,社区开发和维护的行业标准IBC x Polymer连接。

Polymer官方网站:https://www.polymerlabs.org/

Polymer推特:https://twitter.com/PolymerDAO

Polymer Discord社区:https://discord.com/invite/hvMQp4qcM6