,
- /// Transaction pool instance.
- pub pool: Arc,
- /// Graph pool instance.
- pub graph: Arc>,
- /// The SelectChain Strategy
- pub select_chain: SC,
- /// The Node authority flag
- pub is_authority: bool,
- /// Whether to enable dev signer
- pub enable_dev_signer: bool,
- /// Network service
- pub network: Arc>,
- /// Whether to deny unsafe calls
- pub deny_unsafe: DenyUnsafe,
- /// EthFilterApi pool.
- pub filter_pool: Option,
- /// Backend.
- pub backend: Arc>,
- /// Maximum number of logs in a query.
- pub max_past_logs: u32,
- /// Maximum fee history cache size.
- pub fee_history_limit: u64,
- /// Fee history cache.
- pub fee_history_cache: FeeHistoryCache,
- /// Cache for Ethereum block data.
- pub block_data_cache: Arc>,
-}
-
-struct AccountCodes {
- client: Arc,
- _blk_marker: PhantomData,
- _caid_marker: PhantomData,
-}
-
-impl AccountCodes
-where
- Block: sp_api::BlockT,
- C: ProvideRuntimeApi,
-{
- fn new(client: Arc) -> Self {
- Self {
- client,
- _blk_marker: PhantomData,
- _caid_marker: PhantomData,
- }
- }
-}
-
-impl fc_rpc::AccountCodeProvider for AccountCodes
-where
- Block: sp_api::BlockT,
- C: ProvideRuntimeApi,
- C::Api: up_rpc::UniqueApi,
- CAId: pallet_common::account::CrossAccountId,
-{
- fn code(&self, block: &sp_api::BlockId, account: sp_core::H160) -> Option> {
- use up_rpc::UniqueApi;
- self.client
- .runtime_api()
- .eth_contract_code(block, account)
- .ok()
- .flatten()
- }
-}
-
-pub fn overrides_handle(client: Arc) -> Arc>
-where
- C: ProvideRuntimeApi + StorageProvider + AuxStore,
- C: HeaderBackend + HeaderMetadata,
- C: Send + Sync + 'static,
- C::Api: fp_rpc::EthereumRuntimeRPCApi,
- C::Api: up_rpc::UniqueApi,
- BE: Backend + 'static,
- BE::State: StateBackend,
- CAId: pallet_common::account::CrossAccountId + Sync + Send + 'static,
-{
- let mut overrides_map = BTreeMap::new();
- overrides_map.insert(
- EthereumStorageSchema::V1,
- Box::new(SchemaV1Override::new_with_code_provider(
- client.clone(),
- Arc::new(AccountCodes::::new(client.clone())),
- )) as Box + Send + Sync>,
- );
- overrides_map.insert(
- EthereumStorageSchema::V2,
- Box::new(SchemaV2Override::new(client.clone()))
- as Box + Send + Sync>,
- );
- overrides_map.insert(
- EthereumStorageSchema::V3,
- Box::new(SchemaV3Override::new(client.clone()))
- as Box + Send + Sync>,
- );
-
- Arc::new(OverrideHandle {
- schemas: overrides_map,
- fallback: Box::new(RuntimeApiStorageOverride::new(client)),
- })
-}
-
-/// Instantiate all Full RPC extensions.
-pub fn create_full(
- deps: FullDeps,
- subscription_task_executor: SubscriptionTaskExecutor,
-) -> jsonrpc_core::IoHandler
-where
- C: ProvideRuntimeApi + StorageProvider + AuxStore,
- C: HeaderBackend + HeaderMetadata + 'static,
- C: Send + Sync + 'static,
- C: BlockchainEvents,
- C::Api: substrate_frame_rpc_system::AccountNonceApi,
- C::Api: BlockBuilder,
- // C::Api: pallet_contracts_rpc::ContractsRuntimeApi,
- C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi,
- C::Api: fp_rpc::EthereumRuntimeRPCApi,
- C::Api: up_rpc::UniqueApi,
- B: sc_client_api::Backend + Send + Sync + 'static,
- B::State: sc_client_api::backend::StateBackend>,
- P: TransactionPool + 'static,
- CA: ChainApi + 'static,
- CAId: pallet_common::account::CrossAccountId + Sync + Send + 'static,
-{
- use fc_rpc::{
- EthApi, EthApiServer, EthDevSigner, EthFilterApi, EthFilterApiServer, EthPubSubApi,
- EthPubSubApiServer, EthSigner, HexEncodedIdProvider, NetApi, NetApiServer, Web3Api,
- Web3ApiServer,
- };
- use uc_rpc::{UniqueApi, Unique};
- // use pallet_contracts_rpc::{Contracts, ContractsApi};
- use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApi};
- use substrate_frame_rpc_system::{FullSystem, SystemApi};
-
- let mut io = jsonrpc_core::IoHandler::default();
- let FullDeps {
- client,
- pool,
- graph,
- select_chain: _,
- fee_history_limit,
- fee_history_cache,
- block_data_cache,
- enable_dev_signer,
- is_authority,
- network,
- deny_unsafe,
- filter_pool,
- backend,
- max_past_logs,
- } = deps;
-
- io.extend_with(SystemApi::to_delegate(FullSystem::new(
- client.clone(),
- pool.clone(),
- deny_unsafe,
- )));
-
- io.extend_with(TransactionPaymentApi::to_delegate(TransactionPayment::new(
- client.clone(),
- )));
-
- // io.extend_with(ContractsApi::to_delegate(Contracts::new(client.clone())));
-
- let mut signers = Vec::new();
- if enable_dev_signer {
- signers.push(Box::new(EthDevSigner::new()) as Box);
- }
-
- let overrides = overrides_handle::<_, _, CAId>(client.clone());
-
- io.extend_with(EthApiServer::to_delegate(EthApi::new(
- client.clone(),
- pool.clone(),
- graph,
- runtime::TransactionConverter,
- network.clone(),
- signers,
- overrides.clone(),
- backend.clone(),
- is_authority,
- max_past_logs,
- block_data_cache.clone(),
- fee_history_limit,
- fee_history_cache,
- )));
- io.extend_with(UniqueApi::to_delegate(Unique::new(client.clone())));
-
- if let Some(filter_pool) = filter_pool {
- io.extend_with(EthFilterApiServer::to_delegate(EthFilterApi::new(
- client.clone(),
- backend,
- filter_pool,
- 500_usize, // max stored filters
- max_past_logs,
- block_data_cache,
- )));
- }
-
- io.extend_with(NetApiServer::to_delegate(NetApi::new(
- client.clone(),
- network.clone(),
- // Whether to format the `peer_count` response as Hex (default) or not.
- true,
- )));
-
- io.extend_with(Web3ApiServer::to_delegate(Web3Api::new(client.clone())));
-
- io.extend_with(EthPubSubApiServer::to_delegate(EthPubSubApi::new(
- pool,
- client,
- network,
- SubscriptionManager::::with_id_provider(
- HexEncodedIdProvider::default(),
- Arc::new(subscription_task_executor),
- ),
- overrides,
- )));
-
- io
-}