Context
There’s an issue with the existing transfer_assets
and (limited_)reserve_transfer_assets
extrinsics and the upcoming Asset Hub Migration (AHM).
TL;DR: transfer_assets
and (limited_)reserve_transfer_assets
automatically find the reserve for a particular asset. Right now they find the Relay Chain as the reserve for DOT|KSM|PAS but post-AHM it will be Asset Hub. We are making the extrinsic throw an error pre-AHM only for DOT|KSM|PAS reserve transfers and will make it work again post-AHM but changing the reserve, once we make sure every parachain has successfully switched their reserve of DOT. DOT|KSM|PAS teleports work, the same is true for cross-chain transfers with any other asset.
For more information, take a look at the document detailing the issue.
As a parachain
The on-chain patch making the extrinsic throw an error for DOT|KSM|PAS reserve transfers has been released on the latest SDK version and backported to all the maintained stable versions, make sure to update. This will make sure that the extrinsic errors instead of funds getting potentially trapped on the recipient chain, which is much worse UX.
The list of patched versions is the following:
-
stable2506
-
stable2503-8
-
stable2412-8
-
stable2409-10
This patch should be ingested before the Asset Hub Migration, otherwise users’ funds might be trapped.
Before AHM, you should coordinate with your dapps to make sure they switched to using one of the alternative extrinsics. This will ensure operations continue as normal.
Also please make sure to update your parachain to trust AH as a reserve for the native token.
As a dapp
If you are currently using the transfer_assets
or the (limited_)reserve_transfer_assets
extrinsic for doing cross-chain transfers, know that it will start failing when used for DOT|KSM|PAS reserve transfers. You have a couple of options to switch. They are listed here in order of ease of use:
-
Paraspell: this SDK for XCM abstracts away the details of doing cross-chain transfers. It supports both PJS and PAPI and already includes the fix for this issue. It’ll use the alternatives below when available.
-
transfer_assets_using_type_and_then
: will work since you specify the reserve explicitly. It supports both teleports and reserve transfers in the same message just as you’d expect with transfer_assets. -
execute
: if the chain allows it, you could build an XCM program that does the reserve transfer using the correct reserve location and pass it to execute
You should make this change as soon as possible. If you don’t:
-
Whenever the patch is integrated by the chain you’re targeting, the problematic extrinsics will start failing and your dapp will be broken.
-
If the chain used by your app never integrates the patch, after the Asset Hub Migration, users’ funds might be trapped when using your dapp.
Using any of the alternatives above will make your dapp work correctly and with good UX regardless of the state of AHM or which chains applied the runtime patch fix or when.