Skip to main content

RpcHandler

Trait RpcHandler 

Source
pub trait RpcHandler: Sized {
    // Required methods
    fn parse(params: &Option<Vec<Value>>) -> Result<Self, RpcErr>;
    async fn handle(&self, context: RpcApiContext) -> Result<Value, RpcErr>;

    // Provided method
    async fn call(
        req: &RpcRequest,
        context: RpcApiContext,
    ) -> Result<Value, RpcErr> { ... }
}
Expand description

Trait for implementing JSON-RPC method handlers.

Each RPC method (e.g., eth_getBalance, engine_newPayloadV3) is implemented as a struct that implements this trait. The trait provides a standard pattern for parsing parameters and handling requests.

§Example

struct GetBalanceRequest {
    address: Address,
    block: BlockId,
}

impl RpcHandler for GetBalanceRequest {
    fn parse(params: &Option<Vec<Value>>) -> Result<Self, RpcErr> {
        let params = params.as_ref().ok_or(RpcErr::MissingParam("params"))?;
        Ok(Self {
            address: serde_json::from_value(params[0].clone())?,
            block: serde_json::from_value(params[1].clone())?,
        })
    }

    async fn handle(&self, context: RpcApiContext) -> Result<Value, RpcErr> {
        let balance = context.storage.get_balance(self.address, self.block)?;
        Ok(serde_json::to_value(balance)?)
    }
}

Required Methods§

Source

fn parse(params: &Option<Vec<Value>>) -> Result<Self, RpcErr>

Parse JSON-RPC parameters into the handler struct.

Returns an error if required parameters are missing or have invalid types.

Source

async fn handle(&self, context: RpcApiContext) -> Result<Value, RpcErr>

Handle the RPC request and return a JSON response.

This is where the actual business logic for the RPC method lives.

Provided Methods§

Source

async fn call(req: &RpcRequest, context: RpcApiContext) -> Result<Value, RpcErr>

Entry point for handling an RPC request.

This method parses the request, records metrics, and delegates to handle(). Most implementations should not override this method.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl RpcHandler for BlobsV1Request

Source§

impl RpcHandler for BlobsV2Request

Source§

impl RpcHandler for BlobsV3Request

Source§

impl RpcHandler for ChainConfigRequest

Source§

impl RpcHandler for EstimateGasRequest

Source§

impl RpcHandler for ExchangeCapabilitiesRequest

Source§

impl RpcHandler for ExchangeTransitionConfigV1Req

Source§

impl RpcHandler for ExecutionWitnessByBlockHashRequest

Source§

impl RpcHandler for ExecutionWitnessRequest

Source§

impl RpcHandler for ForkChoiceUpdatedV1

Source§

impl RpcHandler for ForkChoiceUpdatedV2

Source§

impl RpcHandler for ForkChoiceUpdatedV3

Source§

impl RpcHandler for ForkChoiceUpdatedV4

Source§

impl RpcHandler for GasPrice

Source§

impl RpcHandler for GetClientVersionV1Request

Source§

impl RpcHandler for GetPayloadBodiesByHashV1Request

Source§

impl RpcHandler for GetPayloadBodiesByHashV2Request

Source§

impl RpcHandler for GetPayloadBodiesByRangeV1Request

Source§

impl RpcHandler for GetPayloadBodiesByRangeV2Request

Source§

impl RpcHandler for GetPayloadV1Request

Source§

impl RpcHandler for GetPayloadV2Request

Source§

impl RpcHandler for GetPayloadV3Request

Source§

impl RpcHandler for GetPayloadV4Request

Source§

impl RpcHandler for GetPayloadV5Request

Source§

impl RpcHandler for GetPayloadV6Request

Source§

impl RpcHandler for NewPayloadV1Request

Source§

impl RpcHandler for NewPayloadV2Request

Source§

impl RpcHandler for NewPayloadV3Request

Source§

impl RpcHandler for NewPayloadV4Request

Source§

impl RpcHandler for NewPayloadV5Request

Source§

impl RpcHandler for NewPayloadWithWitnessV5Request

Source§

impl RpcHandler for SendRawTransactionRequest