Skip to content
Snippets Groups Projects
Commit 378c46f9 authored by Éloïs's avatar Éloïs
Browse files

feat(genesis): check min received certs

parent 8bc5e17f
No related branches found
No related tags found
No related merge requests found
......@@ -17,7 +17,8 @@
use common_runtime::*;
use serde::{de::DeserializeOwned, Deserialize, Serialize};
use sp_core::{blake2_256, Decode, Encode, H256};
use std::collections::{BTreeMap, BTreeSet};
use std::collections::{BTreeMap, BTreeSet, HashMap};
use std::ops::AddAssign;
type MembershipData = sp_membership::MembershipData<u32>;
......@@ -216,8 +217,8 @@ where
}
// CERTIFICATIONS //
let mut certs_by_issuer = BTreeMap::new();
let mut counter_by_receiver = HashMap::<_, u32>::new();
for (idty_name, identity) in &identities {
let issuer_index = idty_index_of
.get(&idty_name)
......@@ -228,12 +229,26 @@ where
.get(receiver)
.ok_or(format!("Identity '{}' not exist", receiver))?;
issuer_certs.insert(*receiver_index, genesis_certs_expire_on);
counter_by_receiver
.entry(receiver)
.or_default()
.add_assign(1);
}
certs_by_issuer.insert(*issuer_index, issuer_certs);
}
// TODO: move this check in the runtime genesis build
for (receiver, counter) in counter_by_receiver {
if counter < 5 {
return Err(format!(
"Identity '{}' not have enough certs ({}/5)",
receiver, counter
));
}
}
// SMITHS SUB-WOT //
let mut counter_by_receiver = HashMap::<String, u32>::new();
let mut initial_authorities = BTreeMap::new();
let mut online_authorities_counter = 0;
let mut session_keys_map = BTreeMap::new();
......@@ -298,6 +313,10 @@ where
.get(receiver)
.ok_or(format!("Identity '{}' not exist", receiver))?;
issuer_certs.insert(*receiver_index, genesis_smith_certs_expire_on);
counter_by_receiver
.entry(receiver.clone())
.or_default()
.add_assign(1);
}
smiths_certs_by_issuer.insert(*idty_index, issuer_certs);
......@@ -310,6 +329,15 @@ where
},
);
}
// TODO: move this check in the runtime genesis build
for (receiver, counter) in counter_by_receiver {
if counter < 3 {
return Err(format!(
"Identity '{}' not have enough certs ({}/3)",
receiver, counter
));
}
}
if maybe_force_authority.is_none() && online_authorities_counter == 0 {
return Err("The session_keys field must be filled in for at least one smith.".to_owned());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment