#![cfg(feature = "runtime-benchmarks")] use super::*; use frame_benchmarking::v1::*; use frame_system::RawOrigin; use frame_support::traits::fungible::Inspect; pub fn create_account<T: Config>() -> T::AccountId { let account_bytes = Vec::from([1u8; 32]); T::AccountId::decode(&mut &account_bytes[0..32]) .expect("32 bytes always construct an AccountId32") } benchmarks! { slow_clap { let minimum_balance = <<T as pallet::Config>::Currency>::minimum_balance(); let receiver = create_account::<T>(); let amount = minimum_balance + minimum_balance; let network_id = NetworkIdOf::<T>::default(); let session_index = T::ValidatorSet::session_index(); let authorities = vec![T::AuthorityId::generate_pair(None)]; let bounded_authorities = WeakBoundedVec::<_, T::MaxAuthorities>::try_from(authorities.clone()) .map_err(|()| "more than the maximum number of keys provided")?; Authorities::<T>::set(&session_index, bounded_authorities); let clap = Clap { session_index: 0, authority_index: 0, transaction_hash: H256::repeat_byte(1u8), block_number: 69, removed: false, network_id, receiver: receiver.clone(), amount, }; let authority_id = authorities .get(0usize) .expect("first authority should exist"); let encoded_clap = clap.encode(); let signature = authority_id.sign(&encoded_clap) .ok_or("couldn't make signature")?; }: _(RawOrigin::None, clap, signature) verify { assert_eq!(<<T as pallet::Config>::Currency>::total_balance(&receiver), amount); } self_applause { let session_index = T::ValidatorSet::session_index(); let authorities = vec![T::AuthorityId::generate_pair(None)]; let bounded_authorities = WeakBoundedVec::<_, T::MaxAuthorities>::try_from(authorities.clone()) .map_err(|()| "more than the maximum number of keys provided")?; Authorities::<T>::set(&session_index, bounded_authorities); let minimum_balance = <<T as pallet::Config>::Currency>::minimum_balance(); let receiver = create_account::<T>(); let receiver_clone = receiver.clone(); let amount = minimum_balance + minimum_balance; let network_id = NetworkIdOf::<T>::default(); let transaction_hash = H256::repeat_byte(1u8); let unique_transaction_hash = <Pallet<T>>::generate_unique_hash( &receiver, &amount, &network_id, ); let storage_key = (session_index, &transaction_hash, &unique_transaction_hash); <Pallet::<T>>::trigger_nullification_for_benchmark(); let clap = Clap { session_index, authority_index: 0, transaction_hash, block_number: 69, removed: false, network_id, receiver: receiver.clone(), amount, }; let authority_id = authorities .get(0usize) .expect("first authority should exist"); let encoded_clap = clap.encode(); let signature = authority_id.sign(&encoded_clap).unwrap(); <Pallet<T>>::slow_clap(RawOrigin::None.into(), clap, signature)?; <Pallet::<T>>::trigger_nullification_for_benchmark(); assert_eq!(<<T as pallet::Config>::Currency>::total_balance(&receiver), Default::default()); assert_eq!(ApplausesForTransaction::<T>::get(&storage_key), false); }: _(RawOrigin::Signed(receiver_clone), network_id, session_index, transaction_hash, receiver_clone.clone(), amount) verify { assert_eq!(<<T as pallet::Config>::Currency>::total_balance(&receiver), amount); assert_eq!(ApplausesForTransaction::<T>::get(&storage_key), true); } impl_benchmark_test_suite!( Pallet, crate::mock::new_test_ext(), crate::mock::Runtime, ); }