From 27a7907eba92295f05a06463fe4001ce88ece461 Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Thu, 20 Jul 2023 13:45:00 +1000 Subject: [PATCH] fix(sentry): Disable older beacon committee fetching on Lodestar (#149) --- example_sentry.yaml | 3 +++ pkg/sentry/ethereum/beacon.go | 6 +++--- pkg/sentry/ethereum/services/duties.go | 18 ++++++++++++------ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/example_sentry.yaml b/example_sentry.yaml index a8ed38a2..86fc7628 100644 --- a/example_sentry.yaml +++ b/example_sentry.yaml @@ -32,6 +32,9 @@ forkChoice: slotTimes: - 4s +beaconCommittees: + enabled: true + outputs: - name: http-sink type: http diff --git a/pkg/sentry/ethereum/beacon.go b/pkg/sentry/ethereum/beacon.go index bfc04cd7..a2593321 100644 --- a/pkg/sentry/ethereum/beacon.go +++ b/pkg/sentry/ethereum/beacon.go @@ -65,14 +65,14 @@ func (b *BeaconNode) Start(ctx context.Context) error { wg.Add(1) service.OnReady(ctx, func(ctx context.Context) error { - b.log.WithField("service", service.Name()).Info("service is ready") + b.log.WithField("service", service.Name()).Info("Service is ready") wg.Done() return nil }) - b.log.WithField("service", service.Name()).Info("starting service") + b.log.WithField("service", service.Name()).Info("Starting service") if err := service.Start(ctx); err != nil { errs <- fmt.Errorf("failed to start service: %w", err) @@ -81,7 +81,7 @@ func (b *BeaconNode) Start(ctx context.Context) error { wg.Wait() } - b.log.Info("all services are ready") + b.log.Info("All services are ready") for _, callback := range b.onReadyCallbacks { if err := callback(ctx); err != nil { diff --git a/pkg/sentry/ethereum/services/duties.go b/pkg/sentry/ethereum/services/duties.go index 617d626a..a7dbbf86 100644 --- a/pkg/sentry/ethereum/services/duties.go +++ b/pkg/sentry/ethereum/services/duties.go @@ -104,19 +104,25 @@ func (m *DutiesService) Name() Name { return "duties" } -func (m *DutiesService) RequiredEpochDuties() []phase0.Epoch { +func (m *DutiesService) RequiredEpochDuties(ctx context.Context) []phase0.Epoch { now := m.beacon.Wallclock().Epochs().Current() epochNumber := now.Number() epochs := []phase0.Epoch{ - phase0.Epoch(epochNumber - 3), - phase0.Epoch(epochNumber - 2), - phase0.Epoch(epochNumber - 1), phase0.Epoch(epochNumber), phase0.Epoch(epochNumber + 1), } + // Lodestar does not support fetching beacon committees for older epochs. + if m.metadata.Client(ctx) != string(ClientLodestar) { + epochs = append(epochs, + phase0.Epoch(epochNumber-1), + phase0.Epoch(epochNumber-2), + phase0.Epoch(epochNumber-3), + ) + } + final := map[phase0.Epoch]struct{}{} // Deduplicate in case the current epoch is below epoch 3. @@ -133,7 +139,7 @@ func (m *DutiesService) RequiredEpochDuties() []phase0.Epoch { } func (m *DutiesService) Ready(ctx context.Context) error { - for _, epoch := range m.RequiredEpochDuties() { + for _, epoch := range m.RequiredEpochDuties(ctx) { if duties := m.beaconCommittees.Get(epoch); duties == nil { return fmt.Errorf("duties for epoch %d are not ready", epoch) } @@ -147,7 +153,7 @@ func (m *DutiesService) backFillEpochDuties(ctx context.Context) error { return fmt.Errorf("metadata service is not ready") } - for _, epoch := range m.RequiredEpochDuties() { + for _, epoch := range m.RequiredEpochDuties(ctx) { if duties := m.beaconCommittees.Get(epoch); duties == nil { if err := m.fetchBeaconCommittee(ctx, epoch); err != nil { return err