-
Notifications
You must be signed in to change notification settings - Fork 1.2k
xcm: multi-hop mixed asset transfers not working because of missing transport fee #4832
Description
Description
Sending XCM messages to other chains requires paying a "transport fee". This can be paid either:
- from
originlocal account ifjit_withdraw = true, - taken from Holding register otherwise.
This currently works for following hops/scenarios:
- On destination no transport fee needed (only sending costs, not receiving),
- Local/originating chain: just set JIT=true and fee will be paid from signed account,
- Intermediary hops - only if intermediary is acting as reserve between two untrusted chains (aka only for
DepositReserveAssetinstruction) - this was fixed in xcm-executor: DepositReserveAsset charges delivery fees from inner assets #3142
But now we're seeing more complex asset transfers that are mixing reserve transfers with teleports depending on the involved chains.
E.g. transferring DOT between Relay and parachain, but through AH (using AH instead of the Relay chain as parachain's DOT reserve).
In the Parachain --1--> AssetHub --2--> Relay scenario, DOT has to be reserve-withdrawn in leg 1, then teleported in leg 2.
On the intermediary hop (AssetHub), InitiateTeleport fails to send onward message because of missing transport fees. We also can't rely on jit_withdraw because the original origin is lost on the way, and even if it weren't we can't rely on the user having funded accounts on each hop along the way.
Solution
Charge the transport fee in the executor from the transferred assets (if available).
Metadata
Metadata
Assignees
Labels
Type
Projects
Status