From 43c797484ad5424ae2636ca1514bc655ff896c89 Mon Sep 17 00:00:00 2001
From: bgallois <benjamin@gallois.cc>
Date: Wed, 31 Jan 2024 12:08:36 +0100
Subject: [PATCH] update to benchmarking v2

---
 pallets/authority-members/src/benchmarking.rs |  91 +--
 pallets/certification/src/benchmarking.rs     | 168 +++---
 pallets/distance/src/benchmarking.rs          | 192 ++++---
 pallets/duniter-account/src/benchmarking.rs   | 170 ++++--
 pallets/identity/src/benchmarking.rs          | 540 +++++++++++-------
 pallets/membership/src/benchmarking.rs        |  60 +-
 pallets/oneshot-account/src/benchmarking.rs   |  98 ++--
 .../provide-randomness/src/benchmarking.rs    | 150 +++--
 pallets/quota/src/benchmarking.rs             | 130 +++--
 9 files changed, 1005 insertions(+), 594 deletions(-)

diff --git a/pallets/authority-members/src/benchmarking.rs b/pallets/authority-members/src/benchmarking.rs
index 893d89ba8..808ea5865 100644
--- a/pallets/authority-members/src/benchmarking.rs
+++ b/pallets/authority-members/src/benchmarking.rs
@@ -17,70 +17,83 @@
 #![cfg(feature = "runtime-benchmarks")]
 
 use super::*;
-
-use frame_benchmarking::benchmarks;
-use frame_system::RawOrigin;
-
 use crate::Pallet;
 
-fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
-    frame_system::Pallet::<T>::assert_has_event(generic_event.into());
-}
+use frame_benchmarking::v2::*;
+use frame_system::RawOrigin;
 
-benchmarks! {
-    where_clause {
+#[benchmarks(
         where
-            T::MemberId: From<u32>,
+            <T as Config>::MemberId: From<u32>,
+)]
+mod benchmarks {
+    use super::*;
+
+    fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
+        frame_system::Pallet::<T>::assert_has_event(generic_event.into());
     }
-    go_offline {
+
+    #[benchmark]
+    fn go_offline() {
         let id: T::MemberId = OnlineAuthorities::<T>::get()[0];
         let caller: T::AccountId = Members::<T>::get(id).unwrap().owner_key;
-        let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
-    }: _<T::RuntimeOrigin>(caller_origin)
-    verify {
-        assert_has_event::<T>(Event::<T>::MemberGoOffline{member: id}.into());
+
+        #[extrinsic_call]
+        _(RawOrigin::Signed(caller));
+
+        assert_has_event::<T>(Event::<T>::MemberGoOffline { member: id }.into());
     }
-     go_online {
+
+    #[benchmark]
+    fn go_online() {
         let id: T::MemberId = OnlineAuthorities::<T>::get()[0];
         let caller: T::AccountId = Members::<T>::get(id).unwrap().owner_key;
-        let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
         OnlineAuthorities::<T>::mutate(|ids| {
             ids.retain(|&x| x != id);
         });
         OutgoingAuthorities::<T>::mutate(|ids| {
             ids.retain(|&x| x != id);
         });
-    }: _<T::RuntimeOrigin>(caller_origin)
-    verify {
-        assert_has_event::<T>(Event::<T>::MemberGoOnline{member: id}.into());
+
+        #[extrinsic_call]
+        _(RawOrigin::Signed(caller));
+
+        assert_has_event::<T>(Event::<T>::MemberGoOnline { member: id }.into());
     }
-     set_session_keys {
+
+    #[benchmark]
+    fn set_session_keys() {
         let id: T::MemberId = OnlineAuthorities::<T>::get()[0];
         let caller: T::AccountId = Members::<T>::get(id).unwrap().owner_key;
-        let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
-            let validator_id = T::ValidatorIdOf::convert(caller.clone()).unwrap();
-            let session_keys: T::Keys = pallet_session::NextKeys::<T>::get(validator_id).unwrap();
-        }: _<T::RuntimeOrigin>(caller_origin, session_keys)
-     remove_member {
+        let validator_id = T::ValidatorIdOf::convert(caller.clone()).unwrap();
+        let session_keys: T::Keys = pallet_session::NextKeys::<T>::get(validator_id).unwrap();
+
+        #[extrinsic_call]
+        _(RawOrigin::Signed(caller), session_keys);
+    }
+
+    #[benchmark]
+    fn remove_member() {
         let id: T::MemberId = OnlineAuthorities::<T>::get()[0];
-        let caller_origin = RawOrigin::Root.into();
-        }: _<T::RuntimeOrigin>(caller_origin, id)
-    verify {
-        assert_has_event::<T>(Event::<T>::MemberRemoved{member: id}.into());
+
+        #[extrinsic_call]
+        _(RawOrigin::Root, id);
+
+        assert_has_event::<T>(Event::<T>::MemberRemoved { member: id }.into());
     }
-     remove_member_from_blacklist {
+
+    #[benchmark]
+    fn remove_member_from_blacklist() {
         let id: T::MemberId = OnlineAuthorities::<T>::get()[0];
         Blacklist::<T>::mutate(|blacklist| {
             blacklist.push(id);
         });
-    }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), id)
-    verify {
-        assert_has_event::<T>(Event::<T>::MemberRemovedFromBlacklist{member: id}.into());
+
+        #[extrinsic_call]
+        _(RawOrigin::Root, id);
+
+        assert_has_event::<T>(Event::<T>::MemberRemovedFromBlacklist { member: id }.into());
     }
 
-     impl_benchmark_test_suite!(
-            Pallet,
-            crate::mock::new_test_ext(2),
-            crate::mock::Test
-        );
+    impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(2), crate::mock::Test);
 }
diff --git a/pallets/certification/src/benchmarking.rs b/pallets/certification/src/benchmarking.rs
index 5aa67fdf4..1f273af05 100644
--- a/pallets/certification/src/benchmarking.rs
+++ b/pallets/certification/src/benchmarking.rs
@@ -18,122 +18,160 @@
 
 use super::*;
 
-use frame_benchmarking::benchmarks;
+use frame_benchmarking::v2::*;
 use frame_system::RawOrigin;
 use sp_runtime::traits::Zero;
 
-#[cfg(test)]
-use maplit::btreemap;
-
 use crate::Pallet;
 
-fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
-    frame_system::Pallet::<T>::assert_has_event(generic_event.into());
-}
+#[benchmarks(
+        where
+            <T as Config>::IdtyIndex: From<u32>,
+)]
+mod benchmarks {
+    use super::*;
 
-fn add_certs<T: Config>(i: u32, receiver: T::IdtyIndex) -> Result<(), &'static str> {
-    Pallet::<T>::remove_all_certs_received_by(RawOrigin::Root.into(), receiver)?;
-    for j in 1..i {
-        Pallet::<T>::do_add_cert_checked(j.into(), receiver, false)?;
+    fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
+        frame_system::Pallet::<T>::assert_has_event(generic_event.into());
     }
-    assert!(
-        CertsByReceiver::<T>::get(receiver).len() as u32 == i - 1,
-        "Certs not added",
-    );
-    Ok(())
-}
 
