From ecdc68a26bd4bd5482bb0ffe72999bdb74dcbd94 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 14 Jun 2022 11:36:55 -0400 Subject: [PATCH] fix: update vesting message server to handle base accounts correctly (backport #12190) (#12247) --- CHANGELOG.md | 1 + x/auth/vesting/msg_server.go | 50 +++++++++++------------------------- 2 files changed, 16 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c9777cc6c4f..7b40685a0800 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes +* (vesting) [#12190](https://github.com/cosmos/cosmos-sdk/pull/12190) Replace https://github.com/cosmos/cosmos-sdk/pull/12190 to use `NewBaseAccountWithAddress` in all vesting account message handlers. * (cli) [#12127](https://github.com/cosmos/cosmos-sdk/pull/12127) Fix the CLI not always taking into account `--fee-payer` and `--fee-granter` flags. * (migrations) [#12028](https://github.com/cosmos/cosmos-sdk/pull/12028) Fix v0.45->v0.46 in-place store migrations. * (baseapp) [#12089](https://github.com/cosmos/cosmos-sdk/pull/12089) Include antehandler and runMsgs events in SimulateTx. diff --git a/x/auth/vesting/msg_server.go b/x/auth/vesting/msg_server.go index e3fd521a62f6..afcd2681e1bb 100644 --- a/x/auth/vesting/msg_server.go +++ b/x/auth/vesting/msg_server.go @@ -3,14 +3,13 @@ package vesting import ( "context" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/armon/go-metrics" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/keeper" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" ) @@ -19,10 +18,6 @@ type msgServer struct { types.BankKeeper } -type baseAccountGetter interface { - GetBaseAccount() *authtypes.BaseAccount -} - // NewMsgServerImpl returns an implementation of the vesting MsgServer interface, // wrapping the corresponding AccountKeeper and BankKeeper. func NewMsgServerImpl(k keeper.AccountKeeper, bk types.BankKeeper) types.MsgServer { @@ -57,28 +52,18 @@ func (s msgServer) CreateVestingAccount(goCtx context.Context, msg *types.MsgCre return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "account %s already exists", msg.ToAddress) } - account := ak.NewAccountWithAddress(ctx, to) - baseAccount, ok := account.(*authtypes.BaseAccount) - if !ok { - if getter, ok := account.(baseAccountGetter); ok { - baseAccount = getter.GetBaseAccount() - } - } - if baseAccount == nil { - return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid account type; expected: BaseAccount, got: %T", baseAccount) - } - + baseAccount := authtypes.NewBaseAccountWithAddress(to) + baseAccount = ak.NewAccount(ctx, baseAccount).(*authtypes.BaseAccount) baseVestingAccount := types.NewBaseVestingAccount(baseAccount, msg.Amount.Sort(), msg.EndTime) - var acc authtypes.AccountI - + var vestingAccount authtypes.AccountI if msg.Delayed { - acc = types.NewDelayedVestingAccountRaw(baseVestingAccount) + vestingAccount = types.NewDelayedVestingAccountRaw(baseVestingAccount) } else { - acc = types.NewContinuousVestingAccountRaw(baseVestingAccount, ctx.BlockTime().Unix()) + vestingAccount = types.NewContinuousVestingAccountRaw(baseVestingAccount, ctx.BlockTime().Unix()) } - ak.SetAccount(ctx, acc) + ak.SetAccount(ctx, vestingAccount) defer func() { telemetry.IncrCounter(1, "new", "account") @@ -135,16 +120,11 @@ func (s msgServer) CreatePermanentLockedAccount(goCtx context.Context, msg *type return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "account %s already exists", msg.ToAddress) } - baseAccountI := ak.NewAccountWithAddress(ctx, to) + baseAccount := authtypes.NewBaseAccountWithAddress(to) + baseAccount = ak.NewAccount(ctx, baseAccount).(*authtypes.BaseAccount) + vestingAccount := types.NewPermanentLockedAccount(baseAccount, msg.Amount) - baseAcc, ok := baseAccountI.(*authtypes.BaseAccount) - if !ok { - return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid account type; expected: BaseAccount, got: %T", baseAccountI) - } - - var acc authtypes.AccountI = types.NewPermanentLockedAccount(baseAcc, msg.Amount) - - ak.SetAccount(ctx, acc) + ak.SetAccount(ctx, vestingAccount) defer func() { telemetry.IncrCounter(1, "new", "account") @@ -200,11 +180,11 @@ func (s msgServer) CreatePeriodicVestingAccount(goCtx context.Context, msg *type totalCoins = totalCoins.Add(period.Amount...) } - baseAccount := ak.NewAccountWithAddress(ctx, to) - - acc := types.NewPeriodicVestingAccount(baseAccount.(*authtypes.BaseAccount), totalCoins.Sort(), msg.StartTime, msg.VestingPeriods) + baseAccount := authtypes.NewBaseAccountWithAddress(to) + baseAccount = ak.NewAccount(ctx, baseAccount).(*authtypes.BaseAccount) + vestingAccount := types.NewPeriodicVestingAccount(baseAccount, totalCoins.Sort(), msg.StartTime, msg.VestingPeriods) - ak.SetAccount(ctx, acc) + ak.SetAccount(ctx, vestingAccount) defer func() { telemetry.IncrCounter(1, "new", "account")