From bc04c5b9c5df38137e5706893289c39e0d7bd87b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3nal=20Murray?= Date: Tue, 6 Aug 2024 15:35:41 +0100 Subject: [PATCH] Add kusama live preset and chain spec to builder --- Cargo.lock | 2 + Cargo.toml | 1 + chain-spec-generator/Cargo.toml | 2 + chain-spec-generator/src/main.rs | 8 +++ .../src/system_parachains_specs.rs | 65 ++++++++++++++++++ .../src/genesis_config_presets.rs | 68 +++++++++++++++++-- .../src/genesis_config_presets.rs | 13 ++++ 7 files changed, 155 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9a12766abd..f4adbffe84 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2249,8 +2249,10 @@ dependencies = [ "people-polkadot-runtime", "polkadot-runtime", "sc-chain-spec", + "sc-network", "serde", "serde_json", + "sp-runtime 38.0.0", "staging-kusama-runtime", ] diff --git a/Cargo.toml b/Cargo.toml index 485f70f773..493f08542d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -190,6 +190,7 @@ frame-metadata-hash-extension = { version = "0.4.0", default-features = false } remote-externalities = { version = "0.43.0", package = "frame-remote-externalities" } runtime-parachains = { version = "15.0.0", default-features = false, package = "polkadot-runtime-parachains" } sc-chain-spec = { version = "35.0.0" } +sc-network = { version = "0.42.0" } scale-info = { version = "2.10.0", default-features = false } separator = { version = "0.4.1" } serde = { version = "1.0.196" } diff --git a/chain-spec-generator/Cargo.toml b/chain-spec-generator/Cargo.toml index a302073ad2..7fb535ac76 100644 --- a/chain-spec-generator/Cargo.toml +++ b/chain-spec-generator/Cargo.toml @@ -15,6 +15,8 @@ polkadot-runtime = { workspace = true } kusama-runtime = { workspace = true } sc-chain-spec = { workspace = true } +sc-network = { workspace = true } +sp-runtime = { workspace = true } asset-hub-polkadot-runtime = { workspace = true } asset-hub-kusama-runtime = { workspace = true } diff --git a/chain-spec-generator/src/main.rs b/chain-spec-generator/src/main.rs index 40dde75490..3b6ed2288c 100644 --- a/chain-spec-generator/src/main.rs +++ b/chain-spec-generator/src/main.rs @@ -76,10 +76,18 @@ fn main() -> Result<(), String> { "encointer-kusama-local", Box::new(system_parachains_specs::encointer_kusama_local_testnet_config) as Box<_>, ), + ( + "coretime-kusama", + Box::new(system_parachains_specs::coretime_kusama_config) as Box<_>, + ), ( "coretime-kusama-local", Box::new(system_parachains_specs::coretime_kusama_local_testnet_config) as Box<_>, ), + ( + "coretime-polkadot", + Box::new(system_parachains_specs::coretime_polkadot_config) as Box<_>, + ), ( "coretime-polkadot-local", Box::new(system_parachains_specs::coretime_polkadot_local_testnet_config) as Box<_>, diff --git a/chain-spec-generator/src/system_parachains_specs.rs b/chain-spec-generator/src/system_parachains_specs.rs index 3e751f6052..7f6602b7c6 100644 --- a/chain-spec-generator/src/system_parachains_specs.rs +++ b/chain-spec-generator/src/system_parachains_specs.rs @@ -16,7 +16,9 @@ // along with Polkadot. If not, see . use sc_chain_spec::{ChainSpec, ChainSpecExtension, ChainSpecGroup, ChainType}; +use sc_network::config::MultiaddrWithPeerId; use serde::{Deserialize, Serialize}; +use std::str::FromStr; /// Generic extensions for Parachain ChainSpecs. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)] @@ -218,6 +220,45 @@ pub fn coretime_kusama_local_testnet_config() -> Result, Stri )) } +pub fn coretime_kusama_config() -> Result, String> { + let mut properties = sc_chain_spec::Properties::new(); + properties.insert("ss58Format".into(), 2.into()); + properties.insert("tokenSymbol".into(), "KSM".into()); + properties.insert("tokenDecimals".into(), 12.into()); + + let boot_nodes = vec![ + "/dns/polkadot-coretime-connect-a-0.polkadot.io/tcp/30334/p2p/12D3KooWKjnixAHbKMsPTJwGx8SrBeGEJLHA8KmKcEDYMp3YmWgR", + "/dns/polkadot-coretime-connect-a-1.polkadot.io/tcp/30334/p2p/12D3KooWQ7B7p4DFv1jWqaKfhrZBcMmi5g8bWFnmskguLaGEmT6n", + "/dns/polkadot-coretime-connect-a-0.polkadot.io/tcp/443/wss/p2p/12D3KooWKjnixAHbKMsPTJwGx8SrBeGEJLHA8KmKcEDYMp3YmWgR", + "/dns/polkadot-coretime-connect-a-1.polkadot.io/tcp/443/wss/p2p/12D3KooWQ7B7p4DFv1jWqaKfhrZBcMmi5g8bWFnmskguLaGEmT6n", + ]; + + Ok(Box::new( + CoretimeKusamaChainSpec::builder( + coretime_kusama_runtime::WASM_BINARY.expect("Kusama Coretime wasm not available!"), + Extensions { relay_chain: "kusama".into(), para_id: 1005 }, + ) + .with_name("Kusama Coretime") + .with_id("coretime-kusama") + .with_chain_type(ChainType::Live) + .with_genesis_config_patch( + coretime_kusama_runtime::genesis_config_presets::coretime_kusama_live_genesis( + 1005.into(), + ), + ) + .with_properties(properties) + .with_boot_nodes( + boot_nodes + .iter() + .map(|addr| { + MultiaddrWithPeerId::from_str(addr).expect("Boot node address is incorrect.") + }) + .collect(), + ) + .build(), + )) +} + pub fn coretime_polkadot_local_testnet_config() -> Result, String> { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 0.into()); @@ -242,6 +283,30 @@ pub fn coretime_polkadot_local_testnet_config() -> Result, St )) } +pub fn coretime_polkadot_config() -> Result, String> { + let mut properties = sc_chain_spec::Properties::new(); + properties.insert("ss58Format".into(), 0.into()); + properties.insert("tokenSymbol".into(), "DOT".into()); + properties.insert("tokenDecimals".into(), 10.into()); + + Ok(Box::new( + CoretimePolkadotChainSpec::builder( + coretime_polkadot_runtime::WASM_BINARY.expect("CoretimePolkadot wasm not available!"), + Extensions { relay_chain: "polkadot".into(), para_id: 1005 }, + ) + .with_name("Polkadot Coretime") + .with_id("coretime-polkadot") + .with_chain_type(ChainType::Live) + .with_genesis_config_patch( + coretime_polkadot_runtime::genesis_config_presets::coretime_polkadot_live_genesis( + 1005.into(), + ), + ) + .with_properties(properties) + .build(), + )) +} + pub fn people_kusama_local_testnet_config() -> Result, String> { let mut properties = sc_chain_spec::Properties::new(); properties.insert("ss58Format".into(), 2.into()); diff --git a/system-parachains/coretime/coretime-kusama/src/genesis_config_presets.rs b/system-parachains/coretime/coretime-kusama/src/genesis_config_presets.rs index 9b8c7ec0b2..a1ea2c49ff 100644 --- a/system-parachains/coretime/coretime-kusama/src/genesis_config_presets.rs +++ b/system-parachains/coretime/coretime-kusama/src/genesis_config_presets.rs @@ -17,12 +17,14 @@ //! Genesis configs presets for the CoretimeKusama runtime use crate::*; +use hex_literal::hex; +use sp_core::crypto::UncheckedInto; use sp_std::vec::Vec; use system_parachains_constants::genesis_presets::*; const CORETIME_KUSAMA_ED: Balance = ExistentialDeposit::get(); -fn coretime_kusama_genesis( +pub fn coretime_kusama_genesis( invulnerables: Vec<(AccountId, AuraId)>, endowed_accounts: Vec, id: ParaId, @@ -49,9 +51,9 @@ fn coretime_kusama_genesis( .into_iter() .map(|(acc, aura)| { ( - acc.clone(), // account id - acc, // validator id - SessionKeys { aura }, // session keys + acc.clone(), // account id + acc, // validator id + SessionKeys { aura }, // session keys ) }) .collect(), @@ -72,9 +74,67 @@ fn coretime_kusama_development_genesis(para_id: ParaId) -> serde_json::Value { coretime_kusama_local_testnet_genesis(para_id) } +pub fn coretime_kusama_live_genesis(para_id: ParaId) -> serde_json::Value { + coretime_kusama_genesis( + vec![ + // HRn3a4qLmv1ejBHvEbnjaiEWjt154iFi2Wde7bXKGUwGvtL + ( + hex!("d6a941f3a15918925170cc4e703c0beacc8915e2a04b3e86985915d2d84d2d52").into(), + hex!("4491cfc3ef17b4e02c66a7161f34fcacabf86ad64a783c1dbbe74e4ef82a7966") + .unchecked_into(), + ), + // Cx9Uu2sxp3Xt1QBUbGQo7j3imTvjWJrqPF1PApDoy6UVkWP + ( + hex!("10a59d610a39fc102624c8e8aa1096f0188f3fdd24b226c6a27eeed5b4774e12").into(), + hex!("04e3a3ecadbd493eb64ab2c19d215ccbc9eebea686dc3cea4833194674a8285e") + .unchecked_into(), + ), + // CdW8izFcLeicL3zZUQaC3a39AGeNSTgc9Jb5E5sjREPryA2 + ( + hex!("026d79399d627961c528d648413b2aa54595245d97158a8b90900287dee28216").into(), + hex!("de05506c73f35cf0bd50652b719369c2e20be9bf2c8522bd6cb61059a0cb0033") + .unchecked_into(), + ), + // H1tAQMm3eizGcmpAhL9aA9gR844kZpQfkU7pkmMiLx9jSzE + ( + hex!("c46ff658221e07564fde2764017590264f9dfced3538e283856c43e0ee456e51").into(), + hex!("786b7889aecde64fc8942c1d52e2d7220da83636275edfd467624a06ffc3c935") + .unchecked_into(), + ), + // J11Rp4mjz3vRb2DL51HqRGRjhuEQRyXgtuFskebXb8zMZ9s + ( + hex!("f00168a3d082a8ccf93945b1f173fdaecc1ce76fc09bbde18423640194be7212").into(), + hex!("0a2cee67864d1d4c9433bfd45324b8f72425f096e01041546be48c5d3bc9a746") + .unchecked_into(), + ), + // DtuntvQBh9vajFTnd42aTTCiuCyY3ep6EVwhhPji2ejyyhW + ( + hex!("3a6a0745688c52b4709f65fa2e4508dfa0940ccc0d282cd16be9bc043b2f4a04").into(), + hex!("064842b69c1e8dc6e2263dedd129d96488cae3f6953631da4ebba097c241eb23") + .unchecked_into(), + ), + // HmatizNhXrZtXwQK2LfntvjCy3x1EuKs1WnRQ6CP3KkNfmA + ( + hex!("e5c49f7bc76b9e1b91566945e2eb539d960da57ca8e9ccd0e6030e4b11b60099").into(), + hex!("7e126fa970a75ae2cd371d01ee32e9387f0b256832e408ca8ea7b254e6bcde7d") + .unchecked_into(), + ), + // HPUEzi4v3YJmhBfSbcGEFFiNKPAGVnGkfDiUzBNTR7j1CxT + ( + hex!("d4e6d6256f56677bcdbc0543f1a2c40aa82497b33af1748fc10113b1e2a1b460").into(), + hex!("cade3f02e0acf9e85d9a4f919abeaeda12b55202c74f78d506ccd1ea2e16a271") + .unchecked_into(), + ), + ], + Vec::new(), + para_id, + ) +} + /// Provides the JSON representation of predefined genesis config for given `id`. pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option> { let patch = match id.try_into() { + Ok("live") => coretime_kusama_live_genesis(1005.into()), Ok("development") => coretime_kusama_development_genesis(1005.into()), Ok("local_testnet") => coretime_kusama_local_testnet_genesis(1005.into()), _ => return None, diff --git a/system-parachains/coretime/coretime-polkadot/src/genesis_config_presets.rs b/system-parachains/coretime/coretime-polkadot/src/genesis_config_presets.rs index ce4f8ea2b9..5252287655 100644 --- a/system-parachains/coretime/coretime-polkadot/src/genesis_config_presets.rs +++ b/system-parachains/coretime/coretime-polkadot/src/genesis_config_presets.rs @@ -17,6 +17,7 @@ //! Genesis configs presets for the Polkadot Coretime runtime use crate::*; +use sp_core::sr25519; use sp_std::vec::Vec; use system_parachains_constants::genesis_presets::*; @@ -72,9 +73,21 @@ fn coretime_polkadot_development_genesis(para_id: ParaId) -> serde_json::Value { coretime_polkadot_local_testnet_genesis(para_id) } +fn coretime_polkadot_live_invulnerables() -> Vec<(parachains_common::AccountId, AuraId)> { + Vec::from([ + (get_account_id_from_seed::("Alice"), get_from_seed::("Alice")), + (get_account_id_from_seed::("Bob"), get_from_seed::("Bob")), + ]) +} + +pub fn coretime_polkadot_live_genesis(para_id: ParaId) -> serde_json::Value { + coretime_polkadot_genesis(coretime_polkadot_live_invulnerables(), Vec::new(), para_id) +} + /// Provides the JSON representation of predefined genesis config for given `id`. pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option> { let patch = match id.try_into() { + Ok("live") => coretime_polkadot_live_genesis(1005.into()), Ok("development") => coretime_polkadot_development_genesis(1005.into()), Ok("local_testnet") => coretime_polkadot_local_testnet_genesis(1005.into()), _ => return None,