This release introduces a series of improvements to ICS-27 Interchain Accounts (ICA).
We appreciate very much the feedback that we have got since the initial release of ICA in ibc-go v3.0.0 and we have recognized that the lack of a default underlying app (aka authentication module) has been one the primary reasons for the slow adoption of ICA (i.e. lack of controller chains in mainnet). With the release of Cosmos SDK v0.46.x we have also realized the need to separate authentication and application logic: the new design of x/gov
and x/group
allow for arbitrary message passing via the message router and these modules can act as authentication modules with respect to interchain accounts integration.
ibc-go v6.0.0 includes changes to ICA that makes integrating the controller chain functionality easier. It introduces a new message server to the controller submodule and, once application callbacks are implemented (see ADR-008), all use cases for ICA will be supported by the message server without the need for an underlying app and we will incrementally move towards deprecation of the public APIs (this and this).
To minimize disruption to developers working on the original design of the ICS-27 controller module, all changes are made made in a backwards compatible fashion. The only difference is in terms of how the channel capability is claimed. Instead of the underlying app claiming the channel capability, it is now the controller submodule who will claim it. Any logic associated with claiming the capability should be now removed from the OnChanOpenInit
callback of the underlying app. See ADR-009 for more information on these changes.
We present here a summary of the most relevant changes. Please see the v6.0.0 changelog for the full set of changes included in this pre-release.
apps/27-interchain-accounts
- A new
MsgServer
has been added to the controller submodule that exposes two RPC endpoints:RegisterInterchainAccount
andSendTx
. Corresponding CLI commands have also been added. - The controller submodule now claims the channel capability in
OnChanOpenInit
instead of the underlying app. - An upgrade migration handler has been added to controller submodule that reassigns ownership of the channel capability from the underlying app to the controller module.
- An ICS-27 module automatic migration has been added to assert ownership of channel capabilities and check that the upgrade handler channel capability migration has been performed successfully. The ICS-27 module consensus version has been bumped from 1 to 2.
- The default for the host param
allow_messages
has changed to allow all host messages. - A new CLI command has been added to the host submodule to generate ICS-27 packet data. The generated packet data can then be used as input for the controller submodule CLI command to send a transaction to the host chain.
Special thanks to our external contributors on this release: @Anmol1696 @georgelombardi97 @alizahidraja
To learn more about ibc-go versioning, please read our RELEASES.md.
IMPORTANT: Please read the migration guides for any versions of ibc-go that you might be going through when upgrading to this version. For example: if you upgrade from the IBC module contained in the Cosmos SDK 0.42.0 to SDK v0.46.1 and ibc-go v6.0.0-alpha1, please follow:
- The migration from SDK 0.41.x or 0.42.x to the IBC module in the ibc-go repository based on the SDK v0.44.x.
- The migration from ibc-go v1 to v2.
- The migration from ibc-go v2 to v3.
- The migration from ibc-go v3 to v4.
- The migration from ibc-go v4 to v5.
- The migration from ibc-go v5 to v6 (not merged yet, but work is in progress here).