Skip to content

Commit d361c03

Browse files
chore: Add 23.2.0 upgrade (backport #3716) (#3717)
* chore: Add 23.2.0 upgrade (#3716) * Add 23.2.0 upgrade * Update previous version in upgrade test * add ibc wasm migrate functionality * Add test, fix b64 decoding * Fix lints --------- Co-authored-by: Gjermund Garaba <[email protected]> (cherry picked from commit f24974d) # Conflicts: # app/app.go * Fix merge conflicts --------- Co-authored-by: Eric Warehime <[email protected]>
1 parent 239907a commit d361c03

File tree

7 files changed

+158
-12
lines changed

7 files changed

+158
-12
lines changed

.github/workflows/test.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,10 +163,10 @@ jobs:
163163
# the old gaiad binary version is hardcoded, need to be updated each major release.
164164
- name: Install Old Gaiad
165165
run: |
166-
curl -LO https://github.com/cosmos/gaia/releases/download/v22.2.0/gaiad-v22.2.0-linux-amd64
167-
chmod a+x gaiad-v22.2.0-linux-amd64
166+
curl -LO https://github.com/cosmos/gaia/releases/download/v23.1.1/gaiad-v23.1.1-linux-amd64
167+
chmod a+x gaiad-v23.1.1-linux-amd64
168168
mkdir build
169-
mv ./gaiad-v22.2.0-linux-amd64 ./build/gaiadold
169+
mv ./gaiad-v23.1.1-linux-amd64 ./build/gaiadold
170170
if: env.GIT_DIFF
171171
- name: Install New Gaiad
172172
run: |

app/app.go

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,14 @@ import (
7474
"github.com/cosmos/gaia/v23/app/keepers"
7575
"github.com/cosmos/gaia/v23/app/upgrades"
7676
v23 "github.com/cosmos/gaia/v23/app/upgrades/v23"
77-
upgrade "github.com/cosmos/gaia/v23/app/upgrades/v23_1_1"
77+
"github.com/cosmos/gaia/v23/app/upgrades/v23_2_0"
7878
)
7979

8080
var (
8181
// DefaultNodeHome default home directories for the application daemon
8282
DefaultNodeHome string
8383

84-
Upgrades = []upgrades.Upgrade{v23.Upgrade, v23.RCUpgrade}
84+
Upgrades = []upgrades.Upgrade{v23.Upgrade, v23.RCUpgrade, v23_2_0.Upgrade}
8585
)
8686

8787
var (
@@ -377,13 +377,6 @@ func (app *GaiaApp) Name() string { return app.BaseApp.Name() }
377377

378378
// PreBlocker application updates every pre block
379379
func (app *GaiaApp) PreBlocker(ctx sdk.Context, _ *abci.RequestFinalizeBlock) (*sdk.ResponsePreBlock, error) {
380-
var upgradeHeight int64 = 25283301
381-
if ctx.BlockHeight() == upgradeHeight {
382-
err := upgrade.AuthzGrantWasmMigrate(ctx, app.AuthzKeeper, *app.GovKeeper)
383-
if err != nil {
384-
return nil, err
385-
}
386-
}
387380
return app.mm.PreBlock(ctx)
388381
}
389382

app/upgrades/v23_2_0/constants.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package v23_2_0 //nolint:revive
2+
3+
import (
4+
"github.com/cosmos/gaia/v23/app/upgrades"
5+
)
6+
7+
const (
8+
// UpgradeName defines the on-chain upgrade name.
9+
UpgradeName = "v23.2.0"
10+
HexChecksum = "b92e9904aab2292916507f0db04b7ab6d024c2fdb57a9d52e6725f69b2e684c1"
11+
MigrateMsgBase64 = "eyJtaWdyYXRpb24iOnsidXBkYXRlX2ZvcmtfcGFyYW1ldGVycyI6eyJnZW5lc2lzX2ZvcmtfdmVyc2lvbiI6IjB4MDAwMDAwMDAiLCJnZW5lc2lzX3Nsb3QiOjAsImFsdGFpciI6eyJ2ZXJzaW9uIjoiMHgwMTAwMDAwMCIsImVwb2NoIjo3NDI0MH0sImJlbGxhdHJpeCI6eyJ2ZXJzaW9uIjoiMHgwMjAwMDAwMCIsImVwb2NoIjoxNDQ4OTZ9LCJjYXBlbGxhIjp7InZlcnNpb24iOiIweDAzMDAwMDAwIiwiZXBvY2giOjE5NDA0OH0sImRlbmViIjp7InZlcnNpb24iOiIweDA0MDAwMDAwIiwiZXBvY2giOjI2OTU2OH0sImVsZWN0cmEiOnsidmVyc2lvbiI6IjB4MDUwMDAwMDAiLCJlcG9jaCI6MzY0MDMyfX19fQ"
12+
SignerAccount = "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn"
13+
ClientID = "08-wasm-1369"
14+
)
15+
16+
var Upgrade = upgrades.Upgrade{
17+
UpgradeName: UpgradeName,
18+
CreateUpgradeHandler: CreateUpgradeHandler,
19+
}
Binary file not shown.
Binary file not shown.

app/upgrades/v23_2_0/upgrades.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package v23_2_0 //nolint:revive
2+
3+
import (
4+
"context"
5+
"encoding/base64"
6+
"encoding/hex"
7+
8+
ibcwasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10/keeper"
9+
ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10/types"
10+
11+
upgradetypes "cosmossdk.io/x/upgrade/types"
12+
13+
sdk "github.com/cosmos/cosmos-sdk/types"
14+
"github.com/cosmos/cosmos-sdk/types/module"
15+
16+
"github.com/cosmos/gaia/v23/app/keepers"
17+
)
18+
19+
func CreateUpgradeHandler(
20+
mm *module.Manager,
21+
configurator module.Configurator,
22+
keepers *keepers.AppKeepers,
23+
) upgradetypes.UpgradeHandler {
24+
return func(c context.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {
25+
ctx := sdk.UnwrapSDKContext(c)
26+
ctx.Logger().Info("Starting module migrations...")
27+
28+
vm, err := mm.RunMigrations(ctx, configurator, vm)
29+
if err != nil {
30+
return vm, err
31+
}
32+
33+
ctx.Logger().Info("Starting Migrate IBC Wasm...")
34+
if err = MigrateIBCWasm(ctx, keepers.WasmClientKeeper, HexChecksum, MigrateMsgBase64, ClientID,
35+
SignerAccount); err != nil {
36+
ctx.Logger().Info("Error running migrate for IBC Wasm client", "message", err.Error())
37+
}
38+
39+
ctx.Logger().Info("Upgrade v23.2.0 complete")
40+
return vm, nil
41+
}
42+
}
43+
44+
func MigrateIBCWasm(ctx sdk.Context, wasmClientKeeper ibcwasmkeeper.Keeper, hexChecksum string,
45+
migrateMsgB64 string, clientID string, signerAcc string,
46+
) error {
47+
checksumBz, err := hex.DecodeString(hexChecksum)
48+
if err != nil {
49+
return err
50+
}
51+
52+
migrateMsgBz, err := base64.RawStdEncoding.DecodeString(migrateMsgB64)
53+
if err != nil {
54+
return err
55+
}
56+
57+
_, err = wasmClientKeeper.MigrateContract(ctx, &ibcwasmtypes.MsgMigrateContract{
58+
Signer: signerAcc,
59+
ClientId: clientID,
60+
Checksum: checksumBz,
61+
Msg: migrateMsgBz,
62+
})
63+
return err
64+
}

app/upgrades/v23_2_0/upgrades_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package v23_2_0_test
2+
3+
import (
4+
"encoding/hex"
5+
"testing"
6+
"time"
7+
8+
"github.com/stretchr/testify/require"
9+
10+
_ "embed"
11+
12+
tmproto "github.com/cometbft/cometbft/proto/tendermint/types"
13+
14+
"github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10/types"
15+
clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types"
16+
ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported"
17+
18+
"github.com/cosmos/gaia/v23/app/helpers"
19+
"github.com/cosmos/gaia/v23/app/upgrades/v23_2_0"
20+
)
21+
22+
const (
23+
clientStateJSON = `{"@type":"/ibc.lightclients.wasm.v1.ClientState","data":"eyJjaGFpbl9pZCI6MzE1MTkwOCwiZXBvY2hzX3Blcl9zeW5jX2NvbW1pdHRlZV9wZXJpb2QiOjgsImZvcmtfcGFyYW1ldGVycyI6eyJhbHRhaXIiOnsiZXBvY2giOjAsInZlcnNpb24iOiIweDIwMDAwMDM4In0sImJlbGxhdHJpeCI6eyJlcG9jaCI6MCwidmVyc2lvbiI6IjB4MzAwMDAwMzgifSwiY2FwZWxsYSI6eyJlcG9jaCI6MCwidmVyc2lvbiI6IjB4NDAwMDAwMzgifSwiZGVuZWIiOnsiZXBvY2giOjAsInZlcnNpb24iOiIweDUwMDAwMDM4In0sImVsZWN0cmEiOnsiZXBvY2giOjEsInZlcnNpb24iOiIweDYwMDAwMDM4In0sImdlbmVzaXNfZm9ya192ZXJzaW9uIjoiMHgxMDAwMDAzOCIsImdlbmVzaXNfc2xvdCI6MH0sImdlbmVzaXNfc2xvdCI6MCwiZ2VuZXNpc190aW1lIjoxNzQ0MjI4NzE4LCJnZW5lc2lzX3ZhbGlkYXRvcnNfcm9vdCI6IjB4ZDYxZWE0ODRmZWJhY2ZhZTUyOThkNTJhMmI1ODFmM2UzMDVhNTFmMzExMmE5MjQxYjk2OGRjY2YwMTlmN2IxMSIsImliY19jb21taXRtZW50X3Nsb3QiOiIweDEyNjA5NDQ0ODkyNzI5ODhkOWRmMjg1MTQ5YjVhYTFiMGY0OGYyMTM2ZDZmNDE2MTU5Zjg0MGEzZTA3NDc2MDAiLCJpYmNfY29udHJhY3RfYWRkcmVzcyI6IjB4ODk4MTRmYWU3NjBlYjViNzM5MmNiZGNiYTc1YzM1NWM0NjdiMjFkOSIsImlzX2Zyb3plbiI6ZmFsc2UsImxhdGVzdF9leGVjdXRpb25fYmxvY2tfbnVtYmVyIjozMiwibGF0ZXN0X3Nsb3QiOjMyLCJtaW5fc3luY19jb21taXR0ZWVfcGFydGljaXBhbnRzIjoxLCJzZWNvbmRzX3Blcl9zbG90Ijo2LCJzbG90c19wZXJfZXBvY2giOjgsInN5bmNfY29tbWl0dGVlX3NpemUiOjMyfQ==","checksum":"O+U+9qV98BMWnk+WmX42xg+vqqMv9jH7Brxvh7fZCW8=","latest_height":{"revision_number":"0","revision_height":"32"}}`
24+
consensusStateJSON = `{"@type":"/ibc.lightclients.wasm.v1.ConsensusState","data":"eyJjdXJyZW50X3N5bmNfY29tbWl0dGVlIjp7ImFnZ3JlZ2F0ZV9wdWJrZXkiOiIweDg2MTMzNzg1Y2M1ZDIzOGFkN2I4YmI1Y2M1M2ViZmJlMzQ2NGNiYTliNjBlNGRhMTBkZTIwN2U4OGQzOTUwNTQ5ZGFkYTFjMzRmZTA1ZmVhMDI2MzFkOWM2ZGEyMTI2OSIsInB1YmtleXNfaGFzaCI6IjB4OTVhZTQyZmZlNzI5NGVlYTYxMDE1NzA2YzIzN2Q4NzAxNWVhOWE2NTZmYTUzZTk0NDJlZTBiM2Q1N2Q4NzczNiJ9LCJuZXh0X3N5bmNfY29tbWl0dGVlIjp7ImFnZ3JlZ2F0ZV9wdWJrZXkiOiIweDg2MTMzNzg1Y2M1ZDIzOGFkN2I4YmI1Y2M1M2ViZmJlMzQ2NGNiYTliNjBlNGRhMTBkZTIwN2U4OGQzOTUwNTQ5ZGFkYTFjMzRmZTA1ZmVhMDI2MzFkOWM2ZGEyMTI2OSIsInB1YmtleXNfaGFzaCI6IjB4OTVhZTQyZmZlNzI5NGVlYTYxMDE1NzA2YzIzN2Q4NzAxNWVhOWE2NTZmYTUzZTk0NDJlZTBiM2Q1N2Q4NzczNiJ9LCJzbG90IjozMiwic3RhdGVfcm9vdCI6IjB4YjgwNGMzMzkzNDJlY2FjYTAzMDQ1ZmM3YjgyYTBjNTE0ZTQ1ZWY5M2YyNjlkOThkZmUxMTZkZjhlODFiMTI3NCIsInN0b3JhZ2Vfcm9vdCI6IjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsInRpbWVzdGFtcCI6MTc0NDIzMDUxMH0="}`
25+
)
26+
27+
var (
28+
//go:embed cw_ics08_wasm_eth-1.1.0.wasm.gz
29+
codeV1 []byte
30+
//go:embed cw_ics08_wasm_eth-1.2.0.wasm.gz
31+
codeV2 []byte
32+
)
33+
34+
func TestMigrateIBCWasm(t *testing.T) {
35+
gaiaApp := helpers.Setup(t)
36+
ctx := gaiaApp.NewUncachedContext(true, tmproto.Header{
37+
Time: time.Unix(1740829624, 0),
38+
})
39+
40+
// Setup IBC Client
41+
checksumV1, err := gaiaApp.WasmClientKeeper.StoreCode(ctx, types.NewMsgStoreCode(v23_2_0.SignerAccount, codeV1))
42+
require.NoError(t, err)
43+
require.NotNil(t, checksumV1)
44+
hexV1Checksum := hex.EncodeToString(checksumV1.Checksum)
45+
46+
queryChecksumsResp, err := gaiaApp.WasmClientKeeper.Checksums(ctx, &types.QueryChecksumsRequest{})
47+
require.NoError(t, err)
48+
require.Len(t, queryChecksumsResp.Checksums, 1)
49+
require.Equal(t, hexV1Checksum, queryChecksumsResp.Checksums[0])
50+
_, err = gaiaApp.WasmClientKeeper.StoreCode(ctx, types.NewMsgStoreCode(v23_2_0.SignerAccount, codeV2))
51+
require.NoError(t, err)
52+
53+
var clientState ibcexported.ClientState
54+
err = gaiaApp.AppCodec().UnmarshalInterfaceJSON([]byte(clientStateJSON), &clientState)
55+
require.NoError(t, err)
56+
57+
var consensusState ibcexported.ConsensusState
58+
err = gaiaApp.AppCodec().UnmarshalInterfaceJSON([]byte(consensusStateJSON), &consensusState)
59+
require.NoError(t, err)
60+
61+
createMsg, err := clienttypes.NewMsgCreateClient(clientState, consensusState, v23_2_0.SignerAccount)
62+
require.NoError(t, err)
63+
createClientResp, err := gaiaApp.IBCKeeper.CreateClient(ctx, createMsg)
64+
require.NoError(t, err)
65+
require.Equal(t, "08-wasm-0", createClientResp.ClientId)
66+
67+
err = v23_2_0.MigrateIBCWasm(ctx, gaiaApp.WasmClientKeeper, v23_2_0.HexChecksum, v23_2_0.MigrateMsgBase64,
68+
"08-wasm-0", v23_2_0.SignerAccount)
69+
require.NoError(t, err)
70+
}

0 commit comments

Comments
 (0)