Skip to main content

tempo_node/rpc/
operator.rs

1use alloy_rpc_types_admin::PeerInfo;
2use jsonrpsee::{core::RpcResult, proc_macros::rpc};
3use reth_chainspec::{EthChainSpec, EthereumHardforks};
4use reth_network_api::{NetworkInfo, Peers};
5use reth_rpc::AdminApi;
6use reth_rpc_api::servers::AdminApiServer as _;
7use reth_transaction_pool::TransactionPool;
8
9#[rpc(server, namespace = "operator")]
10pub trait TempoOperatorApi {
11    /// Returns the node's connected execution peers.
12    #[method(name = "peers")]
13    async fn peers(&self) -> RpcResult<Vec<PeerInfo>>;
14}
15
16/// Tempo-specific operator RPCs that can be enabled without exposing the full `admin_` namespace.
17#[derive(Debug)]
18pub struct TempoOperatorRpc<N, ChainSpec, Pool> {
19    admin_api: AdminApi<N, ChainSpec, Pool>,
20}
21
22impl<N, ChainSpec, Pool> TempoOperatorRpc<N, ChainSpec, Pool> {
23    pub const fn new(admin_api: AdminApi<N, ChainSpec, Pool>) -> Self {
24        Self { admin_api }
25    }
26}
27
28#[async_trait::async_trait]
29impl<N, ChainSpec, Pool> TempoOperatorApiServer for TempoOperatorRpc<N, ChainSpec, Pool>
30where
31    N: NetworkInfo + Peers + 'static,
32    ChainSpec: EthChainSpec + EthereumHardforks + Send + Sync + 'static,
33    Pool: TransactionPool + 'static,
34{
35    async fn peers(&self) -> RpcResult<Vec<PeerInfo>> {
36        self.admin_api.peers().await
37    }
38}