@@ -19,6 +19,10 @@ type msgServer struct {
1919 types.BankKeeper
2020}
2121
22+ type baseAccountGetter interface {
23+ GetBaseAccount () * authtypes.BaseAccount
24+ }
25+
2226// NewMsgServerImpl returns an implementation of the vesting MsgServer interface,
2327// wrapping the corresponding AccountKeeper and BankKeeper.
2428func NewMsgServerImpl (k keeper.AccountKeeper , bk types.BankKeeper ) types.MsgServer {
@@ -53,12 +57,18 @@ func (s msgServer) CreateVestingAccount(goCtx context.Context, msg *types.MsgCre
5357 return nil , sdkerrors .Wrapf (sdkerrors .ErrInvalidRequest , "account %s already exists" , msg .ToAddress )
5458 }
5559
56- baseAccount := ak .NewAccountWithAddress (ctx , to )
57- if _ , ok := baseAccount .(* authtypes.BaseAccount ); ! ok {
60+ account := ak .NewAccountWithAddress (ctx , to )
61+ baseAccount , ok := account .(* authtypes.BaseAccount )
62+ if ! ok {
63+ if getter , ok := account .(baseAccountGetter ); ok {
64+ baseAccount = getter .GetBaseAccount ()
65+ }
66+ }
67+ if baseAccount == nil {
5868 return nil , sdkerrors .Wrapf (sdkerrors .ErrInvalidRequest , "invalid account type; expected: BaseAccount, got: %T" , baseAccount )
5969 }
6070
61- baseVestingAccount := types .NewBaseVestingAccount (baseAccount .( * authtypes. BaseAccount ) , msg .Amount .Sort (), msg .EndTime )
71+ baseVestingAccount := types .NewBaseVestingAccount (baseAccount , msg .Amount .Sort (), msg .EndTime )
6272
6373 var acc authtypes.AccountI
6474
0 commit comments