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
15pub struct SubcoinRpc<Block, Client, TransactionAdapter> {
17 pub blockchain: Blockchain<Block, Client, TransactionAdapter>,
19 pub raw_transactions: RawTransactions<Block, Client>,
21 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 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 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}