-benchmarks! {
-    where_clause {
-        where
-            T::IdtyIndex: From<u32>,
+    fn add_certs<T: Config>(i: u32, receiver: T::IdtyIndex) -> Result<(), &'static str> {
+        Pallet::<T>::remove_all_certs_received_by(RawOrigin::Root.into(), receiver)?;
+        for j in 1..i {
+            Pallet::<T>::do_add_cert_checked(j.into(), receiver, false)?;
+        }
+        assert!(
+            CertsByReceiver::<T>::get(receiver).len() as u32 == i - 1,
+            "Certs not added",
+        );
+        Ok(())
     }
-    add_cert {
+
+    #[benchmark]
+    fn add_cert() -> Result<(), BenchmarkError> {
         let issuer: T::IdtyIndex = 1.into();
-        let caller: T::AccountId  = T::IdtyAttr::owner_key(issuer).unwrap();
-        let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
+        let caller: T::AccountId = T::IdtyAttr::owner_key(issuer).unwrap();
         let receiver: T::IdtyIndex = 2.into();
         Pallet::<T>::del_cert(RawOrigin::Root.into(), issuer, receiver)?;
-        let issuer_cert: u32 = StorageIdtyCertMeta::<T>::get(issuer).issued_count;
-        let receiver_cert: u32 = StorageIdtyCertMeta::<T>::get(receiver).received_count;
         frame_system::pallet::Pallet::<T>::set_block_number(T::CertPeriod::get());
-    }: _<T::RuntimeOrigin>(caller_origin, receiver)
-    verify {
-        assert_has_event::<T>(Event::<T>::CertAdded{ issuer, receiver }.into());
+
+        #[extrinsic_call]
+        _(RawOrigin::Signed(caller), receiver);
+
+        assert_has_event::<T>(Event::<T>::CertAdded { issuer, receiver }.into());
+        Ok(())
     }
 
-    renew_cert {
+    #[benchmark]
+    fn renew_cert() -> Result<(), BenchmarkError> {
         let issuer: T::IdtyIndex = 1.into();
-        let caller: T::AccountId  = T::IdtyAttr::owner_key(issuer).unwrap();
-        let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
+        let caller: T::AccountId = T::IdtyAttr::owner_key(issuer).unwrap();
         let receiver: T::IdtyIndex = 2.into();
         Pallet::<T>::del_cert(RawOrigin::Root.into(), issuer, receiver)?;
-        let issuer_cert: u32 = StorageIdtyCertMeta::<T>::get(issuer).issued_count;
-        let receiver_cert: u32 = StorageIdtyCertMeta::<T>::get(receiver).received_count;
         frame_system::pallet::Pallet::<T>::set_block_number(T::CertPeriod::get());
-        Pallet::<T>::add_cert(caller_origin.clone(), receiver)?;
-        frame_system::pallet::Pallet::<T>::set_block_number(T::CertPeriod::get() + T::CertPeriod::get());
-    }: _<T::RuntimeOrigin>(caller_origin, receiver)
-    verify {
-        assert_has_event::<T>(Event::<T>::CertAdded{ issuer, receiver }.into());
+        Pallet::<T>::add_cert(RawOrigin::Signed(caller.clone()).into(), receiver)?;
+        frame_system::pallet::Pallet::<T>::set_block_number(
+            T::CertPeriod::get() + T::CertPeriod::get(),
+        );
+
+        #[extrinsic_call]
+        _(RawOrigin::Signed(caller), receiver);
+
+        assert_has_event::<T>(Event::<T>::CertAdded { issuer, receiver }.into());
+        Ok(())
     }
 
-    del_cert {
+    #[benchmark]
+    fn del_cert() -> Result<(), BenchmarkError> {
         let issuer: T::IdtyIndex = 1.into();
         let receiver: T::IdtyIndex = 2.into();
         // try to add cert if missing, else ignore
         // this depends on initial data
         let _ = Pallet::<T>::do_add_cert_checked(issuer, receiver, false);
-        let receiver_cert: u32 = StorageIdtyCertMeta::<T>::get(receiver).received_count;
-        let issuer_cert: u32 = StorageIdtyCertMeta::<T>::get(issuer).issued_count;
-    }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), issuer, receiver)
-    verify {
-        assert_has_event::<T>(Event::<T>::CertRemoved{ issuer,  receiver, expiration: false }.into());
+
+        #[extrinsic_call]
+        _(RawOrigin::Root, issuer, receiver);
+
+        assert_has_event::<T>(
+            Event::<T>::CertRemoved {
+                issuer,
+                receiver,
+                expiration: false,
+            }
+            .into(),
+        );
+        Ok(())
     }
 
-    remove_all_certs_received_by {
+    #[benchmark]
+    fn remove_all_certs_received_by(i: Linear<2, 1_000>) -> Result<(), BenchmarkError> {
         let receiver: T::IdtyIndex = 0.into();
-        let i in 2..1000 => add_certs::<T>(i, receiver)?;
-    }: _<T::RuntimeOrigin>(RawOrigin::Root.into(),  receiver)
-    verify {
-        assert!(CertsByReceiver::<T>::get(receiver).is_empty() );
+        add_certs::<T>(i, receiver)?;
+
+        #[extrinsic_call]
+        _(RawOrigin::Root, receiver);
+
+        assert!(CertsByReceiver::<T>::get(receiver).is_empty());
+        Ok(())
     }
 
-    on_initialize {
+    #[benchmark]
+    fn on_initialize() {
         assert!(CertsRemovableOn::<T>::try_get(BlockNumberFor::<T>::zero()).is_err());
-    }: {Pallet::<T>::on_initialize(BlockNumberFor::<T>::zero());}
 
-    do_remove_cert_noop {
-    }: {Pallet::<T>::do_remove_cert(100.into(), 101.into(), Some(BlockNumberFor::<T>::zero()));}
+        #[block]
+        {
+            Pallet::<T>::on_initialize(BlockNumberFor::<T>::zero());
+        }
+    }
+
+    #[benchmark]
+    fn do_remove_cert_noop() {
+        #[block]
+        {
+            Pallet::<T>::do_remove_cert(100.into(), 101.into(), Some(BlockNumberFor::<T>::zero()));
+        }
+    }
 
-    do_remove_cert {
+    #[benchmark]
+    fn do_remove_cert() -> Result<(), BenchmarkError> {
         let issuer: T::IdtyIndex = 1.into();
         let receiver: T::IdtyIndex = 0.into();
         Pallet::<T>::do_remove_cert(issuer, receiver, None);
         Pallet::<T>::do_add_cert_checked(issuer, receiver, false)?;
-        let issuer_cert: u32 = StorageIdtyCertMeta::<T>::get(issuer).issued_count;
-        let receiver_cert: u32 = StorageIdtyCertMeta::<T>::get(receiver).received_count;
         let block_number = T::ValidityPeriod::get();
         frame_system::pallet::Pallet::<T>::set_block_number(block_number);
-    }: {Pallet::<T>::do_remove_cert(issuer, receiver, Some(block_number));}
-    verify {
-        assert_has_event::<T>(Event::<T>::CertRemoved{ issuer,  receiver, expiration: true }.into());
+
+        #[block]
+        {
+            Pallet::<T>::do_remove_cert(issuer, receiver, Some(block_number));
+        }
+
+        assert_has_event::<T>(
+            Event::<T>::CertRemoved {
+                issuer,
+                receiver,
+                expiration: true,
+            }
+            .into(),
+        );
+        Ok(())
     }
 
     impl_benchmark_test_suite!(
         Pallet,
         crate::mock::new_test_ext(crate::mock::DefaultCertificationConfig {
-        apply_cert_period_at_genesis: true,
-        certs_by_receiver: btreemap![
-                0 => btreemap![
+            apply_cert_period_at_genesis: true,
+            certs_by_receiver: maplit::btreemap![
+                0 => maplit::btreemap![
                     1 => Some(7),
                     2 => Some(9),
                 ],
-                1 => btreemap![
+                1 => maplit::btreemap![
                     0 => Some(10),
                     2 => Some(3),
                 ],
-            ] ,
+            ],
         }),
         crate::mock::Test
     );
diff --git a/pallets/distance/src/benchmarking.rs b/pallets/distance/src/benchmarking.rs
index 4b5fb9557..0e888c826 100644
--- a/pallets/distance/src/benchmarking.rs
+++ b/pallets/distance/src/benchmarking.rs
@@ -19,7 +19,7 @@
 use super::*;
 
 use codec::Encode;
-use frame_benchmarking::benchmarks;
+use frame_benchmarking::v2::*;
 use frame_support::traits::{Currency, OnFinalize};
 use frame_system::pallet_prelude::BlockNumberFor;
 use frame_system::RawOrigin;
@@ -29,92 +29,150 @@ use sp_runtime::Perbill;
 
 use crate::Pallet;
 
-fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
-    frame_system::Pallet::<T>::assert_has_event(generic_event.into());
-}
-
-fn populate_pool<T: Config>(i: u32) -> Result<(), &'static str> {
-    EvaluationPool0::<T>::mutate(|current_pool| -> Result<(), &'static str> {
-        for j in 0..i {
-            current_pool
-                .evaluations
-                .try_push((j, median::MedianAcc::new()))
-                .map_err(|_| Error::<T>::QueueFull)?;
-        }
-        Ok(())
-    })
-}
-
-benchmarks! {
-    where_clause {
+#[benchmarks(
         where
-        T: pallet_balances::Config, T::Balance: From<u64>,
+        T: pallet_balances::Config,
+		T::Balance: From<u64>,
         BlockNumberFor<T>: From<u32>,
+)]
+mod benchmarks {
+    use super::*;
+
+    fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
+        frame_system::Pallet::<T>::assert_has_event(generic_event.into());
     }
 
-    // request distance evaluation
-    request_distance_evaluation {
+    fn populate_pool<T: Config>(i: u32) -> Result<(), &'static str> {
+        EvaluationPool0::<T>::mutate(|current_pool| -> Result<(), &'static str> {
+            for j in 0..i {
+                current_pool
+                    .evaluations
+                    .try_push((j, median::MedianAcc::new()))
+                    .map_err(|_| Error::<T>::QueueFull)?;
+            }
+            Ok(())
+        })
+    }
+
+    #[benchmark]
+    fn request_distance_evaluation() {
         let idty = T::IdtyIndex::one();
-        let caller: T::AccountId  = pallet_identity::Identities::<T>::get(idty).unwrap().owner_key;
-        let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
-        let _ = <Balances<T> as Currency<_>>::make_free_balance_be(&caller, T::Balance::max_value());
-    }: _<T::RuntimeOrigin>(caller_origin.clone())
-    verify {
-        assert!(PendingEvaluationRequest::<T>::get(idty) == Some(caller.clone()), "Request not added");
-        assert_has_event::<T>(Event::<T>::EvaluationRequested { idty_index: idty, who: caller }.into());
+        let caller: T::AccountId = pallet_identity::Identities::<T>::get(idty)
+            .unwrap()
+            .owner_key;
+        let _ =
+            <Balances<T> as Currency<_>>::make_free_balance_be(&caller, T::Balance::max_value());
+
+        #[extrinsic_call]
+        _(RawOrigin::Signed(caller.clone()));
+
+        assert!(
+            PendingEvaluationRequest::<T>::get(idty) == Some(caller.clone()),
+            "Request not added"
+        );
+        assert_has_event::<T>(
+            Event::<T>::EvaluationRequested {
+                idty_index: idty,
+                who: caller,
+            }
+            .into(),
+        );
     }
 
-    // request distance evaluation for
-    request_distance_evaluation_for {
+    #[benchmark]
+    fn request_distance_evaluation_for() {
         let idty = T::IdtyIndex::one();
-        let caller: T::AccountId  = pallet_identity::Identities::<T>::get(idty).unwrap().owner_key;
-        let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
-        let _ = <Balances<T> as Currency<_>>::make_free_balance_be(&caller, T::Balance::max_value());
-        let target = 2u32;
+        let caller: T::AccountId = pallet_identity::Identities::<T>::get(idty)
+            .unwrap()
+            .owner_key;
+        <Balances<T> as Currency<_>>::make_free_balance_be(&caller, T::Balance::max_value());
+        let target: T::IdtyIndex = 2u32;
         // set target status since targeted distance evaluation only allowed for unvalidated
-        pallet_identity::Identities::<T>::mutate(target,
-            |idty_val| idty_val.as_mut().unwrap().status = pallet_identity::IdtyStatus::Unvalidated);
-    }: _<T::RuntimeOrigin>(caller_origin.clone(), target)
-    verify {
-        assert!(PendingEvaluationRequest::<T>::get(target) == Some(caller.clone()), "Request not added");
-        assert_has_event::<T>(Event::<T>::EvaluationRequested { idty_index: target, who: caller }.into());
+        pallet_identity::Identities::<T>::mutate(target, |idty_val| {
+            idty_val.as_mut().unwrap().status = pallet_identity::IdtyStatus::Unvalidated
+        });
+
+        #[extrinsic_call]
+        _(RawOrigin::Signed(caller.clone()), target);
+
+        assert!(
+            PendingEvaluationRequest::<T>::get(target) == Some(caller.clone()),
+            "Request not added"
+        );
+        assert_has_event::<T>(
+            Event::<T>::EvaluationRequested {
+                idty_index: target,
+                who: caller,
+            }
+            .into(),
+        );
     }
 
-    // update evaluation
-    update_evaluation {
+    #[benchmark]
+    fn update_evaluation(i: Linear<1, MAX_EVALUATIONS_PER_SESSION>) -> Result<(), BenchmarkError> {
         let digest_data = sp_consensus_babe::digests::PreDigest::SecondaryPlain(
-        sp_consensus_babe::digests::SecondaryPlainPreDigest { authority_index: 0u32, slot: Default::default() });
+            sp_consensus_babe::digests::SecondaryPlainPreDigest {
+                authority_index: 0u32,
+                slot: Default::default(),
+            },
+        );
         // A BABE digest item is needed to check authorship
         let digest = sp_runtime::DigestItem::PreRuntime(*b"BABE", digest_data.encode());
-        let _ = <frame_system::Pallet<T>>::deposit_log(digest);
+        <frame_system::Pallet<T>>::deposit_log(digest);
+        populate_pool::<T>(i)?;
+
+        #[extrinsic_call]
+        _(
+            RawOrigin::None,
+            ComputationResult {
+                distances: vec![Perbill::one(); i as usize],
+            },
+        );
+
+        Ok(())
+    }
+
+    #[benchmark]
+    fn force_update_evaluation(
+        i: Linear<1, MAX_EVALUATIONS_PER_SESSION>,
+    ) -> Result<(), BenchmarkError> {
         let idty = T::IdtyIndex::one();
-        let caller: T::AccountId  = pallet_identity::Identities::<T>::get(idty).unwrap().owner_key;
-        let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
-        let i in 1 .. MAX_EVALUATIONS_PER_SESSION => populate_pool::<T>(i)?;
-    }: _<T::RuntimeOrigin>(RawOrigin::None.into(), ComputationResult{distances: vec![Perbill::one(); i as usize]})
-
-    // force update evaluation
-    force_update_evaluation {
-            let idty = T::IdtyIndex::one();
-            let caller: T::AccountId  = pallet_identity::Identities::<T>::get(idty).unwrap().owner_key;
-            let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
-            let i in 1 .. MAX_EVALUATIONS_PER_SESSION => populate_pool::<T>(i)?;
-    }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), caller.clone(), ComputationResult{distances: vec![Perbill::one(); i as usize]})
-
-    // force valid distance status
-    force_valid_distance_status {
+        let caller: T::AccountId = pallet_identity::Identities::<T>::get(idty)
+            .unwrap()
+            .owner_key;
+        populate_pool::<T>(i)?;
+
+        #[extrinsic_call]
+        _(
+            RawOrigin::Root,
+            caller,
+            ComputationResult {
+                distances: vec![Perbill::one(); i as usize],
+            },
+        );
+
+        Ok(())
+    }
+
+    #[benchmark]
+    fn force_valid_distance_status() {
         let idty = T::IdtyIndex::one();
-        let caller: T::AccountId  = pallet_identity::Identities::<T>::get(idty).unwrap().owner_key;
-    }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), idty)
-    verify {
+
+        #[extrinsic_call]
+        _(RawOrigin::Root, idty);
+
         assert_has_event::<T>(Event::<T>::EvaluatedValid { idty_index: idty }.into());
     }
 
