forest/rpc/methods/eth/
pubsub_trait.rs

1// Copyright 2019-2025 ChainSafe Systems
2// SPDX-License-Identifier: Apache-2.0, MIT
3
4use 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    /// Subscribe to Ethereum events
11    #[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}