From 1e788fa6aa8d179b69af0ba72b333850b9b51063 Mon Sep 17 00:00:00 2001 From: Gjermund Garaba Date: Thu, 6 Feb 2025 20:32:11 -0500 Subject: [PATCH] chore: revert sdk changes not merged into feat/eureka (#7930) * Revert "chore: use context.Context and appmodule.Environment in 08-wasm (#7880)" This reverts commit 98d7e7550a23ecf8d96ce042ab11ef857b184f2a. * Revert "chore: make all keepers use address codecs (#7896)" This reverts commit 6a1986c265d54ce31ac2468449ebb749ce3e58ca. * Revert "chore: migrate to address codec in transfer (#7892)" This reverts commit c0365a37d158e9c87612ba4ba72d8f921312db65. * Revert "chore: change usage of deprecated module.NewManager in SimApps (#7886)" This reverts commit 3e0a689b9ccab63f84cdab1efd57c63761027742. * Revert "chore: migrate to core modules (#7866)" This reverts commit dcd6a3ef3393b38d634998730cc332573229431b. --- e2e/testsuite/tx.go | 30 ++------ .../controller/types/msgs_test.go | 6 +- modules/apps/27-interchain-accounts/module.go | 37 ++++----- modules/apps/29-fee/ibc_middleware.go | 4 +- modules/apps/29-fee/keeper/escrow.go | 10 +-- modules/apps/29-fee/keeper/keeper.go | 19 ++--- modules/apps/29-fee/keeper/migrations.go | 8 +- modules/apps/29-fee/keeper/msg_server.go | 8 +- modules/apps/29-fee/module.go | 25 +++--- modules/apps/callbacks/testing/simapp/app.go | 50 ++++++------ modules/apps/transfer/keeper/forwarding.go | 3 +- modules/apps/transfer/keeper/keeper.go | 4 - modules/apps/transfer/keeper/keeper_test.go | 4 - modules/apps/transfer/keeper/migrations.go | 12 +-- modules/apps/transfer/keeper/msg_server.go | 3 +- modules/apps/transfer/keeper/relay.go | 3 +- modules/apps/transfer/module.go | 32 ++++---- modules/apps/transfer/types/msgs.go | 4 +- modules/core/02-client/keeper/migrations.go | 12 ++- .../02-client/migrations/v7/genesis_test.go | 4 +- modules/core/02-client/migrations/v7/store.go | 27 ++++--- .../02-client/migrations/v7/store_test.go | 6 +- .../core/03-connection/keeper/migrations.go | 8 +- modules/core/04-channel/keeper/migrations.go | 4 +- modules/core/keeper/keeper.go | 7 +- modules/core/keeper/keeper_test.go | 3 - modules/core/keeper/msg_server.go | 8 +- modules/core/migrations/v7/genesis_test.go | 4 +- modules/core/module.go | 47 +++++------ .../08-wasm/keeper/contract_keeper.go | 77 ++++++++----------- .../light-clients/08-wasm/keeper/events.go | 38 ++++----- .../08-wasm/keeper/grpc_query.go | 5 +- .../light-clients/08-wasm/keeper/keeper.go | 43 ++++++----- .../08-wasm/keeper/keeper_no_vm.go | 2 - .../08-wasm/keeper/keeper_test.go | 12 +-- .../light-clients/08-wasm/keeper/keeper_vm.go | 20 ++--- .../08-wasm/keeper/migrations.go | 14 ++-- .../08-wasm/keeper/msg_server.go | 14 ++-- .../08-wasm/keeper/options_test.go | 19 ++--- .../light-clients/08-wasm/keeper/querier.go | 63 ++++++++------- .../08-wasm/keeper/querier_test.go | 7 +- .../08-wasm/keeper/snapshotter.go | 12 +-- .../08-wasm/light_client_module.go | 35 ++++++--- modules/light-clients/08-wasm/module.go | 17 ++-- .../08-wasm/testing/simapp/app.go | 63 +++++++-------- .../08-wasm/types/gas_register_custom.go | 36 ++++----- simapp/app.go | 64 ++++++++------- testing/chain.go | 2 - testing/simapp/app.go | 62 +++++++-------- 49 files changed, 442 insertions(+), 555 deletions(-) diff --git a/e2e/testsuite/tx.go b/e2e/testsuite/tx.go index 3ed4e496d07..c037ebb3d3b 100644 --- a/e2e/testsuite/tx.go +++ b/e2e/testsuite/tx.go @@ -21,7 +21,6 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" - addresscodec "github.com/cosmos/cosmos-sdk/codec/address" sdk "github.com/cosmos/cosmos-sdk/types" abci "github.com/cometbft/cometbft/api/cometbft/abci/v1" @@ -154,13 +153,14 @@ func (s *E2ETestSuite) ExecuteAndPassGovV1Proposal(ctx context.Context, msg sdk. // ExecuteGovV1Proposal submits a v1 governance proposal using the provided user and message and uses all validators // to vote yes on the proposal. func (s *E2ETestSuite) ExecuteGovV1Proposal(ctx context.Context, msg sdk.Msg, chain ibc.Chain, user ibc.Wallet) error { - sender := s.ConvertToAccAddress(chain, user.FormattedAddress()) - cosmosChain, ok := chain.(*cosmos.CosmosChain) if !ok { - panic("ExecuteGovV1Proposal must be passed a cosmos.CosmosChain") + panic("ExecuteAndPassGovV1Proposal must be passed a cosmos.CosmosChain") } + sender, err := sdk.AccAddressFromBech32(user.FormattedAddress()) + s.Require().NoError(err) + proposalID := s.proposalIDs[cosmosChain.Config().ChainID] defer func() { s.proposalIDs[cosmosChain.Config().ChainID] = proposalID + 1 @@ -189,19 +189,6 @@ func (s *E2ETestSuite) ExecuteGovV1Proposal(ctx context.Context, msg sdk.Msg, ch return s.waitForGovV1ProposalToPass(ctx, cosmosChain, proposalID) } -func (s *E2ETestSuite) ConvertToAccAddress(chain ibc.Chain, formattedAddress string) sdk.AccAddress { - cosmosChain, ok := chain.(*cosmos.CosmosChain) - if !ok { - panic("ConvertToAccAddress must be passed a cosmos.CosmosChain") - } - - addrCdc := addresscodec.NewBech32Codec(cosmosChain.Config().Bech32Prefix) - senderBytes, err := addrCdc.StringToBytes(formattedAddress) - s.Require().NoError(err) - - return sdk.AccAddress(senderBytes) -} - // waitForGovV1ProposalToPass polls for the entire voting period to see if the proposal has passed. // if the proposal has not passed within the duration of the voting period, an error is returned. func (s *E2ETestSuite) waitForGovV1ProposalToPass(ctx context.Context, chain ibc.Chain, proposalID uint64) error { @@ -289,13 +276,10 @@ func (*E2ETestSuite) waitForGovV1Beta1ProposalToPass(ctx context.Context, chain // ExecuteGovV1Beta1Proposal submits a v1beta1 governance proposal using the provided content. func (s *E2ETestSuite) ExecuteGovV1Beta1Proposal(ctx context.Context, chain ibc.Chain, user ibc.Wallet, content govtypesv1beta1.Content) sdk.TxResponse { - sender := s.ConvertToAccAddress(chain, user.FormattedAddress()) + sender, err := sdk.AccAddressFromBech32(user.FormattedAddress()) + s.Require().NoError(err) - msgSubmitProposal, err := govtypesv1beta1.NewMsgSubmitProposal( - content, - sdk.NewCoins(sdk.NewCoin(chain.Config().Denom, govtypesv1beta1.DefaultMinDepositTokens)), - sender.String(), - ) + msgSubmitProposal, err := govtypesv1beta1.NewMsgSubmitProposal(content, sdk.NewCoins(sdk.NewCoin(chain.Config().Denom, govtypesv1beta1.DefaultMinDepositTokens)), sender.String()) s.Require().NoError(err) return s.BroadcastMessages(ctx, chain, user, msgSubmitProposal) diff --git a/modules/apps/27-interchain-accounts/controller/types/msgs_test.go b/modules/apps/27-interchain-accounts/controller/types/msgs_test.go index 8f1933b6ba2..33f89d81faf 100644 --- a/modules/apps/27-interchain-accounts/controller/types/msgs_test.go +++ b/modules/apps/27-interchain-accounts/controller/types/msgs_test.go @@ -9,7 +9,6 @@ import ( banktypes "cosmossdk.io/x/bank/types" - addresscodec "github.com/cosmos/cosmos-sdk/codec/address" "github.com/cosmos/cosmos-sdk/codec/testutil" sdk "github.com/cosmos/cosmos-sdk/types" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" @@ -109,10 +108,7 @@ func TestMsgRegisterInterchainAccountValidateBasic(t *testing.T) { } func TestMsgRegisterInterchainAccountGetSigners(t *testing.T) { - addrCdc := addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) - expSigerBytes, err := addrCdc.StringToBytes(ibctesting.TestAccAddress) - expSigner := sdk.AccAddress(expSigerBytes) - + expSigner, err := sdk.AccAddressFromBech32(ibctesting.TestAccAddress) require.NoError(t, err) msg := types.NewMsgRegisterInterchainAccount(ibctesting.FirstConnectionID, ibctesting.TestAccAddress, "", channeltypes.ORDERED) diff --git a/modules/apps/27-interchain-accounts/module.go b/modules/apps/27-interchain-accounts/module.go index 1e9d4ceb522..f99a6953d97 100644 --- a/modules/apps/27-interchain-accounts/module.go +++ b/modules/apps/27-interchain-accounts/module.go @@ -7,7 +7,6 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - "google.golang.org/grpc" "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" @@ -15,6 +14,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -34,10 +34,10 @@ var ( _ appmodule.AppModule = (*AppModule)(nil) _ appmodule.HasConsensusVersion = (*AppModule)(nil) _ appmodule.HasRegisterInterfaces = (*AppModule)(nil) - _ appmodule.HasMigrations = (*AppModule)(nil) _ module.AppModule = (*AppModule)(nil) _ module.HasGenesis = (*AppModule)(nil) + _ module.HasServices = (*AppModule)(nil) _ module.HasGRPCGateway = (*AppModule)(nil) // Sims @@ -123,33 +123,28 @@ func (AppModule) GetQueryCmd() *cobra.Command { return cli.GetQueryCmd() } -func (am AppModule) RegisterMigrations(registrar appmodule.MigrationRegistrar) error { +// RegisterServices registers module services +func (am AppModule) RegisterServices(cfg module.Configurator) { + if am.controllerKeeper != nil { + controllertypes.RegisterMsgServer(cfg.MsgServer(), controllerkeeper.NewMsgServerImpl(am.controllerKeeper)) + controllertypes.RegisterQueryServer(cfg.QueryServer(), am.controllerKeeper) + } + + if am.hostKeeper != nil { + hosttypes.RegisterMsgServer(cfg.MsgServer(), hostkeeper.NewMsgServerImpl(am.hostKeeper)) + hosttypes.RegisterQueryServer(cfg.QueryServer(), am.hostKeeper) + } + controllerMigrator := controllerkeeper.NewMigrator(am.controllerKeeper) hostMigrator := hostkeeper.NewMigrator(am.hostKeeper) - if err := registrar.Register(types.ModuleName, 2, func(ctx context.Context) error { + if err := cfg.RegisterMigration(types.ModuleName, 2, func(ctx sdk.Context) error { if err := hostMigrator.MigrateParams(ctx); err != nil { return err } return controllerMigrator.MigrateParams(ctx) }); err != nil { - return fmt.Errorf("failed to migrate interchainaccounts app from version 2 to 3 (self-managed params migration): %w", err) - } - return nil -} - -// RegisterServices registers module services -func (am AppModule) RegisterServices(cfg grpc.ServiceRegistrar) error { - if am.controllerKeeper != nil { - controllertypes.RegisterMsgServer(cfg, controllerkeeper.NewMsgServerImpl(am.controllerKeeper)) - controllertypes.RegisterQueryServer(cfg, am.controllerKeeper) + panic(fmt.Errorf("failed to migrate interchainaccounts app from version 2 to 3 (self-managed params migration): %v", err)) } - - if am.hostKeeper != nil { - hosttypes.RegisterMsgServer(cfg, hostkeeper.NewMsgServerImpl(am.hostKeeper)) - hosttypes.RegisterQueryServer(cfg, am.hostKeeper) - } - - return nil } // InitGenesis performs genesis initialization for the interchain accounts module. diff --git a/modules/apps/29-fee/ibc_middleware.go b/modules/apps/29-fee/ibc_middleware.go index 410c58da73d..08d8c227a3f 100644 --- a/modules/apps/29-fee/ibc_middleware.go +++ b/modules/apps/29-fee/ibc_middleware.go @@ -283,7 +283,7 @@ func (im IBCMiddleware) OnAcknowledgementPacket( payee = relayer.String() } - payeeAddr, err := im.keeper.AddrCodec.StringToBytes(payee) + payeeAddr, err := sdk.AccAddressFromBech32(payee) if err != nil { return errorsmod.Wrapf(err, "failed to create sdk.Address from payee: %s", payee) } @@ -329,7 +329,7 @@ func (im IBCMiddleware) OnTimeoutPacket( payee = relayer.String() } - payeeAddr, err := im.keeper.AddrCodec.StringToBytes(payee) + payeeAddr, err := sdk.AccAddressFromBech32(payee) if err != nil { return errorsmod.Wrapf(err, "failed to create sdk.Address from payee: %s", payee) } diff --git a/modules/apps/29-fee/keeper/escrow.go b/modules/apps/29-fee/keeper/escrow.go index 9a5f98a7b09..c18935ef7ac 100644 --- a/modules/apps/29-fee/keeper/escrow.go +++ b/modules/apps/29-fee/keeper/escrow.go @@ -18,7 +18,7 @@ import ( // escrowPacketFee sends the packet fee to the 29-fee module account to hold in escrow func (k Keeper) escrowPacketFee(ctx context.Context, packetID channeltypes.PacketId, packetFee types.PacketFee) error { // check if the refund address is valid - refundAddr, err := k.AddrCodec.StringToBytes(packetFee.RefundAddress) + refundAddr, err := sdk.AccAddressFromBech32(packetFee.RefundAddress) if err != nil { return err } @@ -52,7 +52,7 @@ func (k Keeper) DistributePacketFeesOnAcknowledgement(ctx context.Context, forwa // if the escrow account has insufficient balance then we want to avoid partially distributing fees if err := k.BranchService.Execute(ctx, func(ctx context.Context) error { // forward relayer address will be empty if conversion fails - forwardAddr, _ := k.AddrCodec.StringToBytes(forwardRelayer) + forwardAddr, _ := sdk.AccAddressFromBech32(forwardRelayer) for _, packetFee := range packetFees { if !k.EscrowAccountHasBalance(ctx, packetFee.Fee.Total()) { @@ -61,7 +61,7 @@ func (k Keeper) DistributePacketFeesOnAcknowledgement(ctx context.Context, forwa } // check if refundAcc address works - refundAddr, err := k.AddrCodec.StringToBytes(packetFee.RefundAddress) + refundAddr, err := sdk.AccAddressFromBech32(packetFee.RefundAddress) if err != nil { panic(fmt.Errorf("could not parse refundAcc %s to sdk.AccAddress", packetFee.RefundAddress)) } @@ -117,7 +117,7 @@ func (k Keeper) DistributePacketFeesOnTimeout(ctx context.Context, timeoutRelaye } // check if refundAcc address works - refundAddr, err := k.AddrCodec.StringToBytes(packetFee.RefundAddress) + refundAddr, err := sdk.AccAddressFromBech32(packetFee.RefundAddress) if err != nil { panic(fmt.Errorf("could not parse refundAcc %s to sdk.AccAddress", packetFee.RefundAddress)) } @@ -206,7 +206,7 @@ func (k Keeper) RefundFeesOnChannelClosure(ctx context.Context, portID, channelI return ibcerrors.ErrInsufficientFunds } - refundAddr, err := k.AddrCodec.StringToBytes(packetFee.RefundAddress) + refundAddr, err := sdk.AccAddressFromBech32(packetFee.RefundAddress) if err != nil { unRefundedFees = append(unRefundedFees, packetFee) continue diff --git a/modules/apps/29-fee/keeper/keeper.go b/modules/apps/29-fee/keeper/keeper.go index 282ebb7eb76..2b027f96da7 100644 --- a/modules/apps/29-fee/keeper/keeper.go +++ b/modules/apps/29-fee/keeper/keeper.go @@ -3,7 +3,6 @@ package keeper import ( "context" - "cosmossdk.io/core/address" "cosmossdk.io/core/appmodule" storetypes "cosmossdk.io/store/types" @@ -25,8 +24,7 @@ var _ types.ChannelKeeper = (*Keeper)(nil) type Keeper struct { appmodule.Environment - cdc codec.BinaryCodec - AddrCodec address.Codec + cdc codec.BinaryCodec authKeeper types.AuthKeeper ics4Wrapper porttypes.ICS4Wrapper @@ -36,13 +34,12 @@ type Keeper struct { // NewKeeper creates a new 29-fee Keeper instance func NewKeeper( - cdc codec.BinaryCodec, addrCdc address.Codec, env appmodule.Environment, + cdc codec.BinaryCodec, env appmodule.Environment, ics4Wrapper porttypes.ICS4Wrapper, channelKeeper types.ChannelKeeper, authKeeper types.AuthKeeper, bankKeeper types.BankKeeper, ) Keeper { return Keeper{ cdc: cdc, - AddrCodec: addrCdc, Environment: env, ics4Wrapper: ics4Wrapper, channelKeeper: channelKeeper, @@ -223,17 +220,17 @@ func (k Keeper) GetAllPayees(ctx context.Context) []types.RegisteredPayee { // SetCounterpartyPayeeAddress maps the destination chain counterparty payee address to the source relayer address // The receiving chain must store the mapping from: address -> counterpartyPayeeAddress for the given channel -func (k Keeper) SetCounterpartyPayeeAddress(ctx context.Context, addr, counterpartyAddress, channelID string) { +func (k Keeper) SetCounterpartyPayeeAddress(ctx context.Context, address, counterpartyAddress, channelID string) { store := k.KVStoreService.OpenKVStore(ctx) - if err := store.Set(types.KeyCounterpartyPayee(addr, channelID), []byte(counterpartyAddress)); err != nil { + if err := store.Set(types.KeyCounterpartyPayee(address, channelID), []byte(counterpartyAddress)); err != nil { panic(err) } } // GetCounterpartyPayeeAddress gets the counterparty payee address given a destination relayer address -func (k Keeper) GetCounterpartyPayeeAddress(ctx context.Context, relayerAddr, channelID string) (string, bool) { +func (k Keeper) GetCounterpartyPayeeAddress(ctx context.Context, address, channelID string) (string, bool) { store := k.KVStoreService.OpenKVStore(ctx) - key := types.KeyCounterpartyPayee(relayerAddr, channelID) + key := types.KeyCounterpartyPayee(address, channelID) addr, err := store.Get(key) if err != nil { @@ -272,9 +269,9 @@ func (k Keeper) GetAllCounterpartyPayees(ctx context.Context) []types.Registered } // SetRelayerAddressForAsyncAck sets the forward relayer address during OnRecvPacket in case of async acknowledgement -func (k Keeper) SetRelayerAddressForAsyncAck(ctx context.Context, packetID channeltypes.PacketId, addr string) { +func (k Keeper) SetRelayerAddressForAsyncAck(ctx context.Context, packetID channeltypes.PacketId, address string) { store := k.KVStoreService.OpenKVStore(ctx) - if err := store.Set(types.KeyRelayerAddressForAsyncAck(packetID), []byte(addr)); err != nil { + if err := store.Set(types.KeyRelayerAddressForAsyncAck(packetID), []byte(address)); err != nil { panic(err) } } diff --git a/modules/apps/29-fee/keeper/migrations.go b/modules/apps/29-fee/keeper/migrations.go index 94556d578ae..6bb05548796 100644 --- a/modules/apps/29-fee/keeper/migrations.go +++ b/modules/apps/29-fee/keeper/migrations.go @@ -1,8 +1,6 @@ package keeper import ( - "context" - storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/runtime" @@ -26,10 +24,10 @@ func NewMigrator(keeper Keeper) Migrator { // Migrate1to2 migrates ibc-fee module from ConsensusVersion 1 to 2 // by refunding leftover fees to the refund address. -func (m Migrator) Migrate1to2(ctx context.Context) error { +func (m Migrator) Migrate1to2(ctx sdk.Context) error { store := runtime.KVStoreAdapter(m.keeper.KVStoreService.OpenKVStore(ctx)) iterator := storetypes.KVStorePrefixIterator(store, []byte(types.FeesInEscrowPrefix)) - defer coretypes.LogDeferred(m.keeper.Logger, func() error { return iterator.Close() }) + defer coretypes.LogDeferred(ctx.Logger(), func() error { return iterator.Close() }) for ; iterator.Valid(); iterator.Next() { feesInEscrow := m.keeper.MustUnmarshalFees(iterator.Value()) @@ -37,7 +35,7 @@ func (m Migrator) Migrate1to2(ctx context.Context) error { for _, packetFee := range feesInEscrow.PacketFees { refundCoins := legacyTotal(packetFee.Fee).Sub(packetFee.Fee.Total()...) - refundAddr, err := m.keeper.AddrCodec.StringToBytes(packetFee.RefundAddress) + refundAddr, err := sdk.AccAddressFromBech32(packetFee.RefundAddress) if err != nil { return err } diff --git a/modules/apps/29-fee/keeper/msg_server.go b/modules/apps/29-fee/keeper/msg_server.go index 253f41ec093..87cf093ad9f 100644 --- a/modules/apps/29-fee/keeper/msg_server.go +++ b/modules/apps/29-fee/keeper/msg_server.go @@ -5,6 +5,8 @@ import ( errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/ibc-go/v9/modules/apps/29-fee/types" channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" @@ -18,7 +20,7 @@ var _ types.MsgServer = (*Keeper)(nil) // the source chain from which packets originate as this is where fee distribution takes place. This function may be // called more than once by a relayer, in which case, the latest payee is always used. func (k Keeper) RegisterPayee(ctx context.Context, msg *types.MsgRegisterPayee) (*types.MsgRegisterPayeeResponse, error) { - payee, err := k.AddrCodec.StringToBytes(msg.Payee) + payee, err := sdk.AccAddressFromBech32(msg.Payee) if err != nil { return nil, err } @@ -85,7 +87,7 @@ func (k Keeper) PayPacketFee(ctx context.Context, msg *types.MsgPayPacketFee) (* return nil, types.ErrFeeModuleLocked } - refundAcc, err := k.AddrCodec.StringToBytes(msg.Signer) + refundAcc, err := sdk.AccAddressFromBech32(msg.Signer) if err != nil { return nil, err } @@ -128,7 +130,7 @@ func (k Keeper) PayPacketFeeAsync(ctx context.Context, msg *types.MsgPayPacketFe return nil, types.ErrFeeModuleLocked } - refundAcc, err := k.AddrCodec.StringToBytes(msg.PacketFee.RefundAddress) + refundAcc, err := sdk.AccAddressFromBech32(msg.PacketFee.RefundAddress) if err != nil { return nil, err } diff --git a/modules/apps/29-fee/module.go b/modules/apps/29-fee/module.go index 14fad4319e5..fbef3e57062 100644 --- a/modules/apps/29-fee/module.go +++ b/modules/apps/29-fee/module.go @@ -7,7 +7,6 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - "google.golang.org/grpc" "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" @@ -27,10 +26,10 @@ var ( _ appmodule.HasConsensusVersion = (*AppModule)(nil) _ appmodule.HasAminoCodec = (*AppModule)(nil) _ appmodule.HasRegisterInterfaces = (*AppModule)(nil) - _ appmodule.HasMigrations = (*AppModule)(nil) - _ module.AppModule = (*AppModule)(nil) - _ module.HasGenesis = (*AppModule)(nil) + _ module.AppModule = (*AppModule)(nil) + _ module.HasGenesis = (*AppModule)(nil) + _ module.HasServices = (*AppModule)(nil) _ autocli.HasCustomTxCommand = (*AppModule)(nil) _ autocli.HasCustomQueryCommand = (*AppModule)(nil) @@ -105,19 +104,15 @@ func (AppModule) GetQueryCmd() *cobra.Command { return cli.GetQueryCmd() } -func (am AppModule) RegisterMigrations(registrar appmodule.MigrationRegistrar) error { +// RegisterServices registers module services. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), am.keeper) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) + m := keeper.NewMigrator(am.keeper) - if err := registrar.Register(types.ModuleName, 1, m.Migrate1to2); err != nil { - return fmt.Errorf("failed to migrate ibc-fee module from version 1 to 2 (refund leftover fees): %v", err) + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(fmt.Errorf("failed to migrate ibc-fee module from version 1 to 2 (refund leftover fees): %v", err)) } - return nil -} - -// RegisterServices registers module services. -func (am AppModule) RegisterServices(cfg grpc.ServiceRegistrar) error { - types.RegisterMsgServer(cfg, am.keeper) - types.RegisterQueryServer(cfg, am.keeper) - return nil } // InitGenesis performs genesis initialization for the ibc-29-fee module. It returns diff --git a/modules/apps/callbacks/testing/simapp/app.go b/modules/apps/callbacks/testing/simapp/app.go index 54be2c89580..a17ba33d992 100644 --- a/modules/apps/callbacks/testing/simapp/app.go +++ b/modules/apps/callbacks/testing/simapp/app.go @@ -12,7 +12,6 @@ import ( "github.com/spf13/cast" coreaddress "cosmossdk.io/core/address" - appmodule "cosmossdk.io/core/appmodule" "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" "cosmossdk.io/x/accounts" @@ -406,7 +405,6 @@ func NewSimApp( app.IBCKeeper = ibckeeper.NewKeeper( appCodec, - signingCtx.AddressCodec(), runtime.NewEnvironment(runtime.NewKVStoreService(keys[ibcexported.StoreKey]), logger.With(log.ModuleKey, "x/ibc")), app.GetSubspace(ibcexported.ModuleName), app.UpgradeKeeper, @@ -433,7 +431,6 @@ func NewSimApp( // IBC Fee Module keeper app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( appCodec, - signingCtx.AddressCodec(), runtime.NewEnvironment(runtime.NewKVStoreService(keys[ibcfeetypes.StoreKey]), logger.With(log.ModuleKey, fmt.Sprintf("x/%s-%s", ibcexported.ModuleName, ibcfeetypes.ModuleName))), app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware app.IBCKeeper.ChannelKeeper, @@ -472,7 +469,6 @@ func NewSimApp( // NOTE: the Transfer Keeper's ICS4Wrapper can later be replaced. app.TransferKeeper = ibctransferkeeper.NewKeeper( appCodec, - signingCtx.AddressCodec(), runtime.NewEnvironment(runtime.NewKVStoreService(keys[ibctransfertypes.StoreKey]), logger.With(log.ModuleKey, fmt.Sprintf("x/%s-%s", ibcexported.ModuleName, ibctransfertypes.ModuleName))), app.GetSubspace(ibctransfertypes.ModuleName), app.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware @@ -588,33 +584,33 @@ func NewSimApp( // NOTE: Any module instantiated in the module manager that is later modified // must be passed by reference here. - app.ModuleManager = module.NewManagerFromMap(map[string]appmodule.AppModule{ - genutiltypes.ModuleName: genutil.NewAppModule(appCodec, app.AuthKeeper, app.StakingKeeper, app, txConfig, genutiltypes.DefaultMessageValidator), - accounts.ModuleName: accounts.NewAppModule(appCodec, app.AccountsKeeper), - authtypes.ModuleName: auth.NewAppModule(appCodec, app.AuthKeeper, app.AccountsKeeper, authsims.RandomGenesisAccounts, nil), - vestingtypes.ModuleName: vesting.NewAppModule(app.AuthKeeper, app.BankKeeper), - banktypes.ModuleName: bank.NewAppModule(appCodec, app.BankKeeper, app.AuthKeeper), - feegrant.ModuleName: feegrantmodule.NewAppModule(appCodec, app.FeeGrantKeeper, app.interfaceRegistry), - govtypes.ModuleName: gov.NewAppModule(appCodec, &app.GovKeeper, app.AuthKeeper, app.BankKeeper, app.PoolKeeper), - minttypes.ModuleName: mint.NewAppModule(appCodec, app.MintKeeper, app.AuthKeeper), - slashingtypes.ModuleName: slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AuthKeeper, app.BankKeeper, app.StakingKeeper, app.interfaceRegistry, cometService), - distrtypes.ModuleName: distr.NewAppModule(appCodec, app.DistrKeeper, app.StakingKeeper), - stakingtypes.ModuleName: staking.NewAppModule(appCodec, app.StakingKeeper), - upgradetypes.ModuleName: upgrade.NewAppModule(app.UpgradeKeeper), - paramstypes.ModuleName: params.NewAppModule(app.ParamsKeeper), - consensusparamtypes.ModuleName: consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), + app.ModuleManager = module.NewManager( + genutil.NewAppModule(appCodec, app.AuthKeeper, app.StakingKeeper, app, txConfig, genutiltypes.DefaultMessageValidator), + accounts.NewAppModule(appCodec, app.AccountsKeeper), + auth.NewAppModule(appCodec, app.AuthKeeper, app.AccountsKeeper, authsims.RandomGenesisAccounts, nil), + vesting.NewAppModule(app.AuthKeeper, app.BankKeeper), + bank.NewAppModule(appCodec, app.BankKeeper, app.AuthKeeper), + feegrantmodule.NewAppModule(appCodec, app.FeeGrantKeeper, app.interfaceRegistry), + gov.NewAppModule(appCodec, &app.GovKeeper, app.AuthKeeper, app.BankKeeper, app.PoolKeeper), + mint.NewAppModule(appCodec, app.MintKeeper, app.AuthKeeper), + slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AuthKeeper, app.BankKeeper, app.StakingKeeper, app.interfaceRegistry, cometService), + distr.NewAppModule(appCodec, app.DistrKeeper, app.StakingKeeper), + staking.NewAppModule(appCodec, app.StakingKeeper), + upgrade.NewAppModule(app.UpgradeKeeper), + params.NewAppModule(app.ParamsKeeper), + consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), // IBC modules - ibcexported.ModuleName: ibc.NewAppModule(appCodec, app.IBCKeeper), - ibctransfertypes.ModuleName: transfer.NewAppModule(appCodec, app.TransferKeeper), - ibcfeetypes.ModuleName: ibcfee.NewAppModule(appCodec, app.IBCFeeKeeper), - icatypes.ModuleName: ica.NewAppModule(appCodec, &app.ICAControllerKeeper, &app.ICAHostKeeper), - mockModule.Name(): mockModule, + ibc.NewAppModule(appCodec, app.IBCKeeper), + transfer.NewAppModule(appCodec, app.TransferKeeper), + ibcfee.NewAppModule(appCodec, app.IBCFeeKeeper), + ica.NewAppModule(appCodec, &app.ICAControllerKeeper, &app.ICAHostKeeper), + mockModule, // IBC light clients - ibctm.ModuleName: ibctm.NewAppModule(tmLightClientModule), - solomachine.ModuleName: solomachine.NewAppModule(smLightClientModule), - }) + ibctm.NewAppModule(tmLightClientModule), + solomachine.NewAppModule(smLightClientModule), + ) app.ModuleManager.RegisterLegacyAminoCodec(legacyAmino) app.ModuleManager.RegisterInterfaces(interfaceRegistry) diff --git a/modules/apps/transfer/keeper/forwarding.go b/modules/apps/transfer/keeper/forwarding.go index 4d3df776000..fbf015d0413 100644 --- a/modules/apps/transfer/keeper/forwarding.go +++ b/modules/apps/transfer/keeper/forwarding.go @@ -104,8 +104,7 @@ func (k Keeper) getReceiverFromPacketData(data types.FungibleTokenPacketDataV2) return k.authKeeper.GetModuleAddress(types.ModuleName), nil } - receiverBytes, err := k.addrCdc.StringToBytes(data.Receiver) - receiver := sdk.AccAddress(receiverBytes) + receiver, err := sdk.AccAddressFromBech32(data.Receiver) if err != nil { return nil, errorsmod.Wrapf(ibcerrors.ErrInvalidAddress, "failed to decode receiver address %s: %v", data.Receiver, err) } diff --git a/modules/apps/transfer/keeper/keeper.go b/modules/apps/transfer/keeper/keeper.go index 3300d25df29..786ae1b536c 100644 --- a/modules/apps/transfer/keeper/keeper.go +++ b/modules/apps/transfer/keeper/keeper.go @@ -6,7 +6,6 @@ import ( "fmt" "strings" - "cosmossdk.io/core/address" "cosmossdk.io/core/appmodule" sdkmath "cosmossdk.io/math" "cosmossdk.io/store/prefix" @@ -30,7 +29,6 @@ import ( type Keeper struct { appmodule.Environment - addrCdc address.Codec cdc codec.BinaryCodec legacySubspace types.ParamSubspace @@ -47,7 +45,6 @@ type Keeper struct { // NewKeeper creates a new IBC transfer Keeper instance func NewKeeper( cdc codec.BinaryCodec, - addrCdc address.Codec, env appmodule.Environment, legacySubspace types.ParamSubspace, ics4Wrapper porttypes.ICS4Wrapper, @@ -67,7 +64,6 @@ func NewKeeper( return Keeper{ cdc: cdc, - addrCdc: addrCdc, Environment: env, legacySubspace: legacySubspace, ics4Wrapper: ics4Wrapper, diff --git a/modules/apps/transfer/keeper/keeper_test.go b/modules/apps/transfer/keeper/keeper_test.go index c48eed91846..3ff56bd7998 100644 --- a/modules/apps/transfer/keeper/keeper_test.go +++ b/modules/apps/transfer/keeper/keeper_test.go @@ -12,7 +12,6 @@ import ( minttypes "cosmossdk.io/x/mint/types" "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/codec/address" "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" @@ -59,7 +58,6 @@ func (suite *KeeperTestSuite) TestNewKeeper() { {"success", func() { keeper.NewKeeper( suite.chainA.GetSimApp().AppCodec(), - address.NewBech32Codec(suite.chainA.Bech32Prefix), runtime.NewEnvironment(runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(types.StoreKey)), log.NewNopLogger()), suite.chainA.GetSimApp().GetSubspace(types.ModuleName), suite.chainA.GetSimApp().IBCKeeper.ChannelKeeper, @@ -72,7 +70,6 @@ func (suite *KeeperTestSuite) TestNewKeeper() { {"failure: transfer module account does not exist", func() { keeper.NewKeeper( suite.chainA.GetSimApp().AppCodec(), - address.NewBech32Codec(suite.chainA.Bech32Prefix), runtime.NewEnvironment(runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(types.StoreKey)), log.NewNopLogger()), suite.chainA.GetSimApp().GetSubspace(types.ModuleName), suite.chainA.GetSimApp().IBCKeeper.ChannelKeeper, @@ -85,7 +82,6 @@ func (suite *KeeperTestSuite) TestNewKeeper() { {"failure: empty authority", func() { keeper.NewKeeper( suite.chainA.GetSimApp().AppCodec(), - address.NewBech32Codec(suite.chainA.Bech32Prefix), runtime.NewEnvironment(runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(types.StoreKey)), log.NewNopLogger()), suite.chainA.GetSimApp().GetSubspace(types.ModuleName), suite.chainA.GetSimApp().IBCKeeper.ChannelKeeper, diff --git a/modules/apps/transfer/keeper/migrations.go b/modules/apps/transfer/keeper/migrations.go index 9d793f33635..d276aef8091 100644 --- a/modules/apps/transfer/keeper/migrations.go +++ b/modules/apps/transfer/keeper/migrations.go @@ -30,9 +30,9 @@ func NewMigrator(keeper Keeper) Migrator { } // MigrateParams migrates the transfer module's parameters from the x/params to self store. -func (m Migrator) MigrateParams(ctx context.Context) error { +func (m Migrator) MigrateParams(ctx sdk.Context) error { var params types.Params - m.keeper.legacySubspace.GetParamSet(sdk.UnwrapSDKContext(ctx), ¶ms) + m.keeper.legacySubspace.GetParamSet(ctx, ¶ms) m.keeper.SetParams(ctx, params) m.keeper.Logger.Info("successfully migrated transfer app self-manage params") @@ -40,7 +40,7 @@ func (m Migrator) MigrateParams(ctx context.Context) error { } // MigrateDenomMetadata sets token metadata for all the IBC denom traces -func (m Migrator) MigrateDenomMetadata(ctx context.Context) error { +func (m Migrator) MigrateDenomMetadata(ctx sdk.Context) error { m.keeper.iterateDenomTraces(ctx, func(dt internaltypes.DenomTrace) (stop bool) { // check if the metadata for the given denom trace does not already exist @@ -55,7 +55,7 @@ func (m Migrator) MigrateDenomMetadata(ctx context.Context) error { } // MigrateTotalEscrowForDenom migrates the total amount of source chain tokens in escrow. -func (m Migrator) MigrateTotalEscrowForDenom(ctx context.Context) error { +func (m Migrator) MigrateTotalEscrowForDenom(ctx sdk.Context) error { var totalEscrowed sdk.Coins portID := m.keeper.GetPort(ctx) @@ -76,7 +76,7 @@ func (m Migrator) MigrateTotalEscrowForDenom(ctx context.Context) error { } // MigrateDenomTraceToDenom migrates storage from using DenomTrace to Denom. -func (m Migrator) MigrateDenomTraceToDenom(ctx context.Context) error { +func (m Migrator) MigrateDenomTraceToDenom(ctx sdk.Context) error { var ( denoms []types.Denom denomTraces []internaltypes.DenomTrace @@ -147,7 +147,7 @@ func (k Keeper) iterateDenomTraces(ctx context.Context, cb func(denomTrace inter } // setDenomMetadataWithDenomTrace sets an IBC token's denomination metadata -func (k Keeper) setDenomMetadataWithDenomTrace(ctx context.Context, denomTrace internaltypes.DenomTrace) { +func (k Keeper) setDenomMetadataWithDenomTrace(ctx sdk.Context, denomTrace internaltypes.DenomTrace) { metadata := banktypes.Metadata{ Description: fmt.Sprintf("IBC token from %s", denomTrace.GetFullDenomPath()), DenomUnits: []*banktypes.DenomUnit{ diff --git a/modules/apps/transfer/keeper/msg_server.go b/modules/apps/transfer/keeper/msg_server.go index 13b0f556075..de57080adeb 100644 --- a/modules/apps/transfer/keeper/msg_server.go +++ b/modules/apps/transfer/keeper/msg_server.go @@ -20,11 +20,10 @@ func (k Keeper) Transfer(ctx context.Context, msg *types.MsgTransfer) (*types.Ms return nil, types.ErrSendDisabled } - senderBytes, err := k.addrCdc.StringToBytes(msg.Sender) + sender, err := sdk.AccAddressFromBech32(msg.Sender) if err != nil { return nil, err } - sender := sdk.AccAddress(senderBytes) coins := msg.GetCoins() diff --git a/modules/apps/transfer/keeper/relay.go b/modules/apps/transfer/keeper/relay.go index 721a2133938..07043402a4c 100644 --- a/modules/apps/transfer/keeper/relay.go +++ b/modules/apps/transfer/keeper/relay.go @@ -348,8 +348,7 @@ func (k Keeper) OnTimeoutPacket(ctx context.Context, packet channeltypes.Packet, func (k Keeper) refundPacketTokens(ctx context.Context, packet channeltypes.Packet, data types.FungibleTokenPacketDataV2) error { // NOTE: packet data type already checked in handler.go - senderBytes, err := k.addrCdc.StringToBytes(data.Sender) - sender := sdk.AccAddress(senderBytes) + sender, err := sdk.AccAddressFromBech32(data.Sender) if err != nil { return err } diff --git a/modules/apps/transfer/module.go b/modules/apps/transfer/module.go index 31245c739e0..1d054933f0e 100644 --- a/modules/apps/transfer/module.go +++ b/modules/apps/transfer/module.go @@ -7,7 +7,6 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - "google.golang.org/grpc" "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" @@ -29,11 +28,11 @@ var ( _ appmodule.AppModule = (*AppModule)(nil) _ appmodule.HasConsensusVersion = (*AppModule)(nil) _ appmodule.HasRegisterInterfaces = (*AppModule)(nil) - _ appmodule.HasMigrations = (*AppModule)(nil) _ module.AppModule = (*AppModule)(nil) _ module.HasGRPCGateway = (*AppModule)(nil) _ module.HasGenesis = (*AppModule)(nil) + _ module.HasServices = (*AppModule)(nil) // Sims _ module.AppModuleSimulation = (*AppModule)(nil) @@ -119,32 +118,27 @@ func (AppModule) GetQueryCmd() *cobra.Command { } // RegisterServices registers module services. -func (am AppModule) RegisterServices(cfg grpc.ServiceRegistrar) error { - types.RegisterMsgServer(cfg, am.keeper) - types.RegisterQueryServer(cfg, am.keeper) - types.RegisterQueryV2Server(cfg, am.keeper) - return nil -} +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), am.keeper) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) + types.RegisterQueryV2Server(cfg.QueryServer(), am.keeper) -func (am AppModule) RegisterMigrations(registrar appmodule.MigrationRegistrar) error { m := keeper.NewMigrator(am.keeper) - if err := registrar.Register(types.ModuleName, 2, m.MigrateTotalEscrowForDenom); err != nil { - return fmt.Errorf("failed to migrate transfer app from version 2 to 3 (total escrow entry migration): %w", err) + if err := cfg.RegisterMigration(types.ModuleName, 2, m.MigrateTotalEscrowForDenom); err != nil { + panic(fmt.Errorf("failed to migrate transfer app from version 2 to 3 (total escrow entry migration): %v", err)) } - if err := registrar.Register(types.ModuleName, 3, m.MigrateParams); err != nil { - return fmt.Errorf("failed to migrate transfer app version 3 to 4 (self-managed params migration): %w", err) + if err := cfg.RegisterMigration(types.ModuleName, 3, m.MigrateParams); err != nil { + panic(fmt.Errorf("failed to migrate transfer app version 3 to 4 (self-managed params migration): %v", err)) } - if err := registrar.Register(types.ModuleName, 4, m.MigrateDenomMetadata); err != nil { - return fmt.Errorf("failed to migrate transfer app from version 4 to 5 (set denom metadata migration): %w", err) + if err := cfg.RegisterMigration(types.ModuleName, 4, m.MigrateDenomMetadata); err != nil { + panic(fmt.Errorf("failed to migrate transfer app from version 4 to 5 (set denom metadata migration): %v", err)) } - if err := registrar.Register(types.ModuleName, 5, m.MigrateDenomTraceToDenom); err != nil { - return fmt.Errorf("failed to migrate transfer app from version 5 to 6 (migrate DenomTrace to Denom): %w", err) + if err := cfg.RegisterMigration(types.ModuleName, 5, m.MigrateDenomTraceToDenom); err != nil { + panic(fmt.Errorf("failed to migrate transfer app from version 5 to 6 (migrate DenomTrace to Denom): %v", err)) } - - return nil } // InitGenesis performs genesis initialization for the ibc-transfer module. It returns diff --git a/modules/apps/transfer/types/msgs.go b/modules/apps/transfer/types/msgs.go index 83e4ba70dd3..a9392292191 100644 --- a/modules/apps/transfer/types/msgs.go +++ b/modules/apps/transfer/types/msgs.go @@ -5,7 +5,6 @@ import ( errorsmod "cosmossdk.io/errors" - addresscodec "github.com/cosmos/cosmos-sdk/codec/address" sdk "github.com/cosmos/cosmos-sdk/types" clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" @@ -36,8 +35,7 @@ func NewMsgUpdateParams(signer string, params Params) *MsgUpdateParams { // ValidateBasic implements sdk.Msg func (msg MsgUpdateParams) ValidateBasic() error { - addrCdc := addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) - _, err := addrCdc.StringToBytes(msg.Signer) + _, err := sdk.AccAddressFromBech32(msg.Signer) if err != nil { return errorsmod.Wrapf(ibcerrors.ErrInvalidAddress, "string could not be parsed as address: %v", err) } diff --git a/modules/core/02-client/keeper/migrations.go b/modules/core/02-client/keeper/migrations.go index 5fae9dc8fdd..a66b783f522 100644 --- a/modules/core/02-client/keeper/migrations.go +++ b/modules/core/02-client/keeper/migrations.go @@ -1,8 +1,6 @@ package keeper import ( - "context" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/ibc-go/v9/modules/core/02-client/migrations/v7" @@ -27,16 +25,16 @@ func NewMigrator(keeper *Keeper) Migrator { // - prunes solo machine consensus states // - removes the localhost client // - asserts that existing tendermint clients are properly registered on the chain codec -func (m Migrator) Migrate2to3(ctx context.Context) error { - return v7.MigrateStore(ctx, m.keeper.Logger, m.keeper.KVStoreService, m.keeper.cdc, m.keeper) +func (m Migrator) Migrate2to3(ctx sdk.Context) error { + return v7.MigrateStore(ctx, m.keeper.KVStoreService, m.keeper.cdc, m.keeper) } // MigrateParams migrates from consensus version 4 to 5. // This migration takes the parameters that are currently stored and managed by x/params // and stores them directly in the ibc module's state. -func (m Migrator) MigrateParams(ctx context.Context) error { +func (m Migrator) MigrateParams(ctx sdk.Context) error { var params types.Params - m.keeper.legacySubspace.GetParamSet(sdk.UnwrapSDKContext(ctx), ¶ms) + m.keeper.legacySubspace.GetParamSet(ctx, ¶ms) if err := params.Validate(); err != nil { return err } @@ -48,7 +46,7 @@ func (m Migrator) MigrateParams(ctx context.Context) error { // MigrateToStatelessLocalhost deletes the localhost client state. The localhost // implementation is now stateless. -func (m Migrator) MigrateToStatelessLocalhost(ctx context.Context) error { +func (m Migrator) MigrateToStatelessLocalhost(ctx sdk.Context) error { clientStore := m.keeper.ClientStore(ctx, exported.LocalhostClientID) // delete the client state diff --git a/modules/core/02-client/migrations/v7/genesis_test.go b/modules/core/02-client/migrations/v7/genesis_test.go index b0207d5cdf3..c674e7d9680 100644 --- a/modules/core/02-client/migrations/v7/genesis_test.go +++ b/modules/core/02-client/migrations/v7/genesis_test.go @@ -3,8 +3,6 @@ package v7_test import ( "encoding/json" - "cosmossdk.io/log" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" @@ -109,7 +107,7 @@ func (suite *MigrationsV7TestSuite) TestMigrateGenesisSolomachine() { // migrate store get expected genesis // store migration and genesis migration should produce identical results // NOTE: tendermint clients are not pruned in genesis so the test should not have expired tendermint clients - err = v7.MigrateStore(suite.chainA.GetContext(), log.NewTestLogger(suite.T()), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) + err = v7.MigrateStore(suite.chainA.GetContext(), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) suite.Require().NoError(err) expectedClientGenState, err := ibcclient.ExportGenesis(suite.chainA.GetContext(), suite.chainA.App.GetIBCKeeper().ClientKeeper) suite.Require().NoError(err) diff --git a/modules/core/02-client/migrations/v7/store.go b/modules/core/02-client/migrations/v7/store.go index 4ab12059fa5..bf9e44656b9 100644 --- a/modules/core/02-client/migrations/v7/store.go +++ b/modules/core/02-client/migrations/v7/store.go @@ -1,10 +1,8 @@ package v7 import ( - "context" "strings" - "cosmossdk.io/core/log" corestore "cosmossdk.io/core/store" errorsmod "cosmossdk.io/errors" storetypes "cosmossdk.io/store/types" @@ -12,6 +10,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" host "github.com/cosmos/ibc-go/v9/modules/core/24-host" @@ -33,24 +32,24 @@ const Localhost string = "09-localhost" // - Pruning all solo machine consensus states // - Removing the localhost client // - Asserting existing tendermint clients are properly registered on the chain codec -func MigrateStore(ctx context.Context, logger log.Logger, storeService corestore.KVStoreService, cdc codec.BinaryCodec, clientKeeper ClientKeeper) error { +func MigrateStore(ctx sdk.Context, storeService corestore.KVStoreService, cdc codec.BinaryCodec, clientKeeper ClientKeeper) error { store := runtime.KVStoreAdapter(storeService.OpenKVStore(ctx)) - if err := handleSolomachineMigration(ctx, logger, store, cdc, clientKeeper); err != nil { + if err := handleSolomachineMigration(ctx, store, cdc, clientKeeper); err != nil { return err } - if err := handleTendermintMigration(ctx, logger, store, clientKeeper); err != nil { + if err := handleTendermintMigration(ctx, store, clientKeeper); err != nil { return err } - return handleLocalhostMigration(ctx, logger, store, clientKeeper) + return handleLocalhostMigration(ctx, store, clientKeeper) } // handleSolomachineMigration iterates over the solo machine clients and migrates client state from // protobuf definition v2 to v3. All consensus states stored outside of the client state are pruned. -func handleSolomachineMigration(ctx context.Context, logger log.Logger, store storetypes.KVStore, cdc codec.BinaryCodec, clientKeeper ClientKeeper) error { - clients, err := collectClients(logger, store, exported.Solomachine) +func handleSolomachineMigration(ctx sdk.Context, store storetypes.KVStore, cdc codec.BinaryCodec, clientKeeper ClientKeeper) error { + clients, err := collectClients(ctx, store, exported.Solomachine) if err != nil { return err } @@ -86,8 +85,8 @@ func handleSolomachineMigration(ctx context.Context, logger log.Logger, store st // handleTendermintMigration asserts that the tendermint client in state can be decoded properly. // This ensures the upgrading chain properly registered the tendermint client types on the chain codec. -func handleTendermintMigration(ctx context.Context, logger log.Logger, store storetypes.KVStore, clientKeeper ClientKeeper) error { - clients, err := collectClients(logger, store, exported.Tendermint) +func handleTendermintMigration(ctx sdk.Context, store storetypes.KVStore, clientKeeper ClientKeeper) error { + clients, err := collectClients(ctx, store, exported.Tendermint) if err != nil { return err } @@ -118,8 +117,8 @@ func handleTendermintMigration(ctx context.Context, logger log.Logger, store sto } // handleLocalhostMigration removes all client and consensus states associated with the localhost client type. -func handleLocalhostMigration(ctx context.Context, logger log.Logger, store storetypes.KVStore, clientKeeper ClientKeeper) error { - clients, err := collectClients(logger, store, Localhost) +func handleLocalhostMigration(ctx sdk.Context, store storetypes.KVStore, clientKeeper ClientKeeper) error { + clients, err := collectClients(ctx, store, Localhost) if err != nil { return err } @@ -141,11 +140,11 @@ func handleLocalhostMigration(ctx context.Context, logger log.Logger, store stor // avoid state corruption as modifying state during iteration is unsafe. A special case // for tendermint clients is included as only one tendermint clientID is required for // v7 migrations. -func collectClients(logger log.Logger, store storetypes.KVStore, clientType string) (clients []string, err error) { +func collectClients(ctx sdk.Context, store storetypes.KVStore, clientType string) (clients []string, err error) { clientPrefix := host.PrefixedClientStoreKey([]byte(clientType)) iterator := storetypes.KVStorePrefixIterator(store, clientPrefix) - defer coretypes.LogDeferred(logger, func() error { return iterator.Close() }) + defer coretypes.LogDeferred(ctx.Logger(), func() error { return iterator.Close() }) for ; iterator.Valid(); iterator.Next() { path := string(iterator.Key()) if !strings.Contains(path, host.KeyClientState) { diff --git a/modules/core/02-client/migrations/v7/store_test.go b/modules/core/02-client/migrations/v7/store_test.go index 223ad91987a..f9e104e823f 100644 --- a/modules/core/02-client/migrations/v7/store_test.go +++ b/modules/core/02-client/migrations/v7/store_test.go @@ -6,8 +6,6 @@ import ( testifysuite "github.com/stretchr/testify/suite" - "cosmossdk.io/log" - "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/runtime" @@ -64,7 +62,7 @@ func (suite *MigrationsV7TestSuite) TestMigrateStore() { suite.createSolomachineClients(solomachines) suite.createLocalhostClients() - err := v7.MigrateStore(suite.chainA.GetContext(), log.NewTestLogger(suite.T()), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) + err := v7.MigrateStore(suite.chainA.GetContext(), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) suite.Require().NoError(err) suite.assertSolomachineClients(solomachines) @@ -80,7 +78,7 @@ func (suite *MigrationsV7TestSuite) TestMigrateStoreNoTendermintClients() { suite.createSolomachineClients(solomachines) suite.createLocalhostClients() - err := v7.MigrateStore(suite.chainA.GetContext(), log.NewTestLogger(suite.T()), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) + err := v7.MigrateStore(suite.chainA.GetContext(), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) suite.Require().NoError(err) suite.assertSolomachineClients(solomachines) diff --git a/modules/core/03-connection/keeper/migrations.go b/modules/core/03-connection/keeper/migrations.go index 5220d00669f..83503ebf971 100644 --- a/modules/core/03-connection/keeper/migrations.go +++ b/modules/core/03-connection/keeper/migrations.go @@ -1,8 +1,6 @@ package keeper import ( - "context" - sdk "github.com/cosmos/cosmos-sdk/types" connectionv7 "github.com/cosmos/ibc-go/v9/modules/core/03-connection/migrations/v7" @@ -21,7 +19,7 @@ func NewMigrator(keeper *Keeper) Migrator { // Migrate3to4 migrates from version 3 to 4. // This migration writes the sentinel localhost connection end to state. -func (m Migrator) Migrate3to4(ctx context.Context) error { +func (m Migrator) Migrate3to4(ctx sdk.Context) error { connectionv7.MigrateLocalhostConnection(ctx, m.keeper) return nil } @@ -29,9 +27,9 @@ func (m Migrator) Migrate3to4(ctx context.Context) error { // MigrateParams migrates from consensus version 4 to 5. // This migration takes the parameters that are currently stored and managed by x/params // and stores them directly in the ibc module's state. -func (m Migrator) MigrateParams(ctx context.Context) error { +func (m Migrator) MigrateParams(ctx sdk.Context) error { var params types.Params - m.keeper.legacySubspace.GetParamSet(sdk.UnwrapSDKContext(ctx), ¶ms) + m.keeper.legacySubspace.GetParamSet(ctx, ¶ms) if err := params.Validate(); err != nil { return err } diff --git a/modules/core/04-channel/keeper/migrations.go b/modules/core/04-channel/keeper/migrations.go index 23d9cc1f231..c83cf865022 100644 --- a/modules/core/04-channel/keeper/migrations.go +++ b/modules/core/04-channel/keeper/migrations.go @@ -1,7 +1,7 @@ package keeper import ( - "context" + sdk "github.com/cosmos/cosmos-sdk/types" channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" ) @@ -17,7 +17,7 @@ func NewMigrator(keeper *Keeper) Migrator { } // MigrateParams migrates params to the default channel params. -func (m Migrator) MigrateParams(ctx context.Context) error { +func (m Migrator) MigrateParams(ctx sdk.Context) error { params := channeltypes.DefaultParams() m.keeper.SetParams(ctx, params) m.keeper.Logger.Info("successfully migrated ibc channel params") diff --git a/modules/core/keeper/keeper.go b/modules/core/keeper/keeper.go index c55e3b61fa8..9c9350071ec 100644 --- a/modules/core/keeper/keeper.go +++ b/modules/core/keeper/keeper.go @@ -5,7 +5,6 @@ import ( "reflect" "strings" - "cosmossdk.io/core/address" "cosmossdk.io/core/appmodule" "github.com/cosmos/cosmos-sdk/codec" @@ -28,15 +27,14 @@ type Keeper struct { ChannelKeeper *channelkeeper.Keeper PortKeeper *portkeeper.Keeper - cdc codec.BinaryCodec - AddrCdc address.Codec + cdc codec.BinaryCodec authority string } // NewKeeper creates a new ibc Keeper func NewKeeper( - cdc codec.BinaryCodec, addrCdc address.Codec, env appmodule.Environment, paramSpace types.ParamSubspace, + cdc codec.BinaryCodec, env appmodule.Environment, paramSpace types.ParamSubspace, upgradeKeeper clienttypes.UpgradeKeeper, authority string, ) *Keeper { // panic if any of the keepers passed in is empty @@ -56,7 +54,6 @@ func NewKeeper( return &Keeper{ Environment: env, cdc: cdc, - AddrCdc: addrCdc, ClientKeeper: clientKeeper, ConnectionKeeper: connectionKeeper, ChannelKeeper: channelKeeper, diff --git a/modules/core/keeper/keeper_test.go b/modules/core/keeper/keeper_test.go index 5162589e02d..fa4e01238c3 100644 --- a/modules/core/keeper/keeper_test.go +++ b/modules/core/keeper/keeper_test.go @@ -8,7 +8,6 @@ import ( "cosmossdk.io/log" upgradekeeper "cosmossdk.io/x/upgrade/keeper" - "github.com/cosmos/cosmos-sdk/codec/address" "github.com/cosmos/cosmos-sdk/runtime" clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" @@ -77,7 +76,6 @@ func (suite *KeeperTestSuite) TestNewKeeper() { newIBCKeeperFn = func() { ibckeeper.NewKeeper( suite.chainA.GetSimApp().AppCodec(), - address.NewBech32Codec(suite.chainA.Bech32Prefix), runtime.NewEnvironment(runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), log.NewNopLogger()), suite.chainA.GetSimApp().GetSubspace(ibcexported.ModuleName), upgradeKeeper, @@ -98,7 +96,6 @@ func (suite *KeeperTestSuite) TestNewKeeper() { newIBCKeeperFn = func() { ibckeeper.NewKeeper( suite.chainA.GetSimApp().AppCodec(), - address.NewBech32Codec(suite.chainA.Bech32Prefix), runtime.NewEnvironment(runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), log.NewNopLogger()), suite.chainA.GetSimApp().GetSubspace(ibcexported.ModuleName), upgradeKeeper, diff --git a/modules/core/keeper/msg_server.go b/modules/core/keeper/msg_server.go index d58cd30edcb..d6aac0335f2 100644 --- a/modules/core/keeper/msg_server.go +++ b/modules/core/keeper/msg_server.go @@ -361,7 +361,7 @@ func (k *Keeper) ChannelCloseConfirm(ctx context.Context, msg *channeltypes.MsgC func (k *Keeper) RecvPacket(goCtx context.Context, msg *channeltypes.MsgRecvPacket) (*channeltypes.MsgRecvPacketResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - relayer, err := k.AddrCdc.StringToBytes(msg.Signer) + relayer, err := sdk.AccAddressFromBech32(msg.Signer) if err != nil { k.Logger.Error("receive packet failed", "error", errorsmod.Wrap(err, "Invalid address for msg Signer")) return nil, errorsmod.Wrap(err, "Invalid address for msg Signer") @@ -424,7 +424,7 @@ func (k *Keeper) RecvPacket(goCtx context.Context, msg *channeltypes.MsgRecvPack // Timeout defines a rpc handler method for MsgTimeout. func (k *Keeper) Timeout(ctx context.Context, msg *channeltypes.MsgTimeout) (*channeltypes.MsgTimeoutResponse, error) { - relayer, err := k.AddrCdc.StringToBytes(msg.Signer) + relayer, err := sdk.AccAddressFromBech32(msg.Signer) if err != nil { k.Logger.Error("timeout failed", "error", errorsmod.Wrap(err, "Invalid address for msg Signer")) return nil, errorsmod.Wrap(err, "Invalid address for msg Signer") @@ -482,7 +482,7 @@ func (k *Keeper) Timeout(ctx context.Context, msg *channeltypes.MsgTimeout) (*ch // TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose. func (k *Keeper) TimeoutOnClose(ctx context.Context, msg *channeltypes.MsgTimeoutOnClose) (*channeltypes.MsgTimeoutOnCloseResponse, error) { - relayer, err := k.AddrCdc.StringToBytes(msg.Signer) + relayer, err := sdk.AccAddressFromBech32(msg.Signer) if err != nil { k.Logger.Error("timeout on close failed", "error", errorsmod.Wrap(err, "Invalid address for msg Signer")) return nil, errorsmod.Wrap(err, "Invalid address for msg Signer") @@ -541,7 +541,7 @@ func (k *Keeper) TimeoutOnClose(ctx context.Context, msg *channeltypes.MsgTimeou // Acknowledgement defines a rpc handler method for MsgAcknowledgement. func (k *Keeper) Acknowledgement(ctx context.Context, msg *channeltypes.MsgAcknowledgement) (*channeltypes.MsgAcknowledgementResponse, error) { - relayer, err := k.AddrCdc.StringToBytes(msg.Signer) + relayer, err := sdk.AccAddressFromBech32(msg.Signer) if err != nil { k.Logger.Error("acknowledgement failed", "error", errorsmod.Wrap(err, "Invalid address for msg Signer")) return nil, errorsmod.Wrap(err, "Invalid address for msg Signer") diff --git a/modules/core/migrations/v7/genesis_test.go b/modules/core/migrations/v7/genesis_test.go index 860cd84a1a7..fd5d6add051 100644 --- a/modules/core/migrations/v7/genesis_test.go +++ b/modules/core/migrations/v7/genesis_test.go @@ -5,8 +5,6 @@ import ( testifysuite "github.com/stretchr/testify/suite" - "cosmossdk.io/log" - "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" @@ -138,7 +136,7 @@ func (suite *MigrationsV7TestSuite) TestMigrateGenesisSolomachine() { // migrate store get expected genesis // store migration and genesis migration should produce identical results // NOTE: tendermint clients are not pruned in genesis so the test should not have expired tendermint clients - err = clientv7.MigrateStore(suite.chainA.GetContext(), log.NewTestLogger(suite.T()), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) + err = clientv7.MigrateStore(suite.chainA.GetContext(), runtime.NewKVStoreService(suite.chainA.GetSimApp().GetKey(ibcexported.StoreKey)), suite.chainA.App.AppCodec(), suite.chainA.GetSimApp().IBCKeeper.ClientKeeper) suite.Require().NoError(err) expectedClientGenState, err := ibcclient.ExportGenesis(suite.chainA.GetContext(), suite.chainA.App.GetIBCKeeper().ClientKeeper) suite.Require().NoError(err) diff --git a/modules/core/module.go b/modules/core/module.go index 8e7d401a752..3d39cdd72d0 100644 --- a/modules/core/module.go +++ b/modules/core/module.go @@ -7,7 +7,6 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - "google.golang.org/grpc" "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" @@ -15,6 +14,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -37,11 +37,11 @@ var ( _ appmodule.HasBeginBlocker = (*AppModule)(nil) _ appmodule.HasConsensusVersion = (*AppModule)(nil) _ appmodule.HasRegisterInterfaces = (*AppModule)(nil) - _ appmodule.HasMigrations = (*AppModule)(nil) _ module.AppModule = (*AppModule)(nil) _ module.HasGRPCGateway = (*AppModule)(nil) _ module.HasGenesis = (*AppModule)(nil) + _ module.HasServices = (*AppModule)(nil) _ module.HasLegacyProposalMsgs = (*AppModule)(nil) _ module.AppModuleSimulation = (*AppModule)(nil) @@ -122,48 +122,43 @@ func (AppModule) RegisterInterfaces(registry coreregistry.InterfaceRegistrar) { types.RegisterInterfaces(registry) } -func (am AppModule) RegisterMigrations(registrar appmodule.MigrationRegistrar) error { +// RegisterServices registers module services. +func (am AppModule) RegisterServices(cfg module.Configurator) { + clienttypes.RegisterMsgServer(cfg.MsgServer(), am.keeper) + connectiontypes.RegisterMsgServer(cfg.MsgServer(), am.keeper) + channeltypes.RegisterMsgServer(cfg.MsgServer(), am.keeper) + clienttypes.RegisterQueryServer(cfg.QueryServer(), clientkeeper.NewQueryServer(am.keeper.ClientKeeper)) + connectiontypes.RegisterQueryServer(cfg.QueryServer(), connectionkeeper.NewQueryServer(am.keeper.ConnectionKeeper)) + channeltypes.RegisterQueryServer(cfg.QueryServer(), channelkeeper.NewQueryServer(am.keeper.ChannelKeeper)) + clientMigrator := clientkeeper.NewMigrator(am.keeper.ClientKeeper) - if err := registrar.Register(exported.ModuleName, 2, clientMigrator.Migrate2to3); err != nil { - return err + if err := cfg.RegisterMigration(exported.ModuleName, 2, clientMigrator.Migrate2to3); err != nil { + panic(err) } connectionMigrator := connectionkeeper.NewMigrator(am.keeper.ConnectionKeeper) - if err := registrar.Register(exported.ModuleName, 3, connectionMigrator.Migrate3to4); err != nil { - return err + if err := cfg.RegisterMigration(exported.ModuleName, 3, connectionMigrator.Migrate3to4); err != nil { + panic(err) } - if err := registrar.Register(exported.ModuleName, 4, func(ctx context.Context) error { + if err := cfg.RegisterMigration(exported.ModuleName, 4, func(ctx sdk.Context) error { if err := clientMigrator.MigrateParams(ctx); err != nil { return err } return connectionMigrator.MigrateParams(ctx) }); err != nil { - return err + panic(err) } channelMigrator := channelkeeper.NewMigrator(am.keeper.ChannelKeeper) - if err := registrar.Register(exported.ModuleName, 5, channelMigrator.MigrateParams); err != nil { - return err + if err := cfg.RegisterMigration(exported.ModuleName, 5, channelMigrator.MigrateParams); err != nil { + panic(err) } - if err := registrar.Register(exported.ModuleName, 6, clientMigrator.MigrateToStatelessLocalhost); err != nil { - return err + if err := cfg.RegisterMigration(exported.ModuleName, 6, clientMigrator.MigrateToStatelessLocalhost); err != nil { + panic(err) } - - return nil -} - -// RegisterServices registers module services. -func (am AppModule) RegisterServices(cfg grpc.ServiceRegistrar) error { - clienttypes.RegisterMsgServer(cfg, am.keeper) - connectiontypes.RegisterMsgServer(cfg, am.keeper) - channeltypes.RegisterMsgServer(cfg, am.keeper) - clienttypes.RegisterQueryServer(cfg, clientkeeper.NewQueryServer(am.keeper.ClientKeeper)) - connectiontypes.RegisterQueryServer(cfg, connectionkeeper.NewQueryServer(am.keeper.ConnectionKeeper)) - channeltypes.RegisterQueryServer(cfg, channelkeeper.NewQueryServer(am.keeper.ChannelKeeper)) - return nil } // InitGenesis performs genesis initialization for the ibc module. It returns diff --git a/modules/light-clients/08-wasm/keeper/contract_keeper.go b/modules/light-clients/08-wasm/keeper/contract_keeper.go index 796e7341b81..e812f2570e4 100644 --- a/modules/light-clients/08-wasm/keeper/contract_keeper.go +++ b/modules/light-clients/08-wasm/keeper/contract_keeper.go @@ -2,20 +2,18 @@ package keeper import ( "bytes" - "context" "encoding/hex" "encoding/json" "errors" - "fmt" wasmvm "github.com/CosmWasm/wasmvm/v2" wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" - "cosmossdk.io/core/header" errorsmod "cosmossdk.io/errors" storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" internaltypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/types" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" @@ -36,79 +34,70 @@ var ( ) // instantiateContract calls vm.Instantiate with appropriate arguments. -func (k Keeper) instantiateContract(ctx context.Context, clientID string, clientStore storetypes.KVStore, checksum types.Checksum, msg []byte) (*wasmvmtypes.ContractResult, error) { - sdkGasMeter := k.GasService.GasMeter(ctx) +func (k Keeper) instantiateContract(ctx sdk.Context, clientID string, clientStore storetypes.KVStore, checksum types.Checksum, msg []byte) (*wasmvmtypes.ContractResult, error) { + sdkGasMeter := ctx.GasMeter() multipliedGasMeter := types.NewMultipliedGasMeter(sdkGasMeter, types.VMGasRegister) - gasLimit := VMGasRegister.RuntimeGasForContract(sdkGasMeter) + gasLimit := VMGasRegister.RuntimeGasForContract(ctx) - env := getEnv(k.HeaderService.HeaderInfo(ctx), clientID) + env := getEnv(ctx, clientID) msgInfo := wasmvmtypes.MessageInfo{ Sender: "", Funds: nil, } - if err := sdkGasMeter.Consume(types.VMGasRegister.SetupContractCost(true, len(msg)), "Loading CosmWasm module: instantiate"); err != nil { - return nil, fmt.Errorf("failed to consume gas for Loading Cosmwasm module instantiate: %w", err) - } - + ctx.GasMeter().ConsumeGas(types.VMGasRegister.SetupContractCost(true, len(msg)), "Loading CosmWasm module: instantiate") resp, gasUsed, err := k.GetVM().Instantiate(checksum, env, msgInfo, msg, internaltypes.NewStoreAdapter(clientStore), wasmvmAPI, k.newQueryHandler(ctx, clientID), multipliedGasMeter, gasLimit, types.CostJSONDeserialization) - types.VMGasRegister.ConsumeRuntimeGas(sdkGasMeter, gasUsed) + types.VMGasRegister.ConsumeRuntimeGas(ctx, gasUsed) return resp, err } // callContract calls vm.Sudo with internally constructed gas meter and environment. -func (k Keeper) callContract(ctx context.Context, clientID string, clientStore storetypes.KVStore, checksum types.Checksum, msg []byte) (*wasmvmtypes.ContractResult, error) { - sdkGasMeter := k.GasService.GasMeter(ctx) +func (k Keeper) callContract(ctx sdk.Context, clientID string, clientStore storetypes.KVStore, checksum types.Checksum, msg []byte) (*wasmvmtypes.ContractResult, error) { + sdkGasMeter := ctx.GasMeter() multipliedGasMeter := types.NewMultipliedGasMeter(sdkGasMeter, VMGasRegister) - gasLimit := VMGasRegister.RuntimeGasForContract(sdkGasMeter) + gasLimit := VMGasRegister.RuntimeGasForContract(ctx) - env := getEnv(k.HeaderService.HeaderInfo(ctx), clientID) + env := getEnv(ctx, clientID) - if err := sdkGasMeter.Consume(VMGasRegister.SetupContractCost(true, len(msg)), "Loading CosmWasm module: sudo"); err != nil { - return nil, fmt.Errorf("failed to consume gas for Loading Cosmwasm module sudo: %w", err) - } + ctx.GasMeter().ConsumeGas(VMGasRegister.SetupContractCost(true, len(msg)), "Loading CosmWasm module: sudo") resp, gasUsed, err := k.GetVM().Sudo(checksum, env, msg, internaltypes.NewStoreAdapter(clientStore), wasmvmAPI, k.newQueryHandler(ctx, clientID), multipliedGasMeter, gasLimit, types.CostJSONDeserialization) - VMGasRegister.ConsumeRuntimeGas(sdkGasMeter, gasUsed) + VMGasRegister.ConsumeRuntimeGas(ctx, gasUsed) return resp, err } // queryContract calls vm.Query. -func (k Keeper) queryContract(ctx context.Context, clientID string, clientStore storetypes.KVStore, checksum types.Checksum, msg []byte) (*wasmvmtypes.QueryResult, error) { - sdkGasMeter := k.GasService.GasMeter(ctx) +func (k Keeper) queryContract(ctx sdk.Context, clientID string, clientStore storetypes.KVStore, checksum types.Checksum, msg []byte) (*wasmvmtypes.QueryResult, error) { + sdkGasMeter := ctx.GasMeter() multipliedGasMeter := types.NewMultipliedGasMeter(sdkGasMeter, VMGasRegister) - gasLimit := VMGasRegister.RuntimeGasForContract(sdkGasMeter) + gasLimit := VMGasRegister.RuntimeGasForContract(ctx) - env := getEnv(k.HeaderService.HeaderInfo(ctx), clientID) + env := getEnv(ctx, clientID) - if err := sdkGasMeter.Consume(VMGasRegister.SetupContractCost(true, len(msg)), "Loading CosmWasm module: query"); err != nil { - return nil, fmt.Errorf("failed to consume gas for Loading Cosmwasm module query: %w", err) - } + ctx.GasMeter().ConsumeGas(VMGasRegister.SetupContractCost(true, len(msg)), "Loading CosmWasm module: query") resp, gasUsed, err := k.GetVM().Query(checksum, env, msg, internaltypes.NewStoreAdapter(clientStore), wasmvmAPI, k.newQueryHandler(ctx, clientID), multipliedGasMeter, gasLimit, types.CostJSONDeserialization) - VMGasRegister.ConsumeRuntimeGas(sdkGasMeter, gasUsed) + VMGasRegister.ConsumeRuntimeGas(ctx, gasUsed) return resp, err } // migrateContract calls vm.Migrate with internally constructed gas meter and environment. -func (k Keeper) migrateContract(ctx context.Context, clientID string, clientStore storetypes.KVStore, checksum types.Checksum, msg []byte) (*wasmvmtypes.ContractResult, error) { - sdkGasMeter := k.GasService.GasMeter(ctx) +func (k Keeper) migrateContract(ctx sdk.Context, clientID string, clientStore storetypes.KVStore, checksum types.Checksum, msg []byte) (*wasmvmtypes.ContractResult, error) { + sdkGasMeter := ctx.GasMeter() multipliedGasMeter := types.NewMultipliedGasMeter(sdkGasMeter, VMGasRegister) - gasLimit := VMGasRegister.RuntimeGasForContract(sdkGasMeter) + gasLimit := VMGasRegister.RuntimeGasForContract(ctx) - env := getEnv(k.HeaderService.HeaderInfo(ctx), clientID) + env := getEnv(ctx, clientID) - if err := sdkGasMeter.Consume(VMGasRegister.SetupContractCost(true, len(msg)), "Loading CosmWasm module: migrate"); err != nil { - return nil, fmt.Errorf("failed to consume gas for Loading Cosmwasm module migrate: %w", err) - } + ctx.GasMeter().ConsumeGas(VMGasRegister.SetupContractCost(true, len(msg)), "Loading CosmWasm module: migrate") resp, gasUsed, err := k.GetVM().Migrate(checksum, env, msg, internaltypes.NewStoreAdapter(clientStore), wasmvmAPI, k.newQueryHandler(ctx, clientID), multipliedGasMeter, gasLimit, types.CostJSONDeserialization) - VMGasRegister.ConsumeRuntimeGas(sdkGasMeter, gasUsed) + VMGasRegister.ConsumeRuntimeGas(ctx, gasUsed) return resp, err } // WasmInstantiate accepts a message to instantiate a wasm contract, JSON encodes it and calls instantiateContract. -func (k Keeper) WasmInstantiate(ctx context.Context, clientID string, clientStore storetypes.KVStore, cs *types.ClientState, payload types.InstantiateMessage) error { +func (k Keeper) WasmInstantiate(ctx sdk.Context, clientID string, clientStore storetypes.KVStore, cs *types.ClientState, payload types.InstantiateMessage) error { encodedData, err := json.Marshal(payload) if err != nil { return errorsmod.Wrap(err, "failed to marshal payload for wasm contract instantiation") @@ -147,7 +136,7 @@ func (k Keeper) WasmInstantiate(ctx context.Context, clientID string, clientStor // - the response of the contract call contains non-empty events // - the response of the contract call contains non-empty attributes // - the data bytes of the response cannot be unmarshaled into the result type -func (k Keeper) WasmSudo(ctx context.Context, clientID string, clientStore storetypes.KVStore, cs *types.ClientState, payload types.SudoMsg) ([]byte, error) { +func (k Keeper) WasmSudo(ctx sdk.Context, clientID string, clientStore storetypes.KVStore, cs *types.ClientState, payload types.SudoMsg) ([]byte, error) { encodedData, err := json.Marshal(payload) if err != nil { return nil, errorsmod.Wrap(err, "failed to marshal payload for wasm execution") @@ -182,7 +171,7 @@ func (k Keeper) WasmSudo(ctx context.Context, clientID string, clientStore store // WasmMigrate migrate calls the migrate entry point of the contract with the given payload and returns the result. // WasmMigrate returns an error if: // - the contract migration returns an error -func (k Keeper) WasmMigrate(ctx context.Context, clientStore storetypes.KVStore, cs *types.ClientState, clientID string, payload []byte) error { +func (k Keeper) WasmMigrate(ctx sdk.Context, clientStore storetypes.KVStore, cs *types.ClientState, clientID string, payload []byte) error { res, err := k.migrateContract(ctx, clientID, clientStore, cs.Checksum, payload) if err != nil { return errorsmod.Wrap(types.ErrVMError, err.Error()) @@ -203,7 +192,7 @@ func (k Keeper) WasmMigrate(ctx context.Context, clientStore storetypes.KVStore, // WasmQuery returns an error if: // - the contract query returns an error // - the data bytes of the response cannot be unmarshal into the result type -func (k Keeper) WasmQuery(ctx context.Context, clientID string, clientStore storetypes.KVStore, cs *types.ClientState, payload types.QueryMsg) ([]byte, error) { +func (k Keeper) WasmQuery(ctx sdk.Context, clientID string, clientStore storetypes.KVStore, cs *types.ClientState, payload types.QueryMsg) ([]byte, error) { encodedData, err := json.Marshal(payload) if err != nil { return nil, errorsmod.Wrap(err, "failed to marshal payload for wasm query") @@ -261,15 +250,15 @@ func unmarshalClientState(cdc codec.BinaryCodec, bz []byte) (exported.ClientStat } // getEnv returns the state of the blockchain environment the contract is running on -func getEnv(headerInfo header.Info, contractAddr string) wasmvmtypes.Env { - chainID := headerInfo.ChainID - height := headerInfo.Height +func getEnv(ctx sdk.Context, contractAddr string) wasmvmtypes.Env { + chainID := ctx.BlockHeader().ChainID + height := ctx.BlockHeader().Height // safety checks before casting below if height < 0 { panic(errors.New("block height must never be negative")) } - nsec := headerInfo.Time.UnixNano() + nsec := ctx.BlockTime().UnixNano() if nsec < 0 { panic(errors.New("block (unix) time must never be negative ")) } diff --git a/modules/light-clients/08-wasm/keeper/events.go b/modules/light-clients/08-wasm/keeper/events.go index bd6de954342..8e9801b9e45 100644 --- a/modules/light-clients/08-wasm/keeper/events.go +++ b/modules/light-clients/08-wasm/keeper/events.go @@ -1,11 +1,7 @@ package keeper import ( - "context" "encoding/hex" - "errors" - - "cosmossdk.io/core/event" sdk "github.com/cosmos/cosmos-sdk/types" @@ -13,33 +9,31 @@ import ( ) // emitStoreWasmCodeEvent emits a store wasm code event -func (k Keeper) emitStoreWasmCodeEvent(ctx context.Context, checksum types.Checksum) error { - em := k.EventService.EventManager(ctx) - return errors.Join( - em.EmitKV( +func emitStoreWasmCodeEvent(ctx sdk.Context, checksum types.Checksum) { + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( types.EventTypeStoreWasmCode, - event.NewAttribute(types.AttributeKeyWasmChecksum, hex.EncodeToString(checksum)), + sdk.NewAttribute(types.AttributeKeyWasmChecksum, hex.EncodeToString(checksum)), ), - em.EmitKV( + sdk.NewEvent( sdk.EventTypeMessage, - event.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), ), - ) + }) } // emitMigrateContractEvent emits a migrate contract event -func (k Keeper) emitMigrateContractEvent(ctx context.Context, clientID string, checksum, newChecksum types.Checksum) error { - em := k.EventService.EventManager(ctx) - return errors.Join( - em.EmitKV( +func emitMigrateContractEvent(ctx sdk.Context, clientID string, checksum, newChecksum types.Checksum) { + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( types.EventTypeMigrateContract, - event.NewAttribute(types.AttributeKeyClientID, clientID), - event.NewAttribute(types.AttributeKeyWasmChecksum, hex.EncodeToString(checksum)), - event.NewAttribute(types.AttributeKeyNewChecksum, hex.EncodeToString(newChecksum)), + sdk.NewAttribute(types.AttributeKeyClientID, clientID), + sdk.NewAttribute(types.AttributeKeyWasmChecksum, hex.EncodeToString(checksum)), + sdk.NewAttribute(types.AttributeKeyNewChecksum, hex.EncodeToString(newChecksum)), ), - em.EmitKV( + sdk.NewEvent( sdk.EventTypeMessage, - event.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), ), - ) + }) } diff --git a/modules/light-clients/08-wasm/keeper/grpc_query.go b/modules/light-clients/08-wasm/keeper/grpc_query.go index a2907499561..21b2a558894 100644 --- a/modules/light-clients/08-wasm/keeper/grpc_query.go +++ b/modules/light-clients/08-wasm/keeper/grpc_query.go @@ -10,6 +10,7 @@ import ( "cosmossdk.io/collections" errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" sdkquery "github.com/cosmos/cosmos-sdk/types/query" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" @@ -18,7 +19,7 @@ import ( var _ types.QueryServer = (*Keeper)(nil) // Code implements the Query/Code gRPC method -func (k Keeper) Code(ctx context.Context, req *types.QueryCodeRequest) (*types.QueryCodeResponse, error) { +func (k Keeper) Code(goCtx context.Context, req *types.QueryCodeRequest) (*types.QueryCodeResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -29,7 +30,7 @@ func (k Keeper) Code(ctx context.Context, req *types.QueryCodeRequest) (*types.Q } // Only return checksums we previously stored, not arbitrary checksums that might be stored via e.g Wasmd. - if !k.HasChecksum(ctx, checksum) { + if !k.HasChecksum(sdk.UnwrapSDKContext(goCtx), checksum) { return nil, status.Error(codes.NotFound, errorsmod.Wrap(types.ErrWasmChecksumNotFound, req.Checksum).Error()) } diff --git a/modules/light-clients/08-wasm/keeper/keeper.go b/modules/light-clients/08-wasm/keeper/keeper.go index 414ce52e097..0be1bb9064c 100644 --- a/modules/light-clients/08-wasm/keeper/keeper.go +++ b/modules/light-clients/08-wasm/keeper/keeper.go @@ -4,24 +4,24 @@ import ( "bytes" "context" "encoding/hex" - "fmt" wasmvm "github.com/CosmWasm/wasmvm/v2" "cosmossdk.io/collections" - "cosmossdk.io/core/appmodule" - "cosmossdk.io/core/log" + "cosmossdk.io/core/store" errorsmod "cosmossdk.io/errors" + "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" + "github.com/cosmos/ibc-go/v9/modules/core/exported" ) // Keeper defines the 08-wasm keeper type Keeper struct { - appmodule.Environment // implements gRPC QueryServer interface types.QueryServer @@ -30,7 +30,8 @@ type Keeper struct { vm types.WasmEngine - checksums collections.KeySet[[]byte] + checksums collections.KeySet[[]byte] + storeService store.KVStoreService queryPlugins QueryPlugins @@ -48,8 +49,12 @@ func (k Keeper) GetAuthority() string { } // Logger returns a module-specific logger. -func (k Keeper) Logger() log.Logger { - return k.Environment.Logger +func (Keeper) Logger(ctx sdk.Context) log.Logger { + return moduleLogger(ctx) +} + +func moduleLogger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", "x/"+exported.ModuleName+"-"+types.ModuleName) } // GetVM returns the keeper's vm engine. @@ -72,8 +77,8 @@ func (k *Keeper) setQueryPlugins(plugins QueryPlugins) { k.queryPlugins = plugins } -func (k Keeper) newQueryHandler(ctx context.Context, callerID string) *queryHandler { - return newQueryHandler(ctx, k.Environment, k.getQueryPlugins(), callerID) +func (k Keeper) newQueryHandler(ctx sdk.Context, callerID string) *queryHandler { + return newQueryHandler(ctx, k.getQueryPlugins(), callerID) } // storeWasmCode stores the contract to the VM, pins the checksum in the VM's in memory cache and stores the checksum @@ -82,12 +87,10 @@ func (k Keeper) newQueryHandler(ctx context.Context, callerID string) *queryHand // - Size bounds are checked. Contract length must not be 0 or exceed a specific size (maxWasmSize). // - The contract must not have already been stored in store. func (k Keeper) storeWasmCode(ctx context.Context, code []byte, storeFn func(code wasmvm.WasmCode, gasLimit uint64) (wasmvm.Checksum, uint64, error)) ([]byte, error) { - meter := k.GasService.GasMeter(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) // TODO: https://github.com/cosmos/ibc-go/issues/5917 var err error if types.IsGzip(code) { - if err := meter.Consume(types.VMGasRegister.UncompressCosts(len(code)), "Uncompress gzip bytecode"); err != nil { - return nil, fmt.Errorf("failed to consume gas for Uncompress gzip bytecode: %w", err) - } + sdkCtx.GasMeter().ConsumeGas(types.VMGasRegister.UncompressCosts(len(code)), "Uncompress gzip bytecode") code, err = types.Uncompress(code, types.MaxWasmSize) if err != nil { return nil, errorsmod.Wrap(err, "failed to store contract") @@ -110,9 +113,9 @@ func (k Keeper) storeWasmCode(ctx context.Context, code []byte, storeFn func(cod } // create the code in the vm - gasLeft := types.VMGasRegister.RuntimeGasForContract(meter) + gasLeft := types.VMGasRegister.RuntimeGasForContract(sdkCtx) vmChecksum, gasUsed, err := storeFn(code, gasLeft) - types.VMGasRegister.ConsumeRuntimeGas(meter, gasUsed) + types.VMGasRegister.ConsumeRuntimeGas(sdkCtx, gasUsed) if err != nil { return nil, errorsmod.Wrap(err, "failed to store contract") } @@ -138,7 +141,7 @@ func (k Keeper) storeWasmCode(ctx context.Context, code []byte, storeFn func(cod // migrateContractCode migrates the contract for a given light client to one denoted by the given new checksum. The checksum we // are migrating to must first be stored using storeWasmCode and must not match the checksum currently stored for this light client. -func (k Keeper) migrateContractCode(ctx context.Context, clientID string, newChecksum, migrateMsg []byte) error { +func (k Keeper) migrateContractCode(ctx sdk.Context, clientID string, newChecksum, migrateMsg []byte) error { clientStore := k.clientKeeper.ClientStore(ctx, clientID) wasmClientState, found := types.GetClientState(clientStore, k.cdc) if !found { @@ -177,15 +180,13 @@ func (k Keeper) migrateContractCode(ctx context.Context, clientID string, newChe k.clientKeeper.SetClientState(ctx, clientID, wasmClientState) - if err = k.emitMigrateContractEvent(ctx, clientID, oldChecksum, newChecksum); err != nil { - return fmt.Errorf("failed to emit migrate contract events: %w", err) - } + emitMigrateContractEvent(ctx, clientID, oldChecksum, newChecksum) return nil } // GetWasmClientState returns the 08-wasm client state for the given client identifier. -func (k Keeper) GetWasmClientState(ctx context.Context, clientID string) (*types.ClientState, error) { +func (k Keeper) GetWasmClientState(ctx sdk.Context, clientID string) (*types.ClientState, error) { clientState, found := k.clientKeeper.GetClientState(ctx, clientID) if !found { return nil, errorsmod.Wrapf(clienttypes.ErrClientTypeNotFound, "clientID %s", clientID) @@ -232,7 +233,7 @@ func (k Keeper) HasChecksum(ctx context.Context, checksum types.Checksum) bool { } // InitializePinnedCodes updates wasmvm to pin to cache all contracts marked as pinned -func (k Keeper) InitializePinnedCodes(ctx context.Context) error { +func (k Keeper) InitializePinnedCodes(ctx sdk.Context) error { checksums, err := k.GetAllChecksums(ctx) if err != nil { return err diff --git a/modules/light-clients/08-wasm/keeper/keeper_no_vm.go b/modules/light-clients/08-wasm/keeper/keeper_no_vm.go index 2767800a0c3..5dcacf5a176 100644 --- a/modules/light-clients/08-wasm/keeper/keeper_no_vm.go +++ b/modules/light-clients/08-wasm/keeper/keeper_no_vm.go @@ -15,7 +15,6 @@ import ( // custom build directive: nolink_libwasmvm. // This function is intended to panic and notify users that 08-wasm keeper functionality is not available. func NewKeeperWithVM( - _ environment.Environment, _ codec.BinaryCodec, _ storetypes.KVStoreService, _ types.ClientKeeper, @@ -32,7 +31,6 @@ func NewKeeperWithVM( // custom build directive: nolink_libwasmvm. // This function is intended to panic and notify users that 08-wasm keeper functionality is not available. func NewKeeperWithConfig( - _ environment.Environment, _ codec.BinaryCodec, _ storetypes.KVStoreService, _ types.ClientKeeper, diff --git a/modules/light-clients/08-wasm/keeper/keeper_test.go b/modules/light-clients/08-wasm/keeper/keeper_test.go index 9dd17e958f3..9974671d270 100644 --- a/modules/light-clients/08-wasm/keeper/keeper_test.go +++ b/modules/light-clients/08-wasm/keeper/keeper_test.go @@ -152,8 +152,8 @@ func (suite *KeeperTestSuite) TestNewKeeper() { "success", func() { keeper.NewKeeperWithVM( - runtime.NewEnvironment(runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), log.NewNopLogger()), GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), GetSimApp(suite.chainA).WasmClientKeeper.GetVM(), @@ -167,8 +167,8 @@ func (suite *KeeperTestSuite) TestNewKeeper() { "failure: empty authority", func() { keeper.NewKeeperWithVM( - runtime.NewEnvironment(runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), log.NewNopLogger()), GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, "", // authority GetSimApp(suite.chainA).WasmClientKeeper.GetVM(), @@ -182,8 +182,8 @@ func (suite *KeeperTestSuite) TestNewKeeper() { "failure: nil client keeper", func() { keeper.NewKeeperWithVM( - runtime.NewEnvironment(runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), log.NewNopLogger()), GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), nil, // client keeper, GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), GetSimApp(suite.chainA).WasmClientKeeper.GetVM(), @@ -197,8 +197,8 @@ func (suite *KeeperTestSuite) TestNewKeeper() { "failure: nil wasm VM", func() { keeper.NewKeeperWithVM( - runtime.NewEnvironment(runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), log.NewNopLogger()), GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), nil, @@ -212,8 +212,8 @@ func (suite *KeeperTestSuite) TestNewKeeper() { "failure: nil store service", func() { keeper.NewKeeperWithVM( - runtime.NewEnvironment(nil, log.NewNopLogger()), GetSimApp(suite.chainA).AppCodec(), + nil, GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), GetSimApp(suite.chainA).WasmClientKeeper.GetVM(), @@ -227,8 +227,8 @@ func (suite *KeeperTestSuite) TestNewKeeper() { "failure: nil query router", func() { keeper.NewKeeperWithVM( - runtime.NewEnvironment(runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), log.NewNopLogger()), GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), GetSimApp(suite.chainA).WasmClientKeeper.GetVM(), diff --git a/modules/light-clients/08-wasm/keeper/keeper_vm.go b/modules/light-clients/08-wasm/keeper/keeper_vm.go index 70334a32b74..bcaf2fafa72 100644 --- a/modules/light-clients/08-wasm/keeper/keeper_vm.go +++ b/modules/light-clients/08-wasm/keeper/keeper_vm.go @@ -10,7 +10,7 @@ import ( wasmvm "github.com/CosmWasm/wasmvm/v2" "cosmossdk.io/collections" - "cosmossdk.io/core/appmodule" + "cosmossdk.io/core/store" "github.com/cosmos/cosmos-sdk/codec" @@ -21,8 +21,8 @@ import ( // This constructor function is meant to be used when the chain uses x/wasm // and the same Wasm VM instance should be shared with it. func NewKeeperWithVM( - env appmodule.Environment, cdc codec.BinaryCodec, + storeService store.KVStoreService, clientKeeper types.ClientKeeper, authority string, vm types.WasmEngine, @@ -33,10 +33,6 @@ func NewKeeperWithVM( panic(errors.New("client keeper must not be nil")) } - if env.KVStoreService == nil { - panic(errors.New("store service must not be nil")) - } - if queryRouter == nil { panic(errors.New("query router must not be nil")) } @@ -45,17 +41,21 @@ func NewKeeperWithVM( panic(errors.New("wasm VM must not be nil")) } + if storeService == nil { + panic(errors.New("store service must not be nil")) + } + if strings.TrimSpace(authority) == "" { panic(errors.New("authority must be non-empty")) } - sb := collections.NewSchemaBuilder(env.KVStoreService) + sb := collections.NewSchemaBuilder(storeService) keeper := &Keeper{ - Environment: env, cdc: cdc, vm: vm, checksums: collections.NewKeySet(sb, types.ChecksumsKey, "checksums", collections.BytesKey), + storeService: storeService, clientKeeper: clientKeeper, authority: authority, } @@ -80,8 +80,8 @@ func NewKeeperWithVM( // This constructor function is meant to be used when the chain does not use x/wasm // and a Wasm VM needs to be instantiated using the provided parameters. func NewKeeperWithConfig( - env appmodule.Environment, cdc codec.BinaryCodec, + storeService store.KVStoreService, clientKeeper types.ClientKeeper, authority string, wasmConfig types.WasmConfig, @@ -93,5 +93,5 @@ func NewKeeperWithConfig( panic(fmt.Errorf("failed to instantiate new Wasm VM instance: %v", err)) } - return NewKeeperWithVM(env, cdc, clientKeeper, authority, vm, queryRouter, opts...) + return NewKeeperWithVM(cdc, storeService, clientKeeper, authority, vm, queryRouter, opts...) } diff --git a/modules/light-clients/08-wasm/keeper/migrations.go b/modules/light-clients/08-wasm/keeper/migrations.go index 1888ae6af54..bf0a1488494 100644 --- a/modules/light-clients/08-wasm/keeper/migrations.go +++ b/modules/light-clients/08-wasm/keeper/migrations.go @@ -1,7 +1,7 @@ package keeper import ( - "context" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" ) @@ -24,7 +24,7 @@ func NewMigrator(keeper Keeper) Migrator { // It grabs the checksums stored previously under the old key and stores // them in the global KeySet collection. It then deletes the old key and // the checksums stored under it. -func (m Migrator) MigrateChecksums(ctx context.Context) error { +func (m Migrator) MigrateChecksums(ctx sdk.Context) error { checksums, err := m.getStoredChecksums(ctx) if err != nil { return err @@ -41,13 +41,13 @@ func (m Migrator) MigrateChecksums(ctx context.Context) error { return err } - m.keeper.Logger().Info("successfully migrated Checksums to collections") + m.keeper.Logger(ctx).Info("successfully migrated Checksums to collections") return nil } // getStoredChecksums returns the checksums stored under the KeyChecksums key. -func (m Migrator) getStoredChecksums(ctx context.Context) ([][]byte, error) { - store := m.keeper.KVStoreService.OpenKVStore(ctx) +func (m Migrator) getStoredChecksums(ctx sdk.Context) ([][]byte, error) { + store := m.keeper.storeService.OpenKVStore(ctx) bz, err := store.Get([]byte(types.KeyChecksums)) if err != nil { @@ -64,8 +64,8 @@ func (m Migrator) getStoredChecksums(ctx context.Context) ([][]byte, error) { } // deleteChecksums deletes the checksums stored under the KeyChecksums key. -func (m Migrator) deleteChecksums(ctx context.Context) error { - store := m.keeper.KVStoreService.OpenKVStore(ctx) +func (m Migrator) deleteChecksums(ctx sdk.Context) error { + store := m.keeper.storeService.OpenKVStore(ctx) err := store.Delete([]byte(types.KeyChecksums)) return err diff --git a/modules/light-clients/08-wasm/keeper/msg_server.go b/modules/light-clients/08-wasm/keeper/msg_server.go index 45a9422f355..d08063d6630 100644 --- a/modules/light-clients/08-wasm/keeper/msg_server.go +++ b/modules/light-clients/08-wasm/keeper/msg_server.go @@ -3,10 +3,11 @@ package keeper import ( "context" "encoding/hex" - "fmt" errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" ibcerrors "github.com/cosmos/ibc-go/v9/modules/core/errors" ) @@ -14,19 +15,18 @@ import ( var _ types.MsgServer = (*Keeper)(nil) // StoreCode defines a rpc handler method for MsgStoreCode -func (k Keeper) StoreCode(ctx context.Context, msg *types.MsgStoreCode) (*types.MsgStoreCodeResponse, error) { +func (k Keeper) StoreCode(goCtx context.Context, msg *types.MsgStoreCode) (*types.MsgStoreCodeResponse, error) { if k.GetAuthority() != msg.Signer { return nil, errorsmod.Wrapf(ibcerrors.ErrUnauthorized, "expected %s, got %s", k.GetAuthority(), msg.Signer) } + ctx := sdk.UnwrapSDKContext(goCtx) checksum, err := k.storeWasmCode(ctx, msg.WasmByteCode, k.GetVM().StoreCode) if err != nil { return nil, errorsmod.Wrap(err, "failed to store wasm bytecode") } - if err := k.emitStoreWasmCodeEvent(ctx, checksum); err != nil { - return nil, fmt.Errorf("failed to emit store wasm code events: %w", err) - } + emitStoreWasmCodeEvent(ctx, checksum) return &types.MsgStoreCodeResponse{ Checksum: checksum, @@ -57,11 +57,13 @@ func (k Keeper) RemoveChecksum(goCtx context.Context, msg *types.MsgRemoveChecks } // MigrateContract defines a rpc handler method for MsgMigrateContract -func (k Keeper) MigrateContract(ctx context.Context, msg *types.MsgMigrateContract) (*types.MsgMigrateContractResponse, error) { +func (k Keeper) MigrateContract(goCtx context.Context, msg *types.MsgMigrateContract) (*types.MsgMigrateContractResponse, error) { if k.GetAuthority() != msg.Signer { return nil, errorsmod.Wrapf(ibcerrors.ErrUnauthorized, "expected %s, got %s", k.GetAuthority(), msg.Signer) } + ctx := sdk.UnwrapSDKContext(goCtx) + err := k.migrateContractCode(ctx, msg.ClientId, msg.Checksum, msg.Msg) if err != nil { return nil, errorsmod.Wrap(err, "failed to migrate contract") diff --git a/modules/light-clients/08-wasm/keeper/options_test.go b/modules/light-clients/08-wasm/keeper/options_test.go index 3256cba2c92..bec7233df21 100644 --- a/modules/light-clients/08-wasm/keeper/options_test.go +++ b/modules/light-clients/08-wasm/keeper/options_test.go @@ -1,14 +1,11 @@ package keeper_test import ( - "context" "encoding/json" "errors" wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" - "cosmossdk.io/log" - "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,14 +13,14 @@ import ( "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" ) -func mockErrorCustomQuerier() func(context.Context, json.RawMessage) ([]byte, error) { - return func(_ context.Context, _ json.RawMessage) ([]byte, error) { +func mockErrorCustomQuerier() func(sdk.Context, json.RawMessage) ([]byte, error) { + return func(_ sdk.Context, _ json.RawMessage) ([]byte, error) { return nil, errors.New("custom querier error for TestNewKeeperWithOptions") } } -func mockErrorStargateQuerier() func(context.Context, *wasmvmtypes.StargateQuery) ([]byte, error) { - return func(_ context.Context, _ *wasmvmtypes.StargateQuery) ([]byte, error) { +func mockErrorStargateQuerier() func(sdk.Context, *wasmvmtypes.StargateQuery) ([]byte, error) { + return func(_ sdk.Context, _ *wasmvmtypes.StargateQuery) ([]byte, error) { return nil, errors.New("stargate querier error for TestNewKeeperWithOptions") } } @@ -39,8 +36,8 @@ func (suite *KeeperTestSuite) TestNewKeeperWithOptions() { "success: no options", func() { k = keeper.NewKeeperWithVM( - runtime.NewEnvironment(runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), log.NewNopLogger()), GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), GetSimApp(suite.chainA).WasmClientKeeper.GetVM(), @@ -64,8 +61,8 @@ func (suite *KeeperTestSuite) TestNewKeeperWithOptions() { Custom: mockErrorCustomQuerier(), }) k = keeper.NewKeeperWithVM( - runtime.NewEnvironment(runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), log.NewNopLogger()), GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), GetSimApp(suite.chainA).WasmClientKeeper.GetVM(), @@ -90,8 +87,8 @@ func (suite *KeeperTestSuite) TestNewKeeperWithOptions() { Stargate: mockErrorStargateQuerier(), }) k = keeper.NewKeeperWithVM( - runtime.NewEnvironment(runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), log.NewNopLogger()), GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), GetSimApp(suite.chainA).WasmClientKeeper.GetVM(), @@ -117,8 +114,8 @@ func (suite *KeeperTestSuite) TestNewKeeperWithOptions() { Stargate: mockErrorStargateQuerier(), }) k = keeper.NewKeeperWithVM( - runtime.NewEnvironment(runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), log.NewNopLogger()), GetSimApp(suite.chainA).AppCodec(), + runtime.NewKVStoreService(GetSimApp(suite.chainA).GetKey(types.StoreKey)), GetSimApp(suite.chainA).IBCKeeper.ClientKeeper, GetSimApp(suite.chainA).WasmClientKeeper.GetAuthority(), GetSimApp(suite.chainA).WasmClientKeeper.GetVM(), diff --git a/modules/light-clients/08-wasm/keeper/querier.go b/modules/light-clients/08-wasm/keeper/querier.go index c167f44fd96..20fa56b6ca0 100644 --- a/modules/light-clients/08-wasm/keeper/querier.go +++ b/modules/light-clients/08-wasm/keeper/querier.go @@ -1,15 +1,14 @@ package keeper import ( - "context" "encoding/json" "fmt" "slices" wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" - "cosmossdk.io/core/appmodule" errorsmod "cosmossdk.io/errors" + storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -37,54 +36,52 @@ var defaultAcceptList = []string{ "/ibc.core.client.v1.Query/VerifyMembership", } -// queryHandler is a wrapper around the sdk Environment and the CallerID that calls +// queryHandler is a wrapper around the sdk.Context and the CallerID that calls // into the query plugins. type queryHandler struct { - appmodule.Environment - Ctx context.Context + Ctx sdk.Context Plugins QueryPlugins CallerID string } // newQueryHandler returns a default querier that can be used in the contract. -func newQueryHandler(ctx context.Context, env appmodule.Environment, plugins QueryPlugins, callerID string) *queryHandler { +func newQueryHandler(ctx sdk.Context, plugins QueryPlugins, callerID string) *queryHandler { return &queryHandler{ - Ctx: ctx, - Environment: env, - Plugins: plugins, - CallerID: callerID, + Ctx: ctx, + Plugins: plugins, + CallerID: callerID, } } // GasConsumed implements the wasmvmtypes.Querier interface. func (q *queryHandler) GasConsumed() uint64 { - return VMGasRegister.ToWasmVMGas(q.GasService.GasMeter(q.Ctx).Consumed()) + return VMGasRegister.ToWasmVMGas(q.Ctx.GasMeter().GasConsumed()) } // Query implements the wasmvmtypes.Querier interface. func (q *queryHandler) Query(request wasmvmtypes.QueryRequest, gasLimit uint64) ([]byte, error) { - sdkGasLimit := VMGasRegister.FromWasmVMGas(gasLimit) + sdkGas := VMGasRegister.FromWasmVMGas(gasLimit) + // discard all changes/events in subCtx by not committing the cached context - var res []byte - _, err := q.BranchService.ExecuteWithGasLimit(q.Ctx, sdkGasLimit, func(ctx context.Context) error { - var err error - res, err = q.Plugins.HandleQuery(ctx, q.CallerID, request) - if err == nil { - return nil - } + subCtx, _ := q.Ctx.WithGasMeter(storetypes.NewGasMeter(sdkGas)).CacheContext() - q.Logger.Debug("Redacting query error", "cause", err) - return err - }) - if err != nil { - return nil, redactError(err) + // make sure we charge the higher level context even on panic + defer func() { + q.Ctx.GasMeter().ConsumeGas(subCtx.GasMeter().GasConsumed(), "contract sub-query") + }() + + res, err := q.Plugins.HandleQuery(subCtx, q.CallerID, request) + if err == nil { + return res, nil } - return res, nil + + moduleLogger(q.Ctx).Debug("Redacting query error", "cause", err) + return nil, redactError(err) } type ( - CustomQuerier func(ctx context.Context, request json.RawMessage) ([]byte, error) - StargateQuerier func(ctx context.Context, request *wasmvmtypes.StargateQuery) ([]byte, error) + CustomQuerier func(ctx sdk.Context, request json.RawMessage) ([]byte, error) + StargateQuerier func(ctx sdk.Context, request *wasmvmtypes.StargateQuery) ([]byte, error) // QueryPlugins is a list of queriers that can be used to extend the default querier. QueryPlugins struct { @@ -112,7 +109,7 @@ func (e QueryPlugins) Merge(x *QueryPlugins) QueryPlugins { } // HandleQuery implements the ibcwasm.QueryPluginsI interface. -func (e QueryPlugins) HandleQuery(ctx context.Context, caller string, request wasmvmtypes.QueryRequest) ([]byte, error) { +func (e QueryPlugins) HandleQuery(ctx sdk.Context, caller string, request wasmvmtypes.QueryRequest) ([]byte, error) { if request.Stargate != nil { return e.Stargate(ctx, request.Stargate) } @@ -134,8 +131,8 @@ func NewDefaultQueryPlugins(queryRouter types.QueryRouter) QueryPlugins { // AcceptListStargateQuerier allows all queries that are in the provided accept list. // This function returns protobuf encoded responses in bytes. -func AcceptListStargateQuerier(acceptedQueries []string, queryRouter types.QueryRouter) func(context.Context, *wasmvmtypes.StargateQuery) ([]byte, error) { - return func(ctx context.Context, request *wasmvmtypes.StargateQuery) ([]byte, error) { +func AcceptListStargateQuerier(acceptedQueries []string, queryRouter types.QueryRouter) func(sdk.Context, *wasmvmtypes.StargateQuery) ([]byte, error) { + return func(ctx sdk.Context, request *wasmvmtypes.StargateQuery) ([]byte, error) { // append user defined accepted queries to default list defined above. acceptedQueries = append(defaultAcceptList, acceptedQueries...) @@ -149,7 +146,7 @@ func AcceptListStargateQuerier(acceptedQueries []string, queryRouter types.Query return nil, wasmvmtypes.UnsupportedRequest{Kind: fmt.Sprintf("No route to query '%s'", request.Path)} } - res, err := route(sdk.UnwrapSDKContext(ctx), &abci.QueryRequest{ + res, err := route(ctx, &abci.QueryRequest{ Data: request.Data, Path: request.Path, }) @@ -165,8 +162,8 @@ func AcceptListStargateQuerier(acceptedQueries []string, queryRouter types.Query } // RejectCustomQuerier rejects all custom queries -func RejectCustomQuerier() func(context.Context, json.RawMessage) ([]byte, error) { - return func(ctx context.Context, request json.RawMessage) ([]byte, error) { +func RejectCustomQuerier() func(sdk.Context, json.RawMessage) ([]byte, error) { + return func(ctx sdk.Context, request json.RawMessage) ([]byte, error) { return nil, wasmvmtypes.UnsupportedRequest{Kind: "Custom queries are not allowed"} } } diff --git a/modules/light-clients/08-wasm/keeper/querier_test.go b/modules/light-clients/08-wasm/keeper/querier_test.go index 252a1bd94b5..e1b31efe032 100644 --- a/modules/light-clients/08-wasm/keeper/querier_test.go +++ b/modules/light-clients/08-wasm/keeper/querier_test.go @@ -1,7 +1,6 @@ package keeper_test import ( - "context" "encoding/hex" "encoding/json" "fmt" @@ -10,6 +9,8 @@ import ( wasmvm "github.com/CosmWasm/wasmvm/v2" wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" wasmtesting "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/testing" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" @@ -26,8 +27,8 @@ type QueryEcho struct { Data string `json:"data"` } -func mockCustomQuerier() func(context.Context, json.RawMessage) ([]byte, error) { - return func(ctx context.Context, request json.RawMessage) ([]byte, error) { +func mockCustomQuerier() func(sdk.Context, json.RawMessage) ([]byte, error) { + return func(ctx sdk.Context, request json.RawMessage) ([]byte, error) { var customQuery CustomQuery err := json.Unmarshal([]byte(request), &customQuery) if err != nil { diff --git a/modules/light-clients/08-wasm/keeper/snapshotter.go b/modules/light-clients/08-wasm/keeper/snapshotter.go index af0b221cbbd..fa8163c64c2 100644 --- a/modules/light-clients/08-wasm/keeper/snapshotter.go +++ b/modules/light-clients/08-wasm/keeper/snapshotter.go @@ -91,15 +91,15 @@ func (ws *WasmSnapshotter) SnapshotExtension(height uint64, payloadWriter snapsh // RestoreExtension implements the snapshot.ExtensionSnapshotter interface. // RestoreExtension is used to read data from an existing extension state snapshot into the 08-wasm module. // The payload reader returns io.EOF when it has reached the end of the extension state snapshot. -func (ws *WasmSnapshotter) RestoreExtension(_ uint64, format uint32, payloadReader snapshot.ExtensionPayloadReader) error { +func (ws *WasmSnapshotter) RestoreExtension(height uint64, format uint32, payloadReader snapshot.ExtensionPayloadReader) error { if format == ws.SnapshotFormat() { - return ws.processAllItems(payloadReader, restoreV1) + return ws.processAllItems(height, payloadReader, restoreV1) } return errorsmod.Wrapf(snapshot.ErrUnknownFormat, "expected %d, got %d", ws.SnapshotFormat(), format) } -func restoreV1(k *Keeper, compressedCode []byte) error { +func restoreV1(ctx sdk.Context, k *Keeper, compressedCode []byte) error { if !types.IsGzip(compressedCode) { return errorsmod.Wrap(types.ErrInvalidData, "expected wasm code is not gzip format") } @@ -122,9 +122,11 @@ func restoreV1(k *Keeper, compressedCode []byte) error { } func (ws *WasmSnapshotter) processAllItems( + height uint64, payloadReader snapshot.ExtensionPayloadReader, - cb func(*Keeper, []byte) error, + cb func(sdk.Context, *Keeper, []byte) error, ) error { + ctx := sdk.NewContext(ws.cms, false, nil).WithBlockHeight(int64(height)) for { payload, err := payloadReader() if err == io.EOF { @@ -133,7 +135,7 @@ func (ws *WasmSnapshotter) processAllItems( return err } - if err := cb(ws.keeper, payload); err != nil { + if err := cb(ctx, ws.keeper, payload); err != nil { return errorsmod.Wrap(err, "failure processing snapshot item") } } diff --git a/modules/light-clients/08-wasm/light_client_module.go b/modules/light-clients/08-wasm/light_client_module.go index 5b0680e3b49..cd88887418e 100644 --- a/modules/light-clients/08-wasm/light_client_module.go +++ b/modules/light-clients/08-wasm/light_client_module.go @@ -9,6 +9,8 @@ import ( errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + internaltypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/internal/types" wasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" @@ -69,7 +71,8 @@ func (l LightClientModule) Initialize(ctx context.Context, clientID string, clie Checksum: clientState.Checksum, } - return l.keeper.WasmInstantiate(ctx, clientID, clientStore, &clientState, payload) + sdkCtx := sdk.UnwrapSDKContext(ctx) // TODO: https://github.com/cosmos/ibc-go/issues/5917 + return l.keeper.WasmInstantiate(sdkCtx, clientID, clientStore, &clientState, payload) } // VerifyClientMessage obtains the client state associated with the client identifier, it then must verify the ClientMessage. @@ -94,7 +97,8 @@ func (l LightClientModule) VerifyClientMessage(ctx context.Context, clientID str payload := types.QueryMsg{ VerifyClientMessage: &types.VerifyClientMessageMsg{ClientMessage: clientMessage.Data}, } - _, err := l.keeper.WasmQuery(ctx, clientID, clientStore, clientState, payload) + sdkCtx := sdk.UnwrapSDKContext(ctx) // TODO: https://github.com/cosmos/ibc-go/issues/5917 + _, err := l.keeper.WasmQuery(sdkCtx, clientID, clientStore, clientState, payload) return err } @@ -118,7 +122,8 @@ func (l LightClientModule) CheckForMisbehaviour(ctx context.Context, clientID st CheckForMisbehaviour: &types.CheckForMisbehaviourMsg{ClientMessage: clientMessage.Data}, } - res, err := l.keeper.WasmQuery(ctx, clientID, clientStore, clientState, payload) + sdkCtx := sdk.UnwrapSDKContext(ctx) // TODO: https://github.com/cosmos/ibc-go/issues/5917 + res, err := l.keeper.WasmQuery(sdkCtx, clientID, clientStore, clientState, payload) if err != nil { return false } @@ -152,7 +157,8 @@ func (l LightClientModule) UpdateStateOnMisbehaviour(ctx context.Context, client UpdateStateOnMisbehaviour: &types.UpdateStateOnMisbehaviourMsg{ClientMessage: clientMessage.Data}, } - _, err := l.keeper.WasmSudo(ctx, clientID, clientStore, clientState, payload) + sdkCtx := sdk.UnwrapSDKContext(ctx) // TODO: https://github.com/cosmos/ibc-go/issues/5917 + _, err := l.keeper.WasmSudo(sdkCtx, clientID, clientStore, clientState, payload) if err != nil { panic(err) } @@ -178,7 +184,8 @@ func (l LightClientModule) UpdateState(ctx context.Context, clientID string, cli UpdateState: &types.UpdateStateMsg{ClientMessage: clientMessage.Data}, } - res, err := l.keeper.WasmSudo(ctx, clientID, clientStore, clientState, payload) + sdkCtx := sdk.UnwrapSDKContext(ctx) // TODO: https://github.com/cosmos/ibc-go/issues/5917 + res, err := l.keeper.WasmSudo(sdkCtx, clientID, clientStore, clientState, payload) if err != nil { panic(err) } @@ -246,7 +253,8 @@ func (l LightClientModule) VerifyMembership( }, } - _, err := l.keeper.WasmSudo(ctx, clientID, clientStore, clientState, payload) + sdkCtx := sdk.UnwrapSDKContext(ctx) // TODO: https://github.com/cosmos/ibc-go/issues/5917 + _, err := l.keeper.WasmSudo(sdkCtx, clientID, clientStore, clientState, payload) return err } @@ -298,7 +306,8 @@ func (l LightClientModule) VerifyNonMembership( }, } - _, err := l.keeper.WasmSudo(ctx, clientID, clientStore, clientState, payload) + sdkCtx := sdk.UnwrapSDKContext(ctx) // TODO: https://github.com/cosmos/ibc-go/issues/5917 + _, err := l.keeper.WasmSudo(sdkCtx, clientID, clientStore, clientState, payload) return err } @@ -327,7 +336,8 @@ func (l LightClientModule) Status(ctx context.Context, clientID string) exported } payload := types.QueryMsg{Status: &types.StatusMsg{}} - res, err := l.keeper.WasmQuery(ctx, clientID, clientStore, clientState, payload) + sdkCtx := sdk.UnwrapSDKContext(ctx) // TODO: https://github.com/cosmos/ibc-go/issues/5917 + res, err := l.keeper.WasmQuery(sdkCtx, clientID, clientStore, clientState, payload) if err != nil { return exported.Unknown } @@ -376,7 +386,8 @@ func (l LightClientModule) TimestampAtHeight(ctx context.Context, clientID strin }, } - res, err := l.keeper.WasmQuery(ctx, clientID, clientStore, clientState, payload) + sdkCtx := sdk.UnwrapSDKContext(ctx) // TODO: https://github.com/cosmos/ibc-go/issues/5917 + res, err := l.keeper.WasmQuery(sdkCtx, clientID, clientStore, clientState, payload) if err != nil { return 0, errorsmod.Wrapf(err, "height (%s)", height) } @@ -429,7 +440,8 @@ func (l LightClientModule) RecoverClient(ctx context.Context, clientID, substitu MigrateClientStore: &types.MigrateClientStoreMsg{}, } - _, err = l.keeper.WasmSudo(ctx, clientID, store, subjectClientState, payload) + sdkCtx := sdk.UnwrapSDKContext(ctx) // TODO: https://github.com/cosmos/ibc-go/issues/5917 + _, err = l.keeper.WasmSudo(sdkCtx, clientID, store, subjectClientState, payload) return err } @@ -477,6 +489,7 @@ func (l LightClientModule) VerifyUpgradeAndUpdateState( }, } - _, err := l.keeper.WasmSudo(ctx, clientID, clientStore, clientState, payload) + sdkCtx := sdk.UnwrapSDKContext(ctx) // TODO: https://github.com/cosmos/ibc-go/issues/5917 + _, err := l.keeper.WasmSudo(sdkCtx, clientID, clientStore, clientState, payload) return err } diff --git a/modules/light-clients/08-wasm/module.go b/modules/light-clients/08-wasm/module.go index 6123b48d9cc..bda17444165 100644 --- a/modules/light-clients/08-wasm/module.go +++ b/modules/light-clients/08-wasm/module.go @@ -7,7 +7,6 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - "google.golang.org/grpc" "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" @@ -26,11 +25,11 @@ var ( _ appmodule.AppModule = (*AppModule)(nil) _ appmodule.HasConsensusVersion = (*AppModule)(nil) _ appmodule.HasRegisterInterfaces = (*AppModule)(nil) - _ appmodule.HasMigrations = (*AppModule)(nil) _ module.AppModule = (*AppModule)(nil) _ module.HasGRPCGateway = (*AppModule)(nil) _ module.HasGenesis = (*AppModule)(nil) + _ module.HasServices = (*AppModule)(nil) _ autocli.HasCustomTxCommand = (*AppModule)(nil) _ autocli.HasCustomQueryCommand = (*AppModule)(nil) @@ -103,18 +102,14 @@ func (AppModule) GetQueryCmd() *cobra.Command { } // RegisterServices registers module services. -func (am AppModule) RegisterServices(cfg grpc.ServiceRegistrar) error { - types.RegisterMsgServer(cfg, am.keeper) - types.RegisterQueryServer(cfg, am.keeper) - return nil -} +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), am.keeper) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) -func (am AppModule) RegisterMigrations(registrar appmodule.MigrationRegistrar) error { wasmMigrator := keeper.NewMigrator(am.keeper) - if err := registrar.Register(types.ModuleName, 1, wasmMigrator.MigrateChecksums); err != nil { - return err + if err := cfg.RegisterMigration(types.ModuleName, 1, wasmMigrator.MigrateChecksums); err != nil { + panic(fmt.Errorf("failed to migrate 08-wasm module from version 1 to 2 (checksums migration to collections): %v", err)) } - return nil } // ConsensusVersion implements AppModule/ConsensusVersion. diff --git a/modules/light-clients/08-wasm/testing/simapp/app.go b/modules/light-clients/08-wasm/testing/simapp/app.go index 5f895f14dba..4a1cf36282b 100644 --- a/modules/light-clients/08-wasm/testing/simapp/app.go +++ b/modules/light-clients/08-wasm/testing/simapp/app.go @@ -17,7 +17,6 @@ import ( apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/client/v2/autocli" coreaddress "cosmossdk.io/core/address" - appmodule "cosmossdk.io/core/appmodule" corestore "cosmossdk.io/core/store" "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" @@ -472,7 +471,6 @@ func NewSimApp( app.IBCKeeper = ibckeeper.NewKeeper( appCodec, - signingCtx.AddressCodec(), runtime.NewEnvironment(runtime.NewKVStoreService(keys[ibcexported.StoreKey]), logger.With(log.ModuleKey, "x/ibc")), app.GetSubspace(ibcexported.ModuleName), app.UpgradeKeeper, @@ -548,15 +546,12 @@ func NewSimApp( if mockVM != nil { // NOTE: mockVM is used for testing purposes only! app.WasmClientKeeper = wasmkeeper.NewKeeperWithVM( - runtime.NewEnvironment(runtime.NewKVStoreService(keys[wasmtypes.StoreKey]), logger.With(log.ModuleKey, "x/ibc-wasm")), - appCodec, app.IBCKeeper.ClientKeeper, + appCodec, runtime.NewKVStoreService(keys[wasmtypes.StoreKey]), app.IBCKeeper.ClientKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), mockVM, app.GRPCQueryRouter(), ) } else { app.WasmClientKeeper = wasmkeeper.NewKeeperWithConfig( - runtime.NewEnvironment( - runtime.NewKVStoreService(keys[wasmtypes.StoreKey]), logger.With(log.ModuleKey, "x/ibc-wasm")), - appCodec, app.IBCKeeper.ClientKeeper, + appCodec, runtime.NewKVStoreService(keys[wasmtypes.StoreKey]), app.IBCKeeper.ClientKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), wasmConfig, app.GRPCQueryRouter(), ) } @@ -564,7 +559,6 @@ func NewSimApp( // IBC Fee Module keeper app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( appCodec, - signingCtx.AddressCodec(), runtime.NewEnvironment(runtime.NewKVStoreService(keys[ibcfeetypes.StoreKey]), logger.With(log.ModuleKey, fmt.Sprintf("x/%s-%s", ibcexported.ModuleName, ibcfeetypes.ModuleName))), app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware app.IBCKeeper.ChannelKeeper, @@ -601,7 +595,6 @@ func NewSimApp( // since fee middleware will wrap the IBCKeeper for underlying application. app.TransferKeeper = ibctransferkeeper.NewKeeper( appCodec, - signingCtx.AddressCodec(), runtime.NewEnvironment(runtime.NewKVStoreService(keys[ibctransfertypes.StoreKey]), logger.With(log.ModuleKey, fmt.Sprintf("x/%s-%s", ibcexported.ModuleName, ibctransfertypes.ModuleName))), app.GetSubspace(ibctransfertypes.ModuleName), app.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware @@ -702,36 +695,36 @@ func NewSimApp( // NOTE: Any module instantiated in the module manager that is later modified // must be passed by reference here. - app.ModuleManager = module.NewManagerFromMap(map[string]appmodule.AppModule{ - genutiltypes.ModuleName: genutil.NewAppModule(appCodec, app.AuthKeeper, app.StakingKeeper, app, txConfig, genutiltypes.DefaultMessageValidator), - authtypes.ModuleName: auth.NewAppModule(appCodec, app.AuthKeeper, app.AccountsKeeper, authsims.RandomGenesisAccounts, nil), - vestingtypes.ModuleName: vesting.NewAppModule(app.AuthKeeper, app.BankKeeper), - banktypes.ModuleName: bank.NewAppModule(appCodec, app.BankKeeper, app.AuthKeeper), - feegrant.ModuleName: feegrantmodule.NewAppModule(appCodec, app.FeeGrantKeeper, app.interfaceRegistry), - govtypes.ModuleName: gov.NewAppModule(appCodec, &app.GovKeeper, app.AuthKeeper, app.BankKeeper, app.PoolKeeper), - minttypes.ModuleName: mint.NewAppModule(appCodec, app.MintKeeper, app.AuthKeeper), - slashingtypes.ModuleName: slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AuthKeeper, app.BankKeeper, app.StakingKeeper, app.interfaceRegistry, cometService), - distrtypes.ModuleName: distr.NewAppModule(appCodec, app.DistrKeeper, app.StakingKeeper), - stakingtypes.ModuleName: staking.NewAppModule(appCodec, app.StakingKeeper), - upgradetypes.ModuleName: upgrade.NewAppModule(app.UpgradeKeeper), - evidencetypes.ModuleName: evidence.NewAppModule(appCodec, app.EvidenceKeeper, cometService), - paramstypes.ModuleName: params.NewAppModule(app.ParamsKeeper), - authz.ModuleName: authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.interfaceRegistry), - group.ModuleName: groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AuthKeeper, app.BankKeeper, app.interfaceRegistry), - consensusparamtypes.ModuleName: consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), + app.ModuleManager = module.NewManager( + genutil.NewAppModule(appCodec, app.AuthKeeper, app.StakingKeeper, app, txConfig, genutiltypes.DefaultMessageValidator), + auth.NewAppModule(appCodec, app.AuthKeeper, app.AccountsKeeper, authsims.RandomGenesisAccounts, nil), + vesting.NewAppModule(app.AuthKeeper, app.BankKeeper), + bank.NewAppModule(appCodec, app.BankKeeper, app.AuthKeeper), + feegrantmodule.NewAppModule(appCodec, app.FeeGrantKeeper, app.interfaceRegistry), + gov.NewAppModule(appCodec, &app.GovKeeper, app.AuthKeeper, app.BankKeeper, app.PoolKeeper), + mint.NewAppModule(appCodec, app.MintKeeper, app.AuthKeeper), + slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AuthKeeper, app.BankKeeper, app.StakingKeeper, app.interfaceRegistry, cometService), + distr.NewAppModule(appCodec, app.DistrKeeper, app.StakingKeeper), + staking.NewAppModule(appCodec, app.StakingKeeper), + upgrade.NewAppModule(app.UpgradeKeeper), + evidence.NewAppModule(appCodec, app.EvidenceKeeper, cometService), + params.NewAppModule(app.ParamsKeeper), + authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.interfaceRegistry), + groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AuthKeeper, app.BankKeeper, app.interfaceRegistry), + consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), // IBC modules - ibcexported.ModuleName: ibc.NewAppModule(appCodec, app.IBCKeeper), - ibctransfertypes.ModuleName: transfer.NewAppModule(appCodec, app.TransferKeeper), - ibcfeetypes.ModuleName: ibcfee.NewAppModule(appCodec, app.IBCFeeKeeper), - icatypes.ModuleName: ica.NewAppModule(appCodec, &app.ICAControllerKeeper, &app.ICAHostKeeper), - mockModule.Name(): mockModule, + ibc.NewAppModule(appCodec, app.IBCKeeper), + transfer.NewAppModule(appCodec, app.TransferKeeper), + ibcfee.NewAppModule(appCodec, app.IBCFeeKeeper), + ica.NewAppModule(appCodec, &app.ICAControllerKeeper, &app.ICAHostKeeper), + mockModule, // IBC light clients - wasmtypes.ModuleName: wasm.NewAppModule(appCodec, app.WasmClientKeeper), // TODO(damian): see if we want to pass the lightclient module here, keeper is used in AppModule.RegisterServices etc - ibctm.ModuleName: ibctm.NewAppModule(tmLightClientModule), - solomachine.ModuleName: solomachine.NewAppModule(smLightClientModule), - }) + wasm.NewAppModule(appCodec, app.WasmClientKeeper), // TODO(damian): see if we want to pass the lightclient module here, keeper is used in AppModule.RegisterServices etc + ibctm.NewAppModule(tmLightClientModule), + solomachine.NewAppModule(smLightClientModule), + ) app.ModuleManager.RegisterLegacyAminoCodec(legacyAmino) app.ModuleManager.RegisterInterfaces(interfaceRegistry) diff --git a/modules/light-clients/08-wasm/types/gas_register_custom.go b/modules/light-clients/08-wasm/types/gas_register_custom.go index 524bae342d9..991d8779c43 100644 --- a/modules/light-clients/08-wasm/types/gas_register_custom.go +++ b/modules/light-clients/08-wasm/types/gas_register_custom.go @@ -1,14 +1,14 @@ package types import ( - "fmt" "math" wasmvm "github.com/CosmWasm/wasmvm/v2" wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" - "cosmossdk.io/core/gas" storetypes "cosmossdk.io/store/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) // While gas_register.go is a direct copy of https://github.com/CosmWasm/wasmd/blob/main/x/wasm/types/gas_register.go @@ -24,47 +24,39 @@ var CostJSONDeserialization = wasmvmtypes.UFraction{ Denominator: 1, } -func (g WasmGasRegister) RuntimeGasForContract(meter gas.Meter) uint64 { - if meter.Remaining() >= meter.Limit() { +func (g WasmGasRegister) RuntimeGasForContract(ctx sdk.Context) uint64 { + meter := ctx.GasMeter() + if meter.IsOutOfGas() { return 0 } // infinite gas meter with limit=0 or MaxUint64 if meter.Limit() == 0 || meter.Limit() == math.MaxUint64 { return math.MaxUint64 } - var consumedToLimit gas.Gas - if meter.Remaining() <= meter.Limit() { - consumedToLimit = meter.Limit() - } else { - consumedToLimit = meter.Consumed() - } - return g.ToWasmVMGas(meter.Limit() - consumedToLimit) + return g.ToWasmVMGas(meter.Limit() - meter.GasConsumedToLimit()) } -func (g WasmGasRegister) ConsumeRuntimeGas(meter gas.Meter, gasAmt uint64) { - consumed := g.FromWasmVMGas(gasAmt) - if err := meter.Consume(consumed, "wasm contract"); err != nil { - panic(fmt.Errorf("ConsumeRuntimeGas: failed to consume gas: %w", err)) - } - - if meter.Consumed() >= meter.Limit() { - // throw OutOfGas error if we ran out (got exactly to zero due to better limit enforcing) +func (g WasmGasRegister) ConsumeRuntimeGas(ctx sdk.Context, gas uint64) { + consumed := g.FromWasmVMGas(gas) + ctx.GasMeter().ConsumeGas(consumed, "wasm contract") + // throw OutOfGas error if we ran out (got exactly to zero due to better limit enforcing) + if ctx.GasMeter().IsOutOfGas() { panic(storetypes.ErrorOutOfGas{Descriptor: "Wasmer function execution"}) } } // MultipliedGasMeter wraps the GasMeter from context and multiplies all reads by out defined multiplier type MultipliedGasMeter struct { - originalMeter gas.Meter + originalMeter storetypes.GasMeter GasRegister GasRegister } -func NewMultipliedGasMeter(originalMeter gas.Meter, gr GasRegister) MultipliedGasMeter { +func NewMultipliedGasMeter(originalMeter storetypes.GasMeter, gr GasRegister) MultipliedGasMeter { return MultipliedGasMeter{originalMeter: originalMeter, GasRegister: gr} } var _ wasmvm.GasMeter = MultipliedGasMeter{} func (m MultipliedGasMeter) GasConsumed() storetypes.Gas { - return m.GasRegister.ToWasmVMGas(m.originalMeter.Consumed()) + return m.GasRegister.ToWasmVMGas(m.originalMeter.GasConsumed()) } diff --git a/simapp/app.go b/simapp/app.go index 2ac4e0c639e..bb90ceb6379 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -17,7 +17,6 @@ import ( "cosmossdk.io/client/v2/autocli" clienthelpers "cosmossdk.io/client/v2/helpers" coreaddress "cosmossdk.io/core/address" - appmodule "cosmossdk.io/core/appmodule" corestore "cosmossdk.io/core/store" "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" @@ -488,7 +487,6 @@ func NewSimApp( app.IBCKeeper = ibckeeper.NewKeeper( appCodec, - signingCtx.AddressCodec(), runtime.NewEnvironment(runtime.NewKVStoreService(keys[ibcexported.StoreKey]), logger.With(log.ModuleKey, "x/ibc")), app.GetSubspace(ibcexported.ModuleName), app.UpgradeKeeper, @@ -543,7 +541,6 @@ func NewSimApp( // IBC Fee Module keeper app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( appCodec, - signingCtx.AddressCodec(), runtime.NewEnvironment(runtime.NewKVStoreService(keys[ibcfeetypes.StoreKey]), logger.With(log.ModuleKey, fmt.Sprintf("x/%s-%s", ibcexported.ModuleName, ibcfeetypes.ModuleName))), app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware app.IBCKeeper.ChannelKeeper, @@ -580,7 +577,6 @@ func NewSimApp( // since fee middleware will wrap the IBCKeeper for underlying application. app.TransferKeeper = ibctransferkeeper.NewKeeper( appCodec, - signingCtx.AddressCodec(), runtime.NewEnvironment(runtime.NewKVStoreService(keys[ibctransfertypes.StoreKey]), logger.With(log.ModuleKey, fmt.Sprintf("x/%s-%s", ibcexported.ModuleName, ibctransfertypes.ModuleName))), app.GetSubspace(ibctransfertypes.ModuleName), app.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware @@ -686,40 +682,40 @@ func NewSimApp( // NOTE: Any module instantiated in the module manager that is later modified // must be passed by reference here. - app.ModuleManager = module.NewManagerFromMap(map[string]appmodule.AppModule{ - genutiltypes.ModuleName: genutil.NewAppModule(appCodec, app.AuthKeeper, app.StakingKeeper, app, txConfig, genutiltypes.DefaultMessageValidator), - accounts.ModuleName: accounts.NewAppModule(appCodec, app.AccountsKeeper), - authtypes.ModuleName: auth.NewAppModule(appCodec, app.AuthKeeper, app.AccountsKeeper, authsims.RandomGenesisAccounts, nil), - vestingtypes.ModuleName: vesting.NewAppModule(app.AuthKeeper, app.BankKeeper), - banktypes.ModuleName: bank.NewAppModule(appCodec, app.BankKeeper, app.AuthKeeper), - feegrant.ModuleName: feegrantmodule.NewAppModule(appCodec, app.FeeGrantKeeper, app.interfaceRegistry), - govtypes.ModuleName: gov.NewAppModule(appCodec, &app.GovKeeper, app.AuthKeeper, app.BankKeeper, app.PoolKeeper), - minttypes.ModuleName: mint.NewAppModule(appCodec, app.MintKeeper, app.AuthKeeper), - slashingtypes.ModuleName: slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AuthKeeper, app.BankKeeper, app.StakingKeeper, app.interfaceRegistry, cometService), - distrtypes.ModuleName: distr.NewAppModule(appCodec, app.DistrKeeper, app.StakingKeeper), - stakingtypes.ModuleName: staking.NewAppModule(appCodec, app.StakingKeeper), - upgradetypes.ModuleName: upgrade.NewAppModule(app.UpgradeKeeper), - evidencetypes.ModuleName: evidence.NewAppModule(appCodec, app.EvidenceKeeper, cometService), - paramstypes.ModuleName: params.NewAppModule(app.ParamsKeeper), - authz.ModuleName: authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.interfaceRegistry), - group.ModuleName: groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AuthKeeper, app.BankKeeper, app.interfaceRegistry), - nft.ModuleName: nftmodule.NewAppModule(appCodec, app.NFTKeeper, app.AuthKeeper, app.BankKeeper, app.interfaceRegistry), - consensustypes.ModuleName: consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), - circuittypes.ModuleName: circuit.NewAppModule(appCodec, app.CircuitKeeper), - pooltypes.ModuleName: protocolpool.NewAppModule(appCodec, app.PoolKeeper, app.AuthKeeper, app.BankKeeper), - epochstypes.ModuleName: epochs.NewAppModule(appCodec, app.EpochsKeeper), + app.ModuleManager = module.NewManager( + genutil.NewAppModule(appCodec, app.AuthKeeper, app.StakingKeeper, app, txConfig, genutiltypes.DefaultMessageValidator), + accounts.NewAppModule(appCodec, app.AccountsKeeper), + auth.NewAppModule(appCodec, app.AuthKeeper, app.AccountsKeeper, authsims.RandomGenesisAccounts, nil), + vesting.NewAppModule(app.AuthKeeper, app.BankKeeper), + bank.NewAppModule(appCodec, app.BankKeeper, app.AuthKeeper), + feegrantmodule.NewAppModule(appCodec, app.FeeGrantKeeper, app.interfaceRegistry), + gov.NewAppModule(appCodec, &app.GovKeeper, app.AuthKeeper, app.BankKeeper, app.PoolKeeper), + mint.NewAppModule(appCodec, app.MintKeeper, app.AuthKeeper), + slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AuthKeeper, app.BankKeeper, app.StakingKeeper, app.interfaceRegistry, cometService), + distr.NewAppModule(appCodec, app.DistrKeeper, app.StakingKeeper), + staking.NewAppModule(appCodec, app.StakingKeeper), + upgrade.NewAppModule(app.UpgradeKeeper), + params.NewAppModule(app.ParamsKeeper), + evidence.NewAppModule(appCodec, app.EvidenceKeeper, cometService), + authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.interfaceRegistry), + groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AuthKeeper, app.BankKeeper, app.interfaceRegistry), + nftmodule.NewAppModule(appCodec, app.NFTKeeper, app.AuthKeeper, app.BankKeeper, app.interfaceRegistry), + consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), + circuit.NewAppModule(appCodec, app.CircuitKeeper), + protocolpool.NewAppModule(appCodec, app.PoolKeeper, app.AuthKeeper, app.BankKeeper), + epochs.NewAppModule(appCodec, app.EpochsKeeper), // IBC modules - ibcexported.ModuleName: ibc.NewAppModule(appCodec, app.IBCKeeper), - ibctransfertypes.ModuleName: transfer.NewAppModule(appCodec, app.TransferKeeper), - ibcfeetypes.ModuleName: ibcfee.NewAppModule(appCodec, app.IBCFeeKeeper), - icatypes.ModuleName: ica.NewAppModule(appCodec, &app.ICAControllerKeeper, &app.ICAHostKeeper), - mockModule.Name(): mockModule, + ibc.NewAppModule(appCodec, app.IBCKeeper), + transfer.NewAppModule(appCodec, app.TransferKeeper), + ibcfee.NewAppModule(appCodec, app.IBCFeeKeeper), + ica.NewAppModule(appCodec, &app.ICAControllerKeeper, &app.ICAHostKeeper), + mockModule, // IBC light clients - ibctm.ModuleName: ibctm.NewAppModule(tmLightClientModule), - solomachine.ModuleName: solomachine.NewAppModule(smLightClientModule), - }) + ibctm.NewAppModule(tmLightClientModule), + solomachine.NewAppModule(smLightClientModule), + ) app.ModuleManager.RegisterLegacyAminoCodec(legacyAmino) app.ModuleManager.RegisterInterfaces(interfaceRegistry) diff --git a/testing/chain.go b/testing/chain.go index 75e4d6c83c8..357406cb6f5 100644 --- a/testing/chain.go +++ b/testing/chain.go @@ -61,7 +61,6 @@ type TestChain struct { ProposedHeader cmtproto.Header // proposed (uncommitted) header for current block height TxConfig client.TxConfig Codec codec.Codec - Bech32Prefix string Vals *cmttypes.ValidatorSet NextVals *cmttypes.ValidatorSet @@ -163,7 +162,6 @@ func NewTestChainWithValSet(tb testing.TB, coord *Coordinator, chainID string, v SenderPrivKey: senderAccs[0].SenderPrivKey, SenderAccount: senderAccs[0].SenderAccount, SenderAccounts: senderAccs, - Bech32Prefix: sdk.GetConfig().GetBech32AccountAddrPrefix(), } // commit genesis block diff --git a/testing/simapp/app.go b/testing/simapp/app.go index d7ca75cc6ed..0825efc8d37 100644 --- a/testing/simapp/app.go +++ b/testing/simapp/app.go @@ -16,7 +16,6 @@ import ( "cosmossdk.io/client/v2/autocli" clienthelpers "cosmossdk.io/client/v2/helpers" coreaddress "cosmossdk.io/core/address" - appmodule "cosmossdk.io/core/appmodule" corestore "cosmossdk.io/core/store" "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" @@ -458,7 +457,6 @@ func NewSimApp( app.IBCKeeper = ibckeeper.NewKeeper( appCodec, - signingCtx.AddressCodec(), runtime.NewEnvironment(runtime.NewKVStoreService(keys[ibcexported.StoreKey]), logger.With(log.ModuleKey, "x/ibc")), app.GetSubspace(ibcexported.ModuleName), app.UpgradeKeeper, @@ -513,7 +511,6 @@ func NewSimApp( // IBC Fee Module keeper app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( appCodec, - signingCtx.AddressCodec(), runtime.NewEnvironment(runtime.NewKVStoreService(keys[ibcfeetypes.StoreKey]), logger.With(log.ModuleKey, fmt.Sprintf("x/%s-%s", ibcexported.ModuleName, ibcfeetypes.ModuleName))), app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware app.IBCKeeper.ChannelKeeper, @@ -550,7 +547,6 @@ func NewSimApp( // since fee middleware will wrap the IBCKeeper for underlying application. app.TransferKeeper = ibctransferkeeper.NewKeeper( appCodec, - signingCtx.AddressCodec(), runtime.NewEnvironment(runtime.NewKVStoreService(keys[ibctransfertypes.StoreKey]), logger.With(log.ModuleKey, fmt.Sprintf("x/%s-%s", ibcexported.ModuleName, ibctransfertypes.ModuleName))), app.GetSubspace(ibctransfertypes.ModuleName), app.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware @@ -656,39 +652,39 @@ func NewSimApp( // NOTE: Any module instantiated in the module manager that is later modified // must be passed by reference here. - app.ModuleManager = module.NewManagerFromMap(map[string]appmodule.AppModule{ - genutiltypes.ModuleName: genutil.NewAppModule(appCodec, app.AuthKeeper, app.StakingKeeper, app, txConfig, genutiltypes.DefaultMessageValidator), - accounts.ModuleName: accounts.NewAppModule(appCodec, app.AccountsKeeper), - authtypes.ModuleName: auth.NewAppModule(appCodec, app.AuthKeeper, app.AccountsKeeper, authsims.RandomGenesisAccounts, nil), - vestingtypes.ModuleName: vesting.NewAppModule(app.AuthKeeper, app.BankKeeper), - banktypes.ModuleName: bank.NewAppModule(appCodec, app.BankKeeper, app.AuthKeeper), - feegrant.ModuleName: feegrantmodule.NewAppModule(appCodec, app.FeeGrantKeeper, app.interfaceRegistry), - govtypes.ModuleName: gov.NewAppModule(appCodec, &app.GovKeeper, app.AuthKeeper, app.BankKeeper, app.PoolKeeper), - minttypes.ModuleName: mint.NewAppModule(appCodec, app.MintKeeper, app.AuthKeeper), - slashingtypes.ModuleName: slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AuthKeeper, app.BankKeeper, app.StakingKeeper, app.interfaceRegistry, cometService), - distrtypes.ModuleName: distr.NewAppModule(appCodec, app.DistrKeeper, app.StakingKeeper), - stakingtypes.ModuleName: staking.NewAppModule(appCodec, app.StakingKeeper), - upgradetypes.ModuleName: upgrade.NewAppModule(app.UpgradeKeeper), - paramstypes.ModuleName: params.NewAppModule(app.ParamsKeeper), - evidencetypes.ModuleName: evidence.NewAppModule(appCodec, app.EvidenceKeeper, cometService), - authz.ModuleName: authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.interfaceRegistry), - group.ModuleName: groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AuthKeeper, app.BankKeeper, app.interfaceRegistry), - nft.ModuleName: nftmodule.NewAppModule(appCodec, app.NFTKeeper, app.AuthKeeper, app.BankKeeper, app.interfaceRegistry), - consensustypes.ModuleName: consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), - pooltypes.ModuleName: protocolpool.NewAppModule(appCodec, app.PoolKeeper, app.AuthKeeper, app.BankKeeper), - epochstypes.ModuleName: epochs.NewAppModule(appCodec, app.EpochsKeeper), + app.ModuleManager = module.NewManager( + genutil.NewAppModule(appCodec, app.AuthKeeper, app.StakingKeeper, app, txConfig, genutiltypes.DefaultMessageValidator), + accounts.NewAppModule(appCodec, app.AccountsKeeper), + auth.NewAppModule(appCodec, app.AuthKeeper, app.AccountsKeeper, authsims.RandomGenesisAccounts, nil), + vesting.NewAppModule(app.AuthKeeper, app.BankKeeper), + bank.NewAppModule(appCodec, app.BankKeeper, app.AuthKeeper), + feegrantmodule.NewAppModule(appCodec, app.FeeGrantKeeper, app.interfaceRegistry), + gov.NewAppModule(appCodec, &app.GovKeeper, app.AuthKeeper, app.BankKeeper, app.PoolKeeper), + mint.NewAppModule(appCodec, app.MintKeeper, app.AuthKeeper), + slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AuthKeeper, app.BankKeeper, app.StakingKeeper, app.interfaceRegistry, cometService), + distr.NewAppModule(appCodec, app.DistrKeeper, app.StakingKeeper), + staking.NewAppModule(appCodec, app.StakingKeeper), + upgrade.NewAppModule(app.UpgradeKeeper), + params.NewAppModule(app.ParamsKeeper), + evidence.NewAppModule(appCodec, app.EvidenceKeeper, cometService), + authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.interfaceRegistry), + groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AuthKeeper, app.BankKeeper, app.interfaceRegistry), + nftmodule.NewAppModule(appCodec, app.NFTKeeper, app.AuthKeeper, app.BankKeeper, app.interfaceRegistry), + consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), + protocolpool.NewAppModule(appCodec, app.PoolKeeper, app.AuthKeeper, app.BankKeeper), + epochs.NewAppModule(appCodec, app.EpochsKeeper), // IBC modules - ibcexported.ModuleName: ibc.NewAppModule(appCodec, app.IBCKeeper), - ibctransfertypes.ModuleName: transfer.NewAppModule(appCodec, app.TransferKeeper), - ibcfeetypes.ModuleName: ibcfee.NewAppModule(appCodec, app.IBCFeeKeeper), - icatypes.ModuleName: ica.NewAppModule(appCodec, &app.ICAControllerKeeper, &app.ICAHostKeeper), - mockModule.Name(): mockModule, + ibc.NewAppModule(appCodec, app.IBCKeeper), + transfer.NewAppModule(appCodec, app.TransferKeeper), + ibcfee.NewAppModule(appCodec, app.IBCFeeKeeper), + ica.NewAppModule(appCodec, &app.ICAControllerKeeper, &app.ICAHostKeeper), + mockModule, // IBC light clients - ibctm.ModuleName: ibctm.NewAppModule(tmLightClientModule), - solomachine.ModuleName: solomachine.NewAppModule(smLightClientModule), - }) + ibctm.NewAppModule(tmLightClientModule), + solomachine.NewAppModule(smLightClientModule), + ) app.ModuleManager.RegisterLegacyAminoCodec(legacyAmino) app.ModuleManager.RegisterInterfaces(interfaceRegistry)