-    // on finalize
-    on_finalize {
+    #[benchmark]
+    fn on_finalize() {
         DidUpdate::<T>::set(true);
-    }: { Pallet::<T>::on_finalize(Default::default()); }
-    verify {
+
+        #[block]
+        {
+            Pallet::<T>::on_finalize(Default::default());
+        }
+
         assert!(!DidUpdate::<T>::get());
     }
 
diff --git a/pallets/duniter-account/src/benchmarking.rs b/pallets/duniter-account/src/benchmarking.rs
index 27a839e1a..74835636c 100644
--- a/pallets/duniter-account/src/benchmarking.rs
+++ b/pallets/duniter-account/src/benchmarking.rs
@@ -18,73 +18,139 @@
 
 use super::*;
 
-use frame_benchmarking::{account, benchmarks, whitelisted_caller};
+use frame_benchmarking::v2::*;
 use frame_support::sp_runtime::{traits::One, Saturating};
-use frame_support::traits::{Currency, Get};
+use frame_support::traits::Currency;
+use frame_system::RawOrigin;
 use pallet_provide_randomness::OnFilledRandomness;
 
 use crate::Pallet;
 
-fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
-    frame_system::Pallet::<T>::assert_has_event(generic_event.into());
-}
+#[benchmarks]
+mod benchmarks {
+    use super::*;
 
-fn create_pending_accounts<T: Config>(
-    i: u32,
-    is_balance: bool,
-    is_sufficient: bool,
-) -> Result<(), &'static str> {
-    for _ in 0..i {
-        let caller: T::AccountId = whitelisted_caller();
-        if is_balance {
-            let existential_deposit = T::ExistentialDeposit::get();
-            let balance = existential_deposit.saturating_mul((200u32).into());
-            let _ = <pallet_balances::Pallet<T> as Currency<T::AccountId>>::make_free_balance_be(
-                &caller, balance,
-            );
-        } else {
-            assert!(
-                frame_system::Pallet::<T>::get(&caller).free
-                    < T::NewAccountPrice::get() + T::ExistentialDeposit::get()
-            );
-        }
-        if is_sufficient {
-            frame_system::Pallet::<T>::inc_sufficients(&caller);
-        } else {
-            assert!(frame_system::Pallet::<T>::sufficients(&caller) == 0);
+    fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
+        frame_system::Pallet::<T>::assert_has_event(generic_event.into());
+    }
+
+    fn create_pending_accounts<T: Config>(
+        i: u32,
+        is_balance: bool,
+        is_sufficient: bool,
+    ) -> Result<(), &'static str> {
+        for _ in 0..i {
+            let caller: T::AccountId = whitelisted_caller();
+            if is_balance {
+                let existential_deposit = T::ExistentialDeposit::get();
+                let balance = existential_deposit.saturating_mul((200u32).into());
+                let _ =
+                    <pallet_balances::Pallet<T> as Currency<T::AccountId>>::make_free_balance_be(
+                        &caller, balance,
+                    );
+            } else {
+                assert!(
+                    frame_system::Pallet::<T>::get(&caller).free
+                        < T::NewAccountPrice::get() + T::ExistentialDeposit::get()
+                );
+            }
+            if is_sufficient {
+                frame_system::Pallet::<T>::inc_sufficients(&caller);
+            } else {
+                assert!(frame_system::Pallet::<T>::sufficients(&caller) == 0);
+            }
+            PendingNewAccounts::<T>::insert(caller, ());
         }
-        PendingNewAccounts::<T>::insert(caller, ());
+        Ok(())
     }
-    Ok(())
-}
 
-benchmarks! {
-    unlink_identity {
+    #[benchmark]
+    fn unlink_identity() {
         let account = account("Alice", 1, 1);
-        let origin = frame_system::RawOrigin::Signed(account);
-    }: _<T::RuntimeOrigin>(origin.into())
-    on_initialize_sufficient  {
-        let i in 0 .. T::MaxNewAccountsPerBlock::get() => create_pending_accounts::<T>(i, false, true)?;
-    }: { Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); }
-    on_initialize_with_balance {
-        let i in 0 .. T::MaxNewAccountsPerBlock::get() => create_pending_accounts::<T>(i, true, false)?;
-    }: { Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); }
-    on_initialize_no_balance {
-        let i in 0 .. T::MaxNewAccountsPerBlock::get() => create_pending_accounts::<T>(i, false, false)?;
-    }: { Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); }
-    on_filled_randomness_pending {
+
+        #[extrinsic_call]
+        _(RawOrigin::Signed(account));
+    }
+
+    #[benchmark]
+    fn on_initialize_sufficient(
+        i: Linear<0, { T::MaxNewAccountsPerBlock::get() }>,
+    ) -> Result<(), BenchmarkError> {
+        create_pending_accounts::<T>(i, false, true)?;
+
+        #[block]
+        {
+            Pallet::<T>::on_initialize(BlockNumberFor::<T>::one());
+        }
+
+        Ok(())
+    }
+
+    #[benchmark]
+    fn on_initialize_with_balance(
+        i: Linear<0, { T::MaxNewAccountsPerBlock::get() }>,
+    ) -> Result<(), BenchmarkError> {
+        create_pending_accounts::<T>(i, true, false)?;
+
+        #[block]
+        {
+            Pallet::<T>::on_initialize(BlockNumberFor::<T>::one());
+        }
+
+        Ok(())
+    }
+
+    #[benchmark]
+    fn on_initialize_no_balance(
+        i: Linear<0, { T::MaxNewAccountsPerBlock::get() }>,
+    ) -> Result<(), BenchmarkError> {
+        create_pending_accounts::<T>(i, false, false)?;
+
+        #[block]
+        {
+            Pallet::<T>::on_initialize(BlockNumberFor::<T>::one());
+        }
+
+        Ok(())
+    }
+
+    #[benchmark]
+    fn on_filled_randomness_pending() {
         let caller: T::AccountId = whitelisted_caller();
         let randomness = H256(T::AccountIdToSalt::convert(caller.clone()));
-        let request_id = pallet_provide_randomness::Pallet::<T>::force_request(pallet_provide_randomness::RandomnessType::RandomnessFromTwoEpochsAgo, randomness);
+        let request_id = pallet_provide_randomness::Pallet::<T>::force_request(
+            pallet_provide_randomness::RandomnessType::RandomnessFromTwoEpochsAgo,
+            randomness,
+        );
         PendingRandomIdAssignments::<T>::insert(request_id, caller.clone());
-    }: { Pallet::<T>::on_filled_randomness(request_id,  randomness); }
-    verify {
-        assert_has_event::<T>(Event::<T>::RandomIdAssigned { who: caller, random_id: randomness }.into());
+
+        #[block]
+        {
+            Pallet::<T>::on_filled_randomness(request_id, randomness);
+        }
+
+        assert_has_event::<T>(
+            Event::<T>::RandomIdAssigned {
+                who: caller,
+                random_id: randomness,
+            }
+            .into(),
+        );
     }
-    on_filled_randomness_no_pending {
+
+    #[benchmark]
+    fn on_filled_randomness_no_pending() {
         let caller: T::AccountId = whitelisted_caller();
         let randomness = H256(T::AccountIdToSalt::convert(caller.clone()));
-        let request_id = pallet_provide_randomness::Pallet::<T>::force_request(pallet_provide_randomness::RandomnessType::RandomnessFromTwoEpochsAgo, randomness);
+        let request_id = pallet_provide_randomness::Pallet::<T>::force_request(
+            pallet_provide_randomness::RandomnessType::RandomnessFromTwoEpochsAgo,
+            randomness,
+        );
         assert!(!PendingRandomIdAssignments::<T>::contains_key(request_id));
-    }: { Pallet::<T>::on_filled_randomness(request_id,  randomness); }
+
+        #[block]
+        {
+            Pallet::<T>::on_filled_randomness(request_id, randomness);
+        }
+    }
 }
diff --git a/pallets/identity/src/benchmarking.rs b/pallets/identity/src/benchmarking.rs
index 0d4fe93e4..89db5ffe4 100644
--- a/pallets/identity/src/benchmarking.rs
+++ b/pallets/identity/src/benchmarking.rs
@@ -20,7 +20,8 @@ use super::*;
 
 //use codec::Encode;
 use codec::Encode;
-use frame_benchmarking::{account, benchmarks};
+use frame_benchmarking::account;
+use frame_benchmarking::v2::*;
 use frame_support::traits::OnInitialize;
 use frame_system::pallet_prelude::BlockNumberFor;
 use frame_system::RawOrigin;
