-
Notifications
You must be signed in to change notification settings - Fork 1.2k
asset-hub-rococo: genesis config presets added #3996
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 7 commits
b9b5455
5d1fa2b
38f67dd
9bc943c
769fc9d
f3e7e4d
0df7dc5
6db7077
7e82cae
fe71694
362d8a2
e7dac38
ccdfe51
13f411d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| // Copyright (C) Parity Technologies (UK) Ltd. | ||
| // SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||
| // you may not use this file except in compliance with the License. | ||
| // You may obtain a copy of the License at | ||
| // | ||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||
| // | ||
| // Unless required by applicable law or agreed to in writing, software | ||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| // See the License for the specific language governing permissions and | ||
| // limitations under the License. | ||
|
|
||
| //! Some common helpers for declaring runtime's presets | ||
| // note: copied from: cumulus/polkadot-parachain/src/chain_spec/mod.rs | ||
|
|
||
| use crate::{AccountId, Signature}; | ||
| use sp_core::{Pair, Public}; | ||
| use sp_runtime::traits::{IdentifyAccount, Verify}; | ||
| #[cfg(not(feature = "std"))] | ||
| use sp_std::alloc::format; | ||
|
|
||
| /// 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) | ||
michalkucharczyk marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| .expect("static values are valid; qed") | ||
| .public() | ||
| } | ||
|
|
||
| type AccountPublic = <Signature as Verify>::Signer; | ||
|
|
||
| pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId | ||
michalkucharczyk marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| where | ||
| AccountPublic: From<<TPublic::Pair as Pair>::Public>, | ||
| { | ||
| AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account() | ||
| } | ||
|
|
||
| /// Generate collator keys from seed. | ||
| /// | ||
| /// This function's return type must always match the session keys of the chain in tuple format. | ||
| pub fn get_collator_keys_from_seed<AuraId: Public>(seed: &str) -> <AuraId::Pair as Pair>::Public { | ||
| get_from_seed::<AuraId>(seed) | ||
| } | ||
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,173 @@ | ||||||||||
| // Copyright (C) Parity Technologies (UK) Ltd. | ||||||||||
| // SPDX-License-Identifier: Apache-2.0 | ||||||||||
|
|
||||||||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||||||||
| // you may not use this file except in compliance with the License. | ||||||||||
| // You may obtain a copy of the License at | ||||||||||
| // | ||||||||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||||||||
| // | ||||||||||
| // Unless required by applicable law or agreed to in writing, software | ||||||||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||||||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||||||
| // See the License for the specific language governing permissions and | ||||||||||
| // limitations under the License. | ||||||||||
|
|
||||||||||
| //! # Asset Hub Rococo Runtime genesis config presets | ||||||||||
|
|
||||||||||
| #[cfg(not(feature = "std"))] | ||||||||||
| use crate::vec; | ||||||||||
| use crate::Vec; | ||||||||||
| use cumulus_primitives_core::ParaId; | ||||||||||
| use hex_literal::hex; | ||||||||||
| use parachains_common::{genesis_config_helpers::*, AccountId, AuraId, Balance as AssetHubBalance}; | ||||||||||
| use sp_core::{crypto::UncheckedInto, sr25519}; | ||||||||||
| use testnet_parachains_constants::rococo::xcm_version::SAFE_XCM_VERSION; | ||||||||||
|
|
||||||||||
| const ASSET_HUB_ROCOCO_ED: AssetHubBalance = crate::ExistentialDeposit::get(); | ||||||||||
|
|
||||||||||
| /// Generate the session keys from individual elements. | ||||||||||
| /// | ||||||||||
| /// The input must be a tuple of individual keys (a single arg for now since we have just one key). | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure about this comment and naming, why exactly will this change to a tuple?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just moved that function from other place w/o thinking too much about it: |
||||||||||
| pub fn asset_hub_rococo_session_keys(keys: AuraId) -> crate::SessionKeys { | ||||||||||
| crate::SessionKeys { aura: keys } | ||||||||||
| } | ||||||||||
|
|
||||||||||
| fn asset_hub_rococo_genesis( | ||||||||||
| invulnerables: Vec<(AccountId, AuraId)>, | ||||||||||
| endowed_accounts: Vec<AccountId>, | ||||||||||
| endowment: AssetHubBalance, | ||||||||||
| id: ParaId, | ||||||||||
| ) -> serde_json::Value { | ||||||||||
| serde_json::json!({ | ||||||||||
| "balances": crate::BalancesConfig { | ||||||||||
|
Comment on lines
+41
to
+42
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why are we not using the concrete
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. A preset is meant to be patch. This is the only reason. If |
||||||||||
| balances: endowed_accounts | ||||||||||
| .iter() | ||||||||||
| .cloned() | ||||||||||
| .map(|k| (k, endowment)) | ||||||||||
| .collect(), | ||||||||||
| }, | ||||||||||
| "parachainInfo": crate::ParachainInfoConfig { | ||||||||||
| parachain_id: id, | ||||||||||
| ..Default::default() | ||||||||||
| }, | ||||||||||
| "collatorSelection": crate::CollatorSelectionConfig { | ||||||||||
| invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(), | ||||||||||
| candidacy_bond: ASSET_HUB_ROCOCO_ED * 16, | ||||||||||
| ..Default::default() | ||||||||||
| }, | ||||||||||
| "session": crate::SessionConfig { | ||||||||||
| keys: invulnerables | ||||||||||
| .into_iter() | ||||||||||
| .map(|(acc, aura)| { | ||||||||||
| ( | ||||||||||
| acc.clone(), // account id | ||||||||||
| acc, // validator id | ||||||||||
| asset_hub_rococo_session_keys(aura), // session keys | ||||||||||
| ) | ||||||||||
| }) | ||||||||||
| .collect(), | ||||||||||
| }, | ||||||||||
| "polkadotXcm": crate::PolkadotXcmConfig { | ||||||||||
| safe_xcm_version: Some(SAFE_XCM_VERSION), | ||||||||||
| ..Default::default() | ||||||||||
| } | ||||||||||
| }) | ||||||||||
| } | ||||||||||
|
|
||||||||||
| /// Encapsulates names of predefined presets. | ||||||||||
| pub mod preset_names { | ||||||||||
| pub const PRESET_DEVELOPMENT: &str = "development"; | ||||||||||
| pub const PRESET_LOCAL: &str = "local"; | ||||||||||
| pub const PRESET_GENESIS: &str = "genesis"; | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This has previously been called "Live", any reason for the change to genesis?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @seadanda Thanks for spotting this. I took the name from here (and I know it is far from being perfect) : polkadot-sdk/cumulus/polkadot-parachain/src/command.rs Lines 171 to 172 in 6daa939
But I am open to any other name. Should I call it ps. I did not notice
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
?
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure we need this at all?
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I mean I assume it is for generating the gensis of the live networks, but yeah we probably don't need it.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
I also am not too sure what that specific config is for. Is that the only place this preset will be used? Maybe my reasoning for live is actually wrong then here
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Actually preset names here are simply reflecting the names of predefined chain-specs exported by This one:
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For now I propose to keep it for compatibility reasons, we can always remove them in future. At some point we will be removing predefined (e.g. "asset-hub-rococo-dev|local|genesis") chain spec flavors from the omni-node. We could remove unused presets at the same time.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @kianenigma what are your thoughts on this? |
||||||||||
| } | ||||||||||
|
|
||||||||||
| /// Provides the JSON representation of predefined genesis config for given `id`. | ||||||||||
| pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<u8>> { | ||||||||||
| use preset_names::*; | ||||||||||
| let patch = match id.try_into() { | ||||||||||
| Ok(PRESET_GENESIS) => asset_hub_rococo_genesis( | ||||||||||
| // initial collators. | ||||||||||
| vec![ | ||||||||||
| // E8XC6rTJRsioKCp6KMy6zd24ykj4gWsusZ3AkSeyavpVBAG | ||||||||||
| ( | ||||||||||
| hex!("44cb62d1d6cdd2fff2a5ef3bb7ef827be5b3e117a394ecaa634d8dd9809d5608").into(), | ||||||||||
| hex!("44cb62d1d6cdd2fff2a5ef3bb7ef827be5b3e117a394ecaa634d8dd9809d5608") | ||||||||||
| .unchecked_into(), | ||||||||||
| ), | ||||||||||
| // G28iWEybndgGRbhfx83t7Q42YhMPByHpyqWDUgeyoGF94ri | ||||||||||
| ( | ||||||||||
| hex!("9864b85e23aa4506643db9879c3dbbeabaa94d269693a4447f537dd6b5893944").into(), | ||||||||||
| hex!("9864b85e23aa4506643db9879c3dbbeabaa94d269693a4447f537dd6b5893944") | ||||||||||
| .unchecked_into(), | ||||||||||
| ), | ||||||||||
| // G839e2eMiq7UXbConsY6DS1XDAYG2XnQxAmLuRLGGQ3Px9c | ||||||||||
| ( | ||||||||||
| hex!("9ce5741ee2f1ac3bdedbde9f3339048f4da2cb88ddf33a0977fa0b4cf86e2948").into(), | ||||||||||
| hex!("9ce5741ee2f1ac3bdedbde9f3339048f4da2cb88ddf33a0977fa0b4cf86e2948") | ||||||||||
| .unchecked_into(), | ||||||||||
| ), | ||||||||||
| // GLao4ukFUW6qhexuZowdFrKa2NLCfnEjZMftSXXfvGv1vvt | ||||||||||
| ( | ||||||||||
| hex!("a676ed15f5a325eab49ed8d5f8c00f3f814b19bb58cda14ad10894c078dd337f").into(), | ||||||||||
| hex!("a676ed15f5a325eab49ed8d5f8c00f3f814b19bb58cda14ad10894c078dd337f") | ||||||||||
| .unchecked_into(), | ||||||||||
| ), | ||||||||||
| ], | ||||||||||
| Vec::new(), | ||||||||||
| ASSET_HUB_ROCOCO_ED * 524_288, | ||||||||||
| 1000.into(), | ||||||||||
| ), | ||||||||||
| Ok(PRESET_LOCAL) => asset_hub_rococo_genesis( | ||||||||||
| // initial collators. | ||||||||||
| vec![ | ||||||||||
| ( | ||||||||||
| get_account_id_from_seed::<sr25519::Public>("Alice"), | ||||||||||
| get_collator_keys_from_seed::<AuraId>("Alice"), | ||||||||||
| ), | ||||||||||
| ( | ||||||||||
| get_account_id_from_seed::<sr25519::Public>("Bob"), | ||||||||||
| get_collator_keys_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"), | ||||||||||
| ], | ||||||||||
| testnet_parachains_constants::rococo::currency::UNITS * 1_000_000, | ||||||||||
| 1000.into(), | ||||||||||
| ), | ||||||||||
| Ok(PRESET_DEVELOPMENT) => asset_hub_rococo_genesis( | ||||||||||
| // initial collators. | ||||||||||
| vec![( | ||||||||||
| get_account_id_from_seed::<sr25519::Public>("Alice"), | ||||||||||
| get_collator_keys_from_seed::<AuraId>("Alice"), | ||||||||||
| )], | ||||||||||
| 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"), | ||||||||||
| ], | ||||||||||
| testnet_parachains_constants::rococo::currency::UNITS * 1_000_000, | ||||||||||
| 1000.into(), | ||||||||||
| ), | ||||||||||
| Err(_) | Ok(_) => return None, | ||||||||||
michalkucharczyk marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
| }; | ||||||||||
|
|
||||||||||
| Some( | ||||||||||
| serde_json::to_string(&patch) | ||||||||||
| .expect("serialization to json is expected to work. qed.") | ||||||||||
| .into_bytes(), | ||||||||||
| ) | ||||||||||
| } | ||||||||||
Uh oh!
There was an error while loading. Please reload this page.