From 72991994dd14951eda774fcdb3652314072e3dde Mon Sep 17 00:00:00 2001 From: Marko Date: Wed, 13 Sep 2023 23:40:14 +0200 Subject: [PATCH] chore: cleanup sdk.Context (#17717) --- x/auth/keeper/grpc_query.go | 10 +++------ x/auth/vesting/msg_server.go | 12 +++++------ x/authz/keeper/msg_server.go | 9 +++----- x/authz/module/abci.go | 5 +++-- x/authz/module/module.go | 3 +-- x/bank/keeper/grpc_query.go | 38 ++++++++++----------------------- x/bank/keeper/keeper_test.go | 16 ++++++-------- x/bank/keeper/msg_server.go | 13 ++++------- x/evidence/keeper/grpc_query.go | 5 +---- x/evidence/keeper/msg_server.go | 4 +--- x/feegrant/keeper/grpc_query.go | 4 +--- x/feegrant/keeper/msg_server.go | 9 ++------ x/gov/keeper/msg_server.go | 9 +++----- x/group/module/abci_test.go | 16 ++++++-------- x/slashing/keeper/msg_server.go | 7 ++---- x/upgrade/keeper/grpc_query.go | 18 ++++------------ x/upgrade/keeper/msg_server.go | 3 +-- 17 files changed, 58 insertions(+), 123 deletions(-) diff --git a/x/auth/keeper/grpc_query.go b/x/auth/keeper/grpc_query.go index dba40207e4..f2afb98ae1 100644 --- a/x/auth/keeper/grpc_query.go +++ b/x/auth/keeper/grpc_query.go @@ -92,24 +92,21 @@ func (s queryServer) Account(ctx context.Context, req *types.QueryAccountRequest } // Params returns parameters of auth module -func (s queryServer) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { +func (s queryServer) Params(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } - ctx := sdk.UnwrapSDKContext(c) params := s.k.GetParams(ctx) return &types.QueryParamsResponse{Params: params}, nil } // ModuleAccounts returns all the existing Module Accounts -func (s queryServer) ModuleAccounts(c context.Context, req *types.QueryModuleAccountsRequest) (*types.QueryModuleAccountsResponse, error) { +func (s queryServer) ModuleAccounts(ctx context.Context, req *types.QueryModuleAccountsRequest) (*types.QueryModuleAccountsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } - ctx := sdk.UnwrapSDKContext(c) - // For deterministic output, sort the permAddrs by module name. sortedPermAddrs := make([]string, 0, len(s.k.permAddrs)) for moduleName := range s.k.permAddrs { @@ -135,7 +132,7 @@ func (s queryServer) ModuleAccounts(c context.Context, req *types.QueryModuleAcc } // ModuleAccountByName returns module account by module name -func (s queryServer) ModuleAccountByName(c context.Context, req *types.QueryModuleAccountByNameRequest) (*types.QueryModuleAccountByNameResponse, error) { +func (s queryServer) ModuleAccountByName(ctx context.Context, req *types.QueryModuleAccountByNameRequest) (*types.QueryModuleAccountByNameResponse, error) { if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -144,7 +141,6 @@ func (s queryServer) ModuleAccountByName(c context.Context, req *types.QueryModu return nil, status.Error(codes.InvalidArgument, "module name is empty") } - ctx := sdk.UnwrapSDKContext(c) moduleName := req.Name account := s.k.GetModuleAccount(ctx, moduleName) diff --git a/x/auth/vesting/msg_server.go b/x/auth/vesting/msg_server.go index 3b18a7d54b..ce1214f6a3 100644 --- a/x/auth/vesting/msg_server.go +++ b/x/auth/vesting/msg_server.go @@ -28,7 +28,7 @@ func NewMsgServerImpl(k keeper.AccountKeeper, bk types.BankKeeper) types.MsgServ var _ types.MsgServer = msgServer{} -func (s msgServer) CreateVestingAccount(goCtx context.Context, msg *types.MsgCreateVestingAccount) (*types.MsgCreateVestingAccountResponse, error) { +func (s msgServer) CreateVestingAccount(ctx context.Context, msg *types.MsgCreateVestingAccount) (*types.MsgCreateVestingAccountResponse, error) { from, err := s.AccountKeeper.AddressCodec().StringToBytes(msg.FromAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid 'from' address: %s", err) @@ -47,7 +47,6 @@ func (s msgServer) CreateVestingAccount(goCtx context.Context, msg *types.MsgCre return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "invalid end time") } - ctx := sdk.UnwrapSDKContext(goCtx) if err := s.BankKeeper.IsSendEnabledCoins(ctx, msg.Amount...); err != nil { return nil, err } @@ -71,7 +70,8 @@ func (s msgServer) CreateVestingAccount(goCtx context.Context, msg *types.MsgCre if msg.Delayed { vestingAccount = types.NewDelayedVestingAccountRaw(baseVestingAccount) } else { - vestingAccount = types.NewContinuousVestingAccountRaw(baseVestingAccount, ctx.BlockTime().Unix()) + sdkCtx := sdk.UnwrapSDKContext(ctx) + vestingAccount = types.NewContinuousVestingAccountRaw(baseVestingAccount, sdkCtx.BlockTime().Unix()) } s.AccountKeeper.SetAccount(ctx, vestingAccount) @@ -97,7 +97,7 @@ func (s msgServer) CreateVestingAccount(goCtx context.Context, msg *types.MsgCre return &types.MsgCreateVestingAccountResponse{}, nil } -func (s msgServer) CreatePermanentLockedAccount(goCtx context.Context, msg *types.MsgCreatePermanentLockedAccount) (*types.MsgCreatePermanentLockedAccountResponse, error) { +func (s msgServer) CreatePermanentLockedAccount(ctx context.Context, msg *types.MsgCreatePermanentLockedAccount) (*types.MsgCreatePermanentLockedAccountResponse, error) { from, err := s.AccountKeeper.AddressCodec().StringToBytes(msg.FromAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid 'from' address: %s", err) @@ -112,7 +112,6 @@ func (s msgServer) CreatePermanentLockedAccount(goCtx context.Context, msg *type return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) if err := s.BankKeeper.IsSendEnabledCoins(ctx, msg.Amount...); err != nil { return nil, err } @@ -155,7 +154,7 @@ func (s msgServer) CreatePermanentLockedAccount(goCtx context.Context, msg *type return &types.MsgCreatePermanentLockedAccountResponse{}, nil } -func (s msgServer) CreatePeriodicVestingAccount(goCtx context.Context, msg *types.MsgCreatePeriodicVestingAccount) (*types.MsgCreatePeriodicVestingAccountResponse, error) { +func (s msgServer) CreatePeriodicVestingAccount(ctx context.Context, msg *types.MsgCreatePeriodicVestingAccount) (*types.MsgCreatePeriodicVestingAccountResponse, error) { from, err := s.AccountKeeper.AddressCodec().StringToBytes(msg.FromAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid 'from' address: %s", err) @@ -183,7 +182,6 @@ func (s msgServer) CreatePeriodicVestingAccount(goCtx context.Context, msg *type totalCoins = totalCoins.Add(period.Amount...) } - ctx := sdk.UnwrapSDKContext(goCtx) if acc := s.AccountKeeper.GetAccount(ctx, to); acc != nil { return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "account %s already exists", msg.ToAddress) } diff --git a/x/authz/keeper/msg_server.go b/x/authz/keeper/msg_server.go index b6755a9f84..bb6fbb3397 100644 --- a/x/authz/keeper/msg_server.go +++ b/x/authz/keeper/msg_server.go @@ -15,7 +15,7 @@ import ( var _ authz.MsgServer = Keeper{} // Grant implements the MsgServer.Grant method to create a new grant. -func (k Keeper) Grant(goCtx context.Context, msg *authz.MsgGrant) (*authz.MsgGrantResponse, error) { +func (k Keeper) Grant(ctx context.Context, msg *authz.MsgGrant) (*authz.MsgGrantResponse, error) { if strings.EqualFold(msg.Grantee, msg.Granter) { return nil, authz.ErrGranteeIsGranter } @@ -35,7 +35,6 @@ func (k Keeper) Grant(goCtx context.Context, msg *authz.MsgGrant) (*authz.MsgGra } // create the account if it is not in account state - ctx := sdk.UnwrapSDKContext(goCtx) granteeAcc := k.authKeeper.GetAccount(ctx, grantee) if granteeAcc == nil { granteeAcc = k.authKeeper.NewAccountWithAddress(ctx, grantee) @@ -61,7 +60,7 @@ func (k Keeper) Grant(goCtx context.Context, msg *authz.MsgGrant) (*authz.MsgGra } // Revoke implements the MsgServer.Revoke method. -func (k Keeper) Revoke(goCtx context.Context, msg *authz.MsgRevoke) (*authz.MsgRevokeResponse, error) { +func (k Keeper) Revoke(ctx context.Context, msg *authz.MsgRevoke) (*authz.MsgRevokeResponse, error) { if strings.EqualFold(msg.Grantee, msg.Granter) { return nil, authz.ErrGranteeIsGranter } @@ -80,7 +79,6 @@ func (k Keeper) Revoke(goCtx context.Context, msg *authz.MsgRevoke) (*authz.MsgR return nil, sdkerrors.ErrInvalidRequest.Wrap("missing msg method name") } - ctx := sdk.UnwrapSDKContext(goCtx) if err = k.DeleteGrant(ctx, grantee, granter, msg.MsgTypeUrl); err != nil { return nil, err } @@ -89,8 +87,7 @@ func (k Keeper) Revoke(goCtx context.Context, msg *authz.MsgRevoke) (*authz.MsgR } // Exec implements the MsgServer.Exec method. -func (k Keeper) Exec(goCtx context.Context, msg *authz.MsgExec) (*authz.MsgExecResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) Exec(ctx context.Context, msg *authz.MsgExec) (*authz.MsgExecResponse, error) { if msg.Grantee == "" { return nil, errors.New("empty address string is not allowed") } diff --git a/x/authz/module/abci.go b/x/authz/module/abci.go index fc405bb8f0..c7cc2a5276 100644 --- a/x/authz/module/abci.go +++ b/x/authz/module/abci.go @@ -1,12 +1,13 @@ package authz import ( - sdk "github.com/cosmos/cosmos-sdk/types" + "context" + "github.com/cosmos/cosmos-sdk/x/authz/keeper" ) // BeginBlocker is called at the beginning of every block -func BeginBlocker(ctx sdk.Context, keeper keeper.Keeper) error { +func BeginBlocker(ctx context.Context, keeper keeper.Keeper) error { // delete all the mature grants return keeper.DequeueAndDeleteExpiredGrants(ctx) } diff --git a/x/authz/module/module.go b/x/authz/module/module.go index 248a75b858..bba3d561d8 100644 --- a/x/authz/module/module.go +++ b/x/authz/module/module.go @@ -146,8 +146,7 @@ func (AppModule) ConsensusVersion() uint64 { return 2 } // BeginBlock returns the begin blocker for the authz module. func (am AppModule) BeginBlock(ctx context.Context) error { - c := sdk.UnwrapSDKContext(ctx) - return BeginBlocker(c, am.keeper) + return BeginBlocker(ctx, am.keeper) } func init() { diff --git a/x/bank/keeper/grpc_query.go b/x/bank/keeper/grpc_query.go index 4de758843c..4b238e6607 100644 --- a/x/bank/keeper/grpc_query.go +++ b/x/bank/keeper/grpc_query.go @@ -37,13 +37,12 @@ func (k BaseKeeper) Balance(ctx context.Context, req *types.QueryBalanceRequest) return nil, status.Error(codes.InvalidArgument, err.Error()) } - sdkCtx := sdk.UnwrapSDKContext(ctx) address, err := k.ak.AddressCodec().StringToBytes(req.Address) if err != nil { return nil, status.Errorf(codes.InvalidArgument, "invalid address: %s", err.Error()) } - balance := k.GetBalance(sdkCtx, address, req.Denom) + balance := k.GetBalance(ctx, address, req.Denom) return &types.QueryBalanceResponse{Balance: &balance}, nil } @@ -59,14 +58,13 @@ func (k BaseKeeper) AllBalances(ctx context.Context, req *types.QueryAllBalances return nil, status.Errorf(codes.InvalidArgument, "invalid address: %s", err.Error()) } - sdkCtx := sdk.UnwrapSDKContext(ctx) balances, pageRes, err := query.CollectionPaginate( ctx, k.Balances, req.Pagination, func(key collections.Pair[sdk.AccAddress, string], value math.Int) (sdk.Coin, error) { if req.ResolveDenom { - if metadata, ok := k.GetDenomMetaData(sdkCtx, key.K2()); ok { + if metadata, ok := k.GetDenomMetaData(ctx, key.K2()); ok { return sdk.NewCoin(metadata.Display, value), nil } } @@ -93,8 +91,6 @@ func (k BaseKeeper) SpendableBalances(ctx context.Context, req *types.QuerySpend return nil, status.Errorf(codes.InvalidArgument, "invalid address: %s", err.Error()) } - sdkCtx := sdk.UnwrapSDKContext(ctx) - zeroAmt := math.ZeroInt() balances, pageRes, err := query.CollectionPaginate(ctx, k.Balances, req.Pagination, func(key collections.Pair[sdk.AccAddress, string], _ math.Int) (coin sdk.Coin, err error) { @@ -105,7 +101,7 @@ func (k BaseKeeper) SpendableBalances(ctx context.Context, req *types.QuerySpend } result := sdk.NewCoins() - spendable := k.SpendableCoins(sdkCtx, addr) + spendable := k.SpendableCoins(ctx, addr) for _, c := range balances { result = append(result, sdk.NewCoin(c.Denom, spendable.AmountOf(c.Denom))) @@ -130,17 +126,14 @@ func (k BaseKeeper) SpendableBalanceByDenom(ctx context.Context, req *types.Quer return nil, status.Error(codes.InvalidArgument, err.Error()) } - sdkCtx := sdk.UnwrapSDKContext(ctx) - - spendable := k.SpendableCoin(sdkCtx, addr, req.Denom) + spendable := k.SpendableCoin(ctx, addr, req.Denom) return &types.QuerySpendableBalanceByDenomResponse{Balance: &spendable}, nil } // TotalSupply implements the Query/TotalSupply gRPC method func (k BaseKeeper) TotalSupply(ctx context.Context, req *types.QueryTotalSupplyRequest) (*types.QueryTotalSupplyResponse, error) { - sdkCtx := sdk.UnwrapSDKContext(ctx) - totalSupply, pageRes, err := k.GetPaginatedTotalSupply(sdkCtx, req.Pagination) + totalSupply, pageRes, err := k.GetPaginatedTotalSupply(ctx, req.Pagination) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } @@ -149,7 +142,7 @@ func (k BaseKeeper) TotalSupply(ctx context.Context, req *types.QueryTotalSupply } // SupplyOf implements the Query/SupplyOf gRPC method -func (k BaseKeeper) SupplyOf(c context.Context, req *types.QuerySupplyOfRequest) (*types.QuerySupplyOfResponse, error) { +func (k BaseKeeper) SupplyOf(ctx context.Context, req *types.QuerySupplyOfRequest) (*types.QuerySupplyOfResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -158,7 +151,6 @@ func (k BaseKeeper) SupplyOf(c context.Context, req *types.QuerySupplyOfRequest) return nil, status.Error(codes.InvalidArgument, err.Error()) } - ctx := sdk.UnwrapSDKContext(c) supply := k.GetSupply(ctx, req.Denom) return &types.QuerySupplyOfResponse{Amount: sdk.NewCoin(req.Denom, supply.Amount)}, nil @@ -170,8 +162,7 @@ func (k BaseKeeper) Params(ctx context.Context, req *types.QueryParamsRequest) ( return nil, status.Errorf(codes.InvalidArgument, "empty request") } - sdkCtx := sdk.UnwrapSDKContext(ctx) - params := k.GetParams(sdkCtx) + params := k.GetParams(ctx) return &types.QueryParamsResponse{Params: params}, nil } @@ -203,7 +194,7 @@ func (k BaseKeeper) DenomsMetadata(c context.Context, req *types.QueryDenomsMeta } // DenomMetadata implements Query/DenomMetadata gRPC method. -func (k BaseKeeper) DenomMetadata(c context.Context, req *types.QueryDenomMetadataRequest) (*types.QueryDenomMetadataResponse, error) { +func (k BaseKeeper) DenomMetadata(ctx context.Context, req *types.QueryDenomMetadataRequest) (*types.QueryDenomMetadataResponse, error) { if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -212,8 +203,6 @@ func (k BaseKeeper) DenomMetadata(c context.Context, req *types.QueryDenomMetada return nil, status.Error(codes.InvalidArgument, err.Error()) } - ctx := sdk.UnwrapSDKContext(c) - metadata, found := k.GetDenomMetaData(ctx, req.Denom) if !found { return nil, status.Errorf(codes.NotFound, "client metadata for denom %s", req.Denom) @@ -225,7 +214,7 @@ func (k BaseKeeper) DenomMetadata(c context.Context, req *types.QueryDenomMetada } // DenomMetadataByQueryString is identical to DenomMetadata query, but receives request via query string. -func (k BaseKeeper) DenomMetadataByQueryString(c context.Context, req *types.QueryDenomMetadataByQueryStringRequest) (*types.QueryDenomMetadataByQueryStringResponse, error) { +func (k BaseKeeper) DenomMetadataByQueryString(ctx context.Context, req *types.QueryDenomMetadataByQueryStringRequest) (*types.QueryDenomMetadataByQueryStringResponse, error) { if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -234,8 +223,6 @@ func (k BaseKeeper) DenomMetadataByQueryString(c context.Context, req *types.Que return nil, status.Error(codes.InvalidArgument, err.Error()) } - ctx := sdk.UnwrapSDKContext(c) - metadata, found := k.GetDenomMetaData(ctx, req.Denom) if !found { return nil, status.Errorf(codes.NotFound, "client metadata for denom %s", req.Denom) @@ -249,7 +236,7 @@ func (k BaseKeeper) DenomMetadataByQueryString(c context.Context, req *types.Que // DenomMetadataV2 is identical to DenomMetadata but receives protoreflect types instead of gogo types. It exists to // resolve a cyclic dependency existent between x/auth and x/bank, so that x/auth may call this keeper without // depending on x/bank. -func (k BaseKeeper) DenomMetadataV2(c context.Context, req *v1beta1.QueryDenomMetadataRequest) (*v1beta1.QueryDenomMetadataResponse, error) { +func (k BaseKeeper) DenomMetadataV2(ctx context.Context, req *v1beta1.QueryDenomMetadataRequest) (*v1beta1.QueryDenomMetadataResponse, error) { if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -258,8 +245,6 @@ func (k BaseKeeper) DenomMetadataV2(c context.Context, req *v1beta1.QueryDenomMe return nil, status.Error(codes.InvalidArgument, err.Error()) } - ctx := sdk.UnwrapSDKContext(c) - metadata, found := k.GetDenomMetaData(ctx, req.Denom) if !found { return nil, status.Errorf(codes.NotFound, "client metadata for denom %s", req.Denom) @@ -321,11 +306,10 @@ func (k BaseKeeper) DenomOwners( return &types.QueryDenomOwnersResponse{DenomOwners: denomOwners, Pagination: pageRes}, nil } -func (k BaseKeeper) SendEnabled(goCtx context.Context, req *types.QuerySendEnabledRequest) (*types.QuerySendEnabledResponse, error) { +func (k BaseKeeper) SendEnabled(ctx context.Context, req *types.QuerySendEnabledRequest) (*types.QuerySendEnabledResponse, error) { if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } - ctx := sdk.UnwrapSDKContext(goCtx) resp := &types.QuerySendEnabledResponse{} if len(req.Denoms) > 0 { for _, denom := range req.Denoms { diff --git a/x/bank/keeper/keeper_test.go b/x/bank/keeper/keeper_test.go index 608dc8133f..b817db7e76 100644 --- a/x/bank/keeper/keeper_test.go +++ b/x/bank/keeper/keeper_test.go @@ -435,13 +435,12 @@ func (suite *KeeperTestSuite) TestSupply_DelegateUndelegateCoins() { suite.mockDelegateCoinsFromAccountToModule(baseAcc, burnerAcc) - sdkCtx := sdk.UnwrapSDKContext(ctx) - require.NoError(keeper.DelegateCoinsFromAccountToModule(sdkCtx, baseAcc.GetAddress(), authtypes.Burner, initCoins)) + require.NoError(keeper.DelegateCoinsFromAccountToModule(ctx, baseAcc.GetAddress(), authtypes.Burner, initCoins)) require.Equal(sdk.NewCoins(), keeper.GetAllBalances(ctx, baseAcc.GetAddress())) require.Equal(initCoins, keeper.GetAllBalances(ctx, burnerAcc.GetAddress())) suite.mockUndelegateCoinsFromModuleToAccount(burnerAcc, baseAcc) - require.NoError(keeper.UndelegateCoinsFromModuleToAccount(sdkCtx, authtypes.Burner, baseAcc.GetAddress(), initCoins)) + require.NoError(keeper.UndelegateCoinsFromModuleToAccount(ctx, authtypes.Burner, baseAcc.GetAddress(), initCoins)) require.Equal(sdk.NewCoins(), keeper.GetAllBalances(ctx, burnerAcc.GetAddress())) require.Equal(initCoins, keeper.GetAllBalances(ctx, baseAcc.GetAddress())) } @@ -497,8 +496,7 @@ func (suite *KeeperTestSuite) TestSupply_SendCoins() { suite.mockSendCoinsFromAccountToModule(baseAcc, burnerAcc) - sdkCtx := sdk.UnwrapSDKContext(ctx) - require.NoError(keeper.SendCoinsFromAccountToModule(sdkCtx, baseAcc.GetAddress(), authtypes.Burner, initCoins)) + require.NoError(keeper.SendCoinsFromAccountToModule(ctx, baseAcc.GetAddress(), authtypes.Burner, initCoins)) require.Equal(sdk.NewCoins(), keeper.GetAllBalances(ctx, baseAcc.GetAddress())) require.Equal(initCoins, keeper.GetAllBalances(ctx, burnerAcc.GetAddress())) } @@ -1341,16 +1339,15 @@ func (suite *KeeperTestSuite) TestHasBalance() { } func (suite *KeeperTestSuite) TestMsgSendEvents() { - ctx := sdk.UnwrapSDKContext(suite.ctx) require := suite.Require() acc0 := authtypes.NewBaseAccountWithAddress(accAddrs[0]) newCoins := sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)) suite.mockFundAccount(accAddrs[0]) - require.NoError(banktestutil.FundAccount(ctx, suite.bankKeeper, accAddrs[0], newCoins)) + require.NoError(banktestutil.FundAccount(suite.ctx, suite.bankKeeper, accAddrs[0], newCoins)) - suite.mockSendCoins(ctx, acc0, accAddrs[1]) - require.NoError(suite.bankKeeper.SendCoins(ctx, accAddrs[0], accAddrs[1], newCoins)) + suite.mockSendCoins(suite.ctx, acc0, accAddrs[1]) + require.NoError(suite.bankKeeper.SendCoins(suite.ctx, accAddrs[0], accAddrs[1], newCoins)) event1 := sdk.Event{ Type: banktypes.EventTypeTransfer, Attributes: []abci.EventAttribute{}, @@ -1368,6 +1365,7 @@ func (suite *KeeperTestSuite) TestMsgSendEvents() { abci.EventAttribute{Key: sdk.AttributeKeyAmount, Value: newCoins.String()}, ) + ctx := sdk.UnwrapSDKContext(suite.ctx) // events are shifted due to the funding account events events := ctx.EventManager().ABCIEvents() require.Equal(8, len(events)) diff --git a/x/bank/keeper/msg_server.go b/x/bank/keeper/msg_server.go index 6aef4e8fc0..a0b9b17d2f 100644 --- a/x/bank/keeper/msg_server.go +++ b/x/bank/keeper/msg_server.go @@ -26,7 +26,7 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer { return &msgServer{Keeper: keeper} } -func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error) { +func (k msgServer) Send(ctx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error) { var ( from, to []byte err error @@ -53,7 +53,6 @@ func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSe return nil, errorsmod.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String()) } - ctx := sdk.UnwrapSDKContext(goCtx) if err := k.IsSendEnabledCoins(ctx, msg.Amount...); err != nil { return nil, err } @@ -82,7 +81,7 @@ func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSe return &types.MsgSendResponse{}, nil } -func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (*types.MsgMultiSendResponse, error) { +func (k msgServer) MultiSend(ctx context.Context, msg *types.MsgMultiSend) (*types.MsgMultiSendResponse, error) { if len(msg.Inputs) == 0 { return nil, types.ErrNoInputs } @@ -99,8 +98,6 @@ func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (*t return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) - // NOTE: totalIn == totalOut should already have been checked for _, in := range msg.Inputs { if err := k.IsSendEnabledCoins(ctx, in.Coins...); err != nil { @@ -131,7 +128,7 @@ func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (*t return &types.MsgMultiSendResponse{}, nil } -func (k msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { +func (k msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { if k.GetAuthority() != req.Authority { return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), req.Authority) } @@ -140,7 +137,6 @@ func (k msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParam return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) if err := k.SetParams(ctx, req.Params); err != nil { return nil, err } @@ -148,7 +144,7 @@ func (k msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParam return &types.MsgUpdateParamsResponse{}, nil } -func (k msgServer) SetSendEnabled(goCtx context.Context, msg *types.MsgSetSendEnabled) (*types.MsgSetSendEnabledResponse, error) { +func (k msgServer) SetSendEnabled(ctx context.Context, msg *types.MsgSetSendEnabled) (*types.MsgSetSendEnabledResponse, error) { if k.GetAuthority() != msg.Authority { return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), msg.Authority) } @@ -172,7 +168,6 @@ func (k msgServer) SetSendEnabled(goCtx context.Context, msg *types.MsgSetSendEn } } - ctx := sdk.UnwrapSDKContext(goCtx) if len(msg.SendEnabled) > 0 { k.SetAllSendEnabled(ctx, msg.SendEnabled) } diff --git a/x/evidence/keeper/grpc_query.go b/x/evidence/keeper/grpc_query.go index 22d2be5c24..3ac40ca1b1 100644 --- a/x/evidence/keeper/grpc_query.go +++ b/x/evidence/keeper/grpc_query.go @@ -13,7 +13,6 @@ import ( "cosmossdk.io/x/evidence/types" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" ) @@ -28,7 +27,7 @@ func NewQuerier(keeper *Keeper) Querier { } // Evidence implements the Query/Evidence gRPC method -func (k Querier) Evidence(c context.Context, req *types.QueryEvidenceRequest) (*types.QueryEvidenceResponse, error) { +func (k Querier) Evidence(ctx context.Context, req *types.QueryEvidenceRequest) (*types.QueryEvidenceResponse, error) { if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -37,8 +36,6 @@ func (k Querier) Evidence(c context.Context, req *types.QueryEvidenceRequest) (* return nil, status.Errorf(codes.InvalidArgument, "invalid request; hash is empty") } - ctx := sdk.UnwrapSDKContext(c) - decodedHash, err := hex.DecodeString(req.Hash) if err != nil { return nil, fmt.Errorf("invalid evidence hash: %w", err) diff --git a/x/evidence/keeper/msg_server.go b/x/evidence/keeper/msg_server.go index fad39ef331..5a982fd958 100644 --- a/x/evidence/keeper/msg_server.go +++ b/x/evidence/keeper/msg_server.go @@ -6,7 +6,6 @@ import ( "cosmossdk.io/errors" "cosmossdk.io/x/evidence/types" - sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -23,7 +22,7 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer { var _ types.MsgServer = msgServer{} // SubmitEvidence implements the MsgServer.SubmitEvidence method. -func (ms msgServer) SubmitEvidence(goCtx context.Context, msg *types.MsgSubmitEvidence) (*types.MsgSubmitEvidenceResponse, error) { +func (ms msgServer) SubmitEvidence(ctx context.Context, msg *types.MsgSubmitEvidence) (*types.MsgSubmitEvidenceResponse, error) { if _, err := ms.addressCodec.StringToBytes(msg.Submitter); err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid submitter address: %s", err) } @@ -37,7 +36,6 @@ func (ms msgServer) SubmitEvidence(goCtx context.Context, msg *types.MsgSubmitEv return nil, errors.Wrapf(types.ErrInvalidEvidence, "failed basic validation: %s", err) } - ctx := sdk.UnwrapSDKContext(goCtx) if err := ms.Keeper.SubmitEvidence(ctx, evidence); err != nil { return nil, err } diff --git a/x/feegrant/keeper/grpc_query.go b/x/feegrant/keeper/grpc_query.go index 2250d84140..0bc3db1839 100644 --- a/x/feegrant/keeper/grpc_query.go +++ b/x/feegrant/keeper/grpc_query.go @@ -18,7 +18,7 @@ import ( var _ feegrant.QueryServer = Keeper{} // Allowance returns granted allowance to the grantee by the granter. -func (q Keeper) Allowance(c context.Context, req *feegrant.QueryAllowanceRequest) (*feegrant.QueryAllowanceResponse, error) { +func (q Keeper) Allowance(ctx context.Context, req *feegrant.QueryAllowanceRequest) (*feegrant.QueryAllowanceResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -33,8 +33,6 @@ func (q Keeper) Allowance(c context.Context, req *feegrant.QueryAllowanceRequest return nil, err } - ctx := sdk.UnwrapSDKContext(c) - feeAllowance, err := q.GetAllowance(ctx, granterAddr, granteeAddr) if err != nil { return nil, status.Errorf(codes.Internal, err.Error()) diff --git a/x/feegrant/keeper/msg_server.go b/x/feegrant/keeper/msg_server.go index 1b15208da6..d700d6667c 100644 --- a/x/feegrant/keeper/msg_server.go +++ b/x/feegrant/keeper/msg_server.go @@ -7,7 +7,6 @@ import ( errorsmod "cosmossdk.io/errors" "cosmossdk.io/x/feegrant" - sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -26,13 +25,11 @@ func NewMsgServerImpl(k Keeper) feegrant.MsgServer { var _ feegrant.MsgServer = msgServer{} // GrantAllowance grants an allowance from the granter's funds to be used by the grantee. -func (k msgServer) GrantAllowance(goCtx context.Context, msg *feegrant.MsgGrantAllowance) (*feegrant.MsgGrantAllowanceResponse, error) { +func (k msgServer) GrantAllowance(ctx context.Context, msg *feegrant.MsgGrantAllowance) (*feegrant.MsgGrantAllowanceResponse, error) { if strings.EqualFold(msg.Grantee, msg.Granter) { return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "cannot self-grant fee authorization") } - ctx := sdk.UnwrapSDKContext(goCtx) - grantee, err := k.authKeeper.AddressCodec().StringToBytes(msg.Grantee) if err != nil { return nil, err @@ -65,13 +62,11 @@ func (k msgServer) GrantAllowance(goCtx context.Context, msg *feegrant.MsgGrantA } // RevokeAllowance revokes a fee allowance between a granter and grantee. -func (k msgServer) RevokeAllowance(goCtx context.Context, msg *feegrant.MsgRevokeAllowance) (*feegrant.MsgRevokeAllowanceResponse, error) { +func (k msgServer) RevokeAllowance(ctx context.Context, msg *feegrant.MsgRevokeAllowance) (*feegrant.MsgRevokeAllowanceResponse, error) { if msg.Grantee == msg.Granter { return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "addresses must be different") } - ctx := sdk.UnwrapSDKContext(goCtx) - grantee, err := k.authKeeper.AddressCodec().StringToBytes(msg.Grantee) if err != nil { return nil, err diff --git a/x/gov/keeper/msg_server.go b/x/gov/keeper/msg_server.go index c27adfc757..967dd77298 100644 --- a/x/gov/keeper/msg_server.go +++ b/x/gov/keeper/msg_server.go @@ -177,7 +177,7 @@ func (k msgServer) ExecLegacyContent(goCtx context.Context, msg *v1.MsgExecLegac } // Vote implements the MsgServer.Vote method. -func (k msgServer) Vote(goCtx context.Context, msg *v1.MsgVote) (*v1.MsgVoteResponse, error) { +func (k msgServer) Vote(ctx context.Context, msg *v1.MsgVote) (*v1.MsgVoteResponse, error) { accAddr, err := k.authKeeper.AddressCodec().StringToBytes(msg.Voter) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid voter address: %s", err) @@ -187,7 +187,6 @@ func (k msgServer) Vote(goCtx context.Context, msg *v1.MsgVote) (*v1.MsgVoteResp return nil, errors.Wrap(govtypes.ErrInvalidVote, msg.Option.String()) } - ctx := sdk.UnwrapSDKContext(goCtx) err = k.Keeper.AddVote(ctx, msg.ProposalId, accAddr, v1.NewNonSplitVoteOption(msg.Option), msg.Metadata) if err != nil { return nil, err @@ -205,7 +204,7 @@ func (k msgServer) Vote(goCtx context.Context, msg *v1.MsgVote) (*v1.MsgVoteResp } // VoteWeighted implements the MsgServer.VoteWeighted method. -func (k msgServer) VoteWeighted(goCtx context.Context, msg *v1.MsgVoteWeighted) (*v1.MsgVoteWeightedResponse, error) { +func (k msgServer) VoteWeighted(ctx context.Context, msg *v1.MsgVoteWeighted) (*v1.MsgVoteWeightedResponse, error) { accAddr, accErr := k.authKeeper.AddressCodec().StringToBytes(msg.Voter) if accErr != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid voter address: %s", accErr) @@ -240,7 +239,6 @@ func (k msgServer) VoteWeighted(goCtx context.Context, msg *v1.MsgVoteWeighted) return nil, errors.Wrap(govtypes.ErrInvalidVote, "total weight lower than 1.00") } - ctx := sdk.UnwrapSDKContext(goCtx) err := k.Keeper.AddVote(ctx, msg.ProposalId, accAddr, msg.Options, msg.Metadata) if err != nil { return nil, err @@ -295,7 +293,7 @@ func (k msgServer) Deposit(goCtx context.Context, msg *v1.MsgDeposit) (*v1.MsgDe } // UpdateParams implements the MsgServer.UpdateParams method. -func (k msgServer) UpdateParams(goCtx context.Context, msg *v1.MsgUpdateParams) (*v1.MsgUpdateParamsResponse, error) { +func (k msgServer) UpdateParams(ctx context.Context, msg *v1.MsgUpdateParams) (*v1.MsgUpdateParamsResponse, error) { if k.authority != msg.Authority { return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.authority, msg.Authority) } @@ -304,7 +302,6 @@ func (k msgServer) UpdateParams(goCtx context.Context, msg *v1.MsgUpdateParams) return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) if err := k.Params.Set(ctx, msg.Params); err != nil { return nil, err } diff --git a/x/group/module/abci_test.go b/x/group/module/abci_test.go index 79a7829a48..15cf96f437 100644 --- a/x/group/module/abci_test.go +++ b/x/group/module/abci_test.go @@ -169,8 +169,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { s.Require().NoError(err) _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3.String(), ProposalId: pID}) s.Require().NoError(err) - sdkCtx := sdk.UnwrapSDKContext(ctx) - s.Require().NoError(testutil.FundAccount(sdkCtx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) + s.Require().NoError(testutil.FundAccount(ctx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) return pID }, @@ -185,8 +184,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { s.Require().NoError(err) _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3.String(), ProposalId: pID}) s.Require().NoError(err) - sdkCtx := sdk.UnwrapSDKContext(ctx) - s.Require().NoError(testutil.FundAccount(sdkCtx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) + s.Require().NoError(testutil.FundAccount(ctx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) return pID }, @@ -201,8 +199,8 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { s.Require().NoError(err) _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3.String(), ProposalId: pID}) s.Require().NoError(err) - sdkCtx := sdk.UnwrapSDKContext(ctx) - s.Require().NoError(testutil.FundAccount(sdkCtx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) + + s.Require().NoError(testutil.FundAccount(ctx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) return pID }, @@ -216,8 +214,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { s.Require().NoError(err) _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3.String(), ProposalId: pID}) s.Require().NoError(err) - sdkCtx := sdk.UnwrapSDKContext(ctx) - s.Require().NoError(testutil.FundAccount(sdkCtx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) + s.Require().NoError(testutil.FundAccount(ctx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) return pID }, @@ -236,8 +233,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() { s.Require().NoError(err) _, err = s.groupKeeper.Exec(ctx, &group.MsgExec{Executor: addr3.String(), ProposalId: pID}) s.Require().Error(err) // since proposal with status Aborted cannot be executed - sdkCtx := sdk.UnwrapSDKContext(ctx) - s.Require().NoError(testutil.FundAccount(sdkCtx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) + s.Require().NoError(testutil.FundAccount(ctx, s.bankKeeper, groupPolicyAddr, sdk.Coins{sdk.NewInt64Coin("test", 10002)})) return pID }, diff --git a/x/slashing/keeper/msg_server.go b/x/slashing/keeper/msg_server.go index d2cc181e73..f09a0d0b70 100644 --- a/x/slashing/keeper/msg_server.go +++ b/x/slashing/keeper/msg_server.go @@ -5,7 +5,6 @@ import ( "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/cosmos/cosmos-sdk/x/slashing/types" @@ -25,7 +24,7 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer { // UpdateParams implements MsgServer.UpdateParams method. // It defines a method to update the x/slashing module parameters. -func (k msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { +func (k msgServer) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { if k.authority != msg.Authority { return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.authority, msg.Authority) } @@ -34,7 +33,6 @@ func (k msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParam return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) if err := k.Params.Set(ctx, msg.Params); err != nil { return nil, err } @@ -45,13 +43,12 @@ func (k msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParam // Unjail implements MsgServer.Unjail method. // Validators must submit a transaction to unjail itself after // having been jailed (and thus unbonded) for downtime -func (k msgServer) Unjail(goCtx context.Context, msg *types.MsgUnjail) (*types.MsgUnjailResponse, error) { +func (k msgServer) Unjail(ctx context.Context, msg *types.MsgUnjail) (*types.MsgUnjailResponse, error) { valAddr, err := k.sk.ValidatorAddressCodec().StringToBytes(msg.ValidatorAddr) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("validator input address: %s", err) } - ctx := sdk.UnwrapSDKContext(goCtx) if err := k.Keeper.Unjail(ctx, valAddr); err != nil { return nil, err } diff --git a/x/upgrade/keeper/grpc_query.go b/x/upgrade/keeper/grpc_query.go index d3502372e7..4ddaef68f3 100644 --- a/x/upgrade/keeper/grpc_query.go +++ b/x/upgrade/keeper/grpc_query.go @@ -6,16 +6,12 @@ import ( errorsmod "cosmossdk.io/errors" "cosmossdk.io/x/upgrade/types" - - sdk "github.com/cosmos/cosmos-sdk/types" ) var _ types.QueryServer = Keeper{} // CurrentPlan implements the Query/CurrentPlan gRPC method -func (k Keeper) CurrentPlan(c context.Context, req *types.QueryCurrentPlanRequest) (*types.QueryCurrentPlanResponse, error) { - ctx := sdk.UnwrapSDKContext(c) - +func (k Keeper) CurrentPlan(ctx context.Context, req *types.QueryCurrentPlanRequest) (*types.QueryCurrentPlanResponse, error) { plan, err := k.GetUpgradePlan(ctx) if err != nil { if errors.Is(err, types.ErrNoUpgradePlanFound) { @@ -29,18 +25,14 @@ func (k Keeper) CurrentPlan(c context.Context, req *types.QueryCurrentPlanReques } // AppliedPlan implements the Query/AppliedPlan gRPC method -func (k Keeper) AppliedPlan(c context.Context, req *types.QueryAppliedPlanRequest) (*types.QueryAppliedPlanResponse, error) { - ctx := sdk.UnwrapSDKContext(c) - +func (k Keeper) AppliedPlan(ctx context.Context, req *types.QueryAppliedPlanRequest) (*types.QueryAppliedPlanResponse, error) { applied, err := k.GetDoneHeight(ctx, req.Name) return &types.QueryAppliedPlanResponse{Height: applied}, err } // UpgradedConsensusState implements the Query/UpgradedConsensusState gRPC method -func (k Keeper) UpgradedConsensusState(c context.Context, req *types.QueryUpgradedConsensusStateRequest) (*types.QueryUpgradedConsensusStateResponse, error) { //nolint:staticcheck // we're using a deprecated call for compatibility - ctx := sdk.UnwrapSDKContext(c) - +func (k Keeper) UpgradedConsensusState(ctx context.Context, req *types.QueryUpgradedConsensusStateRequest) (*types.QueryUpgradedConsensusStateResponse, error) { //nolint:staticcheck // we're using a deprecated call for compatibility consState, err := k.GetUpgradedConsensusState(ctx, req.LastHeight) if err != nil { if errors.Is(err, types.ErrNoUpgradedConsensusStateFound) { @@ -56,9 +48,7 @@ func (k Keeper) UpgradedConsensusState(c context.Context, req *types.QueryUpgrad } // ModuleVersions implements the Query/QueryModuleVersions gRPC method -func (k Keeper) ModuleVersions(c context.Context, req *types.QueryModuleVersionsRequest) (*types.QueryModuleVersionsResponse, error) { - ctx := sdk.UnwrapSDKContext(c) - +func (k Keeper) ModuleVersions(ctx context.Context, req *types.QueryModuleVersionsRequest) (*types.QueryModuleVersionsResponse, error) { // check if a specific module was requested if len(req.ModuleName) > 0 { version, err := k.getModuleVersion(ctx, req.ModuleName) diff --git a/x/upgrade/keeper/msg_server.go b/x/upgrade/keeper/msg_server.go index 8b60ee44fe..9cb8256324 100644 --- a/x/upgrade/keeper/msg_server.go +++ b/x/upgrade/keeper/msg_server.go @@ -27,7 +27,7 @@ var ( ) // SoftwareUpgrade implements the Msg/SoftwareUpgrade Msg service. -func (k msgServer) SoftwareUpgrade(goCtx context.Context, msg *types.MsgSoftwareUpgrade) (*types.MsgSoftwareUpgradeResponse, error) { +func (k msgServer) SoftwareUpgrade(ctx context.Context, msg *types.MsgSoftwareUpgrade) (*types.MsgSoftwareUpgradeResponse, error) { if k.authority != msg.Authority { return nil, errors.Wrapf(types.ErrInvalidSigner, "expected %s got %s", k.authority, msg.Authority) } @@ -36,7 +36,6 @@ func (k msgServer) SoftwareUpgrade(goCtx context.Context, msg *types.MsgSoftware return nil, errors.Wrap(err, "plan") } - ctx := sdk.UnwrapSDKContext(goCtx) err := k.ScheduleUpgrade(ctx, msg.Plan) if err != nil { return nil, err