1use polkadot_sdk::*;
20
21#[cfg(feature = "aura")]
22pub mod aura;
23
24#[cfg(feature = "parachain")]
25pub mod parachain;
26
27#[cfg(feature = "babe")]
28pub mod babe;
29pub mod timestamp;
30
31use crate::{ChainInfo, SignatureVerificationOverride};
32use jsonrpsee::RpcModule;
33use sc_executor::{HeapAllocStrategy, WasmExecutor, DEFAULT_HEAP_ALLOC_STRATEGY};
34use sc_rpc::SubscriptionTaskExecutor;
35use sc_service::{Configuration, PartialComponents, TFullBackend, TFullClient};
36use sc_telemetry::Telemetry;
37use sp_runtime::{generic::UncheckedExtrinsic, MultiAddress, MultiSignature};
38use sp_wasm_interface::ExtendedHostFunctions;
39
40pub type Executor = WasmExecutor<(
44 ExtendedHostFunctions<sp_io::SubstrateHostFunctions, SignatureVerificationOverride>,
45 cumulus_client_service::storage_proof_size::HostFunctions,
46)>;
47
48pub fn new_wasm_executor(config: &Configuration) -> Executor {
50 let strategy = config
51 .executor
52 .default_heap_pages
53 .map_or(DEFAULT_HEAP_ALLOC_STRATEGY, |p| HeapAllocStrategy::Static { extra_pages: p as _ });
54 WasmExecutor::builder()
55 .with_execution_method(config.executor.wasm_method)
56 .with_onchain_heap_alloc_strategy(strategy)
57 .with_offchain_heap_alloc_strategy(strategy)
58 .with_max_runtime_instances(config.executor.max_runtime_instances)
59 .with_runtime_cache_size(config.executor.runtime_cache_size)
60 .build()
61}
62
63pub type FullClientFor<C> =
65 TFullClient<<C as ChainInfo>::Block, <C as ChainInfo>::RuntimeApi, Executor>;
66
67pub type UncheckedExtrinsicFor<T> = UncheckedExtrinsic<
69 MultiAddress<
70 <<T as ChainInfo>::Runtime as frame_system::Config>::AccountId,
71 <<T as ChainInfo>::Runtime as frame_system::Config>::Nonce,
72 >,
73 <<T as ChainInfo>::Runtime as frame_system::Config>::RuntimeCall,
74 MultiSignature,
75 <T as ChainInfo>::SignedExtras,
76>;
77
78pub type FullBackendFor<C> = TFullBackend<<C as ChainInfo>::Block>;
80
81pub struct SimnodeParams<Client, Backend, SelectChain, Pool, ImportQueue, BlockImport, U> {
83 pub components: PartialComponents<
85 Client,
86 Backend,
87 SelectChain,
88 ImportQueue,
89 Pool,
90 (BlockImport, Option<Telemetry>, U),
91 >,
92 pub config: Configuration,
94 pub instant: bool,
96 pub rpc_builder:
98 Box<dyn Fn(SubscriptionTaskExecutor) -> Result<RpcModule<()>, sc_service::Error>>,
99}