@paraspell/sdk-core 8.6.1 → 8.6.2

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.
package/dist/index.cjs CHANGED
@@ -716,6 +716,8 @@ var NODES_WITH_RELAY_CHAINS_DOT_KSM = [].concat(NODE_NAMES_DOT_KSM, ['Polkadot',
716
716
  * Supported XCM pallets.
717
717
  */
718
718
  var SUPPORTED_PALLETS = ['XTokens', 'OrmlXTokens', 'PolkadotXcm', 'RelayerXcm', 'XTransfer', 'XcmPallet'];
719
+ var SYSTEM_NODES_POLKADOT = ['PeoplePolkadot', 'CoretimePolkadot', 'Collectives'];
720
+ var SYSTEM_NODES_KUSAMA = ['PeopleKusama', 'CoretimeKusama'];
719
721
 
720
722
  /**
721
723
  * Error thrown when multiple assets with the same symbol are found.
@@ -2362,7 +2364,10 @@ var constructRelayToParaParameters = function constructRelayToParaParameters(_re
2362
2364
  return _objectSpread2({
2363
2365
  dest: createPolkadotXcmHeader('RelayToPara', version, destination, paraId),
2364
2366
  beneficiary: generateAddressPayload(api, 'RelayToPara', null, address, version, paraId),
2365
- assets: createCurrencySpec(asset.amount, version, exports.Parents.ZERO),
2367
+ assets: createVersionedMultiAssets(version, asset.amount, {
2368
+ parents: exports.Parents.ZERO,
2369
+ interior: 'Here'
2370
+ }),
2366
2371
  fee_asset_item: DEFAULT_FEE_ASSET
2367
2372
  }, includeFee && {
2368
2373
  weight_limit: 'Unlimited'
@@ -2375,21 +2380,6 @@ var isTMultiLocation = function isTMultiLocation(value) {
2375
2380
  var isTMultiAsset = function isTMultiAsset(value) {
2376
2381
  return _typeof(value) === 'object' && value !== null && 'id' in value && 'fun' in value;
2377
2382
  };
2378
- var createBridgeCurrencySpec = function createBridgeCurrencySpec(amount, ecosystem) {
2379
- return _defineProperty({}, exports.Version.V4, [{
2380
- id: {
2381
- parents: exports.Parents.TWO,
2382
- interior: {
2383
- X1: [{
2384
- GlobalConsensus: ecosystem
2385
- }]
2386
- }
2387
- },
2388
- fun: {
2389
- Fungible: amount.toString()
2390
- }
2391
- }]);
2392
- };
2393
2383
  var createMultiAsset = function createMultiAsset(version, amount, multiLocation) {
2394
2384
  if (version === exports.Version.V4) {
2395
2385
  return {
@@ -2411,22 +2401,27 @@ var createMultiAsset = function createMultiAsset(version, amount, multiLocation)
2411
2401
  var addXcmVersionHeader = function addXcmVersionHeader(obj, version) {
2412
2402
  return _defineProperty({}, version, obj);
2413
2403
  };
2414
- var getCurrency = function getCurrency(amount, version, parents, overriddenCurrency) {
2415
- var interior = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'Here';
2404
+ var extractVersionFromHeader = function extractVersionFromHeader(versionHeader) {
2405
+ var keys = Object.keys(versionHeader);
2406
+ if (keys.length !== 1) {
2407
+ throw new Error('Invalid version header: expected exactly one key.');
2408
+ }
2409
+ var version = keys[0];
2410
+ var value = versionHeader[version];
2411
+ if (value === undefined) {
2412
+ throw new Error('Invalid version header: value is undefined.');
2413
+ }
2414
+ return [version, value];
2415
+ };
2416
+ var maybeOverrideMultiAssets = function maybeOverrideMultiAssets(version, amount, multiAssets, overriddenCurrency) {
2416
2417
  if (!overriddenCurrency) {
2417
- return [createMultiAsset(version, amount, {
2418
- parents: parents,
2419
- interior: interior
2420
- })];
2418
+ return multiAssets;
2421
2419
  }
2422
- return isTMultiLocation(overriddenCurrency) ? [createMultiAsset(version, amount, overriddenCurrency)] :
2423
- // It must be TMultiAsset if not TMultiLocation
2424
- overriddenCurrency;
2420
+ return isTMultiLocation(overriddenCurrency) ? [createMultiAsset(version, amount, overriddenCurrency)] : overriddenCurrency;
2425
2421
  };
2426
- var createCurrencySpec = function createCurrencySpec(amount, version, parents, overriddenCurrency) {
2427
- var interior = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'Here';
2428
- var currency = getCurrency(amount, version, parents, overriddenCurrency, interior);
2429
- return addXcmVersionHeader(currency, version);
2422
+ var createVersionedMultiAssets = function createVersionedMultiAssets(version, amount, multiLocation) {
2423
+ var multiAssets = createMultiAsset(version, amount, multiLocation);
2424
+ return addXcmVersionHeader([multiAssets], version);
2430
2425
  };
2431
2426
  var createPolkadotXcmHeader = function createPolkadotXcmHeader(scenario, version, destination, nodeId, junction, parents) {
2432
2427
  var parentsResolved = parents !== null && parents !== void 0 ? parents : scenario === 'RelayToPara' ? exports.Parents.ZERO : exports.Parents.ONE;
@@ -2468,10 +2463,10 @@ var resolveTNodeFromMultiLocation = function resolveTNodeFromMultiLocation(relay
2468
2463
  return node;
2469
2464
  };
2470
2465
  var throwUnsupportedCurrency = function throwUnsupportedCurrency(currency, node) {
2471
- var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
2466
+ var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
2472
2467
  isDestination: false
2473
2468
  },
2474
- isDestination = _ref4.isDestination;
2469
+ isDestination = _ref3.isDestination;
2475
2470
  if ('multilocation' in currency) {
2476
2471
  throw new InvalidCurrencyError("\n Selected chain doesn't support multilocation you provided. Maybe you meant custom multilocation. If so, you need to use override option. Your selection should look like this: {multilocation: Override(".concat(JSON.stringify(currency.multilocation), ")}."));
2477
2472
  }
@@ -2537,19 +2532,21 @@ var buildMultiLocation = function buildMultiLocation(_ref) {
2537
2532
  }
2538
2533
  };
2539
2534
  var getModifiedCurrencySelection = function getModifiedCurrencySelection(version, input) {
2540
- var amount = input.asset.amount;
2535
+ var amount = input.asset.amount,
2536
+ overriddenAsset = input.overriddenAsset;
2537
+ if (overriddenAsset) {
2538
+ return addXcmVersionHeader(maybeOverrideMultiAssets(version, amount, [], overriddenAsset), version);
2539
+ }
2541
2540
  var multiLocation = buildMultiLocation(input);
2542
2541
  var multiAsset = createMultiAsset(version, amount, multiLocation);
2543
2542
  return addXcmVersionHeader(multiAsset, version);
2544
2543
  };
2545
2544
 
2546
- var getCurrencySelection = function getCurrencySelection(input, isAssetHub, currencySelection) {
2547
- var origin = input.origin,
2548
- overriddenAsset = input.overriddenAsset;
2545
+ var getCurrencySelection = function getCurrencySelection(input, useMultiAssets, currencySelection) {
2546
+ var origin = input.origin;
2549
2547
  var _getNode = getNode(origin),
2550
2548
  version = _getNode.version;
2551
- if (overriddenAsset !== undefined) return addXcmVersionHeader(overriddenAsset, version);
2552
- if (isAssetHub) {
2549
+ if (useMultiAssets) {
2553
2550
  return getModifiedCurrencySelection(version, input);
2554
2551
  }
2555
2552
  return currencySelection;
@@ -2557,11 +2554,11 @@ var getCurrencySelection = function getCurrencySelection(input, isAssetHub, curr
2557
2554
 
2558
2555
  var getXTokensParameters = function getXTokensParameters(isMultiAssetTransfer, currencySelection, addressSelection, amount, fees, overriddenAsset) {
2559
2556
  if (isMultiAssetTransfer) {
2560
- var isMultiAsset = overriddenAsset && !isTMultiLocation(overriddenAsset);
2561
- var feeAssetIndex = isMultiAsset ? overriddenAsset.findIndex(function (asset) {
2557
+ var isOverridenMultiAssets = overriddenAsset && !isTMultiLocation(overriddenAsset);
2558
+ var feeAssetIndex = isOverridenMultiAssets ? overriddenAsset.findIndex(function (asset) {
2562
2559
  return asset.isFeeAsset;
2563
2560
  }) : undefined;
2564
- return _objectSpread2(_objectSpread2(_defineProperty({}, isMultiAsset ? 'assets' : 'asset', currencySelection), isMultiAsset && {
2561
+ return _objectSpread2(_objectSpread2(_defineProperty({}, isOverridenMultiAssets ? 'assets' : 'asset', currencySelection), isOverridenMultiAssets && {
2565
2562
  fee_item: feeAssetIndex
2566
2563
  }), {}, {
2567
2564
  dest: addressSelection,
@@ -2601,10 +2598,10 @@ var XTokensTransferImpl = /*#__PURE__*/function () {
2601
2598
  var isAssetHubDest = destination === 'AssetHubPolkadot' || destination === 'AssetHubKusama';
2602
2599
  var isAstarOrShidenToRelay = scenario === 'ParaToRelay' && (origin === 'Astar' || origin === 'Shiden');
2603
2600
  var isTuring = origin === 'Turing';
2604
- var isMultiAsset = overriddenAsset && !isTMultiLocation(overriddenAsset);
2605
- var shouldUseMultiasset = isTuring || isAstarOrShidenToRelay || isAssetHubDest && !isBifrostOrigin || !!isMultiAsset;
2601
+ var isOverridenMultiAssets = overriddenAsset && !isTMultiLocation(overriddenAsset);
2602
+ var shouldUseMultiasset = isTuring || isAstarOrShidenToRelay || isAssetHubDest && !isBifrostOrigin || !!isOverridenMultiAssets;
2606
2603
  var modifiedCurrencySelection = getCurrencySelection(input, shouldUseMultiasset, currencySelection);
2607
- var section = shouldUseMultiasset ? isMultiAsset ? 'transfer_multiassets' : 'transfer_multiasset' : 'transfer';
2604
+ var section = shouldUseMultiasset ? isOverridenMultiAssets ? 'transfer_multiassets' : 'transfer_multiasset' : 'transfer';
2608
2605
  var parameters = getXTokensParameters(shouldUseMultiasset, modifiedCurrencySelection, addressSelection, asset.amount, fees, overriddenAsset);
2609
2606
  var call = {
2610
2607
  module: pallet !== null && pallet !== void 0 ? pallet : 'XTokens',
@@ -4822,12 +4819,12 @@ var ParachainNode = /*#__PURE__*/function () {
4822
4819
  header: this.createPolkadotXcmHeader(scenario, versionOrDefault, destination, paraId),
4823
4820
  addressSelection: generateAddressPayload(api, scenario, 'PolkadotXcm', address, versionOrDefault, paraId),
4824
4821
  address: address,
4825
- currencySelection: this.createCurrencySpec(asset.amount, scenario, versionOrDefault, asset, overriddenAsset),
4822
+ currencySelection: this.createCurrencySpec(asset.amount, scenario, versionOrDefault, asset),
4823
+ overriddenAsset: overriddenAsset,
4826
4824
  asset: asset,
4827
4825
  scenario: scenario,
4828
4826
  destination: destination,
4829
4827
  paraIdTo: paraId,
4830
- overriddenAsset: overriddenAsset,
4831
4828
  version: version,
4832
4829
  senderAddress: senderAddress,
4833
4830
  pallet: pallet,
@@ -4874,8 +4871,11 @@ var ParachainNode = /*#__PURE__*/function () {
4874
4871
  }
4875
4872
  }, {
4876
4873
  key: "createCurrencySpec",
4877
- value: function createCurrencySpec$1(amount, scenario, version, _asset, overridedMultiLocation) {
4878
- return createCurrencySpec(amount, version, scenario === 'ParaToRelay' ? exports.Parents.ONE : exports.Parents.ZERO, overridedMultiLocation);
4874
+ value: function createCurrencySpec(amount, scenario, version, _asset) {
4875
+ return createVersionedMultiAssets(version, amount, {
4876
+ parents: scenario === 'ParaToRelay' ? exports.Parents.ONE : exports.Parents.ZERO,
4877
+ interior: 'Here'
4878
+ });
4879
4879
  }
4880
4880
  }, {
4881
4881
  key: "createPolkadotXcmHeader",
@@ -5047,12 +5047,18 @@ var PolkadotXCMTransferImpl = /*#__PURE__*/function () {
5047
5047
  value: function transferPolkadotXCM(_ref, section) {
5048
5048
  var api = _ref.api,
5049
5049
  header = _ref.header,
5050
+ asset = _ref.asset,
5050
5051
  addressSelection = _ref.addressSelection,
5051
5052
  currencySelection = _ref.currencySelection,
5052
5053
  overriddenAsset = _ref.overriddenAsset,
5053
5054
  pallet = _ref.pallet,
5054
5055
  method = _ref.method;
5055
5056
  var fees = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
5057
+ var _extractVersionFromHe = extractVersionFromHeader(currencySelection),
5058
+ _extractVersionFromHe2 = _slicedToArray(_extractVersionFromHe, 2),
5059
+ version = _extractVersionFromHe2[0],
5060
+ multiAssets = _extractVersionFromHe2[1];
5061
+ var resolvedMultiAssets = addXcmVersionHeader(maybeOverrideMultiAssets(version, asset.amount, multiAssets, overriddenAsset), version);
5056
5062
  var feeAssetIndex = overriddenAsset === undefined || isTMultiLocation(overriddenAsset) ? DEFAULT_FEE_ASSET : overriddenAsset.findIndex(function (asset) {
5057
5063
  return asset.isFeeAsset;
5058
5064
  });
@@ -5062,7 +5068,7 @@ var PolkadotXCMTransferImpl = /*#__PURE__*/function () {
5062
5068
  parameters: _objectSpread2({
5063
5069
  dest: header,
5064
5070
  beneficiary: addressSelection,
5065
- assets: currencySelection,
5071
+ assets: resolvedMultiAssets,
5066
5072
  fee_asset_item: feeAssetIndex
5067
5073
  }, fees !== undefined ? {
5068
5074
  weight_limit: fees
@@ -5090,13 +5096,14 @@ var AssetHubKusama$1 = /*#__PURE__*/function (_ParachainNode) {
5090
5096
  if (destination === 'AssetHubPolkadot') {
5091
5097
  return Promise.resolve(getNode('AssetHubPolkadot').handleBridgeTransfer(input, 'Polkadot'));
5092
5098
  }
5093
- if (scenario === 'ParaToPara' && asset.symbol === 'KSM' && !isForeignAsset(asset)) {
5099
+ var isSystemNode = !isTMultiLocation(destination) && SYSTEM_NODES_KUSAMA.includes(destination);
5100
+ if (scenario === 'ParaToPara' && asset.symbol === 'KSM' && !isForeignAsset(asset) && !isSystemNode) {
5094
5101
  throw new ScenarioNotSupportedError(this.node, scenario, 'Para to Para scenarios for KSM transfer from AssetHub are not supported, you have to transfer KSM to Relay chain and transfer to destination chain from Relay chain.');
5095
5102
  }
5096
5103
  if (scenario === 'ParaToPara' && asset.symbol === 'DOT' && !isForeignAsset(asset)) {
5097
5104
  throw new ScenarioNotSupportedError(this.node, scenario, 'Bridged DOT cannot currently be transfered from AssetHubKusama, if you are sending different DOT asset, please specify {id: <DOTID>}.');
5098
5105
  }
5099
- var section = scenario === 'ParaToPara' ? 'limited_reserve_transfer_assets' : 'limited_teleport_assets';
5106
+ var section = scenario === 'ParaToPara' && !isSystemNode ? 'limited_reserve_transfer_assets' : 'limited_teleport_assets';
5100
5107
  return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(input, section, 'Unlimited'));
5101
5108
  }
5102
5109
  }, {
@@ -5109,8 +5116,8 @@ var AssetHubKusama$1 = /*#__PURE__*/function (_ParachainNode) {
5109
5116
  }
5110
5117
  }, {
5111
5118
  key: "createCurrencySpec",
5112
- value: function createCurrencySpec(amount, scenario, version, asset, overridedMultiLocation) {
5113
- return getNode('AssetHubPolkadot').createCurrencySpec(amount, scenario, version, asset, overridedMultiLocation);
5119
+ value: function createCurrencySpec(amount, scenario, version, asset) {
5120
+ return getNode('AssetHubPolkadot').createCurrencySpec(amount, scenario, version, asset);
5114
5121
  }
5115
5122
  }]);
5116
5123
  }(ParachainNode);
@@ -5194,16 +5201,26 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5194
5201
  value: function handleBridgeTransfer(input, targetChain) {
5195
5202
  var _input$asset$symbol, _input$asset$symbol2, _input$asset$symbol3, _input$asset$symbol4;
5196
5203
  if (targetChain === 'Kusama' && ((_input$asset$symbol = input.asset.symbol) === null || _input$asset$symbol === void 0 ? void 0 : _input$asset$symbol.toUpperCase()) === 'KSM' || targetChain === 'Polkadot' && ((_input$asset$symbol2 = input.asset.symbol) === null || _input$asset$symbol2 === void 0 ? void 0 : _input$asset$symbol2.toUpperCase()) === 'DOT') {
5204
+ var overriddenVersion = exports.Version.V4;
5205
+ var customMultiLocation = {
5206
+ parents: exports.Parents.TWO,
5207
+ interior: {
5208
+ X1: [{
5209
+ GlobalConsensus: targetChain
5210
+ }]
5211
+ }
5212
+ };
5197
5213
  var modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
5198
- header: createBridgePolkadotXcmDest(exports.Version.V4, targetChain, input.destination, input.paraIdTo),
5214
+ header: createBridgePolkadotXcmDest(overriddenVersion, targetChain, input.destination, input.paraIdTo),
5199
5215
  addressSelection: generateAddressMultiLocationV4(input.api, input.address),
5200
- currencySelection: createBridgeCurrencySpec(input.asset.amount, targetChain)
5216
+ currencySelection: createVersionedMultiAssets(overriddenVersion, input.asset.amount, customMultiLocation)
5201
5217
  });
5202
5218
  return PolkadotXCMTransferImpl.transferPolkadotXCM(modifiedInput, 'transfer_assets', 'Unlimited');
5203
5219
  } else if (targetChain === 'Polkadot' && ((_input$asset$symbol3 = input.asset.symbol) === null || _input$asset$symbol3 === void 0 ? void 0 : _input$asset$symbol3.toUpperCase()) === 'KSM' || targetChain === 'Kusama' && ((_input$asset$symbol4 = input.asset.symbol) === null || _input$asset$symbol4 === void 0 ? void 0 : _input$asset$symbol4.toUpperCase()) === 'DOT') {
5220
+ var _overriddenVersion = exports.Version.V3;
5204
5221
  var _modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
5205
- header: createBridgePolkadotXcmDest(exports.Version.V3, targetChain, input.destination, input.paraIdTo),
5206
- currencySelection: createCurrencySpec(input.asset.amount, exports.Version.V3, exports.Parents.ONE, input.overriddenAsset)
5222
+ header: createBridgePolkadotXcmDest(_overriddenVersion, targetChain, input.destination, input.paraIdTo),
5223
+ currencySelection: createVersionedMultiAssets(_overriddenVersion, input.asset.amount, DOT_MULTILOCATION)
5207
5224
  });
5208
5225
  return PolkadotXCMTransferImpl.transferPolkadotXCM(_modifiedInput, 'limited_reserve_transfer_assets', 'Unlimited');
5209
5226
  }
@@ -5230,7 +5247,7 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5230
5247
  var modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
5231
5248
  header: createPolkadotXcmHeader(scenario, this.version, destination, paraIdTo, ETHEREUM_JUNCTION, exports.Parents.TWO),
5232
5249
  addressSelection: generateAddressPayload(api, scenario, 'PolkadotXcm', address, this.version, paraIdTo),
5233
- currencySelection: createCurrencySpec(input.asset.amount, exports.Version.V3, exports.Parents.TWO, asset.multiLocation)
5250
+ currencySelection: createVersionedMultiAssets(exports.Version.V3, asset.amount, asset.multiLocation)
5234
5251
  });
5235
5252
  return PolkadotXCMTransferImpl.transferPolkadotXCM(modifiedInput, 'transfer_assets', 'Unlimited');
5236
5253
  }
@@ -5240,7 +5257,6 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5240
5257
  var api = input.api,
5241
5258
  address = input.address,
5242
5259
  asset = input.asset,
5243
- overriddenAsset = input.overriddenAsset,
5244
5260
  scenario = input.scenario,
5245
5261
  destination = input.destination,
5246
5262
  paraIdTo = input.paraIdTo;
@@ -5257,7 +5273,7 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5257
5273
  var modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
5258
5274
  header: this.createPolkadotXcmHeader(scenario, version, destination, paraId),
5259
5275
  addressSelection: generateAddressPayload(api, scenario, 'PolkadotXcm', address, version, paraId),
5260
- currencySelection: this.createCurrencySpec(asset.amount, scenario, version, asset, overriddenAsset !== null && overriddenAsset !== void 0 ? overriddenAsset : customMultiLocation)
5276
+ currencySelection: createVersionedMultiAssets(version, asset.amount, customMultiLocation)
5261
5277
  });
