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 }