diff --git a/cmd/integration/commands/stages.go b/cmd/integration/commands/stages.go index 29e1400ae8f86aecebf56b4c2098701bb8e4131c..d40352406cffaf60547b8ec43f6e3612d1f9757b 100644 --- a/cmd/integration/commands/stages.go +++ b/cmd/integration/commands/stages.go @@ -25,6 +25,7 @@ import ( "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/eth/ethconfig" + "github.com/ledgerwatch/erigon/eth/ethconsensusconfig" "github.com/ledgerwatch/erigon/eth/integrity" "github.com/ledgerwatch/erigon/eth/stagedsync" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" @@ -1154,15 +1155,15 @@ func newSync(ctx context.Context, db kv.RwDB, miningConfig *params.MiningConfig) if chainConfig.Clique != nil { c := params.CliqueSnapshot c.DBPath = filepath.Join(datadir, "clique", "db") - engine = ethconfig.CreateConsensusEngine(chainConfig, logger, c, config.Miner.Notify, config.Miner.Noverify, "", true, datadir) + engine = ethconsensusconfig.CreateConsensusEngine(chainConfig, logger, c, config.Miner.Notify, config.Miner.Noverify, "", true, datadir) } else if chainConfig.Aura != nil { - engine = ethconfig.CreateConsensusEngine(chainConfig, logger, ¶ms.AuRaConfig{DBPath: filepath.Join(datadir, "aura")}, config.Miner.Notify, config.Miner.Noverify, "", true, datadir) + engine = ethconsensusconfig.CreateConsensusEngine(chainConfig, logger, ¶ms.AuRaConfig{DBPath: filepath.Join(datadir, "aura")}, config.Miner.Notify, config.Miner.Noverify, "", true, datadir) } else if chainConfig.Parlia != nil { consensusConfig := ¶ms.ParliaConfig{DBPath: filepath.Join(datadir, "parlia")} - engine = ethconfig.CreateConsensusEngine(chainConfig, logger, consensusConfig, config.Miner.Notify, config.Miner.Noverify, "", true, datadir) + engine = ethconsensusconfig.CreateConsensusEngine(chainConfig, logger, consensusConfig, config.Miner.Notify, config.Miner.Noverify, "", true, datadir) } else if chainConfig.Bor != nil { consensusConfig := &config.Bor - engine = ethconfig.CreateConsensusEngine(chainConfig, logger, consensusConfig, config.Miner.Notify, config.Miner.Noverify, HeimdallURL, false, datadir) + engine = ethconsensusconfig.CreateConsensusEngine(chainConfig, logger, consensusConfig, config.Miner.Notify, config.Miner.Noverify, HeimdallURL, false, datadir) } else { //ethash engine = ethash.NewFaker() } diff --git a/cmd/state/commands/erigon2.go b/cmd/state/commands/erigon2.go index c03547166fba53ebb6a6311303125b23f77affaf..610ca52f677cb41ca727c420e2f7e1c2a56d40b7 100644 --- a/cmd/state/commands/erigon2.go +++ b/cmd/state/commands/erigon2.go @@ -21,6 +21,7 @@ import ( "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/mdbx" kv2 "github.com/ledgerwatch/erigon-lib/kv/mdbx" + "github.com/ledgerwatch/erigon/eth/ethconsensusconfig" "github.com/ledgerwatch/log/v3" "github.com/spf13/cobra" @@ -604,16 +605,16 @@ func initConsensusEngine(chainConfig *params.ChainConfig, logger log.Logger) (en case chainConfig.Clique != nil: c := params.CliqueSnapshot c.DBPath = filepath.Join(datadir, "clique", "db") - engine = ethconfig.CreateConsensusEngine(chainConfig, logger, c, config.Miner.Notify, config.Miner.Noverify, "", true, datadir) + engine = ethconsensusconfig.CreateConsensusEngine(chainConfig, logger, c, config.Miner.Notify, config.Miner.Noverify, "", true, datadir) case chainConfig.Aura != nil: consensusConfig := ¶ms.AuRaConfig{DBPath: filepath.Join(datadir, "aura")} - engine = ethconfig.CreateConsensusEngine(chainConfig, logger, consensusConfig, config.Miner.Notify, config.Miner.Noverify, "", true, datadir) + engine = ethconsensusconfig.CreateConsensusEngine(chainConfig, logger, consensusConfig, config.Miner.Notify, config.Miner.Noverify, "", true, datadir) case chainConfig.Parlia != nil: consensusConfig := ¶ms.ParliaConfig{DBPath: filepath.Join(datadir, "parlia")} - engine = ethconfig.CreateConsensusEngine(chainConfig, logger, consensusConfig, config.Miner.Notify, config.Miner.Noverify, "", true, datadir) + engine = ethconsensusconfig.CreateConsensusEngine(chainConfig, logger, consensusConfig, config.Miner.Notify, config.Miner.Noverify, "", true, datadir) case chainConfig.Bor != nil: consensusConfig := &config.Bor - engine = ethconfig.CreateConsensusEngine(chainConfig, logger, consensusConfig, config.Miner.Notify, config.Miner.Noverify, "http://localhost:1317", false, datadir) + engine = ethconsensusconfig.CreateConsensusEngine(chainConfig, logger, consensusConfig, config.Miner.Notify, config.Miner.Noverify, "http://localhost:1317", false, datadir) default: //ethash engine = ethash.NewFaker() } diff --git a/eth/backend.go b/eth/backend.go index 4f6e5628626aca9e07a73c6a2449083aa17641b7..da5a1fd4f7fff24c8d714bada1ae299427932ed9 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -29,6 +29,7 @@ import ( "sync" "time" + "github.com/ledgerwatch/erigon/eth/ethconsensusconfig" "google.golang.org/protobuf/types/known/emptypb" "github.com/holiman/uint256" @@ -232,7 +233,7 @@ func New(stack *node.Node, config *ethconfig.Config, txpoolCfg txpool2.Config, l consensusConfig = &config.Ethash } - backend.engine = ethconfig.CreateConsensusEngine(chainConfig, logger, consensusConfig, config.Miner.Notify, config.Miner.Noverify, config.HeimdallURL, config.WithoutHeimdall, stack.DataDir()) + backend.engine = ethconsensusconfig.CreateConsensusEngine(chainConfig, logger, consensusConfig, config.Miner.Notify, config.Miner.Noverify, config.HeimdallURL, config.WithoutHeimdall, stack.DataDir()) log.Info("Initialising Ethereum protocol", "network", config.NetworkID) diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go index 7885e9e9da34da3e257d3c1427b688e6612057f2..2bd72e1fbb21c4ca1e5bad6743ab7a88fb0b6bca 100644 --- a/eth/ethconfig/config.go +++ b/eth/ethconfig/config.go @@ -27,25 +27,15 @@ import ( "time" "github.com/c2h5oh/datasize" - "github.com/davecgh/go-spew/spew" "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon/cmd/downloader/downloader/torrentcfg" "github.com/ledgerwatch/erigon/common" - "github.com/ledgerwatch/erigon/consensus" - "github.com/ledgerwatch/erigon/consensus/aura" - "github.com/ledgerwatch/erigon/consensus/aura/consensusconfig" - "github.com/ledgerwatch/erigon/consensus/bor" - "github.com/ledgerwatch/erigon/consensus/clique" - "github.com/ledgerwatch/erigon/consensus/db" "github.com/ledgerwatch/erigon/consensus/ethash" - "github.com/ledgerwatch/erigon/consensus/parlia" - "github.com/ledgerwatch/erigon/consensus/serenity" "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/eth/gasprice" "github.com/ledgerwatch/erigon/ethdb/prune" "github.com/ledgerwatch/erigon/params" "github.com/ledgerwatch/erigon/params/networkname" - "github.com/ledgerwatch/log/v3" ) // FullNodeGPO contains default gasprice oracle settings for full node. @@ -228,65 +218,6 @@ type Config struct { Ethstats string } -func CreateConsensusEngine(chainConfig *params.ChainConfig, logger log.Logger, config interface{}, notify []string, noverify bool, HeimdallURL string, WithoutHeimdall bool, datadir string) consensus.Engine { - var eng consensus.Engine - - switch consensusCfg := config.(type) { - case *ethash.Config: - switch consensusCfg.PowMode { - case ethash.ModeFake: - log.Warn("Ethash used in fake mode") - eng = ethash.NewFaker() - case ethash.ModeTest: - log.Warn("Ethash used in test mode") - eng = ethash.NewTester(nil, noverify) - case ethash.ModeShared: - log.Warn("Ethash used in shared mode") - eng = ethash.NewShared() - default: - eng = ethash.New(ethash.Config{ - CachesInMem: consensusCfg.CachesInMem, - CachesLockMmap: consensusCfg.CachesLockMmap, - DatasetDir: consensusCfg.DatasetDir, - DatasetsInMem: consensusCfg.DatasetsInMem, - DatasetsOnDisk: consensusCfg.DatasetsOnDisk, - DatasetsLockMmap: consensusCfg.DatasetsLockMmap, - }, notify, noverify) - } - case *params.ConsensusSnapshotConfig: - if chainConfig.Clique != nil { - eng = clique.New(chainConfig, consensusCfg, db.OpenDatabase(consensusCfg.DBPath, logger, consensusCfg.InMemory)) - } - case *params.AuRaConfig: - if chainConfig.Aura != nil { - var err error - eng, err = aura.NewAuRa(chainConfig.Aura, db.OpenDatabase(consensusCfg.DBPath, logger, consensusCfg.InMemory), chainConfig.Aura.Etherbase, consensusconfig.GetConfigByChain(chainConfig.ChainName)) - if err != nil { - panic(err) - } - } - case *params.ParliaConfig: - if chainConfig.Parlia != nil { - eng = parlia.New(chainConfig, db.OpenDatabase(consensusCfg.DBPath, logger, consensusCfg.InMemory)) - } - case *params.BorConfig: - if chainConfig.Bor != nil { - borDbPath := filepath.Join(datadir, "bor") // bor consensus path: datadir/bor - eng = bor.New(chainConfig, db.OpenDatabase(borDbPath, logger, false), HeimdallURL, WithoutHeimdall) - } - } - - if eng == nil { - panic("unknown config" + spew.Sdump(config)) - } - - if chainConfig.TerminalTotalDifficulty == nil { - return eng - } else { - return serenity.New(eng) // the Merge - } -} - type SyncMode string const ( diff --git a/eth/ethconsensusconfig/config.go b/eth/ethconsensusconfig/config.go new file mode 100644 index 0000000000000000000000000000000000000000..aa9a18fd6621e41fcf9009766dcfa5ca51e70a93 --- /dev/null +++ b/eth/ethconsensusconfig/config.go @@ -0,0 +1,77 @@ +package ethconsensusconfig + +import ( + "path/filepath" + + "github.com/davecgh/go-spew/spew" + "github.com/ledgerwatch/erigon/consensus" + "github.com/ledgerwatch/erigon/consensus/aura" + "github.com/ledgerwatch/erigon/consensus/aura/consensusconfig" + "github.com/ledgerwatch/erigon/consensus/bor" + "github.com/ledgerwatch/erigon/consensus/clique" + "github.com/ledgerwatch/erigon/consensus/db" + "github.com/ledgerwatch/erigon/consensus/ethash" + "github.com/ledgerwatch/erigon/consensus/parlia" + "github.com/ledgerwatch/erigon/consensus/serenity" + "github.com/ledgerwatch/erigon/params" + "github.com/ledgerwatch/log/v3" +) + +func CreateConsensusEngine(chainConfig *params.ChainConfig, logger log.Logger, config interface{}, notify []string, noverify bool, HeimdallURL string, WithoutHeimdall bool, datadir string) consensus.Engine { + var eng consensus.Engine + + switch consensusCfg := config.(type) { + case *ethash.Config: + switch consensusCfg.PowMode { + case ethash.ModeFake: + log.Warn("Ethash used in fake mode") + eng = ethash.NewFaker() + case ethash.ModeTest: + log.Warn("Ethash used in test mode") + eng = ethash.NewTester(nil, noverify) + case ethash.ModeShared: + log.Warn("Ethash used in shared mode") + eng = ethash.NewShared() + default: + eng = ethash.New(ethash.Config{ + CachesInMem: consensusCfg.CachesInMem, + CachesLockMmap: consensusCfg.CachesLockMmap, + DatasetDir: consensusCfg.DatasetDir, + DatasetsInMem: consensusCfg.DatasetsInMem, + DatasetsOnDisk: consensusCfg.DatasetsOnDisk, + DatasetsLockMmap: consensusCfg.DatasetsLockMmap, + }, notify, noverify) + } + case *params.ConsensusSnapshotConfig: + if chainConfig.Clique != nil { + eng = clique.New(chainConfig, consensusCfg, db.OpenDatabase(consensusCfg.DBPath, logger, consensusCfg.InMemory)) + } + case *params.AuRaConfig: + if chainConfig.Aura != nil { + var err error + eng, err = aura.NewAuRa(chainConfig.Aura, db.OpenDatabase(consensusCfg.DBPath, logger, consensusCfg.InMemory), chainConfig.Aura.Etherbase, consensusconfig.GetConfigByChain(chainConfig.ChainName)) + if err != nil { + panic(err) + } + } + case *params.ParliaConfig: + if chainConfig.Parlia != nil { + eng = parlia.New(chainConfig, db.OpenDatabase(consensusCfg.DBPath, logger, consensusCfg.InMemory)) + } + case *params.BorConfig: + if chainConfig.Bor != nil { + borDbPath := filepath.Join(datadir, "bor") // bor consensus path: datadir/bor + eng = bor.New(chainConfig, db.OpenDatabase(borDbPath, logger, false), HeimdallURL, WithoutHeimdall) + } + } + + if eng == nil { + panic("unknown config" + spew.Sdump(config)) + } + + if chainConfig.TerminalTotalDifficulty == nil { + return eng + } else { + return serenity.New(eng) // the Merge + } +}