Skip to content

Commit c4ac7b8

Browse files
committed
Uncles=0 starting from Shanghai
1 parent 48aab94 commit c4ac7b8

File tree

5 files changed

+113
-93
lines changed

5 files changed

+113
-93
lines changed

src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs

Lines changed: 109 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// SPDX-FileCopyrightText: 2025 Demerzel Solutions Limited
22
// SPDX-License-Identifier: LGPL-3.0-only
33

4+
using Microsoft.VisualStudio.TestPlatform.ObjectModel;
45
using Nethermind.Config;
56
using Nethermind.Consensus.AuRa.Config;
67
using Nethermind.Core;
@@ -64,6 +65,7 @@ public void Timestamp_activation_equal_to_genesis_timestamp_loads_correctly(long
6465
expectedSpec.Eip1559TransitionBlock = 0;
6566
expectedSpec.DifficultyBombDelay = 0;
6667
expectedSpec.IsEip3855Enabled = isEip3855Enabled;
68+
expectedSpec.MaximumUncleCount = 0;
6769
TestSpecProvider testProvider = TestSpecProvider.Instance;
6870
testProvider.NextForkSpec = expectedSpec;
6971
testProvider.TerminalTotalDifficulty = 0;
@@ -167,39 +169,45 @@ public static IEnumerable<TestCaseData> SepoliaActivations
167169
}
168170
}
169171

170-
[TestCaseSource(nameof(SepoliaActivations))]
171-
public void Sepolia_loads_properly(ForkActivation forkActivation)
172+
[Test]
173+
public void Sepolia_loads_properly()
172174
{
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)
179176
{
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]!;
185178

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())
188185
{
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+
}
190197
}
191-
}
192198

193-
IReleaseSpec postCancunSpec = provider.GetSpec((2, SepoliaSpecProvider.CancunTimestamp));
194-
VerifyCancunSpecificsForMainnetAndSepolia(postCancunSpec);
199+
IReleaseSpec postCancunSpec = provider.GetSpec((2, SepoliaSpecProvider.CancunTimestamp));
200+
VerifyCancunSpecificsForMainnetAndSepolia(postCancunSpec);
195201

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+
}
198210

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);
203211
}
204212

205213
private static void VerifyCancunSpecificsForMainnetAndSepolia(IReleaseSpec spec)
@@ -282,33 +290,39 @@ public static IEnumerable<TestCaseData> HoodiActivations
282290
}
283291
}
284292

285-
[TestCaseSource(nameof(HoodiActivations))]
286-
public void Hoodi_loads_properly(ForkActivation forkActivation)
293+
[Test]
294+
public void Hoodi_loads_properly()
287295
{
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)
294297
{
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]!;
301299

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;
304303

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+
}
307325

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);
312326

313327
}
314328

@@ -558,56 +572,62 @@ public static IEnumerable<TestCaseData> MainnetActivations
558572
}
559573
}
560574

561-
[TestCaseSource(nameof(MainnetActivations))]
562-
public void Mainnet_loads_properly(ForkActivation forkActivation)
575+
[Test]
576+
public void Mainnet_loads_properly()
563577
{
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]!;
567581

568-
CompareSpecs(mainnet, provider, forkActivation, CompareSpecsOptions.CheckDifficultyBomb);
569582

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;
594586

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())
597590
{
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+
}
599619
}
600-
}
601620

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);
607626

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+
}
611631
}
612632

613633
[Flags]

src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,6 @@ private static ForkActivation[] CreateTransitionActivations(SortedSet<long> tran
182182
protected virtual ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseStartBlock, ulong? releaseStartTimestamp = null)
183183
{
184184
ReleaseSpec releaseSpec = CreateEmptyReleaseSpec();
185-
releaseSpec.MaximumUncleCount = releaseStartTimestamp is not null ? 2 : 0;
186185
releaseSpec.DifficultyBoundDivisor = 1;
187186
releaseSpec.IsTimeAdjustmentPostOlympic = true; // TODO: this is Duration, review
188187
releaseSpec.MaximumExtraDataSize = chainSpec.Parameters.MaximumExtraDataSize;
@@ -238,6 +237,7 @@ protected virtual ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releas
238237

239238
releaseSpec.IsEip1153Enabled = (chainSpec.Parameters.Eip1153TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp;
240239
releaseSpec.IsEip3651Enabled = (chainSpec.Parameters.Eip3651TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp;
240+
releaseSpec.MaximumUncleCount = releaseSpec.IsEip3651Enabled ? 0 : 2;
241241
releaseSpec.IsEip3855Enabled = (chainSpec.Parameters.Eip3855TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp;
242242
releaseSpec.IsEip3860Enabled = (chainSpec.Parameters.Eip3860TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp;
243243
releaseSpec.IsEip4895Enabled = (chainSpec.Parameters.Eip4895TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp;

src/Nethermind/Nethermind.Specs/Forks/15_Paris.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ public class Paris : GrayGlacier
1313
protected Paris()
1414
{
1515
Name = "Paris";
16-
MaximumUncleCount = 0;
1716
}
1817

1918
public new static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, static () => new Paris());

src/Nethermind/Nethermind.Specs/Forks/16_Shanghai.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited
1+
// SPDX-FileCopyrightText: 2025 Demerzel Solutions Limited
22
// SPDX-License-Identifier: LGPL-3.0-only
33

44
using System.Threading;
@@ -13,6 +13,7 @@ public class Shanghai : Paris
1313
protected Shanghai()
1414
{
1515
Name = "Shanghai";
16+
MaximumUncleCount = 0;
1617
IsEip3651Enabled = true;
1718
IsEip3855Enabled = true;
1819
IsEip3860Enabled = true;

src/Nethermind/Nethermind.Specs/HoodiSpecProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void UpdateMergeTransitionInfo(long? blockNumber, UInt256? terminalTotalD
5454
public ForkActivation? MergeBlockNumber { get; private set; } = (0, GenesisTimestamp);
5555
public ulong TimestampFork => ShanghaiTimestamp;
5656
public UInt256? TerminalTotalDifficulty { get; private set; } = 0;
57-
public IReleaseSpec GenesisSpec { get; } = London.Instance;
57+
public IReleaseSpec GenesisSpec { get; } = Shanghai.Instance;
5858
public ForkActivation[] TransitionActivations { get; } =
5959
[
6060
(1, ShanghaiTimestamp),

0 commit comments

Comments
 (0)