From af7ecc060db8d7f0bf8bffb3fceda53e8524cfe4 Mon Sep 17 00:00:00 2001
From: bgallois <benjamin@gallois.cc>
Date: Tue, 21 Nov 2023 15:02:29 +0100
Subject: [PATCH] fix pallet_certification weight::zero

---
 pallets/certification/src/benchmarking.rs     |  27 ++++
 pallets/certification/src/lib.rs              |  13 +-
 pallets/certification/src/weights.rs          |  28 ++++
 .../src/weights/pallet_certification_cert.rs  | 131 ++++++++++++------
 .../pallet_certification_smith_cert.rs        | 131 ++++++++++++------
 5 files changed, 237 insertions(+), 93 deletions(-)

diff --git a/pallets/certification/src/benchmarking.rs b/pallets/certification/src/benchmarking.rs
index 574aaebaf..1c9b64671 100644
--- a/pallets/certification/src/benchmarking.rs
+++ b/pallets/certification/src/benchmarking.rs
@@ -19,6 +19,7 @@
 use super::*;
 
 use frame_benchmarking::benchmarks_instance_pallet;
+use frame_benchmarking::Zero;
 use frame_system::RawOrigin;
 use sp_runtime::traits::Convert;
 
@@ -78,6 +79,32 @@ benchmarks_instance_pallet! {
     verify {
         assert!(CertsByReceiver::<T, I>::get(receiver).len() == 0 );
     }
+    on_initialize {
+        assert!(StorageCertsRemovableOn::<T, I>::try_get(T::BlockNumber::zero()).is_err());
+    }: {Pallet::<T, I>::on_initialize(T::BlockNumber::zero());}
+    remove_cert_inner_noop {
+    }: {Pallet::<T, I>::remove_cert_inner(100.into(), 101.into(), Some(T::BlockNumber::zero()));}
+    remove_cert_inner {
+        let issuer: T::IdtyIndex = 1.into();
+        let receiver: T::IdtyIndex = 0.into();
+        Pallet::<T, I>::do_add_cert_checked(issuer, receiver, false)?;
+        let issuer_cert: u32 = StorageIdtyCertMeta::<T, I>::get(issuer).issued_count;
+        let receiver_cert: u32 = StorageIdtyCertMeta::<T, I>::get(receiver).received_count;
+        let block_number = T::ValidityPeriod::get();
+        frame_system::pallet::Pallet::<T>::set_block_number(block_number);
+    }: {Pallet::<T, I>::remove_cert_inner(issuer, receiver, Some(block_number));}
+    verify {
+        assert_has_event::<T, I>(Event::<T, I>::RemovedCert{ issuer: issuer, issuer_issued_count: issuer_cert - 1, receiver: receiver, receiver_received_count: receiver_cert - 1, expiration: true }.into());
+    }
+    on_remove_cert {
+        let issuer: T::IdtyIndex = 1.into();
+        let receiver: T::IdtyIndex = 0.into();
+        Pallet::<T, I>::do_add_cert_checked(issuer, receiver, false)?;
+        let issuer_cert: u32 = StorageIdtyCertMeta::<T, I>::get(issuer).issued_count;
+        let receiver_cert: u32 = StorageIdtyCertMeta::<T, I>::get(receiver).received_count;
+        let block_number = T::ValidityPeriod::get();
+        frame_system::pallet::Pallet::<T>::set_block_number(block_number);
+    }: {T::OnRemovedCert::on_removed_cert(issuer, issuer_cert, receiver, receiver_cert, true);}
 
     impl_benchmark_test_suite!(
         Pallet,
diff --git a/pallets/certification/src/lib.rs b/pallets/certification/src/lib.rs
index f7927d43a..a7434f391 100644
--- a/pallets/certification/src/lib.rs
+++ b/pallets/certification/src/lib.rs
@@ -268,7 +268,7 @@ pub mod pallet {
     #[pallet::hooks]
     impl<T: Config<I>, I: 'static> Hooks<BlockNumberFor<T>> for Pallet<T, I> {
         fn on_initialize(n: T::BlockNumber) -> Weight {
-            Self::prune_certifications(n)
+            Self::prune_certifications(n).saturating_add(T::WeightInfo::on_initialize())
         }
     }
 
@@ -464,6 +464,7 @@ pub mod pallet {
         /// remove the certifications due to expire on the given block
         // (run at on_initialize step)
         fn prune_certifications(block_number: T::BlockNumber) -> Weight {
+            // See on initialize for the overhead weight compatibility
             let mut total_weight = Weight::zero();
 
             if let Some(certs) = StorageCertsRemovableOn::<T, I>::take(block_number) {
@@ -476,7 +477,7 @@ pub mod pallet {
         }
         /// perform the certification removal
         /// if block number is given only remove cert if still set to expire at this block number
-        fn remove_cert_inner(
+        pub fn remove_cert_inner(
             issuer: T::IdtyIndex,
             receiver: T::IdtyIndex,
             block_number_opt: Option<T::BlockNumber>,
@@ -498,6 +499,8 @@ pub mod pallet {
                         issuers.remove(index);
                         removed = true;
                     }
+                } else {
+                    total_weight += T::WeightInfo::remove_cert_inner_noop();
                 }
             });
             if removed {
@@ -526,7 +529,11 @@ pub mod pallet {
                     receiver,
                     receiver_received_count,
                     block_number_opt.is_some(),
-                );
+                )
+                .saturating_add(
+                    T::WeightInfo::remove_cert_inner()
+                        .saturating_sub(T::WeightInfo::on_remove_cert()),
+                ); // Pessimistic overhead estimation based on the worst path of a successful certificate removal to avoid multiplying benchmarks for every branching
             }
             total_weight
         }
diff --git a/pallets/certification/src/weights.rs b/pallets/certification/src/weights.rs
index c3948a95d..48fe83af0 100644
--- a/pallets/certification/src/weights.rs
+++ b/pallets/certification/src/weights.rs
@@ -23,6 +23,10 @@ pub trait WeightInfo {
     fn add_cert() -> Weight;
     fn del_cert() -> Weight;
     fn remove_all_certs_received_by(i: u32) -> Weight;
+    fn on_initialize() -> Weight;
+    fn remove_cert_inner_noop() -> Weight;
+    fn remove_cert_inner() -> Weight;
+    fn on_remove_cert() -> Weight;
 }
 
 // Insecure weights implementation, use it for tests only!
@@ -63,4 +67,28 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().writes(1 as u64))
             .saturating_add(RocksDbWeight::get().writes((1 as u64).saturating_mul(i as u64)))
     }
