Skip to main content
This guide provides instructions for migrating to a new version of ibc-go. Note: ibc-go supports golang semantic versioning and therefore all imports must be updated on major version releases. In addition, for this release, the 08-wasm module has been released as v10, and the callbacks middleware has been moved into the ibc-go module itself. Diff examples are shown after the list of overall changes:
  • To add support for IBC v2, Chains will need to wire up a new IBC v2 Transfer stack
  • Chains will need to wire up the new light client modules
  • Chains will need to update Keeper construction calls to comply with the new signatures
  • Chains will need to remove the route for the legacy proposal handler for 02-client from their app/app.go
  • Chains will need to remove the capability keeper and all related setup, including the scoped keepers from their app/app.go
  • Chains will need to remove ibc fee middleware (29-fee)
  • Chains will need, if using this module, to update their imports and usage of github.com/cosmos/ibc-go/modules/light-clients/08-wasm/ to github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10
  • Chains will need, if using this module, to update their imports and usage of github.com/cosmos/ibc-go/modules/apps/callbacks to github.com/cosmos/ibc-go/v10/modules/apps/callbacks
To add IBC v2 support, wire up a new transfer stack. Example below showing wired up with IBC Callbacks module:
Wire up each light client as a separate module and add them to the client keeper router. Example below for 07-tendermint and 08-wasm:
Remove ibc fee module name (if used) from module account permissions:
Remove CapabilityKeeper, IBCFeeKeeper and all capabilitykeeper.ScopedKeeper Scoped keepers from the App struct:
Remove capability and ibc fee middleware store keys from the NewKVStoreKeys call:
Remove the in-memory store keys previously used by the capability module:
Remove creation of the capability keeper:
Remove the legacy route for the client keeper:
Update Core IBC Keeper constructor:
Update IBC Transfer keeper constructor:
Update ICA Host keeper constructor, notice the removal of the WithQueryRouter call in particular:
Remove IBC Fee Module keeper:
Update Transfer stack to remove the fee middleware. The example below shows the correct way to wire up a middleware stack with the IBC callbacks middleware:
Remove ibc fee middleware and any empty IBCModule (often dubbed noAuthzModule) from the ICA Controller stack creation:
Remove ibc fee middleware from ICA Host stack creation:
Update the module manager creation by removing the capability module, fee module and updating the tendermint app module constructor:
Remove the capability module and ibc fee middleware from SetOrderBeginBlockers, SetOrderEndBlockers, SetOrderInitGenesis and SetOrderExportGenesis:
If you use 08-wasm, you will need to update the go module that is used for QueryPlugins and AcceptListStargateQuerier.
If you use 08-wasm, you will need to use the wasm client keeper rather than the go module to initialize pinned codes: