Compare commits

..

3 Commits

Author SHA1 Message Date
1e1d2bdc81
update Cargo.lock after dependency version bumps
Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
2026-09-11 01:05:11 +03:00
2180d1c85b
extend on_initialize time ratio for safer block production
Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
2026-09-11 01:04:11 +03:00
3d2d905629
move complaints matrix to flat Vec, eliminate dynamic allocations
Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
2026-09-11 01:00:26 +03:00
5 changed files with 29 additions and 24 deletions

4
Cargo.lock generated
View File

@ -3684,7 +3684,7 @@ dependencies = [
[[package]] [[package]]
name = "ghost-exodus" name = "ghost-exodus"
version = "0.0.10" version = "0.0.11"
dependencies = [ dependencies = [
"chacha20poly1305", "chacha20poly1305",
"frame-benchmarking", "frame-benchmarking",
@ -8553,7 +8553,7 @@ dependencies = [
[[package]] [[package]]
name = "runtime-common" name = "runtime-common"
version = "0.4.8" version = "0.4.9"
dependencies = [ dependencies = [
"frame-support", "frame-support",
"frame-system", "frame-system",

View File

@ -1,6 +1,6 @@
[package] [package]
name = "ghost-exodus" name = "ghost-exodus"
version = "0.0.10" version = "0.0.11"
description = "Threshold signature generation with DKG included" description = "Threshold signature generation with DKG included"
license.workspace = true license.workspace = true
authors.workspace = true authors.workspace = true

View File

@ -2417,6 +2417,7 @@ impl<T: Config> Pallet<T> {
let mut number_of_leaked_keys = 0; let mut number_of_leaked_keys = 0;
let qualified_indexes = dkg_qualification.get_indexes(); let qualified_indexes = dkg_qualification.get_indexes();
let total_authorities_len = qualified_indexes.count_ones::<usize>();
let mut failed_authorities = ParticipantsBitmap::<T>::empty_from( let mut failed_authorities = ParticipantsBitmap::<T>::empty_from(
&qualified_indexes, &qualified_indexes,
@ -2426,17 +2427,17 @@ impl<T: Config> Pallet<T> {
&qualified_indexes, &qualified_indexes,
); );
let mut complaints_matrix: BTreeMap<AuthIndex, ParticipantsBitmap<T>> = let mut complaints_matrix = vec![
BTreeMap::new(); ParticipantsBitmap::<T>::empty_from(&qualified_indexes);
total_authorities_len
];
complaints_bitmap.iter().for_each(|(&accuser_index, offenders_bitmap)| { complaints_bitmap.iter().for_each(|(&accuser_index, offenders_bitmap)| {
offenders_bitmap.iter().for_each(|offended_index| { offenders_bitmap.iter().for_each(|offended_index: AuthIndex| {
complaints_matrix let idx = offended_index as usize;
.entry(offended_index) if idx >= complaints_matrix.len() { return; }
.or_insert_with(|| {
ParticipantsBitmap::<T>::empty_from(&qualified_indexes) complaints_matrix[idx].insert(accuser_index);
})
.insert(accuser_index);
}); });
}); });
@ -2447,13 +2448,17 @@ impl<T: Config> Pallet<T> {
number_of_leaked_keys.saturating_inc(); number_of_leaked_keys.saturating_inc();
} }
if let Some(accusers_bitmap) = complaints_matrix.get(&offended_index) { let idx = offended_index as usize;
let successful_justifications = accusers_bitmap & recipients_bitmap; if idx >= complaints_matrix.len() { return; }
let failed_to_justify = successful_justifications != *accusers_bitmap;
if failed_to_justify { let accusers_bitmap = &complaints_matrix[idx];
failed_authorities.insert(offended_index); if accusers_bitmap.is_empty() { return; }
}
let successful_justifications = accusers_bitmap & recipients_bitmap;
let failed_to_justify = successful_justifications != *accusers_bitmap;
if failed_to_justify {
failed_authorities.insert(offended_index);
} }
}); });

View File

@ -1,6 +1,6 @@
[package] [package]
name = "runtime-common" name = "runtime-common"
version = "0.4.8" version = "0.4.9"
authors.workspace = true authors.workspace = true
edition.workspace = true edition.workspace = true
homepage.workspace = true homepage.workspace = true

View File

@ -30,14 +30,14 @@ pub use sp_runtime::BuildStorage;
pub use impls::ToAuthor; pub use impls::ToAuthor;
/// We assume that an on-initialize consumes 10% of the weight on average, hence /// We assume that an on-initialize consumes 15% of the weight on average, hence
/// a single extrinsic will not be allowed to consume more than /// a single extrinsic will not be allowed to consume more than
/// `AvailableBlockRatio - 10%`. /// `AvailableBlockRatio - 15%`.
pub const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); pub const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(15);
/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can /// We allow `Normal` extrinsics to fill up the block up to 70%, the rest can
/// be used by `Operational` extrinsics. /// be used by `Operational` extrinsics.
pub const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); pub const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(70);
/// We allow for 4 seconds of compute with a 12 seconds average block time. /// We allow for 4 seconds of compute with a 12 seconds average block time.
/// The storage proof size is not limited so far. /// The storage proof size is not limited so far.