1use alloy::primitives::bytes::Bytes;
2use discv5::enr::NodeId;
3use jsonrpsee::{core::RpcResult, proc_macros::rpc};
4
5use crate::types::{
6 discv5::{NodeInfo, Pong, RoutingTableInfo},
7 enr::Enr,
8 network::Subnetwork,
9};
10
11#[rpc(client, server, namespace = "discv5")]
13pub trait Discv5Api {
14 #[method(name = "nodeInfo")]
16 async fn node_info(&self) -> RpcResult<NodeInfo>;
17
18 #[method(name = "updateNodeInfo")]
20 async fn update_node_info(&self, socket_addr: String, is_tcp: bool) -> RpcResult<NodeInfo>;
21
22 #[method(name = "routingTableInfo")]
24 async fn routing_table_info(&self) -> RpcResult<RoutingTableInfo>;
25
26 #[method(name = "addEnr")]
28 async fn add_enr(&self, enr: Enr) -> RpcResult<bool>;
29
30 #[method(name = "getEnr")]
32 async fn get_enr(&self, node_id: NodeId) -> RpcResult<Enr>;
33
34 #[method(name = "deleteEnr")]
36 async fn delete_enr(&self, node_id: NodeId) -> RpcResult<bool>;
37
38 #[method(name = "lookupEnr")]
40 async fn lookup_enr(&self, node_id: NodeId) -> RpcResult<Enr>;
41
42 #[method(name = "recursiveFindNodes")]
44 async fn recursive_find_nodes(&self, node_id: NodeId) -> RpcResult<Vec<Enr>>;
45
46 #[method(name = "talkReq")]
48 async fn talk_req(&self, enr: Enr, protocol: Subnetwork, request: Vec<u8>) -> RpcResult<Bytes>;
49
50 #[method(name = "ping")]
52 async fn ping(&self, enr: Enr) -> RpcResult<Pong>;
53
54 #[method(name = "findNode")]
57 async fn find_node(&self, enr: Enr, distances: Vec<u64>) -> RpcResult<Vec<Enr>>;
58}