@paraspell/sdk-core 12.2.1 → 12.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.d.ts +47 -74
  2. package/dist/index.mjs +1172 -1368
  3. package/package.json +4 -4
package/dist/index.mjs CHANGED
@@ -1,11 +1,11 @@
1
1
  import { blake2b } from '@noble/hashes/blake2.js';
2
- import { isChainEvm, getAssetsObject, InvalidCurrencyError, extractAssetLocation, findAssetInfoOrThrow, getOtherAssets, isTAsset, findNativeAssetInfoOrThrow, findAssetInfo, getExistentialDepositOrThrow, isSymbolMatch, getNativeAssetSymbol, getEdFromAssetOrThrow, hasDryRunSupport, findAssetOnDestOrThrow, findAssetInfoOnDest, isAssetEqual, isStableCoinAsset, isOverrideLocationSpecifier, getRelayChainSymbol, isSymbolSpecifier, findNativeAssetInfo, isAssetXcEqual, normalizeLocation, normalizeSymbol, Native, hasXcmPaymentApiSupport, findAssetInfoByLoc } from '@paraspell/assets';
2
+ import { isChainEvm, getAssetsObject, InvalidCurrencyError, extractAssetLocation, findAssetInfoOrThrow, isTAsset, findNativeAssetInfoOrThrow, findAssetInfo, getExistentialDepositOrThrow, isSymbolMatch, getNativeAssetSymbol, getEdFromAssetOrThrow, hasDryRunSupport, findAssetOnDestOrThrow, findAssetInfoOnDest, isAssetEqual, isStableCoinAsset, isOverrideLocationSpecifier, getRelayChainSymbol, isSymbolSpecifier, findNativeAssetInfo, isAssetXcEqual, normalizeLocation, normalizeSymbol, getOtherAssets, Native, hasXcmPaymentApiSupport } from '@paraspell/assets';
3
3
  export * from '@paraspell/assets';
4
4
  import { base58 } from '@scure/base';
5
5
  import { isAddress, parseUnits as parseUnits$1, formatUnits as formatUnits$1, getContract, createPublicClient, http, pad, toHex, getAddress, concat, keccak256 } from 'viem';
6
- import { replaceBigInt, isTLocation, Version, hasJunction, getJunctionValue, isRelayChain, deepEqual, Parents, isExternalChain, isSubstrateBridge, PARACHAINS, RELAYCHAINS, isTrustedChain } from '@paraspell/sdk-common';
6
+ import { replaceBigInt, isTLocation, Version, hasJunction, getJunctionValue, isRelayChain, deepEqual, Parents, isExternalChain, isSnowbridge, isBridge, PARACHAINS, RELAYCHAINS, isSubstrateBridge, isTrustedChain } from '@paraspell/sdk-common';
7
7
  export * from '@paraspell/sdk-common';
8
- import { mainnet, moonbeam, moonriver } from 'viem/chains';
8
+ import { mainnet, sepolia, moonbeam, moonriver } from 'viem/chains';
9
9
  import { getSupportedPallets, getNativeAssetsPallet, getOtherAssetsPallets, getSupportedPalletsDetails } from '@paraspell/pallets';
10
10
  export * from '@paraspell/pallets';
11
11
 
@@ -690,6 +690,18 @@ var TransferToAhNotSupported = /*#__PURE__*/function (_Error) {
690
690
  return _createClass(TransferToAhNotSupported);
691
691
  }(/*#__PURE__*/_wrapNativeSuper(Error));
692
692
 
693
+ var TypeAndThenUnavailableError = /*#__PURE__*/function (_Error) {
694
+ function TypeAndThenUnavailableError(message) {
695
+ var _this;
696
+ _classCallCheck(this, TypeAndThenUnavailableError);
697
+ _this = _callSuper(this, TypeAndThenUnavailableError, [message]);
698
+ _this.name = 'TypeAndThenUnavailableError';
699
+ return _this;
700
+ }
701
+ _inherits(TypeAndThenUnavailableError, _Error);
702
+ return _createClass(TypeAndThenUnavailableError);
703
+ }(/*#__PURE__*/_wrapNativeSuper(Error));
704
+
693
705
  /**
694
706
  * UnableToComputeError is thrown when a computation cannot be performed.
695
707
  */
@@ -1254,152 +1266,166 @@ var getAssetReserveChain = function getAssetReserveChain(chain, assetLocation) {
1254
1266
  return chain;
1255
1267
  };
1256
1268
 
1257
- var ERR_LOCATION_DEST_NOT_SUPPORTED = 'XCM Location destinations are not supported for specific transfer you are trying to create. In special cases such as xTokens or xTransfer pallet try using address locaation instead (for both destination and address in same location set (eg. X2 - Parachain, Address). For further assistance please open issue in our repository.';
1269
+ var buildClaimAssetsParams = function buildClaimAssetsParams(options) {
1270
+ var assets = options.assets,
1271
+ version = options.version;
1272
+ var beneficiary = createBeneficiaryLocation(options);
1273
+ return {
1274
+ assets: addXcmVersionHeader(assets, version),
1275
+ beneficiary: addXcmVersionHeader(beneficiary, version)
1276
+ };
1277
+ };
1258
1278
 
