Skip to content

Commit 4e89a39

Browse files
committed
Remove mp address from a few calls and check required param
1 parent 190f442 commit 4e89a39

3 files changed

Lines changed: 120 additions & 20 deletions

File tree

rocketpool/api/megapool/delegate.go

Lines changed: 70 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func delegateUpgrade(c *cli.Command, megapoolAddress common.Address, opts *bind.
8080
return &response, nil
8181
}
8282

83-
func getUseLatestDelegate(c *cli.Command, megapoolAddress common.Address) (*api.MegapoolGetUseLatestDelegateResponse, error) {
83+
func getUseLatestDelegate(c *cli.Command) (*api.MegapoolGetUseLatestDelegateResponse, error) {
8484

8585
// Get services
8686
if err := services.RequireNodeRegistered(c); err != nil {
@@ -90,10 +90,24 @@ func getUseLatestDelegate(c *cli.Command, megapoolAddress common.Address) (*api.
9090
if err != nil {
9191
return nil, err
9292
}
93+
w, err := services.GetWallet(c)
94+
if err != nil {
95+
return nil, err
96+
}
9397

9498
// Response
9599
response := api.MegapoolGetUseLatestDelegateResponse{}
96100

101+
// Get node account and derive the megapool address
102+
nodeAccount, err := w.GetNodeAccount()
103+
if err != nil {
104+
return nil, err
105+
}
106+
megapoolAddress, err := megapool.GetMegapoolExpectedAddress(rp, nodeAccount.Address, nil)
107+
if err != nil {
108+
return nil, err
109+
}
110+
97111
// Create megapool
98112
mega, err := megapool.NewMegaPoolV1(rp, megapoolAddress, nil)
99113
if err != nil {
@@ -112,7 +126,7 @@ func getUseLatestDelegate(c *cli.Command, megapoolAddress common.Address) (*api.
112126

113127
}
114128

115-
func canSetUseLatestDelegate(c *cli.Command, megapoolAddress common.Address, useLatest bool) (*api.MegapoolCanSetUseLatestDelegateResponse, error) {
129+
func canSetUseLatestDelegate(c *cli.Command, useLatest bool) (*api.MegapoolCanSetUseLatestDelegateResponse, error) {
116130
// Get services
117131
if err := services.RequireNodeRegistered(c); err != nil {
118132
return nil, err
@@ -126,6 +140,15 @@ func canSetUseLatestDelegate(c *cli.Command, megapoolAddress common.Address, use
126140
return nil, err
127141
}
128142

143+
nodeAccount, err := w.GetNodeAccount()
144+
if err != nil {
145+
return nil, err
146+
}
147+
megapoolAddress, err := megapool.GetMegapoolExpectedAddress(rp, nodeAccount.Address, nil)
148+
if err != nil {
149+
return nil, err
150+
}
151+
129152
// Response
130153
response := api.MegapoolCanSetUseLatestDelegateResponse{}
131154

@@ -162,7 +185,7 @@ func canSetUseLatestDelegate(c *cli.Command, megapoolAddress common.Address, use
162185

163186
}
164187

165-
func setUseLatestDelegate(c *cli.Command, megapoolAddress common.Address, useLatest bool, opts *bind.TransactOpts) (*api.MegapoolSetUseLatestDelegateResponse, error) {
188+
func setUseLatestDelegate(c *cli.Command, useLatest bool, opts *bind.TransactOpts) (*api.MegapoolSetUseLatestDelegateResponse, error) {
166189
// Get services
167190
if err := services.RequireNodeRegistered(c); err != nil {
168191
return nil, err
@@ -171,6 +194,20 @@ func setUseLatestDelegate(c *cli.Command, megapoolAddress common.Address, useLat
171194
if err != nil {
172195
return nil, err
173196
}
197+
w, err := services.GetWallet(c)
198+
if err != nil {
199+
return nil, err
200+
}
201+
202+
// Get node account and derive the megapool address
203+
nodeAccount, err := w.GetNodeAccount()
204+
if err != nil {
205+
return nil, err
206+
}
207+
megapoolAddress, err := megapool.GetMegapoolExpectedAddress(rp, nodeAccount.Address, nil)
208+
if err != nil {
209+
return nil, err
210+
}
174211

175212
// Response
176213
response := api.MegapoolSetUseLatestDelegateResponse{}
@@ -193,12 +230,16 @@ func setUseLatestDelegate(c *cli.Command, megapoolAddress common.Address, useLat
193230

194231
}
195232

196-
func getDelegate(c *cli.Command, megapoolAddress common.Address) (*api.MegapoolGetDelegateResponse, error) {
233+
func getDelegate(c *cli.Command) (*api.MegapoolGetDelegateResponse, error) {
197234

198235
// Get services
199236
if err := services.RequireNodeRegistered(c); err != nil {
200237
return nil, err
201238
}
239+
w, err := services.GetWallet(c)
240+
if err != nil {
241+
return nil, err
242+
}
202243
rp, err := services.GetRocketPool(c)
203244
if err != nil {
204245
return nil, err
@@ -207,6 +248,16 @@ func getDelegate(c *cli.Command, megapoolAddress common.Address) (*api.MegapoolG
207248
// Response
208249
response := api.MegapoolGetDelegateResponse{}
209250

251+
// Get node account and derive the megapool address
252+
nodeAccount, err := w.GetNodeAccount()
253+
if err != nil {
254+
return nil, err
255+
}
256+
megapoolAddress, err := megapool.GetMegapoolExpectedAddress(rp, nodeAccount.Address, nil)
257+
if err != nil {
258+
return nil, err
259+
}
260+
210261
// Create megapool
211262
mega, err := megapool.NewMegaPoolV1(rp, megapoolAddress, nil)
212263
if err != nil {
@@ -225,12 +276,16 @@ func getDelegate(c *cli.Command, megapoolAddress common.Address) (*api.MegapoolG
225276

226277
}
227278

228-
func getEffectiveDelegate(c *cli.Command, megapoolAddress common.Address) (*api.MegapoolGetEffectiveDelegateResponse, error) {
279+
func getEffectiveDelegate(c *cli.Command) (*api.MegapoolGetEffectiveDelegateResponse, error) {
229280

230281
// Get services
231282
if err := services.RequireNodeRegistered(c); err != nil {
232283
return nil, err
233284
}
285+
w, err := services.GetWallet(c)
286+
if err != nil {
287+
return nil, err
288+
}
234289
rp, err := services.GetRocketPool(c)
235290
if err != nil {
236291
return nil, err
@@ -239,6 +294,16 @@ func getEffectiveDelegate(c *cli.Command, megapoolAddress common.Address) (*api.
239294
// Response
240295
response := api.MegapoolGetEffectiveDelegateResponse{}
241296

297+
// Get node account and derive the megapool address
298+
nodeAccount, err := w.GetNodeAccount()
299+
if err != nil {
300+
return nil, err
301+
}
302+
megapoolAddress, err := megapool.GetMegapoolExpectedAddress(rp, nodeAccount.Address, nil)
303+
if err != nil {
304+
return nil, err
305+
}
306+
242307
// Create Megapool
243308
mega, err := megapool.NewMegaPoolV1(rp, megapoolAddress, nil)
244309
if err != nil {

rocketpool/api/megapool/routes.go

Lines changed: 48 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -307,8 +307,7 @@ func RegisterRoutes(mux *http.ServeMux, c *cli.Command) {
307307
})
308308

309309
mux.HandleFunc("/api/megapool/get-use-latest-delegate", func(w http.ResponseWriter, r *http.Request) {
310-
address := common.HexToAddress(r.URL.Query().Get("address"))
311-
resp, err := getUseLatestDelegate(c, address)
310+
resp, err := getUseLatestDelegate(c)
312311
apiutils.WriteResponse(w, resp, err)
313312
})
314313

@@ -330,33 +329,37 @@ func RegisterRoutes(mux *http.ServeMux, c *cli.Command) {
330329
})
331330

332331
mux.HandleFunc("/api/megapool/can-set-use-latest-delegate", func(w http.ResponseWriter, r *http.Request) {
333-
address := common.HexToAddress(r.URL.Query().Get("address"))
334-
setLatest := r.URL.Query().Get("setLatest") == "true"
335-
resp, err := canSetUseLatestDelegate(c, address, setLatest)
332+
setLatest, err := parseBool(r, "setLatest")
333+
if err != nil {
334+
apiutils.WriteErrorResponse(w, err)
335+
return
336+
}
337+
resp, err := canSetUseLatestDelegate(c, setLatest)
336338
apiutils.WriteResponse(w, resp, err)
337339
})
338340

339341
mux.HandleFunc("/api/megapool/set-use-latest-delegate", func(w http.ResponseWriter, r *http.Request) {
340-
address := common.HexToAddress(r.FormValue("address"))
341-
setting := r.FormValue("setting") == "true"
342+
setting, err := parseBool(r, "setting")
343+
if err != nil {
344+
apiutils.WriteErrorResponse(w, err)
345+
return
346+
}
342347
opts, err := services.GetNodeAccountTransactorFromRequest(c, r)
343348
if err != nil {
344349
apiutils.WriteErrorResponse(w, err)
345350
return
346351
}
347-
resp, err := setUseLatestDelegate(c, address, setting, opts)
352+
resp, err := setUseLatestDelegate(c, setting, opts)
348353
apiutils.WriteResponse(w, resp, err)
349354
})
350355

351356
mux.HandleFunc("/api/megapool/get-delegate", func(w http.ResponseWriter, r *http.Request) {
352-
address := common.HexToAddress(r.URL.Query().Get("address"))
353-
resp, err := getDelegate(c, address)
357+
resp, err := getDelegate(c)
354358
apiutils.WriteResponse(w, resp, err)
355359
})
356360

357361
mux.HandleFunc("/api/megapool/get-effective-delegate", func(w http.ResponseWriter, r *http.Request) {
358-
address := common.HexToAddress(r.URL.Query().Get("address"))
359-
resp, err := getEffectiveDelegate(c, address)
362+
resp, err := getEffectiveDelegate(c)
360363
apiutils.WriteResponse(w, resp, err)
361364
})
362365
}
@@ -378,14 +381,46 @@ func parseUint32(r *http.Request, name string) (uint32, error) {
378381
return uint32(v), err
379382
}
380383

384+
func parseAddress(r *http.Request, name string) (common.Address, error) {
385+
raw := r.URL.Query().Get(name)
386+
if raw == "" {
387+
raw = r.FormValue(name)
388+
}
389+
if raw == "" {
390+
return common.Address{}, &apiutils.BadRequestError{Err: fmt.Errorf("missing required parameter '%s'", name)}
391+
}
392+
if !common.IsHexAddress(raw) {
393+
return common.Address{}, &apiutils.BadRequestError{Err: fmt.Errorf("invalid %s: %s", name, raw)}
394+
}
395+
return common.HexToAddress(raw), nil
396+
}
397+
398+
func parseBool(r *http.Request, name string) (bool, error) {
399+
raw := r.URL.Query().Get(name)
400+
if raw == "" {
401+
raw = r.FormValue(name)
402+
}
403+
if raw == "" {
404+
return false, &apiutils.BadRequestError{Err: fmt.Errorf("missing required parameter '%s'", name)}
405+
}
406+
v, err := strconv.ParseBool(raw)
407+
if err != nil {
408+
return false, &apiutils.BadRequestError{Err: fmt.Errorf("invalid %s: %s", name, raw)}
409+
}
410+
return v, nil
411+
}
412+
381413
func parseBigInt(r *http.Request, name string) (*big.Int, error) {
382414
raw := r.URL.Query().Get(name)
383415
if raw == "" {
384416
raw = r.FormValue(name)
385417
}
418+
if raw == "" {
419+
return nil, &apiutils.BadRequestError{Err: fmt.Errorf("missing required parameter '%s'", name)}
420+
}
386421
v, ok := new(big.Int).SetString(raw, 10)
387422
if !ok {
388-
return nil, fmt.Errorf("invalid %s: %s", name, raw)
423+
return nil, &apiutils.BadRequestError{Err: fmt.Errorf("invalid %s: %s", name, raw)}
389424
}
390425
return v, nil
391426
}

shared/services/rocketpool/megapool.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -461,8 +461,8 @@ func (c *Client) SetUseLatestDelegateMegapool(address common.Address, setting bo
461461
}
462462

463463
// Get the megapool's delegate address
464-
func (c *Client) GetDelegate(address common.Address) (api.MegapoolGetDelegateResponse, error) {
465-
responseBytes, err := c.callHTTPAPI("GET", "/api/megapool/get-delegate", url.Values{"address": {address.Hex()}})
464+
func (c *Client) GetDelegate() (api.MegapoolGetDelegateResponse, error) {
465+
responseBytes, err := c.callHTTPAPI("GET", "/api/megapool/get-delegate", nil)
466466
if err != nil {
467467
return api.MegapoolGetDelegateResponse{}, fmt.Errorf("Could get delegate for megapool: %w", err)
468468
}

0 commit comments

Comments
 (0)