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

difftreelog

source

pallets/foreign-assets/src/benchmarking.rs3.2 KiBsourcehistory
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617#![allow(missing_docs)]1819use frame_benchmarking::{account, v2::*};20use frame_support::traits::Currency;21use frame_system::RawOrigin;22use sp_std::{boxed::Box, vec, vec::Vec};23use staging_xcm::{opaque::latest::Junction::Parachain, v3::Junctions::X1, VersionedMultiLocation};2425use super::{Call, Config, Pallet};26use crate::AssetMetadata;2728fn bounded<T: TryFrom<Vec<u8>>>(slice: &[u8]) -> T {29	T::try_from(slice.to_vec())30		.map_err(|_| "slice doesn't fit")31		.unwrap()32}3334#[benchmarks]35mod benchmarks {36	use super::*;3738	#[benchmark]39	fn register_foreign_asset() -> Result<(), BenchmarkError> {40		let owner: T::AccountId = account("user", 0, 1);41		let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(1000)));42		let metadata: AssetMetadata<43			<<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance,44		> = AssetMetadata {45			name: bounded(b"name"),46			symbol: bounded(b"symbol"),47			decimals: 18,48			minimal_balance: 1u32.into(),49		};50		let mut balance: <<T as Config>::Currency as Currency<51			<T as frame_system::Config>::AccountId,52		>>::Balance = 4_000_000_000u32.into();53		balance = balance * balance;54		<T as Config>::Currency::make_free_balance_be(&owner, balance);5556		#[extrinsic_call]57		_(58			RawOrigin::Root,59			owner,60			Box::new(location),61			Box::new(metadata),62		);6364		Ok(())65	}6667	#[benchmark]68	fn update_foreign_asset() -> Result<(), BenchmarkError> {69		let owner: T::AccountId = account("user", 0, 1);70		let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(2000)));71		let metadata: AssetMetadata<72			<<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance,73		> = AssetMetadata {74			name: bounded(b"name"),75			symbol: bounded(b"symbol"),76			decimals: 18,77			minimal_balance: 1u32.into(),78		};79		let metadata2: AssetMetadata<80			<<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance,81		> = AssetMetadata {82			name: bounded(b"name2"),83			symbol: bounded(b"symbol2"),84			decimals: 18,85			minimal_balance: 1u32.into(),86		};87		let mut balance: <<T as Config>::Currency as Currency<88			<T as frame_system::Config>::AccountId,89		>>::Balance = 4_000_000_000u32.into();90		balance = balance * balance;91		<T as Config>::Currency::make_free_balance_be(&owner, balance);92		Pallet::<T>::register_foreign_asset(93			RawOrigin::Root.into(),94			owner,95			Box::new(location.clone()),96			Box::new(metadata),97		)?;9899		#[extrinsic_call]100		_(RawOrigin::Root, 0, Box::new(location), Box::new(metadata2));101102		Ok(())103	}104}