Skip to content

Commit

Permalink
feat: add add_hrmp_channels fn to customize relaychain (#136)
Browse files Browse the repository at this point in the history
  • Loading branch information
pepoviola authored Nov 14, 2023
1 parent ced0d71 commit 3e6823d
Show file tree
Hide file tree
Showing 2 changed files with 294 additions and 10 deletions.
93 changes: 83 additions & 10 deletions crates/orchestrator/src/generators/chain_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,7 @@ impl ChainSpec {
pub async fn customize_relay<'a, T, U>(
&self,
relaychain: &RelaychainSpec,
_hrmp_channels: &[HrmpChannelConfig],
hrmp_channels: &[HrmpChannelConfig],
para_artifacts: Vec<ParaGenesisConfig<U>>,
scoped_fs: &ScopedFilesystem<'a, T>,
) -> Result<(), GeneratorError>
Expand Down Expand Up @@ -432,7 +432,9 @@ impl ChainSpec {

// staking && nominators

// add_hrmp_channels
if !hrmp_channels.is_empty() {
add_hrmp_channels(&pointer, &mut chain_spec_json, hrmp_channels);
}

// paras
for para_genesis_config in para_artifacts.iter() {
Expand Down Expand Up @@ -556,10 +558,6 @@ where
let wasm = scoped_fs
.read_to_string(para_genesis_config.wasm_path.as_ref())
.await?;
// const new_para = [
// parseInt(para_id),
// [readDataFile(head), readDataFile(wasm), parachain],
// ];

paras_vec.push(json!([
para_genesis_config.id,
Expand Down Expand Up @@ -733,10 +731,14 @@ fn add_authorities(
fn add_hrmp_channels(
runtime_config_ptr: &str,
chain_spec_json: &mut serde_json::Value,
_hrmp_channels: &[HrmpChannelConfig],
hrmp_channels: &[HrmpChannelConfig],
) {
if let Some(_val) = chain_spec_json.pointer_mut(runtime_config_ptr) {
todo!()
if let Some(val) = chain_spec_json.pointer_mut(runtime_config_ptr) {
if let Some(preopen_hrmp_channels) = val.pointer_mut("/hrmp/preopenHrmpChannels") {
*preopen_hrmp_channels = json!(hrmp_channels);
} else {
warn!("⚠️ 'hrmp/preopenHrmpChannels' key not present in runtime config.");
}
} else {
unreachable!("pointer to runtime config should be valid!")
}
Expand Down Expand Up @@ -819,4 +821,75 @@ fn add_collator_selection(
}

#[cfg(test)]
mod tests {}
mod tests {
use std::fs;

use configuration::HrmpChannelConfigBuilder;

use super::*;

fn chain_spec_test(file: &str) -> serde_json::Value {
let content = fs::read_to_string(file).unwrap();
serde_json::from_str(&content).unwrap()
}

#[test]
fn adding_hrmp_channels_works() {
let mut spec_plain = chain_spec_test("./testing/rococo-local-plain.json");

{
let current_hrmp_channels = spec_plain
.pointer("/genesis/runtime/hrmp/preopenHrmpChannels")
.unwrap();
// assert should be empty
assert_eq!(current_hrmp_channels, &json!([]));
}

let para_100_101 = HrmpChannelConfigBuilder::new()
.with_sender(100)
.with_recipient(101)
.build();
let para_101_100 = HrmpChannelConfigBuilder::new()
.with_sender(101)
.with_recipient(100)
.build();
let channels = vec![para_100_101, para_101_100];

add_hrmp_channels("/genesis/runtime", &mut spec_plain, &channels);
let new_hrmp_channels = spec_plain
.pointer("/genesis/runtime/hrmp/preopenHrmpChannels")
.unwrap()
.as_array()
.unwrap();

assert_eq!(new_hrmp_channels.len(), 2);
assert_eq!(new_hrmp_channels.first().unwrap()["sender"], 100);
assert_eq!(new_hrmp_channels.first().unwrap()["recipient"], 101);
}

#[test]
fn adding_hrmp_channels_to_an_spec_without_channels() {
let mut spec_plain = chain_spec_test("./testing/rococo-local-plain.json");

{
let hrmp = spec_plain.pointer_mut("/genesis/runtime/hrmp").unwrap();
*hrmp = json!(serde_json::Value::Null);
}

let para_100_101 = HrmpChannelConfigBuilder::new()
.with_sender(100)
.with_recipient(101)
.build();
let para_101_100 = HrmpChannelConfigBuilder::new()
.with_sender(101)
.with_recipient(100)
.build();
let channels = vec![para_100_101, para_101_100];

add_hrmp_channels("/genesis/runtime", &mut spec_plain, &channels);
let new_hrmp_channels = spec_plain.pointer("/genesis/runtime/hrmp/preopenHrmpChannels");

// assert 'preopenHrmpChannels' is not created
assert_eq!(new_hrmp_channels, None);
}
}
211 changes: 211 additions & 0 deletions crates/orchestrator/testing/rococo-local-plain.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
{
"name": "Rococo Local Testnet",
"id": "rococo_local_testnet",
"chainType": "Local",
"bootNodes": [
"/ip4/127.0.0.1/tcp/30333/p2p/12D3KooWJcDp2Cdok4uSHz5zpjWzfduNCzis9GsMfpej1jwdaYij"
],
"telemetryEndpoints": null,
"protocolId": "dot",
"properties": null,
"forkBlocks": null,
"badBlocks": null,
"lightSyncState": null,
"codeSubstitutes": {},
"genesis": {
"runtime": {
"system": {
"code": "0x52"
},
"babe": {
"authorities": [],
"epochConfig": {
"c": [
1,
4
],
"allowed_slots": "PrimaryAndSecondaryVRFSlots"
}
},
"indices": {
"indices": []
},
"balances": {
"balances": [
[
"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
1000000000000000000
],
[
"5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty",
1000000000000000000
],
[
"5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y",
1000000000000000000
],
[
"5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy",
1000000000000000000
],
[
"5HGjWAeFDfFCWPsjFQdVV2Msvz2XtMktvgocEZcCj68kUMaw",
1000000000000000000
],
[
"5CiPPseXPECbkjWCa6MnjNokrgYjMqmKndv2rSnekmSK2DjL",
1000000000000000000
],
[
"5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY",
1000000000000000000
],
[
"5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc",
1000000000000000000
],
[
"5Ck5SLSHYac6WFt5UZRSsdJjwmpSZq85fd5TRNAdZQVzEAPT",
1000000000000000000
],
[
"5HKPmK9GYtE1PSLsS1qiYU9xQ9Si1NcEhdeCq9sw5bqu4ns8",
1000000000000000000
],
[
"5FCfAonRZgTFrTd9HREEyeJjDpT397KMzizE6T3DvebLFE7n",
1000000000000000000
],
[
"5CRmqmsiNFExV6VbdmPJViVxrWmkaXXvBrSX8oqBT8R9vmWk",
1000000000000000000
]
]
},
"beefy": {
"authorities": [],
"genesisBlock": 1
},
"session": {
"keys": [
[
"5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY",
"5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY",
{
"grandpa": "5FA9nQDVg267DEd8m1ZypXLBnvN7SFxYwV7ndqSYGiN9TTpu",
"babe": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
"im_online": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
"para_validator": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
"para_assignment": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
"authority_discovery": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
"beefy": "KW39r9CJjAVzmkf9zQ4YDb2hqfAVGdRqn53eRqyruqpxAP5YL"
}
],
[
"5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc",
"5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc",
{
"grandpa": "5GoNkf6WdbxCFnPdAnYYQyCjAKPJgLNxXwPjwTh6DGg6gN3E",
"babe": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty",
"im_online": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty",
"para_validator": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty",
"para_assignment": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty",
"authority_discovery": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty",
"beefy": "KWByAN7WfZABWS5AoWqxriRmF5f2jnDqy3rB5pfHLGkY93ibN"
}
]
]
},
"grandpa": {
"authorities": []
},
"imOnline": {
"keys": []
},
"authorityDiscovery": {
"keys": []
},
"treasury": {},
"claims": {
"claims": [],
"vesting": []
},
"vesting": {
"vesting": []
},
"nisCounterpartBalances": {
"balances": []
},
"configuration": {
"config": {
"max_code_size": 3145728,
"max_head_data_size": 32768,
"max_upward_queue_count": 8,
"max_upward_queue_size": 1048576,
"max_upward_message_size": 51200,
"max_upward_message_num_per_candidate": 5,
"hrmp_max_message_num_per_candidate": 5,
"validation_upgrade_cooldown": 2,
"validation_upgrade_delay": 2,
"async_backing_params": {
"max_candidate_depth": 0,
"allowed_ancestry_len": 0
},
"max_pov_size": 5242880,
"max_downward_message_size": 1048576,
"hrmp_max_parachain_outbound_channels": 4,
"hrmp_sender_deposit": 0,
"hrmp_recipient_deposit": 0,
"hrmp_channel_max_capacity": 8,
"hrmp_channel_max_total_size": 8192,
"hrmp_max_parachain_inbound_channels": 4,
"hrmp_channel_max_message_size": 1048576,
"executor_params": [],
"code_retention_period": 1200,
"on_demand_cores": 0,
"on_demand_retries": 0,
"on_demand_queue_max_size": 10000,
"on_demand_target_queue_utilization": 250000000,
"on_demand_fee_variability": 30000000,
"on_demand_base_fee": 10000000,
"on_demand_ttl": 5,
"group_rotation_frequency": 20,
"paras_availability_period": 4,
"scheduling_lookahead": 1,
"max_validators_per_core": 1,
"max_validators": null,
"dispute_period": 6,
"dispute_post_conclusion_acceptance_period": 100,
"no_show_slots": 2,
"n_delay_tranches": 25,
"zeroth_delay_tranche_width": 0,
"needed_approvals": 2,
"relay_vrf_modulo_samples": 2,
"pvf_voting_ttl": 2,
"minimum_validation_upgrade_delay": 5,
"minimum_backing_votes": 2
}
},
"paras": {
"paras": []
},
"hrmp": {
"preopenHrmpChannels": []
},
"registrar": {
"nextFreeParaId": 2000
},
"xcmPallet": {
"safeXcmVersion": 3
},
"assignedSlots": {
"maxTemporarySlots": 0,
"maxPermanentSlots": 0,
"config": null
},
"sudo": {
"key": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"
}
}
}
}

0 comments on commit 3e6823d

Please sign in to comment.