moonbase_runtime/weights/xcm/
mod.rs1pub mod fungible;
18pub mod generic;
19
20use core::cmp::min;
21use frame_support::{weights::Weight, BoundedVec};
22use fungible::WeightInfo as XcmFungibleWeight;
23use generic::SubstrateWeight as XcmGeneric;
24pub use generic::WeightInfo;
25use sp_std::prelude::*;
26use xcm::{
27 latest::{prelude::*, Weight as XCMWeight},
28 opaque::latest::AssetTransferFilter,
29 v5, DoubleEncoded,
30};
31use xcm_primitives::MAX_ASSETS;
32
33trait WeighMultiAssets {
34 fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight;
35}
36
37trait WeighMultiAssetsFilter {
38 fn weigh_multi_assets_filter(&self, weight: Weight) -> XCMWeight;
39}
40
41impl WeighMultiAssetsFilter for AssetFilter {
42 fn weigh_multi_assets_filter(&self, weight: Weight) -> XCMWeight {
43 match self {
44 Self::Definite(assets) => {
45 weight.saturating_mul(assets.inner().into_iter().count() as u64)
46 }
47 Self::Wild(AllCounted(count) | AllOfCounted { count, .. }) => {
48 weight.saturating_mul(min(MAX_ASSETS, *count) as u64)
49 }
50 Self::Wild(All | AllOf { .. }) => weight.saturating_mul(MAX_ASSETS as u64),
51 }
52 }
53}
54
55impl WeighMultiAssets for Assets {
56 fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight {
57 weight.saturating_mul(self.inner().into_iter().count() as u64)
58 }
59}
60
61pub struct XcmWeight<Runtime, Call>(core::marker::PhantomData<(Runtime, Call)>);
62impl<Runtime, Call> XcmWeightInfo<Call> for XcmWeight<Runtime, Call>
63where
64 Runtime: frame_system::Config
65 + pallet_erc20_xcm_bridge::Config
66 + pallet_moonbeam_foreign_assets::Config,
67{
68 fn withdraw_asset(assets: &Assets) -> XCMWeight {
69 assets.inner().iter().fold(Weight::zero(), |acc, asset| {
70 acc.saturating_add(XcmFungibleWeight::<Runtime>::withdraw_asset(&asset))
71 })
72 }
73 fn reserve_asset_deposited(_assets: &Assets) -> XCMWeight {
75 XcmFungibleWeight::<Runtime>::reserve_asset_deposited()
76 }
77 fn receive_teleported_asset(assets: &Assets) -> XCMWeight {
78 assets.weigh_multi_assets(XcmFungibleWeight::<Runtime>::receive_teleported_asset())
79 }
80 fn query_response(
81 _query_id: &u64,
82 _response: &Response,
83 _max_weight: &Weight,
84 _querier: &Option<Location>,
85 ) -> XCMWeight {
86 XcmGeneric::<Runtime>::query_response()
87 }
88 fn transfer_asset(assets: &Assets, _dest: &Location) -> XCMWeight {
89 assets.inner().iter().fold(Weight::zero(), |acc, asset| {
90 acc.saturating_add(XcmFungibleWeight::<Runtime>::transfer_asset(&asset))
91 })
92 }
93 fn transfer_reserve_asset(assets: &Assets, _dest: &Location, _xcm: &Xcm<()>) -> XCMWeight {
94 assets.inner().iter().fold(Weight::zero(), |acc, asset| {
95 acc.saturating_add(XcmFungibleWeight::<Runtime>::transfer_reserve_asset(&asset))
96 })
97 }
98 fn transact(
99 _origin_type: &OriginKind,
100 _require_weight_at_most: &Option<Weight>,
101 _call: &DoubleEncoded<Call>,
102 ) -> XCMWeight {
103 XcmGeneric::<Runtime>::transact()
104 }
105 fn hrmp_new_channel_open_request(
106 _sender: &u32,
107 _max_message_size: &u32,
108 _max_capacity: &u32,
109 ) -> XCMWeight {
110 Weight::MAX
112 }
113 fn hrmp_channel_accepted(_recipient: &u32) -> XCMWeight {
114 Weight::MAX
116 }
117 fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> XCMWeight {
118 Weight::MAX
120 }
121 fn clear_origin() -> XCMWeight {
122 XcmGeneric::<Runtime>::clear_origin()
123 }
124 fn descend_origin(_who: &InteriorLocation) -> XCMWeight {
125 XcmGeneric::<Runtime>::descend_origin()
126 }
127 fn report_error(_query_response_info: &QueryResponseInfo) -> XCMWeight {
128 XcmGeneric::<Runtime>::report_error()
129 }
130 fn deposit_asset(assets: &AssetFilter, _dest: &Location) -> XCMWeight {
131 assets.weigh_multi_assets_filter(XcmFungibleWeight::<Runtime>::deposit_asset())
132 }
133 fn deposit_reserve_asset(assets: &AssetFilter, _dest: &Location, _xcm: &Xcm<()>) -> XCMWeight {
134 assets.weigh_multi_assets_filter(XcmFungibleWeight::<Runtime>::deposit_reserve_asset())
135 }
136 fn exchange_asset(_give: &AssetFilter, _receive: &Assets, _maximal: &bool) -> XCMWeight {
137 Weight::MAX
138 }
139 fn initiate_reserve_withdraw(
140 _assets: &AssetFilter,
141 _reserve: &Location,
142 _xcm: &Xcm<()>,
143 ) -> XCMWeight {
144 XcmGeneric::<Runtime>::initiate_reserve_withdraw()
148 }
149 fn initiate_teleport(_assets: &AssetFilter, _dest: &Location, _xcm: &Xcm<()>) -> XCMWeight {
150 XcmFungibleWeight::<Runtime>::initiate_teleport()
151 }
152 fn report_holding(_response_info: &QueryResponseInfo, _assets: &AssetFilter) -> Weight {
153 XcmGeneric::<Runtime>::report_holding()
154 }
155 fn buy_execution(_fees: &Asset, _weight_limit: &WeightLimit) -> XCMWeight {
156 XcmGeneric::<Runtime>::buy_execution()
157 }
158 fn refund_surplus() -> XCMWeight {
159 XcmGeneric::<Runtime>::refund_surplus()
160 }
161 fn set_error_handler(_xcm: &Xcm<Call>) -> XCMWeight {
162 XcmGeneric::<Runtime>::set_error_handler()
163 }
164 fn set_appendix(_xcm: &Xcm<Call>) -> XCMWeight {
165 XcmGeneric::<Runtime>::set_appendix()
166 }
167 fn clear_error() -> XCMWeight {
168 XcmGeneric::<Runtime>::clear_error()
169 }
170 fn claim_asset(_assets: &Assets, _ticket: &Location) -> XCMWeight {
171 XcmGeneric::<Runtime>::claim_asset()
172 }
173 fn trap(_code: &u64) -> XCMWeight {
174 XcmGeneric::<Runtime>::trap()
175 }
176 fn subscribe_version(_query_id: &QueryId, _max_response_weight: &Weight) -> XCMWeight {
177 XcmGeneric::<Runtime>::subscribe_version()
178 }
179 fn unsubscribe_version() -> XCMWeight {
180 XcmGeneric::<Runtime>::unsubscribe_version()
181 }
182 fn burn_asset(assets: &Assets) -> Weight {
183 assets.weigh_multi_assets(XcmGeneric::<Runtime>::burn_asset())
184 }
185 fn expect_asset(assets: &Assets) -> Weight {
186 assets.weigh_multi_assets(XcmGeneric::<Runtime>::expect_asset())
187 }
188 fn expect_origin(_origin: &Option<Location>) -> Weight {
189 XcmGeneric::<Runtime>::expect_origin()
190 }
191 fn expect_error(_error: &Option<(u32, XcmError)>) -> Weight {
192 XcmGeneric::<Runtime>::expect_error()
193 }
194 fn expect_transact_status(_transact_status: &MaybeErrorCode) -> Weight {
195 XcmGeneric::<Runtime>::expect_transact_status()
196 }
197 fn query_pallet(_module_name: &Vec<u8>, _response_info: &QueryResponseInfo) -> Weight {
198 XcmGeneric::<Runtime>::query_pallet()
199 }
200 fn expect_pallet(
201 _index: &u32,
202 _name: &Vec<u8>,
203 _module_name: &Vec<u8>,
204 _crate_major: &u32,
205 _min_crate_minor: &u32,
206 ) -> Weight {
207 XcmGeneric::<Runtime>::expect_pallet()
208 }
209 fn report_transact_status(_response_info: &QueryResponseInfo) -> Weight {
210 XcmGeneric::<Runtime>::report_transact_status()
211 }
212 fn clear_transact_status() -> Weight {
213 XcmGeneric::<Runtime>::clear_transact_status()
214 }
215 fn universal_origin(_: &Junction) -> Weight {
216 XcmGeneric::<Runtime>::universal_origin()
217 }
218 fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> Weight {
219 Weight::MAX
220 }
221 fn lock_asset(_: &Asset, _: &Location) -> Weight {
222 Weight::MAX
223 }
224 fn unlock_asset(_: &Asset, _: &Location) -> Weight {
225 Weight::MAX
226 }
227 fn note_unlockable(_: &Asset, _: &Location) -> Weight {
228 Weight::MAX
229 }
230 fn request_unlock(_: &Asset, _: &Location) -> Weight {
231 Weight::MAX
232 }
233 fn set_fees_mode(_: &bool) -> Weight {
234 XcmGeneric::<Runtime>::set_fees_mode()
235 }
236 fn set_topic(_topic: &[u8; 32]) -> Weight {
237 XcmGeneric::<Runtime>::set_topic()
238 }
239 fn clear_topic() -> Weight {
240 XcmGeneric::<Runtime>::clear_topic()
241 }
242 fn alias_origin(_: &Location) -> Weight {
243 Weight::MAX
245 }
246 fn unpaid_execution(_: &WeightLimit, _: &Option<Location>) -> Weight {
247 XcmGeneric::<Runtime>::unpaid_execution()
248 }
249 fn pay_fees(_: &v5::Asset) -> Weight {
250 XcmGeneric::<Runtime>::pay_fees()
251 }
252 fn initiate_transfer(
253 _: &v5::Location,
254 _: &Option<AssetTransferFilter>,
255 _: &bool,
256 _: &BoundedVec<AssetTransferFilter, MaxAssetTransferFilters>,
257 _: &v5::Xcm<()>,
258 ) -> Weight {
259 XcmGeneric::<Runtime>::initiate_transfer()
260 }
261 fn execute_with_origin(_: &Option<v5::Junctions>, _: &v5::Xcm<Call>) -> Weight {
262 XcmGeneric::<Runtime>::execute_with_origin()
263 }
264 fn set_hints(_: &BoundedVec<Hint, HintNumVariants>) -> Weight {
265 XcmGeneric::<Runtime>::set_hints()
266 }
267}