prysm-pulse/slasher/beaconclient/historical_data_retrieval.go
Raul Jordan 5aac06f04e
Move EthereumAPIs Into Prysm (#8968)
* begin move

* use same import path

* imports

* regen protos

* regen

* no rename

* generate ssz

* gaz

* fmt

* edit build file

* imports

* modify

* remove generated files

* remove protos

* edit imports in prysm

* beacon chain all builds

* edit script

* add generated pbs

* add replace rules

* license for ethereumapis protos

* change visibility

* fmt

* update build files to gaz ignore

* use proper form

* edit imports

* wrap block

* revert scripts

* revert go mod
2021-06-02 18:49:52 -05:00

54 lines
1.5 KiB
Go

package beaconclient
import (
"context"
types "github.com/prysmaticlabs/eth2-types"
ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
"github.com/prysmaticlabs/prysm/shared/cmd"
"go.opencensus.io/trace"
)
// RequestHistoricalAttestations requests all indexed attestations for a
// given epoch from a beacon node via gRPC.
func (s *Service) RequestHistoricalAttestations(
ctx context.Context,
epoch types.Epoch,
) ([]*ethpb.IndexedAttestation, error) {
ctx, span := trace.StartSpan(ctx, "beaconclient.RequestHistoricalAttestations")
defer span.End()
indexedAtts := make([]*ethpb.IndexedAttestation, 0)
res := &ethpb.ListIndexedAttestationsResponse{}
var err error
for {
if ctx.Err() != nil {
return nil, ctx.Err()
}
if res == nil {
res = &ethpb.ListIndexedAttestationsResponse{}
}
res, err = s.cfg.BeaconClient.ListIndexedAttestations(ctx, &ethpb.ListIndexedAttestationsRequest{
QueryFilter: &ethpb.ListIndexedAttestationsRequest_Epoch{
Epoch: epoch,
},
PageSize: int32(cmd.Get().MaxRPCPageSize),
PageToken: res.NextPageToken,
})
if err != nil {
log.WithError(err).Errorf("could not request indexed attestations for epoch: %d", epoch)
break
}
indexedAtts = append(indexedAtts, res.IndexedAttestations...)
log.Infof(
"Retrieved %d/%d indexed attestations for epoch %d",
len(indexedAtts),
res.TotalSize,
epoch,
)
if res.NextPageToken == "" || res.TotalSize == 0 || len(indexedAtts) == int(res.TotalSize) {
break
}
}
return indexedAtts, nil
}