From 9643104d6dd07746cb82ba4597760fa7071d94d2 Mon Sep 17 00:00:00 2001 From: ferrell-code Date: Sun, 7 Nov 2021 17:01:06 -0500 Subject: [PATCH] Update Dex Benchmaking (#1588) * benches * compile * update * cargo run --release --color=never --bin=acala --features=runtime-benchmarks --features=with-karura-runtime -- benchmark --chain=karura-dev --steps=50 --repeat=20 --pallet=module_dex --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --template=./templates/runtime-weight-template.hbs --output=./runtime/karura/src/weights/ * update benchmark * cargo run --release --color=never --bin=acala --features=runtime-benchmarks --features=with-karura-runtime -- benchmark --chain=karura-dev --steps=50 --repeat=20 --pallet=module_dex --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --template=./templates/runtime-weight-template.hbs --output=./runtime/karura/src/weights/ * cargo run --release --color=never --bin=acala --features=runtime-benchmarks --features=with-mandala-runtime -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=module_dex --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --template=./templates/runtime-weight-template.hbs --output=./runtime/mandala/src/weights/ Co-authored-by: Acala Benchmarking Bot --- runtime/karura/src/weights/module_dex.rs | 50 ++++++------ runtime/mandala/src/benchmarking/dex.rs | 93 +++++++++++++++-------- runtime/mandala/src/weights/module_dex.rs | 60 ++++++++------- 3 files changed, 123 insertions(+), 80 deletions(-) diff --git a/runtime/karura/src/weights/module_dex.rs b/runtime/karura/src/weights/module_dex.rs index 5ff3d3b70f..03d4e65109 100644 --- a/runtime/karura/src/weights/module_dex.rs +++ b/runtime/karura/src/weights/module_dex.rs @@ -19,7 +19,7 @@ //! Autogenerated weights for module_dex //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2021-10-30, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2021-11-05, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("karura-dev"), DB CACHE: 128 // Executed Command: @@ -28,7 +28,7 @@ // --chain=karura-dev // --steps=50 // --repeat=20 -// --pallet=* +// --pallet=module_dex // --extrinsic=* // --execution=wasm // --wasm-execution=compiled @@ -48,72 +48,76 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl module_dex::WeightInfo for WeightInfo { fn enable_trading_pair() -> Weight { - (24_384_000 as Weight) + (26_202_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn disable_trading_pair() -> Weight { - (25_115_000 as Weight) + (26_691_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn list_provisioning() -> Weight { - (35_119_000 as Weight) + (36_301_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn update_provisioning_parameters() -> Weight { - (12_222_000 as Weight) + (12_660_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn end_provisioning() -> Weight { - (76_815_000 as Weight) + (78_179_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } fn add_provision() -> Weight { - (145_062_000 as Weight) + (147_431_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(5 as Weight)) } fn claim_dex_share() -> Weight { - (105_816_000 as Weight) + (105_966_000 as Weight) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(5 as Weight)) } fn add_liquidity() -> Weight { - (185_997_000 as Weight) + (186_551_000 as Weight) .saturating_add(T::DbWeight::get().reads(9 as Weight)) .saturating_add(T::DbWeight::get().writes(7 as Weight)) } fn add_liquidity_and_stake() -> Weight { - (261_424_000 as Weight) + (263_045_000 as Weight) .saturating_add(T::DbWeight::get().reads(12 as Weight)) .saturating_add(T::DbWeight::get().writes(10 as Weight)) } fn remove_liquidity() -> Weight { - (159_057_000 as Weight) + (162_302_000 as Weight) .saturating_add(T::DbWeight::get().reads(6 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } fn remove_liquidity_by_unstake() -> Weight { - (278_922_000 as Weight) + (280_899_000 as Weight) .saturating_add(T::DbWeight::get().reads(12 as Weight)) .saturating_add(T::DbWeight::get().writes(10 as Weight)) } fn swap_with_exact_supply(u: u32, ) -> Weight { - (103_618_000 as Weight) - // Standard Error: 1_130_000 - .saturating_add((9_605_000 as Weight).saturating_mul(u as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + (92_601_000 as Weight) + // Standard Error: 118_000 + .saturating_add((17_771_000 as Weight).saturating_mul(u as Weight)) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(u as Weight))) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(u as Weight))) } fn swap_with_exact_target(u: u32, ) -> Weight { - (103_842_000 as Weight) - // Standard Error: 1_219_000 - .saturating_add((9_514_000 as Weight).saturating_mul(u as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + (95_445_000 as Weight) + // Standard Error: 3_617_000 + .saturating_add((18_237_000 as Weight).saturating_mul(u as Weight)) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(u as Weight))) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(u as Weight))) } } diff --git a/runtime/mandala/src/benchmarking/dex.rs b/runtime/mandala/src/benchmarking/dex.rs index 4768143ba7..8b10f3b245 100644 --- a/runtime/mandala/src/benchmarking/dex.rs +++ b/runtime/mandala/src/benchmarking/dex.rs @@ -17,16 +17,17 @@ // along with this program. If not, see . use crate::{ - dollar, AccountId, Balance, Currencies, CurrencyId, Dex, GetNativeCurrencyId, GetStableCurrencyId, Runtime, - TradingPathLimit, + dollar, AccountId, Balance, Currencies, CurrencyId, Dex, Event, GetLiquidCurrencyId, GetNativeCurrencyId, + GetStableCurrencyId, GetStakingCurrencyId, Runtime, System, TradingPathLimit, }; use frame_benchmarking::{account, whitelisted_caller}; use frame_system::RawOrigin; use module_dex::TradingPairStatus; use orml_benchmarking::runtime_benchmarks; -use orml_traits::MultiCurrencyExtended; +use orml_traits::{MultiCurrency, MultiCurrencyExtended}; use primitives::TradingPair; +use runtime_common::{BNC, RENBTC, VSKSM}; use sp_runtime::traits::UniqueSaturatedInto; use sp_std::prelude::*; @@ -34,6 +35,14 @@ const SEED: u32 = 0; const NATIVE: CurrencyId = GetNativeCurrencyId::get(); const STABLECOIN: CurrencyId = GetStableCurrencyId::get(); +const LIQUID: CurrencyId = GetLiquidCurrencyId::get(); +const STAKING: CurrencyId = GetStakingCurrencyId::get(); + +const CURRENCY_LIST: [CurrencyId; 7] = [NATIVE, STABLECOIN, LIQUID, STAKING, BNC, VSKSM, RENBTC]; + +fn assert_last_event(generic_event: Event) { + System::assert_last_event(generic_event.into()); +} fn inject_liquidity( maker: AccountId, @@ -80,6 +89,9 @@ runtime_benchmarks! { Dex::disable_trading_pair(RawOrigin::Root.into(), trading_pair.first(), trading_pair.second())?; } }: _(RawOrigin::Root, trading_pair.first(), trading_pair.second()) + verify { + assert_last_event(module_dex::Event::EnableTradingPair(trading_pair).into()); + } // disable a Enabled trading pair disable_trading_pair { @@ -88,6 +100,9 @@ runtime_benchmarks! { Dex::enable_trading_pair(RawOrigin::Root.into(), trading_pair.first(), trading_pair.second())?; } }: _(RawOrigin::Root, trading_pair.first(), trading_pair.second()) + verify { + assert_last_event(module_dex::Event::DisableTradingPair(trading_pair).into()); + } // list a Provisioning trading pair list_provisioning { @@ -96,6 +111,9 @@ runtime_benchmarks! { Dex::disable_trading_pair(RawOrigin::Root.into(), trading_pair.first(), trading_pair.second())?; } }: _(RawOrigin::Root, trading_pair.first(), trading_pair.second(), dollar(trading_pair.first()), dollar(trading_pair.second()), dollar(trading_pair.first()), dollar(trading_pair.second()), 10) + verify { + assert_last_event(module_dex::Event::ListProvisioning(trading_pair).into()); + } // update parameters of a Provisioning trading pair update_provisioning_parameters { @@ -146,6 +164,9 @@ runtime_benchmarks! { 100 * dollar(trading_pair.second()), )?; }: _(RawOrigin::Signed(founder), trading_pair.first(), trading_pair.second()) + verify { + assert_last_event(module_dex::Event::ProvisioningToEnabled(trading_pair, 100 * dollar(trading_pair.first()), 100 * dollar(trading_pair.second()), 200 * dollar(trading_pair.first())).into()) + } add_provision { let founder: AccountId = whitelisted_caller(); @@ -167,7 +188,10 @@ runtime_benchmarks! { // set balance >::update_balance(trading_pair.first(), &founder, (10 * dollar(trading_pair.first())).unique_saturated_into())?; >::update_balance(trading_pair.second(), &founder, (10 * dollar(trading_pair.second())).unique_saturated_into())?; - }: _(RawOrigin::Signed(founder), trading_pair.first(), trading_pair.second(), dollar(trading_pair.first()), dollar(trading_pair.second())) + }: _(RawOrigin::Signed(founder.clone()), trading_pair.first(), trading_pair.second(), dollar(trading_pair.first()), dollar(trading_pair.second())) + verify{ + assert_last_event(module_dex::Event::AddProvision(founder, trading_pair.first(), dollar(trading_pair.first()), trading_pair.second(), dollar(trading_pair.second())).into()); + } claim_dex_share { let founder: AccountId = whitelisted_caller(); @@ -202,7 +226,10 @@ runtime_benchmarks! { trading_pair.first(), trading_pair.second(), )?; - }: _(RawOrigin::Signed(whitelisted_caller()), founder, trading_pair.first(), trading_pair.second()) + }: _(RawOrigin::Signed(whitelisted_caller()), founder.clone(), trading_pair.first(), trading_pair.second()) + verify { + assert_eq!(Currencies::free_balance(trading_pair.dex_share_currency_id(), &founder), 2_000_000_000_000); + } // add liquidity but don't staking lp add_liquidity { @@ -253,52 +280,56 @@ runtime_benchmarks! { swap_with_exact_supply { let u in 2 .. TradingPathLimit::get() as u32; - let trading_pair = TradingPair::from_currency_ids(STABLECOIN, NATIVE).unwrap(); + let maker: AccountId = account("maker", 0, SEED); + let taker: AccountId = whitelisted_caller(); + let mut path: Vec = vec![]; for i in 1 .. u { if i == 1 { - path.push(trading_pair.first()); - path.push(trading_pair.second()); + let cur0 = CURRENCY_LIST[0]; + let cur1 = CURRENCY_LIST[1]; + path.push(cur0); + path.push(cur1); + inject_liquidity(maker.clone(), cur0, cur1, 10_000 * dollar(cur0), 10_000 * dollar(cur1), false)?; } else { - if i % 2 == 0 { - path.push(trading_pair.first()); - } else { - path.push(trading_pair.second()); - } + path.push(CURRENCY_LIST[i as usize]); + inject_liquidity(maker.clone(), CURRENCY_LIST[i as usize - 1], CURRENCY_LIST[i as usize], 10_000 * dollar(CURRENCY_LIST[i as usize - 1]), 10_000 * dollar(CURRENCY_LIST[i as usize]), false)?; } } - let maker: AccountId = account("maker", 0, SEED); - let taker: AccountId = whitelisted_caller(); - inject_liquidity(maker, trading_pair.first(), trading_pair.second(), 10_000 * dollar(trading_pair.first()), 10_000 * dollar(trading_pair.second()), false)?; - >::update_balance(path[0], &taker, (10_000 * dollar(path[0])).unique_saturated_into())?; - }: swap_with_exact_supply(RawOrigin::Signed(taker), path.clone(), 100 * dollar(path[0]), 0) + }: swap_with_exact_supply(RawOrigin::Signed(taker.clone()), path.clone(), 100 * dollar(path[0]), 0) + verify { + // would panic the benchmark anyways, must add new currencies to CURRENCY_LIST for benchmarking to work + assert!(TradingPathLimit::get() < CURRENCY_LIST.len() as u32); + } swap_with_exact_target { let u in 2 .. TradingPathLimit::get() as u32; - let trading_pair = TradingPair::from_currency_ids(STABLECOIN, NATIVE).unwrap(); + let maker: AccountId = account("maker", 0, SEED); + let taker: AccountId = whitelisted_caller(); + let mut path: Vec = vec![]; for i in 1 .. u { if i == 1 { - path.push(trading_pair.first()); - path.push(trading_pair.second()); + let cur0 = CURRENCY_LIST[0]; + let cur1 = CURRENCY_LIST[1]; + path.push(cur0); + path.push(cur1); + inject_liquidity(maker.clone(), cur0, cur1, 10_000 * dollar(cur0), 10_000 * dollar(cur1), false)?; } else { - if i % 2 == 0 { - path.push(trading_pair.first()); - } else { - path.push(trading_pair.second()); - } + path.push(CURRENCY_LIST[i as usize]); + inject_liquidity(maker.clone(), CURRENCY_LIST[i as usize - 1], CURRENCY_LIST[i as usize], 10_000 * dollar(CURRENCY_LIST[i as usize - 1]), 10_000 * dollar(CURRENCY_LIST[i as usize]), false)?; } } - let maker: AccountId = account("maker", 0, SEED); - let taker: AccountId = whitelisted_caller(); - inject_liquidity(maker, trading_pair.first(), trading_pair.second(), 10_000 * dollar(trading_pair.first()), 10_000 * dollar(trading_pair.second()), false)?; - >::update_balance(path[0], &taker, (10_000 * dollar(path[0])).unique_saturated_into())?; - }: swap_with_exact_target(RawOrigin::Signed(taker), path.clone(), 10 * dollar(path[path.len() - 1]), 100 * dollar(path[0])) + }: swap_with_exact_target(RawOrigin::Signed(taker.clone()), path.clone(), 10 * dollar(path[path.len() - 1]), 100 * dollar(path[0])) + verify { + // would panic the benchmark anyways, must add new currencies to CURRENCY_LIST for benchmarking to work + assert!(TradingPathLimit::get() < CURRENCY_LIST.len() as u32); + } } #[cfg(test)] diff --git a/runtime/mandala/src/weights/module_dex.rs b/runtime/mandala/src/weights/module_dex.rs index 7b7d86ca1d..9c257bce82 100644 --- a/runtime/mandala/src/weights/module_dex.rs +++ b/runtime/mandala/src/weights/module_dex.rs @@ -18,8 +18,8 @@ //! Autogenerated weights for module_dex //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0 -//! DATE: 2021-07-19, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-11-05, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 // Executed Command: @@ -28,7 +28,7 @@ // --chain=dev // --steps=50 // --repeat=20 -// --pallet=* +// --pallet=module_dex // --extrinsic=* // --execution=wasm // --wasm-execution=compiled @@ -48,68 +48,76 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl module_dex::WeightInfo for WeightInfo { fn enable_trading_pair() -> Weight { - (30_946_000 as Weight) + (25_878_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn disable_trading_pair() -> Weight { - (30_565_000 as Weight) + (25_740_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn list_provisioning() -> Weight { - (46_500_000 as Weight) + (39_243_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn update_provisioning_parameters() -> Weight { - (14_886_000 as Weight) + (12_764_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn end_provisioning() -> Weight { - (99_277_000 as Weight) + (80_534_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } fn add_provision() -> Weight { - (163_160_000 as Weight) + (132_773_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(5 as Weight)) } fn claim_dex_share() -> Weight { - (132_167_000 as Weight) + (109_807_000 as Weight) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(5 as Weight)) } fn add_liquidity() -> Weight { - (238_442_000 as Weight) + (191_996_000 as Weight) .saturating_add(T::DbWeight::get().reads(9 as Weight)) .saturating_add(T::DbWeight::get().writes(7 as Weight)) } fn add_liquidity_and_stake() -> Weight { - (350_206_000 as Weight) - .saturating_add(T::DbWeight::get().reads(14 as Weight)) - .saturating_add(T::DbWeight::get().writes(12 as Weight)) + (268_295_000 as Weight) + .saturating_add(T::DbWeight::get().reads(12 as Weight)) + .saturating_add(T::DbWeight::get().writes(10 as Weight)) } fn remove_liquidity() -> Weight { - (207_704_000 as Weight) + (164_184_000 as Weight) .saturating_add(T::DbWeight::get().reads(6 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } fn remove_liquidity_by_unstake() -> Weight { - (393_481_000 as Weight) - .saturating_add(T::DbWeight::get().reads(14 as Weight)) - .saturating_add(T::DbWeight::get().writes(12 as Weight)) + (288_275_000 as Weight) + .saturating_add(T::DbWeight::get().reads(12 as Weight)) + .saturating_add(T::DbWeight::get().writes(10 as Weight)) } - fn swap_with_exact_supply(_u: u32, ) -> Weight { - (160_821_000 as Weight) - .saturating_add(T::DbWeight::get().reads(9 as Weight)) - .saturating_add(T::DbWeight::get().writes(8 as Weight)) + fn swap_with_exact_supply(u: u32, ) -> Weight { + (97_602_000 as Weight) + // Standard Error: 130_000 + .saturating_add((16_421_000 as Weight).saturating_mul(u as Weight)) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(u as Weight))) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(u as Weight))) } - fn swap_with_exact_target(_u: u32, ) -> Weight { - (160_401_000 as Weight) - .saturating_add(T::DbWeight::get().reads(9 as Weight)) - .saturating_add(T::DbWeight::get().writes(8 as Weight)) + fn swap_with_exact_target(u: u32, ) -> Weight { + (99_807_000 as Weight) + // Standard Error: 837_000 + .saturating_add((16_033_000 as Weight).saturating_mul(u as Weight)) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(u as Weight))) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(u as Weight))) } }