@@ -111,6 +111,9 @@ class FixtureHeader(CamelModel):
111111 None
112112 )
113113 requests_hash : Annotated [Hash , HeaderForkRequirement ("requests" )] | None = Field (None )
114+ target_blob_count : Annotated [
115+ ZeroPaddedHexNumber , HeaderForkRequirement ("target_blob_count" )
116+ ] | None = Field (None )
114117
115118 fork : Fork | None = Field (None , exclude = True )
116119
@@ -199,6 +202,8 @@ class FixtureExecutionPayload(CamelModel):
199202 blob_gas_used : HexNumber | None = Field (None )
200203 excess_blob_gas : HexNumber | None = Field (None )
201204
205+ target_blob_count : HexNumber | None = Field (None )
206+
202207 block_hash : Hash
203208
204209 transactions : List [Bytes ]
@@ -224,7 +229,7 @@ def from_fixture_header(
224229
225230EngineNewPayloadV1Parameters = Tuple [FixtureExecutionPayload ]
226231EngineNewPayloadV3Parameters = Tuple [FixtureExecutionPayload , List [Hash ], Hash ]
227- EngineNewPayloadV4Parameters = Tuple [FixtureExecutionPayload , List [Hash ], Hash , List [Bytes ]]
232+ EngineNewPayloadV4Parameters = Tuple [FixtureExecutionPayload , List [Hash ], Hash , List [Bytes ], HexNumber ]
228233
229234# Important: We check EngineNewPayloadV3Parameters first as it has more fields, and pydantic
230235# has a weird behavior when the smaller tuple is checked first.
@@ -286,32 +291,34 @@ def from_fixture_header(
286291 transactions = transactions ,
287292 withdrawals = withdrawals ,
288293 )
289- params : EngineNewPayloadParameters
290- if (
291- fork .engine_new_payload_requests (header .number , header .timestamp )
292- and requests is not None
293- ):
294- parent_beacon_block_root = header .parent_beacon_block_root
295- assert parent_beacon_block_root is not None
296- params = (
297- execution_payload ,
298- Transaction .list_blob_versioned_hashes (transactions ),
299- parent_beacon_block_root ,
300- requests ,
301- )
302- elif fork .engine_new_payload_blob_hashes (header .number , header .timestamp ):
303- parent_beacon_block_root = header .parent_beacon_block_root
304- assert parent_beacon_block_root is not None
305- params = (
306- execution_payload ,
307- Transaction .list_blob_versioned_hashes (transactions ),
308- parent_beacon_block_root ,
309- )
310- else :
311- params = (execution_payload ,)
312294
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 )
313320 new_payload = cls (
314- params = params ,
321+ params = payload_params ,
315322 new_payload_version = new_payload_version ,
316323 forkchoice_updated_version = forkchoice_updated_version ,
317324 ** kwargs ,
0 commit comments