Migrations
This guide provides instructions for migrating 08-wasm versions.
Please note that the following releases are retracted. Please refer to the appropriate migrations section for upgrading.
v0.3.1-0.20240717085919-bb71eef0f3bf => v0.3.0+ibc-go-v8.3-wasmvm-v2.0
v0.2.1-0.20240717085554-570d057959e3 => v0.2.0+ibc-go-v7.6-wasmvm-v1.5
v0.2.1-0.20240523101951-4b45d1822fb6 => v0.2.0+ibc-go-v8.3-wasmvm-v2.0
v0.1.2-0.20240412103620-7ee2a2452b79 => v0.1.1+ibc-go-v7.3-wasmvm-v1.5
v0.1.1-0.20231213092650-57fcdb9a9a9d => v0.1.0+ibc-go-v8.0-wasmvm-v1.5
v0.1.1-0.20231213092633-b306e7a706e1 => v0.1.0+ibc-go-v7.3-wasmvm-v1.5
From ibc-go v8.4.x to ibc-go v9.0.x
Chains
- The
Initialize
,Status
,GetTimestampAtHeight
,GetLatestHeight
,VerifyMembership
,VerifyNonMembership
,VerifyClientMessage
,UpdateState
andUpdateStateOnMisbehaviour
functions inClientState
have been removed and all their logic has been moved to functions of theLightClientModule
. - The
MigrateContract
function has been removed fromClientState
. - The
VerifyMembershipMsg
andVerifyNonMembershipMsg
payloads forSudoMsg
have been modified. ThePath
field of both structs has been updated fromv1.MerklePath
tov2.MerklePath
. The newv2.MerklePath
field contains aKeyPath
of[][]byte
as opposed to[]string
, see 23-commitment. This supports proving values stored under keys which contain non-utf8 encoded symbols. As a result, the JSON fieldpath
containingkey_path
of both messages will marshal elements as a base64 encoded bytestrings. This is a breaking change for 08-wasm client contracts and they should be migrated to correctly support deserialisation of thev2.MerklePath
field. - The
ExportMetadataMsg
struct has been removed and is no longer required for contracts to implement. Core IBC will handle exporting all key/value's written to the store by a light client contract. - The
ZeroCustomFields
interface function has been removed from theClientState
interface. Core IBC only used this function to set tendermint client states when scheduling an IBC software upgrade. The interface function has been replaced by a type assertion. - The
MaxWasmByteSize
function has been removed in favor of theMaxWasmSize
constant. - The
HasChecksum
,GetAllChecksums
andLogger
functions have been moved from thetypes
package to a method on theKeeper
type in thekeeper
package. - The
InitializePinnedCodes
function has been moved to a method on theKeeper
type in thekeeper
package. - The
CustomQuerier
,StargateQuerier
andQueryPlugins
types have been moved from thetypes
package to thekeeper
package. - The
NewDefaultQueryPlugins
,AcceptListStargateQuerier
andRejectCustomQuerier
functions has been moved from thetypes
package to thekeeper
package. - The
NewDefaultQueryPlugins
function signature has changed to take an argument:queryRouter ibcwasm.QueryRouter
. - The
AcceptListStargateQuerier
function signature has changed to take an additional argument:queryRouter ibcwasm.QueryRouter
. - The
WithQueryPlugins
function signature has changed to take in theQueryPlugins
type from thekeeper
package (previously from thetypes
package). - The
VMGasRegister
variable has been moved from thetypes
package to thekeeper
package.
From v0.3.0+ibc-go-v8.3-wasmvm-v2.0 to v0.4.1-ibc-go-v8.4-wasmvm-v2.0
Contract developers
Contract developers are required to update their JSON API message structure for the SudoMsg
payloads VerifyMembershipMsg
and VerifyNonMembershipMsg
.
The path
field on both JSON API messages has been renamed to merkle_path
.
A migration is required for existing 08-wasm client contracts in order to correctly handle the deserialisation of these fields.
From v0.2.0+ibc-go-v7.3-wasmvm-v1.5 to v0.3.1-ibc-go-v7.4-wasmvm-v1.5
Contract developers
Contract developers are required to update their JSON API message structure for the SudoMsg
payloads VerifyMembershipMsg
and VerifyNonMembershipMsg
.
The path
field on both JSON API messages has been renamed to merkle_path
.
A migration is required for existing 08-wasm client contracts in order to correctly handle the deserialisation of these fields.
From v0.2.0+ibc-go-v8.3-wasmvm-v2.0 to v0.3.0-ibc-go-v8.3-wasmvm-v2.0
Contract developers
The v0.3.0
release of 08-wasm for ibc-go v8.3.x
and above introduces a breaking change for client contract developers.
The contract API SudoMsg
payloads VerifyMembershipMsg
and VerifyNonMembershipMsg
have been modified.
The encoding of the Path
field of both structs has been updated from v1.MerklePath
to v2.MerklePath
to support proving values stored under keys which contain non-utf8 encoded symbols.
As a result, the Path
field now contains a MerklePath
composed of key_path
of [][]byte
as opposed to []string
. The JSON field path
containing key_path
of both VerifyMembershipMsg
and VerifyNonMembershipMsg
structs will now marshal elements as base64 encoded bytestrings. See below for example JSON diff.
{
"verify_membership": {
"height": {
"revision_height": 1
},
"delay_time_period": 0,
"delay_block_period": 0,
"proof":"dmFsaWQgcHJvb2Y=",
"path": {
+ "key_path":["L2liYw==","L2tleS9wYXRo"]
- "key_path":["/ibc","/key/path"]
},
"value":"dmFsdWU="
}
}
A migration is required for existing 08-wasm client contracts in order to correctly handle the deserialisation of key_path
from []string
to [][]byte
.
Contract developers should familiarise themselves with the migration path offered by 08-wasm here.
An example of the required changes in a client contract may look like:
#[cw_serde]
pub struct MerklePath {
+ pub key_path: Vec<cosmwasm_std::Binary>,
- pub key_path: Vec<String>,
}
Please refer to the cosmwasm_std
documentation for more information.
From v0.1.1+ibc-go-v7.3-wasmvm-v1.5 to v0.2.0-ibc-go-v7.3-wasmvm-v1.5
Contract developers
The v0.2.0
release of 08-wasm for ibc-go v7.6.x
and above introduces a breaking change for client contract developers.
The contract API SudoMsg
payloads VerifyMembershipMsg
and VerifyNonMembershipMsg
have been modified.
The encoding of the Path
field of both structs has been updated from v1.MerklePath
to v2.MerklePath
to support proving values stored under keys which contain non-utf8 encoded symbols.
As a result, the Path
field now contains a MerklePath
composed of key_path
of [][]byte
as opposed to []string
. The JSON field path
containing key_path
of both VerifyMembershipMsg
and VerifyNonMembershipMsg
structs will now marshal elements as base64 encoded bytestrings. See below for example JSON diff.
{
"verify_membership": {
"height": {
"revision_height": 1
},
"delay_time_period": 0,
"delay_block_period": 0,
"proof":"dmFsaWQgcHJvb2Y=",
"path": {
+ "key_path":["L2liYw==","L2tleS9wYXRo"]
- "key_path":["/ibc","/key/path"]
},
"value":"dmFsdWU="
}
}
A migration is required for existing 08-wasm client contracts in order to correctly handle the deserialisation of key_path
from []string
to [][]byte
.
Contract developers should familiarise themselves with the migration path offered by 08-wasm here.
An example of the required changes in a client contract may look like:
#[cw_serde]
pub struct MerklePath {
+ pub key_path: Vec<cosmwasm_std::Binary>,
- pub key_path: Vec<String>,
}
Please refer to the cosmwasm_std
documentation for more information.
From ibc-go v7.3.x to ibc-go v8.0.x
Chains
In the 08-wasm versions compatible with ibc-go v7.3.x and above from the v7 release line, the checksums of the uploaded Wasm bytecodes are all stored under a single key. From ibc-go v8.0.x the checksums are stored using collections.KeySet
, whose full functionality became available in Cosmos SDK v0.50. There is therefore an automatic migration handler configured in the 08-wasm module to migrate the stored checksums to collections.KeySet
.
From v0.1.0+ibc-go-v8.0-wasmvm-v1.5 to v0.2.0-ibc-go-v8.3-wasmvm-v2.0
The WasmEngine
interface has been updated to reflect changes in the function signatures of Wasm VM:
type WasmEngine interface {
- StoreCode(code wasmvm.WasmCode) (wasmvm.Checksum, error)
+ StoreCode(code wasmvm.WasmCode, gasLimit uint64) (wasmvmtypes.Checksum, uint64, error)
StoreCodeUnchecked(code wasmvm.WasmCode) (wasmvm.Checksum, error)
Instantiate(
checksum wasmvm.Checksum,
env wasmvmtypes.Env,
info wasmvmtypes.MessageInfo,
initMsg []byte,
store wasmvm.KVStore,
goapi wasmvm.GoAPI,
querier wasmvm.Querier,
gasMeter wasmvm.GasMeter,
gasLimit uint64,
deserCost wasmvmtypes.UFraction,
- ) (*wasmvmtypes.Response, uint64, error)
+ ) (*wasmvmtypes.ContractResult, uint64, error)
Query(
checksum wasmvm.Checksum,
env wasmvmtypes.Env,
queryMsg []byte,
store wasmvm.KVStore,
goapi wasmvm.GoAPI,
querier wasmvm.Querier,
gasMeter wasmvm.GasMeter,
gasLimit uint64,
deserCost wasmvmtypes.UFraction,
- ) ([]byte, uint64, error)
+ ) (*wasmvmtypes.QueryResult, uint64, error)
Migrate(
checksum wasmvm.Checksum,
env wasmvmtypes.Env,
migrateMsg []byte,
store wasmvm.KVStore,
goapi wasmvm.GoAPI,
querier wasmvm.Querier,
gasMeter wasmvm.GasMeter,
gasLimit uint64,
deserCost wasmvmtypes.UFraction,
- ) (*wasmvmtypes.Response, uint64, error)
+ ) (*wasmvmtypes.ContractResult, uint64, error)
Sudo(
checksum wasmvm.Checksum,
env wasmvmtypes.Env,
sudoMsg []byte,
store wasmvm.KVStore,
goapi wasmvm.GoAPI,
querier wasmvm.Querier,
gasMeter wasmvm.GasMeter,
gasLimit uint64,
deserCost wasmvmtypes.UFraction,
- ) (*wasmvmtypes.Response, uint64, error)
+ ) (*wasmvmtypes.ContractResult, uint64, error)
GetCode(checksum wasmvm.Checksum) (wasmvm.WasmCode, error)
Pin(checksum wasmvm.Checksum) error
Unpin(checksum wasmvm.Checksum) error
}
Similar changes were required in the functions of MockWasmEngine
interface.
Chains
The SupportedCapabilities
field of WasmConfig
is now of type []string
:
type WasmConfig struct {
DataDir string
- SupportedCapabilities string
+ SupportedCapabilities []string
ContractDebugMode bool
}