1234567891011121314151617#![cfg(feature = "runtime-benchmarks")]1819use super::*;20use crate::Pallet as PromototionPallet;2122use sp_runtime::traits::Bounded;23use sp_std::vec;2425use frame_benchmarking::{benchmarks, account};26use frame_support::traits::OnInitialize;27use frame_system::{Origin, RawOrigin};28use pallet_unique::benchmarking::create_nft_collection;29use pallet_evm_migration::Pallet as EvmMigrationPallet;3031const SEED: u32 = 0;3233fn set_admin<T>() -> DispatchResult34where35 T: Config + pallet_unique::Config + pallet_evm_migration::Config,36 T::BlockNumber: From<u32> + Into<u32>,37 <<T as Config>::Currency as Currency<T::AccountId>>::Balance: Sum + From<u128>,38{39 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);4041 <T as Config>::Currency::make_free_balance_be(42 &pallet_admin,43 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),44 );4546 PromototionPallet::<T>::set_admin_address(47 RawOrigin::Root.into(),48 T::CrossAccountId::from_sub(pallet_admin.clone()),49 )50}5152benchmarks! {53 where_clause{54 where T: Config + pallet_unique::Config + pallet_evm_migration::Config ,55 T::BlockNumber: From<u32> + Into<u32>,56 <<T as Config>::Currency as Currency<T::AccountId>>::Balance: Sum + From<u128>57 }5859 on_initialize {60 let b in 0..PENDING_LIMIT_PER_BLOCK;61 set_admin::<T>()?;6263 (0..b).try_for_each(|index| {64 let staker = account::<T::AccountId>("staker", index, SEED);65 <T as Config>::Currency::make_free_balance_be(&staker, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());66 PromototionPallet::<T>::stake(RawOrigin::Signed(staker.clone()).into(), Into::<BalanceOf<T>>::into(100u128) * T::Nominal::get())?;67 PromototionPallet::<T>::unstake(RawOrigin::Signed(staker.clone()).into()).map_err(|e| e.error)?;68 Result::<(), sp_runtime::DispatchError>::Ok(())69 })?;70 let block_number = <frame_system::Pallet<T>>::current_block_number() + T::PendingInterval::get();71 }: {PromototionPallet::<T>::on_initialize(block_number)}7273 set_admin_address {74 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);75 let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());76 } : {PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin))?}7778 payout_stakers{79 let b in 1..101;8081 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);82 let share = Perbill::from_rational(1u32, 20);83 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;84 <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());8586 let staker: T::AccountId = account("caller", 0, SEED);87 <T as Config>::Currency::make_free_balance_be(&staker, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());88 let stakers: Vec<T::AccountId> = (0..b).map(|index| account("staker", index, SEED)).collect();89 stakers.iter().for_each(|staker| {90 <T as Config>::Currency::make_free_balance_be(&staker, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());91 });92 (0..10).try_for_each(|_| {93 stakers.iter()94 .map(|staker| {9596 PromototionPallet::<T>::stake(RawOrigin::Signed(staker.clone()).into(), Into::<BalanceOf<T>>::into(100u128) * T::Nominal::get())97 }).collect::<Result<Vec<_>, _>>()?;98 <frame_system::Pallet<T>>::finalize();99 Result::<(), sp_runtime::DispatchError>::Ok(())100 })?;101102 103 104 } : {PromototionPallet::<T>::payout_stakers(RawOrigin::Signed(pallet_admin.clone()).into(), Some(b as u8))?}105106 stake {107 let caller = account::<T::AccountId>("caller", 0, SEED);108 let share = Perbill::from_rational(1u32, 10);109 let _ = <T as Config>::Currency::make_free_balance_be(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());110 } : {PromototionPallet::<T>::stake(RawOrigin::Signed(caller.clone()).into(), share * <T as Config>::Currency::total_balance(&caller))?}111112 unstake {113 let caller = account::<T::AccountId>("caller", 0, SEED);114 let share = Perbill::from_rational(1u32, 20);115 let _ = <T as Config>::Currency::make_free_balance_be(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());116 (0..10).map(|_| {117 <frame_system::Pallet<T>>::finalize();118 PromototionPallet::<T>::stake(RawOrigin::Signed(caller.clone()).into(), share * <T as Config>::Currency::total_balance(&caller))119 }).collect::<Result<Vec<_>, _>>()?;120121 } : {PromototionPallet::<T>::unstake(RawOrigin::Signed(caller.clone()).into())?}122123 124 125 126 127 128 129 130 131132 sponsor_collection {133 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);134 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;135 let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());136 let caller: T::AccountId = account("caller", 0, SEED);137 let _ = <T as Config>::Currency::make_free_balance_be(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());138 let collection = create_nft_collection::<T>(caller.clone())?;139 } : {PromototionPallet::<T>::sponsor_collection(RawOrigin::Signed(pallet_admin.clone()).into(), collection)?}140141 stop_sponsoring_collection {142 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);143 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;144 let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());145 let caller: T::AccountId = account("caller", 0, SEED);146 let _ = <T as Config>::Currency::make_free_balance_be(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());147 let collection = create_nft_collection::<T>(caller.clone())?;148 PromototionPallet::<T>::sponsor_collection(RawOrigin::Signed(pallet_admin.clone()).into(), collection)?;149 } : {PromototionPallet::<T>::stop_sponsoring_collection(RawOrigin::Signed(pallet_admin.clone()).into(), collection)?}150151 sponsor_contract {152 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);153 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;154155 let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());156 let address = H160::from_low_u64_be(SEED as u64);157 let data: Vec<u8> = (0..20 as u8).collect();158 <EvmMigrationPallet<T>>::begin(RawOrigin::Root.into(), address)?;159 <EvmMigrationPallet<T>>::finish(RawOrigin::Root.into(), address, data)?;160 } : {PromototionPallet::<T>::sponsor_conract(RawOrigin::Signed(pallet_admin.clone()).into(), address)?}161162 stop_sponsoring_contract {163 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);164 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;165166 let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());167 let address = H160::from_low_u64_be(SEED as u64);168 let data: Vec<u8> = (0..20 as u8).collect();169 <EvmMigrationPallet<T>>::begin(RawOrigin::Root.into(), address)?;170 <EvmMigrationPallet<T>>::finish(RawOrigin::Root.into(), address, data)?;171 PromototionPallet::<T>::sponsor_conract(RawOrigin::Signed(pallet_admin.clone()).into(), address)?;172 } : {PromototionPallet::<T>::stop_sponsoring_contract(RawOrigin::Signed(pallet_admin.clone()).into(), address)?}173}