Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions cumulus/parachains/runtimes/testing/penpal/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ primitive-types = { workspace = true, default-features = false, features = [
"scale-info",
] }

[dev-dependencies]
sp-io = { workspace = true, default-features = true }

[build-dependencies]
substrate-wasm-builder = { optional = true, workspace = true, default-features = true }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ fn penpal_parachain_genesis(
assets: vec![
(RelayLocation::get(), sudo.clone(), true, EXISTENTIAL_DEPOSIT),
(LocalPen2Asset::get(), sudo.clone(), false, EXISTENTIAL_DEPOSIT),
(UsdtFromAssetHub::get(), sudo.clone(), true, EXISTENTIAL_DEPOSIT),
(EthFromEthereum::get(), sudo.clone(), true, EXISTENTIAL_DEPOSIT),
(UsdtFromAssetHub::get(), sudo.clone(), true, USDT_ED),
(EthFromEthereum::get(), sudo.clone(), true, ETHER_MIN_BALANCE),
],
metadata: vec![
(
Expand Down Expand Up @@ -165,3 +165,44 @@ pub fn preset_names() -> Vec<PresetId> {
pub fn penpal_session_keys(keys: AuraId) -> crate::SessionKeys {
crate::SessionKeys { aura: keys }
}

#[cfg(test)]
mod tests {
use super::*;

// Duplicated from `sc_chain_spec::json_patch::merge` which lives in a node-side crate
// with heavy transitive deps (sc-executor, sc-network, etc.), making it unsuitable as a
// dev-dependency for a runtime crate.
fn merge(base: &mut serde_json::Value, patch: serde_json::Value) {
match (base, patch) {
(serde_json::Value::Object(base), serde_json::Value::Object(patch)) => {
for (k, v) in patch {
merge(base.entry(k).or_insert(serde_json::Value::Null), v);
}
},
(base, patch) => *base = patch,
}
}

fn assert_genesis_preset_valid(preset_id: &sp_genesis_builder::PresetId) {
let patch: serde_json::Value =
serde_json::from_slice(&get_preset(preset_id).expect("preset exists")).unwrap();
let mut config = serde_json::to_value(RuntimeGenesisConfig::default()).unwrap();
merge(&mut config, patch);
let json = serde_json::to_vec(&config).unwrap();
sp_io::TestExternalities::default().execute_with(|| {
frame_support::genesis_builder_helper::build_state::<RuntimeGenesisConfig>(json)
.expect("genesis preset should build valid state");
});
}

#[test]
fn dev_genesis_preset_is_valid() {
assert_genesis_preset_valid(&sp_genesis_builder::DEV_RUNTIME_PRESET.into());
}

#[test]
fn local_testnet_genesis_preset_is_valid() {
assert_genesis_preset_valid(&sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET.into());
}
}
10 changes: 10 additions & 0 deletions prdoc/pr_11575.prdoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
title: '[Penpal] fix genesis presets - assign proper ED to accounts'''
doc:
- audience: Runtime Dev
description: |-
Penpal had values below the ED for initializing asset balances for some accounts. This has not been detected as no unit tests actually use the presets. This PR fixes the invalid values, and it also adds some unit tests for validating that the presets build at least.

Closes #11558.
crates:
- name: penpal-runtime
bump: patch
Loading