Asset Hub as a DOT reserve
Multiple parachains in the ecosystem are currently facing a dilemma:
How to handle DOT reserves on chains other than PolkadotRelay? Nowadays in particular, handling Polkadot AssetHub as a reserve for DOT - which is seeing many new usecases.
The main problem with “ChainX” allowing multiple chains as a reserve for DOT (or any asset for that matter) is that “ChainX” needs to balance its SAs (sovereign accounts) on the reserve chains so that when their users “claim” a reserve asset (i.e. transfer DOT to Relay or AH) their SA there has liquidity to handle it.
Generalizing the problem before looking at solutions
The problem is not limited to DOT. The problem ultimately comes from having both reserve-based transfers as well as teleports allowed in our ecosystem.
Once you allow a teleport between two chains, then both of those should be able to act as reserves, otherwise the teleport doesn’t make sense.
E.g.: ChainX registers TOKX
as a “ForeignAsset” on AH and teleports liquidity there. ChainX actually wants to allow AH to act as a reserve for them. That way, TOKX
is automatically exposed to all the other chains/bridges/CEXs/etc that are already (or will be) integrated with AH.
The “users” of TOKX
will have the same issue: TOKX
’s reserve is split between AH and ChainX.
Solution(s)
Automated SAs rebalancing
Unfortunately, there is no alternative scalable option I can see other than supporting these multiple reserves and (auto)balancing SAs.
The silver lining here is that the problem is generic and asset/chain agnostic, and we can decide on some mechanism to auto-balance these SAs, that every chain can use.
E.g. idea: a dedicated pallet for balancing chain’s SAs on other chains. Root/admin can register several SA locations per asset along with some % distribution for each, that periodically polls the remote balances of those SAs and moves liquidity around to stay within configured distribution %.
Or could be some on-demand balancing protocol remote chain registers their SA on the local chain along with a “low balance threshold” that triggers an XCM notification to the owner chain that local SA needs re-topping.
The point is, we decide we need some autobalancing, then someone implements a generic mechanism that all chains can use.
Drop “Teleports”
Unlikely, but worth mentioning.
Everything is a reserve transfer. DOT on AH is not exactly the same DOT as on Relay. DOT reserve transferred from Relay can only be reclaimed on the Relay, same for DOT reserve transferred from AH.
For generic assets, “foreign assets” on AH are also not fungible with same assets coming from their “owner” chain, they have to be kept/tracked separately if we want to not worry about SA balances.
My 2c: it’d be easier for chains, but worse UX for users and the ecosystem.
P.S.: some existing discussions here too: pallet-xcm: add new extrinsic for asset transfers using explicit XCM transfer types by acatangiu · Pull Request #3695 · paritytech/polkadot-sdk · GitHub