-
Notifications
You must be signed in to change notification settings - Fork 170
/
gov.go
102 lines (84 loc) · 2.51 KB
/
gov.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
package tx
import (
"time"
sdk "github.com/cosmos/cosmos-sdk/types"
v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
proposal "github.com/cosmos/cosmos-sdk/x/params/types/proposal"
)
func (c *Client) GovParamChange(title, description string, changes []proposal.ParamChange, deposit sdk.Coins,
) (*sdk.TxResponse, error) {
content := proposal.NewParameterChangeProposal(title, description, changes)
fromAddr, err := c.keyringRecord[0].GetAddress()
if err != nil {
return nil, err
}
msg, err := govtypes.NewMsgSubmitProposal(content, deposit, fromAddr)
if err != nil {
return nil, err
}
return c.BroadcastTx(msg)
}
func (c *Client) GovSubmitProposal(changes []proposal.ParamChange, deposit sdk.Coins) (*sdk.TxResponse, error) {
content := proposal.NewParameterChangeProposal(
"update historic stamp period",
"auto grpc proposal",
changes,
)
fromAddr, err := c.keyringRecord[0].GetAddress()
if err != nil {
return nil, err
}
msg, err := govtypes.NewMsgSubmitProposal(content, deposit, fromAddr)
if err != nil {
return nil, err
}
return c.BroadcastTx(msg)
}
func (c *Client) TxSubmitProposalWithMsg(msgs []sdk.Msg) (*sdk.TxResponse, error) {
deposit, err := sdk.ParseCoinsNormalized("1000uumee")
if err != nil {
return nil, err
}
fromAddr, err := c.keyringRecord[0].GetAddress()
if err != nil {
return nil, err
}
submitProposal, err := v1.NewMsgSubmitProposal(msgs, deposit, fromAddr.String(), "")
if err != nil {
return nil, err
}
return c.BroadcastTx(submitProposal)
}
// TxGovVoteYesAll creates transactions (one for each registered account) to approve a given proposal.
func (c *Client) TxGovVoteYesAll(proposalID uint64) error {
for index := range c.keyringRecord {
voter, err := c.keyringRecord[index].GetAddress()
if err != nil {
return err
}
voteType, err := govtypes.VoteOptionFromString("VOTE_OPTION_YES")
if err != nil {
return err
}
msg := govtypes.NewMsgVote(
voter,
proposalID,
voteType,
)
c.ClientContext.From = c.keyringRecord[index].Name
c.ClientContext.FromName = c.keyringRecord[index].Name
c.ClientContext.FromAddress, _ = c.keyringRecord[index].GetAddress()
for retry := 0; retry < 5; retry++ {
// retry if txs fails, because sometimes account sequence mismatch occurs due to txs pending
if _, err = BroadcastTx(*c.ClientContext, *c.txFactory, []sdk.Msg{msg}...); err == nil {
break
}
time.Sleep(time.Second * 1)
}
if err != nil {
return err
}
}
return nil
}