#ibc #cosmos #blockchain

no-std ibc-core-client-context

ibc-rs 维护,包含与宿主链存储交互的必要 API,使客户端状态转换平滑。此外,提供实现自定义 IBC 轻客户端所需的必要特质。

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 日

#2721 in 魔法豆

Download history 1760/week @ 2024-04-22 1276/week @ 2024-04-29 1232/week @ 2024-05-06 1547/week @ 2024-05-13 1356/week @ 2024-05-20 1318/week @ 2024-05-27 2503/week @ 2024-06-03 1134/week @ 2024-06-10 1015/week @ 2024-06-17 1352/week @ 2024-06-24 1032/week @ 2024-07-01 893/week @ 2024-07-08 983/week @ 2024-07-15 758/week @ 2024-07-22 398/week @ 2024-07-29 206/week @ 2024-08-05

每月下载量 2,359
22 个crate中使用 (3 个直接使用)

Apache-2.0

295KB
5.5K SLoC

IBC 核心库

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

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

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

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

子包

目前,ibc-core 包包含以下IBC核心规范的实现

ICS-02:客户端语义

ICS-03:连接语义

ICS-04:通道和包语义

ICS-24:宿主要求

ICS-25:处理器接口

ICS-26:路由模块

与Interchain标准(ICS)的分歧

此包在多个方面与ICS规范存在分歧。以下为更多详细信息。

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

ICS-24(宿主要求)给出了关于模块系统的以下要求,即宿主状态机必须支持的

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

此包当前不支持相互不信任的包。也就是说,宿主状态机上的模块被假定为完全信任的。在实践中,这意味着每个模块要么是由宿主状态机开发人员编写的,要么已经由他们全面审查。

端口系统:无对象能力系统

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

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

此包当前不需要宿主系统中的任何一种。由于假设模块是可信的,因此不需要保护资源的对象能力系统。

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

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

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

我们目前都不支持。

异步确认

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

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

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

贡献

IBC以英文形式指定在cosmos/ibc仓库中。任何协议更改或澄清都应贡献那里。

如果您有兴趣贡献,请参阅CONTRIBUTING指南。我们欢迎并感谢社区贡献!

依赖项

~15MB
~314K SLoC