github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/params/client/utils/utils.go (about)

     1  package utils
     2  
     3  import (
     4  	"encoding/json"
     5  	"io/ioutil"
     6  
     7  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
     8  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/rest"
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/params"
    11  )
    12  
    13  type (
    14  	// ParamChangesJSON defines a slice of ParamChangeJSON objects which can be
    15  	// converted to a slice of ParamChange objects
    16  	ParamChangesJSON []ParamChangeJSON
    17  
    18  	// ParamChangeJSON defines a parameter change used in JSON input
    19  	// this allows values to be specified in raw JSON instead of being string encoded
    20  	ParamChangeJSON struct {
    21  		Subspace string          `json:"subspace" yaml:"subspace"`
    22  		Key      string          `json:"key" yaml:"key"`
    23  		Value    json.RawMessage `json:"value" yaml:"value"`
    24  	}
    25  
    26  	// ParamChangeProposalJSON defines a ParameterChangeProposal with a deposit used to parse parameter change proposals
    27  	// from a JSON file
    28  	ParamChangeProposalJSON struct {
    29  		Title       string           `json:"title" yaml:"title"`
    30  		Description string           `json:"description" yaml:"description"`
    31  		Changes     ParamChangesJSON `json:"changes" yaml:"changes"`
    32  		Deposit     sdk.SysCoins     `json:"deposit" yaml:"deposit"`
    33  		Height      uint64           `json:"height" yaml:"height"`
    34  	}
    35  
    36  	// ParamChangeProposalReq defines a parameter change proposal request body
    37  	ParamChangeProposalReq struct {
    38  		BaseReq     rest.BaseReq     `json:"base_req" yaml:"base_req"`
    39  		Title       string           `json:"title" yaml:"title"`
    40  		Description string           `json:"description" yaml:"description"`
    41  		Changes     ParamChangesJSON `json:"changes" yaml:"changes"`
    42  		Proposer    sdk.AccAddress   `json:"proposer" yaml:"proposer"`
    43  		Deposit     sdk.SysCoins     `json:"deposit" yaml:"deposit"`
    44  		Height      uint64           `json:"height" yaml:"height"`
    45  	}
    46  )
    47  
    48  // ToParamChange converts a ParamChangeJSON object to ParamChange
    49  func (pcj ParamChangeJSON) ToParamChange() params.ParamChange {
    50  	return params.NewParamChange(pcj.Subspace, pcj.Key, string(pcj.Value))
    51  }
    52  
    53  // ToParamChanges converts a slice of ParamChangeJSON objects to a slice of ParamChange
    54  func (pcj ParamChangesJSON) ToParamChanges() []params.ParamChange {
    55  	res := make([]params.ParamChange, len(pcj))
    56  	for i, pc := range pcj {
    57  		res[i] = pc.ToParamChange()
    58  	}
    59  	return res
    60  }
    61  
    62  // ParseParamChangeProposalJSON reads and parses a ParamChangeProposalJSON from file
    63  func ParseParamChangeProposalJSON(cdc *codec.Codec, proposalFile string) (ParamChangeProposalJSON, error) {
    64  	var proposal ParamChangeProposalJSON
    65  
    66  	contents, err := ioutil.ReadFile(proposalFile)
    67  	if err != nil {
    68  		return proposal, err
    69  	}
    70  
    71  	if err := cdc.UnmarshalJSON(contents, &proposal); err != nil {
    72  		return proposal, err
    73  	}
    74  
    75  	return proposal, nil
    76  }