Skip to content
Snippets Groups Projects
Commit ec38bfa9 authored by Pascal Engélibert's avatar Pascal Engélibert :bicyclist:
Browse files

fix(distance): Remember account_id who reserved

parent 837fe2ff
Branches
Tags
1 merge request!105Distance Oracle
...@@ -126,7 +126,7 @@ pub mod pallet { ...@@ -126,7 +126,7 @@ pub mod pallet {
_, _,
Twox64Concat, Twox64Concat,
<T as pallet_certification::Config<I>>::IdtyIndex, <T as pallet_certification::Config<I>>::IdtyIndex,
DistanceStatus, (<T as frame_system::Config>::AccountId, DistanceStatus),
OptionQuery, OptionQuery,
>; >;
...@@ -242,7 +242,7 @@ pub mod pallet { ...@@ -242,7 +242,7 @@ pub mod pallet {
pub fn force_set_distance_status( pub fn force_set_distance_status(
origin: OriginFor<T>, origin: OriginFor<T>,
identity: <T as pallet_certification::Config<I>>::IdtyIndex, identity: <T as pallet_certification::Config<I>>::IdtyIndex,
status: Option<DistanceStatus>, status: Option<(<T as frame_system::Config>::AccountId, DistanceStatus)>,
) -> DispatchResult { ) -> DispatchResult {
ensure_root(origin)?; ensure_root(origin)?;
...@@ -322,7 +322,10 @@ pub mod pallet { ...@@ -322,7 +322,10 @@ pub mod pallet {
.try_push((idty_index, median::MedianAcc::new())) .try_push((idty_index, median::MedianAcc::new()))
.map_err(|_| Error::<T, I>::QueueFull)?; .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( DistanceStatusExpireOn::<T, I>::mutate(
pallet_session::CurrentIndex::<T>::get() + T::ResultExpiration::get(), pallet_session::CurrentIndex::<T>::get() + T::ResultExpiration::get(),
...@@ -385,32 +388,36 @@ pub mod pallet { ...@@ -385,32 +388,36 @@ pub mod pallet {
100, //<T as Config<I>>::MaxEvaluatorsPerSession, 100, //<T as Config<I>>::MaxEvaluatorsPerSession,
> = Pallet::<T, I>::take_current_pool(index); > = Pallet::<T, I>::take_current_pool(index);
for (idty, median_acc) in current_pool.0.into_iter() { 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() { if let Some(median_result) = median_acc.get_median() {
let median = match median_result { let median = match median_result {
MedianResult::One(m) => m, MedianResult::One(m) => m,
MedianResult::Two(m1, m2) => m1 + (m2 - m1) / 2, // Avoid overflow (since max is 1) MedianResult::Two(m1, m2) => m1 + (m2 - m1) / 2, // Avoid overflow (since max is 1)
}; };
if median >= T::MinAccessibleReferees::get() { if median >= T::MinAccessibleReferees::get() {
IdentityDistanceStatus::<T, I>::mutate(idty, |status| { IdentityDistanceStatus::<T, I>::mutate(idty, |entry| {
*status = Some(DistanceStatus::Valid) entry.as_mut().map(|(account_id, status)| {
});
T::Currency::unreserve( T::Currency::unreserve(
&account_id, account_id,
<T as Config<I>>::EvaluationPrice::get(), <T as Config<I>>::EvaluationPrice::get(),
); );
} else { *status = DistanceStatus::Valid;
IdentityDistanceStatus::<T, I>::remove(idty); })
});
} else if let Some((account_id, _status)) =
IdentityDistanceStatus::<T, I>::take(idty)
{
<T as Config<I>>::Currency::slash_reserved( <T as Config<I>>::Currency::slash_reserved(
&account_id, &account_id,
<T as Config<I>>::EvaluationPrice::get(), <T as Config<I>>::EvaluationPrice::get(),
); );
} }
} else { } else if let Some((account_id, _status)) =
IdentityDistanceStatus::<T, I>::remove(idty); IdentityDistanceStatus::<T, I>::take(idty)
T::Currency::unreserve(&account_id, <T as Config<I>>::EvaluationPrice::get()); {
<T as Config<I>>::Currency::unreserve(
&account_id,
<T as Config<I>>::EvaluationPrice::get(),
);
} }
} }
Weight::zero() Weight::zero()
......
No preview for this file type
...@@ -117,7 +117,9 @@ where ...@@ -117,7 +117,9 @@ where
I: 'static, I: 'static,
{ {
fn is_distance_ok(idty_id: &<T as pallet_certification::Config<I>>::IdtyIndex) -> bool { fn is_distance_ok(idty_id: &<T as pallet_certification::Config<I>>::IdtyIndex) -> bool {
pallet_distance::Pallet::<T, I>::identity_distance_status(idty_id) matches!(
== Some(pallet_distance::DistanceStatus::Valid) pallet_distance::Pallet::<T, I>::identity_distance_status(idty_id),
Some((_, pallet_distance::DistanceStatus::Valid))
)
} }
} }
...@@ -346,7 +346,10 @@ fn test_ud_claimed_membership_on_and_off() { ...@@ -346,7 +346,10 @@ fn test_ud_claimed_membership_on_and_off() {
assert_ok!(Distance::force_set_distance_status( assert_ok!(Distance::force_set_distance_status(
frame_system::RawOrigin::Root.into(), frame_system::RawOrigin::Root.into(),
1, 1,
Some(pallet_distance::DistanceStatus::Valid) Some((
AccountKeyring::Alice.to_account_id(),
pallet_distance::DistanceStatus::Valid
))
)); ));
assert_ok!(Membership::claim_membership( assert_ok!(Membership::claim_membership(
frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into() frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into()
...@@ -669,7 +672,10 @@ fn test_validate_new_idty_after_few_uds() { ...@@ -669,7 +672,10 @@ fn test_validate_new_idty_after_few_uds() {
assert_ok!(Distance::force_set_distance_status( assert_ok!(Distance::force_set_distance_status(
frame_system::RawOrigin::Root.into(), frame_system::RawOrigin::Root.into(),
5, 5,
Some(pallet_distance::DistanceStatus::Valid) Some((
AccountKeyring::Bob.to_account_id(),
pallet_distance::DistanceStatus::Valid
))
)); ));
assert_ok!(Identity::validate_identity( assert_ok!(Identity::validate_identity(
frame_system::RawOrigin::Signed(AccountKeyring::Bob.to_account_id()).into(), frame_system::RawOrigin::Signed(AccountKeyring::Bob.to_account_id()).into(),
...@@ -727,7 +733,10 @@ fn test_claim_memberhsip_after_few_uds() { ...@@ -727,7 +733,10 @@ fn test_claim_memberhsip_after_few_uds() {
assert_ok!(Distance::force_set_distance_status( assert_ok!(Distance::force_set_distance_status(
frame_system::RawOrigin::Root.into(), frame_system::RawOrigin::Root.into(),
5, 5,
Some(pallet_distance::DistanceStatus::Valid) Some((
AccountKeyring::Eve.to_account_id(),
pallet_distance::DistanceStatus::Valid
))
)); ));
assert_ok!(Membership::claim_membership( assert_ok!(Membership::claim_membership(
frame_system::RawOrigin::Signed(AccountKeyring::Eve.to_account_id()).into(), frame_system::RawOrigin::Signed(AccountKeyring::Eve.to_account_id()).into(),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment