Skip to content

Commit f1ff380

Browse files
flcl42marcindsobczakbenaadamsmininnyMarchhill
authored
Add BPOs (#8631)
* calculate cell kzg proofs * extent tx network wrapper * add cell proofs to test tx builder * add test for blob txs with cell proofs * add tx extension to supply both blob proofs and cell proofs * adjust tx builder to current master * fix data length * adjust tx validator * extend test * simplify network wrapper * cosmetics * hack decoder to accept optional blob proofs * cleaning * add cell proofs verification * fix * draft of translation logic * enable translation in tx validator * fix commitments * Send blobs update * Add engine_getBlobsV2, Fusaka * Fix proofs * drop BlobSender changes * Fix encoding * undo remaining blob sender changes * Fix block production * undo bs * Fix multiple blobs sending * Add more structs and APIs * Split GetBlobsHandler file * cleaning * fix blob tx decoder * fix old proof length in transaction builder * fix transaction builder * whitespaces, encoding * add getBlobsV2 to engine rpc capabilities * fix test * fix proofs validation * bring back Alexey's BlobSender changes * whitespace * fix * Add manager(just PoC) * Add osaka blobs settings change handling * add ProofVersion to ChainHeadInfoProvider and add SpecDrivenTxGossipPolicy * Fix some tests * Fix V2 proofs * fix file encoding * add error InvalidProofVersion * invalidate if proof version is not correct * add test OsakaSpecProvider * adjust and extend test for cell proofs pre and post osaka * Fix APIs * Fix a test * Move name to spec to Spec project * Fix build * fix cancun caps * Make tx pool return blob txs with applicable proof version * Change proof version * Display better error * add ProofsTranslationEnabled to config * convert old proof to cell proofs if enabled and after fusaka * add test * allow replacement: new proofs for old proof * add regression test * fix transaction selector tests * Fix blob sender #2 and #3 breaks * fix engine_getBlobsV2 warning * fix osaka caps activation * fix tests * extend test for blobs bundle v1 * add regression test for blobs bundle v2 * whitespaces * fix blobs bundle v2 * cosmetic * fix versions * add AreBlobsAvailable * add metrics * return empty array if not all blobs are available * add tests, fix disposing issues * fix build * Dial back JsonRpc log spam * fix test * default ProofsTranslationEnabled to false * fix test * Rename proof versions for less confusion * Fix naming change * One does not simply rename an enum value * Simplify proof version checkers * Clean up * Ckzg.Ckzg -> Ckzg. (#8568) Ckzg./2 * Rename peerdas getBlobsV2 metrics (#8579) * Add metrics for getBlobsV2 * Remove AreBlobsAvailable * Rename metrics * fix * fix build * fix test * readd proof version validation * Quick cleanup * Fix gpv3 fork validation * Fix building * Clean up * Evict transactions with old proofs * Improve test * Fix test * Add BPOs * Evict txs with to many blobs, don't allow gaps * Fix tests * Add osaka * Apply suggestions from code review Co-authored-by: Marc <[email protected]> * Change bpos format to array with timestamps * Update spec format; fix tests * Fix some comments * Update src/Nethermind/Nethermind.Merge.Plugin/Metrics.cs Co-authored-by: Lukasz Rozmej <[email protected]> * More fixes * More * More fixes * More fixes * Fix typos, clean up * More fixes * Use preallocated span not list * Segregate; statics * Fix merge * Typos * Improve tests and spec * Return previous approach --------- Co-authored-by: Marcin Sobczak <[email protected]> Co-authored-by: Ben Adams <[email protected]> Co-authored-by: Minhyuk Kim <[email protected]> Co-authored-by: Marc <[email protected]> Co-authored-by: Lukasz Rozmej <[email protected]>
1 parent d21ed0a commit f1ff380

File tree

18 files changed

+268
-152
lines changed

18 files changed

+268
-152
lines changed

src/Nethermind/Chains/chiado.json

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,18 +92,14 @@
9292
"eip7702TransitionTimestamp": "0x67C96E4C",
9393
"eip4844FeeCollectorTransitionTimestamp": "0x67C96E4C",
9494
"depositContractAddress": "0xb97036A26259B7147018913bD58a774cf91acf25",
95-
"blobSchedule": {
96-
"cancun": {
97-
"target": 1,
98-
"max": 2,
99-
"baseFeeUpdateFraction": "0x10fafa"
100-
},
101-
"prague": {
95+
"blobSchedule": [
96+
{
97+
"timestamp": "0x65ba8e4c",
10298
"target": 1,
10399
"max": 2,
104100
"baseFeeUpdateFraction": "0x10fafa"
105101
}
106-
}
102+
]
107103
},
108104
"genesis": {
109105
"seal": {

src/Nethermind/Chains/foundation.json

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -200,18 +200,15 @@
200200
"eip7623TransitionTimestamp": "0x681b3057",
201201
"depositContractAddress": "0x00000000219ab540356cbb839cbe05303d7705fa",
202202
"terminalTotalDifficulty": "C70D808A128D7380000",
203-
"blobSchedule": {
204-
"cancun": {
205-
"target": 3,
206-
"max": 6,
207-
"baseFeeUpdateFraction": "0x32f0ed"
208-
},
209-
"prague": {
203+
"blobSchedule": [
204+
{
205+
"name": "prague",
206+
"timestamp": "0x681b3057",
210207
"target": 6,
211208
"max": 9,
212-
"baseFeeUpdateFraction": "0x4c6964"
209+
"baseFeeUpdateFraction": "0x4c6964"
213210
}
214-
}
211+
]
215212
},
216213
"genesis": {
217214
"seal": {

src/Nethermind/Chains/gnosis.json

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,18 +99,14 @@
9999
"eip7702TransitionTimestamp": "0x68122dbc",
100100
"eip4844FeeCollectorTransitionTimestamp": "0x68122dbc",
101101
"depositContractAddress": "0x0B98057eA310F4d31F2a452B414647007d1645d9",
102-
"blobSchedule": {
103-
"cancun": {
104-
"target": 1,
105-
"max": 2,
106-
"baseFeeUpdateFraction": "0x10fafa"
107-
},
108-
"prague": {
102+
"blobSchedule": [
103+
{
104+
"timestamp": "0x65ef4dbc",
109105
"target": 1,
110106
"max": 2,
111107
"baseFeeUpdateFraction": "0x10fafa"
112108
}
113-
}
109+
]
114110
},
115111
"genesis": {
116112
"seal": {

src/Nethermind/Chains/holesky.json

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,18 +61,14 @@
6161
"minGasLimit": "0x1388",
6262
"registrar": "0x0000000000000000000000000000000000000000",
6363
"MergeForkIdTransition": "0x0",
64-
"blobSchedule": {
65-
"cancun": {
66-
"target": 3,
67-
"max": 6,
68-
"baseFeeUpdateFraction": "0x32f0ed"
69-
},
70-
"prague": {
64+
"blobSchedule": [
65+
{
66+
"timestamp": "0x67BCEAC0",
7167
"target": 6,
7268
"max": 9,
73-
"baseFeeUpdateFraction": "0x4c6964"
69+
"baseFeeUpdateFraction": "0x4c6964"
7470
}
75-
}
71+
]
7672
},
7773
"genesis": {
7874
"seal": {

src/Nethermind/Chains/hoodi.json

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,14 @@
5454
"eip1153TransitionTimestamp": "0x0",
5555
"eip5656TransitionTimestamp": "0x0",
5656
"eip6780TransitionTimestamp": "0x0",
57-
"blobSchedule": {
58-
"cancun": {
59-
"target": 3,
60-
"max": 6,
61-
"baseFeeUpdateFraction": 3338477
62-
},
63-
"prague": {
57+
"blobSchedule": [
58+
{
59+
"timestamp": "0x67e41118",
6460
"target": 6,
6561
"max": 9,
66-
"baseFeeUpdateFraction": 5007716
62+
"baseFeeUpdateFraction": "0x4c6964"
6763
}
68-
},
64+
],
6965
"depositContractAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa",
7066
"eip2537TransitionTimestamp": "0x67e41118",
7167
"eip2935TransitionTimestamp": "0x67e41118",

src/Nethermind/Chains/sepolia.json

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,14 @@
7575
"eip7623TransitionTimestamp": "0x67C7FD60",
7676
"eip7702TransitionTimestamp": "0x67C7FD60",
7777
"depositContractAddress": "0x7f02c3e3c98b133055b8b348b2ac625669ed295d",
78-
"blobSchedule": {
79-
"cancun": {
80-
"target": 3,
81-
"max": 6,
82-
"baseFeeUpdateFraction": "0x32f0ed"
83-
},
84-
"prague": {
78+
"blobSchedule": [
79+
{
80+
"timestamp": "0x67C7FD60",
8581
"target": 6,
8682
"max": 9,
87-
"baseFeeUpdateFraction": "0x4c6964"
83+
"baseFeeUpdateFraction": "0x4c6964"
8884
}
89-
}
85+
]
9086
},
9187
"genesis": {
9288
"seal": {
@@ -107,27 +103,27 @@
107103
"enode://0d5f5a5119236fa5f9e1c138e9658775e791cf3a30c461e0316d01dc910405cc375e0a6d18042b34d3c409238ecffb7fdcfa1513b0921b89b702f474a1d7425c@34.135.219.85:30303",
108104
"enode://9246d00bc8fd1742e5ad2428b80fc4dc45d786283e05ef6edbd9002cbc335d40998444732fbe921cb88e1d2c73d1b1de53bae6a2237996e9bfe14f871baf7066@18.168.182.86:30303",
109105
"enode://ec66ddcf1a974950bd4c782789a7e04f8aa7110a72569b6e65fcd51e937e74eed303b1ea734e4d19cfaec9fbff9b6ee65bf31dcb50ba79acce9dd63a6aca61c7@52.14.151.177:30303",
110-
"enode://4e5e92199ee224a01932a377160aa432f31d0b351f84ab413a8e0a42f4f36476f8fb1cbe914af0d9aef0d51665c214cf653c651c4bbd9d5550a934f241f1682b@138.197.51.181:30303",
111-
"enode://143e11fb766781d22d92a2e33f8f104cddae4411a122295ed1fdb6638de96a6ce65f5b7c964ba3763bba27961738fef7d3ecc739268f3e5e771fb4c87b6234ba@146.190.1.103:30303",
112-
"enode://8b61dc2d06c3f96fddcbebb0efb29d60d3598650275dc469c22229d3e5620369b0d3dedafd929835fe7f489618f19f456fe7c0df572bf2d914a9f4e006f783a9@170.64.250.88:30303",
113-
"enode://10d62eff032205fcef19497f35ca8477bea0eadfff6d769a147e895d8b2b8f8ae6341630c645c30f5df6e67547c03494ced3d9c5764e8622a26587b083b028e8@139.59.49.206:30303",
114-
"enode://9e9492e2e8836114cc75f5b929784f4f46c324ad01daf87d956f98b3b6c5fcba95524d6e5cf9861dc96a2c8a171ea7105bb554a197455058de185fa870970c7c@138.68.123.152:30303"
106+
"enode://4e5e92199ee224a01932a377160aa432f31d0b351f84ab413a8e0a42f4f36476f8fb1cbe914af0d9aef0d51665c214cf653c651c4bbd9d5550a934f241f1682b@138.197.51.181:30303",
107+
"enode://143e11fb766781d22d92a2e33f8f104cddae4411a122295ed1fdb6638de96a6ce65f5b7c964ba3763bba27961738fef7d3ecc739268f3e5e771fb4c87b6234ba@146.190.1.103:30303",
108+
"enode://8b61dc2d06c3f96fddcbebb0efb29d60d3598650275dc469c22229d3e5620369b0d3dedafd929835fe7f489618f19f456fe7c0df572bf2d914a9f4e006f783a9@170.64.250.88:30303",
109+
"enode://10d62eff032205fcef19497f35ca8477bea0eadfff6d769a147e895d8b2b8f8ae6341630c645c30f5df6e67547c03494ced3d9c5764e8622a26587b083b028e8@139.59.49.206:30303",
110+
"enode://9e9492e2e8836114cc75f5b929784f4f46c324ad01daf87d956f98b3b6c5fcba95524d6e5cf9861dc96a2c8a171ea7105bb554a197455058de185fa870970c7c@138.68.123.152:30303"
115111
],
116112
"accounts": {
117-
"0xa2A6d93439144FFE4D27c9E088dCD8b783946263": {"balance": "0xD3C21BCECCEDA1000000"},
118-
"0xBc11295936Aa79d594139de1B2e12629414F3BDB": {"balance": "0xD3C21BCECCEDA1000000"},
119-
"0x7cF5b79bfe291A67AB02b393E456cCc4c266F753": {"balance": "0xD3C21BCECCEDA1000000"},
120-
"0xaaec86394441f915bce3e6ab399977e9906f3b69": {"balance": "0xD3C21BCECCEDA1000000"},
121-
"0xF47CaE1CF79ca6758Bfc787dbD21E6bdBe7112B8": {"balance": "0xD3C21BCECCEDA1000000"},
122-
"0xd7eDDB78ED295B3C9629240E8924fb8D8874ddD8": {"balance": "0xD3C21BCECCEDA1000000"},
123-
"0x8b7F0977Bb4f0fBE7076FA22bC24acA043583F5e": {"balance": "0xD3C21BCECCEDA1000000"},
124-
"0xe2e2659028143784d557bcec6ff3a0721048880a": {"balance": "0xD3C21BCECCEDA1000000"},
125-
"0xd9a5179f091d85051d3c982785efd1455cec8699": {"balance": "0xD3C21BCECCEDA1000000"},
126-
"0xbeef32ca5b9a198d27B4e02F4c70439fE60356Cf": {"balance": "0xD3C21BCECCEDA1000000"},
127-
"0x0000006916a87b82333f4245046623b23794c65c": {"balance": "0x84595161401484A000000"},
128-
"0xb21c33de1fab3fa15499c62b59fe0cc3250020d1": {"balance": "0x52B7D2DCC80CD2E4000000"},
129-
"0x10F5d45854e038071485AC9e402308cF80D2d2fE": {"balance": "0x52B7D2DCC80CD2E4000000"},
130-
"0xd7d76c58b3a519e9fA6Cc4D22dC017259BC49F1E": {"balance": "0x52B7D2DCC80CD2E4000000"},
131-
"0x799D329e5f583419167cD722962485926E338F4a": {"balance": "0xDE0B6B3A7640000"}
113+
"0xa2A6d93439144FFE4D27c9E088dCD8b783946263": { "balance": "0xD3C21BCECCEDA1000000" },
114+
"0xBc11295936Aa79d594139de1B2e12629414F3BDB": { "balance": "0xD3C21BCECCEDA1000000" },
115+
"0x7cF5b79bfe291A67AB02b393E456cCc4c266F753": { "balance": "0xD3C21BCECCEDA1000000" },
116+
"0xaaec86394441f915bce3e6ab399977e9906f3b69": { "balance": "0xD3C21BCECCEDA1000000" },
117+
"0xF47CaE1CF79ca6758Bfc787dbD21E6bdBe7112B8": { "balance": "0xD3C21BCECCEDA1000000" },
118+
"0xd7eDDB78ED295B3C9629240E8924fb8D8874ddD8": { "balance": "0xD3C21BCECCEDA1000000" },
119+
"0x8b7F0977Bb4f0fBE7076FA22bC24acA043583F5e": { "balance": "0xD3C21BCECCEDA1000000" },
120+
"0xe2e2659028143784d557bcec6ff3a0721048880a": { "balance": "0xD3C21BCECCEDA1000000" },
121+
"0xd9a5179f091d85051d3c982785efd1455cec8699": { "balance": "0xD3C21BCECCEDA1000000" },
122+
"0xbeef32ca5b9a198d27B4e02F4c70439fE60356Cf": { "balance": "0xD3C21BCECCEDA1000000" },
123+
"0x0000006916a87b82333f4245046623b23794c65c": { "balance": "0x84595161401484A000000" },
124+
"0xb21c33de1fab3fa15499c62b59fe0cc3250020d1": { "balance": "0x52B7D2DCC80CD2E4000000" },
125+
"0x10F5d45854e038071485AC9e402308cF80D2d2fE": { "balance": "0x52B7D2DCC80CD2E4000000" },
126+
"0xd7d76c58b3a519e9fA6Cc4D22dC017259BC49F1E": { "balance": "0x52B7D2DCC80CD2E4000000" },
127+
"0x799D329e5f583419167cD722962485926E338F4a": { "balance": "0xDE0B6B3A7640000" }
132128
}
133129
}

src/Nethermind/Nethermind.Core/Eip4844Constants.cs

Lines changed: 13 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 Nethermind.Int256;
@@ -18,6 +18,18 @@ public class Eip4844Constants
1818
/// <remarks>Defaults to 131072.</remarks>
1919
public const ulong GasPerBlob = 131072;
2020

21+
/// <summary>
22+
/// Gets the <c>TARGET_BLOB_GAS_PER_BLOCK / GAS_PER_BLOB</c> parameter.
23+
/// </summary>
24+
/// <remarks>Defaults to 3.</remarks>
25+
public const ulong DefaultTargetBlobCount = 3;
26+
27+
/// <summary>
28+
/// Gets the <c>MAX_BLOB_GAS_PER_BLOCK / GAS_PER_BLOB</c> parameter.
29+
/// </summary>
30+
/// <remarks>Defaults to 6.</remarks>
31+
public const ulong DefaultMaxBlobCount = 6;
32+
2133
/// <summary>
2234
/// Gets the <c>BLOB_GASPRICE_UPDATE_FRACTION</c> parameter.
2335
/// </summary>

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

Lines changed: 84 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
1-
// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited
1+
// SPDX-FileCopyrightText: 2025 Demerzel Solutions Limited
22
// SPDX-License-Identifier: LGPL-3.0-only
33

4-
using System;
5-
using System.Collections;
6-
using System.Collections.Generic;
7-
using System.IO;
8-
using System.Linq;
9-
using System.Reflection;
104
using FluentAssertions;
115
using Nethermind.Config;
126
using Nethermind.Consensus.AuRa.Config;
@@ -19,8 +13,15 @@
1913
using Nethermind.Logging;
2014
using Nethermind.Serialization.Json;
2115
using Nethermind.Specs.ChainSpecStyle;
16+
using Nethermind.Specs.ChainSpecStyle.Json;
2217
using NSubstitute;
2318
using NUnit.Framework;
19+
using System;
20+
using System.Collections;
21+
using System.Collections.Generic;
22+
using System.IO;
23+
using System.Linq;
24+
using System.Reflection;
2425

2526
namespace Nethermind.Specs.Test.ChainSpecStyle;
2627

@@ -45,11 +46,11 @@ public void Setup()
4546
[TestCase(4, 4673ul, true)]
4647
[TestCase(5, 4680ul, true)]
4748
[NonParallelizable]
48-
public void Timstamp_activation_equal_to_genesis_timestamp_loads_correctly(long blockNumber, ulong? timestamp, bool isEip3855Enabled)
49+
public void Timestamp_activation_equal_to_genesis_timestamp_loads_correctly(long blockNumber, ulong? timestamp, bool isEip3855Enabled)
4950
{
5051
var loader = new ChainSpecFileLoader(new EthereumJsonSerializer(), LimboTraceLogger.Instance);
5152
string path = Path.Combine(TestContext.CurrentContext.WorkDirectory,
52-
$"../../../../{Assembly.GetExecutingAssembly().GetName().Name}/Specs/Timstamp_activation_equal_to_genesis_timestamp_test.json");
53+
$"../../../../{Assembly.GetExecutingAssembly().GetName().Name}/Specs/Timestamp_activation_equal_to_genesis_timestamp_test.json");
5354
ChainSpec chainSpec = loader.LoadEmbeddedOrFromFile(path);
5455
chainSpec.Parameters.Eip2537Transition.Should().BeNull();
5556
ILogger logger = new(Substitute.ForPartsOf<LimboTraceLogger>());
@@ -821,6 +822,80 @@ public static IEnumerable BlockNumbersAndTimestampsNearForkActivations
821822
}
822823
}
823824

825+
[TestCaseSource(nameof(BlobScheduleActivationsTestCaseSource))]
826+
public void Test_BlobSchedule_IsApplied_AlongWithForkSchedule(
827+
ulong eip4844Timestamp,
828+
ulong eip7002Timestamp,
829+
BlobScheduleSettings[] blobScheduleSettings,
830+
ulong[] expectedActivationSettings)
831+
{
832+
ChainSpecBasedSpecProvider provider = new(new ChainSpec
833+
{
834+
Parameters = new ChainParameters
835+
{
836+
Eip4844TransitionTimestamp = eip4844Timestamp,
837+
Eip7002TransitionTimestamp = eip7002Timestamp,
838+
BlobSchedule = [.. blobScheduleSettings]
839+
},
840+
EngineChainSpecParametersProvider = Substitute.For<IChainSpecParametersProvider>()
841+
});
842+
843+
IReleaseSpec spec = provider.GenesisSpec;
844+
Assert.That(spec.MaxBlobCount, Is.EqualTo(expectedActivationSettings[0]));
845+
846+
expectedActivationSettings = expectedActivationSettings[1..];
847+
Assert.That(expectedActivationSettings, Has.Length.EqualTo(provider.TransitionActivations.Length));
848+
849+
for (int i = 0; i < expectedActivationSettings.Length; i++)
850+
{
851+
spec = provider.GetSpec(ForkActivation.TimestampOnly(provider.TransitionActivations[i].Timestamp!.Value));
852+
Assert.That(spec.MaxBlobCount, Is.EqualTo(expectedActivationSettings[i]));
853+
}
854+
}
855+
856+
public static IEnumerable BlobScheduleActivationsTestCaseSource
857+
{
858+
get
859+
{
860+
const int NoneAllowed = 0;
861+
const int Default = 6;
862+
static TestCaseData MakeTestCase(string testName, int eip4844Timestamp, int eip7002Timestamp, (int timestamp, int max)[] settings, ulong[] expectedActivationSettings)
863+
=> new([
864+
(ulong)eip4844Timestamp,
865+
(ulong)eip7002Timestamp,
866+
settings.Select(s => new BlobScheduleSettings { Timestamp = (ulong)s.timestamp, Max = (ulong)s.max, Target = (ulong)s.max, BaseFeeUpdateFraction = (ulong)s.max }).ToArray(),
867+
expectedActivationSettings])
868+
{ TestName = $"BlobScheduleActivations: {testName}" };
869+
870+
yield return MakeTestCase("Default", 1, 2, [], [NoneAllowed, Default, Default]);
871+
872+
yield return MakeTestCase("Both activate not at genesis", 1, 1, [], [NoneAllowed, Default]);
873+
874+
yield return MakeTestCase("Named only from genesis", 0, 0, [], [Default]);
875+
876+
yield return MakeTestCase("Default from genesis + BPO", 0, 0, [(1, 7)], [Default, 7]);
877+
878+
yield return MakeTestCase("BPO from genesis", 0, 0, [(0, 7)], [7]);
879+
880+
yield return MakeTestCase("A named fork has no change in settings", 1, 2, [(3, 10)], [NoneAllowed, Default, Default, 10]);
881+
882+
yield return MakeTestCase("Cancun and Prague have default settings, but a between bpo changes it", 0, 2, [(1, 10)], [Default, 10, 10]);
883+
884+
yield return MakeTestCase("Multiple BPOs", 0, 0, [
885+
(1, 5),
886+
(2, 6),
887+
(3, 10),
888+
(4, 12),
889+
(5, 10),
890+
(6, 10)],
891+
[Default, 5, 6, 10, 12, 10, 10]);
892+
893+
yield return MakeTestCase("BPOs match named forks", 1, 2, [(1, 10), (2, 3)], [NoneAllowed, 10, 3]);
894+
895+
yield return MakeTestCase("BPO timestamp matches genesis, but not any other fork", 0, 2, [(0, 10), (1, 11)], [10, 11, 11]);
896+
}
897+
}
898+
824899
private static IEnumerable<ulong> GetTransitionTimestamps(ChainParameters parameters) => parameters.GetType()
825900
.Properties()
826901
.Where(p => p.Name.EndsWith("TransitionTimestamp", StringComparison.Ordinal))

src/Nethermind/Nethermind.Specs.Test/Specs/holesky_missing_deposit_contract.json

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,14 @@
6060
"minGasLimit": "0x1388",
6161
"registrar": "0x0000000000000000000000000000000000000000",
6262
"MergeForkIdTransition": "0x0",
63-
"blobSchedule": {
64-
"cancun": {
65-
"target": 3,
66-
"max": 6,
67-
"baseFeeUpdateFraction": "0x32f0ed"
68-
},
69-
"prague": {
63+
"blobSchedule": [
64+
{
65+
"timestamp": "0x67BCEAC0",
7066
"target": 6,
7167
"max": 9,
72-
"baseFeeUpdateFraction": "0x4c6964"
68+
"baseFeeUpdateFraction": "0x4c6964"
7369
}
74-
}
70+
]
7571
},
7672
"genesis": {
7773
"seal": {

0 commit comments

Comments
 (0)