forked from cosmos/cosmos-sdk
-
Notifications
You must be signed in to change notification settings - Fork 10
/
util.go
104 lines (83 loc) · 2.34 KB
/
util.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package cli
import (
"encoding/json"
"fmt"
"os"
"github.com/shapeshift/cosmos-sdk/codec"
sdk "github.com/shapeshift/cosmos-sdk/types"
"github.com/shapeshift/cosmos-sdk/x/group"
)
// parseDecisionPolicy reads and parses the decision policy.
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
}
// parseMembers reads and parses the members.
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
}
// Proposal 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"`
Title string `json:"title"`
Summary string `json:"summary"`
}
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
}