diff --git a/pallets/distance/src/lib.rs b/pallets/distance/src/lib.rs index b9720a57f98fd4b9bcfcb81303d7a94134e7a7df..fc5737ea9095854df10c165e72fa11c164433565 100644 --- a/pallets/distance/src/lib.rs +++ b/pallets/distance/src/lib.rs @@ -126,7 +126,7 @@ pub mod pallet { _, Twox64Concat, <T as pallet_certification::Config<I>>::IdtyIndex, - DistanceStatus, + (<T as frame_system::Config>::AccountId, DistanceStatus), OptionQuery, >; @@ -242,7 +242,7 @@ pub mod pallet { pub fn force_set_distance_status( origin: OriginFor<T>, identity: <T as pallet_certification::Config<I>>::IdtyIndex, - status: Option<DistanceStatus>, + status: Option<(<T as frame_system::Config>::AccountId, DistanceStatus)>, ) -> DispatchResult { ensure_root(origin)?; @@ -322,7 +322,10 @@ pub mod pallet { .try_push((idty_index, median::MedianAcc::new())) .map_err(|_| Error::<T, I>::QueueFull)?; - IdentityDistanceStatus::<T, I>::insert(idty_index, DistanceStatus::Pending); + IdentityDistanceStatus::<T, I>::insert( + idty_index, + (who, DistanceStatus::Pending), + ); DistanceStatusExpireOn::<T, I>::mutate( pallet_session::CurrentIndex::<T>::get() + T::ResultExpiration::get(), @@ -385,32 +388,36 @@ pub mod pallet { 100, //<T as Config<I>>::MaxEvaluatorsPerSession, > = Pallet::<T, I>::take_current_pool(index); for (idty, median_acc) in current_pool.0.into_iter() { - let Some(idty_value) = - pallet_identity::Identities::<T>::get(idty) else {continue}; - let account_id = idty_value.owner_key; if let Some(median_result) = median_acc.get_median() { let median = match median_result { MedianResult::One(m) => m, MedianResult::Two(m1, m2) => m1 + (m2 - m1) / 2, // Avoid overflow (since max is 1) }; if median >= T::MinAccessibleReferees::get() { - IdentityDistanceStatus::<T, I>::mutate(idty, |status| { - *status = Some(DistanceStatus::Valid) + IdentityDistanceStatus::<T, I>::mutate(idty, |entry| { + entry.as_mut().map(|(account_id, status)| { + T::Currency::unreserve( + account_id, + <T as Config<I>>::EvaluationPrice::get(), + ); + *status = DistanceStatus::Valid; + }) }); - T::Currency::unreserve( - &account_id, - <T as Config<I>>::EvaluationPrice::get(), - ); - } else { - IdentityDistanceStatus::<T, I>::remove(idty); + } else if let Some((account_id, _status)) = + IdentityDistanceStatus::<T, I>::take(idty) + { <T as Config<I>>::Currency::slash_reserved( &account_id, <T as Config<I>>::EvaluationPrice::get(), ); } - } else { - IdentityDistanceStatus::<T, I>::remove(idty); - T::Currency::unreserve(&account_id, <T as Config<I>>::EvaluationPrice::get()); + } else if let Some((account_id, _status)) = + IdentityDistanceStatus::<T, I>::take(idty) + { + <T as Config<I>>::Currency::unreserve( + &account_id, + <T as Config<I>>::EvaluationPrice::get(), + ); } } Weight::zero() diff --git a/resources/metadata.scale b/resources/metadata.scale index 50671f6abfc29105bbfd0d68104bc525fde27b4f..cff4a76115715c21574516f2db1f6534fc94a9c8 100644 Binary files a/resources/metadata.scale and b/resources/metadata.scale differ diff --git a/runtime/common/src/providers.rs b/runtime/common/src/providers.rs index 09010882b47df6640c732760590a0c391022616d..cab5f76fa55cb9a623db44255cfec0c96d4c16db 100644 --- a/runtime/common/src/providers.rs +++ b/runtime/common/src/providers.rs @@ -117,7 +117,9 @@ where I: 'static, { fn is_distance_ok(idty_id: &<T as pallet_certification::Config<I>>::IdtyIndex) -> bool { - pallet_distance::Pallet::<T, I>::identity_distance_status(idty_id) - == Some(pallet_distance::DistanceStatus::Valid) + matches!( + pallet_distance::Pallet::<T, I>::identity_distance_status(idty_id), + Some((_, pallet_distance::DistanceStatus::Valid)) + ) } } diff --git a/runtime/gdev/tests/integration_tests.rs b/runtime/gdev/tests/integration_tests.rs index edf2007d79928bf0649608086f6e09e13ac61286..47f7eef77afc2609f5e0ab99d0c78161fee7deac 100644 --- a/runtime/gdev/tests/integration_tests.rs +++ b/runtime/gdev/tests/integration_tests.rs @@ -346,7 +346,10 @@ fn test_ud_claimed_membership_on_and_off() { assert_ok!(Distance::force_set_distance_status( frame_system::RawOrigin::Root.into(), 1, - Some(pallet_distance::DistanceStatus::Valid) + Some(( + AccountKeyring::Alice.to_account_id(), + pallet_distance::DistanceStatus::Valid + )) )); assert_ok!(Membership::claim_membership( frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into() @@ -669,7 +672,10 @@ fn test_validate_new_idty_after_few_uds() { assert_ok!(Distance::force_set_distance_status( frame_system::RawOrigin::Root.into(), 5, - Some(pallet_distance::DistanceStatus::Valid) + Some(( + AccountKeyring::Bob.to_account_id(), + pallet_distance::DistanceStatus::Valid + )) )); assert_ok!(Identity::validate_identity( frame_system::RawOrigin::Signed(AccountKeyring::Bob.to_account_id()).into(), @@ -727,7 +733,10 @@ fn test_claim_memberhsip_after_few_uds() { assert_ok!(Distance::force_set_distance_status( frame_system::RawOrigin::Root.into(), 5, - Some(pallet_distance::DistanceStatus::Valid) + Some(( + AccountKeyring::Eve.to_account_id(), + pallet_distance::DistanceStatus::Valid + )) )); assert_ok!(Membership::claim_membership( frame_system::RawOrigin::Signed(AccountKeyring::Eve.to_account_id()).into(),