@paraspell/sdk-core 10.11.1 → 10.11.3

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
@@ -6192,6 +6192,140 @@ var send = /*#__PURE__*/function () {
6192
6192
  };
6193
6193
  }();
6194
6194
 
6195
+ var createTypeAndThenCall = function createTypeAndThenCall(chain, destChain, reserveChain, input, reserveFee) {
6196
+ var api = input.api,
6197
+ destination = input.destination,
6198
+ asset = input.asset,
6199
+ version = input.version,
6200
+ address = input.address,
6201
+ paraIdTo = input.paraIdTo;
6202
+ assertHasLocation(asset);
6203
+ var depositInstruction = {
6204
+ DepositAsset: {
6205
+ assets: {
6206
+ Wild: 'All'
6207
+ },
6208
+ beneficiary: createBeneficiaryLocation({
6209
+ api: api,
6210
+ address: address,
6211
+ version: version
6212
+ })
6213
+ }
6214
+ };
6215
+ var customXcm = chain === reserveChain || destChain === reserveChain ? [depositInstruction] : [{
6216
+ DepositReserveAsset: {
6217
+ assets: {
6218
+ Wild: 'All'
6219
+ },
6220
+ dest: createDestination(version, chain, destination, paraIdTo),
6221
+ xcm: [{
6222
+ BuyExecution: {
6223
+ fees: createMultiAsset(version, reserveFee, asset.multiLocation),
6224
+ weight_limit: 'Unlimited'
6225
+ }
6226
+ }, depositInstruction]
6227
+ }
6228
+ }];
6229
+ var finalDest = chain === reserveChain ? destChain : reserveChain;
6230
+ var dest = createVersionedDestination(version, chain, finalDest, getParaId(finalDest));
6231
+ var multiAsset = createMultiAsset(version, asset.amount, asset.multiLocation);
6232
+ var assets = addXcmVersionHeader([multiAsset], version);
6233
+ var customXcmVersioned = addXcmVersionHeader(customXcm, version);
6234
+ var feesLocation = addXcmVersionHeader(multiAsset.id, version);
6235
+ var reserve = chain === reserveChain ? 'LocalReserve' : 'DestinationReserve';
6236
+ return {
6237
+ module: 'PolkadotXcm',
6238
+ method: 'transfer_assets_using_type_and_then',
6239
+ parameters: {
6240
+ dest: dest,
6241
+ assets: assets,
6242
+ assets_transfer_type: reserve,
6243
+ remote_fees_id: feesLocation,
6244
+ fees_transfer_type: reserve,
6245
+ custom_xcm_on_dest: customXcmVersioned,
6246
+ weight_limit: 'Unlimited'
6247
+ }
6248
+ };
6249
+ };
6250
+
6251
+ var validateHops$1 = function validateHops(hops) {
6252
+ var _iterator = _createForOfIteratorHelper(hops),
6253
+ _step;
6254
+ try {
6255
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
6256
+ var hop = _step.value;
6257
+ if (!hop.result.success) {
6258
+ throw new DryRunFailedError("Dry run failed on an intermediate hop (".concat(hop.chain, "). Reason: ").concat(hop.result.failureReason || 'Unknown'));
6259
+ }
6260
+ }
6261
+ } catch (err) {
6262
+ _iterator.e(err);
6263
+ } finally {
6264
+ _iterator.f();
6265
+ }
6266
+ };
6267
+ var getReserveFeeFromHops$1 = function getReserveFeeFromHops(hops) {
6268
+ if (!hops || hops.length === 0 || !hops[0].result.success) {
6269
+ return MIN_FEE$2;
6270
+ }
6271
+ return hops[0].result.fee;
6272
+ };
6273
+ var MIN_FEE$2 = 1000n;
6274
+ var FEE_PADDING_PERCENTAGE$2 = 40;
6275
+ var createTypeAndThenTransfer$2 = /*#__PURE__*/function () {
6276
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(chain, input) {
6277
+ var api, address, paraIdTo, senderAddress, currency, asset, destChain, reserveChain, call, dryRunResult, reserveFeeEstimate, reserveFee;
6278
+ return _regenerator().w(function (_context) {
6279
+ while (1) switch (_context.n) {
6280
+ case 0:
6281
+ api = input.api, address = input.address, paraIdTo = input.paraIdTo, senderAddress = input.senderAddress, currency = input.currency, asset = input.asset;
6282
+ if (senderAddress) {
6283
+ _context.n = 1;
6284
+ break;
6285
+ }
6286
+ throw new InvalidParameterError('Please provide senderAddress');
6287
+ case 1:
6288
+ assertHasLocation(asset);
6289
+ assertAddressIsString(address);
6290
+ destChain = getTNode(paraIdTo, getRelayChainOf(chain).toLowerCase());
6291
+ reserveChain = sdkCommon.isRelayChain(destChain) ? destChain : getAssetReserveChain(chain, chain, asset.multiLocation);
6292
+ call = createTypeAndThenCall(chain, destChain, reserveChain, input, MIN_FEE$2);
6293
+ if (!(chain === reserveChain || destChain === reserveChain)) {
6294
+ _context.n = 2;
6295
+ break;
6296
+ }
6297
+ return _context.a(2, call);
6298
+ case 2:
6299
+ _context.n = 3;
6300
+ return dryRunInternal({
6301
+ api: api,
6302
+ tx: api.callTxMethod(call),
6303
+ origin: chain,
6304
+ destination: destChain,
6305
+ senderAddress: senderAddress,
6306
+ address: address,
6307
+ currency: currency
6308
+ });
6309
+ case 3:
6310
+ dryRunResult = _context.v;
6311
+ if (dryRunResult.origin.success) {
6312
+ _context.n = 4;
6313
+ break;
6314
+ }
6315
+ throw new DryRunFailedError(dryRunResult.failureReason);
6316
+ case 4:
6317
+ validateHops$1(dryRunResult.hops);
6318
+ reserveFeeEstimate = getReserveFeeFromHops$1(dryRunResult.hops);
6319
+ reserveFee = padFeeBy(reserveFeeEstimate, FEE_PADDING_PERCENTAGE$2);
6320
+ return _context.a(2, createTypeAndThenCall(chain, destChain, reserveChain, input, reserveFee));
6321
+ }
6322
+ }, _callee);
6323
+ }));
6324
+ return function createTypeAndThenTransfer(_x, _x2) {
6325
+ return _ref.apply(this, arguments);
6326
+ };
6327
+ }();
6328
+
6195
6329
  var attemptDryRunFee = /*#__PURE__*/function () {
6196
6330
  var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options) {
6197
6331
  var origin, currency, builder, reductionPcts, lastReduction, result, _i, _reductionPcts, percentage, modifiedBuilder, _t, _t2, _t3, _t4, _t5, _t6, _t7;
@@ -8244,36 +8378,6 @@ var Acala = /*#__PURE__*/function (_ParachainNode) {
8244
8378
  }]);
8245
8379
  }(ParachainNode);
8246
8380
 
8247
- var transferPolkadotXcm = function transferPolkadotXcm(_ref, method) {
8248
- var api = _ref.api,
8249
- destLocation = _ref.destLocation,
8250
- asset = _ref.asset,
8251
- beneficiaryLocation = _ref.beneficiaryLocation,
8252
- multiAsset = _ref.multiAsset,
8253
- overriddenAsset = _ref.overriddenAsset,
8254
- pallet = _ref.pallet,
8255
- version = _ref.version,
8256
- methodOverride = _ref.method;
8257
- var fees = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
8258
- var resolvedMultiAssets = maybeOverrideMultiAssets(version, asset.amount, [multiAsset], overriddenAsset);
8259
- var feeAssetIndex = overriddenAsset === undefined || sdkCommon.isTMultiLocation(overriddenAsset) ? DEFAULT_FEE_ASSET : overriddenAsset.findIndex(function (asset) {
8260
- return asset.isFeeAsset;
8261
- });
8262
- var call = {
8263
- module: pallet !== null && pallet !== void 0 ? pallet : 'PolkadotXcm',
8264
- method: methodOverride !== null && methodOverride !== void 0 ? methodOverride : method,
8265
- parameters: _objectSpread2({
8266
- dest: addXcmVersionHeader(destLocation, version),
8267
- beneficiary: addXcmVersionHeader(beneficiaryLocation, version),
8268
- assets: addXcmVersionHeader(resolvedMultiAssets, version),
8269
- fee_asset_item: feeAssetIndex
8270
- }, fees !== undefined ? {
8271
- weight_limit: fees
8272
- } : {})
8273
- };
8274
- return Promise.resolve(api.callTxMethod(call));
8275
- };
8276
-
8277
8381
  var Ajuna = /*#__PURE__*/function (_ParachainNode) {
8278
8382
  function Ajuna() {
8279
8383
  var chain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Ajuna';
@@ -8299,9 +8403,27 @@ var Ajuna = /*#__PURE__*/function (_ParachainNode) {
8299
8403
  }
8300
8404
  }, {
8301
8405
  key: "transferPolkadotXCM",
8302
- value: function transferPolkadotXCM(input) {
8303
- return transferPolkadotXcm(input, 'transfer_assets', 'Unlimited');
8304
- }
8406
+ value: function () {
8407
+ var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(input) {
8408
+ var api, _t, _t2;
8409
+ return _regenerator().w(function (_context) {
8410
+ while (1) switch (_context.n) {
8411
+ case 0:
8412
+ api = input.api;
8413
+ _t = api;
8414
+ _context.n = 1;
8415
+ return createTypeAndThenTransfer$2(this.node, input);
8416
+ case 1:
8417
+ _t2 = _context.v;
8418
+ return _context.a(2, _t.callTxMethod.call(_t, _t2));
8419
+ }
8420
+ }, _callee, this);
8421
+ }));
8422
+ function transferPolkadotXCM(_x) {
8423
+ return _transferPolkadotXCM.apply(this, arguments);
8424
+ }
8425
+ return transferPolkadotXCM;
8426
+ }()
8305
8427
  }, {
8306
8428
  key: "canUseXTokens",
8307
8429
  value: function canUseXTokens(_ref) {
@@ -8408,6 +8530,36 @@ var Amplitude = /*#__PURE__*/function (_ParachainNode) {
8408
8530
  }]);
