-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: breaking changes from latest relase branch
- Loading branch information
Showing
8 changed files
with
13,233 additions
and
29 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,169 @@ | ||
// Copyright 2021 ChainSafe Systems | ||
// SPDX-License-Identifier: LGPL-3.0-only | ||
|
||
use cumulus_primitives_core::ParaId; | ||
use parachain_runtime::{AccountId, AuraId, 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<parachain_runtime::GenesisConfig, Extensions>; | ||
|
||
/// 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() | ||
} | ||
|
||
/// The extensions for the [`ChainSpec`]. | ||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)] | ||
#[serde(deny_unknown_fields)] | ||
pub struct Extensions { | ||
/// The relay chain of the Parachain. | ||
pub relay_chain: String, | ||
/// The id of the Parachain. | ||
pub para_id: u32, | ||
} | ||
|
||
impl Extensions { | ||
/// Try to get the extension from the given `ChainSpec`. | ||
pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> { | ||
sc_chain_spec::get_extension(chain_spec.extensions()) | ||
} | ||
} | ||
|
||
type AccountPublic = <Signature as Verify>::Signer; | ||
|
||
/// 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() | ||
} | ||
|
||
pub fn pint_development_config(id: ParaId) -> ChainSpec { | ||
ChainSpec::from_genesis( | ||
// Name | ||
"PINT Development", | ||
// ID | ||
"pint_dev", | ||
ChainType::Local, | ||
move || { | ||
pint_testnet_genesis( | ||
get_account_id_from_seed::<sr25519::Public>("Alice"), | ||
vec![ | ||
get_from_seed::<AuraId>("Alice"), | ||
get_from_seed::<AuraId>("Bob"), | ||
], | ||
vec![ | ||
get_account_id_from_seed::<sr25519::Public>("Alice"), | ||
get_account_id_from_seed::<sr25519::Public>("Bob"), | ||
get_account_id_from_seed::<sr25519::Public>("Alice//stash"), | ||
get_account_id_from_seed::<sr25519::Public>("Bob//stash"), | ||
], | ||
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"), | ||
], | ||
id, | ||
) | ||
}, | ||
vec![], | ||
None, | ||
None, | ||
None, | ||
Extensions { | ||
relay_chain: "rococo-dev".into(), | ||
para_id: id.into(), | ||
}, | ||
) | ||
} | ||
|
||
pub fn pint_local_config(id: ParaId) -> ChainSpec { | ||
ChainSpec::from_genesis( | ||
// Name | ||
"Local Testnet", | ||
// ID | ||
"local_testnet", | ||
ChainType::Local, | ||
move || { | ||
pint_testnet_genesis( | ||
get_account_id_from_seed::<sr25519::Public>("Alice"), | ||
vec![ | ||
get_from_seed::<AuraId>("Alice"), | ||
get_from_seed::<AuraId>("Bob"), | ||
], | ||
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"), | ||
], | ||
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"), | ||
], | ||
id, | ||
) | ||
}, | ||
vec![], | ||
None, | ||
None, | ||
None, | ||
Extensions { | ||
relay_chain: "rococo-local".into(), | ||
para_id: id.into(), | ||
}, | ||
) | ||
} | ||
|
||
fn pint_testnet_genesis( | ||
root_key: AccountId, | ||
initial_authorities: Vec<AuraId>, | ||
endowed_accounts: Vec<AccountId>, | ||
council_members: Vec<AccountId>, | ||
id: ParaId, | ||
) -> parachain_runtime::GenesisConfig { | ||
parachain_runtime::GenesisConfig { | ||
frame_system: parachain_runtime::SystemConfig { | ||
code: parachain_runtime::WASM_BINARY | ||
.expect("WASM binary was not build, please build it!") | ||
.to_vec(), | ||
changes_trie_config: Default::default(), | ||
}, | ||
pallet_balances: parachain_runtime::BalancesConfig { | ||
balances: endowed_accounts | ||
.iter() | ||
.cloned() | ||
.map(|k| (k, 1 << 60)) | ||
.collect(), | ||
}, | ||
pallet_committee: parachain_runtime::CommitteeConfig { | ||
council_members, | ||
..Default::default() | ||
}, | ||
pallet_sudo: parachain_runtime::SudoConfig { key: root_key }, | ||
parachain_info: parachain_runtime::ParachainInfoConfig { parachain_id: id }, | ||
pallet_aura: parachain_runtime::AuraConfig { | ||
authorities: initial_authorities, | ||
}, | ||
cumulus_pallet_aura_ext: Default::default(), | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
// Copyright 2021 ChainSafe Systems | ||
// SPDX-License-Identifier: LGPL-3.0-only | ||
|
||
use crate::chain_spec; | ||
use cumulus_client_cli; | ||
use sc_cli; | ||
use std::path::PathBuf; | ||
use structopt::StructOpt; | ||
|
||
/// Sub-commands supported by the collator. | ||
#[derive(Debug, StructOpt)] | ||
pub enum Subcommand { | ||
/// Export the genesis state of the parachain. | ||
#[structopt(name = "export-genesis-state")] | ||
ExportGenesisState(ExportGenesisStateCommand), | ||
|
||
/// Export the genesis wasm of the parachain. | ||
#[structopt(name = "export-genesis-wasm")] | ||
ExportGenesisWasm(ExportGenesisWasmCommand), | ||
|
||
/// Build a chain specification. | ||
BuildSpec(sc_cli::BuildSpecCmd), | ||
|
||
/// Validate blocks. | ||
CheckBlock(sc_cli::CheckBlockCmd), | ||
|
||
/// Export blocks. | ||
ExportBlocks(sc_cli::ExportBlocksCmd), | ||
|
||
/// Export the state of a given block into a chain spec. | ||
ExportState(sc_cli::ExportStateCmd), | ||
|
||
/// Import blocks. | ||
ImportBlocks(sc_cli::ImportBlocksCmd), | ||
|
||
/// Remove the whole chain. | ||
PurgeChain(cumulus_client_cli::PurgeChainCmd), | ||
|
||
/// Revert the chain to a previous state. | ||
Revert(sc_cli::RevertCmd), | ||
|
||
/// The custom benchmark subcommmand benchmarking runtime pallets. | ||
#[structopt(name = "benchmark", about = "Benchmark runtime pallets.")] | ||
Benchmark(frame_benchmarking_cli::BenchmarkCmd), | ||
} | ||
|
||
/// Command for exporting the genesis state of the parachain | ||
#[derive(Debug, StructOpt)] | ||
pub struct ExportGenesisStateCommand { | ||
/// Output file name or stdout if unspecified. | ||
#[structopt(parse(from_os_str))] | ||
pub output: Option<PathBuf>, | ||
|
||
/// Id of the parachain this state is for. | ||
/// | ||
/// Default: 100 | ||
#[structopt(long, conflicts_with = "chain")] | ||
pub parachain_id: Option<u32>, | ||
|
||
/// Write output in binary. Default is to write in hex. | ||
#[structopt(short, long)] | ||
pub raw: bool, | ||
|
||
/// The name of the chain for that the genesis state should be exported. | ||
#[structopt(long, conflicts_with = "parachain-id")] | ||
pub chain: Option<String>, | ||
} | ||
|
||
/// Command for exporting the genesis wasm file. | ||
#[derive(Debug, StructOpt)] | ||
pub struct ExportGenesisWasmCommand { | ||
/// Output file name or stdout if unspecified. | ||
#[structopt(parse(from_os_str))] | ||
pub output: Option<PathBuf>, | ||
|
||
/// Write output in binary. Default is to write in hex. | ||
#[structopt(short, long)] | ||
pub raw: bool, | ||
|
||
/// The name of the chain for that the genesis wasm file should be exported. | ||
#[structopt(long)] | ||
pub chain: Option<String>, | ||
} | ||
|
||
#[derive(Debug, StructOpt)] | ||
#[structopt(settings = &[ | ||
structopt::clap::AppSettings::GlobalVersion, | ||
structopt::clap::AppSettings::ArgsNegateSubcommands, | ||
structopt::clap::AppSettings::SubcommandsNegateReqs, | ||
])] | ||
pub struct Cli { | ||
#[structopt(subcommand)] | ||
pub subcommand: Option<Subcommand>, | ||
|
||
#[structopt(flatten)] | ||
pub run: cumulus_client_cli::RunCmd, | ||
|
||
/// Relaychain arguments | ||
#[structopt(raw = true)] | ||
pub relaychain_args: Vec<String>, | ||
} | ||
|
||
#[derive(Debug)] | ||
pub struct RelayChainCli { | ||
/// The actual relay chain cli object. | ||
pub base: polkadot_cli::RunCmd, | ||
|
||
/// Optional chain id that should be passed to the relay chain. | ||
pub chain_id: Option<String>, | ||
|
||
/// The base path that should be used by the relay chain. | ||
pub base_path: Option<PathBuf>, | ||
} | ||
|
||
impl RelayChainCli { | ||
/// Parse the relay chain CLI parameters using the para chain `Configuration`. | ||
pub fn new<'a>( | ||
para_config: &sc_service::Configuration, | ||
relay_chain_args: impl Iterator<Item = &'a String>, | ||
) -> Self { | ||
let extension = chain_spec::Extensions::try_get(&*para_config.chain_spec); | ||
let chain_id = extension.map(|e| e.relay_chain.clone()); | ||
let base_path = para_config | ||
.base_path | ||
.as_ref() | ||
.map(|x| x.path().join("polkadot")); | ||
Self { | ||
base_path, | ||
chain_id, | ||
base: polkadot_cli::RunCmd::from_iter(relay_chain_args), | ||
} | ||
} | ||
} |
Oops, something went wrong.