@@ -30,128 +31,146 @@ use sp_runtime::{AccountId32, MultiSigner};
 
 use crate::Pallet;
 
-const SEED: u32 = 1;
-
-fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
-    frame_system::Pallet::<T>::assert_has_event(generic_event.into());
-}
+#[benchmarks(
+        where
+            T::Signature: From<sp_core::sr25519::Signature>,
+            T::Signature: From<sp_core::sr25519::Signature>,
+            T::AccountId: From<AccountId32>,
+            T::IdtyIndex: From<u32>,
+)]
+mod benchmarks {
+    use super::*;
 
-struct Account<T: Config> {
-    key: T::AccountId,
-    index: T::IdtyIndex,
-    origin: <T as frame_system::Config>::RuntimeOrigin,
-    // name: IdtyName,
-}
+    fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
+        frame_system::Pallet::<T>::assert_has_event(generic_event.into());
+    }
 
-// Create and confirm one account using Alice authorized account.
-// key, origin, name and index are returned.
-// Alice next_creatable_identity_on is reinitialized at the end so several account can be
-// created in a row.
-fn create_one_identity<T: Config>(owner_key: T::AccountId) -> Result<Account<T>, &'static str> {
-    // get Alice account to create identity
-    let caller: T::AccountId = Identities::<T>::get(T::IdtyIndex::from(1u32))
-        .unwrap()
-        .owner_key;
-    let caller_origin: <T as frame_system::Config>::RuntimeOrigin =
-        RawOrigin::Signed(caller.clone()).into();
-    let owner_key_origin: <T as frame_system::Config>::RuntimeOrigin =
-        RawOrigin::Signed(owner_key.clone()).into();
-    Pallet::<T>::create_identity(caller_origin.clone(), owner_key.clone())?;
-    let name = IdtyName("new_identity".into());
-    Pallet::<T>::confirm_identity(owner_key_origin.clone(), name.clone())?;
-    let idty_index = IdentityIndexOf::<T>::get(&owner_key).unwrap();
-    // make identity member
-    <Identities<T>>::mutate_exists(idty_index, |idty_val_opt| {
-        if let Some(ref mut idty_val) = idty_val_opt {
-            idty_val.status = IdtyStatus::Member;
-        }
-    });
-    // Reset next_creatable_identity_on to add more identities with Alice
-    <Identities<T>>::mutate_exists(T::IdtyIndex::from(1u32), |idty_val_opt| {
-        if let Some(ref mut idty_val) = idty_val_opt {
-            idty_val.next_creatable_identity_on = BlockNumberFor::<T>::zero();
-        }
-    });
-    Ok(Account {
-        key: owner_key,
-        index: idty_index,
-        origin: owner_key_origin,
-        // name: name,
-    })
-}
+    struct Account<T: Config> {
+        key: T::AccountId,
+        index: T::IdtyIndex,
+        origin: <T as frame_system::Config>::RuntimeOrigin,
+    }
 
-// Create a dummy identity bypassing all the checks.
-fn create_dummy_identity<T: Config>(i: u32) -> Result<(), &'static str> {
-    let idty_index: T::IdtyIndex = i.into();
-    let owner_key: T::AccountId = account("Bob", i, SEED);
-    let next_scheduled = BlockNumberFor::<T>::zero();
-    let value = IdtyValue {
-        data: Default::default(),
-        next_creatable_identity_on: BlockNumberFor::<T>::zero(),
-        old_owner_key: None,
-        owner_key: owner_key.clone(),
-        next_scheduled,
-        status: IdtyStatus::Unvalidated,
-    };
-    let name = i.to_le_bytes();
-    let idty_name = IdtyName(name.into());
-    <Identities<T>>::insert(idty_index, value);
-    IdentityChangeSchedule::<T>::append(next_scheduled, idty_index);
-    IdentityIndexOf::<T>::insert(owner_key.clone(), idty_index);
-    <IdentitiesNames<T>>::insert(idty_name.clone(), idty_index);
-    Ok(())
-}
+    // Create and confirm one account using Alice authorized account.
+    // key, origin, name and index are returned.
+    // Alice next_creatable_identity_on is reinitialized at the end so several account can be
+    // created in a row.
+    fn create_one_identity<T: Config>(owner_key: T::AccountId) -> Result<Account<T>, &'static str> {
+        // get Alice account to create identity
+        let caller: T::AccountId = Identities::<T>::get(T::IdtyIndex::from(1u32))
+            .unwrap()
+            .owner_key;
+        let caller_origin: <T as frame_system::Config>::RuntimeOrigin =
+            RawOrigin::Signed(caller.clone()).into();
+        let owner_key_origin: <T as frame_system::Config>::RuntimeOrigin =
+            RawOrigin::Signed(owner_key.clone()).into();
+        Pallet::<T>::create_identity(caller_origin.clone(), owner_key.clone())?;
+        let name = IdtyName("new_identity".into());
+        Pallet::<T>::confirm_identity(owner_key_origin.clone(), name.clone())?;
+        let idty_index = IdentityIndexOf::<T>::get(&owner_key).unwrap();
+        // make identity member
+        <Identities<T>>::mutate_exists(idty_index, |idty_val_opt| {
+            if let Some(ref mut idty_val) = idty_val_opt {
+                idty_val.status = IdtyStatus::Member;
+            }
+        });
+        // Reset next_creatable_identity_on to add more identities with Alice
+        <Identities<T>>::mutate_exists(T::IdtyIndex::from(1u32), |idty_val_opt| {
+            if let Some(ref mut idty_val) = idty_val_opt {
+                idty_val.next_creatable_identity_on = BlockNumberFor::<T>::zero();
+            }
+        });
+        Ok(Account {
+            key: owner_key,
+            index: idty_index,
+            origin: owner_key_origin,
+            // name: name,
+        })
+    }
 
-// Add `i` dummy identities.
-fn create_identities<T: Config>(i: u32) -> Result<(), &'static str> {
-    let identities_count = Pallet::<T>::identities_count();
-    for j in 0..i {
-        create_dummy_identity::<T>(j + identities_count + 1)?;
+    // Create a dummy identity bypassing all the checks.
+    fn create_dummy_identity<T: Config>(i: u32) -> Result<(), &'static str> {
+        let idty_index: T::IdtyIndex = i.into();
+        let owner_key: T::AccountId = account("Bob", i, 1);
+        let next_scheduled = BlockNumberFor::<T>::zero();
+        let value = IdtyValue {
+            data: Default::default(),
+            next_creatable_identity_on: BlockNumberFor::<T>::zero(),
+            old_owner_key: None,
+            owner_key: owner_key.clone(),
+            next_scheduled,
+            status: IdtyStatus::Unvalidated,
+        };
+        let name = i.to_le_bytes();
+        let idty_name = IdtyName(name.into());
+        <Identities<T>>::insert(idty_index, value);
+        IdentityChangeSchedule::<T>::append(next_scheduled, idty_index);
+        IdentityIndexOf::<T>::insert(owner_key.clone(), idty_index);
+        <IdentitiesNames<T>>::insert(idty_name.clone(), idty_index);
+        Ok(())
     }
-    assert!(
-        identities_count + i == Pallet::<T>::identities_count(),
-        "Identities not created"
-    );
-    Ok(())
-}
 
