ics | title | stage | category | kind | requires | author | created | modified |
---|---|---|---|---|---|---|---|---|
25 |
处理程序接口 |
草案 |
IBC/TAO |
实例化 |
2, 3, 4, 23, 24 |
Christopher Goes <cwgoes@tendermint.com> |
2019-04-23 |
2019-08-25 |
本文档描述了标准 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 许可授权。