//! A collection of node-specific RPC methods. //! Substrate provides the `sc-rpc` crate, which defines the core RPC layer //! used by Substrate nodes. This file extends those RPC definitions with //! capabilities that are specific to this project's runtime configuration. #![warn(missing_docs)] mod eth; use std::sync::Arc; use evm_runtime_template::{opaque::Block, AccountId, Balance, Nonce}; use sc_client_api::{backend::Backend, AuxStore, BlockchainEvents, StorageProvider, UsageProvider}; pub use sc_rpc::DenyUnsafe; use sc_rpc::SubscriptionTaskExecutor; use sc_transaction_pool::ChainApi; use sc_transaction_pool_api::TransactionPool; use sp_api::{CallApiAt, ProvideRuntimeApi}; use sp_block_builder::BlockBuilder; use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}; use sp_consensus_aura::sr25519::AuthorityId as AuraId; use sp_inherents::CreateInherentDataProviders; use sp_runtime::traits::Block as BlockT; pub use self::eth::{overrides_handle, EthDeps}; use crate::rpc::eth::create_eth; /// A type representing all RPC extensions. pub type RpcExtension = jsonrpsee::RpcModule<()>; /// Full client dependencies pub struct FullDeps { /// The client instance to use. pub client: Arc, /// Transaction pool instance. pub pool: Arc

, /// Whether to deny unsafe calls pub deny_unsafe: DenyUnsafe, /// Ethereum-compatibility specific dependencies. pub eth: EthDeps, } pub struct DefaultEthConfig(std::marker::PhantomData<(C, BE)>); impl fc_rpc::EthConfig for DefaultEthConfig where C: StorageProvider + Sync + Send + 'static, BE: Backend + 'static, { type EstimateGasAdapter = (); type RuntimeStorageOverride = fc_rpc::frontier_backend_client::SystemAccountId20StorageOverride; } /// Instantiate all RPC extensions. pub fn create_full( deps: FullDeps, subscription_task_executor: SubscriptionTaskExecutor, pubsub_notification_sinks: Arc< fc_mapping_sync::EthereumBlockNotificationSinks< fc_mapping_sync::EthereumBlockNotification, >, >, ) -> Result> where C: ProvideRuntimeApi + HeaderBackend + AuxStore + HeaderMetadata + Send + Sync + CallApiAt + UsageProvider + StorageProvider + BlockchainEvents + 'static, C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, C::Api: substrate_frame_rpc_system::AccountNonceApi, C::Api: sp_consensus_aura::AuraApi, C::Api: BlockBuilder, C::Api: fp_rpc::ConvertTransactionRuntimeApi, C::Api: fp_rpc::EthereumRuntimeRPCApi, P: TransactionPool + Sync + Send + 'static, A: ChainApi + 'static, CIDP: CreateInherentDataProviders + Send + 'static, CT: fp_rpc::ConvertTransaction<::Extrinsic> + Send + Sync + 'static, BE: Backend + 'static, { use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; use substrate_frame_rpc_system::{System, SystemApiServer}; let mut module = RpcExtension::new(()); let FullDeps { client, pool, deny_unsafe, eth } = deps; module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; module.merge(TransactionPayment::new(client).into_rpc())?; let module = create_eth::<_, _, _, _, _, _, _, DefaultEthConfig>( module, eth, subscription_task_executor, pubsub_notification_sinks, )?; Ok(module) }