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日 |
2346 在 魔法豆
2,416 每月下载量
在 28 个crate中使用(9个直接使用)
225KB
4.5K SLoC
IBC核心
这是一个顶层库,作为元crate重新导出跨链通信(IBC)核心模块。它旨在简化将各种IBC核心模块导入和集成到您的区块链中的过程。
IBC是一个分布式协议,允许不同主权区块链之间的通信,IBC核心是该协议中处理数据包传输、身份验证和排序(TAO)的部分。
在ibc-core
crate中的结构旨在为外部用户提供灵活性。您可以选择使用整个ibc-core
crate,或者有选择地导入特定库。从那里,您还可以灵活地引入整个子模块(例如ibc-core-client
crate),或者仅引入模块的相关数据结构(例如ibc-core-client-types
)。
这种多功能性赋予主机,包括链集成器、中继或任何IBC工具项目,以根据其特定需求构建解决方案的能力。
子crate
目前,ibc-core
crate包含了以下IBC核心规范的实施
ICS-02:客户端语义
ICS-03:连接语义
ICS-04:通道和包语义
ICS-24:主机要求
ICS-25:处理程序接口
ICS-26:路由模块
与Interchain标准(ICS)的差异
这个crate在多个方面与ICS规范有所不同。下面将提供更多详细信息。
模块系统:不支持不可信模块
ICS-24(主机要求)给出了主机状态机必须支持的关于模块系统的以下要求
主机状态机必须支持一个模块系统,其中自包含的、可能相互不信任的代码包可以在同一账本上安全执行[...]。
这个crate目前不支持相互不信任的包。也就是说,主机状态机上的模块被认为是完全可信的。在实践中,这意味着每个模块要么是由主机状态机开发者编写的,要么已经由他们彻底审查。
端口系统:没有对象能力系统
ICS-05(端口分配)要求主机系统支持对象能力引用或源认证的模块。
在前一种对象能力的情况下,IBC处理程序必须有能力生成对象能力,这是可以传递给模块的唯一的、不可复制的引用,其他模块无法复制[...]。在后者源认证的情况下,IBC处理程序必须有能力安全地读取调用模块的源标识符,这是主机状态机中每个模块的唯一字符串,不能被模块更改或被另一个模块伪造。
这个crate目前不需要主机系统的任何一项。由于假设模块是可信的,因此不需要这个保护资源免受潜在恶意模块侵害的对象能力系统。
关于这方面的更多背景信息,请参阅这个问题。
端口系统:传输和释放端口
ICS-05(端口分配)要求IBC处理程序允许传输端口的所有权和释放端口。
我们目前都不支持。
异步确认
标准赋予了模块异步确认数据包的能力。这允许模块接收数据包,但仅在实际应用更改之前(之后它们将写入确认)应用更改。
目前我们强制应用程序将数据包作为onRecvPacket()
的一部分进行处理。如果您需要为应用程序异步确认,请提出一个问题。
请注意,这仍然使我们的程序与ibc-go
保持100%兼容。
贡献
IBC在cosmos/ibc仓库中用英语指定。任何协议更改或澄清都应该在那里进行贡献。
如果您有兴趣进行贡献,请查看CONTRIBUTING指南。我们欢迎并感谢社区贡献!
依赖项
~15MB
~310K SLoC