diff --git a/src/Nethermind/Chains/foundation.json b/src/Nethermind/Chains/foundation.json index 554155c6879a..30a9ec37e5e2 100644 --- a/src/Nethermind/Chains/foundation.json +++ b/src/Nethermind/Chains/foundation.json @@ -199,6 +199,14 @@ "eip7251TransitionTimestamp": "0x681b3057", "eip7702TransitionTimestamp": "0x681b3057", "eip7623TransitionTimestamp": "0x681b3057", + "eip7594TransitionTimestamp": "0x6930b057", + "eip7823TransitionTimestamp": "0x6930b057", + "eip7825TransitionTimestamp": "0x6930b057", + "eip7883TransitionTimestamp": "0x6930b057", + "eip7918TransitionTimestamp": "0x6930b057", + "eip7934TransitionTimestamp": "0x6930b057", + "eip7939TransitionTimestamp": "0x6930b057", + "eip7951TransitionTimestamp": "0x6930b057", "depositContractAddress": "0x00000000219ab540356cbb839cbe05303d7705fa", "terminalTotalDifficulty": "C70D808A128D7380000", "blobSchedule": [ @@ -208,6 +216,20 @@ "target": 6, "max": 9, "baseFeeUpdateFraction": "0x4c6964" + }, + { + "name": "bpo1", + "timestamp": "0x69383057", + "target": 10, + "max": 15, + "baseFeeUpdateFraction": "0x7f5a51" + }, + { + "name": "bpo2", + "timestamp": "0x695db057", + "target": 14, + "max": 21, + "baseFeeUpdateFraction": "0xb24b3f" } ] }, diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs index 8ee688de990a..6df503627ad0 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs @@ -1551,6 +1551,9 @@ public void Should_return_expected_capabilities_for_mainnet() nameof(IEngineRpcModule.engine_getPayloadV4), nameof(IEngineRpcModule.engine_newPayloadV4), + + nameof(IEngineRpcModule.engine_getPayloadV5), + nameof(IEngineRpcModule.engine_getBlobsV2) }; Assert.That(result, Is.EquivalentTo(expectedMethods)); } diff --git a/src/Nethermind/Nethermind.Network.Test/ForkInfoTests.cs b/src/Nethermind/Nethermind.Network.Test/ForkInfoTests.cs index b9086423ed75..a8f77e3b9e9e 100644 --- a/src/Nethermind/Nethermind.Network.Test/ForkInfoTests.cs +++ b/src/Nethermind/Nethermind.Network.Test/ForkInfoTests.cs @@ -56,8 +56,14 @@ public class ForkInfoTests [TestCase(15_051_000, 1_710_338_134ul, "0xdce96c2d", 1_710_338_135ul, "Future Shanghai timestamp")] [TestCase(15_051_000, 1_710_338_135ul, "0x9f3d2254", 1_746_612_311ul, "First Cancun timestamp")] [TestCase(15_051_000, 1_746_612_310ul, "0x9f3d2254", 1_746_612_311ul, "Future Cancun timestamp")] - [TestCase(15_051_000, 1_746_612_311ul, "0xc376cf8b", 0ul, "First Prague timestamp")] - [TestCase(15_051_000, 1_846_612_311ul, "0xc376cf8b", 0ul, "Future Prague timestamp")] + [TestCase(15_051_000, 1_746_612_311ul, "0xc376cf8b", 1_764_798_551ul, "First Prague timestamp")] + [TestCase(15_051_000, 1_764_798_550ul, "0xc376cf8b", 1_764_798_551ul, "Future Prague timestamp")] + [TestCase(15_051_000, 1_764_798_551ul, "0x5167e2a6", 1_765_290_071ul, "First Osaka timestamp")] + [TestCase(15_051_000, 1_765_290_070ul, "0x5167e2a6", 1_765_290_071ul, "Future Osaka timestamp")] + [TestCase(15_051_000, 1_765_290_071ul, "0xcba2a1c0", 1_767_747_671ul, "First BPO1 timestamp")] + [TestCase(15_051_000, 1_767_747_670ul, "0xcba2a1c0", 1_767_747_671ul, "Future BPO1 timestamp")] + [TestCase(15_051_000, 1_767_747_671ul, "0x07c9462e", 0ul, "First BPO2 timestamp")] + [TestCase(15_051_000, 1_867_747_671ul, "0x07c9462e", 0ul, "Future BPO2 timestamp")] public void Fork_id_and_hash_as_expected(long head, ulong headTimestamp, string forkHashHex, ulong next, string description) { Test(head, headTimestamp, KnownHashes.MainnetGenesis, forkHashHex, next, description, MainnetSpecProvider.Instance, "foundation.json"); diff --git a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs index 36bdd07c53d1..a1f1d9606efd 100644 --- a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs @@ -548,7 +548,13 @@ public static IEnumerable MainnetActivations yield return new TestCaseData(MainnetSpecProvider.CancunActivation) { TestName = "Cancun" }; yield return new TestCaseData(new ForkActivation(MainnetSpecProvider.ParisBlockNumber, MainnetSpecProvider.PragueBlockTimestamp - 1)) { TestName = "Before Prague" }; yield return new TestCaseData(MainnetSpecProvider.PragueActivation) { TestName = "Prague" }; - yield return new TestCaseData(new ForkActivation(MainnetSpecProvider.ParisBlockNumber, MainnetSpecProvider.PragueBlockTimestamp + 100000000)) { TestName = "Future" }; + yield return new TestCaseData(new ForkActivation(MainnetSpecProvider.ParisBlockNumber, MainnetSpecProvider.OsakaBlockTimestamp - 1)) { TestName = "Before Osaka" }; + yield return new TestCaseData(MainnetSpecProvider.OsakaActivation) { TestName = "Osaka" }; + yield return new TestCaseData(new ForkActivation(MainnetSpecProvider.ParisBlockNumber, MainnetSpecProvider.BPO1BlockTimestamp - 1)) { TestName = "Before BPO1" }; + yield return new TestCaseData(MainnetSpecProvider.BPO1Activation) { TestName = "BPO1" }; + yield return new TestCaseData(new ForkActivation(MainnetSpecProvider.ParisBlockNumber, MainnetSpecProvider.BPO2BlockTimestamp - 1)) { TestName = "Before BPO2" }; + yield return new TestCaseData(MainnetSpecProvider.BPO2Activation) { TestName = "BPO2" }; + yield return new TestCaseData(new ForkActivation(MainnetSpecProvider.ParisBlockNumber, MainnetSpecProvider.BPO2BlockTimestamp + 100000000)) { TestName = "Future" }; } } @@ -595,9 +601,13 @@ public void Mainnet_loads_properly(ForkActivation forkActivation) IReleaseSpec postCancunSpec = provider.GetSpec(MainnetSpecProvider.CancunActivation); IReleaseSpec postPragueSpec = provider.GetSpec(MainnetSpecProvider.PragueActivation); + IReleaseSpec postOsakaSpec = provider.GetSpec(MainnetSpecProvider.OsakaActivation); + IReleaseSpec postBPO1Spec = provider.GetSpec(MainnetSpecProvider.BPO1Activation); + IReleaseSpec postBPO2Spec = provider.GetSpec(MainnetSpecProvider.BPO2Activation); VerifyCancunSpecificsForMainnetAndSepolia(postCancunSpec); VerifyPragueSpecificsForMainnetHoodiAndSepolia(provider.ChainId, postPragueSpec); + VerifyOsakaSpecificsForMainnetHoleskyHoodiAndSepolia(provider.ChainId, postOsakaSpec, postBPO1Spec, postBPO2Spec); } [Flags] diff --git a/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs b/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs index 7352ae53fc09..1c3425fe3ba7 100644 --- a/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs @@ -27,7 +27,9 @@ public class MainnetSpecProvider : ISpecProvider public const ulong ShanghaiBlockTimestamp = 0x64373057; public const ulong CancunBlockTimestamp = 0x65F1B057; public const ulong PragueBlockTimestamp = 0x681b3057; - public const ulong OsakaBlockTimestamp = ulong.MaxValue - 1; + public const ulong OsakaBlockTimestamp = 0x6930b057; + public const ulong BPO1BlockTimestamp = 0x69383057; + public const ulong BPO2BlockTimestamp = 0x695db057; IReleaseSpec ISpecProvider.GetSpecInternal(ForkActivation forkActivation) => forkActivation switch @@ -49,7 +51,9 @@ IReleaseSpec ISpecProvider.GetSpecInternal(ForkActivation forkActivation) => { Timestamp: < CancunBlockTimestamp } => Shanghai.Instance, { Timestamp: < PragueBlockTimestamp } => Cancun.Instance, { Timestamp: < OsakaBlockTimestamp } => Prague.Instance, - _ => Osaka.Instance + { Timestamp: < BPO1BlockTimestamp } => Osaka.Instance, + { Timestamp: < BPO2BlockTimestamp } => BPO1.Instance, + _ => BPO2.Instance }; public void UpdateMergeTransitionInfo(long? blockNumber, UInt256? terminalTotalDifficulty = null) @@ -73,6 +77,8 @@ public void UpdateMergeTransitionInfo(long? blockNumber, UInt256? terminalTotalD public static ForkActivation CancunActivation { get; } = (ParisBlockNumber + 2, CancunBlockTimestamp); public static ForkActivation PragueActivation { get; } = (ParisBlockNumber + 3, PragueBlockTimestamp); public static ForkActivation OsakaActivation { get; } = (ParisBlockNumber + 4, OsakaBlockTimestamp); + public static ForkActivation BPO1Activation { get; } = (ParisBlockNumber + 5, BPO1BlockTimestamp); + public static ForkActivation BPO2Activation { get; } = (ParisBlockNumber + 6, BPO2BlockTimestamp); public ForkActivation[] TransitionActivations { get; } = { (ForkActivation)HomesteadBlockNumber, @@ -91,6 +97,8 @@ public void UpdateMergeTransitionInfo(long? blockNumber, UInt256? terminalTotalD CancunActivation, PragueActivation, OsakaActivation, + BPO1Activation, + BPO2Activation, }; public static MainnetSpecProvider Instance { get; } = new();