@@ -2,13 +2,13 @@ use crate::tx_signer::Signer;
22use alloy_eips:: { eip2718:: Encodable2718 , BlockNumberOrTag } ;
33use alloy_primitives:: { address, hex, Address , Bytes , TxKind , B256 , U256 } ;
44use alloy_rpc_types_engine:: {
5- ExecutionPayloadV1 , ExecutionPayloadV2 , ExecutionPayloadV3 , PayloadAttributes ,
6- PayloadStatusEnum ,
5+ ExecutionPayload , ExecutionPayloadV1 , ExecutionPayloadV2 , ExecutionPayloadV3 ,
6+ PayloadAttributes , PayloadStatusEnum ,
77} ;
88use alloy_rpc_types_eth:: Block ;
99use op_alloy_consensus:: { OpTypedTransaction , TxDeposit } ;
1010use op_alloy_rpc_types_engine:: OpPayloadAttributes ;
11- use rollup_boost:: { Flashblocks , FlashblocksService } ;
11+ use rollup_boost:: { Flashblocks , FlashblocksService , OpExecutionPayloadEnvelope , Version } ;
1212
1313use super :: apis:: EngineApi ;
1414
@@ -236,15 +236,24 @@ impl BlockGenerator {
236236 }
237237
238238 let payload = if let Some ( flashblocks_service) = & self . flashblocks_service {
239- flashblocks_service. get_best_payload ( ) . await ?. unwrap ( )
239+ flashblocks_service
240+ . get_best_payload ( Version :: V3 )
241+ . await ?
242+ . unwrap ( )
240243 } else {
241- self . engine_api . get_payload_v3 ( payload_id) . await ?
244+ OpExecutionPayloadEnvelope :: V3 ( self . engine_api . get_payload_v3 ( payload_id) . await ?)
245+ } ;
246+
247+ let execution_payload = if let ExecutionPayload :: V3 ( execution_payload) = payload. into ( ) {
248+ execution_payload
249+ } else {
250+ return Err ( eyre:: eyre!( "execution_payload should be V3" ) ) ;
242251 } ;
243252
244253 // Validate with builder node
245254 let validation_status = self
246255 . engine_api
247- . new_payload ( payload . execution_payload . clone ( ) , vec ! [ ] , B256 :: ZERO )
256+ . new_payload ( execution_payload. clone ( ) , vec ! [ ] , B256 :: ZERO )
248257 . await ?;
249258
250259 if validation_status. status != PayloadStatusEnum :: Valid {
@@ -254,19 +263,15 @@ impl BlockGenerator {
254263 // Validate with validation node if present
255264 if let Some ( validation_api) = & self . validation_api {
256265 let validation_status = validation_api
257- . new_payload ( payload . execution_payload . clone ( ) , vec ! [ ] , B256 :: ZERO )
266+ . new_payload ( execution_payload. clone ( ) , vec ! [ ] , B256 :: ZERO )
258267 . await ?;
259268
260269 if validation_status. status != PayloadStatusEnum :: Valid {
261270 return Err ( eyre:: eyre!( "Invalid validation status from validator" ) ) ;
262271 }
263272 }
264273
265- let new_block_hash = payload
266- . execution_payload
267- . payload_inner
268- . payload_inner
269- . block_hash ;
274+ let new_block_hash = execution_payload. payload_inner . payload_inner . block_hash ;
270275
271276 // Update forkchoice on builder
272277 self . engine_api
@@ -282,7 +287,7 @@ impl BlockGenerator {
282287
283288 // Update internal state
284289 self . latest_hash = new_block_hash;
285- self . timestamp = payload . execution_payload . timestamp ( ) ;
290+ self . timestamp = execution_payload. timestamp ( ) ;
286291
287292 Ok ( new_block_hash)
288293 }
0 commit comments