+    fn on_initialize() -> Weight {
+        // Minimum execution time: 259_247 nanoseconds.
+        Weight::from_parts(269_348_000 as u64, 0)
+            .saturating_add(RocksDbWeight::get().reads(7 as u64))
+            .saturating_add(RocksDbWeight::get().writes(4 as u64))
+    }
+    fn remove_cert_inner_noop() -> Weight {
+        // Minimum execution time: 259_247 nanoseconds.
+        Weight::from_parts(269_348_000 as u64, 0)
+            .saturating_add(RocksDbWeight::get().reads(7 as u64))
+            .saturating_add(RocksDbWeight::get().writes(4 as u64))
+    }
+    fn remove_cert_inner() -> Weight {
+        // Minimum execution time: 259_247 nanoseconds.
+        Weight::from_parts(269_348_000 as u64, 0)
+            .saturating_add(RocksDbWeight::get().reads(7 as u64))
+            .saturating_add(RocksDbWeight::get().writes(4 as u64))
+    }
+    fn on_remove_cert() -> Weight {
+        // Minimum execution time: 259_247 nanoseconds.
+        Weight::from_parts(269_348_000 as u64, 0)
+            .saturating_add(RocksDbWeight::get().reads(7 as u64))
+            .saturating_add(RocksDbWeight::get().writes(4 as u64))
+    }
 }
diff --git a/runtime/common/src/weights/pallet_certification_cert.rs b/runtime/common/src/weights/pallet_certification_cert.rs
index 07eb75325..2ff942380 100644
--- a/runtime/common/src/weights/pallet_certification_cert.rs
+++ b/runtime/common/src/weights/pallet_certification_cert.rs
@@ -1,41 +1,28 @@
-// Copyright 2021-2022 Axiom-Team
-//
-// This file is part of Duniter-v2S.
-//
-// Duniter-v2S is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, version 3 of the License.
-//
-// Duniter-v2S is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
 //! Autogenerated weights for `pallet_certification`
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2023-06-08, STEPS: `5`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2023-11-21, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! WORST CASE MAP SIZE: `1000000`
-//! HOSTNAME: `benjamin-xps139380`, CPU: `Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz`
-//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("gdev-benchmark"), DB CACHE: 1024
+//! HOSTNAME: `bgallois-ms7d43`, CPU: `12th Gen Intel(R) Core(TM) i3-12100F`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
 
 // Executed Command:
-// target/release/duniter
+// ./target/release/duniter
 // benchmark
 // pallet
