mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-10 22:07:59 -05:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0cec0ee6c3 | ||
|
|
2f392544a6 | ||
|
|
75ce8359eb | ||
|
|
f5cb04012e | ||
|
|
f461d1e024 | ||
|
|
bdbd0aaeb8 | ||
|
|
715d06a215 | ||
|
|
976a3af637 | ||
|
|
8f8d2d36c0 |
@@ -11,10 +11,10 @@ build:remote-cache --strategy=Closure=standalone
|
||||
build:remote-cache --strategy=Genrule=standalone
|
||||
|
||||
# Build results backend.
|
||||
build:remote-cache --bes_results_url="https://source.cloud.google.com/results/invocations/"
|
||||
build:remote-cache --bes_backend=buildeventservice.googleapis.com
|
||||
build:remote-cache --bes_timeout=60s
|
||||
build:remote-cache --project_id=prysmaticlabs
|
||||
#build:remote-cache --bes_results_url="https://source.cloud.google.com/results/invocations/"
|
||||
#build:remote-cache --bes_backend=buildeventservice.googleapis.com
|
||||
#build:remote-cache --bes_timeout=60s
|
||||
#build:remote-cache --project_id=prysmaticlabs
|
||||
|
||||
# Prysm specific remote-cache properties.
|
||||
build:remote-cache --disk_cache=
|
||||
|
||||
@@ -87,34 +87,8 @@ func (s *Store) OnBlock(ctx context.Context, b *ethpb.BeaconBlock) error {
|
||||
return errors.Wrap(err, "could not save state")
|
||||
}
|
||||
|
||||
// Update justified check point.
|
||||
if postState.CurrentJustifiedCheckpoint.Epoch > s.JustifiedCheckpt().Epoch {
|
||||
s.justifiedCheckpt = postState.CurrentJustifiedCheckpoint
|
||||
if err := s.db.SaveJustifiedCheckpoint(ctx, postState.CurrentJustifiedCheckpoint); err != nil {
|
||||
return errors.Wrap(err, "could not save justified checkpoint")
|
||||
}
|
||||
}
|
||||
|
||||
// Update finalized check point.
|
||||
// Prune the block cache and helper caches on every new finalized epoch.
|
||||
if postState.FinalizedCheckpoint.Epoch > s.finalizedCheckpt.Epoch {
|
||||
s.clearSeenAtts()
|
||||
helpers.ClearAllCaches()
|
||||
if err := s.db.SaveFinalizedCheckpoint(ctx, postState.FinalizedCheckpoint); err != nil {
|
||||
return errors.Wrap(err, "could not save finalized checkpoint")
|
||||
}
|
||||
|
||||
startSlot := helpers.StartSlot(s.prevFinalizedCheckpt.Epoch) + 1
|
||||
endSlot := helpers.StartSlot(s.finalizedCheckpt.Epoch)
|
||||
if endSlot > startSlot {
|
||||
if err := s.rmStatesOlderThanLastFinalized(ctx, startSlot, endSlot); err != nil {
|
||||
return errors.Wrapf(err, "could not delete states prior to finalized check point, range: %d, %d",
|
||||
startSlot, endSlot)
|
||||
}
|
||||
}
|
||||
|
||||
s.prevFinalizedCheckpt = s.finalizedCheckpt
|
||||
s.finalizedCheckpt = postState.FinalizedCheckpoint
|
||||
if err := s.updateCheckpoints(ctx, postState); err != nil {
|
||||
return errors.Wrap(err, "could not update checkpoint")
|
||||
}
|
||||
|
||||
// Update validator indices in database as needed.
|
||||
@@ -174,35 +148,8 @@ func (s *Store) OnBlockNoVerifyStateTransition(ctx context.Context, b *ethpb.Bea
|
||||
return errors.Wrap(err, "could not save state")
|
||||
}
|
||||
|
||||
// Update justified check point.
|
||||
if postState.CurrentJustifiedCheckpoint.Epoch > s.JustifiedCheckpt().Epoch {
|
||||
s.justifiedCheckpt = postState.CurrentJustifiedCheckpoint
|
||||
if err := s.db.SaveJustifiedCheckpoint(ctx, postState.CurrentJustifiedCheckpoint); err != nil {
|
||||
return errors.Wrap(err, "could not save justified checkpoint")
|
||||
}
|
||||
}
|
||||
|
||||
// Update finalized check point.
|
||||
// Prune the block cache and helper caches on every new finalized epoch.
|
||||
if postState.FinalizedCheckpoint.Epoch > s.finalizedCheckpt.Epoch {
|
||||
s.clearSeenAtts()
|
||||
helpers.ClearAllCaches()
|
||||
|
||||
startSlot := helpers.StartSlot(s.prevFinalizedCheckpt.Epoch) + 1
|
||||
endSlot := helpers.StartSlot(s.finalizedCheckpt.Epoch)
|
||||
if endSlot > startSlot {
|
||||
if err := s.rmStatesOlderThanLastFinalized(ctx, startSlot, endSlot); err != nil {
|
||||
return errors.Wrapf(err, "could not delete states prior to finalized check point, range: %d, %d",
|
||||
startSlot, endSlot)
|
||||
}
|
||||
}
|
||||
|
||||
if err := s.db.SaveFinalizedCheckpoint(ctx, postState.FinalizedCheckpoint); err != nil {
|
||||
return errors.Wrap(err, "could not save finalized checkpoint")
|
||||
}
|
||||
|
||||
s.prevFinalizedCheckpt = s.finalizedCheckpt
|
||||
s.finalizedCheckpt = postState.FinalizedCheckpoint
|
||||
if err := s.updateCheckpoints(ctx, postState); err != nil {
|
||||
return errors.Wrap(err, "could not update checkpoint")
|
||||
}
|
||||
|
||||
// Update validator indices in database as needed.
|
||||
@@ -314,6 +261,41 @@ func (s *Store) updateBlockAttestationVote(ctx context.Context, att *ethpb.Attes
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Store) updateCheckpoints(ctx context.Context, postState *pb.BeaconState) error {
|
||||
s.checkPointLock.Lock()
|
||||
defer s.checkPointLock.Unlock()
|
||||
// Update justified check point.
|
||||
if postState.CurrentJustifiedCheckpoint.Epoch > s.justifiedCheckpt.Epoch {
|
||||
s.justifiedCheckpt = postState.CurrentJustifiedCheckpoint
|
||||
if err := s.db.SaveJustifiedCheckpoint(ctx, postState.CurrentJustifiedCheckpoint); err != nil {
|
||||
return errors.Wrap(err, "could not save justified checkpoint")
|
||||
}
|
||||
}
|
||||
|
||||
// Update finalized check point.
|
||||
// Prune the block cache and helper caches on every new finalized epoch.
|
||||
if postState.FinalizedCheckpoint.Epoch > s.finalizedCheckpt.Epoch {
|
||||
s.clearSeenAtts()
|
||||
helpers.ClearAllCaches()
|
||||
if err := s.db.SaveFinalizedCheckpoint(ctx, postState.FinalizedCheckpoint); err != nil {
|
||||
return errors.Wrap(err, "could not save finalized checkpoint")
|
||||
}
|
||||
|
||||
startSlot := helpers.StartSlot(s.prevFinalizedCheckpt.Epoch) + 1
|
||||
endSlot := helpers.StartSlot(s.finalizedCheckpt.Epoch)
|
||||
if endSlot > startSlot {
|
||||
if err := s.rmStatesOlderThanLastFinalized(ctx, startSlot, endSlot); err != nil {
|
||||
return errors.Wrapf(err, "could not delete states prior to finalized check point, range: %d, %d",
|
||||
startSlot, endSlot)
|
||||
}
|
||||
}
|
||||
|
||||
s.prevFinalizedCheckpt = s.finalizedCheckpt
|
||||
s.finalizedCheckpt = postState.FinalizedCheckpoint
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// verifyBlkPreState validates input block has a valid pre-state.
|
||||
func (s *Store) verifyBlkPreState(ctx context.Context, b *ethpb.BeaconBlock) (*pb.BeaconState, error) {
|
||||
preState, err := s.db.State(ctx, bytesutil.ToBytes32(b.ParentRoot))
|
||||
|
||||
@@ -36,6 +36,7 @@ type Store struct {
|
||||
db db.Database
|
||||
justifiedCheckpt *ethpb.Checkpoint
|
||||
finalizedCheckpt *ethpb.Checkpoint
|
||||
checkPointLock sync.RWMutex
|
||||
prevFinalizedCheckpt *ethpb.Checkpoint
|
||||
checkpointState *cache.CheckpointStateCache
|
||||
checkpointStateLock sync.Mutex
|
||||
@@ -78,9 +79,11 @@ func (s *Store) GenesisStore(
|
||||
justifiedCheckpoint *ethpb.Checkpoint,
|
||||
finalizedCheckpoint *ethpb.Checkpoint) error {
|
||||
|
||||
s.checkPointLock.Lock()
|
||||
s.justifiedCheckpt = proto.Clone(justifiedCheckpoint).(*ethpb.Checkpoint)
|
||||
s.finalizedCheckpt = proto.Clone(finalizedCheckpoint).(*ethpb.Checkpoint)
|
||||
s.prevFinalizedCheckpt = proto.Clone(finalizedCheckpoint).(*ethpb.Checkpoint)
|
||||
s.checkPointLock.Unlock()
|
||||
|
||||
justifiedState, err := s.db.State(ctx, bytesutil.ToBytes32(s.justifiedCheckpt.Root))
|
||||
if err != nil {
|
||||
@@ -88,7 +91,7 @@ func (s *Store) GenesisStore(
|
||||
}
|
||||
|
||||
if err := s.checkpointState.AddCheckpointState(&cache.CheckpointState{
|
||||
Checkpoint: s.justifiedCheckpt,
|
||||
Checkpoint: s.JustifiedCheckpt(),
|
||||
State: justifiedState,
|
||||
}); err != nil {
|
||||
return errors.Wrap(err, "could not save genesis state in check point cache")
|
||||
@@ -245,10 +248,14 @@ func (s *Store) Head(ctx context.Context) ([]byte, error) {
|
||||
|
||||
// JustifiedCheckpt returns the latest justified check point from fork choice store.
|
||||
func (s *Store) JustifiedCheckpt() *ethpb.Checkpoint {
|
||||
s.checkPointLock.RLock()
|
||||
defer s.checkPointLock.RUnlock()
|
||||
return proto.Clone(s.justifiedCheckpt).(*ethpb.Checkpoint)
|
||||
}
|
||||
|
||||
// FinalizedCheckpt returns the latest finalized check point from fork choice store.
|
||||
func (s *Store) FinalizedCheckpt() *ethpb.Checkpoint {
|
||||
s.checkPointLock.RLock()
|
||||
defer s.checkPointLock.RUnlock()
|
||||
return proto.Clone(s.finalizedCheckpt).(*ethpb.Checkpoint)
|
||||
}
|
||||
|
||||
@@ -102,6 +102,10 @@ func (ms *mockOperationService) AttestationPoolForForkchoice(ctx context.Context
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (ms *mockOperationService) AttestationsBySlotCommittee(ctx context.Context, slot uint64, index uint64) ([]*ethpb.Attestation, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
type mockClient struct{}
|
||||
|
||||
func (m *mockClient) SubscribeNewHead(ctx context.Context, ch chan<- *gethTypes.Header) (ethereum.Subscription, error) {
|
||||
|
||||
@@ -2,7 +2,6 @@ package helpers
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
|
||||
"github.com/gogo/protobuf/proto"
|
||||
"github.com/pkg/errors"
|
||||
@@ -144,7 +143,7 @@ func IsAggregator(state *pb.BeaconState, slot uint64, index uint64, slotSig *bls
|
||||
if len(committee)/int(params.BeaconConfig().TargetAggregatorsPerCommittee) > 1 {
|
||||
modulo = uint64(len(committee)) / params.BeaconConfig().TargetAggregatorsPerCommittee
|
||||
}
|
||||
fmt.Println(modulo)
|
||||
|
||||
b := hashutil.Hash(slotSig.Marshal())
|
||||
return binary.LittleEndian.Uint64(b[:8])%modulo == 0, nil
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/core/state"
|
||||
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
|
||||
"github.com/prysmaticlabs/prysm/shared/featureconfig"
|
||||
"github.com/prysmaticlabs/prysm/shared/params/spectest"
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil"
|
||||
"gopkg.in/d4l3k/messagediff.v1"
|
||||
@@ -53,7 +52,6 @@ func runSlotProcessingTests(t *testing.T, config string) {
|
||||
if err := ssz.Unmarshal(postBeaconStateFile, postBeaconState); err != nil {
|
||||
t.Fatalf("Failed to unmarshal: %v", err)
|
||||
}
|
||||
beaconStateCopy := proto.Clone(beaconState).(*pb.BeaconState)
|
||||
postState, err := state.ProcessSlots(context.Background(), beaconState, beaconState.Slot+uint64(slotsCount))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -63,24 +61,6 @@ func runSlotProcessingTests(t *testing.T, config string) {
|
||||
diff, _ := messagediff.PrettyDiff(beaconState, postBeaconState)
|
||||
t.Fatalf("Post state does not match expected. Diff between states %s", diff)
|
||||
}
|
||||
|
||||
// Process slots and epoch with optimizations.
|
||||
f := featureconfig.Get()
|
||||
f.OptimizeProcessEpoch = true
|
||||
featureconfig.Init(f)
|
||||
if c := featureconfig.Get(); !c.OptimizeProcessEpoch {
|
||||
t.Errorf("OptimizeProcessEpoch in FeatureFlags incorrect. Wanted true, got false")
|
||||
}
|
||||
|
||||
postState, err = state.ProcessSlots(context.Background(), beaconStateCopy, beaconStateCopy.Slot+uint64(slotsCount))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if !proto.Equal(postState, postBeaconState) {
|
||||
diff, _ := messagediff.PrettyDiff(beaconState, postBeaconState)
|
||||
t.Fatalf("Post state does not match expected. Diff between states %s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -288,18 +288,10 @@ func ProcessSlots(ctx context.Context, state *pb.BeaconState, slot uint64) (*pb.
|
||||
return nil, errors.Wrap(err, "could not process slot")
|
||||
}
|
||||
if CanProcessEpoch(state) {
|
||||
if featureconfig.Get().OptimizeProcessEpoch {
|
||||
state, err = ProcessEpochPrecompute(ctx, state)
|
||||
if err != nil {
|
||||
traceutil.AnnotateError(span, err)
|
||||
return nil, errors.Wrap(err, "could not process epoch with optimizations")
|
||||
}
|
||||
} else {
|
||||
state, err = ProcessEpoch(ctx, state)
|
||||
if err != nil {
|
||||
traceutil.AnnotateError(span, err)
|
||||
return nil, errors.Wrap(err, "could not process epoch")
|
||||
}
|
||||
state, err = ProcessEpochPrecompute(ctx, state)
|
||||
if err != nil {
|
||||
traceutil.AnnotateError(span, err)
|
||||
return nil, errors.Wrap(err, "could not process epoch with optimizations")
|
||||
}
|
||||
}
|
||||
state.Slot++
|
||||
|
||||
@@ -47,7 +47,7 @@ func (g *Gateway) Start() {
|
||||
|
||||
g.conn = conn
|
||||
|
||||
gwmux := gwruntime.NewServeMux(gwruntime.WithMarshalerOption(gwruntime.MIMEWildcard, &gwruntime.JSONPb{OrigName: false}))
|
||||
gwmux := gwruntime.NewServeMux(gwruntime.WithMarshalerOption(gwruntime.MIMEWildcard, &gwruntime.JSONPb{OrigName: false, EmitDefaults: true}))
|
||||
for _, f := range []func(context.Context, *gwruntime.ServeMux, *grpc.ClientConn) error{
|
||||
ethpb.RegisterNodeHandler,
|
||||
ethpb.RegisterBeaconChainHandler,
|
||||
|
||||
@@ -25,6 +25,7 @@ type Pool interface {
|
||||
AttestationPool(ctx context.Context, requestedSlot uint64) ([]*ethpb.Attestation, error)
|
||||
AttestationPoolNoVerify(ctx context.Context) ([]*ethpb.Attestation, error)
|
||||
AttestationPoolForForkchoice(ctx context.Context) ([]*ethpb.Attestation, error)
|
||||
AttestationsBySlotCommittee(ctx context.Context, slot uint64, index uint64) ([]*ethpb.Attestation, error)
|
||||
}
|
||||
|
||||
// Handler defines an interface for a struct equipped for receiving block operations.
|
||||
@@ -137,6 +138,26 @@ func (s *Service) AttestationPoolNoVerify(ctx context.Context) ([]*ethpb.Attesta
|
||||
return atts, nil
|
||||
}
|
||||
|
||||
// AttestationsBySlotCommittee returns the attestations from the attestations pool filtered
|
||||
// by slot and committee index.
|
||||
func (s *Service) AttestationsBySlotCommittee(ctx context.Context, slot uint64, index uint64) ([]*ethpb.Attestation, error) {
|
||||
ctx, span := trace.StartSpan(ctx, "operations.AttestationsBySlotCommittee")
|
||||
defer span.End()
|
||||
|
||||
s.attestationPoolLock.RLock()
|
||||
defer s.attestationPoolLock.RUnlock()
|
||||
|
||||
atts := make([]*ethpb.Attestation, 0, len(s.attestationPool))
|
||||
|
||||
for _, ac := range s.attestationPool {
|
||||
if ac.Data.Slot == slot && ac.Data.Index == index {
|
||||
atts = append(atts, ac.ToAttestations()...)
|
||||
}
|
||||
}
|
||||
|
||||
return atts, nil
|
||||
}
|
||||
|
||||
// HandleAttestation processes a received attestation message.
|
||||
func (s *Service) HandleAttestation(ctx context.Context, message proto.Message) error {
|
||||
ctx, span := trace.StartSpan(ctx, "operations.HandleAttestation")
|
||||
|
||||
@@ -32,7 +32,7 @@ type Service struct {
|
||||
error error
|
||||
attestationPool map[[32]byte]*dbpb.AttestationContainer
|
||||
recentAttestationBitlist *recentAttestationMultiMap
|
||||
attestationPoolLock sync.Mutex
|
||||
attestationPoolLock sync.RWMutex
|
||||
attestationLockCache *ccache.Cache
|
||||
}
|
||||
|
||||
|
||||
@@ -31,3 +31,8 @@ func (op *Operations) AttestationPoolForForkchoice(ctx context.Context) ([]*ethp
|
||||
func (op *Operations) HandleAttestation(context.Context, proto.Message) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// AttestationsBySlotCommittee --
|
||||
func (op *Operations) AttestationsBySlotCommittee(ctx context.Context, slot uint64, index uint64) ([]*ethpb.Attestation, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ go_library(
|
||||
"//beacon-chain/operations:go_default_library",
|
||||
"//beacon-chain/p2p:go_default_library",
|
||||
"//beacon-chain/powchain:go_default_library",
|
||||
"//beacon-chain/rpc/aggregator:go_default_library",
|
||||
"//beacon-chain/rpc/attester:go_default_library",
|
||||
"//beacon-chain/rpc/beacon:go_default_library",
|
||||
"//beacon-chain/rpc/node:go_default_library",
|
||||
|
||||
37
beacon-chain/rpc/aggregator/BUILD.bazel
Normal file
37
beacon-chain/rpc/aggregator/BUILD.bazel
Normal file
@@ -0,0 +1,37 @@
|
||||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["server.go"],
|
||||
importpath = "github.com/prysmaticlabs/prysm/beacon-chain/rpc/aggregator",
|
||||
visibility = ["//beacon-chain:__subpackages__"],
|
||||
deps = [
|
||||
"//beacon-chain/blockchain:go_default_library",
|
||||
"//beacon-chain/core/helpers:go_default_library",
|
||||
"//beacon-chain/core/state:go_default_library",
|
||||
"//beacon-chain/db:go_default_library",
|
||||
"//beacon-chain/sync:go_default_library",
|
||||
"//proto/beacon/rpc/v1:go_default_library",
|
||||
"//shared/bls:go_default_library",
|
||||
"//shared/bytesutil:go_default_library",
|
||||
"@com_github_sirupsen_logrus//:go_default_library",
|
||||
"@io_opencensus_go//trace:go_default_library",
|
||||
"@org_golang_google_grpc//codes:go_default_library",
|
||||
"@org_golang_google_grpc//status:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
go_test(
|
||||
name = "go_default_test",
|
||||
srcs = ["server_test.go"],
|
||||
embed = [":go_default_library"],
|
||||
deps = [
|
||||
"//beacon-chain/blockchain/testing:go_default_library",
|
||||
"//beacon-chain/db/testing:go_default_library",
|
||||
"//beacon-chain/sync/initial-sync/testing:go_default_library",
|
||||
"//proto/beacon/p2p/v1:go_default_library",
|
||||
"//proto/beacon/rpc/v1:go_default_library",
|
||||
"//shared/bls:go_default_library",
|
||||
"//shared/params:go_default_library",
|
||||
],
|
||||
)
|
||||
83
beacon-chain/rpc/aggregator/server.go
Normal file
83
beacon-chain/rpc/aggregator/server.go
Normal file
@@ -0,0 +1,83 @@
|
||||
package aggregator
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/blockchain"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/core/state"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/db"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/sync"
|
||||
pb "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
|
||||
"github.com/prysmaticlabs/prysm/shared/bls"
|
||||
"github.com/prysmaticlabs/prysm/shared/bytesutil"
|
||||
"github.com/sirupsen/logrus"
|
||||
"go.opencensus.io/trace"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
var log logrus.FieldLogger
|
||||
|
||||
func init() {
|
||||
log = logrus.WithField("prefix", "rpc/aggregator")
|
||||
}
|
||||
|
||||
// Server defines a server implementation of the gRPC aggregator service.
|
||||
type Server struct {
|
||||
BeaconDB db.Database
|
||||
HeadFetcher blockchain.HeadFetcher
|
||||
SyncChecker sync.Checker
|
||||
}
|
||||
|
||||
// SubmitAggregateAndProof is called by a validator when its assigned to be an aggregator.
|
||||
// The beacon node will broadcast aggregated attestation and proof on the aggregator's behavior.
|
||||
func (as *Server) SubmitAggregateAndProof(ctx context.Context, req *pb.AggregationRequest) (*pb.AggregationResponse, error) {
|
||||
ctx, span := trace.StartSpan(ctx, "AggregatorServer.SubmitAggregation")
|
||||
defer span.End()
|
||||
span.AddAttributes(trace.Int64Attribute("slot", int64(req.Slot)))
|
||||
|
||||
if as.SyncChecker.Syncing() {
|
||||
return nil, status.Errorf(codes.Unavailable, "Syncing to latest head, not ready to respond")
|
||||
}
|
||||
|
||||
headState, err := as.HeadFetcher.HeadState(ctx)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "Could not retrieve head state: %v", err)
|
||||
}
|
||||
headState, err = state.ProcessSlots(ctx, headState, req.Slot)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "Could not process slots up to %d: %v", req.Slot, err)
|
||||
}
|
||||
|
||||
validatorIndex, exists, err := as.BeaconDB.ValidatorIndex(ctx, bytesutil.ToBytes48(req.PublicKey))
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "Could not get validator index from DB: %v", err)
|
||||
}
|
||||
if !exists {
|
||||
return nil, status.Error(codes.Internal, "Could not locate validator index in DB")
|
||||
}
|
||||
|
||||
// Check if the validator is an aggregator
|
||||
sig, err := bls.SignatureFromBytes(req.SlotSignature)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "Could not convert signature to byte: %v", err)
|
||||
}
|
||||
isAggregator, err := helpers.IsAggregator(headState, req.Slot, req.CommitteeIndex, sig)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "Could not get aggregator status: %v", err)
|
||||
}
|
||||
if !isAggregator {
|
||||
return nil, status.Errorf(codes.InvalidArgument, "Validator is not an aggregator")
|
||||
}
|
||||
|
||||
// TODO(3865): Broadcast aggregated attestation & proof via the aggregation topic
|
||||
|
||||
log.WithFields(logrus.Fields{
|
||||
"slot": req.Slot,
|
||||
"validatorIndex": validatorIndex,
|
||||
"committeeIndex": req.CommitteeIndex,
|
||||
}).Info("Broadcasting aggregated attestation and proof")
|
||||
|
||||
return &pb.AggregationResponse{}, nil
|
||||
}
|
||||
99
beacon-chain/rpc/aggregator/server_test.go
Normal file
99
beacon-chain/rpc/aggregator/server_test.go
Normal file
@@ -0,0 +1,99 @@
|
||||
package aggregator
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/rand"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
mock "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing"
|
||||
dbutil "github.com/prysmaticlabs/prysm/beacon-chain/db/testing"
|
||||
mockSync "github.com/prysmaticlabs/prysm/beacon-chain/sync/initial-sync/testing"
|
||||
pbp2p "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
|
||||
pb "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
|
||||
"github.com/prysmaticlabs/prysm/shared/bls"
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
)
|
||||
|
||||
func init() {
|
||||
// Use minimal config to reduce test setup time.
|
||||
params.OverrideBeaconConfig(params.MinimalSpecConfig())
|
||||
}
|
||||
|
||||
func TestSubmitAggregateAndProof_Syncing(t *testing.T) {
|
||||
db := dbutil.SetupDB(t)
|
||||
defer dbutil.TeardownDB(t, db)
|
||||
ctx := context.Background()
|
||||
|
||||
s := &pbp2p.BeaconState{}
|
||||
|
||||
aggregatorServer := &Server{
|
||||
HeadFetcher: &mock.ChainService{State: s},
|
||||
SyncChecker: &mockSync.Sync{IsSyncing: true},
|
||||
BeaconDB: db,
|
||||
}
|
||||
|
||||
req := &pb.AggregationRequest{CommitteeIndex: 1}
|
||||
wanted := "Syncing to latest head, not ready to respond"
|
||||
if _, err := aggregatorServer.SubmitAggregateAndProof(ctx, req); !strings.Contains(err.Error(), wanted) {
|
||||
t.Error("Did not receive wanted error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSubmitAggregateAndProof_CantFindValidatorIndex(t *testing.T) {
|
||||
db := dbutil.SetupDB(t)
|
||||
defer dbutil.TeardownDB(t, db)
|
||||
ctx := context.Background()
|
||||
|
||||
s := &pbp2p.BeaconState{
|
||||
RandaoMixes: make([][]byte, params.BeaconConfig().EpochsPerHistoricalVector),
|
||||
}
|
||||
|
||||
aggregatorServer := &Server{
|
||||
HeadFetcher: &mock.ChainService{State: s},
|
||||
SyncChecker: &mockSync.Sync{IsSyncing: false},
|
||||
BeaconDB: db,
|
||||
}
|
||||
|
||||
priv, err := bls.RandKey(rand.Reader)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
sig := priv.Sign([]byte{'A'}, 0)
|
||||
req := &pb.AggregationRequest{CommitteeIndex: 1, SlotSignature: sig.Marshal()}
|
||||
wanted := "Could not locate validator index in DB"
|
||||
if _, err := aggregatorServer.SubmitAggregateAndProof(ctx, req); !strings.Contains(err.Error(), wanted) {
|
||||
t.Error("Did not receive wanted error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSubmitAggregateAndProof_IsAggregator(t *testing.T) {
|
||||
db := dbutil.SetupDB(t)
|
||||
defer dbutil.TeardownDB(t, db)
|
||||
ctx := context.Background()
|
||||
|
||||
s := &pbp2p.BeaconState{
|
||||
RandaoMixes: make([][]byte, params.BeaconConfig().EpochsPerHistoricalVector),
|
||||
}
|
||||
|
||||
aggregatorServer := &Server{
|
||||
HeadFetcher: &mock.ChainService{State: s},
|
||||
SyncChecker: &mockSync.Sync{IsSyncing: false},
|
||||
BeaconDB: db,
|
||||
}
|
||||
|
||||
priv, err := bls.RandKey(rand.Reader)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
sig := priv.Sign([]byte{'A'}, 0)
|
||||
pubKey := [48]byte{'A'}
|
||||
req := &pb.AggregationRequest{CommitteeIndex: 1, SlotSignature: sig.Marshal(), PublicKey: pubKey[:]}
|
||||
if err := aggregatorServer.BeaconDB.SaveValidatorIndex(ctx, pubKey, 100); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if _, err = aggregatorServer.SubmitAggregateAndProof(ctx, req); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
@@ -23,14 +23,13 @@ import (
|
||||
func (bs *Server) ListValidatorBalances(
|
||||
ctx context.Context,
|
||||
req *ethpb.ListValidatorBalancesRequest) (*ethpb.ValidatorBalances, error) {
|
||||
|
||||
if int(req.PageSize) > params.BeaconConfig().MaxPageSize {
|
||||
return nil, status.Errorf(codes.InvalidArgument, "Requested page size %d can not be greater than max size %d",
|
||||
req.PageSize, params.BeaconConfig().MaxPageSize)
|
||||
}
|
||||
|
||||
res := make([]*ethpb.ValidatorBalances_Balance, 0)
|
||||
filtered := map[uint64]bool{} // track filtered validators to prevent duplication in the response.
|
||||
filtered := map[uint64]bool{} // Track filtered validators to prevent duplication in the response.
|
||||
|
||||
headState, err := bs.HeadFetcher.HeadState(ctx)
|
||||
if err != nil {
|
||||
@@ -75,7 +74,7 @@ func (bs *Server) ListValidatorBalances(
|
||||
}
|
||||
|
||||
for _, pubKey := range req.PublicKeys {
|
||||
// Skip empty public key
|
||||
// Skip empty public key.
|
||||
if len(pubKey) == 0 {
|
||||
continue
|
||||
}
|
||||
@@ -122,8 +121,8 @@ func (bs *Server) ListValidatorBalances(
|
||||
}
|
||||
|
||||
if len(req.Indices) == 0 && len(req.PublicKeys) == 0 {
|
||||
// return everything.
|
||||
for i := 0; i < len(headState.Balances); i++ {
|
||||
// Return everything.
|
||||
for i := 0; i < len(balances); i++ {
|
||||
res = append(res, ðpb.ValidatorBalances_Balance{
|
||||
PublicKey: headState.Validators[i].PublicKey,
|
||||
Index: uint64(i),
|
||||
@@ -187,10 +186,10 @@ func (bs *Server) ListValidators(
|
||||
requestedEpoch = q.Epoch
|
||||
}
|
||||
|
||||
validators := headState.Validators
|
||||
vals := headState.Validators
|
||||
if requestedEpoch < currentEpoch {
|
||||
stopIdx := len(validators)
|
||||
for idx, val := range validators {
|
||||
stopIdx := len(vals)
|
||||
for idx, val := range vals {
|
||||
// The first time we see a validator with an activation epoch > the requested epoch,
|
||||
// we know this validator is from the future relative to what the request wants.
|
||||
if val.ActivationEpoch > requestedEpoch {
|
||||
@@ -198,7 +197,7 @@ func (bs *Server) ListValidators(
|
||||
break
|
||||
}
|
||||
}
|
||||
validators = validators[:stopIdx]
|
||||
vals = vals[:stopIdx]
|
||||
} else if requestedEpoch > currentEpoch {
|
||||
// Otherwise, we are requesting data from the future and we return an error.
|
||||
return nil, status.Errorf(
|
||||
@@ -209,8 +208,20 @@ func (bs *Server) ListValidators(
|
||||
)
|
||||
}
|
||||
|
||||
validatorCount := len(validators)
|
||||
// If there are no validators, we simply return a response specifying this.
|
||||
// Filter active validators if the request specifies it.
|
||||
res := vals
|
||||
if req.Active {
|
||||
filteredValidators := make([]*ethpb.Validator, 0)
|
||||
for _, val := range vals {
|
||||
if helpers.IsActiveValidator(val, requestedEpoch) {
|
||||
filteredValidators = append(filteredValidators, val)
|
||||
}
|
||||
}
|
||||
res = filteredValidators
|
||||
}
|
||||
|
||||
validatorCount := len(res)
|
||||
// If there are no items, we simply return a response specifying this.
|
||||
// Otherwise, attempting to paginate 0 validators below would result in an error.
|
||||
if validatorCount == 0 {
|
||||
return ðpb.Validators{
|
||||
@@ -230,7 +241,7 @@ func (bs *Server) ListValidators(
|
||||
}
|
||||
|
||||
return ðpb.Validators{
|
||||
Validators: validators[start:end],
|
||||
Validators: res[start:end],
|
||||
TotalSize: int32(validatorCount),
|
||||
NextPageToken: nextPageToken,
|
||||
}, nil
|
||||
|
||||
@@ -83,6 +83,107 @@ func TestServer_ListValidatorBalances_NoResults(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestServer_ListValidatorBalances_DefaultResponse_NoArchive(t *testing.T) {
|
||||
db := dbTest.SetupDB(t)
|
||||
defer dbTest.TeardownDB(t, db)
|
||||
|
||||
ctx := context.Background()
|
||||
numItems := 100
|
||||
validators := make([]*ethpb.Validator, numItems)
|
||||
balances := make([]uint64, numItems)
|
||||
balancesResponse := make([]*ethpb.ValidatorBalances_Balance, numItems)
|
||||
for i := 0; i < numItems; i++ {
|
||||
validators[i] = ðpb.Validator{
|
||||
PublicKey: []byte(strconv.Itoa(i)),
|
||||
}
|
||||
balances[i] = params.BeaconConfig().MaxEffectiveBalance
|
||||
balancesResponse[i] = ðpb.ValidatorBalances_Balance{
|
||||
PublicKey: []byte(strconv.Itoa(i)),
|
||||
Index: uint64(i),
|
||||
Balance: params.BeaconConfig().MaxEffectiveBalance,
|
||||
}
|
||||
}
|
||||
bs := &Server{
|
||||
BeaconDB: db,
|
||||
HeadFetcher: &mock.ChainService{
|
||||
State: &pbp2p.BeaconState{
|
||||
Slot: 0,
|
||||
Validators: validators,
|
||||
Balances: balances,
|
||||
},
|
||||
},
|
||||
}
|
||||
res, err := bs.ListValidatorBalances(
|
||||
ctx,
|
||||
ðpb.ListValidatorBalancesRequest{
|
||||
QueryFilter: ðpb.ListValidatorBalancesRequest_Epoch{
|
||||
Epoch: 0,
|
||||
},
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !reflect.DeepEqual(balancesResponse, res.Balances) {
|
||||
t.Errorf("Wanted %v, received %v", balancesResponse, res.Balances)
|
||||
}
|
||||
}
|
||||
|
||||
func TestServer_ListValidatorBalances_DefaultResponse_FromArchive(t *testing.T) {
|
||||
db := dbTest.SetupDB(t)
|
||||
defer dbTest.TeardownDB(t, db)
|
||||
|
||||
ctx := context.Background()
|
||||
currentNumValidators := 100
|
||||
numOldBalances := 50
|
||||
validators := make([]*ethpb.Validator, currentNumValidators)
|
||||
balances := make([]uint64, currentNumValidators)
|
||||
oldBalances := make([]uint64, numOldBalances)
|
||||
balancesResponse := make([]*ethpb.ValidatorBalances_Balance, numOldBalances)
|
||||
for i := 0; i < currentNumValidators; i++ {
|
||||
validators[i] = ðpb.Validator{
|
||||
PublicKey: []byte(strconv.Itoa(i)),
|
||||
}
|
||||
balances[i] = params.BeaconConfig().MaxEffectiveBalance
|
||||
}
|
||||
for i := 0; i < numOldBalances; i++ {
|
||||
oldBalances[i] = params.BeaconConfig().MaxEffectiveBalance
|
||||
balancesResponse[i] = ðpb.ValidatorBalances_Balance{
|
||||
PublicKey: []byte(strconv.Itoa(i)),
|
||||
Index: uint64(i),
|
||||
Balance: params.BeaconConfig().MaxEffectiveBalance,
|
||||
}
|
||||
}
|
||||
// We archive old balances for epoch 50.
|
||||
if err := db.SaveArchivedBalances(ctx, 50, oldBalances); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
bs := &Server{
|
||||
BeaconDB: db,
|
||||
HeadFetcher: &mock.ChainService{
|
||||
State: &pbp2p.BeaconState{
|
||||
Slot: helpers.StartSlot(100 /* epoch 100 */),
|
||||
Validators: validators,
|
||||
Balances: balances,
|
||||
},
|
||||
},
|
||||
}
|
||||
res, err := bs.ListValidatorBalances(
|
||||
ctx,
|
||||
ðpb.ListValidatorBalancesRequest{
|
||||
QueryFilter: ðpb.ListValidatorBalancesRequest_Epoch{
|
||||
Epoch: 50,
|
||||
},
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !reflect.DeepEqual(balancesResponse, res.Balances) {
|
||||
t.Errorf("Wanted %v, received %v", balancesResponse, res.Balances)
|
||||
}
|
||||
}
|
||||
|
||||
func TestServer_ListValidatorBalances_PaginationOutOfRange(t *testing.T) {
|
||||
db := dbTest.SetupDB(t)
|
||||
defer dbTest.TeardownDB(t, db)
|
||||
@@ -430,6 +531,58 @@ func TestServer_ListValidators_NoResults(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestServer_ListValidators_OnlyActiveValidators(t *testing.T) {
|
||||
db := dbTest.SetupDB(t)
|
||||
defer dbTest.TeardownDB(t, db)
|
||||
|
||||
ctx := context.Background()
|
||||
count := 100
|
||||
balances := make([]uint64, count)
|
||||
validators := make([]*ethpb.Validator, count)
|
||||
activeValidators := make([]*ethpb.Validator, 0)
|
||||
for i := 0; i < count; i++ {
|
||||
if err := db.SaveValidatorIndex(ctx, [48]byte{byte(i)}, uint64(i)); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
balances[i] = params.BeaconConfig().MaxEffectiveBalance
|
||||
|
||||
// We mark even validators as active, and odd validators as inactive.
|
||||
if i%2 == 0 {
|
||||
val := ðpb.Validator{
|
||||
PublicKey: []byte{byte(i)},
|
||||
ActivationEpoch: 0,
|
||||
ExitEpoch: params.BeaconConfig().FarFutureEpoch,
|
||||
}
|
||||
validators[i] = val
|
||||
activeValidators = append(activeValidators, val)
|
||||
} else {
|
||||
validators[i] = ðpb.Validator{
|
||||
PublicKey: []byte{byte(i)},
|
||||
ActivationEpoch: 0,
|
||||
ExitEpoch: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
headState := &pbp2p.BeaconState{Validators: validators, Balances: balances}
|
||||
|
||||
bs := &Server{
|
||||
HeadFetcher: &mock.ChainService{
|
||||
State: headState,
|
||||
},
|
||||
}
|
||||
|
||||
received, err := bs.ListValidators(context.Background(), ðpb.ListValidatorsRequest{
|
||||
Active: true,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(activeValidators, received.Validators) {
|
||||
t.Errorf("Wanted %v, received %v", activeValidators, received.Validators)
|
||||
}
|
||||
}
|
||||
|
||||
func TestServer_ListValidators_NoPagination(t *testing.T) {
|
||||
db := dbTest.SetupDB(t)
|
||||
defer dbTest.TeardownDB(t, db)
|
||||
|
||||
@@ -20,6 +20,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/operations"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/p2p"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/powchain"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/rpc/aggregator"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/rpc/attester"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/rpc/beacon"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/rpc/node"
|
||||
@@ -223,9 +224,15 @@ func (s *Service) Start() {
|
||||
ChainStartFetcher: s.chainStartFetcher,
|
||||
CanonicalStateChan: s.canonicalStateChan,
|
||||
}
|
||||
aggregatorServer := &aggregator.Server{
|
||||
BeaconDB: s.beaconDB,
|
||||
HeadFetcher: s.headFetcher,
|
||||
SyncChecker: s.syncService,
|
||||
}
|
||||
pb.RegisterProposerServiceServer(s.grpcServer, proposerServer)
|
||||
pb.RegisterAttesterServiceServer(s.grpcServer, attesterServer)
|
||||
pb.RegisterValidatorServiceServer(s.grpcServer, validatorServer)
|
||||
pb.RegisterAggregatorServiceServer(s.grpcServer, aggregatorServer)
|
||||
ethpb.RegisterNodeServer(s.grpcServer, nodeServer)
|
||||
ethpb.RegisterBeaconChainServer(s.grpcServer, beaconChainServer)
|
||||
|
||||
|
||||
806
proto/beacon/rpc/v1/services.pb.go
generated
806
proto/beacon/rpc/v1/services.pb.go
generated
@@ -13,7 +13,6 @@ import (
|
||||
proto "github.com/gogo/protobuf/proto"
|
||||
types "github.com/gogo/protobuf/types"
|
||||
v1alpha1 "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
||||
_ "google.golang.org/genproto/googleapis/api/annotations"
|
||||
grpc "google.golang.org/grpc"
|
||||
)
|
||||
|
||||
@@ -31,24 +30,24 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
|
||||
type ValidatorRole int32
|
||||
|
||||
const (
|
||||
ValidatorRole_UNKNOWN ValidatorRole = 0
|
||||
ValidatorRole_ATTESTER ValidatorRole = 1
|
||||
ValidatorRole_PROPOSER ValidatorRole = 2
|
||||
ValidatorRole_BOTH ValidatorRole = 3
|
||||
ValidatorRole_UNKNOWN ValidatorRole = 0
|
||||
ValidatorRole_ATTESTER ValidatorRole = 1
|
||||
ValidatorRole_PROPOSER ValidatorRole = 2
|
||||
ValidatorRole_AGGREGATOR ValidatorRole = 3
|
||||
)
|
||||
|
||||
var ValidatorRole_name = map[int32]string{
|
||||
0: "UNKNOWN",
|
||||
1: "ATTESTER",
|
||||
2: "PROPOSER",
|
||||
3: "BOTH",
|
||||
3: "AGGREGATOR",
|
||||
}
|
||||
|
||||
var ValidatorRole_value = map[string]int32{
|
||||
"UNKNOWN": 0,
|
||||
"ATTESTER": 1,
|
||||
"PROPOSER": 2,
|
||||
"BOTH": 3,
|
||||
"UNKNOWN": 0,
|
||||
"ATTESTER": 1,
|
||||
"PROPOSER": 2,
|
||||
"AGGREGATOR": 3,
|
||||
}
|
||||
|
||||
func (x ValidatorRole) String() string {
|
||||
@@ -322,6 +321,124 @@ func (m *AttestResponse) GetRoot() []byte {
|
||||
return nil
|
||||
}
|
||||
|
||||
type AggregationRequest struct {
|
||||
Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"`
|
||||
CommitteeIndex uint64 `protobuf:"varint,2,opt,name=committee_index,json=committeeIndex,proto3" json:"committee_index,omitempty"`
|
||||
PublicKey []byte `protobuf:"bytes,3,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"`
|
||||
SlotSignature []byte `protobuf:"bytes,4,opt,name=slot_signature,json=slotSignature,proto3" json:"slot_signature,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *AggregationRequest) Reset() { *m = AggregationRequest{} }
|
||||
func (m *AggregationRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*AggregationRequest) ProtoMessage() {}
|
||||
func (*AggregationRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{4}
|
||||
}
|
||||
func (m *AggregationRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *AggregationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_AggregationRequest.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalTo(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *AggregationRequest) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_AggregationRequest.Merge(m, src)
|
||||
}
|
||||
func (m *AggregationRequest) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *AggregationRequest) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_AggregationRequest.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_AggregationRequest proto.InternalMessageInfo
|
||||
|
||||
func (m *AggregationRequest) GetSlot() uint64 {
|
||||
if m != nil {
|
||||
return m.Slot
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *AggregationRequest) GetCommitteeIndex() uint64 {
|
||||
if m != nil {
|
||||
return m.CommitteeIndex
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *AggregationRequest) GetPublicKey() []byte {
|
||||
if m != nil {
|
||||
return m.PublicKey
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *AggregationRequest) GetSlotSignature() []byte {
|
||||
if m != nil {
|
||||
return m.SlotSignature
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type AggregationResponse struct {
|
||||
Root []byte `protobuf:"bytes,1,opt,name=root,proto3" json:"root,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *AggregationResponse) Reset() { *m = AggregationResponse{} }
|
||||
func (m *AggregationResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*AggregationResponse) ProtoMessage() {}
|
||||
func (*AggregationResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{5}
|
||||
}
|
||||
func (m *AggregationResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *AggregationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_AggregationResponse.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalTo(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *AggregationResponse) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_AggregationResponse.Merge(m, src)
|
||||
}
|
||||
func (m *AggregationResponse) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *AggregationResponse) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_AggregationResponse.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_AggregationResponse proto.InternalMessageInfo
|
||||
|
||||
func (m *AggregationResponse) GetRoot() []byte {
|
||||
if m != nil {
|
||||
return m.Root
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type ValidatorPerformanceRequest struct {
|
||||
Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"`
|
||||
PublicKeys [][]byte `protobuf:"bytes,2,rep,name=public_keys,json=publicKeys,proto3" json:"public_keys,omitempty"`
|
||||
@@ -334,7 +451,7 @@ func (m *ValidatorPerformanceRequest) Reset() { *m = ValidatorPerformanc
|
||||
func (m *ValidatorPerformanceRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorPerformanceRequest) ProtoMessage() {}
|
||||
func (*ValidatorPerformanceRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{4}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{6}
|
||||
}
|
||||
func (m *ValidatorPerformanceRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -392,7 +509,7 @@ func (m *ValidatorPerformanceResponse) Reset() { *m = ValidatorPerforman
|
||||
func (m *ValidatorPerformanceResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorPerformanceResponse) ProtoMessage() {}
|
||||
func (*ValidatorPerformanceResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{5}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{7}
|
||||
}
|
||||
func (m *ValidatorPerformanceResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -467,7 +584,7 @@ func (m *ValidatorActivationRequest) Reset() { *m = ValidatorActivationR
|
||||
func (m *ValidatorActivationRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorActivationRequest) ProtoMessage() {}
|
||||
func (*ValidatorActivationRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{6}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{8}
|
||||
}
|
||||
func (m *ValidatorActivationRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -515,7 +632,7 @@ func (m *ValidatorActivationResponse) Reset() { *m = ValidatorActivation
|
||||
func (m *ValidatorActivationResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorActivationResponse) ProtoMessage() {}
|
||||
func (*ValidatorActivationResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{7}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{9}
|
||||
}
|
||||
func (m *ValidatorActivationResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -571,7 +688,7 @@ func (m *ValidatorActivationResponse_Status) Reset() { *m = ValidatorAct
|
||||
func (m *ValidatorActivationResponse_Status) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorActivationResponse_Status) ProtoMessage() {}
|
||||
func (*ValidatorActivationResponse_Status) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{7, 0}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{9, 0}
|
||||
}
|
||||
func (m *ValidatorActivationResponse_Status) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -625,7 +742,7 @@ func (m *ExitedValidatorsRequest) Reset() { *m = ExitedValidatorsRequest
|
||||
func (m *ExitedValidatorsRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*ExitedValidatorsRequest) ProtoMessage() {}
|
||||
func (*ExitedValidatorsRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{8}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{10}
|
||||
}
|
||||
func (m *ExitedValidatorsRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -672,7 +789,7 @@ func (m *ExitedValidatorsResponse) Reset() { *m = ExitedValidatorsRespon
|
||||
func (m *ExitedValidatorsResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*ExitedValidatorsResponse) ProtoMessage() {}
|
||||
func (*ExitedValidatorsResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{9}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{11}
|
||||
}
|
||||
func (m *ExitedValidatorsResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -720,7 +837,7 @@ func (m *ChainStartResponse) Reset() { *m = ChainStartResponse{} }
|
||||
func (m *ChainStartResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*ChainStartResponse) ProtoMessage() {}
|
||||
func (*ChainStartResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{10}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{12}
|
||||
}
|
||||
func (m *ChainStartResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -774,7 +891,7 @@ func (m *ValidatorIndexRequest) Reset() { *m = ValidatorIndexRequest{} }
|
||||
func (m *ValidatorIndexRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorIndexRequest) ProtoMessage() {}
|
||||
func (*ValidatorIndexRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{11}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{13}
|
||||
}
|
||||
func (m *ValidatorIndexRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -821,7 +938,7 @@ func (m *ValidatorIndexResponse) Reset() { *m = ValidatorIndexResponse{}
|
||||
func (m *ValidatorIndexResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorIndexResponse) ProtoMessage() {}
|
||||
func (*ValidatorIndexResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{12}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{14}
|
||||
}
|
||||
func (m *ValidatorIndexResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -869,7 +986,7 @@ func (m *AssignmentRequest) Reset() { *m = AssignmentRequest{} }
|
||||
func (m *AssignmentRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*AssignmentRequest) ProtoMessage() {}
|
||||
func (*AssignmentRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{13}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{15}
|
||||
}
|
||||
func (m *AssignmentRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -923,7 +1040,7 @@ func (m *AssignmentResponse) Reset() { *m = AssignmentResponse{} }
|
||||
func (m *AssignmentResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*AssignmentResponse) ProtoMessage() {}
|
||||
func (*AssignmentResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{14}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{16}
|
||||
}
|
||||
func (m *AssignmentResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -977,7 +1094,7 @@ func (m *AssignmentResponse_ValidatorAssignment) Reset() {
|
||||
func (m *AssignmentResponse_ValidatorAssignment) String() string { return proto.CompactTextString(m) }
|
||||
func (*AssignmentResponse_ValidatorAssignment) ProtoMessage() {}
|
||||
func (*AssignmentResponse_ValidatorAssignment) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{14, 0}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{16, 0}
|
||||
}
|
||||
func (m *AssignmentResponse_ValidatorAssignment) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -1063,7 +1180,7 @@ func (m *ValidatorStatusResponse) Reset() { *m = ValidatorStatusResponse
|
||||
func (m *ValidatorStatusResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorStatusResponse) ProtoMessage() {}
|
||||
func (*ValidatorStatusResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{15}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{17}
|
||||
}
|
||||
func (m *ValidatorStatusResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -1139,7 +1256,7 @@ func (m *DomainRequest) Reset() { *m = DomainRequest{} }
|
||||
func (m *DomainRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*DomainRequest) ProtoMessage() {}
|
||||
func (*DomainRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{16}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{18}
|
||||
}
|
||||
func (m *DomainRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -1193,7 +1310,7 @@ func (m *DomainResponse) Reset() { *m = DomainResponse{} }
|
||||
func (m *DomainResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*DomainResponse) ProtoMessage() {}
|
||||
func (*DomainResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{17}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{19}
|
||||
}
|
||||
func (m *DomainResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -1240,7 +1357,7 @@ func (m *BlockTreeResponse) Reset() { *m = BlockTreeResponse{} }
|
||||
func (m *BlockTreeResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*BlockTreeResponse) ProtoMessage() {}
|
||||
func (*BlockTreeResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{18}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{20}
|
||||
}
|
||||
func (m *BlockTreeResponse) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -1290,7 +1407,7 @@ func (m *BlockTreeResponse_TreeNode) Reset() { *m = BlockTreeResponse_Tr
|
||||
func (m *BlockTreeResponse_TreeNode) String() string { return proto.CompactTextString(m) }
|
||||
func (*BlockTreeResponse_TreeNode) ProtoMessage() {}
|
||||
func (*BlockTreeResponse_TreeNode) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{18, 0}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{20, 0}
|
||||
}
|
||||
func (m *BlockTreeResponse_TreeNode) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -1359,7 +1476,7 @@ func (m *TreeBlockSlotRequest) Reset() { *m = TreeBlockSlotRequest{} }
|
||||
func (m *TreeBlockSlotRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*TreeBlockSlotRequest) ProtoMessage() {}
|
||||
func (*TreeBlockSlotRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{19}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{21}
|
||||
}
|
||||
func (m *TreeBlockSlotRequest) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
@@ -1409,6 +1526,8 @@ func init() {
|
||||
proto.RegisterType((*ProposeResponse)(nil), "ethereum.beacon.rpc.v1.ProposeResponse")
|
||||
proto.RegisterType((*AttestationRequest)(nil), "ethereum.beacon.rpc.v1.AttestationRequest")
|
||||
proto.RegisterType((*AttestResponse)(nil), "ethereum.beacon.rpc.v1.AttestResponse")
|
||||
proto.RegisterType((*AggregationRequest)(nil), "ethereum.beacon.rpc.v1.AggregationRequest")
|
||||
proto.RegisterType((*AggregationResponse)(nil), "ethereum.beacon.rpc.v1.AggregationResponse")
|
||||
proto.RegisterType((*ValidatorPerformanceRequest)(nil), "ethereum.beacon.rpc.v1.ValidatorPerformanceRequest")
|
||||
proto.RegisterType((*ValidatorPerformanceResponse)(nil), "ethereum.beacon.rpc.v1.ValidatorPerformanceResponse")
|
||||
proto.RegisterType((*ValidatorActivationRequest)(nil), "ethereum.beacon.rpc.v1.ValidatorActivationRequest")
|
||||
@@ -1433,106 +1552,111 @@ func init() {
|
||||
func init() { proto.RegisterFile("proto/beacon/rpc/v1/services.proto", fileDescriptor_9eb4e94b85965285) }
|
||||
|
||||
var fileDescriptor_9eb4e94b85965285 = []byte{
|
||||
// 1581 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0x4f, 0x6f, 0x13, 0x47,
|
||||
0x14, 0x67, 0x1d, 0xc7, 0x09, 0xcf, 0x4e, 0xb2, 0x99, 0x84, 0xc4, 0x98, 0x40, 0xd3, 0x2d, 0x94,
|
||||
0x24, 0x12, 0x76, 0x62, 0x10, 0x6a, 0x41, 0x14, 0xd9, 0xf1, 0x92, 0x58, 0x20, 0x27, 0xac, 0x4d,
|
||||
0x42, 0xc5, 0x61, 0x35, 0xb6, 0x87, 0x78, 0x85, 0xbd, 0xb3, 0xd9, 0x1d, 0x5b, 0xe4, 0x52, 0xa9,
|
||||
0x97, 0x4a, 0xbd, 0xb5, 0x87, 0x9e, 0xab, 0x7e, 0x86, 0x1e, 0xfa, 0x15, 0x38, 0xf6, 0x03, 0xf4,
|
||||
0x50, 0xa1, 0x7e, 0x90, 0x6a, 0x67, 0x66, 0xd7, 0x1b, 0xff, 0x21, 0x0e, 0xb7, 0x9d, 0xf7, 0xde,
|
||||
0xef, 0xbd, 0x37, 0x6f, 0xde, 0x3f, 0x1b, 0x34, 0xc7, 0xa5, 0x8c, 0xe6, 0xea, 0x04, 0x37, 0xa8,
|
||||
0x9d, 0x73, 0x9d, 0x46, 0xae, 0xb7, 0x93, 0xf3, 0x88, 0xdb, 0xb3, 0x1a, 0xc4, 0xcb, 0x72, 0x26,
|
||||
0x5a, 0x21, 0xac, 0x45, 0x5c, 0xd2, 0xed, 0x64, 0x85, 0x58, 0xd6, 0x75, 0x1a, 0xd9, 0xde, 0x4e,
|
||||
0xe6, 0xc6, 0x09, 0xa5, 0x27, 0x6d, 0x92, 0xe3, 0x52, 0xf5, 0xee, 0xdb, 0x1c, 0xe9, 0x38, 0xec,
|
||||
0x4c, 0x80, 0x32, 0x77, 0x84, 0x62, 0xc2, 0x5a, 0xb9, 0xde, 0x0e, 0x6e, 0x3b, 0x2d, 0xbc, 0x23,
|
||||
0xad, 0x98, 0xf5, 0x36, 0x6d, 0xbc, 0x93, 0x62, 0xb7, 0x47, 0x88, 0x61, 0xc6, 0x88, 0xc7, 0x30,
|
||||
0xb3, 0xa8, 0x2d, 0xa5, 0xd6, 0xa4, 0x25, 0xec, 0x58, 0x39, 0x6c, 0xdb, 0x54, 0x30, 0xa5, 0x7f,
|
||||
0xda, 0x1e, 0xa4, 0x8a, 0xbe, 0x4a, 0x83, 0x9c, 0x76, 0x89, 0xc7, 0x10, 0x82, 0xb8, 0xd7, 0xa6,
|
||||
0x2c, 0xad, 0xac, 0x2b, 0x1b, 0x71, 0x83, 0x7f, 0xa3, 0xaf, 0x60, 0xce, 0xc5, 0x76, 0x13, 0x53,
|
||||
0xd3, 0x25, 0x3d, 0x82, 0xdb, 0xe9, 0xd8, 0xba, 0xb2, 0x91, 0x32, 0x52, 0x82, 0x68, 0x70, 0x9a,
|
||||
0xb6, 0x0d, 0x0b, 0x87, 0x2e, 0x75, 0xa8, 0x47, 0x0c, 0xe2, 0x39, 0xd4, 0xf6, 0x08, 0xba, 0x09,
|
||||
0xc0, 0xdd, 0x35, 0x5d, 0x2a, 0x35, 0xa6, 0x8c, 0xab, 0x9c, 0x62, 0x50, 0xca, 0xb4, 0x9f, 0x15,
|
||||
0x40, 0x85, 0xbe, 0xbb, 0x81, 0x07, 0x37, 0x01, 0x9c, 0x6e, 0xbd, 0x6d, 0x35, 0xcc, 0x77, 0xe4,
|
||||
0x2c, 0x40, 0x09, 0xca, 0x73, 0x72, 0x86, 0x56, 0x61, 0xc6, 0xa1, 0x0d, 0xb3, 0x6e, 0x31, 0xe9,
|
||||
0x46, 0xc2, 0xa1, 0x8d, 0xa2, 0xd5, 0xf7, 0x7c, 0x2a, 0xe2, 0xf9, 0x5d, 0x58, 0x68, 0xd0, 0x4e,
|
||||
0xc7, 0x62, 0x8c, 0x10, 0xd3, 0xb2, 0x9b, 0xe4, 0x7d, 0x3a, 0xce, 0xd9, 0xf3, 0x21, 0xb9, 0xec,
|
||||
0x53, 0xb5, 0xdb, 0x30, 0x2f, 0x5c, 0x09, 0x9d, 0x47, 0x10, 0x8f, 0xb8, 0xcd, 0xbf, 0x35, 0x03,
|
||||
0x6e, 0x1c, 0xe1, 0xb6, 0xd5, 0xc4, 0x8c, 0xba, 0x87, 0xc4, 0x7d, 0x4b, 0xdd, 0x0e, 0xb6, 0x1b,
|
||||
0xe4, 0x53, 0xb1, 0xfb, 0x02, 0x92, 0xfd, 0xdb, 0x78, 0xe9, 0xd8, 0xfa, 0xd4, 0x46, 0xca, 0x80,
|
||||
0xf0, 0x3a, 0x9e, 0xf6, 0x5b, 0x0c, 0xd6, 0x46, 0x2b, 0x95, 0x8e, 0x64, 0x60, 0xb6, 0x8e, 0xdb,
|
||||
0x3e, 0xc9, 0x4b, 0x2b, 0xeb, 0x53, 0x1b, 0x71, 0x23, 0x3c, 0xa3, 0x4d, 0x50, 0x19, 0x65, 0xb8,
|
||||
0x6d, 0xf6, 0x02, 0x0d, 0x1e, 0x8f, 0x4a, 0xdc, 0x58, 0xe0, 0xf4, 0x50, 0xb1, 0x87, 0x1e, 0xc2,
|
||||
0xaa, 0x10, 0xc5, 0x0d, 0x66, 0xf5, 0x48, 0x14, 0x21, 0x22, 0x76, 0x8d, 0xb3, 0x0b, 0x9c, 0x1b,
|
||||
0xc1, 0xdd, 0x03, 0xd4, 0xb1, 0x3c, 0xcf, 0xb2, 0x4f, 0xa2, 0x90, 0x38, 0xbf, 0xc7, 0xa2, 0xe4,
|
||||
0x44, 0xc4, 0xf7, 0x60, 0x1d, 0xf7, 0x88, 0x8b, 0x4f, 0xc8, 0x90, 0x21, 0x53, 0xba, 0x9d, 0x9e,
|
||||
0x5e, 0x57, 0x36, 0x62, 0xc6, 0x4d, 0x29, 0x37, 0x60, 0xb1, 0x28, 0x84, 0xb4, 0x27, 0x90, 0x09,
|
||||
0x69, 0x5c, 0xe4, 0x5c, 0x92, 0x0c, 0x84, 0x55, 0x19, 0x0a, 0xeb, 0xef, 0xb1, 0xc8, 0x5b, 0x45,
|
||||
0xf1, 0x32, 0xaa, 0x0f, 0xe1, 0x1a, 0x16, 0x54, 0xd2, 0x34, 0x87, 0x54, 0x15, 0x63, 0x69, 0xc5,
|
||||
0x58, 0x0a, 0x05, 0x0e, 0x43, 0xbd, 0xe8, 0x08, 0x66, 0xfd, 0x7c, 0xed, 0x7a, 0x44, 0x3c, 0x66,
|
||||
0x32, 0xff, 0x28, 0x3b, 0xba, 0xc4, 0xb3, 0x9f, 0x30, 0x9f, 0xad, 0x72, 0x1d, 0x46, 0xa8, 0x2b,
|
||||
0xe3, 0x40, 0x42, 0xd0, 0x2e, 0xca, 0xff, 0x3d, 0x48, 0x08, 0x10, 0x7f, 0xe8, 0x64, 0x3e, 0x77,
|
||||
0xa1, 0x79, 0x69, 0x4b, 0x9a, 0x36, 0x24, 0x5c, 0x7b, 0x04, 0xab, 0xfa, 0x7b, 0x8b, 0x91, 0x66,
|
||||
0xff, 0xf5, 0x26, 0x8e, 0xee, 0x63, 0x48, 0x0f, 0x63, 0x65, 0x64, 0x2f, 0x04, 0xbf, 0x04, 0xb4,
|
||||
0xdb, 0xc2, 0x96, 0x5d, 0x65, 0xd8, 0xed, 0xd7, 0x5b, 0x1a, 0x66, 0x3c, 0x9f, 0x40, 0x9a, 0xfc,
|
||||
0xce, 0xb3, 0x46, 0x70, 0x44, 0x5f, 0x42, 0xea, 0x84, 0xd8, 0xc4, 0xb3, 0x3c, 0x93, 0x59, 0x1d,
|
||||
0x22, 0x13, 0x3c, 0x29, 0x69, 0x35, 0xab, 0x43, 0xb4, 0x87, 0x70, 0x2d, 0xf4, 0x84, 0x17, 0xf4,
|
||||
0x64, 0xcd, 0x44, 0xcb, 0xc2, 0xca, 0x20, 0x4e, 0xba, 0xb3, 0x0c, 0xd3, 0xa2, 0x5f, 0x88, 0x62,
|
||||
0x16, 0x07, 0xed, 0x15, 0x2c, 0x16, 0x3c, 0xcf, 0x3a, 0xb1, 0x3b, 0xc4, 0x66, 0x91, 0x68, 0x11,
|
||||
0x87, 0x36, 0x5a, 0x26, 0x77, 0x58, 0x02, 0x80, 0x93, 0xf8, 0x15, 0x2f, 0xee, 0x01, 0xbf, 0x4c,
|
||||
0x01, 0x8a, 0xea, 0x95, 0x3e, 0x9c, 0xc2, 0x72, 0xbf, 0x78, 0x70, 0xc8, 0xe7, 0x21, 0x4d, 0xe6,
|
||||
0xbf, 0x1b, 0xf7, 0xf0, 0xc3, 0x9a, 0x22, 0xa9, 0xd8, 0xe7, 0x2d, 0xf5, 0x86, 0x89, 0x99, 0x9f,
|
||||
0x62, 0xb0, 0x34, 0x42, 0x18, 0xad, 0xc1, 0xd5, 0xb0, 0x63, 0xca, 0x2e, 0xd4, 0x27, 0x8c, 0x6a,
|
||||
0xb3, 0xb1, 0x51, 0x6d, 0xd6, 0x9f, 0x24, 0x62, 0x40, 0x11, 0xd7, 0x8c, 0x34, 0xeb, 0x54, 0x40,
|
||||
0xac, 0xca, 0x71, 0xe3, 0x88, 0x49, 0x22, 0x85, 0x44, 0xcb, 0x4e, 0x05, 0x44, 0x2e, 0x74, 0xfe,
|
||||
0x61, 0xa7, 0x07, 0xab, 0xe4, 0x69, 0x58, 0x25, 0x89, 0x75, 0x65, 0x63, 0x3e, 0x7f, 0x77, 0xd2,
|
||||
0x2a, 0x09, 0xaa, 0xe3, 0xaf, 0x18, 0xac, 0x8e, 0xa9, 0xa0, 0x88, 0x72, 0xe5, 0xb3, 0x94, 0xa3,
|
||||
0x6f, 0xe1, 0x3a, 0x61, 0xad, 0x1d, 0xb3, 0x49, 0x1c, 0xea, 0x59, 0x4c, 0x0c, 0x75, 0xd3, 0xee,
|
||||
0x76, 0xea, 0xc4, 0x95, 0x91, 0xf3, 0xf7, 0x86, 0x9d, 0x92, 0xe0, 0xf3, 0x01, 0x5d, 0xe1, 0x5c,
|
||||
0xf4, 0x00, 0x56, 0x02, 0x94, 0x65, 0x37, 0xda, 0x5d, 0xcf, 0xa2, 0x76, 0x34, 0x94, 0xcb, 0x92,
|
||||
0x5b, 0x0e, 0x98, 0x3c, 0x5a, 0x9b, 0xa0, 0xe2, 0xb0, 0x09, 0x99, 0x3c, 0x35, 0x65, 0x54, 0x17,
|
||||
0xfa, 0x74, 0xdd, 0x27, 0xa3, 0xa7, 0xb0, 0xc6, 0x15, 0xf8, 0x82, 0x96, 0x6d, 0x46, 0x60, 0xa7,
|
||||
0x5d, 0xd2, 0x15, 0xcd, 0x3b, 0x6e, 0x5c, 0x0f, 0x64, 0xca, 0x76, 0xbf, 0xbb, 0xbd, 0xf4, 0x05,
|
||||
0xb4, 0x27, 0x30, 0x57, 0xa2, 0x1d, 0x6c, 0x85, 0xbd, 0x7a, 0x19, 0xa6, 0x85, 0x45, 0x59, 0x4a,
|
||||
0xfc, 0x80, 0x56, 0x20, 0xd1, 0xe4, 0x62, 0xc1, 0x18, 0x17, 0x27, 0xed, 0x31, 0xcc, 0x07, 0x70,
|
||||
0x19, 0xee, 0x4d, 0x50, 0xfd, 0x3c, 0xc4, 0xac, 0xeb, 0x12, 0x53, 0x62, 0x84, 0xaa, 0x85, 0x90,
|
||||
0x2e, 0x20, 0xda, 0xaf, 0x31, 0x58, 0xe4, 0xd1, 0xaa, 0xb9, 0xa4, 0x3f, 0x41, 0x9f, 0x41, 0x9c,
|
||||
0xb9, 0x32, 0x6f, 0x93, 0xf9, 0xfc, 0xb8, 0xd7, 0x1a, 0x02, 0x66, 0xfd, 0x43, 0x85, 0x36, 0x89,
|
||||
0xc1, 0xf1, 0x99, 0x3f, 0x15, 0x98, 0x0d, 0x48, 0xe8, 0x1b, 0x98, 0xe6, 0xcf, 0xc6, 0x5d, 0x49,
|
||||
0xe6, 0xb5, 0xbe, 0x56, 0xc2, 0x5a, 0xd9, 0x60, 0x1f, 0xcb, 0x16, 0xb9, 0x09, 0xb1, 0x62, 0x09,
|
||||
0xc0, 0xc0, 0x5a, 0x14, 0x1b, 0x58, 0x8b, 0xfc, 0x81, 0xeb, 0x60, 0x97, 0x59, 0x0d, 0xcb, 0xe1,
|
||||
0xc3, 0xa9, 0x47, 0x19, 0x09, 0x66, 0xf4, 0x62, 0x94, 0x73, 0xe4, 0x33, 0xfc, 0xe6, 0x22, 0x57,
|
||||
0x00, 0x2e, 0x27, 0x5e, 0x15, 0xc4, 0xf4, 0xf7, 0x29, 0xda, 0x0b, 0x58, 0xf6, 0x9d, 0xe6, 0x2e,
|
||||
0xf8, 0xc9, 0x10, 0x3c, 0xcb, 0x0d, 0xb8, 0xea, 0xe7, 0x8d, 0xf9, 0xd6, 0xa5, 0x1d, 0x19, 0xcf,
|
||||
0x59, 0x9f, 0xf0, 0xcc, 0xa5, 0x1d, 0x7f, 0xcb, 0xe2, 0x4c, 0x46, 0x65, 0x3e, 0x26, 0xfc, 0x63,
|
||||
0x8d, 0x6e, 0x15, 0x61, 0x2e, 0xcc, 0x6a, 0x83, 0xb6, 0x09, 0x4a, 0xc2, 0xcc, 0xab, 0xca, 0xf3,
|
||||
0xca, 0xc1, 0x71, 0x45, 0xbd, 0x82, 0x52, 0x30, 0x5b, 0xa8, 0xd5, 0xf4, 0x6a, 0x4d, 0x37, 0x54,
|
||||
0xc5, 0x3f, 0x1d, 0x1a, 0x07, 0x87, 0x07, 0x55, 0xdd, 0x50, 0x63, 0x68, 0x16, 0xe2, 0xc5, 0x83,
|
||||
0xda, 0xbe, 0x3a, 0xb5, 0xf5, 0x87, 0x02, 0x0b, 0x03, 0xa5, 0x81, 0x10, 0xcc, 0x4b, 0x35, 0x66,
|
||||
0xb5, 0x56, 0xa8, 0xbd, 0xaa, 0xaa, 0x57, 0xd0, 0x32, 0xa8, 0x25, 0xfd, 0xf0, 0xa0, 0x5a, 0xae,
|
||||
0x99, 0x86, 0xbe, 0xab, 0x97, 0x8f, 0xf4, 0x92, 0xaa, 0xf8, 0x92, 0x87, 0x7a, 0xa5, 0x54, 0xae,
|
||||
0xec, 0x99, 0x85, 0xdd, 0x5a, 0xf9, 0x48, 0x57, 0x63, 0x08, 0x20, 0x21, 0xbf, 0xa7, 0x7c, 0x7e,
|
||||
0xb9, 0x52, 0xae, 0x95, 0x0b, 0x35, 0xbd, 0x64, 0xea, 0xaf, 0xcb, 0x35, 0x35, 0x8e, 0x54, 0x48,
|
||||
0x1d, 0x97, 0x6b, 0xfb, 0x25, 0xa3, 0x70, 0x5c, 0x28, 0xbe, 0xd0, 0xd5, 0x69, 0x1f, 0xe1, 0xf3,
|
||||
0xf4, 0x92, 0x9a, 0xf0, 0x11, 0xe2, 0xdb, 0xac, 0xbe, 0x28, 0x54, 0xf7, 0xf5, 0x92, 0x3a, 0x93,
|
||||
0xff, 0x47, 0x81, 0x85, 0x42, 0xd0, 0x95, 0xc4, 0x4a, 0x8f, 0x5a, 0x80, 0x64, 0xf0, 0x22, 0x6b,
|
||||
0x2b, 0xda, 0x1a, 0xdb, 0x87, 0x87, 0x76, 0xdb, 0xcc, 0xd7, 0x63, 0xb2, 0x24, 0x22, 0x5a, 0xc2,
|
||||
0x0c, 0x23, 0x13, 0x16, 0xab, 0xdd, 0x7a, 0xc7, 0x3a, 0x67, 0x48, 0xbb, 0x18, 0x1c, 0x35, 0x30,
|
||||
0xca, 0x99, 0x20, 0xb3, 0xf3, 0x1f, 0x94, 0x70, 0x5d, 0x0f, 0xaf, 0xf7, 0x1a, 0x52, 0xd2, 0x4f,
|
||||
0x9e, 0x2b, 0xe8, 0xf6, 0x27, 0x0b, 0x25, 0xb8, 0xd2, 0x04, 0x89, 0x8f, 0xde, 0x40, 0x4a, 0x1a,
|
||||
0x13, 0xe7, 0x09, 0x30, 0x99, 0xb1, 0x4d, 0x75, 0xe0, 0x57, 0x46, 0xfe, 0xbf, 0x19, 0x50, 0xfb,
|
||||
0xd9, 0x24, 0xef, 0xf2, 0x06, 0x40, 0xb4, 0x04, 0x1e, 0xce, 0x3b, 0xe3, 0x74, 0x9d, 0x6b, 0x54,
|
||||
0xe3, 0x83, 0x37, 0xd0, 0x90, 0x7e, 0x80, 0xc5, 0x63, 0x6c, 0xb1, 0x67, 0xd1, 0xcd, 0x0e, 0xe5,
|
||||
0x2f, 0xb5, 0x06, 0x0a, 0x83, 0xf7, 0x3f, 0x63, 0x75, 0xdc, 0x56, 0x10, 0x85, 0xf9, 0xf3, 0x5b,
|
||||
0x0b, 0xba, 0x77, 0xa1, 0xa2, 0xe8, 0x56, 0x94, 0xc9, 0x4e, 0x2a, 0x2e, 0x2f, 0xdc, 0x86, 0xa5,
|
||||
0xdd, 0x60, 0x90, 0x47, 0x96, 0x82, 0xcd, 0x49, 0x36, 0x10, 0x61, 0x71, 0x6b, 0xf2, 0x65, 0x05,
|
||||
0x9d, 0x0e, 0x77, 0x87, 0x4b, 0xde, 0xef, 0xb2, 0x3b, 0x31, 0xfa, 0x51, 0x81, 0xe5, 0x51, 0x3f,
|
||||
0xc2, 0xd0, 0xc5, 0x2f, 0x34, 0xfc, 0x3b, 0x30, 0xf3, 0xe0, 0x72, 0x20, 0xe9, 0x43, 0x17, 0xd4,
|
||||
0xc1, 0x9d, 0x1a, 0x8d, 0xbd, 0xc8, 0x98, 0xcd, 0x3d, 0xb3, 0x3d, 0x39, 0x40, 0x9a, 0xfd, 0x3e,
|
||||
0x4c, 0xe6, 0xfe, 0x52, 0x8e, 0x56, 0xb2, 0xe2, 0x4f, 0x83, 0x6c, 0xf0, 0xf7, 0x44, 0x56, 0xef,
|
||||
0x38, 0xec, 0x6c, 0xfc, 0x33, 0x0e, 0x2f, 0xf4, 0xdb, 0x0a, 0x7a, 0x0e, 0x73, 0xbb, 0xd8, 0xa6,
|
||||
0xb6, 0xd5, 0xc0, 0xed, 0x7d, 0x82, 0x9b, 0x63, 0xd5, 0x4e, 0xd0, 0x0f, 0x8a, 0xa9, 0x0f, 0x1f,
|
||||
0x6f, 0x29, 0x7f, 0x7f, 0xbc, 0xa5, 0xfc, 0xfb, 0xf1, 0x96, 0x52, 0x4f, 0x70, 0x0d, 0xf7, 0xff,
|
||||
0x0f, 0x00, 0x00, 0xff, 0xff, 0x2e, 0x0b, 0x30, 0xbe, 0x83, 0x11, 0x00, 0x00,
|
||||
// 1656 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0xcd, 0x6e, 0xdb, 0x48,
|
||||
0x12, 0x0e, 0x65, 0x59, 0x76, 0x4a, 0xb2, 0x4c, 0xb7, 0x1d, 0x5b, 0x51, 0x7e, 0xd6, 0xcb, 0x24,
|
||||
0x1b, 0xdb, 0x8b, 0x48, 0xb6, 0x12, 0x04, 0xbb, 0x09, 0xb2, 0x81, 0x6c, 0x31, 0xb6, 0x90, 0x40,
|
||||
0x56, 0x28, 0xc5, 0xce, 0x22, 0x07, 0x82, 0x92, 0xda, 0x12, 0x11, 0x91, 0x4d, 0x93, 0x2d, 0x21,
|
||||
0xbe, 0x2c, 0xb0, 0x97, 0x5d, 0xcc, 0x6d, 0xe6, 0x30, 0x98, 0xe3, 0x60, 0x9e, 0x61, 0x0e, 0xf3,
|
||||
0x0a, 0x39, 0xce, 0x03, 0xcc, 0x61, 0x10, 0xcc, 0x83, 0x0c, 0xd8, 0xdd, 0xa4, 0x68, 0xfd, 0xd8,
|
||||
0x72, 0x6e, 0xec, 0xfa, 0xfd, 0xba, 0xaa, 0xba, 0xba, 0x9a, 0xa0, 0x38, 0x2e, 0xa1, 0x24, 0xdf,
|
||||
0xc0, 0x46, 0x93, 0xd8, 0x79, 0xd7, 0x69, 0xe6, 0xfb, 0x3b, 0x79, 0x0f, 0xbb, 0x7d, 0xb3, 0x89,
|
||||
0xbd, 0x1c, 0x63, 0xa2, 0x55, 0x4c, 0x3b, 0xd8, 0xc5, 0x3d, 0x2b, 0xc7, 0xc5, 0x72, 0xae, 0xd3,
|
||||
0xcc, 0xf5, 0x77, 0xb2, 0xb7, 0xda, 0x84, 0xb4, 0xbb, 0x38, 0xcf, 0xa4, 0x1a, 0xbd, 0x93, 0x3c,
|
||||
0xb6, 0x1c, 0x7a, 0xc6, 0x95, 0xb2, 0x0f, 0xb8, 0x61, 0x4c, 0x3b, 0xf9, 0xfe, 0x8e, 0xd1, 0x75,
|
||||
0x3a, 0xc6, 0x8e, 0xf0, 0xa2, 0x37, 0xba, 0xa4, 0xf9, 0x51, 0x88, 0xdd, 0x1f, 0x23, 0x66, 0x50,
|
||||
0x8a, 0x3d, 0x6a, 0x50, 0x93, 0xd8, 0x5c, 0x4a, 0xd9, 0x87, 0xd4, 0xae, 0xaf, 0xa4, 0xe1, 0xd3,
|
||||
0x1e, 0xf6, 0x28, 0x42, 0x10, 0xf7, 0xba, 0x84, 0x66, 0xa4, 0x75, 0x69, 0x23, 0xae, 0xb1, 0x6f,
|
||||
0x74, 0x0f, 0x16, 0x5c, 0xc3, 0x6e, 0x19, 0x44, 0x77, 0x71, 0x1f, 0x1b, 0xdd, 0x4c, 0x6c, 0x5d,
|
||||
0xda, 0x48, 0x69, 0x29, 0x4e, 0xd4, 0x18, 0x4d, 0xd9, 0x86, 0xc5, 0xaa, 0x4b, 0x1c, 0xe2, 0x61,
|
||||
0x0d, 0x7b, 0x0e, 0xb1, 0x3d, 0x8c, 0xee, 0x00, 0x30, 0x40, 0xba, 0x4b, 0x84, 0xc5, 0x94, 0x76,
|
||||
0x9d, 0x51, 0x34, 0x42, 0xa8, 0xf2, 0x8d, 0x04, 0xa8, 0x38, 0x00, 0x14, 0x20, 0xb8, 0x03, 0xe0,
|
||||
0xf4, 0x1a, 0x5d, 0xb3, 0xa9, 0x7f, 0xc4, 0x67, 0x81, 0x16, 0xa7, 0xbc, 0xc6, 0x67, 0x68, 0x0d,
|
||||
0xe6, 0x1c, 0xd2, 0xd4, 0x1b, 0x26, 0x15, 0x30, 0x12, 0x0e, 0x69, 0xee, 0x9a, 0x03, 0xe4, 0x33,
|
||||
0x11, 0xe4, 0x0f, 0x61, 0xb1, 0x49, 0x2c, 0xcb, 0xa4, 0x14, 0x63, 0xdd, 0xb4, 0x5b, 0xf8, 0x53,
|
||||
0x26, 0xce, 0xd8, 0xe9, 0x90, 0x5c, 0xf6, 0xa9, 0xca, 0x7d, 0x48, 0x73, 0x28, 0x21, 0x78, 0x04,
|
||||
0xf1, 0x08, 0x6c, 0xf6, 0xad, 0xfc, 0xe0, 0x23, 0x6e, 0xb7, 0x5d, 0xdc, 0x3e, 0x87, 0x78, 0x5c,
|
||||
0xcc, 0xc6, 0x78, 0x8e, 0x8d, 0xf3, 0x3c, 0xb4, 0xdd, 0x99, 0xe1, 0xed, 0x3e, 0x80, 0xb4, 0x6f,
|
||||
0x4f, 0xf7, 0xcc, 0xb6, 0x6d, 0xd0, 0x9e, 0x8b, 0xd9, 0x06, 0x52, 0xda, 0x82, 0x4f, 0xad, 0x05,
|
||||
0x44, 0x65, 0x13, 0x96, 0xcf, 0x01, 0xbb, 0x60, 0x13, 0x1a, 0xdc, 0x3a, 0x32, 0xba, 0x66, 0xcb,
|
||||
0xa0, 0xc4, 0xad, 0x62, 0xf7, 0x84, 0xb8, 0x96, 0x61, 0x37, 0xf1, 0x45, 0x9b, 0xf9, 0x0b, 0x24,
|
||||
0x07, 0x18, 0xbd, 0x4c, 0x6c, 0x7d, 0x66, 0x23, 0xa5, 0x41, 0x08, 0xd2, 0x53, 0xbe, 0x8f, 0xc1,
|
||||
0xed, 0xf1, 0x46, 0x05, 0x90, 0x2c, 0xcc, 0x37, 0x8c, 0xae, 0x4f, 0xf2, 0x32, 0xd2, 0xfa, 0xcc,
|
||||
0x46, 0x5c, 0x0b, 0xd7, 0x68, 0x13, 0x64, 0x4a, 0xa8, 0xd1, 0xd5, 0xfb, 0x81, 0x05, 0x4f, 0xc4,
|
||||
0x6a, 0x91, 0xd1, 0x43, 0xc3, 0x1e, 0x7a, 0x0a, 0x6b, 0x5c, 0xd4, 0x68, 0x52, 0xb3, 0x8f, 0xa3,
|
||||
0x1a, 0x3c, 0xed, 0x37, 0x18, 0xbb, 0xc8, 0xb8, 0x11, 0xbd, 0x47, 0x80, 0x2c, 0xd3, 0xf3, 0x4c,
|
||||
0xbb, 0x1d, 0x55, 0x89, 0xb3, 0x7d, 0x2c, 0x09, 0x4e, 0x44, 0x7c, 0x1f, 0xd6, 0x8d, 0x3e, 0x76,
|
||||
0x8d, 0x36, 0x1e, 0x71, 0xa4, 0x0b, 0xd8, 0x99, 0xd9, 0x75, 0x69, 0x23, 0xa6, 0xdd, 0x11, 0x72,
|
||||
0x43, 0x1e, 0x77, 0xb9, 0x90, 0xf2, 0x02, 0xb2, 0x21, 0x8d, 0x89, 0x9c, 0xab, 0x9b, 0xa1, 0xb0,
|
||||
0x4a, 0x23, 0x61, 0xfd, 0x31, 0x16, 0xc9, 0x55, 0x54, 0x5f, 0x44, 0xf5, 0x29, 0xdc, 0x30, 0x38,
|
||||
0x15, 0xb7, 0xf4, 0x11, 0x53, 0xbb, 0xb1, 0x8c, 0xa4, 0x2d, 0x87, 0x02, 0xd5, 0xd0, 0x2e, 0x3a,
|
||||
0x82, 0x79, 0xff, 0xd0, 0xf5, 0x3c, 0xcc, 0x93, 0x99, 0x2c, 0x3c, 0xcb, 0x8d, 0xef, 0x44, 0xb9,
|
||||
0x0b, 0xdc, 0xe7, 0x6a, 0xcc, 0x86, 0x16, 0xda, 0xca, 0x3a, 0x90, 0xe0, 0xb4, 0xcb, 0x0e, 0xf1,
|
||||
0x3e, 0x24, 0xb8, 0x12, 0x4b, 0x74, 0xb2, 0x90, 0xbf, 0xd4, 0xbd, 0xf0, 0x25, 0x5c, 0x6b, 0x42,
|
||||
0x5d, 0x79, 0x06, 0x6b, 0xea, 0x27, 0x93, 0xe2, 0xd6, 0x20, 0x7b, 0x53, 0x47, 0xf7, 0x39, 0x64,
|
||||
0x46, 0x75, 0x45, 0x64, 0x2f, 0x55, 0x7e, 0x0b, 0x68, 0xaf, 0x63, 0x98, 0x76, 0x8d, 0x1a, 0xee,
|
||||
0xa0, 0x69, 0x64, 0x60, 0xce, 0xf3, 0x09, 0xb8, 0xc5, 0xf6, 0x3c, 0xaf, 0x05, 0x4b, 0xf4, 0x57,
|
||||
0x48, 0xb5, 0xb1, 0x8d, 0x3d, 0xd3, 0xd3, 0xa9, 0x69, 0x61, 0x51, 0xe0, 0x49, 0x41, 0xab, 0x9b,
|
||||
0x16, 0x56, 0x9e, 0xc2, 0x8d, 0x10, 0x09, 0xeb, 0x0d, 0xd3, 0x75, 0x44, 0x25, 0x07, 0xab, 0xc3,
|
||||
0x7a, 0x02, 0xce, 0x0a, 0xcc, 0xf2, 0xd6, 0xc3, 0x0f, 0x33, 0x5f, 0x28, 0xef, 0x60, 0xa9, 0xe8,
|
||||
0xf9, 0xfd, 0xc4, 0xc2, 0x36, 0x8d, 0x44, 0x0b, 0x3b, 0xa4, 0xd9, 0xd1, 0x19, 0x60, 0xa1, 0x00,
|
||||
0x8c, 0xc4, 0xb6, 0x78, 0x79, 0x0f, 0xf8, 0x76, 0x06, 0x50, 0xd4, 0xae, 0xc0, 0x70, 0x0a, 0x2b,
|
||||
0x83, 0xc3, 0x63, 0x84, 0x7c, 0x16, 0xd2, 0x64, 0xe1, 0x5f, 0x93, 0x12, 0x3f, 0x6a, 0x29, 0x52,
|
||||
0x8a, 0x03, 0xde, 0x72, 0x7f, 0x94, 0x98, 0xfd, 0x5f, 0x0c, 0x96, 0xc7, 0x08, 0xa3, 0xdb, 0x70,
|
||||
0x3d, 0x6c, 0xbe, 0xa2, 0x0b, 0x0d, 0x08, 0xd3, 0x77, 0xec, 0x7b, 0xb0, 0xc0, 0xef, 0x51, 0xec,
|
||||
0xea, 0x91, 0x1b, 0x27, 0x15, 0x10, 0x6b, 0xe2, 0xce, 0x74, 0xf8, 0x75, 0x28, 0x84, 0xf8, 0xbd,
|
||||
0x93, 0x0a, 0x88, 0x4c, 0xe8, 0x7c, 0x62, 0x67, 0x87, 0x4f, 0xc9, 0xcb, 0xf0, 0x94, 0x24, 0xd6,
|
||||
0xa5, 0x8d, 0x74, 0xe1, 0xe1, 0xb4, 0xa7, 0x24, 0x38, 0x1d, 0xbf, 0xc4, 0x60, 0x6d, 0xc2, 0x09,
|
||||
0x8a, 0x18, 0x97, 0xbe, 0xca, 0x38, 0xfa, 0x27, 0xdc, 0xc4, 0xb4, 0xb3, 0xa3, 0xb7, 0xb0, 0x43,
|
||||
0x3c, 0x93, 0xf2, 0xd9, 0x43, 0xb7, 0x7b, 0x56, 0x03, 0xbb, 0x22, 0x72, 0xfe, 0x78, 0xb3, 0x53,
|
||||
0xe2, 0x7c, 0x36, 0x65, 0x54, 0x18, 0x17, 0x3d, 0x81, 0xd5, 0x40, 0xcb, 0xb4, 0x9b, 0xdd, 0x9e,
|
||||
0x67, 0x12, 0x3b, 0x1a, 0xca, 0x15, 0xc1, 0x2d, 0x07, 0x4c, 0x16, 0xad, 0x4d, 0x90, 0x8d, 0xb0,
|
||||
0x09, 0xe9, 0xac, 0x34, 0x45, 0x54, 0x17, 0x07, 0x74, 0xd5, 0x27, 0xa3, 0x97, 0x70, 0x9b, 0x19,
|
||||
0xf0, 0x05, 0x4d, 0x5b, 0x8f, 0xa8, 0x9d, 0xf6, 0x70, 0x8f, 0x37, 0xef, 0xb8, 0x76, 0x33, 0x90,
|
||||
0x29, 0xdb, 0x83, 0xee, 0xf6, 0xd6, 0x17, 0x50, 0x5e, 0xc0, 0x42, 0x89, 0x58, 0x86, 0x19, 0xf6,
|
||||
0xea, 0x15, 0x98, 0xe5, 0x1e, 0xc5, 0x51, 0x62, 0x0b, 0xb4, 0x0a, 0x89, 0x16, 0x13, 0x0b, 0x66,
|
||||
0x11, 0xbe, 0x52, 0x9e, 0x43, 0x3a, 0x50, 0x17, 0xe1, 0xde, 0x04, 0x39, 0xbc, 0xc2, 0x75, 0xa1,
|
||||
0xc3, 0x4d, 0x2d, 0x86, 0x74, 0xae, 0xa2, 0x7c, 0x17, 0x83, 0x25, 0x16, 0xad, 0xba, 0x8b, 0x07,
|
||||
0x37, 0xe8, 0x2b, 0x88, 0x53, 0x57, 0xd4, 0x6d, 0xb2, 0x50, 0x98, 0x94, 0xad, 0x11, 0xc5, 0x9c,
|
||||
0xbf, 0xa8, 0x90, 0x16, 0xd6, 0x98, 0x7e, 0xf6, 0x67, 0x09, 0xe6, 0x03, 0x12, 0xfa, 0x07, 0xcc,
|
||||
0xb2, 0xb4, 0x31, 0x28, 0xc9, 0x82, 0x32, 0xb0, 0x8a, 0x69, 0x27, 0x17, 0x8c, 0x8d, 0xb9, 0x5d,
|
||||
0xe6, 0x82, 0xcf, 0x89, 0x5c, 0x61, 0x68, 0xb6, 0x8b, 0x0d, 0xcd, 0x76, 0xfe, 0x85, 0xeb, 0x18,
|
||||
0x2e, 0x35, 0x9b, 0xa6, 0xc3, 0x2e, 0xa7, 0x3e, 0xa1, 0x38, 0xb8, 0xa3, 0x97, 0xa2, 0x9c, 0x23,
|
||||
0x9f, 0xe1, 0x37, 0x17, 0x31, 0x02, 0x30, 0x39, 0x9e, 0x55, 0xe0, 0xb7, 0xbf, 0x4f, 0x51, 0xde,
|
||||
0xc0, 0x8a, 0x0f, 0x9a, 0x41, 0xf0, 0x8b, 0x21, 0x48, 0xcb, 0x2d, 0xb8, 0xce, 0xc6, 0xa3, 0x13,
|
||||
0x97, 0x58, 0x22, 0x9e, 0xf3, 0x3e, 0xe1, 0x95, 0x4b, 0x2c, 0x7f, 0x54, 0x64, 0x4c, 0x4a, 0x44,
|
||||
0x3d, 0x26, 0xfc, 0x65, 0x9d, 0x6c, 0x1d, 0xc0, 0x42, 0x58, 0xd5, 0x1a, 0xe9, 0x62, 0x94, 0x84,
|
||||
0xb9, 0x77, 0x95, 0xd7, 0x95, 0xc3, 0xe3, 0x8a, 0x7c, 0x0d, 0xa5, 0x60, 0xbe, 0x58, 0xaf, 0xab,
|
||||
0xb5, 0xba, 0xaa, 0xc9, 0x92, 0xbf, 0xaa, 0x6a, 0x87, 0xd5, 0xc3, 0x9a, 0xaa, 0xc9, 0x31, 0x94,
|
||||
0x06, 0x28, 0xee, 0xef, 0x6b, 0xea, 0x7e, 0xb1, 0x7e, 0xa8, 0xc9, 0x33, 0x5b, 0x3f, 0x49, 0xb0,
|
||||
0x38, 0x74, 0x40, 0x10, 0x82, 0xb4, 0x30, 0xa6, 0xd7, 0xea, 0xc5, 0xfa, 0xbb, 0x9a, 0x7c, 0x0d,
|
||||
0xad, 0x80, 0x5c, 0x52, 0xab, 0x87, 0xb5, 0x72, 0x5d, 0xd7, 0xd4, 0x3d, 0xb5, 0x7c, 0xa4, 0x96,
|
||||
0x64, 0xc9, 0x97, 0xac, 0xaa, 0x95, 0x52, 0xb9, 0xb2, 0xaf, 0x17, 0xf7, 0xea, 0xe5, 0x23, 0x55,
|
||||
0x8e, 0x21, 0x80, 0x84, 0xf8, 0x9e, 0xf1, 0xf9, 0xe5, 0x4a, 0xb9, 0x5e, 0x2e, 0xd6, 0xd5, 0x92,
|
||||
0xae, 0xbe, 0x2f, 0xd7, 0xe5, 0x38, 0x92, 0x21, 0x75, 0x5c, 0xae, 0x1f, 0x94, 0xb4, 0xe2, 0x71,
|
||||
0x71, 0xf7, 0x8d, 0x2a, 0xcf, 0xfa, 0x1a, 0x3e, 0x4f, 0x2d, 0xc9, 0x09, 0x5f, 0x83, 0x7f, 0xeb,
|
||||
0xb5, 0x37, 0xc5, 0xda, 0x81, 0x5a, 0x92, 0xe7, 0x0a, 0xbf, 0x49, 0xb0, 0x58, 0x0c, 0x7a, 0x13,
|
||||
0x7f, 0x7f, 0xa0, 0x0e, 0x20, 0x11, 0xc2, 0xc8, 0x04, 0x8e, 0xb6, 0x26, 0x76, 0xe3, 0x91, 0x31,
|
||||
0x3d, 0xfb, 0xb7, 0x09, 0xb5, 0x12, 0x11, 0x2d, 0x19, 0xd4, 0x40, 0x3a, 0x2c, 0xd5, 0x7a, 0x0d,
|
||||
0xcb, 0x3c, 0xe7, 0x48, 0xb9, 0x5c, 0x39, 0xea, 0x60, 0x1c, 0x98, 0xa0, 0xbe, 0x0b, 0x9f, 0xa5,
|
||||
0xf0, 0xe5, 0x11, 0x6e, 0xef, 0x3d, 0xa4, 0x04, 0x4e, 0x56, 0x31, 0xe8, 0xfe, 0x85, 0xc7, 0x25,
|
||||
0xd8, 0xd2, 0x14, 0xe5, 0x8f, 0x3e, 0x40, 0x4a, 0x38, 0xe3, 0xeb, 0x29, 0x74, 0xb2, 0x13, 0x5b,
|
||||
0xeb, 0xd0, 0x83, 0xa9, 0xf0, 0x7f, 0x09, 0x96, 0x82, 0x31, 0x9e, 0x84, 0x9b, 0x71, 0x61, 0x4d,
|
||||
0x44, 0x50, 0xb0, 0x70, 0xd1, 0x6e, 0x55, 0x5d, 0x42, 0x4e, 0x2e, 0x48, 0xd8, 0xc8, 0x2b, 0x25,
|
||||
0xfb, 0xf7, 0xa9, 0x64, 0x05, 0x92, 0x3f, 0xe6, 0x40, 0x1e, 0xd4, 0xb5, 0x00, 0xf2, 0x01, 0x80,
|
||||
0xb7, 0x28, 0x96, 0xd8, 0x07, 0x93, 0xec, 0x9d, 0x6b, 0x9c, 0x93, 0xd3, 0x38, 0xd4, 0x20, 0xff,
|
||||
0x03, 0x4b, 0xc7, 0x86, 0x49, 0x5f, 0x45, 0x27, 0x4d, 0x54, 0xb8, 0xd2, 0x58, 0xca, 0x1d, 0x3e,
|
||||
0xfe, 0x8a, 0x51, 0x76, 0x5b, 0x42, 0x04, 0xd2, 0xe7, 0xa7, 0x28, 0xf4, 0xe8, 0x52, 0x43, 0xd1,
|
||||
0x29, 0x2d, 0x9b, 0x9b, 0x56, 0x5c, 0x6c, 0xb8, 0x0b, 0xcb, 0x7b, 0xc1, 0x60, 0x11, 0x19, 0x52,
|
||||
0x36, 0xa7, 0x99, 0x88, 0xb8, 0xc7, 0xad, 0xe9, 0x87, 0x27, 0x74, 0x3a, 0xda, 0xa7, 0xae, 0xb8,
|
||||
0xbf, 0xab, 0xce, 0xe8, 0xe8, 0xbf, 0x12, 0xac, 0x8c, 0x7b, 0x14, 0xa2, 0xcb, 0x33, 0x34, 0xfa,
|
||||
0x2e, 0xcd, 0x3e, 0xb9, 0x9a, 0x92, 0xc0, 0xd0, 0x03, 0x79, 0x78, 0xc6, 0x47, 0x13, 0x37, 0x32,
|
||||
0xe1, 0x25, 0x91, 0xdd, 0x9e, 0x5e, 0x41, 0xb8, 0xfd, 0x77, 0x58, 0xcc, 0x83, 0x47, 0x02, 0x5a,
|
||||
0xcd, 0xf1, 0xbf, 0x3a, 0xb9, 0xe0, 0xaf, 0x4e, 0x4e, 0xb5, 0x1c, 0x7a, 0x36, 0x39, 0x8d, 0xa3,
|
||||
0x0f, 0x8c, 0x6d, 0x09, 0xbd, 0x86, 0x85, 0x3d, 0xc3, 0x26, 0xb6, 0xd9, 0x34, 0xba, 0x07, 0xd8,
|
||||
0x68, 0x4d, 0x34, 0x3b, 0x45, 0x67, 0xda, 0x4d, 0x7d, 0xfe, 0x72, 0x57, 0xfa, 0xf5, 0xcb, 0x5d,
|
||||
0xe9, 0xf7, 0x2f, 0x77, 0xa5, 0x46, 0x82, 0x59, 0x78, 0xfc, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff,
|
||||
0x8e, 0x5f, 0x85, 0x1b, 0xba, 0x12, 0x00, 0x00,
|
||||
}
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
@@ -1737,6 +1861,70 @@ var _ProposerService_serviceDesc = grpc.ServiceDesc{
|
||||
Metadata: "proto/beacon/rpc/v1/services.proto",
|
||||
}
|
||||
|
||||
// AggregatorServiceClient is the client API for AggregatorService service.
|
||||
//
|
||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
|
||||
type AggregatorServiceClient interface {
|
||||
SubmitAggregateAndProof(ctx context.Context, in *AggregationRequest, opts ...grpc.CallOption) (*AggregationResponse, error)
|
||||
}
|
||||
|
||||
type aggregatorServiceClient struct {
|
||||
cc *grpc.ClientConn
|
||||
}
|
||||
|
||||
func NewAggregatorServiceClient(cc *grpc.ClientConn) AggregatorServiceClient {
|
||||
return &aggregatorServiceClient{cc}
|
||||
}
|
||||
|
||||
func (c *aggregatorServiceClient) SubmitAggregateAndProof(ctx context.Context, in *AggregationRequest, opts ...grpc.CallOption) (*AggregationResponse, error) {
|
||||
out := new(AggregationResponse)
|
||||
err := c.cc.Invoke(ctx, "/ethereum.beacon.rpc.v1.AggregatorService/SubmitAggregateAndProof", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// AggregatorServiceServer is the server API for AggregatorService service.
|
||||
type AggregatorServiceServer interface {
|
||||
SubmitAggregateAndProof(context.Context, *AggregationRequest) (*AggregationResponse, error)
|
||||
}
|
||||
|
||||
func RegisterAggregatorServiceServer(s *grpc.Server, srv AggregatorServiceServer) {
|
||||
s.RegisterService(&_AggregatorService_serviceDesc, srv)
|
||||
}
|
||||
|
||||
func _AggregatorService_SubmitAggregateAndProof_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(AggregationRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(AggregatorServiceServer).SubmitAggregateAndProof(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/ethereum.beacon.rpc.v1.AggregatorService/SubmitAggregateAndProof",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(AggregatorServiceServer).SubmitAggregateAndProof(ctx, req.(*AggregationRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
var _AggregatorService_serviceDesc = grpc.ServiceDesc{
|
||||
ServiceName: "ethereum.beacon.rpc.v1.AggregatorService",
|
||||
HandlerType: (*AggregatorServiceServer)(nil),
|
||||
Methods: []grpc.MethodDesc{
|
||||
{
|
||||
MethodName: "SubmitAggregateAndProof",
|
||||
Handler: _AggregatorService_SubmitAggregateAndProof_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{},
|
||||
Metadata: "proto/beacon/rpc/v1/services.proto",
|
||||
}
|
||||
|
||||
// ValidatorServiceClient is the client API for ValidatorService service.
|
||||
//
|
||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
|
||||
@@ -2249,6 +2437,76 @@ func (m *AttestResponse) MarshalTo(dAtA []byte) (int, error) {
|
||||
return i, nil
|
||||
}
|
||||
|
||||
func (m *AggregationRequest) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalTo(dAtA)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *AggregationRequest) MarshalTo(dAtA []byte) (int, error) {
|
||||
var i int
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if m.Slot != 0 {
|
||||
dAtA[i] = 0x8
|
||||
i++
|
||||
i = encodeVarintServices(dAtA, i, uint64(m.Slot))
|
||||
}
|
||||
if m.CommitteeIndex != 0 {
|
||||
dAtA[i] = 0x10
|
||||
i++
|
||||
i = encodeVarintServices(dAtA, i, uint64(m.CommitteeIndex))
|
||||
}
|
||||
if len(m.PublicKey) > 0 {
|
||||
dAtA[i] = 0x1a
|
||||
i++
|
||||
i = encodeVarintServices(dAtA, i, uint64(len(m.PublicKey)))
|
||||
i += copy(dAtA[i:], m.PublicKey)
|
||||
}
|
||||
if len(m.SlotSignature) > 0 {
|
||||
dAtA[i] = 0x22
|
||||
i++
|
||||
i = encodeVarintServices(dAtA, i, uint64(len(m.SlotSignature)))
|
||||
i += copy(dAtA[i:], m.SlotSignature)
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
i += copy(dAtA[i:], m.XXX_unrecognized)
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
func (m *AggregationResponse) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalTo(dAtA)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *AggregationResponse) MarshalTo(dAtA []byte) (int, error) {
|
||||
var i int
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.Root) > 0 {
|
||||
dAtA[i] = 0xa
|
||||
i++
|
||||
i = encodeVarintServices(dAtA, i, uint64(len(m.Root)))
|
||||
i += copy(dAtA[i:], m.Root)
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
i += copy(dAtA[i:], m.XXX_unrecognized)
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
func (m *ValidatorPerformanceRequest) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
@@ -3031,6 +3289,48 @@ func (m *AttestResponse) Size() (n int) {
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *AggregationRequest) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if m.Slot != 0 {
|
||||
n += 1 + sovServices(uint64(m.Slot))
|
||||
}
|
||||
if m.CommitteeIndex != 0 {
|
||||
n += 1 + sovServices(uint64(m.CommitteeIndex))
|
||||
}
|
||||
l = len(m.PublicKey)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovServices(uint64(l))
|
||||
}
|
||||
l = len(m.SlotSignature)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovServices(uint64(l))
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
n += len(m.XXX_unrecognized)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *AggregationResponse) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
l = len(m.Root)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovServices(uint64(l))
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
n += len(m.XXX_unrecognized)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *ValidatorPerformanceRequest) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
@@ -3886,6 +4186,254 @@ func (m *AttestResponse) Unmarshal(dAtA []byte) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *AggregationRequest) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowServices
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: AggregationRequest: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: AggregationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Slot", wireType)
|
||||
}
|
||||
m.Slot = 0
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowServices
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
m.Slot |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 2:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field CommitteeIndex", wireType)
|
||||
}
|
||||
m.CommitteeIndex = 0
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowServices
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
m.CommitteeIndex |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 3:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field PublicKey", wireType)
|
||||
}
|
||||
var byteLen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowServices
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
byteLen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if byteLen < 0 {
|
||||
return ErrInvalidLengthServices
|
||||
}
|
||||
postIndex := iNdEx + byteLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthServices
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.PublicKey = append(m.PublicKey[:0], dAtA[iNdEx:postIndex]...)
|
||||
if m.PublicKey == nil {
|
||||
m.PublicKey = []byte{}
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 4:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field SlotSignature", wireType)
|
||||
}
|
||||
var byteLen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowServices
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
byteLen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if byteLen < 0 {
|
||||
return ErrInvalidLengthServices
|
||||
}
|
||||
postIndex := iNdEx + byteLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthServices
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.SlotSignature = append(m.SlotSignature[:0], dAtA[iNdEx:postIndex]...)
|
||||
if m.SlotSignature == nil {
|
||||
m.SlotSignature = []byte{}
|
||||
}
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipServices(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if skippy < 0 {
|
||||
return ErrInvalidLengthServices
|
||||
}
|
||||
if (iNdEx + skippy) < 0 {
|
||||
return ErrInvalidLengthServices
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *AggregationResponse) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowServices
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: AggregationResponse: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: AggregationResponse: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Root", wireType)
|
||||
}
|
||||
var byteLen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowServices
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
byteLen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if byteLen < 0 {
|
||||
return ErrInvalidLengthServices
|
||||
}
|
||||
postIndex := iNdEx + byteLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthServices
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Root = append(m.Root[:0], dAtA[iNdEx:postIndex]...)
|
||||
if m.Root == nil {
|
||||
m.Root = []byte{}
|
||||
}
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipServices(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if skippy < 0 {
|
||||
return ErrInvalidLengthServices
|
||||
}
|
||||
if (iNdEx + skippy) < 0 {
|
||||
return ErrInvalidLengthServices
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *ValidatorPerformanceRequest) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
|
||||
@@ -16,6 +16,10 @@ service ProposerService {
|
||||
rpc ProposeBlock(ethereum.eth.v1alpha1.BeaconBlock) returns (ProposeResponse);
|
||||
}
|
||||
|
||||
service AggregatorService {
|
||||
rpc SubmitAggregateAndProof(AggregationRequest) returns (AggregationResponse);
|
||||
}
|
||||
|
||||
service ValidatorService {
|
||||
rpc DomainData(DomainRequest) returns (DomainResponse);
|
||||
rpc WaitForActivation(ValidatorActivationRequest) returns (stream ValidatorActivationResponse);
|
||||
@@ -48,6 +52,17 @@ message AttestResponse {
|
||||
bytes root = 1;
|
||||
}
|
||||
|
||||
message AggregationRequest {
|
||||
uint64 slot = 1;
|
||||
uint64 committee_index = 2;
|
||||
bytes public_key = 3;
|
||||
bytes slot_signature = 4;
|
||||
}
|
||||
|
||||
message AggregationResponse {
|
||||
bytes root = 1;
|
||||
}
|
||||
|
||||
message ValidatorPerformanceRequest {
|
||||
uint64 slot = 1;
|
||||
repeated bytes public_keys = 2;
|
||||
@@ -88,11 +103,11 @@ message ChainStartResponse {
|
||||
uint64 genesis_time = 2;
|
||||
}
|
||||
|
||||
enum ValidatorRole {
|
||||
enum ValidatorRole {
|
||||
UNKNOWN = 0;
|
||||
ATTESTER = 1;
|
||||
PROPOSER = 2;
|
||||
BOTH = 3;
|
||||
AGGREGATOR = 3;
|
||||
}
|
||||
|
||||
message ValidatorIndexRequest {
|
||||
|
||||
436
proto/beacon/rpc/v1_gateway/services.pb.go
generated
436
proto/beacon/rpc/v1_gateway/services.pb.go
generated
@@ -11,7 +11,6 @@ import (
|
||||
proto "github.com/golang/protobuf/proto"
|
||||
empty "github.com/golang/protobuf/ptypes/empty"
|
||||
v1alpha1 "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
||||
_ "google.golang.org/genproto/googleapis/api/annotations"
|
||||
grpc "google.golang.org/grpc"
|
||||
codes "google.golang.org/grpc/codes"
|
||||
status "google.golang.org/grpc/status"
|
||||
@@ -31,24 +30,24 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||
type ValidatorRole int32
|
||||
|
||||
const (
|
||||
ValidatorRole_UNKNOWN ValidatorRole = 0
|
||||
ValidatorRole_ATTESTER ValidatorRole = 1
|
||||
ValidatorRole_PROPOSER ValidatorRole = 2
|
||||
ValidatorRole_BOTH ValidatorRole = 3
|
||||
ValidatorRole_UNKNOWN ValidatorRole = 0
|
||||
ValidatorRole_ATTESTER ValidatorRole = 1
|
||||
ValidatorRole_PROPOSER ValidatorRole = 2
|
||||
ValidatorRole_AGGREGATOR ValidatorRole = 3
|
||||
)
|
||||
|
||||
var ValidatorRole_name = map[int32]string{
|
||||
0: "UNKNOWN",
|
||||
1: "ATTESTER",
|
||||
2: "PROPOSER",
|
||||
3: "BOTH",
|
||||
3: "AGGREGATOR",
|
||||
}
|
||||
|
||||
var ValidatorRole_value = map[string]int32{
|
||||
"UNKNOWN": 0,
|
||||
"ATTESTER": 1,
|
||||
"PROPOSER": 2,
|
||||
"BOTH": 3,
|
||||
"UNKNOWN": 0,
|
||||
"ATTESTER": 1,
|
||||
"PROPOSER": 2,
|
||||
"AGGREGATOR": 3,
|
||||
}
|
||||
|
||||
func (x ValidatorRole) String() string {
|
||||
@@ -290,6 +289,108 @@ func (m *AttestResponse) GetRoot() []byte {
|
||||
return nil
|
||||
}
|
||||
|
||||
type AggregationRequest struct {
|
||||
Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"`
|
||||
CommitteeIndex uint64 `protobuf:"varint,2,opt,name=committee_index,json=committeeIndex,proto3" json:"committee_index,omitempty"`
|
||||
PublicKey []byte `protobuf:"bytes,3,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"`
|
||||
SlotSignature []byte `protobuf:"bytes,4,opt,name=slot_signature,json=slotSignature,proto3" json:"slot_signature,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *AggregationRequest) Reset() { *m = AggregationRequest{} }
|
||||
func (m *AggregationRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*AggregationRequest) ProtoMessage() {}
|
||||
func (*AggregationRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{4}
|
||||
}
|
||||
|
||||
func (m *AggregationRequest) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_AggregationRequest.Unmarshal(m, b)
|
||||
}
|
||||
func (m *AggregationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
return xxx_messageInfo_AggregationRequest.Marshal(b, m, deterministic)
|
||||
}
|
||||
func (m *AggregationRequest) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_AggregationRequest.Merge(m, src)
|
||||
}
|
||||
func (m *AggregationRequest) XXX_Size() int {
|
||||
return xxx_messageInfo_AggregationRequest.Size(m)
|
||||
}
|
||||
func (m *AggregationRequest) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_AggregationRequest.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_AggregationRequest proto.InternalMessageInfo
|
||||
|
||||
func (m *AggregationRequest) GetSlot() uint64 {
|
||||
if m != nil {
|
||||
return m.Slot
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *AggregationRequest) GetCommitteeIndex() uint64 {
|
||||
if m != nil {
|
||||
return m.CommitteeIndex
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *AggregationRequest) GetPublicKey() []byte {
|
||||
if m != nil {
|
||||
return m.PublicKey
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *AggregationRequest) GetSlotSignature() []byte {
|
||||
if m != nil {
|
||||
return m.SlotSignature
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type AggregationResponse struct {
|
||||
Root []byte `protobuf:"bytes,1,opt,name=root,proto3" json:"root,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *AggregationResponse) Reset() { *m = AggregationResponse{} }
|
||||
func (m *AggregationResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*AggregationResponse) ProtoMessage() {}
|
||||
func (*AggregationResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{5}
|
||||
}
|
||||
|
||||
func (m *AggregationResponse) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_AggregationResponse.Unmarshal(m, b)
|
||||
}
|
||||
func (m *AggregationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
return xxx_messageInfo_AggregationResponse.Marshal(b, m, deterministic)
|
||||
}
|
||||
func (m *AggregationResponse) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_AggregationResponse.Merge(m, src)
|
||||
}
|
||||
func (m *AggregationResponse) XXX_Size() int {
|
||||
return xxx_messageInfo_AggregationResponse.Size(m)
|
||||
}
|
||||
func (m *AggregationResponse) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_AggregationResponse.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_AggregationResponse proto.InternalMessageInfo
|
||||
|
||||
func (m *AggregationResponse) GetRoot() []byte {
|
||||
if m != nil {
|
||||
return m.Root
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type ValidatorPerformanceRequest struct {
|
||||
Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"`
|
||||
PublicKeys [][]byte `protobuf:"bytes,2,rep,name=public_keys,json=publicKeys,proto3" json:"public_keys,omitempty"`
|
||||
@@ -302,7 +403,7 @@ func (m *ValidatorPerformanceRequest) Reset() { *m = ValidatorPerformanc
|
||||
func (m *ValidatorPerformanceRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorPerformanceRequest) ProtoMessage() {}
|
||||
func (*ValidatorPerformanceRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{4}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{6}
|
||||
}
|
||||
|
||||
func (m *ValidatorPerformanceRequest) XXX_Unmarshal(b []byte) error {
|
||||
@@ -352,7 +453,7 @@ func (m *ValidatorPerformanceResponse) Reset() { *m = ValidatorPerforman
|
||||
func (m *ValidatorPerformanceResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorPerformanceResponse) ProtoMessage() {}
|
||||
func (*ValidatorPerformanceResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{5}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{7}
|
||||
}
|
||||
|
||||
func (m *ValidatorPerformanceResponse) XXX_Unmarshal(b []byte) error {
|
||||
@@ -419,7 +520,7 @@ func (m *ValidatorActivationRequest) Reset() { *m = ValidatorActivationR
|
||||
func (m *ValidatorActivationRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorActivationRequest) ProtoMessage() {}
|
||||
func (*ValidatorActivationRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{6}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{8}
|
||||
}
|
||||
|
||||
func (m *ValidatorActivationRequest) XXX_Unmarshal(b []byte) error {
|
||||
@@ -459,7 +560,7 @@ func (m *ValidatorActivationResponse) Reset() { *m = ValidatorActivation
|
||||
func (m *ValidatorActivationResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorActivationResponse) ProtoMessage() {}
|
||||
func (*ValidatorActivationResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{7}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{9}
|
||||
}
|
||||
|
||||
func (m *ValidatorActivationResponse) XXX_Unmarshal(b []byte) error {
|
||||
@@ -507,7 +608,7 @@ func (m *ValidatorActivationResponse_Status) Reset() { *m = ValidatorAct
|
||||
func (m *ValidatorActivationResponse_Status) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorActivationResponse_Status) ProtoMessage() {}
|
||||
func (*ValidatorActivationResponse_Status) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{7, 0}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{9, 0}
|
||||
}
|
||||
|
||||
func (m *ValidatorActivationResponse_Status) XXX_Unmarshal(b []byte) error {
|
||||
@@ -553,7 +654,7 @@ func (m *ExitedValidatorsRequest) Reset() { *m = ExitedValidatorsRequest
|
||||
func (m *ExitedValidatorsRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*ExitedValidatorsRequest) ProtoMessage() {}
|
||||
func (*ExitedValidatorsRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{8}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{10}
|
||||
}
|
||||
|
||||
func (m *ExitedValidatorsRequest) XXX_Unmarshal(b []byte) error {
|
||||
@@ -592,7 +693,7 @@ func (m *ExitedValidatorsResponse) Reset() { *m = ExitedValidatorsRespon
|
||||
func (m *ExitedValidatorsResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*ExitedValidatorsResponse) ProtoMessage() {}
|
||||
func (*ExitedValidatorsResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{9}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{11}
|
||||
}
|
||||
|
||||
func (m *ExitedValidatorsResponse) XXX_Unmarshal(b []byte) error {
|
||||
@@ -632,7 +733,7 @@ func (m *ChainStartResponse) Reset() { *m = ChainStartResponse{} }
|
||||
func (m *ChainStartResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*ChainStartResponse) ProtoMessage() {}
|
||||
func (*ChainStartResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{10}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{12}
|
||||
}
|
||||
|
||||
func (m *ChainStartResponse) XXX_Unmarshal(b []byte) error {
|
||||
@@ -678,7 +779,7 @@ func (m *ValidatorIndexRequest) Reset() { *m = ValidatorIndexRequest{} }
|
||||
func (m *ValidatorIndexRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorIndexRequest) ProtoMessage() {}
|
||||
func (*ValidatorIndexRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{11}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{13}
|
||||
}
|
||||
|
||||
func (m *ValidatorIndexRequest) XXX_Unmarshal(b []byte) error {
|
||||
@@ -717,7 +818,7 @@ func (m *ValidatorIndexResponse) Reset() { *m = ValidatorIndexResponse{}
|
||||
func (m *ValidatorIndexResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorIndexResponse) ProtoMessage() {}
|
||||
func (*ValidatorIndexResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{12}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{14}
|
||||
}
|
||||
|
||||
func (m *ValidatorIndexResponse) XXX_Unmarshal(b []byte) error {
|
||||
@@ -757,7 +858,7 @@ func (m *AssignmentRequest) Reset() { *m = AssignmentRequest{} }
|
||||
func (m *AssignmentRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*AssignmentRequest) ProtoMessage() {}
|
||||
func (*AssignmentRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{13}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{15}
|
||||
}
|
||||
|
||||
func (m *AssignmentRequest) XXX_Unmarshal(b []byte) error {
|
||||
@@ -803,7 +904,7 @@ func (m *AssignmentResponse) Reset() { *m = AssignmentResponse{} }
|
||||
func (m *AssignmentResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*AssignmentResponse) ProtoMessage() {}
|
||||
func (*AssignmentResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{14}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{16}
|
||||
}
|
||||
|
||||
func (m *AssignmentResponse) XXX_Unmarshal(b []byte) error {
|
||||
@@ -849,7 +950,7 @@ func (m *AssignmentResponse_ValidatorAssignment) Reset() {
|
||||
func (m *AssignmentResponse_ValidatorAssignment) String() string { return proto.CompactTextString(m) }
|
||||
func (*AssignmentResponse_ValidatorAssignment) ProtoMessage() {}
|
||||
func (*AssignmentResponse_ValidatorAssignment) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{14, 0}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{16, 0}
|
||||
}
|
||||
|
||||
func (m *AssignmentResponse_ValidatorAssignment) XXX_Unmarshal(b []byte) error {
|
||||
@@ -927,7 +1028,7 @@ func (m *ValidatorStatusResponse) Reset() { *m = ValidatorStatusResponse
|
||||
func (m *ValidatorStatusResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*ValidatorStatusResponse) ProtoMessage() {}
|
||||
func (*ValidatorStatusResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{15}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{17}
|
||||
}
|
||||
|
||||
func (m *ValidatorStatusResponse) XXX_Unmarshal(b []byte) error {
|
||||
@@ -995,7 +1096,7 @@ func (m *DomainRequest) Reset() { *m = DomainRequest{} }
|
||||
func (m *DomainRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*DomainRequest) ProtoMessage() {}
|
||||
func (*DomainRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{16}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{18}
|
||||
}
|
||||
|
||||
func (m *DomainRequest) XXX_Unmarshal(b []byte) error {
|
||||
@@ -1041,7 +1142,7 @@ func (m *DomainResponse) Reset() { *m = DomainResponse{} }
|
||||
func (m *DomainResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*DomainResponse) ProtoMessage() {}
|
||||
func (*DomainResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{17}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{19}
|
||||
}
|
||||
|
||||
func (m *DomainResponse) XXX_Unmarshal(b []byte) error {
|
||||
@@ -1080,7 +1181,7 @@ func (m *BlockTreeResponse) Reset() { *m = BlockTreeResponse{} }
|
||||
func (m *BlockTreeResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*BlockTreeResponse) ProtoMessage() {}
|
||||
func (*BlockTreeResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{18}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{20}
|
||||
}
|
||||
|
||||
func (m *BlockTreeResponse) XXX_Unmarshal(b []byte) error {
|
||||
@@ -1122,7 +1223,7 @@ func (m *BlockTreeResponse_TreeNode) Reset() { *m = BlockTreeResponse_Tr
|
||||
func (m *BlockTreeResponse_TreeNode) String() string { return proto.CompactTextString(m) }
|
||||
func (*BlockTreeResponse_TreeNode) ProtoMessage() {}
|
||||
func (*BlockTreeResponse_TreeNode) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{18, 0}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{20, 0}
|
||||
}
|
||||
|
||||
func (m *BlockTreeResponse_TreeNode) XXX_Unmarshal(b []byte) error {
|
||||
@@ -1183,7 +1284,7 @@ func (m *TreeBlockSlotRequest) Reset() { *m = TreeBlockSlotRequest{} }
|
||||
func (m *TreeBlockSlotRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*TreeBlockSlotRequest) ProtoMessage() {}
|
||||
func (*TreeBlockSlotRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9eb4e94b85965285, []int{19}
|
||||
return fileDescriptor_9eb4e94b85965285, []int{21}
|
||||
}
|
||||
|
||||
func (m *TreeBlockSlotRequest) XXX_Unmarshal(b []byte) error {
|
||||
@@ -1225,6 +1326,8 @@ func init() {
|
||||
proto.RegisterType((*ProposeResponse)(nil), "ethereum.beacon.rpc.v1.ProposeResponse")
|
||||
proto.RegisterType((*AttestationRequest)(nil), "ethereum.beacon.rpc.v1.AttestationRequest")
|
||||
proto.RegisterType((*AttestResponse)(nil), "ethereum.beacon.rpc.v1.AttestResponse")
|
||||
proto.RegisterType((*AggregationRequest)(nil), "ethereum.beacon.rpc.v1.AggregationRequest")
|
||||
proto.RegisterType((*AggregationResponse)(nil), "ethereum.beacon.rpc.v1.AggregationResponse")
|
||||
proto.RegisterType((*ValidatorPerformanceRequest)(nil), "ethereum.beacon.rpc.v1.ValidatorPerformanceRequest")
|
||||
proto.RegisterType((*ValidatorPerformanceResponse)(nil), "ethereum.beacon.rpc.v1.ValidatorPerformanceResponse")
|
||||
proto.RegisterType((*ValidatorActivationRequest)(nil), "ethereum.beacon.rpc.v1.ValidatorActivationRequest")
|
||||
@@ -1249,105 +1352,110 @@ func init() {
|
||||
func init() { proto.RegisterFile("proto/beacon/rpc/v1/services.proto", fileDescriptor_9eb4e94b85965285) }
|
||||
|
||||
var fileDescriptor_9eb4e94b85965285 = []byte{
|
||||
// 1563 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0xcd, 0x6e, 0xdb, 0xc6,
|
||||
0x13, 0x0f, 0x65, 0x59, 0x76, 0x46, 0xb2, 0x4d, 0xaf, 0x1d, 0x5b, 0x51, 0x1c, 0xfc, 0xfd, 0x67,
|
||||
0x93, 0xc6, 0x36, 0x10, 0xc9, 0x56, 0x82, 0xa0, 0x4d, 0x90, 0x06, 0x92, 0xc5, 0xd8, 0x42, 0x02,
|
||||
0xd9, 0xa1, 0x14, 0x3b, 0x45, 0x0e, 0xc4, 0x4a, 0xda, 0x58, 0x44, 0x44, 0x2e, 0x4d, 0xae, 0x84,
|
||||
0xf8, 0x52, 0xa0, 0x97, 0x02, 0xbd, 0xb5, 0x87, 0x9e, 0x8b, 0x3e, 0x43, 0x0f, 0x7d, 0x85, 0x3e,
|
||||
0x44, 0x8f, 0x7d, 0x90, 0x82, 0xbb, 0x4b, 0x8a, 0xd6, 0x47, 0x2c, 0xe7, 0xc6, 0x9d, 0x99, 0xdf,
|
||||
0xcc, 0xec, 0xec, 0x7c, 0x49, 0xa0, 0xb9, 0x1e, 0x65, 0xb4, 0xd0, 0x24, 0xb8, 0x45, 0x9d, 0x82,
|
||||
0xe7, 0xb6, 0x0a, 0xfd, 0xbd, 0x82, 0x4f, 0xbc, 0xbe, 0xd5, 0x22, 0x7e, 0x9e, 0x33, 0xd1, 0x1a,
|
||||
0x61, 0x1d, 0xe2, 0x91, 0x9e, 0x9d, 0x17, 0x62, 0x79, 0xcf, 0x6d, 0xe5, 0xfb, 0x7b, 0xb9, 0x3b,
|
||||
0x67, 0x94, 0x9e, 0x75, 0x49, 0x81, 0x4b, 0x35, 0x7b, 0x1f, 0x0a, 0xc4, 0x76, 0xd9, 0x85, 0x00,
|
||||
0xe5, 0xee, 0x0b, 0xc5, 0x84, 0x75, 0x0a, 0xfd, 0x3d, 0xdc, 0x75, 0x3b, 0x78, 0x4f, 0x5a, 0x31,
|
||||
0x9b, 0x5d, 0xda, 0xfa, 0x28, 0xc5, 0xee, 0x8d, 0x11, 0xc3, 0x8c, 0x11, 0x9f, 0x61, 0x66, 0x51,
|
||||
0x47, 0x4a, 0x6d, 0x48, 0x4b, 0xd8, 0xb5, 0x0a, 0xd8, 0x71, 0xa8, 0x60, 0x4a, 0xff, 0xb4, 0x03,
|
||||
0xc8, 0x94, 0x03, 0x95, 0x06, 0x39, 0xef, 0x11, 0x9f, 0x21, 0x04, 0x49, 0xbf, 0x4b, 0x59, 0x56,
|
||||
0xd9, 0x54, 0xb6, 0x92, 0x06, 0xff, 0x46, 0x5f, 0xc1, 0x82, 0x87, 0x9d, 0x36, 0xa6, 0xa6, 0x47,
|
||||
0xfa, 0x04, 0x77, 0xb3, 0x89, 0x4d, 0x65, 0x2b, 0x63, 0x64, 0x04, 0xd1, 0xe0, 0x34, 0x6d, 0x17,
|
||||
0x96, 0x8e, 0x3d, 0xea, 0x52, 0x9f, 0x18, 0xc4, 0x77, 0xa9, 0xe3, 0x13, 0x74, 0x17, 0x80, 0xbb,
|
||||
0x6b, 0x7a, 0x54, 0x6a, 0xcc, 0x18, 0x37, 0x39, 0xc5, 0xa0, 0x94, 0x69, 0x3f, 0x2b, 0x80, 0x4a,
|
||||
0x03, 0x77, 0x43, 0x0f, 0xee, 0x02, 0xb8, 0xbd, 0x66, 0xd7, 0x6a, 0x99, 0x1f, 0xc9, 0x45, 0x88,
|
||||
0x12, 0x94, 0x57, 0xe4, 0x02, 0xad, 0xc3, 0x9c, 0x4b, 0x5b, 0x66, 0xd3, 0x62, 0xd2, 0x8d, 0x94,
|
||||
0x4b, 0x5b, 0x65, 0x6b, 0xe0, 0xf9, 0x4c, 0xcc, 0xf3, 0x07, 0xb0, 0xd4, 0xa2, 0xb6, 0x6d, 0x31,
|
||||
0x46, 0x88, 0x69, 0x39, 0x6d, 0xf2, 0x29, 0x9b, 0xe4, 0xec, 0xc5, 0x88, 0x5c, 0x0d, 0xa8, 0xda,
|
||||
0x3d, 0x58, 0x14, 0xae, 0x44, 0xce, 0x23, 0x48, 0xc6, 0xdc, 0xe6, 0xdf, 0x9a, 0x01, 0x77, 0x4e,
|
||||
0x70, 0xd7, 0x6a, 0x63, 0x46, 0xbd, 0x63, 0xe2, 0x7d, 0xa0, 0x9e, 0x8d, 0x9d, 0x16, 0xf9, 0x5c,
|
||||
0xec, 0xfe, 0x07, 0xe9, 0xc1, 0x6d, 0xfc, 0x6c, 0x62, 0x73, 0x66, 0x2b, 0x63, 0x40, 0x74, 0x1d,
|
||||
0x5f, 0xfb, 0x2d, 0x01, 0x1b, 0xe3, 0x95, 0x4a, 0x47, 0x72, 0x30, 0xdf, 0xc4, 0xdd, 0x80, 0xe4,
|
||||
0x67, 0x95, 0xcd, 0x99, 0xad, 0xa4, 0x11, 0x9d, 0xd1, 0x36, 0xa8, 0x8c, 0x32, 0xdc, 0x35, 0xfb,
|
||||
0xa1, 0x06, 0x9f, 0x47, 0x25, 0x69, 0x2c, 0x71, 0x7a, 0xa4, 0xd8, 0x47, 0x4f, 0x60, 0x5d, 0x88,
|
||||
0xe2, 0x16, 0xb3, 0xfa, 0x24, 0x8e, 0x10, 0x11, 0xbb, 0xc5, 0xd9, 0x25, 0xce, 0x8d, 0xe1, 0x1e,
|
||||
0x02, 0xb2, 0x2d, 0xdf, 0xb7, 0x9c, 0xb3, 0x38, 0x24, 0xc9, 0xef, 0xb1, 0x2c, 0x39, 0x31, 0xf1,
|
||||
0x03, 0xd8, 0xc4, 0x7d, 0xe2, 0xe1, 0x33, 0x32, 0x62, 0xc8, 0x94, 0x6e, 0x67, 0x67, 0x37, 0x95,
|
||||
0xad, 0x84, 0x71, 0x57, 0xca, 0x0d, 0x59, 0x2c, 0x0b, 0x21, 0xed, 0x39, 0xe4, 0x22, 0x1a, 0x17,
|
||||
0xb9, 0x94, 0x24, 0x43, 0x61, 0x55, 0x46, 0xc2, 0xfa, 0x7b, 0x22, 0xf6, 0x56, 0x71, 0xbc, 0x8c,
|
||||
0xea, 0x13, 0xb8, 0x85, 0x05, 0x95, 0xb4, 0xcd, 0x11, 0x55, 0xe5, 0x44, 0x56, 0x31, 0x56, 0x22,
|
||||
0x81, 0xe3, 0x48, 0x2f, 0x3a, 0x81, 0xf9, 0x20, 0x5f, 0x7b, 0x3e, 0x11, 0x8f, 0x99, 0x2e, 0x3e,
|
||||
0xcd, 0x8f, 0x2f, 0xf1, 0xfc, 0x67, 0xcc, 0xe7, 0xeb, 0x5c, 0x87, 0x11, 0xe9, 0xca, 0xb9, 0x90,
|
||||
0x12, 0xb4, 0xab, 0xf2, 0xff, 0x00, 0x52, 0x02, 0xc4, 0x1f, 0x3a, 0x5d, 0x2c, 0x5c, 0x69, 0x5e,
|
||||
0xda, 0x92, 0xa6, 0x0d, 0x09, 0xd7, 0x9e, 0xc2, 0xba, 0xfe, 0xc9, 0x62, 0xa4, 0x3d, 0x78, 0xbd,
|
||||
0xa9, 0xa3, 0xfb, 0x0c, 0xb2, 0xa3, 0x58, 0x19, 0xd9, 0x2b, 0xc1, 0x6f, 0x00, 0xed, 0x77, 0xb0,
|
||||
0xe5, 0xd4, 0x19, 0xf6, 0x06, 0xf5, 0x96, 0x85, 0x39, 0x3f, 0x20, 0x90, 0x36, 0xbf, 0xf3, 0xbc,
|
||||
0x11, 0x1e, 0xd1, 0xff, 0x21, 0x73, 0x46, 0x1c, 0xe2, 0x5b, 0xbe, 0xc9, 0x2c, 0x9b, 0xc8, 0x04,
|
||||
0x4f, 0x4b, 0x5a, 0xc3, 0xb2, 0x89, 0xf6, 0x04, 0x6e, 0x45, 0x9e, 0xf0, 0x82, 0x9e, 0xae, 0x99,
|
||||
0x68, 0x79, 0x58, 0x1b, 0xc6, 0x49, 0x77, 0x56, 0x61, 0x56, 0xf4, 0x0b, 0x51, 0xcc, 0xe2, 0xa0,
|
||||
0xbd, 0x85, 0xe5, 0x92, 0xef, 0x5b, 0x67, 0x8e, 0x4d, 0x1c, 0x16, 0x8b, 0x16, 0x71, 0x69, 0xab,
|
||||
0x63, 0x72, 0x87, 0x25, 0x00, 0x38, 0x89, 0x5f, 0xf1, 0xea, 0x1e, 0xf0, 0xcb, 0x0c, 0xa0, 0xb8,
|
||||
0x5e, 0xe9, 0xc3, 0x39, 0xac, 0x0e, 0x8a, 0x07, 0x47, 0x7c, 0x1e, 0xd2, 0x74, 0xf1, 0xbb, 0x49,
|
||||
0x0f, 0x3f, 0xaa, 0x29, 0x96, 0x8a, 0x03, 0xde, 0x4a, 0x7f, 0x94, 0x98, 0xfb, 0x29, 0x01, 0x2b,
|
||||
0x63, 0x84, 0xd1, 0x06, 0xdc, 0x8c, 0x3a, 0xa6, 0xec, 0x42, 0x03, 0xc2, 0xb8, 0x36, 0x9b, 0x18,
|
||||
0xd7, 0x66, 0x83, 0x49, 0x22, 0x06, 0x14, 0xf1, 0xcc, 0x58, 0xb3, 0xce, 0x84, 0xc4, 0xba, 0x1c,
|
||||
0x37, 0xae, 0x98, 0x24, 0x52, 0x48, 0xb4, 0xec, 0x4c, 0x48, 0xe4, 0x42, 0x97, 0x1f, 0x76, 0x76,
|
||||
0xb8, 0x4a, 0x5e, 0x44, 0x55, 0x92, 0xda, 0x54, 0xb6, 0x16, 0x8b, 0x0f, 0xa6, 0xad, 0x92, 0xb0,
|
||||
0x3a, 0xfe, 0x4a, 0xc0, 0xfa, 0x84, 0x0a, 0x8a, 0x29, 0x57, 0xbe, 0x48, 0x39, 0xfa, 0x16, 0x6e,
|
||||
0x13, 0xd6, 0xd9, 0x33, 0xdb, 0xc4, 0xa5, 0xbe, 0xc5, 0xc4, 0x50, 0x37, 0x9d, 0x9e, 0xdd, 0x24,
|
||||
0x9e, 0x8c, 0x5c, 0xb0, 0x37, 0xec, 0x55, 0x04, 0x9f, 0x0f, 0xe8, 0x1a, 0xe7, 0xa2, 0xc7, 0xb0,
|
||||
0x16, 0xa2, 0x2c, 0xa7, 0xd5, 0xed, 0xf9, 0x16, 0x75, 0xe2, 0xa1, 0x5c, 0x95, 0xdc, 0x6a, 0xc8,
|
||||
0xe4, 0xd1, 0xda, 0x06, 0x15, 0x47, 0x4d, 0xc8, 0xe4, 0xa9, 0x29, 0xa3, 0xba, 0x34, 0xa0, 0xeb,
|
||||
0x01, 0x19, 0xbd, 0x80, 0x0d, 0xae, 0x20, 0x10, 0xb4, 0x1c, 0x33, 0x06, 0x3b, 0xef, 0x91, 0x9e,
|
||||
0x68, 0xde, 0x49, 0xe3, 0x76, 0x28, 0x53, 0x75, 0x06, 0xdd, 0xed, 0x4d, 0x20, 0xa0, 0x3d, 0x87,
|
||||
0x85, 0x0a, 0xb5, 0xb1, 0x15, 0xf5, 0xea, 0x55, 0x98, 0x15, 0x16, 0x65, 0x29, 0xf1, 0x03, 0x5a,
|
||||
0x83, 0x54, 0x9b, 0x8b, 0x85, 0x63, 0x5c, 0x9c, 0xb4, 0x67, 0xb0, 0x18, 0xc2, 0x65, 0xb8, 0xb7,
|
||||
0x41, 0x0d, 0xf2, 0x10, 0xb3, 0x9e, 0x47, 0x4c, 0x89, 0x11, 0xaa, 0x96, 0x22, 0xba, 0x80, 0x68,
|
||||
0xbf, 0x26, 0x60, 0x99, 0x47, 0xab, 0xe1, 0x91, 0xc1, 0x04, 0x7d, 0x09, 0x49, 0xe6, 0xc9, 0xbc,
|
||||
0x4d, 0x17, 0x8b, 0x93, 0x5e, 0x6b, 0x04, 0x98, 0x0f, 0x0e, 0x35, 0xda, 0x26, 0x06, 0xc7, 0xe7,
|
||||
0xfe, 0x54, 0x60, 0x3e, 0x24, 0xa1, 0x6f, 0x60, 0x96, 0x3f, 0x1b, 0x77, 0x25, 0x5d, 0xd4, 0x06,
|
||||
0x5a, 0x09, 0xeb, 0xe4, 0xc3, 0x7d, 0x2c, 0x5f, 0xe6, 0x26, 0xc4, 0x8a, 0x25, 0x00, 0x43, 0x6b,
|
||||
0x51, 0x62, 0x68, 0x2d, 0x0a, 0x06, 0xae, 0x8b, 0x3d, 0x66, 0xb5, 0x2c, 0x97, 0x0f, 0xa7, 0x3e,
|
||||
0x65, 0x24, 0x9c, 0xd1, 0xcb, 0x71, 0xce, 0x49, 0xc0, 0x08, 0x9a, 0x8b, 0x5c, 0x01, 0xb8, 0x9c,
|
||||
0x78, 0x55, 0x10, 0xd3, 0x3f, 0xa0, 0x68, 0xaf, 0x61, 0x35, 0x70, 0x9a, 0xbb, 0x10, 0x24, 0x43,
|
||||
0xf8, 0x2c, 0x77, 0xe0, 0x66, 0x90, 0x37, 0xe6, 0x07, 0x8f, 0xda, 0x32, 0x9e, 0xf3, 0x01, 0xe1,
|
||||
0xa5, 0x47, 0xed, 0x60, 0xcb, 0xe2, 0x4c, 0x46, 0x65, 0x3e, 0xa6, 0x82, 0x63, 0x83, 0xee, 0x94,
|
||||
0x61, 0x21, 0xca, 0x6a, 0x83, 0x76, 0x09, 0x4a, 0xc3, 0xdc, 0xdb, 0xda, 0xab, 0xda, 0xd1, 0x69,
|
||||
0x4d, 0xbd, 0x81, 0x32, 0x30, 0x5f, 0x6a, 0x34, 0xf4, 0x7a, 0x43, 0x37, 0x54, 0x25, 0x38, 0x1d,
|
||||
0x1b, 0x47, 0xc7, 0x47, 0x75, 0xdd, 0x50, 0x13, 0x68, 0x1e, 0x92, 0xe5, 0xa3, 0xc6, 0xa1, 0x3a,
|
||||
0xb3, 0xf3, 0x87, 0x02, 0x4b, 0x43, 0xa5, 0x81, 0x10, 0x2c, 0x4a, 0x35, 0x66, 0xbd, 0x51, 0x6a,
|
||||
0xbc, 0xad, 0xab, 0x37, 0xd0, 0x2a, 0xa8, 0x15, 0xfd, 0xf8, 0xa8, 0x5e, 0x6d, 0x98, 0x86, 0xbe,
|
||||
0xaf, 0x57, 0x4f, 0xf4, 0x8a, 0xaa, 0x04, 0x92, 0xc7, 0x7a, 0xad, 0x52, 0xad, 0x1d, 0x98, 0xa5,
|
||||
0xfd, 0x46, 0xf5, 0x44, 0x57, 0x13, 0x08, 0x20, 0x25, 0xbf, 0x67, 0x02, 0x7e, 0xb5, 0x56, 0x6d,
|
||||
0x54, 0x4b, 0x0d, 0xbd, 0x62, 0xea, 0xef, 0xaa, 0x0d, 0x35, 0x89, 0x54, 0xc8, 0x9c, 0x56, 0x1b,
|
||||
0x87, 0x15, 0xa3, 0x74, 0x5a, 0x2a, 0xbf, 0xd6, 0xd5, 0xd9, 0x00, 0x11, 0xf0, 0xf4, 0x8a, 0x9a,
|
||||
0x0a, 0x10, 0xe2, 0xdb, 0xac, 0xbf, 0x2e, 0xd5, 0x0f, 0xf5, 0x8a, 0x3a, 0x57, 0xfc, 0x47, 0x81,
|
||||
0xa5, 0x52, 0xd8, 0x95, 0xc4, 0x4a, 0x8f, 0x3a, 0x80, 0x64, 0xf0, 0x62, 0x6b, 0x2b, 0xda, 0x99,
|
||||
0xd8, 0x87, 0x47, 0x76, 0xdb, 0xdc, 0xd7, 0x13, 0xb2, 0x24, 0x26, 0x5a, 0xc1, 0x0c, 0x23, 0x13,
|
||||
0x96, 0xeb, 0xbd, 0xa6, 0x6d, 0x5d, 0x32, 0xa4, 0x5d, 0x0d, 0x8e, 0x1b, 0x18, 0xe7, 0x4c, 0x98,
|
||||
0xd9, 0xc5, 0xbf, 0x95, 0x68, 0x5d, 0x8f, 0xae, 0xf7, 0x0e, 0x32, 0xd2, 0x4f, 0x9e, 0x2b, 0xe8,
|
||||
0xde, 0x67, 0x0b, 0x25, 0xbc, 0xd2, 0x14, 0x89, 0x8f, 0xde, 0x43, 0x46, 0x1a, 0x13, 0xe7, 0x29,
|
||||
0x30, 0xb9, 0x89, 0x4d, 0x75, 0xe8, 0x57, 0x46, 0xf1, 0xdf, 0x39, 0x50, 0x07, 0xd9, 0x24, 0xef,
|
||||
0xf2, 0x1e, 0x40, 0xb4, 0x04, 0x1e, 0xce, 0xfb, 0x93, 0x74, 0x5d, 0x6a, 0x54, 0x93, 0x83, 0x37,
|
||||
0xd4, 0x90, 0x7e, 0x80, 0xe5, 0x53, 0x6c, 0xb1, 0x97, 0xf1, 0xcd, 0x0e, 0x15, 0xaf, 0xb5, 0x06,
|
||||
0x0a, 0x83, 0x8f, 0xbe, 0x60, 0x75, 0xdc, 0x55, 0x10, 0x85, 0xc5, 0xcb, 0x5b, 0x0b, 0x7a, 0x78,
|
||||
0xa5, 0xa2, 0xf8, 0x56, 0x94, 0xcb, 0x4f, 0x2b, 0x2e, 0x2f, 0xdc, 0x85, 0x95, 0xfd, 0x70, 0x90,
|
||||
0xc7, 0x96, 0x82, 0xed, 0x69, 0x36, 0x10, 0x61, 0x71, 0x67, 0xfa, 0x65, 0x05, 0x9d, 0x8f, 0x76,
|
||||
0x87, 0x6b, 0xde, 0xef, 0xba, 0x3b, 0x31, 0xfa, 0x51, 0x81, 0xd5, 0x71, 0x3f, 0xc2, 0xd0, 0xd5,
|
||||
0x2f, 0x34, 0xfa, 0x3b, 0x30, 0xf7, 0xf8, 0x7a, 0x20, 0xe9, 0x43, 0x0f, 0xd4, 0xe1, 0x9d, 0x1a,
|
||||
0x4d, 0xbc, 0xc8, 0x84, 0xcd, 0x3d, 0xb7, 0x3b, 0x3d, 0x40, 0x9a, 0xfd, 0x3e, 0x4a, 0xe6, 0xc1,
|
||||
0x52, 0x8e, 0xd6, 0xf2, 0xe2, 0x4f, 0x83, 0x7c, 0xf8, 0xf7, 0x44, 0x5e, 0xb7, 0x5d, 0x76, 0x31,
|
||||
0xf9, 0x19, 0x47, 0x17, 0xfa, 0x5d, 0x05, 0xbd, 0x82, 0x85, 0x7d, 0xec, 0x50, 0xc7, 0x6a, 0xe1,
|
||||
0xee, 0x21, 0xc1, 0xed, 0x89, 0x6a, 0xa7, 0xe8, 0x07, 0xcd, 0x14, 0xc7, 0x3c, 0xfa, 0x2f, 0x00,
|
||||
0x00, 0xff, 0xff, 0x9f, 0x74, 0xae, 0xcd, 0x75, 0x11, 0x00, 0x00,
|
||||
// 1637 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0x4f, 0x4f, 0x1b, 0x49,
|
||||
0x16, 0x4f, 0x1b, 0x63, 0xc8, 0xb3, 0x31, 0x4d, 0x41, 0xc0, 0x71, 0x12, 0x2d, 0xdb, 0x49, 0x36,
|
||||
0xc0, 0x2a, 0x36, 0x38, 0x51, 0xb4, 0x9b, 0x28, 0x1b, 0x19, 0xdc, 0x01, 0x2b, 0x91, 0x71, 0xda,
|
||||
0x0e, 0x64, 0x95, 0x43, 0xab, 0x6c, 0x17, 0x76, 0x2b, 0x76, 0x57, 0xd3, 0x5d, 0xb6, 0xc2, 0x65,
|
||||
0xa5, 0xbd, 0xec, 0x6a, 0x6f, 0x3b, 0x87, 0xd1, 0x1c, 0x47, 0xf3, 0x19, 0xe6, 0x30, 0x5f, 0x61,
|
||||
0x3e, 0xc4, 0x1c, 0xe7, 0x83, 0x8c, 0xba, 0xaa, 0xba, 0xdd, 0xf8, 0x0f, 0x98, 0xdc, 0xba, 0xde,
|
||||
0xdf, 0x5f, 0xbd, 0xf7, 0xea, 0xd5, 0xab, 0x06, 0xcd, 0x71, 0x29, 0xa3, 0xf9, 0x06, 0xc1, 0x4d,
|
||||
0x6a, 0xe7, 0x5d, 0xa7, 0x99, 0x1f, 0xec, 0xe5, 0x3d, 0xe2, 0x0e, 0xac, 0x26, 0xf1, 0x72, 0x9c,
|
||||
0x89, 0xd6, 0x09, 0xeb, 0x10, 0x97, 0xf4, 0x7b, 0x39, 0x21, 0x96, 0x73, 0x9d, 0x66, 0x6e, 0xb0,
|
||||
0x97, 0xbd, 0xd7, 0xa6, 0xb4, 0xdd, 0x25, 0x79, 0x2e, 0xd5, 0xe8, 0x9f, 0xe5, 0x49, 0xcf, 0x61,
|
||||
0x17, 0x42, 0x29, 0xfb, 0x58, 0x18, 0x26, 0xac, 0x93, 0x1f, 0xec, 0xe1, 0xae, 0xd3, 0xc1, 0x7b,
|
||||
0xd2, 0x8b, 0xd9, 0xe8, 0xd2, 0xe6, 0x17, 0x29, 0xf6, 0x68, 0x82, 0x18, 0x66, 0x8c, 0x78, 0x0c,
|
||||
0x33, 0x8b, 0xda, 0x42, 0x4a, 0x3b, 0x84, 0xd4, 0xbe, 0xaf, 0x64, 0x90, 0xf3, 0x3e, 0xf1, 0x18,
|
||||
0x42, 0x10, 0xf7, 0xba, 0x94, 0x65, 0x94, 0x4d, 0x65, 0x2b, 0x6e, 0xf0, 0x6f, 0xf4, 0x10, 0x96,
|
||||
0x5c, 0x6c, 0xb7, 0x30, 0x35, 0x5d, 0x32, 0x20, 0xb8, 0x9b, 0x89, 0x6d, 0x2a, 0x5b, 0x29, 0x23,
|
||||
0x25, 0x88, 0x06, 0xa7, 0x69, 0xbb, 0xb0, 0x5c, 0x75, 0xa9, 0x43, 0x3d, 0x62, 0x10, 0xcf, 0xa1,
|
||||
0xb6, 0x47, 0xd0, 0x03, 0x00, 0x0e, 0xc8, 0x74, 0xa9, 0xb4, 0x98, 0x32, 0x6e, 0x73, 0x8a, 0x41,
|
||||
0x29, 0xd3, 0xfe, 0xa7, 0x00, 0x2a, 0x0e, 0x01, 0x05, 0x08, 0x1e, 0x00, 0x38, 0xfd, 0x46, 0xd7,
|
||||
0x6a, 0x9a, 0x5f, 0xc8, 0x45, 0xa0, 0x25, 0x28, 0xef, 0xc8, 0x05, 0xda, 0x80, 0x05, 0x87, 0x36,
|
||||
0xcd, 0x86, 0xc5, 0x24, 0x8c, 0x84, 0x43, 0x9b, 0xfb, 0xd6, 0x10, 0xf9, 0x5c, 0x04, 0xf9, 0x13,
|
||||
0x58, 0x6e, 0xd2, 0x5e, 0xcf, 0x62, 0x8c, 0x10, 0xd3, 0xb2, 0x5b, 0xe4, 0x6b, 0x26, 0xce, 0xd9,
|
||||
0xe9, 0x90, 0x5c, 0xf6, 0xa9, 0xda, 0x23, 0x48, 0x0b, 0x28, 0x21, 0x78, 0x04, 0xf1, 0x08, 0x6c,
|
||||
0xfe, 0xad, 0xfd, 0xe0, 0x23, 0x6e, 0xb7, 0x5d, 0xd2, 0xbe, 0x84, 0x78, 0x52, 0xcc, 0x26, 0x78,
|
||||
0x8e, 0x4d, 0xf2, 0x3c, 0xb2, 0xdd, 0xb9, 0xd1, 0xed, 0x3e, 0x86, 0xb4, 0x6f, 0xcf, 0xf4, 0xac,
|
||||
0xb6, 0x8d, 0x59, 0xdf, 0x25, 0x7c, 0x03, 0x29, 0x63, 0xc9, 0xa7, 0xd6, 0x02, 0xa2, 0xb6, 0x0d,
|
||||
0xab, 0x97, 0x80, 0x5d, 0xb1, 0x09, 0x03, 0xee, 0x9d, 0xe0, 0xae, 0xd5, 0xc2, 0x8c, 0xba, 0x55,
|
||||
0xe2, 0x9e, 0x51, 0xb7, 0x87, 0xed, 0x26, 0xb9, 0x6a, 0x33, 0x7f, 0x82, 0xe4, 0x10, 0xa3, 0x97,
|
||||
0x89, 0x6d, 0xce, 0x6d, 0xa5, 0x0c, 0x08, 0x41, 0x7a, 0xda, 0xf7, 0x31, 0xb8, 0x3f, 0xd9, 0xa8,
|
||||
0x04, 0x92, 0x85, 0xc5, 0x06, 0xee, 0xfa, 0x24, 0x2f, 0xa3, 0x6c, 0xce, 0x6d, 0xc5, 0x8d, 0x70,
|
||||
0x8d, 0xb6, 0x41, 0x65, 0x94, 0xe1, 0xae, 0x39, 0x08, 0x2c, 0x78, 0x32, 0x56, 0xcb, 0x9c, 0x1e,
|
||||
0x1a, 0xf6, 0xd0, 0x0b, 0xd8, 0x10, 0xa2, 0xb8, 0xc9, 0xac, 0x01, 0x89, 0x6a, 0x88, 0xb4, 0xdf,
|
||||
0xe1, 0xec, 0x22, 0xe7, 0x46, 0xf4, 0x9e, 0x02, 0xea, 0x59, 0x9e, 0x67, 0xd9, 0xed, 0xa8, 0x4a,
|
||||
0x9c, 0xef, 0x63, 0x45, 0x72, 0x22, 0xe2, 0x87, 0xb0, 0x89, 0x07, 0xc4, 0xc5, 0x6d, 0x32, 0xe6,
|
||||
0xc8, 0x94, 0xb0, 0x33, 0xf3, 0x9b, 0xca, 0x56, 0xcc, 0x78, 0x20, 0xe5, 0x46, 0x3c, 0xee, 0x0b,
|
||||
0x21, 0xed, 0x35, 0x64, 0x43, 0x1a, 0x17, 0xb9, 0x54, 0x37, 0x23, 0x61, 0x55, 0xc6, 0xc2, 0xfa,
|
||||
0x63, 0x2c, 0x92, 0xab, 0xa8, 0xbe, 0x8c, 0xea, 0x0b, 0xb8, 0x83, 0x05, 0x95, 0xb4, 0xcc, 0x31,
|
||||
0x53, 0xfb, 0xb1, 0x8c, 0x62, 0xac, 0x86, 0x02, 0xd5, 0xd0, 0x2e, 0x3a, 0x81, 0x45, 0xff, 0xd0,
|
||||
0xf5, 0x3d, 0x22, 0x92, 0x99, 0x2c, 0xbc, 0xcc, 0x4d, 0xee, 0x44, 0xb9, 0x2b, 0xdc, 0xe7, 0x6a,
|
||||
0xdc, 0x86, 0x11, 0xda, 0xca, 0x3a, 0x90, 0x10, 0xb4, 0xeb, 0x0e, 0xf1, 0x21, 0x24, 0x84, 0x12,
|
||||
0x4f, 0x74, 0xb2, 0x90, 0xbf, 0xd6, 0xbd, 0xf4, 0x25, 0x5d, 0x1b, 0x52, 0x5d, 0x7b, 0x09, 0x1b,
|
||||
0xfa, 0x57, 0x8b, 0x91, 0xd6, 0x30, 0x7b, 0x33, 0x47, 0xf7, 0x15, 0x64, 0xc6, 0x75, 0x65, 0x64,
|
||||
0xaf, 0x55, 0xfe, 0x00, 0xe8, 0xa0, 0x83, 0x2d, 0xbb, 0xc6, 0xb0, 0x3b, 0x6c, 0x1a, 0x19, 0x58,
|
||||
0xf0, 0x7c, 0x02, 0x69, 0xf1, 0x3d, 0x2f, 0x1a, 0xc1, 0x12, 0xfd, 0x19, 0x52, 0x6d, 0x62, 0x13,
|
||||
0xcf, 0xf2, 0x4c, 0x66, 0xf5, 0x88, 0x2c, 0xf0, 0xa4, 0xa4, 0xd5, 0xad, 0x1e, 0xd1, 0x5e, 0xc0,
|
||||
0x9d, 0x10, 0x09, 0xef, 0x0d, 0xb3, 0x75, 0x44, 0x2d, 0x07, 0xeb, 0xa3, 0x7a, 0x12, 0xce, 0x1a,
|
||||
0xcc, 0x8b, 0xd6, 0x23, 0x0e, 0xb3, 0x58, 0x68, 0x1f, 0x61, 0xa5, 0xe8, 0xf9, 0xfd, 0xa4, 0x47,
|
||||
0x6c, 0x16, 0x89, 0x16, 0x71, 0x68, 0xb3, 0x63, 0x72, 0xc0, 0x52, 0x01, 0x38, 0x89, 0x6f, 0xf1,
|
||||
0xfa, 0x1e, 0xf0, 0xff, 0x39, 0x40, 0x51, 0xbb, 0x12, 0xc3, 0x39, 0xac, 0x0d, 0x0f, 0x0f, 0x0e,
|
||||
0xf9, 0x3c, 0xa4, 0xc9, 0xc2, 0x3f, 0xa6, 0x25, 0x7e, 0xdc, 0x52, 0xa4, 0x14, 0x87, 0xbc, 0xd5,
|
||||
0xc1, 0x38, 0x31, 0xfb, 0x9f, 0x18, 0xac, 0x4e, 0x10, 0x46, 0xf7, 0xe1, 0x76, 0xd8, 0x7c, 0x65,
|
||||
0x17, 0x1a, 0x12, 0x66, 0xef, 0xd8, 0x0f, 0x61, 0x49, 0xdc, 0xa3, 0xc4, 0x35, 0x23, 0x37, 0x4e,
|
||||
0x2a, 0x20, 0xd6, 0xe4, 0x9d, 0xe9, 0x88, 0xeb, 0x50, 0x0a, 0x89, 0x7b, 0x27, 0x15, 0x10, 0xb9,
|
||||
0xd0, 0xe5, 0xc4, 0xce, 0x8f, 0x9e, 0x92, 0x37, 0xe1, 0x29, 0x49, 0x6c, 0x2a, 0x5b, 0xe9, 0xc2,
|
||||
0x93, 0x59, 0x4f, 0x49, 0x70, 0x3a, 0x7e, 0x89, 0xc1, 0xc6, 0x94, 0x13, 0x14, 0x31, 0xae, 0x7c,
|
||||
0x93, 0x71, 0xf4, 0x77, 0xb8, 0x4b, 0x58, 0x67, 0xcf, 0x6c, 0x11, 0x87, 0x7a, 0x16, 0x13, 0xb3,
|
||||
0x87, 0x69, 0xf7, 0x7b, 0x0d, 0xe2, 0xca, 0xc8, 0xf9, 0xe3, 0xcd, 0x5e, 0x49, 0xf0, 0xf9, 0x94,
|
||||
0x51, 0xe1, 0x5c, 0xf4, 0x1c, 0xd6, 0x03, 0x2d, 0xcb, 0x6e, 0x76, 0xfb, 0x9e, 0x45, 0xed, 0x68,
|
||||
0x28, 0xd7, 0x24, 0xb7, 0x1c, 0x30, 0x79, 0xb4, 0xb6, 0x41, 0xc5, 0x61, 0x13, 0x32, 0x79, 0x69,
|
||||
0xca, 0xa8, 0x2e, 0x0f, 0xe9, 0xba, 0x4f, 0x46, 0x6f, 0xe0, 0x3e, 0x37, 0xe0, 0x0b, 0x5a, 0xb6,
|
||||
0x19, 0x51, 0x3b, 0xef, 0x93, 0xbe, 0x68, 0xde, 0x71, 0xe3, 0x6e, 0x20, 0x53, 0xb6, 0x87, 0xdd,
|
||||
0xed, 0x83, 0x2f, 0xa0, 0xbd, 0x86, 0xa5, 0x12, 0xed, 0x61, 0x2b, 0xec, 0xd5, 0x6b, 0x30, 0x2f,
|
||||
0x3c, 0xca, 0xa3, 0xc4, 0x17, 0x68, 0x1d, 0x12, 0x2d, 0x2e, 0x16, 0xcc, 0x22, 0x62, 0xa5, 0xbd,
|
||||
0x82, 0x74, 0xa0, 0x2e, 0xc3, 0xbd, 0x0d, 0x6a, 0x78, 0x85, 0x9b, 0x52, 0x47, 0x98, 0x5a, 0x0e,
|
||||
0xe9, 0x42, 0x45, 0xfb, 0x2e, 0x06, 0x2b, 0x3c, 0x5a, 0x75, 0x97, 0x0c, 0x6f, 0xd0, 0xb7, 0x10,
|
||||
0x67, 0xae, 0xac, 0xdb, 0x64, 0xa1, 0x30, 0x2d, 0x5b, 0x63, 0x8a, 0x39, 0x7f, 0x51, 0xa1, 0x2d,
|
||||
0x62, 0x70, 0xfd, 0xec, 0xcf, 0x0a, 0x2c, 0x06, 0x24, 0xf4, 0x37, 0x98, 0xe7, 0x69, 0xe3, 0x50,
|
||||
0x92, 0x05, 0x6d, 0x68, 0x95, 0xb0, 0x4e, 0x2e, 0x18, 0x1b, 0x73, 0xfb, 0xdc, 0x85, 0x98, 0x13,
|
||||
0x85, 0xc2, 0xc8, 0x6c, 0x17, 0x1b, 0x99, 0xed, 0xfc, 0x0b, 0xd7, 0xc1, 0x2e, 0xb3, 0x9a, 0x96,
|
||||
0xc3, 0x2f, 0xa7, 0x01, 0x65, 0x24, 0xb8, 0xa3, 0x57, 0xa2, 0x9c, 0x13, 0x9f, 0xe1, 0x37, 0x17,
|
||||
0x39, 0x02, 0x70, 0x39, 0x91, 0x55, 0x10, 0xb7, 0xbf, 0x4f, 0xd1, 0xde, 0xc3, 0x9a, 0x0f, 0x9a,
|
||||
0x43, 0xf0, 0x8b, 0x21, 0x48, 0xcb, 0x3d, 0xb8, 0xcd, 0xc7, 0xa3, 0x33, 0x97, 0xf6, 0x64, 0x3c,
|
||||
0x17, 0x7d, 0xc2, 0x5b, 0x97, 0xf6, 0xfc, 0x51, 0x91, 0x33, 0x19, 0x95, 0xf5, 0x98, 0xf0, 0x97,
|
||||
0x75, 0xba, 0x73, 0x04, 0x4b, 0x61, 0x55, 0x1b, 0xb4, 0x4b, 0x50, 0x12, 0x16, 0x3e, 0x56, 0xde,
|
||||
0x55, 0x8e, 0x4f, 0x2b, 0xea, 0x2d, 0x94, 0x82, 0xc5, 0x62, 0xbd, 0xae, 0xd7, 0xea, 0xba, 0xa1,
|
||||
0x2a, 0xfe, 0xaa, 0x6a, 0x1c, 0x57, 0x8f, 0x6b, 0xba, 0xa1, 0xc6, 0x50, 0x1a, 0xa0, 0x78, 0x78,
|
||||
0x68, 0xe8, 0x87, 0xc5, 0xfa, 0xb1, 0xa1, 0xce, 0xed, 0xfc, 0xa4, 0xc0, 0xf2, 0xc8, 0x01, 0x41,
|
||||
0x08, 0xd2, 0xd2, 0x98, 0x59, 0xab, 0x17, 0xeb, 0x1f, 0x6b, 0xea, 0x2d, 0xb4, 0x06, 0x6a, 0x49,
|
||||
0xaf, 0x1e, 0xd7, 0xca, 0x75, 0xd3, 0xd0, 0x0f, 0xf4, 0xf2, 0x89, 0x5e, 0x52, 0x15, 0x5f, 0xb2,
|
||||
0xaa, 0x57, 0x4a, 0xe5, 0xca, 0xa1, 0x59, 0x3c, 0xa8, 0x97, 0x4f, 0x74, 0x35, 0x86, 0x00, 0x12,
|
||||
0xf2, 0x7b, 0xce, 0xe7, 0x97, 0x2b, 0xe5, 0x7a, 0xb9, 0x58, 0xd7, 0x4b, 0xa6, 0xfe, 0xa9, 0x5c,
|
||||
0x57, 0xe3, 0x48, 0x85, 0xd4, 0x69, 0xb9, 0x7e, 0x54, 0x32, 0x8a, 0xa7, 0xc5, 0xfd, 0xf7, 0xba,
|
||||
0x3a, 0xef, 0x6b, 0xf8, 0x3c, 0xbd, 0xa4, 0x26, 0x7c, 0x0d, 0xf1, 0x6d, 0xd6, 0xde, 0x17, 0x6b,
|
||||
0x47, 0x7a, 0x49, 0x5d, 0x28, 0xfc, 0xa6, 0xc0, 0x72, 0x31, 0xe8, 0x4d, 0xe2, 0xfd, 0x81, 0x3a,
|
||||
0x80, 0x64, 0x08, 0x23, 0x13, 0x38, 0xda, 0x99, 0xda, 0x8d, 0xc7, 0xc6, 0xf4, 0xec, 0x5f, 0xa6,
|
||||
0xd4, 0x4a, 0x44, 0xb4, 0x84, 0x19, 0x46, 0x26, 0xac, 0xd4, 0xfa, 0x8d, 0x9e, 0x75, 0xc9, 0x91,
|
||||
0x76, 0xbd, 0x72, 0xd4, 0xc1, 0x24, 0x30, 0x41, 0x7d, 0x17, 0x7e, 0x55, 0xc2, 0x97, 0x47, 0xb8,
|
||||
0xbd, 0x4f, 0x90, 0x92, 0x38, 0x79, 0xc5, 0xa0, 0x47, 0x57, 0x1e, 0x97, 0x60, 0x4b, 0x33, 0x94,
|
||||
0x3f, 0xfa, 0x0c, 0x29, 0xe9, 0x4c, 0xac, 0x67, 0xd0, 0xc9, 0x4e, 0x6d, 0xad, 0x23, 0x0f, 0xa6,
|
||||
0xc2, 0x7f, 0x15, 0x58, 0x09, 0xc6, 0x78, 0x1a, 0x6e, 0xc6, 0x85, 0x0d, 0x19, 0x41, 0xc9, 0x22,
|
||||
0x45, 0xbb, 0x55, 0x75, 0x29, 0x3d, 0xbb, 0x22, 0x61, 0x63, 0xaf, 0x94, 0xec, 0x5f, 0x67, 0x92,
|
||||
0x95, 0x48, 0x7e, 0x5f, 0x00, 0x75, 0x58, 0xd7, 0x12, 0xc8, 0x67, 0x00, 0xd1, 0xa2, 0x78, 0x62,
|
||||
0x1f, 0x4f, 0xb3, 0x77, 0xa9, 0x71, 0x4e, 0x4f, 0xe3, 0x48, 0x83, 0xfc, 0x17, 0xac, 0x9c, 0x62,
|
||||
0x8b, 0xbd, 0x8d, 0x4e, 0x9a, 0xa8, 0x70, 0xa3, 0xb1, 0x54, 0x38, 0x7c, 0xf6, 0x0d, 0xa3, 0xec,
|
||||
0xae, 0x82, 0x28, 0xa4, 0x2f, 0x4f, 0x51, 0xe8, 0xe9, 0xb5, 0x86, 0xa2, 0x53, 0x5a, 0x36, 0x37,
|
||||
0xab, 0xb8, 0xdc, 0x70, 0x17, 0x56, 0x0f, 0x82, 0xc1, 0x22, 0x32, 0xa4, 0x6c, 0xcf, 0x32, 0x11,
|
||||
0x09, 0x8f, 0x3b, 0xb3, 0x0f, 0x4f, 0xe8, 0x7c, 0xbc, 0x4f, 0xdd, 0x70, 0x7f, 0x37, 0x9d, 0xd1,
|
||||
0xd1, 0xbf, 0x15, 0x58, 0x9b, 0xf4, 0x28, 0x44, 0xd7, 0x67, 0x68, 0xfc, 0x5d, 0x9a, 0x7d, 0x7e,
|
||||
0x33, 0x25, 0x89, 0xa1, 0x0f, 0xea, 0xe8, 0x8c, 0x8f, 0xa6, 0x6e, 0x64, 0xca, 0x4b, 0x22, 0xbb,
|
||||
0x3b, 0xbb, 0x82, 0x74, 0xfb, 0xcf, 0xb0, 0x98, 0x87, 0x8f, 0x04, 0xb4, 0x9e, 0x13, 0x7f, 0x75,
|
||||
0x72, 0xc1, 0x5f, 0x9d, 0x9c, 0xde, 0x73, 0xd8, 0xc5, 0xf4, 0x34, 0x8e, 0x3f, 0x30, 0x76, 0x15,
|
||||
0xf4, 0x0e, 0x96, 0x0e, 0xb0, 0x4d, 0x6d, 0xab, 0x89, 0xbb, 0x47, 0x04, 0xb7, 0xa6, 0x9a, 0x9d,
|
||||
0xa1, 0x33, 0x35, 0x12, 0x5c, 0xe7, 0xd9, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x24, 0x7e, 0xd8,
|
||||
0x35, 0xac, 0x12, 0x00, 0x00,
|
||||
}
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
@@ -1574,6 +1682,78 @@ var _ProposerService_serviceDesc = grpc.ServiceDesc{
|
||||
Metadata: "proto/beacon/rpc/v1/services.proto",
|
||||
}
|
||||
|
||||
// AggregatorServiceClient is the client API for AggregatorService service.
|
||||
//
|
||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
|
||||
type AggregatorServiceClient interface {
|
||||
SubmitAggregateAndProof(ctx context.Context, in *AggregationRequest, opts ...grpc.CallOption) (*AggregationResponse, error)
|
||||
}
|
||||
|
||||
type aggregatorServiceClient struct {
|
||||
cc *grpc.ClientConn
|
||||
}
|
||||
|
||||
func NewAggregatorServiceClient(cc *grpc.ClientConn) AggregatorServiceClient {
|
||||
return &aggregatorServiceClient{cc}
|
||||
}
|
||||
|
||||
func (c *aggregatorServiceClient) SubmitAggregateAndProof(ctx context.Context, in *AggregationRequest, opts ...grpc.CallOption) (*AggregationResponse, error) {
|
||||
out := new(AggregationResponse)
|
||||
err := c.cc.Invoke(ctx, "/ethereum.beacon.rpc.v1.AggregatorService/SubmitAggregateAndProof", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// AggregatorServiceServer is the server API for AggregatorService service.
|
||||
type AggregatorServiceServer interface {
|
||||
SubmitAggregateAndProof(context.Context, *AggregationRequest) (*AggregationResponse, error)
|
||||
}
|
||||
|
||||
// UnimplementedAggregatorServiceServer can be embedded to have forward compatible implementations.
|
||||
type UnimplementedAggregatorServiceServer struct {
|
||||
}
|
||||
|
||||
func (*UnimplementedAggregatorServiceServer) SubmitAggregateAndProof(ctx context.Context, req *AggregationRequest) (*AggregationResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method SubmitAggregateAndProof not implemented")
|
||||
}
|
||||
|
||||
func RegisterAggregatorServiceServer(s *grpc.Server, srv AggregatorServiceServer) {
|
||||
s.RegisterService(&_AggregatorService_serviceDesc, srv)
|
||||
}
|
||||
|
||||
func _AggregatorService_SubmitAggregateAndProof_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(AggregationRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(AggregatorServiceServer).SubmitAggregateAndProof(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/ethereum.beacon.rpc.v1.AggregatorService/SubmitAggregateAndProof",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(AggregatorServiceServer).SubmitAggregateAndProof(ctx, req.(*AggregationRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
var _AggregatorService_serviceDesc = grpc.ServiceDesc{
|
||||
ServiceName: "ethereum.beacon.rpc.v1.AggregatorService",
|
||||
HandlerType: (*AggregatorServiceServer)(nil),
|
||||
Methods: []grpc.MethodDesc{
|
||||
{
|
||||
MethodName: "SubmitAggregateAndProof",
|
||||
Handler: _AggregatorService_SubmitAggregateAndProof_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{},
|
||||
Metadata: "proto/beacon/rpc/v1/services.proto",
|
||||
}
|
||||
|
||||
// ValidatorServiceClient is the client API for ValidatorService service.
|
||||
//
|
||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
|
||||
|
||||
2
proto/eth/v1alpha1/slasher.pb.go
generated
2
proto/eth/v1alpha1/slasher.pb.go
generated
@@ -901,7 +901,7 @@ func (m *EpochSpanMap) MarshalTo(dAtA []byte) (int, error) {
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.EpochSpanMap) > 0 {
|
||||
for k := range m.EpochSpanMap {
|
||||
for k, _ := range m.EpochSpanMap {
|
||||
dAtA[i] = 0xa
|
||||
i++
|
||||
v := m.EpochSpanMap[k]
|
||||
|
||||
@@ -7,6 +7,7 @@ mocks=(
|
||||
"./beacon-chain/internal/validator_service_mock.go ValidatorServiceServer,ValidatorService_WaitForActivationServer,ValidatorService_WaitForChainStartServer"
|
||||
"./validator/internal/attester_service_mock.go AttesterServiceClient"
|
||||
"./validator/internal/proposer_service_mock.go ProposerServiceClient"
|
||||
"./validator/internal/aggregator_service_mock.go AggregatorServiceClient"
|
||||
"./validator/internal/validator_service_mock.go ValidatorServiceClient,ValidatorService_WaitForActivationClient,ValidatorService_WaitForChainStartClient")
|
||||
|
||||
for ((i = 0; i < ${#mocks[@]}; i++)); do
|
||||
|
||||
@@ -31,8 +31,6 @@ type Flags struct {
|
||||
InitSyncNoVerify bool // InitSyncNoVerify when initial syncing w/o verifying block's contents.
|
||||
SkipBLSVerify bool // Skips BLS verification across the runtime.
|
||||
EnableBackupWebhook bool // EnableBackupWebhook to allow database backups to trigger from monitoring port /db/backup.
|
||||
OptimizeProcessEpoch bool // OptimizeProcessEpoch to process epoch with optimizations by pre computing records.
|
||||
Scatter bool // Scatter sequential processing by scattering it to multiple cores.
|
||||
PruneFinalizedStates bool // PruneFinalizedStates from the database.
|
||||
|
||||
// Cache toggles.
|
||||
@@ -107,14 +105,6 @@ func ConfigureBeaconChain(ctx *cli.Context) {
|
||||
log.Warn("Enabled BLS pubkey cache.")
|
||||
cfg.EnableBLSPubkeyCache = true
|
||||
}
|
||||
if ctx.GlobalBool(OptimizeProcessEpoch.Name) {
|
||||
log.Warn("Processing epoch with optimizations")
|
||||
cfg.OptimizeProcessEpoch = true
|
||||
}
|
||||
if ctx.GlobalBool(Scatter.Name) {
|
||||
log.Warn("Scattering sequential proceses to multiple cores")
|
||||
cfg.Scatter = true
|
||||
}
|
||||
if ctx.GlobalBool(pruneFinalizedStatesFlag.Name) {
|
||||
log.Warn("Enabled pruning old finalized states from database.")
|
||||
cfg.PruneFinalizedStates = true
|
||||
|
||||
@@ -68,16 +68,7 @@ var (
|
||||
Name: "enable-bls-pubkey-cache",
|
||||
Usage: "Enable BLS pubkey cache to improve wall time of PubkeyFromBytes",
|
||||
}
|
||||
// OptimizeProcessEpoch optimizes process epoch.
|
||||
OptimizeProcessEpoch = cli.BoolFlag{
|
||||
Name: "optimize-process-epoch",
|
||||
Usage: "Process epoch with optimizations",
|
||||
}
|
||||
// Scatter scatters sequential processes to multiple cores
|
||||
Scatter = cli.BoolFlag{
|
||||
Name: "scatter",
|
||||
Usage: "Scatter sequential processes to multiple cores",
|
||||
}
|
||||
pruneFinalizedStatesFlag = cli.BoolFlag{
|
||||
Name: "prune-finalized-states",
|
||||
Usage: "Delete old states from the database after reaching new finalized checkpoint",
|
||||
@@ -103,11 +94,23 @@ var (
|
||||
Usage: deprecatedUsage,
|
||||
Hidden: true,
|
||||
}
|
||||
deprecatedOptimizeProcessEpoch = cli.BoolFlag{
|
||||
Name: "optimize-process-epoch",
|
||||
Usage: deprecatedUsage,
|
||||
Hidden: true,
|
||||
}
|
||||
deprecatedScatterFlag = cli.BoolFlag{
|
||||
Name: "scatter",
|
||||
Usage: deprecatedUsage,
|
||||
Hidden: true,
|
||||
}
|
||||
)
|
||||
|
||||
var deprecatedFlags = []cli.Flag{
|
||||
deprecatedNoGenesisDelayFlag,
|
||||
deprecatedEnableFinalizedBlockRootIndexFlag,
|
||||
deprecatedScatterFlag,
|
||||
deprecatedOptimizeProcessEpoch,
|
||||
}
|
||||
|
||||
// ValidatorFlags contains a list of all the feature flags that apply to the validator client.
|
||||
@@ -125,8 +128,6 @@ var BeaconChainFlags = append(deprecatedFlags, []cli.Flag{
|
||||
InitSyncNoVerifyFlag,
|
||||
NewCacheFlag,
|
||||
SkipBLSVerifyFlag,
|
||||
OptimizeProcessEpoch,
|
||||
Scatter,
|
||||
enableBackupWebhookFlag,
|
||||
enableBLSPubkeyCacheFlag,
|
||||
enableShuffledIndexCache,
|
||||
|
||||
@@ -13,7 +13,6 @@ go_library(
|
||||
"//proto/beacon/p2p/v1:go_default_library",
|
||||
"//proto/eth/v1alpha1:go_default_library",
|
||||
"//shared/bls:go_default_library",
|
||||
"//shared/featureconfig:go_default_library",
|
||||
"//shared/hashutil:go_default_library",
|
||||
"//shared/mputil:go_default_library",
|
||||
"//shared/params:go_default_library",
|
||||
@@ -27,7 +26,6 @@ go_library(
|
||||
go_test(
|
||||
name = "go_default_test",
|
||||
srcs = [
|
||||
"generate_deposits_test.go",
|
||||
"generate_genesis_state_test.go",
|
||||
"generate_keys_test.go",
|
||||
],
|
||||
@@ -38,7 +36,6 @@ go_test(
|
||||
deps = [
|
||||
"//beacon-chain/core/state:go_default_library",
|
||||
"//proto/eth/v1alpha1:go_default_library",
|
||||
"//shared/featureconfig:go_default_library",
|
||||
"//shared/params:go_default_library",
|
||||
"//shared/trieutil:go_default_library",
|
||||
"@com_github_ethereum_go_ethereum//common/hexutil:go_default_library",
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
package interop_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
"github.com/prysmaticlabs/prysm/shared/featureconfig"
|
||||
"github.com/prysmaticlabs/prysm/shared/interop"
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
"github.com/prysmaticlabs/prysm/shared/trieutil"
|
||||
)
|
||||
|
||||
func TestSPMPDeposits(t *testing.T) {
|
||||
// Confirm that internal single-processor deposits end up with the same results as the multi-processor version
|
||||
|
||||
numDeposits := 557
|
||||
|
||||
cfg := &featureconfig.Flags{
|
||||
Scatter: false,
|
||||
}
|
||||
featureconfig.Init(cfg)
|
||||
spPrivKeys, spPubKeys, err := interop.DeterministicallyGenerateKeys(0 /*startIndex*/, uint64(numDeposits))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
spDepositDataItems, spDepositDataRoots, err := interop.DepositDataFromKeys(spPrivKeys, spPubKeys)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
trie, err := trieutil.GenerateTrieFromItems(
|
||||
spDepositDataRoots,
|
||||
int(params.BeaconConfig().DepositContractTreeDepth),
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
spDeposits, err := interop.GenerateDepositsFromData(spDepositDataItems, trie)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cfg = &featureconfig.Flags{
|
||||
Scatter: true,
|
||||
}
|
||||
featureconfig.Init(cfg)
|
||||
privKeys, pubKeys, err := interop.DeterministicallyGenerateKeys(0 /*startIndex*/, uint64(numDeposits))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
depositDataItems, _, err := interop.DepositDataFromKeys(privKeys, pubKeys)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
deposits, err := interop.GenerateDepositsFromData(depositDataItems, trie)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
for i := range deposits {
|
||||
spD, err := spDeposits[i].Marshal()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
d, err := deposits[i].Marshal()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if bytes.Compare(d, spD) != 0 {
|
||||
t.Fatalf("Deposit mismatch at index %d: %v vs %v", i, spD, d)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
|
||||
ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
||||
"github.com/prysmaticlabs/prysm/shared/bls"
|
||||
"github.com/prysmaticlabs/prysm/shared/featureconfig"
|
||||
"github.com/prysmaticlabs/prysm/shared/hashutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/mputil"
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
@@ -62,24 +61,21 @@ func GenerateGenesisState(genesisTime, numValidators uint64) (*pb.BeaconState, [
|
||||
|
||||
// GenerateDepositsFromData a list of deposit items by creating proofs for each of them from a sparse Merkle trie.
|
||||
func GenerateDepositsFromData(depositDataItems []*ethpb.Deposit_Data, trie *trieutil.MerkleTrie) ([]*ethpb.Deposit, error) {
|
||||
if c := featureconfig.Get(); c.Scatter {
|
||||
deposits := make([]*ethpb.Deposit, len(depositDataItems))
|
||||
results, err := mputil.Scatter(len(depositDataItems), func(offset int, entries int, _ *sync.RWMutex) (interface{}, error) {
|
||||
return generateDepositsFromData(depositDataItems[offset:offset+entries], offset, trie)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to generate deposits from data")
|
||||
}
|
||||
for _, result := range results {
|
||||
if depositExtent, ok := result.Extent.([]*ethpb.Deposit); ok {
|
||||
copy(deposits[result.Offset:], depositExtent)
|
||||
} else {
|
||||
return nil, errors.New("extent not of expected type")
|
||||
}
|
||||
}
|
||||
return deposits, nil
|
||||
deposits := make([]*ethpb.Deposit, len(depositDataItems))
|
||||
results, err := mputil.Scatter(len(depositDataItems), func(offset int, entries int, _ *sync.RWMutex) (interface{}, error) {
|
||||
return generateDepositsFromData(depositDataItems[offset:offset+entries], offset, trie)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to generate deposits from data")
|
||||
}
|
||||
return generateDepositsFromData(depositDataItems, 0, trie)
|
||||
for _, result := range results {
|
||||
if depositExtent, ok := result.Extent.([]*ethpb.Deposit); ok {
|
||||
copy(deposits[result.Offset:], depositExtent)
|
||||
} else {
|
||||
return nil, errors.New("extent not of expected type")
|
||||
}
|
||||
}
|
||||
return deposits, nil
|
||||
}
|
||||
|
||||
// generateDepositsFromData a list of deposit items by creating proofs for each of them from a sparse Merkle trie.
|
||||
@@ -100,31 +96,28 @@ func generateDepositsFromData(depositDataItems []*ethpb.Deposit_Data, offset int
|
||||
|
||||
// DepositDataFromKeys generates a list of deposit data items from a set of BLS validator keys.
|
||||
func DepositDataFromKeys(privKeys []*bls.SecretKey, pubKeys []*bls.PublicKey) ([]*ethpb.Deposit_Data, [][]byte, error) {
|
||||
if c := featureconfig.Get(); c.Scatter {
|
||||
type depositData struct {
|
||||
items []*ethpb.Deposit_Data
|
||||
roots [][]byte
|
||||
}
|
||||
depositDataItems := make([]*ethpb.Deposit_Data, len(privKeys))
|
||||
depositDataRoots := make([][]byte, len(privKeys))
|
||||
results, err := mputil.Scatter(len(privKeys), func(offset int, entries int, _ *sync.RWMutex) (interface{}, error) {
|
||||
items, roots, err := depositDataFromKeys(privKeys[offset:offset+entries], pubKeys[offset:offset+entries])
|
||||
return &depositData{items: items, roots: roots}, err
|
||||
})
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrap(err, "failed to generate deposit data from keys")
|
||||
}
|
||||
for _, result := range results {
|
||||
if depositDataExtent, ok := result.Extent.(*depositData); ok {
|
||||
copy(depositDataItems[result.Offset:], depositDataExtent.items)
|
||||
copy(depositDataRoots[result.Offset:], depositDataExtent.roots)
|
||||
} else {
|
||||
return nil, nil, errors.New("extent not of expected type")
|
||||
}
|
||||
}
|
||||
return depositDataItems, depositDataRoots, nil
|
||||
type depositData struct {
|
||||
items []*ethpb.Deposit_Data
|
||||
roots [][]byte
|
||||
}
|
||||
return depositDataFromKeys(privKeys, pubKeys)
|
||||
depositDataItems := make([]*ethpb.Deposit_Data, len(privKeys))
|
||||
depositDataRoots := make([][]byte, len(privKeys))
|
||||
results, err := mputil.Scatter(len(privKeys), func(offset int, entries int, _ *sync.RWMutex) (interface{}, error) {
|
||||
items, roots, err := depositDataFromKeys(privKeys[offset:offset+entries], pubKeys[offset:offset+entries])
|
||||
return &depositData{items: items, roots: roots}, err
|
||||
})
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrap(err, "failed to generate deposit data from keys")
|
||||
}
|
||||
for _, result := range results {
|
||||
if depositDataExtent, ok := result.Extent.(*depositData); ok {
|
||||
copy(depositDataItems[result.Offset:], depositDataExtent.items)
|
||||
copy(depositDataRoots[result.Offset:], depositDataExtent.roots)
|
||||
} else {
|
||||
return nil, nil, errors.New("extent not of expected type")
|
||||
}
|
||||
}
|
||||
return depositDataItems, depositDataRoots, nil
|
||||
}
|
||||
|
||||
func depositDataFromKeys(privKeys []*bls.SecretKey, pubKeys []*bls.PublicKey) ([]*ethpb.Deposit_Data, [][]byte, error) {
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/prysmaticlabs/prysm/shared/bls"
|
||||
"github.com/prysmaticlabs/prysm/shared/featureconfig"
|
||||
"github.com/prysmaticlabs/prysm/shared/hashutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/mputil"
|
||||
)
|
||||
@@ -20,31 +19,28 @@ const (
|
||||
// the algorithm specified in the Eth2.0-Specs interop mock start section found here:
|
||||
// https://github.com/ethereum/eth2.0-pm/blob/a085c9870f3956d6228ed2a40cd37f0c6580ecd7/interop/mocked_start/README.md
|
||||
func DeterministicallyGenerateKeys(startIndex, numKeys uint64) ([]*bls.SecretKey, []*bls.PublicKey, error) {
|
||||
if c := featureconfig.Get(); c.Scatter {
|
||||
privKeys := make([]*bls.SecretKey, numKeys)
|
||||
pubKeys := make([]*bls.PublicKey, numKeys)
|
||||
type keys struct {
|
||||
secrets []*bls.SecretKey
|
||||
publics []*bls.PublicKey
|
||||
}
|
||||
results, err := mputil.Scatter(int(numKeys), func(offset int, entries int, _ *sync.RWMutex) (interface{}, error) {
|
||||
secs, pubs, err := deterministicallyGenerateKeys(uint64(offset)+startIndex, uint64(entries))
|
||||
return &keys{secrets: secs, publics: pubs}, err
|
||||
})
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrap(err, "failed to generate keys")
|
||||
}
|
||||
for _, result := range results {
|
||||
if keysExtent, ok := result.Extent.(*keys); ok {
|
||||
copy(privKeys[result.Offset:], keysExtent.secrets)
|
||||
copy(pubKeys[result.Offset:], keysExtent.publics)
|
||||
} else {
|
||||
return nil, nil, errors.New("extent not of expected type")
|
||||
}
|
||||
}
|
||||
return privKeys, pubKeys, nil
|
||||
privKeys := make([]*bls.SecretKey, numKeys)
|
||||
pubKeys := make([]*bls.PublicKey, numKeys)
|
||||
type keys struct {
|
||||
secrets []*bls.SecretKey
|
||||
publics []*bls.PublicKey
|
||||
}
|
||||
return deterministicallyGenerateKeys(startIndex, numKeys)
|
||||
results, err := mputil.Scatter(int(numKeys), func(offset int, entries int, _ *sync.RWMutex) (interface{}, error) {
|
||||
secs, pubs, err := deterministicallyGenerateKeys(uint64(offset)+startIndex, uint64(entries))
|
||||
return &keys{secrets: secs, publics: pubs}, err
|
||||
})
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrap(err, "failed to generate keys")
|
||||
}
|
||||
for _, result := range results {
|
||||
if keysExtent, ok := result.Extent.(*keys); ok {
|
||||
copy(privKeys[result.Offset:], keysExtent.secrets)
|
||||
copy(pubKeys[result.Offset:], keysExtent.publics)
|
||||
} else {
|
||||
return nil, nil, errors.New("extent not of expected type")
|
||||
}
|
||||
}
|
||||
return privKeys, pubKeys, nil
|
||||
}
|
||||
|
||||
func deterministicallyGenerateKeys(startIndex, numKeys uint64) ([]*bls.SecretKey, []*bls.PublicKey, error) {
|
||||
|
||||
@@ -246,6 +246,7 @@ func MinimalSpecConfig() *BeaconChainConfig {
|
||||
minimalConfig.ShuffleRoundCount = 10
|
||||
minimalConfig.MinGenesisActiveValidatorCount = 64
|
||||
minimalConfig.MinGenesisTime = 0
|
||||
minimalConfig.TargetAggregatorsPerCommittee = 2
|
||||
|
||||
// Gwei values
|
||||
minimalConfig.MinDepositAmount = 1e9
|
||||
|
||||
@@ -6,6 +6,7 @@ go_library(
|
||||
"runner.go",
|
||||
"service.go",
|
||||
"validator.go",
|
||||
"validator_aggregate.go",
|
||||
"validator_attest.go",
|
||||
"validator_metrics.go",
|
||||
"validator_propose.go",
|
||||
@@ -18,6 +19,7 @@ go_library(
|
||||
"//proto/beacon/rpc/v1:go_default_library",
|
||||
"//proto/eth/v1alpha1:go_default_library",
|
||||
"//shared/bytesutil:go_default_library",
|
||||
"//shared/hashutil:go_default_library",
|
||||
"//shared/keystore:go_default_library",
|
||||
"//shared/params:go_default_library",
|
||||
"//shared/roughtime:go_default_library",
|
||||
@@ -46,6 +48,7 @@ go_test(
|
||||
"fake_validator_test.go",
|
||||
"runner_test.go",
|
||||
"service_test.go",
|
||||
"validator_aggregate_test.go",
|
||||
"validator_attest_test.go",
|
||||
"validator_propose_test.go",
|
||||
"validator_test.go",
|
||||
@@ -56,6 +59,7 @@ go_test(
|
||||
"//proto/beacon/rpc/v1:go_default_library",
|
||||
"//proto/eth/v1alpha1:go_default_library",
|
||||
"//shared:go_default_library",
|
||||
"//shared/bls:go_default_library",
|
||||
"//shared/keystore:go_default_library",
|
||||
"//shared/params:go_default_library",
|
||||
"//shared/roughtime:go_default_library",
|
||||
|
||||
@@ -22,7 +22,7 @@ type fakeValidator struct {
|
||||
UpdateAssignmentsRet error
|
||||
RoleAtCalled bool
|
||||
RoleAtArg1 uint64
|
||||
RoleAtRet pb.ValidatorRole
|
||||
RolesAtRet []pb.ValidatorRole
|
||||
AttestToBlockHeadCalled bool
|
||||
AttestToBlockHeadArg1 uint64
|
||||
ProposeBlockCalled bool
|
||||
@@ -77,12 +77,12 @@ func (fv *fakeValidator) LogValidatorGainsAndLosses(_ context.Context, slot uint
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fv *fakeValidator) RolesAt(slot uint64) map[[48]byte]pb.ValidatorRole {
|
||||
func (fv *fakeValidator) RolesAt(_ context.Context, slot uint64) (map[[48]byte][]pb.ValidatorRole, error) {
|
||||
fv.RoleAtCalled = true
|
||||
fv.RoleAtArg1 = slot
|
||||
vr := make(map[[48]byte]pb.ValidatorRole)
|
||||
vr[[48]byte{1}] = fv.RoleAtRet
|
||||
return vr
|
||||
vr := make(map[[48]byte][]pb.ValidatorRole)
|
||||
vr[[48]byte{1}] = fv.RolesAtRet
|
||||
return vr, nil
|
||||
}
|
||||
|
||||
func (fv *fakeValidator) SubmitAttestation(_ context.Context, slot uint64, pubKey [48]byte) {
|
||||
@@ -94,3 +94,5 @@ func (fv *fakeValidator) ProposeBlock(_ context.Context, slot uint64, pubKey [48
|
||||
fv.ProposeBlockCalled = true
|
||||
fv.ProposeBlockArg1 = slot
|
||||
}
|
||||
|
||||
func (fv *fakeValidator) SubmitAggregateAndProof(_ context.Context, slot uint64, pubKey [48]byte) {}
|
||||
|
||||
@@ -2,14 +2,11 @@ package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
pb "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
|
||||
"github.com/prysmaticlabs/prysm/shared/bytesutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
"github.com/sirupsen/logrus"
|
||||
"go.opencensus.io/trace"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
@@ -26,9 +23,10 @@ type Validator interface {
|
||||
SlotDeadline(slot uint64) time.Time
|
||||
LogValidatorGainsAndLosses(ctx context.Context, slot uint64) error
|
||||
UpdateAssignments(ctx context.Context, slot uint64) error
|
||||
RolesAt(slot uint64) map[[48]byte]pb.ValidatorRole // validator pubKey -> role
|
||||
RolesAt(ctx context.Context, slot uint64) (map[[48]byte][]pb.ValidatorRole, error) // validator pubKey -> roles
|
||||
SubmitAttestation(ctx context.Context, slot uint64, pubKey [48]byte)
|
||||
ProposeBlock(ctx context.Context, slot uint64, pubKey [48]byte)
|
||||
SubmitAggregateAndProof(ctx context.Context, slot uint64, pubKey [48]byte)
|
||||
}
|
||||
|
||||
// Run the main validator routine. This routine exits if the context is
|
||||
@@ -85,28 +83,32 @@ func run(ctx context.Context, v Validator) {
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
for id, role := range v.RolesAt(slot) {
|
||||
|
||||
allRoles, err := v.RolesAt(ctx, slot)
|
||||
if err != nil {
|
||||
log.WithError(err).Error("Could not get validator roles")
|
||||
continue
|
||||
}
|
||||
for id, roles := range allRoles {
|
||||
wg.Add(1)
|
||||
go func(role pb.ValidatorRole, id [48]byte) {
|
||||
log := log.WithFields(logrus.Fields{
|
||||
"pubKey": fmt.Sprintf("%#x", bytesutil.Trunc(id[:])),
|
||||
"role": role,
|
||||
})
|
||||
switch role {
|
||||
case pb.ValidatorRole_BOTH:
|
||||
go v.SubmitAttestation(slotCtx, slot, id)
|
||||
v.ProposeBlock(slotCtx, slot, id)
|
||||
case pb.ValidatorRole_ATTESTER:
|
||||
v.SubmitAttestation(slotCtx, slot, id)
|
||||
case pb.ValidatorRole_PROPOSER:
|
||||
v.ProposeBlock(slotCtx, slot, id)
|
||||
case pb.ValidatorRole_UNKNOWN:
|
||||
log.Debug("No active role, doing nothing")
|
||||
default:
|
||||
log.Warn("Unhandled role")
|
||||
go func(roles []pb.ValidatorRole, id [48]byte) {
|
||||
|
||||
for _, role := range roles {
|
||||
switch role {
|
||||
case pb.ValidatorRole_ATTESTER:
|
||||
go v.SubmitAttestation(slotCtx, slot, id)
|
||||
case pb.ValidatorRole_PROPOSER:
|
||||
go v.ProposeBlock(slotCtx, slot, id)
|
||||
case pb.ValidatorRole_AGGREGATOR:
|
||||
go v.SubmitAggregateAndProof(slotCtx, slot, id)
|
||||
case pb.ValidatorRole_UNKNOWN:
|
||||
log.Debug("No active roles, doing nothing")
|
||||
default:
|
||||
log.Warnf("Unhandled role %v", role)
|
||||
}
|
||||
}
|
||||
|
||||
}(role, id)
|
||||
}(roles, id)
|
||||
}
|
||||
// Wait for all processes to complete, then report span complete.
|
||||
go func() {
|
||||
|
||||
@@ -114,7 +114,7 @@ func TestAttests_NextSlot(t *testing.T) {
|
||||
slot := uint64(55)
|
||||
ticker := make(chan uint64)
|
||||
v.NextSlotRet = ticker
|
||||
v.RoleAtRet = pb.ValidatorRole_ATTESTER
|
||||
v.RolesAtRet = []pb.ValidatorRole{pb.ValidatorRole_ATTESTER}
|
||||
go func() {
|
||||
ticker <- slot
|
||||
|
||||
@@ -138,7 +138,7 @@ func TestProposes_NextSlot(t *testing.T) {
|
||||
slot := uint64(55)
|
||||
ticker := make(chan uint64)
|
||||
v.NextSlotRet = ticker
|
||||
v.RoleAtRet = pb.ValidatorRole_PROPOSER
|
||||
v.RolesAtRet = []pb.ValidatorRole{pb.ValidatorRole_PROPOSER}
|
||||
go func() {
|
||||
ticker <- slot
|
||||
|
||||
@@ -162,7 +162,7 @@ func TestBothProposesAndAttests_NextSlot(t *testing.T) {
|
||||
slot := uint64(55)
|
||||
ticker := make(chan uint64)
|
||||
v.NextSlotRet = ticker
|
||||
v.RoleAtRet = pb.ValidatorRole_BOTH
|
||||
v.RolesAtRet = []pb.ValidatorRole{pb.ValidatorRole_ATTESTER, pb.ValidatorRole_PROPOSER}
|
||||
go func() {
|
||||
ticker <- slot
|
||||
|
||||
|
||||
@@ -101,6 +101,7 @@ func (v *ValidatorService) Start() {
|
||||
validatorClient: pb.NewValidatorServiceClient(v.conn),
|
||||
attesterClient: pb.NewAttesterServiceClient(v.conn),
|
||||
proposerClient: pb.NewProposerServiceClient(v.conn),
|
||||
aggregatorClient: pb.NewAggregatorServiceClient(v.conn),
|
||||
node: ethpb.NewNodeClient(v.conn),
|
||||
keys: v.keys,
|
||||
pubkeys: pubKeys,
|
||||
|
||||
@@ -3,6 +3,7 @@ package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"io"
|
||||
"time"
|
||||
@@ -13,6 +14,7 @@ import (
|
||||
pb "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
|
||||
ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
||||
"github.com/prysmaticlabs/prysm/shared/bytesutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/hashutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/keystore"
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
"github.com/prysmaticlabs/prysm/shared/slotutil"
|
||||
@@ -27,6 +29,7 @@ type validator struct {
|
||||
proposerClient pb.ProposerServiceClient
|
||||
validatorClient pb.ValidatorServiceClient
|
||||
attesterClient pb.AttesterServiceClient
|
||||
aggregatorClient pb.AggregatorServiceClient
|
||||
node ethpb.NodeClient
|
||||
keys map[[48]byte]*keystore.Key
|
||||
pubkeys [][]byte
|
||||
@@ -259,25 +262,54 @@ func (v *validator) UpdateAssignments(ctx context.Context, slot uint64) error {
|
||||
// RolesAt slot returns the validator roles at the given slot. Returns nil if the
|
||||
// validator is known to not have a roles at the at slot. Returns UNKNOWN if the
|
||||
// validator assignments are unknown. Otherwise returns a valid ValidatorRole map.
|
||||
func (v *validator) RolesAt(slot uint64) map[[48]byte]pb.ValidatorRole {
|
||||
rolesAt := make(map[[48]byte]pb.ValidatorRole)
|
||||
func (v *validator) RolesAt(ctx context.Context, slot uint64) (map[[48]byte][]pb.ValidatorRole, error) {
|
||||
rolesAt := make(map[[48]byte][]pb.ValidatorRole)
|
||||
for _, assignment := range v.assignments.ValidatorAssignment {
|
||||
var role pb.ValidatorRole
|
||||
switch {
|
||||
case assignment == nil:
|
||||
role = pb.ValidatorRole_UNKNOWN
|
||||
case assignment.ProposerSlot == slot && assignment.AttesterSlot == slot:
|
||||
role = pb.ValidatorRole_BOTH
|
||||
case assignment.AttesterSlot == slot:
|
||||
role = pb.ValidatorRole_ATTESTER
|
||||
case assignment.ProposerSlot == slot:
|
||||
role = pb.ValidatorRole_PROPOSER
|
||||
default:
|
||||
role = pb.ValidatorRole_UNKNOWN
|
||||
var roles []pb.ValidatorRole
|
||||
|
||||
if assignment == nil {
|
||||
continue
|
||||
}
|
||||
if assignment.ProposerSlot == slot {
|
||||
roles = append(roles, pb.ValidatorRole_PROPOSER)
|
||||
}
|
||||
if assignment.AttesterSlot == slot {
|
||||
roles = append(roles, pb.ValidatorRole_ATTESTER)
|
||||
|
||||
aggregator, err := v.isAggregator(ctx, assignment.Committee, slot, bytesutil.ToBytes48(assignment.PublicKey))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not check if a validator is an aggregator")
|
||||
}
|
||||
if aggregator {
|
||||
roles = append(roles, pb.ValidatorRole_AGGREGATOR)
|
||||
}
|
||||
|
||||
}
|
||||
if len(roles) == 0 {
|
||||
roles = append(roles, pb.ValidatorRole_UNKNOWN)
|
||||
}
|
||||
|
||||
var pubKey [48]byte
|
||||
copy(pubKey[:], assignment.PublicKey)
|
||||
rolesAt[pubKey] = role
|
||||
rolesAt[pubKey] = roles
|
||||
}
|
||||
return rolesAt
|
||||
return rolesAt, nil
|
||||
}
|
||||
|
||||
// isAggregator checks if a validator is an aggregator of a given slot, it uses the selection algorithm outlined in:
|
||||
// https://github.com/ethereum/eth2.0-specs/blob/v0.9.0/specs/validator/0_beacon-chain-validator.md#aggregation-selection
|
||||
func (v *validator) isAggregator(ctx context.Context, committee []uint64, slot uint64, pubKey [48]byte) (bool, error) {
|
||||
modulo := uint64(1)
|
||||
if len(committee)/int(params.BeaconConfig().TargetAggregatorsPerCommittee) > 1 {
|
||||
modulo = uint64(len(committee)) / params.BeaconConfig().TargetAggregatorsPerCommittee
|
||||
}
|
||||
|
||||
slotSig, err := v.signSlot(ctx, pubKey, slot)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
b := hashutil.Hash(slotSig)
|
||||
|
||||
return binary.LittleEndian.Uint64(b[:8])%modulo == 0, nil
|
||||
}
|
||||
|
||||
72
validator/client/validator_aggregate.go
Normal file
72
validator/client/validator_aggregate.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/prysmaticlabs/go-ssz"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
|
||||
pb "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
|
||||
"github.com/prysmaticlabs/prysm/shared/bytesutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
"github.com/sirupsen/logrus"
|
||||
"go.opencensus.io/trace"
|
||||
)
|
||||
|
||||
// SubmitAggregateAndProof submits the validator's signed slot signature to the beacon node
|
||||
// via gRPC. Beacon node will verify the slot signature and determine if the validator is also
|
||||
// an aggregator. If yes, then beacon node will broadcast aggregated signature and
|
||||
// proof on the validator's behave.
|
||||
func (v *validator) SubmitAggregateAndProof(ctx context.Context, slot uint64, pubKey [48]byte) {
|
||||
ctx, span := trace.StartSpan(ctx, "validator.SubmitAggregateAndProof")
|
||||
defer span.End()
|
||||
|
||||
span.AddAttributes(trace.StringAttribute("validator", fmt.Sprintf("%#x", pubKey)))
|
||||
|
||||
assignment, err := v.assignment(pubKey)
|
||||
if err != nil {
|
||||
log.Errorf("Could not fetch validator assignment: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
slotSig, err := v.signSlot(ctx, pubKey, slot)
|
||||
if err != nil {
|
||||
log.Errorf("Could not sign slot: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
res, err := v.aggregatorClient.SubmitAggregateAndProof(ctx, &pb.AggregationRequest{
|
||||
Slot: slot,
|
||||
CommitteeIndex: assignment.CommitteeIndex,
|
||||
PublicKey: pubKey[:],
|
||||
SlotSignature: slotSig,
|
||||
})
|
||||
if err != nil {
|
||||
log.Errorf("Could not submit slot signature to beacon node: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.WithFields(logrus.Fields{
|
||||
"slot": slot,
|
||||
"committeeIndex": assignment.CommitteeIndex,
|
||||
"pubKey": fmt.Sprintf("%#x", bytesutil.Trunc(pubKey[:])),
|
||||
"aggregationRoot": fmt.Sprintf("%#x", bytesutil.Trunc(res.Root[:])),
|
||||
}).Debug("Assigned and submitted aggregation and proof request")
|
||||
}
|
||||
|
||||
// This implements selection logic outlined in:
|
||||
// https://github.com/ethereum/eth2.0-specs/blob/v0.9.0/specs/validator/0_beacon-chain-validator.md#aggregation-selection
|
||||
func (v *validator) signSlot(ctx context.Context, pubKey [48]byte, slot uint64) ([]byte, error) {
|
||||
domain, err := v.validatorClient.DomainData(ctx, &pb.DomainRequest{Epoch: helpers.SlotToEpoch(slot), Domain: params.BeaconConfig().DomainBeaconAttester})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
slotRoot, err := ssz.HashTreeRoot(slot)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
sig := v.keys[pubKey].SecretKey.Sign(slotRoot[:], domain.SignatureDomain)
|
||||
return sig.Marshal(), nil
|
||||
}
|
||||
46
validator/client/validator_aggregate_test.go
Normal file
46
validator/client/validator_aggregate_test.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/golang/mock/gomock"
|
||||
pb "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil"
|
||||
logTest "github.com/sirupsen/logrus/hooks/test"
|
||||
)
|
||||
|
||||
func TestSubmitAggregateAndProof_AssignmentRequestFailure(t *testing.T) {
|
||||
hook := logTest.NewGlobal()
|
||||
validator, _, finish := setup(t)
|
||||
validator.assignments = &pb.AssignmentResponse{ValidatorAssignment: []*pb.AssignmentResponse_ValidatorAssignment{}}
|
||||
defer finish()
|
||||
|
||||
validator.SubmitAggregateAndProof(context.Background(), 0, validatorPubKey)
|
||||
|
||||
testutil.AssertLogsContain(t, hook, "Could not fetch validator assignment")
|
||||
}
|
||||
|
||||
func TestSubmitAggregateAndProof_Ok(t *testing.T) {
|
||||
hook := logTest.NewGlobal()
|
||||
validator, m, finish := setup(t)
|
||||
defer finish()
|
||||
validator.assignments = &pb.AssignmentResponse{ValidatorAssignment: []*pb.AssignmentResponse_ValidatorAssignment{
|
||||
{
|
||||
PublicKey: validatorKey.PublicKey.Marshal(),
|
||||
},
|
||||
}}
|
||||
|
||||
m.validatorClient.EXPECT().DomainData(
|
||||
gomock.Any(), // ctx
|
||||
gomock.Any(), // epoch
|
||||
).Return(&pb.DomainResponse{}, nil /*err*/)
|
||||
|
||||
m.aggregatorClient.EXPECT().SubmitAggregateAndProof(
|
||||
gomock.Any(), // ctx
|
||||
gomock.AssignableToTypeOf(&pb.AggregationRequest{}),
|
||||
).Return(&pb.AggregationResponse{}, nil)
|
||||
|
||||
validator.SubmitAggregateAndProof(context.Background(), 0, validatorPubKey)
|
||||
testutil.AssertLogsContain(t, hook, "Assigned and submitted aggregation and proof request")
|
||||
}
|
||||
@@ -14,23 +14,26 @@ import (
|
||||
)
|
||||
|
||||
type mocks struct {
|
||||
proposerClient *internal.MockProposerServiceClient
|
||||
validatorClient *internal.MockValidatorServiceClient
|
||||
attesterClient *internal.MockAttesterServiceClient
|
||||
proposerClient *internal.MockProposerServiceClient
|
||||
validatorClient *internal.MockValidatorServiceClient
|
||||
attesterClient *internal.MockAttesterServiceClient
|
||||
aggregatorClient *internal.MockAggregatorServiceClient
|
||||
}
|
||||
|
||||
func setup(t *testing.T) (*validator, *mocks, func()) {
|
||||
ctrl := gomock.NewController(t)
|
||||
m := &mocks{
|
||||
proposerClient: internal.NewMockProposerServiceClient(ctrl),
|
||||
validatorClient: internal.NewMockValidatorServiceClient(ctrl),
|
||||
attesterClient: internal.NewMockAttesterServiceClient(ctrl),
|
||||
proposerClient: internal.NewMockProposerServiceClient(ctrl),
|
||||
validatorClient: internal.NewMockValidatorServiceClient(ctrl),
|
||||
attesterClient: internal.NewMockAttesterServiceClient(ctrl),
|
||||
aggregatorClient: internal.NewMockAggregatorServiceClient(ctrl),
|
||||
}
|
||||
validator := &validator{
|
||||
proposerClient: m.proposerClient,
|
||||
attesterClient: m.attesterClient,
|
||||
validatorClient: m.validatorClient,
|
||||
keys: keyMap,
|
||||
proposerClient: m.proposerClient,
|
||||
attesterClient: m.attesterClient,
|
||||
validatorClient: m.validatorClient,
|
||||
aggregatorClient: m.aggregatorClient,
|
||||
keys: keyMap,
|
||||
}
|
||||
|
||||
return validator, m, ctrl.Finish
|
||||
|
||||
@@ -2,6 +2,7 @@ package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/rand"
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
@@ -12,6 +13,7 @@ import (
|
||||
"github.com/golang/mock/gomock"
|
||||
pb "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
|
||||
ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
||||
"github.com/prysmaticlabs/prysm/shared/bls"
|
||||
"github.com/prysmaticlabs/prysm/shared/keystore"
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil"
|
||||
@@ -550,45 +552,70 @@ func TestUpdateAssignments_OK(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRolesAt_OK(t *testing.T) {
|
||||
v, m, finish := setup(t)
|
||||
defer finish()
|
||||
|
||||
v := validator{
|
||||
assignments: &pb.AssignmentResponse{
|
||||
ValidatorAssignment: []*pb.AssignmentResponse_ValidatorAssignment{
|
||||
{
|
||||
CommitteeIndex: 1,
|
||||
AttesterSlot: 1,
|
||||
PublicKey: []byte{0x01},
|
||||
},
|
||||
{
|
||||
CommitteeIndex: 2,
|
||||
ProposerSlot: 1,
|
||||
PublicKey: []byte{0x02},
|
||||
},
|
||||
{
|
||||
CommitteeIndex: 1,
|
||||
AttesterSlot: 2,
|
||||
PublicKey: []byte{0x03},
|
||||
},
|
||||
{
|
||||
CommitteeIndex: 2,
|
||||
AttesterSlot: 1,
|
||||
ProposerSlot: 1,
|
||||
PublicKey: []byte{0x04},
|
||||
},
|
||||
v.assignments = &pb.AssignmentResponse{
|
||||
ValidatorAssignment: []*pb.AssignmentResponse_ValidatorAssignment{
|
||||
{
|
||||
CommitteeIndex: 1,
|
||||
AttesterSlot: 1,
|
||||
PublicKey: []byte{0x01},
|
||||
},
|
||||
{
|
||||
CommitteeIndex: 2,
|
||||
ProposerSlot: 1,
|
||||
PublicKey: []byte{0x02},
|
||||
},
|
||||
{
|
||||
CommitteeIndex: 1,
|
||||
AttesterSlot: 2,
|
||||
PublicKey: []byte{0x03},
|
||||
},
|
||||
{
|
||||
CommitteeIndex: 2,
|
||||
AttesterSlot: 1,
|
||||
ProposerSlot: 1,
|
||||
PublicKey: []byte{0x04},
|
||||
},
|
||||
},
|
||||
}
|
||||
roleMap := v.RolesAt(1)
|
||||
if roleMap[[48]byte{0x01}] != pb.ValidatorRole_ATTESTER {
|
||||
|
||||
priv, _ := bls.RandKey(rand.Reader)
|
||||
keyStore, _ := keystore.NewKeyFromBLS(priv)
|
||||
v.keys[[48]byte{0x01}] = keyStore
|
||||
v.keys[[48]byte{0x04}] = keyStore
|
||||
|
||||
m.validatorClient.EXPECT().DomainData(
|
||||
gomock.Any(), // ctx
|
||||
gomock.Any(), // epoch
|
||||
).Return(&pb.DomainResponse{}, nil /*err*/)
|
||||
m.validatorClient.EXPECT().DomainData(
|
||||
gomock.Any(), // ctx
|
||||
gomock.Any(), // epoch
|
||||
).Return(&pb.DomainResponse{}, nil /*err*/)
|
||||
|
||||
roleMap, err := v.RolesAt(context.Background(), 1)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if roleMap[[48]byte{0x01}][0] != pb.ValidatorRole_ATTESTER {
|
||||
t.Errorf("Unexpected validator role. want: ValidatorRole_PROPOSER")
|
||||
}
|
||||
if roleMap[[48]byte{0x02}] != pb.ValidatorRole_PROPOSER {
|
||||
if roleMap[[48]byte{0x02}][0] != pb.ValidatorRole_PROPOSER {
|
||||
t.Errorf("Unexpected validator role. want: ValidatorRole_ATTESTER")
|
||||
}
|
||||
if roleMap[[48]byte{0x03}] != pb.ValidatorRole_UNKNOWN {
|
||||
if roleMap[[48]byte{0x03}][0] != pb.ValidatorRole_UNKNOWN {
|
||||
t.Errorf("Unexpected validator role. want: UNKNOWN")
|
||||
}
|
||||
if roleMap[[48]byte{0x04}] != pb.ValidatorRole_BOTH {
|
||||
t.Errorf("Unexpected validator role. want: BOTH")
|
||||
if roleMap[[48]byte{0x04}][0] != pb.ValidatorRole_PROPOSER {
|
||||
t.Errorf("Unexpected validator role. want: ValidatorRole_PROPOSER")
|
||||
}
|
||||
if roleMap[[48]byte{0x04}][1] != pb.ValidatorRole_ATTESTER {
|
||||
t.Errorf("Unexpected validator role. want: ValidatorRole_ATTESTER")
|
||||
}
|
||||
if roleMap[[48]byte{0x04}][2] != pb.ValidatorRole_AGGREGATOR {
|
||||
t.Errorf("Unexpected validator role. want: ValidatorRole_AGGREGATOR")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ go_library(
|
||||
name = "go_default_library",
|
||||
testonly = True,
|
||||
srcs = [
|
||||
"aggregator_service_mock.go",
|
||||
"attester_service_mock.go",
|
||||
"node_mock.go",
|
||||
"proposer_service_mock.go",
|
||||
|
||||
56
validator/internal/aggregator_service_mock.go
generated
Normal file
56
validator/internal/aggregator_service_mock.go
generated
Normal file
@@ -0,0 +1,56 @@
|
||||
// Code generated by MockGen. DO NOT EDIT.
|
||||
// Source: github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1 (interfaces: AggregatorServiceClient)
|
||||
|
||||
// Package internal is a generated GoMock package.
|
||||
package internal
|
||||
|
||||
import (
|
||||
context "context"
|
||||
gomock "github.com/golang/mock/gomock"
|
||||
v1 "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
|
||||
grpc "google.golang.org/grpc"
|
||||
reflect "reflect"
|
||||
)
|
||||
|
||||
// MockAggregatorServiceClient is a mock of AggregatorServiceClient interface
|
||||
type MockAggregatorServiceClient struct {
|
||||
ctrl *gomock.Controller
|
||||
recorder *MockAggregatorServiceClientMockRecorder
|
||||
}
|
||||
|
||||
// MockAggregatorServiceClientMockRecorder is the mock recorder for MockAggregatorServiceClient
|
||||
type MockAggregatorServiceClientMockRecorder struct {
|
||||
mock *MockAggregatorServiceClient
|
||||
}
|
||||
|
||||
// NewMockAggregatorServiceClient creates a new mock instance
|
||||
func NewMockAggregatorServiceClient(ctrl *gomock.Controller) *MockAggregatorServiceClient {
|
||||
mock := &MockAggregatorServiceClient{ctrl: ctrl}
|
||||
mock.recorder = &MockAggregatorServiceClientMockRecorder{mock}
|
||||
return mock
|
||||
}
|
||||
|
||||
// EXPECT returns an object that allows the caller to indicate expected use
|
||||
func (m *MockAggregatorServiceClient) EXPECT() *MockAggregatorServiceClientMockRecorder {
|
||||
return m.recorder
|
||||
}
|
||||
|
||||
// SubmitAggregateAndProof mocks base method
|
||||
func (m *MockAggregatorServiceClient) SubmitAggregateAndProof(arg0 context.Context, arg1 *v1.AggregationRequest, arg2 ...grpc.CallOption) (*v1.AggregationResponse, error) {
|
||||
m.ctrl.T.Helper()
|
||||
varargs := []interface{}{arg0, arg1}
|
||||
for _, a := range arg2 {
|
||||
varargs = append(varargs, a)
|
||||
}
|
||||
ret := m.ctrl.Call(m, "SubmitAggregateAndProof", varargs...)
|
||||
ret0, _ := ret[0].(*v1.AggregationResponse)
|
||||
ret1, _ := ret[1].(error)
|
||||
return ret0, ret1
|
||||
}
|
||||
|
||||
// SubmitAggregateAndProof indicates an expected call of SubmitAggregateAndProof
|
||||
func (mr *MockAggregatorServiceClientMockRecorder) SubmitAggregateAndProof(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
varargs := append([]interface{}{arg0, arg1}, arg2...)
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SubmitAggregateAndProof", reflect.TypeOf((*MockAggregatorServiceClient)(nil).SubmitAggregateAndProof), varargs...)
|
||||
}
|
||||
3
validator/internal/attester_service_mock.go
generated
3
validator/internal/attester_service_mock.go
generated
@@ -6,12 +6,11 @@ package internal
|
||||
|
||||
import (
|
||||
context "context"
|
||||
reflect "reflect"
|
||||
|
||||
gomock "github.com/golang/mock/gomock"
|
||||
v1 "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
|
||||
v1alpha1 "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
||||
grpc "google.golang.org/grpc"
|
||||
reflect "reflect"
|
||||
)
|
||||
|
||||
// MockAttesterServiceClient is a mock of AttesterServiceClient interface
|
||||
|
||||
3
validator/internal/proposer_service_mock.go
generated
3
validator/internal/proposer_service_mock.go
generated
@@ -6,12 +6,11 @@ package internal
|
||||
|
||||
import (
|
||||
context "context"
|
||||
reflect "reflect"
|
||||
|
||||
gomock "github.com/golang/mock/gomock"
|
||||
v1 "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
|
||||
v1alpha1 "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
||||
grpc "google.golang.org/grpc"
|
||||
reflect "reflect"
|
||||
)
|
||||
|
||||
// MockProposerServiceClient is a mock of ProposerServiceClient interface
|
||||
|
||||
3
validator/internal/validator_service_mock.go
generated
3
validator/internal/validator_service_mock.go
generated
@@ -6,14 +6,13 @@ package internal
|
||||
|
||||
import (
|
||||
context "context"
|
||||
reflect "reflect"
|
||||
|
||||
types "github.com/gogo/protobuf/types"
|
||||
gomock "github.com/golang/mock/gomock"
|
||||
v1 "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
|
||||
v1alpha1 "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
||||
grpc "google.golang.org/grpc"
|
||||
metadata "google.golang.org/grpc/metadata"
|
||||
reflect "reflect"
|
||||
)
|
||||
|
||||
// MockValidatorServiceClient is a mock of ValidatorServiceClient interface
|
||||
|
||||
Reference in New Issue
Block a user