From 4098fc236085ccdb9e6aa2ae66f85dcfd93994f6 Mon Sep 17 00:00:00 2001 From: librelois <c@elo.tf> Date: Sun, 17 Apr 2022 23:13:38 +0200 Subject: [PATCH] feat(genesis_conf): make session_keys optional and infer authority role --- node/src/chain_spec/gen_genesis_data.rs | 23 +++++++++++++++++------ resources/gdev.json | 7 ++----- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/node/src/chain_spec/gen_genesis_data.rs b/node/src/chain_spec/gen_genesis_data.rs index f9c03b1ee..c2303724f 100644 --- a/node/src/chain_spec/gen_genesis_data.rs +++ b/node/src/chain_spec/gen_genesis_data.rs @@ -76,9 +76,7 @@ struct Idty { #[derive(Clone, Deserialize, Serialize)] struct SmithData { - #[serde(default)] - authority: bool, - session_keys: String, + session_keys: Option<String>, #[serde(default)] certs: Vec<String>, } @@ -252,11 +250,24 @@ where } // Initial authorities - initial_authorities.insert(*idty_index, (identity.pubkey.clone(), smith_data.authority)); + initial_authorities.insert( + *idty_index, + (identity.pubkey.clone(), smith_data.session_keys.is_some()), + ); // Session keys - let session_keys_bytes = hex::decode(&smith_data.session_keys[2..]) - .map_err(|_| format!("invalid session keys for idty {}", &idty_name))?; + let session_keys_bytes = if let Some(ref session_keys) = smith_data.session_keys { + hex::decode(&session_keys[2..]) + .map_err(|_| format!("invalid session keys for idty {}", &idty_name))? + } else { + // Create fake session keys (must be unique and deterministic) + let mut fake_session_keys_bytes = Vec::with_capacity(128); + for _ in 0..4 { + fake_session_keys_bytes.extend_from_slice(identity.pubkey.as_ref()) + } + fake_session_keys_bytes + //vec![initial_authorities.len() as u8; std::mem::size_of::<SK>()] + }; session_keys_map.insert( identity.pubkey.clone(), SK::decode(&mut &session_keys_bytes[..]) diff --git a/resources/gdev.json b/resources/gdev.json index 65e51d52a..c6a09c034 100644 --- a/resources/gdev.json +++ b/resources/gdev.json @@ -50,17 +50,14 @@ }, "smiths": { "Elois1": { - "authority": true, "certs": ["Elois2", "Elois3"], "session_keys": "0x90ea1e9059fd30860fc14370b62a3675a720763913e0aa41fa01b268c33afd3b64c9301d94f7a043ac6714c8a6301541e56e833c1b13170c19f9785fa469407864c9301d94f7a043ac6714c8a6301541e56e833c1b13170c19f9785fa469407864c9301d94f7a043ac6714c8a6301541e56e833c1b13170c19f9785fa4694078" }, "Elois2": { - "certs": ["Elois1", "Elois3"], - "session_keys": "0x1a1c5027d35e315efde9b9296a0ff80920a9d448a7d0480080d9773e4035ec85a270415a3a2f5392df3185bc9f3d2d7a3cb158f55ebdf6ccc42da8ab26d96f7ca270415a3a2f5392df3185bc9f3d2d7a3cb158f55ebdf6ccc42da8ab26d96f7ca270415a3a2f5392df3185bc9f3d2d7a3cb158f55ebdf6ccc42da8ab26d96f7c" + "certs": ["Elois1", "Elois3"] }, "Elois3": { - "certs": ["Elois1", "Elois2"], - "session_keys": "0xcde37cd0d59573465dacd587f0759c93a82e9f0a40ee8f547772446abe846b86f0badfddff9238d6f18ab5ef8fa5fdd3d5edd29a9f6b097416ffc87e2f774022f0badfddff9238d6f18ab5ef8fa5fdd3d5edd29a9f6b097416ffc87e2f774022f0badfddff9238d6f18ab5ef8fa5fdd3d5edd29a9f6b097416ffc87e2f774022" + "certs": ["Elois1", "Elois2"] } }, "sudo_key": "5H95G8bwuf4yyNNNa83hDhj7wpYaSRhZiGezZ9TDbyqNdAhY" -- GitLab