git.delta.rocks / unique-network / refs/commits / fa5b8f114031

difftreelog

source

pallets/common/src/benchmarking.rs2.8 KiBsourcehistory
1use sp_std::vec::Vec;2use crate::{Config, CollectionHandle};3use up_data_structs::{4	CollectionMode, Collection, CollectionId, MAX_COLLECTION_NAME_LENGTH,5	MAX_COLLECTION_DESCRIPTION_LENGTH, MAX_TOKEN_PREFIX_LENGTH, OFFCHAIN_SCHEMA_LIMIT,6	VARIABLE_ON_CHAIN_SCHEMA_LIMIT, CONST_ON_CHAIN_SCHEMA_LIMIT,7};8use frame_support::traits::{Currency, Get};9use core::convert::TryInto;10use sp_runtime::DispatchError;1112pub fn create_data(size: usize) -> Vec<u8> {13	(0..size).map(|v| (v & 0xff) as u8).collect()14}15pub fn create_u16_data(size: usize) -> Vec<u16> {16	(0..size).map(|v| (v & 0xffff) as u16).collect()17}1819pub fn create_collection_raw<T: Config, R>(20	owner: T::AccountId,21	mode: CollectionMode,22	handler: impl FnOnce(Collection<T::AccountId>) -> Result<CollectionId, DispatchError>,23	cast: impl FnOnce(CollectionHandle<T>) -> R,24) -> Result<R, DispatchError> {25	T::Currency::deposit_creating(&owner, T::CollectionCreationPrice::get());26	let name = create_u16_data(MAX_COLLECTION_NAME_LENGTH)27		.try_into()28		.unwrap();29	let description = create_u16_data(MAX_COLLECTION_DESCRIPTION_LENGTH)30		.try_into()31		.unwrap();32	let token_prefix = create_data(MAX_TOKEN_PREFIX_LENGTH).try_into().unwrap();33	let offchain_schema = create_data(OFFCHAIN_SCHEMA_LIMIT as usize)34		.try_into()35		.unwrap();36	let variable_on_chain_schema = create_data(VARIABLE_ON_CHAIN_SCHEMA_LIMIT as usize)37		.try_into()38		.unwrap();39	let const_on_chain_schema = create_data(CONST_ON_CHAIN_SCHEMA_LIMIT as usize)40		.try_into()41		.unwrap();42	handler(Collection {43		owner,44		mode,45		access: Default::default(),46		name,47		description,48		token_prefix,49		mint_mode: true,50		offchain_schema,51		schema_version: Default::default(),52		sponsorship: Default::default(),53		limits: Default::default(),54		variable_on_chain_schema,55		const_on_chain_schema,56		meta_update_permission: Default::default(),57		transfers_enabled: true,58	})59	.and_then(CollectionHandle::try_get)60	.map(cast)61}6263#[macro_export]64macro_rules! bench_init {65	($name:ident: sub $(($id:expr))?; $($rest:tt)*) => {66		let $name: T::AccountId = account(stringify!($name), 0 $(+ $id)?, SEED);67		bench_init!($($rest)*);68	};69	($name:ident: collection($owner:ident); $($rest:tt)*) => {70		let $name = create_collection::<T>($owner.clone())?;71		bench_init!($($rest)*);72	};73	($name:ident: cross; $($rest:tt)*) => {74		let $name = T::CrossAccountId::from_sub($name);75		bench_init!($($rest)*);76	};77	($name:ident: cross_sub $(($id:expr))?; $($rest:tt)*) => {78		let account: T::AccountId = account(stringify!($name), 0 $(+ $id)?, SEED);79		let $name = T::CrossAccountId::from_sub(account);80		bench_init!($($rest)*);81	};82	($name:ident: cross_from_sub; $($rest:tt)*) => {83		let $name = T::CrossAccountId::from_sub($name);84		bench_init!($($rest)*);85	};86	($name:ident: cross_from_sub($from:ident); $($rest:tt)*) => {87		let $name = T::CrossAccountId::from_sub($from);88		bench_init!($($rest)*);89	};90	() => {}91}