Skip to content

Commit 239907a

Browse files
chore: Add upgrade handler (#3705)
* Add upgrade handler * Fix tests * Fix lints
1 parent 5a9a744 commit 239907a

File tree

4 files changed

+98
-0
lines changed

4 files changed

+98
-0
lines changed

app/app.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ 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"
7778
)
7879

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

377378
// PreBlocker application updates every pre block
378379
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+
}
379387
return app.mm.PreBlock(ctx)
380388
}
381389

app/upgrades/v23_1_1/constants.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package v23_1_1 //nolint:revive
2+
import "time"
3+
4+
const (
5+
IBCWasmMigrateTypeURL = "/ibc.lightclients.wasm.v1.MsgMigrateContract"
6+
GranteeAddress = "cosmos1raa4kyx5ypz75qqk3566c6slx2mw3qzs5ps5du"
7+
)
8+
9+
// GrantExpiration on Apr 15th 2025, 15:00:00+00:00
10+
var GrantExpiration = time.Date(2025, time.April, 15, 15, 0, 0, 0, time.UTC)

app/upgrades/v23_1_1/upgrades.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package v23_1_1 //nolint:revive
2+
3+
import (
4+
sdk "github.com/cosmos/cosmos-sdk/types"
5+
"github.com/cosmos/cosmos-sdk/x/authz"
6+
authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper"
7+
govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
8+
)
9+
10+
func AuthzGrantWasmMigrate(ctx sdk.Context, authzKeeper authzkeeper.Keeper, govKeeper govkeeper.Keeper) error {
11+
sdkCtx := sdk.UnwrapSDKContext(ctx)
12+
grant, err := authz.NewGrant(
13+
sdkCtx.BlockTime(),
14+
authz.NewGenericAuthorization(IBCWasmMigrateTypeURL),
15+
&GrantExpiration,
16+
)
17+
if err != nil {
18+
return err
19+
}
20+
sdkCtx.Logger().Info("Granting IBC Migrate Code", "granter", govKeeper.GetAuthority(), "grantee",
21+
GranteeAddress)
22+
resp, err := authzKeeper.Grant(ctx, &authz.MsgGrant{
23+
Granter: govKeeper.GetAuthority(),
24+
Grantee: GranteeAddress,
25+
Grant: grant,
26+
})
27+
if err != nil {
28+
return err
29+
}
30+
if resp != nil {
31+
sdkCtx.Logger().Info("Authz Keeper Grant", "response", resp.String())
32+
}
33+
return nil
34+
}

app/upgrades/v23_1_1/upgrades_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package v23_1_1_test
2+
3+
import (
4+
"testing"
5+
"time"
6+
7+
"github.com/stretchr/testify/require"
8+
9+
tmproto "github.com/cometbft/cometbft/proto/tendermint/types"
10+
11+
sdk "github.com/cosmos/cosmos-sdk/types"
12+
"github.com/cosmos/cosmos-sdk/x/authz"
13+
14+
"github.com/cosmos/gaia/v23/app/helpers"
15+
upgrade "github.com/cosmos/gaia/v23/app/upgrades/v23_1_1"
16+
)
17+
18+
func TestGrantIBCWasmAuth(t *testing.T) {
19+
gaiaApp := helpers.Setup(t)
20+
ctx := gaiaApp.NewUncachedContext(true, tmproto.Header{
21+
Time: time.Unix(1740829624, 0),
22+
})
23+
24+
err := upgrade.AuthzGrantWasmMigrate(ctx, gaiaApp.AuthzKeeper, *gaiaApp.GovKeeper)
25+
require.NoError(t, err)
26+
27+
granteeAddr, err := sdk.AccAddressFromBech32(upgrade.GranteeAddress)
28+
require.NoError(t, err)
29+
granterAddr, err := sdk.AccAddressFromBech32(gaiaApp.GovKeeper.GetAuthority())
30+
require.NoError(t, err)
31+
32+
auth, _ := gaiaApp.AuthzKeeper.GetAuthorization(
33+
ctx, granteeAddr,
34+
granterAddr,
35+
upgrade.IBCWasmMigrateTypeURL)
36+
require.NotNil(t, auth)
37+
38+
resp, err := gaiaApp.AuthzKeeper.GranteeGrants(ctx, &authz.QueryGranteeGrantsRequest{
39+
Grantee: upgrade.GranteeAddress,
40+
})
41+
require.NoError(t, err)
42+
require.Equal(t, 1, len(resp.Grants))
43+
require.Equal(t, granterAddr.String(), resp.Grants[0].Granter)
44+
require.Equal(t, granteeAddr.String(), resp.Grants[0].Grantee)
45+
require.Equal(t, upgrade.GrantExpiration, *resp.Grants[0].Expiration)
46+
}

0 commit comments

Comments
 (0)