-// --chain=gdev-benchmark
-// --steps=5
-// --repeat=2
-// --pallet=*
-// --extrinsic=*
-// --execution=wasm
+// --chain
+// dev
 // --wasm-execution=compiled
-// --heap-pages=4096
-// --header=./file_header.txt
-// --output=./runtime/common/src/weights/
+// --pallet
+// pallet-certification
+// --extrinsic
+// *
+// --steps
+// 50
+// --repeat
+// 20
+// --output=runtime/common/src/weights/
 
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
@@ -60,11 +47,11 @@ impl<T: frame_system::Config> pallet_certification::WeightInfo for WeightInfo<T>
 	/// Proof Skipped: Cert CertsByReceiver (max_values: None, max_size: None, mode: Measured)
 	fn add_cert() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `831`
-		//  Estimated: `6771`
-		// Minimum execution time: 125_750_000 picoseconds.
-		Weight::from_parts(144_960_000, 0)
-			.saturating_add(Weight::from_parts(0, 6771))
+		//  Measured:  `839`
+		//  Estimated: `6779`
+		// Minimum execution time: 18_636_000 picoseconds.
+		Weight::from_parts(20_058_000, 0)
+			.saturating_add(Weight::from_parts(0, 6779))
 			.saturating_add(T::DbWeight::get().reads(7))
 			.saturating_add(T::DbWeight::get().writes(4))
 	}
@@ -78,11 +65,11 @@ impl<T: frame_system::Config> pallet_certification::WeightInfo for WeightInfo<T>
 	/// Proof Skipped: Membership Membership (max_values: None, max_size: None, mode: Measured)
 	fn del_cert() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `695`
-		//  Estimated: `6635`
-		// Minimum execution time: 97_607_000 picoseconds.
-		Weight::from_parts(111_284_000, 0)
-			.saturating_add(Weight::from_parts(0, 6635))
+		//  Measured:  `722`
+		//  Estimated: `6662`
+		// Minimum execution time: 16_022_000 picoseconds.
+		Weight::from_parts(17_077_000, 0)
+			.saturating_add(Weight::from_parts(0, 6662))
 			.saturating_add(T::DbWeight::get().reads(5))
 			.saturating_add(T::DbWeight::get().writes(3))
 	}
@@ -98,17 +85,71 @@ impl<T: frame_system::Config> pallet_certification::WeightInfo for WeightInfo<T>
 	/// The range of component `i` is `[2, 1000]`.
 	fn remove_all_certs_received_by(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `623 + i * (35 ±0)`
-		//  Estimated: `4098 + i * (2511 ±0)`
-		// Minimum execution time: 101_183_000 picoseconds.
-		Weight::from_parts(101_610_000, 0)
-			.saturating_add(Weight::from_parts(0, 4098))
-			// Standard Error: 551_959
-			.saturating_add(Weight::from_parts(36_743_850, 0).saturating_mul(i.into()))
+		//  Measured:  `608 + i * (35 ±0)`
+		//  Estimated: `4079 + i * (2511 ±0)`
+		// Minimum execution time: 16_103_000 picoseconds.
+		Weight::from_parts(16_586_000, 0)
+			.saturating_add(Weight::from_parts(0, 4079))
+			// Standard Error: 8_385
+			.saturating_add(Weight::from_parts(4_802_613, 0).saturating_mul(i.into()))
 			.saturating_add(T::DbWeight::get().reads(3))
 			.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into())))
 			.saturating_add(T::DbWeight::get().writes(1))
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into())))
 			.saturating_add(Weight::from_parts(0, 2511).saturating_mul(i.into()))
 	}
