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