github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/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. This
    19  	// 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
    27  	// to parse parameter change proposals 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.Coins        `json:"deposit" yaml:"deposit"`
    33  	}
    34  
    35  	// ParamChangeProposalReq defines a parameter change proposal request body.
    36  	ParamChangeProposalReq struct {
    37  		BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"`
    38  
    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.Coins        `json:"deposit" yaml:"deposit"`
    44  	}
    45  )
    46  
    47  func NewParamChangeJSON(subspace, key string, value json.RawMessage) ParamChangeJSON {
    48  	return ParamChangeJSON{subspace, key, value}
    49  }
    50  
    51  // ToParamChange converts a ParamChangeJSON object to ParamChange.
    52  func (pcj ParamChangeJSON) ToParamChange() params.ParamChange {
    53  	return params.NewParamChange(pcj.Subspace, pcj.Key, string(pcj.Value))
    54  }
    55  
    56  // ToParamChanges converts a slice of ParamChangeJSON objects to a slice of
    57  // ParamChange.
    58  func (pcj ParamChangesJSON) ToParamChanges() []params.ParamChange {
    59  	res := make([]params.ParamChange, len(pcj))
    60  	for i, pc := range pcj {
    61  		res[i] = pc.ToParamChange()
    62  	}
    63  	return res
    64  }
    65  
    66  // ParseParamChangeProposalJSON reads and parses a ParamChangeProposalJSON from
    67  // file.
    68  func ParseParamChangeProposalJSON(cdc *codec.Codec, proposalFile string) (ParamChangeProposalJSON, error) {
    69  	proposal := ParamChangeProposalJSON{}
    70  
    71  	contents, err := ioutil.ReadFile(proposalFile)
    72  	if err != nil {
    73  		return proposal, err
    74  	}
    75  
    76  	if err := cdc.UnmarshalJSON(contents, &proposal); err != nil {
    77  		return proposal, err
    78  	}
    79  
    80  	return proposal, nil
    81  }