Skip to content

Commit f06433a

Browse files
committed
Fix benchmarks
1 parent 38f1bb3 commit f06433a

File tree

4 files changed

+49
-20
lines changed

4 files changed

+49
-20
lines changed

bridges/modules/xcm-bridge-hub-router/src/benchmarking.rs

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
#![cfg(feature = "runtime-benchmarks")]
2020

2121
use crate::{BridgeState, Bridges, Call, ResolveBridgeId, MINIMAL_DELIVERY_FEE_FACTOR};
22-
use frame_benchmarking::{benchmarks_instance_pallet, BenchmarkError, BenchmarkResult};
23-
use frame_support::traits::{EnsureOriginWithArg, Hooks, UnfilteredDispatchable};
22+
use frame_benchmarking::v2::*;
23+
use frame_support::traits::{EnsureOriginWithArg, Hooks};
2424
use sp_runtime::{traits::Zero, Saturating};
2525
use xcm::prelude::*;
2626

@@ -29,62 +29,82 @@ pub struct Pallet<T: Config<I>, I: 'static = ()>(crate::Pallet<T, I>);
2929

3030
/// Trait that must be implemented by runtime to be able to benchmark pallet properly.
3131
pub trait Config<I: 'static>: crate::Config<I> {
32-
// /// Fill up queue so it becomes congested.
33-
// fn make_congested();
34-
//
3532
/// Returns destination which is valid for this router instance.
3633
fn ensure_bridged_target_destination() -> Result<Location, BenchmarkError>;
34+
/// Returns valid origin for `report_bridge_status` (if `T::BridgeHubOrigin` is supported).
35+
fn report_bridge_status_origin() -> Option<Self::RuntimeOrigin>;
3736
}
3837

39-
benchmarks_instance_pallet! {
40-
on_initialize_when_bridge_state_removed {
38+
#[instance_benchmarks]
39+
mod benchmarks {
40+
use super::*;
41+
42+
#[benchmark]
43+
fn on_initialize_when_bridge_state_removed() -> Result<(), BenchmarkError> {
4144
let bridge_id = T::BridgeIdResolver::resolve_for_dest(&T::ensure_bridged_target_destination()?)
4245
.ok_or(BenchmarkError::Weightless)?;
46+
4347
// uncongested and less than a minimal factor is removed
4448
Bridges::<T, I>::insert(&bridge_id, BridgeState {
4549
delivery_fee_factor: 0.into(),
4650
is_congested: false,
4751
});
4852
assert!(Bridges::<T, I>::get(&bridge_id).is_some());
49-
}: {
50-
crate::Pallet::<T, I>::on_initialize(Zero::zero())
51-
} verify {
53+
54+
#[block]
55+
{
56+
let _ = crate::Pallet::<T, I>::on_initialize(Zero::zero());
57+
}
58+
5259
assert!(Bridges::<T, I>::get(bridge_id).is_none());
60+
61+
Ok(())
5362
}
5463

55-
on_initialize_when_bridge_state_updated {
64+
#[benchmark]
65+
fn on_initialize_when_bridge_state_updated() -> Result<(), BenchmarkError> {
5666
let bridge_id = T::BridgeIdResolver::resolve_for_dest(&T::ensure_bridged_target_destination()?)
5767
.ok_or(BenchmarkError::Weightless)?;
68+
5869
// uncongested and higher than a minimal factor is decreased
5970
let old_delivery_fee_factor = MINIMAL_DELIVERY_FEE_FACTOR.saturating_mul(1000.into());
6071
Bridges::<T, I>::insert(&bridge_id, BridgeState {
6172
delivery_fee_factor: old_delivery_fee_factor,
6273
is_congested: false,
6374
});
6475
assert!(Bridges::<T, I>::get(&bridge_id).is_some());
65-
}: {
66-
crate::Pallet::<T, I>::on_initialize(Zero::zero())
67-
} verify {
76+
77+
#[block]
78+
{
79+
let _ = crate::Pallet::<T, I>::on_initialize(Zero::zero());
80+
}
81+
6882
assert!(Bridges::<T, I>::get(bridge_id).unwrap().delivery_fee_factor < old_delivery_fee_factor);
83+
Ok(())
6984
}
7085

71-
report_bridge_status {
86+
#[benchmark]
87+
fn report_bridge_status() -> Result<(), BenchmarkError> {
7288
let bridge_id = T::BridgeIdResolver::resolve_for_dest(&T::ensure_bridged_target_destination()?)
7389
.ok_or(BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX)))?;
74-
let origin: T::RuntimeOrigin = T::BridgeHubOrigin::try_successful_origin(&bridge_id).map_err(|_| BenchmarkError::Weightless)?;
90+
let origin = T::report_bridge_status_origin()
91+
.ok_or(BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX)))?;
92+
let _ = T::BridgeHubOrigin::try_origin(origin.clone(), &bridge_id)
93+
.map_err(|_| BenchmarkError::Override(BenchmarkResult::from_weight(Weight::MAX)))?;
7594
let is_congested = true;
7695

77-
let call = Call::<T, I>::report_bridge_status { bridge_id: bridge_id.clone(), is_congested };
78-
}: { call.dispatch_bypass_filter(origin)? }
79-
verify {
96+
#[extrinsic_call]
97+
report_bridge_status(origin as T::RuntimeOrigin, bridge_id.clone(), is_congested);
98+
8099
assert_eq!(
81100
Bridges::<T, I>::get(&bridge_id),
82101
Some(BridgeState {
83102
delivery_fee_factor: MINIMAL_DELIVERY_FEE_FACTOR,
84103
is_congested,
85104
})
86105
);
106+
Ok(())
87107
}
88108

89-
impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(), crate::mock::TestRuntime)
109+
impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(), crate::mock::TestRuntime);
90110
}

bridges/modules/xcm-bridge-hub-router/src/mock.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,4 +225,7 @@ impl crate::benchmarking::Config<()> for TestRuntime {
225225
fn ensure_bridged_target_destination() -> Result<Location, frame_benchmarking::BenchmarkError> {
226226
Ok(Location::new(2, [GlobalConsensus(BridgedNetworkId::get())]))
227227
}
228+
fn report_bridge_status_origin() -> Option<RuntimeOrigin> {
229+
Some(RuntimeOrigin::root())
230+
}
228231
}

cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1713,6 +1713,9 @@ impl_runtime_apis! {
17131713
fn ensure_bridged_target_destination() -> Result<Location, BenchmarkError> {
17141714
Ok(xcm_config::bridging::to_westend::AssetHubWestend::get())
17151715
}
1716+
fn report_bridge_status_origin() -> Option<RuntimeOrigin> {
1717+
Some(pallet_xcm::Origin::Xcm(xcm_config::bridging::SiblingBridgeHub::get()).into())
1718+
}
17161719
}
17171720

17181721
use xcm_config::{TokenLocation, MaxAssetsIntoHolding};

cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1894,6 +1894,9 @@ impl_runtime_apis! {
18941894
fn ensure_bridged_target_destination() -> Result<Location, BenchmarkError> {
18951895
Ok(xcm_config::bridging::to_rococo::AssetHubRococo::get())
18961896
}
1897+
fn report_bridge_status_origin() -> Option<RuntimeOrigin> {
1898+
Some(pallet_xcm::Origin::Xcm(xcm_config::bridging::SiblingBridgeHub::get()).into())
1899+
}
18971900
}
18981901

18991902
use xcm_config::{MaxAssetsIntoHolding, WestendLocation};

0 commit comments

Comments
 (0)