Skip to content

Commit

Permalink
Increase efficiency of fetching many validators.
Browse files Browse the repository at this point in the history
  • Loading branch information
mcdee committed Jan 18, 2024
1 parent faf3c8a commit cd27401
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions util/validators.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
// ParseValidators parses input to obtain the list of validators.
func ParseValidators(ctx context.Context, validatorsProvider eth2client.ValidatorsProvider, validatorsStr []string, stateID string) ([]*apiv1.Validator, error) {
validators := make([]*apiv1.Validator, 0, len(validatorsStr))
indices := make([]phase0.ValidatorIndex, 0)
for i := range validatorsStr {
if strings.Contains(validatorsStr[i], "-") {
// Range.
Expand All @@ -44,25 +45,25 @@ func ParseValidators(ctx context.Context, validatorsProvider eth2client.Validato
if err != nil {
return nil, errors.Wrap(err, "invalid range end")
}
indices := make([]phase0.ValidatorIndex, 0)
for index := low; index <= high; index++ {
indices = append(indices, phase0.ValidatorIndex(index))
}
response, err := validatorsProvider.Validators(ctx, &api.ValidatorsOpts{State: stateID, Indices: indices})
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("failed to obtain validators %s", validatorsStr[i]))
}
for _, validator := range response.Data {
validators = append(validators, validator)
}
} else {
validator, err := ParseValidator(ctx, validatorsProvider, validatorsStr[i], stateID)
index, err := strconv.ParseUint(validatorsStr[i], 10, 64)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("unknown validator %s", validatorsStr[i]))
return nil, errors.Wrapf(err, "failed to parse validator %s", validatorsStr[i])
}
validators = append(validators, validator)
indices = append(indices, phase0.ValidatorIndex(index))
}
}

response, err := validatorsProvider.Validators(ctx, &api.ValidatorsOpts{State: stateID, Indices: indices})
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("failed to obtain validators %v", indices))
}
for _, validator := range response.Data {
validators = append(validators, validator)
}
return validators, nil
}

Expand Down

0 comments on commit cd27401

Please sign in to comment.