-
Notifications
You must be signed in to change notification settings - Fork 169
/
gov.go
105 lines (89 loc) · 2.43 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
103
104
105
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(0, msg)
}
func (c *Client) GovSubmitParamProposal(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(0, msg)
}
func (c *Client) GovSubmitProposal(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(),
"metadata",
"sometitle",
"somesummary",
)
if err != nil {
return nil, err
}
return c.BroadcastTx(0, submitProposal)
}
// GovVoteAllYes creates transactions (one for each account in the keyring) to approve a given proposal.
func (c *Client) GovVoteAllYes(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,
)
for retry := 0; retry < 3; retry++ {
// retry if txs fails, because sometimes account sequence mismatch occurs due to txs pending
if _, err = c.BroadcastTx(index, msg); err == nil {
break
}
c.logger.Println("Tx broadcast failed. RETRYING. Err: ", err)
time.Sleep(time.Millisecond * 300)
}
if err != nil {
return err
}
}
return nil
}