+	/// Storage: Cert StorageCertsRemovableOn (r:1 w:0)
+	/// Proof Skipped: Cert StorageCertsRemovableOn (max_values: None, max_size: None, mode: Measured)
+	fn on_initialize() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `181`
+		//  Estimated: `3646`
+		// Minimum execution time: 2_845_000 picoseconds.
+		Weight::from_parts(3_030_000, 0)
+			.saturating_add(Weight::from_parts(0, 3646))
+			.saturating_add(T::DbWeight::get().reads(1))
+	}
+	/// Storage: Cert CertsByReceiver (r:1 w:1)
+	/// Proof Skipped: Cert CertsByReceiver (max_values: None, max_size: None, mode: Measured)
+	fn remove_cert_inner_noop() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `279`
+		//  Estimated: `3744`
+		// Minimum execution time: 3_712_000 picoseconds.
+		Weight::from_parts(3_901_000, 0)
+			.saturating_add(Weight::from_parts(0, 3744))
+			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().writes(1))
+	}
+	/// Storage: Cert CertsByReceiver (r:1 w:1)
+	/// Proof Skipped: Cert CertsByReceiver (max_values: None, max_size: None, mode: Measured)
+	/// Storage: Cert StorageIdtyCertMeta (r:2 w:2)
+	/// Proof Skipped: Cert StorageIdtyCertMeta (max_values: None, max_size: None, mode: Measured)
+	/// Storage: Parameters ParametersStorage (r:1 w:0)
+	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: Membership Membership (r:1 w:0)
+	/// Proof Skipped: Membership Membership (max_values: None, max_size: None, mode: Measured)
+	fn remove_cert_inner() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `722`
+		//  Estimated: `6662`
+		// Minimum execution time: 14_417_000 picoseconds.
+		Weight::from_parts(15_092_000, 0)
+			.saturating_add(Weight::from_parts(0, 6662))
+			.saturating_add(T::DbWeight::get().reads(5))
+			.saturating_add(T::DbWeight::get().writes(3))
+	}
+	/// Storage: Parameters ParametersStorage (r:1 w:0)
+	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: Membership Membership (r:1 w:0)
+	/// Proof Skipped: Membership Membership (max_values: None, max_size: None, mode: Measured)
+	fn on_remove_cert() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `297`
+		//  Estimated: `3762`
+		// Minimum execution time: 5_743_000 picoseconds.
+		Weight::from_parts(6_005_000, 0)
+			.saturating_add(Weight::from_parts(0, 3762))
+			.saturating_add(T::DbWeight::get().reads(2))
+	}
 }
diff --git a/runtime/common/src/weights/pallet_certification_smith_cert.rs b/runtime/common/src/weights/pallet_certification_smith_cert.rs
index 878ae100f..b73c33da3 100644
--- a/runtime/common/src/weights/pallet_certification_smith_cert.rs
+++ b/runtime/common/src/weights/pallet_certification_smith_cert.rs
@@ -1,41 +1,28 @@
-// Copyright 2021-2022 Axiom-Team
-//
-// This file is part of Duniter-v2S.
-//
-// Duniter-v2S is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, version 3 of the License.
-//
-// Duniter-v2S is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
 //! Autogenerated weights for `pallet_certification`
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2023-06-08, STEPS: `5`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2023-11-21, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! WORST CASE MAP SIZE: `1000000`
-//! HOSTNAME: `benjamin-xps139380`, CPU: `Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz`
-//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("gdev-benchmark"), DB CACHE: 1024
+//! HOSTNAME: `bgallois-ms7d43`, CPU: `12th Gen Intel(R) Core(TM) i3-12100F`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
 
 // Executed Command:
-// target/release/duniter
+// ./target/release/duniter
 // benchmark
 // pallet
-// --chain=gdev-benchmark
-// --steps=5
-// --repeat=2
-// --pallet=*
-// --extrinsic=*
-// --execution=wasm
+// --chain
+// dev
 // --wasm-execution=compiled
-// --heap-pages=4096
-// --header=./file_header.txt
-// --output=./runtime/common/src/weights/
+// --pallet
+// pallet-certification
+// --extrinsic
+// *
+// --steps
+// 50
+// --repeat
+// 20
+// --output=runtime/common/src/weights/
 
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
@@ -60,11 +47,11 @@ impl<T: frame_system::Config> pallet_certification::WeightInfo for WeightInfo<T>
 	/// Proof Skipped: SmithCert CertsByReceiver (max_values: None, max_size: None, mode: Measured)
 	fn add_cert() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `761`
-		//  Estimated: `6701`
-		// Minimum execution time: 135_356_000 picoseconds.
-		Weight::from_parts(137_673_000, 0)
-			.saturating_add(Weight::from_parts(0, 6701))
+		//  Measured:  `769`
+		//  Estimated: `6709`
+		// Minimum execution time: 19_525_000 picoseconds.
+		Weight::from_parts(21_344_000, 0)
+			.saturating_add(Weight::from_parts(0, 6709))
 			.saturating_add(T::DbWeight::get().reads(7))
 			.saturating_add(T::DbWeight::get().writes(4))
 	}
@@ -78,11 +65,11 @@ impl<T: frame_system::Config> pallet_certification::WeightInfo for WeightInfo<T>
 	/// Proof Skipped: SmithMembership Membership (max_values: None, max_size: None, mode: Measured)
 	fn del_cert() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `630`
