pub use sc_client::ExecutionStrategies;
pub use sc_client_db::{kvdb::KeyValueDB, PruningMode};
pub use sc_network::Multiaddr;
pub use sc_network::config::{ExtTransport, MultiaddrWithPeerId, NetworkConfiguration, Role, NodeKeyConfig};
pub use sc_executor::WasmExecutionMethod;
use std::{future::Future, path::{PathBuf, Path}, pin::Pin, net::SocketAddr, sync::Arc};
pub use sc_transaction_pool::txpool::Options as TransactionPoolOptions;
use sc_chain_spec::ChainSpec;
use sp_core::crypto::Protected;
pub use sc_telemetry::TelemetryEndpoints;
use prometheus_endpoint::Registry;
pub struct Configuration {
pub impl_name: &'static str,
pub impl_version: &'static str,
pub role: Role,
pub task_executor: Arc<dyn Fn(Pin<Box<dyn Future<Output = ()> + Send>>) + Send + Sync>,
pub transaction_pool: TransactionPoolOptions,
pub network: NetworkConfiguration,
pub keystore: KeystoreConfig,
pub database: DatabaseConfig,
pub state_cache_size: usize,
pub state_cache_child_ratio: Option<usize>,
pub pruning: PruningMode,
pub chain_spec: Box<dyn ChainSpec>,
pub wasm_method: WasmExecutionMethod,
pub execution_strategies: ExecutionStrategies,
pub rpc_http: Option<SocketAddr>,
pub rpc_ws: Option<SocketAddr>,
pub rpc_ws_max_connections: Option<usize>,
pub rpc_cors: Option<Vec<String>>,
pub prometheus_config: Option<PrometheusConfig>,
pub telemetry_endpoints: Option<TelemetryEndpoints>,
pub telemetry_external_transport: Option<ExtTransport>,
pub default_heap_pages: Option<u64>,
pub offchain_worker: bool,
pub force_authoring: bool,
pub disable_grandpa: bool,
pub dev_key_seed: Option<String>,
pub tracing_targets: Option<String>,
pub tracing_receiver: sc_tracing::TracingReceiver,
pub max_runtime_instances: usize,
pub announce_block: bool,
}
#[derive(Clone)]
pub enum KeystoreConfig {
Path {
path: PathBuf,
password: Option<Protected<String>>
},
InMemory,
}
impl KeystoreConfig {
pub fn path(&self) -> Option<&Path> {
match self {
Self::Path { path, .. } => Some(path),
Self::InMemory => None,
}
}
}
#[derive(Clone)]
pub enum DatabaseConfig {
Path {
path: PathBuf,
cache_size: usize,
},
Custom(Arc<dyn KeyValueDB>),
}
#[derive(Clone)]
pub struct PrometheusConfig {
pub port: SocketAddr,
pub registry: Registry,
}
impl PrometheusConfig {
pub fn new_with_default_registry(port: SocketAddr) -> Self {
Self {
port,
registry: Registry::new_custom(Some("substrate".into()), None)
.expect("this can only fail if the prefix is empty")
}
}
}
impl Configuration {
pub fn display_role(&self) -> String {
self.role.to_string()
}
}