forest/rpc/methods/eth/
pubsub_trait.rs1use crate::rpc::eth::types::{EthAddressList, EthTopicSpec};
5use jsonrpsee::proc_macros::rpc;
6use serde::{Deserialize, Serialize};
7
8#[rpc(server, namespace = "eth")]
9pub trait EthPubSubApi {
10 #[subscription(
12 name = "subscribe" => "subscription",
13 aliases = ["Filecoin.EthSubscribe"],
14 unsubscribe = "unsubscribe",
15 unsubscribe_aliases = ["Filecoin.EthUnsubscribe"],
16 item = serde_json::Value
17 )]
18 async fn subscribe(
19 &self,
20 kind: SubscriptionKind,
21 params: Option<SubscriptionParams>,
22 ) -> jsonrpsee::core::SubscriptionResult;
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub enum SubscriptionKind {
28 NewHeads,
29 PendingTransactions,
30 Logs,
31}
32
33#[derive(Default, Serialize, Deserialize, Debug, Clone)]
34#[serde(rename_all = "camelCase")]
35pub struct LogFilter {
36 pub address: EthAddressList,
37 pub topics: Option<EthTopicSpec>,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct SubscriptionParams {
42 #[serde(flatten)]
43 pub filter: Option<LogFilter>,
44}