@@ -11,8 +11,9 @@ use alloy_primitives::{Address, B256, U256};
1111use alloy_rlp:: Encodable ;
1212use alloy_rpc_types_engine:: {
1313 BlobsBundleV1 , BlobsBundleV2 , ExecutionPayloadEnvelopeV2 , ExecutionPayloadEnvelopeV3 ,
14- ExecutionPayloadEnvelopeV4 , ExecutionPayloadEnvelopeV5 , ExecutionPayloadFieldV2 ,
15- ExecutionPayloadV1 , ExecutionPayloadV3 , PayloadAttributes , PayloadId ,
14+ ExecutionPayloadEnvelopeV4 , ExecutionPayloadEnvelopeV5 , ExecutionPayloadEnvelopeV6 ,
15+ ExecutionPayloadFieldV2 , ExecutionPayloadV1 , ExecutionPayloadV3 , ExecutionPayloadV4 ,
16+ PayloadAttributes , PayloadId ,
1617} ;
1718use core:: convert:: Infallible ;
1819use reth_ethereum_primitives:: { Block , EthPrimitives } ;
@@ -156,6 +157,38 @@ impl EthBuiltPayload {
156157 execution_requests : requests. unwrap_or_default ( ) ,
157158 } )
158159 }
160+
161+ /// Try converting built payload into [`ExecutionPayloadEnvelopeV6`].
162+ pub fn try_into_v6 ( self ) -> Result < ExecutionPayloadEnvelopeV6 , BuiltPayloadConversionError > {
163+ let Self { block, fees, sidecars, requests, .. } = self ;
164+
165+ let blobs_bundle = match sidecars {
166+ BlobSidecars :: Empty => BlobsBundleV2 :: empty ( ) ,
167+ BlobSidecars :: Eip7594 ( sidecars) => BlobsBundleV2 :: from ( sidecars) ,
168+ BlobSidecars :: Eip4844 ( _) => {
169+ return Err ( BuiltPayloadConversionError :: UnexpectedEip4844Sidecars )
170+ }
171+ } ;
172+
173+ Ok ( ExecutionPayloadEnvelopeV6 {
174+ execution_payload : ExecutionPayloadV4 :: from_block_unchecked (
175+ block. hash ( ) ,
176+ & Arc :: unwrap_or_clone ( block) . into_block ( ) ,
177+ ) ,
178+ block_value : fees,
179+ // From the engine API spec:
180+ //
181+ // > Client software **MAY** use any heuristics to decide whether to set
182+ // `shouldOverrideBuilder` flag or not. If client software does not implement any
183+ // heuristic this flag **SHOULD** be set to `false`.
184+ //
185+ // Spec:
186+ // <https://github.com/ethereum/execution-apis/blob/fe8e13c288c592ec154ce25c534e26cb7ce0530d/src/engine/cancun.md#specification-2>
187+ should_override_builder : false ,
188+ blobs_bundle,
189+ execution_requests : requests. unwrap_or_default ( ) ,
190+ } )
191+ }
159192}
160193
161194impl BuiltPayload for EthBuiltPayload {
@@ -223,6 +256,14 @@ impl TryFrom<EthBuiltPayload> for ExecutionPayloadEnvelopeV5 {
223256 }
224257}
225258
259+ impl TryFrom < EthBuiltPayload > for ExecutionPayloadEnvelopeV6 {
260+ type Error = BuiltPayloadConversionError ;
261+
262+ fn try_from ( value : EthBuiltPayload ) -> Result < Self , Self :: Error > {
263+ value. try_into_v6 ( )
264+ }
265+ }
266+
226267/// An enum representing blob transaction sidecars belonging to [`EthBuiltPayload`].
227268#[ derive( Clone , Default , Debug ) ]
228269pub enum BlobSidecars {
0 commit comments