From 2f97bbaf4dfa5e78c7aa3b2ef7d744c7e15a64d9 Mon Sep 17 00:00:00 2001 From: tuxmain <tuxmain@zettascript.org> Date: Mon, 13 Jun 2022 09:13:36 +0200 Subject: [PATCH] feat(duniter-wot): remove received certs on unvalidated idty removal --- pallets/duniter-wot/src/lib.rs | 15 ++++++++++++++- pallets/duniter-wot/src/tests.rs | 22 ++++++++++++++++++++++ pallets/identity/src/lib.rs | 7 ++++++- pallets/identity/src/types.rs | 2 +- 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/pallets/duniter-wot/src/lib.rs b/pallets/duniter-wot/src/lib.rs index ff541ca4f..226696120 100644 --- a/pallets/duniter-wot/src/lib.rs +++ b/pallets/duniter-wot/src/lib.rs @@ -249,7 +249,20 @@ impl<T: Config<I>, I: 'static> pallet_identity::traits::OnIdtyChange<T> for Pall } IdtyEvent::Confirmed => {} IdtyEvent::Validated => {} - IdtyEvent::Removed => {} + IdtyEvent::Removed { status } => { + if status != IdtyStatus::Validated { + if let Err(e) = + <pallet_certification::Pallet<T, I>>::remove_all_certs_received_by( + frame_system::Origin::<T>::Root.into(), + idty_index, + ) + { + sp_std::if_std! { + println!("fail to remove certs received by some idty: {:?}", e) + } + } + } + } } 0 } diff --git a/pallets/duniter-wot/src/tests.rs b/pallets/duniter-wot/src/tests.rs index 2aab1f4c8..7bff9e19f 100644 --- a/pallets/duniter-wot/src/tests.rs +++ b/pallets/duniter-wot/src/tests.rs @@ -287,3 +287,25 @@ fn test_idty_membership_expire_them_requested() { ); }); } + +#[test] +fn test_unvalidated_idty_certs_removal() { + new_test_ext(5, 2).execute_with(|| { + // Alice creates Ferdie identity + run_to_block(2); + assert_ok!(Identity::create_identity(Origin::signed(1), 6)); + + // Ferdie confirms his identity + run_to_block(3); + assert_ok!(Identity::confirm_identity( + Origin::signed(6), + IdtyName::from("Ferdie"), + )); + + // After PendingMembershipPeriod, Ferdie identity should expire + // and his received certifications should be removed + assert_eq!(Cert::certs_by_receiver(6).len(), 1); + run_to_block(6); + assert_eq!(Cert::certs_by_receiver(6).len(), 0); + }); +} diff --git a/pallets/identity/src/lib.rs b/pallets/identity/src/lib.rs index 87d607cb9..79fedb652 100644 --- a/pallets/identity/src/lib.rs +++ b/pallets/identity/src/lib.rs @@ -525,7 +525,12 @@ pub mod pallet { Identities::<T>::remove(idty_index); frame_system::Pallet::<T>::dec_sufficients(&idty_val.owner_key); Self::deposit_event(Event::IdtyRemoved { idty_index }); - T::OnIdtyChange::on_idty_change(idty_index, IdtyEvent::Removed); + T::OnIdtyChange::on_idty_change( + idty_index, + IdtyEvent::Removed { + status: idty_val.status, + }, + ); } 0 } diff --git a/pallets/identity/src/types.rs b/pallets/identity/src/types.rs index 456cf3023..529fb0bab 100644 --- a/pallets/identity/src/types.rs +++ b/pallets/identity/src/types.rs @@ -27,7 +27,7 @@ pub enum IdtyEvent<T: crate::Config> { Created { creator: T::IdtyIndex }, Confirmed, Validated, - Removed, + Removed { status: IdtyStatus }, } #[derive(Encode, Decode, Default, Clone, PartialEq, Eq, PartialOrd, Ord, RuntimeDebug)] -- GitLab