Skip to content

Commit be21b25

Browse files
committed
Merge branch 'approach1-bal-extra' of https://github.com/Rimeeeeee/reth into approach1-bal-extra
2 parents 455f06e + 3205700 commit be21b25

File tree

7 files changed

+71
-12
lines changed

7 files changed

+71
-12
lines changed

crates/engine/primitives/src/lib.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ pub trait EngineTypes:
6161
+ TryInto<Self::ExecutionPayloadEnvelopeV2>
6262
+ TryInto<Self::ExecutionPayloadEnvelopeV3>
6363
+ TryInto<Self::ExecutionPayloadEnvelopeV4>
64-
+ TryInto<Self::ExecutionPayloadEnvelopeV5>,
64+
+ TryInto<Self::ExecutionPayloadEnvelopeV5>
65+
+ TryInto<Self::ExecutionPayloadEnvelopeV6>,
6566
> + DeserializeOwned
6667
+ Serialize
6768
{
@@ -105,6 +106,14 @@ pub trait EngineTypes:
105106
+ Send
106107
+ Sync
107108
+ 'static;
109+
/// Execution Payload V6 envelope type.
110+
type ExecutionPayloadEnvelopeV6: DeserializeOwned
111+
+ Serialize
112+
+ Clone
113+
+ Unpin
114+
+ Send
115+
+ Sync
116+
+ 'static;
108117
}
109118

110119
/// Type that validates the payloads processed by the engine API.

crates/ethereum/engine-primitives/src/lib.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ pub use payload::{payload_id, BlobSidecars, EthBuiltPayload, EthPayloadBuilderAt
1717
mod error;
1818
pub use error::*;
1919

20-
use alloy_rpc_types_engine::{ExecutionData, ExecutionPayload, ExecutionPayloadEnvelopeV5};
20+
use alloy_rpc_types_engine::{
21+
ExecutionData, ExecutionPayload, ExecutionPayloadEnvelopeV5, ExecutionPayloadEnvelopeV6,
22+
};
2123
pub use alloy_rpc_types_engine::{
2224
ExecutionPayloadEnvelopeV2, ExecutionPayloadEnvelopeV3, ExecutionPayloadEnvelopeV4,
2325
ExecutionPayloadV1, PayloadAttributes as EthPayloadAttributes,
@@ -66,13 +68,15 @@ where
6668
+ TryInto<ExecutionPayloadEnvelopeV2>
6769
+ TryInto<ExecutionPayloadEnvelopeV3>
6870
+ TryInto<ExecutionPayloadEnvelopeV4>
69-
+ TryInto<ExecutionPayloadEnvelopeV5>,
71+
+ TryInto<ExecutionPayloadEnvelopeV5>
72+
+ TryInto<ExecutionPayloadEnvelopeV6>,
7073
{
7174
type ExecutionPayloadEnvelopeV1 = ExecutionPayloadV1;
7275
type ExecutionPayloadEnvelopeV2 = ExecutionPayloadEnvelopeV2;
7376
type ExecutionPayloadEnvelopeV3 = ExecutionPayloadEnvelopeV3;
7477
type ExecutionPayloadEnvelopeV4 = ExecutionPayloadEnvelopeV4;
7578
type ExecutionPayloadEnvelopeV5 = ExecutionPayloadEnvelopeV5;
79+
type ExecutionPayloadEnvelopeV6 = ExecutionPayloadEnvelopeV6;
7680
}
7781

7882
/// A default payload type for [`EthEngineTypes`]

crates/ethereum/engine-primitives/src/payload.rs

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ use alloy_primitives::{Address, B256, U256};
1111
use alloy_rlp::Encodable;
1212
use 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
};
1718
use core::convert::Infallible;
1819
use 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

161194
impl 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)]
228269
pub enum BlobSidecars {

crates/optimism/node/src/engine.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ where
6262
type ExecutionPayloadEnvelopeV3 = OpExecutionPayloadEnvelopeV3;
6363
type ExecutionPayloadEnvelopeV4 = OpExecutionPayloadEnvelopeV4;
6464
type ExecutionPayloadEnvelopeV5 = OpExecutionPayloadEnvelopeV4;
65+
type ExecutionPayloadEnvelopeV6 = OpExecutionPayloadEnvelopeV4;
6566
}
6667

6768
/// Validator for Optimism engine API.

crates/rpc/rpc-engine-api/src/capabilities.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ pub const CAPABILITIES: &[&str] = &[
1111
"engine_getPayloadV3",
1212
"engine_getPayloadV4",
1313
"engine_getPayloadV5",
14+
"engine_getPayloadV6",
1415
"engine_newPayloadV1",
1516
"engine_newPayloadV2",
1617
"engine_newPayloadV3",
1718
"engine_newPayloadV4",
18-
//"engine_newPayloadV5",
19+
"engine_newPayloadV5",
1920
"engine_getPayloadBodiesByHashV1",
2021
"engine_getPayloadBodiesByRangeV1",
2122
"engine_getBlobsV1",

crates/rpc/rpc-engine-api/src/engine_api.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,11 @@ where
296296
PayloadT::ExecutionData,
297297
PayloadT::PayloadAttributes,
298298
>::from_execution_payload(&payload);
299-
self.inner
300-
.validator
301-
.validate_version_specific_fields(EngineApiMessageVersion::V4, payload_or_attrs)?;
299+
self.inner.validator.validate_version_specific_fields(
300+
EngineApiMessageVersion::V6,
301+
/* //todo */
302+
payload_or_attrs,
303+
)?;
302304

303305
Ok(self
304306
.inner
@@ -588,7 +590,7 @@ where
588590
pub async fn get_payload_v6(
589591
&self,
590592
payload_id: PayloadId,
591-
) -> EngineApiResult<EngineT::ExecutionPayloadEnvelopeV5> {
593+
) -> EngineApiResult<EngineT::ExecutionPayloadEnvelopeV6> {
592594
self.get_payload_inner(payload_id, EngineApiMessageVersion::V6).await
593595
}
594596

examples/custom-engine-types/src/main.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ use alloy_primitives::{Address, B256};
2323
use alloy_rpc_types::{
2424
engine::{
2525
ExecutionData, ExecutionPayloadEnvelopeV2, ExecutionPayloadEnvelopeV3,
26-
ExecutionPayloadEnvelopeV4, ExecutionPayloadEnvelopeV5, ExecutionPayloadV1,
27-
PayloadAttributes as EthPayloadAttributes, PayloadId,
26+
ExecutionPayloadEnvelopeV4, ExecutionPayloadEnvelopeV5, ExecutionPayloadEnvelopeV6,
27+
ExecutionPayloadV1, PayloadAttributes as EthPayloadAttributes, PayloadId,
2828
},
2929
Withdrawal,
3030
};
@@ -169,6 +169,7 @@ impl EngineTypes for CustomEngineTypes {
169169
type ExecutionPayloadEnvelopeV3 = ExecutionPayloadEnvelopeV3;
170170
type ExecutionPayloadEnvelopeV4 = ExecutionPayloadEnvelopeV4;
171171
type ExecutionPayloadEnvelopeV5 = ExecutionPayloadEnvelopeV5;
172+
type ExecutionPayloadEnvelopeV6 = ExecutionPayloadEnvelopeV6;
172173
}
173174

174175
/// Custom engine validator

0 commit comments

Comments
 (0)