From 1f3d9873cd64a548df1e4539490e73e143a011bf Mon Sep 17 00:00:00 2001 From: terence tsao Date: Wed, 1 Jul 2020 10:04:06 -0700 Subject: [PATCH] Archival service removal (#6448) --- beacon-chain/archiver/BUILD.bazel | 46 -- beacon-chain/archiver/service.go | 200 -------- beacon-chain/archiver/service_test.go | 474 ------------------ .../blockchain/process_attestation.go | 8 - beacon-chain/blockchain/process_block.go | 8 - beacon-chain/flags/BUILD.bazel | 1 - beacon-chain/flags/archive.go | 32 -- beacon-chain/flags/config.go | 26 +- beacon-chain/main.go | 4 - beacon-chain/node/BUILD.bazel | 1 - beacon-chain/node/node.go | 22 - beacon-chain/usage.go | 9 - shared/featureconfig/flags.go | 24 + 13 files changed, 29 insertions(+), 826 deletions(-) delete mode 100644 beacon-chain/archiver/BUILD.bazel delete mode 100644 beacon-chain/archiver/service.go delete mode 100644 beacon-chain/archiver/service_test.go delete mode 100644 beacon-chain/flags/archive.go diff --git a/beacon-chain/archiver/BUILD.bazel b/beacon-chain/archiver/BUILD.bazel deleted file mode 100644 index dae5a00eb..000000000 --- a/beacon-chain/archiver/BUILD.bazel +++ /dev/null @@ -1,46 +0,0 @@ -load("@prysm//tools/go:def.bzl", "go_library") -load("@io_bazel_rules_go//go:def.bzl", "go_test") - -go_library( - name = "go_default_library", - srcs = ["service.go"], - importpath = "github.com/prysmaticlabs/prysm/beacon-chain/archiver", - visibility = ["//beacon-chain:__subpackages__"], - deps = [ - "//beacon-chain/blockchain:go_default_library", - "//beacon-chain/core/feed:go_default_library", - "//beacon-chain/core/feed/state:go_default_library", - "//beacon-chain/core/helpers:go_default_library", - "//beacon-chain/core/validators:go_default_library", - "//beacon-chain/db:go_default_library", - "//beacon-chain/state:go_default_library", - "//proto/beacon/p2p/v1:go_default_library", - "//shared/params:go_default_library", - "@com_github_pkg_errors//:go_default_library", - "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", - "@com_github_sirupsen_logrus//:go_default_library", - ], -) - -go_test( - name = "go_default_test", - srcs = ["service_test.go"], - embed = [":go_default_library"], - deps = [ - "//beacon-chain/blockchain/testing:go_default_library", - "//beacon-chain/core/epoch/precompute:go_default_library", - "//beacon-chain/core/feed:go_default_library", - "//beacon-chain/core/feed/state:go_default_library", - "//beacon-chain/core/helpers:go_default_library", - "//beacon-chain/db:go_default_library", - "//beacon-chain/db/testing:go_default_library", - "//beacon-chain/state:go_default_library", - "//proto/beacon/p2p/v1:go_default_library", - "//shared/params:go_default_library", - "//shared/testutil:go_default_library", - "@com_github_gogo_protobuf//proto:go_default_library", - "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", - "@com_github_sirupsen_logrus//:go_default_library", - "@com_github_sirupsen_logrus//hooks/test:go_default_library", - ], -) diff --git a/beacon-chain/archiver/service.go b/beacon-chain/archiver/service.go deleted file mode 100644 index 01e319e22..000000000 --- a/beacon-chain/archiver/service.go +++ /dev/null @@ -1,200 +0,0 @@ -package archiver - -import ( - "context" - "fmt" - - "github.com/pkg/errors" - ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" - "github.com/prysmaticlabs/prysm/beacon-chain/blockchain" - "github.com/prysmaticlabs/prysm/beacon-chain/core/feed" - statefeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/state" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" - "github.com/prysmaticlabs/prysm/beacon-chain/core/validators" - "github.com/prysmaticlabs/prysm/beacon-chain/db" - "github.com/prysmaticlabs/prysm/beacon-chain/state" - pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" - "github.com/prysmaticlabs/prysm/shared/params" - "github.com/sirupsen/logrus" -) - -var log = logrus.WithField("prefix", "archiver") - -// Service defining archiver functionality for persisting checkpointed -// beacon chain information to a database backend for historical purposes. -type Service struct { - ctx context.Context - cancel context.CancelFunc - beaconDB db.NoHeadAccessDatabase - headFetcher blockchain.HeadFetcher - participationFetcher blockchain.ParticipationFetcher - stateNotifier statefeed.Notifier - lastArchivedEpoch uint64 -} - -// Config options for the archiver service. -type Config struct { - BeaconDB db.NoHeadAccessDatabase - HeadFetcher blockchain.HeadFetcher - ParticipationFetcher blockchain.ParticipationFetcher - StateNotifier statefeed.Notifier -} - -// NewArchiverService initializes the service from configuration options. -func NewArchiverService(ctx context.Context, cfg *Config) *Service { - ctx, cancel := context.WithCancel(ctx) - return &Service{ - ctx: ctx, - cancel: cancel, - beaconDB: cfg.BeaconDB, - headFetcher: cfg.HeadFetcher, - participationFetcher: cfg.ParticipationFetcher, - stateNotifier: cfg.StateNotifier, - } -} - -// Start the archiver service event loop. -func (s *Service) Start() { - go s.run(s.ctx) -} - -// Stop the archiver service event loop. -func (s *Service) Stop() error { - defer s.cancel() - return nil -} - -// Status reports the healthy status of the archiver. Returning nil means service -// is correctly running without error. -func (s *Service) Status() error { - return nil -} - -// We archive committee information pertaining to the head state's epoch. -func (s *Service) archiveCommitteeInfo(ctx context.Context, headState *state.BeaconState, epoch uint64) error { - proposerSeed, err := helpers.Seed(headState, epoch, params.BeaconConfig().DomainBeaconProposer) - if err != nil { - return errors.Wrap(err, "could not generate seed") - } - attesterSeed, err := helpers.Seed(headState, epoch, params.BeaconConfig().DomainBeaconAttester) - if err != nil { - return errors.Wrap(err, "could not generate seed") - } - - info := &pb.ArchivedCommitteeInfo{ - ProposerSeed: proposerSeed[:], - AttesterSeed: attesterSeed[:], - } - if err := s.beaconDB.SaveArchivedCommitteeInfo(ctx, epoch, info); err != nil { - return errors.Wrap(err, "could not archive committee info") - } - return nil -} - -// We archive active validator set changes that happened during the previous epoch. -func (s *Service) archiveActiveSetChanges(ctx context.Context, headState *state.BeaconState, epoch uint64) error { - prevEpoch := epoch - 1 - vals := headState.Validators() - activations := validators.ActivatedValidatorIndices(prevEpoch, vals) - slashings := validators.SlashedValidatorIndices(prevEpoch, vals) - activeValidatorCount, err := helpers.ActiveValidatorCount(headState, prevEpoch) - if err != nil { - return errors.Wrap(err, "could not get active validator count") - } - exited, err := validators.ExitedValidatorIndices(prevEpoch, vals, activeValidatorCount) - if err != nil { - return errors.Wrap(err, "could not determine exited validator indices") - } - activeSetChanges := &pb.ArchivedActiveSetChanges{ - Activated: activations, - Exited: exited, - Slashed: slashings, - } - if err := s.beaconDB.SaveArchivedActiveValidatorChanges(ctx, prevEpoch, activeSetChanges); err != nil { - return errors.Wrap(err, "could not archive active validator set changes") - } - return nil -} - -// We compute participation metrics by first retrieving the head state and -// matching validator attestations during the epoch. -func (s *Service) archiveParticipation(ctx context.Context, epoch uint64) error { - pBal := s.participationFetcher.Participation(epoch) - participation := ðpb.ValidatorParticipation{} - if pBal != nil { - participation = ðpb.ValidatorParticipation{ - EligibleEther: pBal.ActivePrevEpoch, - VotedEther: pBal.PrevEpochTargetAttested, - GlobalParticipationRate: float32(pBal.PrevEpochTargetAttested) / float32(pBal.ActivePrevEpoch), - } - } - return s.beaconDB.SaveArchivedValidatorParticipation(ctx, epoch, participation) -} - -// We archive validator balances and active indices. -func (s *Service) archiveBalances(ctx context.Context, balances []uint64, epoch uint64) error { - if err := s.beaconDB.SaveArchivedBalances(ctx, epoch, balances); err != nil { - return errors.Wrap(err, "could not archive balances") - } - return nil -} - -func (s *Service) run(ctx context.Context) { - stateChannel := make(chan *feed.Event, 1) - stateSub := s.stateNotifier.StateFeed().Subscribe(stateChannel) - defer stateSub.Unsubscribe() - for { - select { - case event := <-stateChannel: - if event.Type == statefeed.BlockProcessed { - data, ok := event.Data.(*statefeed.BlockProcessedData) - if !ok { - log.Error("Event feed data is not type *statefeed.BlockProcessedData") - continue - } - log.WithField("headRoot", fmt.Sprintf("%#x", data.BlockRoot)).Debug("Received block processed event") - headState, err := s.headFetcher.HeadState(ctx) - if err != nil { - log.WithError(err).Error("Head state is not available") - continue - } - slot := headState.Slot() - currentEpoch := helpers.SlotToEpoch(slot) - if !helpers.IsEpochEnd(slot) && currentEpoch <= s.lastArchivedEpoch { - continue - } - epochToArchive := currentEpoch - if !helpers.IsEpochEnd(slot) { - epochToArchive-- - } - if err := s.archiveCommitteeInfo(ctx, headState, epochToArchive); err != nil { - log.WithError(err).Error("Could not archive committee info") - continue - } - if err := s.archiveActiveSetChanges(ctx, headState, epochToArchive); err != nil { - log.WithError(err).Error("Could not archive active validator set changes") - continue - } - if err := s.archiveParticipation(ctx, epochToArchive); err != nil { - log.WithError(err).Error("Could not archive validator participation") - continue - } - if err := s.archiveBalances(ctx, headState.Balances(), epochToArchive); err != nil { - log.WithError(err).Error("Could not archive validator balances and active indices") - continue - } - log.WithField( - "epoch", - epochToArchive, - ).Debug("Successfully archived beacon chain data during epoch") - s.lastArchivedEpoch = epochToArchive - } - case <-s.ctx.Done(): - log.Debug("Context closed, exiting goroutine") - return - case err := <-stateSub.Err(): - log.WithError(err).Error("Subscription to state feed notifier failed") - return - } - } -} diff --git a/beacon-chain/archiver/service_test.go b/beacon-chain/archiver/service_test.go deleted file mode 100644 index 23fb04c18..000000000 --- a/beacon-chain/archiver/service_test.go +++ /dev/null @@ -1,474 +0,0 @@ -package archiver - -import ( - "context" - "fmt" - "io/ioutil" - "reflect" - "testing" - - "github.com/gogo/protobuf/proto" - ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" - mock "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing" - "github.com/prysmaticlabs/prysm/beacon-chain/core/epoch/precompute" - "github.com/prysmaticlabs/prysm/beacon-chain/core/feed" - statefeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/state" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" - "github.com/prysmaticlabs/prysm/beacon-chain/db" - dbutil "github.com/prysmaticlabs/prysm/beacon-chain/db/testing" - stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" - pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" - "github.com/prysmaticlabs/prysm/shared/params" - "github.com/prysmaticlabs/prysm/shared/testutil" - "github.com/sirupsen/logrus" - logTest "github.com/sirupsen/logrus/hooks/test" -) - -func init() { - logrus.SetLevel(logrus.DebugLevel) - logrus.SetOutput(ioutil.Discard) -} - -func TestArchiverService_ReceivesBlockProcessedEvent(t *testing.T) { - hook := logTest.NewGlobal() - svc, _ := setupService(t) - st := testutil.NewBeaconState() - if err := st.SetSlot(1); err != nil { - t.Fatal(err) - } - svc.headFetcher = &mock.ChainService{ - State: st, - } - - event := &feed.Event{ - Type: statefeed.BlockProcessed, - Data: &statefeed.BlockProcessedData{ - BlockRoot: [32]byte{1, 2, 3}, - Verified: true, - }, - } - triggerStateEvent(t, svc, event) - testutil.AssertLogsContain(t, hook, fmt.Sprintf("%#x", event.Data.(*statefeed.BlockProcessedData).BlockRoot)) - testutil.AssertLogsContain(t, hook, "Received block processed event") -} - -func TestArchiverService_OnlyArchiveAtEpochEnd(t *testing.T) { - hook := logTest.NewGlobal() - svc, _ := setupService(t) - // The head state is NOT an epoch end. - st := testutil.NewBeaconState() - if err := st.SetSlot(params.BeaconConfig().SlotsPerEpoch - 2); err != nil { - t.Fatal(err) - } - svc.headFetcher = &mock.ChainService{ - State: st, - } - event := &feed.Event{ - Type: statefeed.BlockProcessed, - Data: &statefeed.BlockProcessedData{ - BlockRoot: [32]byte{1, 2, 3}, - Verified: true, - }, - } - triggerStateEvent(t, svc, event) - - // The context should have been canceled. - if svc.ctx.Err() != context.Canceled { - t.Error("context was not canceled") - } - testutil.AssertLogsContain(t, hook, "Received block processed event") - // The service should ONLY log any archival logs if we receive a - // head slot that is an epoch end. - testutil.AssertLogsDoNotContain(t, hook, "Successfully archived") -} - -func TestArchiverService_ArchivesEvenThroughSkipSlot(t *testing.T) { - hook := logTest.NewGlobal() - svc, _ := setupService(t) - validatorCount := uint64(100) - headState, err := setupState(validatorCount) - if err != nil { - t.Fatal(err) - } - event := &feed.Event{ - Type: statefeed.BlockProcessed, - Data: &statefeed.BlockProcessedData{ - BlockRoot: [32]byte{1, 2, 3}, - Verified: true, - }, - } - - exitRoutine := make(chan bool) - go func() { - svc.run(svc.ctx) - <-exitRoutine - }() - - // Send out an event every slot, skipping the end slot of the epoch. - for i := uint64(0); i < params.BeaconConfig().SlotsPerEpoch+1; i++ { - if err := headState.SetSlot(i); err != nil { - t.Fatal(err) - } - svc.headFetcher = &mock.ChainService{ - State: headState, - } - if helpers.IsEpochEnd(i) { - continue - } - // Send in a loop to ensure it is delivered (busy wait for the service to subscribe to the state feed). - for sent := 0; sent == 0; { - sent = svc.stateNotifier.StateFeed().Send(event) - } - } - if err := svc.Stop(); err != nil { - t.Fatal(err) - } - exitRoutine <- true - - // The context should have been canceled. - if svc.ctx.Err() != context.Canceled { - t.Error("context was not canceled") - } - - testutil.AssertLogsContain(t, hook, "Received block processed event") - // Even though there was a skip slot, we should still be able to archive - // upon the next block event afterwards. - testutil.AssertLogsContain(t, hook, "Successfully archived") -} - -func TestArchiverService_ComputesAndSavesParticipation(t *testing.T) { - hook := logTest.NewGlobal() - validatorCount := uint64(100) - headState, err := setupState(validatorCount) - if err != nil { - t.Fatal(err) - } - svc, _ := setupService(t) - svc.headFetcher = &mock.ChainService{ - State: headState, - } - event := &feed.Event{ - Type: statefeed.BlockProcessed, - Data: &statefeed.BlockProcessedData{ - BlockRoot: [32]byte{1, 2, 3}, - Verified: true, - }, - } - triggerStateEvent(t, svc, event) - - attestedBalance := uint64(1) - - currentEpoch := helpers.CurrentEpoch(headState) - wanted := ðpb.ValidatorParticipation{ - VotedEther: attestedBalance, - EligibleEther: validatorCount * params.BeaconConfig().MaxEffectiveBalance, - GlobalParticipationRate: float32(attestedBalance) / float32(validatorCount*params.BeaconConfig().MaxEffectiveBalance), - } - - retrieved, err := svc.beaconDB.ArchivedValidatorParticipation(svc.ctx, currentEpoch) - if err != nil { - t.Fatal(err) - } - - if !proto.Equal(wanted, retrieved) { - t.Errorf("Wanted participation for epoch %d %v, retrieved %v", currentEpoch-1, wanted, retrieved) - } - testutil.AssertLogsContain(t, hook, "Successfully archived") -} - -func TestArchiverService_SavesIndicesAndBalances(t *testing.T) { - hook := logTest.NewGlobal() - validatorCount := uint64(100) - headState, err := setupState(validatorCount) - if err != nil { - t.Fatal(err) - } - svc, _ := setupService(t) - svc.headFetcher = &mock.ChainService{ - State: headState, - } - event := &feed.Event{ - Type: statefeed.BlockProcessed, - Data: &statefeed.BlockProcessedData{ - BlockRoot: [32]byte{1, 2, 3}, - Verified: true, - }, - } - triggerStateEvent(t, svc, event) - - retrieved, err := svc.beaconDB.ArchivedBalances(svc.ctx, helpers.CurrentEpoch(headState)) - if err != nil { - t.Fatal(err) - } - if !reflect.DeepEqual(headState.Balances(), retrieved) { - t.Errorf( - "Wanted balances for epoch %d %v, retrieved %v", - helpers.CurrentEpoch(headState), - headState.Balances(), - retrieved, - ) - } - testutil.AssertLogsContain(t, hook, "Successfully archived") -} - -func TestArchiverService_SavesCommitteeInfo(t *testing.T) { - hook := logTest.NewGlobal() - validatorCount := uint64(100) - headState, err := setupState(validatorCount) - if err != nil { - t.Fatal(err) - } - svc, _ := setupService(t) - svc.headFetcher = &mock.ChainService{ - State: headState, - } - event := &feed.Event{ - Type: statefeed.BlockProcessed, - Data: &statefeed.BlockProcessedData{ - BlockRoot: [32]byte{1, 2, 3}, - Verified: true, - }, - } - triggerStateEvent(t, svc, event) - - currentEpoch := helpers.CurrentEpoch(headState) - proposerSeed, err := helpers.Seed(headState, currentEpoch, params.BeaconConfig().DomainBeaconProposer) - if err != nil { - t.Fatal(err) - } - attesterSeed, err := helpers.Seed(headState, currentEpoch, params.BeaconConfig().DomainBeaconAttester) - if err != nil { - t.Fatal(err) - } - wanted := &pb.ArchivedCommitteeInfo{ - ProposerSeed: proposerSeed[:], - AttesterSeed: attesterSeed[:], - } - - retrieved, err := svc.beaconDB.ArchivedCommitteeInfo(svc.ctx, helpers.CurrentEpoch(headState)) - if err != nil { - t.Fatal(err) - } - if !proto.Equal(wanted, retrieved) { - t.Errorf( - "Wanted committee info for epoch %d %v, retrieved %v", - helpers.CurrentEpoch(headState), - wanted, - retrieved, - ) - } - testutil.AssertLogsContain(t, hook, "Successfully archived") -} - -func TestArchiverService_SavesActivatedValidatorChanges(t *testing.T) { - hook := logTest.NewGlobal() - validatorCount := uint64(100) - headState, err := setupState(validatorCount) - if err != nil { - t.Fatal(err) - } - svc, beaconDB := setupService(t) - svc.headFetcher = &mock.ChainService{ - State: headState, - } - prevEpoch := helpers.PrevEpoch(headState) - delayedActEpoch := helpers.ActivationExitEpoch(prevEpoch) - val1, err := headState.ValidatorAtIndex(4) - if err != nil { - t.Fatal(err) - } - val1.ActivationEpoch = delayedActEpoch - val2, err := headState.ValidatorAtIndex(5) - if err != nil { - t.Fatal(err) - } - val2.ActivationEpoch = delayedActEpoch - if err := headState.UpdateValidatorAtIndex(4, val1); err != nil { - t.Fatal(err) - } - if err := headState.UpdateValidatorAtIndex(5, val1); err != nil { - t.Fatal(err) - } - event := &feed.Event{ - Type: statefeed.BlockProcessed, - Data: &statefeed.BlockProcessedData{ - BlockRoot: [32]byte{1, 2, 3}, - Verified: true, - }, - } - triggerStateEvent(t, svc, event) - - retrieved, err := beaconDB.ArchivedActiveValidatorChanges(svc.ctx, prevEpoch) - if err != nil { - t.Fatal(err) - } - if retrieved == nil { - t.Fatal("Retrieved indices are nil") - } - if len(retrieved.Activated) != 98 { - t.Error("Did not get wanted active length") - } - testutil.AssertLogsContain(t, hook, "Successfully archived") -} - -func TestArchiverService_SavesSlashedValidatorChanges(t *testing.T) { - hook := logTest.NewGlobal() - validatorCount := uint64(100) - headState, err := setupState(validatorCount) - if err != nil { - t.Fatal(err) - } - svc, beaconDB := setupService(t) - svc.headFetcher = &mock.ChainService{ - State: headState, - } - prevEpoch := helpers.PrevEpoch(headState) - val1, err := headState.ValidatorAtIndex(95) - if err != nil { - t.Fatal(err) - } - val1.Slashed = true - val2, err := headState.ValidatorAtIndex(96) - if err != nil { - t.Fatal(err) - } - val2.Slashed = true - if err := headState.UpdateValidatorAtIndex(95, val1); err != nil { - t.Fatal(err) - } - if err := headState.UpdateValidatorAtIndex(96, val1); err != nil { - t.Fatal(err) - } - event := &feed.Event{ - Type: statefeed.BlockProcessed, - Data: &statefeed.BlockProcessedData{ - BlockRoot: [32]byte{1, 2, 3}, - Verified: true, - }, - } - triggerStateEvent(t, svc, event) - - retrieved, err := beaconDB.ArchivedActiveValidatorChanges(svc.ctx, prevEpoch) - if err != nil { - t.Fatal(err) - } - if retrieved == nil { - t.Fatal("Retrieved indices are nil") - } - if !reflect.DeepEqual(retrieved.Slashed, []uint64{95, 96}) { - t.Errorf("Wanted indices 95, 96 slashed, received %v", retrieved.Slashed) - } - testutil.AssertLogsContain(t, hook, "Successfully archived") -} - -func TestArchiverService_SavesExitedValidatorChanges(t *testing.T) { - hook := logTest.NewGlobal() - validatorCount := uint64(100) - headState, err := setupState(validatorCount) - if err != nil { - t.Fatal(err) - } - svc, beaconDB := setupService(t) - svc.headFetcher = &mock.ChainService{ - State: headState, - } - prevEpoch := helpers.PrevEpoch(headState) - val, err := headState.ValidatorAtIndex(95) - if err != nil { - t.Fatal(err) - } - val.ExitEpoch = prevEpoch - val.WithdrawableEpoch = prevEpoch + params.BeaconConfig().MinValidatorWithdrawabilityDelay - if err := headState.UpdateValidatorAtIndex(95, val); err != nil { - t.Fatal(err) - } - event := &feed.Event{ - Type: statefeed.BlockProcessed, - Data: &statefeed.BlockProcessedData{ - BlockRoot: [32]byte{1, 2, 3}, - Verified: true, - }, - } - triggerStateEvent(t, svc, event) - testutil.AssertLogsContain(t, hook, "Successfully archived") - retrieved, err := beaconDB.ArchivedActiveValidatorChanges(svc.ctx, prevEpoch) - if err != nil { - t.Fatal(err) - } - if retrieved == nil { - t.Fatal("Retrieved indices are nil") - } - if !reflect.DeepEqual(retrieved.Exited, []uint64{95}) { - t.Errorf("Wanted indices 95 exited, received %v", retrieved.Exited) - } -} - -func setupState(validatorCount uint64) (*stateTrie.BeaconState, error) { - validators := make([]*ethpb.Validator, validatorCount) - balances := make([]uint64, validatorCount) - for i := 0; i < len(validators); i++ { - validators[i] = ðpb.Validator{ - ExitEpoch: params.BeaconConfig().FarFutureEpoch, - WithdrawableEpoch: params.BeaconConfig().FarFutureEpoch, - EffectiveBalance: params.BeaconConfig().MaxEffectiveBalance, - } - balances[i] = params.BeaconConfig().MaxEffectiveBalance - } - - atts := []*pb.PendingAttestation{{Data: ðpb.AttestationData{Target: ðpb.Checkpoint{}}}} - - // We initialize a head state that has attestations from participated - // validators in a simulated fashion. - st := testutil.NewBeaconState() - if err := st.SetSlot((2 * params.BeaconConfig().SlotsPerEpoch) - 1); err != nil { - return nil, err - } - if err := st.SetValidators(validators); err != nil { - return nil, err - } - if err := st.SetBalances(balances); err != nil { - return nil, err - } - if err := st.SetCurrentEpochAttestations(atts); err != nil { - return nil, err - } - return st, nil -} - -func setupService(t *testing.T) (*Service, db.Database) { - beaconDB, _ := dbutil.SetupDB(t) - ctx, cancel := context.WithCancel(context.Background()) - validatorCount := uint64(100) - totalBalance := validatorCount * params.BeaconConfig().MaxEffectiveBalance - mockChainService := &mock.ChainService{} - return &Service{ - beaconDB: beaconDB, - ctx: ctx, - cancel: cancel, - stateNotifier: mockChainService.StateNotifier(), - participationFetcher: &mock.ChainService{ - Balance: &precompute.Balance{ActivePrevEpoch: totalBalance, PrevEpochTargetAttested: 1}}, - }, beaconDB -} - -func triggerStateEvent(t *testing.T, svc *Service, event *feed.Event) { - exitRoutine := make(chan bool) - go func() { - svc.run(svc.ctx) - <-exitRoutine - }() - - // Send in a loop to ensure it is delivered (busy wait for the service to subscribe to the state feed). - for sent := 0; sent == 0; { - sent = svc.stateNotifier.StateFeed().Send(event) - } - if err := svc.Stop(); err != nil { - t.Fatal(err) - } - exitRoutine <- true - - // The context should have been canceled. - if svc.ctx.Err() != context.Canceled { - t.Error("context was not canceled") - } -} diff --git a/beacon-chain/blockchain/process_attestation.go b/beacon-chain/blockchain/process_attestation.go index 29d22257c..13e6d8718 100644 --- a/beacon-chain/blockchain/process_attestation.go +++ b/beacon-chain/blockchain/process_attestation.go @@ -7,7 +7,6 @@ import ( "github.com/pkg/errors" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" - "github.com/prysmaticlabs/prysm/beacon-chain/flags" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/params" @@ -128,13 +127,6 @@ func (s *Service) onAttestation(ctx context.Context, a *ethpb.Attestation) ([]ui return nil, err } - // Only save attestation in DB for archival node. - if flags.Get().EnableArchive { - if err := s.beaconDB.SaveAttestation(ctx, a); err != nil { - return nil, err - } - } - if indexedAtt.AttestingIndices == nil { return nil, errors.New("nil attesting indices") } diff --git a/beacon-chain/blockchain/process_block.go b/beacon-chain/blockchain/process_block.go index 9cde2525a..fc783fcbd 100644 --- a/beacon-chain/blockchain/process_block.go +++ b/beacon-chain/blockchain/process_block.go @@ -9,7 +9,6 @@ import ( ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/state" - "github.com/prysmaticlabs/prysm/beacon-chain/flags" stateTrie "github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/shared/attestationutil" "github.com/prysmaticlabs/prysm/shared/bytesutil" @@ -214,13 +213,6 @@ func (s *Service) onBlockInitialSyncStateTransition(ctx context.Context, signed return errors.Wrap(err, "could not save state") } - if flags.Get().EnableArchive { - atts := signed.Block.Body.Attestations - if err := s.beaconDB.SaveAttestations(ctx, atts); err != nil { - return errors.Wrapf(err, "could not save block attestations from slot %d", b.Slot) - } - } - // Rate limit how many blocks (2 epochs worth of blocks) a node keeps in the memory. if uint64(len(s.getInitSyncBlocks())) > initialSyncBlockCacheSize { if err := s.beaconDB.SaveBlocks(ctx, s.getInitSyncBlocks()); err != nil { diff --git a/beacon-chain/flags/BUILD.bazel b/beacon-chain/flags/BUILD.bazel index c68032a68..e1755d0fc 100644 --- a/beacon-chain/flags/BUILD.bazel +++ b/beacon-chain/flags/BUILD.bazel @@ -3,7 +3,6 @@ load("@prysm//tools/go:def.bzl", "go_library") go_library( name = "go_default_library", srcs = [ - "archive.go", "base.go", "config.go", "interop.go", diff --git a/beacon-chain/flags/archive.go b/beacon-chain/flags/archive.go deleted file mode 100644 index 152cc3aae..000000000 --- a/beacon-chain/flags/archive.go +++ /dev/null @@ -1,32 +0,0 @@ -package flags - -import ( - "github.com/urfave/cli/v2" -) - -var ( - // ArchiveEnableFlag defines whether or not the beacon chain should archive - // historical blocks, attestations, and validator set changes. - ArchiveEnableFlag = &cli.BoolFlag{ - Name: "archive", - Usage: "Whether or not beacon chain should archive historical data including blocks, attestations, and validator set changes", - } - // ArchiveValidatorSetChangesFlag defines whether or not the beacon chain should archive - // historical validator set changes in persistent storage. - ArchiveValidatorSetChangesFlag = &cli.BoolFlag{ - Name: "archive-validator-set-changes", - Usage: "Whether or not beacon chain should archive historical validator set changes", - } - // ArchiveBlocksFlag defines whether or not the beacon chain should archive - // historical block data in persistent storage. - ArchiveBlocksFlag = &cli.BoolFlag{ - Name: "archive-blocks", - Usage: "Whether or not beacon chain should archive historical blocks", - } - // ArchiveAttestationsFlag defines whether or not the beacon chain should archive - // historical attestation data in persistent storage. - ArchiveAttestationsFlag = &cli.BoolFlag{ - Name: "archive-attestations", - Usage: "Whether or not beacon chain should archive historical blocks", - } -) diff --git a/beacon-chain/flags/config.go b/beacon-chain/flags/config.go index f34a0c22d..ca64879c2 100644 --- a/beacon-chain/flags/config.go +++ b/beacon-chain/flags/config.go @@ -9,15 +9,11 @@ import ( // GlobalFlags specifies all the global flags for the // beacon node. type GlobalFlags struct { - EnableArchive bool - EnableArchivedValidatorSetChanges bool - EnableArchivedBlocks bool - EnableArchivedAttestations bool - UnsafeSync bool - DisableDiscv5 bool - MinimumSyncPeers int - BlockBatchLimit int - BlockBatchLimitBurstFactor int + UnsafeSync bool + DisableDiscv5 bool + MinimumSyncPeers int + BlockBatchLimit int + BlockBatchLimitBurstFactor int } var globalConfig *GlobalFlags @@ -39,18 +35,6 @@ func Init(c *GlobalFlags) { // based on the provided cli context. func ConfigureGlobalFlags(ctx *cli.Context) { cfg := &GlobalFlags{} - if ctx.Bool(ArchiveEnableFlag.Name) { - cfg.EnableArchive = true - } - if ctx.Bool(ArchiveValidatorSetChangesFlag.Name) { - cfg.EnableArchivedValidatorSetChanges = true - } - if ctx.Bool(ArchiveBlocksFlag.Name) { - cfg.EnableArchivedBlocks = true - } - if ctx.Bool(ArchiveAttestationsFlag.Name) { - cfg.EnableArchivedAttestations = true - } if ctx.Bool(UnsafeSync.Name) { cfg.UnsafeSync = true } diff --git a/beacon-chain/main.go b/beacon-chain/main.go index 9d3b5a3ed..f36828778 100644 --- a/beacon-chain/main.go +++ b/beacon-chain/main.go @@ -47,10 +47,6 @@ var appFlags = []cli.Flag{ flags.InteropGenesisStateFlag, flags.InteropNumValidatorsFlag, flags.InteropGenesisTimeFlag, - flags.ArchiveEnableFlag, - flags.ArchiveValidatorSetChangesFlag, - flags.ArchiveBlocksFlag, - flags.ArchiveAttestationsFlag, flags.SlotsPerArchivedPoint, flags.EnableDebugRPCEndpoints, cmd.MinimalConfigFlag, diff --git a/beacon-chain/node/BUILD.bazel b/beacon-chain/node/BUILD.bazel index 470f7919a..a23864963 100644 --- a/beacon-chain/node/BUILD.bazel +++ b/beacon-chain/node/BUILD.bazel @@ -7,7 +7,6 @@ go_library( importpath = "github.com/prysmaticlabs/prysm/beacon-chain/node", visibility = ["//beacon-chain:__subpackages__"], deps = [ - "//beacon-chain/archiver:go_default_library", "//beacon-chain/blockchain:go_default_library", "//beacon-chain/cache:go_default_library", "//beacon-chain/cache/depositcache:go_default_library", diff --git a/beacon-chain/node/node.go b/beacon-chain/node/node.go index 297caac00..ddf01503d 100644 --- a/beacon-chain/node/node.go +++ b/beacon-chain/node/node.go @@ -17,7 +17,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/pkg/errors" - "github.com/prysmaticlabs/prysm/beacon-chain/archiver" "github.com/prysmaticlabs/prysm/beacon-chain/blockchain" "github.com/prysmaticlabs/prysm/beacon-chain/cache" "github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache" @@ -186,10 +185,6 @@ func NewBeaconNode(cliCtx *cli.Context) (*BeaconNode, error) { return nil, err } - if err := beacon.registerArchiverService(); err != nil { - return nil, err - } - if !cliCtx.Bool(cmd.DisableMonitoringFlag.Name) { if err := beacon.registerPrometheusService(); err != nil { return nil, err @@ -676,20 +671,3 @@ func (b *BeaconNode) registerInteropServices() error { } return nil } - -func (b *BeaconNode) registerArchiverService() error { - if !flags.Get().EnableArchive { - return nil - } - var chainService *blockchain.Service - if err := b.services.FetchService(&chainService); err != nil { - return err - } - svc := archiver.NewArchiverService(b.ctx, &archiver.Config{ - BeaconDB: b.db, - HeadFetcher: chainService, - ParticipationFetcher: chainService, - StateNotifier: b, - }) - return b.services.RegisterService(svc) -} diff --git a/beacon-chain/usage.go b/beacon-chain/usage.go index 0e5b31b16..e139369ea 100644 --- a/beacon-chain/usage.go +++ b/beacon-chain/usage.go @@ -144,15 +144,6 @@ var appHelpFlagGroups = []flagGroup{ flags.InteropNumValidatorsFlag, }, }, - { - Name: "archive", - Flags: []cli.Flag{ - flags.ArchiveEnableFlag, - flags.ArchiveValidatorSetChangesFlag, - flags.ArchiveBlocksFlag, - flags.ArchiveAttestationsFlag, - }, - }, } func init() { diff --git a/shared/featureconfig/flags.go b/shared/featureconfig/flags.go index 61bf77737..86fa3bbe0 100644 --- a/shared/featureconfig/flags.go +++ b/shared/featureconfig/flags.go @@ -440,6 +440,26 @@ var ( Usage: deprecatedUsage, Hidden: true, } + deprecatedArchival = &cli.BoolFlag{ + Name: "archive", + Usage: deprecatedUsage, + Hidden: true, + } + deprecatedArchiveValiatorSetChanges = &cli.BoolFlag{ + Name: "archive-validator-set-changes", + Usage: deprecatedUsage, + Hidden: true, + } + deprecatedArchiveBlocks = &cli.BoolFlag{ + Name: "archive-blocks", + Usage: deprecatedUsage, + Hidden: true, + } + deprecatedArchiveAttestation = &cli.BoolFlag{ + Name: "archive-attestations", + Usage: deprecatedUsage, + Hidden: true, + } ) var deprecatedFlags = []cli.Flag{ @@ -498,6 +518,10 @@ var deprecatedFlags = []cli.Flag{ deprecatedDisableFieldTrie, deprecateddisableInitSyncBatchSaveBlocks, deprecatedEnableNoise, + deprecatedArchival, + deprecatedArchiveBlocks, + deprecatedArchiveValiatorSetChanges, + deprecatedArchiveAttestation, } // ValidatorFlags contains a list of all the feature flags that apply to the validator client.