diff --git a/pallets/system-staking/Cargo.toml b/pallets/system-staking/Cargo.toml index d6ed5d30a..546149401 100644 --- a/pallets/system-staking/Cargo.toml +++ b/pallets/system-staking/Cargo.toml @@ -24,6 +24,7 @@ sp-arithmetic = { workspace = true } orml-traits = { workspace = true } sp-runtime = { workspace = true } bifrost-primitives = { workspace = true } +bifrost-vtoken-minting = { workspace = true } [dev-dependencies] sp-core = { workspace = true } @@ -34,7 +35,6 @@ orml-tokens = { workspace = true } orml-xtokens = { workspace = true } orml-traits = { workspace = true } hex-literal = { workspace = true } -bifrost-vtoken-minting = { workspace = true } bifrost-slp = { workspace = true } bifrost-farming = { workspace = true } bifrost-asset-registry = { workspace = true } diff --git a/pallets/system-staking/src/benchmarking.rs b/pallets/system-staking/src/benchmarking.rs index d9280950e..b2978c899 100644 --- a/pallets/system-staking/src/benchmarking.rs +++ b/pallets/system-staking/src/benchmarking.rs @@ -17,9 +17,9 @@ // along with this program. If not, see . #![cfg(feature = "runtime-benchmarks")] -use crate::{Pallet as SystemStaking, *}; -use bifrost_primitives::{CurrencyId, PoolId, TokenSymbol}; -use frame_benchmarking::{benchmarks, impl_benchmark_test_suite, whitelisted_caller}; +use crate::{Config, Pallet as SystemStaking, *}; +use bifrost_primitives::{CurrencyId, PoolId, TokenSymbol, *}; +use frame_benchmarking::v2::*; use frame_support::{ assert_ok, sp_runtime::{traits::UniqueSaturatedFrom, Perbill, Permill}, @@ -28,10 +28,12 @@ use frame_support::{ use frame_system::{Pallet as System, RawOrigin}; use sp_std::vec; -benchmarks! { - on_initialize { - const KSM: CurrencyId = CurrencyId::Token(TokenSymbol::KSM); - const MOVR: CurrencyId = CurrencyId::Token(TokenSymbol::MOVR); +#[benchmarks(where T: Config + bifrost_vtoken_minting::Config)] +mod benchmarks { + use super::*; + + #[benchmark] + fn on_initialize() -> Result<(), BenchmarkError> { assert_ok!(SystemStaking::::token_config( RawOrigin::Root.into(), KSM, @@ -42,6 +44,7 @@ benchmarks! { Some(vec![1 as PoolId]), Some(vec![Perbill::from_percent(100)]), )); + assert_ok!(SystemStaking::::token_config( RawOrigin::Root.into(), MOVR, @@ -52,23 +55,41 @@ benchmarks! { Some(vec![1 as PoolId]), Some(vec![Perbill::from_percent(100)]), )); - System::::set_block_number( - System::::block_number() + 1u32.into() - ); + + System::::set_block_number(System::::block_number() + 1u32.into()); SystemStaking::::on_initialize(System::::block_number()); - System::::set_block_number( - System::::block_number() + 1u32.into() - ); + System::::set_block_number(System::::block_number() + 1u32.into()); SystemStaking::::on_initialize(System::::block_number()); - }:{SystemStaking::::on_initialize(System::::block_number());} + #[block] + { + SystemStaking::::on_initialize(System::::block_number()); + } - token_config { + Ok(()) + } + + #[benchmark] + fn token_config() -> Result<(), BenchmarkError> { const KSM: CurrencyId = CurrencyId::Token(TokenSymbol::KSM); let token_amount = BalanceOf::::unique_saturated_from(1000u128); let pool_id = PoolId::from(1u32); - }: _(RawOrigin::Root, KSM, Some(BlockNumberFor::::from(1u32)), Some(Permill::from_percent(80)),Some(false),Some(token_amount),Some(vec![pool_id]),Some(vec![Perbill::from_percent(100)])) + #[extrinsic_call] + _( + RawOrigin::Root, + KSM, + Some(BlockNumberFor::::from(1u32)), + Some(Permill::from_percent(80)), + Some(false), + Some(token_amount), + Some(vec![pool_id]), + Some(vec![Perbill::from_percent(100)]), + ); + + Ok(()) + } - refresh_token_info { + #[benchmark] + fn refresh_token_info() -> Result<(), BenchmarkError> { const KSM: CurrencyId = CurrencyId::Token(TokenSymbol::KSM); assert_ok!(SystemStaking::::token_config( RawOrigin::Root.into(), @@ -80,10 +101,14 @@ benchmarks! { Some(vec![1 as PoolId]), Some(vec![Perbill::from_percent(100)]), )); - }: _(RawOrigin::Root,KSM) + #[extrinsic_call] + _(RawOrigin::Root, KSM); - payout { - const KSM: CurrencyId = CurrencyId::Token(TokenSymbol::KSM); + Ok(()) + } + + #[benchmark] + fn payout() -> Result<(), BenchmarkError> { assert_ok!(SystemStaking::::token_config( RawOrigin::Root.into(), KSM, @@ -94,13 +119,29 @@ benchmarks! { Some(vec![1 as PoolId]), Some(vec![Perbill::from_percent(100)]), )); + let caller: T::AccountId = whitelisted_caller(); - assert_ok!(T::MultiCurrency::deposit(KSM, &caller, BalanceOf::::unique_saturated_from(1000u128))); - assert_ok!(T::VtokenMintingInterface::mint(caller, KSM, BalanceOf::::unique_saturated_from(1000u128), BoundedVec::default(),None)); - }: _(RawOrigin::Root,KSM) + assert_ok!(::MultiCurrency::deposit( + KSM, + &caller, + BalanceOf::::unique_saturated_from(1_000_000_000_000_000u128).into() + )); + assert_ok!(T::VtokenMintingInterface::mint( + caller, + KSM, + BalanceOf::::unique_saturated_from(10_000_000_000u128), + BoundedVec::default(), + None + )); - on_redeem_success { - const KSM: CurrencyId = CurrencyId::Token(TokenSymbol::KSM); + #[extrinsic_call] + _(RawOrigin::Root, KSM); + + Ok(()) + } + + #[benchmark] + fn on_redeem_success() -> Result<(), BenchmarkError> { assert_ok!(SystemStaking::::token_config( RawOrigin::Root.into(), KSM, @@ -113,10 +154,16 @@ benchmarks! { )); let caller: T::AccountId = whitelisted_caller(); let token_amount = BalanceOf::::unique_saturated_from(1000u128); - }:{SystemStaking::::on_redeem_success(KSM,caller,token_amount);} + #[block] + { + SystemStaking::::on_redeem_success(KSM, caller, token_amount); + } - on_redeemed { - const KSM: CurrencyId = CurrencyId::Token(TokenSymbol::KSM); + Ok(()) + } + + #[benchmark] + fn on_redeemed() -> Result<(), BenchmarkError> { assert_ok!(SystemStaking::::token_config( RawOrigin::Root.into(), KSM, @@ -130,10 +177,16 @@ benchmarks! { let caller: T::AccountId = whitelisted_caller(); let token_amount = BalanceOf::::unique_saturated_from(1000u128); let fee_amount = BalanceOf::::unique_saturated_from(1000u128); - }:{SystemStaking::::on_redeemed(caller,KSM,token_amount,token_amount,fee_amount);} + #[block] + { + SystemStaking::::on_redeemed(caller, KSM, token_amount, token_amount, fee_amount); + } - delete_token { - const KSM: CurrencyId = CurrencyId::Token(TokenSymbol::KSM); + Ok(()) + } + + #[benchmark] + fn delete_token() -> Result<(), BenchmarkError> { assert_ok!(SystemStaking::::token_config( RawOrigin::Root.into(), KSM, @@ -144,13 +197,16 @@ benchmarks! { Some(vec![1 as PoolId]), Some(vec![Perbill::from_percent(100)]), )); - }: _(RawOrigin::Root,KSM) -} -impl_benchmark_test_suite!( - SystemStaking, - crate::mock::ExtBuilder::default() - .one_hundred_for_alice_n_bob() - .build(), - crate::mock::Runtime -); + #[extrinsic_call] + _(RawOrigin::Root, KSM); + + Ok(()) + } + + impl_benchmark_test_suite!( + Pallet, + crate::mock::new_test_ext_benchmark(), + crate::mock::Runtime + ); +} diff --git a/pallets/system-staking/src/mock.rs b/pallets/system-staking/src/mock.rs index f07f22d7f..32163566d 100644 --- a/pallets/system-staking/src/mock.rs +++ b/pallets/system-staking/src/mock.rs @@ -481,3 +481,8 @@ pub(crate) fn roll_to(n: u64) -> u64 { } num_blocks } + +#[cfg(feature = "runtime-benchmarks")] +pub fn new_test_ext_benchmark() -> sp_io::TestExternalities { + ExtBuilder::default().build() +} diff --git a/pallets/system-staking/src/weights.rs b/pallets/system-staking/src/weights.rs index 4c03afc00..a77ed9999 100644 --- a/pallets/system-staking/src/weights.rs +++ b/pallets/system-staking/src/weights.rs @@ -24,9 +24,9 @@ //! Autogenerated weights for bifrost_system_staking //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-14, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bifrost-jenkins`, CPU: `Intel(R) Xeon(R) CPU E5-26xx v4` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 42.0.1 +//! DATE: 2024-12-18, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `mjl-legion`, CPU: `12th Gen Intel(R) Core(TM) i9-12900H` //! WASM-EXECUTION: Compiled, CHAIN: Some("bifrost-kusama-local"), DB CACHE: 1024 // Executed Command: @@ -36,7 +36,7 @@ // --chain=bifrost-kusama-local // --steps=50 // --repeat=20 -// --pallet=bifrost_system_staking +// --pallet=bifrost-system-staking // --extrinsic=* // --execution=wasm // --wasm-execution=compiled @@ -64,86 +64,86 @@ pub trait WeightInfo { // For backwards compatibility and tests impl WeightInfo for () { - /// Storage: SystemStaking TokenList (r:1 w:0) - /// Proof Skipped: SystemStaking TokenList (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SystemStaking Round (r:1 w:0) - /// Proof Skipped: SystemStaking Round (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SystemStaking TokenStatus (r:2 w:0) - /// Proof Skipped: SystemStaking TokenStatus (max_values: None, max_size: None, mode: Measured) + /// Storage: `SystemStaking::TokenList` (r:1 w:0) + /// Proof: `SystemStaking::TokenList` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SystemStaking::Round` (r:1 w:0) + /// Proof: `SystemStaking::Round` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SystemStaking::TokenStatus` (r:2 w:0) + /// Proof: `SystemStaking::TokenStatus` (`max_values`: None, `max_size`: None, mode: `Measured`) fn on_initialize() -> Weight { // Proof Size summary in bytes: // Measured: `445` // Estimated: `6385` - // Minimum execution time: 30_023_000 picoseconds. - Weight::from_parts(30_834_000, 6385) + // Minimum execution time: 8_769_000 picoseconds. + Weight::from_parts(9_831_000, 6385) .saturating_add(RocksDbWeight::get().reads(4_u64)) } - /// Storage: SystemStaking TokenStatus (r:1 w:1) - /// Proof Skipped: SystemStaking TokenStatus (max_values: None, max_size: None, mode: Measured) - /// Storage: SystemStaking TokenList (r:1 w:1) - /// Proof Skipped: SystemStaking TokenList (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `SystemStaking::TokenStatus` (r:1 w:1) + /// Proof: `SystemStaking::TokenStatus` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SystemStaking::TokenList` (r:1 w:1) + /// Proof: `SystemStaking::TokenList` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn token_config() -> Weight { // Proof Size summary in bytes: // Measured: `109` // Estimated: `3574` - // Minimum execution time: 44_695_000 picoseconds. - Weight::from_parts(45_801_000, 3574) + // Minimum execution time: 9_370_000 picoseconds. + Weight::from_parts(10_254_000, 3574) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } - /// Storage: SystemStaking TokenStatus (r:1 w:1) - /// Proof Skipped: SystemStaking TokenStatus (max_values: None, max_size: None, mode: Measured) - /// Storage: Farming PoolInfos (r:1 w:0) - /// Proof Skipped: Farming PoolInfos (max_values: None, max_size: None, mode: Measured) + /// Storage: `SystemStaking::TokenStatus` (r:1 w:1) + /// Proof: `SystemStaking::TokenStatus` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Farming::PoolInfos` (r:1 w:0) + /// Proof: `Farming::PoolInfos` (`max_values`: None, `max_size`: None, mode: `Measured`) fn refresh_token_info() -> Weight { // Proof Size summary in bytes: - // Measured: `403` - // Estimated: `3868` - // Minimum execution time: 56_032_000 picoseconds. - Weight::from_parts(57_981_000, 3868) + // Measured: `370` + // Estimated: `3835` + // Minimum execution time: 14_641_000 picoseconds. + Weight::from_parts(27_074_000, 3835) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: SystemStaking TokenStatus (r:1 w:0) - /// Proof Skipped: SystemStaking TokenStatus (max_values: None, max_size: None, mode: Measured) - /// Storage: Tokens Accounts (r:1 w:0) - /// Proof: Tokens Accounts (max_values: None, max_size: Some(118), added: 2593, mode: MaxEncodedLen) - /// Storage: VtokenMinting TokenPool (r:1 w:0) - /// Proof: VtokenMinting TokenPool (max_values: None, max_size: Some(38), added: 2513, mode: MaxEncodedLen) - /// Storage: Tokens TotalIssuance (r:1 w:0) - /// Proof: Tokens TotalIssuance (max_values: None, max_size: Some(38), added: 2513, mode: MaxEncodedLen) + /// Storage: `SystemStaking::TokenStatus` (r:1 w:0) + /// Proof: `SystemStaking::TokenStatus` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Tokens::Accounts` (r:1 w:0) + /// Proof: `Tokens::Accounts` (`max_values`: None, `max_size`: Some(118), added: 2593, mode: `MaxEncodedLen`) + /// Storage: `VtokenMinting::TokenPool` (r:1 w:0) + /// Proof: `VtokenMinting::TokenPool` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) + /// Storage: `Tokens::TotalIssuance` (r:1 w:0) + /// Proof: `Tokens::TotalIssuance` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) fn payout() -> Weight { // Proof Size summary in bytes: - // Measured: `1190` - // Estimated: `4655` - // Minimum execution time: 71_558_000 picoseconds. - Weight::from_parts(72_649_000, 4655) + // Measured: `550` + // Estimated: `4015` + // Minimum execution time: 16_437_000 picoseconds. + Weight::from_parts(17_241_000, 4015) .saturating_add(RocksDbWeight::get().reads(4_u64)) } fn on_redeem_success() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_672_000 picoseconds. - Weight::from_parts(2_317_000, 0) + // Minimum execution time: 201_000 picoseconds. + Weight::from_parts(243_000, 0) } fn on_redeemed() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_053_000 picoseconds. - Weight::from_parts(2_416_000, 0) + // Minimum execution time: 234_000 picoseconds. + Weight::from_parts(282_000, 0) } - /// Storage: SystemStaking TokenList (r:1 w:1) - /// Proof Skipped: SystemStaking TokenList (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SystemStaking TokenStatus (r:0 w:1) - /// Proof Skipped: SystemStaking TokenStatus (max_values: None, max_size: None, mode: Measured) + /// Storage: `SystemStaking::TokenList` (r:1 w:1) + /// Proof: `SystemStaking::TokenList` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SystemStaking::TokenStatus` (r:0 w:1) + /// Proof: `SystemStaking::TokenStatus` (`max_values`: None, `max_size`: None, mode: `Measured`) fn delete_token() -> Weight { // Proof Size summary in bytes: // Measured: `169` // Estimated: `1654` - // Minimum execution time: 24_359_000 picoseconds. - Weight::from_parts(25_049_000, 1654) + // Minimum execution time: 5_654_000 picoseconds. + Weight::from_parts(5_826_000, 1654) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) }