subcoin_rpc/
lib.rs

1mod blockchain;
2mod error;
3mod network;
4mod raw_transactions;
5
6use blockchain::{Blockchain, BlockchainApiServer};
7use network::{Network, NetworkApiServer};
8use raw_transactions::{RawTransactions, RawTransactionsApiServer};
9use sc_client_api::{AuxStore, BlockBackend, HeaderBackend};
10use sp_runtime::traits::Block as BlockT;
11use std::sync::Arc;
12use subcoin_network::NetworkApi;
13use subcoin_primitives::{BitcoinTransactionAdapter, TransactionIndex};
14
15/// Subcoin RPC.
16pub struct SubcoinRpc<Block, Client, TransactionAdapter> {
17    /// Blockchain RPC.
18    pub blockchain: Blockchain<Block, Client, TransactionAdapter>,
19    /// Raw transactions RPC.
20    pub raw_transactions: RawTransactions<Block, Client>,
21    /// Network RPC.
22    pub network: Network<Block, Client>,
23}
24
25impl<Block, Client, TransactionAdapter> SubcoinRpc<Block, Client, TransactionAdapter>
26where
27    Block: BlockT + 'static,
28    Client: HeaderBackend<Block> + BlockBackend<Block> + AuxStore + 'static,
29    TransactionAdapter: BitcoinTransactionAdapter<Block> + Send + Sync + 'static,
30{
31    /// Creates a new instance of [`SubcoinRpc`].
32    pub fn new(
33        client: Arc<Client>,
34        network_api: Arc<dyn NetworkApi>,
35        transaction_indexer: Arc<dyn TransactionIndex + Send + Sync>,
36    ) -> Self {
37        Self {
38            blockchain: Blockchain::<_, _, TransactionAdapter>::new(
39                client.clone(),
40                transaction_indexer,
41            ),
42            raw_transactions: RawTransactions::new(client.clone(), network_api.clone()),
43            network: Network::new(client, network_api),
44        }
45    }
46
47    /// Merges the Subcoin RPC components into a given RPC method registry.
48    pub fn merge_into(
49        self,
50        module: &mut jsonrpsee::Methods,
51    ) -> Result<(), jsonrpsee::server::RegisterMethodError> {
52        let Self {
53            blockchain,
54            raw_transactions,
55            network,
56        } = self;
57
58        module.merge(blockchain.into_rpc())?;
59        module.merge(raw_transactions.into_rpc())?;
60        module.merge(network.into_rpc())?;
61
62        Ok(())
63    }
64}