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  }