reth_rpc_api::servers

Trait EngineApiServer

Source
pub trait EngineApiServer<Engine: EngineTypes>:
    Sized
    + Send
    + Sync
    + 'static {
Show 18 methods // Required methods fn new_payload_v1<'life0, 'async_trait>( &'life0 self, payload: ExecutionPayloadV1, ) -> Pin<Box<dyn Future<Output = RpcResult<PayloadStatus>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn new_payload_v2<'life0, 'async_trait>( &'life0 self, payload: ExecutionPayloadInputV2, ) -> Pin<Box<dyn Future<Output = RpcResult<PayloadStatus>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn new_payload_v3<'life0, 'async_trait>( &'life0 self, payload: ExecutionPayloadV3, versioned_hashes: Vec<B256>, parent_beacon_block_root: B256, ) -> Pin<Box<dyn Future<Output = RpcResult<PayloadStatus>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn new_payload_v4<'life0, 'async_trait>( &'life0 self, payload: ExecutionPayloadV3, versioned_hashes: Vec<B256>, parent_beacon_block_root: B256, execution_requests: Requests, ) -> Pin<Box<dyn Future<Output = RpcResult<PayloadStatus>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn fork_choice_updated_v1<'life0, 'async_trait>( &'life0 self, fork_choice_state: ForkchoiceState, payload_attributes: Option<Engine::PayloadAttributes>, ) -> Pin<Box<dyn Future<Output = RpcResult<ForkchoiceUpdated>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn fork_choice_updated_v2<'life0, 'async_trait>( &'life0 self, fork_choice_state: ForkchoiceState, payload_attributes: Option<Engine::PayloadAttributes>, ) -> Pin<Box<dyn Future<Output = RpcResult<ForkchoiceUpdated>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn fork_choice_updated_v3<'life0, 'async_trait>( &'life0 self, fork_choice_state: ForkchoiceState, payload_attributes: Option<Engine::PayloadAttributes>, ) -> Pin<Box<dyn Future<Output = RpcResult<ForkchoiceUpdated>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_payload_v1<'life0, 'async_trait>( &'life0 self, payload_id: PayloadId, ) -> Pin<Box<dyn Future<Output = RpcResult<Engine::ExecutionPayloadEnvelopeV1>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_payload_v2<'life0, 'async_trait>( &'life0 self, payload_id: PayloadId, ) -> Pin<Box<dyn Future<Output = RpcResult<Engine::ExecutionPayloadEnvelopeV2>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_payload_v3<'life0, 'async_trait>( &'life0 self, payload_id: PayloadId, ) -> Pin<Box<dyn Future<Output = RpcResult<Engine::ExecutionPayloadEnvelopeV3>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_payload_v4<'life0, 'async_trait>( &'life0 self, payload_id: PayloadId, ) -> Pin<Box<dyn Future<Output = RpcResult<Engine::ExecutionPayloadEnvelopeV4>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_payload_bodies_by_hash_v1<'life0, 'async_trait>( &'life0 self, block_hashes: Vec<BlockHash>, ) -> Pin<Box<dyn Future<Output = RpcResult<ExecutionPayloadBodiesV1>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_payload_bodies_by_range_v1<'life0, 'async_trait>( &'life0 self, start: U64, count: U64, ) -> Pin<Box<dyn Future<Output = RpcResult<ExecutionPayloadBodiesV1>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn exchange_transition_configuration<'life0, 'async_trait>( &'life0 self, transition_configuration: TransitionConfiguration, ) -> Pin<Box<dyn Future<Output = RpcResult<TransitionConfiguration>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_client_version_v1<'life0, 'async_trait>( &'life0 self, client_version: ClientVersionV1, ) -> Pin<Box<dyn Future<Output = RpcResult<Vec<ClientVersionV1>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn exchange_capabilities<'life0, 'async_trait>( &'life0 self, capabilities: Vec<String>, ) -> Pin<Box<dyn Future<Output = RpcResult<Vec<String>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_blobs_v1<'life0, 'async_trait>( &'life0 self, versioned_hashes: Vec<B256>, ) -> Pin<Box<dyn Future<Output = RpcResult<Vec<Option<BlobAndProofV1>>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; // Provided method fn into_rpc(self) -> RpcModule<Self> where Engine::PayloadAttributes: DeserializeOwned { ... }
}
Expand description

