pallet_session_validator_management_benchmarking/
lib.rs1#![cfg_attr(not(feature = "std"), no_std)]
2#![cfg(any(feature = "runtime-benchmarks", test))]
3
4#[cfg(test)]
5mod mock;
6
7use frame_benchmarking::v2::*;
8use frame_support::BoundedVec;
9use frame_system::Pallet as System;
10use frame_system::RawOrigin;
11use pallet_aura::Pallet as Aura;
12use pallet_session_validator_management::Pallet as SessionCommitteeManagement;
13use parity_scale_codec::Encode;
14use sp_core::Get;
15use sp_runtime::traits::One;
16use sp_runtime::{Digest, DigestItem};
17use sp_std::{vec, vec::Vec};
18
19const SEED: u32 = 0;
20pub const SLOTS_PER_EPOCH: u32 = 60;
21
22pub trait Config: pallet_session_validator_management::Config + pallet_aura::Config {}
23pub struct Pallet<T: Config>(SessionCommitteeManagement<T>);
24
25fn set_epoch_number<T: Config>(epoch: u64) {
26 let slot = epoch * (SLOTS_PER_EPOCH as u64);
27
28 let pre_runtime_digest = Digest {
29 logs: vec![DigestItem::PreRuntime(sp_consensus_aura::AURA_ENGINE_ID, slot.encode())],
30 };
31 let block_number = System::<T>::block_number() + One::one();
32 System::<T>::initialize(&block_number, &System::<T>::parent_hash(), &pre_runtime_digest);
33 use frame_support::traits::OnInitialize;
34 Aura::<T>::on_initialize(block_number);
35
36 assert_eq!(T::current_epoch_number(), epoch.into());
37}
38
39use pallet_session_validator_management::Call;
40#[benchmarks(where <T as pallet_session_validator_management::Config>::CommitteeMember: From<(<T as pallet_session_validator_management::Config>::AuthorityId, <T as pallet_session_validator_management::Config>::AuthorityKeys)>)]
41pub mod benchmarks {
42 use super::*;
43
44 #[benchmark]
48 fn set(v: Linear<0, { T::MaxValidators::get() }>)
49 where
50 <T as pallet_session_validator_management::Config>::ScEpochNumber: From<ScEpochNumber>,
51 {
52 let validators: Vec<(
53 <T as pallet_session_validator_management::Config>::AuthorityId,
54 T::AuthorityKeys,
55 )> = (0..v)
56 .map(|i| {
57 (
58 account::<<T as pallet_session_validator_management::Config>::AuthorityId>(
59 "member", i, SEED,
60 ),
61 account::<<T as pallet_session_validator_management::Config>::AuthorityKeys>(
63 "member", i, SEED,
64 ),
65 )
66 })
67 .collect();
68 let validators: BoundedVec<
69 <T as pallet_session_validator_management::Config>::CommitteeMember,
70 T::MaxValidators,
71 > = BoundedVec::truncate_from(validators.into_iter().map(|member| member.into()).collect());
72
73 let for_epoch_number = T::current_epoch_number() + One::one();
74 set_epoch_number::<T>(for_epoch_number.into());
75
76 #[extrinsic_call]
77 _(RawOrigin::None, validators, for_epoch_number, Default::default());
78 }
79
80 impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(), crate::mock::Test);
81}