github.com/cosmos/cosmos-sdk@v0.50.10/x/params/proposal_handler.go (about) 1 package params 2 3 import ( 4 "fmt" 5 6 errorsmod "cosmossdk.io/errors" 7 8 sdk "github.com/cosmos/cosmos-sdk/types" 9 sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" 10 govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" 11 "github.com/cosmos/cosmos-sdk/x/params/keeper" 12 "github.com/cosmos/cosmos-sdk/x/params/types/proposal" 13 ) 14 15 // NewParamChangeProposalHandler creates a new governance Handler for a ParamChangeProposal 16 func NewParamChangeProposalHandler(k keeper.Keeper) govtypes.Handler { 17 return func(ctx sdk.Context, content govtypes.Content) error { 18 switch c := content.(type) { 19 case *proposal.ParameterChangeProposal: 20 return handleParameterChangeProposal(ctx, k, c) 21 22 default: 23 return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized param proposal content type: %T", c) 24 } 25 } 26 } 27 28 func handleParameterChangeProposal(ctx sdk.Context, k keeper.Keeper, p *proposal.ParameterChangeProposal) error { 29 for _, c := range p.Changes { 30 ss, ok := k.GetSubspace(c.Subspace) 31 if !ok { 32 return errorsmod.Wrap(proposal.ErrUnknownSubspace, c.Subspace) 33 } 34 35 k.Logger(ctx).Info( 36 fmt.Sprintf("attempt to set new parameter value; key: %s, value: %s", c.Key, c.Value), 37 ) 38 39 if err := ss.Update(ctx, []byte(c.Key), []byte(c.Value)); err != nil { 40 return errorsmod.Wrapf(proposal.ErrSettingParameter, "key: %s, value: %s, err: %s", c.Key, c.Value, err.Error()) 41 } 42 } 43 44 return nil 45 }