make polkadot-runtime optional feature (#3820)

* make polkadot-runtime optional feature

* sprinkle some cfg statements

* ok

* ok, ok

* add CI check

* set -e

* chmod +x

* fixes

* fmt

* nicer compile errors

* Update outdated comments
This commit is contained in:
Andronik Ordian
2021-09-13 12:28:33 +02:00
committed by GitHub
parent 3d2c4db477
commit 33d7f9dd7b
10 changed files with 152 additions and 52 deletions
+25 -6
View File
@@ -24,8 +24,10 @@ use kusama_runtime as kusama;
use kusama_runtime::constants::currency::UNITS as KSM;
use pallet_im_online::sr25519::AuthorityId as ImOnlineId;
use pallet_staking::Forcing;
#[cfg(feature = "polkadot-native")]
use polkadot::constants::currency::UNITS as DOT;
use polkadot_primitives::v1::{AccountId, AccountPublic, AssignmentId, ValidatorId};
#[cfg(feature = "polkadot-native")]
use polkadot_runtime as polkadot;
use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
use sp_consensus_babe::AuthorityId as BabeId;
@@ -44,6 +46,7 @@ use westend_runtime as westend;
#[cfg(feature = "westend-native")]
use westend_runtime::constants::currency::UNITS as WND;
#[cfg(feature = "polkadot-native")]
const POLKADOT_STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/";
#[cfg(feature = "kusama-native")]
const KUSAMA_STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/";
@@ -71,34 +74,42 @@ pub struct Extensions {
}
/// The `ChainSpec` parameterized for the polkadot runtime.
#[cfg(feature = "polkadot-native")]
pub type PolkadotChainSpec = service::GenericChainSpec<polkadot::GenesisConfig, Extensions>;
// Dummy chain spec, in case when we don't have the native runtime.
pub type DummyChainSpec = service::GenericChainSpec<(), Extensions>;
// Dummy chain spec, but that is fine when we don't have the native runtime.
#[cfg(not(feature = "polkadot-native"))]
pub type PolkadotChainSpec = DummyChainSpec;
/// The `ChainSpec` parameterized for the kusama runtime.
#[cfg(feature = "kusama-native")]
pub type KusamaChainSpec = service::GenericChainSpec<kusama::GenesisConfig, Extensions>;
/// The `ChainSpec` parameterized for the kusama runtime.
// This actually uses the polkadot chain spec, but that is fine when we don't have the native runtime.
// Dummy chain spec, but that is fine when we don't have the native runtime.
#[cfg(not(feature = "kusama-native"))]
pub type KusamaChainSpec = PolkadotChainSpec;
pub type KusamaChainSpec = DummyChainSpec;
/// The `ChainSpec` parameterized for the westend runtime.
#[cfg(feature = "westend-native")]
pub type WestendChainSpec = service::GenericChainSpec<westend::GenesisConfig, Extensions>;
/// The `ChainSpec` parameterized for the westend runtime.
// This actually uses the polkadot chain spec, but that is fine when we don't have the native runtime.
// Dummy chain spec, but that is fine when we don't have the native runtime.
#[cfg(not(feature = "westend-native"))]
pub type WestendChainSpec = PolkadotChainSpec;
pub type WestendChainSpec = DummyChainSpec;
/// The `ChainSpec` parameterized for the rococo runtime.
#[cfg(feature = "rococo-native")]
pub type RococoChainSpec = service::GenericChainSpec<RococoGenesisExt, Extensions>;
/// The `ChainSpec` parameterized for the rococo runtime.
// This actually uses the polkadot chain spec, but that is fine when we don't have the native runtime.
// Dummy chain spec, but that is fine when we don't have the native runtime.
#[cfg(not(feature = "rococo-native"))]
pub type RococoChainSpec = PolkadotChainSpec;
pub type RococoChainSpec = DummyChainSpec;
/// Extension for the Rococo genesis config to support a custom changes to the genesis state.
#[derive(serde::Serialize, serde::Deserialize)]
@@ -195,6 +206,7 @@ fn default_parachains_host_configuration(
}
}
#[cfg(feature = "polkadot-native")]
fn polkadot_session_keys(
babe: BabeId,
grandpa: GrandpaId,
@@ -272,6 +284,7 @@ fn rococo_session_keys(
}
}
#[cfg(feature = "polkadot-native")]
fn polkadot_staging_testnet_config_genesis(wasm_binary: &[u8]) -> polkadot::GenesisConfig {
// subkey inspect "$SECRET"
let endowed_accounts = vec![];
@@ -1053,6 +1066,7 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime::
}
/// Polkadot staging testnet config.
#[cfg(feature = "polkadot-native")]
pub fn polkadot_staging_testnet_config() -> Result<PolkadotChainSpec, String> {
let wasm_binary = polkadot::WASM_BINARY.ok_or("Polkadot development wasm not available")?;
let boot_nodes = vec![];
@@ -1218,6 +1232,7 @@ fn testnet_accounts() -> Vec<AccountId> {
}
/// Helper function to create polkadot `GenesisConfig` for testing
#[cfg(feature = "polkadot-native")]
pub fn polkadot_testnet_genesis(
wasm_binary: &[u8],
initial_authorities: Vec<(
@@ -1557,6 +1572,7 @@ pub fn rococo_testnet_genesis(
}
}
#[cfg(feature = "polkadot-native")]
fn polkadot_development_config_genesis(wasm_binary: &[u8]) -> polkadot::GenesisConfig {
polkadot_testnet_genesis(
wasm_binary,
@@ -1597,6 +1613,7 @@ fn rococo_development_config_genesis(wasm_binary: &[u8]) -> rococo_runtime::Gene
}
/// Polkadot development config (single validator Alice)
#[cfg(feature = "polkadot-native")]
pub fn polkadot_development_config() -> Result<PolkadotChainSpec, String> {
let wasm_binary = polkadot::WASM_BINARY.ok_or("Polkadot development wasm not available")?;
@@ -1694,6 +1711,7 @@ pub fn wococo_development_config() -> Result<RococoChainSpec, String> {
))
}
#[cfg(feature = "polkadot-native")]
fn polkadot_local_testnet_genesis(wasm_binary: &[u8]) -> polkadot::GenesisConfig {
polkadot_testnet_genesis(
wasm_binary,
@@ -1707,6 +1725,7 @@ fn polkadot_local_testnet_genesis(wasm_binary: &[u8]) -> polkadot::GenesisConfig
}
/// Polkadot local testnet config (multivalidator Alice + Bob)
#[cfg(feature = "polkadot-native")]
pub fn polkadot_local_testnet_config() -> Result<PolkadotChainSpec, String> {
let wasm_binary = polkadot::WASM_BINARY.ok_or("Polkadot development wasm not available")?;
+47 -20
View File
@@ -82,11 +82,15 @@ pub use polkadot_client::WestendExecutorDispatch;
#[cfg(feature = "kusama-native")]
pub use polkadot_client::KusamaExecutorDispatch;
#[cfg(feature = "polkadot-native")]
pub use polkadot_client::PolkadotExecutorDispatch;
pub use chain_spec::{KusamaChainSpec, PolkadotChainSpec, RococoChainSpec, WestendChainSpec};
pub use consensus_common::{block_validation::Chain, Proposal, SelectChain};
#[cfg(feature = "full-node")]
pub use polkadot_client::{
AbstractClient, Client, ClientHandle, ExecuteWithClient, FullBackend, FullClient,
PolkadotExecutorDispatch, RuntimeApiCollection,
RuntimeApiCollection,
};
pub use polkadot_primitives::v1::{Block, BlockId, CollatorPair, Hash, Id as ParaId};
pub use sc_client_api::{Backend, CallExecutor, ExecutionStrategy};
@@ -110,6 +114,7 @@ pub use sp_runtime::{
#[cfg(feature = "kusama-native")]
pub use kusama_runtime;
#[cfg(feature = "polkadot-native")]
pub use polkadot_runtime;
#[cfg(feature = "rococo-native")]
pub use rococo_runtime;
@@ -226,6 +231,10 @@ pub enum Error {
#[cfg(feature = "full-node")]
#[error("Creating a custom database is required for validators")]
DatabasePathRequired,
#[cfg(feature = "full-node")]
#[error("Expected at least one of polkadot, kusama, westend or rococo runtime feature")]
NoRuntime,
}
/// Can be called for a `Configuration` to identify which network the configuration targets.
@@ -1268,13 +1277,19 @@ pub fn new_chain_ops(
return Ok((Arc::new(Client::Westend(client)), backend, import_queue, task_manager))
}
let service::PartialComponents { client, backend, import_queue, task_manager, .. } =
new_partial::<polkadot_runtime::RuntimeApi, PolkadotExecutorDispatch>(
config,
jaeger_agent,
None,
)?;
Ok((Arc::new(Client::Polkadot(client)), backend, import_queue, task_manager))
#[cfg(feature = "polkadot-native")]
{
let service::PartialComponents { client, backend, import_queue, task_manager, .. } =
new_partial::<polkadot_runtime::RuntimeApi, PolkadotExecutorDispatch>(
config,
jaeger_agent,
None,
)?;
return Ok((Arc::new(Client::Polkadot(client)), backend, import_queue, task_manager))
}
#[cfg(not(feature = "polkadot-native"))]
Err(Error::NoRuntime)
}
/// Build a new light node.
@@ -1295,7 +1310,13 @@ pub fn build_light(config: Configuration) -> Result<(TaskManager, RpcHandlers),
return new_light::<westend_runtime::RuntimeApi, WestendExecutorDispatch>(config)
}
new_light::<polkadot_runtime::RuntimeApi, PolkadotExecutorDispatch>(config)
#[cfg(feature = "polkadot-native")]
{
return new_light::<polkadot_runtime::RuntimeApi, PolkadotExecutorDispatch>(config)
}
#[cfg(not(feature = "polkadot-native"))]
Err(Error::NoRuntime)
}
#[cfg(feature = "full-node")]
@@ -1353,15 +1374,21 @@ pub fn build_full(
.map(|full| full.with_client(Client::Westend))
}
new_full::<polkadot_runtime::RuntimeApi, PolkadotExecutorDispatch, _>(
config,
is_collator,
grandpa_pause,
disable_beefy,
jaeger_agent,
telemetry_worker_handle,
None,
overseer_gen,
)
.map(|full| full.with_client(Client::Polkadot))
#[cfg(feature = "polkadot-native")]
{
return new_full::<polkadot_runtime::RuntimeApi, PolkadotExecutorDispatch, _>(
config,
is_collator,
grandpa_pause,
disable_beefy,
jaeger_agent,
telemetry_worker_handle,
None,
overseer_gen,
)
.map(|full| full.with_client(Client::Polkadot))
}
#[cfg(not(feature = "polkadot-native"))]
Err(Error::NoRuntime)
}