84 lines
1.8 KiB
Go
84 lines
1.8 KiB
Go
package cli
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"os"
|
|
|
|
"github.com/cosmos/cosmos-sdk/client"
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/cosmos/cosmos-sdk/x/group"
|
|
)
|
|
|
|
func parseMembers(clientCtx client.Context, membersFile string) ([]group.Member, error) {
|
|
members := group.Members{}
|
|
|
|
if membersFile == "" {
|
|
return members.Members, nil
|
|
}
|
|
|
|
contents, err := ioutil.ReadFile(membersFile)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = clientCtx.Codec.UnmarshalJSON(contents, &members)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return members.Members, nil
|
|
}
|
|
|
|
func execFromString(execStr string) group.Exec {
|
|
exec := group.Exec_EXEC_UNSPECIFIED
|
|
switch execStr {
|
|
case ExecTry:
|
|
exec = group.Exec_EXEC_TRY
|
|
}
|
|
return exec
|
|
}
|
|
|
|
// CLIProposal defines a Msg-based group proposal for CLI purposes.
|
|
type CLIProposal struct {
|
|
GroupPolicyAddress string `json:"group_policy_address"`
|
|
// Messages defines an array of sdk.Msgs proto-JSON-encoded as Anys.
|
|
Messages []json.RawMessage `json:"messages"`
|
|
Metadata string `json:"metadata"`
|
|
Proposers []string `json:"proposers"`
|
|
}
|
|
|
|
func getCLIProposal(path string) (CLIProposal, error) {
|
|
contents, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return CLIProposal{}, err
|
|
}
|
|
|
|
return parseCLIProposal(contents)
|
|
}
|
|
|
|
func parseCLIProposal(contents []byte) (CLIProposal, error) {
|
|
var p CLIProposal
|
|
if err := json.Unmarshal(contents, &p); err != nil {
|
|
return CLIProposal{}, err
|
|
}
|
|
|
|
return p, nil
|
|
}
|
|
|
|
func parseMsgs(cdc codec.Codec, p CLIProposal) ([]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
|
|
}
|