mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 12:17:58 +00:00
18257373b3
## Motivation `pallet-xcm` is the main user-facing interface for XCM functionality, including assets manipulation functions like `teleportAssets()` and `reserve_transfer_assets()` calls. While `teleportAsset()` works both ways, `reserve_transfer_assets()` works only for sending reserve-based assets to a remote destination and beneficiary when the reserve is the _local chain_. ## Solution This PR enhances `pallet_xcm::(limited_)reserve_withdraw_assets` to support transfers when reserves are other chains. This will allow complete, **bi-directional** reserve-based asset transfers user stories using `pallet-xcm`. Enables following scenarios: - transferring assets with local reserve (was previously supported iff asset used as fee also had local reserve - now it works in all cases), - transferring assets with reserve on destination, - transferring assets with reserve on remote/third-party chain (iff assets and fees have same remote reserve), - transferring assets with reserve different than the reserve of the asset to be used as fees - meaning can be used to transfer random asset with local/dest reserve while using DOT for fees on all involved chains, even if DOT local/dest reserve doesn't match asset reserve, - transferring assets with any type of local/dest reserve while using fees which can be teleported between involved chains. All of the above is done by pallet inner logic without the user having to specify which scenario/reserves/teleports/etc. The correct scenario and corresponding XCM programs are identified, and respectively, built automatically based on runtime configuration of trusted teleporters and trusted reserves. #### Current limitations: - while `fees` and "non-fee" `assets` CAN have different reserves (or fees CAN be teleported), the remaining "non-fee" `assets` CANNOT, among themselves, have different reserve locations (this is also implicitly enforced by `MAX_ASSETS_FOR_TRANSFER=2`, but this can be safely increased in the future). - `fees` and "non-fee" `assets` CANNOT have **different remote** reserves (this could also be supported in the future, but adds even more complexity while possibly not being worth it - we'll see what the future holds). Fixes https://github.com/paritytech/polkadot-sdk/issues/1584 Fixes https://github.com/paritytech/polkadot-sdk/issues/2055 --------- Co-authored-by: Francisco Aguirre <franciscoaguirreperez@gmail.com> Co-authored-by: Branislav Kontur <bkontur@gmail.com>
47 lines
1.7 KiB
TOML
47 lines
1.7 KiB
TOML
[package]
|
|
name = "staging-xcm-executor"
|
|
description = "An abstract and configurable XCM message executor."
|
|
authors.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
version = "1.0.0"
|
|
|
|
[dependencies]
|
|
impl-trait-for-tuples = "0.2.2"
|
|
environmental = { version = "1.1.4", default-features = false }
|
|
parity-scale-codec = { version = "3.6.1", default-features = false, features = ["derive"] }
|
|
scale-info = { version = "2.5.0", default-features = false, features = ["derive", "serde"] }
|
|
xcm = { package = "staging-xcm", path = "..", default-features = false }
|
|
sp-std = { path = "../../../substrate/primitives/std", default-features = false }
|
|
sp-io = { path = "../../../substrate/primitives/io", default-features = false }
|
|
sp-arithmetic = { path = "../../../substrate/primitives/arithmetic", default-features = false }
|
|
sp-core = { path = "../../../substrate/primitives/core", default-features = false }
|
|
sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
|
|
sp-weights = { path = "../../../substrate/primitives/weights", default-features = false }
|
|
frame-support = { path = "../../../substrate/frame/support", default-features = false }
|
|
log = { version = "0.4.17", default-features = false }
|
|
frame-benchmarking = { path = "../../../substrate/frame/benchmarking", default-features = false, optional = true }
|
|
|
|
[features]
|
|
default = [ "std" ]
|
|
runtime-benchmarks = [
|
|
"frame-benchmarking/runtime-benchmarks",
|
|
"frame-support/runtime-benchmarks",
|
|
"sp-runtime/runtime-benchmarks",
|
|
]
|
|
std = [
|
|
"environmental/std",
|
|
"frame-benchmarking/std",
|
|
"frame-support/std",
|
|
"log/std",
|
|
"parity-scale-codec/std",
|
|
"scale-info/std",
|
|
"sp-arithmetic/std",
|
|
"sp-core/std",
|
|
"sp-io/std",
|
|
"sp-runtime/std",
|
|
"sp-std/std",
|
|
"sp-weights/std",
|
|
"xcm/std",
|
|
]
|