From 96b108f25a0ea14a812c78efce523ba90fd3bb59 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Wed, 26 Jul 2023 18:39:38 +0200 Subject: [PATCH] feat: _V3 engine api skeletons (#3931) --- crates/rpc/rpc-api/src/engine.rs | 19 +++++++++++++++++++ crates/rpc/rpc-engine-api/src/engine_api.rs | 15 ++++++++++++++- .../rpc/rpc-types/src/eth/engine/payload.rs | 12 ++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/crates/rpc/rpc-api/src/engine.rs b/crates/rpc/rpc-api/src/engine.rs index 756cb5473c..65b5039965 100644 --- a/crates/rpc/rpc-api/src/engine.rs +++ b/crates/rpc/rpc-api/src/engine.rs @@ -21,6 +21,17 @@ pub trait EngineApi { #[method(name = "newPayloadV2")] async fn new_payload_v2(&self, payload: ExecutionPayload) -> RpcResult; + /// Post Cancun payload handler + /// + /// See also + #[method(name = "newPayloadV3")] + async fn new_payload_v3( + &self, + payload: ExecutionPayload, + versioned_hashes: Vec, + parent_beacon_block_root: H256, + ) -> RpcResult; + /// See also /// /// Caution: This should not accept the `withdrawals` field @@ -59,6 +70,14 @@ pub trait EngineApi { #[method(name = "getPayloadV2")] async fn get_payload_v2(&self, payload_id: PayloadId) -> RpcResult; + /// Post Cancun payload handler which also returns a blobs bundle. + /// + /// Returns the most recent version of the payload that is available in the corresponding + /// payload build process at the time of receiving this call. Note: + /// > Provider software MAY stop the corresponding build process after serving this call. + #[method(name = "getPayloadV3")] + async fn get_payload_v3(&self, payload_id: PayloadId) -> RpcResult; + /// See also #[method(name = "getPayloadBodiesByHashV1")] async fn get_payload_bodies_by_hash_v1( diff --git a/crates/rpc/rpc-engine-api/src/engine_api.rs b/crates/rpc/rpc-engine-api/src/engine_api.rs index 2a0581595f..5cb0b9beda 100644 --- a/crates/rpc/rpc-engine-api/src/engine_api.rs +++ b/crates/rpc/rpc-engine-api/src/engine_api.rs @@ -4,7 +4,7 @@ use jsonrpsee_core::RpcResult; use reth_beacon_consensus::BeaconConsensusEngineHandle; use reth_interfaces::consensus::ForkchoiceState; use reth_payload_builder::PayloadStore; -use reth_primitives::{BlockHash, BlockHashOrNumber, BlockNumber, ChainSpec, Hardfork, U64}; +use reth_primitives::{BlockHash, BlockHashOrNumber, BlockNumber, ChainSpec, Hardfork, H256, U64}; use reth_provider::{BlockReader, EvmEnvProvider, HeaderProvider, StateProviderFactory}; use reth_rpc_api::EngineApiServer; use reth_rpc_types::engine::{ @@ -355,6 +355,15 @@ where Ok(EngineApi::new_payload_v2(self, payload).await?) } + async fn new_payload_v3( + &self, + _payload: ExecutionPayload, + _versioned_hashes: Vec, + _parent_beacon_block_root: H256, + ) -> RpcResult { + Err(jsonrpsee_types::error::ErrorCode::MethodNotFound.into()) + } + /// Handler for `engine_forkchoiceUpdatedV1` /// See also /// @@ -409,6 +418,10 @@ where Ok(EngineApi::get_payload_v2(self, payload_id).await?) } + async fn get_payload_v3(&self, _payload_id: PayloadId) -> RpcResult { + Err(jsonrpsee_types::error::ErrorCode::MethodNotFound.into()) + } + /// Handler for `engine_getPayloadBodiesByHashV1` /// See also async fn get_payload_bodies_by_hash_v1( diff --git a/crates/rpc/rpc-types/src/eth/engine/payload.rs b/crates/rpc/rpc-types/src/eth/engine/payload.rs index 5b63e1b8cc..6085377bee 100644 --- a/crates/rpc/rpc-types/src/eth/engine/payload.rs +++ b/crates/rpc/rpc-types/src/eth/engine/payload.rs @@ -46,6 +46,10 @@ pub struct ExecutionPayloadEnvelope { /// The expected value to be received by the feeRecipient in wei #[serde(rename = "blockValue")] pub block_value: U256, + // + // // TODO(mattsse): for V3 + // #[serde(rename = "blobsBundle", skip_serializing_if = "Option::is_none")] + // pub blobs_bundle: Option, } impl ExecutionPayloadEnvelope { @@ -187,6 +191,14 @@ impl TryFrom for SealedBlock { } } +/// This includes all bundled blob related data of an executed payload. +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +pub struct BlobsBundleV1 { + pub commitments: Vec, + pub proofs: Vec, + pub blobs: Vec, +} + /// Error that can occur when handling payloads. #[derive(thiserror::Error, Debug)] pub enum PayloadError {