5262
5278
  return PolkadotXCMTransferImpl.transferPolkadotXCM(modifiedInput, 'limited_teleport_assets', 'Unlimited');
5263
5279
  }
@@ -5268,7 +5284,6 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5268
5284
  var asset = input.asset,
5269
5285
  destination = input.destination,
5270
5286
  paraIdTo = input.paraIdTo,
5271
- overriddenAsset = input.overriddenAsset,
5272
5287
  scenario = input.scenario,
5273
5288
  api = input.api,
5274
5289
  version = input.version,
@@ -5279,13 +5294,13 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5279
5294
  return _objectSpread2(_objectSpread2({}, input), {}, {
5280
5295
  header: this.createPolkadotXcmHeader(scenario, versionOrDefault, destination, paraIdTo),
5281
5296
  addressSelection: generateAddressPayload(api, scenario, 'PolkadotXcm', address, versionOrDefault, paraIdTo),
5282
- currencySelection: this.createCurrencySpec(asset.amount, scenario, versionOrDefault, asset, overriddenAsset)
5297
+ currencySelection: this.createCurrencySpec(asset.amount, scenario, versionOrDefault, asset)
5283
5298
  });
5284
5299
  }
5285
5300
  if ((destination === 'Hydration' || destination === 'Polimec' || destination === 'Moonbeam' || destination === 'BifrostPolkadot') && asset.symbol === 'DOT') {
5286
5301
  var _versionOrDefault = version !== null && version !== void 0 ? version : this.version;
5287
5302
  return _objectSpread2(_objectSpread2({}, input), {}, {
5288
- currencySelection: _superPropGet(AssetHubPolkadot, "createCurrencySpec", this, 3)([asset.amount, 'ParaToRelay', _versionOrDefault, asset, overriddenAsset])
5303
+ currencySelection: createVersionedMultiAssets(_versionOrDefault, asset.amount, DOT_MULTILOCATION)
5289
5304
  });
5290
5305
  }