Server trait implementation for the EngineApi RPC API.

Required Methods§

Source

fn new_payload_v1<'life0, 'async_trait>( &'life0 self, payload: ExecutionPayloadV1, ) -> Pin<Box<dyn Future<Output = RpcResult<PayloadStatus>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn new_payload_v2<'life0, 'async_trait>( &'life0 self, payload: ExecutionPayloadInputV2, ) -> Pin<Box<dyn Future<Output = RpcResult<PayloadStatus>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn new_payload_v3<'life0, 'async_trait>( &'life0 self, payload: ExecutionPayloadV3, versioned_hashes: Vec<B256>, parent_beacon_block_root: B256, ) -> Pin<Box<dyn Future<Output = RpcResult<PayloadStatus>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn new_payload_v4<'life0, 'async_trait>( &'life0 self, payload: ExecutionPayloadV3, versioned_hashes: Vec<B256>, parent_beacon_block_root: B256, execution_requests: Requests, ) -> Pin<Box<dyn Future<Output = RpcResult<PayloadStatus>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn fork_choice_updated_v1<'life0, 'async_trait>( &'life0 self, fork_choice_state: ForkchoiceState, payload_attributes: Option<Engine::PayloadAttributes>, ) -> Pin<Box<dyn Future<Output = RpcResult<ForkchoiceUpdated>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

See also https://github.com/ethereum/execution-apis/blob/6709c2a795b707202e93c4f2867fa0bf2640a84f/src/engine/paris.md#engine_forkchoiceupdatedv1

Caution: This should not accept the withdrawals field in the payload attributes.

Source

fn fork_choice_updated_v2<'life0, 'async_trait>( &'life0 self, fork_choice_state: ForkchoiceState, payload_attributes: Option<Engine::PayloadAttributes>, ) -> Pin<Box<dyn Future<Output = RpcResult<ForkchoiceUpdated>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Post Shanghai forkchoice update handler

This is the same as forkchoiceUpdatedV1, but expects an additional withdrawals field in the payloadAttributes, if payload attributes are provided.

See also https://github.com/ethereum/execution-apis/blob/6709c2a795b707202e93c4f2867fa0bf2640a84f/src/engine/shanghai.md#engine_forkchoiceupdatedv2

Caution: This should not accept the parentBeaconBlockRoot field in the payload attributes.

Source

fn fork_choice_updated_v3<'life0, 'async_trait>( &'life0 self, fork_choice_state: ForkchoiceState, payload_attributes: Option<Engine::PayloadAttributes>, ) -> Pin<Box<dyn Future<Output = RpcResult<ForkchoiceUpdated>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Post Cancun forkchoice update handler

This is the same as forkchoiceUpdatedV2, but expects an additional parentBeaconBlockRoot field in the payloadAttributes, if payload attributes are provided.

See also https://github.com/ethereum/execution-apis/blob/main/src/engine/cancun.md#engine_forkchoiceupdatedv3

Source

fn get_payload_v1<'life0, 'async_trait>( &'life0 self, payload_id: PayloadId, ) -> Pin<Box<dyn Future<Output = RpcResult<Engine::ExecutionPayloadEnvelopeV1>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

See also https://github.com/ethereum/execution-apis/blob/6709c2a795b707202e93c4f2867fa0bf2640a84f/src/engine/paris.md#engine_getpayloadv1

Returns the most recent version of the payload that is available in the corresponding payload build process at the time of receiving this call.

Caution: This should not return the withdrawals field

Note:

Provider software MAY stop the corresponding build process after serving this call.

Source

fn get_payload_v2<'life0, 'async_trait>( &'life0 self, payload_id: PayloadId, ) -> Pin<Box<dyn Future<Output = RpcResult<Engine::ExecutionPayloadEnvelopeV2>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

See also https://github.com/ethereum/execution-apis/blob/6709c2a795b707202e93c4f2867fa0bf2640a84f/src/engine/shanghai.md#engine_getpayloadv2

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.

Source

fn get_payload_v3<'life0, 'async_trait>( &'life0 self, payload_id: PayloadId, ) -> Pin<Box<dyn Future<Output = RpcResult<Engine::ExecutionPayloadEnvelopeV3>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Post Cancun payload handler which also returns a blobs bundle.

See also https://github.com/ethereum/execution-apis/blob/main/src/engine/cancun.md#engine_getpayloadv3

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.

Source

fn get_payload_v4<'life0, 'async_trait>( &'life0 self, payload_id: PayloadId, ) -> Pin<Box<dyn Future<Output = RpcResult<Engine::ExecutionPayloadEnvelopeV4>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Post Prague payload handler.

See also https://github.com/ethereum/execution-apis/blob/main/src/engine/prague.md#engine_getpayloadv4

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.

Source

fn get_payload_bodies_by_hash_v1<'life0, 'async_trait>( &'life0 self, block_hashes: Vec<BlockHash>, ) -> Pin<Box<dyn Future<Output = RpcResult<ExecutionPayloadBodiesV1>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn get_payload_bodies_by_range_v1<'life0, 'async_trait>( &'life0 self, start: U64, count: U64, ) -> Pin<Box<dyn Future<Output = RpcResult<ExecutionPayloadBodiesV1>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

See also https://github.com/ethereum/execution-apis/blob/6452a6b194d7db269bf1dbd087a267251d3cc7f8/src/engine/shanghai.md#engine_getpayloadbodiesbyrangev1

Returns the execution payload bodies by the range starting at start, containing count blocks.

WARNING: This method is associated with the BeaconBlocksByRange message in the consensus layer p2p specification, meaning the input should be treated as untrusted or potentially adversarial.

Implementers should take care when acting on the input to this method, specifically ensuring that the range is limited properly, and that the range boundaries are computed correctly and without panics.

Source

fn exchange_transition_configuration<'life0, 'async_trait>( &'life0 self, transition_configuration: TransitionConfiguration, ) -> Pin<Box<dyn Future<Output = RpcResult<TransitionConfiguration>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

See also https://github.com/ethereum/execution-apis/blob/6709c2a795b707202e93c4f2867fa0bf2640a84f/src/engine/paris.md#engine_exchangetransitionconfigurationv1

Note: This method will be deprecated after the cancun hardfork:

Consensus and execution layer clients MAY remove support of this method after Cancun. If no longer supported, this method MUST be removed from the engine_exchangeCapabilities request or response list depending on whether it is consensus or execution layer client.

Source

fn get_client_version_v1<'life0, 'async_trait>( &'life0 self, client_version: ClientVersionV1, ) -> Pin<Box<dyn Future<Output = RpcResult<Vec<ClientVersionV1>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

This function will return the ClientVersionV1 object. See also: https://github.com/ethereum/execution-apis/blob/03911ffc053b8b806123f1fc237184b0092a485a/src/engine/identification.md#engine_getclientversionv1make fmt

  • When connected to a single execution client, the consensus client MUST receive an array with a single ClientVersionV1 object.
  • When connected to multiple execution clients via a multiplexer, the multiplexer MUST concatenate the responses from each execution client into a single, flat array before returning the response to the consensus client.
Source

fn exchange_capabilities<'life0, 'async_trait>( &'life0 self, capabilities: Vec<String>, ) -> Pin<Box<dyn Future<Output = RpcResult<Vec<String>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn get_blobs_v1<'life0, 'async_trait>( &'life0 self, versioned_hashes: Vec<B256>, ) -> Pin<Box<dyn Future<Output = RpcResult<Vec<Option<BlobAndProofV1>>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Fetch blobs for the consensus layer from the in-memory blob cache.

Provided Methods§

Source

fn into_rpc(self) -> RpcModule<Self>
where Engine::PayloadAttributes: DeserializeOwned,

Collects all the methods and subscriptions defined in the trait and adds them into a single RpcModule.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§