From 1317cdd4c1a625c14592b1da7bc45018de0c455e Mon Sep 17 00:00:00 2001 From: linning Date: Tue, 31 Oct 2023 02:06:35 +0800 Subject: [PATCH 1/3] Rename the genesis domain to nova and make it permissioned in gemini-3g This commit also come with some refactoring to pass GenesisDomainParams directly to fn subspace_genesis_config instead of returning from evm_chain_spec::get_testnet_genesis_by_spec_id because the latter used in many other places that don't need GenesisDomainParams Signed-off-by: linning --- crates/subspace-node/src/chain_spec.rs | 51 ++++++++-- crates/subspace-node/src/domain/cli.rs | 8 +- .../src/domain/evm_chain_spec.rs | 95 ++++++------------- 3 files changed, 77 insertions(+), 77 deletions(-) diff --git a/crates/subspace-node/src/chain_spec.rs b/crates/subspace-node/src/chain_spec.rs index 6ca2d563f0..2df175404d 100644 --- a/crates/subspace-node/src/chain_spec.rs +++ b/crates/subspace-node/src/chain_spec.rs @@ -16,8 +16,11 @@ //! Subspace chain configurations. -use crate::chain_spec_utils::{chain_spec_properties, get_account_id_from_seed}; +use crate::chain_spec_utils::{ + chain_spec_properties, get_account_id_from_seed, get_public_key_from_seed, +}; use crate::domain::evm_chain_spec::{self, SpecId}; +use hex_literal::hex; use parity_scale_codec::Encode; use sc_service::{ChainType, NoExtension}; use sc_subspace_chain_specs::ConsensusChainSpec; @@ -25,8 +28,9 @@ use sc_telemetry::TelemetryEndpoints; use sp_consensus_subspace::FarmerPublicKey; use sp_core::crypto::{Ss58Codec, UncheckedFrom}; use sp_domains::storage::RawGenesis; -use sp_domains::{OperatorAllowList, RuntimeType}; +use sp_domains::{OperatorAllowList, OperatorPublicKey, RuntimeType}; use sp_runtime::{BuildStorage, Percent}; +use std::collections::btree_set::BTreeSet; use std::marker::PhantomData; use std::num::NonZeroU32; use subspace_core_primitives::PotKey; @@ -91,6 +95,12 @@ struct GenesisParams { confirmation_depth_k: u32, } +struct GenesisDomainParams { + domain_name: String, + operator_allow_list: OperatorAllowList, + operator_signing_key: OperatorPublicKey, +} + pub fn gemini_3g_compiled() -> Result, String> { Ok(ConsensusChainSpec::from_genesis( // Name @@ -143,7 +153,7 @@ pub fn gemini_3g_compiled() -> Result, subspace_genesis_config( SpecId::Gemini, WASM_BINARY.expect("Wasm binary must be built for Gemini"), - sudo_account, + sudo_account.clone(), balances, vesting_schedules, GenesisParams { @@ -161,6 +171,15 @@ pub fn gemini_3g_compiled() -> Result, enable_balance_transfers: true, confirmation_depth_k: 100, // TODO: Proper value here }, + GenesisDomainParams { + domain_name: "nova".to_owned(), + operator_allow_list: OperatorAllowList::Operators(BTreeSet::from_iter(vec![ + sudo_account, + ])), + operator_signing_key: OperatorPublicKey::unchecked_from(hex!( + "aa3b05b4d649666723e099cf3bafc2f2c04160ebe0e16ddc82f72d6ed97c4b6b" + )), + }, ) }, // Bootnodes @@ -259,6 +278,13 @@ pub fn devnet_config_compiled() -> Result Result, String> enable_balance_transfers: true, confirmation_depth_k: 5, }, + GenesisDomainParams { + domain_name: "evm-domain".to_owned(), + operator_allow_list: OperatorAllowList::Anyone, + operator_signing_key: get_public_key_from_seed::("Alice"), + }, ) }, // Bootnodes @@ -380,6 +411,11 @@ pub fn local_config() -> Result, String enable_balance_transfers: true, confirmation_depth_k: 1, }, + GenesisDomainParams { + domain_name: "evm-domain".to_owned(), + operator_allow_list: OperatorAllowList::Anyone, + operator_signing_key: get_public_key_from_seed::("Alice"), + }, ) }, // Bootnodes @@ -412,6 +448,7 @@ fn subspace_genesis_config( // who, start, period, period_count, per_period vesting: Vec<(AccountId, BlockNumber, BlockNumber, u32, Balance)>, genesis_params: GenesisParams, + genesis_domain_params: GenesisDomainParams, ) -> RuntimeGenesisConfig { let GenesisParams { enable_rewards, @@ -423,10 +460,8 @@ fn subspace_genesis_config( confirmation_depth_k, } = genesis_params; - let (domain_genesis_config, genesis_domain_params) = - evm_chain_spec::get_testnet_genesis_by_spec_id(spec_id); - let raw_genesis_storage = { + let domain_genesis_config = evm_chain_spec::get_testnet_genesis_by_spec_id(spec_id); let storage = domain_genesis_config .build_storage() .expect("Failed to build genesis storage from genesis runtime config"); @@ -468,12 +503,12 @@ fn subspace_genesis_config( // Domain config, mainly for placeholder the concrete value TBD owner_account_id: sudo_account, - domain_name: "evm-domain".to_owned(), + domain_name: genesis_domain_params.domain_name, max_block_size: MaxDomainBlockSize::get(), max_block_weight: MaxDomainBlockWeight::get(), bundle_slot_probability: (1, 1), target_bundles_per_block: 10, - operator_allow_list: OperatorAllowList::Anyone, + operator_allow_list: genesis_domain_params.operator_allow_list, signing_key: genesis_domain_params.operator_signing_key, nomination_tax: Percent::from_percent(5), minimum_nominator_stake: 100 * SSC, diff --git a/crates/subspace-node/src/domain/cli.rs b/crates/subspace-node/src/domain/cli.rs index 0a43b12836..ce34635dd8 100644 --- a/crates/subspace-node/src/domain/cli.rs +++ b/crates/subspace-node/src/domain/cli.rs @@ -292,10 +292,10 @@ impl BuildGenesisStorageCmd { let is_dev = self.shared_params.is_dev(); let chain_id = self.shared_params.chain_id(is_dev); let domain_genesis_config = match chain_id.as_str() { - "gemini-3g" => evm_chain_spec::get_testnet_genesis_by_spec_id(SpecId::Gemini).0, - "devnet" => evm_chain_spec::get_testnet_genesis_by_spec_id(SpecId::DevNet).0, - "dev" => evm_chain_spec::get_testnet_genesis_by_spec_id(SpecId::Dev).0, - "" | "local" => evm_chain_spec::get_testnet_genesis_by_spec_id(SpecId::Local).0, + "gemini-3g" => evm_chain_spec::get_testnet_genesis_by_spec_id(SpecId::Gemini), + "devnet" => evm_chain_spec::get_testnet_genesis_by_spec_id(SpecId::DevNet), + "dev" => evm_chain_spec::get_testnet_genesis_by_spec_id(SpecId::Dev), + "" | "local" => evm_chain_spec::get_testnet_genesis_by_spec_id(SpecId::Local), unknown_id => { eprintln!( "unknown chain {unknown_id:?}, expected gemini-3g, devnet, dev, or local", diff --git a/crates/subspace-node/src/domain/evm_chain_spec.rs b/crates/subspace-node/src/domain/evm_chain_spec.rs index 8c76bbc022..9f7dadab9f 100644 --- a/crates/subspace-node/src/domain/evm_chain_spec.rs +++ b/crates/subspace-node/src/domain/evm_chain_spec.rs @@ -16,7 +16,7 @@ //! EVM domain configurations. -use crate::chain_spec_utils::{chain_spec_properties, get_public_key_from_seed}; +use crate::chain_spec_utils::chain_spec_properties; use evm_domain_runtime::{ AccountId, BalancesConfig, EVMChainIdConfig, EVMConfig, Precompiles, RuntimeGenesisConfig, SudoConfig, SystemConfig, WASM_BINARY, @@ -24,9 +24,7 @@ use evm_domain_runtime::{ use hex_literal::hex; use sc_service::{ChainSpec as ChainSpecT, ChainType}; use sc_subspace_chain_specs::ExecutionChainSpec; -use sp_core::crypto::UncheckedFrom; use sp_domains::storage::RawGenesis; -use sp_domains::OperatorPublicKey; use std::str::FromStr; use subspace_runtime_primitives::SSC; @@ -138,14 +136,11 @@ pub fn devnet_config RuntimeGenesisConfig + 'static + Send + Sync>( } pub fn load_chain_spec(spec_id: &str) -> Result, String> { - let constructor = - |spec_id: SpecId| -> RuntimeGenesisConfig { get_testnet_genesis_by_spec_id(spec_id).0 }; - let chain_spec = match spec_id { - "dev" => development_config(move || constructor(SpecId::Dev)), - "gemini-3g" => gemini_3g_config(move || constructor(SpecId::Gemini)), - "devnet" => devnet_config(move || constructor(SpecId::DevNet)), - "" | "local" => local_testnet_config(move || constructor(SpecId::Local)), + "dev" => development_config(move || get_testnet_genesis_by_spec_id(SpecId::Dev)), + "gemini-3g" => gemini_3g_config(move || get_testnet_genesis_by_spec_id(SpecId::Gemini)), + "devnet" => devnet_config(move || get_testnet_genesis_by_spec_id(SpecId::DevNet)), + "" | "local" => local_testnet_config(move || get_testnet_genesis_by_spec_id(SpecId::Local)), path => ChainSpec::from_json_file(std::path::PathBuf::from(path))?, }; Ok(Box::new(chain_spec)) @@ -158,78 +153,48 @@ pub enum SpecId { Local, } -pub struct GenesisDomainParams { - pub operator_signing_key: OperatorPublicKey, -} - -pub fn get_testnet_genesis_by_spec_id( - spec_id: SpecId, -) -> (RuntimeGenesisConfig, GenesisDomainParams) { +pub fn get_testnet_genesis_by_spec_id(spec_id: SpecId) -> RuntimeGenesisConfig { match spec_id { SpecId::Dev => { let accounts = get_dev_accounts(); - ( - testnet_genesis( - accounts.clone(), - // Alith is Sudo - Some(accounts[0]), - 1000, - ), - GenesisDomainParams { - operator_signing_key: get_public_key_from_seed::("Alice"), - }, + testnet_genesis( + accounts.clone(), + // Alith is Sudo + Some(accounts[0]), + 1000, ) } SpecId::Gemini => { let sudo_account = AccountId::from_str("f31e60022e290708c17d6997c34de6a30d09438f") .expect("Invalid Sudo account"); - ( - testnet_genesis( - vec![ - // Sudo account - sudo_account, - ], - Some(sudo_account), - 1002, - ), - GenesisDomainParams { - operator_signing_key: OperatorPublicKey::unchecked_from(hex!( - "aa3b05b4d649666723e099cf3bafc2f2c04160ebe0e16ddc82f72d6ed97c4b6b" - )), - }, + testnet_genesis( + vec![ + // Sudo account + sudo_account, + ], + Some(sudo_account), + 1002, ) } SpecId::DevNet => { let sudo_account = AccountId::from_str("b66a91845249464309fad766fd0ece8144547736") .expect("Invalid Sudo account"); - ( - testnet_genesis( - vec![ - // Sudo account - sudo_account, - ], - Some(sudo_account), - 1003, - ), - GenesisDomainParams { - operator_signing_key: OperatorPublicKey::unchecked_from(hex!( - "aa3b05b4d649666723e099cf3bafc2f2c04160ebe0e16ddc82f72d6ed97c4b6b" - )), - }, + testnet_genesis( + vec![ + // Sudo account + sudo_account, + ], + Some(sudo_account), + 1003, ) } SpecId::Local => { let accounts = get_dev_accounts(); - ( - testnet_genesis( - accounts.clone(), - // Alith is sudo - Some(accounts[0]), - 1001, - ), - GenesisDomainParams { - operator_signing_key: get_public_key_from_seed::("Alice"), - }, + testnet_genesis( + accounts.clone(), + // Alith is sudo + Some(accounts[0]), + 1001, ) } } From 2dfbdb97a50950ac55ae92565581cb6de5e7dbaf Mon Sep 17 00:00:00 2001 From: linning Date: Tue, 31 Oct 2023 02:11:18 +0800 Subject: [PATCH 2/3] Set MaxNominators to 0 in the consensus runtime This is required by the first phase of gemini-3g, should reset it back to 100 once the gemini-3g chain spec is created Signed-off-by: linning --- crates/subspace-runtime/src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/subspace-runtime/src/lib.rs b/crates/subspace-runtime/src/lib.rs index 13d82ea1e2..e034e06331 100644 --- a/crates/subspace-runtime/src/lib.rs +++ b/crates/subspace-runtime/src/lib.rs @@ -603,7 +603,8 @@ parameter_types! { pub const StakeEpochDuration: DomainNumber = 100; pub TreasuryAccount: AccountId = PalletId(*b"treasury").into_account_truncating(); pub const MaxPendingStakingOperation: u32 = 100; - pub const MaxNominators: u32 = 100; + // TODO: reset `MaxNominators` back to `100` once the gemini-3g chain spec is created + pub const MaxNominators: u32 = 0; } impl pallet_domains::Config for Runtime { From 9649c6adad592f226b49707fb2ae59c828196b00 Mon Sep 17 00:00:00 2001 From: linning Date: Tue, 31 Oct 2023 02:12:48 +0800 Subject: [PATCH 3/3] Reset consensus runtime version as preparing for gemini-3g Signed-off-by: linning --- crates/subspace-runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/subspace-runtime/src/lib.rs b/crates/subspace-runtime/src/lib.rs index e034e06331..abd1a14d42 100644 --- a/crates/subspace-runtime/src/lib.rs +++ b/crates/subspace-runtime/src/lib.rs @@ -103,7 +103,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("subspace"), impl_name: create_runtime_str!("subspace"), authoring_version: 0, - spec_version: 2, + spec_version: 0, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 0,