Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cumulus test runtime: remove GenesisExt #2147

Merged
merged 7 commits into from
Nov 4, 2023
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion cumulus/test/client/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ impl substrate_test_client::GenesisInit for GenesisParameters {
cumulus_test_service::testnet_genesis(
cumulus_test_service::get_account_id_from_seed::<sr25519::Public>("Alice"),
self.endowed_accounts.clone(),
None,
)
.build_storage()
.unwrap()
Expand Down Expand Up @@ -127,7 +128,7 @@ impl DefaultTestClientBuilderExt for TestClientBuilder {
}

fn genesis_config() -> RuntimeGenesisConfig {
cumulus_test_service::testnet_genesis_with_default_endowed(Default::default())
cumulus_test_service::testnet_genesis_with_default_endowed(Default::default(), None)
}

/// Create an unsigned extrinsic from a runtime call.
Expand Down
10 changes: 5 additions & 5 deletions cumulus/test/runtime/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,6 @@ impl_opaque_keys! {
pub struct SessionKeys {}
}

/// Some key that we set in genesis and only read in [`TestOnRuntimeUpgrade`] to ensure that
/// [`OnRuntimeUpgrade`] works as expected.
pub const TEST_RUNTIME_UPGRADE_KEY: &[u8] = b"+test_runtime_upgrade_key+";

/// The para-id used in this runtime.
pub const PARACHAIN_ID: u32 = 100;

Expand Down Expand Up @@ -293,6 +289,7 @@ impl cumulus_pallet_parachain_system::Config for Runtime {
}

parameter_types! {
// will be set by test_pallet during genesis init
pub storage ParachainId: cumulus_primitives_core::ParaId = PARACHAIN_ID.into();
}

Expand Down Expand Up @@ -367,7 +364,10 @@ pub struct TestOnRuntimeUpgrade;

impl OnRuntimeUpgrade for TestOnRuntimeUpgrade {
fn on_runtime_upgrade() -> frame_support::weights::Weight {
assert_eq!(sp_io::storage::get(TEST_RUNTIME_UPGRADE_KEY), Some(vec![1, 2, 3, 4].into()));
assert_eq!(
sp_io::storage::get(test_pallet::TEST_RUNTIME_UPGRADE_KEY),
Some(vec![1, 2, 3, 4].into())
);
michalkucharczyk marked this conversation as resolved.
Show resolved Hide resolved
Weight::from_parts(1, 0)
}
}
Expand Down
28 changes: 28 additions & 0 deletions cumulus/test/runtime/src/test_pallet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,15 @@
/// A special pallet that exposes dispatchables that are only useful for testing.
pub use pallet::*;

/// Some key that we set in genesis and only read in [`TestOnRuntimeUpgrade`] to ensure that
/// [`OnRuntimeUpgrade`] works as expected.
pub const TEST_RUNTIME_UPGRADE_KEY: &[u8] = b"+test_runtime_upgrade_key+";
/// Allows to set `runtime::ParachainId` in genesis:
pub const PARACHAIN_ID_RUNTIME_KEY: &[u8] = b":ParachainId:";
michalkucharczyk marked this conversation as resolved.
Show resolved Hide resolved

#[frame_support::pallet(dev_mode)]
pub mod pallet {
use crate::test_pallet::{PARACHAIN_ID_RUNTIME_KEY, TEST_RUNTIME_UPGRADE_KEY};
michalkucharczyk marked this conversation as resolved.
Show resolved Hide resolved
use frame_support::pallet_prelude::*;
use frame_system::pallet_prelude::*;

Expand All @@ -45,4 +52,25 @@ pub mod pallet {
Ok(())
}
}

#[derive(frame_support::DefaultNoBound)]
#[pallet::genesis_config]
pub struct GenesisConfig<T: Config> {
pub self_para_id: Option<cumulus_primitives_core::ParaId>,
#[serde(skip)]
pub _config: sp_std::marker::PhantomData<T>,
}

#[pallet::genesis_build]
impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
fn build(&self) {
sp_io::storage::set(TEST_RUNTIME_UPGRADE_KEY, &[1, 2, 3, 4]);
self.self_para_id.map(|para_id| {
sp_io::storage::set(
&sp_io::hashing::twox_128(&PARACHAIN_ID_RUNTIME_KEY),
&para_id.encode(),
)
michalkucharczyk marked this conversation as resolved.
Show resolved Hide resolved
});
}
}
}
37 changes: 8 additions & 29 deletions cumulus/test/service/src/chain_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,35 +17,15 @@
#![allow(missing_docs)]

