Skip to content

Commit f38a3a9

Browse files
fix!: Add upgrade handler (#3610)
* Add upgrade * Format * Add address * Fix upgrade * Remove eth light client * Fix comment * Fix upgrades
1 parent d61e515 commit f38a3a9

File tree

6 files changed

+75
-61
lines changed

6 files changed

+75
-61
lines changed

app/app.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ var (
8080
// DefaultNodeHome default home directories for the application daemon
8181
DefaultNodeHome string
8282

83-
Upgrades = []upgrades.Upgrade{v23.Upgrade}
83+
Upgrades = []upgrades.Upgrade{v23.Upgrade, v23.RCUpgrade}
8484
)
8585

8686
var (

app/keepers/keepers.go

+3
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,9 @@ func NewAppKeeper(
219219
appKeepers.AccountKeeper,
220220
)
221221

222+
// We need to set the bank keeper here otherwise risk a NPE in certain message handlers
223+
appKeepers.AuthzKeeper = appKeepers.AuthzKeeper.SetBankKeeper(appKeepers.BankKeeper)
224+
222225
appKeepers.FeeGrantKeeper = feegrantkeeper.NewKeeper(
223226
appCodec,
224227
runtime.NewKVStoreService(appKeepers.keys[feegrant.StoreKey]),

app/upgrades/v23/constants.go

+16-9
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package v23
22

33
import (
4-
_ "embed"
5-
64
ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10/types"
75

86
"cosmossdk.io/store/types"
@@ -12,15 +10,14 @@ import (
1210

1311
const (
1412
// UpgradeName defines the on-chain upgrade name.
15-
UpgradeName = "v23"
16-
IbcFeeStoreKey = "feeibc"
17-
18-
ExpectedEthLightClientChecksum = "f82549f5bc8adaef18e5ce4f5b68269947343742c938dac322faf1583319172c"
13+
UpgradeName = "v23"
14+
// RCUpgradeName defines the on-chain upgrade name specifically for the testnet RC upgrade.
15+
RCUpgradeName = "23.0.0-rc3"
16+
IbcFeeStoreKey = "feeibc"
17+
ClientUploaderAddress = "cosmos1raa4kyx5ypz75qqk3566c6slx2mw3qzs5ps5du"
18+
IBCWasmStoreCodeTypeURL = "/ibc.lightclients.wasm.v1.MsgStoreCode"
1919
)
2020

21-
//go:embed cw_ics08_wasm_eth.wasm.gz
22-
var ethWasmLightClient []byte
23-
2421
var Upgrade = upgrades.Upgrade{
2522
UpgradeName: UpgradeName,
2623
CreateUpgradeHandler: CreateUpgradeHandler,
@@ -34,3 +31,13 @@ var Upgrade = upgrades.Upgrade{
3431
},
3532
},
3633
}
34+
35+
var RCUpgrade = upgrades.Upgrade{
36+
UpgradeName: RCUpgradeName,
37+
CreateUpgradeHandler: CreateRCUpgradeHandler,
38+
StoreUpgrades: types.StoreUpgrades{
39+
Added: nil,
40+
Renamed: nil,
41+
Deleted: nil,
42+
},
43+
}
-212 KB
Binary file not shown.

app/upgrades/v23/upgrades.go

+45-18
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@ package v23
22

33
import (
44
"context"
5-
"encoding/hex"
6-
"fmt"
75

8-
ibcwasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10/keeper"
96
ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10/types"
107
ibctmtypes "github.com/cosmos/ibc-go/v10/modules/light-clients/07-tendermint"
118

@@ -14,10 +11,34 @@ import (
1411

1512
sdk "github.com/cosmos/cosmos-sdk/types"
1613
"github.com/cosmos/cosmos-sdk/types/module"
14+
"github.com/cosmos/cosmos-sdk/x/authz"
15+
authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper"
16+
govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
1717

1818
"github.com/cosmos/gaia/v23/app/keepers"
1919
)
2020

21+
// CreateRCUpgradeHandler returns an upgrade handler for Gaia v23.0.0-rc3.
22+
// This should only be executed on networks which have already run a previous v23 upgrade handler.
23+
func CreateRCUpgradeHandler(
24+
mm *module.Manager,
25+
configurator module.Configurator,
26+
keepers *keepers.AppKeepers,
27+
) upgradetypes.UpgradeHandler {
28+
return func(c context.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {
29+
ctx := sdk.UnwrapSDKContext(c)
30+
ctx.Logger().Info("Starting custom migration...")
31+
32+
if err := AuthzGrantWasmLightClient(c, keepers.AuthzKeeper, *keepers.GovKeeper); err != nil {
33+
ctx.Logger().Error("Error running authz grant for ibc wasm client", "message", err.Error())
34+
return vm, err
35+
}
36+
37+
ctx.Logger().Info("Upgrade v23.0.0-rc3 complete")
38+
return vm, nil
39+
}
40+
}
41+
2142
// CreateUpgradeHandler returns an upgrade handler for Gaia v23.
2243
func CreateUpgradeHandler(
2344
mm *module.Manager,
@@ -39,10 +60,9 @@ func CreateUpgradeHandler(
3960
params.AllowedClients = []string{ibctmtypes.ModuleName, ibcwasmtypes.ModuleName}
4061
keepers.IBCKeeper.ClientKeeper.SetParams(ctx, params)
4162

42-
// Add Eth Light Wasm Light Client
43-
ctx.Logger().Info("Adding Eth Light Wasm Light Client")
44-
if err := AddEthLightWasmLightClient(ctx, keepers.WasmClientKeeper); err != nil {
45-
ctx.Logger().Error("Error adding Eth Light Wasm Light Client", "message", err.Error())
63+
ctx.Logger().Info("Running authz ibc wasm client grant")
64+
if err := AuthzGrantWasmLightClient(ctx, keepers.AuthzKeeper, *keepers.GovKeeper); err != nil {
65+
ctx.Logger().Error("Error running authz grant for ibc wasm client", "message", err.Error())
4666
return nil, err
4767
}
4868

@@ -51,20 +71,27 @@ func CreateUpgradeHandler(
5171
}
5272
}
5373

54-
func AddEthLightWasmLightClient(ctx context.Context, wasmKeeper ibcwasmkeeper.Keeper) error {
55-
resp, err := wasmKeeper.StoreCode(ctx, &ibcwasmtypes.MsgStoreCode{
56-
Signer: wasmKeeper.GetAuthority(),
57-
WasmByteCode: ethWasmLightClient,
74+
func AuthzGrantWasmLightClient(ctx context.Context, authzKeeper authzkeeper.Keeper, govKeeper govkeeper.Keeper) error {
75+
sdkCtx := sdk.UnwrapSDKContext(ctx)
76+
grant, err := authz.NewGrant(
77+
sdkCtx.BlockTime(),
78+
authz.NewGenericAuthorization(IBCWasmStoreCodeTypeURL),
79+
nil,
80+
)
81+
if err != nil {
82+
return err
83+
}
84+
sdkCtx.Logger().Info("Granting IBC Wasm Store Code", "granter", govKeeper.GetAuthority(), "grantee", ClientUploaderAddress)
85+
resp, err := authzKeeper.Grant(ctx, &authz.MsgGrant{
86+
Granter: govKeeper.GetAuthority(),
87+
Grantee: ClientUploaderAddress,
88+
Grant: grant,
5889
})
5990
if err != nil {
60-
return errorsmod.Wrap(err, "failed to store eth wasm light client during upgrade")
91+
return err
6192
}
62-
63-
actualChecksum := hex.EncodeToString(resp.Checksum)
64-
65-
if hex.EncodeToString(resp.Checksum) != ExpectedEthLightClientChecksum {
66-
return fmt.Errorf("checksum mismatch: expected %s, got %s", ExpectedEthLightClientChecksum, actualChecksum)
93+
if resp != nil {
94+
sdkCtx.Logger().Info("Authz Keeper Grant", "response", resp.String())
6795
}
68-
6996
return nil
7097
}

app/upgrades/v23/upgrades_test.go

+10-33
Original file line numberDiff line numberDiff line change
@@ -8,52 +8,29 @@ import (
88

99
tmproto "github.com/cometbft/cometbft/proto/tendermint/types"
1010

11-
ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10/types"
12-
clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types"
13-
ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported"
11+
sdk "github.com/cosmos/cosmos-sdk/types"
1412

1513
"github.com/cosmos/gaia/v23/app/helpers"
1614
v23 "github.com/cosmos/gaia/v23/app/upgrades/v23"
1715
)
1816

19-
const (
20-
clientStateJSON = `{"@type":"/ibc.lightclients.wasm.v1.ClientState","data":"eyJjaGFpbl9pZCI6MzE1MTkwOCwiZXBvY2hzX3Blcl9zeW5jX2NvbW1pdHRlZV9wZXJpb2QiOjgsImZvcmtfcGFyYW1ldGVycyI6eyJhbHRhaXIiOnsiZXBvY2giOjAsInZlcnNpb24iOiIyMDAwMDAzOCJ9LCJiZWxsYXRyaXgiOnsiZXBvY2giOjAsInZlcnNpb24iOiIzMDAwMDAzOCJ9LCJjYXBlbGxhIjp7ImVwb2NoIjowLCJ2ZXJzaW9uIjoiNDAwMDAwMzgifSwiZGVuZWIiOnsiZXBvY2giOjAsInZlcnNpb24iOiI1MDAwMDAzOCJ9LCJnZW5lc2lzX2ZvcmtfdmVyc2lvbiI6IjEwMDAwMDM4IiwiZ2VuZXNpc19zbG90IjowfSwiZ2VuZXNpc190aW1lIjoxNzQwODI3NDA3LCJnZW5lc2lzX3ZhbGlkYXRvcnNfcm9vdCI6ImQ2MWVhNDg0ZmViYWNmYWU1Mjk4ZDUyYTJiNTgxZjNlMzA1YTUxZjMxMTJhOTI0MWI5NjhkY2NmMDE5ZjdiMTEiLCJpYmNfY29tbWl0bWVudF9zbG90IjoiMHgxMjYwOTQ0NDg5MjcyOTg4ZDlkZjI4NTE0OWI1YWExYjBmNDhmMjEzNmQ2ZjQxNjE1OWY4NDBhM2UwNzQ3NjAwIiwiaWJjX2NvbnRyYWN0X2FkZHJlc3MiOiIweDI5M2MxOGUwOWU1NTA0ZWJjZTE3ZGFhN2YzZDY2MmM4YjliZjZkNzUiLCJpc19mcm96ZW4iOmZhbHNlLCJsYXRlc3Rfc2xvdCI6MzIsIm1pbl9zeW5jX2NvbW1pdHRlZV9wYXJ0aWNpcGFudHMiOjMyLCJzZWNvbmRzX3Blcl9zbG90Ijo2LCJzbG90c19wZXJfZXBvY2giOjh9","checksum":"+CVJ9byK2u8Y5c5PW2gmmUc0N0LJONrDIvrxWDMZFyw=","latest_height":{"revision_number":"0","revision_height":"32"}}`
21-
consensusStateJSON = `{"@type":"/ibc.lightclients.wasm.v1.ConsensusState","data":"eyJjdXJyZW50X3N5bmNfY29tbWl0dGVlIjoiMHg4MTQ1ZjkyZDEzMTcxNTNlNmJiODFhOTAzZGI2ZjBiMTBjNTBhOTM2ODNmNGMyYWFiMzVlOWE4YTRiYjI4MzMyMzQyNWZiNTZhNDdkOGIzMGE5ZWZkNTA5YzhhZjE0ZTEiLCJuZXh0X3N5bmNfY29tbWl0dGVlIjoiMHg4MTQ1ZjkyZDEzMTcxNTNlNmJiODFhOTAzZGI2ZjBiMTBjNTBhOTM2ODNmNGMyYWFiMzVlOWE4YTRiYjI4MzMyMzQyNWZiNTZhNDdkOGIzMGE5ZWZkNTA5YzhhZjE0ZTEiLCJzbG90IjozMiwic3RhdGVfcm9vdCI6IjB4MjI4NTQzYWVlYzk0NjA5YjQwOGUyNzI0NjIzZjgyMGExNjFhYmY5OWRkODMyNzQ4MWQ1NGNmYmUyNzAyOTE1ZCIsInN0b3JhZ2Vfcm9vdCI6IjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsInRpbWVzdGFtcCI6MTc0MDgyNzU5OX0="}`
22-
)
23-
24-
func TestAddEthLightWasmLightClient(t *testing.T) {
17+
func TestGrantIBCWasmAuth(t *testing.T) {
2518
gaiaApp := helpers.Setup(t)
2619
ctx := gaiaApp.NewUncachedContext(true, tmproto.Header{
2720
Time: time.Unix(1740829624, 0),
2821
})
2922

30-
err := v23.AddEthLightWasmLightClient(ctx, gaiaApp.WasmClientKeeper)
31-
require.NoError(t, err)
32-
33-
// check that the checksum is as expected
34-
queryChecksumsResp, err := gaiaApp.WasmClientKeeper.Checksums(ctx, &ibcwasmtypes.QueryChecksumsRequest{})
35-
require.NoError(t, err)
36-
require.Len(t, queryChecksumsResp.Checksums, 1)
37-
require.Equal(t, v23.ExpectedEthLightClientChecksum, queryChecksumsResp.Checksums[0])
38-
39-
var clientState ibcexported.ClientState
40-
err = gaiaApp.AppCodec().UnmarshalInterfaceJSON([]byte(clientStateJSON), &clientState)
23+
err := v23.AuthzGrantWasmLightClient(ctx, gaiaApp.AuthzKeeper, *gaiaApp.GovKeeper)
4124
require.NoError(t, err)
4225

43-
var consensusState ibcexported.ConsensusState
44-
err = gaiaApp.AppCodec().UnmarshalInterfaceJSON([]byte(consensusStateJSON), &consensusState)
26+
granteeAddr, err := sdk.AccAddressFromBech32(v23.ClientUploaderAddress)
4527
require.NoError(t, err)
46-
47-
createMsg, err := clienttypes.NewMsgCreateClient(clientState, consensusState, "")
28+
granterAddr, err := sdk.AccAddressFromBech32(gaiaApp.GovKeeper.GetAuthority())
4829
require.NoError(t, err)
4930

50-
// create a light client
51-
createClientResp, err := gaiaApp.IBCKeeper.CreateClient(ctx, createMsg)
52-
require.NoError(t, err)
53-
require.Equal(t, "08-wasm-0", createClientResp.ClientId)
54-
55-
// Make a call into the actual light client to verify we can call the light client contract
56-
timestamp, err := gaiaApp.IBCKeeper.ClientKeeper.GetClientTimestampAtHeight(ctx, "08-wasm-0", clienttypes.NewHeight(0, 32))
57-
require.NoError(t, err)
58-
require.Equal(t, uint64(1740827599000000000), timestamp)
31+
auth, _ := gaiaApp.AuthzKeeper.GetAuthorization(
32+
ctx, granteeAddr,
33+
granterAddr,
34+
v23.IBCWasmStoreCodeTypeURL)
35+
require.NotNil(t, auth)
5936
}

0 commit comments

Comments
 (0)