2024-02-05 15:43:51 +00:00
|
|
|
package beacon_api
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"context"
|
|
|
|
"encoding/json"
|
|
|
|
|
2024-02-15 05:46:47 +00:00
|
|
|
"github.com/prysmaticlabs/prysm/v5/validator/client/iface"
|
2024-02-05 15:43:51 +00:00
|
|
|
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
)
|
|
|
|
|
|
|
|
type aggregatedSelectionResponse struct {
|
|
|
|
Data []iface.BeaconCommitteeSelection `json:"data"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *beaconApiValidatorClient) getAggregatedSelection(ctx context.Context, selections []iface.BeaconCommitteeSelection) ([]iface.BeaconCommitteeSelection, error) {
|
|
|
|
body, err := json.Marshal(selections)
|
|
|
|
if err != nil {
|
|
|
|
return nil, errors.Wrap(err, "failed to marshal selections")
|
|
|
|
}
|
|
|
|
|
|
|
|
var resp aggregatedSelectionResponse
|
|
|
|
err = c.jsonRestHandler.Post(ctx, "/eth/v1/validator/beacon_committee_selections", nil, bytes.NewBuffer(body), &resp)
|
|
|
|
if err != nil {
|
|
|
|
return nil, errors.Wrap(err, "error calling post endpoint")
|
|
|
|
}
|
|
|
|
if len(resp.Data) == 0 {
|
|
|
|
return nil, errors.New("no aggregated selection returned")
|
|
|
|
}
|
|
|
|
if len(selections) != len(resp.Data) {
|
|
|
|
return nil, errors.New("mismatching number of selections")
|
|
|
|
}
|
|
|
|
|
|
|
|
return resp.Data, nil
|
|
|
|
}
|