Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Merge remote-tracking branch 'origin/main' into update-substrate-foll…
…ow-up

# Conflicts:
#	crates/subspace-node/src/chain_spec.rs
  • Loading branch information
nazar-pc committed Apr 15, 2024
commit e2400b5fa799a17af68d9c741ee2f1de87f3bb5a
42 changes: 24 additions & 18 deletions crates/subspace-malicious-operator/src/chain_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -283,31 +283,37 @@ fn subspace_genesis_config(

// TODO: Workaround for https://github.com/paritytech/polkadot-sdk/issues/4001
fn patch_domain_runtime_version(mut genesis_config: serde_json::Value) -> serde_json::Value {
let Some(runtime_version) = genesis_config
let Some(genesis_domains) = genesis_config
.get_mut("domains")
.and_then(|domains| domains.get_mut("genesisDomain"))
.and_then(|genesis_domain| genesis_domain.get_mut("runtime_version"))
.and_then(|domains| domains.get_mut("genesisDomains"))
.and_then(|genesis_domains| genesis_domains.as_array_mut())
else {
return genesis_config;
};

if let Some(spec_name) = runtime_version.get_mut("specName") {
if let Some(spec_name_bytes) = spec_name
.as_str()
.map(|spec_name| spec_name.as_bytes().to_vec())
{
*spec_name = serde_json::to_value(spec_name_bytes)
.expect("Bytes serialization doesn't fail; qed");
for genesis_domain in genesis_domains {
let Some(runtime_version) = genesis_domain.get_mut("runtime_version") else {
continue;
};

if let Some(spec_name) = runtime_version.get_mut("specName") {
if let Some(spec_name_bytes) = spec_name
.as_str()
.map(|spec_name| spec_name.as_bytes().to_vec())
{
*spec_name = serde_json::to_value(spec_name_bytes)
.expect("Bytes serialization doesn't fail; qed");
}
}
}

if let Some(impl_name) = runtime_version.get_mut("implName") {
if let Some(impl_name_bytes) = impl_name
.as_str()
.map(|impl_name| impl_name.as_bytes().to_vec())
{
*impl_name = serde_json::to_value(impl_name_bytes)
.expect("Bytes serialization doesn't fail; qed");
if let Some(impl_name) = runtime_version.get_mut("implName") {
if let Some(impl_name_bytes) = impl_name
.as_str()
.map(|impl_name| impl_name.as_bytes().to_vec())
{
*impl_name = serde_json::to_value(impl_name_bytes)
.expect("Bytes serialization doesn't fail; qed");
}
}
}

Expand Down
95 changes: 55 additions & 40 deletions crates/subspace-node/src/chain_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,6 @@ pub fn gemini_3h_compiled() -> Result<GenericChainSpec<RuntimeGenesisConfig>, St
.collect::<Vec<_>>();
patch_domain_runtime_version(
serde_json::to_value(subspace_genesis_config(
SpecId::Gemini,
sudo_account.clone(),
balances,
vesting_schedules,
Expand Down Expand Up @@ -205,7 +204,7 @@ pub fn gemini_3h_compiled() -> Result<GenericChainSpec<RuntimeGenesisConfig>, St
genesis_domains: vec![evm_chain_spec::get_genesis_domain(
SpecId::Gemini,
sudo_account,
)],
)?],
},
)?)
.map_err(|error| format!("Failed to serialize genesis config: {error}"))?,
Expand Down Expand Up @@ -287,7 +286,6 @@ pub fn devnet_config_compiled() -> Result<GenericChainSpec<RuntimeGenesisConfig>
.collect::<Vec<_>>();
patch_domain_runtime_version(
serde_json::to_value(subspace_genesis_config(
SpecId::DevNet,
sudo_account.clone(),
balances,
vesting_schedules,
Expand Down Expand Up @@ -326,6 +324,7 @@ pub fn devnet_config_compiled() -> Result<GenericChainSpec<RuntimeGenesisConfig>

pub fn dev_config() -> Result<GenericChainSpec<RuntimeGenesisConfig>, String> {
let wasm_binary = WASM_BINARY.ok_or_else(|| "Development wasm not available".to_string())?;
let sudo_account = get_account_id_from_seed("Alice");

Ok(GenericChainSpec::builder(wasm_binary, None)
.with_name("Subspace development")
Expand All @@ -341,7 +340,6 @@ pub fn dev_config() -> Result<GenericChainSpec<RuntimeGenesisConfig>, String> {
})
.with_genesis_config(patch_domain_runtime_version(
serde_json::to_value(subspace_genesis_config(
SpecId::Dev,
// Sudo account
sudo_account.clone(),
// Pre-funded accounts
Expand Down Expand Up @@ -373,7 +371,7 @@ pub fn dev_config() -> Result<GenericChainSpec<RuntimeGenesisConfig>, String> {
]),
genesis_domains: vec![
auto_id_chain_spec::get_genesis_domain(SpecId::Dev, sudo_account.clone()),
evm_chain_spec::get_genesis_domain(SpecId::Dev, sudo_account),
evm_chain_spec::get_genesis_domain(SpecId::Dev, sudo_account)?,
],
},
)?)
Expand Down Expand Up @@ -403,23 +401,34 @@ fn subspace_genesis_config(
rewards_config,
} = genesis_params;

let raw_genesis_storage = {
let domain_chain_spec = match spec_id {
SpecId::Dev => evm_chain_spec::development_config(
evm_chain_spec::get_testnet_genesis_by_spec_id(spec_id),
)?,
SpecId::Gemini => evm_chain_spec::gemini_3h_config(
evm_chain_spec::get_testnet_genesis_by_spec_id(spec_id),
)?,
SpecId::DevNet => evm_chain_spec::devnet_config(
evm_chain_spec::get_testnet_genesis_by_spec_id(spec_id),
)?,
};
let storage = domain_chain_spec
.build_storage()
.expect("Failed to build genesis storage from genesis runtime config");
let raw_genesis = RawGenesis::from_storage(storage);
raw_genesis.encode()
let genesis_domains = if enable_domains {
genesis_domain_params
.genesis_domains
.into_iter()
.map(|genesis_domain| {
sp_domains::GenesisDomain {
runtime_name: genesis_domain.runtime_name,
runtime_type: genesis_domain.runtime_type,
runtime_version: genesis_domain.runtime_version,
raw_genesis_storage: genesis_domain.raw_genesis,

// Domain config, mainly for placeholder the concrete value TBD
owner_account_id: sudo_account.clone(),
domain_name: genesis_domain.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: genesis_domain.operator_allow_list.clone(),
signing_key: genesis_domain.operator_signing_key.clone(),
nomination_tax: Percent::from_percent(5),
minimum_nominator_stake: 100 * SSC,
initial_balances: genesis_domain.initial_balances,
}
})
.collect()
} else {
vec![]
};

Ok(RuntimeGenesisConfig {
Expand Down Expand Up @@ -455,31 +464,37 @@ fn subspace_genesis_config(

// TODO: Workaround for https://github.com/paritytech/polkadot-sdk/issues/4001
fn patch_domain_runtime_version(mut genesis_config: serde_json::Value) -> serde_json::Value {
let Some(runtime_version) = genesis_config
let Some(genesis_domains) = genesis_config
.get_mut("domains")
.and_then(|domains| domains.get_mut("genesisDomain"))
.and_then(|genesis_domain| genesis_domain.get_mut("runtime_version"))
.and_then(|domains| domains.get_mut("genesisDomains"))
.and_then(|genesis_domains| genesis_domains.as_array_mut())
else {
return genesis_config;
};

if let Some(spec_name) = runtime_version.get_mut("specName") {
if let Some(spec_name_bytes) = spec_name
.as_str()
.map(|spec_name| spec_name.as_bytes().to_vec())
{
*spec_name = serde_json::to_value(spec_name_bytes)
.expect("Bytes serialization doesn't fail; qed");
for genesis_domain in genesis_domains {
let Some(runtime_version) = genesis_domain.get_mut("runtime_version") else {
continue;
};

if let Some(spec_name) = runtime_version.get_mut("specName") {
if let Some(spec_name_bytes) = spec_name
.as_str()
.map(|spec_name| spec_name.as_bytes().to_vec())
{
*spec_name = serde_json::to_value(spec_name_bytes)
.expect("Bytes serialization doesn't fail; qed");
}
}
}

if let Some(impl_name) = runtime_version.get_mut("implName") {
if let Some(impl_name_bytes) = impl_name
.as_str()
.map(|impl_name| impl_name.as_bytes().to_vec())
{
*impl_name = serde_json::to_value(impl_name_bytes)
.expect("Bytes serialization doesn't fail; qed");
if let Some(impl_name) = runtime_version.get_mut("implName") {
if let Some(impl_name_bytes) = impl_name
.as_str()
.map(|impl_name| impl_name.as_bytes().to_vec())
{
*impl_name = serde_json::to_value(impl_name_bytes)
.expect("Bytes serialization doesn't fail; qed");
}
}
}

Expand Down
12 changes: 6 additions & 6 deletions crates/subspace-node/src/domain/evm_chain_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -207,11 +207,11 @@ fn get_operator_params(
pub fn get_genesis_domain(
spec_id: SpecId,
sudo_account: subspace_runtime_primitives::AccountId,
) -> GenesisDomain {
) -> Result<GenesisDomain, String> {
let chain_spec = match spec_id {
SpecId::Dev => development_config(move || get_testnet_genesis_by_spec_id(spec_id)),
SpecId::Gemini => gemini_3h_config(move || get_testnet_genesis_by_spec_id(spec_id)),
SpecId::DevNet => devnet_config(move || get_testnet_genesis_by_spec_id(spec_id)),
SpecId::Dev => development_config(get_testnet_genesis_by_spec_id(spec_id))?,
SpecId::Gemini => gemini_3h_config(get_testnet_genesis_by_spec_id(spec_id))?,
SpecId::DevNet => devnet_config(get_testnet_genesis_by_spec_id(spec_id))?,
};

let GenesisOperatorParams {
Expand All @@ -223,7 +223,7 @@ pub fn get_genesis_domain(
.build_storage()
.expect("Failed to build genesis storage from genesis runtime config");
let raw_genesis = RawGenesis::from_storage(storage);
GenesisDomain {
Ok(GenesisDomain {
raw_genesis: raw_genesis.encode(),
runtime_name: "evm".to_string(),
runtime_type: RuntimeType::Evm,
Expand All @@ -232,5 +232,5 @@ pub fn get_genesis_domain(
initial_balances: get_testnet_endowed_accounts_by_spec_id(spec_id),
operator_allow_list,
operator_signing_key,
}
})
}
42 changes: 24 additions & 18 deletions test/subspace-test-client/src/chain_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,31 +158,37 @@ fn create_genesis_config(

// TODO: Workaround for https://github.com/paritytech/polkadot-sdk/issues/4001
fn patch_domain_runtime_version(mut genesis_config: serde_json::Value) -> serde_json::Value {
let Some(runtime_version) = genesis_config
let Some(genesis_domains) = genesis_config
.get_mut("domains")
.and_then(|domains| domains.get_mut("genesisDomain"))
.and_then(|genesis_domain| genesis_domain.get_mut("runtime_version"))
.and_then(|domains| domains.get_mut("genesisDomains"))
.and_then(|genesis_domains| genesis_domains.as_array_mut())
else {
return genesis_config;
};

if let Some(spec_name) = runtime_version.get_mut("specName") {
if let Some(spec_name_bytes) = spec_name
.as_str()
.map(|spec_name| spec_name.as_bytes().to_vec())
{
*spec_name = serde_json::to_value(spec_name_bytes)
.expect("Bytes serialization doesn't fail; qed");
for genesis_domain in genesis_domains {
let Some(runtime_version) = genesis_domain.get_mut("runtime_version") else {
continue;
};

if let Some(spec_name) = runtime_version.get_mut("specName") {
if let Some(spec_name_bytes) = spec_name
.as_str()
.map(|spec_name| spec_name.as_bytes().to_vec())
{
*spec_name = serde_json::to_value(spec_name_bytes)
.expect("Bytes serialization doesn't fail; qed");
}
}
}

if let Some(impl_name) = runtime_version.get_mut("implName") {
if let Some(impl_name_bytes) = impl_name
.as_str()
.map(|impl_name| impl_name.as_bytes().to_vec())
{
*impl_name = serde_json::to_value(impl_name_bytes)
.expect("Bytes serialization doesn't fail; qed");
if let Some(impl_name) = runtime_version.get_mut("implName") {
if let Some(impl_name_bytes) = impl_name
.as_str()
.map(|impl_name| impl_name.as_bytes().to_vec())
{
*impl_name = serde_json::to_value(impl_name_bytes)
.expect("Bytes serialization doesn't fail; qed");
}
}
}

Expand Down
You are viewing a condensed version of this merge commit. You can view the full changes here.