Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
This commit is contained in:
Uncle Stinky 2026-10-09 17:55:22 +03:00
parent c884ec7b77
commit 7ad0159517
Signed by: st1nky
GPG Key ID: 016064BD97603B40
3 changed files with 17 additions and 15 deletions

View File

@ -1,6 +1,6 @@
[package] [package]
name = "ghost-exodus" name = "ghost-exodus"
version = "0.0.21" version = "0.0.22"
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

@ -2544,7 +2544,6 @@ impl<T: Config> Pallet<T> {
dkg_qualification.intersect_indexes(&participants); dkg_qualification.intersect_indexes(&participants);
if dkg_qualification.count_ones::<AuthIndex>() < min_threshold { if dkg_qualification.count_ones::<AuthIndex>() < min_threshold {
dkg_qualification.nullify_indexes(); dkg_qualification.nullify_indexes();
return; return;
@ -2554,16 +2553,17 @@ impl<T: Config> Pallet<T> {
let consensus = VerifyingKeyConsensus::<T>::get(&network_curve, &dkg_index); let consensus = VerifyingKeyConsensus::<T>::get(&network_curve, &dkg_index);
let verifying_key_slice = consensus.element_bytes.as_slice(); let verifying_key_slice = consensus.element_bytes.as_slice();
if verifying_key_slice.len() != network_curve.element_bytes_len() {
dkg_qualification.nullify_indexes();
return;
}
weight.saturating_accrue(T::DbWeight::get().reads(2)); weight.saturating_accrue(T::DbWeight::get().reads(2));
let mut exodus_session = CurrentExodus::<T>::get(); let mut exodus_session = CurrentExodus::<T>::get();
for network_type in T::NetworkDataHandler::iter_types_by_curve(&network_curve) { for network_type in T::NetworkDataHandler::iter_types_by_curve(&network_curve) {
let exodus_request = match network_type { let exodus_request = match network_type {
NetworkType::Evm => { NetworkType::Evm => {
if verifying_key_slice.len() < 33 {
dkg_qualification.nullify_indexes();
return;
}
let parity_byte = verifying_key_slice[0]; let parity_byte = verifying_key_slice[0];
let parity = if parity_byte % 2 == 0 { 0u8 } else { 1u8 }; let parity = if parity_byte % 2 == 0 { 0u8 } else { 1u8 };
@ -2613,20 +2613,22 @@ impl<T: Config> Pallet<T> {
let all_rotations_have_signatures = dkg_qualification let all_rotations_have_signatures = dkg_qualification
.iter_rotation_sessions() .iter_rotation_sessions()
.all(|rotation_session| { .fold(true, |accumulator, rotation_session| {
let session = rotation_session.exodus_session; let session = rotation_session.exodus_session;
let r#type = rotation_session.network_type; let r#type = rotation_session.network_type;
weight.saturating_accrue(T::DbWeight::get().reads(1)); weight.saturating_accrue(T::DbWeight::get().writes(1));
if ExodusRequests::<T>::contains_key((&network_curve, &session)) { ExodusRequests::<T>::remove((&network_curve, &session));
return false
};
weight.saturating_accrue(T::DbWeight::get().reads(1)); weight.saturating_accrue(T::DbWeight::get().reads(1));
ExodusSignedRotations::<T>::contains_key((session, r#type), dkg_index) let has_signature = ExodusSignedRotations::<T>::contains_key(
(session, r#type),
dkg_index,
);
accumulator && has_signature
}); });
if all_rotations_have_signatures || is_initial_dkg_round { if all_rotations_have_signatures || is_initial_dkg_round {
let verifying_key = dkg_qualification.get_verifying_key(); let verifying_key = dkg_qualification.get_verifying_key();
let activated_state: ActivatedState<T> = (&*dkg_qualification).into(); let activated_state: ActivatedState<T> = (&*dkg_qualification).into();

View File

@ -1136,7 +1136,7 @@ fn test_all_validators_can_execute_dkg() {
ExodusRequests::<Runtime>::count() ExodusRequests::<Runtime>::count()
}); });
assert_eq!(rotations_count, 3); assert_eq!(rotations_count, 2);
assert_eq!(bridges_count, 2); assert_eq!(bridges_count, 2);
assert_eq!(governances_count, 15); assert_eq!(governances_count, 15);
assert_eq!(pending_exodus_requests, 0); assert_eq!(pending_exodus_requests, 0);