README.md
August 8, 2022 · View on GitHub
概要
本文档描述了标准 IBC 实现(称为 IBC 处理程序)向同一状态机内的模块公开的接口,以及 IBC 处理程序对该接口的实现。
动机
IBC 是一种模块间通信协议,旨在促进独立区块链上的模块之间可靠、经过身份验证的消息传递。模块应该能够得知它们与之交互的接口以及它们必须遵守的要求,以便安全地使用接口。
定义
相关定义在参考的先前标准(定义了功能的地方)中适当地定义。
所需属性
- 客户端,连接和通道的创建应尽可能无需许可。
- 模块集应为动态的:链应该能够添加和删除模块,这些模块本身可以使用持久性 IBC 处理程序任意绑定到端口或从端口取消绑定。
- 模块应能在 IBC 之上编写自己的更复杂的抽象,以提供附加的语义或保证。
技术规范
注意:如果主机状态机正在使用对象能力认证(请参阅 ICS 005 ),则所有使用端口的函数都将带有附加的能力键参数。
客户端生命周期管理
默认情况下,客户端是没有所有者的:任何模块都可以创建新客户端,查询任何现有客户端,更新任何现有客户端以及删除任何未使用的现有客户端。
处理程序接口暴露 ICS 2 中定义的createClient , updateClient , queryClientConsensusState , queryClient和submitMisbehaviourToClient 。
连接生命周期管理
处理程序接口暴露 ICS 3 中定义的connOpenInit , connOpenTry , connOpenAck , connOpenConfirm和queryConnection 。
默认的 IBC 路由模块应允许外部调用connOpenTry , connOpenAck和connOpenConfirm 。
通道生命周期管理
默认情况下,通道归创建端口所有,这意味着只有绑定到该端口的模块才允许在通道上检查、关闭或发送。一个模块可以使用同一端口创建任意数量的通道。
处理程序接口暴露了 ICS 4 中定义的chanOpenInit , chanOpenTry , chanOpenAck , chanOpenConfirm , chanCloseInit , chanCloseConfirm和queryChannel 。
默认的 IBC 路由模块应允许外部调用chanOpenTry , chanOpenAck , chanOpenConfirm和chanCloseConfirm 。
数据包中继
数据包是需要通道许可的(只有拥有通道的端口可以在其上发送或接收)。
该处理程序接口暴露sendPacket , recvPacket , acknowledgePacket , timeoutPacket , timeoutOnClose和cleanupPacket,如 ICS 4中定义 。
默认 IBC 路由模块应允许外部调用sendPacket , recvPacket , acknowledgePacket , timeoutPacket , timeoutOnClose和cleanupPacket 。
属性与不变性
此处定义的 IBC 处理程序模块接口继承了其关联规范中定义的功能属性。
向后兼容性
不适用。
向前兼容性
只要在语义上相同,在新链上实现(或升级到现有链)时,此接口可以更改。
示例实现
即将到来。
其他实现
即将到来。
历史
2019年6月9日-编写草案
2019年8月24日-修订,清理
版权
本规范所有内容均采用 Apache 2.0 许可授权。