Skip to content

Commit 08eea93

Browse files
committed
chore: fixes for new payload v4.
1 parent 036972a commit 08eea93

File tree

3 files changed

+38
-28
lines changed

3 files changed

+38
-28
lines changed

src/ethereum_test_fixtures/blockchain.py

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ def from_fixture_header(
229229

230230
EngineNewPayloadV1Parameters = Tuple[FixtureExecutionPayload]
231231
EngineNewPayloadV3Parameters = Tuple[FixtureExecutionPayload, List[Hash], Hash]
232-
EngineNewPayloadV4Parameters = Tuple[FixtureExecutionPayload, List[Hash], Hash, List[Bytes]]
232+
EngineNewPayloadV4Parameters = Tuple[FixtureExecutionPayload, List[Hash], Hash, List[Bytes], HexNumber]
233233

234234
# Important: We check EngineNewPayloadV3Parameters first as it has more fields, and pydantic
235235
# has a weird behavior when the smaller tuple is checked first.
@@ -291,32 +291,34 @@ def from_fixture_header(
291291
transactions=transactions,
292292
withdrawals=withdrawals,
293293
)
294-
params: EngineNewPayloadParameters
295-
if (
296-
fork.engine_new_payload_requests(header.number, header.timestamp)
297-
and requests is not None
298-
):
299-
parent_beacon_block_root = header.parent_beacon_block_root
300-
assert parent_beacon_block_root is not None
301-
params = (
302-
execution_payload,
303-
Transaction.list_blob_versioned_hashes(transactions),
304-
parent_beacon_block_root,
305-
requests,
306-
)
307-
elif fork.engine_new_payload_blob_hashes(header.number, header.timestamp):
308-
parent_beacon_block_root = header.parent_beacon_block_root
309-
assert parent_beacon_block_root is not None
310-
params = (
311-
execution_payload,
312-
Transaction.list_blob_versioned_hashes(transactions),
313-
parent_beacon_block_root,
314-
)
315-
else:
316-
params = (execution_payload,)
317294

295+
params: List[Any] = [execution_payload]
296+
if fork.engine_new_payload_blob_hashes(header.number, header.timestamp):
297+
blob_hashes = Transaction.list_blob_versioned_hashes(transactions)
298+
if blob_hashes is None:
299+
raise ValueError(f"Blob hashes are required for ${fork}.")
300+
params.append(blob_hashes)
301+
302+
if fork.engine_new_payload_beacon_root(header.number, header.timestamp):
303+
parent_beacon_block_root = header.parent_beacon_block_root
304+
if parent_beacon_block_root is None:
305+
raise ValueError(f"Parent beacon block root is required for ${fork}.")
306+
params.append(parent_beacon_block_root)
307+
308+
if fork.engine_new_payload_requests(header.number, header.timestamp):
309+
if requests is None:
310+
raise ValueError(f"Requests are required for ${fork}.")
311+
params.append(requests)
312+
313+
if fork.engine_new_payload_target_blob_count(header.number, header.timestamp):
314+
target_blob_count = header.target_blob_count
315+
if target_blob_count is None:
316+
raise ValueError(f"Target blob count is required for ${fork}.")
317+
params.append(target_blob_count)
318+
319+
payload_params: EngineNewPayloadParameters = tuple(params)
318320
new_payload = cls(
319-
params=params,
321+
params=payload_params,
320322
new_payload_version=new_payload_version,
321323
forkchoice_updated_version=forkchoice_updated_version,
322324
**kwargs,

src/ethereum_test_forks/base_fork.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,15 @@ def engine_new_payload_beacon_root(cls, block_number: int = 0, timestamp: int =
281281
@abstractmethod
282282
def engine_new_payload_requests(cls, block_number: int = 0, timestamp: int = 0) -> bool:
283283
"""
284-
Returns true if the engine api version requires new payload calls to include requests.
284+
returns true if the engine api version requires new payload calls to include requests.
285+
"""
286+
pass
287+
288+
@classmethod
289+
@abstractmethod
290+
def engine_new_payload_target_blob_count(cls, block_number: int = 0, timestamp: int = 0) -> bool:
291+
"""
292+
returns true if the engine api version requires new payload calls to include target blob count.
285293
"""
286294
pass
287295

src/ethereum_test_forks/forks/forks.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -961,9 +961,9 @@ def engine_new_payload_requests(cls, block_number: int = 0, timestamp: int = 0)
961961
return True
962962

963963
@classmethod
964-
def engine_new_payload_blob_hashes(cls, block_number: int = 0, timestamp: int = 0) -> bool:
964+
def engine_new_payload_target_blob_count(cls, block_number: int = 0, timestamp: int = 0) -> bool:
965965
"""
966-
Starting at Prague, new payload directives must contain requests as parameter.
966+
Starting at Prague, new payloads include the target blob count as a parameter.
967967
"""
968968
return True
969969

0 commit comments

Comments
 (0)