mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-25 09:25:46 +00:00
9a04ebbfb0
Currently `transfer_assets` from pallet-xcm covers 4 main different transfer types: - `localReserve` - `DestinationReserve` - `Teleport` - `RemoteReserve` For the first three, the local execution and the remote message sending are separated, and fees are deducted in pallet-xcm itself: https://github.com/paritytech/polkadot-sdk/blob/3410dfb3929462da88be2da813f121d8b1cf46b3/polkadot/xcm/pallet-xcm/src/lib.rs#L1758. For the 4th case `RemoteReserve`, pallet-xcm is still relying on the xcm-executor itself to send the message (through the `initiateReserveWithdraw` instruction). In this case, if delivery fees need to be charged, it is not possible to do so because the `jit_withdraw` mode has not being set. This PR proposes to still use the `initiateReserveWithdraw` but prepending a `setFeesMode { jit_withdraw: true }` to make sure delivery fees can be paid. A test-case is also added to present the aforementioned case --------- Co-authored-by: Adrian Catangiu <adrian@parity.io>
88 lines
3.2 KiB
Rust
88 lines
3.2 KiB
Rust
// Copyright (C) Parity Technologies (UK) Ltd.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#[cfg(test)]
|
|
mod imports {
|
|
pub use codec::Encode;
|
|
|
|
// Substrate
|
|
pub use frame_support::{
|
|
assert_err, assert_ok,
|
|
pallet_prelude::Weight,
|
|
sp_runtime::{DispatchError, DispatchResult, ModuleError},
|
|
traits::fungibles::Inspect,
|
|
};
|
|
|
|
// Polkadot
|
|
pub use xcm::{
|
|
prelude::{AccountId32 as AccountId32Junction, *},
|
|
v3,
|
|
};
|
|
|
|
// Cumulus
|
|
pub use asset_test_utils::xcm_helpers;
|
|
pub use emulated_integration_tests_common::{
|
|
test_parachain_is_trusted_teleporter,
|
|
xcm_emulator::{
|
|
assert_expected_events, bx, Chain, Parachain as Para, RelayChain as Relay, Test,
|
|
TestArgs, TestContext, TestExt,
|
|
},
|
|
xcm_helpers::{non_fee_asset, xcm_transact_paid_execution},
|
|
ASSETS_PALLET_ID, RESERVABLE_ASSET_ID, XCM_V3,
|
|
};
|
|
pub use parachains_common::Balance;
|
|
pub use rococo_system_emulated_network::{
|
|
asset_hub_rococo_emulated_chain::{
|
|
genesis::{AssetHubRococoAssetOwner, ED as ASSET_HUB_ROCOCO_ED},
|
|
AssetHubRococoParaPallet as AssetHubRococoPallet,
|
|
},
|
|
penpal_emulated_chain::{
|
|
PenpalAParaPallet as PenpalAPallet, PenpalAssetOwner,
|
|
PenpalBParaPallet as PenpalBPallet, ED as PENPAL_ED,
|
|
},
|
|
rococo_emulated_chain::{genesis::ED as ROCOCO_ED, RococoRelayPallet as RococoPallet},
|
|
AssetHubRococoPara as AssetHubRococo, AssetHubRococoParaReceiver as AssetHubRococoReceiver,
|
|
AssetHubRococoParaSender as AssetHubRococoSender, BridgeHubRococoPara as BridgeHubRococo,
|
|
BridgeHubRococoParaReceiver as BridgeHubRococoReceiver, PenpalAPara as PenpalA,
|
|
PenpalAParaReceiver as PenpalAReceiver, PenpalAParaSender as PenpalASender,
|
|
PenpalBPara as PenpalB, PenpalBParaReceiver as PenpalBReceiver, RococoRelay as Rococo,
|
|
RococoRelayReceiver as RococoReceiver, RococoRelaySender as RococoSender,
|
|
};
|
|
|
|
// Runtimes
|
|
pub use asset_hub_rococo_runtime::xcm_config::{
|
|
TokenLocation as RelayLocation, XcmConfig as AssetHubRococoXcmConfig,
|
|
};
|
|
pub use penpal_runtime::xcm_config::{
|
|
LocalReservableFromAssetHub as PenpalLocalReservableFromAssetHub,
|
|
LocalTeleportableToAssetHub as PenpalLocalTeleportableToAssetHub,
|
|
};
|
|
pub use rococo_runtime::xcm_config::XcmConfig as RococoXcmConfig;
|
|
|
|
pub const ASSET_ID: u32 = 3;
|
|
pub const ASSET_MIN_BALANCE: u128 = 1000;
|
|
|
|
pub type RelayToSystemParaTest = Test<Rococo, AssetHubRococo>;
|
|
pub type RelayToParaTest = Test<Rococo, PenpalA>;
|
|
pub type ParaToRelayTest = Test<PenpalA, Rococo>;
|
|
pub type SystemParaToRelayTest = Test<AssetHubRococo, Rococo>;
|
|
pub type SystemParaToParaTest = Test<AssetHubRococo, PenpalA>;
|
|
pub type ParaToSystemParaTest = Test<PenpalA, AssetHubRococo>;
|
|
pub type ParaToParaThroughRelayTest = Test<PenpalA, PenpalB, Rococo>;
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests;
|