1

I'm trying to send USDT between Hydration and other parachains. When I don't withdraw DOT to Holding (beside USDT), the message fails on Asset Hub with ERROR: NotHoldingFees. xTokens.transfer doesn't work seemingly for this exact reason, so i'm using custom built messages and xcm.execute

Hydration calldata examples

Works (withdraws DOT to holding): 0x6b03030c0008000100000223d04800010300a10f043205011f000284d7171300010300a10f043205011f000284d71700100100010100a10f0813000002043205011f0002093d00000e0101000002043205011f00010100411f081300010300a10f043205011f0002093d00000d010000010100d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0700c817a804c2270900

Doesn't work (withdraws just USDT): 0x6b03030c000400010300a10f043205011f00025a62021300010300a10f043205011f00025a620200100100010100a10f0813000002043205011f0002093d00000e0101000002043205011f00010100411f081300010300a10f043205011f0002093d00000d010000010100d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0700c817a804c2270900

Can USDT alone currently be used to be transferred directly between parachains?

1 Answer 1

3

This is a known limitation with a fix already under way.

The problem is that XCM delivery/transport fees are only payable using DOT (while XCM execution fees have been enhanced to allow auto-swapping to DOT).

The xcm-executor has been enhanced with support for auto-swapping to DOT for delivery fees too; but this enhancement has been just released with the polkadot-stable2409 Polkadot-SDK release. It has not been integrated in the Polkadot or Kusama runtimes yet.

You can expect this support to be deployed live with next Runtimes 1.4.0 release.

Side note: an asset's sufficiency is completely orthogonal to its ability to cover fees (execution or transport). Sufficiency allows account to exist with said asset alone (doesn't also need DOT ED). Paying fees using other assets than DOT can be done with any sufficient or non-sufficient asset as long as there is a liquidity pool pair with said asset and DOT, so that DOT can be bought by the xcm-executor on-demand for covering fees.

3
  • 1
    You should also be able to work around this limitation by only withdrawing USDT and then adding a Transact that swaps for some DOT. Commented Oct 3 at 8:19
  • But Transact won't put the DOT into holding from which fee is deducted?
    – jgreen
    Commented Oct 3 at 12:38
  • 1
    Without github.com/polkadot-fellows/RFCs/pull/122 (XCMv5), you cannot add any subsequent instructions that need the origin after an asset transfer. The asset transfer injects ClearOrigin, so any further Transact or account manipulation is not possible now.
    – adrian
    Commented Oct 4 at 9:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.