From a6179b86a28f9e7c51acaf605872db00bb3985fc Mon Sep 17 00:00:00 2001 From: Dev Date: Mon, 12 Sep 2022 21:10:30 +0000 Subject: [PATCH] Foreign assets benchmark --- --- a/Makefile +++ b/Makefile @@ -128,5 +128,9 @@ bench-rmrk-equip: make _bench PALLET=proxy-rmrk-equip +.PHONY: bench-foreign-assets +bench-foreign-assets: + make _bench PALLET=foreign-assets + .PHONY: bench -bench: bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-scheduler bench-rmrk-core bench-rmrk-equip +bench: bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-scheduler bench-rmrk-core bench-rmrk-equip bench-foreign-assets --- a/pallets/foreign-assets/Cargo.toml +++ b/pallets/foreign-assets/Cargo.toml @@ -22,8 +22,7 @@ xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.27", default-features = false } #orml-tokens = { git = 'https://github.com/UniqueNetwork/open-runtime-module-library', branch = 'unique-polkadot-v0.9.24', version = "0.4.1-dev", default-features = false } orml-tokens = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.27", version = "0.4.1-dev", default-features = false } -#git = "https://github.com/open-web3-stack/open-runtime-module-library" -#branch = "polkadot-v0.9.27" +frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.27" } [dev-dependencies] serde_json = "1.0.68" @@ -51,3 +50,4 @@ "orml-tokens/std" ] try-runtime = ["frame-support/try-runtime"] +runtime-benchmarks = ['frame-benchmarking', 'pallet-common/runtime-benchmarks'] \ No newline at end of file --- /dev/null +++ b/pallets/foreign-assets/src/benchmarking.rs @@ -0,0 +1,76 @@ +// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. +// This file is part of Unique Network. + +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Unique Network is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Unique Network. If not, see . + +#![allow(missing_docs)] + +use super::{Config, Pallet}; +use frame_benchmarking::{benchmarks, account}; +use frame_system::RawOrigin; +use crate::AssetMetadata; +use crate::Pallet as ForeignAssets; +use xcm::opaque::latest::Junction::Parachain; +use xcm::VersionedMultiLocation; +use frame_support::{ + traits::{Currency}, +}; +use sp_std::boxed::Box; + +benchmarks! { + register_foreign_asset { + let origin: RawOrigin = frame_system::RawOrigin::Root; + let owner: T::AccountId = account("user", 0, 1); + let location: VersionedMultiLocation = VersionedMultiLocation::from(Parachain(1000).into()); + let metadata: AssetMetadata<<::Currency as Currency<::AccountId>>::Balance> = AssetMetadata{ + name: "name".into(), + symbol: "symbol".into(), + decimals: 18, + minimal_balance: 1u32.into() + }; + let mut balance: <::Currency as Currency<::AccountId>>::Balance = + 4_000_000_000u32.into(); + balance = balance * balance; + ::Currency::make_free_balance_be(&owner, + balance); + }: { + ForeignAssets::::register_foreign_asset(origin.into(), owner, Box::new(location), Box::new(metadata))? + } + + update_foreign_asset { + let origin: RawOrigin = frame_system::RawOrigin::Root; + let owner: T::AccountId = account("user", 0, 1); + let location: VersionedMultiLocation = VersionedMultiLocation::from(Parachain(2000).into()); + let metadata: AssetMetadata<<::Currency as Currency<::AccountId>>::Balance> = AssetMetadata{ + name: "name".into(), + symbol: "symbol".into(), + decimals: 18, + minimal_balance: 1u32.into() + }; + let metadata2: AssetMetadata<<::Currency as Currency<::AccountId>>::Balance> = AssetMetadata{ + name: "name2".into(), + symbol: "symbol2".into(), + decimals: 18, + minimal_balance: 1u32.into() + }; + let mut balance: <::Currency as Currency<::AccountId>>::Balance = + 4_000_000_000u32.into(); + balance = balance * balance; + ::Currency::make_free_balance_be(&owner, balance); + ForeignAssets::::register_foreign_asset(origin.clone().into(), owner, Box::new(location.clone()), Box::new(metadata))?; + + }: { + ForeignAssets::::update_foreign_asset(origin.into(), 0, Box::new(location), Box::new(metadata2))? + } +} --- a/pallets/foreign-assets/src/lib.rs +++ b/pallets/foreign-assets/src/lib.rs @@ -124,6 +124,9 @@ mod impl_fungibles; mod weights; +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; + pub use module::*; pub use weights::WeightInfo; @@ -303,7 +306,7 @@ let data: CreateCollectionData = CreateCollectionData { name: name.try_into().unwrap(), description: description.try_into().unwrap(), - mode: CollectionMode::Fungible(18), + mode: CollectionMode::Fungible(md.decimals), ..Default::default() }; --- a/runtime/common/runtime_apis.rs +++ b/runtime/common/runtime_apis.rs @@ -653,6 +653,10 @@ #[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))] list_benchmark!(list, extra, pallet_proxy_rmrk_equip, RmrkEquip); + #[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))] + list_benchmark!(list, extra, pallet_foreign_assets, ForeignAssets); + + // list_benchmark!(list, extra, pallet_evm_coder_substrate, EvmCoderSubstrate); let storage_info = AllPalletsReversedWithSystemFirst::storage_info(); @@ -708,6 +712,9 @@ #[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))] add_benchmark!(params, batches, pallet_proxy_rmrk_equip, RmrkEquip); + #[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))] + add_benchmark!(params, batches, pallet_foreign_assets, ForeignAssets); + // add_benchmark!(params, batches, pallet_evm_coder_substrate, EvmCoderSubstrate); if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) } --- a/runtime/opal/Cargo.toml +++ b/runtime/opal/Cargo.toml @@ -35,6 +35,7 @@ 'pallet-nonfungible/runtime-benchmarks', 'pallet-proxy-rmrk-core/runtime-benchmarks', 'pallet-proxy-rmrk-equip/runtime-benchmarks', + 'pallet-foreign-assets/runtime-benchmarks', 'pallet-unique/runtime-benchmarks', 'pallet-inflation/runtime-benchmarks', 'pallet-unique-scheduler/runtime-benchmarks', --- a/runtime/quartz/Cargo.toml +++ b/runtime/quartz/Cargo.toml @@ -36,6 +36,7 @@ 'pallet-proxy-rmrk-core/runtime-benchmarks', 'pallet-proxy-rmrk-equip/runtime-benchmarks', 'pallet-unique/runtime-benchmarks', + 'pallet-foreign-assets/runtime-benchmarks', 'pallet-inflation/runtime-benchmarks', 'pallet-unique-scheduler/runtime-benchmarks', 'pallet-xcm/runtime-benchmarks', --- a/runtime/unique/Cargo.toml +++ b/runtime/unique/Cargo.toml @@ -36,6 +36,7 @@ 'pallet-proxy-rmrk-core/runtime-benchmarks', 'pallet-proxy-rmrk-equip/runtime-benchmarks', 'pallet-unique/runtime-benchmarks', + 'pallet-foreign-assets/runtime-benchmarks', 'pallet-inflation/runtime-benchmarks', 'pallet-unique-scheduler/runtime-benchmarks', 'pallet-xcm/runtime-benchmarks', -- gitstuff