,
/// Transaction pool instance.
pub pool: Arc,
/// Remote access to the blockchain (async).
pub remote_blockchain: Arc>,
/// Fetcher instance.
pub fetcher: Arc,
}
/// Extra dependencies for BABE.
pub struct BabeDeps {
/// BABE protocol config.
pub babe_config: Config,
/// BABE pending epoch changes.
pub shared_epoch_changes: SharedEpochChanges,
/// The keystore that manages the keys of the node.
pub keystore: KeyStorePtr,
}
/// Full client dependencies.
pub struct FullDeps {
/// The client instance to use.
pub client: Arc,
/// Transaction pool instance.
pub pool: Arc,
/// The SelectChain Strategy
pub select_chain: SC,
/// BABE specific dependencies.
pub babe: BabeDeps,
}
/// Instantiate all Full RPC extensions.
pub fn create_full(
deps: FullDeps,
) -> jsonrpc_core::IoHandler where
C: ProvideRuntimeApi,
C: HeaderBackend + HeaderMetadata + 'static,
C: Send + Sync + 'static,
C::Api: substrate_frame_rpc_system::AccountNonceApi,
C::Api: pallet_contracts_rpc::ContractsRuntimeApi,
C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi,
C::Api: BabeApi,
::Error: fmt::Debug,
P: TransactionPool + 'static,
M: jsonrpc_core::Metadata + Default,
SC: SelectChain +'static,
{
use substrate_frame_rpc_system::{FullSystem, SystemApi};
use pallet_contracts_rpc::{Contracts, ContractsApi};
use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApi};
let mut io = jsonrpc_core::IoHandler::default();
let FullDeps {
client,
pool,
select_chain,
babe
} = deps;
let BabeDeps {
keystore,
babe_config,
shared_epoch_changes,
} = babe;
io.extend_with(
SystemApi::to_delegate(FullSystem::new(client.clone(), pool))
);
// Making synchronous calls in light client freezes the browser currently,
// more context: https://github.com/paritytech/substrate/pull/3480
// These RPCs should use an asynchronous caller instead.
io.extend_with(
ContractsApi::to_delegate(Contracts::new(client.clone()))
);
io.extend_with(
TransactionPaymentApi::to_delegate(TransactionPayment::new(client.clone()))
);
io.extend_with(
sc_consensus_babe_rpc::BabeApi::to_delegate(
BabeRPCHandler::new(client, shared_epoch_changes, keystore, babe_config, select_chain)
)
);
io
}
/// Instantiate all Light RPC extensions.
pub fn create_light(
deps: LightDeps,
) -> jsonrpc_core::IoHandler where
C: sc_client::blockchain::HeaderBackend,
C: Send + Sync + 'static,
F: sc_client::light::fetcher::Fetcher + 'static,
P: TransactionPool + 'static,
M: jsonrpc_core::Metadata + Default,
{
use substrate_frame_rpc_system::{LightSystem, SystemApi};
let LightDeps {
client,
pool,
remote_blockchain,
fetcher
} = deps;
let mut io = jsonrpc_core::IoHandler::default();
io.extend_with(
SystemApi::::to_delegate(LightSystem::new(client, remote_blockchain, fetcher, pool))
);
io
}