|
1 | 1 | // SPDX-FileCopyrightText: 2025 Demerzel Solutions Limited |
2 | 2 | // SPDX-License-Identifier: LGPL-3.0-only |
3 | 3 |
|
| 4 | +using Microsoft.VisualStudio.TestPlatform.ObjectModel; |
4 | 5 | using Nethermind.Config; |
5 | 6 | using Nethermind.Consensus.AuRa.Config; |
6 | 7 | using Nethermind.Core; |
@@ -64,6 +65,7 @@ public void Timestamp_activation_equal_to_genesis_timestamp_loads_correctly(long |
64 | 65 | expectedSpec.Eip1559TransitionBlock = 0; |
65 | 66 | expectedSpec.DifficultyBombDelay = 0; |
66 | 67 | expectedSpec.IsEip3855Enabled = isEip3855Enabled; |
| 68 | + expectedSpec.MaximumUncleCount = 0; |
67 | 69 | TestSpecProvider testProvider = TestSpecProvider.Instance; |
68 | 70 | testProvider.NextForkSpec = expectedSpec; |
69 | 71 | testProvider.TerminalTotalDifficulty = 0; |
@@ -167,39 +169,45 @@ public static IEnumerable<TestCaseData> SepoliaActivations |
167 | 169 | } |
168 | 170 | } |
169 | 171 |
|
170 | | - [TestCaseSource(nameof(SepoliaActivations))] |
171 | | - public void Sepolia_loads_properly(ForkActivation forkActivation) |
| 172 | + [Test] |
| 173 | + public void Sepolia_loads_properly() |
172 | 174 | { |
173 | | - ChainSpec chainSpec = LoadChainSpecFromChainFolder("sepolia"); |
174 | | - ChainSpecBasedSpecProvider provider = new(chainSpec); |
175 | | - SepoliaSpecProvider sepolia = SepoliaSpecProvider.Instance; |
176 | | - |
177 | | - CompareSpecs(sepolia, provider, forkActivation); |
178 | | - using (Assert.EnterMultipleScope()) |
| 175 | + foreach (var testCase in SepoliaActivations) |
179 | 176 | { |
180 | | - Assert.That(provider.TerminalTotalDifficulty, Is.EqualTo(SepoliaSpecProvider.Instance.TerminalTotalDifficulty)); |
181 | | - Assert.That(provider.GenesisSpec.Eip1559TransitionBlock, Is.Zero); |
182 | | - Assert.That(provider.GenesisSpec.DifficultyBombDelay, Is.EqualTo(long.MaxValue)); |
183 | | - Assert.That(provider.ChainId, Is.EqualTo(BlockchainIds.Sepolia)); |
184 | | - Assert.That(provider.NetworkId, Is.EqualTo(BlockchainIds.Sepolia)); |
| 177 | + var forkActivation = (ForkActivation)testCase.Arguments[0]!; |
185 | 178 |
|
186 | | - IEnumerable<ulong> timestamps = GetTransitionTimestamps(chainSpec.Parameters); |
187 | | - foreach (ulong t in timestamps) |
| 179 | + ChainSpec chainSpec = LoadChainSpecFromChainFolder("sepolia"); |
| 180 | + ChainSpecBasedSpecProvider provider = new(chainSpec); |
| 181 | + SepoliaSpecProvider sepolia = SepoliaSpecProvider.Instance; |
| 182 | + |
| 183 | + CompareSpecs(sepolia, provider, forkActivation); |
| 184 | + using (Assert.EnterMultipleScope()) |
188 | 185 | { |
189 | | - Assert.That(ValidateSlotByTimestamp(t, SepoliaSpecProvider.BeaconChainGenesisTimestampConst), Is.True); |
| 186 | + Assert.That(provider.TerminalTotalDifficulty, Is.EqualTo(SepoliaSpecProvider.Instance.TerminalTotalDifficulty)); |
| 187 | + Assert.That(provider.GenesisSpec.Eip1559TransitionBlock, Is.Zero); |
| 188 | + Assert.That(provider.GenesisSpec.DifficultyBombDelay, Is.EqualTo(long.MaxValue)); |
| 189 | + Assert.That(provider.ChainId, Is.EqualTo(BlockchainIds.Sepolia)); |
| 190 | + Assert.That(provider.NetworkId, Is.EqualTo(BlockchainIds.Sepolia)); |
| 191 | + |
| 192 | + IEnumerable<ulong> timestamps = GetTransitionTimestamps(chainSpec.Parameters); |
| 193 | + foreach (ulong t in timestamps) |
| 194 | + { |
| 195 | + Assert.That(ValidateSlotByTimestamp(t, SepoliaSpecProvider.BeaconChainGenesisTimestampConst), Is.True); |
| 196 | + } |
190 | 197 | } |
191 | | - } |
192 | 198 |
|
193 | | - IReleaseSpec postCancunSpec = provider.GetSpec((2, SepoliaSpecProvider.CancunTimestamp)); |
194 | | - VerifyCancunSpecificsForMainnetAndSepolia(postCancunSpec); |
| 199 | + IReleaseSpec postCancunSpec = provider.GetSpec((2, SepoliaSpecProvider.CancunTimestamp)); |
| 200 | + VerifyCancunSpecificsForMainnetAndSepolia(postCancunSpec); |
195 | 201 |
|
196 | | - IReleaseSpec postPragueSpec = provider.GetSpec((2, SepoliaSpecProvider.PragueTimestamp)); |
197 | | - VerifyPragueSpecificsForMainnetHoodiAndSepolia(provider.ChainId, postPragueSpec); |
| 202 | + IReleaseSpec postPragueSpec = provider.GetSpec((2, SepoliaSpecProvider.PragueTimestamp)); |
| 203 | + VerifyPragueSpecificsForMainnetHoodiAndSepolia(provider.ChainId, postPragueSpec); |
| 204 | + |
| 205 | + IReleaseSpec postOsakaSpec = provider.GetSpec((2, SepoliaSpecProvider.OsakaTimestamp)); |
| 206 | + IReleaseSpec postBPO1Spec = provider.GetSpec((2, SepoliaSpecProvider.BPO1Timestamp)); |
| 207 | + IReleaseSpec postBPO2Spec = provider.GetSpec((2, SepoliaSpecProvider.BPO2Timestamp)); |
| 208 | + VerifyOsakaSpecificsForMainnetHoleskyHoodiAndSepolia(provider.ChainId, postOsakaSpec, postBPO1Spec, postBPO2Spec); |
| 209 | + } |
198 | 210 |
|
199 | | - IReleaseSpec postOsakaSpec = provider.GetSpec((2, SepoliaSpecProvider.OsakaTimestamp)); |
200 | | - IReleaseSpec postBPO1Spec = provider.GetSpec((2, SepoliaSpecProvider.BPO1Timestamp)); |
201 | | - IReleaseSpec postBPO2Spec = provider.GetSpec((2, SepoliaSpecProvider.BPO2Timestamp)); |
202 | | - VerifyOsakaSpecificsForMainnetHoleskyHoodiAndSepolia(provider.ChainId, postOsakaSpec, postBPO1Spec, postBPO2Spec); |
203 | 211 | } |
204 | 212 |
|
205 | 213 | private static void VerifyCancunSpecificsForMainnetAndSepolia(IReleaseSpec spec) |
@@ -282,33 +290,39 @@ public static IEnumerable<TestCaseData> HoodiActivations |
282 | 290 | } |
283 | 291 | } |
284 | 292 |
|
285 | | - [TestCaseSource(nameof(HoodiActivations))] |
286 | | - public void Hoodi_loads_properly(ForkActivation forkActivation) |
| 293 | + [Test] |
| 294 | + public void Hoodi_loads_properly() |
287 | 295 | { |
288 | | - ChainSpec chainSpec = LoadChainSpecFromChainFolder("hoodi"); |
289 | | - ChainSpecBasedSpecProvider provider = new(chainSpec); |
290 | | - ISpecProvider hardCodedSpec = HoodiSpecProvider.Instance; |
291 | | - |
292 | | - CompareSpecs(hardCodedSpec, provider, forkActivation); |
293 | | - using (Assert.EnterMultipleScope()) |
| 296 | + foreach (TestCaseData testCase in HoodiActivations) |
294 | 297 | { |
295 | | - Assert.That(provider.TerminalTotalDifficulty, Is.EqualTo(hardCodedSpec.TerminalTotalDifficulty)); |
296 | | - Assert.That(provider.GenesisSpec.Eip1559TransitionBlock, Is.Zero); |
297 | | - Assert.That(provider.GenesisSpec.DifficultyBombDelay, Is.Zero); |
298 | | - Assert.That(provider.ChainId, Is.EqualTo(BlockchainIds.Hoodi)); |
299 | | - Assert.That(provider.NetworkId, Is.EqualTo(BlockchainIds.Hoodi)); |
300 | | - } |
| 298 | + ForkActivation forkActivation = (ForkActivation)testCase.Arguments[0]!; |
301 | 299 |
|
302 | | - IReleaseSpec postCancunSpec = provider.GetSpec((2, HoodiSpecProvider.CancunTimestamp)); |
303 | | - VerifyCancunSpecificsForMainnetAndSepolia(postCancunSpec); |
| 300 | + ChainSpec chainSpec = LoadChainSpecFromChainFolder("hoodi"); |
| 301 | + ChainSpecBasedSpecProvider provider = new(chainSpec); |
| 302 | + ISpecProvider hardCodedSpec = HoodiSpecProvider.Instance; |
304 | 303 |
|
305 | | - IReleaseSpec postPragueSpec = provider.GetSpec((2, HoodiSpecProvider.PragueTimestamp)); |
306 | | - VerifyPragueSpecificsForMainnetHoodiAndSepolia(provider.ChainId, postPragueSpec); |
| 304 | + CompareSpecs(hardCodedSpec, provider, forkActivation); |
| 305 | + using (Assert.EnterMultipleScope()) |
| 306 | + { |
| 307 | + Assert.That(provider.TerminalTotalDifficulty, Is.EqualTo(hardCodedSpec.TerminalTotalDifficulty)); |
| 308 | + Assert.That(provider.GenesisSpec.Eip1559TransitionBlock, Is.Zero); |
| 309 | + Assert.That(provider.GenesisSpec.DifficultyBombDelay, Is.Zero); |
| 310 | + Assert.That(provider.ChainId, Is.EqualTo(BlockchainIds.Hoodi)); |
| 311 | + Assert.That(provider.NetworkId, Is.EqualTo(BlockchainIds.Hoodi)); |
| 312 | + } |
| 313 | + |
| 314 | + IReleaseSpec postCancunSpec = provider.GetSpec((2, HoodiSpecProvider.CancunTimestamp)); |
| 315 | + VerifyCancunSpecificsForMainnetAndSepolia(postCancunSpec); |
| 316 | + |
| 317 | + IReleaseSpec postPragueSpec = provider.GetSpec((2, HoodiSpecProvider.PragueTimestamp)); |
| 318 | + VerifyPragueSpecificsForMainnetHoodiAndSepolia(provider.ChainId, postPragueSpec); |
| 319 | + |
| 320 | + IReleaseSpec postOsakaSpec = provider.GetSpec((2, HoodiSpecProvider.OsakaTimestamp)); |
| 321 | + IReleaseSpec postBPO1Spec = provider.GetSpec((2, HoodiSpecProvider.BPO1Timestamp)); |
| 322 | + IReleaseSpec postBPO2Spec = provider.GetSpec((2, HoodiSpecProvider.BPO2Timestamp)); |
| 323 | + VerifyOsakaSpecificsForMainnetHoleskyHoodiAndSepolia(provider.ChainId, postOsakaSpec, postBPO1Spec, postBPO2Spec); |
| 324 | + } |
307 | 325 |
|
308 | | - IReleaseSpec postOsakaSpec = provider.GetSpec((2, HoodiSpecProvider.OsakaTimestamp)); |
309 | | - IReleaseSpec postBPO1Spec = provider.GetSpec((2, HoodiSpecProvider.BPO1Timestamp)); |
310 | | - IReleaseSpec postBPO2Spec = provider.GetSpec((2, HoodiSpecProvider.BPO2Timestamp)); |
311 | | - VerifyOsakaSpecificsForMainnetHoleskyHoodiAndSepolia(provider.ChainId, postOsakaSpec, postBPO1Spec, postBPO2Spec); |
312 | 326 |
|
313 | 327 | } |
314 | 328 |
|
@@ -558,56 +572,62 @@ public static IEnumerable<TestCaseData> MainnetActivations |
558 | 572 | } |
559 | 573 | } |
560 | 574 |
|
561 | | - [TestCaseSource(nameof(MainnetActivations))] |
562 | | - public void Mainnet_loads_properly(ForkActivation forkActivation) |
| 575 | + [Test] |
| 576 | + public void Mainnet_loads_properly() |
563 | 577 | { |
564 | | - ChainSpec chainSpec = LoadChainSpecFromChainFolder("foundation"); |
565 | | - ChainSpecBasedSpecProvider provider = new(chainSpec); |
566 | | - MainnetSpecProvider mainnet = MainnetSpecProvider.Instance; |
| 578 | + foreach (TestCaseData testCase in MainnetActivations) |
| 579 | + { |
| 580 | + var forkActivation = (ForkActivation)testCase.Arguments[0]!; |
567 | 581 |
|
568 | | - CompareSpecs(mainnet, provider, forkActivation, CompareSpecsOptions.CheckDifficultyBomb); |
569 | 582 |
|
570 | | - using (Assert.EnterMultipleScope()) |
571 | | - { |
572 | | - Assert.That(provider.GetSpec((MainnetSpecProvider.SpuriousDragonBlockNumber, null)).MaxCodeSize, Is.EqualTo(CodeSizeConstants.MaxCodeSizeEip170)); |
573 | | - Assert.That(provider.GetSpec((MainnetSpecProvider.SpuriousDragonBlockNumber, null)).MaxInitCodeSize, Is.EqualTo(2 * CodeSizeConstants.MaxCodeSizeEip170)); |
574 | | - Assert.That(provider.GetSpec((ForkActivation)(long.MaxValue - 1)).IsEip2537Enabled, Is.False); |
575 | | - Assert.That(provider.GenesisSpec.Eip1559TransitionBlock, Is.EqualTo(MainnetSpecProvider.LondonBlockNumber)); |
576 | | - Assert.That(provider.GetSpec((ForkActivation)4_369_999).DifficultyBombDelay, Is.EqualTo(0_000_000)); |
577 | | - Assert.That(provider.GetSpec((ForkActivation)4_370_000).DifficultyBombDelay, Is.EqualTo(3_000_000)); |
578 | | - Assert.That(provider.GetSpec((ForkActivation)7_279_999).DifficultyBombDelay, Is.EqualTo(3_000_000)); |
579 | | - Assert.That(provider.GetSpec((ForkActivation)7_279_999).DifficultyBombDelay, Is.EqualTo(3_000_000)); |
580 | | - Assert.That(provider.GetSpec((ForkActivation)7_280_000).DifficultyBombDelay, Is.EqualTo(5_000_000)); |
581 | | - Assert.That(provider.GetSpec((ForkActivation)9_199_999).DifficultyBombDelay, Is.EqualTo(5_000_000)); |
582 | | - Assert.That(provider.GetSpec((ForkActivation)9_200_000).DifficultyBombDelay, Is.EqualTo(9_000_000)); |
583 | | - Assert.That(provider.GetSpec((ForkActivation)12_000_000).DifficultyBombDelay, Is.EqualTo(9_000_000)); |
584 | | - Assert.That(provider.GetSpec((ForkActivation)12_964_999).DifficultyBombDelay, Is.EqualTo(9_000_000)); |
585 | | - Assert.That(provider.GetSpec((ForkActivation)12_965_000).DifficultyBombDelay, Is.EqualTo(9_700_000)); |
586 | | - Assert.That(provider.GetSpec((ForkActivation)13_772_999).DifficultyBombDelay, Is.EqualTo(9_700_000)); |
587 | | - Assert.That(provider.GetSpec((ForkActivation)13_773_000).DifficultyBombDelay, Is.EqualTo(10_700_000)); |
588 | | - Assert.That(provider.GetSpec((ForkActivation)15_049_999).DifficultyBombDelay, Is.EqualTo(10_700_000)); |
589 | | - Assert.That(provider.GetSpec((ForkActivation)15_050_000).DifficultyBombDelay, Is.EqualTo(11_400_000)); |
590 | | - Assert.That(provider.GetSpec((ForkActivation)99_414_000).DifficultyBombDelay, Is.EqualTo(11_400_000)); |
591 | | - Assert.That(provider.TerminalTotalDifficulty, Is.EqualTo(MainnetSpecProvider.Instance.TerminalTotalDifficulty)); |
592 | | - Assert.That(provider.ChainId, Is.EqualTo(BlockchainIds.Mainnet)); |
593 | | - Assert.That(provider.NetworkId, Is.EqualTo(BlockchainIds.Mainnet)); |
| 583 | + ChainSpec chainSpec = LoadChainSpecFromChainFolder("foundation"); |
| 584 | + ChainSpecBasedSpecProvider provider = new(chainSpec); |
| 585 | + MainnetSpecProvider mainnet = MainnetSpecProvider.Instance; |
594 | 586 |
|
595 | | - IEnumerable<ulong> timestamps = GetTransitionTimestamps(chainSpec.Parameters); |
596 | | - foreach (ulong t in timestamps) |
| 587 | + CompareSpecs(mainnet, provider, forkActivation, CompareSpecsOptions.CheckDifficultyBomb); |
| 588 | + |
| 589 | + using (Assert.EnterMultipleScope()) |
597 | 590 | { |
598 | | - Assert.That(ValidateSlotByTimestamp(t, MainnetSpecProvider.BeaconChainGenesisTimestampConst), Is.True); |
| 591 | + Assert.That(provider.GetSpec((MainnetSpecProvider.SpuriousDragonBlockNumber, null)).MaxCodeSize, Is.EqualTo(CodeSizeConstants.MaxCodeSizeEip170)); |
| 592 | + Assert.That(provider.GetSpec((MainnetSpecProvider.SpuriousDragonBlockNumber, null)).MaxInitCodeSize, Is.EqualTo(2 * CodeSizeConstants.MaxCodeSizeEip170)); |
| 593 | + Assert.That(provider.GetSpec((ForkActivation)(long.MaxValue - 1)).IsEip2537Enabled, Is.False); |
| 594 | + Assert.That(provider.GenesisSpec.Eip1559TransitionBlock, Is.EqualTo(MainnetSpecProvider.LondonBlockNumber)); |
| 595 | + Assert.That(provider.GetSpec((ForkActivation)4_369_999).DifficultyBombDelay, Is.EqualTo(0_000_000)); |
| 596 | + Assert.That(provider.GetSpec((ForkActivation)4_370_000).DifficultyBombDelay, Is.EqualTo(3_000_000)); |
| 597 | + Assert.That(provider.GetSpec((ForkActivation)7_279_999).DifficultyBombDelay, Is.EqualTo(3_000_000)); |
| 598 | + Assert.That(provider.GetSpec((ForkActivation)7_279_999).DifficultyBombDelay, Is.EqualTo(3_000_000)); |
| 599 | + Assert.That(provider.GetSpec((ForkActivation)7_280_000).DifficultyBombDelay, Is.EqualTo(5_000_000)); |
| 600 | + Assert.That(provider.GetSpec((ForkActivation)9_199_999).DifficultyBombDelay, Is.EqualTo(5_000_000)); |
| 601 | + Assert.That(provider.GetSpec((ForkActivation)9_200_000).DifficultyBombDelay, Is.EqualTo(9_000_000)); |
| 602 | + Assert.That(provider.GetSpec((ForkActivation)12_000_000).DifficultyBombDelay, Is.EqualTo(9_000_000)); |
| 603 | + Assert.That(provider.GetSpec((ForkActivation)12_964_999).DifficultyBombDelay, Is.EqualTo(9_000_000)); |
| 604 | + Assert.That(provider.GetSpec((ForkActivation)12_965_000).DifficultyBombDelay, Is.EqualTo(9_700_000)); |
| 605 | + Assert.That(provider.GetSpec((ForkActivation)13_772_999).DifficultyBombDelay, Is.EqualTo(9_700_000)); |
| 606 | + Assert.That(provider.GetSpec((ForkActivation)13_773_000).DifficultyBombDelay, Is.EqualTo(10_700_000)); |
| 607 | + Assert.That(provider.GetSpec((ForkActivation)15_049_999).DifficultyBombDelay, Is.EqualTo(10_700_000)); |
| 608 | + Assert.That(provider.GetSpec((ForkActivation)15_050_000).DifficultyBombDelay, Is.EqualTo(11_400_000)); |
| 609 | + Assert.That(provider.GetSpec((ForkActivation)99_414_000).DifficultyBombDelay, Is.EqualTo(11_400_000)); |
| 610 | + Assert.That(provider.TerminalTotalDifficulty, Is.EqualTo(MainnetSpecProvider.Instance.TerminalTotalDifficulty)); |
| 611 | + Assert.That(provider.ChainId, Is.EqualTo(BlockchainIds.Mainnet)); |
| 612 | + Assert.That(provider.NetworkId, Is.EqualTo(BlockchainIds.Mainnet)); |
| 613 | + |
| 614 | + IEnumerable<ulong> timestamps = GetTransitionTimestamps(chainSpec.Parameters); |
| 615 | + foreach (ulong t in timestamps) |
| 616 | + { |
| 617 | + Assert.That(ValidateSlotByTimestamp(t, MainnetSpecProvider.BeaconChainGenesisTimestampConst), Is.True); |
| 618 | + } |
599 | 619 | } |
600 | | - } |
601 | 620 |
|
602 | | - IReleaseSpec postCancunSpec = provider.GetSpec(MainnetSpecProvider.CancunActivation); |
603 | | - IReleaseSpec postPragueSpec = provider.GetSpec(MainnetSpecProvider.PragueActivation); |
604 | | - IReleaseSpec postOsakaSpec = provider.GetSpec(MainnetSpecProvider.OsakaActivation); |
605 | | - IReleaseSpec postBPO1Spec = provider.GetSpec(MainnetSpecProvider.BPO1Activation); |
606 | | - IReleaseSpec postBPO2Spec = provider.GetSpec(MainnetSpecProvider.BPO2Activation); |
| 621 | + IReleaseSpec postCancunSpec = provider.GetSpec(MainnetSpecProvider.CancunActivation); |
| 622 | + IReleaseSpec postPragueSpec = provider.GetSpec(MainnetSpecProvider.PragueActivation); |
| 623 | + IReleaseSpec postOsakaSpec = provider.GetSpec(MainnetSpecProvider.OsakaActivation); |
| 624 | + IReleaseSpec postBPO1Spec = provider.GetSpec(MainnetSpecProvider.BPO1Activation); |
| 625 | + IReleaseSpec postBPO2Spec = provider.GetSpec(MainnetSpecProvider.BPO2Activation); |
607 | 626 |
|
608 | | - VerifyCancunSpecificsForMainnetAndSepolia(postCancunSpec); |
609 | | - VerifyPragueSpecificsForMainnetHoodiAndSepolia(provider.ChainId, postPragueSpec); |
610 | | - VerifyOsakaSpecificsForMainnetHoleskyHoodiAndSepolia(provider.ChainId, postOsakaSpec, postBPO1Spec, postBPO2Spec); |
| 627 | + VerifyCancunSpecificsForMainnetAndSepolia(postCancunSpec); |
| 628 | + VerifyPragueSpecificsForMainnetHoodiAndSepolia(provider.ChainId, postPragueSpec); |
| 629 | + VerifyOsakaSpecificsForMainnetHoleskyHoodiAndSepolia(provider.ChainId, postOsakaSpec, postBPO1Spec, postBPO2Spec); |
| 630 | + } |
611 | 631 | } |
612 | 632 |
|
613 | 633 | [Flags] |
|
0 commit comments