Managing SAs on multiple Reserve chains for same asset

,

WHY you should just use AH as DOT/KSM reserve

The main issue with routing DOT through the Relay Chain is that the Relay Chain doesn’t “understand” any other assets/tokens other than DOT. So you’re basically limiting yourself to splitting multi-asset transfers into multiple XCM programs with independent life-cycles.

(Unless UIs do a lot of heavy lifting) This usually translates to the user having to also split their workflow and do “prep work transfers” to then be able to send whatever they wanted to send in the first place.

In practice, AssetHub can act as reserve for any asset within the ecosystem or externally bridged in.

This means that any flow/use-case/user-story of moving even multiple assets at once around the ecosystem can work with a single XCM program.
But only works smoothly without corner cases and gotchas iff AH can act as reserve for all assets involved.

So not supporting AH as reserve for DOT is mostly punishing your business and users because it keeps your flows and user-stories fragmented.

How to use AH as DOT/KSM reserve

More and better tooling for this is being built, better XCM instructions are under way, but in the meantime you can use pallet-xcm::transfer_assets_using_type_and_then() which is available in polkadot-sdk versions v1.7 and v1.11+ and is also available on AssetHubs starting with v1.2.4 (spec_version: 1002004).

Example user-story: KSM, USDT and BLA in single transfer

For this example we’ll send native KSM, trust-backed asset USDT and foreign/bridged asset DOT from Kusama AssetHub to Basilisk (or whatever) in a single transfer, while paying fees with native KSM:

PJS extrinsic example

Example user-story: DOT/KSM from Relay to Para through AH reserve

Transfer KSM from Kusama Relay to Kreivo parachain while using AH as the KSM reserve location (assuming Kreivo accepted AH as KSM reserve):

PJS extrinsic example

Full emulated test here.

More examples

More emulated user stories can be found in the AssetHub and BridgeHub emulated integration tests:

Example test for bridged asset AssetHub->Parachain - the actual call used here.
Example test for bridged asset Parachain->AssetHub - the actual call used here.

In general, the emulated tests should cover all transfers scenarios and showcase how to do anything. Please let me know if you have a scenario not covered there.

6 Likes