mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: add engine api types and interface
This commit is contained in:
35
crates/net/rpc-api/src/engine.rs
Normal file
35
crates/net/rpc-api/src/engine.rs
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
use jsonrpsee::{core::RpcResult as Result, proc_macros::rpc};
|
||||||
|
use reth_primitives::{BlockId, Bytes, H256, H64};
|
||||||
|
use reth_rpc_types::{
|
||||||
|
engine::{
|
||||||
|
ExecutionPayload, ForkchoiceState, ForkchoiceUpdated, PayloadAttributes, PayloadStatus,
|
||||||
|
TransitionConfiguration,
|
||||||
|
},
|
||||||
|
RichBlock,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[rpc(client)]
|
||||||
|
pub trait EngineApi {
|
||||||
|
/// See also <https://github.com/ethereum/execution-apis/blob/8db51dcd2f4bdfbd9ad6e4a7560aac97010ad063/src/engine/specification.md#engine_newpayloadv1>
|
||||||
|
#[method(name = "engine_newPayloadV1")]
|
||||||
|
async fn new_payload(&self, payload: ExecutionPayload) -> Result<PayloadStatus>;
|
||||||
|
|
||||||
|
/// See also <https://github.com/ethereum/execution-apis/blob/8db51dcd2f4bdfbd9ad6e4a7560aac97010ad063/src/engine/specification.md#engine_forkchoiceUpdatedV1>
|
||||||
|
#[method(name = "engine_forkchoiceUpdatedV1")]
|
||||||
|
async fn fork_choice_updated(
|
||||||
|
&self,
|
||||||
|
fork_choice_state: ForkchoiceState,
|
||||||
|
payload_attributes: Option<PayloadAttributes>,
|
||||||
|
) -> Result<ForkchoiceUpdated>;
|
||||||
|
|
||||||
|
/// See also <https://github.com/ethereum/execution-apis/blob/8db51dcd2f4bdfbd9ad6e4a7560aac97010ad063/src/engine/specification.md#engine_getPayloadV1>
|
||||||
|
#[method(name = "engine_getPayloadV1")]
|
||||||
|
async fn get_payload(&self, payload_id: H64) -> Result<ExecutionPayload>;
|
||||||
|
|
||||||
|
/// See also <https://github.com/ethereum/execution-apis/blob/8db51dcd2f4bdfbd9ad6e4a7560aac97010ad063/src/engine/specification.md#engine_exchangeTransitionConfigurationV1>
|
||||||
|
#[method(name = "engine_exchangeTransitionConfigurationV1")]
|
||||||
|
async fn exchange_transition_configuration(
|
||||||
|
&self,
|
||||||
|
transition_configuration: TransitionConfiguration,
|
||||||
|
) -> Result<TransitionConfiguration>;
|
||||||
|
}
|
||||||
@ -10,6 +10,7 @@
|
|||||||
//! Provides all RPC interfaces.
|
//! Provides all RPC interfaces.
|
||||||
|
|
||||||
mod debug;
|
mod debug;
|
||||||
|
mod engine;
|
||||||
mod eth;
|
mod eth;
|
||||||
mod eth_filter;
|
mod eth_filter;
|
||||||
mod eth_pubsub;
|
mod eth_pubsub;
|
||||||
@ -18,6 +19,7 @@ mod trace;
|
|||||||
mod web3;
|
mod web3;
|
||||||
|
|
||||||
pub use self::{
|
pub use self::{
|
||||||
debug::DebugApiServer, eth::EthApiServer, eth_filter::EthFilterApiServer,
|
debug::DebugApiServer, engine::EngineApiServer, eth::EthApiServer,
|
||||||
eth_pubsub::EthPubSubApiServer, net::NetApiServer, web3::Web3ApiServer,
|
eth_filter::EthFilterApiServer, eth_pubsub::EthPubSubApiServer, net::NetApiServer,
|
||||||
|
web3::Web3ApiServer,
|
||||||
};
|
};
|
||||||
|
|||||||
88
crates/net/rpc-types/src/eth/engine.rs
Normal file
88
crates/net/rpc-types/src/eth/engine.rs
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
#![allow(missing_docs)]
|
||||||
|
//! Engine API types: <https://github.com/ethereum/execution-apis/blob/main/src/engine/authentication.md>
|
||||||
|
|
||||||
|
use reth_primitives::{Address, BlockNumber, Bloom, Bytes, H256, H64, U256, U64};
|
||||||
|
|
||||||
|
/// This structure maps on the ExecutionPayload structure of the beacon chain spec.
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct ExecutionPayload {
|
||||||
|
pub parent_hash: H256,
|
||||||
|
pub fee_recipient: Address,
|
||||||
|
pub state_root: H256,
|
||||||
|
pub receipts_root: H256,
|
||||||
|
pub logs_bloom: Bloom,
|
||||||
|
pub prev_randao: H256,
|
||||||
|
pub block_number: U64,
|
||||||
|
pub gas_limit: U64,
|
||||||
|
pub gas_used: U64,
|
||||||
|
pub timestamp: U64,
|
||||||
|
pub extra_data: Bytes,
|
||||||
|
pub base_fee_per_gas: U256,
|
||||||
|
pub block_hash: H256,
|
||||||
|
pub transactions: Vec<Bytes>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// This structure encapsulates the fork choice state
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct ForkchoiceState {
|
||||||
|
pub head_block_hash: H256,
|
||||||
|
pub safe_block_hash: H256,
|
||||||
|
pub finalized_block_hash: H256,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// This structure contains the attributes required to initiate a payload build process in the
|
||||||
|
/// context of an `engine_forkchoiceUpdated` call.
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct PayloadAttributes {
|
||||||
|
pub timestamp: U64,
|
||||||
|
pub prev_randao: H256,
|
||||||
|
pub suggested_fee_recipient: Address,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// This structure contains the result of processing a payload
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct PayloadStatus {
|
||||||
|
#[serde(flatten)]
|
||||||
|
pub status: PayloadStatusEnum,
|
||||||
|
/// Hash of the most recent valid block in the branch defined by payload and its ancestors
|
||||||
|
pub latest_valid_hash: Option<H256>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
#[serde(tag = "status", rename_all = "SCREAMING_SNAKE_CASE")]
|
||||||
|
pub enum PayloadStatusEnum {
|
||||||
|
Valid,
|
||||||
|
Invalid {
|
||||||
|
#[serde(rename = "validationError")]
|
||||||
|
validation_error: String,
|
||||||
|
},
|
||||||
|
Syncing,
|
||||||
|
Accepted,
|
||||||
|
InvalidBlockHash {
|
||||||
|
#[serde(rename = "validationError")]
|
||||||
|
validation_error: String,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/// This structure contains configurable settings of the transition process.
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct TransitionConfiguration {
|
||||||
|
/// maps on the TERMINAL_TOTAL_DIFFICULTY parameter of EIP-3675
|
||||||
|
pub terminal_total_difficulty: U256,
|
||||||
|
/// maps on TERMINAL_BLOCK_HASH parameter of EIP-3675
|
||||||
|
pub terminal_block_hash: H256,
|
||||||
|
/// maps on TERMINAL_BLOCK_NUMBER parameter of EIP-3675
|
||||||
|
pub terminal_block_number: BlockNumber,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct ForkchoiceUpdated {
|
||||||
|
pub payload_status: PayloadStatus,
|
||||||
|
pub payload_id: Option<H64>,
|
||||||
|
}
|
||||||
@ -3,6 +3,7 @@
|
|||||||
mod account;
|
mod account;
|
||||||
mod block;
|
mod block;
|
||||||
mod call;
|
mod call;
|
||||||
|
pub mod engine;
|
||||||
mod fee;
|
mod fee;
|
||||||
mod filter;
|
mod filter;
|
||||||
mod index;
|
mod index;
|
||||||
|
|||||||
Reference in New Issue
Block a user