//! Benchmarking setup for pezpallet-validator-pool use super::*; use pezframe_benchmarking::v2::*; use pezframe_system::{pezpallet_prelude::BlockNumberFor, RawOrigin}; use pezsp_std::vec; #[benchmarks] mod benchmarks { use super::*; #[benchmark] fn join_validator_pool() { let caller: T::AccountId = whitelisted_caller(); let category = ValidatorPoolCategory::StakeValidator { min_stake: T::MinStakeAmount::get(), trust_threshold: 100u128, // Low threshold for benchmarking }; #[extrinsic_call] _(RawOrigin::Signed(caller.clone()), category.clone()); // Verify the validator was added assert!(PoolMembers::::contains_key(&caller)); assert!(PerformanceMetrics::::contains_key(&caller)); } #[benchmark] fn leave_validator_pool() { let caller: T::AccountId = whitelisted_caller(); let category = ValidatorPoolCategory::StakeValidator { min_stake: T::MinStakeAmount::get(), trust_threshold: 100u128, }; PoolMembers::::insert(&caller, &category); PoolSize::::put(1u32); PerformanceMetrics::::insert(&caller, ValidatorPerformance::default()); #[extrinsic_call] _(RawOrigin::Signed(caller.clone())); // Verify the validator was removed assert!(!PoolMembers::::contains_key(&caller)); assert!(!PerformanceMetrics::::contains_key(&caller)); } #[benchmark] fn update_performance_metrics() { let validator: T::AccountId = whitelisted_caller(); PerformanceMetrics::::insert(&validator, ValidatorPerformance::default()); #[extrinsic_call] _( RawOrigin::Root, validator.clone(), 100u32, // blocks_produced 10u32, // blocks_missed 500u32, // era_points ); // Verify metrics were updated let metrics = PerformanceMetrics::::get(&validator); assert_eq!(metrics.blocks_produced, 100); } #[benchmark] fn force_new_era(p: Linear<4, 100>, // Pool size ) { // Add validators to pool for i in 0..p { let validator: T::AccountId = account("validator", i, 0); let category = match i % 3 { 0 => ValidatorPoolCategory::StakeValidator { min_stake: T::MinStakeAmount::get(), trust_threshold: 100u128, }, 1 => ValidatorPoolCategory::ParliamentaryValidator, _ => ValidatorPoolCategory::MeritValidator { special_tikis: vec![1u8].try_into().unwrap(), community_threshold: 100u32, }, }; PoolMembers::::insert(&validator, &category); let performance = ValidatorPerformance { blocks_produced: 90, blocks_missed: 10, era_points: 500, last_active_era: 0, reputation_score: 90, }; PerformanceMetrics::::insert(&validator, performance); } PoolSize::::put(p); EraLength::::put(BlockNumberFor::::from(100u32)); #[extrinsic_call] _(RawOrigin::Root); // Verify new era was created assert_eq!(CurrentEra::::get(), 1); assert!(CurrentValidatorSet::::get().is_some()); } #[benchmark] fn update_category() { let caller: T::AccountId = whitelisted_caller(); let initial_category = ValidatorPoolCategory::StakeValidator { min_stake: T::MinStakeAmount::get(), trust_threshold: 100u128, }; PoolMembers::::insert(&caller, &initial_category); let new_category = ValidatorPoolCategory::ParliamentaryValidator; #[extrinsic_call] _(RawOrigin::Signed(caller.clone()), new_category.clone()); // Verify category was updated assert_eq!(PoolMembers::::get(&caller).unwrap(), new_category); } #[benchmark] fn set_pool_parameters() { let new_era_length = BlockNumberFor::::from(200u32); #[extrinsic_call] _(RawOrigin::Root, new_era_length); // Verify parameters were updated assert_eq!(EraLength::::get(), new_era_length); } impl_benchmark_test_suite!(Pezpallet, crate::mock::new_test_ext(), crate::mock::Test); }