From d8fa332428642e57f742adf0af9960760b50ecb4 Mon Sep 17 00:00:00 2001 From: insumity Date: Thu, 3 Oct 2024 15:04:36 +0200 Subject: [PATCH] add validation --- docs/docs/build/modules/02-provider.md | 3 +++ x/ccv/provider/keeper/msg_server.go | 10 ---------- x/ccv/provider/types/msg.go | 27 ++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/docs/docs/build/modules/02-provider.md b/docs/docs/build/modules/02-provider.md index 0e526b4ac2..0be2760d65 100644 --- a/docs/docs/build/modules/02-provider.md +++ b/docs/docs/build/modules/02-provider.md @@ -1681,6 +1681,9 @@ where `update-consumer-msg.json` contains: "denylist":[], "min_stake": "1000", "allow_inactive_vals":true + }, + "allowlisted_reward_denoms": { + "denoms": ["ibc/0025F8A87464A471E66B234C4F93AEC5B4DA3D42D7986451A059273426290DD5"] } } ``` diff --git a/x/ccv/provider/keeper/msg_server.go b/x/ccv/provider/keeper/msg_server.go index fbef100bb9..a66dfd9135 100644 --- a/x/ccv/provider/keeper/msg_server.go +++ b/x/ccv/provider/keeper/msg_server.go @@ -415,11 +415,6 @@ func (k msgServer) CreateConsumer(goCtx context.Context, msg *types.MsgCreateCon } if msg.AllowlistedRewardDenoms != nil { - if len(msg.AllowlistedRewardDenoms.Denoms) > types.MaxAllowlistedRewardDenomsPerChain { - return &resp, errorsmod.Wrapf(types.ErrInvalidAllowlistedRewardDenoms, - fmt.Sprintf("a consumer chain cannot allowlist more than %d reward denoms", types.MaxAllowlistedRewardDenomsPerChain)) - } - err := k.UpdateAllowlistedRewardDenoms(ctx, consumerId, msg.AllowlistedRewardDenoms.Denoms) if err != nil { return &resp, errorsmod.Wrapf(types.ErrInvalidAllowlistedRewardDenoms, @@ -603,11 +598,6 @@ func (k msgServer) UpdateConsumer(goCtx context.Context, msg *types.MsgUpdateCon } if msg.AllowlistedRewardDenoms != nil { - if len(msg.AllowlistedRewardDenoms.Denoms) > types.MaxAllowlistedRewardDenomsPerChain { - return &resp, errorsmod.Wrapf(types.ErrInvalidAllowlistedRewardDenoms, - fmt.Sprintf("a consumer chain cannot allowlist more than %d reward denoms", types.MaxAllowlistedRewardDenomsPerChain)) - } - if err := k.UpdateAllowlistedRewardDenoms(ctx, consumerId, msg.AllowlistedRewardDenoms.Denoms); err != nil { return &resp, errorsmod.Wrapf(types.ErrInvalidAllowlistedRewardDenoms, "cannot update allowlisted reward denoms: %s", err.Error()) diff --git a/x/ccv/provider/types/msg.go b/x/ccv/provider/types/msg.go index e6242d2821..05fa7c6ee1 100644 --- a/x/ccv/provider/types/msg.go +++ b/x/ccv/provider/types/msg.go @@ -3,6 +3,7 @@ package types import ( "encoding/json" "fmt" + "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" "strings" ibctmtypes "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" @@ -328,6 +329,12 @@ func (msg MsgCreateConsumer) ValidateBasic() error { } } + if msg.AllowlistedRewardDenoms != nil { + if err := ValidateAllowlistedRewardDenoms(*msg.AllowlistedRewardDenoms); err != nil { + return errorsmod.Wrapf(ErrInvalidMsgCreateConsumer, "AllowlistedRewardDenoms: %s", err.Error()) + } + } + return nil } @@ -373,6 +380,12 @@ func (msg MsgUpdateConsumer) ValidateBasic() error { } } + if msg.AllowlistedRewardDenoms != nil { + if err := ValidateAllowlistedRewardDenoms(*msg.AllowlistedRewardDenoms); err != nil { + return errorsmod.Wrapf(ErrInvalidMsgUpdateConsumer, "AllowlistedRewardDenoms: %s", err.Error()) + } + } + return nil } @@ -518,6 +531,20 @@ func ValidatePowerShapingParameters(powerShapingParameters PowerShapingParameter return nil } +// ValidateAllowlistedRewardDenoms validates the provided allowlisted reward denoms +func ValidateAllowlistedRewardDenoms(allowlistedRewardDenoms AllowlistedRewardDenoms) error { + if len(allowlistedRewardDenoms.Denoms) > MaxAllowlistedRewardDenomsPerChain { + return errorsmod.Wrapf(ErrInvalidAllowlistedRewardDenoms, "More than %d denoms", MaxAllowlistedRewardDenomsPerChain) + } + + for _, denom := range allowlistedRewardDenoms.Denoms { + if err := types.ValidateIBCDenom(denom); err != nil { + return errorsmod.Wrapf(ErrInvalidAllowlistedRewardDenoms, "Invalid denom (%s): %s", denom, err.Error()) + } + } + return nil +} + // ValidateInitializationParameters validates that all the provided parameters are in the expected range func ValidateInitializationParameters(initializationParameters ConsumerInitializationParameters) error { if initializationParameters.InitialHeight.IsZero() {