Some checks are pending
Build SimApp / build (amd64) (push) Waiting to run
Build SimApp / build (arm64) (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
Build & Push / build (push) Waiting to run
Run Gosec / Gosec (push) Waiting to run
Lint / golangci-lint (push) Waiting to run
Checks dependencies and mocks generation / Check go mod tidy (push) Waiting to run
Checks dependencies and mocks generation / Check up to date mocks (push) Waiting to run
System Tests / setup (push) Waiting to run
System Tests / test-system (push) Blocked by required conditions
System Tests / test-system-legacy (push) Blocked by required conditions
Tests / Code Coverage / split-test-files (push) Waiting to run
Tests / Code Coverage / tests (00) (push) Blocked by required conditions
Tests / Code Coverage / tests (01) (push) Blocked by required conditions
Tests / Code Coverage / tests (02) (push) Blocked by required conditions
Tests / Code Coverage / tests (03) (push) Blocked by required conditions
Tests / Code Coverage / test-integration (push) Waiting to run
Tests / Code Coverage / test-e2e (push) Waiting to run
Tests / Code Coverage / repo-analysis (push) Blocked by required conditions
Tests / Code Coverage / test-sim-nondeterminism (push) Waiting to run
Tests / Code Coverage / test-clientv2 (push) Waiting to run
Tests / Code Coverage / test-core (push) Waiting to run
Tests / Code Coverage / test-depinject (push) Waiting to run
Tests / Code Coverage / test-errors (push) Waiting to run
Tests / Code Coverage / test-math (push) Waiting to run
Tests / Code Coverage / test-schema (push) Waiting to run
Tests / Code Coverage / test-collections (push) Waiting to run
Tests / Code Coverage / test-cosmovisor (push) Waiting to run
Tests / Code Coverage / test-confix (push) Waiting to run
Tests / Code Coverage / test-store (push) Waiting to run
Tests / Code Coverage / test-log (push) Waiting to run
Tests / Code Coverage / test-x-tx (push) Waiting to run
Tests / Code Coverage / test-x-nft (push) Waiting to run
Tests / Code Coverage / test-x-circuit (push) Waiting to run
Tests / Code Coverage / test-x-feegrant (push) Waiting to run
Tests / Code Coverage / test-x-evidence (push) Waiting to run
Tests / Code Coverage / test-x-upgrade (push) Waiting to run
Tests / Code Coverage / test-tools-benchmark (push) Waiting to run
105 lines
2.4 KiB
Go
105 lines
2.4 KiB
Go
package cli
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
|
|
"git.cw.tr/mukan-network/mukan-sdk/codec"
|
|
sdk "git.cw.tr/mukan-network/mukan-sdk/types"
|
|
"git.cw.tr/mukan-network/mukan-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 := struct {
|
|
Members []group.MemberRequest `json:"members"`
|
|
}{}
|
|
|
|
if membersFile == "" {
|
|
return members.Members, nil
|
|
}
|
|
|
|
contents, err := os.ReadFile(membersFile)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := json.Unmarshal(contents, &members); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return members.Members, nil
|
|
}
|
|
|
|
func execFromString(execStr string) group.Exec {
|
|
exec := group.Exec_EXEC_UNSPECIFIED
|
|
if execStr == ExecTry || execStr == "1" {
|
|
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
|
|
}
|