diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/BlockTreeTests.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/BlockTreeTests.cs index de7f0a7f2ec..f0729dff70a 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/BlockTreeTests.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/BlockTreeTests.cs @@ -20,6 +20,7 @@ using Nethermind.Merge.Plugin.Synchronization; using Nethermind.Serialization.Rlp; using Nethermind.Specs; +using Nethermind.Specs.ChainSpecStyle; using Nethermind.Specs.Forks; using Nethermind.Synchronization.Blocks; using Nethermind.Synchronization.Peers; @@ -76,7 +77,7 @@ public void Can_suggest_terminal_block_correctly() .WithSpecProvider(specProvider) .OfChainLength(10) .TestObject; - PoSSwitcher poSSwitcher = new(new MergeConfig(), new SyncConfig(), new MemDb(), tree, specProvider, LimboLogs.Instance); + PoSSwitcher poSSwitcher = new(new MergeConfig(), new SyncConfig(), new MemDb(), tree, specProvider, new ChainSpec(), LimboLogs.Instance); Block? block8 = tree.FindBlock(8, BlockTreeLookupOptions.None); Assert.False(block8!.IsTerminalBlock(specProvider)); @@ -95,7 +96,7 @@ public void Suggest_terminal_block_with_lower_number_and_lower_total_difficulty( .WithSpecProvider(specProvider) .OfChainLength(10) .TestObject; - PoSSwitcher poSSwitcher = new(new MergeConfig(), new SyncConfig(), new MemDb(), tree, specProvider, LimboLogs.Instance); + PoSSwitcher poSSwitcher = new(new MergeConfig(), new SyncConfig(), new MemDb(), tree, specProvider, new ChainSpec(), LimboLogs.Instance); Block? block7 = tree.FindBlock(7, BlockTreeLookupOptions.None); Block newTerminalBlock = Build.A.Block @@ -124,7 +125,7 @@ public void Cannot_change_best_suggested_to_terminal_block_after_merge_block() .OfChainLength(10) .TestObject; - PoSSwitcher poSSwitcher = new(new MergeConfig(), new SyncConfig(), new MemDb(), tree, specProvider, LimboLogs.Instance); + PoSSwitcher poSSwitcher = new(new MergeConfig(), new SyncConfig(), new MemDb(), tree, specProvider, new ChainSpec(), LimboLogs.Instance); Block? block8 = tree.FindBlock(8, BlockTreeLookupOptions.None); Assert.False(block8!.Header.IsTerminalBlock(specProvider)); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 982c5a1741b..25b5bfe2f0f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -20,6 +20,7 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Core.Test.Blockchain; +using Nethermind.Core.Test.Builders; using Nethermind.Core.Timers; using Nethermind.Crypto; using Nethermind.Db; @@ -33,6 +34,7 @@ using Nethermind.Merge.Plugin.Handlers; using Nethermind.Merge.Plugin.Synchronization; using Nethermind.Specs; +using Nethermind.Specs.ChainSpecStyle; using Nethermind.Specs.Forks; using Nethermind.State; using Nethermind.Synchronization.ParallelSync; @@ -236,7 +238,7 @@ protected override IBlockProcessor CreateBlockProcessor() protected IBlockValidator CreateBlockValidator() { IBlockCacheService blockCacheService = new BlockCacheService(); - PoSSwitcher = new PoSSwitcher(MergeConfig, SyncConfig.Default, new MemDb(), BlockTree, SpecProvider, LogManager); + PoSSwitcher = new PoSSwitcher(MergeConfig, SyncConfig.Default, new MemDb(), BlockTree, SpecProvider, new ChainSpec() { Genesis = Core.Test.Builders.Build.A.Block.WithDifficulty(0).TestObject }, LogManager); SealValidator = new MergeSealValidator(PoSSwitcher, Always.Valid); HeaderValidator preMergeHeaderValidator = new HeaderValidator(BlockTree, SealValidator, SpecProvider, LogManager); HeaderValidator = new MergeHeaderValidator(PoSSwitcher, preMergeHeaderValidator, BlockTree, SpecProvider, SealValidator, LogManager); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/MergeRewardCalculatorTests.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/MergeRewardCalculatorTests.cs index 8175a677e5f..3c49333bdaa 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/MergeRewardCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/MergeRewardCalculatorTests.cs @@ -10,6 +10,7 @@ using Nethermind.Logging; using Nethermind.Merge.Plugin.Handlers; using Nethermind.Specs; +using Nethermind.Specs.ChainSpecStyle; using Nethermind.Specs.Forks; using NSubstitute; using NUnit.Framework; @@ -156,7 +157,7 @@ private static PoSSwitcher CreatePosSwitcher() specProvider.TerminalTotalDifficulty = 2; MergeConfig? mergeConfig = new() { }; IBlockCacheService blockCacheService = new BlockCacheService(); - return new PoSSwitcher(mergeConfig, new SyncConfig(), db, blockTree, specProvider, LimboLogs.Instance); + return new PoSSwitcher(mergeConfig, new SyncConfig(), db, blockTree, specProvider, new ChainSpec(), LimboLogs.Instance); } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/PoSSwitcherTests.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/PoSSwitcherTests.cs index 9f2992c46ed..1c1b5838b21 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/PoSSwitcherTests.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/PoSSwitcherTests.cs @@ -30,7 +30,7 @@ public void Initial_TTD_should_be_null() { UInt256? expectedTtd = null; IBlockTree blockTree = Substitute.For(); - PoSSwitcher poSSwitcher = new(new MergeConfig(), new SyncConfig(), new MemDb(), blockTree, TestSpecProvider.Instance, LimboLogs.Instance); + PoSSwitcher poSSwitcher = new(new MergeConfig(), new SyncConfig(), new MemDb(), blockTree, TestSpecProvider.Instance, new ChainSpec(), LimboLogs.Instance); Assert.That(poSSwitcher.TerminalTotalDifficulty, Is.EqualTo(expectedTtd)); } @@ -45,7 +45,7 @@ public void Read_TTD_from_chainspec_if_not_specified_in_merge_config() ChainSpec chainSpec = loader.Load(File.ReadAllText(path)); ChainSpecBasedSpecProvider specProvider = new(chainSpec); - PoSSwitcher poSSwitcher = new(new MergeConfig(), new SyncConfig(), new MemDb(), blockTree, specProvider, LimboLogs.Instance); + PoSSwitcher poSSwitcher = new(new MergeConfig(), new SyncConfig(), new MemDb(), blockTree, specProvider, new ChainSpec(), LimboLogs.Instance); Assert.That(poSSwitcher.TerminalTotalDifficulty, Is.EqualTo(expectedTtd)); Assert.That(specProvider.MergeBlockNumber?.BlockNumber, Is.EqualTo(101)); @@ -93,7 +93,7 @@ public void Override_TTD_and_number_from_merge_config() IBlockTree blockTree = Substitute.For(); TestSpecProvider specProvider = new(London.Instance); specProvider.UpdateMergeTransitionInfo(100, 20); - PoSSwitcher poSSwitcher = new(new MergeConfig() { TerminalTotalDifficulty = "340", TerminalBlockNumber = 2000 }, new SyncConfig(), new MemDb(), blockTree, specProvider, LimboLogs.Instance); + PoSSwitcher poSSwitcher = new(new MergeConfig() { TerminalTotalDifficulty = "340", TerminalBlockNumber = 2000 }, new SyncConfig(), new MemDb(), blockTree, specProvider, new ChainSpec(), LimboLogs.Instance); Assert.That(poSSwitcher.TerminalTotalDifficulty, Is.EqualTo(expectedTtd)); Assert.That(specProvider.MergeBlockNumber?.BlockNumber, Is.EqualTo(2001)); @@ -106,7 +106,7 @@ public void Can_update_merge_transition_info() IBlockTree blockTree = Substitute.For(); TestSpecProvider specProvider = new(London.Instance); specProvider.UpdateMergeTransitionInfo(2001, expectedTtd); - PoSSwitcher poSSwitcher = new(new MergeConfig() { }, new SyncConfig(), new MemDb(), blockTree, specProvider, LimboLogs.Instance); + PoSSwitcher poSSwitcher = new(new MergeConfig() { }, new SyncConfig(), new MemDb(), blockTree, specProvider, new ChainSpec(), LimboLogs.Instance); Assert.That(poSSwitcher.TerminalTotalDifficulty, Is.EqualTo(expectedTtd)); Assert.That(specProvider.MergeBlockNumber?.BlockNumber, Is.EqualTo(2001)); @@ -254,7 +254,7 @@ private void AssertFinalTotalDifficulty(long ttd, long genesisDifficulty, long? SyncConfig syncConfig = new(); if (pivotTotalDifficulty != null) syncConfig = new SyncConfig() { PivotTotalDifficulty = $"{(UInt256)pivotTotalDifficulty}" }; - PoSSwitcher poSSwitcher = new PoSSwitcher(new MergeConfig(), syncConfig, new MemDb(), blockTree, specProvider, LimboLogs.Instance); + PoSSwitcher poSSwitcher = new PoSSwitcher(new MergeConfig(), syncConfig, new MemDb(), blockTree, specProvider, new ChainSpec() { Genesis = genesisBlock }, LimboLogs.Instance); if (expectedFinalTotalDifficulty != null) poSSwitcher.FinalTotalDifficulty.Should().Be((UInt256)expectedFinalTotalDifficulty); else @@ -266,7 +266,7 @@ private static PoSSwitcher CreatePosSwitcher(IBlockTree blockTree, IDb? db = nul { db ??= new MemDb(); MergeConfig? mergeConfig = new() { }; - return new PoSSwitcher(mergeConfig, new SyncConfig(), db, blockTree, specProvider ?? MainnetSpecProvider.Instance, LimboLogs.Instance); + return new PoSSwitcher(mergeConfig, new SyncConfig(), db, blockTree, specProvider ?? MainnetSpecProvider.Instance, new ChainSpec(), LimboLogs.Instance); } } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/Synchronization/BeaconHeadersSyncTests.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/Synchronization/BeaconHeadersSyncTests.cs index 8006941d498..1d9bdcbd1ae 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/Synchronization/BeaconHeadersSyncTests.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/Synchronization/BeaconHeadersSyncTests.cs @@ -18,6 +18,7 @@ using Nethermind.Merge.Plugin.InvalidChainTracker; using Nethermind.Merge.Plugin.Synchronization; using Nethermind.Specs; +using Nethermind.Specs.ChainSpecStyle; using Nethermind.State.Repositories; using Nethermind.Synchronization; using Nethermind.Synchronization.FastBlocks; @@ -71,7 +72,7 @@ public IBeaconPivot BeaconPivot private PoSSwitcher? _poSSwitcher; public PoSSwitcher PoSSwitcher => _poSSwitcher ??= new(MergeConfig, SyncConfig, MetadataDb, BlockTree, - MainnetSpecProvider.Instance, LimboLogs.Instance); + MainnetSpecProvider.Instance, new ChainSpec(), LimboLogs.Instance); private IInvalidChainTracker? _invalidChainTracker; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs index 2213acad4e9..eebb8fc2b17 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs @@ -92,6 +92,7 @@ public virtual Task Init(INethermindApi nethermindApi) _api.DbProvider.GetDb(DbNames.Metadata), _api.BlockTree, _api.SpecProvider, + _api.ChainSpec, _api.LogManager); _invalidChainTracker = new InvalidChainTracker.InvalidChainTracker( _poSSwitcher, diff --git a/src/Nethermind/Nethermind.Merge.Plugin/PoSSwitcher.cs b/src/Nethermind/Nethermind.Merge.Plugin/PoSSwitcher.cs index fe860873b6c..632d4716a8f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/PoSSwitcher.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/PoSSwitcher.cs @@ -12,6 +12,7 @@ using Nethermind.Db; using Nethermind.Logging; using Nethermind.Serialization.Rlp; +using Nethermind.Specs.ChainSpecStyle; namespace Nethermind.Merge.Plugin { @@ -39,6 +40,7 @@ public class PoSSwitcher : IPoSSwitcher private readonly IDb _metadataDb; private readonly IBlockTree _blockTree; private readonly ISpecProvider _specProvider; + private readonly ChainSpec _chainSpec; private readonly ILogger _logger; private Hash256? _terminalBlockHash; @@ -55,6 +57,7 @@ public PoSSwitcher( IDb metadataDb, IBlockTree blockTree, ISpecProvider specProvider, + ChainSpec chainSpec, ILogManager logManager) { _mergeConfig = mergeConfig; @@ -62,6 +65,7 @@ public PoSSwitcher( _metadataDb = metadataDb; _blockTree = blockTree; _specProvider = specProvider; + _chainSpec = chainSpec; _logger = logManager.GetClassLogger(); Initialize(); @@ -98,7 +102,9 @@ private void LoadFinalTotalDifficulty() } else { - UInt256 genesisDifficulty = _blockTree.Genesis?.Difficulty ?? 0; + if (_chainSpec?.Genesis == null) return; + + UInt256 genesisDifficulty = _chainSpec.Genesis.Difficulty; if (genesisDifficulty >= TerminalTotalDifficulty) // networks with the merge in genesis { _finalTotalDifficulty = genesisDifficulty; diff --git a/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.Merge.cs b/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.Merge.cs index 2800d2910bd..10ae29c0c92 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.Merge.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.Merge.cs @@ -20,6 +20,7 @@ using Nethermind.Merge.Plugin.Synchronization; using Nethermind.Merge.Plugin.Test; using Nethermind.Specs; +using Nethermind.Specs.ChainSpecStyle; using Nethermind.Stats; using Nethermind.Stats.Model; using Nethermind.Synchronization.Blocks; @@ -456,6 +457,7 @@ public MergeConfig MergeConfig MetadataDb, BlockTree, SpecProvider, + new ChainSpec(), LimboLogs.Instance); protected override IBetterPeerStrategy BetterPeerStrategy => _betterPeerStrategy ??= diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncServerTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncServerTests.cs index 5394cd8e754..8ecab27bc76 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncServerTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncServerTests.cs @@ -22,6 +22,7 @@ using Nethermind.Merge.Plugin.Handlers; using Nethermind.Merge.Plugin.InvalidChainTracker; using Nethermind.Specs; +using Nethermind.Specs.ChainSpecStyle; using Nethermind.Specs.Forks; using Nethermind.State; using Nethermind.Stats.Model; @@ -180,6 +181,7 @@ public void Terminal_block_with_lower_td_should_not_change_best_suggested_but_sh new MemDb(), localBlockTree, testSpecProvider, + new ChainSpec(), LimboLogs.Instance); HeaderValidator headerValidator = new( localBlockTree, @@ -389,6 +391,7 @@ private Context CreateMergeContext(int blockTreeChainLength, UInt256 ttd) new MemDb(), localBlockTree, testSpecProvider, + new ChainSpec(), LimboLogs.Instance); MergeSealEngine sealEngine = new( new SealEngine(new NethDevSealEngine(), Always.Valid), diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs index a1ed58c7617..3d2cfd28eef 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs @@ -324,7 +324,7 @@ ISyncConfig GetSyncConfig() => { mergeConfig.TerminalTotalDifficulty = UInt256.MaxValue.ToString(CultureInfo.InvariantCulture); } - PoSSwitcher poSSwitcher = new(mergeConfig, syncConfig, dbProvider.MetadataDb, BlockTree, new TestSingleReleaseSpecProvider(Constantinople.Instance), _logManager); + PoSSwitcher poSSwitcher = new(mergeConfig, syncConfig, dbProvider.MetadataDb, BlockTree, new TestSingleReleaseSpecProvider(Constantinople.Instance), new ChainSpec(), _logManager); IBeaconPivot beaconPivot = new BeaconPivot(syncConfig, dbProvider.MetadataDb, BlockTree, _logManager); TrieStore trieStore = new(stateDb, LimboLogs.Instance);