extern crate alloc;
use super::*;
use crate::Pallet;
use frame_benchmarking::v2::*;
use frame_support::{
dispatch::{DispatchInfo, PostDispatchInfo},
pallet_prelude::*,
};
use frame_system::RawOrigin;
use sp_runtime::traits::{
AsSystemOriginSigner, AsTransactionAuthorizedOrigin, DispatchTransaction, Dispatchable,
};
#[benchmarks(where
T::RuntimeOrigin: AsTransactionAuthorizedOrigin,
T::RuntimeCall: Dispatchable<Info = DispatchInfo, PostInfo = PostDispatchInfo>,
AssetBalanceOf<T>: Send + Sync,
BalanceOf<T>: Send + Sync + From<u64> + IsType<ChargeAssetBalanceOf<T>>,
ChargeAssetIdOf<T>: Send + Sync,
<T::RuntimeCall as Dispatchable>::RuntimeOrigin: AsSystemOriginSigner<T::AccountId> + Clone,
Credit<T::AccountId, T::Fungibles>: IsType<ChargeAssetLiquidityOf<T>>,
)]
mod benchmarks {
use super::*;
#[benchmark]
fn charge_asset_tx_payment_zero() {
let caller: T::AccountId = account("caller", 0, 0);
let ext: ChargeAssetTxPayment<T> = ChargeAssetTxPayment::from(0u32.into(), None);
let inner = frame_system::Call::remark { remark: alloc::vec![] };
let call = T::RuntimeCall::from(inner);
let info = DispatchInfo {
call_weight: Weight::zero(),
extension_weight: Weight::zero(),
class: DispatchClass::Normal,
pays_fee: Pays::No,
};
let post_info = PostDispatchInfo { actual_weight: None, pays_fee: Pays::No };
#[block]
{
assert!(ext
.test_run(RawOrigin::Signed(caller).into(), &call, &info, 0, 0, |_| Ok(post_info))
.unwrap()
.is_ok());
}
}
#[benchmark]
fn charge_asset_tx_payment_native() {
let caller: T::AccountId = account("caller", 0, 0);
let (fun_asset_id, _) = <T as Config>::BenchmarkHelper::create_asset_id_parameter(1);
<T as Config>::BenchmarkHelper::setup_balances_and_pool(fun_asset_id, caller.clone());
let ext: ChargeAssetTxPayment<T> = ChargeAssetTxPayment::from(10u32.into(), None);
let inner = frame_system::Call::remark { remark: alloc::vec![] };
let call = T::RuntimeCall::from(inner);
let info = DispatchInfo {
call_weight: Weight::from_parts(10, 0),
extension_weight: Weight::zero(),
class: DispatchClass::Operational,
pays_fee: Pays::Yes,
};
let post_info = PostDispatchInfo {
actual_weight: Some(Weight::from_parts(10, 0)),
pays_fee: Pays::Yes,
};
#[block]
{
assert!(ext
.test_run(RawOrigin::Signed(caller).into(), &call, &info, 0, 0, |_| Ok(post_info))
.unwrap()
.is_ok());
}
}
#[benchmark]
fn charge_asset_tx_payment_asset() {
let caller: T::AccountId = account("caller", 0, 0);
let (fun_asset_id, asset_id) = <T as Config>::BenchmarkHelper::create_asset_id_parameter(1);
<T as Config>::BenchmarkHelper::setup_balances_and_pool(
fun_asset_id.clone(),
caller.clone(),
);
let tip = 10u32.into();
let ext: ChargeAssetTxPayment<T> = ChargeAssetTxPayment::from(tip, Some(asset_id));
let inner = frame_system::Call::remark { remark: alloc::vec![] };
let call = T::RuntimeCall::from(inner);
let info = DispatchInfo {
call_weight: Weight::from_parts(10, 0),
extension_weight: Weight::zero(),
class: DispatchClass::Operational,
pays_fee: Pays::Yes,
};
let post_info = PostDispatchInfo {
actual_weight: Some(Weight::from_parts(10, 0)),
pays_fee: Pays::Yes,
};
#[block]
{
assert!(ext
.test_run(RawOrigin::Signed(caller.clone()).into(), &call, &info, 0, 0, |_| Ok(
post_info
))
.unwrap()
.is_ok());
}
}
impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(), crate::mock::Runtime);
}