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};2627use frame_system::{Origin, RawOrigin};28use pallet_unique::benchmarking::create_nft_collection;29use pallet_evm_migration::Pallet as EvmMigrationPallet;3031const SEED: u32 = 0;3233benchmarks! {34 where_clause{35 where 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 4041 4243 44 45 4647 set_admin_address {48 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);49 let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());50 } : {PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin))?}5152 payout_stakers{53 let b in 1..101;5455 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);56 let share = Perbill::from_rational(1u32, 20);57 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;58 <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());5960 let staker: T::AccountId = account("caller", 0, SEED);61 <T as Config>::Currency::make_free_balance_be(&staker, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());62 let stakers: Vec<T::AccountId> = (0..b).map(|index| account("staker", index, SEED)).collect();63 stakers.iter().for_each(|staker| {64 <T as Config>::Currency::make_free_balance_be(&staker, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());65 });66 (0..10).try_for_each(|_| {67 stakers.iter()68 .map(|staker| {69 70 PromototionPallet::<T>::stake(RawOrigin::Signed(staker.clone()).into(), Into::<BalanceOf<T>>::into(100u128) * T::Nominal::get())71 }).collect::<Result<Vec<_>, _>>()?;72 <frame_system::Pallet<T>>::finalize();73 Result::<(), sp_runtime::DispatchError>::Ok(())74 })?;7576 77 78 } : {PromototionPallet::<T>::payout_stakers(RawOrigin::Signed(pallet_admin.clone()).into(), Some(b as u8))?}7980 stake {81 let caller = account::<T::AccountId>("caller", 0, SEED);82 let share = Perbill::from_rational(1u32, 10);83 let _ = <T as Config>::Currency::make_free_balance_be(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());84 } : {PromototionPallet::<T>::stake(RawOrigin::Signed(caller.clone()).into(), share * <T as Config>::Currency::total_balance(&caller))?}8586 unstake {87 let caller = account::<T::AccountId>("caller", 0, SEED);88 let share = Perbill::from_rational(1u32, 20);89 let _ = <T as Config>::Currency::make_free_balance_be(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());90 (0..10).map(|_| {91 <frame_system::Pallet<T>>::finalize();92 PromototionPallet::<T>::stake(RawOrigin::Signed(caller.clone()).into(), share * <T as Config>::Currency::total_balance(&caller))93 }).collect::<Result<Vec<_>, _>>()?;9495 } : {PromototionPallet::<T>::unstake(RawOrigin::Signed(caller.clone()).into())?}9697 98 99 100 101 102 103 104 105106 sponsor_collection {107 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);108 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;109 let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());110 let caller: T::AccountId = account("caller", 0, SEED);111 let _ = <T as Config>::Currency::make_free_balance_be(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());112 let collection = create_nft_collection::<T>(caller.clone())?;113 } : {PromototionPallet::<T>::sponsor_collection(RawOrigin::Signed(pallet_admin.clone()).into(), collection)?}114115 stop_sponsoring_collection {116 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);117 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;118 let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());119 let caller: T::AccountId = account("caller", 0, SEED);120 let _ = <T as Config>::Currency::make_free_balance_be(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());121 let collection = create_nft_collection::<T>(caller.clone())?;122 PromototionPallet::<T>::sponsor_collection(RawOrigin::Signed(pallet_admin.clone()).into(), collection)?;123 } : {PromototionPallet::<T>::stop_sponsoring_collection(RawOrigin::Signed(pallet_admin.clone()).into(), collection)?}124125 sponsor_contract {126 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);127 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;128129 let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());130 let address = H160::from_low_u64_be(SEED as u64);131 let data: Vec<u8> = (0..20 as u8).collect();132 <EvmMigrationPallet<T>>::begin(RawOrigin::Root.into(), address)?;133 <EvmMigrationPallet<T>>::finish(RawOrigin::Root.into(), address, data)?;134 } : {PromototionPallet::<T>::sponsor_conract(RawOrigin::Signed(pallet_admin.clone()).into(), address)?}135136 stop_sponsoring_contract {137 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);138 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;139140 let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());141 let address = H160::from_low_u64_be(SEED as u64);142 let data: Vec<u8> = (0..20 as u8).collect();143 <EvmMigrationPallet<T>>::begin(RawOrigin::Root.into(), address)?;144 <EvmMigrationPallet<T>>::finish(RawOrigin::Root.into(), address, data)?;145 PromototionPallet::<T>::sponsor_conract(RawOrigin::Signed(pallet_admin.clone()).into(), address)?;146 } : {PromototionPallet::<T>::stop_sponsoring_contract(RawOrigin::Signed(pallet_admin.clone()).into(), address)?}147}