package cli import ( "encoding/json" "fmt" "os" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/group" ) func parseDecisionPolicy(cdc codec.Codec, decisionPolicyFile string) (group.DecisionPolicy, error) { if decisionPolicyFile == "" { return nil, fmt.Errorf("decision policy is required") } contents, err := os.ReadFile(decisionPolicyFile) if err != nil { return nil, err } var policy group.DecisionPolicy if err := cdc.UnmarshalInterfaceJSON(contents, &policy); err != nil { return nil, fmt.Errorf("failed to parse decision policy: %w", err) } return policy, nil } func parseMembers(membersFile string) ([]group.MemberRequest, error) { members := group.MemberRequests{} if membersFile == "" { return members.Members, nil } contents, err := os.ReadFile(membersFile) if err != nil { return nil, err } err = json.Unmarshal(contents, &members) if err != nil { return nil, err } return members.Members, nil } func execFromString(execStr string) group.Exec { exec := group.Exec_EXEC_UNSPECIFIED if execStr == ExecTry { exec = group.Exec_EXEC_TRY } return exec } // CLIProposal defines a Msg-based group proposal for CLI purposes. type Proposal struct { GroupPolicyAddress string `json:"group_policy_address"` // Messages defines an array of sdk.Msgs proto-JSON-encoded as Anys. Messages []json.RawMessage `json:"messages,omitempty"` Metadata string `json:"metadata"` Proposers []string `json:"proposers,omitempty"` } func getCLIProposal(path string) (Proposal, error) { contents, err := os.ReadFile(path) if err != nil { return Proposal{}, err } return parseCLIProposal(contents) } func parseCLIProposal(contents []byte) (Proposal, error) { var p Proposal if err := json.Unmarshal(contents, &p); err != nil { return Proposal{}, err } return p, nil } func parseMsgs(cdc codec.Codec, p Proposal) ([]sdk.Msg, error) { msgs := make([]sdk.Msg, len(p.Messages)) for i, anyJSON := range p.Messages { var msg sdk.Msg err := cdc.UnmarshalInterfaceJSON(anyJSON, &msg) if err != nil { return nil, err } msgs[i] = msg } return msgs, nil }