1234567891011121314151617#![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}