-
Notifications
You must be signed in to change notification settings - Fork 105
/
propose-settings.go
356 lines (290 loc) · 15.3 KB
/
propose-settings.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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
package pdao
import (
"fmt"
"math/big"
"time"
"github.com/rocket-pool/rocketpool-go/settings/protocol"
"github.com/rocket-pool/rocketpool-go/utils/eth"
"github.com/urfave/cli"
"github.com/rocket-pool/smartnode/shared/services/gas"
"github.com/rocket-pool/smartnode/shared/services/rocketpool"
cliutils "github.com/rocket-pool/smartnode/shared/utils/cli"
)
func proposeSettingAuctionIsCreateLotEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.AuctionSettingsContractName, protocol.CreateLotEnabledSettingPath, trueValue)
}
func proposeSettingAuctionIsBidOnLotEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.AuctionSettingsContractName, protocol.BidOnLotEnabledSettingPath, trueValue)
}
func proposeSettingAuctionLotMinimumEthValue(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.AuctionSettingsContractName, protocol.LotMinimumEthValueSettingPath, trueValue)
}
func proposeSettingAuctionLotMaximumEthValue(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.AuctionSettingsContractName, protocol.LotMaximumEthValueSettingPath, trueValue)
}
func proposeSettingAuctionLotDuration(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.AuctionSettingsContractName, protocol.LotDurationSettingPath, trueValue)
}
func proposeSettingAuctionLotStartingPriceRatio(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.AuctionSettingsContractName, protocol.LotStartingPriceRatioSettingPath, trueValue)
}
func proposeSettingAuctionLotReservePriceRatio(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.AuctionSettingsContractName, protocol.LotReservePriceRatioSettingPath, trueValue)
}
func proposeSettingDepositIsDepositingEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.DepositSettingsContractName, protocol.DepositEnabledSettingPath, trueValue)
}
func proposeSettingDepositAreDepositAssignmentsEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.DepositSettingsContractName, protocol.AssignDepositsEnabledSettingPath, trueValue)
}
func proposeSettingDepositMinimumDeposit(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.DepositSettingsContractName, protocol.MinimumDepositSettingPath, trueValue)
}
func proposeSettingDepositMaximumDepositPoolSize(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.DepositSettingsContractName, protocol.MaximumDepositPoolSizeSettingPath, trueValue)
}
func proposeSettingDepositMaximumAssignmentsPerDeposit(c *cli.Context, value uint64) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.DepositSettingsContractName, protocol.MaximumDepositAssignmentsSettingPath, trueValue)
}
func proposeSettingDepositMaximumSocialisedAssignmentsPerDeposit(c *cli.Context, value uint64) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.DepositSettingsContractName, protocol.MaximumSocializedDepositAssignmentsSettingPath, trueValue)
}
func proposeSettingDepositDepositFee(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.DepositSettingsContractName, protocol.DepositFeeSettingPath, trueValue)
}
func proposeSettingMinipoolIsSubmitWithdrawableEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.MinipoolSettingsContractName, protocol.MinipoolSubmitWithdrawableEnabledSettingPath, trueValue)
}
func proposeSettingMinipoolLaunchTimeout(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.MinipoolSettingsContractName, protocol.MinipoolLaunchTimeoutSettingPath, trueValue)
}
func proposeSettingMinipoolIsBondReductionEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.MinipoolSettingsContractName, protocol.BondReductionEnabledSettingPath, trueValue)
}
func proposeSettingMinipoolMaximumCount(c *cli.Context, value uint64) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.MinipoolSettingsContractName, protocol.MaximumMinipoolCountSettingPath, trueValue)
}
func proposeSettingMinipoolUserDistributeWindowStart(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.MinipoolSettingsContractName, protocol.MinipoolUserDistributeWindowStartSettingPath, trueValue)
}
func proposeSettingMinipoolUserDistributeWindowLength(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.MinipoolSettingsContractName, protocol.MinipoolUserDistributeWindowLengthSettingPath, trueValue)
}
func proposeSettingNetworkOracleDaoConsensusThreshold(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.NodeConsensusThresholdSettingPath, trueValue)
}
func proposeSettingNetworkNodePenaltyThreshold(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.NetworkPenaltyThresholdSettingPath, trueValue)
}
func proposeSettingNetworkPerPenaltyRate(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.NetworkPenaltyPerRateSettingPath, trueValue)
}
func proposeSettingNetworkIsSubmitBalancesEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.SubmitBalancesEnabledSettingPath, trueValue)
}
func proposeSettingNetworkSubmitBalancesFrequency(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.SubmitBalancesFrequencySettingPath, trueValue)
}
func proposeSettingNetworkIsSubmitPricesEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.SubmitPricesEnabledSettingPath, trueValue)
}
func proposeSettingNetworkSubmitPricesFrequency(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.SubmitPricesFrequencySettingPath, trueValue)
}
func proposeSettingNetworkMinimumNodeFee(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.MinimumNodeFeeSettingPath, trueValue)
}
func proposeSettingNetworkTargetNodeFee(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.TargetNodeFeeSettingPath, trueValue)
}
func proposeSettingNetworkMaximumNodeFee(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.MaximumNodeFeeSettingPath, trueValue)
}
func proposeSettingNetworkNodeFeeDemandRange(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.NodeFeeDemandRangeSettingPath, trueValue)
}
func proposeSettingNetworkTargetRethCollateralRate(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.TargetRethCollateralRateSettingPath, trueValue)
}
func proposeSettingNetworkIsSubmitRewardsEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.NetworkSettingsContractName, protocol.SubmitRewardsEnabledSettingPath, trueValue)
}
func proposeSettingNodeIsRegistrationEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.NodeSettingsContractName, protocol.NodeRegistrationEnabledSettingPath, trueValue)
}
func proposeSettingNodeIsSmoothingPoolRegistrationEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.NodeSettingsContractName, protocol.SmoothingPoolRegistrationEnabledSettingPath, trueValue)
}
func proposeSettingNodeIsDepositingEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.NodeSettingsContractName, protocol.NodeDepositEnabledSettingPath, trueValue)
}
func proposeSettingNodeAreVacantMinipoolsEnabled(c *cli.Context, value bool) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.NodeSettingsContractName, protocol.VacantMinipoolsEnabledSettingPath, trueValue)
}
func proposeSettingNodeMinimumPerMinipoolStake(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.NodeSettingsContractName, protocol.MinimumPerMinipoolStakeSettingPath, trueValue)
}
func proposeSettingNodeMaximumPerMinipoolStake(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.NodeSettingsContractName, protocol.MaximumPerMinipoolStakeSettingPath, trueValue)
}
func proposeSettingProposalsVotePhase1Time(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.ProposalsSettingsContractName, protocol.VotePhase1TimeSettingPath, trueValue)
}
func proposeSettingProposalsVotePhase2Time(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.ProposalsSettingsContractName, protocol.VotePhase2TimeSettingPath, trueValue)
}
func proposeSettingProposalsVoteDelayTime(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.ProposalsSettingsContractName, protocol.VoteDelayTimeSettingPath, trueValue)
}
func proposeSettingProposalsExecuteTime(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.ProposalsSettingsContractName, protocol.ExecuteTimeSettingPath, trueValue)
}
func proposeSettingProposalsProposalBond(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.ProposalsSettingsContractName, protocol.ProposalBondSettingPath, trueValue)
}
func proposeSettingProposalsChallengeBond(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.ProposalsSettingsContractName, protocol.ChallengeBondSettingPath, trueValue)
}
func proposeSettingProposalsChallengePeriod(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.ProposalsSettingsContractName, protocol.ChallengePeriodSettingPath, trueValue)
}
func proposeSettingProposalsQuorum(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.ProposalsSettingsContractName, protocol.ProposalQuorumSettingPath, trueValue)
}
func proposeSettingProposalsVetoQuorum(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.ProposalsSettingsContractName, protocol.ProposalVetoQuorumSettingPath, trueValue)
}
func proposeSettingProposalsMaxBlockAge(c *cli.Context, value uint64) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.ProposalsSettingsContractName, protocol.ProposalMaxBlockAgeSettingPath, trueValue)
}
func proposeSettingRewardsIntervalPeriods(c *cli.Context, value uint64) error {
trueValue := fmt.Sprint(value)
return proposeSetting(c, protocol.RewardsSettingsContractName, protocol.RewardsClaimIntervalPeriodsSettingPath, trueValue)
}
func proposeSettingSecurityMembersQuorum(c *cli.Context, value *big.Int) error {
trueValue := value.String()
return proposeSetting(c, protocol.SecuritySettingsContractName, protocol.SecurityMembersQuorumSettingPath, trueValue)
}
func proposeSettingSecurityMembersLeaveTime(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.SecuritySettingsContractName, protocol.SecurityMembersLeaveTimeSettingPath, trueValue)
}
func proposeSettingSecurityProposalVoteTime(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.SecuritySettingsContractName, protocol.SecurityProposalVoteTimeSettingPath, trueValue)
}
func proposeSettingSecurityProposalExecuteTime(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.SecuritySettingsContractName, protocol.SecurityProposalExecuteTimeSettingPath, trueValue)
}
func proposeSettingSecurityProposalActionTime(c *cli.Context, value time.Duration) error {
trueValue := fmt.Sprint(uint64(value.Seconds()))
return proposeSetting(c, protocol.SecuritySettingsContractName, protocol.SecurityProposalActionTimeSettingPath, trueValue)
}
// Master general proposal function
func proposeSetting(c *cli.Context, contract string, setting string, value string) error {
// Get RP client
rp, err := rocketpool.NewClientFromCtx(c).WithReady()
if err != nil {
return err
}
defer rp.Close()
// Check for Houston
houston, err := rp.IsHoustonDeployed()
if err != nil {
return fmt.Errorf("error checking if Houston has been deployed: %w", err)
}
if !houston.IsHoustonDeployed {
fmt.Println("This command cannot be used until Houston has been deployed.")
return nil
}
// Check if proposal can be made
canPropose, err := rp.PDAOCanProposeSetting(contract, setting, value)
if err != nil {
return err
}
if !canPropose.CanPropose {
fmt.Println("Cannot propose setting update:")
if canPropose.InsufficientRpl {
fmt.Printf("You do not have enough RPL staked but unlocked to make another proposal (unlocked: %.6f RPL, required: %.6f RPL).\n",
eth.WeiToEth(big.NewInt(0).Sub(canPropose.StakedRpl, canPropose.LockedRpl)), eth.WeiToEth(canPropose.ProposalBond),
)
}
if canPropose.IsRplLockingDisallowed {
fmt.Println("Please enable RPL locking using the command 'rocketpool node allow-rpl-locking' to raise proposals.")
}
return nil
}
// Assign max fees
err = gas.AssignMaxFeeAndLimit(canPropose.GasInfo, rp, c.Bool("yes"))
if err != nil {
return err
}
// Prompt for confirmation
if !(c.Bool("yes") || cliutils.Confirm("Are you sure you want to submit this proposal?")) {
fmt.Println("Cancelled.")
return nil
}
// Submit proposal
response, err := rp.PDAOProposeSetting(contract, setting, value, canPropose.BlockNumber)
if err != nil {
return err
}
fmt.Printf("Submitting proposal...\n")
cliutils.PrintTransactionHash(rp, response.TxHash)
if _, err = rp.WaitForTransaction(response.TxHash); err != nil {
return err
}
// Log & return
fmt.Printf("Successfully submitted a %s setting update proposal.\n", setting)
return nil
}