use cumulus_primitives_core::ParaId;
use cumulus_test_runtime::{AccountId, Signature};
use cumulus_test_runtime::{AccountId, RuntimeGenesisConfig, Signature};
use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};
use sc_service::ChainType;
use serde::{Deserialize, Serialize};
use sp_core::{sr25519, Pair, Public};
use sp_runtime::traits::{IdentifyAccount, Verify};

/// Specialized `ChainSpec` for the normal parachain runtime.
pub type ChainSpec = sc_service::GenericChainSpec<GenesisExt, Extensions>;

/// Extension for the genesis config to add custom keys easily.
#[derive(serde::Serialize, serde::Deserialize)]
pub struct GenesisExt {
/// The runtime genesis config.
runtime_genesis_config: cumulus_test_runtime::RuntimeGenesisConfig,
/// The parachain id.
para_id: ParaId,
}

impl sp_runtime::BuildStorage for GenesisExt {
fn assimilate_storage(&self, storage: &mut sp_core::storage::Storage) -> Result<(), String> {
sp_state_machine::BasicExternalities::execute_with_storage(storage, || {
sp_io::storage::set(cumulus_test_runtime::TEST_RUNTIME_UPGRADE_KEY, &[1, 2, 3, 4]);
cumulus_test_runtime::ParachainId::set(&self.para_id);
});

self.runtime_genesis_config.assimilate_storage(storage)
}
}
pub type ChainSpec = sc_service::GenericChainSpec<RuntimeGenesisConfig, Extensions>;

/// Helper function to generate a crypto pair from seed
pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
Expand Down Expand Up @@ -86,16 +66,12 @@ pub fn get_chain_spec_with_extra_endowed(
id: ParaId,
extra_endowed_accounts: Vec<AccountId>,
) -> ChainSpec {
#[allow(deprecated)]
michalkucharczyk marked this conversation as resolved.
Show resolved Hide resolved
michalkucharczyk marked this conversation as resolved.
Show resolved Hide resolved
ChainSpec::from_genesis(
"Local Testnet",
"local_testnet",
ChainType::Local,
move || GenesisExt {
runtime_genesis_config: testnet_genesis_with_default_endowed(
extra_endowed_accounts.clone(),
),
para_id: id,
},
move || testnet_genesis_with_default_endowed(extra_endowed_accounts.clone(), Some(id)),
Vec::new(),
None,
None,
Expand All @@ -113,6 +89,7 @@ pub fn get_chain_spec(id: ParaId) -> ChainSpec {
/// Local testnet genesis for testing.
pub fn testnet_genesis_with_default_endowed(
mut extra_endowed_accounts: Vec<AccountId>,
self_para_id: Option<ParaId>,
) -> cumulus_test_runtime::RuntimeGenesisConfig {
let mut endowed = vec![
get_account_id_from_seed::<sr25519::Public>("Alice"),
Expand All @@ -130,13 +107,14 @@ pub fn testnet_genesis_with_default_endowed(
];
endowed.append(&mut extra_endowed_accounts);

testnet_genesis(get_account_id_from_seed::<sr25519::Public>("Alice"), endowed)
testnet_genesis(get_account_id_from_seed::<sr25519::Public>("Alice"), endowed, self_para_id)
}

/// Creates a local testnet genesis with endowed accounts.
pub fn testnet_genesis(
root_key: AccountId,
endowed_accounts: Vec<AccountId>,
self_para_id: Option<ParaId>,
) -> cumulus_test_runtime::RuntimeGenesisConfig {
cumulus_test_runtime::RuntimeGenesisConfig {
system: cumulus_test_runtime::SystemConfig {
Expand All @@ -152,5 +130,6 @@ pub fn testnet_genesis(
},
sudo: cumulus_test_runtime::SudoConfig { key: Some(root_key) },
transaction_payment: Default::default(),
test_pallet: cumulus_test_runtime::TestPalletConfig { self_para_id, ..Default::default() },
}
}
2 changes: 1 addition & 1 deletion cumulus/zombienet/tests/0002-pov_recovery.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ default_command = "polkadot"

chain = "rococo-local"

[relaychain.genesis.runtime.runtime_genesis_config.configuration.config]
[relaychain.genesis.runtime.configuration.config]
# set parameters such that collators only connect to 1 validator as a backing group
max_validators_per_core = 1
group_rotation_frequency = 100 # 10 mins
Expand Down
2 changes: 1 addition & 1 deletion cumulus/zombienet/tests/0005-migrate_solo_to_para.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ cumulus_based = true
add_to_genesis = false
register_para = false
# Set some random value in the genesis state to create a different genesis hash.
[parachains.genesis.runtime.runtime_genesis_config.sudo]
[parachains.genesis.runtime.sudo]
key = "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty"

# run the parachain that will be used to return the header of the solo chain.
Expand Down
Loading