diff --git a/x/staking/types/authz.go b/x/staking/types/authz.go index f1c2a717069a..45ce23089a3e 100644 --- a/x/staking/types/authz.go +++ b/x/staking/types/authz.go @@ -94,7 +94,7 @@ func (a StakeAuthorization) Accept(ctx sdk.Context, msg sdk.Msg) (authz.AcceptRe } } - if !isValidatorExists { + if len(allowedList) > 0 && !isValidatorExists { return authz.AcceptResponse{}, sdkerrors.ErrUnauthorized.Wrapf("cannot delegate/undelegate to %s validator", validatorAddress) } diff --git a/x/staking/types/authz_test.go b/x/staking/types/authz_test.go index d1d740e171f8..fd7f17d63e65 100644 --- a/x/staking/types/authz_test.go +++ b/x/staking/types/authz_test.go @@ -120,7 +120,20 @@ func TestAuthzAuthorizations(t *testing.T) { false, nil, }, - + { + "delegate: testing with a validator out of denylist", + []sdk.ValAddress{}, + []sdk.ValAddress{val1}, + stakingtypes.AuthorizationType_AUTHORIZATION_TYPE_DELEGATE, + nil, + stakingtypes.NewMsgDelegate(delAddr, val2, coin100), + false, + false, + &stakingtypes.StakeAuthorization{ + Validators: &stakingtypes.StakeAuthorization_DenyList{ + DenyList: &stakingtypes.StakeAuthorization_Validators{Address: []string{val1.String()}}, + }, MaxTokens: nil, AuthorizationType: stakingtypes.AuthorizationType_AUTHORIZATION_TYPE_DELEGATE}, + }, { "undelegate: expect 0 remaining coins", []sdk.ValAddress{val1, val2},