Skip to content

Commit

Permalink
Migrated benchmarking of vstoken-conversion from v1 to v2. (#1535)
Browse files Browse the repository at this point in the history
  • Loading branch information
MJLNSN authored Dec 3, 2024
1 parent d3ed22d commit 6fa2ce2
Show file tree
Hide file tree
Showing 3 changed files with 203 additions and 138 deletions.
230 changes: 145 additions & 85 deletions pallets/vstoken-conversion/src/benchmarking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#![cfg(feature = "runtime-benchmarks")]

use bifrost_primitives::{CurrencyId, TokenSymbol};
use frame_benchmarking::v1::{account, benchmarks, BenchmarkError};
use frame_benchmarking::v2::*;
use frame_support::{
assert_ok,
traits::{EnsureOrigin, Get},
Expand All @@ -36,106 +36,166 @@ use crate::{
pub const VS_BOND: CurrencyId = CurrencyId::VSBond(TokenSymbol::BNC, 2001, 0, 8);
pub const VS_KSM: CurrencyId = CurrencyId::VSToken(TokenSymbol::KSM);

benchmarks! {
set_exchange_fee {
let origin = T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?;
let fee: VstokenConversionExchangeFee<BalanceOf<T>> =
VstokenConversionExchangeFee {
vstoken_exchange_fee: 10u32.into(),
vsbond_exchange_fee_of_vstoken: 10u32.into(),
};
}: _<T::RuntimeOrigin>(origin,fee)

set_exchange_rate {
let origin = T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?;
let fee: VstokenConversionExchangeFee<BalanceOf<T>> =
VstokenConversionExchangeFee {
vstoken_exchange_fee: 10u32.into(),
vsbond_exchange_fee_of_vstoken: 10u32.into(),
};
#[benchmarks]
mod benchmarks {
use super::*;

#[benchmark]
fn set_exchange_fee() -> Result<(), BenchmarkError> {
let origin =
T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?;
let fee: VstokenConversionExchangeFee<BalanceOf<T>> = VstokenConversionExchangeFee {
vstoken_exchange_fee: 10u32.into(),
vsbond_exchange_fee_of_vstoken: 10u32.into(),
};

#[extrinsic_call]
_(origin as <T as frame_system::Config>::RuntimeOrigin, fee);

Ok(())
}

#[benchmark]
fn set_exchange_rate() -> Result<(), BenchmarkError> {
let origin =
T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?;
let rate: VstokenConversionExchangeRate = VstokenConversionExchangeRate {
vsbond_convert_to_vstoken: Percent::from_percent(5),
vstoken_convert_to_vsbond: Percent::from_percent(5),
};
}: _<T::RuntimeOrigin>(origin,1,rate)

set_relaychain_lease {
let origin = T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?;
}: _<T::RuntimeOrigin>(origin,1)

vsbond_convert_to_vstoken {
let test_account: T::AccountId = account("seed",1,1);
let fee: VstokenConversionExchangeFee<BalanceOf<T>> =
VstokenConversionExchangeFee {
vstoken_exchange_fee: 10u32.into(),
vsbond_exchange_fee_of_vstoken: 10u32.into(),
};

#[extrinsic_call]
_(origin as <T as frame_system::Config>::RuntimeOrigin, 1, rate);

Ok(())
}

#[benchmark]
fn set_relaychain_lease() -> Result<(), BenchmarkError> {
let origin =
T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?;

#[extrinsic_call]
_(origin as <T as frame_system::Config>::RuntimeOrigin, 1);

Ok(())
}

#[benchmark]
fn vsbond_convert_to_vstoken() -> Result<(), BenchmarkError> {
let test_account: T::AccountId = account("seed", 1, 1);
let fee: VstokenConversionExchangeFee<BalanceOf<T>> = VstokenConversionExchangeFee {
vstoken_exchange_fee: 10u32.into(),
vsbond_exchange_fee_of_vstoken: 10u32.into(),
};
let rate: VstokenConversionExchangeRate = VstokenConversionExchangeRate {
vsbond_convert_to_vstoken: Percent::from_percent(95),
vstoken_convert_to_vsbond: Percent::from_percent(95),
};
assert_ok!(
VstokenConversion::<T>::set_exchange_fee(
T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?,
fee
));

assert_ok!(
VstokenConversion::<T>::set_exchange_rate(
T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?,
8,
rate
));

assert_ok!(
VstokenConversion::<T>::set_relaychain_lease(
T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?,
1
));

let origin =
T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?;

// Setup initial conditions
assert_ok!(VstokenConversion::<T>::set_exchange_fee(
origin.clone() as <T as frame_system::Config>::RuntimeOrigin,
fee
));
assert_ok!(VstokenConversion::<T>::set_exchange_rate(
origin.clone() as <T as frame_system::Config>::RuntimeOrigin,
8,
rate
));
assert_ok!(VstokenConversion::<T>::set_relaychain_lease(
origin as <T as frame_system::Config>::RuntimeOrigin,
1
));

let vsbond_account: T::AccountId =
<T as Config>::VsbondAccount::get().into_account_truncating();
T::MultiCurrency::deposit(VS_KSM, &vsbond_account, BalanceOf::<T>::unique_saturated_from(1000000000000u128))?;
T::MultiCurrency::deposit(VS_BOND, &test_account, BalanceOf::<T>::unique_saturated_from(1000000000000u128))?;
}: _(RawOrigin::Signed(test_account),VS_BOND,BalanceOf::<T>::unique_saturated_from(100000000000u128),BalanceOf::<T>::unique_saturated_from(10000000000u128))

vstoken_convert_to_vsbond {
let test_account: T::AccountId = account("seed",1,1);
let fee: VstokenConversionExchangeFee<BalanceOf<T>> =
VstokenConversionExchangeFee {
vstoken_exchange_fee: 10u32.into(),
vsbond_exchange_fee_of_vstoken: 10u32.into(),
};
T::MultiCurrency::deposit(
VS_KSM,
&vsbond_account,
BalanceOf::<T>::unique_saturated_from(1000000000000u128),
)?;
T::MultiCurrency::deposit(
VS_BOND,
&test_account,
BalanceOf::<T>::unique_saturated_from(1000000000000u128),
)?;

#[extrinsic_call]
_(
RawOrigin::Signed(test_account),
VS_BOND,
BalanceOf::<T>::unique_saturated_from(100000000000u128),
BalanceOf::<T>::unique_saturated_from(10000000000u128),
);

Ok(())
}

#[benchmark]
fn vstoken_convert_to_vsbond() -> Result<(), BenchmarkError> {
let test_account: T::AccountId = account("seed", 1, 1);
let fee: VstokenConversionExchangeFee<BalanceOf<T>> = VstokenConversionExchangeFee {
vstoken_exchange_fee: 10u32.into(),
vsbond_exchange_fee_of_vstoken: 10u32.into(),
};
let rate: VstokenConversionExchangeRate = VstokenConversionExchangeRate {
vsbond_convert_to_vstoken: Percent::from_percent(5),
vstoken_convert_to_vsbond: Percent::from_percent(5),
};
assert_ok!(
VstokenConversion::<T>::set_exchange_fee(
T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?,
fee
));

assert_ok!(
VstokenConversion::<T>::set_exchange_rate(
T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?,
8,
rate
));

assert_ok!(
VstokenConversion::<T>::set_relaychain_lease(
T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?,
1
));

let origin =
T::ControlOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?;

// Setup initial conditions
assert_ok!(VstokenConversion::<T>::set_exchange_fee(
origin.clone() as <T as frame_system::Config>::RuntimeOrigin,
fee
));
assert_ok!(VstokenConversion::<T>::set_exchange_rate(
origin.clone() as <T as frame_system::Config>::RuntimeOrigin,
8,
rate
));
assert_ok!(VstokenConversion::<T>::set_relaychain_lease(
origin as <T as frame_system::Config>::RuntimeOrigin,
1
));

let vsbond_account: T::AccountId =
<T as Config>::VsbondAccount::get().into_account_truncating();
T::MultiCurrency::deposit(VS_BOND, &vsbond_account, BalanceOf::<T>::unique_saturated_from(100000000000000u128))?;
T::MultiCurrency::deposit(VS_KSM, &test_account, BalanceOf::<T>::unique_saturated_from(100000000000000u128))?;

}: _(RawOrigin::Signed(test_account),VS_BOND,BalanceOf::<T>::unique_saturated_from(1000000000000u128),BalanceOf::<T>::unique_saturated_from(100000000000u128))


impl_benchmark_test_suite!(VstokenConversion,crate::mock::ExtBuilder::default().build(),crate::mock::Runtime);
T::MultiCurrency::deposit(
VS_BOND,
&vsbond_account,
BalanceOf::<T>::unique_saturated_from(100000000000000u128),
)?;
T::MultiCurrency::deposit(
VS_KSM,
&test_account,
BalanceOf::<T>::unique_saturated_from(100000000000000u128),
)?;

#[extrinsic_call]
_(
RawOrigin::Signed(test_account),
VS_BOND,
BalanceOf::<T>::unique_saturated_from(1000000000000u128),
BalanceOf::<T>::unique_saturated_from(100000000000u128),
);

Ok(())
}

// This line generates test cases for benchmarking, and could be run by:
// `cargo test -p pallet-example-basic --all-features`, you will see one line per case:
// `test benchmarking::bench_sort_vector ... ok`
// `test benchmarking::bench_accumulate_dummy ... ok`
// `test benchmarking::bench_set_dummy_benchmark ... ok` in the result.
//
// The line generates three steps per benchmark, with repeat=1 and the three steps are
// [low, mid, high] of the range.
impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext_benchmark(), crate::mock::Runtime);
}
5 changes: 5 additions & 0 deletions pallets/vstoken-conversion/src/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -209,3 +209,8 @@ impl ExtBuilder {
t.into()
}
}

#[cfg(feature = "runtime-benchmarks")]
pub fn new_test_ext_benchmark() -> sp_io::TestExternalities {
ExtBuilder::default().build()
}
Loading

0 comments on commit 6fa2ce2

Please # to comment.