diff --git a/cli/src/command.rs b/cli/src/command.rs index a7eb1e7fbc46..7f513f12d586 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -53,18 +53,18 @@ impl SubstrateCli for Cli { .unwrap_or("polkadot") } else { id }; Ok(match id { - "polkadot-dev" | "dev" => Box::new(service::chain_spec::polkadot_development_config()), - "polkadot-local" => Box::new(service::chain_spec::polkadot_local_testnet_config()), - "polkadot-staging" => Box::new(service::chain_spec::polkadot_staging_testnet_config()), - "kusama-dev" => Box::new(service::chain_spec::kusama_development_config()), - "kusama-local" => Box::new(service::chain_spec::kusama_local_testnet_config()), - "kusama-staging" => Box::new(service::chain_spec::kusama_staging_testnet_config()), + "polkadot-dev" | "dev" => Box::new(service::chain_spec::polkadot_development_config()?), + "polkadot-local" => Box::new(service::chain_spec::polkadot_local_testnet_config()?), + "polkadot-staging" => Box::new(service::chain_spec::polkadot_staging_testnet_config()?), + "kusama-dev" => Box::new(service::chain_spec::kusama_development_config()?), + "kusama-local" => Box::new(service::chain_spec::kusama_local_testnet_config()?), + "kusama-staging" => Box::new(service::chain_spec::kusama_staging_testnet_config()?), "polkadot" => Box::new(service::chain_spec::polkadot_config()?), "westend" => Box::new(service::chain_spec::westend_config()?), "kusama" => Box::new(service::chain_spec::kusama_config()?), - "westend-dev" => Box::new(service::chain_spec::westend_development_config()), - "westend-local" => Box::new(service::chain_spec::westend_local_testnet_config()), - "westend-staging" => Box::new(service::chain_spec::westend_staging_testnet_config()), + "westend-dev" => Box::new(service::chain_spec::westend_development_config()?), + "westend-local" => Box::new(service::chain_spec::westend_local_testnet_config()?), + "westend-staging" => Box::new(service::chain_spec::westend_staging_testnet_config()?), path if self.run.force_kusama => { Box::new(service::KusamaChainSpec::from_json_file(std::path::PathBuf::from(path))?) }, diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index d46239ddd134..401337c218af 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -113,7 +113,7 @@ fn westend_session_keys( westend::SessionKeys { babe, grandpa, im_online, parachain_validator, authority_discovery } } -fn polkadot_staging_testnet_config_genesis() -> polkadot::GenesisConfig { +fn polkadot_staging_testnet_config_genesis(wasm_binary: &[u8]) -> polkadot::GenesisConfig { // subkey inspect "$SECRET" let endowed_accounts = vec![]; @@ -132,7 +132,7 @@ fn polkadot_staging_testnet_config_genesis() -> polkadot::GenesisConfig { polkadot::GenesisConfig { system: Some(polkadot::SystemConfig { - code: polkadot::WASM_BINARY.to_vec(), + code: wasm_binary.to_vec(), changes_trie_config: Default::default(), }), balances: Some(polkadot::BalancesConfig { @@ -197,7 +197,7 @@ fn polkadot_staging_testnet_config_genesis() -> polkadot::GenesisConfig { } } -fn westend_staging_testnet_config_genesis() -> westend::GenesisConfig { +fn westend_staging_testnet_config_genesis(wasm_binary: &[u8]) -> westend::GenesisConfig { // subkey inspect "$SECRET" let endowed_accounts = vec![ // 5ENpP27BrVdJTdUfY6djmcw3d3xEJ6NzSUU52CCPmGpMrdEY @@ -284,7 +284,7 @@ fn westend_staging_testnet_config_genesis() -> westend::GenesisConfig { westend::GenesisConfig { system: Some(westend::SystemConfig { - code: westend::WASM_BINARY.to_vec(), + code: wasm_binary.to_vec(), changes_trie_config: Default::default(), }), balances: Some(westend::BalancesConfig { @@ -337,7 +337,7 @@ fn westend_staging_testnet_config_genesis() -> westend::GenesisConfig { } } -fn kusama_staging_testnet_config_genesis() -> kusama::GenesisConfig { +fn kusama_staging_testnet_config_genesis(wasm_binary: &[u8]) -> kusama::GenesisConfig { // subkey inspect "$SECRET" let endowed_accounts = vec![ // 5CVFESwfkk7NmhQ6FwHCM9roBvr9BGa4vJHFYU8DnGQxrXvz @@ -424,7 +424,7 @@ fn kusama_staging_testnet_config_genesis() -> kusama::GenesisConfig { kusama::GenesisConfig { system: Some(kusama::SystemConfig { - code: kusama::WASM_BINARY.to_vec(), + code: wasm_binary.to_vec(), changes_trie_config: Default::default(), }), balances: Some(kusama::BalancesConfig { @@ -490,54 +490,60 @@ fn kusama_staging_testnet_config_genesis() -> kusama::GenesisConfig { } /// Polkadot staging testnet config. -pub fn polkadot_staging_testnet_config() -> PolkadotChainSpec { +pub fn polkadot_staging_testnet_config() -> Result { + let wasm_binary = polkadot::WASM_BINARY.ok_or("Polkadot development wasm not available")?; let boot_nodes = vec![]; - PolkadotChainSpec::from_genesis( + + Ok(PolkadotChainSpec::from_genesis( "Polkadot Staging Testnet", "polkadot_staging_testnet", ChainType::Live, - polkadot_staging_testnet_config_genesis, + move || polkadot_staging_testnet_config_genesis(wasm_binary), boot_nodes, Some(TelemetryEndpoints::new(vec![(POLKADOT_STAGING_TELEMETRY_URL.to_string(), 0)]) .expect("Polkadot Staging telemetry url is valid; qed")), Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } /// Staging testnet config. -pub fn kusama_staging_testnet_config() -> KusamaChainSpec { +pub fn kusama_staging_testnet_config() -> Result { + let wasm_binary = kusama::WASM_BINARY.ok_or("Kusama development wasm not available")?; let boot_nodes = vec![]; - KusamaChainSpec::from_genesis( + + Ok(KusamaChainSpec::from_genesis( "Kusama Staging Testnet", "kusama_staging_testnet", ChainType::Live, - kusama_staging_testnet_config_genesis, + move || kusama_staging_testnet_config_genesis(wasm_binary), boot_nodes, Some(TelemetryEndpoints::new(vec![(KUSAMA_STAGING_TELEMETRY_URL.to_string(), 0)]) .expect("Kusama Staging telemetry url is valid; qed")), Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } /// Westend staging testnet config. -pub fn westend_staging_testnet_config() -> WestendChainSpec { +pub fn westend_staging_testnet_config() -> Result { + let wasm_binary = westend::WASM_BINARY.ok_or("Westend development wasm not available")?; let boot_nodes = vec![]; - WestendChainSpec::from_genesis( + + Ok(WestendChainSpec::from_genesis( "Westend Staging Testnet", "westend_staging_testnet", ChainType::Live, - westend_staging_testnet_config_genesis, + move || westend_staging_testnet_config_genesis(wasm_binary), boot_nodes, Some(TelemetryEndpoints::new(vec![(WESTEND_STAGING_TELEMETRY_URL.to_string(), 0)]) .expect("Westend Staging telemetry url is valid; qed")), Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } /// Helper function to generate a crypto pair from seed @@ -595,6 +601,7 @@ fn testnet_accounts() -> Vec { /// Helper function to create polkadot GenesisConfig for testing pub fn polkadot_testnet_genesis( + wasm_binary: &[u8], initial_authorities: Vec<(AccountId, AccountId, BabeId, GrandpaId, ImOnlineId, ValidatorId, AuthorityDiscoveryId)>, _root_key: AccountId, endowed_accounts: Option>, @@ -606,7 +613,7 @@ pub fn polkadot_testnet_genesis( polkadot::GenesisConfig { system: Some(polkadot::SystemConfig { - code: polkadot::WASM_BINARY.to_vec(), + code: wasm_binary.to_vec(), changes_trie_config: Default::default(), }), indices: Some(polkadot::IndicesConfig { @@ -669,6 +676,7 @@ pub fn polkadot_testnet_genesis( /// Helper function to create kusama GenesisConfig for testing pub fn kusama_testnet_genesis( + wasm_binary: &[u8], initial_authorities: Vec<(AccountId, AccountId, BabeId, GrandpaId, ImOnlineId, ValidatorId, AuthorityDiscoveryId)>, _root_key: AccountId, endowed_accounts: Option>, @@ -680,7 +688,7 @@ pub fn kusama_testnet_genesis( kusama::GenesisConfig { system: Some(kusama::SystemConfig { - code: kusama::WASM_BINARY.to_vec(), + code: wasm_binary.to_vec(), changes_trie_config: Default::default(), }), indices: Some(kusama::IndicesConfig { @@ -743,6 +751,7 @@ pub fn kusama_testnet_genesis( /// Helper function to create polkadot GenesisConfig for testing pub fn westend_testnet_genesis( + wasm_binary: &[u8], initial_authorities: Vec<(AccountId, AccountId, BabeId, GrandpaId, ImOnlineId, ValidatorId, AuthorityDiscoveryId)>, root_key: AccountId, endowed_accounts: Option>, @@ -754,7 +763,7 @@ pub fn westend_testnet_genesis( westend::GenesisConfig { system: Some(westend::SystemConfig { - code: westend::WASM_BINARY.to_vec(), + code: wasm_binary.to_vec(), changes_trie_config: Default::default(), }), indices: Some(westend::IndicesConfig { @@ -803,8 +812,9 @@ pub fn westend_testnet_genesis( } } -fn polkadot_development_config_genesis() -> polkadot::GenesisConfig { +fn polkadot_development_config_genesis(wasm_binary: &[u8]) -> polkadot::GenesisConfig { polkadot_testnet_genesis( + wasm_binary, vec![ get_authority_keys_from_seed("Alice"), ], @@ -813,8 +823,9 @@ fn polkadot_development_config_genesis() -> polkadot::GenesisConfig { ) } -fn kusama_development_config_genesis() -> kusama::GenesisConfig { +fn kusama_development_config_genesis(wasm_binary: &[u8]) -> kusama::GenesisConfig { kusama_testnet_genesis( + wasm_binary, vec![ get_authority_keys_from_seed("Alice"), ], @@ -823,8 +834,9 @@ fn kusama_development_config_genesis() -> kusama::GenesisConfig { ) } -fn westend_development_config_genesis() -> westend::GenesisConfig { +fn westend_development_config_genesis(wasm_binary: &[u8]) -> westend::GenesisConfig { westend_testnet_genesis( + wasm_binary, vec![ get_authority_keys_from_seed("Alice"), ], @@ -834,52 +846,59 @@ fn westend_development_config_genesis() -> westend::GenesisConfig { } /// Polkadot development config (single validator Alice) -pub fn polkadot_development_config() -> PolkadotChainSpec { - PolkadotChainSpec::from_genesis( +pub fn polkadot_development_config() -> Result { + let wasm_binary = polkadot::WASM_BINARY.ok_or("Polkadot development wasm not available")?; + + Ok(PolkadotChainSpec::from_genesis( "Development", "dev", ChainType::Development, - polkadot_development_config_genesis, + move || polkadot_development_config_genesis(wasm_binary), vec![], None, Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } /// Kusama development config (single validator Alice) -pub fn kusama_development_config() -> KusamaChainSpec { - KusamaChainSpec::from_genesis( +pub fn kusama_development_config() -> Result { + let wasm_binary = kusama::WASM_BINARY.ok_or("Kusama development wasm not available")?; + + Ok(KusamaChainSpec::from_genesis( "Development", "kusama_dev", ChainType::Development, - kusama_development_config_genesis, + move || kusama_development_config_genesis(wasm_binary), vec![], None, Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } /// Westend development config (single validator Alice) -pub fn westend_development_config() -> WestendChainSpec { - WestendChainSpec::from_genesis( +pub fn westend_development_config() -> Result { + let wasm_binary = westend::WASM_BINARY.ok_or("Westend development wasm not available")?; + + Ok(WestendChainSpec::from_genesis( "Development", "westend_dev", ChainType::Development, - westend_development_config_genesis, + move || westend_development_config_genesis(wasm_binary), vec![], None, Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } -fn polkadot_local_testnet_genesis() -> polkadot::GenesisConfig { +fn polkadot_local_testnet_genesis(wasm_binary: &[u8]) -> polkadot::GenesisConfig { polkadot_testnet_genesis( + wasm_binary, vec![ get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Bob"), @@ -890,22 +909,25 @@ fn polkadot_local_testnet_genesis() -> polkadot::GenesisConfig { } /// Polkadot local testnet config (multivalidator Alice + Bob) -pub fn polkadot_local_testnet_config() -> PolkadotChainSpec { - PolkadotChainSpec::from_genesis( +pub fn polkadot_local_testnet_config() -> Result { + let wasm_binary = polkadot::WASM_BINARY.ok_or("Polkadot development wasm not available")?; + + Ok(PolkadotChainSpec::from_genesis( "Local Testnet", "local_testnet", ChainType::Local, - polkadot_local_testnet_genesis, + move || polkadot_local_testnet_genesis(wasm_binary), vec![], None, Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } -fn kusama_local_testnet_genesis() -> kusama::GenesisConfig { +fn kusama_local_testnet_genesis(wasm_binary: &[u8]) -> kusama::GenesisConfig { kusama_testnet_genesis( + wasm_binary, vec![ get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Bob"), @@ -916,22 +938,25 @@ fn kusama_local_testnet_genesis() -> kusama::GenesisConfig { } /// Kusama local testnet config (multivalidator Alice + Bob) -pub fn kusama_local_testnet_config() -> KusamaChainSpec { - KusamaChainSpec::from_genesis( +pub fn kusama_local_testnet_config() -> Result { + let wasm_binary = kusama::WASM_BINARY.ok_or("Kusama development wasm not available")?; + + Ok(KusamaChainSpec::from_genesis( "Kusama Local Testnet", "kusama_local_testnet", ChainType::Local, - kusama_local_testnet_genesis, + move || kusama_local_testnet_genesis(wasm_binary), vec![], None, Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } -fn westend_local_testnet_genesis() -> westend::GenesisConfig { +fn westend_local_testnet_genesis(wasm_binary: &[u8]) -> westend::GenesisConfig { westend_testnet_genesis( + wasm_binary, vec![ get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Bob"), @@ -942,16 +967,18 @@ fn westend_local_testnet_genesis() -> westend::GenesisConfig { } /// Westend local testnet config (multivalidator Alice + Bob) -pub fn westend_local_testnet_config() -> WestendChainSpec { - WestendChainSpec::from_genesis( +pub fn westend_local_testnet_config() -> Result { + let wasm_binary = westend::WASM_BINARY.ok_or("Westend development wasm not available")?; + + Ok(WestendChainSpec::from_genesis( "Westend Local Testnet", "westend_local_testnet", ChainType::Local, - westend_local_testnet_genesis, + move || westend_local_testnet_genesis(wasm_binary), vec![], None, Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } diff --git a/node/test-service/src/chain_spec.rs b/node/test-service/src/chain_spec.rs index e81050afdbbe..67d1667469b8 100644 --- a/node/test-service/src/chain_spec.rs +++ b/node/test-service/src/chain_spec.rs @@ -107,7 +107,7 @@ fn polkadot_testnet_genesis( polkadot::GenesisConfig { system: Some(polkadot::SystemConfig { - code: polkadot::WASM_BINARY.to_vec(), + code: polkadot::WASM_BINARY.expect("Wasm binary must be built for testing").to_vec(), changes_trie_config, }), indices: Some(polkadot::IndicesConfig { indices: vec![] }), diff --git a/parachain/test-parachains/adder/build.rs b/parachain/test-parachains/adder/build.rs index 9a2e2c8fddbe..2e407bbef387 100644 --- a/parachain/test-parachains/adder/build.rs +++ b/parachain/test-parachains/adder/build.rs @@ -19,7 +19,7 @@ use wasm_builder_runner::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("1.0.11") + .with_wasm_builder_from_crates("2.0.0") .export_heap_base() .build() } diff --git a/parachain/test-parachains/adder/src/lib.rs b/parachain/test-parachains/adder/src/lib.rs index d910eb0fc1af..7ccba8400efb 100644 --- a/parachain/test-parachains/adder/src/lib.rs +++ b/parachain/test-parachains/adder/src/lib.rs @@ -33,6 +33,13 @@ static ALLOC: dlmalloc::GlobalDlmalloc = dlmalloc::GlobalDlmalloc; #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); +#[cfg(feature = "std")] +/// Wasm binary unwrapped. If built with `BUILD_DUMMY_WASM_BINARY`, the function panics. +pub fn wasm_binary_unwrap() -> &'static [u8] { + WASM_BINARY.expect("Development wasm binary is not available. Testing is only \ + supported with the flag disabled.") +} + /// Head data for this parachain. #[derive(Default, Clone, Hash, Eq, PartialEq, Encode, Decode)] pub struct HeadData { diff --git a/parachain/test-parachains/code-upgrader/build.rs b/parachain/test-parachains/code-upgrader/build.rs index 9a2e2c8fddbe..2e407bbef387 100644 --- a/parachain/test-parachains/code-upgrader/build.rs +++ b/parachain/test-parachains/code-upgrader/build.rs @@ -19,7 +19,7 @@ use wasm_builder_runner::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("1.0.11") + .with_wasm_builder_from_crates("2.0.0") .export_heap_base() .build() } diff --git a/parachain/test-parachains/code-upgrader/src/lib.rs b/parachain/test-parachains/code-upgrader/src/lib.rs index 4a717af0084c..c0219e0229a8 100644 --- a/parachain/test-parachains/code-upgrader/src/lib.rs +++ b/parachain/test-parachains/code-upgrader/src/lib.rs @@ -34,6 +34,13 @@ static ALLOC: dlmalloc::GlobalDlmalloc = dlmalloc::GlobalDlmalloc; #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); +#[cfg(feature = "std")] +/// Wasm binary unwrapped. If built with `BUILD_DUMMY_WASM_BINARY`, the function panics. +pub fn wasm_binary_unwrap() -> &'static [u8] { + WASM_BINARY.expect("Development wasm binary is not available. Testing is only \ + supported with the flag disabled.") +} + #[derive(Encode, Decode, Clone, Default)] pub struct State { /// The current code that is "active" in this chain. diff --git a/parachain/test-parachains/halt/build.rs b/parachain/test-parachains/halt/build.rs index 9a2e2c8fddbe..2e407bbef387 100644 --- a/parachain/test-parachains/halt/build.rs +++ b/parachain/test-parachains/halt/build.rs @@ -19,7 +19,7 @@ use wasm_builder_runner::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("1.0.11") + .with_wasm_builder_from_crates("2.0.0") .export_heap_base() .build() } diff --git a/parachain/test-parachains/halt/src/lib.rs b/parachain/test-parachains/halt/src/lib.rs index fe2778ae783b..b82a649e3f1e 100644 --- a/parachain/test-parachains/halt/src/lib.rs +++ b/parachain/test-parachains/halt/src/lib.rs @@ -23,6 +23,13 @@ #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); +#[cfg(feature = "std")] +/// Wasm binary unwrapped. If built with `BUILD_DUMMY_WASM_BINARY`, the function panics. +pub fn wasm_binary_unwrap() -> &'static [u8] { + WASM_BINARY.expect("Development wasm binary is not available. Testing is only \ + supported with the flag disabled.") +} + #[cfg(not(feature = "std"))] #[panic_handler] #[no_mangle] @@ -46,4 +53,3 @@ pub fn oom(_: core::alloc::Layout) -> ! { pub extern fn validate_block(params: *const u8, len: usize) -> usize { loop {} } - diff --git a/parachain/test-parachains/tests/adder/mod.rs b/parachain/test-parachains/tests/adder/mod.rs index b0b53dc4dc6a..373eace15cac 100644 --- a/parachain/test-parachains/tests/adder/mod.rs +++ b/parachain/test-parachains/tests/adder/mod.rs @@ -44,8 +44,6 @@ struct BlockData { add: u64, } -const TEST_CODE: &[u8] = adder::WASM_BINARY; - fn hash_state(state: u64) -> [u8; 32] { tiny_keccak::keccak256(state.encode().as_slice()) } @@ -70,7 +68,7 @@ pub fn execute_good_on_parent() { let pool = parachain::wasm_executor::ValidationPool::new(); let ret = parachain::wasm_executor::validate_candidate( - TEST_CODE, + adder::wasm_binary_unwrap(), ValidationParams { parent_head: GenericHeadData(parent_head.encode()), block_data: GenericBlockData(block_data.encode()), @@ -109,7 +107,7 @@ fn execute_good_chain_on_parent() { }; let ret = parachain::wasm_executor::validate_candidate( - TEST_CODE, + adder::wasm_binary_unwrap(), ValidationParams { parent_head: GenericHeadData(parent_head.encode()), block_data: GenericBlockData(block_data.encode()), @@ -149,7 +147,7 @@ fn execute_bad_on_parent() { }; let _ret = parachain::wasm_executor::validate_candidate( - TEST_CODE, + adder::wasm_binary_unwrap(), ValidationParams { parent_head: GenericHeadData(parent_head.encode()), block_data: GenericBlockData(block_data.encode()), diff --git a/parachain/test-parachains/tests/code_upgrader/mod.rs b/parachain/test-parachains/tests/code_upgrader/mod.rs index 89f6065cf178..27b164f90c28 100644 --- a/parachain/test-parachains/tests/code_upgrader/mod.rs +++ b/parachain/test-parachains/tests/code_upgrader/mod.rs @@ -24,8 +24,6 @@ use parachain::primitives::{ use codec::{Decode, Encode}; use code_upgrader::{hash_state, HeadData, BlockData, State}; -const TEST_CODE: &[u8] = code_upgrader::WASM_BINARY; - #[test] pub fn execute_good_no_upgrade() { let pool = parachain::wasm_executor::ValidationPool::new(); @@ -42,7 +40,7 @@ pub fn execute_good_no_upgrade() { }; let ret = parachain::wasm_executor::validate_candidate( - TEST_CODE, + code_upgrader::wasm_binary_unwrap(), ValidationParams { parent_head: GenericHeadData(parent_head.encode()), block_data: GenericBlockData(block_data.encode()), @@ -78,7 +76,7 @@ pub fn execute_good_with_upgrade() { }; let ret = parachain::wasm_executor::validate_candidate( - TEST_CODE, + code_upgrader::wasm_binary_unwrap(), ValidationParams { parent_head: GenericHeadData(parent_head.encode()), block_data: GenericBlockData(block_data.encode()), @@ -121,7 +119,7 @@ pub fn code_upgrade_not_allowed() { }; parachain::wasm_executor::validate_candidate( - TEST_CODE, + code_upgrader::wasm_binary_unwrap(), ValidationParams { parent_head: GenericHeadData(parent_head.encode()), block_data: GenericBlockData(block_data.encode()), @@ -151,7 +149,7 @@ pub fn applies_code_upgrade_after_delay() { }; let ret = parachain::wasm_executor::validate_candidate( - TEST_CODE, + code_upgrader::wasm_binary_unwrap(), ValidationParams { parent_head: GenericHeadData(parent_head.encode()), block_data: GenericBlockData(block_data.encode()), @@ -186,7 +184,7 @@ pub fn applies_code_upgrade_after_delay() { }; let ret = parachain::wasm_executor::validate_candidate( - TEST_CODE, + code_upgrader::wasm_binary_unwrap(), ValidationParams { parent_head: GenericHeadData(parent_head.encode()), block_data: GenericBlockData(block_data.encode()), diff --git a/parachain/test-parachains/tests/wasm_executor/mod.rs b/parachain/test-parachains/tests/wasm_executor/mod.rs index 6ba8ddefec8d..864b9a4ea724 100644 --- a/parachain/test-parachains/tests/wasm_executor/mod.rs +++ b/parachain/test-parachains/tests/wasm_executor/mod.rs @@ -22,15 +22,12 @@ use parachain::{ wasm_executor::EXECUTION_TIMEOUT_SEC, }; -// Code that exposes `validate_block` and loops infinitely -const INFINITE_LOOP_CODE: &[u8] = halt::WASM_BINARY; - #[test] fn terminates_on_timeout() { let pool = parachain::wasm_executor::ValidationPool::new(); let result = parachain::wasm_executor::validate_candidate( - INFINITE_LOOP_CODE, + halt::wasm_binary_unwrap(), ValidationParams { block_data: BlockData(Vec::new()), parent_head: Default::default(), @@ -59,7 +56,7 @@ fn parallel_execution() { let pool2 = pool.clone(); let thread = std::thread::spawn(move || parachain::wasm_executor::validate_candidate( - INFINITE_LOOP_CODE, + halt::wasm_binary_unwrap(), ValidationParams { block_data: BlockData(Vec::new()), parent_head: Default::default(), @@ -71,7 +68,7 @@ fn parallel_execution() { parachain::wasm_executor::ExecutionMode::RemoteTest(&pool2), ).ok()); let _ = parachain::wasm_executor::validate_candidate( - INFINITE_LOOP_CODE, + halt::wasm_binary_unwrap(), ValidationParams { block_data: BlockData(Vec::new()), parent_head: Default::default(), diff --git a/runtime/kusama/build.rs b/runtime/kusama/build.rs index 56051bd627f6..af219a293198 100644 --- a/runtime/kusama/build.rs +++ b/runtime/kusama/build.rs @@ -19,7 +19,7 @@ use wasm_builder_runner::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("1.0.11") + .with_wasm_builder_from_crates("2.0.0") .import_memory() .export_heap_base() .build() diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 3e921b433b15..bfad36b90f58 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -88,7 +88,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { impl_name: create_runtime_str!("parity-kusama"), authoring_version: 2, spec_version: 2020, - impl_version: 0, + impl_version: 1, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, #[cfg(feature = "disable-runtime-api")] diff --git a/runtime/polkadot/build.rs b/runtime/polkadot/build.rs index 4ad34b2b5293..f65f04914e53 100644 --- a/runtime/polkadot/build.rs +++ b/runtime/polkadot/build.rs @@ -19,7 +19,7 @@ use wasm_builder_runner::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("1.0.11") + .with_wasm_builder_from_crates("2.0.0") .import_memory() .export_heap_base() .build() diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index f8d8cea3ab18..b6d4b15d2f29 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -87,7 +87,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { impl_name: create_runtime_str!("parity-polkadot"), authoring_version: 0, spec_version: 20, - impl_version: 0, + impl_version: 1, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, #[cfg(feature = "disable-runtime-api")] diff --git a/runtime/test-runtime/build.rs b/runtime/test-runtime/build.rs index 56051bd627f6..af219a293198 100644 --- a/runtime/test-runtime/build.rs +++ b/runtime/test-runtime/build.rs @@ -19,7 +19,7 @@ use wasm_builder_runner::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("1.0.11") + .with_wasm_builder_from_crates("2.0.0") .import_memory() .export_heap_base() .build() diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 65c92aae0c38..10fb69c97ec7 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -83,7 +83,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { impl_name: create_runtime_str!("parity-polkadot-test-runtime"), authoring_version: 2, spec_version: 1053, - impl_version: 0, + impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, }; diff --git a/runtime/westend/build.rs b/runtime/westend/build.rs index 56051bd627f6..af219a293198 100644 --- a/runtime/westend/build.rs +++ b/runtime/westend/build.rs @@ -19,7 +19,7 @@ use wasm_builder_runner::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("1.0.11") + .with_wasm_builder_from_crates("2.0.0") .import_memory() .export_heap_base() .build() diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index f48ee40e53e7..b1792de763c6 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -84,7 +84,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { impl_name: create_runtime_str!("parity-westend"), authoring_version: 2, spec_version: 40, - impl_version: 0, + impl_version: 1, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, #[cfg(feature = "disable-runtime-api")] diff --git a/service/src/chain_spec.rs b/service/src/chain_spec.rs index efbdc4c100dc..d360816ebbe4 100644 --- a/service/src/chain_spec.rs +++ b/service/src/chain_spec.rs @@ -113,7 +113,7 @@ fn westend_session_keys( westend::SessionKeys { babe, grandpa, im_online, parachain_validator, authority_discovery } } -fn polkadot_staging_testnet_config_genesis() -> polkadot::GenesisConfig { +fn polkadot_staging_testnet_config_genesis(wasm_binary: &[u8]) -> polkadot::GenesisConfig { // subkey inspect "$SECRET" let endowed_accounts = vec![]; @@ -132,7 +132,7 @@ fn polkadot_staging_testnet_config_genesis() -> polkadot::GenesisConfig { polkadot::GenesisConfig { system: Some(polkadot::SystemConfig { - code: polkadot::WASM_BINARY.to_vec(), + code: wasm_binary.to_vec(), changes_trie_config: Default::default(), }), balances: Some(polkadot::BalancesConfig { @@ -197,7 +197,7 @@ fn polkadot_staging_testnet_config_genesis() -> polkadot::GenesisConfig { } } -fn westend_staging_testnet_config_genesis() -> westend::GenesisConfig { +fn westend_staging_testnet_config_genesis(wasm_binary: &[u8]) -> westend::GenesisConfig { // subkey inspect "$SECRET" let endowed_accounts = vec![ // 5ENpP27BrVdJTdUfY6djmcw3d3xEJ6NzSUU52CCPmGpMrdEY @@ -284,7 +284,7 @@ fn westend_staging_testnet_config_genesis() -> westend::GenesisConfig { westend::GenesisConfig { system: Some(westend::SystemConfig { - code: westend::WASM_BINARY.to_vec(), + code: wasm_binary.to_vec(), changes_trie_config: Default::default(), }), balances: Some(westend::BalancesConfig { @@ -337,7 +337,7 @@ fn westend_staging_testnet_config_genesis() -> westend::GenesisConfig { } } -fn kusama_staging_testnet_config_genesis() -> kusama::GenesisConfig { +fn kusama_staging_testnet_config_genesis(wasm_binary: &[u8]) -> kusama::GenesisConfig { // subkey inspect "$SECRET" let endowed_accounts = vec![ // 5CVFESwfkk7NmhQ6FwHCM9roBvr9BGa4vJHFYU8DnGQxrXvz @@ -424,7 +424,7 @@ fn kusama_staging_testnet_config_genesis() -> kusama::GenesisConfig { kusama::GenesisConfig { system: Some(kusama::SystemConfig { - code: kusama::WASM_BINARY.to_vec(), + code: wasm_binary.to_vec(), changes_trie_config: Default::default(), }), balances: Some(kusama::BalancesConfig { @@ -490,54 +490,60 @@ fn kusama_staging_testnet_config_genesis() -> kusama::GenesisConfig { } /// Polkadot staging testnet config. -pub fn polkadot_staging_testnet_config() -> PolkadotChainSpec { +pub fn polkadot_staging_testnet_config() -> Result { + let wasm_binary = polkadot::WASM_BINARY.ok_or("Polkadot development wasm not available")?; let boot_nodes = vec![]; - PolkadotChainSpec::from_genesis( + + Ok(PolkadotChainSpec::from_genesis( "Polkadot Staging Testnet", "polkadot_staging_testnet", ChainType::Live, - polkadot_staging_testnet_config_genesis, + move || polkadot_staging_testnet_config_genesis(wasm_binary), boot_nodes, Some(TelemetryEndpoints::new(vec![(POLKADOT_STAGING_TELEMETRY_URL.to_string(), 0)]) .expect("Polkadot Staging telemetry url is valid; qed")), Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } /// Staging testnet config. -pub fn kusama_staging_testnet_config() -> KusamaChainSpec { +pub fn kusama_staging_testnet_config() -> Result { + let wasm_binary = kusama::WASM_BINARY.ok_or("Kusama development wasm not available")?; let boot_nodes = vec![]; - KusamaChainSpec::from_genesis( + + Ok(KusamaChainSpec::from_genesis( "Kusama Staging Testnet", "kusama_staging_testnet", ChainType::Live, - kusama_staging_testnet_config_genesis, + move || kusama_staging_testnet_config_genesis(wasm_binary), boot_nodes, Some(TelemetryEndpoints::new(vec![(KUSAMA_STAGING_TELEMETRY_URL.to_string(), 0)]) .expect("Kusama Staging telemetry url is valid; qed")), Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } /// Westend staging testnet config. -pub fn westend_staging_testnet_config() -> WestendChainSpec { +pub fn westend_staging_testnet_config() -> Result { + let wasm_binary = westend::WASM_BINARY.ok_or("Westend development wasm not available")?; let boot_nodes = vec![]; - WestendChainSpec::from_genesis( + + Ok(WestendChainSpec::from_genesis( "Westend Staging Testnet", "westend_staging_testnet", ChainType::Live, - westend_staging_testnet_config_genesis, + move || westend_staging_testnet_config_genesis(wasm_binary), boot_nodes, Some(TelemetryEndpoints::new(vec![(WESTEND_STAGING_TELEMETRY_URL.to_string(), 0)]) .expect("Westend Staging telemetry url is valid; qed")), Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } /// Helper function to generate a crypto pair from seed @@ -595,6 +601,7 @@ fn testnet_accounts() -> Vec { /// Helper function to create polkadot GenesisConfig for testing pub fn polkadot_testnet_genesis( + wasm_binary: &[u8], initial_authorities: Vec<(AccountId, AccountId, BabeId, GrandpaId, ImOnlineId, ValidatorId, AuthorityDiscoveryId)>, _root_key: AccountId, endowed_accounts: Option>, @@ -606,7 +613,7 @@ pub fn polkadot_testnet_genesis( polkadot::GenesisConfig { system: Some(polkadot::SystemConfig { - code: polkadot::WASM_BINARY.to_vec(), + code: wasm_binary.to_vec(), changes_trie_config: Default::default(), }), indices: Some(polkadot::IndicesConfig { @@ -669,6 +676,7 @@ pub fn polkadot_testnet_genesis( /// Helper function to create kusama GenesisConfig for testing pub fn kusama_testnet_genesis( + wasm_binary: &[u8], initial_authorities: Vec<(AccountId, AccountId, BabeId, GrandpaId, ImOnlineId, ValidatorId, AuthorityDiscoveryId)>, _root_key: AccountId, endowed_accounts: Option>, @@ -680,7 +688,7 @@ pub fn kusama_testnet_genesis( kusama::GenesisConfig { system: Some(kusama::SystemConfig { - code: kusama::WASM_BINARY.to_vec(), + code: wasm_binary.to_vec(), changes_trie_config: Default::default(), }), indices: Some(kusama::IndicesConfig { @@ -743,6 +751,7 @@ pub fn kusama_testnet_genesis( /// Helper function to create polkadot GenesisConfig for testing pub fn westend_testnet_genesis( + wasm_binary: &[u8], initial_authorities: Vec<(AccountId, AccountId, BabeId, GrandpaId, ImOnlineId, ValidatorId, AuthorityDiscoveryId)>, root_key: AccountId, endowed_accounts: Option>, @@ -754,7 +763,7 @@ pub fn westend_testnet_genesis( westend::GenesisConfig { system: Some(westend::SystemConfig { - code: westend::WASM_BINARY.to_vec(), + code: wasm_binary.to_vec(), changes_trie_config: Default::default(), }), indices: Some(westend::IndicesConfig { @@ -803,8 +812,9 @@ pub fn westend_testnet_genesis( } } -fn polkadot_development_config_genesis() -> polkadot::GenesisConfig { +fn polkadot_development_config_genesis(wasm_binary: &[u8]) -> polkadot::GenesisConfig { polkadot_testnet_genesis( + wasm_binary, vec![ get_authority_keys_from_seed("Alice"), ], @@ -813,8 +823,9 @@ fn polkadot_development_config_genesis() -> polkadot::GenesisConfig { ) } -fn kusama_development_config_genesis() -> kusama::GenesisConfig { +fn kusama_development_config_genesis(wasm_binary: &[u8]) -> kusama::GenesisConfig { kusama_testnet_genesis( + wasm_binary, vec![ get_authority_keys_from_seed("Alice"), ], @@ -823,8 +834,9 @@ fn kusama_development_config_genesis() -> kusama::GenesisConfig { ) } -fn westend_development_config_genesis() -> westend::GenesisConfig { +fn westend_development_config_genesis(wasm_binary: &[u8]) -> westend::GenesisConfig { westend_testnet_genesis( + wasm_binary, vec![ get_authority_keys_from_seed("Alice"), ], @@ -834,52 +846,59 @@ fn westend_development_config_genesis() -> westend::GenesisConfig { } /// Polkadot development config (single validator Alice) -pub fn polkadot_development_config() -> PolkadotChainSpec { - PolkadotChainSpec::from_genesis( +pub fn polkadot_development_config() -> Result { + let wasm_binary = polkadot::WASM_BINARY.ok_or("Polkadot development wasm not available")?; + + Ok(PolkadotChainSpec::from_genesis( "Development", "dev", ChainType::Development, - polkadot_development_config_genesis, + move || polkadot_development_config_genesis(wasm_binary), vec![], None, Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } /// Kusama development config (single validator Alice) -pub fn kusama_development_config() -> KusamaChainSpec { - KusamaChainSpec::from_genesis( +pub fn kusama_development_config() -> Result { + let wasm_binary = kusama::WASM_BINARY.ok_or("Kusama development wasm not available")?; + + Ok(KusamaChainSpec::from_genesis( "Development", "kusama_dev", ChainType::Development, - kusama_development_config_genesis, + move || kusama_development_config_genesis(wasm_binary), vec![], None, Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } /// Westend development config (single validator Alice) -pub fn westend_development_config() -> WestendChainSpec { - WestendChainSpec::from_genesis( +pub fn westend_development_config() -> Result { + let wasm_binary = westend::WASM_BINARY.ok_or("Westend development wasm not available")?; + + Ok(WestendChainSpec::from_genesis( "Development", "westend_dev", ChainType::Development, - westend_development_config_genesis, + move || westend_development_config_genesis(wasm_binary), vec![], None, Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } -fn polkadot_local_testnet_genesis() -> polkadot::GenesisConfig { +fn polkadot_local_testnet_genesis(wasm_binary: &[u8]) -> polkadot::GenesisConfig { polkadot_testnet_genesis( + wasm_binary, vec![ get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Bob"), @@ -890,22 +909,25 @@ fn polkadot_local_testnet_genesis() -> polkadot::GenesisConfig { } /// Polkadot local testnet config (multivalidator Alice + Bob) -pub fn polkadot_local_testnet_config() -> PolkadotChainSpec { - PolkadotChainSpec::from_genesis( +pub fn polkadot_local_testnet_config() -> Result { + let wasm_binary = polkadot::WASM_BINARY.ok_or("Polkadot development wasm not available")?; + + Ok(PolkadotChainSpec::from_genesis( "Local Testnet", "local_testnet", ChainType::Local, - polkadot_local_testnet_genesis, + move || polkadot_local_testnet_genesis(wasm_binary), vec![], None, Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } -fn kusama_local_testnet_genesis() -> kusama::GenesisConfig { +fn kusama_local_testnet_genesis(wasm_binary: &[u8]) -> kusama::GenesisConfig { kusama_testnet_genesis( + wasm_binary, vec![ get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Bob"), @@ -916,22 +938,25 @@ fn kusama_local_testnet_genesis() -> kusama::GenesisConfig { } /// Kusama local testnet config (multivalidator Alice + Bob) -pub fn kusama_local_testnet_config() -> KusamaChainSpec { - KusamaChainSpec::from_genesis( +pub fn kusama_local_testnet_config() -> Result { + let wasm_binary = kusama::WASM_BINARY.ok_or("Kusama development wasm not available")?; + + Ok(KusamaChainSpec::from_genesis( "Kusama Local Testnet", "kusama_local_testnet", ChainType::Local, - kusama_local_testnet_genesis, + move || kusama_local_testnet_genesis(wasm_binary), vec![], None, Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) } -fn westend_local_testnet_genesis() -> westend::GenesisConfig { +fn westend_local_testnet_genesis(wasm_binary: &[u8]) -> westend::GenesisConfig { westend_testnet_genesis( + wasm_binary, vec![ get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Bob"), @@ -942,16 +967,18 @@ fn westend_local_testnet_genesis() -> westend::GenesisConfig { } /// Westend local testnet config (multivalidator Alice + Bob) -pub fn westend_local_testnet_config() -> WestendChainSpec { - WestendChainSpec::from_genesis( +pub fn westend_local_testnet_config() -> Result { + let wasm_binary = westend::WASM_BINARY.ok_or("Westend development wasm not available")?; + + Ok(WestendChainSpec::from_genesis( "Westend Local Testnet", "westend_local_testnet", ChainType::Local, - westend_local_testnet_genesis, + move || westend_local_testnet_genesis(wasm_binary), vec![], None, Some(DEFAULT_PROTOCOL_ID), None, Default::default(), - ) + )) }