8409
8531
  }(ParachainNode);
8410
8532
 
8533
+ var transferPolkadotXcm = function transferPolkadotXcm(_ref, method) {
8534
+ var api = _ref.api,
8535
+ destLocation = _ref.destLocation,
8536
+ asset = _ref.asset,
8537
+ beneficiaryLocation = _ref.beneficiaryLocation,
8538
+ multiAsset = _ref.multiAsset,
8539
+ overriddenAsset = _ref.overriddenAsset,
8540
+ pallet = _ref.pallet,
8541
+ version = _ref.version,
8542
+ methodOverride = _ref.method;
8543
+ var fees = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
8544
+ var resolvedMultiAssets = maybeOverrideMultiAssets(version, asset.amount, [multiAsset], overriddenAsset);
8545
+ var feeAssetIndex = overriddenAsset === undefined || sdkCommon.isTMultiLocation(overriddenAsset) ? DEFAULT_FEE_ASSET : overriddenAsset.findIndex(function (asset) {
8546
+ return asset.isFeeAsset;
8547
+ });
8548
+ var call = {
8549
+ module: pallet !== null && pallet !== void 0 ? pallet : 'PolkadotXcm',
8550
+ method: methodOverride !== null && methodOverride !== void 0 ? methodOverride : method,
8551
+ parameters: _objectSpread2({
8552
+ dest: addXcmVersionHeader(destLocation, version),
8553
+ beneficiary: addXcmVersionHeader(beneficiaryLocation, version),
8554
+ assets: addXcmVersionHeader(resolvedMultiAssets, version),
8555
+ fee_asset_item: feeAssetIndex
8556
+ }, fees !== undefined ? {
8557
+ weight_limit: fees
8558
+ } : {})
8559
+ };
8560
+ return Promise.resolve(api.callTxMethod(call));
8561
+ };
8562
+
8411
8563
  var AssetHubKusama = /*#__PURE__*/function (_ParachainNode) {
8412
8564
  function AssetHubKusama() {
8413
8565
  _classCallCheck(this, AssetHubKusama);
@@ -8512,14 +8664,14 @@ var AssetHubPolkadot = /*#__PURE__*/function (_ParachainNode) {
8512
8664
  return _createClass(AssetHubPolkadot, [{
8513
8665
  key: "handleBridgeTransfer",
8514
8666
  value: function handleBridgeTransfer(input, targetChain) {
8515
- var _asset$symbol, _asset$symbol2, _asset$symbol3, _asset$symbol4;
8667
+ var _asset$symbol, _asset$symbol2, _asset$symbol3;
8516
8668
  var api = input.api,
8517
8669
  asset = input.asset,
8518
8670
  destination = input.destination,
8519
8671
  address = input.address,
8520
8672
  version = input.version,
8521
8673
  paraIdTo = input.paraIdTo;
8522
- if (targetChain === 'Kusama' && ((_asset$symbol = asset.symbol) === null || _asset$symbol === void 0 ? void 0 : _asset$symbol.toUpperCase()) === 'KSM' || targetChain === 'Polkadot' && ((_asset$symbol2 = asset.symbol) === null || _asset$symbol2 === void 0 ? void 0 : _asset$symbol2.toUpperCase()) === this.getNativeAssetSymbol()) {
8674
+ if (targetChain === 'Kusama' && ((_asset$symbol = asset.symbol) === null || _asset$symbol === void 0 ? void 0 : _asset$symbol.toUpperCase()) === 'KSM' || targetChain === 'Polkadot' && ((_asset$symbol2 = asset.symbol) === null || _asset$symbol2 === void 0 ? void 0 : _asset$symbol2.toUpperCase()) === 'DOT') {
8523
8675
  var modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
8524
8676
  destLocation: createBridgeDestination(targetChain, destination, paraIdTo),
8525
8677
  beneficiaryLocation: createBeneficiaryLocation({
@@ -8530,7 +8682,7 @@ var AssetHubPolkadot = /*#__PURE__*/function (_ParachainNode) {
8530
8682
  multiAsset: createMultiAsset(version, asset.amount, asset.multiLocation)
8531
8683
  });
8532
8684
  return transferPolkadotXcm(modifiedInput, 'transfer_assets', 'Unlimited');
8533
- } else if (targetChain === 'Polkadot' && ((_asset$symbol3 = asset.symbol) === null || _asset$symbol3 === void 0 ? void 0 : _asset$symbol3.toUpperCase()) === 'KSM' || targetChain === 'Kusama' && ((_asset$symbol4 = asset.symbol) === null || _asset$symbol4 === void 0 ? void 0 : _asset$symbol4.toUpperCase()) === this.getNativeAssetSymbol()) {
8685
+ } else if (targetChain === 'Polkadot' && ((_asset$symbol3 = asset.symbol) === null || _asset$symbol3 === void 0 ? void 0 : _asset$symbol3.toUpperCase()) === 'KSM' || targetChain === 'Kusama' && 'DOT') {
8534
8686
  var _modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
8535
8687
  destLocation: createBridgeDestination(targetChain, destination, paraIdTo),
8536
8688
  multiAsset: createMultiAsset(version, asset.amount, DOT_MULTILOCATION)
@@ -8693,8 +8845,7 @@ var AssetHubPolkadot = /*#__PURE__*/function (_ParachainNode) {
8693
8845
  value: function patchInput(input) {
8694
8846
  var asset = input.asset,
8695
8847
  destination = input.destination,
8696
- _input$version = input.version,
8697
- version = _input$version === void 0 ? this.version : _input$version;
8848
+ version = input.version;
8698
8849
  if ((destination === 'Hydration' || destination === 'Polimec' || destination === 'Moonbeam' || destination === 'BifrostPolkadot') && asset.symbol === this.getNativeAssetSymbol()) {
8699
8850
  return _objectSpread2(_objectSpread2({}, input), {}, {
8700
8851
  multiAsset: createMultiAsset(version, asset.amount, DOT_MULTILOCATION)
@@ -8713,7 +8864,7 @@ var AssetHubPolkadot = /*#__PURE__*/function (_ParachainNode) {
8713
8864
  key: "transferPolkadotXCM",
8714
8865
  value: function () {
8715
8866
  var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(input) {
8716
- var api, scenario, asset, destination, feeAsset, overriddenAsset, isNativeAsset, isNativeFeeAsset, isEthereumAsset, CHAINS_SUPPORT_DOT_TRANSFER, isTrusted, isDotReserveAh, method, modifiedInput, _t, _t2;
8867
+ var api, scenario, asset, destination, feeAsset, overriddenAsset, isNativeAsset, isNativeFeeAsset, isEthereumAsset, CHAINS_SUPPORT_DOT_TRANSFER, isTrusted, isDotReserveAh, method, modifiedInput, _t, _t2, _t3, _t4;
8717
8868
  return _regenerator().w(function (_context3) {
8718
8869
  while (1) switch (_context3.n) {
8719
8870
  case 0:
@@ -8793,7 +8944,18 @@ var AssetHubPolkadot = /*#__PURE__*/function (_ParachainNode) {
8793
8944
  }
8794
8945
  throw new ScenarioNotSupportedError(this.node, scenario, 'Bridged KSM cannot currently be transfered from AssetHubPolkadot, if you are sending different KSM asset, please specify {id: <KSMID>}.');
8795
8946
  case 11:
8796
- method = this.getMethod(scenario, destination);
8947
+ method = this.getMethod(scenario, destination); // Patch transfer_assets to use type_and_then transfer
8948
+ if (!(method === 'transfer_assets' && assets.isSymbolMatch(asset.symbol, assets.getRelayChainSymbol(this.node)))) {
8949
+ _context3.n = 13;
8950
+ break;
8951
+ }
8952
+ _t3 = api;
8953
+ _context3.n = 12;
8954
+ return createTypeAndThenTransfer$2(this.node, input);
8955
+ case 12:
8956
+ _t4 = _context3.v;
8957
+ return _context3.a(2, _t3.callTxMethod.call(_t3, _t4));
8958
+ case 13:
8797
8959
  modifiedInput = this.patchInput(input);
8798
8960
  return _context3.a(2, transferPolkadotXcm(modifiedInput, method, 'Unlimited'));
8799
8961
  }
@@ -9027,22 +9189,36 @@ var BifrostPolkadot = /*#__PURE__*/function (_ParachainNode) {
9027
9189
  // Handles DOT, WETH transfers to AssetHubPolkadot
9028
9190
  }, {
9029
9191
  key: "transferToAssetHub",
9030
- value: function transferToAssetHub(input) {
9031
- var _getAssetId;
9032
- var asset = input.asset;
9033
- return transferPolkadotXcm(_objectSpread2(_objectSpread2({}, input), {}, {
9034
- multiAsset: createMultiAsset(this.version, asset.amount, {
9035
- parents: asset.symbol === 'DOT' ? sdkCommon.Parents.ONE : sdkCommon.Parents.TWO,
9036
- interior: asset.symbol === 'WETH' ? {
9037
- X2: [ETHEREUM_JUNCTION, {
9038
- AccountKey20: {
9039
- key: (_getAssetId = assets.getAssetId('Ethereum', 'WETH')) !== null && _getAssetId !== void 0 ? _getAssetId : ''
9192
+ value: function () {
9193
+ var _transferToAssetHub = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(input) {
9194
+ var api, asset, _t, _t2;
9195
+ return _regenerator().w(function (_context) {
9196
+ while (1) switch (_context.n) {
9197
+ case 0:
9198
+ api = input.api, asset = input.asset;
9199
+ if (!assets.isSymbolMatch(asset.symbol, assets.getRelayChainSymbol(this.node))) {
9200
+ _context.n = 2;
9201
+ break;
9040
9202
  }
9041
- }]
9042
- } : 'Here'
9043
- })
9044
- }), 'transfer_assets', 'Unlimited');
9045
- }
9203
+ _t = api;
9204
+ _context.n = 1;
9205
+ return createTypeAndThenTransfer$2(this.node, input);
9206
+ case 1:
9207
+ _t2 = _context.v;
9208
+ return _context.a(2, _t.callTxMethod.call(_t, _t2));
9209
+ case 2:
9210
+ assertHasLocation(asset);
9211
+ return _context.a(2, transferPolkadotXcm(_objectSpread2(_objectSpread2({}, input), {}, {
9212
+ multiAsset: createMultiAsset(this.version, asset.amount, asset.multiLocation)
9213
+ }), 'transfer_assets', 'Unlimited'));
9214
+ }
9215
+ }, _callee, this);
9216
+ }));
9217
+ function transferToAssetHub(_x) {
9218
+ return _transferToAssetHub.apply(this, arguments);
9219
+ }
9220
+ return transferToAssetHub;
9221
+ }()
9046
9222
  }, {
9047
9223
  key: "transferPolkadotXCM",
9048
9224
  value: function transferPolkadotXCM(input) {
@@ -9735,11 +9911,11 @@ var Polimec = /*#__PURE__*/function (_ParachainNode) {
9735
9911
  key: "transferPolkadotXCM",
9736
9912
  value: function () {
9737
9913
  var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(input) {
9738
- var api, _input$version, version, asset, destination, scenario, _call, call;
9914
+ var api, version, asset, destination, scenario, _call, call;
9739
9915
  return _regenerator().w(function (_context) {
9740
9916
  while (1) switch (_context.n) {
9741
9917
  case 0:
9742
- api = input.api, _input$version = input.version, version = _input$version === void 0 ? this.version : _input$version, asset = input.asset, destination = input.destination, scenario = input.scenario;
9918
+ api = input.api, version = input.version, asset = input.asset, destination = input.destination, scenario = input.scenario;
9743
9919
  if (!(scenario === 'ParaToPara' && destination === 'Hydration' && asset.symbol === 'DOT')) {
9744
9920
  _context.n = 1;
9745
9921
  break;
@@ -9772,8 +9948,7 @@ var Polimec = /*#__PURE__*/function (_ParachainNode) {
9772
9948
  }, {
9773
9949
  key: "transferRelayToPara",
9774
9950
  value: function transferRelayToPara(options) {
9775
- var _options$version = options.version,
9776
- version = _options$version === void 0 ? this.version : _options$version;
9951
+ var version = options.version;
9777
9952
  var call = createTypeAndThenTransfer$1(_objectSpread2(_objectSpread2({}, options), {}, {
9778
9953
  scenario: 'RelayToPara'
9779
9954
  }), version, 'Teleport');
@@ -9860,8 +10035,7 @@ var Hydration = /*#__PURE__*/function (_ParachainNode) {
9860
10035
  value: function transferToPolimec(options) {
9861
10036
  var api = options.api,
9862
10037
  asset = options.asset,
9863
- _options$version = options.version,
9864
- version = _options$version === void 0 ? this.version : _options$version;
10038
+ version = options.version;
9865
10039
  var symbol = asset.symbol.toUpperCase();
9866
10040
  if (symbol === 'DOT') {
9867
10041
  var call = createTypeAndThenTransfer$1(options, version);
@@ -10364,20 +10538,42 @@ var Moonbeam = /*#__PURE__*/function (_ParachainNode) {
10364
10538
  }
10365
10539
  }, {
10366
10540
  key: "transferPolkadotXCM",
10367
- value: function transferPolkadotXCM(input) {
10368
- var destination = input.destination,
10369
- asset = input.asset,
10370
- scenario = input.scenario,
10371
- _input$version = input.version,
10372
- version = _input$version === void 0 ? this.version : _input$version;
10373
- if (destination === 'Ethereum') {
10374
- return this.transferToEthereum(input);
10541
+ value: function () {
10542
+ var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(input) {
10543
+ var api, destination, asset, scenario, version, multiLocation, _t, _t2;
10544
+ return _regenerator().w(function (_context) {
10545
+ while (1) switch (_context.n) {
10546
+ case 0:
10547
+ api = input.api, destination = input.destination, asset = input.asset, scenario = input.scenario, version = input.version;
10548
+ if (!(destination === 'Ethereum')) {
10549
+ _context.n = 1;
10550
+ break;
10551
+ }
10552
+ return _context.a(2, this.transferToEthereum(input));
10553
+ case 1:
10554
+ if (!assets.isSymbolMatch(asset.symbol, assets.getRelayChainSymbol(this.node))) {
10555
+ _context.n = 3;
10556
+ break;
10557
+ }
10558
+ _t = api;
10559
+ _context.n = 2;
10560
+ return createTypeAndThenTransfer$2(this.node, input);
10561
+ case 2:
10562
+ _t2 = _context.v;
10563
+ return _context.a(2, _t.callTxMethod.call(_t, _t2));
10564
+ case 3:
10565
+ multiLocation = this.getMultiLocation(asset, scenario);
10566
+ return _context.a(2, transferPolkadotXcm(_objectSpread2(_objectSpread2({}, input), {}, {
10567
+ multiAsset: createMultiAsset(version, asset.amount, multiLocation)
10568
+ }), 'transfer_assets', 'Unlimited'));
10569
+ }
10570
+ }, _callee, this);
10571
+ }));
10572
+ function transferPolkadotXCM(_x) {
10573
+ return _transferPolkadotXCM.apply(this, arguments);
10375
10574
  }
10376
- var multiLocation = this.getMultiLocation(asset, scenario);
10377
- return transferPolkadotXcm(_objectSpread2(_objectSpread2({}, input), {}, {
10378
- multiAsset: createMultiAsset(version, asset.amount, multiLocation)
10379
- }), 'transfer_assets', 'Unlimited');
10380
- }
10575
+ return transferPolkadotXCM;
10576
+ }()
10381
10577
  }, {
10382
10578
  key: "getRelayToParaOverrides",
10383
10579
  value: function getRelayToParaOverrides() {
@@ -10432,8 +10628,7 @@ var Moonriver = /*#__PURE__*/function (_ParachainNode) {
10432
10628
  value: function transferPolkadotXCM(input) {
10433
10629
  var asset = input.asset,
10434
10630
  scenario = input.scenario,
10435
- _input$version = input.version,
10436
- version = _input$version === void 0 ? this.version : _input$version;
10631
+ version = input.version;
10437
10632
  var multiLocation = this.getMultiLocation(asset, scenario);
10438
10633
  return transferPolkadotXcm(_objectSpread2(_objectSpread2({}, input), {}, {
10439
10634
  multiAsset: createMultiAsset(version, asset.amount, multiLocation)
@@ -12093,6 +12288,7 @@ exports.createDirectExecuteXcm = createDirectExecuteXcm;
12093
12288
  exports.createExecuteCall = createExecuteCall;
12094
12289
  exports.createExecuteExchangeXcm = createExecuteExchangeXcm;
12095
12290
  exports.createMultiAsset = createMultiAsset;
12291
+ exports.createTypeAndThenTransfer = createTypeAndThenTransfer$2;
12096
12292
  exports.createVersionedMultiAssets = createVersionedMultiAssets;
12097
12293
  exports.createX1Payload = createX1Payload;
12098
12294
  exports.deriveAccountId = deriveAccountId;
package/dist/index.d.ts CHANGED
@@ -2035,6 +2035,8 @@ declare const send: <TApi, TRes>(options: TSendOptions<TApi, TRes>) => Promise<T
2035
2035
 
2036
2036
  declare const transferRelayToPara: <TApi, TRes>(options: TRelayToParaOptions<TApi, TRes>) => Promise<TRes>;
2037
2037
 
2038
+ declare const createTypeAndThenTransfer: <TApi, TRes>(chain: TNodeDotKsmWithRelayChains, input: TPolkadotXCMTransferOptions<TApi, TRes>) => Promise<TSerializedApiCall>;
2039
+
2038
2040
  declare const addXcmVersionHeader: <T, V extends Version>(obj: T, version: V) => OneKey<V, T>;
2039
2041
 
2040
2042
  declare const assertToIsString: (to: TDestination, overrideMsg?: string) => asserts to is Exclude<TDestination, TMultiLocation>;
@@ -2128,5 +2130,5 @@ declare const handleToAhTeleport: <TApi, TRes>(origin: TNodePolkadotKusama, inpu
2128
2130
 
2129
2131
  declare const validateAddress: (address: TAddress, node: TNodeWithRelayChains, isDestination?: boolean) => void;
2130
2132
 
2131
- export { AssetClaimBuilder, BatchMode, BridgeHaltedError, Builder, DRY_RUN_CLIENT_TIMEOUT_MS, DryRunFailedError, ETHEREUM_JUNCTION, ETH_CHAIN_ID, GeneralBuilder, IncompatibleNodesError, InvalidAddressError, InvalidParameterError, MissingChainApiError, NoXCMSupportImplementedError, NodeNotSupportedError, PolkadotXcmError, ScenarioNotSupportedError, TX_CLIENT_TIMEOUT_MS, TransferToAhNotSupported, UnableToComputeError, XTokensError, addEthereumBridgeFees, addXcmVersionHeader, assertAddressIsString, assertHasId, assertHasLocation, assertIsForeign, assertToIsString, blake2b256, blake2b512, claimAssets, computeFeeFromDryRun, computeFeeFromDryRunPjs, convertSs58, createApiInstanceForNode, createAssetsFilter, createBaseExecuteXcm, createBeneficiaryLocXTokens, createBeneficiaryLocation, createDirectExecuteXcm, createExecuteCall, createExecuteExchangeXcm, createMultiAsset, createVersionedMultiAssets, createX1Payload, deriveAccountId, dryRun, dryRunOrigin, encodeSs58, getAssetBalance, getAssetBalanceInternal, getBalanceForeign, getBalanceForeignInternal, getBalanceNative, getBalanceNativeInternal, getBridgeStatus, getChainLocation, getChainVersion, getNode, getNodeConfig, getNodeProviders, getOriginFeeDetails, getOriginFeeDetailsInternal, getOriginXcmFee, getOriginXcmFeeEstimate, getParaEthTransferFees, getParaId, getRelayChainOf, getTNode, getTransferInfo, getTransferableAmount, getTransferableAmountInternal, getXcmFee, getXcmFeeEstimate, handleExecuteTransfer, handleSwapExecuteTransfer, handleToAhTeleport, isConfig, localizeLocation, maybeOverrideMultiAsset, maybeOverrideMultiAssets, padFee, padFeeBy, resolveModuleError, resolveParaId, reverseTransformMultiLocation, send, sortMultiAssets, transferMoonbeamEvm, transferMoonbeamToEth, transferRelayToPara, traverseXcmHops, validateAddress, verifyEdOnDestination };
2133
+ export { AssetClaimBuilder, BatchMode, BridgeHaltedError, Builder, DRY_RUN_CLIENT_TIMEOUT_MS, DryRunFailedError, ETHEREUM_JUNCTION, ETH_CHAIN_ID, GeneralBuilder, IncompatibleNodesError, InvalidAddressError, InvalidParameterError, MissingChainApiError, NoXCMSupportImplementedError, NodeNotSupportedError, PolkadotXcmError, ScenarioNotSupportedError, TX_CLIENT_TIMEOUT_MS, TransferToAhNotSupported, UnableToComputeError, XTokensError, addEthereumBridgeFees, addXcmVersionHeader, assertAddressIsString, assertHasId, assertHasLocation, assertIsForeign, assertToIsString, blake2b256, blake2b512, claimAssets, computeFeeFromDryRun, computeFeeFromDryRunPjs, convertSs58, createApiInstanceForNode, createAssetsFilter, createBaseExecuteXcm, createBeneficiaryLocXTokens, createBeneficiaryLocation, createDirectExecuteXcm, createExecuteCall, createExecuteExchangeXcm, createMultiAsset, createTypeAndThenTransfer, createVersionedMultiAssets, createX1Payload, deriveAccountId, dryRun, dryRunOrigin, encodeSs58, getAssetBalance, getAssetBalanceInternal, getBalanceForeign, getBalanceForeignInternal, getBalanceNative, getBalanceNativeInternal, getBridgeStatus, getChainLocation, getChainVersion, getNode, getNodeConfig, getNodeProviders, getOriginFeeDetails, getOriginFeeDetailsInternal, getOriginXcmFee, getOriginXcmFeeEstimate, getParaEthTransferFees, getParaId, getRelayChainOf, getTNode, getTransferInfo, getTransferableAmount, getTransferableAmountInternal, getXcmFee, getXcmFeeEstimate, handleExecuteTransfer, handleSwapExecuteTransfer, handleToAhTeleport, isConfig, localizeLocation, maybeOverrideMultiAsset, maybeOverrideMultiAssets, padFee, padFeeBy, resolveModuleError, resolveParaId, reverseTransformMultiLocation, send, sortMultiAssets, transferMoonbeamEvm, transferMoonbeamToEth, transferRelayToPara, traverseXcmHops, validateAddress, verifyEdOnDestination };
2132
2134
  export type { HopProcessParams, HopTraversalConfig, HopTraversalResult, IPolkadotApi, IPolkadotXCMTransfer, IXTokensTransfer, IXTransferTransfer, OneKey, TAddress, TApiOrUrl, TAssetClaimOptions, TAssetClaimOptionsBase, TAttemptDryRunFeeOptions, TBalanceResponse, TBatchOptions, TBifrostToken, TBridgeStatus, TBuilderConfig, TBuilderOptions, TConditionalXcmFeeDetail, TConditionalXcmFeeHopInfo, TCreateBaseSwapXcmOptions, TCreateBaseTransferXcmOptions, TCreateBeneficiaryOptions, TCreateBeneficiaryXTokensOptions, TCreateSwapXcmInternalOptions, TCreateSwapXcmOptions, TCreateTransferXcmOptions, TDestWeight, TDestXcmFeeDetail, TDestination, TDryRunBaseOptions, TDryRunCallBaseOptions, TDryRunCallOptions, TDryRunChain, TDryRunNodeFailure, TDryRunNodeResult, TDryRunNodeResultInternal, TDryRunNodeSuccess, TDryRunOptions, TDryRunResult, TDryRunXcmBaseOptions, TDryRunXcmOptions, TEdJsonMap, TEvmBuilderOptions, TEvmBuilderOptionsBase, TEvmNodeFrom, TFeeType, TForeignAssetId, TForeignOrNativeAsset, TForeignOrTokenAsset, TGetAssetBalanceOptions, TGetAssetBalanceOptionsBase, TGetBalanceForeignOptions, TGetBalanceForeignOptionsBase, TGetBalanceNativeOptions, TGetBalanceNativeOptionsBase, TGetFeeForDestNodeBaseOptions, TGetFeeForDestNodeOptions, TGetMaxForeignTransferableAmountOptions, TGetMaxForeignTransferableAmountOptionsBase, TGetMaxNativeTransferableAmountOptions, TGetMaxNativeTransferableAmountOptionsBase, TGetOriginFeeDetailsOptions, TGetOriginFeeDetailsOptionsBase, TGetOriginXcmFeeBaseOptions, TGetOriginXcmFeeEstimateOptions, TGetOriginXcmFeeOptions, TGetReverseTxFeeOptions, TGetTransferInfoOptions, TGetTransferInfoOptionsBase, TGetTransferableAmountOptions, TGetTransferableAmountOptionsBase, TGetXcmFeeBaseOptions, TGetXcmFeeBuilderOptions, TGetXcmFeeEstimateDetail, TGetXcmFeeEstimateOptions, TGetXcmFeeEstimateResult, TGetXcmFeeOptions, TGetXcmFeeResult, THopInfo, THopTransferInfo, THubKey, TMantaAsset, TModuleError, TNativeTokenAsset, TNodeConfig, TNodeConfigMap, TNodleAsset, TOriginFeeDetails, TOtherReserveAsset, TPolkadotXCMTransferOptions, TPolkadotXcmMethod, TProviderEntry, TRelayToParaDestination, TRelayToParaOptions, TRelayToParaOverrides, TReserveAsset, TScenario, TSelfReserveAsset, TSendBaseOptions, TSendBaseOptionsWithSenderAddress, TSendInternalOptions, TSendOptions, TSerializeEthTransferOptions, TSerializedApiCall, TSerializedEthTransfer, TSwapFeeEstimates, TTransferFeeEstimates, TTransferInfo, TTransferLocalOptions, TVerifyEdOnDestinationOptions, TVerifyEdOnDestinationOptionsBase, TWeight, TXTokensCurrencySelection, TXTokensMethod, TXTokensTransferOptions, TXTransferMethod, TXTransferTransferOptions, TXcmAsset, TXcmFeeBase, TXcmFeeChain, TXcmFeeDetail, TXcmFeeDetailWithFallback, TXcmFeeHopInfo, TXcmForeignAsset, TXcmPalletMethod, TXcmVersioned, TZeitgeistAsset, WithApi, WithRequiredSenderAddress, XcmFeeHopResult };
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { blake2b } from '@noble/hashes/blake2';
2
- import { isNodeEvm, getAssetsObject, InvalidCurrencyError, isForeignAsset, getNativeAssetSymbol, getOtherAssets, extractMultiAssetLoc, isAssetEqual, findAssetForNodeOrThrow, getExistentialDeposit, findAsset, isTMultiAsset, getExistentialDepositOrThrow, isSymbolMatch, hasDryRunSupport, isOverrideMultiLocationSpecifier, findAssetByMultiLocation, findAssetOnDestOrThrow, hasSupportForAsset, getRelayChainSymbol, isSymbolSpecifier, normalizeMultiLocation, normalizeSymbol, Native, hasXcmPaymentApiSupport, getAssetId, getNativeAssets } from '@paraspell/assets';
2
+ import { isNodeEvm, getAssetsObject, InvalidCurrencyError, isForeignAsset, getNativeAssetSymbol, getOtherAssets, extractMultiAssetLoc, isAssetEqual, findAssetForNodeOrThrow, getExistentialDeposit, findAsset, isTMultiAsset, getExistentialDepositOrThrow, isSymbolMatch, hasDryRunSupport, isOverrideMultiLocationSpecifier, findAssetByMultiLocation, findAssetOnDestOrThrow, hasSupportForAsset, getRelayChainSymbol, isSymbolSpecifier, normalizeMultiLocation, normalizeSymbol, Native, hasXcmPaymentApiSupport, getNativeAssets } from '@paraspell/assets';
3
3
  export * from '@paraspell/assets';
4
4
  import { base58 } from '@scure/base';
5
5
  import { isAddress, createPublicClient, http, getContract } from 'viem';
@@ -6193,6 +6193,140 @@ var send = /*#__PURE__*/function () {
6193
6193
  };
6194
6194
  }();
6195
6195
 
6196
+ var createTypeAndThenCall = function createTypeAndThenCall(chain, destChain, reserveChain, input, reserveFee) {
6197
+ var api = input.api,
6198
+ destination = input.destination,
6199
+ asset = input.asset,
6200
+ version = input.version,
6201
+ address = input.address,
6202
+ paraIdTo = input.paraIdTo;
6203
+ assertHasLocation(asset);
6204
+ var depositInstruction = {
6205
+ DepositAsset: {
6206
+ assets: {
6207
+ Wild: 'All'
6208
+ },
6209
+ beneficiary: createBeneficiaryLocation({
6210
+ api: api,
6211
+ address: address,
6212
+ version: version
6213
+ })
6214
+ }
6215
+ };
6216
+ var customXcm = chain === reserveChain || destChain === reserveChain ? [depositInstruction] : [{
6217
+ DepositReserveAsset: {
6218
+ assets: {
6219
+ Wild: 'All'
6220
+ },
6221
+ dest: createDestination(version, chain, destination, paraIdTo),
6222
+ xcm: [{
6223
+ BuyExecution: {
6224
+ fees: createMultiAsset(version, reserveFee, asset.multiLocation),
6225
+ weight_limit: 'Unlimited'
6226
+ }
6227
+ }, depositInstruction]
6228
+ }
6229
+ }];
6230
+ var finalDest = chain === reserveChain ? destChain : reserveChain;
6231
+ var dest = createVersionedDestination(version, chain, finalDest, getParaId(finalDest));
6232
+ var multiAsset = createMultiAsset(version, asset.amount, asset.multiLocation);
6233
+ var assets = addXcmVersionHeader([multiAsset], version);
6234
+ var customXcmVersioned = addXcmVersionHeader(customXcm, version);
6235
+ var feesLocation = addXcmVersionHeader(multiAsset.id, version);
6236
+ var reserve = chain === reserveChain ? 'LocalReserve' : 'DestinationReserve';
6237
+ return {
6238
+ module: 'PolkadotXcm',
6239
+ method: 'transfer_assets_using_type_and_then',
6240
+ parameters: {
6241
+ dest: dest,
6242
+ assets: assets,
6243
+ assets_transfer_type: reserve,
6244
+ remote_fees_id: feesLocation,
6245
+ fees_transfer_type: reserve,
6246
+ custom_xcm_on_dest: customXcmVersioned,
6247
+ weight_limit: 'Unlimited'
6248
+ }
6249
+ };
6250
+ };
6251
+
6252
+ var validateHops$1 = function validateHops(hops) {
6253
+ var _iterator = _createForOfIteratorHelper(hops),
6254
+ _step;
6255
+ try {
6256
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
6257
+ var hop = _step.value;
6258
+ if (!hop.result.success) {
6259
+ throw new DryRunFailedError("Dry run failed on an intermediate hop (".concat(hop.chain, "). Reason: ").concat(hop.result.failureReason || 'Unknown'));
6260
+ }
6261
+ }
6262
+ } catch (err) {
6263
+ _iterator.e(err);
6264
+ } finally {
6265
+ _iterator.f();
6266
+ }
6267
+ };
6268
+ var getReserveFeeFromHops$1 = function getReserveFeeFromHops(hops) {
6269
+ if (!hops || hops.length === 0 || !hops[0].result.success) {
6270
+ return MIN_FEE$2;
6271
+ }
6272
+ return hops[0].result.fee;
6273
+ };
6274
+ var MIN_FEE$2 = 1000n;
6275
+ var FEE_PADDING_PERCENTAGE$2 = 40;
6276
+ var createTypeAndThenTransfer$2 = /*#__PURE__*/function () {
6277
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(chain, input) {
6278
+ var api, address, paraIdTo, senderAddress, currency, asset, destChain, reserveChain, call, dryRunResult, reserveFeeEstimate, reserveFee;
6279
+ return _regenerator().w(function (_context) {
6280
+ while (1) switch (_context.n) {
6281
+ case 0:
6282
+ api = input.api, address = input.address, paraIdTo = input.paraIdTo, senderAddress = input.senderAddress, currency = input.currency, asset = input.asset;
6283
+ if (senderAddress) {
6284
+ _context.n = 1;
6285
+ break;
6286
+ }
6287
+ throw new InvalidParameterError('Please provide senderAddress');
6288
+ case 1:
6289
+ assertHasLocation(asset);
6290
+ assertAddressIsString(address);
6291
+ destChain = getTNode(paraIdTo, getRelayChainOf(chain).toLowerCase());
6292
+ reserveChain = isRelayChain(destChain) ? destChain : getAssetReserveChain(chain, chain, asset.multiLocation);
6293
+ call = createTypeAndThenCall(chain, destChain, reserveChain, input, MIN_FEE$2);
6294
+ if (!(chain === reserveChain || destChain === reserveChain)) {
6295
+ _context.n = 2;
6296
+ break;
6297
+ }
6298
+ return _context.a(2, call);
6299
+ case 2:
6300
+ _context.n = 3;
6301
+ return dryRunInternal({
6302
+ api: api,
6303
+ tx: api.callTxMethod(call),
6304
+ origin: chain,
6305
+ destination: destChain,
6306
+ senderAddress: senderAddress,
6307
+ address: address,
6308
+ currency: currency
6309
+ });
6310
+ case 3:
6311
+ dryRunResult = _context.v;
6312
+ if (dryRunResult.origin.success) {
6313
+ _context.n = 4;
6314
+ break;
6315
+ }
6316
+ throw new DryRunFailedError(dryRunResult.failureReason);
6317
+ case 4:
6318
+ validateHops$1(dryRunResult.hops);
6319
+ reserveFeeEstimate = getReserveFeeFromHops$1(dryRunResult.hops);
6320
+ reserveFee = padFeeBy(reserveFeeEstimate, FEE_PADDING_PERCENTAGE$2);
6321
+ return _context.a(2, createTypeAndThenCall(chain, destChain, reserveChain, input, reserveFee));
6322
+ }
6323
+ }, _callee);
6324
+ }));
6325
+ return function createTypeAndThenTransfer(_x, _x2) {
6326
+ return _ref.apply(this, arguments);
6327
+ };
6328
+ }();
6329
+
6196
6330
  var attemptDryRunFee = /*#__PURE__*/function () {
6197
6331
  var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options) {
6198
6332
  var origin, currency, builder, reductionPcts, lastReduction, result, _i, _reductionPcts, percentage, modifiedBuilder, _t, _t2, _t3, _t4, _t5, _t6, _t7;
@@ -8245,36 +8379,6 @@ var Acala = /*#__PURE__*/function (_ParachainNode) {
8245
8379
  }]);
8246
8380
  }(ParachainNode);
8247
8381
 
8248
- var transferPolkadotXcm = function transferPolkadotXcm(_ref, method) {
8249
- var api = _ref.api,
8250
- destLocation = _ref.destLocation,
8251
- asset = _ref.asset,
8252
- beneficiaryLocation = _ref.beneficiaryLocation,
8253
- multiAsset = _ref.multiAsset,
8254
- overriddenAsset = _ref.overriddenAsset,
8255
- pallet = _ref.pallet,
8256
- version = _ref.version,
8257
- methodOverride = _ref.method;
8258
- var fees = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
8259
- var resolvedMultiAssets = maybeOverrideMultiAssets(version, asset.amount, [multiAsset], overriddenAsset);
8260
- var feeAssetIndex = overriddenAsset === undefined || isTMultiLocation(overriddenAsset) ? DEFAULT_FEE_ASSET : overriddenAsset.findIndex(function (asset) {
8261
- return asset.isFeeAsset;
8262
- });
8263
- var call = {
8264
- module: pallet !== null && pallet !== void 0 ? pallet : 'PolkadotXcm',
8265
- method: methodOverride !== null && methodOverride !== void 0 ? methodOverride : method,
8266
- parameters: _objectSpread2({
8267
- dest: addXcmVersionHeader(destLocation, version),
8268
- beneficiary: addXcmVersionHeader(beneficiaryLocation, version),
8269
- assets: addXcmVersionHeader(resolvedMultiAssets, version),
8270
- fee_asset_item: feeAssetIndex
8271
- }, fees !== undefined ? {
8272
- weight_limit: fees
8273
- } : {})
8274
- };
8275
- return Promise.resolve(api.callTxMethod(call));
8276
- };
8277
-
8278
8382
  var Ajuna = /*#__PURE__*/function (_ParachainNode) {
8279
8383
  function Ajuna() {
8280
8384
  var chain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Ajuna';
@@ -8300,9 +8404,27 @@ var Ajuna = /*#__PURE__*/function (_ParachainNode) {
8300
8404
  }
8301
8405
  }, {
8302
8406
  key: "transferPolkadotXCM",
8303
- value: function transferPolkadotXCM(input) {
8304
- return transferPolkadotXcm(input, 'transfer_assets', 'Unlimited');
8305
- }
8407
+ value: function () {
8408
+ var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(input) {
8409
+ var api, _t, _t2;
8410
+ return _regenerator().w(function (_context) {
8411
+ while (1) switch (_context.n) {
8412
+ case 0:
8413
+ api = input.api;
8414
+ _t = api;
8415
+ _context.n = 1;
8416
+ return createTypeAndThenTransfer$2(this.node, input);
8417
+ case 1:
8418
+ _t2 = _context.v;
8419
+ return _context.a(2, _t.callTxMethod.call(_t, _t2));
8420
+ }
8421
+ }, _callee, this);
8422
+ }));
8423
+ function transferPolkadotXCM(_x) {
8424
+ return _transferPolkadotXCM.apply(this, arguments);
8425
+ }
8426
+ return transferPolkadotXCM;
8427
+ }()
8306
8428
  }, {
8307
8429
  key: "canUseXTokens",
8308
8430
  value: function canUseXTokens(_ref) {
@@ -8409,6 +8531,36 @@ var Amplitude = /*#__PURE__*/function (_ParachainNode) {
8409
8531
  }]);
8410
8532
  }(ParachainNode);
8411
8533
 
8534
+ var transferPolkadotXcm = function transferPolkadotXcm(_ref, method) {
8535
+ var api = _ref.api,
8536
+ destLocation = _ref.destLocation,
8537
+ asset = _ref.asset,
8538
+ beneficiaryLocation = _ref.beneficiaryLocation,
8539
+ multiAsset = _ref.multiAsset,
8540
+ overriddenAsset = _ref.overriddenAsset,
8541
+ pallet = _ref.pallet,
8542
+ version = _ref.version,
8543
+ methodOverride = _ref.method;
8544
+ var fees = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
8545
+ var resolvedMultiAssets = maybeOverrideMultiAssets(version, asset.amount, [multiAsset], overriddenAsset);
8546
+ var feeAssetIndex = overriddenAsset === undefined || isTMultiLocation(overriddenAsset) ? DEFAULT_FEE_ASSET : overriddenAsset.findIndex(function (asset) {
8547
+ return asset.isFeeAsset;
8548
+ });
8549
+ var call = {
8550
+ module: pallet !== null && pallet !== void 0 ? pallet : 'PolkadotXcm',
8551
+ method: methodOverride !== null && methodOverride !== void 0 ? methodOverride : method,
8552
+ parameters: _objectSpread2({
8553
+ dest: addXcmVersionHeader(destLocation, version),
8554
+ beneficiary: addXcmVersionHeader(beneficiaryLocation, version),
8555
+ assets: addXcmVersionHeader(resolvedMultiAssets, version),
8556
+ fee_asset_item: feeAssetIndex
8557
+ }, fees !== undefined ? {
8558
+ weight_limit: fees
8559
+ } : {})
8560
+ };
8561
+ return Promise.resolve(api.callTxMethod(call));
8562
+ };
8563
+
8412
8564
  var AssetHubKusama = /*#__PURE__*/function (_ParachainNode) {
8413
8565
  function AssetHubKusama() {
8414
8566
  _classCallCheck(this, AssetHubKusama);
@@ -8513,14 +8665,14 @@ var AssetHubPolkadot = /*#__PURE__*/function (_ParachainNode) {
8513
8665
  return _createClass(AssetHubPolkadot, [{
8514
8666
  key: "handleBridgeTransfer",
8515
8667
  value: function handleBridgeTransfer(input, targetChain) {
8516
- var _asset$symbol, _asset$symbol2, _asset$symbol3, _asset$symbol4;
8668
+ var _asset$symbol, _asset$symbol2, _asset$symbol3;
8517
8669
  var api = input.api,
8518
8670
  asset = input.asset,
8519
8671
  destination = input.destination,
8520
8672
  address = input.address,
8521
8673
  version = input.version,
8522
8674
  paraIdTo = input.paraIdTo;
8523
- if (targetChain === 'Kusama' && ((_asset$symbol = asset.symbol) === null || _asset$symbol === void 0 ? void 0 : _asset$symbol.toUpperCase()) === 'KSM' || targetChain === 'Polkadot' && ((_asset$symbol2 = asset.symbol) === null || _asset$symbol2 === void 0 ? void 0 : _asset$symbol2.toUpperCase()) === this.getNativeAssetSymbol()) {
8675
+ if (targetChain === 'Kusama' && ((_asset$symbol = asset.symbol) === null || _asset$symbol === void 0 ? void 0 : _asset$symbol.toUpperCase()) === 'KSM' || targetChain === 'Polkadot' && ((_asset$symbol2 = asset.symbol) === null || _asset$symbol2 === void 0 ? void 0 : _asset$symbol2.toUpperCase()) === 'DOT') {
8524
8676
  var modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
8525
8677
  destLocation: createBridgeDestination(targetChain, destination, paraIdTo),
8526
8678
  beneficiaryLocation: createBeneficiaryLocation({
@@ -8531,7 +8683,7 @@ var AssetHubPolkadot = /*#__PURE__*/function (_ParachainNode) {
8531
8683
  multiAsset: createMultiAsset(version, asset.amount, asset.multiLocation)
8532
8684
  });
8533
8685
  return transferPolkadotXcm(modifiedInput, 'transfer_assets', 'Unlimited');
8534
- } else if (targetChain === 'Polkadot' && ((_asset$symbol3 = asset.symbol) === null || _asset$symbol3 === void 0 ? void 0 : _asset$symbol3.toUpperCase()) === 'KSM' || targetChain === 'Kusama' && ((_asset$symbol4 = asset.symbol) === null || _asset$symbol4 === void 0 ? void 0 : _asset$symbol4.toUpperCase()) === this.getNativeAssetSymbol()) {
8686
+ } else if (targetChain === 'Polkadot' && ((_asset$symbol3 = asset.symbol) === null || _asset$symbol3 === void 0 ? void 0 : _asset$symbol3.toUpperCase()) === 'KSM' || targetChain === 'Kusama' && 'DOT') {
8535
8687
  var _modifiedInput = _objectSpread2(_objectSpread2({}, input), {}, {
8536
8688
  destLocation: createBridgeDestination(targetChain, destination, paraIdTo),
8537
8689
  multiAsset: createMultiAsset(version, asset.amount, DOT_MULTILOCATION)
@@ -8694,8 +8846,7 @@ var AssetHubPolkadot = /*#__PURE__*/function (_ParachainNode) {
8694
8846
  value: function patchInput(input) {
8695
8847
  var asset = input.asset,
8696
8848
  destination = input.destination,
8697
- _input$version = input.version,
8698
- version = _input$version === void 0 ? this.version : _input$version;
8849
+ version = input.version;
8699
8850
  if ((destination === 'Hydration' || destination === 'Polimec' || destination === 'Moonbeam' || destination === 'BifrostPolkadot') && asset.symbol === this.getNativeAssetSymbol()) {
8700
8851
  return _objectSpread2(_objectSpread2({}, input), {}, {
8701
8852
  multiAsset: createMultiAsset(version, asset.amount, DOT_MULTILOCATION)
@@ -8714,7 +8865,7 @@ var AssetHubPolkadot = /*#__PURE__*/function (_ParachainNode) {
8714
8865
  key: "transferPolkadotXCM",
8715
8866
  value: function () {
8716
8867
  var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(input) {
8717
- var api, scenario, asset, destination, feeAsset, overriddenAsset, isNativeAsset, isNativeFeeAsset, isEthereumAsset, CHAINS_SUPPORT_DOT_TRANSFER, isTrusted, isDotReserveAh, method, modifiedInput, _t, _t2;
8868
+ var api, scenario, asset, destination, feeAsset, overriddenAsset, isNativeAsset, isNativeFeeAsset, isEthereumAsset, CHAINS_SUPPORT_DOT_TRANSFER, isTrusted, isDotReserveAh, method, modifiedInput, _t, _t2, _t3, _t4;
8718
8869
  return _regenerator().w(function (_context3) {
8719
8870
  while (1) switch (_context3.n) {
8720
8871
  case 0:
@@ -8794,7 +8945,18 @@ var AssetHubPolkadot = /*#__PURE__*/function (_ParachainNode) {
8794
8945
  }
8795
8946
  throw new ScenarioNotSupportedError(this.node, scenario, 'Bridged KSM cannot currently be transfered from AssetHubPolkadot, if you are sending different KSM asset, please specify {id: <KSMID>}.');
8796
8947
  case 11:
8797
- method = this.getMethod(scenario, destination);
8948
+ method = this.getMethod(scenario, destination); // Patch transfer_assets to use type_and_then transfer
8949
+ if (!(method === 'transfer_assets' && isSymbolMatch(asset.symbol, getRelayChainSymbol(this.node)))) {
8950
+ _context3.n = 13;
8951
+ break;
8952
+ }
8953
+ _t3 = api;
8954
+ _context3.n = 12;
8955
+ return createTypeAndThenTransfer$2(this.node, input);
8956
+ case 12:
8957
+ _t4 = _context3.v;
8958
+ return _context3.a(2, _t3.callTxMethod.call(_t3, _t4));
8959
+ case 13:
8798
8960
  modifiedInput = this.patchInput(input);
8799
8961
  return _context3.a(2, transferPolkadotXcm(modifiedInput, method, 'Unlimited'));
8800
8962
  }
@@ -9028,22 +9190,36 @@ var BifrostPolkadot = /*#__PURE__*/function (_ParachainNode) {
9028
9190
  // Handles DOT, WETH transfers to AssetHubPolkadot
9029
9191
  }, {
9030
9192
  key: "transferToAssetHub",
9031
- value: function transferToAssetHub(input) {
9032
- var _getAssetId;
9033
- var asset = input.asset;
9034
- return transferPolkadotXcm(_objectSpread2(_objectSpread2({}, input), {}, {
9035
- multiAsset: createMultiAsset(this.version, asset.amount, {
9036
- parents: asset.symbol === 'DOT' ? Parents.ONE : Parents.TWO,
9037
- interior: asset.symbol === 'WETH' ? {
9038
- X2: [ETHEREUM_JUNCTION, {
9039
- AccountKey20: {
9040
- key: (_getAssetId = getAssetId('Ethereum', 'WETH')) !== null && _getAssetId !== void 0 ? _getAssetId : ''
9193
+ value: function () {
9194
+ var _transferToAssetHub = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(input) {
9195
+ var api, asset, _t, _t2;
9196
+ return _regenerator().w(function (_context) {
9197
+ while (1) switch (_context.n) {
9198
+ case 0:
9199
+ api = input.api, asset = input.asset;
9200
+ if (!isSymbolMatch(asset.symbol, getRelayChainSymbol(this.node))) {
9201
+ _context.n = 2;
9202
+ break;
9041
9203
  }
9042
- }]
9043
- } : 'Here'
9044
- })
9045
- }), 'transfer_assets', 'Unlimited');
9046
- }
9204
+ _t = api;
9205
+ _context.n = 1;
9206
+ return createTypeAndThenTransfer$2(this.node, input);
9207
+ case 1:
9208
+ _t2 = _context.v;
9209
+ return _context.a(2, _t.callTxMethod.call(_t, _t2));
9210
+ case 2:
9211
+ assertHasLocation(asset);
9212
+ return _context.a(2, transferPolkadotXcm(_objectSpread2(_objectSpread2({}, input), {}, {
9213
+ multiAsset: createMultiAsset(this.version, asset.amount, asset.multiLocation)
9214
+ }), 'transfer_assets', 'Unlimited'));
9215
+ }
9216
+ }, _callee, this);
9217
+ }));
9218
+ function transferToAssetHub(_x) {
9219
+ return _transferToAssetHub.apply(this, arguments);
9220
+ }
9221
+ return transferToAssetHub;
9222
+ }()
9047
9223
  }, {
9048
9224
  key: "transferPolkadotXCM",
9049
9225
  value: function transferPolkadotXCM(input) {
@@ -9736,11 +9912,11 @@ var Polimec = /*#__PURE__*/function (_ParachainNode) {
9736
9912
  key: "transferPolkadotXCM",
9737
9913
  value: function () {
9738
9914
  var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(input) {
9739
- var api, _input$version, version, asset, destination, scenario, _call, call;
9915
+ var api, version, asset, destination, scenario, _call, call;
9740
9916
  return _regenerator().w(function (_context) {
9741
9917
  while (1) switch (_context.n) {
9742
9918
  case 0:
9743
- api = input.api, _input$version = input.version, version = _input$version === void 0 ? this.version : _input$version, asset = input.asset, destination = input.destination, scenario = input.scenario;
9919
+ api = input.api, version = input.version, asset = input.asset, destination = input.destination, scenario = input.scenario;
9744
9920
  if (!(scenario === 'ParaToPara' && destination === 'Hydration' && asset.symbol === 'DOT')) {
9745
9921
  _context.n = 1;
9746
9922
  break;
@@ -9773,8 +9949,7 @@ var Polimec = /*#__PURE__*/function (_ParachainNode) {
9773
9949
  }, {
9774
9950
  key: "transferRelayToPara",
9775
9951
  value: function transferRelayToPara(options) {
9776
- var _options$version = options.version,
9777
- version = _options$version === void 0 ? this.version : _options$version;
9952
+ var version = options.version;
9778
9953
  var call = createTypeAndThenTransfer$1(_objectSpread2(_objectSpread2({}, options), {}, {
9779
9954
  scenario: 'RelayToPara'
9780
9955
  }), version, 'Teleport');
@@ -9861,8 +10036,7 @@ var Hydration = /*#__PURE__*/function (_ParachainNode) {
9861
10036
  value: function transferToPolimec(options) {
9862
10037
  var api = options.api,
9863
10038
  asset = options.asset,
9864
- _options$version = options.version,
9865
- version = _options$version === void 0 ? this.version : _options$version;
10039
+ version = options.version;
9866
10040
  var symbol = asset.symbol.toUpperCase();
9867
10041
  if (symbol === 'DOT') {
9868
10042
  var call = createTypeAndThenTransfer$1(options, version);
@@ -10365,20 +10539,42 @@ var Moonbeam = /*#__PURE__*/function (_ParachainNode) {
10365
10539
  }
10366
10540
  }, {
10367
10541
  key: "transferPolkadotXCM",
10368
- value: function transferPolkadotXCM(input) {
10369
- var destination = input.destination,
10370
- asset = input.asset,
10371
- scenario = input.scenario,
10372
- _input$version = input.version,
10373
- version = _input$version === void 0 ? this.version : _input$version;
10374
- if (destination === 'Ethereum') {
10375
- return this.transferToEthereum(input);
10542
+ value: function () {
10543
+ var _transferPolkadotXCM = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(input) {
10544
+ var api, destination, asset, scenario, version, multiLocation, _t, _t2;
10545
+ return _regenerator().w(function (_context) {
10546
+ while (1) switch (_context.n) {
10547
+ case 0:
10548
+ api = input.api, destination = input.destination, asset = input.asset, scenario = input.scenario, version = input.version;
10549
+ if (!(destination === 'Ethereum')) {
10550
+ _context.n = 1;
10551
+ break;
10552
+ }
10553
+ return _context.a(2, this.transferToEthereum(input));
10554
+ case 1:
10555
+ if (!isSymbolMatch(asset.symbol, getRelayChainSymbol(this.node))) {
10556
+ _context.n = 3;
10557
+ break;
10558
+ }
10559
+ _t = api;
10560
+ _context.n = 2;
10561
+ return createTypeAndThenTransfer$2(this.node, input);
10562
+ case 2:
10563
+ _t2 = _context.v;
10564
+ return _context.a(2, _t.callTxMethod.call(_t, _t2));
10565
+ case 3:
10566
+ multiLocation = this.getMultiLocation(asset, scenario);
10567
+ return _context.a(2, transferPolkadotXcm(_objectSpread2(_objectSpread2({}, input), {}, {
10568
+ multiAsset: createMultiAsset(version, asset.amount, multiLocation)
10569
+ }), 'transfer_assets', 'Unlimited'));
10570
+ }
10571
+ }, _callee, this);
10572
+ }));
10573
+ function transferPolkadotXCM(_x) {
10574
+ return _transferPolkadotXCM.apply(this, arguments);
10376
10575
  }
10377
- var multiLocation = this.getMultiLocation(asset, scenario);
10378
- return transferPolkadotXcm(_objectSpread2(_objectSpread2({}, input), {}, {
10379
- multiAsset: createMultiAsset(version, asset.amount, multiLocation)
10380
- }), 'transfer_assets', 'Unlimited');
10381
- }
10576
+ return transferPolkadotXCM;
10577
+ }()
10382
10578
  }, {
10383
10579
  key: "getRelayToParaOverrides",
10384
10580
  value: function getRelayToParaOverrides() {
@@ -10433,8 +10629,7 @@ var Moonriver = /*#__PURE__*/function (_ParachainNode) {
10433
10629
  value: function transferPolkadotXCM(input) {
10434
10630
  var asset = input.asset,
10435
10631
  scenario = input.scenario,
10436
- _input$version = input.version,
10437
- version = _input$version === void 0 ? this.version : _input$version;
10632
+ version = input.version;
10438
10633
  var multiLocation = this.getMultiLocation(asset, scenario);
10439
10634
  return transferPolkadotXcm(_objectSpread2(_objectSpread2({}, input), {}, {
10440
10635
  multiAsset: createMultiAsset(version, asset.amount, multiLocation)
@@ -12054,4 +12249,4 @@ var Builder = function Builder(api) {
12054
12249
  return new GeneralBuilder(api, new BatchTransactionManager());
12055
12250
  };
12056
12251
 
12057
- export { AssetClaimBuilder, BatchMode, BridgeHaltedError, Builder, DRY_RUN_CLIENT_TIMEOUT_MS, DryRunFailedError, ETHEREUM_JUNCTION, ETH_CHAIN_ID, GeneralBuilder, IncompatibleNodesError, InvalidAddressError, InvalidParameterError, MissingChainApiError, NoXCMSupportImplementedError, NodeNotSupportedError, PolkadotXcmError, ScenarioNotSupportedError, TX_CLIENT_TIMEOUT_MS, TransferToAhNotSupported, UnableToComputeError, XTokensError, addEthereumBridgeFees, addXcmVersionHeader, assertAddressIsString, assertHasId, assertHasLocation, assertIsForeign, assertToIsString, blake2b256, blake2b512, claimAssets, computeFeeFromDryRun, computeFeeFromDryRunPjs, convertSs58, createApiInstanceForNode, createAssetsFilter, createBaseExecuteXcm, createBeneficiaryLocXTokens, createBeneficiaryLocation, createDirectExecuteXcm, createExecuteCall, createExecuteExchangeXcm, createMultiAsset, createVersionedMultiAssets, createX1Payload, deriveAccountId, dryRun, dryRunOrigin, encodeSs58, getAssetBalance, getAssetBalanceInternal, getBalanceForeign, getBalanceForeignInternal, getBalanceNative, getBalanceNativeInternal, getBridgeStatus, getChainLocation, getChainVersion, getNode, getNodeConfig, getNodeProviders, getOriginFeeDetails, getOriginFeeDetailsInternal, getOriginXcmFee, getOriginXcmFeeEstimate, getParaEthTransferFees, getParaId, getRelayChainOf, getTNode, getTransferInfo, getTransferableAmount, getTransferableAmountInternal, getXcmFee, getXcmFeeEstimate, handleExecuteTransfer, handleSwapExecuteTransfer, handleToAhTeleport, isConfig, localizeLocation, maybeOverrideMultiAsset, maybeOverrideMultiAssets, padFee, padFeeBy, resolveModuleError, resolveParaId, reverseTransformMultiLocation, send, sortMultiAssets, transferMoonbeamEvm, transferMoonbeamToEth, transferRelayToPara, traverseXcmHops, validateAddress, verifyEdOnDestination };
12252
+ export { AssetClaimBuilder, BatchMode, BridgeHaltedError, Builder, DRY_RUN_CLIENT_TIMEOUT_MS, DryRunFailedError, ETHEREUM_JUNCTION, ETH_CHAIN_ID, GeneralBuilder, IncompatibleNodesError, InvalidAddressError, InvalidParameterError, MissingChainApiError, NoXCMSupportImplementedError, NodeNotSupportedError, PolkadotXcmError, ScenarioNotSupportedError, TX_CLIENT_TIMEOUT_MS, TransferToAhNotSupported, UnableToComputeError, XTokensError, addEthereumBridgeFees, addXcmVersionHeader, assertAddressIsString, assertHasId, assertHasLocation, assertIsForeign, assertToIsString, blake2b256, blake2b512, claimAssets, computeFeeFromDryRun, computeFeeFromDryRunPjs, convertSs58, createApiInstanceForNode, createAssetsFilter, createBaseExecuteXcm, createBeneficiaryLocXTokens, createBeneficiaryLocation, createDirectExecuteXcm, createExecuteCall, createExecuteExchangeXcm, createMultiAsset, createTypeAndThenTransfer$2 as createTypeAndThenTransfer, createVersionedMultiAssets, createX1Payload, deriveAccountId, dryRun, dryRunOrigin, encodeSs58, getAssetBalance, getAssetBalanceInternal, getBalanceForeign, getBalanceForeignInternal, getBalanceNative, getBalanceNativeInternal, getBridgeStatus, getChainLocation, getChainVersion, getNode, getNodeConfig, getNodeProviders, getOriginFeeDetails, getOriginFeeDetailsInternal, getOriginXcmFee, getOriginXcmFeeEstimate, getParaEthTransferFees, getParaId, getRelayChainOf, getTNode, getTransferInfo, getTransferableAmount, getTransferableAmountInternal, getXcmFee, getXcmFeeEstimate, handleExecuteTransfer, handleSwapExecuteTransfer, handleToAhTeleport, isConfig, localizeLocation, maybeOverrideMultiAsset, maybeOverrideMultiAssets, padFee, padFeeBy, resolveModuleError, resolveParaId, reverseTransformMultiLocation, send, sortMultiAssets, transferMoonbeamEvm, transferMoonbeamToEth, transferRelayToPara, traverseXcmHops, validateAddress, verifyEdOnDestination };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paraspell/sdk-core",
3
- "version": "10.11.1",
3
+ "version": "10.11.3",
4
4
  "description": "SDK core for ParaSpell XCM/XCMP tool for developers",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,9 +26,9 @@
26
26
  "@noble/hashes": "^1.8.0",
27
27
  "@scure/base": "^1.2.6",
28
28
  "viem": "^2.33.2",
29
- "@paraspell/pallets": "10.11.1",
30
- "@paraspell/assets": "10.11.1",
31
- "@paraspell/sdk-common": "10.11.1"
29
+ "@paraspell/pallets": "10.11.3",
30
+ "@paraspell/sdk-common": "10.11.3",
31
+ "@paraspell/assets": "10.11.3"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@babel/plugin-syntax-import-attributes": "^7.27.1",