solochain_template_node/
rpc.rs1#![warn(missing_docs)]
7
8use std::sync::Arc;
9
10use jsonrpsee::RpcModule;
11use sc_transaction_pool_api::TransactionPool;
12use solochain_template_runtime::{opaque::Block, AccountId, Balance, Nonce};
13use sp_api::ProvideRuntimeApi;
14use sp_block_builder::BlockBuilder;
15use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata};
16
17pub struct FullDeps<C, P> {
19 pub client: Arc<C>,
21 pub pool: Arc<P>,
23}
24
25pub fn create_full<C, P>(
27 deps: FullDeps<C, P>,
28) -> Result<RpcModule<()>, Box<dyn std::error::Error + Send + Sync>>
29where
30 C: ProvideRuntimeApi<Block>,
31 C: HeaderBackend<Block> + HeaderMetadata<Block, Error = BlockChainError> + 'static,
32 C: Send + Sync + 'static,
33 C::Api: substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Nonce>,
34 C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi<Block, Balance>,
35 C::Api: BlockBuilder<Block>,
36 P: TransactionPool + 'static,
37{
38 use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer};
39 use substrate_frame_rpc_system::{System, SystemApiServer};
40
41 let mut module = RpcModule::new(());
42 let FullDeps { client, pool } = deps;
43
44 module.merge(System::new(client.clone(), pool).into_rpc())?;
45 module.merge(TransactionPayment::new(client).into_rpc())?;
46
47 Ok(module)
60}