From 580161d1199245b86f8054d67e35ec71be38e20e Mon Sep 17 00:00:00 2001 From: pk910 Date: Fri, 16 Aug 2024 15:40:37 +0200 Subject: [PATCH] load default validator names based on network name from specs --- services/chainservice.go | 15 ++++++++------- services/validatornames.go | 36 +++++++++++++++++++++++++++++++----- types/config.go | 1 - utils/config.go | 10 ---------- 4 files changed, 39 insertions(+), 23 deletions(-) diff --git a/services/chainservice.go b/services/chainservice.go index c77da1d..fd2ef4f 100644 --- a/services/chainservice.go +++ b/services/chainservice.go @@ -103,8 +103,7 @@ func StartChainService(ctx context.Context, logger logrus.FieldLogger) error { } // init validator names & load inventory - validatorNames := NewValidatorNames(beaconIndexer) - validatorNamesLoading := validatorNames.LoadValidatorNames() + validatorNames := NewValidatorNames(beaconIndexer, consensusPool.GetChainState()) // reset sync state if configured if utils.Config.Indexer.ResyncFromEpoch != nil { @@ -120,8 +119,7 @@ func StartChainService(ctx context.Context, logger logrus.FieldLogger) error { logger.Warnf("Reset explorer synchronization status to epoch %v as configured! Please remove this setting again.", *utils.Config.Indexer.ResyncFromEpoch) } - // await validator names & beacon pool readiness - <-validatorNamesLoading + // await beacon pool readiness lastLog := time.Now() for { specs := consensusPool.GetChainState().GetSpecs() @@ -136,15 +134,18 @@ func StartChainService(ctx context.Context, logger logrus.FieldLogger) error { time.Sleep(1 * time.Second) } - // start chain indexer - beaconIndexer.StartIndexer() - // start validator names updater + validatorNamesLoading := validatorNames.LoadValidatorNames() + <-validatorNamesLoading + go func() { validatorNames.UpdateDb() validatorNames.StartUpdater() }() + // start chain indexer + beaconIndexer.StartIndexer() + // add execution indexers execindexer.NewDepositIndexer(executionIndexerCtx) diff --git a/services/validatornames.go b/services/validatornames.go index 2aa510b..ada7b1f 100644 --- a/services/validatornames.go +++ b/services/validatornames.go @@ -15,6 +15,7 @@ import ( v1 "github.com/attestantio/go-eth2-client/api/v1" "github.com/attestantio/go-eth2-client/spec/phase0" "github.com/ethereum/go-ethereum/common" + "github.com/ethpandaops/dora/clients/consensus" "github.com/ethpandaops/dora/config" "github.com/ethpandaops/dora/db" "github.com/ethpandaops/dora/dbtypes" @@ -30,6 +31,7 @@ var logger_vn = logrus.StandardLogger().WithField("module", "validator_names") type ValidatorNames struct { beaconIndexer *beacon.Indexer + chainState *consensus.ChainState loadingMutex sync.Mutex loading chan bool lastResolvedMapUpdate time.Time @@ -47,9 +49,10 @@ type validatorNameEntry struct { name string } -func NewValidatorNames(beaconIndexer *beacon.Indexer) *ValidatorNames { +func NewValidatorNames(beaconIndexer *beacon.Indexer, chainState *consensus.ChainState) *ValidatorNames { validatorNames := &ValidatorNames{ beaconIndexer: beaconIndexer, + chainState: chainState, } return validatorNames } @@ -111,6 +114,24 @@ func (vn *ValidatorNames) runUpdater() error { return nil } +func (vn *ValidatorNames) getDefaultValidatorNames() string { + specs := vn.chainState.GetSpecs() + chainName := "" + if specs != nil { + chainName = specs.ConfigName + } + + // default validator names + switch chainName { + case "sepolia": + return "~internal/sepolia.names.yml" + case "holesky": + return "~internal/holesky.names.yml" + } + + return "" +} + func (vn *ValidatorNames) resolveNames() (bool, error) { validatorSet := vn.beaconIndexer.GetCanonicalValidatorSet(nil) if validatorSet == nil { @@ -277,14 +298,19 @@ func (vn *ValidatorNames) LoadValidatorNames() chan bool { vn.namesByDepositTarget = make(map[common.Address]*validatorNameEntry) vn.namesMutex.Unlock() + validatorNamesYaml := utils.Config.Frontend.ValidatorNamesYaml + if validatorNamesYaml == "" { + validatorNamesYaml = vn.getDefaultValidatorNames() + } + // load names - if strings.HasPrefix(utils.Config.Frontend.ValidatorNamesYaml, "~internal/") { - err := vn.loadFromInternalYaml(utils.Config.Frontend.ValidatorNamesYaml[10:]) + if strings.HasPrefix(validatorNamesYaml, "~internal/") { + err := vn.loadFromInternalYaml(validatorNamesYaml[10:]) if err != nil { logger_vn.WithError(err).Errorf("error while loading validator names from internal yaml") } - } else if utils.Config.Frontend.ValidatorNamesYaml != "" { - err := vn.loadFromYaml(utils.Config.Frontend.ValidatorNamesYaml) + } else if validatorNamesYaml != "" { + err := vn.loadFromYaml(validatorNamesYaml) if err != nil { logger_vn.WithError(err).Errorf("error while loading validator names from yaml") } diff --git a/types/config.go b/types/config.go index b5a61fc..ffcb7d9 100644 --- a/types/config.go +++ b/types/config.go @@ -18,7 +18,6 @@ type Config struct { } `yaml:"server"` Chain struct { - Name string `yaml:"name" envconfig:"CHAIN_NAME"` DisplayName string `yaml:"displayName" envconfig:"CHAIN_DISPLAY_NAME"` // optional features diff --git a/utils/config.go b/utils/config.go index 9cd7ac3..15629a9 100644 --- a/utils/config.go +++ b/utils/config.go @@ -24,16 +24,6 @@ func ReadConfig(cfg *types.Config, path string) error { readConfigEnv(cfg) - // default validator names - if cfg.Frontend.ValidatorNamesYaml == "" && cfg.Frontend.ValidatorNamesInventory == "" { - switch cfg.Chain.Name { - case "sepolia": - cfg.Frontend.ValidatorNamesYaml = "~internal/sepolia.names.yml" - case "holesky": - cfg.Frontend.ValidatorNamesYaml = "~internal/holesky.names.yml" - } - } - // endpoints if cfg.BeaconApi.Endpoints == nil && cfg.BeaconApi.Endpoint != "" { cfg.BeaconApi.Endpoints = []types.EndpointConfig{