fix(x/auth/vesting): Add BlockedAddr check in CreatePeriodicVestingAccount (#19480)
This commit is contained in:
parent
c8836248d1
commit
c05850241e
@ -193,6 +193,10 @@ func (s msgServer) CreatePeriodicVestingAccount(ctx context.Context, msg *types.
|
||||
totalCoins = totalCoins.Add(period.Amount...)
|
||||
}
|
||||
|
||||
if s.BankKeeper.BlockedAddr(to) {
|
||||
return nil, errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", msg.ToAddress)
|
||||
}
|
||||
|
||||
if acc := s.AccountKeeper.GetAccount(ctx, to); acc != nil {
|
||||
return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "account %s already exists", msg.ToAddress)
|
||||
}
|
||||
|
||||
@ -138,6 +138,21 @@ func (s *VestingTestSuite) TestCreateVestingAccount() {
|
||||
expErr: true,
|
||||
expErrMsg: "already exists",
|
||||
},
|
||||
"create for blocked account": {
|
||||
preRun: func() {
|
||||
s.bankKeeper.EXPECT().IsSendEnabledCoins(gomock.Any(), fooCoin).Return(nil)
|
||||
s.bankKeeper.EXPECT().BlockedAddr(to1Addr).Return(true)
|
||||
},
|
||||
input: vestingtypes.NewMsgCreateVestingAccount(
|
||||
fromAddr,
|
||||
to1Addr,
|
||||
sdk.Coins{fooCoin},
|
||||
time.Now().Unix(),
|
||||
true,
|
||||
),
|
||||
expErr: true,
|
||||
expErrMsg: "not allowed to receive funds",
|
||||
},
|
||||
"create a valid delayed vesting account": {
|
||||
preRun: func() {
|
||||
s.bankKeeper.EXPECT().IsSendEnabledCoins(gomock.Any(), fooCoin).Return(nil)
|
||||
@ -237,6 +252,22 @@ func (s *VestingTestSuite) TestCreatePermanentLockedAccount() {
|
||||
expErr: true,
|
||||
expErrMsg: "already exists",
|
||||
},
|
||||
"create for blocked account": {
|
||||
preRun: func() {
|
||||
toAcc := s.accountKeeper.NewAccountWithAddress(s.ctx, to1Addr)
|
||||
s.bankKeeper.EXPECT().IsSendEnabledCoins(gomock.Any(), fooCoin).Return(nil)
|
||||
s.bankKeeper.EXPECT().BlockedAddr(to1Addr).Return(true)
|
||||
s.accountKeeper.SetAccount(s.ctx, toAcc)
|
||||
},
|
||||
input: vestingtypes.NewMsgCreatePermanentLockedAccount(
|
||||
fromAddr,
|
||||
to1Addr,
|
||||
sdk.Coins{fooCoin},
|
||||
),
|
||||
expErr: true,
|
||||
expErrMsg: "not allowed to receive funds",
|
||||
},
|
||||
|
||||
"create a valid permanent locked account": {
|
||||
preRun: func() {
|
||||
s.bankKeeper.EXPECT().IsSendEnabledCoins(gomock.Any(), fooCoin).Return(nil)
|
||||
@ -361,6 +392,7 @@ func (s *VestingTestSuite) TestCreatePeriodicVestingAccount() {
|
||||
{
|
||||
name: "create for existing account",
|
||||
preRun: func() {
|
||||
s.bankKeeper.EXPECT().BlockedAddr(to1Addr).Return(false)
|
||||
toAcc := s.accountKeeper.NewAccountWithAddress(s.ctx, to1Addr)
|
||||
s.accountKeeper.SetAccount(s.ctx, toAcc)
|
||||
},
|
||||
@ -378,10 +410,34 @@ func (s *VestingTestSuite) TestCreatePeriodicVestingAccount() {
|
||||
expErr: true,
|
||||
expErrMsg: "already exists",
|
||||
},
|
||||
{
|
||||
name: "create for blocked address",
|
||||
preRun: func() {
|
||||
s.bankKeeper.EXPECT().BlockedAddr(to2Addr).Return(true)
|
||||
},
|
||||
input: vestingtypes.NewMsgCreatePeriodicVestingAccount(
|
||||
fromAddr,
|
||||
to2Addr,
|
||||
time.Now().Unix(),
|
||||
[]vestingtypes.Period{
|
||||
{
|
||||
Length: 10,
|
||||
Amount: sdk.NewCoins(periodCoin),
|
||||
},
|
||||
{
|
||||
Length: 20,
|
||||
Amount: sdk.NewCoins(fooCoin),
|
||||
},
|
||||
},
|
||||
),
|
||||
expErr: true,
|
||||
expErrMsg: "not allowed to receive funds",
|
||||
},
|
||||
{
|
||||
name: "create a valid periodic vesting account",
|
||||
preRun: func() {
|
||||
s.bankKeeper.EXPECT().IsSendEnabledCoins(gomock.Any(), periodCoin.Add(fooCoin)).Return(nil)
|
||||
s.bankKeeper.EXPECT().BlockedAddr(to2Addr).Return(false)
|
||||
s.bankKeeper.EXPECT().SendCoins(gomock.Any(), fromAddr, to2Addr, gomock.Any()).Return(nil)
|
||||
},
|
||||
input: vestingtypes.NewMsgCreatePeriodicVestingAccount(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user