diff --git a/runtime/westend/src/tests.rs b/runtime/westend/src/tests.rs index f7d4e749c252..841089f93ead 100644 --- a/runtime/westend/src/tests.rs +++ b/runtime/westend/src/tests.rs @@ -49,3 +49,21 @@ fn call_size() { If the limit is too strong, maybe consider increase the limit to 300.", ); } + +#[test] +fn sanity_check_teleport_assets_weight() { + // This test sanity checks that at least 50 teleports can exist in a block. + // Usually when XCM runs into an issue, it will return a weight of `Weight::MAX`, + // so this test will certainly ensure that this problem does not occur. + use frame_support::dispatch::GetDispatchInfo; + let weight = pallet_xcm::Call::::teleport_assets { + dest: Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::here())), + beneficiary: Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::here())), + assets: Box::new((Concrete(MultiLocation::here()), Fungible(200_000)).into()), + fee_asset_item: 0, + } + .get_dispatch_info() + .weight; + + assert!(weight * 50 < BlockWeights::get().max_block); +} diff --git a/runtime/westend/src/weights/xcm/mod.rs b/runtime/westend/src/weights/xcm/mod.rs index 1b0d7c1ef485..70c5731a7853 100644 --- a/runtime/westend/src/weights/xcm/mod.rs +++ b/runtime/westend/src/weights/xcm/mod.rs @@ -31,7 +31,9 @@ trait WeighMultiAssets { fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight; } -// TODO wild case +// Westend only knows about one asset, the balances pallet. +const MAX_ASSETS: u32 = 1; + impl WeighMultiAssets for MultiAssetFilter { fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight { match self { @@ -44,7 +46,7 @@ impl WeighMultiAssets for MultiAssetFilter { AssetTypes::Unknown => Weight::MAX, }) .fold(0, |acc, x| acc.saturating_add(x)), - _ => Weight::MAX, + Self::Wild(_) => (MAX_ASSETS as Weight).saturating_mul(balances_weight), } } }