diff --git a/node/parallel/src/chain_spec/heiko.rs b/node/parallel/src/chain_spec/heiko.rs index db2b6330a..6e1d67602 100644 --- a/node/parallel/src/chain_spec/heiko.rs +++ b/node/parallel/src/chain_spec/heiko.rs @@ -33,7 +33,9 @@ use sp_runtime::{ FixedPointNumber, }; -use crate::chain_spec::{get_account_id_from_seed, get_authority_keys_from_seed, Extensions}; +use crate::chain_spec::{ + as_properties, get_account_id_from_seed, get_authority_keys_from_seed, Extensions, +}; /// Specialized `ChainSpec` for the normal parachain runtime. pub type ChainSpec = sc_service::GenericChainSpec; @@ -75,8 +77,8 @@ pub fn development_config(id: ParaId) -> ChainSpec { }, vec![], None, - None, - None, + Some("heiko-dev"), + Some(as_properties(network::NetworkType::Heiko)), Extensions { relay_chain: "rococo-local".into(), para_id: id.into(), @@ -168,8 +170,8 @@ pub fn local_testnet_config(id: ParaId) -> ChainSpec { }, vec![], None, - None, - None, + Some("heiko-local"), + Some(as_properties(network::NetworkType::Heiko)), Extensions { relay_chain: "kusama".into(), para_id: id.into(), diff --git a/node/parallel/src/chain_spec/mod.rs b/node/parallel/src/chain_spec/mod.rs index 5a7c208c9..269e5a391 100644 --- a/node/parallel/src/chain_spec/mod.rs +++ b/node/parallel/src/chain_spec/mod.rs @@ -15,13 +15,44 @@ pub mod heiko; pub mod parallel; -use primitives::*; use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup}; +use sc_service::Properties; use serde::{Deserialize, Serialize}; +use serde_json::json; use sp_consensus_aura::sr25519::AuthorityId as AuraId; use sp_core::{sr25519, Pair, Public}; use sp_runtime::traits::IdentifyAccount; +use primitives::{network::NetworkType, *}; + +/// Token symbol of heiko network. +pub const HEIKO_TOKEN: &str = "HKO"; +/// Token symbol of parallel network. +pub const PARALLEL_TOKEN: &str = "PARA"; + +/// Generate chain properties for network. +/// +/// For fields definition, see https://github.com/polkadot-js/apps/blob/bd78840d2142df121d182e8700b20308880dde0a/packages/react-api/src/Api.tsx#L115 +pub(crate) fn as_properties(network: NetworkType) -> Properties { + let (symbol, decimal) = token_info(&network); + json!({ + "ss58Format": network.ss58_addr_format_id(), + "tokenSymbol": symbol, + "tokenDecimals": decimal, + }) + .as_object() + .expect("Network properties are valid; qed") + .to_owned() +} + +/// Return (token_symbol, token_decimal) of this network. +fn token_info(network: &NetworkType) -> (&str, u8) { + match network { + NetworkType::Heiko => (HEIKO_TOKEN, 12), + NetworkType::Parallel => (PARALLEL_TOKEN, 12), + } +} + /// Helper function to generate a crypto pair from seed pub fn get_from_seed(seed: &str) -> ::Public { TPublic::Pair::from_string(&format!("//{}", seed), None) diff --git a/node/parallel/src/chain_spec/parallel.rs b/node/parallel/src/chain_spec/parallel.rs index 005a3d909..12a05a903 100644 --- a/node/parallel/src/chain_spec/parallel.rs +++ b/node/parallel/src/chain_spec/parallel.rs @@ -22,7 +22,7 @@ use parallel_runtime::{ SystemConfig, TechnicalCommitteeConfig, TokensConfig, ValidatorFeedersMembershipConfig, VestingConfig, WASM_BINARY, }; -use primitives::*; +use primitives::{network::NetworkType, *}; use sc_service::ChainType; use sp_consensus_aura::sr25519::AuthorityId as AuraId; use sp_core::crypto::UncheckedInto; @@ -32,7 +32,9 @@ use sp_runtime::{ FixedPointNumber, }; -use crate::chain_spec::{get_account_id_from_seed, get_authority_keys_from_seed, Extensions}; +use crate::chain_spec::{ + as_properties, get_account_id_from_seed, get_authority_keys_from_seed, Extensions, +}; /// Specialized `ChainSpec` for the normal parachain runtime. pub type ChainSpec = sc_service::GenericChainSpec; @@ -74,8 +76,8 @@ pub fn development_config(id: ParaId) -> ChainSpec { }, vec![], None, - None, - None, + Some("parallel-dev"), + Some(as_properties(NetworkType::Parallel)), Extensions { relay_chain: "rococo-local".into(), para_id: id.into(), @@ -167,8 +169,8 @@ pub fn local_testnet_config(id: ParaId) -> ChainSpec { }, vec![], None, - None, - None, + Some("parallel-local"), + Some(as_properties(NetworkType::Parallel)), Extensions { relay_chain: "polkadot".into(), para_id: id.into(), diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index 7e7c2757e..42d83313e 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -16,6 +16,8 @@ #![allow(clippy::unnecessary_cast)] #![allow(clippy::upper_case_acronyms)] +pub mod network; + use codec::{Decode, Encode}; use sp_runtime::{ traits::{CheckedDiv, IdentifyAccount, Verify}, diff --git a/primitives/src/network.rs b/primitives/src/network.rs new file mode 100644 index 000000000..552b3c3b2 --- /dev/null +++ b/primitives/src/network.rs @@ -0,0 +1,24 @@ +#[cfg(feature = "std")] +use serde::{Deserialize, Serialize}; +use sp_runtime::RuntimeDebug; + +/// Network type for parallel. +#[derive(Clone, Copy, RuntimeDebug)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub enum NetworkType { + Parallel, + Heiko, +} + +impl NetworkType { + /// Return ss58 address prefix from network type. + pub fn ss58_addr_format_id(&self) -> u8 { + match self { + NetworkType::Heiko => HEIKO_PREFIX, + NetworkType::Parallel => PARALLEL_PREFIX, + } + } +} + +pub const HEIKO_PREFIX: u8 = 110; +pub const PARALLEL_PREFIX: u8 = 172;