#ibc #channel #cosmos #blockchain #data-structures

no-std ibc-core-channel

ibc-rs 维护,包含ICS-04通道与数据包语义的实现,并从ibc-core-channel-types包中重新导出基本的数据结构和领域类型

10个版本 (6个重大更改)

0.54.0 2024年8月12日
0.53.0 2024年5月14日
0.52.0 2024年4月26日
0.51.0 2024年3月26日
0.48.1 2023年11月27日

#825 in 神奇豆子

Download history 1191/week @ 2024-05-05 1365/week @ 2024-05-12 1252/week @ 2024-05-19 1134/week @ 2024-05-26 2338/week @ 2024-06-02 908/week @ 2024-06-09 795/week @ 2024-06-16 885/week @ 2024-06-23 841/week @ 2024-06-30 747/week @ 2024-07-07 607/week @ 2024-07-14 414/week @ 2024-07-21 144/week @ 2024-07-28 71/week @ 2024-08-04 387/week @ 2024-08-11 91/week @ 2024-08-18

每月714次下载
用于 15 个包 (2个直接使用)

Apache-2.0

445KB
8K SLoC

IBC核心

这是顶级库,将跨链通信(IBC)核心模块作为元包重新导出。它旨在简化将各种IBC核心模块导入和集成到您的区块链中的过程。

IBC是一个分布式协议,它允许不同主权区块链之间的通信,IBC核心是处理数据包传输、身份验证和排序(TAO)的协议部分。

ibc-core包内的结构旨在为外部用户提供灵活性。您可以选择使用整个ibc-core包,或者有选择性地导入特定的库。从那里,您还可以选择引入整个子模块(例如ibc-core-client包),或者仅引入与模块关联的数据结构(例如ibc-core-client-types)。

这种通用性赋予主机包括链集成器、中继器或任何IBC工具项目,在最适合其特定需求的层上构建解决方案的能力。

子组件

目前,ibc-core 组件包含了以下IBC核心规范的实施:

ICS-02:客户端语义

ICS-03:连接语义

ICS-04:通道和包语义

ICS-24:主机要求

ICS-25:处理程序接口

ICS-26:路由模块

与跨链标准(ICS)的差异

此组件在多个方面与ICS规范存在差异。以下为更多详细信息。

模块系统:不支持不受信任的模块

ICS-24(主机要求)对主机状态机必须支持的模块系统提出了以下要求

主机状态机必须支持模块系统,其中自包含的、可能相互不信任的代码包可以安全地在同一账本上执行[……]。

此组件目前不支持相互不信任的包。也就是说,主机状态机上的模块被认为是完全可信的。在实践中,这意味着每个模块要么是主机状态机开发人员编写的,要么完全经过他们审查。

端口系统:没有对象能力系统

ICS-05(端口分配)要求主机系统支持对象能力引用或源认证模块。

在前一种对象能力的情况下,IBC处理程序必须能够生成对象能力,这是唯一、不可复制的引用,可以被传递给模块,并且不会被其他模块复制。[……]在后一种源认证的情况下,IBC处理程序必须能够安全地读取调用模块的源标识符,这是主机状态机中每个模块的唯一字符串,不能被模块更改或被另一个模块伪造。

此组件目前不需要主机系统中的任何一种。由于假设模块是可信的,因此没有必要为此对象能力系统提供保护资源,以防止潜在恶意模块。

关于此的更多背景信息,请参阅此问题

端口系统:转移和释放端口

ICS-05(端口分配)要求IBC处理程序允许转移端口的所有权释放端口

我们目前都不支持。

异步确认

标准为模块提供了异步确认数据包的能力。这允许模块接收数据包,但只在稍后时间(在此之后它们将写入确认)应用更改。

我们目前强制应用程序将数据包作为onRecvPacket()的一部分进行处理。如果您需要为您的应用程序异步确认,请打开一个问题。

请注意,这仍然使我们100%兼容ibc-go

贡献

IBC以英语在cosmos/ibc仓库中指定。任何协议更改或澄清都应在此处贡献。

如果您有兴趣贡献,请查看贡献指南。我们欢迎并感谢社区的贡献!

依赖关系

~16MB
~317K SLoC