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  }