1234567891011121314151617#![allow(missing_docs)]1819use super::{Config, Pallet, Call};20use frame_benchmarking::{benchmarks, account};21use frame_system::RawOrigin;22use crate::AssetMetadata;23use xcm::opaque::latest::Junction::Parachain;24use xcm::VersionedMultiLocation;25use xcm::v3::Junctions::X1;26use frame_support::traits::Currency;27use sp_std::{vec::Vec, boxed::Box};2829fn bounded<T: TryFrom<Vec<u8>>>(slice: &[u8]) -> T {30 T::try_from(slice.to_vec())31 .map_err(|_| "slice doesn't fit")32 .unwrap()33}3435benchmarks! {36 register_foreign_asset {37 let owner: T::AccountId = account("user", 0, 1);38 let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(1000)));39 let metadata: AssetMetadata<<<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance> = AssetMetadata{40 name: bounded(b"name"),41 symbol: bounded(b"symbol"),42 decimals: 18,43 minimal_balance: 1u32.into()44 };45 let mut balance: <<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance =46 4_000_000_000u32.into();47 balance = balance * balance;48 <T as Config>::Currency::make_free_balance_be(&owner,49 balance);50 }: _(RawOrigin::Root, owner, Box::new(location), Box::new(metadata))5152 update_foreign_asset {53 let owner: T::AccountId = account("user", 0, 1);54 let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(2000)));55 let metadata: AssetMetadata<<<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance> = AssetMetadata{56 name: bounded(b"name"),57 symbol: bounded(b"symbol"),58 decimals: 18,59 minimal_balance: 1u32.into()60 };61 let metadata2: AssetMetadata<<<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance> = AssetMetadata{62 name: bounded(b"name2"),63 symbol: bounded(b"symbol2"),64 decimals: 18,65 minimal_balance: 1u32.into()66 };67 let mut balance: <<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance =68 4_000_000_000u32.into();69 balance = balance * balance;70 <T as Config>::Currency::make_free_balance_be(&owner, balance);71 Pallet::<T>::register_foreign_asset(RawOrigin::Root.into(), owner, Box::new(location.clone()), Box::new(metadata))?;72 }: _(RawOrigin::Root, 0, Box::new(location), Box::new(metadata2))73}