-benchmarks! {
-    where_clause {
-        where
-            T::Signature: From<sp_core::sr25519::Signature>,
-            T::Signature: From<sp_core::sr25519::Signature>,
-            T::AccountId: From<AccountId32>,
-            T::IdtyIndex: From<u32>,
+    // Add `i` dummy identities.
+    fn create_identities<T: Config>(i: u32) -> Result<(), &'static str> {
+        let identities_count = Pallet::<T>::identities_count();
+        for j in 0..i {
+            create_dummy_identity::<T>(j + identities_count + 1)?;
+        }
+        assert!(
+            identities_count + i == Pallet::<T>::identities_count(),
+            "Identities not created"
+        );
+        Ok(())
     }
 
-    // create identity
-    create_identity {
-        let caller: T::AccountId  = Identities::<T>::get(T::IdtyIndex::one()).unwrap().owner_key; // Alice
-        let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
-        let owner_key: T::AccountId = account("new_identity", 2, SEED);
-    }: _<T::RuntimeOrigin>(caller_origin.clone(), owner_key.clone())
-    verify {
+    #[benchmark]
+    fn create_identity() {
+        let caller: T::AccountId = Identities::<T>::get(T::IdtyIndex::one()).unwrap().owner_key; // Alice
+        let owner_key: T::AccountId = account("new_identity", 2, 1);
+
+        #[extrinsic_call]
+        _(RawOrigin::Signed(caller), owner_key.clone());
+
         let idty_index = IdentityIndexOf::<T>::get(&owner_key);
         assert!(idty_index.is_some(), "Identity not added");
-        assert_has_event::<T>(Event::<T>::IdtyCreated { idty_index: idty_index.unwrap(), owner_key }.into());
+        assert_has_event::<T>(
+            Event::<T>::IdtyCreated {
+                idty_index: idty_index.unwrap(),
+                owner_key,
+            }
+            .into(),
+        );
     }
 
-    // confirm identity
-    confirm_identity {
-        let caller: T::AccountId  = Identities::<T>::get(T::IdtyIndex::one()).unwrap().owner_key;
-        let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
-        let owner_key: T::AccountId = account("new_identity", 2, SEED);
-        let owner_key_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(owner_key.clone()).into();
+    #[benchmark]
+    fn confirm_identity() -> Result<(), BenchmarkError> {
+        let caller: T::AccountId = Identities::<T>::get(T::IdtyIndex::one()).unwrap().owner_key;
+        let caller_origin: <T as frame_system::Config>::RuntimeOrigin =
+            RawOrigin::Signed(caller.clone()).into();
+        let owner_key: T::AccountId = account("new_identity", 2, 1);
         Pallet::<T>::create_identity(caller_origin.clone(), owner_key.clone())?;
-    }: _<T::RuntimeOrigin>(owner_key_origin.clone(), IdtyName("new_identity".into()))
-    verify {
+
+        #[extrinsic_call]
+        _(
+            RawOrigin::Signed(owner_key.clone()),
+            IdtyName("new_identity".into()),
+        );
+
         let idty_index = IdentityIndexOf::<T>::get(&owner_key);
-        assert_has_event::<T>(Event::<T>::IdtyConfirmed { idty_index: idty_index.unwrap(), owner_key, name: IdtyName("new_identity".into()) }.into());
+        assert_has_event::<T>(
+            Event::<T>::IdtyConfirmed {
+                idty_index: idty_index.unwrap(),
+                owner_key,
+                name: IdtyName("new_identity".into()),
+            }
+            .into(),
+        );
+        Ok(())
     }
 
-    // change owner key
-    change_owner_key {
-        let old_key: T::AccountId = account("new_identity", 2, SEED);
+    #[benchmark]
+    fn change_owner_key() -> Result<(), BenchmarkError> {
+        let old_key: T::AccountId = account("new_identity", 2, 1);
         let account: Account<T> = create_one_identity(old_key.clone())?;
 
         // Change key a first time to add an old-old key
@@ -164,12 +183,14 @@ benchmarks! {
         let message = (NEW_OWNER_KEY_PAYLOAD_PREFIX, new_key_payload).encode();
         let caller_public = sr25519_generate(0.into(), None);
         let caller: T::AccountId = MultiSigner::Sr25519(caller_public).into_account().into();
-        let signature = sr25519_sign(0.into(), &caller_public, &message).unwrap().into();
+        let signature = sr25519_sign(0.into(), &caller_public, &message)
+            .unwrap()
+            .into();
         Pallet::<T>::change_owner_key(account.origin.clone(), caller.clone(), signature)?;
 
         // Change key a second time to benchmark
         //  The sufficients for the old_old key will drop to 0 during benchmark
-        let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
+        let caller_origin = RawOrigin::Signed(caller.clone());
         let genesis_hash = frame_system::Pallet::<T>::block_hash(BlockNumberFor::<T>::zero());
         let new_key_payload = IdtyIndexAccountIdPayload {
             genesis_hash: &genesis_hash,
@@ -179,17 +200,33 @@ benchmarks! {
         let message = (NEW_OWNER_KEY_PAYLOAD_PREFIX, new_key_payload).encode();
         let caller_public = sr25519_generate(0.into(), None);
         let caller: T::AccountId = MultiSigner::Sr25519(caller_public).into_account().into();
-        let signature = sr25519_sign(0.into(), &caller_public, &message).unwrap().into();
-        <frame_system::Pallet<T>>::set_block_number(<frame_system::Pallet<T>>::block_number() + T::ChangeOwnerKeyPeriod::get());
-    }: _<T::RuntimeOrigin>(caller_origin.clone(), caller.clone(), signature)
-    verify {
-        assert_has_event::<T>(Event::<T>::IdtyChangedOwnerKey { idty_index: account.index, new_owner_key: caller.clone() }.into());
-        assert!(IdentityIndexOf::<T>::get(&caller).unwrap() == account.index, "Owner key not changed");
+        let signature = sr25519_sign(0.into(), &caller_public, &message)
+            .unwrap()
+            .into();
+        <frame_system::Pallet<T>>::set_block_number(
+            <frame_system::Pallet<T>>::block_number() + T::ChangeOwnerKeyPeriod::get(),
+        );
+
+        #[extrinsic_call]
+        _(caller_origin, caller.clone(), signature);
+
+        assert_has_event::<T>(
+            Event::<T>::IdtyChangedOwnerKey {
+                idty_index: account.index,
+                new_owner_key: caller.clone(),
+            }
+            .into(),
+        );
+        assert!(
+            IdentityIndexOf::<T>::get(&caller).unwrap() == account.index,
+            "Owner key not changed"
+        );
+        Ok(())
     }
 
-    // revoke identity
-    revoke_identity {
-        let old_key: T::AccountId = account("new_identity", 2, SEED);
+    #[benchmark]
+    fn revoke_identity() -> Result<(), BenchmarkError> {
+        let old_key: T::AccountId = account("new_identity", 2, 1);
         let account: Account<T> = create_one_identity(old_key.clone())?;
 
         // Change key
@@ -203,7 +240,9 @@ benchmarks! {
         let message = (NEW_OWNER_KEY_PAYLOAD_PREFIX, new_key_payload).encode();
         let caller_public = sr25519_generate(0.into(), None);
         let caller: T::AccountId = MultiSigner::Sr25519(caller_public).into_account().into();
-        let signature = sr25519_sign(0.into(), &caller_public, &message).unwrap().into();
+        let signature = sr25519_sign(0.into(), &caller_public, &message)
+            .unwrap()
+            .into();
         Pallet::<T>::change_owner_key(account.origin.clone(), caller.clone(), signature)?;
 
         let genesis_hash = frame_system::Pallet::<T>::block_hash(BlockNumberFor::<T>::zero());
@@ -212,147 +251,252 @@ benchmarks! {
             idty_index: account.index,
         };
         let message = (REVOCATION_PAYLOAD_PREFIX, revocation_payload).encode();
-        let signature = sr25519_sign(0.into(), &caller_public, &message).unwrap().into();
-    }: _<T::RuntimeOrigin>(account.origin, account.index, caller.clone(), signature)
-    verify {
-        assert_has_event::<T>(Event::<T>::IdtyRevoked { idty_index: account.index, reason: RevocationReason::User }.into());
-        // revocation does not mean deletion anymore
-        // assert!(IdentityIndexOf::<T>::get(&account.key).is_none(), "Identity not revoked");
+        let signature = sr25519_sign(0.into(), &caller_public, &message)
+            .unwrap()
+            .into();
+
+        #[extrinsic_call]
+        _(
+            RawOrigin::Signed(account.key),
+            account.index,
+            caller.clone(),
+            signature,
+        );
+
+        assert_has_event::<T>(
+            Event::<T>::IdtyRevoked {
+                idty_index: account.index,
+                reason: RevocationReason::User,
+            }
+            .into(),
+        );
+        Ok(())
     }
 
-    // The complexity depends on the number of identities to prune
-    prune_item_identities_names {
+    #[benchmark]
+    fn prune_item_identities_names(i: Linear<2, 1_000>) -> Result<(), BenchmarkError> {
+        // The complexity depends on the number of identities to prune
         // Populate identities
         let identities_count = Pallet::<T>::identities_count();
-        let i in 1 .. 1000 => create_identities::<T>(i)?;
+        create_identities::<T>(i)?;
 
         let mut names = Vec::<IdtyName>::new();
         for k in 1..i {
             let name: IdtyName = IdtyName((k + identities_count).to_le_bytes().into());
-            assert!(IdentitiesNames::<T>::contains_key(&name), "Name not existing");
+            assert!(
+                IdentitiesNames::<T>::contains_key(&name),
+                "Name not existing"
+            );
             names.push(name);
         }
-    }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), names.clone())
-    verify {
+
+        #[extrinsic_call]
+        _(RawOrigin::Root, names.clone());
+
         for name in names {
             assert!(!IdentitiesNames::<T>::contains_key(&name), "Name existing");
         }
+        Ok(())
     }
 
-    // fix sufficients identity
-    fix_sufficients {
-        let new_identity: T::AccountId = account("Bob", 2, SEED);
+    #[benchmark]
+    fn fix_sufficients() -> Result<(), BenchmarkError> {
+        let new_identity: T::AccountId = account("Bob", 2, 1);
         let account: Account<T> = create_one_identity(new_identity)?;
         let sufficient = frame_system::Pallet::<T>::sufficients(&account.key);
-    }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), account.key.clone(), true)
-    verify {
-        assert!(sufficient < frame_system::Pallet::<T>::sufficients(&account.key), "Sufficient not incremented");
+
+        #[extrinsic_call]
+        _(RawOrigin::Root, account.key.clone(), true);
+
+        assert!(
+            sufficient < frame_system::Pallet::<T>::sufficients(&account.key),
+            "Sufficient not incremented"
+        );
+        Ok(())
     }
 
-    // link account
-    link_account {
-        let alice_origin = RawOrigin::Signed(Identities::<T>::get(T::IdtyIndex::one()).unwrap().owner_key);
+    #[benchmark]
+    fn link_account() -> Result<(), BenchmarkError> {
+        let alice_origin =
+            RawOrigin::Signed(Identities::<T>::get(T::IdtyIndex::one()).unwrap().owner_key);
         let bob_public = sr25519_generate(0.into(), None);
         let bob: T::AccountId = MultiSigner::Sr25519(bob_public).into_account().into();
         frame_system::Pallet::<T>::inc_providers(&bob);
         let genesis_hash = frame_system::Pallet::<T>::block_hash(BlockNumberFor::<T>::zero());
         let payload = (
-            LINK_IDTY_PAYLOAD_PREFIX, genesis_hash, T::IdtyIndex::one(), bob.clone(),
-        ).encode();
-        let signature = sr25519_sign(0.into(), &bob_public, &payload).unwrap().into();
-    }: _<T::RuntimeOrigin>(alice_origin.into(), bob, signature)
+            LINK_IDTY_PAYLOAD_PREFIX,
+            genesis_hash,
+            T::IdtyIndex::one(),
+            bob.clone(),
+        )
+            .encode();
+        let signature = sr25519_sign(0.into(), &bob_public, &payload)
+            .unwrap()
+            .into();
 
-    // Base weight of an empty initialize
-    on_initialize {
-    }: {Pallet::<T>::on_initialize(BlockNumberFor::<T>::zero());}
+        #[extrinsic_call]
+        _(alice_origin, bob, signature);
 
-    // --- do revoke identity
-    do_revoke_identity_noop {
+        Ok(())
+    }
+
+    #[benchmark]
+    fn on_initialize() {
+        // Base weight of an empty initialize
+        #[block]
+        {
+            Pallet::<T>::on_initialize(BlockNumberFor::<T>::zero());
+        }
+    }
+
+    #[benchmark]
+    fn do_revoke_identity_noop() {
         let idty_index: T::IdtyIndex = 0u32.into();
         assert!(Identities::<T>::get(idty_index).is_none());
-    }: {Pallet::<T>::do_revoke_identity(idty_index, RevocationReason::Root);}
-    do_revoke_identity {
+
+        #[block]
+        {
+            Pallet::<T>::do_revoke_identity(idty_index, RevocationReason::Root);
+        }
+    }
+
+    #[benchmark]
+    fn do_revoke_identity() {
         let idty_index: T::IdtyIndex = 1u32.into();
-        let new_identity: T::AccountId = account("Bob", 2, SEED);
+        let new_identity: T::AccountId = account("Bob", 2, 1);
         assert!(Identities::<T>::get(idty_index).is_some());
-        Identities::<T>::mutate( idty_index, |id| {
+        Identities::<T>::mutate(idty_index, |id| {
             if let Some(id) = id {
                 id.old_owner_key = Some((new_identity, BlockNumberFor::<T>::zero()));
             }
         });
-        assert!(Identities::<T>::get(idty_index).unwrap().old_owner_key.is_some());
-    }: {Pallet::<T>::do_revoke_identity(idty_index, RevocationReason::Root);}
-    verify {
-        assert_has_event::<T>(Event::<T>::IdtyRevoked { idty_index, reason: RevocationReason::Root }.into());
+        assert!(Identities::<T>::get(idty_index)
+            .unwrap()
+            .old_owner_key
+            .is_some());
+
+        #[block]
+        {
+            Pallet::<T>::do_revoke_identity(idty_index, RevocationReason::Root);
+        }
+
+        assert_has_event::<T>(
+            Event::<T>::IdtyRevoked {
+                idty_index,
+                reason: RevocationReason::Root,
+            }
+            .into(),
+        );
     }
 
-    // --- do remove identity
-    do_remove_identity_noop {
+    #[benchmark]
+    fn do_remove_identity_noop() {
         let idty_index: T::IdtyIndex = 0u32.into();
         assert!(Identities::<T>::get(idty_index).is_none());
-    }: {Pallet::<T>::do_remove_identity(idty_index, RemovalReason::Revoked);}
-    do_remove_identity {
+
+        #[block]
+        {
+            Pallet::<T>::do_remove_identity(idty_index, RemovalReason::Revoked);
+        }
+    }
+
+    #[benchmark]
+    fn do_remove_identity() {
         let idty_index: T::IdtyIndex = 1u32.into();
-        let new_identity: T::AccountId = account("Bob", 2, SEED);
+        let new_identity: T::AccountId = account("Bob", 2, 1);
         assert!(Identities::<T>::get(idty_index).is_some());
-        Identities::<T>::mutate( idty_index, |id| {
+        Identities::<T>::mutate(idty_index, |id| {
             if let Some(id) = id {
                 id.old_owner_key = Some((new_identity, BlockNumberFor::<T>::zero()));
             }
         });
-        assert!(Identities::<T>::get(idty_index).unwrap().old_owner_key.is_some());
-    }: {Pallet::<T>::do_remove_identity(idty_index, RemovalReason::Revoked);}
-    verify {
-        assert_has_event::<T>(Event::<T>::IdtyRemoved { idty_index, reason: RemovalReason::Revoked }.into());
+        assert!(Identities::<T>::get(idty_index)
+            .unwrap()
+            .old_owner_key
+            .is_some());
+
+        #[block]
+        {
+            Pallet::<T>::do_remove_identity(idty_index, RemovalReason::Revoked);
+        }
+
+        assert_has_event::<T>(
+            Event::<T>::IdtyRemoved {
+                idty_index,
+                reason: RemovalReason::Revoked,
+            }
+            .into(),
+        );
     }
 
-    // --- prune identities
-    prune_identities_noop {
+    #[benchmark]
+    fn prune_identities_noop() {
         assert!(IdentityChangeSchedule::<T>::try_get(BlockNumberFor::<T>::zero()).is_err());
-    }: {Pallet::<T>::prune_identities(BlockNumberFor::<T>::zero());}
 
-    prune_identities_none {
+        #[block]
+        {
+            Pallet::<T>::prune_identities(BlockNumberFor::<T>::zero());
+        }
+    }
+
+    #[benchmark]
+    fn prune_identities_none() {
         let idty_index: T::IdtyIndex = 100u32.into();
         IdentityChangeSchedule::<T>::append(BlockNumberFor::<T>::zero(), idty_index);
         assert!(IdentityChangeSchedule::<T>::try_get(BlockNumberFor::<T>::zero()).is_ok());
         assert!(<Identities<T>>::try_get(idty_index).is_err());
-    }: {Pallet::<T>::prune_identities(BlockNumberFor::<T>::zero());}
 
-    prune_identities_err {
+        #[block]
+        {
+            Pallet::<T>::prune_identities(BlockNumberFor::<T>::zero());
+        }
+    }
+
+    #[benchmark]
+    fn prune_identities_err() -> Result<(), BenchmarkError> {
         let idty_index: T::IdtyIndex = 100u32.into();
         create_dummy_identity::<T>(100u32)?;
         IdentityChangeSchedule::<T>::append(BlockNumberFor::<T>::zero(), idty_index);
-    }: {Pallet::<T>::prune_identities(BlockNumberFor::<T>::zero());}
+
+        #[block]
+        {
+            Pallet::<T>::prune_identities(BlockNumberFor::<T>::zero());
+        }
+
+        Ok(())
+    }
 
     impl_benchmark_test_suite!(
         Pallet,
         // Create genesis identity Alice to test benchmark in mock
-        crate::mock::new_test_ext(crate::mock::IdentityConfig{ identities: vec![
-            GenesisIdty {
-                index: 1,
-                name: IdtyName::from("Alice"),
-                value: IdtyValue {
-                    data: (),
-                    next_creatable_identity_on: 0,
-                    old_owner_key: None,
-                    owner_key: account("Alice", 1, SEED),
-                    next_scheduled: 0,
-                    status: crate::IdtyStatus::Member,
+        crate::mock::new_test_ext(crate::mock::IdentityConfig {
+            identities: vec![
+                crate::GenesisIdty {
+                    index: 1,
+                    name: crate::IdtyName::from("Alice"),
+                    value: crate::IdtyValue {
+                        data: (),
+                        next_creatable_identity_on: 0,
+                        old_owner_key: None,
+                        owner_key: frame_benchmarking::account("Alice", 1, 1),
+                        next_scheduled: 0,
+                        status: crate::IdtyStatus::Member,
+                    },
                 },
-            },
-            GenesisIdty {
-                index: 2,
-                name: IdtyName::from("Bob"),
-                value: IdtyValue {
-                    data: (),
-                    next_creatable_identity_on: 0,
-                    old_owner_key: None,
-                    owner_key: account("Bob", 1, SEED),
-                    next_scheduled: 0,
-                    status: crate::IdtyStatus::Unconfirmed,
+                crate::GenesisIdty {
+                    index: 2,
+                    name: crate::IdtyName::from("Bob"),
+                    value: crate::IdtyValue {
+                        data: (),
+                        next_creatable_identity_on: 0,
+                        old_owner_key: None,
+                        owner_key: frame_benchmarking::account("Bob", 1, 1),
+                        next_scheduled: 0,
+                        status: crate::IdtyStatus::Unconfirmed,
+                    },
                 },
-            },
-        ]}),
+            ]
+        }),
         crate::mock::Test,
     );
 }
diff --git a/pallets/membership/src/benchmarking.rs b/pallets/membership/src/benchmarking.rs
index a3475c7d0..0f2be6c80 100644
--- a/pallets/membership/src/benchmarking.rs
+++ b/pallets/membership/src/benchmarking.rs
@@ -18,58 +18,66 @@
 
 use super::*;
 
-use frame_benchmarking::benchmarks;
+use frame_benchmarking::v2::*;
 use frame_system::pallet_prelude::BlockNumberFor;
 
-#[cfg(test)]
-use maplit::btreemap;
-
 use crate::Pallet;
 
-// fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
-//     frame_system::Pallet::<T>::assert_has_event(generic_event.into());
-// }
-
-benchmarks! {
-    where_clause {
+#[benchmarks(
         where
             T::IdtyId: From<u32>,
             BlockNumberFor<T>: From<u32>,
-    }
+)]
+mod benchmarks {
+    use super::*;
 
     // TODO membership add and renewal should be included to distance on_new_session as worst case scenario
 
-    // Base weight of an empty initialize
-    on_initialize {
-    }: {Pallet::<T>::on_initialize(BlockNumberFor::<T>::zero());}
+    #[benchmark]
+    fn on_initialize() {
+        // Base weight of an empty initialize
+        #[block]
+        {
+            Pallet::<T>::on_initialize(BlockNumberFor::<T>::zero());
+        }
+    }
 
-    expire_memberships {
-        let i in 0..3; // Limited by the number of validators
+    #[benchmark]
+    fn expire_memberships(i: Linear<0, 3>) {
+        // Limited by the number of validators
         // Arbitrarily high, to be in the worst case of wot instance,
         // this will overcount the weight in hooks see https://git.duniter.org/nodes/rust/duniter-v2s/-/issues/167
-        let block_number: BlockNumberFor::<T> = 10_000_000.into();
+        let block_number: BlockNumberFor<T> = 10_000_000.into();
         frame_system::pallet::Pallet::<T>::set_block_number(block_number);
         let mut idties: Vec<T::IdtyId> = Vec::new();
-        for j in 1..i+1 {
+        for j in 1..i + 1 {
             let j: T::IdtyId = j.into();
             Membership::<T>::insert(j, MembershipData::<BlockNumberFor<T>>::default());
             idties.push(j);
         }
         MembershipsExpireOn::<T>::insert(block_number, idties);
-        assert_eq!(MembershipsExpireOn::<T>::get(block_number).len(), i as usize);
-    }: {Pallet::<T>::expire_memberships(block_number);}
-    verify {
+        assert_eq!(
+            MembershipsExpireOn::<T>::get(block_number).len(),
+            i as usize
+        );
+
+        #[block]
+        {
+            Pallet::<T>::expire_memberships(block_number);
+        }
+
         assert_eq!(MembershipsExpireOn::<T>::get(block_number).len(), 0_usize);
     }
 
     impl_benchmark_test_suite!(
         Pallet,
         crate::mock::new_test_ext(crate::mock::MembershipConfig {
-        memberships: btreemap![
-            3 => MembershipData {
-                expire_on: 3,
-            },
-        ],}),
+            memberships: maplit::btreemap![
+                3 => crate::MembershipData {
+                    expire_on: 3,
+                },
+            ],
+        }),
         crate::mock::Test
     );
 }
diff --git a/pallets/oneshot-account/src/benchmarking.rs b/pallets/oneshot-account/src/benchmarking.rs
index dcc72ff2e..cf79d0494 100644
--- a/pallets/oneshot-account/src/benchmarking.rs
+++ b/pallets/oneshot-account/src/benchmarking.rs
@@ -18,7 +18,8 @@
 
 use super::*;
 
-use frame_benchmarking::{account, benchmarks, whitelisted_caller};
+use frame_benchmarking::v2::*;
+use frame_benchmarking::{account, whitelisted_caller};
 use frame_support::pallet_prelude::IsType;
 use frame_support::traits::Get;
 use frame_system::RawOrigin;
@@ -26,90 +27,99 @@ use pallet_balances::Pallet as Balances;
 
 use crate::Pallet;
 
-const SEED: u32 = 0;
-
-benchmarks! {
-    where_clause {
+#[benchmarks(
         where
         T: pallet_balances::Config,
         T::Balance: From<u64>,
         <T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance>+From<T::Balance>
-    }
-    create_oneshot_account {
+)]
+mod benchmarks {
+    use super::*;
+
+    #[benchmark]
+    fn create_oneshot_account() {
         let existential_deposit = T::ExistentialDeposit::get();
         let caller = whitelisted_caller();
-
-        // Give some multiple of the existential deposit
         let balance = existential_deposit.saturating_mul((2).into());
         let _ = T::Currency::make_free_balance_be(&caller, balance.into());
-
-        let recipient: T::AccountId = account("recipient", 0, SEED);
+        let recipient: T::AccountId = account("recipient", 0, 1);
         let recipient_lookup: <T::Lookup as StaticLookup>::Source =
             T::Lookup::unlookup(recipient.clone());
         let transfer_amount = existential_deposit;
-    }: _(RawOrigin::Signed(caller.clone()), recipient_lookup, transfer_amount.into())
-    verify {
+
+        #[extrinsic_call]
+        _(
+            RawOrigin::Signed(caller.clone()),
+            recipient_lookup,
+            transfer_amount.into(),
+        );
+
         assert_eq!(Balances::<T>::free_balance(&caller), transfer_amount);
-        assert_eq!(OneshotAccounts::<T>::get(&recipient), Some(transfer_amount.into()));
+        assert_eq!(
+            OneshotAccounts::<T>::get(&recipient),
+            Some(transfer_amount.into())
+        );
     }
-    consume_oneshot_account {
+
+    #[benchmark]
+    fn consume_oneshot_account() {
         let existential_deposit = T::ExistentialDeposit::get();
         let caller: T::AccountId = whitelisted_caller();
-
-        // Give some multiple of the existential deposit
         let balance = existential_deposit.saturating_mul((2).into());
         OneshotAccounts::<T>::insert(
             caller.clone(),
-            Into::<<T::Currency as Currency<T::AccountId>>::Balance>::into(balance)
+            Into::<<T::Currency as Currency<T::AccountId>>::Balance>::into(balance),
         );
-
         // Deposit into a normal account is more expensive than into a oneshot account
         // so we create the recipient account with an existential deposit.
-        let recipient: T::AccountId = account("recipient", 0, SEED);
+        let recipient: T::AccountId = account("recipient", 0, 1);
         let recipient_lookup: <T::Lookup as StaticLookup>::Source =
             T::Lookup::unlookup(recipient.clone());
         let _ = T::Currency::make_free_balance_be(&recipient, existential_deposit.into());
-    }: _(
-        RawOrigin::Signed(caller.clone()),
-        BlockNumberFor::<T>::zero(),
-        Account::<<T::Lookup as StaticLookup>::Source>::Normal(recipient_lookup)
-    )
-    verify {
+
+        #[extrinsic_call]
+        _(
+            RawOrigin::Signed(caller.clone()),
+            BlockNumberFor::<T>::zero(),
+            Account::<<T::Lookup as StaticLookup>::Source>::Normal(recipient_lookup),
+        );
+
         assert_eq!(OneshotAccounts::<T>::get(&caller), None);
         assert_eq!(
             Balances::<T>::free_balance(&recipient),
             existential_deposit.saturating_mul((3).into())
         );
     }
-    consume_oneshot_account_with_remaining {
+
+    #[benchmark]
+    fn consume_oneshot_account_with_remaining() {
         let existential_deposit = T::ExistentialDeposit::get();
         let caller: T::AccountId = whitelisted_caller();
-
-        // Give some multiple of the existential deposit
         let balance = existential_deposit.saturating_mul((2).into());
         OneshotAccounts::<T>::insert(
             caller.clone(),
-            Into::<<T::Currency as Currency<T::AccountId>>::Balance>::into(balance)
+            Into::<<T::Currency as Currency<T::AccountId>>::Balance>::into(balance),
         );
-
         // Deposit into a normal account is more expensive than into a oneshot account
         // so we create the recipient accounts with an existential deposits.
-        let recipient1: T::AccountId = account("recipient1", 0, SEED);
+        let recipient1: T::AccountId = account("recipient1", 0, 1);
         let recipient1_lookup: <T::Lookup as StaticLookup>::Source =
             T::Lookup::unlookup(recipient1.clone());
         let _ = T::Currency::make_free_balance_be(&recipient1, existential_deposit.into());
-        let recipient2: T::AccountId = account("recipient2", 1, SEED);
+        let recipient2: T::AccountId = account("recipient2", 1, 1);
         let recipient2_lookup: <T::Lookup as StaticLookup>::Source =
             T::Lookup::unlookup(recipient2.clone());
         let _ = T::Currency::make_free_balance_be(&recipient2, existential_deposit.into());
-    }: _(
-        RawOrigin::Signed(caller.clone()),
-        BlockNumberFor::<T>::zero(),
-        Account::<<T::Lookup as StaticLookup>::Source>::Normal(recipient1_lookup),
-        Account::<<T::Lookup as StaticLookup>::Source>::Normal(recipient2_lookup),
-        existential_deposit.into()
-    )
-    verify {
+
+        #[extrinsic_call]
+        _(
+            RawOrigin::Signed(caller.clone()),
+            BlockNumberFor::<T>::zero(),
+            Account::<<T::Lookup as StaticLookup>::Source>::Normal(recipient1_lookup),
+            Account::<<T::Lookup as StaticLookup>::Source>::Normal(recipient2_lookup),
+            existential_deposit.into(),
+        );
+
         assert_eq!(OneshotAccounts::<T>::get(&caller), None);
         assert_eq!(
             Balances::<T>::free_balance(&recipient1),
@@ -121,9 +131,5 @@ benchmarks! {
         );
     }
 
-    impl_benchmark_test_suite!(
-        Pallet,
-        crate::mock::new_test_ext(),
-        crate::mock::Test
-    );
+    impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(), crate::mock::Test);
 }
diff --git a/pallets/provide-randomness/src/benchmarking.rs b/pallets/provide-randomness/src/benchmarking.rs
index 56dfe1590..5f0ed8eed 100644
--- a/pallets/provide-randomness/src/benchmarking.rs
+++ b/pallets/provide-randomness/src/benchmarking.rs
@@ -18,7 +18,8 @@
 
 use super::*;
 
-use frame_benchmarking::{benchmarks, whitelisted_caller};
+use frame_benchmarking::v2::*;
+use frame_benchmarking::whitelisted_caller;
 use frame_support::ensure;
 use frame_support::pallet_prelude::IsType;
 use frame_support::sp_runtime::{traits::One, Saturating};
@@ -29,49 +30,51 @@ use sp_core::H256;
 
 use crate::Pallet;
 
-fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
-    frame_system::Pallet::<T>::assert_has_event(generic_event.into());
-}
+#[benchmarks(
+        where
+        T: pallet_balances::Config,
+        T::Balance: From<u64>,
+        <T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance>,
+        BlockNumberFor<T>: From<u32>,
+)]
+mod benchmarks {
+    use super::*;
 
-fn add_requests_next_block<T: Config>(i: u32) -> Result<(), &'static str> {
-    for _ in 0..i {
-        let salt: H256 = H256([0; 32]);
-        let request_id = RequestIdProvider::<T>::mutate(|next_request_id| {
-            core::mem::replace(next_request_id, next_request_id.saturating_add(1))
-        });
-        RequestsIds::<T>::insert(request_id, ());
-        RequestsReadyAtNextBlock::<T>::append(Request { request_id, salt });
+    fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
+        frame_system::Pallet::<T>::assert_has_event(generic_event.into());
     }
-    Ok(())
-}
 
-fn add_requests_next_epoch<T: Config>(i: u32) -> Result<(), &'static str> {
-    for _ in 0..i {
-        let salt: H256 = H256([0; 32]);
-        let request_id = RequestIdProvider::<T>::mutate(|next_request_id| {
-            core::mem::replace(next_request_id, next_request_id.saturating_add(1))
-        });
-        RequestsIds::<T>::insert(request_id, ());
-        RequestsReadyAtEpoch::<T>::append(
-            T::GetCurrentEpochIndex::get(),
-            Request { request_id, salt },
-        );
+    fn add_requests_next_block<T: Config>(i: u32) -> Result<(), &'static str> {
+        for _ in 0..i {
+            let salt: H256 = H256([0; 32]);
+            let request_id = RequestIdProvider::<T>::mutate(|next_request_id| {
+                core::mem::replace(next_request_id, next_request_id.saturating_add(1))
+            });
+            RequestsIds::<T>::insert(request_id, ());
+            RequestsReadyAtNextBlock::<T>::append(Request { request_id, salt });
+        }
+        Ok(())
     }
-    Ok(())
-}
 
-benchmarks! {
-    where_clause { where
-        T: pallet_balances::Config,
-        T::Balance: From<u64>,
-        <T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance>,
-        BlockNumberFor<T>: From<u32>,
+    fn add_requests_next_epoch<T: Config>(i: u32) -> Result<(), &'static str> {
+        for _ in 0..i {
+            let salt: H256 = H256([0; 32]);
+            let request_id = RequestIdProvider::<T>::mutate(|next_request_id| {
+                core::mem::replace(next_request_id, next_request_id.saturating_add(1))
+            });
+            RequestsIds::<T>::insert(request_id, ());
+            RequestsReadyAtEpoch::<T>::append(
+                T::GetCurrentEpochIndex::get(),
+                Request { request_id, salt },
+            );
+        }
+        Ok(())
     }
-    request {
+
+    #[benchmark]
+    fn request() {
         // Get account
         let caller: T::AccountId = whitelisted_caller();
-        let caller_origin: <T as frame_system::Config>::RuntimeOrigin =
-            RawOrigin::Signed(caller.clone()).into();
 
         // Provide deposit
         let existential_deposit = T::ExistentialDeposit::get();
@@ -81,36 +84,71 @@ benchmarks! {
         // Set randomness parameters
         let random = RandomnessType::RandomnessFromOneEpochAgo;
         let salt: H256 = H256([1; 32]);
-    }: _<T::RuntimeOrigin>(caller_origin.clone(), random, salt)
-    verify {
+
+        #[extrinsic_call]
+        _(RawOrigin::Signed(caller), random, salt);
+
         let request_id = RequestIdProvider::<T>::get() - 1;
-        assert_has_event::<T>(Event::RequestedRandomness {
-              request_id, salt, r#type: random }.into() );
+        assert_has_event::<T>(
+            Event::RequestedRandomness {
+                request_id,
+                salt,
+                r#type: random,
+            }
+            .into(),
+        );
     }
-    on_initialize {
-        let i in 1 .. T::MaxRequests::get() => add_requests_next_block::<T>(i)?;
+
+    #[benchmark]
+    fn on_initialize(i: Linear<1, { T::MaxRequests::get() }>) -> Result<(), BenchmarkError> {
+        add_requests_next_block::<T>(i)?;
         ensure!(RequestsIds::<T>::count() == i, "List not filled properly.");
-        ensure!(RequestsReadyAtNextBlock::<T>::get().len() == i as usize, "List not filled properly.");
+        ensure!(
+            RequestsReadyAtNextBlock::<T>::get().len() == i as usize,
+            "List not filled properly."
+        );
         let next_epoch_hook_in = NexEpochHookIn::<T>::mutate(|next_in| {
             core::mem::replace(next_in, next_in.saturating_sub(1))
         });
         ensure!(next_epoch_hook_in != 1, "Will be next epoch.");
-    }: { Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); }
-    verify {
+
+        #[block]
+        {
+            Pallet::<T>::on_initialize(BlockNumberFor::<T>::one());
+        }
+
         ensure!(RequestsIds::<T>::count() == 0, "List not processed.");
-        ensure!(RequestsReadyAtNextBlock::<T>::get().is_empty(), "List not processed.");
+        ensure!(
+            RequestsReadyAtNextBlock::<T>::get().is_empty(),
+            "List not processed."
+        );
+        Ok(())
     }
-    on_initialize_epoch {
-        let i in 1 .. T::MaxRequests::get() => add_requests_next_epoch::<T>(i)?;
-        ensure!(RequestsReadyAtNextBlock::<T>::get().is_empty(), "List not filled properly.");
+
+    #[benchmark]
+    fn on_initialize_epoch(i: Linear<1, { T::MaxRequests::get() }>) -> Result<(), BenchmarkError> {
+        add_requests_next_epoch::<T>(i)?;
+        ensure!(
+            RequestsReadyAtNextBlock::<T>::get().is_empty(),
+            "List not filled properly."
+        );
         ensure!(RequestsIds::<T>::count() == i, "List not filled properly.");
-        ensure!(RequestsReadyAtEpoch::<T>::get(T::GetCurrentEpochIndex::get()).len() == i as usize, "List not filled properly.");
-        let next_epoch_hook_in = NexEpochHookIn::<T>::mutate(|next_in| {
-            core::mem::replace(next_in, 1)
-        });
-    }: { Pallet::<T>::on_initialize(1.into()); }
-    verify {
+        ensure!(
+            RequestsReadyAtEpoch::<T>::get(T::GetCurrentEpochIndex::get()).len() == i as usize,
+            "List not filled properly."
+        );
+        NexEpochHookIn::<T>::mutate(|next_in| core::mem::replace(next_in, 1));
+
+        #[block]
+        {
+            Pallet::<T>::on_initialize(1.into());
+        }
+
         ensure!(RequestsIds::<T>::count() == 0, "List not processed.");
-        ensure!(RequestsReadyAtEpoch::<T>::get(T::GetCurrentEpochIndex::get()).is_empty(), "List not processed properly.");
+        ensure!(
+            RequestsReadyAtEpoch::<T>::get(T::GetCurrentEpochIndex::get()).is_empty(),
+            "List not processed properly."
+        );
+        Ok(())
     }
 }
diff --git a/pallets/quota/src/benchmarking.rs b/pallets/quota/src/benchmarking.rs
index bae829e73..834268d9c 100644
--- a/pallets/quota/src/benchmarking.rs
+++ b/pallets/quota/src/benchmarking.rs
@@ -17,21 +17,25 @@
 #![cfg(feature = "runtime-benchmarks")]
 
 use super::*;
-use frame_benchmarking::{account, benchmarks};
+use frame_benchmarking::account;
+use frame_benchmarking::v2::*;
 use sp_runtime::traits::One;
 
 fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
     frame_system::Pallet::<T>::assert_has_event(generic_event.into());
 }
 
-benchmarks! {
-    where_clause {
+#[benchmarks(
         where
             IdtyId<T>: From<u32>,
             BalanceOf<T>: From<u64>,
             T::AccountId: From<[u8; 32]>,
-    }
-    queue_refund {
+)]
+mod benchmarks {
+    use super::*;
+
+    #[benchmark]
+    fn queue_refund() {
         let account: T::AccountId = account("Alice", 1, 1);
         let dummy_refund = Refund {
             account: account.clone(),
@@ -44,15 +48,21 @@ benchmarks! {
             amount: 10u64.into(),
         };
         // Complexity is bound to MAX_QUEUD_REFUNDS where an insertion is O(n-1)
-        for i in 0..MAX_QUEUED_REFUNDS-1 {
+        for _ in 0..MAX_QUEUED_REFUNDS - 1 {
             Pallet::<T>::queue_refund(dummy_refund.clone())
         }
-    }: { Pallet::<T>::queue_refund(refund.clone()) }
-    verify {
+
+        #[block]
+        {
+            Pallet::<T>::queue_refund(refund.clone());
+        }
+
         assert_eq!(RefundQueue::<T>::get().last(), Some(refund).as_ref());
         assert_eq!(RefundQueue::<T>::get().len() as u32, MAX_QUEUED_REFUNDS);
     }
-    spend_quota {
+
+    #[benchmark]
+    fn spend_quota() {
         let idty_id: IdtyId<T> = 1u32.into();
         let amount = 2u64;
         let quota_amount = 10u64;
@@ -63,15 +73,23 @@ benchmarks! {
                 amount: quota_amount.into(),
             },
         );
-    }: { Pallet::<T>::spend_quota(idty_id, amount.into()) }
-    verify {
-        let quota_growth = sp_runtime::Perbill::from_rational(
-            BlockNumberFor::<T>::one(),
-            T::ReloadRate::get(),
-        ).mul_floor(T::MaxQuota::get());
-        assert_eq!(IdtyQuota::<T>::get(idty_id).unwrap().amount,  quota_growth +quota_amount.into() - amount.into());
+
+        #[block]
+        {
+            Pallet::<T>::spend_quota(idty_id, amount.into());
+        }
+
+        let quota_growth =
+            sp_runtime::Perbill::from_rational(BlockNumberFor::<T>::one(), T::ReloadRate::get())
+                .mul_floor(T::MaxQuota::get());
+        assert_eq!(
+            IdtyQuota::<T>::get(idty_id).unwrap().amount,
+            quota_growth + quota_amount.into() - amount.into()
+        );
     }
-    try_refund {
+
+    #[benchmark]
+    fn try_refund() {
         let account: T::AccountId = account("Alice", 1, 1);
         let idty_id: IdtyId<T> = 1u32.into();
         IdtyQuota::<T>::insert(
@@ -81,9 +99,7 @@ benchmarks! {
                 amount: 10u64.into(),
             },
         );
-        let _ = CurrencyOf::<T>:: make_free_balance_be(
-                &T::RefundAccount::get(),u32::MAX.into(),
-            );
+        let _ = CurrencyOf::<T>::make_free_balance_be(&T::RefundAccount::get(), u32::MAX.into());
         // The worst-case scenario is when the refund fails
         // and can only be triggered if the account is dead,
         // in this case by having no balance in the account.
@@ -92,15 +108,19 @@ benchmarks! {
             identity: 1u32.into(),
             amount: 10u64.into(),
         };
-    }: { Pallet::<T>::try_refund(refund) }
-    verify {
-        assert_has_event::<T>(Event::<T>::RefundFailed ( account ).into());
+
+        #[block]
+        {
+            Pallet::<T>::try_refund(refund);
+        }
+
+        assert_has_event::<T>(Event::<T>::RefundFailed(account).into());
     }
-    do_refund {
+
+    #[benchmark]
+    fn do_refund() {
         let account: T::AccountId = account("Alice", 1, 1);
-        let _ = CurrencyOf::<T>:: make_free_balance_be(
-                &T::RefundAccount::get(),u32::MAX.into(),
-            );
+        let _ = CurrencyOf::<T>::make_free_balance_be(&T::RefundAccount::get(), u32::MAX.into());
         // The worst-case scenario is when the refund fails
         // and can only be triggered if the account is dead,
         // in this case by having no balance in the account.
@@ -109,19 +129,30 @@ benchmarks! {
             identity: 1u32.into(),
             amount: 10u64.into(),
         };
-    }: { Pallet::<T>::try_refund(refund) }
-    verify {
-        assert_has_event::<T>(Event::<T>::RefundFailed ( account ).into());
+
+        #[block]
+        {
+            Pallet::<T>::try_refund(refund);
+        }
+
+        assert_has_event::<T>(Event::<T>::RefundFailed(account).into());
     }
-    // The base weight consumed on processing refund queue when empty.
-    on_process_refund_queue {
+
+    #[benchmark]
+    fn on_process_refund_queue() {
+        // The base weight consumed on processing refund queue when empty.
         assert_eq!(RefundQueue::<T>::get().len() as u32, 0);
-    }: { Pallet::<T>::process_refund_queue(Weight::MAX) }
-    // The weight consumed on processing refund queue with one element.
-    // Can deduce the process_refund_queue overhead by subtracting try_refund weight.
-    #[pov_mode = Measured]
-    on_process_refund_queue_elements {
-        let i in 1..MAX_QUEUED_REFUNDS;
+
+        #[block]
+        {
+            Pallet::<T>::process_refund_queue(Weight::MAX);
+        }
+    }
+
+    #[benchmark]
+    fn on_process_refund_queue_elements(i: Linear<1, MAX_QUEUED_REFUNDS>) {
+        // The weight consumed on processing refund queue with one element.
+        // Can deduce the process_refund_queue overhead by subtracting try_refund weight.
         let account: T::AccountId = account("Alice", 1, 1);
         let idty_id: IdtyId<T> = 1u32.into();
         IdtyQuota::<T>::insert(
@@ -131,9 +162,7 @@ benchmarks! {
                 amount: 10u64.into(),
             },
         );
-        let _ = CurrencyOf::<T>:: make_free_balance_be(
-                &T::RefundAccount::get(),u32::MAX.into(),
-            );
+        let _ = CurrencyOf::<T>::make_free_balance_be(&T::RefundAccount::get(), u32::MAX.into());
         // The worst-case scenario is when the refund fails
         // and can only be triggered if the account is dead,
         // in this case by having no balance in the account.
@@ -146,10 +175,21 @@ benchmarks! {
             Pallet::<T>::queue_refund(refund.clone());
         }
         assert_eq!(RefundQueue::<T>::get().len() as u32, i);
-    }: { Pallet::<T>::process_refund_queue(Weight::MAX) }
-    verify {
+
+        #[block]
+        {
+            Pallet::<T>::process_refund_queue(Weight::MAX);
+        }
+
         assert_eq!(RefundQueue::<T>::get().len() as u32, 0);
-        assert_has_event::<T>(Event::<T>::RefundFailed ( account ).into());
+        assert_has_event::<T>(Event::<T>::RefundFailed(account).into());
     }
-    impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(crate::mock::QuotaConfig{identities: vec![1, 2]}), crate::mock::Test);
+
+    impl_benchmark_test_suite!(
+        Pallet,
+        crate::mock::new_test_ext(crate::mock::QuotaConfig {
+            identities: vec![1, 2]
+        }),
+        crate::mock::Test
+    );
 }
-- 
GitLab