From 0d190ff9e98b3788a7f208a5e58b0da829df5921 Mon Sep 17 00:00:00 2001 From: Mark Holt <135143369+mh0lt@users.noreply.github.com> Date: Tue, 10 Oct 2023 15:26:02 +0100 Subject: [PATCH] Bor rpc config fix (#8413) This is an additional fix for BorRo to add bor config in the constructor - otherwise code which accesses chain config will panic. --- cmd/rpcdaemon/cli/config.go | 4 ++-- consensus/bor/bor.go | 12 +++++++++++- consensus/bor/finality/whitelist.go | 6 +++--- eth/stagedsync/stage_mining_finish.go | 2 +- metrics/exp.go | 4 ++-- turbo/jsonrpc/bor_snapshot.go | 4 ++-- 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/cmd/rpcdaemon/cli/config.go b/cmd/rpcdaemon/cli/config.go index b96952ff55f..74ff64b6f23 100644 --- a/cmd/rpcdaemon/cli/config.go +++ b/cmd/rpcdaemon/cli/config.go @@ -483,7 +483,7 @@ func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, } // Skip the compatibility check, until we have a schema in erigon-lib - engine = bor.NewRo(borKv, blockReader, + engine = bor.NewRo(cc, borKv, blockReader, span.NewChainSpanner(contract.ValidatorSet(), cc, true, logger), contract.NewGenesisContractsClient(cc, cc.Bor.ValidatorContract, cc.Bor.StateReceiverContract, logger), logger) @@ -827,7 +827,7 @@ func (e *remoteConsensusEngine) init(db kv.RoDB, blockReader services.FullBlockR return false } - e.engine = bor.NewRo(borKv, blockReader, + e.engine = bor.NewRo(cc, borKv, blockReader, span.NewChainSpanner(contract.ValidatorSet(), cc, true, logger), contract.NewGenesisContractsClient(cc, cc.Bor.ValidatorContract, cc.Bor.StateReceiverContract, logger), logger) } else { diff --git a/consensus/bor/bor.go b/consensus/bor/bor.go index b86a4cea8d6..46a2f90b913 100644 --- a/consensus/bor/bor.go +++ b/consensus/bor/bor.go @@ -442,12 +442,22 @@ func (w rwWrapper) BeginRwNosync(ctx context.Context) (kv.RwTx, error) { } // This is used by the rpcdaemon which needs read only access to the provided data services -func NewRo(db kv.RoDB, blockReader services.FullBlockReader, spanner Spanner, +func NewRo(chainConfig *chain.Config, db kv.RoDB, blockReader services.FullBlockReader, spanner Spanner, genesisContracts GenesisContract, logger log.Logger) *Bor { + // get bor config + borConfig := chainConfig.Bor + + // Set any missing consensus parameters to their defaults + if borConfig != nil && borConfig.CalculateSprint(0) == 0 { + borConfig.Sprint = defaultSprintLength + } + recents, _ := lru.NewARC[libcommon.Hash, *Snapshot](inmemorySnapshots) signatures, _ := lru.NewARC[libcommon.Hash, libcommon.Address](inmemorySignatures) return &Bor{ + chainConfig: chainConfig, + config: borConfig, DB: rwWrapper{db}, blockReader: blockReader, logger: logger, diff --git a/consensus/bor/finality/whitelist.go b/consensus/bor/finality/whitelist.go index 4ec51628b44..71d7f88ec07 100644 --- a/consensus/bor/finality/whitelist.go +++ b/consensus/bor/finality/whitelist.go @@ -109,7 +109,7 @@ func retryHeimdallHandler(fn heimdallHandler, config *config, tickerDuration tim } if config.heimdall == nil { - log.Error("bor engine not available") + config.logger.Error("bor engine not available") return } @@ -120,7 +120,7 @@ func retryHeimdallHandler(fn heimdallHandler, config *config, tickerDuration tim cancel() if err != nil { - log.Warn(fmt.Sprintf("unable to start the %s service - first run", fnName), "err", err) + config.logger.Warn(fmt.Sprintf("unable to start the %s service - first run", fnName), "err", err) } ticker := time.NewTicker(tickerDuration) @@ -142,7 +142,7 @@ func retryHeimdallHandler(fn heimdallHandler, config *config, tickerDuration tim cancel() if err != nil { - log.Warn(fmt.Sprintf("unable to handle %s", fnName), "err", err) + config.logger.Warn(fmt.Sprintf("unable to handle %s", fnName), "err", err) } case <-config.closeCh: return diff --git a/eth/stagedsync/stage_mining_finish.go b/eth/stagedsync/stage_mining_finish.go index 7c3f0a02f63..16d90e00667 100644 --- a/eth/stagedsync/stage_mining_finish.go +++ b/eth/stagedsync/stage_mining_finish.go @@ -93,7 +93,7 @@ func SpawnMiningFinishStage(s *StageState, tx kv.RwTx, cfg MiningFinishCfg, quit select { case cfg.sealCancel <- struct{}{}: default: - logger.Trace("None in-flight sealing task.") + logger.Trace("No in-flight sealing task.") } chain := ChainReader{Cfg: cfg.chainConfig, Db: tx, BlockReader: cfg.blockReader} if err := cfg.engine.Seal(chain, block, cfg.miningState.MiningResultCh, cfg.sealCancel); err != nil { diff --git a/metrics/exp.go b/metrics/exp.go index c4bb35ed24d..186c491ebf1 100644 --- a/metrics/exp.go +++ b/metrics/exp.go @@ -25,11 +25,11 @@ func Setup(address string, logger log.Logger) *http.ServeMux { go func() { if err := promServer.ListenAndServe(); err != nil { - log.Error("Failure in running Prometheus server", "err", err) + logger.Error("Failure in running Prometheus server", "err", err) } }() - log.Info("Enabling metrics export to prometheus", "path", fmt.Sprintf("http://%s/debug/metrics/prometheus", address)) + logger.Info("Enabling metrics export to prometheus", "path", fmt.Sprintf("http://%s/debug/metrics/prometheus", address)) return prometheusMux } diff --git a/turbo/jsonrpc/bor_snapshot.go b/turbo/jsonrpc/bor_snapshot.go index 791a5a93752..a6793ceeead 100644 --- a/turbo/jsonrpc/bor_snapshot.go +++ b/turbo/jsonrpc/bor_snapshot.go @@ -277,9 +277,9 @@ func (api *BorImpl) GetVoteOnHash(ctx context.Context, starBlockNr uint64, endBl return false, fmt.Errorf("hash mismatch: localChainHash %s, milestoneHash %s", localEndBlockHash, hash) } - bor, ok := api._engine.(*bor.Bor) + bor, err := api.bor() - if !ok { + if err != nil { return false, errors.New("bor engine not available") }