-		//  Estimated: `6570`
-		// Minimum execution time: 98_544_000 picoseconds.
-		Weight::from_parts(111_976_000, 0)
-			.saturating_add(Weight::from_parts(0, 6570))
+		//  Measured:  `638`
+		//  Estimated: `6578`
+		// Minimum execution time: 16_022_000 picoseconds.
+		Weight::from_parts(17_197_000, 0)
+			.saturating_add(Weight::from_parts(0, 6578))
 			.saturating_add(T::DbWeight::get().reads(5))
 			.saturating_add(T::DbWeight::get().writes(3))
 	}
@@ -98,17 +85,71 @@ impl<T: frame_system::Config> pallet_certification::WeightInfo for WeightInfo<T>
 	/// The range of component `i` is `[2, 1000]`.
 	fn remove_all_certs_received_by(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `558 + i * (35 ±0)`
-		//  Estimated: `4043 + i * (2511 ±0)`
-		// Minimum execution time: 101_214_000 picoseconds.
-		Weight::from_parts(102_668_000, 0)
-			.saturating_add(Weight::from_parts(0, 4043))
-			// Standard Error: 545_354
-			.saturating_add(Weight::from_parts(36_672_449, 0).saturating_mul(i.into()))
+		//  Measured:  `546 + i * (35 ±0)`
+		//  Estimated: `4020 + i * (2511 ±0)`
+		// Minimum execution time: 16_488_000 picoseconds.
+		Weight::from_parts(17_057_000, 0)
+			.saturating_add(Weight::from_parts(0, 4020))
+			// Standard Error: 8_341
+			.saturating_add(Weight::from_parts(4_790_454, 0).saturating_mul(i.into()))
 			.saturating_add(T::DbWeight::get().reads(3))
 			.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into())))
 			.saturating_add(T::DbWeight::get().writes(1))
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into())))
 			.saturating_add(Weight::from_parts(0, 2511).saturating_mul(i.into()))
 	}
+	/// Storage: SmithCert StorageCertsRemovableOn (r:1 w:0)
+	/// Proof Skipped: SmithCert StorageCertsRemovableOn (max_values: None, max_size: None, mode: Measured)
+	fn on_initialize() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `181`
+		//  Estimated: `3646`
+		// Minimum execution time: 2_861_000 picoseconds.
+		Weight::from_parts(3_062_000, 0)
+			.saturating_add(Weight::from_parts(0, 3646))
+			.saturating_add(T::DbWeight::get().reads(1))
+	}
+	/// Storage: SmithCert CertsByReceiver (r:1 w:1)
+	/// Proof Skipped: SmithCert CertsByReceiver (max_values: None, max_size: None, mode: Measured)
+	fn remove_cert_inner_noop() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `235`
+		//  Estimated: `3700`
+		// Minimum execution time: 3_973_000 picoseconds.
+		Weight::from_parts(4_237_000, 0)
+			.saturating_add(Weight::from_parts(0, 3700))
+			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().writes(1))
+	}
+	/// Storage: SmithCert CertsByReceiver (r:1 w:1)
+	/// Proof Skipped: SmithCert CertsByReceiver (max_values: None, max_size: None, mode: Measured)
+	/// Storage: SmithCert StorageIdtyCertMeta (r:2 w:2)
+	/// Proof Skipped: SmithCert StorageIdtyCertMeta (max_values: None, max_size: None, mode: Measured)
+	/// Storage: Parameters ParametersStorage (r:1 w:0)
+	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: SmithMembership Membership (r:1 w:0)
+	/// Proof Skipped: SmithMembership Membership (max_values: None, max_size: None, mode: Measured)
+	fn remove_cert_inner() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `638`
+		//  Estimated: `6578`
+		// Minimum execution time: 14_505_000 picoseconds.
+		Weight::from_parts(15_130_000, 0)
+			.saturating_add(Weight::from_parts(0, 6578))
+			.saturating_add(T::DbWeight::get().reads(5))
+			.saturating_add(T::DbWeight::get().writes(3))
+	}
+	/// Storage: Parameters ParametersStorage (r:1 w:0)
+	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: SmithMembership Membership (r:1 w:0)
+	/// Proof Skipped: SmithMembership Membership (max_values: None, max_size: None, mode: Measured)
+	fn on_remove_cert() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `277`
+		//  Estimated: `3742`
+		// Minimum execution time: 5_443_000 picoseconds.
+		Weight::from_parts(5_707_000, 0)
+			.saturating_add(Weight::from_parts(0, 3742))
+			.saturating_add(T::DbWeight::get().reads(2))
+	}
 }
-- 
GitLab