d23daa8f67
- Add NoterCheck trait: accounts with Noter tiki can submit receive_staking_details without root origin - Remove stake requirement from start_score_tracking (opt-in only, bot + noter submit data after event detection) - Add zero-stake cleanup: sending staked_amount=0 removes cached entry, cleans up StakingStartBlock when no stake remains - Add NotAuthorized error for non-noter signed callers - Configure TikiNoterChecker in people-pezkuwichain runtime - Update weights with detailed DB operation analysis - Bump People Chain spec_version to 1_020_007 - 49 unit tests (17 new E2E + edge cases), fmt/clippy clean
67 lines
1.5 KiB
Rust
67 lines
1.5 KiB
Rust
//! Benchmarking setup for pezpallet-staking-score
|
|
|
|
use crate::{
|
|
CachedStakingDetails, Call, Config, Pezpallet, StakingDetails, StakingSource,
|
|
StakingStartBlock, UNITS,
|
|
};
|
|
use pezframe_benchmarking::v2::*;
|
|
use pezframe_system::RawOrigin;
|
|
|
|
#[benchmarks]
|
|
mod benchmarks {
|
|
use super::*;
|
|
|
|
#[benchmark]
|
|
fn start_score_tracking() {
|
|
let caller: T::AccountId = whitelisted_caller();
|
|
|
|
// Ensure no prior tracking exists.
|
|
StakingStartBlock::<T>::remove(&caller);
|
|
|
|
// Pre-populate CachedStakingDetails for worst-case OnStakingUpdate callback.
|
|
CachedStakingDetails::<T>::insert(
|
|
&caller,
|
|
StakingSource::RelayChain,
|
|
StakingDetails {
|
|
staked_amount: (1000u128 * UNITS).into(),
|
|
nominations_count: 5,
|
|
unlocking_chunks_count: 2,
|
|
},
|
|
);
|
|
|
|
#[extrinsic_call]
|
|
_(RawOrigin::Signed(caller.clone()));
|
|
|
|
assert!(StakingStartBlock::<T>::get(&caller).is_some());
|
|
}
|
|
|
|
/// Benchmark worst case: root origin, non-zero stake insert.
|
|
#[benchmark]
|
|
fn receive_staking_details() {
|
|
let target: T::AccountId = whitelisted_caller();
|
|
|
|
// Pre-populate both sources for worst-case trust callback iteration.
|
|
CachedStakingDetails::<T>::insert(
|
|
&target,
|
|
StakingSource::AssetHub,
|
|
StakingDetails {
|
|
staked_amount: (200u128 * UNITS).into(),
|
|
nominations_count: 1,
|
|
unlocking_chunks_count: 0,
|
|
},
|
|
);
|
|
|
|
#[extrinsic_call]
|
|
_(
|
|
RawOrigin::Root,
|
|
target.clone(),
|
|
StakingSource::RelayChain,
|
|
(500u128 * UNITS).into(),
|
|
3u32,
|
|
0u32,
|
|
);
|
|
|
|
assert!(CachedStakingDetails::<T>::get(&target, StakingSource::RelayChain).is_some());
|
|
}
|
|
}
|