1259
- var resolveLocationFromDest = function resolveLocationFromDest(destination, asset) {
1260
- if (_typeof(destination) === 'object') return destination;
1261
- if (isRelayChain(destination)) return DOT_LOCATION;
1262
- // If it is a native asset, search by symbol on AssetHub and use the location from there
1263
- var assetHubAsset = getOtherAssets(destination).find(function (ahAsset) {
1264
- var _ahAsset$symbol, _asset$symbol;
1265
- return ((_ahAsset$symbol = ahAsset.symbol) === null || _ahAsset$symbol === void 0 ? void 0 : _ahAsset$symbol.toLowerCase()) === ((_asset$symbol = asset.symbol) === null || _asset$symbol === void 0 ? void 0 : _asset$symbol.toLowerCase());
1266
- });
1267
- if (!(assetHubAsset !== null && assetHubAsset !== void 0 && assetHubAsset.location)) {
1268
- throw new InvalidCurrencyError("Asset ".concat(asset.symbol, " not found or has no location"));
1279
+ var resolveAssets = function resolveAssets(_ref, version) {
1280
+ var api = _ref.api,
1281
+ chain = _ref.chain,
1282
+ currency = _ref.currency;
1283
+ var normalizeAsset = function normalizeAsset(amount, currency) {
1284
+ var asset = findAssetInfoOrThrow(chain, currency, null);
1285
+ assertHasLocation(asset);
1286
+ var abstracted = abstractDecimals(amount, asset.decimals, api);
1287
+ return createAsset(version, abstracted, localizeLocation(chain, asset.location));
1288
+ };
1289
+ if (Array.isArray(currency)) {
1290
+ if (currency.every(function (asset) {
1291
+ return isTAsset(asset);
1292
+ })) {
1293
+ return currency.map(function (asset) {
1294
+ return _objectSpread2(_objectSpread2({}, asset), {}, {
1295
+ fun: {
1296
+ Fungible: BigInt(asset.fun.Fungible)
1297
+ }
1298
+ });
1299
+ });
1300
+ } else {
1301
+ return currency.map(function (currency) {
1302
+ return normalizeAsset(currency.amount, currency);
1303
+ });
1304
+ }
1269
1305
  }
1270
- return assetHubAsset.location;
1306
+ return [normalizeAsset(currency.amount, currency)];
1271
1307
  };
1272
- var buildLocation = function buildLocation(_ref) {
1273
- var paraIdTo = _ref.paraIdTo,
1274
- asset = _ref.asset,
1275
- origin = _ref.origin,
1276
- destination = _ref.destination;
1277
- if (asset.isNative) {
1278
- return resolveLocationFromDest(destination, asset);
1279
- }
1280
- var createDefaultLocation = function createDefaultLocation(assetId) {
1281
- return {
1282
- parents: Parents.ONE,
1283
- interior: {
1284
- X3: [{
1285
- Parachain: paraIdTo
1286
- }, {
1287
- PalletInstance: '50'
1288
- }, {
1289
- GeneralIndex: BigInt(assetId)
1290
- }]
1308
+
1309
+ var claimAssets = /*#__PURE__*/function () {
1310
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options) {
1311
+ var api, chain, address, pallets, supportedPallet, version, assets, params, call;
1312
+ return _regenerator().w(function (_context) {
1313
+ while (1) switch (_context.n) {
1314
+ case 0:
1315
+ api = options.api, chain = options.chain, address = options.address;
1316
+ validateAddress(api, address, chain, true);
1317
+ _context.n = 1;
1318
+ return api.init(chain, TX_CLIENT_TIMEOUT_MS);
1319
+ case 1:
1320
+ pallets = getSupportedPallets(chain);
1321
+ supportedPallet = pallets.find(function (p) {
1322
+ return p === 'PolkadotXcm' || p === 'XcmPallet';
1323
+ });
1324
+ if (supportedPallet) {
1325
+ _context.n = 2;
1326
+ break;
1327
+ }
1328
+ throw new UnsupportedOperationError('Unsupported pallet for asset claim');
1329
+ case 2:
1330
+ version = getChainVersion(chain);
1331
+ assets = resolveAssets(options, version);
1332
+ params = buildClaimAssetsParams(_objectSpread2(_objectSpread2({}, options), {}, {
1333
+ version: version,
1334
+ assets: assets
1335
+ }));
1336
+ call = {
1337
+ module: supportedPallet,
1338
+ method: 'claim_assets',
1339
+ params: params
1340
+ };
1341
+ return _context.a(2, api.deserializeExtrinsics(call));
1291
1342
  }
1292
- };
1343
+ }, _callee);
1344
+ }));
1345
+ return function claimAssets(_x) {
1346
+ return _ref.apply(this, arguments);
1293
1347
  };
1294
- var isBifrostOrigin = origin === 'BifrostPolkadot' || origin === 'BifrostKusama';
1295
- if (isBifrostOrigin) {
1296
- return createDefaultLocation(asset.assetId);
1297
- }
1298
- if (asset.location) {
1299
- return asset.location;
1300
- } else {
1301
- return createDefaultLocation(asset.assetId);
1302
- }
1303
- };
1348
+ }();
1304
1349
 
1305
- var createDefaultCurrencySelection = function createDefaultCurrencySelection(input) {
1306
- var asset = input.asset,
1307
- version = input.version;
1308
- var location = buildLocation(input);
1309
- var multiAsset = createAsset(version, asset.amount, location);
1310
- return addXcmVersionHeader(multiAsset, version);
1350
+ var isAssetHub = function isAssetHub(chain) {
1351
+ return chain === 'AssetHubPolkadot' || chain === 'AssetHubKusama';
1311
1352
  };
1312
- var getModifiedCurrencySelection = function getModifiedCurrencySelection(input) {
1313
- var version = input.version,
1314
- asset = input.asset,
1315
- overriddenAsset = input.overriddenAsset;
1316
- if (overriddenAsset) {
1317
- return addXcmVersionHeader(maybeOverrideAssets(version, asset.amount, [], overriddenAsset), version);
1318
- }
1319
- return createDefaultCurrencySelection(input);
1353
+ var isBridgeHub = function isBridgeHub(chain) {
1354
+ return chain === 'BridgeHubPolkadot' || chain === 'BridgeHubKusama';
1320
1355
  };
1321
-
1322
- var getXTokensParams = function getXTokensParams(isMultiAssetTransfer, currencySelection, destLocation, amount, weightLimit, version, overriddenAsset) {
1323
- var versionedDestLocation = addXcmVersionHeader(destLocation, version);
1324
- if (!isMultiAssetTransfer) {
1325
- return {
1326
- currency_id: currencySelection,
1327
- amount: BigInt(amount),
1328
- dest: versionedDestLocation,
1329
- dest_weight_limit: weightLimit
1330
- };
1331
- }
1332
- var isOverriddenMultiAssets = overriddenAsset && !isTLocation(overriddenAsset);
1333
- var assetKey = isOverriddenMultiAssets ? 'assets' : 'asset';
1334
- var feeAssetIndex = isOverriddenMultiAssets ? overriddenAsset.findIndex(function (asset) {
1335
- return asset.isFeeAsset;
1336
- }) : undefined;
1337
- var feeIndexWithFallback = feeAssetIndex === -1 ? 0 : feeAssetIndex;
1338
- return _objectSpread2(_objectSpread2(_defineProperty({}, assetKey, currencySelection), isOverriddenMultiAssets && {
1339
- fee_item: feeIndexWithFallback
1340
- }), {}, {
1341
- dest: versionedDestLocation,
1342
- dest_weight_limit: weightLimit
1343
- });
1356
+ var isPeople = function isPeople(chain) {
1357
+ return chain === 'PeoplePolkadot' || chain === 'PeopleKusama';
1344
1358
  };
1345
-
1346
- var shouldUseMultiAssetTransfer = function shouldUseMultiAssetTransfer(_ref) {
1347
- var origin = _ref.origin,
1348
- destination = _ref.destination,
1349
- scenario = _ref.scenario,
1350
- overriddenAsset = _ref.overriddenAsset,
1351
- useMultiAssetTransfer = _ref.useMultiAssetTransfer;
1352
- var isAstarOrShidenToRelay = scenario === 'ParaToRelay' && (origin === 'Astar' || origin === 'Shiden');
1353
- var isBifrostOrigin = origin === 'BifrostPolkadot' || origin === 'BifrostKusama';
1354
- var isAssetHubDest = destination === 'AssetHubPolkadot' || destination === 'AssetHubKusama';
1355
- var isOverriddenMultiAssets = overriddenAsset && !isTLocation(overriddenAsset);
1356
- return useMultiAssetTransfer || isAstarOrShidenToRelay || isAssetHubDest && !isBifrostOrigin || !!isOverriddenMultiAssets;
1359
+ var isSystemPara = function isSystemPara(chain) {
1360
+ return isAssetHub(chain) || isBridgeHub(chain) || isPeople(chain);
1357
1361
  };
1358
- var getXTokensMethod = function getXTokensMethod(useMultiAsset, overriddenAsset) {
1359
- if (!useMultiAsset) return 'transfer';
1360
- var isOverriddenMultiAssets = overriddenAsset && !isTLocation(overriddenAsset);
1361
- return isOverriddenMultiAssets ? 'transfer_multiassets' : 'transfer_multiasset';
1362
+ var mul = function mul(v, num) {
1363
+ var den = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1n;
1364
+ return v * num / den;
1362
1365
  };
1363
- var buildXTokensCall = function buildXTokensCall(input, currencySelection, fees) {
1364
- var api = input.api,
1365
- origin = input.origin,
1366
- destination = input.destination,
1367
- overriddenAsset = input.overriddenAsset,
1368
- address = input.address,
1369
- asset = input.asset,
1370
- pallet = input.pallet,
1371
- version = input.version,
1372
- paraIdTo = input.paraIdTo,
1373
- methodOverride = input.method;
1374
- var useMultiAsset = shouldUseMultiAssetTransfer(input);
1375
- var modifiedCurrencySelection = useMultiAsset ? getModifiedCurrencySelection(input) : currencySelection;
1376
- var method = getXTokensMethod(useMultiAsset, overriddenAsset);
1377
- var destLocation = createBeneficiaryLocXTokens({
1378
- api: api,
1379
- origin: origin,
1380
- destination: destination,
1381
- address: address,
1382
- version: version,
1383
- paraId: paraIdTo
1384
- });
1385
- var params = getXTokensParams(useMultiAsset, modifiedCurrencySelection, destLocation, asset.amount, fees, version, overriddenAsset);
1386
- return {
1387
- module: pallet !== null && pallet !== void 0 ? pallet : 'XTokens',
1388
- method: methodOverride !== null && methodOverride !== void 0 ? methodOverride : method,
1389
- params: params
1390
- };
1366
+ var padFee = function padFee(raw, origin, dest, side) {
1367
+ var relayOrigin = isRelayChain(origin);
1368
+ var relayDest = isRelayChain(dest);
1369
+ var sysParaOrigin = isSystemPara(origin);
1370
+ var sysParaDest = isSystemPara(dest);
1371
+ var relayToPara = relayOrigin && !relayDest;
1372
+ var sysParaToPara = sysParaOrigin && !sysParaDest;
1373
+ var paraToPara = !relayOrigin && !sysParaOrigin;
1374
+ if (sysParaToPara) return raw * 40n;
1375
+ if (relayToPara) return side === 'origin' ? mul(raw, 320n, 100n) : mul(raw, 3000n, 100n);
1376
+ if (paraToPara && side == 'origin' && origin === 'Mythos' && dest !== 'Ethereum') {
1377
+ return 150000000000000000n;
1378
+ }
1379
+ if (paraToPara) return mul(raw, 130n, 100n);
1380
+ // apply default 30% padding
1381
+ return mul(raw, 130n, 100n);
1391
1382
  };
1392
-
1393
- // Contains basic structure of xTokens call
1394
- var transferXTokens = function transferXTokens(input, currencySelection) {
1395
- var fees = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_FEE;
1396
- var api = input.api,
1397
- destination = input.destination;
1398
- assertToIsString(destination, ERR_LOCATION_DEST_NOT_SUPPORTED);
1399
- var call = buildXTokensCall(input, currencySelection, fees);
1400
- return api.deserializeExtrinsics(call);
1383
+ var padValueBy = function padValueBy(amount, percent) {
1384
+ var scaled = BigInt(Math.round(percent * 100)); // 2 decimal precision
1385
+ return amount * (BigInt(10000) + scaled) / BigInt(10000);
1401
1386
  };
1402
1387
 
1388
+ var getMythosOriginFee = /*#__PURE__*/function () {
1389
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(api) {
1390
+ var ahApi, _yield$getParaEthTran, _yield$getParaEthTran2, bridgeFee, ahExecutionFee, nativeAsset, feeConverted;
1391
+ return _regenerator().w(function (_context) {
1392
+ while (1) switch (_context.n) {
1393
+ case 0:
1394
+ ahApi = api.clone();
1395
+ _context.n = 1;
1396
+ return ahApi.init('AssetHubPolkadot');
1397
+ case 1:
1398
+ _context.n = 2;
1399
+ return getParaEthTransferFees(ahApi, false);
1400
+ case 2:
1401
+ _yield$getParaEthTran = _context.v;
1402
+ _yield$getParaEthTran2 = _slicedToArray(_yield$getParaEthTran, 2);
1403
+ bridgeFee = _yield$getParaEthTran2[0];
1404
+ ahExecutionFee = _yield$getParaEthTran2[1];
1405
+ nativeAsset = findNativeAssetInfoOrThrow('Mythos');
1406
+ assertHasLocation(nativeAsset);
1407
+ _context.n = 3;
1408
+ return ahApi.quoteAhPrice(DOT_LOCATION, nativeAsset.location, bridgeFee + ahExecutionFee);
1409
+ case 3:
1410
+ feeConverted = _context.v;
1411
+ _context.n = 4;
1412
+ return ahApi.disconnect();
1413
+ case 4:
1414
+ if (feeConverted) {
1415
+ _context.n = 5;
1416
+ break;
1417
+ }
1418
+ throw new UnableToComputeError("Pool DOT -> ".concat(nativeAsset.symbol, " not found."));
1419
+ case 5:
1420
+ return _context.a(2, padValueBy(feeConverted, 10));
1421
+ }
1422
+ }, _callee);
1423
+ }));
1424
+ return function getMythosOriginFee(_x) {
1425
+ return _ref.apply(this, arguments);
1426
+ };
1427
+ }();
1428
+
1403
1429
  var AssetHubPolkadot$1 = {
1404
1430
  name: "Asset Hub",
1405
1431
  info: "PolkadotAssetHub",
@@ -1623,7 +1649,7 @@ var EnergyWebX$1 = {
1623
1649
  providers: [
1624
1650
  {
1625
1651
  name: "Energy Web",
1626
- endpoint: "wss://public-rpc.mainnet.energywebx.com/"
1652
+ endpoint: "wss://wnp-rpc.mainnet.energywebx.com/"
1627
1653
  }
1628
1654
  ]
1629
1655
  };
@@ -2902,316 +2928,82 @@ var configs = {
2902
2928
  AssetHubKusama: AssetHubKusama$1,
2903
2929
  BridgeHubKusama: BridgeHubKusama$1,
2904
2930
  Karura: Karura$1,
2905
- Kintsugi: Kintsugi$1,
2906
- Moonriver: Moonriver$1,
2907
- CoretimeKusama: CoretimeKusama$1,
2908
- Encointer: Encointer$1,
2909
- Altair: Altair$1,
2910
- Amplitude: Amplitude$1,
2911
- Basilisk: Basilisk$1,
2912
- BifrostKusama: BifrostKusama$1,
2913
- CrustShadow: CrustShadow$1,
2914
- Crab: Crab$1,
2915
- Laos: Laos$1,
2916
- Quartz: Quartz$1,
2917
- PeopleKusama: PeopleKusama$1,
2918
- Shiden: Shiden$1,
2919
- Zeitgeist: Zeitgeist$1,
2920
- AssetHubWestend: AssetHubWestend$1,
2921
- BridgeHubWestend: BridgeHubWestend$1,
2922
- CollectivesWestend: CollectivesWestend$1,
2923
- CoretimeWestend: CoretimeWestend$1,
2924
- Penpal: Penpal$1,
2925
- PeopleWestend: PeopleWestend$1,
2926
- AjunaPaseo: AjunaPaseo$1,
2927
- AssetHubPaseo: AssetHubPaseo$1,
2928
- BifrostPaseo: BifrostPaseo$1,
2929
- BridgeHubPaseo: BridgeHubPaseo$1,
2930
- CoretimePaseo: CoretimePaseo$1,
2931
- EnergyWebXPaseo: EnergyWebXPaseo$1,
2932
- HeimaPaseo: HeimaPaseo$1,
2933
- HydrationPaseo: HydrationPaseo$1,
2934
- KiltPaseo: KiltPaseo$1,
2935
- LaosPaseo: LaosPaseo$1,
2936
- NeuroWebPaseo: NeuroWebPaseo$1,
2937
- PAssetHub: PAssetHub$1,
2938
- PeoplePaseo: PeoplePaseo$1,
2939
- ZeitgeistPaseo: ZeitgeistPaseo$1,
2940
- Polkadot: Polkadot,
2941
- Kusama: Kusama,
2942
- Westend: Westend,
2943
- Paseo: Paseo
2944
- };
2945
-
2946
- var configsMap = configs;
2947
- var getChainConfig = function getChainConfig(chain) {
2948
- return configsMap[chain];
2949
- };
2950
-
2951
- var getChainProviders = function getChainProviders(chain) {
2952
- var _getChainConfig = getChainConfig(chain),
2953
- providers = _getChainConfig.providers;
2954
- if (providers.length === 0) {
2955
- throw new ProviderUnavailableError("No providers found for chain ".concat(chain));
2956
- }
2957
- // Prefer Dwellir provider
2958
- providers.sort(function (a, b) {
2959
- return (a.name === 'Dwellir' ? 0 : 1) - (b.name === 'Dwellir' ? 0 : 1);
2960
- });
2961
- return providers.map(function (p) {
2962
- return p.endpoint;
2963
- });
2964
- };
2965
-
2966
- /**
2967
- * Retrieves the parachain ID for a specified chain.
2968
- *
2969
- * @param chain - The chain for which to get the paraId.
2970
- * @returns The parachain ID of the chain.
2971
- */
2972
- var getParaId = function getParaId(chain) {
2973
- if (chain === 'Ethereum') {
2974
- return ETH_PARA_ID;
2975
- }
2976
- return getChainConfig(chain).paraId;
2977
- };
2978
-
2979
- var resolveScenario = function resolveScenario(origin, destination) {
2980
- if (isRelayChain(origin)) return 'RelayToPara';
2981
- var isRelayDestination = !isTLocation(destination) && isRelayChain(destination);
2982
- if (isRelayDestination) return 'ParaToRelay';
2983
- return 'ParaToPara';
2984
- };
2985
-
2986
- var constructRelayToParaParams = function constructRelayToParaParams(_ref, version) {
2987
- var api = _ref.api,
2988
- origin = _ref.origin,
2989
- destination = _ref.destination,
2990
- asset = _ref.assetInfo,
2991
- address = _ref.address,
2992
- paraIdTo = _ref.paraIdTo;
2993
- var paraId = resolveParaId(paraIdTo, destination);
2994
- var beneficiaryLocation = createBeneficiaryLocation({
2995
- api: api,
2996
- address: address,
2997
- version: version
2998
- });
2999
- return {
3000
- dest: createVersionedDestination(version, origin, destination, paraId),
3001
- beneficiary: addXcmVersionHeader(beneficiaryLocation, version),
3002
- assets: createVersionedAssets(version, asset.amount, {
3003
- parents: Parents.ZERO,
3004
- interior: 'Here'
3005
- }),
3006
- fee_asset_item: DEFAULT_FEE_ASSET,
3007
- weight_limit: 'Unlimited'
3008
- };
3009
- };
3010
-
3011
- var createDestination = function createDestination(version, origin, destination, chainId, junction, parents) {
3012
- var isLocDestination = isTLocation(destination);
3013
- var isSubBridge = !isLocDestination && !isExternalChain(destination) && isSubstrateBridge(origin, destination);
3014
- if (isSubBridge) {
3015
- return {
3016
- parents: Parents.TWO,
3017
- interior: {
3018
- X2: [{
3019
- GlobalConsensus: getRelayChainOf(destination)
3020
- }, {
3021
- Parachain: chainId
3022
- }]
3023
- }
3024
- };
3025
- }
3026
- var scenario = resolveScenario(origin, destination);
3027
- var parentsResolved = parents !== null && parents !== void 0 ? parents : scenario === 'RelayToPara' ? Parents.ZERO : Parents.ONE;
3028
- var interior = scenario === 'ParaToRelay' ? 'Here' : createX1Payload(version, junction !== null && junction !== void 0 ? junction : {
3029
- Parachain: chainId
3030
- });
3031
- return isLocDestination ? destination : {
3032
- parents: parentsResolved,
3033
- interior: interior
3034
- };
3035
- };
3036
- var createVersionedDestination = function createVersionedDestination(version, origin, destination, chainId, junction, parents) {
3037
- var plainDestination = createDestination(version, origin, destination, chainId, junction, parents);
3038
- return addXcmVersionHeader(plainDestination, version);
3039
- };
3040
- var resolveTChainFromLocation = function resolveTChainFromLocation(relaychain, location) {
3041
- var _PARACHAINS$find;
3042
- var parachainId = getJunctionValue(location, 'Parachain');
3043
- if (parachainId === undefined) {
3044
- throw new RoutingResolutionError('Parachain ID not found in destination location.');
3045
- }
3046
- var chain = (_PARACHAINS$find = PARACHAINS.find(function (chain) {
3047
- return getParaId(chain) === parachainId && getRelayChainOf(chain) === relaychain;
3048
- })) !== null && _PARACHAINS$find !== void 0 ? _PARACHAINS$find : null;
3049
- if (chain === null) {
3050
- throw new RoutingResolutionError('Chain with specified paraId not found in destination location.');
3051
- }
3052
- return chain;
2931
+ Kintsugi: Kintsugi$1,
2932
+ Moonriver: Moonriver$1,
2933
+ CoretimeKusama: CoretimeKusama$1,
2934
+ Encointer: Encointer$1,
2935
+ Altair: Altair$1,
2936
+ Amplitude: Amplitude$1,
2937
+ Basilisk: Basilisk$1,
2938
+ BifrostKusama: BifrostKusama$1,
2939
+ CrustShadow: CrustShadow$1,
2940
+ Crab: Crab$1,
2941
+ Laos: Laos$1,
2942
+ Quartz: Quartz$1,
2943
+ PeopleKusama: PeopleKusama$1,
2944
+ Shiden: Shiden$1,
2945
+ Zeitgeist: Zeitgeist$1,
2946
+ AssetHubWestend: AssetHubWestend$1,
2947
+ BridgeHubWestend: BridgeHubWestend$1,
2948
+ CollectivesWestend: CollectivesWestend$1,
2949
+ CoretimeWestend: CoretimeWestend$1,
2950
+ Penpal: Penpal$1,
2951
+ PeopleWestend: PeopleWestend$1,
2952
+ AjunaPaseo: AjunaPaseo$1,
2953
+ AssetHubPaseo: AssetHubPaseo$1,
2954
+ BifrostPaseo: BifrostPaseo$1,
2955
+ BridgeHubPaseo: BridgeHubPaseo$1,
2956
+ CoretimePaseo: CoretimePaseo$1,
2957
+ EnergyWebXPaseo: EnergyWebXPaseo$1,
2958
+ HeimaPaseo: HeimaPaseo$1,
2959
+ HydrationPaseo: HydrationPaseo$1,
2960
+ KiltPaseo: KiltPaseo$1,
2961
+ LaosPaseo: LaosPaseo$1,
2962
+ NeuroWebPaseo: NeuroWebPaseo$1,
2963
+ PAssetHub: PAssetHub$1,
2964
+ PeoplePaseo: PeoplePaseo$1,
2965
+ ZeitgeistPaseo: ZeitgeistPaseo$1,
2966
+ Polkadot: Polkadot,
2967
+ Kusama: Kusama,
2968
+ Westend: Westend,
2969
+ Paseo: Paseo
3053
2970
  };
3054
2971
 
3055
- var buildClaimAssetsParams = function buildClaimAssetsParams(options) {
3056
- var assets = options.assets,
3057
- version = options.version;
3058
- var beneficiary = createBeneficiaryLocation(options);
3059
- return {
3060
- assets: addXcmVersionHeader(assets, version),
3061
- beneficiary: addXcmVersionHeader(beneficiary, version)
3062
- };
2972
+ var configsMap = configs;
2973
+ var getChainConfig = function getChainConfig(chain) {
2974
+ return configsMap[chain];
3063
2975
  };
3064
2976
 
3065
- var resolveAssets = function resolveAssets(_ref, version) {
3066
- var api = _ref.api,
3067
- chain = _ref.chain,
3068
- currency = _ref.currency;
3069
- var normalizeAsset = function normalizeAsset(amount, currency) {
3070
- var asset = findAssetInfoOrThrow(chain, currency, null);
3071
- assertHasLocation(asset);
3072
- var abstracted = abstractDecimals(amount, asset.decimals, api);
3073
- return createAsset(version, abstracted, localizeLocation(chain, asset.location));
3074
- };
3075
- if (Array.isArray(currency)) {
3076
- if (currency.every(function (asset) {
3077
- return isTAsset(asset);
3078
- })) {
3079
- return currency.map(function (asset) {
3080
- return _objectSpread2(_objectSpread2({}, asset), {}, {
3081
- fun: {
3082
- Fungible: BigInt(asset.fun.Fungible)
3083
- }
3084
- });
3085
- });
3086
- } else {
3087
- return currency.map(function (currency) {
3088
- return normalizeAsset(currency.amount, currency);
3089
- });
3090
- }
2977
+ var getChainProviders = function getChainProviders(chain) {
2978
+ var _getChainConfig = getChainConfig(chain),
2979
+ providers = _getChainConfig.providers;
2980
+ if (providers.length === 0) {
2981
+ throw new ProviderUnavailableError("No providers found for chain ".concat(chain));
3091
2982
  }
3092
- return [normalizeAsset(currency.amount, currency)];
2983
+ // Prefer Dwellir provider
2984
+ providers.sort(function (a, b) {
2985
+ return (a.name === 'Dwellir' ? 0 : 1) - (b.name === 'Dwellir' ? 0 : 1);
2986
+ });
2987
+ return providers.map(function (p) {
2988
+ return p.endpoint;
2989
+ });
3093
2990
  };
3094
2991
 
3095
- var claimAssets = /*#__PURE__*/function () {
3096
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options) {
3097
- var api, chain, address, pallets, supportedPallet, version, assets, params, call;
3098
- return _regenerator().w(function (_context) {
3099
- while (1) switch (_context.n) {
3100
- case 0:
3101
- api = options.api, chain = options.chain, address = options.address;
3102
- validateAddress(api, address, chain, true);
3103
- _context.n = 1;
3104
- return api.init(chain, TX_CLIENT_TIMEOUT_MS);
3105
- case 1:
3106
- pallets = getSupportedPallets(chain);
3107
- supportedPallet = pallets.find(function (p) {
3108
- return p === 'PolkadotXcm' || p === 'XcmPallet';
3109
- });
3110
- if (supportedPallet) {
3111
- _context.n = 2;
3112
- break;
3113
- }
3114
- throw new UnsupportedOperationError('Unsupported pallet for asset claim');
3115
- case 2:
3116
- version = getChainVersion(chain);
3117
- assets = resolveAssets(options, version);
3118
- params = buildClaimAssetsParams(_objectSpread2(_objectSpread2({}, options), {}, {
3119
- version: version,
3120
- assets: assets
3121
- }));
3122
- call = {
3123
- module: supportedPallet,
3124
- method: 'claim_assets',
3125
- params: params
3126
- };
3127
- return _context.a(2, api.deserializeExtrinsics(call));
3128
- }
3129
- }, _callee);
3130
- }));
3131
- return function claimAssets(_x) {
3132
- return _ref.apply(this, arguments);
3133
- };
3134
- }();
3135
-
3136
- var isAssetHub = function isAssetHub(chain) {
3137
- return chain === 'AssetHubPolkadot' || chain === 'AssetHubKusama';
3138
- };
3139
- var isBridgeHub = function isBridgeHub(chain) {
3140
- return chain === 'BridgeHubPolkadot' || chain === 'BridgeHubKusama';
3141
- };
3142
- var isPeople = function isPeople(chain) {
3143
- return chain === 'PeoplePolkadot' || chain === 'PeopleKusama';
3144
- };
3145
- var isSystemPara = function isSystemPara(chain) {
3146
- return isAssetHub(chain) || isBridgeHub(chain) || isPeople(chain);
3147
- };
3148
- var mul = function mul(v, num) {
3149
- var den = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1n;
3150
- return v * num / den;
3151
- };
3152
- var padFee = function padFee(raw, origin, dest, side) {
3153
- var relayOrigin = isRelayChain(origin);
3154
- var relayDest = isRelayChain(dest);
3155
- var sysParaOrigin = isSystemPara(origin);
3156
- var sysParaDest = isSystemPara(dest);
3157
- var relayToPara = relayOrigin && !relayDest;
3158
- var sysParaToPara = sysParaOrigin && !sysParaDest;
3159
- var paraToPara = !relayOrigin && !sysParaOrigin;
3160
- if (sysParaToPara) return raw * 40n;
3161
- if (relayToPara) return side === 'origin' ? mul(raw, 320n, 100n) : mul(raw, 3000n, 100n);
3162
- if (paraToPara && side == 'origin' && origin === 'Mythos' && dest !== 'Ethereum') {
3163
- return 150000000000000000n;
2992
+ /**
2993
+ * Retrieves the parachain ID for a specified chain.
2994
+ *
2995
+ * @param chain - The chain for which to get the paraId.
2996
+ * @returns The parachain ID of the chain.
2997
+ */
2998
+ var getParaId = function getParaId(chain) {
2999
+ if (chain === 'Ethereum') {
3000
+ return ETH_MAINNET_PARA_ID;
3001
+ } else if (chain === 'EthereumTestnet') {
3002
+ return ETH_TESTNET_PARA_ID;
3164
3003
  }
3165
- if (paraToPara) return mul(raw, 130n, 100n);
3166
- // apply default 30% padding
3167
- return mul(raw, 130n, 100n);
3168
- };
3169
- var padValueBy = function padValueBy(amount, percent) {
3170
- var scaled = BigInt(Math.round(percent * 100)); // 2 decimal precision
3171
- return amount * (BigInt(10000) + scaled) / BigInt(10000);
3004
+ return getChainConfig(chain).paraId;
3172
3005
  };
3173
3006
 
3174
- var getMythosOriginFee = /*#__PURE__*/function () {
3175
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(api) {
3176
- var ahApi, _yield$getParaEthTran, _yield$getParaEthTran2, bridgeFee, ahExecutionFee, nativeAsset, feeConverted;
3177
- return _regenerator().w(function (_context) {
3178
- while (1) switch (_context.n) {
3179
- case 0:
3180
- ahApi = api.clone();
3181
- _context.n = 1;
3182
- return ahApi.init('AssetHubPolkadot');
3183
- case 1:
3184
- _context.n = 2;
3185
- return getParaEthTransferFees(ahApi, false);
3186
- case 2:
3187
- _yield$getParaEthTran = _context.v;
3188
- _yield$getParaEthTran2 = _slicedToArray(_yield$getParaEthTran, 2);
3189
- bridgeFee = _yield$getParaEthTran2[0];
3190
- ahExecutionFee = _yield$getParaEthTran2[1];
3191
- nativeAsset = findNativeAssetInfoOrThrow('Mythos');
3192
- assertHasLocation(nativeAsset);
3193
- _context.n = 3;
3194
- return ahApi.quoteAhPrice(DOT_LOCATION, nativeAsset.location, bridgeFee + ahExecutionFee);
3195
- case 3:
3196
- feeConverted = _context.v;
3197
- _context.n = 4;
3198
- return ahApi.disconnect();
3199
- case 4:
3200
- if (feeConverted) {
3201
- _context.n = 5;
3202
- break;
3203
- }
3204
- throw new UnableToComputeError("Pool DOT -> ".concat(nativeAsset.symbol, " not found."));
3205
- case 5:
3206
- return _context.a(2, padValueBy(feeConverted, 10));
3207
- }
3208
- }, _callee);
3209
- }));
3210
- return function getMythosOriginFee(_x) {
3211
- return _ref.apply(this, arguments);
3212
- };
3213
- }();
3214
-
3215
3007
  var resolveFeeAsset = function resolveFeeAsset(feeAsset, origin, destination, currency) {
3216
3008
  if (!origin.startsWith('Hydration') && origin !== 'AssetHubPolkadot') {
3217
3009
  throw new ScenarioNotSupportedError("Fee asset is not supported on ".concat(origin));
@@ -3676,7 +3468,8 @@ var GeneralBuilder = /*#__PURE__*/function () {
3676
3468
  }, {
3677
3469
  key: "to",
3678
3470
  value: function to(chain, paraIdTo) {
3679
- if (this._options.from && isRelayChain(this._options.from) && chain === 'Ethereum') {
3471
+ var from = this._options.from;
3472
+ if (from && isRelayChain(from) && _typeof(chain) !== 'object' && isExternalChain(chain)) {
3680
3473
  throw new ScenarioNotSupportedError('Transfers from relay chain to Ethereum are not yet supported.');
3681
3474
  }
3682
3475
  return new GeneralBuilder(this.api, this.batchManager, _objectSpread2(_objectSpread2({}, this._options), {}, {
@@ -4669,7 +4462,7 @@ var getDestXcmFee = /*#__PURE__*/function () {
4669
4462
  return _regenerator().w(function (_context2) {
4670
4463
  while (1) switch (_context2.p = _context2.n) {
4671
4464
  case 0:
4672
- if (!(destination === 'Ethereum')) {
4465
+ if (!isExternalChain(destination)) {
4673
4466
  _context2.n = 1;
4674
4467
  break;
4675
4468
  }
@@ -4756,7 +4549,7 @@ var getDestXcmFee = /*#__PURE__*/function () {
4756
4549
  return _ref2.apply(this, arguments);
4757
4550
  };
4758
4551
  }();
4759
- if (!(!hasDryRunSupport(destination) || !forwardedXcms || destination === 'Ethereum')) {
4552
+ if (!(!hasDryRunSupport(destination) || !forwardedXcms || isExternalChain(destination))) {
4760
4553
  _context3.n = 3;
4761
4554
  break;
4762
4555
  }
@@ -4848,7 +4641,7 @@ var resolveHopAsset = function resolveHopAsset(_ref) {
4848
4641
  hasPassedExchange = _ref.hasPassedExchange,
4849
4642
  currency = _ref.currency;
4850
4643
  var isRelayAssetIncluded = api.getTypeThenAssetCount(tx) === 2;
4851
- var useRelayAssetAsFee = destination === 'Ethereum' || isRelayAssetIncluded;
4644
+ var useRelayAssetAsFee = typeof destination === 'string' && isExternalChain(destination) || isRelayAssetIncluded;
4852
4645
  if (useRelayAssetAsFee) {
4853
4646
  return findNativeAssetInfoOrThrow(getRelayChainOf(currentChain));
4854
4647
  }
@@ -4858,6 +4651,20 @@ var resolveHopAsset = function resolveHopAsset(_ref) {
4858
4651
  return (_findAssetInfoOnDest = findAssetInfoOnDest(originChain, currentChain, currency)) !== null && _findAssetInfoOnDest !== void 0 ? _findAssetInfoOnDest : asset;
4859
4652
  };
4860
4653
 
4654
+ var getEthereumJunction = function getEthereumJunction(chain) {
4655
+ var useBigInt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
4656
+ var relayChain = getRelayChainOf(chain);
4657
+ var isTestnet = relayChain === 'Westend' || relayChain === 'Paseo';
4658
+ var chainId = isTestnet ? ETH_TESTNET_PARA_ID : ETH_MAINNET_PARA_ID;
4659
+ return {
4660
+ GlobalConsensus: {
4661
+ Ethereum: {
4662
+ chainId: useBigInt ? BigInt(chainId) : chainId
4663
+ }
4664
+ }
4665
+ };
4666
+ };
4667
+
4861
4668
  var validateBridgeAsset = function validateBridgeAsset(origin, destination, asset, currency, isBridge) {
4862
4669
  var _asset$location;
4863
4670
  if (!asset || isTLocation(destination) || isExternalChain(destination) || !isBridge) {
@@ -4872,9 +4679,25 @@ var validateBridgeAsset = function validateBridgeAsset(origin, destination, asse
4872
4679
  throw new InvalidCurrencyError("Substrate bridge does not support currency ".concat(JSON.stringify(currency, replaceBigInt), "."));
4873
4680
  }
4874
4681
  };
4682
+ var validateEcosystems = function validateEcosystems(origin, destination) {
4683
+ if (isTLocation(destination)) return;
4684
+ var relayChain = getRelayChainOf(origin);
4685
+ var destinationToRelayChains = {
4686
+ Ethereum: ['Polkadot'],
4687
+ EthereumTestnet: ['Westend', 'Paseo']
4688
+ };
4689
+ var allowedRelayChains = destinationToRelayChains[destination];
4690
+ if (!allowedRelayChains) return;
4691
+ if (!allowedRelayChains.includes(relayChain)) {
4692
+ throw new InvalidCurrencyError("Destination ".concat(destination, " is only supported from following ecosystems: ").concat(allowedRelayChains.join(', '), "."));
4693
+ }
4694
+ };
4875
4695
  var validateEthereumAsset = function validateEthereumAsset(origin, destination, asset) {
4876
4696
  var _asset$location2;
4877
- if (!asset || destination !== 'Ethereum' || origin === 'Mythos') return;
4697
+ if (!asset || !isTLocation(destination) && !isSnowbridge(origin, destination) || origin === 'Mythos') {
4698
+ return;
4699
+ }
4700
+ validateEcosystems(origin, destination);
4878
4701
  var ADDITIONAL_ALLOWED_LOCATIONS = [RELAY_LOCATION, {
4879
4702
  parents: 2,
4880
4703
  interior: {
@@ -4885,11 +4708,7 @@ var validateEthereumAsset = function validateEthereumAsset(origin, destination,
4885
4708
  }]
4886
4709
  }
4887
4710
  }];
4888
- var isEthCompatibleAsset = ((_asset$location2 = asset.location) === null || _asset$location2 === void 0 ? void 0 : _asset$location2.parents) === Parents.TWO && deepEqual(getJunctionValue(asset.location, 'GlobalConsensus'), {
4889
- Ethereum: {
4890
- chainId: 1
4891
- }
4892
- }) || ADDITIONAL_ALLOWED_LOCATIONS.some(function (loc) {
4711
+ var isEthCompatibleAsset = ((_asset$location2 = asset.location) === null || _asset$location2 === void 0 ? void 0 : _asset$location2.parents) === Parents.TWO && deepEqual(getJunctionValue(asset.location, 'GlobalConsensus'), getEthereumJunction(origin, false).GlobalConsensus) || ADDITIONAL_ALLOWED_LOCATIONS.some(function (loc) {
4893
4712
  return deepEqual(asset.location, loc);
4894
4713
  });
4895
4714
  if (!isEthCompatibleAsset) {
@@ -5045,17 +4864,17 @@ var validateDestination = function validateDestination(origin, destination) {
5045
4864
  if (isRelayChain(origin) && !isTLocation(destination) && isRelayChain(destination) && origin !== destination) {
5046
4865
  throw new ScenarioNotSupportedError('Direct relay chain to relay chain transfers are not supported. Please use Polkadot <-> Kusama bridge through AssetHub.');
5047
4866
  }
5048
- var allowedChainsToEthereum = ['AssetHubPolkadot', 'Hydration', 'BifrostPolkadot', 'Moonbeam', 'Mythos'];
5049
- if (destination === 'Ethereum' && !allowedChainsToEthereum.includes(origin)) {
4867
+ var allowedChainsToEthereum = ['AssetHubPolkadot', 'AssetHubPaseo', 'AssetHubWestend', 'Hydration', 'BifrostPolkadot', 'Moonbeam', 'Mythos'];
4868
+ if (typeof destination === 'string' && isExternalChain(destination) && !allowedChainsToEthereum.includes(origin)) {
5050
4869
  throw new ScenarioNotSupportedError("Transfers to Ethereum are only supported from: ".concat(allowedChainsToEthereum.join(', ')));
5051
4870
  }
5052
4871
  var isLocationDestination = _typeof(destination) === 'object';
5053
- var isBridge = !isTLocation(destination) && isSubstrateBridge(origin, destination);
4872
+ var isBridgeTransfer = !isTLocation(destination) && isBridge(origin, destination);
5054
4873
  var isRelayDestination = !isTLocation(destination) && isRelayChain(destination);
5055
4874
  if (!isRelayDestination && !isLocationDestination) {
5056
4875
  var originRelayChainSymbol = getRelayChainSymbol(origin);
5057
4876
  var destinationRelayChainSymbol = getRelayChainSymbol(destination);
5058
- if (!isBridge && originRelayChainSymbol !== destinationRelayChainSymbol) {
4877
+ if (!isBridgeTransfer && originRelayChainSymbol !== destinationRelayChainSymbol) {
5059
4878
  throw new ScenarioNotSupportedError('Origin and destination must share the same relay chain unless using a bridge.');
5060
4879
  }
5061
4880
  }
@@ -5117,12 +4936,9 @@ var getFailureInfo$1 = function getFailureInfo(result) {
5117
4936
  */
5118
4937
  var getTChain = function getTChain(paraId, ecosystem) {
5119
4938
  var _PARACHAINS$find;
5120
- if (paraId === 0) {
5121
- return ecosystem;
5122
- }
5123
- if (paraId === 1) {
5124
- return 'Ethereum';
5125
- }
4939
+ if (paraId === RELAYCHAIN_PARA_ID) return ecosystem;
4940
+ if (paraId === ETH_MAINNET_PARA_ID) return 'Ethereum';
4941
+ if (paraId === ETH_TESTNET_PARA_ID) return 'EthereumTestnet';
5126
4942
  return (_PARACHAINS$find = PARACHAINS.find(function (chain) {
5127
4943
  return getChain(chain).ecosystem === ecosystem && getParaId(chain) === paraId;
5128
4944
  })) !== null && _PARACHAINS$find !== void 0 ? _PARACHAINS$find : null;
@@ -5379,6 +5195,13 @@ var transferMoonbeamEvm = /*#__PURE__*/function () {
5379
5195
  };
5380
5196
  }();
5381
5197
 
5198
+ var resolveScenario = function resolveScenario(origin, destination) {
5199
+ if (isRelayChain(origin)) return 'RelayToPara';
5200
+ var isRelayDestination = !isTLocation(destination) && isRelayChain(destination);
5201
+ if (isRelayDestination) return 'ParaToRelay';
5202
+ return 'ParaToPara';
5203
+ };
5204
+
5382
5205
  var createX1Payload = function createX1Payload(version, junction) {
5383
5206
  return version === Version.V3 ? {
5384
5207
  X1: junction
@@ -5482,6 +5305,8 @@ var localizeLocation = function localizeLocation(chain, location, origin) {
5482
5305
  });
5483
5306
  var junctionCount = junctions.length;
5484
5307
  var isLocationOnTargetRelay = targetRelay !== undefined && locationRelay === targetRelay;
5308
+ // Check if target is an external chain and location's GlobalConsensus matches it
5309
+ var isLocationOnTargetExternal = isExternalChain(chain) && locationRelay === chain.toLowerCase();
5485
5310
  if (!origin && locationRelay && targetRelay && locationRelay !== targetRelay) {
5486
5311
  return location;
5487
5312
  }
@@ -5493,7 +5318,7 @@ var localizeLocation = function localizeLocation(chain, location, origin) {
5493
5318
  if (location.interior !== 'Here') {
5494
5319
  var paraId = getParaId(chain);
5495
5320
  var filteredJunctions = junctions.filter(function (junction) {
5496
- if ('GlobalConsensus' in junction && isLocationOnTargetRelay) {
5321
+ if ('GlobalConsensus' in junction && (isLocationOnTargetRelay || isLocationOnTargetExternal)) {
5497
5322
  return false;
5498
5323
  }
5499
5324
  if ('Parachain' in junction && (!ecosystemDiffers || isLocationOnTargetRelay)) {
@@ -5537,7 +5362,7 @@ var localizeLocation = function localizeLocation(chain, location, origin) {
5537
5362
  interior: _defineProperty({}, "X".concat(updatedJunctions.length), updatedJunctions)
5538
5363
  };
5539
5364
  }
5540
- var shouldSetParentsToZero = parachainRemoved || newInterior === 'Here' && isRelayChain(chain);
5365
+ var shouldSetParentsToZero = parachainRemoved || newInterior === 'Here' && isRelayChain(chain) || isLocationOnTargetExternal;
5541
5366
  return {
5542
5367
  parents: shouldSetParentsToZero ? Parents.ZERO : location.parents,
5543
5368
  interior: newInterior
@@ -5625,6 +5450,7 @@ var createMainInstruction = function createMainInstruction(origin, asset, ethAss
5625
5450
  SetTopic: messageId
5626
5451
  }];
5627
5452
  };
5453
+ var ethJunction = getEthereumJunction(origin);
5628
5454
  if (isAssetNativeToPolkadot) {
5629
5455
  var assetEcosystem = RELAYCHAINS.find(function (chain) {
5630
5456
  return asset.symbol.includes(getNativeAssetSymbol(chain));
@@ -5643,7 +5469,7 @@ var createMainInstruction = function createMainInstruction(origin, asset, ethAss
5643
5469
  dest: {
5644
5470
  parents: Parents.TWO,
5645
5471
  interior: {
5646
- X1: [ETHEREUM_JUNCTION]
5472
+ X1: [ethJunction]
5647
5473
  }
5648
5474
  },
5649
5475
  xcm: commonXcm({
@@ -5670,7 +5496,7 @@ var createMainInstruction = function createMainInstruction(origin, asset, ethAss
5670
5496
  reserve: {
5671
5497
  parents: Parents.TWO,
5672
5498
  interior: {
5673
- X1: [ETHEREUM_JUNCTION]
5499
+ X1: [ethJunction]
5674
5500
  }
5675
5501
  },
5676
5502
  xcm: commonXcm({
@@ -5829,13 +5655,13 @@ var abi = [
5829
5655
  var xcmInterfacePrecompile = '0x000000000000000000000000000000000000081A';
5830
5656
  var XCDOT = '0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080';
5831
5657
  var transferMoonbeamToEth = /*#__PURE__*/function () {
5832
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(_ref) {
5658
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(from, _ref) {
5833
5659
  var _signer$account;
5834
- var api, from, to, signer, address, ahAddress, currency, bridgeStatus, foundAsset, amount, ethAsset, contract, senderAddress, messageId, customXcm, customXcmOnDest, assetHubApi, _yield$getParaEthTran, _yield$getParaEthTran2, bridgeFee, executionFee, transferFee, createTx, numberToHex32, tx;
5660
+ var api, to, signer, address, ahAddress, currency, bridgeStatus, foundAsset, amount, ethAsset, contract, senderAddress, messageId, customXcm, customXcmOnDest, assetHubApi, _yield$getParaEthTran, _yield$getParaEthTran2, bridgeFee, executionFee, transferFee, createTx, numberToHex32, tx;
5835
5661
  return _regenerator().w(function (_context) {
5836
5662
  while (1) switch (_context.n) {
5837
5663
  case 0:
5838
- api = _ref.api, from = _ref.from, to = _ref.to, signer = _ref.signer, address = _ref.address, ahAddress = _ref.ahAddress, currency = _ref.currency;
5664
+ api = _ref.api, to = _ref.to, signer = _ref.signer, address = _ref.address, ahAddress = _ref.ahAddress, currency = _ref.currency;
5839
5665
  if (ahAddress) {
5840
5666
  _context.n = 1;
5841
5667
  break;
@@ -5943,7 +5769,7 @@ var transferMoonbeamToEth = /*#__PURE__*/function () {
5943
5769
  }
5944
5770
  }, _callee);
5945
5771
  }));
5946
- return function transferMoonbeamToEth(_x) {
5772
+ return function transferMoonbeamToEth(_x, _x2) {
5947
5773
  return _ref2.apply(this, arguments);
5948
5774
  };
5949
5775
  }();
@@ -6049,7 +5875,7 @@ var addEthereumBridgeFees = /*#__PURE__*/function () {
6049
5875
  return _regenerator().w(function (_context2) {
6050
5876
  while (1) switch (_context2.n) {
6051
5877
  case 0:
6052
- if (!(!bridgeHubResult || !('fee' in bridgeHubResult) || destination !== 'Ethereum')) {
5878
+ if (!(!bridgeHubResult || !('fee' in bridgeHubResult) || !isExternalChain(destination))) {
6053
5879
  _context2.n = 1;
6054
5880
  break;
6055
5881
  }
@@ -7165,7 +6991,7 @@ var getXcmFeeOnce = /*#__PURE__*/function () {
7165
6991
  traversalResult = _context2.v;
7166
6992
  // Handle case where we failed before reaching destination
7167
6993
  destFee = 0n;
7168
- destFeeType = destination === 'Ethereum' ? 'noFeeRequired' : 'paymentInfo';
6994
+ destFeeType = isExternalChain(destination) ? 'noFeeRequired' : 'paymentInfo';
7169
6995
  destSufficient = undefined;
7170
6996
  if (!traversalResult.destination) {
7171
6997
  _context2.n = 12;
@@ -7478,7 +7304,7 @@ var getXcmFeeEstimate = /*#__PURE__*/function () {
7478
7304
  symbol: originAsset.symbol,
7479
7305
  amount: amount
7480
7306
  };
7481
- if (!(destination === 'Ethereum')) {
7307
+ if (!isExternalChain(destination)) {
7482
7308
  _context.n = 7;
7483
7309
  break;
7484
7310
  }
@@ -7509,12 +7335,65 @@ var getXcmFeeEstimate = /*#__PURE__*/function () {
7509
7335
  destination: destFeeDetails
7510
7336
  });
7511
7337
  }
7512
- }, _callee);
7513
- }));
7514
- return function getXcmFeeEstimate(_x) {
7515
- return _ref.apply(this, arguments);
7338
+ }, _callee);
7339
+ }));
7340
+ return function getXcmFeeEstimate(_x) {
7341
+ return _ref.apply(this, arguments);
7342
+ };
7343
+ }();
7344
+
7345
+ var createDestination = function createDestination(version, origin, destination, chainId, junction, parents) {
7346
+ var isLocDestination = isTLocation(destination);
7347
+ var isSubBridge = !isLocDestination && !isExternalChain(destination) && isSubstrateBridge(origin, destination);
7348
+ if (isSubBridge) {
7349
+ return {
7350
+ parents: Parents.TWO,
7351
+ interior: {
7352
+ X2: [{
7353
+ GlobalConsensus: getRelayChainOf(destination)
7354
+ }, {
7355
+ Parachain: chainId
7356
+ }]
7357
+ }
7358
+ };
7359
+ }
7360
+ var isSb = !isLocDestination && isSnowbridge(origin, destination);
7361
+ if (isSb) {
7362
+ return {
7363
+ parents: Parents.TWO,
7364
+ interior: {
7365
+ X1: [getEthereumJunction(origin)]
7366
+ }
7367
+ };
7368
+ }
7369
+ var scenario = resolveScenario(origin, destination);
7370
+ var parentsResolved = parents !== null && parents !== void 0 ? parents : scenario === 'RelayToPara' ? Parents.ZERO : Parents.ONE;
7371
+ var interior = scenario === 'ParaToRelay' ? 'Here' : createX1Payload(version, junction !== null && junction !== void 0 ? junction : {
7372
+ Parachain: chainId
7373
+ });
7374
+ return isLocDestination ? destination : {
7375
+ parents: parentsResolved,
7376
+ interior: interior
7516
7377
  };
7517
- }();
7378
+ };
7379
+ var createVersionedDestination = function createVersionedDestination(version, origin, destination, chainId, junction, parents) {
7380
+ var plainDestination = createDestination(version, origin, destination, chainId, junction, parents);
7381
+ return addXcmVersionHeader(plainDestination, version);
7382
+ };
7383
+ var resolveTChainFromLocation = function resolveTChainFromLocation(relaychain, location) {
7384
+ var _PARACHAINS$find;
7385
+ var parachainId = getJunctionValue(location, 'Parachain');
7386
+ if (parachainId === undefined) {
7387
+ throw new RoutingResolutionError('Parachain ID not found in destination location.');
7388
+ }
7389
+ var chain = (_PARACHAINS$find = PARACHAINS.find(function (chain) {
7390
+ return getParaId(chain) === parachainId && getRelayChainOf(chain) === relaychain;
7391
+ })) !== null && _PARACHAINS$find !== void 0 ? _PARACHAINS$find : null;
7392
+ if (chain === null) {
7393
+ throw new RoutingResolutionError('Chain with specified paraId not found in destination location.');
7394
+ }
7395
+ return chain;
7396
+ };
7518
7397
 
7519
7398
  var transferRelayToPara = /*#__PURE__*/function () {
7520
7399
  var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options) {
@@ -7572,7 +7451,7 @@ var send = /*#__PURE__*/function () {
7572
7451
  _context.n = 6;
7573
7452
  break;
7574
7453
  }
7575
- if (!(destination === 'Ethereum')) {
7454
+ if (!(typeof destination === 'string' && isExternalChain(destination))) {
7576
7455
  _context.n = 1;
7577
7456
  break;
7578
7457
  }
@@ -8322,26 +8201,35 @@ var getTransferableAmount = /*#__PURE__*/function () {
8322
8201
 
8323
8202
  var resolveTransferType = function resolveTransferType(_ref) {
8324
8203
  var origin = _ref.origin,
8325
- reserve = _ref.reserve;
8204
+ reserve = _ref.reserve,
8205
+ dest = _ref.dest,
8206
+ isSubBridge = _ref.isSubBridge;
8207
+ // Direct A → C: when origin is reserve OR dest is reserve, check origin <-> dest trust
8208
+ // Hop A → B → C: when reserve differs from both, check origin <-> reserve trust
8209
+ var isDirect = origin.chain === reserve.chain || dest.chain === reserve.chain;
8210
+ var chainToCheck = isDirect ? dest.chain : reserve.chain;
8211
+ if (isTrustedChain(origin.chain) && isTrustedChain(chainToCheck) && !isSubBridge) return 'Teleport';
8326
8212
  if (origin.chain === reserve.chain) return 'LocalReserve';
8327
- if (isTrustedChain(origin.chain) && isTrustedChain(reserve.chain)) return 'Teleport';
8328
8213
  return 'DestinationReserve';
8329
8214
  };
8330
8215
  var buildTypeAndThenCall = function buildTypeAndThenCall(context, isDotAsset, customXcm, assets) {
8331
8216
  var origin = context.origin,
8332
8217
  reserve = context.reserve,
8333
8218
  dest = context.dest,
8334
- isSubBridge = context.isSubBridge,
8335
8219
  assetInfo = context.assetInfo,
8336
8220
  _context$options = context.options,
8337
8221
  version = _context$options.version,
8338
8222
  pallet = _context$options.pallet,
8339
- method = _context$options.method;
8223
+ method = _context$options.method,
8224
+ overriddenAsset = _context$options.overriddenAsset;
8340
8225
  var feeAssetLocation = !isDotAsset ? RELAY_LOCATION : assetInfo.location;
8341
8226
  var finalDest = origin.chain === reserve.chain ? dest.chain : reserve.chain;
8342
8227
  var destLocation = createDestination(version, origin.chain, finalDest, getParaId(finalDest));
8343
8228
  var transferType = resolveTransferType(context);
8344
- var feeMultiAsset = createAsset(version, assetInfo.amount, isRelayChain(origin.chain) || isSubBridge || origin.chain === 'Mythos' ? localizeLocation(origin.chain, feeAssetLocation) : feeAssetLocation);
8229
+ var feeAsset = Array.isArray(overriddenAsset) ? overriddenAsset.find(function (a) {
8230
+ return a.isFeeAsset;
8231
+ }) : null;
8232
+ var feeMultiAsset = feeAsset !== null && feeAsset !== void 0 ? feeAsset : createAsset(version, assetInfo.amount, localizeLocation(origin.chain, feeAssetLocation));
8345
8233
  var module = pallet !== null && pallet !== void 0 ? pallet : isRelayChain(origin.chain) ? 'XcmPallet' : 'PolkadotXcm';
8346
8234
  var methodName = method !== null && method !== void 0 ? method : 'transfer_assets_using_type_and_then';
8347
8235
  return {
@@ -8359,15 +8247,16 @@ var buildTypeAndThenCall = function buildTypeAndThenCall(context, isDotAsset, cu
8359
8247
  };
8360
8248
  };
8361
8249
 
8362
- var getSubBridgeReserve = function getSubBridgeReserve(chain, destination, location) {
8363
- var destRelay = getRelayChainOf(destination).toLowerCase();
8364
- var isDestReserve = deepEqual(getJunctionValue(location, 'GlobalConsensus'), _defineProperty({}, destRelay, null));
8365
- if (isDestReserve) return destination;
8366
- return chain;
8250
+ var getBridgeReserve = function getBridgeReserve(chain, destination, location) {
8251
+ var isExternal = isExternalChain(destination);
8252
+ var destRelay = isExternal ? destination : getRelayChainOf(destination).toLowerCase();
8253
+ var expectedConsensus = isExternal ? getEthereumJunction(chain, false).GlobalConsensus : _defineProperty({}, destRelay, null);
8254
+ var isDestReserve = deepEqual(getJunctionValue(location, 'GlobalConsensus'), expectedConsensus);
8255
+ return isDestReserve ? destination : chain;
8367
8256
  };
8368
- var resolveReserveChain = function resolveReserveChain(chain, destination, assetLocation, isSubBridge, overrideReserve) {
8369
- if (isSubBridge) {
8370
- return getSubBridgeReserve(chain, destination, assetLocation);
8257
+ var resolveReserveChain = function resolveReserveChain(chain, destination, assetLocation, isSubBridge, isSnowbridge, overrideReserve) {
8258
+ if (isSubBridge || isSnowbridge) {
8259
+ return getBridgeReserve(chain, destination, assetLocation);
8371
8260
  }
8372
8261
  if (overrideReserve !== undefined) {
8373
8262
  return overrideReserve;
@@ -8375,17 +8264,19 @@ var resolveReserveChain = function resolveReserveChain(chain, destination, asset
8375
8264
  return getAssetReserveChain(chain, assetLocation);
8376
8265
  };
8377
8266
  var createTypeAndThenCallContext = /*#__PURE__*/function () {
8378
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(chain, options, overrideReserve) {
8379
- var api, destination, assetInfo, destinationChain, isSubBridge, reserveChain, NO_FEE_ASSET_LOCS, systemAsset, isRelayAsset, destApi, reserveApi;
8267
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options, overrides) {
8268
+ var _overrides$noFeeAsset;
8269
+ var api, chain, destination, assetInfo, destinationChain, isSubBridge, isSb, reserveChain, NO_FEE_ASSET_LOCS, systemAsset, isRelayAsset, destApi, reserveApi;
8380
8270
  return _regenerator().w(function (_context) {
8381
8271
  while (1) switch (_context.n) {
8382
8272
  case 0:
8383
- api = options.api, destination = options.destination, assetInfo = options.assetInfo;
8273
+ api = options.api, chain = options.chain, destination = options.destination, assetInfo = options.assetInfo;
8384
8274
  assertHasLocation(assetInfo);
8385
8275
  assertToIsString(destination);
8386
8276
  destinationChain = destination;
8387
8277
  isSubBridge = isSubstrateBridge(chain, destinationChain);
8388
- reserveChain = resolveReserveChain(chain, destinationChain, assetInfo.location, isSubBridge, overrideReserve);
8278
+ isSb = isSnowbridge(chain, destinationChain);
8279
+ reserveChain = resolveReserveChain(chain, destinationChain, assetInfo.location, isSubBridge, isSb, overrides.reserveChain);
8389
8280
  NO_FEE_ASSET_LOCS = [RELAY_LOCATION, {
8390
8281
  parents: 2,
8391
8282
  interior: {
@@ -8415,7 +8306,7 @@ var createTypeAndThenCallContext = /*#__PURE__*/function () {
8415
8306
  systemAsset = findNativeAssetInfoOrThrow(getRelayChainOf(chain));
8416
8307
  isRelayAsset = NO_FEE_ASSET_LOCS.some(function (loc) {
8417
8308
  return deepEqual(assetInfo.location, loc);
8418
- }) || isSubBridge;
8309
+ }) || isSubBridge || ((_overrides$noFeeAsset = overrides.noFeeAsset) !== null && _overrides$noFeeAsset !== void 0 ? _overrides$noFeeAsset : false);
8419
8310
  destApi = api.clone();
8420
8311
  _context.n = 1;
8421
8312
  return destApi.init(destinationChain);
@@ -8438,6 +8329,7 @@ var createTypeAndThenCallContext = /*#__PURE__*/function () {
8438
8329
  chain: reserveChain
8439
8330
  },
8440
8331
  isSubBridge: isSubBridge,
8332
+ isSnowbridge: isSb,
8441
8333
  isRelayAsset: isRelayAsset,
8442
8334
  assetInfo: assetInfo,
8443
8335
  options: options,
@@ -8446,8 +8338,8 @@ var createTypeAndThenCallContext = /*#__PURE__*/function () {
8446
8338
  }
8447
8339
  }, _callee);
8448
8340
  }));
8449
- return function createTypeAndThenCallContext(_x, _x2, _x3) {
8450
- return _ref.apply(this, arguments);
8341
+ return function createTypeAndThenCallContext(_x, _x2) {
8342
+ return _ref2.apply(this, arguments);
8451
8343
  };
8452
8344
  }();
8453
8345
 
@@ -8463,89 +8355,147 @@ var resolveBuyExecutionAmount = function resolveBuyExecutionAmount(_ref, isForFe
8463
8355
  // We have actual fees, calculate exact buy execution amount
8464
8356
  return isRelayAsset ? assetInfo.amount - hopFees : destFee;
8465
8357
  };
8466
- var createCustomXcm = function createCustomXcm(context, assetCount, isForFeeCalc, systemAssetAmount, refundInstruction) {
8467
- var fees = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {
8468
- hopFees: 0n,
8469
- destFee: 0n
8470
- };
8471
- var origin = context.origin,
8472
- dest = context.dest,
8473
- reserve = context.reserve,
8474
- isSubBridge = context.isSubBridge,
8475
- isRelayAsset = context.isRelayAsset,
8476
- assetInfo = context.assetInfo,
8477
- options = context.options;
8478
- var destination = options.destination,
8479
- version = options.version,
8480
- address = options.address,
8481
- paraIdTo = options.paraIdTo;
8482
- var hopFees = fees.hopFees,
8483
- destFee = fees.destFee;
8484
- var feeAssetLocation = !isRelayAsset ? RELAY_LOCATION : assetInfo.location;
8485
- var feeLocLocalized = localizeLocation(dest.chain, feeAssetLocation, origin.chain);
8486
- var asset = createAsset(version, assetInfo.amount, localizeLocation(dest.chain, assetInfo.location, origin.chain));
8487
- var depositInstruction = {
8488
- DepositAsset: {
8489
- assets: {
8490
- Wild: assetCount > 1 ? {
8491
- AllOf: {
8492
- id: asset.id,
8493
- fun: 'Fungible'
8358
+ var createCustomXcm = /*#__PURE__*/function () {
8359
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(context, assetCount, isForFeeCalc, systemAssetAmount, refundInstruction) {
8360
+ var fees,
8361
+ origin,
8362
+ dest,
8363
+ reserve,
8364
+ isSubBridge,
8365
+ isSnowbridge,
8366
+ isRelayAsset,
8367
+ assetInfo,
8368
+ options,
8369
+ destination,
8370
+ version,
8371
+ address,
8372
+ senderAddress,
8373
+ paraIdTo,
8374
+ hopFees,
8375
+ destFee,
8376
+ feeAssetLocation,
8377
+ feeLocLocalized,
8378
+ assetLocLocalized,
8379
+ asset,
8380
+ allOfSelector,
8381
+ depositInstruction,
8382
+ assetsFilter,
8383
+ buyExecutionAmount,
8384
+ filter,
8385
+ buyExecution,
8386
+ destLoc,
8387
+ messageId,
8388
+ _args = arguments;
8389
+ return _regenerator().w(function (_context) {
8390
+ while (1) switch (_context.n) {
8391
+ case 0:
8392
+ fees = _args.length > 5 && _args[5] !== undefined ? _args[5] : {
8393
+ hopFees: 0n,
8394
+ destFee: 0n
8395
+ };
8396
+ origin = context.origin, dest = context.dest, reserve = context.reserve, isSubBridge = context.isSubBridge, isSnowbridge = context.isSnowbridge, isRelayAsset = context.isRelayAsset, assetInfo = context.assetInfo, options = context.options;
8397
+ destination = options.destination, version = options.version, address = options.address, senderAddress = options.senderAddress, paraIdTo = options.paraIdTo;
8398
+ hopFees = fees.hopFees, destFee = fees.destFee;
8399
+ feeAssetLocation = !isRelayAsset ? RELAY_LOCATION : assetInfo.location;
8400
+ feeLocLocalized = localizeLocation(dest.chain, feeAssetLocation, origin.chain);
8401
+ assetLocLocalized = localizeLocation(dest.chain, assetInfo.location, origin.chain);
8402
+ asset = createAsset(version, assetInfo.amount, assetLocLocalized);
8403
+ allOfSelector = {
8404
+ AllOf: {
8405
+ id: asset.id,
8406
+ fun: 'Fungible'
8407
+ }
8408
+ };
8409
+ depositInstruction = {
8410
+ DepositAsset: {
8411
+ assets: {
8412
+ Wild: assetCount > 1 ? allOfSelector : {
8413
+ AllCounted: 1
8414
+ }
8415
+ },
8416
+ beneficiary: createBeneficiaryLocation({
8417
+ api: isSubBridge ? dest.api : origin.api,
8418
+ address: address,
8419
+ version: version
8420
+ })
8421
+ }
8422
+ };
8423
+ assetsFilter = [];
8424
+ if (!isRelayAsset) assetsFilter.push(createAsset(version, hopFees + destFee, localizeLocation(reserve.chain, RELAY_LOCATION)));
8425
+ assetsFilter.push(createAsset(version, assetInfo.amount, localizeLocation(reserve.chain, assetInfo.location)));
8426
+ if (!(isSubBridge || origin.chain !== reserve.chain && dest.chain !== reserve.chain)) {
8427
+ _context.n = 4;
8428
+ break;
8494
8429
  }
8495
- } : {
8496
- AllCounted: 1
8497
- }
8498
- },
8499
- beneficiary: createBeneficiaryLocation({
8500
- api: isSubBridge ? dest.api : origin.api,
8501
- address: address,
8502
- version: version
8503
- })
8504
- }
8505
- };
8506
- var assetsFilter = [];
8507
- if (!isRelayAsset) assetsFilter.push(createAsset(version, hopFees + destFee, localizeLocation(reserve.chain, RELAY_LOCATION)));
8508
- assetsFilter.push(createAsset(version, assetInfo.amount, localizeLocation(reserve.chain, assetInfo.location)));
8509
- if (isSubBridge || origin.chain !== reserve.chain && dest.chain !== reserve.chain) {
8510
- var buyExecutionAmount = resolveBuyExecutionAmount(context, isForFeeCalc, fees, systemAssetAmount);
8511
- if (buyExecutionAmount < 0n && !isForFeeCalc) throw new AmountTooLowError();
8512
- var filter = isForFeeCalc ? {
8513
- Wild: {
8514
- AllCounted: assetCount
8515
- }
8516
- } : {
8517
- Definite: assetsFilter
8518
- };
8519
- var buyExecution = {
8520
- BuyExecution: {
8521
- fees: createAsset(version, normalizeAmount(buyExecutionAmount), feeLocLocalized),
8522
- weight_limit: 'Unlimited'
8523
- }
8524
- };
8525
- if (isSubBridge) {
8526
- return [buyExecution, depositInstruction];
8527
- }
8528
- var destLoc = createDestination(version, origin.chain, destination, paraIdTo);
8529
- // If destination is a trusted chain, use teleport instead of reserve deposit
8530
- if (isTrustedChain(dest.chain)) {
8531
- return [].concat(_toConsumableArray(refundInstruction ? [refundInstruction] : []), [{
8532
- InitiateTeleport: {
8533
- assets: filter,
8534
- dest: destLoc,
8535
- xcm: [buyExecution, depositInstruction]
8536
- }
8537
- }]);
8538
- }
8539
- return [].concat(_toConsumableArray(refundInstruction ? [refundInstruction] : []), [{
8540
- DepositReserveAsset: {
8541
- assets: filter,
8542
- dest: destLoc,
8543
- xcm: [buyExecution, depositInstruction]
8430
+ buyExecutionAmount = resolveBuyExecutionAmount(context, isForFeeCalc, fees, systemAssetAmount);
8431
+ if (!(buyExecutionAmount < 0n && !isForFeeCalc)) {
8432
+ _context.n = 1;
8433
+ break;
8434
+ }
8435
+ throw new AmountTooLowError();
8436
+ case 1:
8437
+ filter = isForFeeCalc ? {
8438
+ Wild: {
8439
+ AllCounted: assetCount
8440
+ }
8441
+ } : {
8442
+ Definite: assetsFilter
8443
+ };
8444
+ buyExecution = {
8445
+ BuyExecution: {
8446
+ fees: createAsset(version, normalizeAmount(buyExecutionAmount), feeLocLocalized),
8447
+ weight_limit: 'Unlimited'
8448
+ }
8449
+ };
8450
+ if (!isSubBridge) {
8451
+ _context.n = 2;
8452
+ break;
8453
+ }
8454
+ return _context.a(2, [buyExecution, depositInstruction]);
8455
+ case 2:
8456
+ destLoc = createDestination(version, origin.chain, destination, paraIdTo); // If both reserve (B) and destination (C) are trusted chains,
8457
+ // use teleport instead of DepositReserveAsset
8458
+ if (!(isTrustedChain(reserve.chain) && isTrustedChain(dest.chain))) {
8459
+ _context.n = 3;
8460
+ break;
8461
+ }
8462
+ return _context.a(2, [].concat(_toConsumableArray(refundInstruction ? [refundInstruction] : []), [{
8463
+ InitiateTeleport: {
8464
+ assets: filter,
8465
+ dest: destLoc,
8466
+ xcm: [buyExecution, depositInstruction]
8467
+ }
8468
+ }]));
8469
+ case 3:
8470
+ return _context.a(2, [].concat(_toConsumableArray(refundInstruction ? [refundInstruction] : []), [{
8471
+ DepositReserveAsset: {
8472
+ assets: filter,
8473
+ dest: destLoc,
8474
+ xcm: [buyExecution, depositInstruction]
8475
+ }
8476
+ }]));
8477
+ case 4:
8478
+ if (!isSnowbridge) {
8479
+ _context.n = 6;
8480
+ break;
8481
+ }
8482
+ assertSenderAddress(senderAddress);
8483
+ _context.n = 5;
8484
+ return generateMessageId(origin.api, senderAddress, getParaId(origin.chain), JSON.stringify(assetInfo.location), JSON.stringify(address), assetInfo.amount);
8485
+ case 5:
8486
+ messageId = _context.v;
8487
+ return _context.a(2, [depositInstruction, {
8488
+ SetTopic: messageId
8489
+ }]);
8490
+ case 6:
8491
+ return _context.a(2, [depositInstruction]);
8544
8492
  }
8545
- }]);
8546
- }
8547
- return [depositInstruction];
8548
- };
8493
+ }, _callee);
8494
+ }));
8495
+ return function createCustomXcm(_x, _x2, _x3, _x4, _x5) {
8496
+ return _ref3.apply(this, arguments);
8497
+ };
8498
+ }();
8549
8499
 
8550
8500
  var createRefundInstruction = function createRefundInstruction(api, senderAddress, version, assetCount) {
8551
8501
  return {
@@ -8566,75 +8516,145 @@ var createRefundInstruction = function createRefundInstruction(api, senderAddres
8566
8516
  };
8567
8517
  };
8568
8518
 
8569
- var buildAssets = function buildAssets(chain, asset, feeAmount, isRelayAsset, version) {
8519
+ var buildAssets = function buildAssets(chain, asset, feeAmount, isRelayAsset, _ref) {
8520
+ var version = _ref.version,
8521
+ overriddenAsset = _ref.overriddenAsset;
8522
+ if (overriddenAsset) {
8523
+ if (Array.isArray(overriddenAsset)) return overriddenAsset;
8524
+ return [createAsset(version, asset.amount, overriddenAsset)];
8525
+ }
8570
8526
  var assets = [];
8571
- var shouldLocalizeAndSort = isRelayChain(chain) || chain.startsWith('AssetHub') || chain === 'Mythos';
8572
8527
  if (!isRelayAsset) {
8573
8528
  assets.push(createAsset(version, feeAmount, RELAY_LOCATION));
8574
8529
  }
8575
- assets.push(createAsset(version, asset.amount, shouldLocalizeAndSort ? localizeLocation(chain, asset.location) : asset.location));
8576
- return shouldLocalizeAndSort ? sortAssets(assets) : assets;
8530
+ assets.push(createAsset(version, asset.amount, localizeLocation(chain, asset.location)));
8531
+ return sortAssets(assets);
8577
8532
  };
8578
8533
  var DEFAULT_SYSTEM_ASSET_AMOUNT = '1';
8579
- var resolveSystemAssetAmount = function resolveSystemAssetAmount(_ref, isForFeeCalc, fees) {
8580
- var systemAsset = _ref.systemAsset;
8534
+ var resolveSystemAssetAmount = function resolveSystemAssetAmount(_ref2, isForFeeCalc, fees) {
8535
+ var systemAsset = _ref2.systemAsset;
8581
8536
  if (isForFeeCalc) {
8582
8537
  return parseUnits(DEFAULT_SYSTEM_ASSET_AMOUNT, systemAsset.decimals);
8583
8538
  }
8584
8539
  return fees.destFee + fees.hopFees;
8585
8540
  };
8586
- var constructTypeAndThenCall = function constructTypeAndThenCall(context) {
8587
- var fees = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
8588
- var origin = context.origin,
8589
- assetInfo = context.assetInfo,
8590
- isSubBridge = context.isSubBridge,
8591
- isRelayAsset = context.isRelayAsset,
8592
- _context$options = context.options,
8593
- senderAddress = _context$options.senderAddress,
8594
- version = _context$options.version;
8595
- var assetCount = isRelayAsset ? 1 : 2;
8596
- var refundInstruction = senderAddress && !isSubBridge ? createRefundInstruction(origin.api, senderAddress, version, assetCount) : null;
8597
- var resolvedFees = fees !== null && fees !== void 0 ? fees : {
8598
- hopFees: 0n,
8599
- destFee: 0n
8541
+ var constructTypeAndThenCall = /*#__PURE__*/function () {
8542
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(context) {
8543
+ var fees,
8544
+ origin,
8545
+ assetInfo,
8546
+ isSubBridge,
8547
+ isRelayAsset,
8548
+ options,
8549
+ senderAddress,
8550
+ version,
8551
+ assetCount,
8552
+ refundInstruction,
8553
+ resolvedFees,
8554
+ isForFeeCalc,
8555
+ systemAssetAmount,
8556
+ customXcm,
8557
+ assets,
8558
+ _args = arguments;
8559
+ return _regenerator().w(function (_context) {
8560
+ while (1) switch (_context.n) {
8561
+ case 0:
8562
+ fees = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;
8563
+ origin = context.origin, assetInfo = context.assetInfo, isSubBridge = context.isSubBridge, isRelayAsset = context.isRelayAsset, options = context.options;
8564
+ senderAddress = options.senderAddress, version = options.version;
8565
+ assetCount = isRelayAsset ? 1 : 2;
8566
+ refundInstruction = senderAddress && !isSubBridge ? createRefundInstruction(origin.api, senderAddress, version, assetCount) : null;
8567
+ resolvedFees = fees !== null && fees !== void 0 ? fees : {
8568
+ hopFees: 0n,
8569
+ destFee: 0n
8570
+ };
8571
+ isForFeeCalc = fees === null;
8572
+ systemAssetAmount = resolveSystemAssetAmount(context, isForFeeCalc, resolvedFees);
8573
+ _context.n = 1;
8574
+ return createCustomXcm(context, assetCount, isForFeeCalc, systemAssetAmount, refundInstruction, resolvedFees);
8575
+ case 1:
8576
+ customXcm = _context.v;
8577
+ assets = buildAssets(origin.chain, assetInfo, systemAssetAmount, isRelayAsset, options);
8578
+ return _context.a(2, buildTypeAndThenCall(context, isRelayAsset, customXcm, assets));
8579
+ }
8580
+ }, _callee);
8581
+ }));
8582
+ return function constructTypeAndThenCall(_x) {
8583
+ return _ref3.apply(this, arguments);
8600
8584
  };
8601
- var isForFeeCalc = fees === null;
8602
- var systemAssetAmount = resolveSystemAssetAmount(context, isForFeeCalc, resolvedFees);
8603
- var customXcm = createCustomXcm(context, assetCount, isForFeeCalc, systemAssetAmount, refundInstruction, resolvedFees);
8604
- var assets = buildAssets(origin.chain, assetInfo, systemAssetAmount, isRelayAsset, version);
8605
- return buildTypeAndThenCall(context, isRelayAsset, customXcm, assets);
8606
- };
8585
+ }();
8607
8586
  /**
8608
8587
  * Creates a type and then call for transferring assets using XCM. Works only for DOT and snowbridge assets so far.
8609
8588
  */
8610
8589
  var createTypeAndThenCall = /*#__PURE__*/function () {
8611
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(chain, options, overrideReserve) {
8612
- var context, origin, assetInfo, fees;
8613
- return _regenerator().w(function (_context) {
8614
- while (1) switch (_context.n) {
8590
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(options) {
8591
+ var overrides,
8592
+ context,
8593
+ origin,
8594
+ assetInfo,
8595
+ isSnowbridge,
8596
+ bridgeStatus,
8597
+ fees,
8598
+ _args3 = arguments;
8599
+ return _regenerator().w(function (_context3) {
8600
+ while (1) switch (_context3.n) {
8615
8601
  case 0:
8616
- _context.n = 1;
8617
- return createTypeAndThenCallContext(chain, options, overrideReserve);
8602
+ overrides = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {
8603
+ reserveChain: undefined,
8604
+ noFeeAsset: false
8605
+ };
8606
+ _context3.n = 1;
8607
+ return createTypeAndThenCallContext(options, overrides);
8618
8608
  case 1:
8619
- context = _context.v;
8620
- origin = context.origin, assetInfo = context.assetInfo;
8621
- _context.n = 2;
8622
- return computeAllFees(context, function (amount, relative) {
8623
- var overridenAmount = amount ? relative ? assetInfo.amount + parseUnits(amount, assetInfo.decimals) : parseUnits(amount, assetInfo.decimals) : assetInfo.amount;
8624
- return Promise.resolve(origin.api.deserializeExtrinsics(constructTypeAndThenCall(_objectSpread2(_objectSpread2({}, context), {}, {
8625
- assetInfo: _objectSpread2(_objectSpread2({}, assetInfo), {}, {
8626
- amount: overridenAmount
8627
- })
8628
- }))));
8629
- });
8609
+ context = _context3.v;
8610
+ origin = context.origin, assetInfo = context.assetInfo, isSnowbridge = context.isSnowbridge;
8611
+ if (!isSnowbridge) {
8612
+ _context3.n = 3;
8613
+ break;
8614
+ }
8615
+ _context3.n = 2;
8616
+ return getBridgeStatus(origin.api.clone());
8630
8617
  case 2:
8631
- fees = _context.v;
8632
- return _context.a(2, constructTypeAndThenCall(context, fees));
8618
+ bridgeStatus = _context3.v;
8619
+ if (!(bridgeStatus !== 'Normal')) {
8620
+ _context3.n = 3;
8621
+ break;
8622
+ }
8623
+ throw new BridgeHaltedError();
8624
+ case 3:
8625
+ _context3.n = 4;
8626
+ return computeAllFees(context, /*#__PURE__*/function () {
8627
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(amount, relative) {
8628
+ var overridenAmount, _t, _t2;
8629
+ return _regenerator().w(function (_context2) {
8630
+ while (1) switch (_context2.n) {
8631
+ case 0:
8632
+ overridenAmount = amount ? relative ? assetInfo.amount + parseUnits(amount, assetInfo.decimals) : parseUnits(amount, assetInfo.decimals) : assetInfo.amount;
8633
+ _t = Promise;
8634
+ _t2 = origin.api;
8635
+ _context2.n = 1;
8636
+ return constructTypeAndThenCall(_objectSpread2(_objectSpread2({}, context), {}, {
8637
+ assetInfo: _objectSpread2(_objectSpread2({}, assetInfo), {}, {
8638
+ amount: overridenAmount
8639
+ })
8640
+ }));
8641
+ case 1:
8642
+ return _context2.a(2, _t.resolve.call(_t, _t2.deserializeExtrinsics.call(_t2, _context2.v)));
8643
+ }
8644
+ }, _callee2);
8645
+ }));
8646
+ return function (_x3, _x4) {
8647
+ return _ref5.apply(this, arguments);
8648
+ };
8649
+ }());
8650
+ case 4:
8651
+ fees = _context3.v;
8652
+ return _context3.a(2, constructTypeAndThenCall(context, fees));
8633
8653
  }
8634
- }, _callee);
8654
+ }, _callee3);
8635
8655
  }));
8636
- return function createTypeAndThenCall(_x, _x2, _x3) {
8637
- return _ref2.apply(this, arguments);
8656
+ return function createTypeAndThenCall(_x2) {
8657
+ return _ref4.apply(this, arguments);
8638
8658
  };
8639
8659
  }();
8640
8660
 
@@ -8657,7 +8677,9 @@ var createCallForReserve = /*#__PURE__*/function () {
8657
8677
  case 0:
8658
8678
  api = options.api, destination = options.destination, address = options.address, senderAddress = options.senderAddress, currency = options.currency, feeCurrency = options.feeCurrency;
8659
8679
  _context.n = 1;
8660
- return createTypeAndThenCall(chain, options, reserveChain);
8680
+ return createTypeAndThenCall(options, {
8681
+ reserveChain: reserveChain
8682
+ });
8661
8683
  case 1:
8662
8684
  serialized = _context.v;
8663
8685
  assertAddressIsString(address);
@@ -8709,7 +8731,7 @@ var createTypeThenAutoReserve = /*#__PURE__*/function () {
8709
8731
  break;
8710
8732
  }
8711
8733
  _context2.n = 1;
8712
- return createTypeAndThenCall(chain, options);
8734
+ return createTypeAndThenCall(options);
8713
8735
  case 1:
8714
8736
  return _context2.a(2, _context2.v);
8715
8737
  case 2:
@@ -8758,7 +8780,7 @@ var verifyEdOnDestinationInternal = /*#__PURE__*/function () {
8758
8780
  while (1) switch (_context.n) {
8759
8781
  case 0:
8760
8782
  api = options.api, buildTx = options.buildTx, origin = options.origin, destination = options.destination, currency = options.currency, address = options.address, senderAddress = options.senderAddress, feeAsset = options.feeAsset;
8761
- if (!(destination === 'Ethereum')) {
8783
+ if (!isExternalChain(destination)) {
8762
8784
  _context.n = 1;
8763
8785
  break;
8764
8786
  }
@@ -8876,12 +8898,219 @@ var verifyEdOnDestination = /*#__PURE__*/function () {
8876
8898
  case 5:
8877
8899
  return _context.a(2);
8878
8900
  }
8879
- }, _callee, null, [[1,, 3, 5]]);
8880
- }));
8881
- return function verifyEdOnDestination(_x) {
8882
- return _ref.apply(this, arguments);
8901
+ }, _callee, null, [[1,, 3, 5]]);
8902
+ }));
8903
+ return function verifyEdOnDestination(_x) {
8904
+ return _ref.apply(this, arguments);
8905
+ };
8906
+ }();
8907
+
8908
+ var transferPolkadotXcm = /*#__PURE__*/function () {
8909
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options) {
8910
+ var method,
8911
+ fees,
8912
+ api,
8913
+ destLocation,
8914
+ asset,
8915
+ beneficiaryLocation,
8916
+ multiAsset,
8917
+ overriddenAsset,
8918
+ pallet,
8919
+ version,
8920
+ methodOverride,
8921
+ resolvedMultiAssets,
8922
+ feeAssetIndex,
8923
+ call,
8924
+ _args = arguments,
8925
+ _t;
8926
+ return _regenerator().w(function (_context) {
8927
+ while (1) switch (_context.n) {
8928
+ case 0:
8929
+ method = _args.length > 1 && _args[1] !== undefined ? _args[1] : 'transfer_assets_using_type_and_then';
8930
+ fees = _args.length > 2 && _args[2] !== undefined ? _args[2] : undefined;
8931
+ api = options.api, destLocation = options.destLocation, asset = options.assetInfo, beneficiaryLocation = options.beneficiaryLocation, multiAsset = options.asset, overriddenAsset = options.overriddenAsset, pallet = options.pallet, version = options.version, methodOverride = options.method;
8932
+ if (!(method === 'transfer_assets_using_type_and_then')) {
8933
+ _context.n = 2;
8934
+ break;
8935
+ }
8936
+ _t = api;
8937
+ _context.n = 1;
8938
+ return createTypeAndThenCall(options, {
8939
+ noFeeAsset: true
8940
+ });
8941
+ case 1:
8942
+ return _context.a(2, _t.deserializeExtrinsics.call(_t, _context.v));
8943
+ case 2:
8944
+ resolvedMultiAssets = maybeOverrideAssets(version, asset.amount, [multiAsset], overriddenAsset);
8945
+ feeAssetIndex = overriddenAsset === undefined || isTLocation(overriddenAsset) ? DEFAULT_FEE_ASSET : overriddenAsset.findIndex(function (asset) {
8946
+ return asset.isFeeAsset;
8947
+ });
8948
+ call = {
8949
+ module: pallet !== null && pallet !== void 0 ? pallet : 'PolkadotXcm',
8950
+ method: methodOverride !== null && methodOverride !== void 0 ? methodOverride : method,
8951
+ params: _objectSpread2({
8952
+ dest: addXcmVersionHeader(destLocation, version),
8953
+ beneficiary: addXcmVersionHeader(beneficiaryLocation, version),
8954
+ assets: addXcmVersionHeader(resolvedMultiAssets, version),
8955
+ fee_asset_item: feeAssetIndex
8956
+ }, fees !== undefined ? {
8957
+ weight_limit: fees
8958
+ } : {})
8959
+ };
8960
+ return _context.a(2, Promise.resolve(api.deserializeExtrinsics(call)));
8961
+ }
8962
+ }, _callee);
8963
+ }));
8964
+ return function transferPolkadotXcm(_x) {
8965
+ return _ref.apply(this, arguments);
8966
+ };
8967
+ }();
8968
+
8969
+ var ERR_LOCATION_DEST_NOT_SUPPORTED = 'XCM Location destinations are not supported for specific transfer you are trying to create. In special cases such as xTokens or xTransfer pallet try using address locaation instead (for both destination and address in same location set (eg. X2 - Parachain, Address). For further assistance please open issue in our repository.';
8970
+
8971
+ var resolveLocationFromDest = function resolveLocationFromDest(destination, asset) {
8972
+ if (_typeof(destination) === 'object') return destination;
8973
+ if (isRelayChain(destination)) return DOT_LOCATION;
8974
+ // If it is a native asset, search by symbol on AssetHub and use the location from there
8975
+ var assetHubAsset = getOtherAssets(destination).find(function (ahAsset) {
8976
+ var _ahAsset$symbol, _asset$symbol;
8977
+ return ((_ahAsset$symbol = ahAsset.symbol) === null || _ahAsset$symbol === void 0 ? void 0 : _ahAsset$symbol.toLowerCase()) === ((_asset$symbol = asset.symbol) === null || _asset$symbol === void 0 ? void 0 : _asset$symbol.toLowerCase());
8978
+ });
8979
+ if (!(assetHubAsset !== null && assetHubAsset !== void 0 && assetHubAsset.location)) {
8980
+ throw new InvalidCurrencyError("Asset ".concat(asset.symbol, " not found or has no location"));
8981
+ }
8982
+ return assetHubAsset.location;
8983
+ };
8984
+ var buildLocation = function buildLocation(_ref) {
8985
+ var paraIdTo = _ref.paraIdTo,
8986
+ asset = _ref.asset,
8987
+ origin = _ref.origin,
8988
+ destination = _ref.destination;
8989
+ if (asset.isNative) {
8990
+ return resolveLocationFromDest(destination, asset);
8991
+ }
8992
+ var createDefaultLocation = function createDefaultLocation(assetId) {
8993
+ return {
8994
+ parents: Parents.ONE,
8995
+ interior: {
8996
+ X3: [{
8997
+ Parachain: paraIdTo
8998
+ }, {
8999
+ PalletInstance: '50'
9000
+ }, {
9001
+ GeneralIndex: BigInt(assetId)
9002
+ }]
9003
+ }
9004
+ };
8883
9005
  };
8884
- }();
9006
+ var isBifrostOrigin = origin === 'BifrostPolkadot' || origin === 'BifrostKusama';
9007
+ if (isBifrostOrigin) {
9008
+ return createDefaultLocation(asset.assetId);
9009
+ }
9010
+ if (asset.location) {
9011
+ return asset.location;
9012
+ } else {
9013
+ return createDefaultLocation(asset.assetId);
9014
+ }
9015
+ };
9016
+
9017
+ var createDefaultCurrencySelection = function createDefaultCurrencySelection(input) {
9018
+ var asset = input.asset,
9019
+ version = input.version;
9020
+ var location = buildLocation(input);
9021
+ var multiAsset = createAsset(version, asset.amount, location);
9022
+ return addXcmVersionHeader(multiAsset, version);
9023
+ };
9024
+ var getModifiedCurrencySelection = function getModifiedCurrencySelection(input) {
9025
+ var version = input.version,
9026
+ asset = input.asset,
9027
+ overriddenAsset = input.overriddenAsset;
9028
+ if (overriddenAsset) {
9029
+ return addXcmVersionHeader(maybeOverrideAssets(version, asset.amount, [], overriddenAsset), version);
9030
+ }
9031
+ return createDefaultCurrencySelection(input);
9032
+ };
9033
+
9034
+ var getXTokensParams = function getXTokensParams(isMultiAssetTransfer, currencySelection, destLocation, amount, weightLimit, version, overriddenAsset) {
9035
+ var versionedDestLocation = addXcmVersionHeader(destLocation, version);
9036
+ if (!isMultiAssetTransfer) {
9037
+ return {
9038
+ currency_id: currencySelection,
9039
+ amount: BigInt(amount),
9040
+ dest: versionedDestLocation,
9041
+ dest_weight_limit: weightLimit
9042
+ };
9043
+ }
9044
+ var isOverriddenMultiAssets = overriddenAsset && !isTLocation(overriddenAsset);
9045
+ var assetKey = isOverriddenMultiAssets ? 'assets' : 'asset';
9046
+ var feeAssetIndex = isOverriddenMultiAssets ? overriddenAsset.findIndex(function (asset) {
9047
+ return asset.isFeeAsset;
9048
+ }) : undefined;
9049
+ var feeIndexWithFallback = feeAssetIndex === -1 ? 0 : feeAssetIndex;
9050
+ return _objectSpread2(_objectSpread2(_defineProperty({}, assetKey, currencySelection), isOverriddenMultiAssets && {
9051
+ fee_item: feeIndexWithFallback
9052
+ }), {}, {
9053
+ dest: versionedDestLocation,
9054
+ dest_weight_limit: weightLimit
9055
+ });
9056
+ };
9057
+
9058
+ var shouldUseMultiAssetTransfer = function shouldUseMultiAssetTransfer(_ref) {
9059
+ var origin = _ref.origin,
9060
+ destination = _ref.destination,
9061
+ scenario = _ref.scenario,
9062
+ overriddenAsset = _ref.overriddenAsset,
9063
+ useMultiAssetTransfer = _ref.useMultiAssetTransfer;
9064
+ var isAstarOrShidenToRelay = scenario === 'ParaToRelay' && (origin === 'Astar' || origin === 'Shiden');
9065
+ var isBifrostOrigin = origin === 'BifrostPolkadot' || origin === 'BifrostKusama';
9066
+ var isAssetHubDest = destination === 'AssetHubPolkadot' || destination === 'AssetHubKusama';
9067
+ var isOverriddenMultiAssets = overriddenAsset && !isTLocation(overriddenAsset);
9068
+ return useMultiAssetTransfer || isAstarOrShidenToRelay || isAssetHubDest && !isBifrostOrigin || !!isOverriddenMultiAssets;
9069
+ };
9070
+ var getXTokensMethod = function getXTokensMethod(useMultiAsset, overriddenAsset) {
9071
+ if (!useMultiAsset) return 'transfer';
9072
+ var isOverriddenMultiAssets = overriddenAsset && !isTLocation(overriddenAsset);
9073
+ return isOverriddenMultiAssets ? 'transfer_multiassets' : 'transfer_multiasset';
9074
+ };
9075
+ var buildXTokensCall = function buildXTokensCall(input, currencySelection, fees) {
9076
+ var api = input.api,
9077
+ origin = input.origin,
9078
+ destination = input.destination,
9079
+ overriddenAsset = input.overriddenAsset,
9080
+ address = input.address,
9081
+ asset = input.asset,
9082
+ pallet = input.pallet,
9083
+ version = input.version,
9084
+ paraIdTo = input.paraIdTo,
9085
+ methodOverride = input.method;
9086
+ var useMultiAsset = shouldUseMultiAssetTransfer(input);
9087
+ var modifiedCurrencySelection = useMultiAsset ? getModifiedCurrencySelection(input) : currencySelection;
9088
+ var method = getXTokensMethod(useMultiAsset, overriddenAsset);
9089
+ var destLocation = createBeneficiaryLocXTokens({
9090
+ api: api,
9091
+ origin: origin,
9092
+ destination: destination,
9093
+ address: address,
9094
+ version: version,
9095
+ paraId: paraIdTo
9096
+ });
9097
+ var params = getXTokensParams(useMultiAsset, modifiedCurrencySelection, destLocation, asset.amount, fees, version, overriddenAsset);
9098
+ return {
9099
+ module: pallet !== null && pallet !== void 0 ? pallet : 'XTokens',
9100
+ method: methodOverride !== null && methodOverride !== void 0 ? methodOverride : method,
9101
+ params: params
9102
+ };
9103
+ };
9104
+
9105
+ // Contains basic structure of xTokens call
9106
+ var transferXTokens = function transferXTokens(input, currencySelection) {
9107
+ var fees = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_FEE;
9108
+ var api = input.api,
9109
+ destination = input.destination;
9110
+ assertToIsString(destination, ERR_LOCATION_DEST_NOT_SUPPORTED);
9111
+ var call = buildXTokensCall(input, currencySelection, fees);
9112
+ return api.deserializeExtrinsics(call);
9113
+ };
8885
9114
 
8886
9115
  var resolveParaId = function resolveParaId(paraId, destination) {
8887
9116
  if (isTLocation(destination)) {
@@ -8933,7 +9162,8 @@ var Parachain = /*#__PURE__*/function () {
8933
9162
  var _asset$location;
8934
9163
  var asset = options.assetInfo;
8935
9164
  var isExternalAsset = ((_asset$location = asset.location) === null || _asset$location === void 0 ? void 0 : _asset$location.parents) === Parents.TWO;
8936
- return !isExternalAsset && !this.shouldUseNativeAssetTeleport(options);
9165
+ if (isExternalAsset) return false;
9166
+ return !this.shouldUseNativeAssetTeleport(options) || !supportsPolkadotXCM(this);
8937
9167
  }
8938
9168
  }, {
8939
9169
  key: "transfer",
@@ -8968,7 +9198,7 @@ var Parachain = /*#__PURE__*/function () {
8968
9198
  _context.n = 3;
8969
9199
  break;
8970
9200
  }
8971
- throw new UnsupportedOperationError('Relaychain assets require the type-and-then method which is not supported by this chain.');
9201
+ throw new TypeAndThenUnavailableError('Relaychain assets require the type-and-then method which is not supported by this chain.');
8972
9202
  case 3:
8973
9203
  isSubBridge = !isTLocation(destination) && isSubstrateBridge(this.chain, destination);
8974
9204
  useTypeAndThen = assetNeedsTypeThen && supportsTypeThen && destChain && !isExternalChain(destChain) && !feeAsset && (!isTrustedChain(this.chain) || !isTrustedChain(destChain)) || isSubBridge;
@@ -9023,6 +9253,7 @@ var Parachain = /*#__PURE__*/function () {
9023
9253
  }
9024
9254
  options = {
9025
9255
  api: api,
9256
+ chain: this.chain,
9026
9257
  destLocation: createDestination(version, this.chain, destination, paraId),
9027
9258
  beneficiaryLocation: createBeneficiaryLocation({
9028
9259
  api: api,
@@ -9067,7 +9298,7 @@ var Parachain = /*#__PURE__*/function () {
9067
9298
  isAHOrigin = this.chain.includes('AssetHub');
9068
9299
  isAHDest = !isTLocation(destination) && destination.includes('AssetHub'); // Handle common cases
9069
9300
  isExternalAsset = ((_asset$location2 = asset.location) === null || _asset$location2 === void 0 ? void 0 : _asset$location2.parents) === Parents.TWO;
9070
- isEthDest = destination === 'Ethereum'; // External asset - Any origin to any dest via AH - DestinationReserve - multiple instructions
9301
+ isEthDest = _typeof(destination) !== 'object' && isExternalChain(destination); // External asset - Any origin to any dest via AH - DestinationReserve - multiple instructions
9071
9302
  isExternalAssetViaAh = isExternalAsset && !isAHOrigin && !isAHDest && !isEthDest && !feeAsset; // External asset - Any origin to AHP - DestinationReserve - one DepositAsset instruction
9072
9303
  isExternalAssetToAh = isExternalAsset && isAHDest && !isAHOrigin && !isEthDest && !feeAsset;
9073
9304
  if (!(isExternalAssetViaAh || isExternalAssetToAh || useTypeAndThen)) {
@@ -9082,7 +9313,7 @@ var Parachain = /*#__PURE__*/function () {
9082
9313
  return this.transferPolkadotXCM(options);
9083
9314
  case 9:
9084
9315
  _context.n = 10;
9085
- return createTypeAndThenCall(this.chain, options);
9316
+ return createTypeAndThenCall(options);
9086
9317
  case 10:
9087
9318
  call = _context.v;
9088
9319
  return _context.a(2, api.deserializeExtrinsics(call));
@@ -9146,45 +9377,42 @@ var Parachain = /*#__PURE__*/function () {
9146
9377
  }, {
9147
9378
  key: "shouldUseNativeAssetTeleport",
9148
9379
  value: function shouldUseNativeAssetTeleport(_ref) {
9380
+ var _this = this;
9149
9381
  var asset = _ref.assetInfo,
9150
9382
  to = _ref.to;
9151
- if (isTLocation(to) || isSubstrateBridge(this.chain, to) || to === 'Ethereum') return false;
9383
+ if (isTLocation(to) || isSubstrateBridge(this.chain, to) || isExternalChain(to)) return false;
9152
9384
  var isAHPOrigin = this.chain.includes('AssetHub');
9153
9385
  var isAHPDest = !isTLocation(to) && to.includes('AssetHub');
9154
- var isNativeAsset = !isTLocation(to) && (isAHPOrigin && !asset.isNative && isSymbolMatch(asset.symbol, getNativeAssetSymbol(to)) || isAHPDest && asset.isNative && isSymbolMatch(asset.symbol, getNativeAssetSymbol(this.chain)));
9386
+ var nativeSymbols = PARACHAINS.filter(function (chain) {
9387
+ return getRelayChainOf(chain) === getRelayChainOf(_this.chain) && !isTrustedChain(chain);
9388
+ }).map(function (chain) {
9389
+ return getNativeAssetSymbol(chain);
9390
+ });
9391
+ var isSomeChainNativeAsset = nativeSymbols.some(function (symbol) {
9392
+ return isSymbolMatch(asset.symbol, symbol);
9393
+ });
9394
+ var isNativeAsset = !isTLocation(to) && (isAHPOrigin && !asset.isNative && isSymbolMatch(asset.symbol, getNativeAssetSymbol(to)) || isAHPDest && isSomeChainNativeAsset);
9155
9395
  var assetHubChain = "AssetHub".concat(getRelayChainOf(this.chain));
9156
9396
  var isRegisteredOnAh = asset.location && findAssetInfo(assetHubChain, {
9157
9397
  location: asset.location
9158
9398
  }, null);
9159
9399
  return Boolean(isNativeAsset) && Boolean(isRegisteredOnAh) && (isAHPOrigin || isAHPDest);
9160
9400
  }
9161
- }, {
9162
- key: "getRelayToParaOverrides",
9163
- value: function getRelayToParaOverrides() {
9164
- return {
9165
- transferType: 'typeAndThen'
9166
- };
9167
- }
9168
9401
  }, {
9169
9402
  key: "transferRelayToPara",
9170
9403
  value: function () {
9171
9404
  var _transferRelayToPara = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(options) {
9172
- var api, version, pallet, assetInfo, address, senderAddress, destination, paraIdTo, method, _this$getRelayToParaO, transferType, paraId, destChain, scenario;
9405
+ var api, origin, version, assetInfo, address, senderAddress, destination, paraIdTo, paraId, destChain, scenario;
9173
9406
  return _regenerator().w(function (_context2) {
9174
9407
  while (1) switch (_context2.n) {
9175
9408
  case 0:
9176
- api = options.api, version = options.version, pallet = options.pallet, assetInfo = options.assetInfo, address = options.address, senderAddress = options.senderAddress, destination = options.destination, paraIdTo = options.paraIdTo, method = options.method;
9177
- _this$getRelayToParaO = this.getRelayToParaOverrides(), transferType = _this$getRelayToParaO.transferType;
9409
+ api = options.api, origin = options.origin, version = options.version, assetInfo = options.assetInfo, address = options.address, senderAddress = options.senderAddress, destination = options.destination, paraIdTo = options.paraIdTo;
9178
9410
  if (!this.isReceivingTempDisabled('RelayToPara')) {
9179
9411
  _context2.n = 1;
9180
9412
  break;
9181
9413
  }
9182
9414
  throw new FeatureTemporarilyDisabledError("Receiving on ".concat(this.chain, " is temporarily disabled"));
9183
9415
  case 1:
9184
- if (!(transferType === 'typeAndThen')) {
9185
- _context2.n = 3;
9186
- break;
9187
- }
9188
9416
  paraId = resolveParaId(paraIdTo, destination);
9189
9417
  destChain = resolveDestChain(this.chain, paraId);
9190
9418
  scenario = 'RelayToPara';
@@ -9195,6 +9423,7 @@ var Parachain = /*#__PURE__*/function () {
9195
9423
  throw new UnsupportedOperationError('Cannot override destination when using type and then transfer.');
9196
9424
  case 2:
9197
9425
  return _context2.a(2, createTypeThenAutoReserve(getRelayChainOf(destChain), _objectSpread2(_objectSpread2({}, options), {}, {
9426
+ chain: origin,
9198
9427
  beneficiaryLocation: createBeneficiaryLocation({
9199
9428
  api: api,
9200
9429
  address: address,
@@ -9207,12 +9436,6 @@ var Parachain = /*#__PURE__*/function () {
9207
9436
  destChain: destChain,
9208
9437
  paraIdTo: paraId
9209
9438
  })));
9210
- case 3:
9211
- return _context2.a(2, {
9212
- module: pallet !== null && pallet !== void 0 ? pallet : 'XcmPallet',
9213
- method: method !== null && method !== void 0 ? method : 'limited_teleport_assets',
9214
- params: constructRelayToParaParams(options, version)
9215
- });
9216
9439
  }
9217
9440
  }, _callee2, this);
9218
9441
  }));
@@ -9369,7 +9592,6 @@ var Parachain = /*#__PURE__*/function () {
9369
9592
  api,
9370
9593
  asset,
9371
9594
  version,
9372
- destination,
9373
9595
  address,
9374
9596
  senderAddress,
9375
9597
  feeAsset,
@@ -9387,13 +9609,14 @@ var Parachain = /*#__PURE__*/function () {
9387
9609
  shouldIncludeFeeAsset,
9388
9610
  customXcmOnDest,
9389
9611
  messageId,
9612
+ hopDestination,
9390
9613
  call,
9391
9614
  _args4 = arguments;
9392
9615
  return _regenerator().w(function (_context4) {
9393
9616
  while (1) switch (_context4.n) {
9394
9617
  case 0:
9395
9618
  useOnlyDepositInstruction = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : false;
9396
- api = input.api, asset = input.assetInfo, version = input.version, destination = input.destination, address = input.address, senderAddress = input.senderAddress, feeAsset = input.feeAssetInfo;
9619
+ api = input.api, asset = input.assetInfo, version = input.version, address = input.address, senderAddress = input.senderAddress, feeAsset = input.feeAssetInfo;
9397
9620
  _context4.n = 1;
9398
9621
  return getBridgeStatus(api.clone());
9399
9622
  case 1:
@@ -9454,11 +9677,12 @@ var Parachain = /*#__PURE__*/function () {
9454
9677
  messageId = _context4.v;
9455
9678
  customXcmOnDest = createCustomXcmOnDest(input, this.chain, messageId, ethAssetInfo);
9456
9679
  case 7:
9680
+ hopDestination = 'AssetHubPolkadot';
9457
9681
  call = {
9458
9682
  module: 'PolkadotXcm',
9459
9683
  method: 'transfer_assets_using_type_and_then',
9460
9684
  params: {
9461
- dest: createVersionedDestination(version, this.chain, destination, getParaId('AssetHubPolkadot')),
9685
+ dest: createVersionedDestination(version, this.chain, hopDestination, getParaId(hopDestination)),
9462
9686
  assets: addXcmVersionHeader([].concat(_toConsumableArray(shouldIncludeFeeAsset ? [createAsset(version, fee, DOT_LOCATION)] : []), [ethAsset]), version),
9463
9687
  assets_transfer_type: 'DestinationReserve',
9464
9688
  remote_fees_id: addXcmVersionHeader((_feeAsset$location = feeAsset === null || feeAsset === void 0 ? void 0 : feeAsset.location) !== null && _feeAsset$location !== void 0 ? _feeAsset$location : shouldIncludeFeeAsset ? DOT_LOCATION : asset.location, version),
@@ -9569,11 +9793,9 @@ var Acala = /*#__PURE__*/function (_Parachain) {
9569
9793
  }
9570
9794
  _inherits(Acala, _Parachain);
9571
9795
  return _createClass(Acala, [{
9572
- key: "transferXTokens",
9573
- value: function transferXTokens$1(input) {
9574
- var asset = input.asset;
9575
- var currencySelection = this.getCustomCurrencyId(asset);
9576
- return transferXTokens(input, currencySelection);
9796
+ key: "transferPolkadotXCM",
9797
+ value: function transferPolkadotXCM(input) {
9798
+ return transferPolkadotXcm(input);
9577
9799
  }
9578
9800
  }, {
9579
9801
  key: "transferRelayToPara",
@@ -9684,20 +9906,9 @@ var Ajuna = /*#__PURE__*/function (_Parachain) {
9684
9906
  }
9685
9907
  _inherits(Ajuna, _Parachain);
9686
9908
  return _createClass(Ajuna, [{
9687
- key: "transferXTokens",
9688
- value: function transferXTokens$1(input) {
9689
- var scenario = input.scenario,
9690
- asset = input.asset;
9691
- if (scenario !== 'ParaToPara') {
9692
- throw new ScenarioNotSupportedError({
9693
- chain: this.chain,
9694
- scenario: scenario
9695
- });
9696
- }
9697
- if (asset.symbol !== this.getNativeAssetSymbol()) {
9698
- throw new InvalidCurrencyError("Asset ".concat(asset.symbol, " is not supported by chain ").concat(this.chain, "."));
9699
- }
9700
- return transferXTokens(input, this.getNativeAssetSymbol());
9909
+ key: "transferPolkadotXCM",
9910
+ value: function transferPolkadotXCM(input) {
9911
+ return transferPolkadotXcm(input);
9701
9912
  }
9702
9913
  }, {
9703
9914
  key: "transferRelayToPara",
@@ -9743,68 +9954,14 @@ var Ajuna = /*#__PURE__*/function (_Parachain) {
9743
9954
  }]);
9744
9955
  }(Parachain);
9745
9956
 
9746
- var transferPolkadotXcm = function transferPolkadotXcm(_ref, method) {
9747
- var api = _ref.api,
9748
- destLocation = _ref.destLocation,
9749
- asset = _ref.assetInfo,
9750
- beneficiaryLocation = _ref.beneficiaryLocation,
9751
- multiAsset = _ref.asset,
9752
- overriddenAsset = _ref.overriddenAsset,
9753
- pallet = _ref.pallet,
9754
- version = _ref.version,
9755
- methodOverride = _ref.method;
9756
- var fees = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
9757
- var resolvedMultiAssets = maybeOverrideAssets(version, asset.amount, [multiAsset], overriddenAsset);
9758
- var feeAssetIndex = overriddenAsset === undefined || isTLocation(overriddenAsset) ? DEFAULT_FEE_ASSET : overriddenAsset.findIndex(function (asset) {
9759
- return asset.isFeeAsset;
9760
- });
9761
- var call = {
9762
- module: pallet !== null && pallet !== void 0 ? pallet : 'PolkadotXcm',
9763
- method: methodOverride !== null && methodOverride !== void 0 ? methodOverride : method,
9764
- params: _objectSpread2({
9765
- dest: addXcmVersionHeader(destLocation, version),
9766
- beneficiary: addXcmVersionHeader(beneficiaryLocation, version),
9767
- assets: addXcmVersionHeader(resolvedMultiAssets, version),
9768
- fee_asset_item: feeAssetIndex
9769
- }, fees !== undefined ? {
9770
- weight_limit: fees
9771
- } : {})
9772
- };
9773
- return Promise.resolve(api.deserializeExtrinsics(call));
9774
- };
9775
-
9776
- var AjunaPaseo = /*#__PURE__*/function (_Parachain) {
9957
+ var AjunaPaseo = /*#__PURE__*/function (_Ajuna) {
9777
9958
  function AjunaPaseo() {
9778
9959
  _classCallCheck(this, AjunaPaseo);
9779
9960
  return _callSuper(this, AjunaPaseo, ['AjunaPaseo', 'Ajuna(paseo)', 'Paseo', Version.V5]);
9780
9961
  }
9781
- _inherits(AjunaPaseo, _Parachain);
9782
- return _createClass(AjunaPaseo, [{
9783
- key: "transferPolkadotXCM",
9784
- value: function transferPolkadotXCM(input) {
9785
- var scenario = input.scenario,
9786
- asset = input.assetInfo;
9787
- if (scenario !== 'ParaToPara') {
9788
- throw new ScenarioNotSupportedError({
9789
- chain: this.chain,
9790
- scenario: scenario
9791
- });
9792
- }
9793
- if (asset.symbol !== this.getNativeAssetSymbol()) {
9794
- throw new InvalidCurrencyError("Asset ".concat(asset.symbol, " is not supported by chain ").concat(this.chain, "."));
9795
- }
9796
- return transferPolkadotXcm(input, 'limited_reserve_transfer_assets', 'Unlimited');
9797
- }
9798
- }, {
9799
- key: "transferRelayToPara",
9800
- value: function transferRelayToPara() {
9801
- throw new ScenarioNotSupportedError({
9802
- chain: this.chain,
9803
- scenario: 'RelayToPara'
9804
- });
9805
- }
9806
- }]);
9807
- }(Parachain);
9962
+ _inherits(AjunaPaseo, _Ajuna);
9963
+ return _createClass(AjunaPaseo);
9964
+ }(Ajuna);
9808
9965
 
9809
9966
  var Altair = /*#__PURE__*/function (_Parachain) {
9810
9967
  function Altair() {
@@ -9902,29 +10059,12 @@ var AssetHubKusama = /*#__PURE__*/function (_Parachain) {
9902
10059
  return _createClass(AssetHubKusama, [{
9903
10060
  key: "transferPolkadotXCM",
9904
10061
  value: function transferPolkadotXCM(input) {
9905
- var destination = input.destination,
9906
- asset = input.assetInfo,
10062
+ var asset = input.assetInfo,
9907
10063
  scenario = input.scenario;
9908
- // TESTED https://kusama.subscan.io/xcm_message/kusama-ddc2a48f0d8e0337832d7aae26f6c3053e1f4ffd
9909
- // TESTED https://kusama.subscan.io/xcm_message/kusama-8e423130a4d8b61679af95dbea18a55124f99672
9910
- if (scenario === 'ParaToPara' && asset.symbol === 'DOT' && asset.isNative) {
10064
+ if (scenario === 'ParaToPara' && asset.symbol === 'DOT' && asset.assetId === undefined) {
9911
10065
  throw new ScenarioNotSupportedError('Bridged DOT cannot currently be transfered from AssetHubKusama, if you are sending different DOT asset, please specify {id: <DOTID>}.');
9912
10066
  }
9913
- var method = this.getMethod(scenario, destination);
9914
- return transferPolkadotXcm(input, method, 'Unlimited');
9915
- }
9916
- }, {
9917
- key: "getMethod",
9918
- value: function getMethod(scenario, destination) {
9919
- var isTrusted = !isTLocation(destination) && isTrustedChain(destination);
9920
- return scenario === 'ParaToPara' && !isTrusted ? 'limited_reserve_transfer_assets' : 'limited_teleport_assets';
9921
- }
9922
- }, {
9923
- key: "getRelayToParaOverrides",
9924
- value: function getRelayToParaOverrides() {
9925
- return {
9926
- transferType: 'teleport'
9927
- };
10067
+ return transferPolkadotXcm(input);
9928
10068
  }
9929
10069
  }, {
9930
10070
  key: "transferLocalNonNativeAsset",
@@ -10854,39 +10994,23 @@ var AssetHubPolkadot = /*#__PURE__*/function (_Parachain) {
10854
10994
  key: "handleEthBridgeNativeTransfer",
10855
10995
  value: function () {
10856
10996
  var _handleEthBridgeNativeTransfer = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(input) {
10857
- var api, version, destination, senderAddress, address, paraIdTo, asset, bridgeStatus, messageId, location, call;
10997
+ var api, version, destination, senderAddress, address, paraIdTo, asset, messageId, location, call;
10858
10998
  return _regenerator().w(function (_context) {
10859
10999
  while (1) switch (_context.n) {
10860
11000
  case 0:
10861
11001
  api = input.api, version = input.version, destination = input.destination, senderAddress = input.senderAddress, address = input.address, paraIdTo = input.paraIdTo, asset = input.assetInfo;
10862
- _context.n = 1;
10863
- return getBridgeStatus(api.clone());
10864
- case 1:
10865
- bridgeStatus = _context.v;
10866
- if (!(bridgeStatus !== 'Normal')) {
10867
- _context.n = 2;
10868
- break;
10869
- }
10870
- throw new BridgeHaltedError();
10871
- case 2:
10872
11002
  assertSenderAddress(senderAddress);
10873
- if (!isTLocation(address)) {
10874
- _context.n = 3;
10875
- break;
10876
- }
10877
- throw new InvalidAddressError('Location address is not supported for Ethereum transfers');
10878
- case 3:
10879
11003
  assertHasLocation(asset);
10880
- _context.n = 4;
10881
- return generateMessageId(api, senderAddress, getParaId(this.chain), JSON.stringify(asset.location), address, asset.amount);
10882
- case 4:
11004
+ _context.n = 1;
11005
+ return generateMessageId(api, senderAddress, getParaId(this.chain), JSON.stringify(asset.location), JSON.stringify(address), asset.amount);
11006
+ case 1:
10883
11007
  messageId = _context.v;
10884
11008
  location = asset.symbol === this.getNativeAssetSymbol() ? DOT_LOCATION : asset.location;
10885
11009
  call = {
10886
11010
  module: 'PolkadotXcm',
10887
11011
  method: 'transfer_assets_using_type_and_then',
10888
11012
  params: {
10889
- dest: createVersionedDestination(this.version, this.chain, destination, paraIdTo, ETHEREUM_JUNCTION, Parents.TWO),
11013
+ dest: createVersionedDestination(this.version, this.chain, destination, paraIdTo, getEthereumJunction(this.chain), Parents.TWO),
10890
11014
  assets: addXcmVersionHeader([createAsset(version, asset.amount, location)], version),
10891
11015
  assets_transfer_type: 'LocalReserve',
10892
11016
  remote_fees_id: addXcmVersionHeader(location, version),
@@ -10902,212 +11026,69 @@ var AssetHubPolkadot = /*#__PURE__*/function (_Parachain) {
10902
11026
  api: api,
10903
11027
  address: address,
10904
11028
  version: version
10905
- })
10906
- }
10907
- }, {
10908
- SetTopic: messageId
10909
- }], version),
10910
- weight_limit: 'Unlimited'
10911
- }
10912
- };
10913
- return _context.a(2, api.deserializeExtrinsics(call));
10914
- }
10915
- }, _callee, this);
10916
- }));
10917
- function handleEthBridgeNativeTransfer(_x) {
10918
- return _handleEthBridgeNativeTransfer.apply(this, arguments);
10919
- }
10920
- return handleEthBridgeNativeTransfer;
10921
- }()
10922
- }, {
10923
- key: "handleEthBridgeTransfer",
10924
- value: function () {
10925
- var _handleEthBridgeTransfer = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(input) {
10926
- var api, destination, paraIdTo, address, asset, version, bridgeStatus, modifiedInput;
10927
- return _regenerator().w(function (_context2) {
10928
- while (1) switch (_context2.n) {
10929
- case 0:
10930
- api = input.api, destination = input.destination, paraIdTo = input.paraIdTo, address = input.address, asset = input.assetInfo, version = input.version;
10931
- _context2.n = 1;
10932
- return getBridgeStatus(api.clone());
10933
- case 1:
10934
- bridgeStatus = _context2.v;
10935
- if (!(bridgeStatus !== 'Normal')) {
10936
- _context2.n = 2;
10937
- break;
10938
- }
10939
- throw new BridgeHaltedError();
10940
- case 2:
10941
- assertHasLocation(asset);
10942
- if (!(asset.symbol === this.getNativeAssetSymbol() || asset.symbol === getNativeAssetSymbol('Kusama'))) {
10943
- _context2.n = 3;
10944
- break;
10945
- }
10946
- return _context2.a(2, this.handleEthBridgeNativeTransfer(input));
10947
- case 3:
10948
- modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
10949
- destLocation: createDestination(this.version, this.chain, destination, paraIdTo, ETHEREUM_JUNCTION, Parents.TWO),
10950
- beneficiaryLocation: createBeneficiaryLocation({
10951
- api: api,
10952
- address: address,
10953
- version: this.version
10954
- }),
10955
- asset: createAsset(version, asset.amount, asset.location)
10956
- });
10957
- return _context2.a(2, transferPolkadotXcm(modifiedInput, 'transfer_assets', 'Unlimited'));
11029
+ })
11030
+ }
11031
+ }, {
11032
+ SetTopic: messageId
11033
+ }], version),
11034
+ weight_limit: 'Unlimited'
11035
+ }
11036
+ };
11037
+ return _context.a(2, api.deserializeExtrinsics(call));
10958
11038
  }
10959
- }, _callee2, this);
11039
+ }, _callee, this);
10960
11040
  }));
10961
- function handleEthBridgeTransfer(_x2) {
10962
- return _handleEthBridgeTransfer.apply(this, arguments);
11041
+ function handleEthBridgeNativeTransfer(_x) {
11042
+ return _handleEthBridgeNativeTransfer.apply(this, arguments);
10963
11043
  }
10964
- return handleEthBridgeTransfer;
11044
+ return handleEthBridgeNativeTransfer;
10965
11045
  }()
10966
- }, {
10967
- key: "handleMythosTransfer",
10968
- value: function handleMythosTransfer(input) {
10969
- var api = input.api,
10970
- address = input.address,
10971
- asset = input.assetInfo,
10972
- destination = input.destination,
10973
- paraIdTo = input.paraIdTo,
10974
- version = input.version;
10975
- var paraId = resolveParaId(paraIdTo, destination);
10976
- var customLocation = {
10977
- parents: Parents.ONE,
10978
- interior: {
10979
- X1: {
10980
- Parachain: paraId
10981
- }
10982
- }
10983
- };
10984
- var modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
10985
- destLocation: createDestination(version, this.chain, destination, paraId),
10986
- beneficiaryLocation: createBeneficiaryLocation({
10987
- api: api,
10988
- address: address,
10989
- version: version
10990
- }),
10991
- asset: createAsset(version, asset.amount, customLocation)
10992
- });
10993
- return transferPolkadotXcm(modifiedInput, 'limited_teleport_assets', 'Unlimited');
10994
- }
10995
- }, {
10996
- key: "patchInput",
10997
- value: function patchInput(input) {
10998
- var assetInfo = input.assetInfo,
10999
- destination = input.destination,
11000
- version = input.version;
11001
- // TODO: Refactor this
11002
- if ((destination === 'Hydration' || destination === 'Moonbeam' || destination === 'BifrostPolkadot') && assetInfo.symbol === this.getNativeAssetSymbol()) {
11003
- return _objectSpread2(_objectSpread2({}, input), {}, {
11004
- asset: createAsset(version, assetInfo.amount, DOT_LOCATION)
11005
- });
11006
- }
11007
- return input;
11008
- }
11009
- }, {
11010
- key: "getMethod",
11011
- value: function getMethod(scenario, destination) {
11012
- var isTrusted = !isTLocation(destination) && isTrustedChain(destination);
11013
- if (destination === 'Moonbeam' || typeof destination === 'string' && destination.startsWith('Integritee')) return 'transfer_assets';
11014
- return scenario === 'ParaToPara' && !isTrusted ? 'limited_reserve_transfer_assets' : 'limited_teleport_assets';
11015
- }
11016
11046
  }, {
11017
11047
  key: "transferPolkadotXCM",
11018
11048
  value: function () {
11019
- var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(options) {
11020
- var api, scenario, assetInfo, destination, feeAssetInfo, overriddenAsset, call, isNativeAsset, isNativeFeeAsset, isExternalAsset, requiresTypeThen, _call, method, modifiedInput, _t, _t2;
11021
- return _regenerator().w(function (_context3) {
11022
- while (1) switch (_context3.n) {
11049
+ var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(options) {
11050
+ var api, assetInfo, feeAssetInfo, overriddenAsset, isNativeAsset, isNativeFeeAsset, _t;
11051
+ return _regenerator().w(function (_context2) {
11052
+ while (1) switch (_context2.n) {
11023
11053
  case 0:
11024
- api = options.api, scenario = options.scenario, assetInfo = options.assetInfo, destination = options.destination, feeAssetInfo = options.feeAssetInfo, overriddenAsset = options.overriddenAsset;
11054
+ api = options.api, assetInfo = options.assetInfo, feeAssetInfo = options.feeAssetInfo, overriddenAsset = options.overriddenAsset;
11025
11055
  if (!feeAssetInfo) {
11026
- _context3.n = 5;
11056
+ _context2.n = 4;
11027
11057
  break;
11028
11058
  }
11029
11059
  if (!overriddenAsset) {
11030
- _context3.n = 1;
11060
+ _context2.n = 1;
11031
11061
  break;
11032
11062
  }
11033
11063
  throw new InvalidCurrencyError('Cannot use overridden multi-assets with XCM execute');
11034
11064
  case 1:
11035
11065
  if (!isSymbolMatch(assetInfo.symbol, 'KSM')) {
11036
- _context3.n = 3;
11066
+ _context2.n = 2;
11037
11067
  break;
11038
11068
  }
11039
- _context3.n = 2;
11040
- return createTypeAndThenCall(this.chain, options);
11069
+ return _context2.a(2, transferPolkadotXcm(options));
11041
11070
  case 2:
11042
- call = _context3.v;
11043
- return _context3.a(2, api.deserializeExtrinsics(call));
11044
- case 3:
11045
11071
  isNativeAsset = isSymbolMatch(assetInfo.symbol, this.getNativeAssetSymbol());
11046
11072
  isNativeFeeAsset = isSymbolMatch(feeAssetInfo.symbol, this.getNativeAssetSymbol());
11047
11073
  if (!(!isNativeAsset || !isNativeFeeAsset)) {
11048
- _context3.n = 5;
11074
+ _context2.n = 4;
11049
11075
  break;
11050
11076
  }
11051
11077
  _t = api;
11052
- _context3.n = 4;
11078
+ _context2.n = 3;
11053
11079
  return handleExecuteTransfer(this.chain, options);
11080
+ case 3:
11081
+ return _context2.a(2, _t.deserializeExtrinsics.call(_t, _context2.v));
11054
11082
  case 4:
11055
- return _context3.a(2, _t.deserializeExtrinsics.call(_t, _context3.v));
11056
- case 5:
11057
- if (!(destination === 'Ethereum')) {
11058
- _context3.n = 6;
11059
- break;
11060
- }
11061
- return _context3.a(2, this.handleEthBridgeTransfer(options));
11062
- case 6:
11063
- if (!(destination === 'Mythos')) {
11064
- _context3.n = 7;
11065
- break;
11066
- }
11067
- return _context3.a(2, this.handleMythosTransfer(options));
11068
- case 7:
11069
- isExternalAsset = assetInfo.location && assetInfo.location.parents === Parents.TWO;
11070
- requiresTypeThen = AH_REQUIRES_FEE_ASSET_LOCS.some(function (loc) {
11071
- return deepEqual(loc, assetInfo.location);
11072
- });
11073
- if (!(isExternalAsset || requiresTypeThen)) {
11074
- _context3.n = 9;
11075
- break;
11076
- }
11077
- _context3.n = 8;
11078
- return createTypeAndThenCall(this.chain, options);
11079
- case 8:
11080
- _call = _context3.v;
11081
- return _context3.a(2, api.deserializeExtrinsics(_call));
11082
- case 9:
11083
- method = this.getMethod(scenario, destination); // Patch transfer_assets to use type_and_then transfer
11084
- if (!(method === 'transfer_assets' && isSymbolMatch(assetInfo.symbol, getRelayChainSymbol(this.chain)))) {
11085
- _context3.n = 11;
11086
- break;
11087
- }
11088
- _t2 = api;
11089
- _context3.n = 10;
11090
- return createTypeAndThenCall(this.chain, options);
11091
- case 10:
11092
- return _context3.a(2, _t2.deserializeExtrinsics.call(_t2, _context3.v));
11093
- case 11:
11094
- modifiedInput = this.patchInput(options);
11095
- return _context3.a(2, transferPolkadotXcm(modifiedInput, method, 'Unlimited'));
11083
+ return _context2.a(2, transferPolkadotXcm(options));
11096
11084
  }
11097
- }, _callee3, this);
11085
+ }, _callee2, this);
11098
11086
  }));
11099
- function transferPolkadotXCM(_x3) {
11087
+ function transferPolkadotXCM(_x2) {
11100
11088
  return _transferPolkadotXCM.apply(this, arguments);
11101
11089
  }
11102
11090
  return transferPolkadotXCM;
11103
11091
  }()
11104
- }, {
11105
- key: "getRelayToParaOverrides",
11106
- value: function getRelayToParaOverrides() {
11107
- return {
11108
- transferType: 'teleport'
11109
- };
11110
- }
11111
11092
  }, {
11112
11093
  key: "transferLocalNonNativeAsset",
11113
11094
  value: function transferLocalNonNativeAsset(options) {
@@ -11199,30 +11180,18 @@ var AssetHubWestend = /*#__PURE__*/function (_AssetHubPolkadot) {
11199
11180
 
11200
11181
  var Astar = /*#__PURE__*/function (_Parachain) {
11201
11182
  function Astar() {
11183
+ var chain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Astar';
11184
+ var info = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'astar';
11185
+ var ecosystem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Polkadot';
11186
+ var version = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Version.V5;
11202
11187
  _classCallCheck(this, Astar);
11203
- return _callSuper(this, Astar, ['Astar', 'astar', 'Polkadot', Version.V5]);
11188
+ return _callSuper(this, Astar, [chain, info, ecosystem, version]);
11204
11189
  }
11205
11190
  _inherits(Astar, _Parachain);
11206
11191
  return _createClass(Astar, [{
11207
11192
  key: "transferPolkadotXCM",
11208
11193
  value: function transferPolkadotXCM(input) {
11209
- return transferPolkadotXcm(input, 'limited_reserve_transfer_assets', 'Unlimited');
11210
- }
11211
- }, {
11212
- key: "transferXTokens",
11213
- value: function transferXTokens$1(input) {
11214
- var asset = input.asset;
11215
- if (asset.isNative) {
11216
- return transferXTokens(input, undefined);
11217
- }
11218
- assertHasId(asset);
11219
- return transferXTokens(input, BigInt(asset.assetId));
11220
- }
11221
- }, {
11222
- key: "canUseXTokens",
11223
- value: function canUseXTokens(_ref) {
11224
- var assetInfo = _ref.assetInfo;
11225
- return assetInfo.symbol !== this.getNativeAssetSymbol();
11194
+ return transferPolkadotXcm(input, 'transfer_assets_using_type_and_then');
11226
11195
  }
11227
11196
  }, {
11228
11197
  key: "transferRelayToPara",
@@ -11268,32 +11237,159 @@ var Astar = /*#__PURE__*/function (_Parachain) {
11268
11237
  }]);
11269
11238
  }(Parachain);
11270
11239
 
11271
- var Basilisk = /*#__PURE__*/function (_Parachain) {
11272
- function Basilisk() {
11273
- _classCallCheck(this, Basilisk);
11274
- return _callSuper(this, Basilisk, ['Basilisk', 'basilisk', 'Kusama', Version.V4]);
11240
+ var Hydration = /*#__PURE__*/function (_Parachain) {
11241
+ function Hydration() {
11242
+ var chain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Hydration';
11243
+ var info = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'hydradx';
11244
+ var ecosystem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Polkadot';
11245
+ var version = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Version.V4;
11246
+ _classCallCheck(this, Hydration);
11247
+ return _callSuper(this, Hydration, [chain, info, ecosystem, version]);
11275
11248
  }
11276
- _inherits(Basilisk, _Parachain);
11277
- return _createClass(Basilisk, [{
11278
- key: "transferXTokens",
11279
- value: function transferXTokens$1(input) {
11280
- var asset = input.asset;
11281
- assertHasId(asset);
11282
- return transferXTokens(input, Number(asset.assetId));
11249
+ _inherits(Hydration, _Parachain);
11250
+ return _createClass(Hydration, [{
11251
+ key: "transferPolkadotXCM",
11252
+ value: function () {
11253
+ var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(input) {
11254
+ var api, destination, feeAsset, asset, overriddenAsset, isMoonbeamWhAsset, isNativeAsset, isNativeFeeAsset, _t;
11255
+ return _regenerator().w(function (_context) {
11256
+ while (1) switch (_context.n) {
11257
+ case 0:
11258
+ api = input.api, destination = input.destination, feeAsset = input.feeAssetInfo, asset = input.assetInfo, overriddenAsset = input.overriddenAsset;
11259
+ if (!(destination === 'Ethereum')) {
11260
+ _context.n = 1;
11261
+ break;
11262
+ }
11263
+ return _context.a(2, this.transferToEthereum(input));
11264
+ case 1:
11265
+ isMoonbeamWhAsset = asset.location && hasJunction(asset.location, 'Parachain', getParaId('Moonbeam')) && hasJunction(asset.location, 'PalletInstance', 110);
11266
+ if (!(isMoonbeamWhAsset && destination === 'Moonbeam')) {
11267
+ _context.n = 2;
11268
+ break;
11269
+ }
11270
+ return _context.a(2, this.transferMoonbeamWhAsset(input));
11271
+ case 2:
11272
+ if (!feeAsset) {
11273
+ _context.n = 5;
11274
+ break;
11275
+ }
11276
+ if (!overriddenAsset) {
11277
+ _context.n = 3;
11278
+ break;
11279
+ }
11280
+ throw new InvalidCurrencyError('Cannot use overridden assets with XCM execute');
11281
+ case 3:
11282
+ isNativeAsset = isSymbolMatch(asset.symbol, this.getNativeAssetSymbol());
11283
+ isNativeFeeAsset = isSymbolMatch(feeAsset.symbol, this.getNativeAssetSymbol());
11284
+ if (!(!isNativeAsset || !isNativeFeeAsset)) {
11285
+ _context.n = 5;
11286
+ break;
11287
+ }
11288
+ _t = api;
11289
+ _context.n = 4;
11290
+ return handleExecuteTransfer(this.chain, input);
11291
+ case 4:
11292
+ return _context.a(2, _t.deserializeExtrinsics.call(_t, _context.v));
11293
+ case 5:
11294
+ return _context.a(2, transferPolkadotXcm(input));
11295
+ }
11296
+ }, _callee, this);
11297
+ }));
11298
+ function transferPolkadotXCM(_x) {
11299
+ return _transferPolkadotXCM.apply(this, arguments);
11300
+ }
11301
+ return transferPolkadotXCM;
11302
+ }()
11303
+ }, {
11304
+ key: "transferMoonbeamWhAsset",
11305
+ value: function transferMoonbeamWhAsset(input) {
11306
+ var assetInfo = input.assetInfo,
11307
+ version = input.version;
11308
+ assertHasLocation(assetInfo);
11309
+ var glmr = findAssetInfoOrThrow(this.chain, {
11310
+ symbol: getNativeAssetSymbol('Moonbeam')
11311
+ }, null);
11312
+ var FEE_AMOUNT = 80000000000000000n; // 0.08 GLMR
11313
+ assertHasLocation(glmr);
11314
+ return transferPolkadotXcm(_objectSpread2(_objectSpread2({}, input), {}, {
11315
+ overriddenAsset: [_objectSpread2(_objectSpread2({}, createAsset(version, FEE_AMOUNT, glmr.location)), {}, {
11316
+ isFeeAsset: true
11317
+ }), createAsset(version, assetInfo.amount, assetInfo.location)]
11318
+ }));
11283
11319
  }
11284
11320
  }, {
11285
11321
  key: "transferLocalNativeAsset",
11286
11322
  value: function transferLocalNativeAsset(options) {
11287
- return getChain('Hydration').transferLocalNativeAsset(options);
11323
+ var api = options.api,
11324
+ asset = options.assetInfo,
11325
+ address = options.address,
11326
+ isAmountAll = options.isAmountAll;
11327
+ if (isAmountAll) {
11328
+ return Promise.resolve(api.deserializeExtrinsics({
11329
+ module: 'Balances',
11330
+ method: 'transfer_all',
11331
+ params: {
11332
+ dest: address,
11333
+ keep_alive: false
11334
+ }
11335
+ }));
11336
+ }
11337
+ return Promise.resolve(api.deserializeExtrinsics({
11338
+ module: 'Balances',
11339
+ method: 'transfer_keep_alive',
11340
+ params: {
11341
+ dest: address,
11342
+ value: asset.amount
11343
+ }
11344
+ }));
11288
11345
  }
11289
11346
  }, {
11290
11347
  key: "transferLocalNonNativeAsset",
11291
11348
  value: function transferLocalNonNativeAsset(options) {
11292
- return getChain('Hydration').transferLocalNonNativeAsset(options);
11349
+ var api = options.api,
11350
+ asset = options.assetInfo,
11351
+ address = options.address,
11352
+ isAmountAll = options.isAmountAll;
11353
+ assertHasId(asset);
11354
+ var currencyId = Number(asset.assetId);
11355
+ if (isAmountAll) {
11356
+ return api.deserializeExtrinsics({
11357
+ module: 'Tokens',
11358
+ method: 'transfer_all',
11359
+ params: {
11360
+ dest: address,
11361
+ currency_id: currencyId,
11362
+ keep_alive: false
11363
+ }
11364
+ });
11365
+ }
11366
+ return api.deserializeExtrinsics({
11367
+ module: 'Tokens',
11368
+ method: 'transfer',
11369
+ params: {
11370
+ dest: address,
11371
+ currency_id: currencyId,
11372
+ amount: asset.amount
11373
+ }
11374
+ });
11293
11375
  }
11294
11376
  }]);
11295
11377
  }(Parachain);
11296
11378
 
11379
+ var Basilisk = /*#__PURE__*/function (_Hydration) {
11380
+ function Basilisk() {
11381
+ _classCallCheck(this, Basilisk);
11382
+ return _callSuper(this, Basilisk, ['Basilisk', 'basilisk', 'Kusama', Version.V5]);
11383
+ }
11384
+ _inherits(Basilisk, _Hydration);
11385
+ return _createClass(Basilisk, [{
11386
+ key: "transferPolkadotXCM",
11387
+ value: function transferPolkadotXCM(input) {
11388
+ return transferPolkadotXcm(input);
11389
+ }
11390
+ }]);
11391
+ }(Hydration);
11392
+
11297
11393
  var BifrostPolkadot = /*#__PURE__*/function (_Parachain) {
11298
11394
  function BifrostPolkadot() {
11299
11395
  var chain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'BifrostPolkadot';
@@ -11334,13 +11430,6 @@ var BifrostPolkadot = /*#__PURE__*/function (_Parachain) {
11334
11430
  Token2: id
11335
11431
  };
11336
11432
  }
11337
- }, {
11338
- key: "transferXTokens",
11339
- value: function transferXTokens$1(input) {
11340
- var asset = input.asset;
11341
- var currencySelection = this.getCustomCurrencyId(asset);
11342
- return transferXTokens(input, currencySelection);
11343
- }
11344
11433
  }, {
11345
11434
  key: "transferPolkadotXCM",
11346
11435
  value: function transferPolkadotXCM(options) {
@@ -11348,17 +11437,7 @@ var BifrostPolkadot = /*#__PURE__*/function (_Parachain) {
11348
11437
  if (destination === 'Ethereum') {
11349
11438
  return this.transferToEthereum(options);
11350
11439
  }
11351
- return transferPolkadotXcm(options, 'transfer_assets', 'Unlimited');
11352
- }
11353
- }, {
11354
- key: "canUseXTokens",
11355
- value: function canUseXTokens(_ref) {
11356
- var assetInfo = _ref.assetInfo,
11357
- destination = _ref.to;
11358
- var isEthAsset = assetInfo.location && findAssetInfoByLoc(getOtherAssets('Ethereum'), assetInfo.location);
11359
- if (isEthAsset) return false;
11360
- if (destination === 'Ethereum') return false;
11361
- return assetInfo.symbol !== 'WETH' && assetInfo.symbol !== 'DOT' || destination !== 'AssetHubPolkadot';
11440
+ return transferPolkadotXcm(options);
11362
11441
  }
11363
11442
  }, {
11364
11443
  key: "transferLocalNonNativeAsset",
@@ -11426,15 +11505,7 @@ var BridgeHubKusama = /*#__PURE__*/function (_Parachain) {
11426
11505
  if (scenario === 'ParaToPara') {
11427
11506
  throw new ScenarioNotSupportedError('Unable to use bridge hub for transfers to other Parachains. Please move your currency to AssetHub to transfer to other Parachains.');
11428
11507
  }
11429
- var method = 'limited_teleport_assets';
11430
- return transferPolkadotXcm(input, method, 'Unlimited');
11431
- }
11432
- }, {
11433
- key: "getRelayToParaOverrides",
11434
- value: function getRelayToParaOverrides() {
11435
- return {
11436
- transferType: 'teleport'
11437
- };
11508
+ return transferPolkadotXcm(input);
11438
11509
  }
11439
11510
  }]);
11440
11511
  }(Parachain);
@@ -11457,14 +11528,7 @@ var BridgeHubPolkadot = /*#__PURE__*/function (_Parachain) {
11457
11528
  if (scenario === 'ParaToPara' && !(destChain !== null && destChain !== void 0 && destChain.startsWith('AssetHub'))) {
11458
11529
  throw new ScenarioNotSupportedError("Unable to use ".concat(this.chain, " for transfers to other Parachains."));
11459
11530
  }
11460
- return transferPolkadotXcm(input, 'limited_teleport_assets', 'Unlimited');
11461
- }
11462
- }, {
11463
- key: "getRelayToParaOverrides",
11464
- value: function getRelayToParaOverrides() {
11465
- return {
11466
- transferType: 'teleport'
11467
- };
11531
+ return transferPolkadotXcm(input);
11468
11532
  }
11469
11533
  }]);
11470
11534
  }(Parachain);
@@ -11562,14 +11626,7 @@ var Collectives = /*#__PURE__*/function (_Parachain) {
11562
11626
  if (scenario === 'ParaToPara' && !(destChain !== null && destChain !== void 0 && destChain.startsWith('AssetHub'))) {
11563
11627
  throw new ScenarioNotSupportedError("Unable to use ".concat(this.chain, " for transfers to other Parachains."));
11564
11628
  }
11565
- return transferPolkadotXcm(input, 'limited_teleport_assets', 'Unlimited');
11566
- }
11567
- }, {
11568
- key: "getRelayToParaOverrides",
11569
- value: function getRelayToParaOverrides() {
11570
- return {
11571
- transferType: 'teleport'
11572
- };
11629
+ return transferPolkadotXcm(input);
11573
11630
  }
11574
11631
  }]);
11575
11632
  }(Parachain);
@@ -11599,14 +11656,7 @@ var CoretimeKusama = /*#__PURE__*/function (_Parachain) {
11599
11656
  scenario: scenario
11600
11657
  });
11601
11658
  }
11602
- return transferPolkadotXcm(input, 'limited_teleport_assets', 'Unlimited');
11603
- }
11604
- }, {
11605
- key: "getRelayToParaOverrides",
11606
- value: function getRelayToParaOverrides() {
11607
- return {
11608
- transferType: 'teleport'
11609
- };
11659
+ return transferPolkadotXcm(input);
11610
11660
  }
11611
11661
  }]);
11612
11662
  }(Parachain);
@@ -11631,20 +11681,13 @@ var CoretimePolkadot = /*#__PURE__*/function (_Parachain) {
11631
11681
  scenario: scenario
11632
11682
  });
11633
11683
  }
11634
- return transferPolkadotXcm(input, 'limited_teleport_assets', 'Unlimited');
11684
+ return transferPolkadotXcm(input);
11635
11685
  }
11636
11686
  }, {
11637
11687
  key: "canReceiveFrom",
11638
11688
  value: function canReceiveFrom(origin) {
11639
11689
  return origin !== 'Hydration' && origin !== 'Moonbeam';
11640
11690
  }
11641
- }, {
11642
- key: "getRelayToParaOverrides",
11643
- value: function getRelayToParaOverrides() {
11644
- return {
11645
- transferType: 'teleport'
11646
- };
11647
- }
11648
11691
  }]);
11649
11692
  }(Parachain);
11650
11693
 
@@ -11675,9 +11718,7 @@ var Crab = /*#__PURE__*/function (_Parachain) {
11675
11718
  return _createClass(Crab, [{
11676
11719
  key: "transferPolkadotXCM",
11677
11720
  value: function transferPolkadotXCM(input) {
11678
- if (input.scenario === 'ParaToPara') {
11679
- return transferPolkadotXcm(input, 'limited_reserve_transfer_assets', 'Unlimited');
11680
- }
11721
+ if (input.scenario === 'ParaToPara') return transferPolkadotXcm(input);
11681
11722
  throw new ScenarioNotSupportedError({
11682
11723
  chain: this.chain,
11683
11724
  scenario: input.scenario
@@ -11708,9 +11749,7 @@ var Crust = /*#__PURE__*/function (_Parachain) {
11708
11749
  return _createClass(Crust, [{
11709
11750
  key: "getCurrencySelection",
11710
11751
  value: function getCurrencySelection(asset) {
11711
- if (asset.isNative) {
11712
- return 'SelfReserve';
11713
- }
11752
+ if (asset.isNative) return 'SelfReserve';
11714
11753
  assertHasId(asset);
11715
11754
  return {
11716
11755
  OtherReserve: BigInt(asset.assetId)
@@ -11843,7 +11882,7 @@ var Darwinia = /*#__PURE__*/function (_Parachain) {
11843
11882
  scenario: scenario
11844
11883
  });
11845
11884
  }
11846
- return transferPolkadotXcm(input, 'limited_reserve_transfer_assets', 'Unlimited');
11885
+ return transferPolkadotXcm(input);
11847
11886
  }
11848
11887
  }, {
11849
11888
  key: "transferLocalNonNativeAsset",
@@ -11888,23 +11927,14 @@ var Encointer = /*#__PURE__*/function (_Parachain) {
11888
11927
  key: "transferPolkadotXCM",
11889
11928
  value: function transferPolkadotXCM(input) {
11890
11929
  var destChain = input.destChain;
11891
- // NO PARA TO PARA SCENARIOS ON SUBSCAN
11892
- // TESTED https://encointer.subscan.io/xcm_message/kusama-418501e86e947b16c4e4e9040694017e64f9b162
11893
11930
  if (input.scenario === 'ParaToRelay' || destChain && isTrustedChain(destChain)) {
11894
- return transferPolkadotXcm(input, 'limited_teleport_assets', 'Unlimited');
11931
+ return transferPolkadotXcm(input);
11895
11932
  }
11896
11933
  throw new ScenarioNotSupportedError({
11897
11934
  chain: this.chain,
11898
11935
  scenario: input.scenario
11899
11936
  });
11900
11937
  }
11901
- }, {
11902
- key: "getRelayToParaOverrides",
11903
- value: function getRelayToParaOverrides() {
11904
- return {
11905
- transferType: 'teleport'
11906
- };
11907
- }
11908
11938
  }]);
11909
11939
  }(Parachain);
11910
11940
 
@@ -11928,7 +11958,7 @@ var EnergyWebX = /*#__PURE__*/function (_Parachain) {
11928
11958
  scenario: scenario
11929
11959
  });
11930
11960
  }
11931
- return transferPolkadotXcm(input, 'limited_reserve_transfer_assets', 'Unlimited');
11961
+ return transferPolkadotXcm(input, 'reserve_transfer_assets');
11932
11962
  }
11933
11963
  }, {
11934
11964
  key: "transferRelayToPara",
@@ -12001,7 +12031,7 @@ var Heima = /*#__PURE__*/function (_Parachain) {
12001
12031
  if (asset.symbol !== this.getNativeAssetSymbol()) {
12002
12032
  throw new InvalidCurrencyError("Asset ".concat(asset.symbol, " is not supported by chain ").concat(this.chain, "."));
12003
12033
  }
12004
- return transferPolkadotXcm(input, 'limited_reserve_transfer_assets', 'Unlimited');
12034
+ return transferPolkadotXcm(input);
12005
12035
  }
12006
12036
  }]);
12007
12037
  }(Parachain);
@@ -12015,166 +12045,6 @@ var HeimaPaseo = /*#__PURE__*/function (_Heima) {
12015
12045
  return _createClass(HeimaPaseo);
12016
12046
  }(Heima);
12017
12047
 
12018
- var Hydration = /*#__PURE__*/function (_Parachain) {
12019
- function Hydration() {
12020
- var chain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Hydration';
12021
- var info = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'hydradx';
12022
- var ecosystem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Polkadot';
12023
- var version = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Version.V4;
12024
- _classCallCheck(this, Hydration);
12025
- return _callSuper(this, Hydration, [chain, info, ecosystem, version]);
12026
- }
12027
- _inherits(Hydration, _Parachain);
12028
- return _createClass(Hydration, [{
12029
- key: "transferPolkadotXCM",
12030
- value: function () {
12031
- var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(input) {
12032
- var api, destination, feeAsset, asset, overriddenAsset, isNativeAsset, isNativeFeeAsset, _t, _t2;
12033
- return _regenerator().w(function (_context) {
12034
- while (1) switch (_context.n) {
12035
- case 0:
12036
- api = input.api, destination = input.destination, feeAsset = input.feeAssetInfo, asset = input.assetInfo, overriddenAsset = input.overriddenAsset;
12037
- if (!(destination === 'Ethereum')) {
12038
- _context.n = 1;
12039
- break;
12040
- }
12041
- return _context.a(2, this.transferToEthereum(input));
12042
- case 1:
12043
- if (!feeAsset) {
12044
- _context.n = 4;
12045
- break;
12046
- }
12047
- if (!overriddenAsset) {
12048
- _context.n = 2;
12049
- break;
12050
- }
12051
- throw new InvalidCurrencyError('Cannot use overridden assets with XCM execute');
12052
- case 2:
12053
- isNativeAsset = isSymbolMatch(asset.symbol, this.getNativeAssetSymbol());
12054
- isNativeFeeAsset = isSymbolMatch(feeAsset.symbol, this.getNativeAssetSymbol());
12055
- if (!(!isNativeAsset || !isNativeFeeAsset)) {
12056
- _context.n = 4;
12057
- break;
12058
- }
12059
- _t = api;
12060
- _context.n = 3;
12061
- return handleExecuteTransfer(this.chain, input);
12062
- case 3:
12063
- return _context.a(2, _t.deserializeExtrinsics.call(_t, _context.v));
12064
- case 4:
12065
- _t2 = api;
12066
- _context.n = 5;
12067
- return createTypeAndThenCall(this.chain, input);
12068
- case 5:
12069
- return _context.a(2, _t2.deserializeExtrinsics.call(_t2, _context.v));
12070
- }
12071
- }, _callee, this);
12072
- }));
12073
- function transferPolkadotXCM(_x) {
12074
- return _transferPolkadotXCM.apply(this, arguments);
12075
- }
12076
- return transferPolkadotXCM;
12077
- }()
12078
- }, {
12079
- key: "transferMoonbeamWhAsset",
12080
- value: function transferMoonbeamWhAsset(input) {
12081
- var asset = input.asset,
12082
- version = input.version;
12083
- assertHasLocation(asset);
12084
- var glmr = findAssetInfoOrThrow(this.chain, {
12085
- symbol: getNativeAssetSymbol('Moonbeam')
12086
- }, null);
12087
- var FEE_AMOUNT = 80000000000000000n; // 0.08 GLMR
12088
- assertHasLocation(glmr);
12089
- return transferXTokens(_objectSpread2(_objectSpread2({}, input), {}, {
12090
- overriddenAsset: [_objectSpread2(_objectSpread2({}, createAsset(version, FEE_AMOUNT, glmr.location)), {}, {
12091
- isFeeAsset: true
12092
- }), createAsset(version, asset.amount, asset.location)]
12093
- }), Number(asset.assetId));
12094
- }
12095
- }, {
12096
- key: "transferXTokens",
12097
- value: function transferXTokens$1(input) {
12098
- var asset = input.asset,
12099
- destination = input.destination;
12100
- var isMoonbeamWhAsset = asset.location && hasJunction(asset.location, 'Parachain', getParaId('Moonbeam')) && hasJunction(asset.location, 'PalletInstance', 110);
12101
- if (isMoonbeamWhAsset && destination === 'Moonbeam') {
12102
- return this.transferMoonbeamWhAsset(input);
12103
- }
12104
- assertHasId(asset);
12105
- return transferXTokens(input, Number(asset.assetId));
12106
- }
12107
- }, {
12108
- key: "canUseXTokens",
12109
- value: function canUseXTokens(options) {
12110
- var destination = options.to,
12111
- assetInfo = options.assetInfo,
12112
- feeAsset = options.feeAsset;
12113
- var baseCanUseXTokens = _superPropGet(Hydration, "canUseXTokens", this, 3)([options]);
12114
- var requiresTypeThen = AH_REQUIRES_FEE_ASSET_LOCS.some(function (loc) {
12115
- return deepEqual(loc, assetInfo.location);
12116
- });
12117
- return destination !== 'Ethereum' && !(destination === 'AssetHubPolkadot' && assetInfo.symbol === 'DOT') && baseCanUseXTokens && !feeAsset && !requiresTypeThen;
12118
- }
12119
- }, {
12120
- key: "transferLocalNativeAsset",
12121
- value: function transferLocalNativeAsset(options) {
12122
- var api = options.api,
12123
- asset = options.assetInfo,
12124
- address = options.address,
12125
- isAmountAll = options.isAmountAll;
12126
- if (isAmountAll) {
12127
- return Promise.resolve(api.deserializeExtrinsics({
12128
- module: 'Balances',
12129
- method: 'transfer_all',
12130
- params: {
12131
- dest: address,
12132
- keep_alive: false
12133
- }
12134
- }));
12135
- }
12136
- return Promise.resolve(api.deserializeExtrinsics({
12137
- module: 'Balances',
12138
- method: 'transfer_keep_alive',
12139
- params: {
12140
- dest: address,
12141
- value: asset.amount
12142
- }
12143
- }));
12144
- }
12145
- }, {
12146
- key: "transferLocalNonNativeAsset",
12147
- value: function transferLocalNonNativeAsset(options) {
12148
- var api = options.api,
12149
- asset = options.assetInfo,
12150
- address = options.address,
12151
- isAmountAll = options.isAmountAll;
12152
- assertHasId(asset);
12153
- var currencyId = Number(asset.assetId);
12154
- if (isAmountAll) {
12155
- return api.deserializeExtrinsics({
12156
- module: 'Tokens',
12157
- method: 'transfer_all',
12158
- params: {
12159
- dest: address,
12160
- currency_id: currencyId,
12161
- keep_alive: false
12162
- }
12163
- });
12164
- }
12165
- return api.deserializeExtrinsics({
12166
- module: 'Tokens',
12167
- method: 'transfer',
12168
- params: {
12169
- dest: address,
12170
- currency_id: currencyId,
12171
- amount: asset.amount
12172
- }
12173
- });
12174
- }
12175
- }]);
12176
- }(Parachain);
12177
-
12178
12048
  var HydrationPaseo = /*#__PURE__*/function (_Hydration) {
12179
12049
  function HydrationPaseo() {
12180
12050
  _classCallCheck(this, HydrationPaseo);
@@ -12257,49 +12127,41 @@ var Jamton = /*#__PURE__*/function (_Parachain) {
12257
12127
  return _createClass(Jamton, [{
12258
12128
  key: "getCustomCurrencyId",
12259
12129
  value: function getCustomCurrencyId(asset) {
12130
+ var assetId = Number(asset.assetId);
12260
12131
  return asset.isNative ? {
12261
- Native: Jamton.NATIVE_ASSET_IDS[asset.symbol]
12132
+ Native: assetId
12262
12133
  } : {
12263
- ForeignAsset: Number(asset.assetId)
12134
+ ForeignAsset: assetId
12264
12135
  };
12265
12136
  }
12266
12137
  }, {
12267
- key: "transferXTokens",
12268
- value: function transferXTokens$1(input) {
12269
- var asset = input.asset,
12138
+ key: "transferPolkadotXCM",
12139
+ value: function transferPolkadotXCM(input) {
12140
+ var assetInfo = input.assetInfo,
12270
12141
  scenario = input.scenario,
12271
12142
  destination = input.destination,
12272
12143
  version = input.version;
12273
- var currencySelection = this.getCustomCurrencyId(asset);
12274
- if (asset.isNative && asset.symbol in Jamton.NATIVE_ASSET_IDS) {
12275
- return transferXTokens(input, currencySelection);
12276
- }
12277
- assertHasId(asset);
12144
+ if (assetInfo.isNative) return transferPolkadotXcm(input);
12278
12145
  if (scenario === 'ParaToPara' && destination !== 'AssetHubPolkadot') {
12279
12146
  throw new ScenarioNotSupportedError("Transfer from ".concat(this.chain, " to ").concat(JSON.stringify(destination), " is not yet supported"));
12280
12147
  }
12281
- if (isSymbolMatch(asset.symbol, 'WUD')) {
12148
+ if (isSymbolMatch(assetInfo.symbol, 'WUD')) {
12282
12149
  var usdt = findAssetInfoOrThrow(this.chain, {
12283
12150
  symbol: 'USDt'
12284
12151
  }, null);
12285
- assertHasLocation(asset);
12152
+ assertHasLocation(assetInfo);
12286
12153
  assertHasLocation(usdt);
12287
12154
  var MIN_USDT_AMOUNT = 180000n; // 0.18 USDt
12288
- return transferXTokens(_objectSpread2(_objectSpread2({}, input), {}, {
12155
+ return transferPolkadotXcm(_objectSpread2(_objectSpread2({}, input), {}, {
12289
12156
  overriddenAsset: [_objectSpread2(_objectSpread2({}, createAsset(version, MIN_USDT_AMOUNT, usdt.location)), {}, {
12290
12157
  isFeeAsset: true
12291
- }), createAsset(version, asset.amount, asset.location)]
12292
- }), asset.assetId);
12158
+ }), createAsset(version, assetInfo.amount, assetInfo.location)]
12159
+ }));
12293
12160
  }
12294
- return transferXTokens(input, currencySelection);
12161
+ return transferPolkadotXcm(input);
12295
12162
  }
12296
12163
  }]);
12297
12164
  }(Parachain);
12298
- Jamton.NATIVE_ASSET_IDS = {
12299
- DOTON: 0,
12300
- stDOT: 1,
12301
- jamTON: 2
12302
- };
12303
12165
 
12304
12166
  var Karura = /*#__PURE__*/function (_Acala) {
12305
12167
  function Karura() {
@@ -12328,7 +12190,7 @@ var KiltSpiritnet = /*#__PURE__*/function (_Parachain) {
12328
12190
  if (scenario === 'ParaToPara' && asset.symbol !== this.getNativeAssetSymbol()) {
12329
12191
  throw new ScenarioNotSupportedError('KiltSpiritnet only supports native asset ParaToPara transfers');
12330
12192
  }
12331
- return transferPolkadotXcm(input, 'limited_reserve_transfer_assets', 'Unlimited');
12193
+ return transferPolkadotXcm(input);
12332
12194
  }
12333
12195
  }, {
12334
12196
  key: "transferRelayToPara",
@@ -12452,7 +12314,7 @@ var Laos = /*#__PURE__*/function (_Parachain) {
12452
12314
  if (destination === 'AssetHubPolkadot') {
12453
12315
  throw new TransferToAhNotSupported('Transfer from Laos to AssetHubPolkadot is not supported.');
12454
12316
  }
12455
- return transferPolkadotXcm(input, 'limited_reserve_transfer_assets', 'Unlimited');
12317
+ return transferPolkadotXcm(input);
12456
12318
  }
12457
12319
  }, {
12458
12320
  key: "transferRelayToPara",
@@ -12548,7 +12410,7 @@ var Moonbeam = /*#__PURE__*/function (_Parachain) {
12548
12410
  }
12549
12411
  return _context.a(2, this.transferToEthereum(options));
12550
12412
  case 1:
12551
- return _context.a(2, transferPolkadotXcm(options, 'transfer_assets', 'Unlimited'));
12413
+ return _context.a(2, transferPolkadotXcm(options));
12552
12414
  }
12553
12415
  }, _callee, this);
12554
12416
  }));
@@ -12580,7 +12442,7 @@ var Moonriver = /*#__PURE__*/function (_Parachain) {
12580
12442
  return _createClass(Moonriver, [{
12581
12443
  key: "transferPolkadotXCM",
12582
12444
  value: function transferPolkadotXCM(options) {
12583
- return transferPolkadotXcm(options, 'transfer_assets', 'Unlimited');
12445
+ return transferPolkadotXcm(options);
12584
12446
  }
12585
12447
  }, {
12586
12448
  key: "transferLocalNonNativeAsset",
@@ -12592,11 +12454,11 @@ var Moonriver = /*#__PURE__*/function (_Parachain) {
12592
12454
 
12593
12455
  var createTypeAndThenTransfer = /*#__PURE__*/function () {
12594
12456
  var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options, chain, version) {
12595
- var api, asset, senderAddress, address, destination, ethAsset, messageId, nativeMythAmount;
12457
+ var api, asset, senderAddress, address, ethAsset, messageId, nativeMythAmount, hopDestination;
12596
12458
  return _regenerator().w(function (_context) {
12597
12459
  while (1) switch (_context.n) {
12598
12460
  case 0:
12599
- api = options.api, asset = options.assetInfo, senderAddress = options.senderAddress, address = options.address, destination = options.destination;
12461
+ api = options.api, asset = options.assetInfo, senderAddress = options.senderAddress, address = options.address;
12600
12462
  ethAsset = findAssetInfoOrThrow('Ethereum', {
12601
12463
  symbol: asset.symbol
12602
12464
  }, null);
@@ -12612,11 +12474,12 @@ var createTypeAndThenTransfer = /*#__PURE__*/function () {
12612
12474
  return getMythosOriginFee(api);
12613
12475
  case 2:
12614
12476
  nativeMythAmount = _context.v;
12477
+ hopDestination = 'AssetHubPolkadot';
12615
12478
  return _context.a(2, {
12616
12479
  module: 'PolkadotXcm',
12617
12480
  method: 'transfer_assets_using_type_and_then',
12618
12481
  params: {
12619
- dest: createVersionedDestination(version, chain, destination, getParaId('AssetHubPolkadot')),
12482
+ dest: createVersionedDestination(version, chain, hopDestination, getParaId(hopDestination)),
12620
12483
  assets: _defineProperty({}, version, [createAsset(version, nativeMythAmount, {
12621
12484
  parents: Parents.ZERO,
12622
12485
  interior: 'Here'
@@ -12645,47 +12508,43 @@ var Mythos = /*#__PURE__*/function (_Parachain) {
12645
12508
  }
12646
12509
  _inherits(Mythos, _Parachain);
12647
12510
  return _createClass(Mythos, [{
12648
- key: "createTx",
12649
- value: function createTx(input) {
12650
- var scenario = input.scenario,
12651
- destination = input.destination;
12652
- if (scenario !== 'ParaToPara') {
12653
- throw new ScenarioNotSupportedError({
12654
- chain: this.chain,
12655
- scenario: scenario
12656
- });
12657
- }
12658
- return transferPolkadotXcm(input, destination === 'AssetHubPolkadot' ? 'limited_teleport_assets' : 'limited_reserve_transfer_assets', 'Unlimited');
12659
- }
12660
- }, {
12661
12511
  key: "transferPolkadotXCM",
12662
12512
  value: function () {
12663
12513
  var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(input) {
12664
- var api, destination, defaultTx, _t;
12514
+ var api, destination, scenario, defaultTx, _t;
12665
12515
  return _regenerator().w(function (_context2) {
12666
12516
  while (1) switch (_context2.n) {
12667
12517
  case 0:
12668
- api = input.api, destination = input.destination;
12669
- _context2.n = 1;
12670
- return this.createTx(input);
12518
+ api = input.api, destination = input.destination, scenario = input.scenario;
12519
+ if (!(scenario !== 'ParaToPara')) {
12520
+ _context2.n = 1;
12521
+ break;
12522
+ }
12523
+ throw new ScenarioNotSupportedError({
12524
+ chain: this.chain,
12525
+ scenario: scenario
12526
+ });
12671
12527
  case 1:
12528
+ _context2.n = 2;
12529
+ return transferPolkadotXcm(input);
12530
+ case 2:
12672
12531
  defaultTx = _context2.v;
12673
12532
  if (!(destination === 'AssetHubPolkadot')) {
12674
- _context2.n = 2;
12533
+ _context2.n = 3;
12675
12534
  break;
12676
12535
  }
12677
12536
  return _context2.a(2, handleToAhTeleport('Mythos', input, defaultTx));
12678
- case 2:
12537
+ case 3:
12679
12538
  if (!(destination == 'Ethereum')) {
12680
- _context2.n = 4;
12539
+ _context2.n = 5;
12681
12540
  break;
12682
12541
  }
12683
12542
  _t = api;
12684
- _context2.n = 3;
12543
+ _context2.n = 4;
12685
12544
  return createTypeAndThenTransfer(input, this.chain, this.version);
12686
- case 3:
12687
- return _context2.a(2, _t.deserializeExtrinsics.call(_t, _context2.v));
12688
12545
  case 4:
12546
+ return _context2.a(2, _t.deserializeExtrinsics.call(_t, _context2.v));
12547
+ case 5:
12689
12548
  return _context2.a(2, defaultTx);
12690
12549
  }
12691
12550
  }, _callee2, this);
@@ -12719,7 +12578,7 @@ var NeuroWeb = /*#__PURE__*/function (_Parachain) {
12719
12578
  return _createClass(NeuroWeb, [{
12720
12579
  key: "transferPolkadotXCM",
12721
12580
  value: function transferPolkadotXCM(input) {
12722
- return transferPolkadotXcm(input, 'limited_reserve_transfer_assets', 'Unlimited');
12581
+ return transferPolkadotXcm(input);
12723
12582
  }
12724
12583
  }, {
12725
12584
  key: "transferLocalNativeAsset",
@@ -12804,7 +12663,7 @@ var Nodle = /*#__PURE__*/function (_Parachain) {
12804
12663
  if (asset.symbol !== this.getNativeAssetSymbol()) {
12805
12664
  throw new InvalidCurrencyError("Asset ".concat(asset.symbol, " is not supported by chain ").concat(this.chain, "."));
12806
12665
  }
12807
- return transferPolkadotXcm(input, 'limited_reserve_transfer_assets', 'Unlimited');
12666
+ return transferPolkadotXcm(input);
12808
12667
  }
12809
12668
  }, {
12810
12669
  key: "transferRelayToPara",
@@ -12835,14 +12694,7 @@ var PeoplePolkadot = /*#__PURE__*/function (_Parachain) {
12835
12694
  if (scenario === 'ParaToPara' && !(destChain !== null && destChain !== void 0 && destChain.startsWith('AssetHub'))) {
12836
12695
  throw new ScenarioNotSupportedError("Unable to use ".concat(this.chain, " for transfers to other Parachains."));
12837
12696
  }
12838
- return transferPolkadotXcm(input, 'limited_teleport_assets', 'Unlimited');
12839
- }
12840
- }, {
12841
- key: "getRelayToParaOverrides",
12842
- value: function getRelayToParaOverrides() {
12843
- return {
12844
- transferType: 'teleport'
12845
- };
12697
+ return transferPolkadotXcm(input);
12846
12698
  }
12847
12699
  }]);
12848
12700
  }(Parachain);
@@ -12989,15 +12841,7 @@ var PeopleKusama = /*#__PURE__*/function (_Parachain) {
12989
12841
  scenario: scenario
12990
12842
  });
12991
12843
  }
12992
- var method = 'limited_teleport_assets';
12993
- return transferPolkadotXcm(input, method, 'Unlimited');
12994
- }
12995
- }, {
12996
- key: "getRelayToParaOverrides",
12997
- value: function getRelayToParaOverrides() {
12998
- return {
12999
- transferType: 'teleport'
13000
- };
12844
+ return transferPolkadotXcm(input);
13001
12845
  }
13002
12846
  }]);
13003
12847
  }(Parachain);
@@ -13125,18 +12969,17 @@ var Quartz = /*#__PURE__*/function (_Parachain) {
13125
12969
  }
13126
12970
  _inherits(Quartz, _Parachain);
13127
12971
  return _createClass(Quartz, [{
13128
- key: "transferXTokens",
13129
- value: function transferXTokens$1(input) {
13130
- var asset = input.asset;
13131
- if (asset.symbol === this.getNativeAssetSymbol()) {
13132
- return transferXTokens(input, Quartz.NATIVE_ASSET_ID);
13133
- }
13134
- assertHasId(asset);
13135
- return transferXTokens(input, Number(asset.assetId));
12972
+ key: "transferPolkadotXCM",
12973
+ value: function transferPolkadotXCM(input) {
12974
+ return transferPolkadotXcm(input);
12975
+ }
12976
+ }, {
12977
+ key: "isSendingTempDisabled",
12978
+ value: function isSendingTempDisabled(_options) {
12979
+ return true;
13136
12980
  }
13137
12981
  }]);
13138
12982
  }(Parachain);
13139
- Quartz.NATIVE_ASSET_ID = 0;
13140
12983
 
13141
12984
  var RobonomicsPolkadot = /*#__PURE__*/function (_Parachain) {
13142
12985
  function RobonomicsPolkadot() {
@@ -13197,45 +13040,14 @@ var RobonomicsPolkadot = /*#__PURE__*/function (_Parachain) {
13197
13040
  }]);
13198
13041
  }(Parachain);
13199
13042
 
13200
- var Shiden = /*#__PURE__*/function (_Parachain) {
13043
+ var Shiden = /*#__PURE__*/function (_Astar) {
13201
13044
  function Shiden() {
13202
13045
  _classCallCheck(this, Shiden);
13203
13046
  return _callSuper(this, Shiden, ['Shiden', 'shiden', 'Kusama', Version.V5]);
13204
13047
  }
13205
- _inherits(Shiden, _Parachain);
13206
- return _createClass(Shiden, [{
13207
- key: "transferPolkadotXCM",
13208
- value: function transferPolkadotXCM(input) {
13209
- // Same as Astar, works
13210
- // https://shiden.subscan.io/xcm_message/kusama-97eb47c25c781affa557f36dbd117d49f7e1ab4e
13211
- return getChain('Astar').transferPolkadotXCM(input);
13212
- }
13213
- }, {
13214
- key: "transferXTokens",
13215
- value: function transferXTokens(input) {
13216
- return getChain('Astar').transferXTokens(input);
13217
- }
13218
- }, {
13219
- key: "canUseXTokens",
13220
- value: function canUseXTokens(_ref) {
13221
- var assetInfo = _ref.assetInfo;
13222
- return assetInfo.symbol !== this.getNativeAssetSymbol();
13223
- }
13224
- }, {
13225
- key: "transferRelayToPara",
13226
- value: function transferRelayToPara() {
13227
- throw new ScenarioNotSupportedError({
13228
- chain: this.chain,
13229
- scenario: 'RelayToPara'
13230
- });
13231
- }
13232
- }, {
13233
- key: "transferLocalNonNativeAsset",
13234
- value: function transferLocalNonNativeAsset(options) {
13235
- return getChain('Astar').transferLocalNonNativeAsset(options);
13236
- }
13237
- }]);
13238
- }(Parachain);
13048
+ _inherits(Shiden, _Astar);
13049
+ return _createClass(Shiden);
13050
+ }(Astar);
13239
13051
 
13240
13052
  var Unique = /*#__PURE__*/function (_Parachain) {
13241
13053
  function Unique() {
@@ -13244,14 +13056,9 @@ var Unique = /*#__PURE__*/function (_Parachain) {
13244
13056
  }
13245
13057
  _inherits(Unique, _Parachain);
13246
13058
  return _createClass(Unique, [{
13247
- key: "transferXTokens",
13248
- value: function transferXTokens$1(input) {
13249
- var asset = input.asset;
13250
- if (asset.symbol === this.getNativeAssetSymbol()) {
13251
- return transferXTokens(input, Unique.NATIVE_ASSET_ID);
13252
- }
13253
- assertHasId(asset);
13254
- return transferXTokens(input, Number(asset.assetId));
13059
+ key: "transferPolkadotXCM",
13060
+ value: function transferPolkadotXCM(input) {
13061
+ return transferPolkadotXcm(input);
13255
13062
  }
13256
13063
  }, {
13257
13064
  key: "transferLocalNonNativeAsset",
@@ -13298,7 +13105,6 @@ var Unique = /*#__PURE__*/function (_Parachain) {
13298
13105
  }()
13299
13106
  }]);
13300
13107
  }(Parachain);
13301
- Unique.NATIVE_ASSET_ID = 0;
13302
13108
 
13303
13109
  var Xode = /*#__PURE__*/function (_Parachain) {
13304
13110
  function Xode() {
@@ -13310,13 +13116,11 @@ var Xode = /*#__PURE__*/function (_Parachain) {
13310
13116
  key: "transferPolkadotXCM",
13311
13117
  value: function transferPolkadotXCM(options) {
13312
13118
  var destChain = options.destChain,
13313
- assetInfo = options.assetInfo,
13314
13119
  scenario = options.scenario;
13315
13120
  if (destChain !== 'AssetHubPolkadot' && scenario === 'ParaToPara') {
13316
13121
  throw new ScenarioNotSupportedError('Xode chain only supports transfers to / from AssetHubPolkadot');
13317
13122
  }
13318
- assertHasLocation(assetInfo);
13319
- return transferPolkadotXcm(options, 'limited_reserve_transfer_assets', 'Unlimited');
13123
+ return transferPolkadotXcm(options);
13320
13124
  }
13321
13125
  }, {
13322
13126
  key: "canReceiveFrom",
@@ -13346,11 +13150,9 @@ var Zeitgeist = /*#__PURE__*/function (_Parachain) {
13346
13150
  };
13347
13151
  }
13348
13152
  }, {
13349
- key: "transferXTokens",
13350
- value: function transferXTokens$1(input) {
13351
- var asset = input.asset;
13352
- var currencySelection = this.getCustomCurrencyId(asset);
13353
- return transferXTokens(input, currencySelection);
13153
+ key: "transferPolkadotXCM",
13154
+ value: function transferPolkadotXCM(input) {
13155
+ return transferPolkadotXcm(input);
13354
13156
  }
13355
13157
  }, {
13356
13158
  key: "canReceiveFrom",
@@ -13470,15 +13272,11 @@ var chains = function chains() {
13470
13272
 
13471
13273
  var MIN_FEE = 1000n;
13472
13274
  var DEFAULT_FEE_ASSET = 0;
13473
- var ETH_PARA_ID = 1;
13474
- var ETH_CHAIN_ID = BigInt(ETH_PARA_ID);
13475
- var ETHEREUM_JUNCTION = {
13476
- GlobalConsensus: {
13477
- Ethereum: {
13478
- chainId: ETH_CHAIN_ID
13479
- }
13480
- }
13481
- };
13275
+ var RELAYCHAIN_PARA_ID = 0;
13276
+ var ETH_MAINNET_PARA_ID = 1;
13277
+ var ETH_MAINNET_CHAIN_ID = BigInt(ETH_MAINNET_PARA_ID);
13278
+ var ETH_TESTNET_PARA_ID = 11155111;
13279
+ var ETH_TESTNET_CHAIN_ID = BigInt(ETH_TESTNET_PARA_ID);
13482
13280
  var DEFAULT_FEE = 'Unlimited';
13483
13281
  var DOT_LOCATION = {
13484
13282
  parents: Parents.ONE,
@@ -13490,7 +13288,7 @@ var RELAY_LOCATION = {
13490
13288
  Here: null
13491
13289
  }
13492
13290
  };
13493
- var AH_REQUIRES_FEE_ASSET_LOCS = [{
13291
+ [{
13494
13292
  parents: Parents.ONE,
13495
13293
  interior: {
13496
13294
  X3: [{
@@ -13535,7 +13333,7 @@ var getChain = function getChain(chain) {
13535
13333
  };
13536
13334
 
13537
13335
  var getChainVersion = function getChainVersion(chain) {
13538
- if (isRelayChain(chain) || chain === 'Ethereum') {
13336
+ if (isRelayChain(chain) || isExternalChain(chain)) {
13539
13337
  return Version.V5;
13540
13338
  }
13541
13339
  return getChain(chain).version;
@@ -14279,15 +14077,21 @@ var ERC20_ABI$1 = [{
14279
14077
  }]
14280
14078
  }];
14281
14079
  var ETHEREUM_RPC_URL = 'https://ethereum.publicnode.com/';
14080
+ var ETHEREUM_TESTNET_RPC_URL = 'https://ethereum-sepolia-rpc.publicnode.com/';
14081
+ var resolveClientValues = function resolveClientValues(chain) {
14082
+ if (chain === 'Ethereum') return [mainnet, ETHEREUM_RPC_URL];
14083
+ return [sepolia, ETHEREUM_TESTNET_RPC_URL];
14084
+ };
14282
14085
  var getEthErc20Balance = /*#__PURE__*/function () {
14283
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(asset, address) {
14284
- var client;
14086
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(chain, asset, address) {
14087
+ var _resolveClientValues, _resolveClientValues2, config, url, client;
14285
14088
  return _regenerator().w(function (_context) {
14286
14089
  while (1) switch (_context.n) {
14287
14090
  case 0:
14091
+ _resolveClientValues = resolveClientValues(chain), _resolveClientValues2 = _slicedToArray(_resolveClientValues, 2), config = _resolveClientValues2[0], url = _resolveClientValues2[1];
14288
14092
  client = createPublicClient({
14289
- chain: mainnet,
14290
- transport: http(ETHEREUM_RPC_URL)
14093
+ chain: config,
14094
+ transport: http(url)
14291
14095
  });
14292
14096
  assertHasId(asset);
14293
14097
  if (!(asset.symbol === getNativeAssetSymbol('Ethereum'))) {
@@ -14313,7 +14117,7 @@ var getEthErc20Balance = /*#__PURE__*/function () {
14313
14117
  }
14314
14118
  }, _callee);
14315
14119
  }));
14316
- return function getEthErc20Balance(_x, _x2) {
14120
+ return function getEthErc20Balance(_x, _x2, _x3) {
14317
14121
  return _ref.apply(this, arguments);
14318
14122
  };
14319
14123
  }();
@@ -14329,11 +14133,11 @@ var getAssetBalanceInternal = /*#__PURE__*/function () {
14329
14133
  _context.n = 1;
14330
14134
  return api.init(chain);
14331
14135
  case 1:
14332
- if (!(chain === 'Ethereum')) {
14136
+ if (!isExternalChain(chain)) {
14333
14137
  _context.n = 2;
14334
14138
  break;
14335
14139
  }
14336
- return _context.a(2, getEthErc20Balance(asset, address));
14140
+ return _context.a(2, getEthErc20Balance(chain, asset, address));
14337
14141
  case 2:
14338
14142
  if (!isRelayChain(chain)) {
14339
14143
  _context.n = 3;
@@ -14438,4 +14242,4 @@ var getMoonbeamErc20Balance = /*#__PURE__*/function () {
14438
14242
  };
14439
14243
  }();
14440
14244
 
14441
- export { AmountTooLowError, AssetClaimBuilder, BaseAssetsPallet, BatchMode, BatchValidationError, BridgeHaltedError, Builder, DRY_RUN_CLIENT_TIMEOUT_MS, DryRunFailedError, ETHEREUM_JUNCTION, ETH_CHAIN_ID, FeatureTemporarilyDisabledError, GeneralBuilder, InvalidAddressError, MissingChainApiError, MissingParameterError, NoXCMSupportImplementedError, NumberFormatError, OverrideConflictError, PolkadotXcmError, PolkadotXcmExecutionError, ProviderUnavailableError, RELAY_LOCATION, RoutingResolutionError, RuntimeApiUnavailableError, ScenarioNotSupportedError, TX_CLIENT_TIMEOUT_MS, TransferToAhNotSupported, UnableToComputeError, UnsupportedOperationError, XTokensError, abstractDecimals, addEthereumBridgeFees, addXcmVersionHeader, applyDecimalAbstraction, assertAddressIsString, assertDerivationPath, assertHasId, assertHasLocation, assertSenderAddress, assertToIsString, blake2b256, blake2b512, calcPreviewMintAmount, claimAssets, computeFeeFromDryRun, computeFeeFromDryRunPjs, computeOverridenAmount, constructTypeAndThenCall, convertSs58, createAsset, createAssetsFilter, createBaseExecuteXcm, createBeneficiaryLocXTokens, createBeneficiaryLocation, createChainClient, createClientCache, createClientPoolHelpers, createDirectExecuteXcm, createExecuteCall, createExecuteExchangeXcm, createId, createTx, createTypeAndThenCall, createTypeThenAutoReserve, createVersionedAssets, createX1Payload, deriveAccountId, dryRun, dryRunInternal, dryRunOrigin, encodeSs58, formatAssetIdToERC20, formatUnits, getAssetBalanceInternal, getAssetReserveChain, getBalance, getBalanceInternal, getBridgeStatus, getChain, getChainConfig, getChainLocation, getChainProviders, getChainVersion, getEthErc20Balance, getEvmPrivateKeyHex, getFailureInfo$1 as getFailureInfo, getMinTransferableAmount, getMinTransferableAmountInternal, getMoonbeamErc20Balance, getOriginXcmFee, getOriginXcmFeeEstimate, getOriginXcmFeeInternal, getParaEthTransferFees, getParaId, getRelayChainOf, getTChain, getTransferInfo, getTransferableAmount, getTransferableAmountInternal, getXcmFee, getXcmFeeEstimate, getXcmFeeInternal, getXcmFeeOnce, handleExecuteTransfer, handleSwapExecuteTransfer, handleToAhTeleport, isConfig, keyFromWs, localizeLocation, maybeOverrideAsset, maybeOverrideAssets, normalizeAmount, overrideTxAmount, padFee, padValueBy, parseUnits, resolveDestChain, resolveModuleError, resolveParaId, reverseTransformLocation, send, sortAssets, throwUnsupportedCurrency, transferMoonbeamEvm, transferMoonbeamToEth, transferRelayToPara, traverseXcmHops, validateAddress, validateAssetSpecifiers, validateCurrency, validateDestination, verifyEdOnDestination, wrapTxBypass };
14245
+ export { AmountTooLowError, AssetClaimBuilder, BaseAssetsPallet, BatchMode, BatchValidationError, BridgeHaltedError, Builder, DRY_RUN_CLIENT_TIMEOUT_MS, DryRunFailedError, ETH_MAINNET_CHAIN_ID, ETH_TESTNET_CHAIN_ID, FeatureTemporarilyDisabledError, GeneralBuilder, InvalidAddressError, MissingChainApiError, MissingParameterError, NoXCMSupportImplementedError, NumberFormatError, OverrideConflictError, PolkadotXcmError, PolkadotXcmExecutionError, ProviderUnavailableError, RELAY_LOCATION, RoutingResolutionError, RuntimeApiUnavailableError, ScenarioNotSupportedError, TX_CLIENT_TIMEOUT_MS, TransferToAhNotSupported, TypeAndThenUnavailableError, UnableToComputeError, UnsupportedOperationError, XTokensError, abstractDecimals, addEthereumBridgeFees, addXcmVersionHeader, applyDecimalAbstraction, assertAddressIsString, assertDerivationPath, assertHasId, assertHasLocation, assertSenderAddress, assertToIsString, blake2b256, blake2b512, calcPreviewMintAmount, claimAssets, computeFeeFromDryRun, computeFeeFromDryRunPjs, computeOverridenAmount, constructTypeAndThenCall, convertSs58, createAsset, createAssetsFilter, createBaseExecuteXcm, createBeneficiaryLocXTokens, createBeneficiaryLocation, createChainClient, createClientCache, createClientPoolHelpers, createDirectExecuteXcm, createExecuteCall, createExecuteExchangeXcm, createId, createTx, createTypeAndThenCall, createTypeThenAutoReserve, createVersionedAssets, createX1Payload, deriveAccountId, dryRun, dryRunInternal, dryRunOrigin, encodeSs58, formatAssetIdToERC20, formatUnits, getAssetBalanceInternal, getAssetReserveChain, getBalance, getBalanceInternal, getBridgeStatus, getChain, getChainConfig, getChainLocation, getChainProviders, getChainVersion, getEthErc20Balance, getEvmPrivateKeyHex, getFailureInfo$1 as getFailureInfo, getMinTransferableAmount, getMinTransferableAmountInternal, getMoonbeamErc20Balance, getOriginXcmFee, getOriginXcmFeeEstimate, getOriginXcmFeeInternal, getParaEthTransferFees, getParaId, getRelayChainOf, getTChain, getTransferInfo, getTransferableAmount, getTransferableAmountInternal, getXcmFee, getXcmFeeEstimate, getXcmFeeInternal, getXcmFeeOnce, handleExecuteTransfer, handleSwapExecuteTransfer, handleToAhTeleport, isConfig, keyFromWs, localizeLocation, maybeOverrideAsset, maybeOverrideAssets, normalizeAmount, overrideTxAmount, padFee, padValueBy, parseUnits, resolveDestChain, resolveModuleError, resolveParaId, reverseTransformLocation, send, sortAssets, throwUnsupportedCurrency, transferMoonbeamEvm, transferMoonbeamToEth, transferRelayToPara, traverseXcmHops, validateAddress, validateAssetSpecifiers, validateCurrency, validateDestination, verifyEdOnDestination, wrapTxBypass };