From 8db091e8e0c4e75f6a45927a513d2173e79bae03 Mon Sep 17 00:00:00 2001 From: Roman Krasiuk Date: Thu, 16 Feb 2023 20:18:53 +0200 Subject: [PATCH] feat(engine-api): additional shanghai methods and types (#1410) --- crates/rpc/rpc-api/src/engine.rs | 21 +++++++++++++++++--- crates/rpc/rpc-types/src/eth/engine.rs | 11 ++++++++++- crates/rpc/rpc/src/engine/mod.rs | 27 ++++++++++++++++++++++++-- 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/crates/rpc/rpc-api/src/engine.rs b/crates/rpc/rpc-api/src/engine.rs index 59e8ea253b..e30da5f3d3 100644 --- a/crates/rpc/rpc-api/src/engine.rs +++ b/crates/rpc/rpc-api/src/engine.rs @@ -1,8 +1,8 @@ use jsonrpsee::{core::RpcResult as Result, proc_macros::rpc}; -use reth_primitives::H64; +use reth_primitives::{BlockHash, BlockNumber, H64}; use reth_rpc_types::engine::{ - ExecutionPayload, ForkchoiceState, ForkchoiceUpdated, PayloadAttributes, PayloadStatus, - TransitionConfiguration, + ExecutionPayload, ExecutionPayloadBody, ForkchoiceState, ForkchoiceUpdated, PayloadAttributes, + PayloadStatus, TransitionConfiguration, }; #[cfg_attr(not(feature = "client"), rpc(server))] @@ -45,6 +45,21 @@ pub trait EngineApi { #[method(name = "engine_getPayloadV2")] async fn get_payload_v2(&self, payload_id: H64) -> Result; + /// See also + #[method(name = "engine_getPayloadBodiesByHashV1")] + async fn get_payload_bodies_by_hash_v1( + &self, + block_hashes: Vec, + ) -> Result>; + + /// See also + #[method(name = "engine_getPayloadBodiesByRangeV1")] + async fn get_payload_bodies_by_range_v1( + &self, + start: BlockNumber, + count: u64, + ) -> Result>; + /// See also #[method(name = "engine_exchangeTransitionConfigurationV1")] async fn exchange_transition_configuration( diff --git a/crates/rpc/rpc-types/src/eth/engine.rs b/crates/rpc/rpc-types/src/eth/engine.rs index 1215724f16..32c2b87e4a 100644 --- a/crates/rpc/rpc-types/src/eth/engine.rs +++ b/crates/rpc/rpc-types/src/eth/engine.rs @@ -64,6 +64,15 @@ impl From for ExecutionPayload { } } +/// This structure contains a body of an execution payload. +/// +/// See also: +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +pub struct ExecutionPayloadBody { + transactions: Vec, + withdrawals: Vec, +} + /// This structure encapsulates the fork choice state #[derive(Default, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -82,7 +91,7 @@ pub struct PayloadAttributes { pub prev_randao: H256, pub suggested_fee_recipient: Address, /// Array of [`Withdrawal`] enabled with V2 - /// See + /// See #[serde(default, skip_serializing_if = "Option::is_none")] pub withdrawals: Option>, } diff --git a/crates/rpc/rpc/src/engine/mod.rs b/crates/rpc/rpc/src/engine/mod.rs index c4b2735443..a2d7aea287 100644 --- a/crates/rpc/rpc/src/engine/mod.rs +++ b/crates/rpc/rpc/src/engine/mod.rs @@ -2,11 +2,12 @@ use crate::result::{internal_rpc_err, rpc_err}; use async_trait::async_trait; use jsonrpsee::core::{Error, RpcResult as Result}; use reth_interfaces::consensus::ForkchoiceState; -use reth_primitives::H64; +use reth_primitives::{BlockHash, BlockNumber, H64}; use reth_rpc_api::EngineApiServer; use reth_rpc_engine_api::{EngineApiError, EngineApiMessage, EngineApiResult}; use reth_rpc_types::engine::{ - ExecutionPayload, ForkchoiceUpdated, PayloadAttributes, PayloadStatus, TransitionConfiguration, + ExecutionPayload, ExecutionPayloadBody, ForkchoiceUpdated, PayloadAttributes, PayloadStatus, + TransitionConfiguration, }; use tokio::sync::{ mpsc::UnboundedSender, @@ -54,6 +55,7 @@ impl EngineApiServer for EngineApi { /// See also async fn new_payload_v2(&self, _payload: ExecutionPayload) -> Result { + // TODO: Err(internal_rpc_err("unimplemented")) } @@ -79,6 +81,7 @@ impl EngineApiServer for EngineApi { _fork_choice_state: ForkchoiceState, _payload_attributes: Option, ) -> Result { + // TODO: Err(internal_rpc_err("unimplemented")) } @@ -92,6 +95,26 @@ impl EngineApiServer for EngineApi { /// See also async fn get_payload_v2(&self, _payload_id: H64) -> Result { + // TODO: + Err(internal_rpc_err("unimplemented")) + } + + /// See also + async fn get_payload_bodies_by_hash_v1( + &self, + _block_hashes: Vec, + ) -> Result> { + // TODO: + Err(internal_rpc_err("unimplemented")) + } + + /// See also + async fn get_payload_bodies_by_range_v1( + &self, + _start: BlockNumber, + _count: u64, + ) -> Result> { + // TODO: Err(internal_rpc_err("unimplemented")) }