mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-25 22:17:58 +00:00
eaf057c5ed
* First baby steps * Split scheduler into several modules * Towards a more modular approach for scheduling * move free_cores; IntoInterator -> BTreeMap * Move clear() * Move more functions out of scheduler * Change weight composition * More abstraction * Further refactor * clippy * fmt * fix test-runtime * Add parathreads pallet to construct_runtime! * Make all runtimes use (Parachains, Parathreads) scheduling * Delete commented out code * Remove parathreads scheduler from westend, rococo, and kusama * fix rococo, westend, and kusama config * Revert "fix rococo, westend, and kusama config" This reverts commit 59e4de380d5c7d17eaaba5e2c2b81405de3465e3. * Revert "Remove parathreads scheduler from westend, rococo, and kusama" This reverts commit 4c44255296083ac5670560790ed77104917890a4. * Remove CoreIndex from free_cores * Remove unnecessary struct for parathreads * parathreads provider take 1 * Comment out parathread tests * Pop into lookahead * fmt * Fill lookahead with two entries for parachains * fmt * Current stage * Towards ab parathreads * no AB use * Make tests typecheck * quick hack to set scheduling lookahead to 1 * Fix scheduler tests * fix paras_inherent tests * misc * Update more of a test * cfg(test) * some cleanup * Undo paras_inherent changes * Adjust paras inherent tests * Undo changes to v2 primitives * Undo v2 mod changes to tests * minor * Remove parathreads assigner and pallet * minor * minor * more cleanup * fmt * minor * minor * minor * Remove on_new_session from assignment provider * Make adder collator integration test pass * disable failing unit tests * minor * minor * re-enable one unit test * minor * handle retries, add concluded para to pop interface * comment out unused code * Remove core_para from interface * Remove first claimqueue element on clear if None instead removing all Nones * Move claimqueue get out of loop * Use VecDeque instead of Ved in ClaimQueue * Make occupied() AB ready(?) * handle freed disputed in clear_and_fill_claimqueue * clear_and_fill_claimqueue returns scheduled Vec * Rename and minor refactor * return position of assignment taken from claimqueue * minor * Fix session boundary parachains number change + extended test * Fix runtimes * Fix polkadot runtime * Remove polkadot pallet from benchmarks * fix test runtime * Add storage migration * Minor refactor * Minor * migratin typechecks * Add migration to runtimes * Towards modular scheduling II (#6568) * Add post migration check * pebkac * Disable migrations but mine * Revert "Disable migrations but mine" This reverts commit 4fa5c5a370c199944a7e0926f50b08626bfbad4c. * Move scheduler migration * Revert "Move scheduler migration" This reverts commit a16b1659a907950bae048a9f7010f2aa76e02b6d. * Fix migration * cleanup * Don't lose retries value anymore * comment out test function * Remove retries value from Assignment again * minor * Make collator for parathreads optional * data type refactor * update scheduler tests * Change test function cfg * comment out test function * Try cfg(test) only * fix cfg flags * Add get_max_retries function to provider interface (#7047) * Fix merge commit * pebkac * fix merge * update cargo.lock * fix merge * fix merge * Use btreemap instead of vec, fix scheduler calls. * Use imported `ScheduledCore` * Remove unused import in inclusion tests * Use keys() instead of mapping over a BTreeMap * Fix migrations for parachains scheduler * Use BlockNumberFor<T> everywhere in scheduler * Add on demand assignment provider pallet (#7110) * Address some PR comments * minor * more cleanup * find_map and timeout availability fixes * Change default scheduling_lookahead to 1 * Add on demand assignment provider pallet * Move test-runtime to new assignment provider * Run cargo format on scheduler tests * minor * Mutate cores in single loop * timeout predicate simplification * claimqueue desired size fix * Replace expect by ok_or * More improvements * Fix push back order and next_up_on_timeout * minor * session change docs * Add pre_new_session call to hand pre session updates * Remove sc_network dependency and PeerId from unnecessary data structures * Remove unnecessary peer_ids * Add OnDemandOrdering proxy (#7156) * Add OnDemandBidding proxy * Fix names * OnDemandAssigner for rococo only * Check PeerId in collator protocol before fetching collation * On occupied, remove non occupied cores from the claimqueue front and refill * Add missing docs * Comment out unused field * fix ScheduledCore in tests * Fix the fix * pebkac * fmt * Fix occupied dropping * Remove double import * ScheduledCore fixes * Readd sc-network dep * pebkac * OpaquePeerId -> PeerId in can_collate interface * Cargo.lock update for interface change * Remove checks not needed anymore? * Drop occupied core on session change if it would time out after the new session * Add on demand assignment provider pallet * Move test-runtime to new assignment provider * Run cargo format on scheduler tests * Add OnDemandOrdering proxy (#7156) * Add OnDemandBidding proxy * Fix names * OnDemandAssigner for rococo only * Remove unneeded config values * Update comments * Use and_then for queue position * Return the max size of the spot queue on error * Add comments to add_parathread_entry * Add module comments * Add log for when can_collate fails * Change assigner queue type to `Assignment` * Update assignment provider tests * More logs * Remove unused keyring import * disable can_collate * comment out can_collate * Can collate first checks set if empty * Move can_collate call to collation advertisement * Fix backing test * map to loop * Remove obsolete check * Move invalid collation test from backing to collator-protocol * fix unused imports * fix test * fix Debug derivation * Increase time limit on zombienet predicates * Increase zombienet timeout * Minor * Address some PR comments * Address PR comments * Comment out failing assert due to on-demand assigner missing * remove collator_restrictions info from backing * Move can_collate to ActiveParas * minor * minor * Update weight information for on demand config * Add ttl to parasentry * Fix tests missing parasentry ttl * Adjust scheduler tests to use ttl default values * Use match instead of if let for ttl drop * Use RuntimeDebug trait for `ParasEntry` fields * Add comments to on demand assignment pallet * Fix spot traffic calculation * Revert runtimedebug changes to primitives * Remove runtimedebug derivation from `ParasEntry` * Mention affinity in pallet level docs * Use RuntimeDebug trait for ParasEntry child types * Remove collator restrictions * Fix primitive versioning and other merge issues * Fix tests post merge * Fix node side tests * Edit parascheduler migration for clarity * Move parascheduler migration up to next release * Remove vestiges from merge * Fix tests * Refactor ttl handling * Remove unused things from scheduler tests * Move on demand assigner to own directory * Update documentation * Remove unused sc-network dependency in primitives Was used for collator restrictions * Remove unused import * Reenable scheduler test * Remove unused storage value * Enable timeout predicate test and fix fn Turns out that the issue with the compiler is fixed and we can now use impl Trait in the manner used here. * Remove unused imports * Add benchmarking entry for perbill in config * Correct typo * Address review comments * Log out errors when calculating spot traffic. * Change parascheduler's log target name * Update scheduler_common documentation * Use mutate for affinity fns, add tests * Add another on demand affinity test * Unify parathreads and parachains in HostConfig (take 2) (#7452) * Unify parathreads and parachains in HostConfig * Fixed missed occurences * Remove commented out lines * `HostConfiguration v7` * Fix version check * Add `MigrateToV7` to `Unreleased` * fmt * fmt * Fix compilation errors after the rebase * Update runtime/parachains/src/scheduler/tests.rs Co-authored-by: Anton Vilhelm Ásgeirsson <antonva@users.noreply.github.com> * Update runtime/parachains/src/scheduler/tests.rs Co-authored-by: Anton Vilhelm Ásgeirsson <antonva@users.noreply.github.com> * fmt * Fix migration test * Fix tests * Remove unneeded assert from tests * parathread_cores -> on_demand_cores; parathread_retries -> on_demand_retries * Fix a compilation error in tests * Remove unused `use` * update colander image version --------- Co-authored-by: alexgparity <alex.gremm@parity.io> Co-authored-by: Anton Vilhelm Ásgeirsson <antonva@users.noreply.github.com> Co-authored-by: Javier Viola <javier@parity.io> * Fix branch after merge with master * Refactor out duplicate checks into a helper fn * Fix tests post merge * Rename add_parathread_assignment, add test * Update docs * Remove unused on_finalize function * Add weight info to on demand pallet * Update runtime/parachains/src/configuration.rs Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io> * Update runtime/parachains/src/scheduler_common/mod.rs Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io> * Update runtime/parachains/src/assigner_on_demand/mod.rs Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io> * Add benchmarking to on demand pallet * Make place_order test check for success * Add on demand benchmarks * Add local test weights to rococo runtime * Modify TTL drop behaviour to not skip claims Previous behaviour would jump a new claim from the assignment provider ahead in the claimqueue, assuming lookahead is larger than 1. * Refactor ttl test to test claimqueue order * Disable place_order ext. when no on_demand cores * Use default genesis config for benchmark tests * Refactor config builder param * Move lifecycle test from scheduler to on demand * Remove unneeded lifecycle test Paras module via the parachain assignment provider doesn't provide new assignments if a parachain loses it's lease. The on demand assignment provider doesn't provide an assignment that is not a parathread. * Re enable validator shuffle test * More realistic weights for place_order * Remove redundant import * Fix backwards compatibility (hopefully) * ".git/.scripts/commands/bench/bench.sh" --subcommand=runtime --runtime=rococo --target_dir=polkadot --pallet=runtime_parachains::assigner_on_demand * Fix tests. * Fix off-by-one. * Re enable claimqueue fills test * Re enable schedule_rotates_groups test * Fix fill_claimqueue_fills test * Re enable next_up_on_timeout test, move fn * Do not pop from assignment provider when retrying * Fix tests missing collator in scheduledcore * Add comment about timeout predicate. * Rename parasentry retries to availability timeouts * Re enable schedule_schedules... test * Refactor prune retried test to new scheduler * Have all scheduler tests use genesis_cfg fn * Update docs * Update copyright notices on new files * Rename is_parachain_core to is_bulk_core * Remove erroneous TODO * Simplify import * ".git/.scripts/commands/bench/bench.sh" --subcommand=runtime --runtime=rococo --target_dir=polkadot --pallet=runtime_parachains::configuration * Revert AdvertiseCollation order shuffle * Refactor place_order into keepalive and allowdeath * Revert rename of hrmp max inbound channels parachain encompasses both on demand and slot auction / bulk. * Restore availability_timeout_predicate function * Clean up leftover comments * Update runtime/parachains/src/scheduler/tests.rs Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io> * ".git/.scripts/commands/bench/bench.sh" --subcommand=runtime --runtime=westend --target_dir=polkadot --pallet=runtime_parachains::configuration --------- Co-authored-by: alexgparity <alex.gremm@parity.io> Co-authored-by: alexgparity <115470171+alexgparity@users.noreply.github.com> Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io> Co-authored-by: Javier Viola <javier@parity.io> Co-authored-by: eskimor <eskimor@no-such-url.com> Co-authored-by: command-bot <> * On Demand - update weights and small nits (#7605) * Remove collator restriction test in inclusion On demand parachains won't have collator restrictions implemented in this way but will instead use a preferred collator registered to a `ParaId` in `paras_registrar`. * Remove redundant config guard for test fns * Update weights * Update WeightInfo for on_demand assigner * Unify assignment provider parameters into one call (#7606) * Combine assignmentprovider params into one fn call * Move scheduler_common to a module under scheduler * Fix ttl handling in benchmark builder * Run cargo format * Remove obsolete test. * Small improvement. * Use same migration pattern as config module * Remove old TODO * Change log target name for assigner on demand * Fix migration * Fix clippy warnings * Add HostConfiguration storage migration to V8 * Add `MigrateToV8` to unreleased migrations for all runtimes * Fix storage version check for config v8 * Set `StorageVersion` to 8 in `MigrateToV8` * Remove dups. * Update primitives/src/v5/mod.rs Co-authored-by: Bastian Köcher <git@kchr.de> --------- Co-authored-by: alexgparity <alex.gremm@parity.io> Co-authored-by: alexgparity <115470171+alexgparity@users.noreply.github.com> Co-authored-by: antonva <anton.asgeirsson@parity.io> Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io> Co-authored-by: Anton Vilhelm Ásgeirsson <antonva@users.noreply.github.com> Co-authored-by: Javier Viola <javier@parity.io> Co-authored-by: eskimor <eskimor@no-such-url.com> Co-authored-by: Bastian Köcher <git@kchr.de>
1953 lines
65 KiB
Rust
1953 lines
65 KiB
Rust
// Copyright (C) Parity Technologies (UK) Ltd.
|
|
// This file is part of Polkadot.
|
|
|
|
// Polkadot is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// Polkadot is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
//! Polkadot chain configurations.
|
|
|
|
use beefy_primitives::ecdsa_crypto::AuthorityId as BeefyId;
|
|
use grandpa::AuthorityId as GrandpaId;
|
|
#[cfg(feature = "kusama-native")]
|
|
use kusama_runtime as kusama;
|
|
#[cfg(feature = "kusama-native")]
|
|
use kusama_runtime_constants::currency::UNITS as KSM;
|
|
use pallet_im_online::sr25519::AuthorityId as ImOnlineId;
|
|
#[cfg(any(
|
|
feature = "polkadot-native",
|
|
feature = "kusama-native",
|
|
feature = "westend-native",
|
|
))]
|
|
use pallet_staking::Forcing;
|
|
use polkadot_primitives::{AccountId, AccountPublic, AssignmentId, ValidatorId};
|
|
#[cfg(feature = "polkadot-native")]
|
|
use polkadot_runtime as polkadot;
|
|
#[cfg(feature = "polkadot-native")]
|
|
use polkadot_runtime_constants::currency::UNITS as DOT;
|
|
use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
|
|
use sp_consensus_babe::AuthorityId as BabeId;
|
|
|
|
#[cfg(feature = "rococo-native")]
|
|
use rococo_runtime as rococo;
|
|
#[cfg(feature = "rococo-native")]
|
|
use rococo_runtime_constants::currency::UNITS as ROC;
|
|
use sc_chain_spec::ChainSpecExtension;
|
|
#[cfg(any(
|
|
feature = "polkadot-native",
|
|
feature = "kusama-native",
|
|
feature = "westend-native",
|
|
feature = "rococo-native"
|
|
))]
|
|
use sc_chain_spec::ChainType;
|
|
use serde::{Deserialize, Serialize};
|
|
use sp_core::{sr25519, Pair, Public};
|
|
use sp_runtime::traits::IdentifyAccount;
|
|
#[cfg(any(
|
|
feature = "polkadot-native",
|
|
feature = "kusama-native",
|
|
feature = "westend-native",
|
|
))]
|
|
use sp_runtime::Perbill;
|
|
#[cfg(any(
|
|
feature = "polkadot-native",
|
|
feature = "kusama-native",
|
|
feature = "westend-native",
|
|
feature = "rococo-native"
|
|
))]
|
|
use telemetry::TelemetryEndpoints;
|
|
#[cfg(feature = "westend-native")]
|
|
use westend_runtime as westend;
|
|
#[cfg(feature = "westend-native")]
|
|
use westend_runtime_constants::currency::UNITS as WND;
|
|
|
|
#[cfg(feature = "kusama-native")]
|
|
const KUSAMA_STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/";
|
|
#[cfg(feature = "westend-native")]
|
|
const WESTEND_STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/";
|
|
#[cfg(feature = "rococo-native")]
|
|
const ROCOCO_STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/";
|
|
#[cfg(feature = "rococo-native")]
|
|
const VERSI_STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/";
|
|
#[cfg(any(
|
|
feature = "polkadot-native",
|
|
feature = "kusama-native",
|
|
feature = "westend-native",
|
|
feature = "rococo-native"
|
|
))]
|
|
const DEFAULT_PROTOCOL_ID: &str = "dot";
|
|
|
|
/// Node `ChainSpec` extensions.
|
|
///
|
|
/// Additional parameters for some Substrate core modules,
|
|
/// customizable from the chain spec.
|
|
#[derive(Default, Clone, Serialize, Deserialize, ChainSpecExtension)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct Extensions {
|
|
/// Block numbers with known hashes.
|
|
pub fork_blocks: sc_client_api::ForkBlocks<polkadot_primitives::Block>,
|
|
/// Known bad block hashes.
|
|
pub bad_blocks: sc_client_api::BadBlocks<polkadot_primitives::Block>,
|
|
/// The light sync state.
|
|
///
|
|
/// This value will be set by the `sync-state rpc` implementation.
|
|
pub light_sync_state: sc_sync_state_rpc::LightSyncStateExtension,
|
|
}
|
|
|
|
/// The `ChainSpec` parameterized for the polkadot runtime.
|
|
#[cfg(feature = "polkadot-native")]
|
|
pub type PolkadotChainSpec = service::GenericChainSpec<polkadot::RuntimeGenesisConfig, 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::RuntimeGenesisConfig, Extensions>;
|
|
|
|
/// The `ChainSpec` parameterized for the kusama runtime.
|
|
// Dummy chain spec, but that is fine when we don't have the native runtime.
|
|
#[cfg(not(feature = "kusama-native"))]
|
|
pub type KusamaChainSpec = DummyChainSpec;
|
|
|
|
/// The `ChainSpec` parameterized for the westend runtime.
|
|
#[cfg(feature = "westend-native")]
|
|
pub type WestendChainSpec = service::GenericChainSpec<westend::RuntimeGenesisConfig, Extensions>;
|
|
|
|
/// The `ChainSpec` parameterized for the westend runtime.
|
|
// Dummy chain spec, but that is fine when we don't have the native runtime.
|
|
#[cfg(not(feature = "westend-native"))]
|
|
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 `versi` runtime.
|
|
///
|
|
/// As of now `Versi` will just be a clone of `Rococo`, until we need it to differ.
|
|
pub type VersiChainSpec = RococoChainSpec;
|
|
|
|
/// The `ChainSpec` parameterized for the rococo runtime.
|
|
// Dummy chain spec, but that is fine when we don't have the native runtime.
|
|
#[cfg(not(feature = "rococo-native"))]
|
|
pub type RococoChainSpec = DummyChainSpec;
|
|
|
|
/// Extension for the Rococo genesis config to support a custom changes to the genesis state.
|
|
#[derive(serde::Serialize, serde::Deserialize)]
|
|
#[cfg(feature = "rococo-native")]
|
|
pub struct RococoGenesisExt {
|
|
/// The runtime genesis config.
|
|
runtime_genesis_config: rococo::RuntimeGenesisConfig,
|
|
/// The session length in blocks.
|
|
///
|
|
/// If `None` is supplied, the default value is used.
|
|
session_length_in_blocks: Option<u32>,
|
|
}
|
|
|
|
#[cfg(feature = "rococo-native")]
|
|
impl sp_runtime::BuildStorage for RococoGenesisExt {
|
|
fn assimilate_storage(&self, storage: &mut sp_core::storage::Storage) -> Result<(), String> {
|
|
sp_state_machine::BasicExternalities::execute_with_storage(storage, || {
|
|
if let Some(length) = self.session_length_in_blocks.as_ref() {
|
|
rococo_runtime_constants::time::EpochDurationInBlocks::set(length);
|
|
}
|
|
});
|
|
self.runtime_genesis_config.assimilate_storage(storage)
|
|
}
|
|
}
|
|
|
|
pub fn polkadot_config() -> Result<PolkadotChainSpec, String> {
|
|
PolkadotChainSpec::from_json_bytes(&include_bytes!("../chain-specs/polkadot.json")[..])
|
|
}
|
|
|
|
pub fn kusama_config() -> Result<KusamaChainSpec, String> {
|
|
KusamaChainSpec::from_json_bytes(&include_bytes!("../chain-specs/kusama.json")[..])
|
|
}
|
|
|
|
pub fn westend_config() -> Result<WestendChainSpec, String> {
|
|
WestendChainSpec::from_json_bytes(&include_bytes!("../chain-specs/westend.json")[..])
|
|
}
|
|
|
|
pub fn rococo_config() -> Result<RococoChainSpec, String> {
|
|
RococoChainSpec::from_json_bytes(&include_bytes!("../chain-specs/rococo.json")[..])
|
|
}
|
|
|
|
/// This is a temporary testnet that uses the same runtime as rococo.
|
|
pub fn wococo_config() -> Result<RococoChainSpec, String> {
|
|
RococoChainSpec::from_json_bytes(&include_bytes!("../chain-specs/wococo.json")[..])
|
|
}
|
|
|
|
/// The default parachains host configuration.
|
|
#[cfg(any(
|
|
feature = "rococo-native",
|
|
feature = "kusama-native",
|
|
feature = "westend-native",
|
|
feature = "polkadot-native"
|
|
))]
|
|
fn default_parachains_host_configuration(
|
|
) -> polkadot_runtime_parachains::configuration::HostConfiguration<polkadot_primitives::BlockNumber>
|
|
{
|
|
use polkadot_primitives::{MAX_CODE_SIZE, MAX_POV_SIZE};
|
|
|
|
polkadot_runtime_parachains::configuration::HostConfiguration {
|
|
validation_upgrade_cooldown: 2u32,
|
|
validation_upgrade_delay: 2,
|
|
code_retention_period: 1200,
|
|
max_code_size: MAX_CODE_SIZE,
|
|
max_pov_size: MAX_POV_SIZE,
|
|
max_head_data_size: 32 * 1024,
|
|
group_rotation_frequency: 20,
|
|
paras_availability_period: 4,
|
|
max_upward_queue_count: 8,
|
|
max_upward_queue_size: 1024 * 1024,
|
|
max_downward_message_size: 1024 * 1024,
|
|
max_upward_message_size: 50 * 1024,
|
|
max_upward_message_num_per_candidate: 5,
|
|
hrmp_sender_deposit: 0,
|
|
hrmp_recipient_deposit: 0,
|
|
hrmp_channel_max_capacity: 8,
|
|
hrmp_channel_max_total_size: 8 * 1024,
|
|
hrmp_max_parachain_inbound_channels: 4,
|
|
hrmp_channel_max_message_size: 1024 * 1024,
|
|
hrmp_max_parachain_outbound_channels: 4,
|
|
hrmp_max_message_num_per_candidate: 5,
|
|
dispute_period: 6,
|
|
no_show_slots: 2,
|
|
n_delay_tranches: 25,
|
|
needed_approvals: 2,
|
|
relay_vrf_modulo_samples: 2,
|
|
zeroth_delay_tranche_width: 0,
|
|
minimum_validation_upgrade_delay: 5,
|
|
..Default::default()
|
|
}
|
|
}
|
|
|
|
#[cfg(any(
|
|
feature = "rococo-native",
|
|
feature = "kusama-native",
|
|
feature = "westend-native",
|
|
feature = "polkadot-native"
|
|
))]
|
|
#[test]
|
|
fn default_parachains_host_configuration_is_consistent() {
|
|
default_parachains_host_configuration().panic_if_not_consistent();
|
|
}
|
|
|
|
#[cfg(feature = "polkadot-native")]
|
|
fn polkadot_session_keys(
|
|
babe: BabeId,
|
|
grandpa: GrandpaId,
|
|
im_online: ImOnlineId,
|
|
para_validator: ValidatorId,
|
|
para_assignment: AssignmentId,
|
|
authority_discovery: AuthorityDiscoveryId,
|
|
) -> polkadot::SessionKeys {
|
|
polkadot::SessionKeys {
|
|
babe,
|
|
grandpa,
|
|
im_online,
|
|
para_validator,
|
|
para_assignment,
|
|
authority_discovery,
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "kusama-native")]
|
|
fn kusama_session_keys(
|
|
babe: BabeId,
|
|
grandpa: GrandpaId,
|
|
im_online: ImOnlineId,
|
|
para_validator: ValidatorId,
|
|
para_assignment: AssignmentId,
|
|
authority_discovery: AuthorityDiscoveryId,
|
|
) -> kusama::SessionKeys {
|
|
kusama::SessionKeys {
|
|
babe,
|
|
grandpa,
|
|
im_online,
|
|
para_validator,
|
|
para_assignment,
|
|
authority_discovery,
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "westend-native")]
|
|
fn westend_session_keys(
|
|
babe: BabeId,
|
|
grandpa: GrandpaId,
|
|
im_online: ImOnlineId,
|
|
para_validator: ValidatorId,
|
|
para_assignment: AssignmentId,
|
|
authority_discovery: AuthorityDiscoveryId,
|
|
) -> westend::SessionKeys {
|
|
westend::SessionKeys {
|
|
babe,
|
|
grandpa,
|
|
im_online,
|
|
para_validator,
|
|
para_assignment,
|
|
authority_discovery,
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "rococo-native")]
|
|
fn rococo_session_keys(
|
|
babe: BabeId,
|
|
grandpa: GrandpaId,
|
|
im_online: ImOnlineId,
|
|
para_validator: ValidatorId,
|
|
para_assignment: AssignmentId,
|
|
authority_discovery: AuthorityDiscoveryId,
|
|
beefy: BeefyId,
|
|
) -> rococo_runtime::SessionKeys {
|
|
rococo_runtime::SessionKeys {
|
|
babe,
|
|
grandpa,
|
|
im_online,
|
|
para_validator,
|
|
para_assignment,
|
|
authority_discovery,
|
|
beefy,
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "westend-native")]
|
|
fn westend_staging_testnet_config_genesis(wasm_binary: &[u8]) -> westend::RuntimeGenesisConfig {
|
|
use hex_literal::hex;
|
|
use sp_core::crypto::UncheckedInto;
|
|
|
|
// subkey inspect "$SECRET"
|
|
let endowed_accounts = vec![
|
|
// 5DaVh5WRfazkGaKhx1jUu6hjz7EmRe4dtW6PKeVLim84KLe8
|
|
hex!["42f4a4b3e0a89c835ee696205caa90dd85c8ea1d7364b646328ee919a6b2fc1e"].into(),
|
|
];
|
|
// SECRET='...' ./scripts/prepare-test-net.sh 4
|
|
let initial_authorities: Vec<(
|
|
AccountId,
|
|
AccountId,
|
|
BabeId,
|
|
GrandpaId,
|
|
ImOnlineId,
|
|
ValidatorId,
|
|
AssignmentId,
|
|
AuthorityDiscoveryId,
|
|
)> = vec![
|
|
(
|
|
//5ERCqy118nnXDai8g4t3MjdX7ZC5PrQzQpe9vwex5cELWqbt
|
|
hex!["681af4f93073484e1acd6b27395d0d258f1a6b158c808846c8fd05ee2435056e"].into(),
|
|
//5GTS114cfQNBgpQULhMaNCPXGds6NokegCnikxDe1vqANhtn
|
|
hex!["c2463372598ebabd21ee5bc33e1d7e77f391d2df29ce2fbe6bed0d13be629a45"].into(),
|
|
//5FhGbceKeH7fuGogcBwd28ZCkAwDGYBADCTeHiYrvx2ztyRd
|
|
hex!["a097bfc6a33499ed843b711f52f523f8a7174f798a9f98620e52f4170dbe2948"]
|
|
.unchecked_into(),
|
|
//5Es7nDkJt2by5qVCCD7PZJdp76KJw1LdRCiNst5S5f4eecnz
|
|
hex!["7bde49dda82c2c9f082b807ef3ceebff96437d67b3e630c584db7a220ecafacf"]
|
|
.unchecked_into(),
|
|
//5D4e8zRjaYzFamqChGPPtu26PcKbKgUrhb7WqcNbKa2RDFUR
|
|
hex!["2c2fb730a7d9138e6d62fcf516f9ecc2d712af3f2f03ca330c9564b8c0c1bb33"]
|
|
.unchecked_into(),
|
|
//5DD3JY5ENkjcgVFbVSgUbZv7WmrnyJ8bxxu56ee6hZFiRdnh
|
|
hex!["3297a8622988cc23dd9c131e3fb8746d49e007f6e58a81d43420cd539e250e4c"]
|
|
.unchecked_into(),
|
|
//5Gpodowhud8FG9xENXR5YwTFbUAWyoEtw7sYFytFsG4z7SU6
|
|
hex!["d2932edf775088bd088dc5a112ad867c24cc95858f77f8a1ab014de8d4f96a3f"]
|
|
.unchecked_into(),
|
|
//5GUMj8tnjL3PJZgXoiWtgLCaMVNHBNeSeTqDsvcxmaVAjKn9
|
|
hex!["c2fb0f74591a00555a292bc4882d3158bafc4c632124cb60681f164ef81bcf72"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
//5HgDCznTkHKUjzPkQoTZGWbvbyqB7sqHDBPDKdF1FyVYM7Er
|
|
hex!["f8418f189f84814fd40cc1b2e90873e72ea789487f3b98ed42811ba76d10fc37"].into(),
|
|
//5GQTryeFwuvgmZ2tH5ZeAKZHRM9ch5WGVGo6ND9P8f9uMsNY
|
|
hex!["c002bb4af4a1bd2f33d104aef8a41878fe1ac94ba007029c4dfdefa8b698d043"].into(),
|
|
//5C7YkWSVH1zrpsE5KwW1ua1qatyphzYxiZrL24mjkxz7mUbn
|
|
hex!["022b14fbcf65a93b81f453105b9892c3fc4aa74c22c53b4abab019e1d58fbd41"]
|
|
.unchecked_into(),
|
|
//5GwFC6Tmg4fhj4PxSqHycgJxi3PDfnC9RGDsNHoRwAvXvpnZ
|
|
hex!["d77cafd3b32c8b52b0e2780a586a6e527c94f1bdec117c4e4acb0a491461ffa3"]
|
|
.unchecked_into(),
|
|
//5DSVrGURuDuh8Luzo8FYq7o2NWiUSLSN6QAVNrj9BtswWH6R
|
|
hex!["3cdb36a5a14715999faffd06c5b9e5dcdc24d4b46bc3e4df1aaad266112a7b49"]
|
|
.unchecked_into(),
|
|
//5DLEG2AupawCXGwhJtrzBRc3zAhuP8V662dDrUTzAsCiB9Ec
|
|
hex!["38134245c9919ecb20bf2eedbe943b69ba92ceb9eb5477b92b0afd3cb6ce2858"]
|
|
.unchecked_into(),
|
|
//5D83o9fDgnHxaKPkSx59hk8zYzqcgzN2mrf7cp8fiVEi7V4E
|
|
hex!["2ec917690dc1d676002e3504c530b2595490aa5a4603d9cc579b9485b8d0d854"]
|
|
.unchecked_into(),
|
|
//5DwBJquZgncRWXFxj2ydbF8LBUPPUbiq86sXWXgm8Z38m8L2
|
|
hex!["52bae9b8dedb8058dda93ec6f57d7e5a517c4c9f002a4636fada70fed0acf376"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
//5DMHpkRpQV7NWJFfn2zQxCLiAKv7R12PWFRPHKKk5X3JkYfP
|
|
hex!["38e280b35d08db46019a210a944e4b7177665232ab679df12d6a8bbb317a2276"].into(),
|
|
//5FbJpSHmFDe5FN3DVGe1R345ZePL9nhcC9V2Cczxo7q8q6rN
|
|
hex!["9c0bc0e2469924d718ae683737f818a47c46b0612376ecca06a2ac059fe1f870"].into(),
|
|
//5E5Pm3Udzxy26KGkLE5pc8JPfQrvkYHiaXWtuEfmQsBSgep9
|
|
hex!["58fecadc2df8182a27e999e7e1fd7c99f8ec18f2a81f9a0db38b3653613f3f4d"]
|
|
.unchecked_into(),
|
|
//5FxcystSLHtaWoy2HEgRNerj9PrUs452B6AvHVnQZm5ZQmqE
|
|
hex!["ac4d0c5e8f8486de05135c10a707f58aa29126d5eb28fdaaba00f9a505f5249d"]
|
|
.unchecked_into(),
|
|
//5E7KqVXaVGuAqiqMigpuH8oXHLVh4tmijmpJABLYANpjMkem
|
|
hex!["5a781385a0235fe8594dd101ec55ef9ba01883f8563a0cdd37b89e0303f6a578"]
|
|
.unchecked_into(),
|
|
//5H9AybjkpyZ79yN5nHuBqs6RKuZPgM7aAVVvTQsDFovgXb2A
|
|
hex!["e09570f62a062450d4406b4eb43e7f775ff954e37606646cd590d1818189501f"]
|
|
.unchecked_into(),
|
|
//5Ccgs7VwJKBawMbwMENDmj2eFAxhFdGksVHdk8aTAf4w7xox
|
|
hex!["1864832dae34df30846d5cc65973f58a2d01b337d094b1284ec3466ecc90251d"]
|
|
.unchecked_into(),
|
|
//5EsSaZZ7niJs7hmAtp4QeK19AcAuTp7WXB7N7gRipVooerq4
|
|
hex!["7c1d92535e6d94e21cffea6633a855a7e3c9684cd2f209e5ddbdeaf5111e395b"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
//5Ea11qhmGRntQ7pyEkEydbwxvfrYwGMKW6rPERU4UiSBB6rd
|
|
hex!["6ed057d2c833c45629de2f14b9f6ce6df1edbf9421b7a638e1fb4828c2bd2651"].into(),
|
|
//5CZomCZwPB78BZMZsCiy7WSpkpHhdrN8QTSyjcK3FFEZHBor
|
|
hex!["1631ff446b3534d031adfc37b7f7aed26d2a6b3938d10496aab3345c54707429"].into(),
|
|
//5CSM6vppouFHzAVPkVFWN76DPRUG7B9qwJe892ccfSfJ8M5f
|
|
hex!["108188c43a7521e1abe737b343341c2179a3a89626c7b017c09a5b10df6f1c42"]
|
|
.unchecked_into(),
|
|
//5GwkG4std9KcjYi3ThSC7QWfhqokmYVvWEqTU9h7iswjhLnr
|
|
hex!["d7de8a43f7ee49fa3b3aaf32fb12617ec9ff7b246a46ab14e9c9d259261117fa"]
|
|
.unchecked_into(),
|
|
//5CoUk3wrCGJAWbiJEcsVjYhnd2JAHvR59jBRbSw77YrBtRL1
|
|
hex!["209f680bc501f9b59358efe3636c51fd61238a8659bac146db909aea2595284b"]
|
|
.unchecked_into(),
|
|
//5EcSu96wprFM7G2HfJTjYu8kMParnYGznSUNTsoEKXywEsgG
|
|
hex!["70adf80395b3f59e4cab5d9da66d5a286a0b6e138652a06f72542e46912df922"]
|
|
.unchecked_into(),
|
|
//5Ge3sjpD43Cuy7rNoJQmE9WctgCn6Faw89Pe7xPs3i55eHwJ
|
|
hex!["ca5f6b970b373b303f64801a0c2cadc4fc05272c6047a2560a27d0c65589ca1d"]
|
|
.unchecked_into(),
|
|
//5EFcjHLvB2z5vd5g63n4gABmhzP5iPsKvTwd8sjfvTehNNrk
|
|
hex!["60cae7fa5a079d9fc8061d715fbcc35ef57c3b00005694c2badce22dcc5a9f1b"]
|
|
.unchecked_into(),
|
|
),
|
|
];
|
|
|
|
const ENDOWMENT: u128 = 1_000_000 * WND;
|
|
const STASH: u128 = 100 * WND;
|
|
|
|
westend::RuntimeGenesisConfig {
|
|
system: westend::SystemConfig { code: wasm_binary.to_vec(), ..Default::default() },
|
|
balances: westend::BalancesConfig {
|
|
balances: endowed_accounts
|
|
.iter()
|
|
.map(|k: &AccountId| (k.clone(), ENDOWMENT))
|
|
.chain(initial_authorities.iter().map(|x| (x.0.clone(), STASH)))
|
|
.collect(),
|
|
},
|
|
indices: westend::IndicesConfig { indices: vec![] },
|
|
session: westend::SessionConfig {
|
|
keys: initial_authorities
|
|
.iter()
|
|
.map(|x| {
|
|
(
|
|
x.0.clone(),
|
|
x.0.clone(),
|
|
westend_session_keys(
|
|
x.2.clone(),
|
|
x.3.clone(),
|
|
x.4.clone(),
|
|
x.5.clone(),
|
|
x.6.clone(),
|
|
x.7.clone(),
|
|
),
|
|
)
|
|
})
|
|
.collect::<Vec<_>>(),
|
|
},
|
|
staking: westend::StakingConfig {
|
|
validator_count: 50,
|
|
minimum_validator_count: 4,
|
|
stakers: initial_authorities
|
|
.iter()
|
|
.map(|x| (x.0.clone(), x.0.clone(), STASH, westend::StakerStatus::Validator))
|
|
.collect(),
|
|
invulnerables: initial_authorities.iter().map(|x| x.0.clone()).collect(),
|
|
force_era: Forcing::ForceNone,
|
|
slash_reward_fraction: Perbill::from_percent(10),
|
|
..Default::default()
|
|
},
|
|
babe: westend::BabeConfig {
|
|
authorities: Default::default(),
|
|
epoch_config: Some(westend::BABE_GENESIS_EPOCH_CONFIG),
|
|
..Default::default()
|
|
},
|
|
grandpa: Default::default(),
|
|
im_online: Default::default(),
|
|
authority_discovery: westend::AuthorityDiscoveryConfig {
|
|
keys: vec![],
|
|
..Default::default()
|
|
},
|
|
vesting: westend::VestingConfig { vesting: vec![] },
|
|
sudo: westend::SudoConfig { key: Some(endowed_accounts[0].clone()) },
|
|
hrmp: Default::default(),
|
|
configuration: westend::ConfigurationConfig {
|
|
config: default_parachains_host_configuration(),
|
|
},
|
|
paras: Default::default(),
|
|
registrar: westend_runtime::RegistrarConfig {
|
|
next_free_para_id: polkadot_primitives::LOWEST_PUBLIC_ID,
|
|
..Default::default()
|
|
},
|
|
xcm_pallet: Default::default(),
|
|
nomination_pools: Default::default(),
|
|
assigned_slots: Default::default(),
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "kusama-native")]
|
|
fn kusama_staging_testnet_config_genesis(wasm_binary: &[u8]) -> kusama::RuntimeGenesisConfig {
|
|
use hex_literal::hex;
|
|
use sp_core::crypto::UncheckedInto;
|
|
|
|
// subkey inspect "$SECRET"
|
|
let endowed_accounts = vec![
|
|
// 5CVFESwfkk7NmhQ6FwHCM9roBvr9BGa4vJHFYU8DnGQxrXvz
|
|
hex!["12b782529c22032ed4694e0f6e7d486be7daa6d12088f6bc74d593b3900b8438"].into(),
|
|
];
|
|
|
|
// for i in 1 2 3 4; do for j in stash controller; do subkey inspect "$SECRET//$i//$j"; done;
|
|
// done for i in 1 2 3 4; do for j in babe; do subkey --sr25519 inspect "$SECRET//$i//$j"; done;
|
|
// done for i in 1 2 3 4; do for j in grandpa; do subkey --ed25519 inspect "$SECRET//$i//$j";
|
|
// done; done for i in 1 2 3 4; do for j in im_online; do subkey --sr25519 inspect
|
|
// "$SECRET//$i//$j"; done; done for i in 1 2 3 4; do for j in para_validator para_assignment;
|
|
// do subkey --sr25519 inspect "$SECRET//$i//$j"; done; done
|
|
let initial_authorities: Vec<(
|
|
AccountId,
|
|
AccountId,
|
|
BabeId,
|
|
GrandpaId,
|
|
ImOnlineId,
|
|
ValidatorId,
|
|
AssignmentId,
|
|
AuthorityDiscoveryId,
|
|
)> = vec![
|
|
(
|
|
// 5DD7Q4VEfPTLEdn11CnThoHT5f9xKCrnofWJL5SsvpTghaAT
|
|
hex!["32a5718e87d16071756d4b1370c411bbbb947eb62f0e6e0b937d5cbfc0ea633b"].into(),
|
|
// 5GNzaEqhrZAtUQhbMe2gn9jBuNWfamWFZHULryFwBUXyd1cG
|
|
hex!["bee39fe862c85c91aaf343e130d30b643c6ea0b4406a980206f1df8331f7093b"].into(),
|
|
// 5FpewyS2VY8Cj3tKgSckq8ECkjd1HKHvBRnWhiHqRQsWfFC1
|
|
hex!["a639b507ee1585e0b6498ff141d6153960794523226866d1b44eba3f25f36356"]
|
|
.unchecked_into(),
|
|
// 5EjvdwATjyFFikdZibVvx1q5uBHhphS2Mnsq5c7yfaYK25vm
|
|
hex!["76620f7c98bce8619979c2b58cf2b0aff71824126d2b039358729dad993223db"]
|
|
.unchecked_into(),
|
|
// 5FpewyS2VY8Cj3tKgSckq8ECkjd1HKHvBRnWhiHqRQsWfFC1
|
|
hex!["a639b507ee1585e0b6498ff141d6153960794523226866d1b44eba3f25f36356"]
|
|
.unchecked_into(),
|
|
// 5FpewyS2VY8Cj3tKgSckq8ECkjd1HKHvBRnWhiHqRQsWfFC1
|
|
hex!["a639b507ee1585e0b6498ff141d6153960794523226866d1b44eba3f25f36356"]
|
|
.unchecked_into(),
|
|
// 5FpewyS2VY8Cj3tKgSckq8ECkjd1HKHvBRnWhiHqRQsWfFC1
|
|
hex!["a639b507ee1585e0b6498ff141d6153960794523226866d1b44eba3f25f36356"]
|
|
.unchecked_into(),
|
|
// 5FpewyS2VY8Cj3tKgSckq8ECkjd1HKHvBRnWhiHqRQsWfFC1
|
|
hex!["a639b507ee1585e0b6498ff141d6153960794523226866d1b44eba3f25f36356"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
// 5G9VGb8ESBeS8Ca4or43RfhShzk9y7T5iTmxHk5RJsjZwsRx
|
|
hex!["b496c98a405ceab59b9e970e59ef61acd7765a19b704e02ab06c1cdfe171e40f"].into(),
|
|
// 5F7V9Y5FcxKXe1aroqvPeRiUmmeQwTFcL3u9rrPXcMuMiCNx
|
|
hex!["86d3a7571dd60139d297e55d8238d0c977b2e208c5af088f7f0136b565b0c103"].into(),
|
|
// 5GvuM53k1Z4nAB5zXJFgkRSHv4Bqo4BsvgbQWNWkiWZTMwWY
|
|
hex!["765e46067adac4d1fe6c783aa2070dfa64a19f84376659e12705d1734b3eae01"]
|
|
.unchecked_into(),
|
|
// 5HBDAaybNqjmY7ww8ZcZZY1L5LHxvpnyfqJwoB7HhR6raTmG
|
|
hex!["e2234d661bee4a04c38392c75d1566200aa9e6ae44dd98ee8765e4cc9af63cb7"]
|
|
.unchecked_into(),
|
|
// 5GvuM53k1Z4nAB5zXJFgkRSHv4Bqo4BsvgbQWNWkiWZTMwWY
|
|
hex!["765e46067adac4d1fe6c783aa2070dfa64a19f84376659e12705d1734b3eae01"]
|
|
.unchecked_into(),
|
|
// 5GvuM53k1Z4nAB5zXJFgkRSHv4Bqo4BsvgbQWNWkiWZTMwWY
|
|
hex!["765e46067adac4d1fe6c783aa2070dfa64a19f84376659e12705d1734b3eae01"]
|
|
.unchecked_into(),
|
|
// 5GvuM53k1Z4nAB5zXJFgkRSHv4Bqo4BsvgbQWNWkiWZTMwWY
|
|
hex!["765e46067adac4d1fe6c783aa2070dfa64a19f84376659e12705d1734b3eae01"]
|
|
.unchecked_into(),
|
|
// 5GvuM53k1Z4nAB5zXJFgkRSHv4Bqo4BsvgbQWNWkiWZTMwWY
|
|
hex!["765e46067adac4d1fe6c783aa2070dfa64a19f84376659e12705d1734b3eae01"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
// 5FzwpgGvk2kk9agow6KsywLYcPzjYc8suKej2bne5G5b9YU3
|
|
hex!["ae12f70078a22882bf5135d134468f77301927aa67c376e8c55b7ff127ace115"].into(),
|
|
// 5EqoZhVC2BcsM4WjvZNidu2muKAbu5THQTBKe3EjvxXkdP7A
|
|
hex!["7addb914ec8486bbc60643d2647685dcc06373401fa80e09813b630c5831d54b"].into(),
|
|
// 5CXNq1mSKJT4Sc2CbyBBdANeSkbUvdWvE4czJjKXfBHi9sX5
|
|
hex!["664eae1ca4713dd6abf8c15e6c041820cda3c60df97dc476c2cbf7cb82cb2d2e"]
|
|
.unchecked_into(),
|
|
// 5E8ULLQrDAtWhfnVfZmX41Yux86zNAwVJYguWJZVWrJvdhBe
|
|
hex!["5b57ed1443c8967f461db1f6eb2ada24794d163a668f1cf9d9ce3235dfad8799"]
|
|
.unchecked_into(),
|
|
// 5CXNq1mSKJT4Sc2CbyBBdANeSkbUvdWvE4czJjKXfBHi9sX5
|
|
hex!["664eae1ca4713dd6abf8c15e6c041820cda3c60df97dc476c2cbf7cb82cb2d2e"]
|
|
.unchecked_into(),
|
|
// 5CXNq1mSKJT4Sc2CbyBBdANeSkbUvdWvE4czJjKXfBHi9sX5
|
|
hex!["664eae1ca4713dd6abf8c15e6c041820cda3c60df97dc476c2cbf7cb82cb2d2e"]
|
|
.unchecked_into(),
|
|
// 5CXNq1mSKJT4Sc2CbyBBdANeSkbUvdWvE4czJjKXfBHi9sX5
|
|
hex!["664eae1ca4713dd6abf8c15e6c041820cda3c60df97dc476c2cbf7cb82cb2d2e"]
|
|
.unchecked_into(),
|
|
// 5CXNq1mSKJT4Sc2CbyBBdANeSkbUvdWvE4czJjKXfBHi9sX5
|
|
hex!["664eae1ca4713dd6abf8c15e6c041820cda3c60df97dc476c2cbf7cb82cb2d2e"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
// 5CFj6Kg9rmVn1vrqpyjau2ztyBzKeVdRKwNPiA3tqhB5HPqq
|
|
hex!["0867dbb49721126df589db100dda728dc3b475cbf414dad8f72a1d5e84897252"].into(),
|
|
// 5CwQXP6nvWzigFqNhh2jvCaW9zWVzkdveCJY3tz2MhXMjTon
|
|
hex!["26ab2b4b2eba2263b1e55ceb48f687bb0018130a88df0712fbdaf6a347d50e2a"].into(),
|
|
// 5FCd9Y7RLNyxz5wnCAErfsLbXGG34L2BaZRHzhiJcMUMd5zd
|
|
hex!["2adb17a5cafbddc7c3e00ec45b6951a8b12ce2264235b4def342513a767e5d3d"]
|
|
.unchecked_into(),
|
|
// 5HGLmrZsiTFTPp3QoS1W8w9NxByt8PVq79reqvdxNcQkByqK
|
|
hex!["e60d23f49e93c1c1f2d7c115957df5bbd7faf5ebf138d1e9d02e8b39a1f63df0"]
|
|
.unchecked_into(),
|
|
// 5FCd9Y7RLNyxz5wnCAErfsLbXGG34L2BaZRHzhiJcMUMd5zd
|
|
hex!["2adb17a5cafbddc7c3e00ec45b6951a8b12ce2264235b4def342513a767e5d3d"]
|
|
.unchecked_into(),
|
|
// 5FCd9Y7RLNyxz5wnCAErfsLbXGG34L2BaZRHzhiJcMUMd5zd
|
|
hex!["2adb17a5cafbddc7c3e00ec45b6951a8b12ce2264235b4def342513a767e5d3d"]
|
|
.unchecked_into(),
|
|
// 5FCd9Y7RLNyxz5wnCAErfsLbXGG34L2BaZRHzhiJcMUMd5zd
|
|
hex!["2adb17a5cafbddc7c3e00ec45b6951a8b12ce2264235b4def342513a767e5d3d"]
|
|
.unchecked_into(),
|
|
// 5FCd9Y7RLNyxz5wnCAErfsLbXGG34L2BaZRHzhiJcMUMd5zd
|
|
hex!["2adb17a5cafbddc7c3e00ec45b6951a8b12ce2264235b4def342513a767e5d3d"]
|
|
.unchecked_into(),
|
|
),
|
|
];
|
|
|
|
const ENDOWMENT: u128 = 1_000_000 * KSM;
|
|
const STASH: u128 = 100 * KSM;
|
|
|
|
kusama::RuntimeGenesisConfig {
|
|
system: kusama::SystemConfig { code: wasm_binary.to_vec(), ..Default::default() },
|
|
balances: kusama::BalancesConfig {
|
|
balances: endowed_accounts
|
|
.iter()
|
|
.map(|k: &AccountId| (k.clone(), ENDOWMENT))
|
|
.chain(initial_authorities.iter().map(|x| (x.0.clone(), STASH)))
|
|
.collect(),
|
|
},
|
|
indices: kusama::IndicesConfig { indices: vec![] },
|
|
session: kusama::SessionConfig {
|
|
keys: initial_authorities
|
|
.iter()
|
|
.map(|x| {
|
|
(
|
|
x.0.clone(),
|
|
x.0.clone(),
|
|
kusama_session_keys(
|
|
x.2.clone(),
|
|
x.3.clone(),
|
|
x.4.clone(),
|
|
x.5.clone(),
|
|
x.6.clone(),
|
|
x.7.clone(),
|
|
),
|
|
)
|
|
})
|
|
.collect::<Vec<_>>(),
|
|
},
|
|
staking: kusama::StakingConfig {
|
|
validator_count: 50,
|
|
minimum_validator_count: 4,
|
|
stakers: initial_authorities
|
|
.iter()
|
|
.map(|x| (x.0.clone(), x.0.clone(), STASH, kusama::StakerStatus::Validator))
|
|
.collect(),
|
|
invulnerables: initial_authorities.iter().map(|x| x.0.clone()).collect(),
|
|
force_era: Forcing::ForceNone,
|
|
slash_reward_fraction: Perbill::from_percent(10),
|
|
..Default::default()
|
|
},
|
|
babe: kusama::BabeConfig {
|
|
authorities: Default::default(),
|
|
epoch_config: Some(kusama::BABE_GENESIS_EPOCH_CONFIG),
|
|
..Default::default()
|
|
},
|
|
grandpa: Default::default(),
|
|
im_online: Default::default(),
|
|
authority_discovery: kusama::AuthorityDiscoveryConfig {
|
|
keys: vec![],
|
|
..Default::default()
|
|
},
|
|
claims: kusama::ClaimsConfig { claims: vec![], vesting: vec![] },
|
|
vesting: kusama::VestingConfig { vesting: vec![] },
|
|
treasury: Default::default(),
|
|
hrmp: Default::default(),
|
|
configuration: kusama::ConfigurationConfig {
|
|
config: default_parachains_host_configuration(),
|
|
},
|
|
paras: Default::default(),
|
|
xcm_pallet: Default::default(),
|
|
nomination_pools: Default::default(),
|
|
nis_counterpart_balances: Default::default(),
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "rococo-native")]
|
|
fn rococo_staging_testnet_config_genesis(
|
|
wasm_binary: &[u8],
|
|
) -> rococo_runtime::RuntimeGenesisConfig {
|
|
use hex_literal::hex;
|
|
use sp_core::crypto::UncheckedInto;
|
|
|
|
// subkey inspect "$SECRET"
|
|
let endowed_accounts = vec![
|
|
// 5DwBmEFPXRESyEam5SsQF1zbWSCn2kCjyLW51hJHXe9vW4xs
|
|
hex!["52bc71c1eca5353749542dfdf0af97bf764f9c2f44e860cd485f1cd86400f649"].into(),
|
|
];
|
|
|
|
// ./scripts/prepare-test-net.sh 8
|
|
let initial_authorities: Vec<(
|
|
AccountId,
|
|
AccountId,
|
|
BabeId,
|
|
GrandpaId,
|
|
ImOnlineId,
|
|
ValidatorId,
|
|
AssignmentId,
|
|
AuthorityDiscoveryId,
|
|
BeefyId,
|
|
)> = vec![
|
|
(
|
|
//5EHZkbp22djdbuMFH9qt1DVzSCvqi3zWpj6DAYfANa828oei
|
|
hex!["62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a"].into(),
|
|
//5FeSEpi9UYYaWwXXb3tV88qtZkmSdB3mvgj3pXkxKyYLGhcd
|
|
hex!["9e6e781a76810fe93187af44c79272c290c2b9e2b8b92ee11466cd79d8023f50"].into(),
|
|
//5Fh6rDpMDhM363o1Z3Y9twtaCPfizGQWCi55BSykTQjGbP7H
|
|
hex!["a076ef1280d768051f21d060623da3ab5b56944d681d303ed2d4bf658c5bed35"]
|
|
.unchecked_into(),
|
|
//5CPd3zoV9Aaah4xWucuDivMHJ2nEEmpdi864nPTiyRZp4t87
|
|
hex!["0e6d7d1afbcc6547b92995a394ba0daed07a2420be08220a5a1336c6731f0bfa"]
|
|
.unchecked_into(),
|
|
//5F7BEa1LGFksUihyatf3dCDYneB8pWzVyavnByCsm5nBgezi
|
|
hex!["86975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef743"]
|
|
.unchecked_into(),
|
|
//5CP6oGfwqbEfML8efqm1tCZsUgRsJztp9L8ZkEUxA16W8PPz
|
|
hex!["0e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205"]
|
|
.unchecked_into(),
|
|
//5HQdwiDh8Qtd5dSNWajNYpwDvoyNWWA16Y43aEkCNactFc2b
|
|
hex!["ec60e71fe4a567ef9fef99d4bbf37ffae70564b41aa6f94ef0317c13e0a5477b"]
|
|
.unchecked_into(),
|
|
//5HbSgM72xVuscsopsdeG3sCSCYdAeM1Tay9p79N6ky6vwDGq
|
|
hex!["f49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3c"]
|
|
.unchecked_into(),
|
|
//5DPSWdgw38Spu315r6LSvYCggeeieBAJtP5A1qzuzKhqmjVu
|
|
hex!["034f68c5661a41930c82f26a662276bf89f33467e1c850f2fb8ef687fe43d62276"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
//5DvH8oEjQPYhzCoQVo7WDU91qmQfLZvxe9wJcrojmJKebCmG
|
|
hex!["520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a"].into(),
|
|
//5ENZvCRzyXJJYup8bM6yEzb2kQHEb1NDpY2ZEyVGBkCfRdj3
|
|
hex!["6618289af7ae8621981ffab34591e7a6486e12745dfa3fd3b0f7e6a3994c7b5b"].into(),
|
|
//5DLjSUfqZVNAADbwYLgRvHvdzXypiV1DAEaDMjcESKTcqMoM
|
|
hex!["38757d0de00a0c739e7d7984ef4bc01161bd61e198b7c01b618425c16bb5bd5f"]
|
|
.unchecked_into(),
|
|
//5HnDVBN9mD6mXyx8oryhDbJtezwNSj1VRXgLoYCBA6uEkiao
|
|
hex!["fcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d"]
|
|
.unchecked_into(),
|
|
//5DhyXZiuB1LvqYKFgT5tRpgGsN3is2cM9QxgW7FikvakbAZP
|
|
hex!["48a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055"]
|
|
.unchecked_into(),
|
|
//5EPEWRecy2ApL5n18n3aHyU1956zXTRqaJpzDa9DoqiggNwF
|
|
hex!["669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee816"]
|
|
.unchecked_into(),
|
|
//5ES3fw5X4bndSgLNmtPfSbM2J1kLqApVB2CCLS4CBpM1UxUZ
|
|
hex!["68bf52c482630a8d1511f2edd14f34127a7d7082219cccf7fd4c6ecdb535f80d"]
|
|
.unchecked_into(),
|
|
//5HeXbwb5PxtcRoopPZTp5CQun38atn2UudQ8p2AxR5BzoaXw
|
|
hex!["f6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f349"]
|
|
.unchecked_into(),
|
|
//5F7nTtN8MyJV4UsXpjg7tHSnfANXZ5KRPJmkASc1ZSH2Xoa5
|
|
hex!["03a90c2bb6d3b7000020f6152fe2e5002fa970fd1f42aafb6c8edda8dacc2ea77e"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
//5FPMzsezo1PRxYbVpJMWK7HNbR2kUxidsAAxH4BosHa4wd6S
|
|
hex!["92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f"].into(),
|
|
//5G6NQidFG7YiXsvV7hQTLGArir9tsYqD4JDxByhgxKvSKwRx
|
|
hex!["b235f57244230589523271c27b8a490922ffd7dccc83b044feaf22273c1dc735"].into(),
|
|
//5GpZhzAVg7SAtzLvaAC777pjquPEcNy1FbNUAG2nZvhmd6eY
|
|
hex!["d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2a"]
|
|
.unchecked_into(),
|
|
//5HAes2RQYPbYKbLBfKb88f4zoXv6pPA6Ke8CjN7dob3GpmSP
|
|
hex!["e1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1"]
|
|
.unchecked_into(),
|
|
//5HTXBf36LXmkFWJLokNUK6fPxVpkr2ToUnB1pvaagdGu4c1T
|
|
hex!["ee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae8629878"]
|
|
.unchecked_into(),
|
|
//5FtAGDZYJKXkhVhAxCQrXmaP7EE2mGbBMfmKDHjfYDgq2BiU
|
|
hex!["a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037"]
|
|
.unchecked_into(),
|
|
//5CtK7JHv3h6UQZ44y54skxdwSVBRtuxwPE1FYm7UZVhg8rJV
|
|
hex!["244f3421b310c68646e99cdbf4963e02067601f57756b072a4b19431448c186e"]
|
|
.unchecked_into(),
|
|
//5D4r6YaB6F7A7nvMRHNFNF6zrR9g39bqDJFenrcaFmTCRwfa
|
|
hex!["2c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d"]
|
|
.unchecked_into(),
|
|
//5EPoHj8uV4fFKQHYThc6Z9fDkU7B6ih2ncVzQuDdNFb8UyhF
|
|
hex!["039d065fe4f9234f0a4f13cc3ae585f2691e9c25afa469618abb6645111f607a53"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
//5DMNx7RoX6d7JQ38NEM7DWRcW2THu92LBYZEWvBRhJeqcWgR
|
|
hex!["38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404"].into(),
|
|
//5GGdKNDr9P47dpVnmtq3m8Tvowwf1ot1abw6tPsTYYFoKm2v
|
|
hex!["ba0898c1964196474c0be08d364cdf4e9e1d47088287f5235f70b0590dfe1704"].into(),
|
|
//5EjkyPCzR2SjhDZq8f7ufsw6TfkvgNRepjCRQFc4TcdXdaB1
|
|
hex!["764186bc30fd5a02477f19948dc723d6d57ab174debd4f80ed6038ec960bfe21"]
|
|
.unchecked_into(),
|
|
//5DJV3zCBTJBLGNDCcdWrYxWDacSz84goGTa4pFeKVvehEBte
|
|
hex!["36be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef4"]
|
|
.unchecked_into(),
|
|
//5FHf8kpK4fPjEJeYcYon2gAPwEBubRvtwpzkUbhMWSweKPUY
|
|
hex!["8e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2c"]
|
|
.unchecked_into(),
|
|
//5F9FsRjpecP9GonktmtFL3kjqNAMKjHVFjyjRdTPa4hbQRZA
|
|
hex!["882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b"]
|
|
.unchecked_into(),
|
|
//5F1FZWZSj3JyTLs8sRBxU6QWyGLSL9BMRtmSKDmVEoiKFxSP
|
|
hex!["821271c99c958b9220f1771d9f5e29af969edfa865631dba31e1ab7bc0582b75"]
|
|
.unchecked_into(),
|
|
//5CtgRR74VypK4h154s369abs78hDUxZSJqcbWsfXvsjcHJNA
|
|
hex!["2496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c"]
|
|
.unchecked_into(),
|
|
//5CPx6dsr11SCJHKFkcAQ9jpparS7FwXQBrrMznRo4Hqv1PXz
|
|
hex!["0307d29bbf6a5c4061c2157b44fda33b7bb4ec52a5a0305668c74688cedf288d58"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
//5C8AL1Zb4bVazgT3EgDxFgcow1L4SJjVu44XcLC9CrYqFN4N
|
|
hex!["02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16"].into(),
|
|
//5FLYy3YKsAnooqE4hCudttAsoGKbVG3hYYBtVzwMjJQrevPa
|
|
hex!["90cab33f0bb501727faa8319f0845faef7d31008f178b65054b6629fe531b772"].into(),
|
|
//5Et3tfbVf1ByFThNAuUq5pBssdaPPskip5yob5GNyUFojXC7
|
|
hex!["7c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd80813"]
|
|
.unchecked_into(),
|
|
//5EX1JBghGbQqWohTPU6msR9qZ2nYPhK9r3RTQ2oD1K8TCxaG
|
|
hex!["6c878e33b83c20324238d22240f735457b6fba544b383e70bb62a27b57380c81"]
|
|
.unchecked_into(),
|
|
//5GqL8RbVAuNXpDhjQi1KrS1MyNuKhvus2AbmQwRGjpuGZmFu
|
|
hex!["d2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1a"]
|
|
.unchecked_into(),
|
|
//5EUNaBpX9mJgcmLQHyG5Pkms6tbDiKuLbeTEJS924Js9cA1N
|
|
hex!["6a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac01"]
|
|
.unchecked_into(),
|
|
//5CaZuueRVpMATZG4hkcrgDoF4WGixuz7zu83jeBdY3bgWGaG
|
|
hex!["16c69ea8d595e80b6736f44be1eaeeef2ac9c04a803cc4fd944364cb0d617a33"]
|
|
.unchecked_into(),
|
|
//5DABsdQCDUGuhzVGWe5xXzYQ9rtrVxRygW7RXf9Tsjsw1aGJ
|
|
hex!["306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb531"]
|
|
.unchecked_into(),
|
|
//5H91T5mHhoCw9JJG4NjghDdQyhC6L7XcSuBWKD3q3TAhEVvQ
|
|
hex!["02fb0330356e63a35dd930bc74525edf28b3bf5eb44aab9e9e4962c8309aaba6a6"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
//5C8XbDXdMNKJrZSrQURwVCxdNdk8AzG6xgLggbzuA399bBBF
|
|
hex!["02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864"].into(),
|
|
//5GsyzFP8qtF8tXPSsjhjxAeU1v7D1PZofuQKN9TdCc7Dp1JM
|
|
hex!["d4ffc4c05b47d1115ad200f7f86e307b20b46c50e1b72a912ec4f6f7db46b616"].into(),
|
|
//5GHWB8ZDzegLcMW7Gdd1BS6WHVwDdStfkkE4G7KjPjZNJBtD
|
|
hex!["bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5b"]
|
|
.unchecked_into(),
|
|
//5GzDPGbUM9uH52ZEwydasTj8edokGUJ7vEpoFWp9FE1YNuFB
|
|
hex!["d9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc33"]
|
|
.unchecked_into(),
|
|
//5GWZbVkJEfWZ7fRca39YAQeqri2Z7pkeHyd7rUctUHyQifLp
|
|
hex!["c4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff35"]
|
|
.unchecked_into(),
|
|
//5CmLCFeSurRXXtwMmLcVo7sdJ9EqDguvJbuCYDcHkr3cpqyE
|
|
hex!["1efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c"]
|
|
.unchecked_into(),
|
|
//5DnsSy8a8pfE2aFjKBDtKw7WM1V4nfE5sLzP15MNTka53GqS
|
|
hex!["4c64d3f06d28adeb36a892fdaccecace150bec891f04694448a60b74fa469c22"]
|
|
.unchecked_into(),
|
|
//5CZdFnyzZvKetZTeUwj5APAYskVJe4QFiTezo5dQNsrnehGd
|
|
hex!["160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a"]
|
|
.unchecked_into(),
|
|
//5HgoR9JJkdBusxKrrs3zgd3ToppgNoGj1rDyAJp4e7eZiYyT
|
|
hex!["020019a8bb188f8145d02fa855e9c36e9914457d37c500e03634b5223aa5702474"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
//5HinEonzr8MywkqedcpsmwpxKje2jqr9miEwuzyFXEBCvVXM
|
|
hex!["fa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00"].into(),
|
|
//5EHJbj6Td6ks5HDnyfN4ttTSi57osxcQsQexm7XpazdeqtV7
|
|
hex!["62145d721967bd88622d08625f0f5681463c0f1b8bcd97eb3c2c53f7660fd513"].into(),
|
|
//5EeCsC58XgJ1DFaoYA1WktEpP27jvwGpKdxPMFjicpLeYu96
|
|
hex!["720537e2c1c554654d73b3889c3ef4c3c2f95a65dd3f7c185ebe4afebed78372"]
|
|
.unchecked_into(),
|
|
//5DnEySxbnppWEyN8cCLqvGjAorGdLRg2VmkY96dbJ1LHFK8N
|
|
hex!["4bea0b37e0cce9bddd80835fa2bfd5606f5dcfb8388bbb10b10c483f0856cf14"]
|
|
.unchecked_into(),
|
|
//5E1Y1FJ7dVP7qtE3wm241pTm72rTMcDT5Jd8Czv7Pwp7N3AH
|
|
hex!["560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca651"]
|
|
.unchecked_into(),
|
|
//5CAC278tFCHAeHYqE51FTWYxHmeLcENSS1RG77EFRTvPZMJT
|
|
hex!["042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11f"]
|
|
.unchecked_into(),
|
|
//5HjRTLWcQjZzN3JDvaj1UzjNSayg5ZD9ZGWMstaL7Ab2jjAa
|
|
hex!["fab485e87ed1537d089df521edf983a777c57065a702d7ed2b6a2926f31da74f"]
|
|
.unchecked_into(),
|
|
//5ELv74v7QcsS6FdzvG4vL2NnYDGWmRnJUSMKYwdyJD7Xcdi7
|
|
hex!["64d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f"]
|
|
.unchecked_into(),
|
|
//5FaUcPt4fPz93vBhcrCJqmDkjYZ7jCbzAF56QJoCmvPaKrmx
|
|
hex!["033f1a6d47fe86f88934e4b83b9fae903b92b5dcf4fec97d5e3e8bf4f39df03685"]
|
|
.unchecked_into(),
|
|
),
|
|
(
|
|
//5Ey3NQ3dfabaDc16NUv7wRLsFCMDFJSqZFzKVycAsWuUC6Di
|
|
hex!["8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47"].into(),
|
|
//5HiWsuSBqt8nS9pnggexXuHageUifVPKPHDE2arTKqhTp1dV
|
|
hex!["fa0388fa88f3f0cb43d583e2571fbc0edad57dff3a6fd89775451dd2c2b8ea00"].into(),
|
|
//5H168nKX2Yrfo3bxj7rkcg25326Uv3CCCnKUGK6uHdKMdPt8
|
|
hex!["da6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa8349"]
|
|
.unchecked_into(),
|
|
//5DrA2fZdzmNqT5j6DXNwVxPBjDV9jhkAqvjt6Us3bQHKy3cF
|
|
hex!["4ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dcc"]
|
|
.unchecked_into(),
|
|
//5FNFDUGNLUtqg5LgrwYLNmBiGoP8KRxsvQpBkc7GQP6qaBUG
|
|
hex!["92156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66"]
|
|
.unchecked_into(),
|
|
//5Gx6YeNhynqn8qkda9QKpc9S7oDr4sBrfAu516d3sPpEt26F
|
|
hex!["d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d"]
|
|
.unchecked_into(),
|
|
//5DhDcHqwxoes5s89AyudGMjtZXx1nEgrk5P45X88oSTR3iyx
|
|
hex!["481538f8c2c011a76d7d57db11c2789a5e83b0f9680dc6d26211d2f9c021ae4c"]
|
|
.unchecked_into(),
|
|
//5DqAvikdpfRdk5rR35ZobZhqaC5bJXZcEuvzGtexAZP1hU3T
|
|
hex!["4e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26"]
|
|
.unchecked_into(),
|
|
//5E41Znrr2YtZu8bZp3nvRuLVHg3jFksfQ3tXuviLku4wsao7
|
|
hex!["025e84e95ed043e387ddb8668176b42f8e2773ddd84f7f58a6d9bf436a4b527986"]
|
|
.unchecked_into(),
|
|
),
|
|
];
|
|
|
|
const ENDOWMENT: u128 = 1_000_000 * ROC;
|
|
const STASH: u128 = 100 * ROC;
|
|
|
|
rococo_runtime::RuntimeGenesisConfig {
|
|
system: rococo_runtime::SystemConfig { code: wasm_binary.to_vec(), ..Default::default() },
|
|
balances: rococo_runtime::BalancesConfig {
|
|
balances: endowed_accounts
|
|
.iter()
|
|
.map(|k: &AccountId| (k.clone(), ENDOWMENT))
|
|
.chain(initial_authorities.iter().map(|x| (x.0.clone(), STASH)))
|
|
.collect(),
|
|
},
|
|
beefy: Default::default(),
|
|
indices: rococo_runtime::IndicesConfig { indices: vec![] },
|
|
session: rococo_runtime::SessionConfig {
|
|
keys: initial_authorities
|
|
.iter()
|
|
.map(|x| {
|
|
(
|
|
x.0.clone(),
|
|
x.0.clone(),
|
|
rococo_session_keys(
|
|
x.2.clone(),
|
|
x.3.clone(),
|
|
x.4.clone(),
|
|
x.5.clone(),
|
|
x.6.clone(),
|
|
x.7.clone(),
|
|
x.8.clone(),
|
|
),
|
|
)
|
|
})
|
|
.collect::<Vec<_>>(),
|
|
},
|
|
phragmen_election: Default::default(),
|
|
babe: rococo_runtime::BabeConfig {
|
|
authorities: Default::default(),
|
|
epoch_config: Some(rococo_runtime::BABE_GENESIS_EPOCH_CONFIG),
|
|
..Default::default()
|
|
},
|
|
grandpa: Default::default(),
|
|
im_online: Default::default(),
|
|
democracy: rococo_runtime::DemocracyConfig::default(),
|
|
council: rococo::CouncilConfig { members: vec![], phantom: Default::default() },
|
|
technical_committee: rococo::TechnicalCommitteeConfig {
|
|
members: vec![],
|
|
phantom: Default::default(),
|
|
},
|
|
technical_membership: Default::default(),
|
|
treasury: Default::default(),
|
|
authority_discovery: rococo_runtime::AuthorityDiscoveryConfig {
|
|
keys: vec![],
|
|
..Default::default()
|
|
},
|
|
claims: rococo::ClaimsConfig { claims: vec![], vesting: vec![] },
|
|
vesting: rococo::VestingConfig { vesting: vec![] },
|
|
sudo: rococo_runtime::SudoConfig { key: Some(endowed_accounts[0].clone()) },
|
|
paras: rococo_runtime::ParasConfig { paras: vec![], ..Default::default() },
|
|
hrmp: Default::default(),
|
|
configuration: rococo_runtime::ConfigurationConfig {
|
|
config: default_parachains_host_configuration(),
|
|
},
|
|
registrar: rococo_runtime::RegistrarConfig {
|
|
next_free_para_id: polkadot_primitives::LOWEST_PUBLIC_ID,
|
|
..Default::default()
|
|
},
|
|
xcm_pallet: Default::default(),
|
|
nis_counterpart_balances: Default::default(),
|
|
assigned_slots: Default::default(),
|
|
}
|
|
}
|
|
|
|
/// Returns the properties for the [`PolkadotChainSpec`].
|
|
pub fn polkadot_chain_spec_properties() -> serde_json::map::Map<String, serde_json::Value> {
|
|
serde_json::json!({
|
|
"tokenDecimals": 10,
|
|
})
|
|
.as_object()
|
|
.expect("Map given; qed")
|
|
.clone()
|
|
}
|
|
|
|
/// Staging testnet config.
|
|
#[cfg(feature = "kusama-native")]
|
|
pub fn kusama_staging_testnet_config() -> Result<KusamaChainSpec, String> {
|
|
let wasm_binary = kusama::WASM_BINARY.ok_or("Kusama development wasm not available")?;
|
|
let boot_nodes = vec![];
|
|
|
|
Ok(KusamaChainSpec::from_genesis(
|
|
"Kusama Staging Testnet",
|
|
"kusama_staging_testnet",
|
|
ChainType::Live,
|
|
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,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
/// Westend staging testnet config.
|
|
#[cfg(feature = "westend-native")]
|
|
pub fn westend_staging_testnet_config() -> Result<WestendChainSpec, String> {
|
|
let wasm_binary = westend::WASM_BINARY.ok_or("Westend development wasm not available")?;
|
|
let boot_nodes = vec![];
|
|
|
|
Ok(WestendChainSpec::from_genesis(
|
|
"Westend Staging Testnet",
|
|
"westend_staging_testnet",
|
|
ChainType::Live,
|
|
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,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
/// Rococo staging testnet config.
|
|
#[cfg(feature = "rococo-native")]
|
|
pub fn rococo_staging_testnet_config() -> Result<RococoChainSpec, String> {
|
|
let wasm_binary = rococo::WASM_BINARY.ok_or("Rococo development wasm not available")?;
|
|
let boot_nodes = vec![];
|
|
|
|
Ok(RococoChainSpec::from_genesis(
|
|
"Rococo Staging Testnet",
|
|
"rococo_staging_testnet",
|
|
ChainType::Live,
|
|
move || RococoGenesisExt {
|
|
runtime_genesis_config: rococo_staging_testnet_config_genesis(wasm_binary),
|
|
session_length_in_blocks: None,
|
|
},
|
|
boot_nodes,
|
|
Some(
|
|
TelemetryEndpoints::new(vec![(ROCOCO_STAGING_TELEMETRY_URL.to_string(), 0)])
|
|
.expect("Rococo Staging telemetry url is valid; qed"),
|
|
),
|
|
Some(DEFAULT_PROTOCOL_ID),
|
|
None,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
pub fn versi_chain_spec_properties() -> serde_json::map::Map<String, serde_json::Value> {
|
|
serde_json::json!({
|
|
"ss58Format": 42,
|
|
"tokenDecimals": 12,
|
|
"tokenSymbol": "VRS",
|
|
})
|
|
.as_object()
|
|
.expect("Map given; qed")
|
|
.clone()
|
|
}
|
|
|
|
/// Versi staging testnet config.
|
|
#[cfg(feature = "rococo-native")]
|
|
pub fn versi_staging_testnet_config() -> Result<RococoChainSpec, String> {
|
|
let wasm_binary = rococo::WASM_BINARY.ok_or("Versi development wasm not available")?;
|
|
let boot_nodes = vec![];
|
|
|
|
Ok(RococoChainSpec::from_genesis(
|
|
"Versi Staging Testnet",
|
|
"versi_staging_testnet",
|
|
ChainType::Live,
|
|
move || RococoGenesisExt {
|
|
runtime_genesis_config: rococo_staging_testnet_config_genesis(wasm_binary),
|
|
session_length_in_blocks: Some(100),
|
|
},
|
|
boot_nodes,
|
|
Some(
|
|
TelemetryEndpoints::new(vec![(VERSI_STAGING_TELEMETRY_URL.to_string(), 0)])
|
|
.expect("Versi Staging telemetry url is valid; qed"),
|
|
),
|
|
Some("versi"),
|
|
None,
|
|
Some(versi_chain_spec_properties()),
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
/// Helper function to generate a crypto pair from seed
|
|
pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
|
|
TPublic::Pair::from_string(&format!("//{}", seed), None)
|
|
.expect("static values are valid; qed")
|
|
.public()
|
|
}
|
|
|
|
/// Helper function to generate an account ID from seed
|
|
pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
|
|
where
|
|
AccountPublic: From<<TPublic::Pair as Pair>::Public>,
|
|
{
|
|
AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
|
|
}
|
|
|
|
/// Helper function to generate stash, controller and session key from seed
|
|
pub fn get_authority_keys_from_seed(
|
|
seed: &str,
|
|
) -> (
|
|
AccountId,
|
|
AccountId,
|
|
BabeId,
|
|
GrandpaId,
|
|
ImOnlineId,
|
|
ValidatorId,
|
|
AssignmentId,
|
|
AuthorityDiscoveryId,
|
|
BeefyId,
|
|
) {
|
|
let keys = get_authority_keys_from_seed_no_beefy(seed);
|
|
(keys.0, keys.1, keys.2, keys.3, keys.4, keys.5, keys.6, keys.7, get_from_seed::<BeefyId>(seed))
|
|
}
|
|
|
|
/// Helper function to generate stash, controller and session key from seed
|
|
pub fn get_authority_keys_from_seed_no_beefy(
|
|
seed: &str,
|
|
) -> (
|
|
AccountId,
|
|
AccountId,
|
|
BabeId,
|
|
GrandpaId,
|
|
ImOnlineId,
|
|
ValidatorId,
|
|
AssignmentId,
|
|
AuthorityDiscoveryId,
|
|
) {
|
|
(
|
|
get_account_id_from_seed::<sr25519::Public>(&format!("{}//stash", seed)),
|
|
get_account_id_from_seed::<sr25519::Public>(seed),
|
|
get_from_seed::<BabeId>(seed),
|
|
get_from_seed::<GrandpaId>(seed),
|
|
get_from_seed::<ImOnlineId>(seed),
|
|
get_from_seed::<ValidatorId>(seed),
|
|
get_from_seed::<AssignmentId>(seed),
|
|
get_from_seed::<AuthorityDiscoveryId>(seed),
|
|
)
|
|
}
|
|
|
|
#[cfg(any(
|
|
feature = "polkadot-native",
|
|
feature = "kusama-native",
|
|
feature = "westend-native",
|
|
feature = "rococo-native"
|
|
))]
|
|
fn testnet_accounts() -> Vec<AccountId> {
|
|
vec![
|
|
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
|
get_account_id_from_seed::<sr25519::Public>("Bob"),
|
|
get_account_id_from_seed::<sr25519::Public>("Charlie"),
|
|
get_account_id_from_seed::<sr25519::Public>("Dave"),
|
|
get_account_id_from_seed::<sr25519::Public>("Eve"),
|
|
get_account_id_from_seed::<sr25519::Public>("Ferdie"),
|
|
get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
|
|
get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
|
|
get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
|
|
get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
|
|
get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
|
|
get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
|
|
]
|
|
}
|
|
|
|
/// Helper function to create polkadot `RuntimeGenesisConfig` for testing
|
|
#[cfg(feature = "polkadot-native")]
|
|
pub fn polkadot_testnet_genesis(
|
|
wasm_binary: &[u8],
|
|
initial_authorities: Vec<(
|
|
AccountId,
|
|
AccountId,
|
|
BabeId,
|
|
GrandpaId,
|
|
ImOnlineId,
|
|
ValidatorId,
|
|
AssignmentId,
|
|
AuthorityDiscoveryId,
|
|
)>,
|
|
_root_key: AccountId,
|
|
endowed_accounts: Option<Vec<AccountId>>,
|
|
) -> polkadot::RuntimeGenesisConfig {
|
|
let endowed_accounts: Vec<AccountId> = endowed_accounts.unwrap_or_else(testnet_accounts);
|
|
|
|
const ENDOWMENT: u128 = 1_000_000 * DOT;
|
|
const STASH: u128 = 100 * DOT;
|
|
|
|
polkadot::RuntimeGenesisConfig {
|
|
system: polkadot::SystemConfig { code: wasm_binary.to_vec(), ..Default::default() },
|
|
indices: polkadot::IndicesConfig { indices: vec![] },
|
|
balances: polkadot::BalancesConfig {
|
|
balances: endowed_accounts.iter().map(|k| (k.clone(), ENDOWMENT)).collect(),
|
|
},
|
|
session: polkadot::SessionConfig {
|
|
keys: initial_authorities
|
|
.iter()
|
|
.map(|x| {
|
|
(
|
|
x.0.clone(),
|
|
x.0.clone(),
|
|
polkadot_session_keys(
|
|
x.2.clone(),
|
|
x.3.clone(),
|
|
x.4.clone(),
|
|
x.5.clone(),
|
|
x.6.clone(),
|
|
x.7.clone(),
|
|
),
|
|
)
|
|
})
|
|
.collect::<Vec<_>>(),
|
|
},
|
|
staking: polkadot::StakingConfig {
|
|
minimum_validator_count: 1,
|
|
validator_count: initial_authorities.len() as u32,
|
|
stakers: initial_authorities
|
|
.iter()
|
|
.map(|x| (x.0.clone(), x.0.clone(), STASH, polkadot::StakerStatus::Validator))
|
|
.collect(),
|
|
invulnerables: initial_authorities.iter().map(|x| x.0.clone()).collect(),
|
|
force_era: Forcing::NotForcing,
|
|
slash_reward_fraction: Perbill::from_percent(10),
|
|
..Default::default()
|
|
},
|
|
phragmen_election: Default::default(),
|
|
democracy: polkadot::DemocracyConfig::default(),
|
|
council: polkadot::CouncilConfig { members: vec![], phantom: Default::default() },
|
|
technical_committee: polkadot::TechnicalCommitteeConfig {
|
|
members: vec![],
|
|
phantom: Default::default(),
|
|
},
|
|
technical_membership: Default::default(),
|
|
babe: polkadot::BabeConfig {
|
|
authorities: Default::default(),
|
|
epoch_config: Some(polkadot::BABE_GENESIS_EPOCH_CONFIG),
|
|
..Default::default()
|
|
},
|
|
grandpa: Default::default(),
|
|
im_online: Default::default(),
|
|
authority_discovery: polkadot::AuthorityDiscoveryConfig {
|
|
keys: vec![],
|
|
..Default::default()
|
|
},
|
|
claims: polkadot::ClaimsConfig { claims: vec![], vesting: vec![] },
|
|
vesting: polkadot::VestingConfig { vesting: vec![] },
|
|
treasury: Default::default(),
|
|
hrmp: Default::default(),
|
|
configuration: polkadot::ConfigurationConfig {
|
|
config: default_parachains_host_configuration(),
|
|
},
|
|
paras: Default::default(),
|
|
xcm_pallet: Default::default(),
|
|
nomination_pools: Default::default(),
|
|
}
|
|
}
|
|
|
|
/// Helper function to create kusama `RuntimeGenesisConfig` for testing
|
|
#[cfg(feature = "kusama-native")]
|
|
pub fn kusama_testnet_genesis(
|
|
wasm_binary: &[u8],
|
|
initial_authorities: Vec<(
|
|
AccountId,
|
|
AccountId,
|
|
BabeId,
|
|
GrandpaId,
|
|
ImOnlineId,
|
|
ValidatorId,
|
|
AssignmentId,
|
|
AuthorityDiscoveryId,
|
|
)>,
|
|
_root_key: AccountId,
|
|
endowed_accounts: Option<Vec<AccountId>>,
|
|
) -> kusama::RuntimeGenesisConfig {
|
|
let endowed_accounts: Vec<AccountId> = endowed_accounts.unwrap_or_else(testnet_accounts);
|
|
|
|
const ENDOWMENT: u128 = 1_000_000 * KSM;
|
|
const STASH: u128 = 100 * KSM;
|
|
|
|
kusama::RuntimeGenesisConfig {
|
|
system: kusama::SystemConfig { code: wasm_binary.to_vec(), ..Default::default() },
|
|
indices: kusama::IndicesConfig { indices: vec![] },
|
|
balances: kusama::BalancesConfig {
|
|
balances: endowed_accounts.iter().map(|k| (k.clone(), ENDOWMENT)).collect(),
|
|
},
|
|
session: kusama::SessionConfig {
|
|
keys: initial_authorities
|
|
.iter()
|
|
.map(|x| {
|
|
(
|
|
x.0.clone(),
|
|
x.0.clone(),
|
|
kusama_session_keys(
|
|
x.2.clone(),
|
|
x.3.clone(),
|
|
x.4.clone(),
|
|
x.5.clone(),
|
|
x.6.clone(),
|
|
x.7.clone(),
|
|
),
|
|
)
|
|
})
|
|
.collect::<Vec<_>>(),
|
|
},
|
|
staking: kusama::StakingConfig {
|
|
minimum_validator_count: 1,
|
|
validator_count: initial_authorities.len() as u32,
|
|
stakers: initial_authorities
|
|
.iter()
|
|
.map(|x| (x.0.clone(), x.0.clone(), STASH, kusama::StakerStatus::Validator))
|
|
.collect(),
|
|
invulnerables: initial_authorities.iter().map(|x| x.0.clone()).collect(),
|
|
force_era: Forcing::NotForcing,
|
|
slash_reward_fraction: Perbill::from_percent(10),
|
|
..Default::default()
|
|
},
|
|
babe: kusama::BabeConfig {
|
|
authorities: Default::default(),
|
|
epoch_config: Some(kusama::BABE_GENESIS_EPOCH_CONFIG),
|
|
..Default::default()
|
|
},
|
|
grandpa: Default::default(),
|
|
im_online: Default::default(),
|
|
authority_discovery: kusama::AuthorityDiscoveryConfig {
|
|
keys: vec![],
|
|
..Default::default()
|
|
},
|
|
claims: kusama::ClaimsConfig { claims: vec![], vesting: vec![] },
|
|
vesting: kusama::VestingConfig { vesting: vec![] },
|
|
treasury: Default::default(),
|
|
hrmp: Default::default(),
|
|
configuration: kusama::ConfigurationConfig {
|
|
config: default_parachains_host_configuration(),
|
|
},
|
|
paras: Default::default(),
|
|
xcm_pallet: Default::default(),
|
|
nomination_pools: Default::default(),
|
|
nis_counterpart_balances: Default::default(),
|
|
}
|
|
}
|
|
|
|
/// Helper function to create westend `RuntimeGenesisConfig` for testing
|
|
#[cfg(feature = "westend-native")]
|
|
pub fn westend_testnet_genesis(
|
|
wasm_binary: &[u8],
|
|
initial_authorities: Vec<(
|
|
AccountId,
|
|
AccountId,
|
|
BabeId,
|
|
GrandpaId,
|
|
ImOnlineId,
|
|
ValidatorId,
|
|
AssignmentId,
|
|
AuthorityDiscoveryId,
|
|
)>,
|
|
root_key: AccountId,
|
|
endowed_accounts: Option<Vec<AccountId>>,
|
|
) -> westend::RuntimeGenesisConfig {
|
|
let endowed_accounts: Vec<AccountId> = endowed_accounts.unwrap_or_else(testnet_accounts);
|
|
|
|
const ENDOWMENT: u128 = 1_000_000 * WND;
|
|
const STASH: u128 = 100 * WND;
|
|
|
|
westend::RuntimeGenesisConfig {
|
|
system: westend::SystemConfig { code: wasm_binary.to_vec(), ..Default::default() },
|
|
indices: westend::IndicesConfig { indices: vec![] },
|
|
balances: westend::BalancesConfig {
|
|
balances: endowed_accounts.iter().map(|k| (k.clone(), ENDOWMENT)).collect(),
|
|
},
|
|
session: westend::SessionConfig {
|
|
keys: initial_authorities
|
|
.iter()
|
|
.map(|x| {
|
|
(
|
|
x.0.clone(),
|
|
x.0.clone(),
|
|
westend_session_keys(
|
|
x.2.clone(),
|
|
x.3.clone(),
|
|
x.4.clone(),
|
|
x.5.clone(),
|
|
x.6.clone(),
|
|
x.7.clone(),
|
|
),
|
|
)
|
|
})
|
|
.collect::<Vec<_>>(),
|
|
},
|
|
staking: westend::StakingConfig {
|
|
minimum_validator_count: 1,
|
|
validator_count: initial_authorities.len() as u32,
|
|
stakers: initial_authorities
|
|
.iter()
|
|
.map(|x| (x.0.clone(), x.0.clone(), STASH, westend::StakerStatus::Validator))
|
|
.collect(),
|
|
invulnerables: initial_authorities.iter().map(|x| x.0.clone()).collect(),
|
|
force_era: Forcing::NotForcing,
|
|
slash_reward_fraction: Perbill::from_percent(10),
|
|
..Default::default()
|
|
},
|
|
babe: westend::BabeConfig {
|
|
authorities: Default::default(),
|
|
epoch_config: Some(westend::BABE_GENESIS_EPOCH_CONFIG),
|
|
..Default::default()
|
|
},
|
|
grandpa: Default::default(),
|
|
im_online: Default::default(),
|
|
authority_discovery: westend::AuthorityDiscoveryConfig {
|
|
keys: vec![],
|
|
..Default::default()
|
|
},
|
|
vesting: westend::VestingConfig { vesting: vec![] },
|
|
sudo: westend::SudoConfig { key: Some(root_key) },
|
|
hrmp: Default::default(),
|
|
configuration: westend::ConfigurationConfig {
|
|
config: default_parachains_host_configuration(),
|
|
},
|
|
paras: Default::default(),
|
|
registrar: westend_runtime::RegistrarConfig {
|
|
next_free_para_id: polkadot_primitives::LOWEST_PUBLIC_ID,
|
|
..Default::default()
|
|
},
|
|
xcm_pallet: Default::default(),
|
|
nomination_pools: Default::default(),
|
|
assigned_slots: Default::default(),
|
|
}
|
|
}
|
|
|
|
/// Helper function to create rococo `RuntimeGenesisConfig` for testing
|
|
#[cfg(feature = "rococo-native")]
|
|
pub fn rococo_testnet_genesis(
|
|
wasm_binary: &[u8],
|
|
initial_authorities: Vec<(
|
|
AccountId,
|
|
AccountId,
|
|
BabeId,
|
|
GrandpaId,
|
|
ImOnlineId,
|
|
ValidatorId,
|
|
AssignmentId,
|
|
AuthorityDiscoveryId,
|
|
BeefyId,
|
|
)>,
|
|
root_key: AccountId,
|
|
endowed_accounts: Option<Vec<AccountId>>,
|
|
) -> rococo_runtime::RuntimeGenesisConfig {
|
|
let endowed_accounts: Vec<AccountId> = endowed_accounts.unwrap_or_else(testnet_accounts);
|
|
|
|
const ENDOWMENT: u128 = 1_000_000 * ROC;
|
|
|
|
rococo_runtime::RuntimeGenesisConfig {
|
|
system: rococo_runtime::SystemConfig { code: wasm_binary.to_vec(), ..Default::default() },
|
|
beefy: Default::default(),
|
|
indices: rococo_runtime::IndicesConfig { indices: vec![] },
|
|
balances: rococo_runtime::BalancesConfig {
|
|
balances: endowed_accounts.iter().map(|k| (k.clone(), ENDOWMENT)).collect(),
|
|
},
|
|
session: rococo_runtime::SessionConfig {
|
|
keys: initial_authorities
|
|
.iter()
|
|
.map(|x| {
|
|
(
|
|
x.0.clone(),
|
|
x.0.clone(),
|
|
rococo_session_keys(
|
|
x.2.clone(),
|
|
x.3.clone(),
|
|
x.4.clone(),
|
|
x.5.clone(),
|
|
x.6.clone(),
|
|
x.7.clone(),
|
|
x.8.clone(),
|
|
),
|
|
)
|
|
})
|
|
.collect::<Vec<_>>(),
|
|
},
|
|
babe: rococo_runtime::BabeConfig {
|
|
authorities: Default::default(),
|
|
epoch_config: Some(rococo_runtime::BABE_GENESIS_EPOCH_CONFIG),
|
|
..Default::default()
|
|
},
|
|
grandpa: Default::default(),
|
|
im_online: Default::default(),
|
|
phragmen_election: Default::default(),
|
|
democracy: rococo::DemocracyConfig::default(),
|
|
council: rococo::CouncilConfig { members: vec![], phantom: Default::default() },
|
|
technical_committee: rococo::TechnicalCommitteeConfig {
|
|
members: vec![],
|
|
phantom: Default::default(),
|
|
},
|
|
technical_membership: Default::default(),
|
|
treasury: Default::default(),
|
|
claims: rococo::ClaimsConfig { claims: vec![], vesting: vec![] },
|
|
vesting: rococo::VestingConfig { vesting: vec![] },
|
|
authority_discovery: rococo_runtime::AuthorityDiscoveryConfig {
|
|
keys: vec![],
|
|
..Default::default()
|
|
},
|
|
sudo: rococo_runtime::SudoConfig { key: Some(root_key.clone()) },
|
|
hrmp: Default::default(),
|
|
configuration: rococo_runtime::ConfigurationConfig {
|
|
config: polkadot_runtime_parachains::configuration::HostConfiguration {
|
|
max_validators_per_core: Some(1),
|
|
..default_parachains_host_configuration()
|
|
},
|
|
},
|
|
paras: rococo_runtime::ParasConfig { paras: vec![], ..Default::default() },
|
|
registrar: rococo_runtime::RegistrarConfig {
|
|
next_free_para_id: polkadot_primitives::LOWEST_PUBLIC_ID,
|
|
..Default::default()
|
|
},
|
|
xcm_pallet: Default::default(),
|
|
nis_counterpart_balances: Default::default(),
|
|
assigned_slots: Default::default(),
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "polkadot-native")]
|
|
fn polkadot_development_config_genesis(wasm_binary: &[u8]) -> polkadot::RuntimeGenesisConfig {
|
|
polkadot_testnet_genesis(
|
|
wasm_binary,
|
|
vec![get_authority_keys_from_seed_no_beefy("Alice")],
|
|
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
|
None,
|
|
)
|
|
}
|
|
|
|
#[cfg(feature = "kusama-native")]
|
|
fn kusama_development_config_genesis(wasm_binary: &[u8]) -> kusama::RuntimeGenesisConfig {
|
|
kusama_testnet_genesis(
|
|
wasm_binary,
|
|
vec![get_authority_keys_from_seed_no_beefy("Alice")],
|
|
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
|
None,
|
|
)
|
|
}
|
|
|
|
#[cfg(feature = "westend-native")]
|
|
fn westend_development_config_genesis(wasm_binary: &[u8]) -> westend::RuntimeGenesisConfig {
|
|
westend_testnet_genesis(
|
|
wasm_binary,
|
|
vec![get_authority_keys_from_seed_no_beefy("Alice")],
|
|
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
|
None,
|
|
)
|
|
}
|
|
|
|
#[cfg(feature = "rococo-native")]
|
|
fn rococo_development_config_genesis(wasm_binary: &[u8]) -> rococo_runtime::RuntimeGenesisConfig {
|
|
rococo_testnet_genesis(
|
|
wasm_binary,
|
|
vec![get_authority_keys_from_seed("Alice")],
|
|
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
|
None,
|
|
)
|
|
}
|
|
|
|
/// 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")?;
|
|
|
|
Ok(PolkadotChainSpec::from_genesis(
|
|
"Development",
|
|
"polkadot_dev",
|
|
ChainType::Development,
|
|
move || polkadot_development_config_genesis(wasm_binary),
|
|
vec![],
|
|
None,
|
|
Some(DEFAULT_PROTOCOL_ID),
|
|
None,
|
|
Some(polkadot_chain_spec_properties()),
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
/// Kusama development config (single validator Alice)
|
|
#[cfg(feature = "kusama-native")]
|
|
pub fn kusama_development_config() -> Result<KusamaChainSpec, String> {
|
|
let wasm_binary = kusama::WASM_BINARY.ok_or("Kusama development wasm not available")?;
|
|
|
|
Ok(KusamaChainSpec::from_genesis(
|
|
"Development",
|
|
"kusama_dev",
|
|
ChainType::Development,
|
|
move || kusama_development_config_genesis(wasm_binary),
|
|
vec![],
|
|
None,
|
|
Some(DEFAULT_PROTOCOL_ID),
|
|
None,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
/// Westend development config (single validator Alice)
|
|
#[cfg(feature = "westend-native")]
|
|
pub fn westend_development_config() -> Result<WestendChainSpec, String> {
|
|
let wasm_binary = westend::WASM_BINARY.ok_or("Westend development wasm not available")?;
|
|
|
|
Ok(WestendChainSpec::from_genesis(
|
|
"Development",
|
|
"westend_dev",
|
|
ChainType::Development,
|
|
move || westend_development_config_genesis(wasm_binary),
|
|
vec![],
|
|
None,
|
|
Some(DEFAULT_PROTOCOL_ID),
|
|
None,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
/// Rococo development config (single validator Alice)
|
|
#[cfg(feature = "rococo-native")]
|
|
pub fn rococo_development_config() -> Result<RococoChainSpec, String> {
|
|
let wasm_binary = rococo::WASM_BINARY.ok_or("Rococo development wasm not available")?;
|
|
|
|
Ok(RococoChainSpec::from_genesis(
|
|
"Development",
|
|
"rococo_dev",
|
|
ChainType::Development,
|
|
move || RococoGenesisExt {
|
|
runtime_genesis_config: rococo_development_config_genesis(wasm_binary),
|
|
// Use 1 minute session length.
|
|
session_length_in_blocks: Some(10),
|
|
},
|
|
vec![],
|
|
None,
|
|
Some(DEFAULT_PROTOCOL_ID),
|
|
None,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
/// `Versi` development config (single validator Alice)
|
|
#[cfg(feature = "rococo-native")]
|
|
pub fn versi_development_config() -> Result<RococoChainSpec, String> {
|
|
let wasm_binary = rococo::WASM_BINARY.ok_or("Versi development wasm not available")?;
|
|
|
|
Ok(RococoChainSpec::from_genesis(
|
|
"Development",
|
|
"versi_dev",
|
|
ChainType::Development,
|
|
move || RococoGenesisExt {
|
|
runtime_genesis_config: rococo_development_config_genesis(wasm_binary),
|
|
// Use 1 minute session length.
|
|
session_length_in_blocks: Some(10),
|
|
},
|
|
vec![],
|
|
None,
|
|
Some("versi"),
|
|
None,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
/// Wococo development config (single validator Alice)
|
|
#[cfg(feature = "rococo-native")]
|
|
pub fn wococo_development_config() -> Result<RococoChainSpec, String> {
|
|
const WOCOCO_DEV_PROTOCOL_ID: &str = "woco";
|
|
let wasm_binary = rococo::WASM_BINARY.ok_or("Wococo development wasm not available")?;
|
|
|
|
Ok(RococoChainSpec::from_genesis(
|
|
"Development",
|
|
"wococo_dev",
|
|
ChainType::Development,
|
|
move || RococoGenesisExt {
|
|
runtime_genesis_config: rococo_development_config_genesis(wasm_binary),
|
|
// Use 1 minute session length.
|
|
session_length_in_blocks: Some(10),
|
|
},
|
|
vec![],
|
|
None,
|
|
Some(WOCOCO_DEV_PROTOCOL_ID),
|
|
None,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
#[cfg(feature = "polkadot-native")]
|
|
fn polkadot_local_testnet_genesis(wasm_binary: &[u8]) -> polkadot::RuntimeGenesisConfig {
|
|
polkadot_testnet_genesis(
|
|
wasm_binary,
|
|
vec![
|
|
get_authority_keys_from_seed_no_beefy("Alice"),
|
|
get_authority_keys_from_seed_no_beefy("Bob"),
|
|
],
|
|
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
|
None,
|
|
)
|
|
}
|
|
|
|
/// 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")?;
|
|
|
|
Ok(PolkadotChainSpec::from_genesis(
|
|
"Local Testnet",
|
|
"local_testnet",
|
|
ChainType::Local,
|
|
move || polkadot_local_testnet_genesis(wasm_binary),
|
|
vec![],
|
|
None,
|
|
Some(DEFAULT_PROTOCOL_ID),
|
|
None,
|
|
Some(polkadot_chain_spec_properties()),
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
#[cfg(feature = "kusama-native")]
|
|
fn kusama_local_testnet_genesis(wasm_binary: &[u8]) -> kusama::RuntimeGenesisConfig {
|
|
kusama_testnet_genesis(
|
|
wasm_binary,
|
|
vec![
|
|
get_authority_keys_from_seed_no_beefy("Alice"),
|
|
get_authority_keys_from_seed_no_beefy("Bob"),
|
|
],
|
|
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
|
None,
|
|
)
|
|
}
|
|
|
|
/// Kusama local testnet config (multivalidator Alice + Bob)
|
|
#[cfg(feature = "kusama-native")]
|
|
pub fn kusama_local_testnet_config() -> Result<KusamaChainSpec, String> {
|
|
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,
|
|
move || kusama_local_testnet_genesis(wasm_binary),
|
|
vec![],
|
|
None,
|
|
Some(DEFAULT_PROTOCOL_ID),
|
|
None,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
#[cfg(feature = "westend-native")]
|
|
fn westend_local_testnet_genesis(wasm_binary: &[u8]) -> westend::RuntimeGenesisConfig {
|
|
westend_testnet_genesis(
|
|
wasm_binary,
|
|
vec![
|
|
get_authority_keys_from_seed_no_beefy("Alice"),
|
|
get_authority_keys_from_seed_no_beefy("Bob"),
|
|
],
|
|
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
|
None,
|
|
)
|
|
}
|
|
|
|
/// Westend local testnet config (multivalidator Alice + Bob)
|
|
#[cfg(feature = "westend-native")]
|
|
pub fn westend_local_testnet_config() -> Result<WestendChainSpec, String> {
|
|
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,
|
|
move || westend_local_testnet_genesis(wasm_binary),
|
|
vec![],
|
|
None,
|
|
Some(DEFAULT_PROTOCOL_ID),
|
|
None,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
#[cfg(feature = "rococo-native")]
|
|
fn rococo_local_testnet_genesis(wasm_binary: &[u8]) -> rococo_runtime::RuntimeGenesisConfig {
|
|
rococo_testnet_genesis(
|
|
wasm_binary,
|
|
vec![get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Bob")],
|
|
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
|
None,
|
|
)
|
|
}
|
|
|
|
/// Rococo local testnet config (multivalidator Alice + Bob)
|
|
#[cfg(feature = "rococo-native")]
|
|
pub fn rococo_local_testnet_config() -> Result<RococoChainSpec, String> {
|
|
let wasm_binary = rococo::WASM_BINARY.ok_or("Rococo development wasm not available")?;
|
|
|
|
Ok(RococoChainSpec::from_genesis(
|
|
"Rococo Local Testnet",
|
|
"rococo_local_testnet",
|
|
ChainType::Local,
|
|
move || RococoGenesisExt {
|
|
runtime_genesis_config: rococo_local_testnet_genesis(wasm_binary),
|
|
// Use 1 minute session length.
|
|
session_length_in_blocks: Some(10),
|
|
},
|
|
vec![],
|
|
None,
|
|
Some(DEFAULT_PROTOCOL_ID),
|
|
None,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
/// Wococo is a temporary testnet that uses almost the same runtime as rococo.
|
|
#[cfg(feature = "rococo-native")]
|
|
fn wococo_local_testnet_genesis(wasm_binary: &[u8]) -> rococo_runtime::RuntimeGenesisConfig {
|
|
rococo_testnet_genesis(
|
|
wasm_binary,
|
|
vec![
|
|
get_authority_keys_from_seed("Alice"),
|
|
get_authority_keys_from_seed("Bob"),
|
|
get_authority_keys_from_seed("Charlie"),
|
|
get_authority_keys_from_seed("Dave"),
|
|
],
|
|
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
|
None,
|
|
)
|
|
}
|
|
|
|
/// Wococo local testnet config (multivalidator Alice + Bob + Charlie + Dave)
|
|
#[cfg(feature = "rococo-native")]
|
|
pub fn wococo_local_testnet_config() -> Result<RococoChainSpec, String> {
|
|
let wasm_binary = rococo::WASM_BINARY.ok_or("Wococo development wasm not available")?;
|
|
|
|
Ok(RococoChainSpec::from_genesis(
|
|
"Wococo Local Testnet",
|
|
"wococo_local_testnet",
|
|
ChainType::Local,
|
|
move || RococoGenesisExt {
|
|
runtime_genesis_config: wococo_local_testnet_genesis(wasm_binary),
|
|
// Use 1 minute session length.
|
|
session_length_in_blocks: Some(10),
|
|
},
|
|
vec![],
|
|
None,
|
|
Some(DEFAULT_PROTOCOL_ID),
|
|
None,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|
|
|
|
/// `Versi` is a temporary testnet that uses the same runtime as rococo.
|
|
#[cfg(feature = "rococo-native")]
|
|
fn versi_local_testnet_genesis(wasm_binary: &[u8]) -> rococo_runtime::RuntimeGenesisConfig {
|
|
rococo_testnet_genesis(
|
|
wasm_binary,
|
|
vec![
|
|
get_authority_keys_from_seed("Alice"),
|
|
get_authority_keys_from_seed("Bob"),
|
|
get_authority_keys_from_seed("Charlie"),
|
|
get_authority_keys_from_seed("Dave"),
|
|
],
|
|
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
|
None,
|
|
)
|
|
}
|
|
|
|
/// `Versi` local testnet config (multivalidator Alice + Bob + Charlie + Dave)
|
|
#[cfg(feature = "rococo-native")]
|
|
pub fn versi_local_testnet_config() -> Result<RococoChainSpec, String> {
|
|
let wasm_binary = rococo::WASM_BINARY.ok_or("Versi development wasm not available")?;
|
|
|
|
Ok(RococoChainSpec::from_genesis(
|
|
"Versi Local Testnet",
|
|
"versi_local_testnet",
|
|
ChainType::Local,
|
|
move || RococoGenesisExt {
|
|
runtime_genesis_config: versi_local_testnet_genesis(wasm_binary),
|
|
// Use 1 minute session length.
|
|
session_length_in_blocks: Some(10),
|
|
},
|
|
vec![],
|
|
None,
|
|
Some("versi"),
|
|
None,
|
|
None,
|
|
Default::default(),
|
|
))
|
|
}
|