5291
5306
  return input;
@@ -5293,8 +5308,9 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5293
5308
  }, {
5294
5309
  key: "getSection",
5295
5310
  value: function getSection(scenario, destination) {
5311
+ var isSystemNode = !isTMultiLocation(destination) && SYSTEM_NODES_POLKADOT.includes(destination);
5296
5312
  if (destination === 'Polimec' || destination === 'Moonbeam') return 'transfer_assets';
5297
- return scenario === 'ParaToPara' ? 'limited_reserve_transfer_assets' : 'limited_teleport_assets';
5313
+ return scenario === 'ParaToPara' && !isSystemNode ? 'limited_reserve_transfer_assets' : 'limited_teleport_assets';
5298
5314
  }
5299
5315
  }, {
5300
5316
  key: "transferPolkadotXCM",
@@ -5320,7 +5336,8 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5320
5336
  if (destination === 'BifrostPolkadot' && isEthereumAsset) {
5321
5337
  return Promise.resolve(this.handleBifrostEthTransfer(input));
5322
5338
  }
5323
- if (scenario === 'ParaToPara' && asset.symbol === 'DOT' && !isForeignAsset(asset) && destination !== 'Hydration' && destination !== 'Polimec' && destination !== 'Moonbeam' && destination !== 'BifrostPolkadot') {
5339
+ var isSystemNode = !isTMultiLocation(destination) && SYSTEM_NODES_POLKADOT.includes(destination);
5340
+ if (scenario === 'ParaToPara' && asset.symbol === 'DOT' && !isForeignAsset(asset) && destination !== 'Hydration' && destination !== 'Polimec' && destination !== 'Moonbeam' && destination !== 'BifrostPolkadot' && destination !== 'PeoplePolkadot' && !isSystemNode) {
5324
5341
  throw new ScenarioNotSupportedError(this.node, scenario, 'Para to Para scenarios for DOT transfer from AssetHub are not supported, you have to transfer DOT to Relay chain and transfer to destination chain from Relay chain.');
5325
5342
  }
5326
5343
  if (scenario === 'ParaToPara' && asset.symbol === 'KSM' && !isForeignAsset(asset)) {
@@ -5340,18 +5357,20 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5340
5357
  }
5341
5358
  }, {
5342
5359
  key: "createCurrencySpec",
5343
- value: function createCurrencySpec$1(amount, scenario, version, asset, overridedMultiLocation) {
5360
+ value: function createCurrencySpec(amount, scenario, version, asset) {
5344
5361
  if (scenario === 'ParaToPara') {
5345
- var interior = {
5346
- X2: [{
5347
- PalletInstance: 50
5348
- }, {
5349
- // TODO: Handle missing assedId
5350
- GeneralIndex: asset && isForeignAsset(asset) && asset.assetId ? asset.assetId : 0
5351
- }]
5352
- };
5353
- var multiLocation = overridedMultiLocation !== undefined ? overridedMultiLocation : asset && isForeignAsset(asset) ? asset.multiLocation : undefined;
5354
- return createCurrencySpec(amount, version, exports.Parents.ZERO, multiLocation, interior);
5362
+ var multiLocation = asset ? asset.multiLocation : undefined;
5363
+ return createVersionedMultiAssets(version, amount, multiLocation !== null && multiLocation !== void 0 ? multiLocation : {
5364
+ parents: exports.Parents.ZERO,
5365
+ interior: {
5366
+ X2: [{
5367
+ PalletInstance: 50
5368
+ }, {
5369
+ // TODO: Handle missing assedId
5370
+ GeneralIndex: asset && isForeignAsset(asset) && asset.assetId ? asset.assetId : 0
5371
+ }]
5372
+ }
5373
+ });
5355
5374
  } else {
5356
5375
  return _superPropGet(AssetHubPolkadot, "createCurrencySpec", this, 3)([amount, scenario, version, asset]);
5357
5376
  }
@@ -5497,16 +5516,18 @@ var BifrostPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5497
5516
  key: "transferToAssetHub",
5498
5517
  value: function transferToAssetHub(input) {
5499
5518
  var _getAssetId;
5500
- var overriddenAsset = input.overriddenAsset,
5501
- asset = input.asset;
5519
+ var asset = input.asset;
5502
5520
  return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(_objectSpread2(_objectSpread2({}, input), {}, {
5503
- currencySelection: createCurrencySpec(asset.amount, this.version, asset.symbol === 'DOT' ? exports.Parents.ONE : exports.Parents.TWO, overriddenAsset, asset.symbol === 'WETH' ? {
5504
- X2: [ETHEREUM_JUNCTION, {
5505
- AccountKey20: {
5506
- key: (_getAssetId = getAssetId('Ethereum', 'WETH')) !== null && _getAssetId !== void 0 ? _getAssetId : ''
5507
- }
5508
- }]
5509
- } : undefined)
5521
+ currencySelection: createVersionedMultiAssets(this.version, asset.amount, {
5522
+ parents: asset.symbol === 'DOT' ? exports.Parents.ONE : exports.Parents.TWO,
5523
+ interior: asset.symbol === 'WETH' ? {
5524
+ X2: [ETHEREUM_JUNCTION, {
5525
+ AccountKey20: {
5526
+ key: (_getAssetId = getAssetId('Ethereum', 'WETH')) !== null && _getAssetId !== void 0 ? _getAssetId : ''
5527
+ }
5528
+ }]
5529
+ } : 'Here'
5530
+ })
5510
5531
  }), 'transfer_assets', 'Unlimited'));
5511
5532
  }
5512
5533
  }, {
@@ -5773,16 +5794,18 @@ var Crab$1 = /*#__PURE__*/function (_ParachainNode) {
5773
5794
  }
5774
5795
  }, {
5775
5796
  key: "createCurrencySpec",
5776
- value: function createCurrencySpec$1(amount, scenario, version, _asset, overridedMultiLocation) {
5797
+ value: function createCurrencySpec(amount, scenario, version, _asset) {
5777
5798
  if (scenario === 'ParaToPara') {
5778
- var interior = {
5779
- X1: {
5780
- PalletInstance: 5
5799
+ return createVersionedMultiAssets(version, amount, {
5800
+ parents: exports.Parents.ZERO,
5801
+ interior: {
5802
+ X1: {
5803
+ PalletInstance: 5
5804
+ }
5781
5805
  }
5782
- };
5783
- return createCurrencySpec(amount, version, exports.Parents.ZERO, overridedMultiLocation, interior);
5806
+ });
5784
5807
  } else {
5785
- return _superPropGet(Crab, "createCurrencySpec", this, 3)([amount, scenario, version, undefined, overridedMultiLocation]);
5808
+ return _superPropGet(Crab, "createCurrencySpec", this, 3)([amount, scenario, version]);
5786
5809
  }
5787
5810
  }
5788
5811
  }]);
@@ -6167,8 +6190,8 @@ var Moonbeam$1 = /*#__PURE__*/function (_ParachainNode) {
6167
6190
  }
6168
6191
  _inherits(Moonbeam, _ParachainNode);
6169
6192
  return _createClass(Moonbeam, [{
6170
- key: "getJunctions",
6171
- value: function getJunctions(asset, scenario) {
6193
+ key: "getMultiLocation",
6194
+ value: function getMultiLocation(asset, scenario) {
6172
6195
  if (scenario === 'ParaToRelay') return DOT_MULTILOCATION;
6173
6196
  if (asset.symbol === this.getNativeAssetSymbol()) return {
6174
6197
  parents: exports.Parents.ZERO,
@@ -6189,11 +6212,10 @@ var Moonbeam$1 = /*#__PURE__*/function (_ParachainNode) {
6189
6212
  var asset = input.asset,
6190
6213
  scenario = input.scenario,
6191
6214
  _input$version = input.version,
6192
- version = _input$version === void 0 ? this.version : _input$version,
6193
- overriddenAsset = input.overriddenAsset;
6194
- var multiLocation = this.getJunctions(asset, scenario);
6215
+ version = _input$version === void 0 ? this.version : _input$version;
6216
+ var multiLocation = this.getMultiLocation(asset, scenario);
6195
6217
  return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(_objectSpread2(_objectSpread2({}, input), {}, {
6196
- currencySelection: createCurrencySpec(asset.amount, version, multiLocation.parents, overriddenAsset, multiLocation.interior)
6218
+ currencySelection: createVersionedMultiAssets(version, asset.amount, multiLocation)
6197
6219
  }), 'transfer_assets', 'Unlimited'));
6198
6220
  }
6199
6221
  }, {
@@ -6214,8 +6236,8 @@ var Moonriver$1 = /*#__PURE__*/function (_ParachainNode) {
6214
6236
  }
6215
6237
  _inherits(Moonriver, _ParachainNode);
6216
6238
  return _createClass(Moonriver, [{
6217
- key: "getJunctions",
6218
- value: function getJunctions(asset, scenario) {
6239
+ key: "getMultiLocation",
6240
+ value: function getMultiLocation(asset, scenario) {
6219
6241
  if (scenario === 'ParaToRelay') return DOT_MULTILOCATION;
6220
6242
  if (asset.symbol === this.getNativeAssetSymbol()) return {
6221
6243
  parents: exports.Parents.ZERO,
@@ -6236,11 +6258,10 @@ var Moonriver$1 = /*#__PURE__*/function (_ParachainNode) {
6236
6258
  var asset = input.asset,
6237
6259
  scenario = input.scenario,
6238
6260
  _input$version = input.version,
6239
- version = _input$version === void 0 ? this.version : _input$version,
6240
- overriddenAsset = input.overriddenAsset;
6241
- var multiLocation = this.getJunctions(asset, scenario);
6261
+ version = _input$version === void 0 ? this.version : _input$version;
6262
+ var multiLocation = this.getMultiLocation(asset, scenario);
6242
6263
  return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(_objectSpread2(_objectSpread2({}, input), {}, {
6243
- currencySelection: createCurrencySpec(asset.amount, version, multiLocation.parents, overriddenAsset, multiLocation.interior)
6264
+ currencySelection: createVersionedMultiAssets(version, asset.amount, multiLocation)
6244
6265
  }), 'transfer_assets', 'Unlimited'));
6245
6266
  }
6246
6267
  }, {
@@ -6531,7 +6552,12 @@ var XTransferTransferImpl = /*#__PURE__*/function () {
6531
6552
  if (isMultiLocationDestination) {
6532
6553
  throw new Error('Multilocation destinations are not supported for specific transfer you are trying to create. In special cases such as xTokens or xTransfer pallet try using address multilocation instead (for both destination and address in same multilocation set (eg. X2 - Parachain, Address). For further assistance please open issue in our repository.');
6533
6554
  }
6534
- var currencySpec = getCurrency(asset.amount, exports.Version.V1, exports.Parents.ZERO, overriddenAsset)[0];
6555
+ var version = exports.Version.V1;
6556
+ var multiAssets = [createMultiAsset(version, asset.amount, {
6557
+ parents: exports.Parents.ZERO,
6558
+ interior: 'Here'
6559
+ })];
6560
+ var resolvedMultiAssets = maybeOverrideMultiAssets(version, asset.amount, multiAssets, overriddenAsset);
6535
6561
  var dest = getDestination(input);
6536
6562
  var section = 'transfer';
6537
6563
  var destWeight = determineDestWeight(destination);
@@ -6539,7 +6565,7 @@ var XTransferTransferImpl = /*#__PURE__*/function () {
6539
6565
  module: pallet !== null && pallet !== void 0 ? pallet : 'XTransfer',
6540
6566
  section: method !== null && method !== void 0 ? method : section,
6541
6567
  parameters: {
6542
- asset: currencySpec,
6568
+ asset: resolvedMultiAssets[0],
6543
6569
  dest: dest,
6544
6570
  dest_weight: destWeight
6545
6571
  }
@@ -7003,14 +7029,7 @@ var Polimec = {
7003
7029
  ],
7004
7030
  otherAssets: [
7005
7031
  {
7006
- assetId: "10",
7007
- symbol: "DOT",
7008
- decimals: 10,
7009
- existentialDeposit: "100000000"
7010
- },
7011
- {
7012
- assetId: "1984",
7013
- symbol: "USDt",
7032
+ symbol: "USDC",
7014
7033
  decimals: 6,
7015
7034
  multiLocation: {
7016
7035
  parents: 1,
@@ -7023,7 +7042,7 @@ var Polimec = {
7023
7042
  PalletInstance: 50
7024
7043
  },
7025
7044
  {
7026
- GeneralIndex: 1984
7045
+ GeneralIndex: 1337
7027
7046
  }
7028
7047
  ]
7029
7048
  }
@@ -7031,8 +7050,7 @@ var Polimec = {
7031
7050
  existentialDeposit: "70000"
7032
7051
  },
7033
7052
  {
7034
- assetId: "1337",
7035
- symbol: "USDC",
7053
+ symbol: "USDt",
7036
7054
  decimals: 6,
7037
7055
  multiLocation: {
7038
7056
  parents: 1,
@@ -7045,12 +7063,23 @@ var Polimec = {
7045
7063
  PalletInstance: 50
7046
7064
  },
7047
7065
  {
7048
- GeneralIndex: 1337
7066
+ GeneralIndex: 1984
7049
7067
  }
7050
7068
  ]
7051
7069
  }
7052
7070
  },
7053
7071
  existentialDeposit: "70000"
7072
+ },
7073
+ {
7074
+ symbol: "DOT",
7075
+ decimals: 10,
7076
+ multiLocation: {
7077
+ parents: 1,
7078
+ interior: {
7079
+ Here: null
7080
+ }
7081
+ },
7082
+ existentialDeposit: "100000000"
7054
7083
  }
7055
7084
  ]
7056
7085
  };
package/dist/index.d.ts CHANGED
@@ -231,7 +231,7 @@ declare abstract class ParachainNode<TApi, TRes> {
231
231
  transfer(options: TSendInternalOptions<TApi, TRes>): Promise<TRes>;
232
232
  getRelayToParaOverrides(): TRelayToParaOverrides;
233
233
  transferRelayToPara(options: TRelayToParaOptions<TApi, TRes>): TSerializedApiCall;
234
- createCurrencySpec(amount: TAmount, scenario: TScenario, version: Version, _asset?: TAsset, overridedMultiLocation?: TMultiLocation | TMultiAsset[]): TXcmVersioned<TMultiAsset[]>;
234
+ createCurrencySpec(amount: TAmount, scenario: TScenario, version: Version, _asset?: TAsset): TXcmVersioned<TMultiAsset[]>;
235
235
  createPolkadotXcmHeader(scenario: TScenario, version: Version, destination: TDestination, paraId?: number): TXcmVersioned<TMultiLocation>;
236
236
  getNativeAssetSymbol(): string;
237
237
  protected transferToEthereum<TApi, TRes>(input: TPolkadotXCMTransferOptions<TApi, TRes>): Promise<TRes>;
@@ -257,7 +257,27 @@ declare class AssetHubKusama<TApi, TRes> extends ParachainNode<TApi, TRes> imple
257
257
  constructor();
258
258
  transferPolkadotXCM<TApi, TRes>(input: TPolkadotXCMTransferOptions<TApi, TRes>): Promise<TRes>;
259
259
  getRelayToParaOverrides(): TRelayToParaOverrides;
260
- createCurrencySpec(amount: string, scenario: TScenario, version: Version, asset?: TAsset, overridedMultiLocation?: TMultiLocation | TMultiAsset[]): TXcmVersioned<TMultiAsset[]>;
260
+ createCurrencySpec(amount: string, scenario: TScenario, version: Version, asset?: TAsset): {
261
+ V1: TMultiAsset[];
262
+ V2?: undefined;
263
+ V3?: undefined;
264
+ V4?: undefined;
265
+ } | {
266
+ V2: TMultiAsset[];
267
+ V1?: undefined;
268
+ V3?: undefined;
269
+ V4?: undefined;
270
+ } | {
271
+ V3: TMultiAsset[];
272
+ V1?: undefined;
273
+ V2?: undefined;
274
+ V4?: undefined;
275
+ } | {
276
+ V4: TMultiAsset[];
277
+ V1?: undefined;
278
+ V2?: undefined;
279
+ V3?: undefined;
280
+ };
261
281
  }
262
282
 
263
283
  declare class AssetHubPolkadot<TApi, TRes> extends ParachainNode<TApi, TRes> implements IPolkadotXCMTransfer {
@@ -270,7 +290,27 @@ declare class AssetHubPolkadot<TApi, TRes> extends ParachainNode<TApi, TRes> imp
270
290
  private getSection;
271
291
  transferPolkadotXCM<TApi, TRes>(input: TPolkadotXCMTransferOptions<TApi, TRes>): Promise<TRes>;
272
292
  getRelayToParaOverrides(): TRelayToParaOverrides;
273
- createCurrencySpec(amount: TAmount, scenario: TScenario, version: Version, asset?: TAsset, overridedMultiLocation?: TMultiLocation | TMultiAsset[]): TXcmVersioned<TMultiAsset[]>;
293
+ createCurrencySpec(amount: TAmount, scenario: TScenario, version: Version, asset?: TAsset): {
294
+ V1: TMultiAsset[];
295
+ V2?: undefined;
296
+ V3?: undefined;
297
+ V4?: undefined;
298
+ } | {
299
+ V2: TMultiAsset[];
300
+ V1?: undefined;
301
+ V3?: undefined;
302
+ V4?: undefined;
303
+ } | {
304
+ V3: TMultiAsset[];
305
+ V1?: undefined;
306
+ V2?: undefined;
307
+ V4?: undefined;
308
+ } | {
309
+ V4: TMultiAsset[];
310
+ V1?: undefined;
311
+ V2?: undefined;
312
+ V3?: undefined;
313
+ };
274
314
  }
275
315
 
276
316
  declare class Astar<TApi, TRes> extends ParachainNode<TApi, TRes> implements IPolkadotXCMTransfer, IXTokensTransfer {
@@ -406,7 +446,27 @@ declare class Crab<TApi, TRes> extends ParachainNode<TApi, TRes> implements IPol
406
446
  constructor();
407
447
  transferPolkadotXCM<TApi, TRes>(input: TPolkadotXCMTransferOptions<TApi, TRes>): Promise<TRes>;
408
448
  transferRelayToPara(): TSerializedApiCall;
409
- createCurrencySpec(amount: string, scenario: TScenario, version: Version, _asset?: TAsset, overridedMultiLocation?: TMultiLocation): TXcmVersioned<TMultiAsset[]>;
449
+ createCurrencySpec(amount: string, scenario: TScenario, version: Version, _asset?: TAsset): {
450
+ V1: TMultiAsset[];
451
+ V2?: undefined;
452
+ V3?: undefined;
453
+ V4?: undefined;
454
+ } | {
455
+ V2: TMultiAsset[];
456
+ V1?: undefined;
457
+ V3?: undefined;
458
+ V4?: undefined;
459
+ } | {
460
+ V3: TMultiAsset[];
461
+ V1?: undefined;
462
+ V2?: undefined;
463
+ V4?: undefined;
464
+ } | {
465
+ V4: TMultiAsset[];
466
+ V1?: undefined;
467
+ V2?: undefined;
468
+ V3?: undefined;
469
+ };
410
470
  }
411
471
 
412
472
  declare class Crust<TApi, TRes> extends ParachainNode<TApi, TRes> implements IXTokensTransfer {
@@ -489,14 +549,14 @@ declare class Manta<TApi, TRes> extends ParachainNode<TApi, TRes> implements IXT
489
549
 
490
550
  declare class Moonbeam<TApi, TRes> extends ParachainNode<TApi, TRes> implements IPolkadotXCMTransfer {
491
551
  constructor();
492
- private getJunctions;
552
+ private getMultiLocation;
493
553
  transferPolkadotXCM<TApi, TRes>(input: TPolkadotXCMTransferOptions<TApi, TRes>): Promise<TRes>;
494
554
  getRelayToParaOverrides(): TRelayToParaOverrides;
495
555
  }
496
556
 
497
557
  declare class Moonriver<TApi, TRes> extends ParachainNode<TApi, TRes> implements IPolkadotXCMTransfer {
498
558
  constructor();
499
- private getJunctions;
559
+ private getMultiLocation;
500
560
  transferPolkadotXCM<TApi, TRes>(input: TPolkadotXCMTransferOptions<TApi, TRes>): Promise<TRes>;
501
561
  getRelayToParaOverrides(): TRelayToParaOverrides;
502
562
  }
@@ -696,11 +756,11 @@ type TPolkadotXCMTransferOptions<TApi, TRes> = {
696
756
  addressSelection: TXcmVersioned<TMultiLocation>;
697
757
  address: TAddress;
698
758
  currencySelection: TXcmVersioned<TMultiAsset[]>;
759
+ overriddenAsset?: TMultiLocation | TMultiAssetWithFee[];
699
760
  scenario: TScenario;
700
761
  asset: WithAmount<TAsset>;
701
762
  destination: TDestination;
702
763
  paraIdTo?: number;
703
- overriddenAsset?: TMultiLocation | TMultiAssetWithFee[];
704
764
  version?: Version;
705
765
  senderAddress?: string;
706
766
  pallet?: string;
@@ -715,7 +775,7 @@ type TXTokensTransferOptions<TApi, TRes> = {
715
775
  origin: TNodePolkadotKusama;
716
776
  destination: TDestination;
717
777
  paraIdTo?: number;
718
- overriddenAsset?: TMultiLocation | TMultiAsset[];
778
+ overriddenAsset?: TMultiLocation | TMultiAssetWithFee[];
719
779
  pallet?: string;
720
780
  method?: string;
721
781
  };
package/dist/index.mjs CHANGED
@@ -714,6 +714,8 @@ var NODES_WITH_RELAY_CHAINS_DOT_KSM = [].concat(NODE_NAMES_DOT_KSM, ['Polkadot',
714
714
  * Supported XCM pallets.
715
715
  */
716
716
  var SUPPORTED_PALLETS = ['XTokens', 'OrmlXTokens', 'PolkadotXcm', 'RelayerXcm', 'XTransfer', 'XcmPallet'];
717
+ var SYSTEM_NODES_POLKADOT = ['PeoplePolkadot', 'CoretimePolkadot', 'Collectives'];
718
+ var SYSTEM_NODES_KUSAMA = ['PeopleKusama', 'CoretimeKusama'];
717
719
 
718
720
  /**
719
721
  * Error thrown when multiple assets with the same symbol are found.
@@ -2360,7 +2362,10 @@ var constructRelayToParaParameters = function constructRelayToParaParameters(_re
2360
2362
  return _objectSpread2({
2361
2363
  dest: createPolkadotXcmHeader('RelayToPara', version, destination, paraId),
2362
2364
  beneficiary: generateAddressPayload(api, 'RelayToPara', null, address, version, paraId),
2363
- assets: createCurrencySpec(asset.amount, version, Parents.ZERO),
2365
+ assets: createVersionedMultiAssets(version, asset.amount, {
2366
+ parents: Parents.ZERO,
2367
+ interior: 'Here'
2368
+ }),
2364
2369
  fee_asset_item: DEFAULT_FEE_ASSET
2365
2370
  }, includeFee && {
2366
2371
  weight_limit: 'Unlimited'
@@ -2373,21 +2378,6 @@ var isTMultiLocation = function isTMultiLocation(value) {
2373
2378
  var isTMultiAsset = function isTMultiAsset(value) {
2374
2379
  return _typeof(value) === 'object' && value !== null && 'id' in value && 'fun' in value;
2375
2380
  };
2376
- var createBridgeCurrencySpec = function createBridgeCurrencySpec(amount, ecosystem) {
2377
- return _defineProperty({}, Version.V4, [{
2378
- id: {
2379
- parents: Parents.TWO,
2380
- interior: {
2381
- X1: [{
2382
- GlobalConsensus: ecosystem
2383
- }]
2384
- }
2385
- },
2386
- fun: {
2387
- Fungible: amount.toString()
2388
- }
2389
- }]);
2390
- };
2391
2381
  var createMultiAsset = function createMultiAsset(version, amount, multiLocation) {
2392
2382
  if (version === Version.V4) {
2393
2383
  return {
@@ -2409,22 +2399,27 @@ var createMultiAsset = function createMultiAsset(version, amount, multiLocation)
2409
2399
  var addXcmVersionHeader = function addXcmVersionHeader(obj, version) {
2410
2400
  return _defineProperty({}, version, obj);
2411
2401
  };
2412
- var getCurrency = function getCurrency(amount, version, parents, overriddenCurrency) {
2413
- var interior = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'Here';
2402
+ var extractVersionFromHeader = function extractVersionFromHeader(versionHeader) {
2403
+ var keys = Object.keys(versionHeader);
2404
+ if (keys.length !== 1) {
2405
+ throw new Error('Invalid version header: expected exactly one key.');
2406
+ }
2407
+ var version = keys[0];
2408
+ var value = versionHeader[version];
2409
+ if (value === undefined) {
2410
+ throw new Error('Invalid version header: value is undefined.');
2411
+ }
2412
+ return [version, value];
2413
+ };
2414
+ var maybeOverrideMultiAssets = function maybeOverrideMultiAssets(version, amount, multiAssets, overriddenCurrency) {
2414
2415
  if (!overriddenCurrency) {
2415
- return [createMultiAsset(version, amount, {
2416
- parents: parents,
2417
- interior: interior
2418
- })];
2416
+ return multiAssets;
2419
2417
  }
2420
- return isTMultiLocation(overriddenCurrency) ? [createMultiAsset(version, amount, overriddenCurrency)] :
2421
- // It must be TMultiAsset if not TMultiLocation
2422
- overriddenCurrency;
2418
+ return isTMultiLocation(overriddenCurrency) ? [createMultiAsset(version, amount, overriddenCurrency)] : overriddenCurrency;
2423
2419
  };
2424
- var createCurrencySpec = function createCurrencySpec(amount, version, parents, overriddenCurrency) {
2425
- var interior = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'Here';
2426
- var currency = getCurrency(amount, version, parents, overriddenCurrency, interior);
2427
- return addXcmVersionHeader(currency, version);
2420
+ var createVersionedMultiAssets = function createVersionedMultiAssets(version, amount, multiLocation) {
2421
+ var multiAssets = createMultiAsset(version, amount, multiLocation);
2422
+ return addXcmVersionHeader([multiAssets], version);
2428
2423
  };
2429
2424
  var createPolkadotXcmHeader = function createPolkadotXcmHeader(scenario, version, destination, nodeId, junction, parents) {
2430
2425
  var parentsResolved = parents !== null && parents !== void 0 ? parents : scenario === 'RelayToPara' ? Parents.ZERO : Parents.ONE;
@@ -2466,10 +2461,10 @@ var resolveTNodeFromMultiLocation = function resolveTNodeFromMultiLocation(relay
2466
2461
  return node;
2467
2462
  };
2468
2463
  var throwUnsupportedCurrency = function throwUnsupportedCurrency(currency, node) {
2469
- var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
2464
+ var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
2470
2465
  isDestination: false
2471
2466
  },
2472
- isDestination = _ref4.isDestination;
2467
+ isDestination = _ref3.isDestination;
2473
2468
  if ('multilocation' in currency) {
2474
2469
  throw new InvalidCurrencyError("\n Selected chain doesn't support multilocation you provided. Maybe you meant custom multilocation. If so, you need to use override option. Your selection should look like this: {multilocation: Override(".concat(JSON.stringify(currency.multilocation), ")}."));
2475
2470
  }
@@ -2535,19 +2530,21 @@ var buildMultiLocation = function buildMultiLocation(_ref) {
2535
2530
  }
2536
2531
  };
2537
2532
  var getModifiedCurrencySelection = function getModifiedCurrencySelection(version, input) {
2538
- var amount = input.asset.amount;
2533
+ var amount = input.asset.amount,
2534
+ overriddenAsset = input.overriddenAsset;
2535
+ if (overriddenAsset) {
2536
+ return addXcmVersionHeader(maybeOverrideMultiAssets(version, amount, [], overriddenAsset), version);
2537
+ }
2539
2538
  var multiLocation = buildMultiLocation(input);
2540
2539
  var multiAsset = createMultiAsset(version, amount, multiLocation);
2541
2540
  return addXcmVersionHeader(multiAsset, version);
2542
2541
  };
2543
2542
 
2544
- var getCurrencySelection = function getCurrencySelection(input, isAssetHub, currencySelection) {
2545
- var origin = input.origin,
2546
- overriddenAsset = input.overriddenAsset;
2543
+ var getCurrencySelection = function getCurrencySelection(input, useMultiAssets, currencySelection) {
2544
+ var origin = input.origin;
2547
2545
  var _getNode = getNode(origin),
2548
2546
  version = _getNode.version;
2549
- if (overriddenAsset !== undefined) return addXcmVersionHeader(overriddenAsset, version);
2550
- if (isAssetHub) {
2547
+ if (useMultiAssets) {
2551
2548
  return getModifiedCurrencySelection(version, input);
2552
2549
  }
2553
2550
  return currencySelection;
@@ -2555,11 +2552,11 @@ var getCurrencySelection = function getCurrencySelection(input, isAssetHub, curr
2555
2552
 
2556
2553
  var getXTokensParameters = function getXTokensParameters(isMultiAssetTransfer, currencySelection, addressSelection, amount, fees, overriddenAsset) {
2557
2554
  if (isMultiAssetTransfer) {
2558
- var isMultiAsset = overriddenAsset && !isTMultiLocation(overriddenAsset);
2559
- var feeAssetIndex = isMultiAsset ? overriddenAsset.findIndex(function (asset) {
2555
+ var isOverridenMultiAssets = overriddenAsset && !isTMultiLocation(overriddenAsset);
2556
+ var feeAssetIndex = isOverridenMultiAssets ? overriddenAsset.findIndex(function (asset) {
2560
2557
  return asset.isFeeAsset;
2561
2558
  }) : undefined;
2562
- return _objectSpread2(_objectSpread2(_defineProperty({}, isMultiAsset ? 'assets' : 'asset', currencySelection), isMultiAsset && {
2559
+ return _objectSpread2(_objectSpread2(_defineProperty({}, isOverridenMultiAssets ? 'assets' : 'asset', currencySelection), isOverridenMultiAssets && {
2563
2560
  fee_item: feeAssetIndex
2564
2561
  }), {}, {
2565
2562
  dest: addressSelection,
@@ -2599,10 +2596,10 @@ var XTokensTransferImpl = /*#__PURE__*/function () {
2599
2596
  var isAssetHubDest = destination === 'AssetHubPolkadot' || destination === 'AssetHubKusama';
2600
2597
  var isAstarOrShidenToRelay = scenario === 'ParaToRelay' && (origin === 'Astar' || origin === 'Shiden');
2601
2598
  var isTuring = origin === 'Turing';
2602
- var isMultiAsset = overriddenAsset && !isTMultiLocation(overriddenAsset);
2603
- var shouldUseMultiasset = isTuring || isAstarOrShidenToRelay || isAssetHubDest && !isBifrostOrigin || !!isMultiAsset;
2599
+ var isOverridenMultiAssets = overriddenAsset && !isTMultiLocation(overriddenAsset);
2600
+ var shouldUseMultiasset = isTuring || isAstarOrShidenToRelay || isAssetHubDest && !isBifrostOrigin || !!isOverridenMultiAssets;
2604
2601
  var modifiedCurrencySelection = getCurrencySelection(input, shouldUseMultiasset, currencySelection);
2605
- var section = shouldUseMultiasset ? isMultiAsset ? 'transfer_multiassets' : 'transfer_multiasset' : 'transfer';
2602
+ var section = shouldUseMultiasset ? isOverridenMultiAssets ? 'transfer_multiassets' : 'transfer_multiasset' : 'transfer';
2606
2603
  var parameters = getXTokensParameters(shouldUseMultiasset, modifiedCurrencySelection, addressSelection, asset.amount, fees, overriddenAsset);
2607
2604
  var call = {
2608
2605
  module: pallet !== null && pallet !== void 0 ? pallet : 'XTokens',
@@ -4820,12 +4817,12 @@ var ParachainNode = /*#__PURE__*/function () {
4820
4817
  header: this.createPolkadotXcmHeader(scenario, versionOrDefault, destination, paraId),
4821
4818
  addressSelection: generateAddressPayload(api, scenario, 'PolkadotXcm', address, versionOrDefault, paraId),
4822
4819
  address: address,
4823
- currencySelection: this.createCurrencySpec(asset.amount, scenario, versionOrDefault, asset, overriddenAsset),
4820
+ currencySelection: this.createCurrencySpec(asset.amount, scenario, versionOrDefault, asset),
4821
+ overriddenAsset: overriddenAsset,
4824
4822
  asset: asset,
4825
4823
  scenario: scenario,
4826
4824
  destination: destination,
4827
4825
  paraIdTo: paraId,
4828
- overriddenAsset: overriddenAsset,
4829
4826
  version: version,
4830
4827
  senderAddress: senderAddress,
4831
4828
  pallet: pallet,
@@ -4872,8 +4869,11 @@ var ParachainNode = /*#__PURE__*/function () {
4872
4869
  }
4873
4870
  }, {
4874
4871
  key: "createCurrencySpec",
4875
- value: function createCurrencySpec$1(amount, scenario, version, _asset, overridedMultiLocation) {
4876
- return createCurrencySpec(amount, version, scenario === 'ParaToRelay' ? Parents.ONE : Parents.ZERO, overridedMultiLocation);
4872
+ value: function createCurrencySpec(amount, scenario, version, _asset) {
4873
+ return createVersionedMultiAssets(version, amount, {
4874
+ parents: scenario === 'ParaToRelay' ? Parents.ONE : Parents.ZERO,
4875
+ interior: 'Here'
4876
+ });
4877
4877
  }
4878
4878
  }, {
4879
4879
  key: "createPolkadotXcmHeader",
@@ -5045,12 +5045,18 @@ var PolkadotXCMTransferImpl = /*#__PURE__*/function () {
5045
5045
  value: function transferPolkadotXCM(_ref, section) {
5046
5046
  var api = _ref.api,
5047
5047
  header = _ref.header,
5048
+ asset = _ref.asset,
5048
5049
  addressSelection = _ref.addressSelection,
5049
5050
  currencySelection = _ref.currencySelection,
5050
5051
  overriddenAsset = _ref.overriddenAsset,
5051
5052
  pallet = _ref.pallet,
5052
5053
  method = _ref.method;
5053
5054
  var fees = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
5055
+ var _extractVersionFromHe = extractVersionFromHeader(currencySelection),
5056
+ _extractVersionFromHe2 = _slicedToArray(_extractVersionFromHe, 2),
5057
+ version = _extractVersionFromHe2[0],
5058
+ multiAssets = _extractVersionFromHe2[1];
5059
+ var resolvedMultiAssets = addXcmVersionHeader(maybeOverrideMultiAssets(version, asset.amount, multiAssets, overriddenAsset), version);
5054
5060
  var feeAssetIndex = overriddenAsset === undefined || isTMultiLocation(overriddenAsset) ? DEFAULT_FEE_ASSET : overriddenAsset.findIndex(function (asset) {
5055
5061
  return asset.isFeeAsset;
5056
5062
  });
@@ -5060,7 +5066,7 @@ var PolkadotXCMTransferImpl = /*#__PURE__*/function () {
5060
5066
  parameters: _objectSpread2({
5061
5067
  dest: header,
5062
5068
  beneficiary: addressSelection,
5063
- assets: currencySelection,
5069
+ assets: resolvedMultiAssets,
5064
5070
  fee_asset_item: feeAssetIndex
5065
5071
  }, fees !== undefined ? {
5066
5072
  weight_limit: fees
@@ -5088,13 +5094,14 @@ var AssetHubKusama$1 = /*#__PURE__*/function (_ParachainNode) {
5088
5094
  if (destination === 'AssetHubPolkadot') {
5089
5095
  return Promise.resolve(getNode('AssetHubPolkadot').handleBridgeTransfer(input, 'Polkadot'));
5090
5096
  }
5091
- if (scenario === 'ParaToPara' && asset.symbol === 'KSM' && !isForeignAsset(asset)) {
5097
+ var isSystemNode = !isTMultiLocation(destination) && SYSTEM_NODES_KUSAMA.includes(destination);
5098
+ if (scenario === 'ParaToPara' && asset.symbol === 'KSM' && !isForeignAsset(asset) && !isSystemNode) {
5092
5099
  throw new ScenarioNotSupportedError(this.node, scenario, 'Para to Para scenarios for KSM transfer from AssetHub are not supported, you have to transfer KSM to Relay chain and transfer to destination chain from Relay chain.');
5093
5100
  }
5094
5101
  if (scenario === 'ParaToPara' && asset.symbol === 'DOT' && !isForeignAsset(asset)) {
5095
5102
  throw new ScenarioNotSupportedError(this.node, scenario, 'Bridged DOT cannot currently be transfered from AssetHubKusama, if you are sending different DOT asset, please specify {id: <DOTID>}.');
5096
5103
  }
5097
- var section = scenario === 'ParaToPara' ? 'limited_reserve_transfer_assets' : 'limited_teleport_assets';
5104
+ var section = scenario === 'ParaToPara' && !isSystemNode ? 'limited_reserve_transfer_assets' : 'limited_teleport_assets';
5098
5105
  return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(input, section, 'Unlimited'));
5099
5106
  }
5100
5107
  }, {
@@ -5107,8 +5114,8 @@ var AssetHubKusama$1 = /*#__PURE__*/function (_ParachainNode) {
5107
5114
  }
5108
5115
  }, {
5109
5116
  key: "createCurrencySpec",
5110
- value: function createCurrencySpec(amount, scenario, version, asset, overridedMultiLocation) {
5111
- return getNode('AssetHubPolkadot').createCurrencySpec(amount, scenario, version, asset, overridedMultiLocation);
5117
+ value: function createCurrencySpec(amount, scenario, version, asset) {
5118
+ return getNode('AssetHubPolkadot').createCurrencySpec(amount, scenario, version, asset);
5112
5119
  }
5113
5120
  }]);
5114
5121
  }(ParachainNode);
@@ -5192,16 +5199,26 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5192
5199
  value: function handleBridgeTransfer(input, targetChain) {
5193
5200
  var _input$asset$symbol, _input$asset$symbol2, _input$asset$symbol3, _input$asset$symbol4;
5194
5201
  if (targetChain === 'Kusama' && ((_input$asset$symbol = input.asset.symbol) === null || _input$asset$symbol === void 0 ? void 0 : _input$asset$symbol.toUpperCase()) === 'KSM' || targetChain === 'Polkadot' && ((_input$asset$symbol2 = input.asset.symbol) === null || _input$asset$symbol2 === void 0 ? void 0 : _input$asset$symbol2.toUpperCase()) === 'DOT') {
5202
+ var overriddenVersion = Version.V4;
5203
+ var customMultiLocation = {
5204
+ parents: Parents.TWO,
5205
+ interior: {
5206
+ X1: [{
5207
+ GlobalConsensus: targetChain
5208
+ }]
5209
+ }
5210
+ };
5195
5211
  var modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
5196
- header: createBridgePolkadotXcmDest(Version.V4, targetChain, input.destination, input.paraIdTo),
5212
+ header: createBridgePolkadotXcmDest(overriddenVersion, targetChain, input.destination, input.paraIdTo),
5197
5213
  addressSelection: generateAddressMultiLocationV4(input.api, input.address),
5198
- currencySelection: createBridgeCurrencySpec(input.asset.amount, targetChain)
5214
+ currencySelection: createVersionedMultiAssets(overriddenVersion, input.asset.amount, customMultiLocation)
5199
5215
  });
5200
5216
  return PolkadotXCMTransferImpl.transferPolkadotXCM(modifiedInput, 'transfer_assets', 'Unlimited');
5201
5217
  } else if (targetChain === 'Polkadot' && ((_input$asset$symbol3 = input.asset.symbol) === null || _input$asset$symbol3 === void 0 ? void 0 : _input$asset$symbol3.toUpperCase()) === 'KSM' || targetChain === 'Kusama' && ((_input$asset$symbol4 = input.asset.symbol) === null || _input$asset$symbol4 === void 0 ? void 0 : _input$asset$symbol4.toUpperCase()) === 'DOT') {
5218
+ var _overriddenVersion = Version.V3;
5202
5219
  var _modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
5203
- header: createBridgePolkadotXcmDest(Version.V3, targetChain, input.destination, input.paraIdTo),
5204
- currencySelection: createCurrencySpec(input.asset.amount, Version.V3, Parents.ONE, input.overriddenAsset)
5220
+ header: createBridgePolkadotXcmDest(_overriddenVersion, targetChain, input.destination, input.paraIdTo),
5221
+ currencySelection: createVersionedMultiAssets(_overriddenVersion, input.asset.amount, DOT_MULTILOCATION)
5205
5222
  });
5206
5223
  return PolkadotXCMTransferImpl.transferPolkadotXCM(_modifiedInput, 'limited_reserve_transfer_assets', 'Unlimited');
5207
5224
  }
@@ -5228,7 +5245,7 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5228
5245
  var modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
5229
5246
  header: createPolkadotXcmHeader(scenario, this.version, destination, paraIdTo, ETHEREUM_JUNCTION, Parents.TWO),
5230
5247
  addressSelection: generateAddressPayload(api, scenario, 'PolkadotXcm', address, this.version, paraIdTo),
5231
- currencySelection: createCurrencySpec(input.asset.amount, Version.V3, Parents.TWO, asset.multiLocation)
5248
+ currencySelection: createVersionedMultiAssets(Version.V3, asset.amount, asset.multiLocation)
5232
5249
  });
5233
5250
  return PolkadotXCMTransferImpl.transferPolkadotXCM(modifiedInput, 'transfer_assets', 'Unlimited');
5234
5251
  }
@@ -5238,7 +5255,6 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5238
5255
  var api = input.api,
5239
5256
  address = input.address,
5240
5257
  asset = input.asset,
5241
- overriddenAsset = input.overriddenAsset,
5242
5258
  scenario = input.scenario,
5243
5259
  destination = input.destination,
5244
5260
  paraIdTo = input.paraIdTo;
@@ -5255,7 +5271,7 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5255
5271
  var modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
5256
5272
  header: this.createPolkadotXcmHeader(scenario, version, destination, paraId),
5257
5273
  addressSelection: generateAddressPayload(api, scenario, 'PolkadotXcm', address, version, paraId),
5258
- currencySelection: this.createCurrencySpec(asset.amount, scenario, version, asset, overriddenAsset !== null && overriddenAsset !== void 0 ? overriddenAsset : customMultiLocation)
5274
+ currencySelection: createVersionedMultiAssets(version, asset.amount, customMultiLocation)
5259
5275
  });
5260
5276
  return PolkadotXCMTransferImpl.transferPolkadotXCM(modifiedInput, 'limited_teleport_assets', 'Unlimited');
5261
5277
  }
@@ -5266,7 +5282,6 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5266
5282
  var asset = input.asset,
5267
5283
  destination = input.destination,
5268
5284
  paraIdTo = input.paraIdTo,
5269
- overriddenAsset = input.overriddenAsset,
5270
5285
  scenario = input.scenario,
5271
5286
  api = input.api,
5272
5287
  version = input.version,
@@ -5277,13 +5292,13 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5277
5292
  return _objectSpread2(_objectSpread2({}, input), {}, {
5278
5293
  header: this.createPolkadotXcmHeader(scenario, versionOrDefault, destination, paraIdTo),
5279
5294
  addressSelection: generateAddressPayload(api, scenario, 'PolkadotXcm', address, versionOrDefault, paraIdTo),
5280
- currencySelection: this.createCurrencySpec(asset.amount, scenario, versionOrDefault, asset, overriddenAsset)
5295
+ currencySelection: this.createCurrencySpec(asset.amount, scenario, versionOrDefault, asset)
5281
5296
  });
5282
5297
  }
5283
5298
  if ((destination === 'Hydration' || destination === 'Polimec' || destination === 'Moonbeam' || destination === 'BifrostPolkadot') && asset.symbol === 'DOT') {
5284
5299
  var _versionOrDefault = version !== null && version !== void 0 ? version : this.version;
5285
5300
  return _objectSpread2(_objectSpread2({}, input), {}, {
5286
- currencySelection: _superPropGet(AssetHubPolkadot, "createCurrencySpec", this, 3)([asset.amount, 'ParaToRelay', _versionOrDefault, asset, overriddenAsset])
5301
+ currencySelection: createVersionedMultiAssets(_versionOrDefault, asset.amount, DOT_MULTILOCATION)
5287
5302
  });
5288
5303
  }
5289
5304
  return input;
@@ -5291,8 +5306,9 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5291
5306
  }, {
5292
5307
  key: "getSection",
5293
5308
  value: function getSection(scenario, destination) {
5309
+ var isSystemNode = !isTMultiLocation(destination) && SYSTEM_NODES_POLKADOT.includes(destination);
5294
5310
  if (destination === 'Polimec' || destination === 'Moonbeam') return 'transfer_assets';
5295
- return scenario === 'ParaToPara' ? 'limited_reserve_transfer_assets' : 'limited_teleport_assets';
5311
+ return scenario === 'ParaToPara' && !isSystemNode ? 'limited_reserve_transfer_assets' : 'limited_teleport_assets';
5296
5312
  }
5297
5313
  }, {
5298
5314
  key: "transferPolkadotXCM",
@@ -5318,7 +5334,8 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5318
5334
  if (destination === 'BifrostPolkadot' && isEthereumAsset) {
5319
5335
  return Promise.resolve(this.handleBifrostEthTransfer(input));
5320
5336
  }
5321
- if (scenario === 'ParaToPara' && asset.symbol === 'DOT' && !isForeignAsset(asset) && destination !== 'Hydration' && destination !== 'Polimec' && destination !== 'Moonbeam' && destination !== 'BifrostPolkadot') {
5337
+ var isSystemNode = !isTMultiLocation(destination) && SYSTEM_NODES_POLKADOT.includes(destination);
5338
+ if (scenario === 'ParaToPara' && asset.symbol === 'DOT' && !isForeignAsset(asset) && destination !== 'Hydration' && destination !== 'Polimec' && destination !== 'Moonbeam' && destination !== 'BifrostPolkadot' && destination !== 'PeoplePolkadot' && !isSystemNode) {
5322
5339
  throw new ScenarioNotSupportedError(this.node, scenario, 'Para to Para scenarios for DOT transfer from AssetHub are not supported, you have to transfer DOT to Relay chain and transfer to destination chain from Relay chain.');
5323
5340
  }
5324
5341
  if (scenario === 'ParaToPara' && asset.symbol === 'KSM' && !isForeignAsset(asset)) {
@@ -5338,18 +5355,20 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5338
5355
  }
5339
5356
  }, {
5340
5357
  key: "createCurrencySpec",
5341
- value: function createCurrencySpec$1(amount, scenario, version, asset, overridedMultiLocation) {
5358
+ value: function createCurrencySpec(amount, scenario, version, asset) {
5342
5359
  if (scenario === 'ParaToPara') {
5343
- var interior = {
5344
- X2: [{
5345
- PalletInstance: 50
5346
- }, {
5347
- // TODO: Handle missing assedId
5348
- GeneralIndex: asset && isForeignAsset(asset) && asset.assetId ? asset.assetId : 0
5349
- }]
5350
- };
5351
- var multiLocation = overridedMultiLocation !== undefined ? overridedMultiLocation : asset && isForeignAsset(asset) ? asset.multiLocation : undefined;
5352
- return createCurrencySpec(amount, version, Parents.ZERO, multiLocation, interior);
5360
+ var multiLocation = asset ? asset.multiLocation : undefined;
5361
+ return createVersionedMultiAssets(version, amount, multiLocation !== null && multiLocation !== void 0 ? multiLocation : {
5362
+ parents: Parents.ZERO,
5363
+ interior: {
5364
+ X2: [{
5365
+ PalletInstance: 50
5366
+ }, {
5367
+ // TODO: Handle missing assedId
5368
+ GeneralIndex: asset && isForeignAsset(asset) && asset.assetId ? asset.assetId : 0
5369
+ }]
5370
+ }
5371
+ });
5353
5372
  } else {
5354
5373
  return _superPropGet(AssetHubPolkadot, "createCurrencySpec", this, 3)([amount, scenario, version, asset]);
5355
5374
  }
@@ -5495,16 +5514,18 @@ var BifrostPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
5495
5514
  key: "transferToAssetHub",
5496
5515
  value: function transferToAssetHub(input) {
5497
5516
  var _getAssetId;
5498
- var overriddenAsset = input.overriddenAsset,
5499
- asset = input.asset;
5517
+ var asset = input.asset;
5500
5518
  return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(_objectSpread2(_objectSpread2({}, input), {}, {
5501
- currencySelection: createCurrencySpec(asset.amount, this.version, asset.symbol === 'DOT' ? Parents.ONE : Parents.TWO, overriddenAsset, asset.symbol === 'WETH' ? {
5502
- X2: [ETHEREUM_JUNCTION, {
5503
- AccountKey20: {
5504
- key: (_getAssetId = getAssetId('Ethereum', 'WETH')) !== null && _getAssetId !== void 0 ? _getAssetId : ''
5505
- }
5506
- }]
5507
- } : undefined)
5519
+ currencySelection: createVersionedMultiAssets(this.version, asset.amount, {
5520
+ parents: asset.symbol === 'DOT' ? Parents.ONE : Parents.TWO,
5521
+ interior: asset.symbol === 'WETH' ? {
5522
+ X2: [ETHEREUM_JUNCTION, {
5523
+ AccountKey20: {
5524
+ key: (_getAssetId = getAssetId('Ethereum', 'WETH')) !== null && _getAssetId !== void 0 ? _getAssetId : ''
5525
+ }
5526
+ }]
5527
+ } : 'Here'
5528
+ })
5508
5529
  }), 'transfer_assets', 'Unlimited'));
5509
5530
  }
5510
5531
  }, {
@@ -5771,16 +5792,18 @@ var Crab$1 = /*#__PURE__*/function (_ParachainNode) {
5771
5792
  }
5772
5793
  }, {
5773
5794
  key: "createCurrencySpec",
5774
- value: function createCurrencySpec$1(amount, scenario, version, _asset, overridedMultiLocation) {
5795
+ value: function createCurrencySpec(amount, scenario, version, _asset) {
5775
5796
  if (scenario === 'ParaToPara') {
5776
- var interior = {
5777
- X1: {
5778
- PalletInstance: 5
5797
+ return createVersionedMultiAssets(version, amount, {
5798
+ parents: Parents.ZERO,
5799
+ interior: {
5800
+ X1: {
5801
+ PalletInstance: 5
5802
+ }
5779
5803
  }
5780
- };
5781
- return createCurrencySpec(amount, version, Parents.ZERO, overridedMultiLocation, interior);
5804
+ });
5782
5805
  } else {
5783
- return _superPropGet(Crab, "createCurrencySpec", this, 3)([amount, scenario, version, undefined, overridedMultiLocation]);
5806
+ return _superPropGet(Crab, "createCurrencySpec", this, 3)([amount, scenario, version]);
5784
5807
  }
5785
5808
  }
5786
5809
  }]);
@@ -6165,8 +6188,8 @@ var Moonbeam$1 = /*#__PURE__*/function (_ParachainNode) {
6165
6188
  }
6166
6189
  _inherits(Moonbeam, _ParachainNode);
6167
6190
  return _createClass(Moonbeam, [{
6168
- key: "getJunctions",
6169
- value: function getJunctions(asset, scenario) {
6191
+ key: "getMultiLocation",
6192
+ value: function getMultiLocation(asset, scenario) {
6170
6193
  if (scenario === 'ParaToRelay') return DOT_MULTILOCATION;
6171
6194
  if (asset.symbol === this.getNativeAssetSymbol()) return {
6172
6195
  parents: Parents.ZERO,
@@ -6187,11 +6210,10 @@ var Moonbeam$1 = /*#__PURE__*/function (_ParachainNode) {
6187
6210
  var asset = input.asset,
6188
6211
  scenario = input.scenario,
6189
6212
  _input$version = input.version,
6190
- version = _input$version === void 0 ? this.version : _input$version,
6191
- overriddenAsset = input.overriddenAsset;
6192
- var multiLocation = this.getJunctions(asset, scenario);
6213
+ version = _input$version === void 0 ? this.version : _input$version;
6214
+ var multiLocation = this.getMultiLocation(asset, scenario);
6193
6215
  return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(_objectSpread2(_objectSpread2({}, input), {}, {
6194
- currencySelection: createCurrencySpec(asset.amount, version, multiLocation.parents, overriddenAsset, multiLocation.interior)
6216
+ currencySelection: createVersionedMultiAssets(version, asset.amount, multiLocation)
6195
6217
  }), 'transfer_assets', 'Unlimited'));
6196
6218
  }
6197
6219
  }, {
@@ -6212,8 +6234,8 @@ var Moonriver$1 = /*#__PURE__*/function (_ParachainNode) {
6212
6234
  }
6213
6235
  _inherits(Moonriver, _ParachainNode);
6214
6236
  return _createClass(Moonriver, [{
6215
- key: "getJunctions",
6216
- value: function getJunctions(asset, scenario) {
6237
+ key: "getMultiLocation",
6238
+ value: function getMultiLocation(asset, scenario) {
6217
6239
  if (scenario === 'ParaToRelay') return DOT_MULTILOCATION;
6218
6240
  if (asset.symbol === this.getNativeAssetSymbol()) return {
6219
6241
  parents: Parents.ZERO,
@@ -6234,11 +6256,10 @@ var Moonriver$1 = /*#__PURE__*/function (_ParachainNode) {
6234
6256
  var asset = input.asset,
6235
6257
  scenario = input.scenario,
6236
6258
  _input$version = input.version,
6237
- version = _input$version === void 0 ? this.version : _input$version,
6238
- overriddenAsset = input.overriddenAsset;
6239
- var multiLocation = this.getJunctions(asset, scenario);
6259
+ version = _input$version === void 0 ? this.version : _input$version;
6260
+ var multiLocation = this.getMultiLocation(asset, scenario);
6240
6261
  return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(_objectSpread2(_objectSpread2({}, input), {}, {
6241
- currencySelection: createCurrencySpec(asset.amount, version, multiLocation.parents, overriddenAsset, multiLocation.interior)
6262
+ currencySelection: createVersionedMultiAssets(version, asset.amount, multiLocation)
6242
6263
  }), 'transfer_assets', 'Unlimited'));
6243
6264
  }
6244
6265
  }, {
@@ -6529,7 +6550,12 @@ var XTransferTransferImpl = /*#__PURE__*/function () {
6529
6550
  if (isMultiLocationDestination) {
6530
6551
  throw new Error('Multilocation destinations are not supported for specific transfer you are trying to create. In special cases such as xTokens or xTransfer pallet try using address multilocation instead (for both destination and address in same multilocation set (eg. X2 - Parachain, Address). For further assistance please open issue in our repository.');
6531
6552
  }
6532
- var currencySpec = getCurrency(asset.amount, Version.V1, Parents.ZERO, overriddenAsset)[0];
6553
+ var version = Version.V1;
6554
+ var multiAssets = [createMultiAsset(version, asset.amount, {
6555
+ parents: Parents.ZERO,
6556
+ interior: 'Here'
6557
+ })];
6558
+ var resolvedMultiAssets = maybeOverrideMultiAssets(version, asset.amount, multiAssets, overriddenAsset);
6533
6559
  var dest = getDestination(input);
6534
6560
  var section = 'transfer';
6535
6561
  var destWeight = determineDestWeight(destination);
@@ -6537,7 +6563,7 @@ var XTransferTransferImpl = /*#__PURE__*/function () {
6537
6563
  module: pallet !== null && pallet !== void 0 ? pallet : 'XTransfer',
6538
6564
  section: method !== null && method !== void 0 ? method : section,
6539
6565
  parameters: {
6540
- asset: currencySpec,
6566
+ asset: resolvedMultiAssets[0],
6541
6567
  dest: dest,
6542
6568
  dest_weight: destWeight
6543
6569
  }
@@ -7001,14 +7027,7 @@ var Polimec = {
7001
7027
  ],
7002
7028
  otherAssets: [
7003
7029
  {
7004
- assetId: "10",
7005
- symbol: "DOT",
7006
- decimals: 10,
7007
- existentialDeposit: "100000000"
7008
- },
7009
- {
7010
- assetId: "1984",
7011
- symbol: "USDt",
7030
+ symbol: "USDC",
7012
7031
  decimals: 6,
7013
7032
  multiLocation: {
7014
7033
  parents: 1,
@@ -7021,7 +7040,7 @@ var Polimec = {
7021
7040
  PalletInstance: 50
7022
7041
  },
7023
7042
  {
7024
- GeneralIndex: 1984
7043
+ GeneralIndex: 1337
7025
7044
  }
7026
7045
  ]
7027
7046
  }
@@ -7029,8 +7048,7 @@ var Polimec = {
7029
7048
  existentialDeposit: "70000"
7030
7049
  },
7031
7050
  {
7032
- assetId: "1337",
7033
- symbol: "USDC",
7051
+ symbol: "USDt",
7034
7052
  decimals: 6,
7035
7053
  multiLocation: {
7036
7054
  parents: 1,
@@ -7043,12 +7061,23 @@ var Polimec = {
7043
7061
  PalletInstance: 50
7044
7062
  },
7045
7063
  {
7046
- GeneralIndex: 1337
7064
+ GeneralIndex: 1984
7047
7065
  }
7048
7066
  ]
7049
7067
  }
7050
7068
  },
7051
7069
  existentialDeposit: "70000"
7070
+ },
7071
+ {
7072
+ symbol: "DOT",
7073
+ decimals: 10,
7074
+ multiLocation: {
7075
+ parents: 1,
7076
+ interior: {
7077
+ Here: null
7078
+ }
7079
+ },
7080
+ existentialDeposit: "100000000"
7052
7081
  }
7053
7082
  ]
7054
7083
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paraspell/sdk-core",
3
- "version": "8.6.1",
3
+ "version": "8.6.2",
4
4
  "description": "SDK core for ParaSpell XCM/XCMP tool for developers",
5
5
  "repository": {
6
6
  "type": "git",
@@ -36,7 +36,7 @@
36
36
  "@rollup/plugin-json": "^6.1.0",
37
37
  "@rollup/plugin-typescript": "^12.1.2",
38
38
  "@vitest/coverage-v8": "^3.0.7",
39
- "axios": "^1.8.1",
39
+ "axios": "^1.8.2",
40
40
  "dotenv": "^16.4.7",
41
41
  "prettier": "^3.5.2",
42
42
  "rollup": "^4.34.8",