@paraspell/sdk-core 8.10.0 → 8.11.1

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
@@ -3211,7 +3211,7 @@ var ParachainNode = /*#__PURE__*/function () {
3211
3211
  key: "transfer",
3212
3212
  value: function () {
3213
3213
  var _transfer = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
3214
- var api, asset, feeAsset, address, destination, paraIdTo, overriddenAsset, version, senderAddress, pallet, method, isRelayDestination, scenario, paraId, versionOrDefault, isBifrostOrigin, isAssetHubDest, shouldUseMultiasset, input, _options, isEthAsset, isAHPOrigin, isAHPDest, isEthDest;
3214
+ var api, asset, feeAsset, address, destination, paraIdTo, overriddenAsset, version, senderAddress, pallet, method, isRelayDestination, scenario, paraId, versionOrDefault, isLocalTransfer, isBifrostOrigin, isAssetHubDest, shouldUseMultiasset, input, _options, isEthAsset, isAHPOrigin, isAHPDest, isEthDest;
3215
3215
  return _regeneratorRuntime().wrap(function _callee$(_context) {
3216
3216
  while (1) switch (_context.prev = _context.next) {
3217
3217
  case 0:
@@ -3219,15 +3219,22 @@ var ParachainNode = /*#__PURE__*/function () {
3219
3219
  isRelayDestination = !sdkCommon.isTMultiLocation(destination) && sdkCommon.isRelayChain(destination);
3220
3220
  scenario = isRelayDestination ? 'ParaToRelay' : 'ParaToPara';
3221
3221
  paraId = resolveParaId(paraIdTo, destination);
3222
- if (!(destination === 'Polimec' && this.node !== 'AssetHubPolkadot' && this.node !== 'Hydration')) {
3222
+ if (!(destination === 'Polimec' && this.node !== 'AssetHubPolkadot' && this.node !== 'Hydration' && this.node !== destination)) {
3223
3223
  _context.next = 6;
3224
3224
  break;
3225
3225
  }
3226
3226
  throw new Error('Sending assets to Polimec is supported only from AssetHubPolkadot and Hydration');
3227
3227
  case 6:
3228
3228
  versionOrDefault = version !== null && version !== void 0 ? version : this.version;
3229
+ isLocalTransfer = this.node === destination;
3230
+ if (!isLocalTransfer) {
3231
+ _context.next = 10;
3232
+ break;
3233
+ }
3234
+ return _context.abrupt("return", this.transferLocal(options));
3235
+ case 10:
3229
3236
  if (!(supportsXTokens(this) && this.canUseXTokens(options))) {
3230
- _context.next = 17;
3237
+ _context.next = 20;
3231
3238
  break;
3232
3239
  }
3233
3240
  isBifrostOrigin = this.node === 'BifrostPolkadot' || this.node === 'BifrostKusama';
@@ -3254,15 +3261,15 @@ var ParachainNode = /*#__PURE__*/function () {
3254
3261
  method: method
3255
3262
  };
3256
3263
  if (!shouldUseMultiasset) {
3257
- _context.next = 14;
3264
+ _context.next = 17;
3258
3265
  break;
3259
3266
  }
3260
3267
  return _context.abrupt("return", XTokensTransferImpl.transferXTokens(input, undefined));
3261
- case 14:
3262
- return _context.abrupt("return", this.transferXTokens(input));
3263
3268
  case 17:
3269
+ return _context.abrupt("return", this.transferXTokens(input));
3270
+ case 20:
3264
3271
  if (!supportsXTransfer(this)) {
3265
- _context.next = 21;
3272
+ _context.next = 24;
3266
3273
  break;
3267
3274
  }
3268
3275
  return _context.abrupt("return", this.transferXTransfer({
@@ -3276,9 +3283,9 @@ var ParachainNode = /*#__PURE__*/function () {
3276
3283
  pallet: pallet,
3277
3284
  method: method
3278
3285
  }));
3279
- case 21:
3286
+ case 24:
3280
3287
  if (!supportsPolkadotXCM(this)) {
3281
- _context.next = 34;
3288
+ _context.next = 37;
3282
3289
  break;
3283
3290
  }
3284
3291
  _options = {
@@ -3310,21 +3317,21 @@ var ParachainNode = /*#__PURE__*/function () {
3310
3317
  isAHPDest = destination === 'AssetHubPolkadot' || destination === 'AssetHubKusama';
3311
3318
  isEthDest = destination === 'Ethereum'; // Any origin to any dest via AH - DestinationReserve - multiple instructions
3312
3319
  if (!(isEthAsset && !isAHPOrigin && !isAHPDest && !isEthDest)) {
3313
- _context.next = 29;
3320
+ _context.next = 32;
3314
3321
  break;
3315
3322
  }
3316
3323
  return _context.abrupt("return", this.transferEthAssetViaAH(_options));
3317
- case 29:
3324
+ case 32:
3318
3325
  if (!(isEthAsset && isAHPDest && !isAHPOrigin && !isEthDest)) {
3319
- _context.next = 31;
3326
+ _context.next = 34;
3320
3327
  break;
3321
3328
  }
3322
3329
  return _context.abrupt("return", this.transferToEthereum(_options, true));
3323
- case 31:
3324
- return _context.abrupt("return", this.transferPolkadotXCM(_options));
3325
3330
  case 34:
3331
+ return _context.abrupt("return", this.transferPolkadotXCM(_options));
3332
+ case 37:
3326
3333
  throw new NoXCMSupportImplementedError(this._node);
3327
- case 35:
3334
+ case 38:
3328
3335
  case "end":
3329
3336
  return _context.stop();
3330
3337
  }
@@ -3339,8 +3346,8 @@ var ParachainNode = /*#__PURE__*/function () {
3339
3346
  key: "getRelayToParaOverrides",
3340
3347
  value: function getRelayToParaOverrides() {
3341
3348
  return {
3342
- section: 'reserve_transfer_assets',
3343
- includeFee: false
3349
+ section: 'limited_reserve_transfer_assets',
3350
+ includeFee: true
3344
3351
  };
3345
3352
  }
3346
3353
  }, {
@@ -3379,6 +3386,65 @@ var ParachainNode = /*#__PURE__*/function () {
3379
3386
  value: function getNativeAssetSymbol() {
3380
3387
  return assets.getNativeAssetSymbol(this.node);
3381
3388
  }
3389
+ }, {
3390
+ key: "transferLocal",
3391
+ value: function transferLocal(options) {
3392
+ var asset = options.asset,
3393
+ address = options.address;
3394
+ if (sdkCommon.isTMultiLocation(address)) {
3395
+ throw new InvalidAddressError('Multi-Location address is not supported for local transfers');
3396
+ }
3397
+ var validatedOptions = _objectSpread2(_objectSpread2({}, options), {}, {
3398
+ address: address
3399
+ });
3400
+ var isNativeAsset = asset.symbol === this.getNativeAssetSymbol() && !assets.isForeignAsset(asset);
3401
+ if (isNativeAsset) {
3402
+ return this.transferLocalNativeAsset(validatedOptions);
3403
+ } else {
3404
+ return this.transferLocalNonNativeAsset(validatedOptions);
3405
+ }
3406
+ }
3407
+ }, {
3408
+ key: "transferLocalNativeAsset",
3409
+ value: function transferLocalNativeAsset(options) {
3410
+ var api = options.api,
3411
+ asset = options.asset,
3412
+ address = options.address;
3413
+ return api.callTxMethod({
3414
+ module: 'Balances',
3415
+ section: 'transfer_keep_alive',
3416
+ parameters: {
3417
+ dest: assets.isNodeEvm(this.node) ? address : {
3418
+ Id: address
3419
+ },
3420
+ value: BigInt(asset.amount)
3421
+ }
3422
+ });
3423
+ }
3424
+ }, {
3425
+ key: "transferLocalNonNativeAsset",
3426
+ value: function transferLocalNonNativeAsset(options) {
3427
+ var api = options.api,
3428
+ asset = options.asset,
3429
+ address = options.address;
3430
+ if (!assets.isForeignAsset(asset)) {
3431
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
3432
+ }
3433
+ if (asset.assetId === undefined) {
3434
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
3435
+ }
3436
+ return api.callTxMethod({
3437
+ module: 'Tokens',
3438
+ section: 'transfer',
3439
+ parameters: {
3440
+ dest: {
3441
+ Id: address
3442
+ },
3443
+ currency_id: BigInt(asset.assetId),
3444
+ amount: BigInt(asset.amount)
3445
+ }
3446
+ });
3447
+ }
3382
3448
  }, {
3383
3449
  key: "transferEthAssetViaAH",
3384
3450
  value: function () {
@@ -3635,16 +3701,61 @@ var Acala = /*#__PURE__*/function (_ParachainNode) {
3635
3701
  }
3636
3702
  _inherits(Acala, _ParachainNode);
3637
3703
  return _createClass(Acala, [{
3638
- key: "transferXTokens",
3639
- value: function transferXTokens(input) {
3640
- var asset = input.asset;
3641
- var currencySelection = assets.isForeignAsset(asset) ? {
3704
+ key: "getCurrencySelection",
3705
+ value: function getCurrencySelection(asset) {
3706
+ return assets.isForeignAsset(asset) ? {
3642
3707
  ForeignAsset: Number(asset.assetId)
3643
3708
  } : {
3644
3709
  Token: asset.symbol
3645
3710
  };
3711
+ }
3712
+ }, {
3713
+ key: "transferXTokens",
3714
+ value: function transferXTokens(input) {
3715
+ var asset = input.asset;
3716
+ var currencySelection = this.getCurrencySelection(asset);
3646
3717
  return XTokensTransferImpl.transferXTokens(input, currencySelection);
3647
3718
  }
3719
+ }, {
3720
+ key: "transferLocalNativeAsset",
3721
+ value: function transferLocalNativeAsset(options) {
3722
+ var api = options.api,
3723
+ asset = options.asset,
3724
+ address = options.address;
3725
+ return api.callTxMethod({
3726
+ module: 'Currencies',
3727
+ section: 'transfer_native_currency',
3728
+ parameters: {
3729
+ dest: {
3730
+ Id: address
3731
+ },
3732
+ amount: BigInt(asset.amount)
3733
+ }
3734
+ });
3735
+ }
3736
+ }, {
3737
+ key: "transferLocalNonNativeAsset",
3738
+ value: function transferLocalNonNativeAsset(options) {
3739
+ var api = options.api,
3740
+ asset = options.asset,
3741
+ address = options.address;
3742
+ if (asset.symbol.toLowerCase() === 'lcdot') {
3743
+ throw new assets.InvalidCurrencyError('LcDOT local transfers are not supported');
3744
+ }
3745
+ return api.callTxMethod({
3746
+ module: 'Currencies',
3747
+ section: 'transfer',
3748
+ parameters: {
3749
+ dest: {
3750
+ Id: address
3751
+ },
3752
+ currency_id: this.getCurrencySelection(_objectSpread2(_objectSpread2({}, asset), {}, {
3753
+ symbol: asset.symbol === 'aSEED' ? 'AUSD' : asset.symbol
3754
+ })),
3755
+ amount: BigInt(asset.amount)
3756
+ }
3757
+ });
3758
+ }
3648
3759
  }]);
3649
3760
  }(ParachainNode);
3650
3761
 
@@ -3672,6 +3783,30 @@ var Altair = /*#__PURE__*/function (_ParachainNode) {
3672
3783
  var currencySelection = this.getCurrencySelection(asset);
3673
3784
  return XTokensTransferImpl.transferXTokens(input, currencySelection);
3674
3785
  }
3786
+ }, {
3787
+ key: "transferLocalNonNativeAsset",
3788
+ value: function transferLocalNonNativeAsset(options) {
3789
+ var api = options.api,
3790
+ asset = options.asset,
3791
+ address = options.address;
3792
+ if (!assets.isForeignAsset(asset)) {
3793
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
3794
+ }
3795
+ if (asset.assetId === undefined) {
3796
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
3797
+ }
3798
+ return api.callTxMethod({
3799
+ module: 'Tokens',
3800
+ section: 'transfer',
3801
+ parameters: {
3802
+ dest: {
3803
+ Id: address
3804
+ },
3805
+ currency_id: this.getCurrencySelection(asset),
3806
+ amount: BigInt(asset.amount)
3807
+ }
3808
+ });
3809
+ }
3675
3810
  }]);
3676
3811
  }(ParachainNode);
3677
3812
 
@@ -3777,6 +3912,11 @@ var AssetHubKusama = /*#__PURE__*/function (_ParachainNode) {
3777
3912
  value: function createCurrencySpec(amount, scenario, version, asset, isOverridenAsset) {
3778
3913
  return getNode('AssetHubPolkadot').createCurrencySpec(amount, scenario, version, asset, isOverridenAsset);
3779
3914
  }
3915
+ }, {
3916
+ key: "transferLocalNonNativeAsset",
3917
+ value: function transferLocalNonNativeAsset(options) {
3918
+ return getNode('AssetHubPolkadot').transferLocalNonNativeAsset(options);
3919
+ }
3780
3920
  }]);
3781
3921
  }(ParachainNode);
3782
3922
 
@@ -4343,6 +4483,40 @@ var AssetHubPolkadot = /*#__PURE__*/function (_ParachainNode) {
4343
4483
  return _superPropGet(AssetHubPolkadot, "createCurrencySpec", this, 3)([amount, scenario, version, asset]);
4344
4484
  }
4345
4485
  }
4486
+ }, {
4487
+ key: "transferLocalNonNativeAsset",
4488
+ value: function transferLocalNonNativeAsset(options) {
4489
+ var api = options.api,
4490
+ asset = options.asset,
4491
+ address = options.address;
4492
+ if (!assets.isForeignAsset(asset)) {
4493
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
4494
+ }
4495
+ if (asset.assetId !== undefined) {
4496
+ return api.callTxMethod({
4497
+ module: 'Assets',
4498
+ section: 'transfer',
4499
+ parameters: {
4500
+ id: Number(asset.assetId),
4501
+ target: {
4502
+ Id: address
4503
+ },
4504
+ amount: BigInt(asset.amount)
4505
+ }
4506
+ });
4507
+ }
4508
+ return api.callTxMethod({
4509
+ module: 'ForeignAssets',
4510
+ section: 'transfer',
4511
+ parameters: {
4512
+ id: asset.multiLocation,
4513
+ target: {
4514
+ Id: address
4515
+ },
4516
+ amount: BigInt(asset.amount)
4517
+ }
4518
+ });
4519
+ }
4346
4520
  }]);
4347
4521
  }(ParachainNode);
4348
4522
 
@@ -4355,8 +4529,7 @@ var Astar = /*#__PURE__*/function (_ParachainNode) {
4355
4529
  return _createClass(Astar, [{
4356
4530
  key: "transferPolkadotXCM",
4357
4531
  value: function transferPolkadotXCM(input) {
4358
- // TESTED https://polkadot.subscan.io/xcm_message/polkadot-f2b697df74ebe4b62853fe81b8b7d0522464972d
4359
- return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(input, 'reserve_transfer_assets'));
4532
+ return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(input, 'limited_reserve_transfer_assets', 'Unlimited'));
4360
4533
  }
4361
4534
  }, {
4362
4535
  key: "transferXTokens",
@@ -4373,6 +4546,30 @@ var Astar = /*#__PURE__*/function (_ParachainNode) {
4373
4546
  var asset = _ref.asset;
4374
4547
  return asset.symbol !== this.getNativeAssetSymbol();
4375
4548
  }
4549
+ }, {
4550
+ key: "transferLocalNonNativeAsset",
4551
+ value: function transferLocalNonNativeAsset(options) {
4552
+ var api = options.api,
4553
+ asset = options.asset,
4554
+ address = options.address;
4555
+ if (!assets.isForeignAsset(asset)) {
4556
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
4557
+ }
4558
+ if (asset.assetId === undefined) {
4559
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
4560
+ }
4561
+ return api.callTxMethod({
4562
+ module: 'Assets',
4563
+ section: 'transfer',
4564
+ parameters: {
4565
+ id: Number(asset.assetId),
4566
+ target: {
4567
+ Id: address
4568
+ },
4569
+ amount: BigInt(asset.amount)
4570
+ }
4571
+ });
4572
+ }
4376
4573
  }]);
4377
4574
  }(ParachainNode);
4378
4575
 
@@ -4391,6 +4588,16 @@ var Basilisk = /*#__PURE__*/function (_ParachainNode) {
4391
4588
  }
4392
4589
  return XTokensTransferImpl.transferXTokens(input, Number(asset.assetId));
4393
4590
  }
4591
+ }, {
4592
+ key: "transferLocalNativeAsset",
4593
+ value: function transferLocalNativeAsset(options) {
4594
+ return getNode('Hydration').transferLocalNativeAsset(options);
4595
+ }
4596
+ }, {
4597
+ key: "transferLocalNonNativeAsset",
4598
+ value: function transferLocalNonNativeAsset(options) {
4599
+ return getNode('Hydration').transferLocalNonNativeAsset(options);
4600
+ }
4394
4601
  }]);
4395
4602
  }(ParachainNode);
4396
4603
 
@@ -4405,6 +4612,11 @@ var BifrostKusama = /*#__PURE__*/function (_ParachainNode) {
4405
4612
  value: function transferXTokens(input) {
4406
4613
  return getNode('BifrostPolkadot').transferXTokens(input);
4407
4614
  }
4615
+ }, {
4616
+ key: "transferLocalNonNativeAsset",
4617
+ value: function transferLocalNonNativeAsset(options) {
4618
+ return getNode('BifrostPolkadot').transferLocalNonNativeAsset(options);
4619
+ }
4408
4620
  }]);
4409
4621
  }(ParachainNode);
4410
4622
 
@@ -4489,6 +4701,24 @@ var BifrostPolkadot = /*#__PURE__*/function (_ParachainNode) {
4489
4701
  if (destination === 'Ethereum') return false;
4490
4702
  return asset.symbol !== 'WETH' && asset.symbol !== 'DOT' || destination !== 'AssetHubPolkadot';
4491
4703
  }
4704
+ }, {
4705
+ key: "transferLocalNonNativeAsset",
4706
+ value: function transferLocalNonNativeAsset(options) {
4707
+ var api = options.api,
4708
+ asset = options.asset,
4709
+ address = options.address;
4710
+ return api.callTxMethod({
4711
+ module: 'Tokens',
4712
+ section: 'transfer',
4713
+ parameters: {
4714
+ dest: {
4715
+ Id: address
4716
+ },
4717
+ currency_id: this.getCurrencySelection(asset),
4718
+ amount: BigInt(asset.amount)
4719
+ }
4720
+ });
4721
+ }
4492
4722
  }]);
4493
4723
  }(ParachainNode);
4494
4724
 
@@ -4607,6 +4837,30 @@ var Centrifuge = /*#__PURE__*/function (_ParachainNode) {
4607
4837
  var currencySelection = this.getCurrencySelection(asset);
4608
4838
  return XTokensTransferImpl.transferXTokens(input, currencySelection);
4609
4839
  }
4840
+ }, {
4841
+ key: "transferLocalNonNativeAsset",
4842
+ value: function transferLocalNonNativeAsset(options) {
4843
+ var api = options.api,
4844
+ asset = options.asset,
4845
+ address = options.address;
4846
+ if (!assets.isForeignAsset(asset)) {
4847
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
4848
+ }
4849
+ if (asset.assetId === undefined) {
4850
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
4851
+ }
4852
+ return api.callTxMethod({
4853
+ module: 'Tokens',
4854
+ section: 'transfer',
4855
+ parameters: {
4856
+ dest: {
4857
+ Id: address
4858
+ },
4859
+ currency_id: this.getCurrencySelection(asset),
4860
+ amount: BigInt(asset.amount)
4861
+ }
4862
+ });
4863
+ }
4610
4864
  }]);
4611
4865
  }(ParachainNode);
4612
4866
 
@@ -4750,6 +5004,11 @@ var Crab = /*#__PURE__*/function (_ParachainNode) {
4750
5004
  return _superPropGet(Crab, "createCurrencySpec", this, 3)([amount, scenario, version]);
4751
5005
  }
4752
5006
  }
5007
+ }, {
5008
+ key: "transferLocalNonNativeAsset",
5009
+ value: function transferLocalNonNativeAsset(options) {
5010
+ return getNode('Darwinia').transferLocalNonNativeAsset(options);
5011
+ }
4753
5012
  }]);
4754
5013
  }(ParachainNode);
4755
5014
 
@@ -4779,6 +5038,30 @@ var Crust = /*#__PURE__*/function (_ParachainNode) {
4779
5038
  var currencySelection = this.getCurrencySelection(asset);
4780
5039
  return XTokensTransferImpl.transferXTokens(input, currencySelection);
4781
5040
  }
5041
+ }, {
5042
+ key: "transferLocalNonNativeAsset",
5043
+ value: function transferLocalNonNativeAsset(options) {
5044
+ var api = options.api,
5045
+ asset = options.asset,
5046
+ address = options.address;
5047
+ if (!assets.isForeignAsset(asset)) {
5048
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
5049
+ }
5050
+ if (asset.assetId === undefined) {
5051
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
5052
+ }
5053
+ return api.callTxMethod({
5054
+ module: 'Assets',
5055
+ section: 'transfer',
5056
+ parameters: {
5057
+ id: BigInt(asset.assetId),
5058
+ target: {
5059
+ Id: address
5060
+ },
5061
+ amount: BigInt(asset.amount)
5062
+ }
5063
+ });
5064
+ }
4782
5065
  }]);
4783
5066
  }(ParachainNode);
4784
5067
 
@@ -4808,6 +5091,11 @@ var CrustShadow = /*#__PURE__*/function (_ParachainNode) {
4808
5091
  var currencySelection = this.getCurrencySelection(asset);
4809
5092
  return XTokensTransferImpl.transferXTokens(input, currencySelection);
4810
5093
  }
5094
+ }, {
5095
+ key: "transferLocalNonNativeAsset",
5096
+ value: function transferLocalNonNativeAsset(options) {
5097
+ return getNode('Crust').transferLocalNonNativeAsset(options);
5098
+ }
4811
5099
  }]);
4812
5100
  }(ParachainNode);
4813
5101
 
@@ -4840,11 +5128,50 @@ var Darwinia = /*#__PURE__*/function (_ParachainNode) {
4840
5128
  return _createClass(Darwinia, [{
4841
5129
  key: "transferPolkadotXCM",
4842
5130
  value: function transferPolkadotXCM(input) {
4843
- var scenario = input.scenario;
4844
- if (scenario === 'ParaToPara') {
5131
+ var scenario = input.scenario,
5132
+ asset = input.asset;
5133
+ if (scenario === 'ParaToPara' && asset.symbol !== this.getNativeAssetSymbol()) {
4845
5134
  throw new ScenarioNotSupportedError(this.node, scenario);
4846
5135
  }
4847
- return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(input, 'reserve_transfer_assets'));
5136
+ return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(input, 'limited_reserve_transfer_assets', 'Unlimited'));
5137
+ }
5138
+ }, {
5139
+ key: "createCurrencySpec",
5140
+ value: function createCurrencySpec(amount, scenario, version, _asset) {
5141
+ if (scenario === 'ParaToPara') {
5142
+ return createVersionedMultiAssets(version, amount, {
5143
+ parents: sdkCommon.Parents.ZERO,
5144
+ interior: {
5145
+ X1: {
5146
+ PalletInstance: 5
5147
+ }
5148
+ }
5149
+ });
5150
+ } else {
5151
+ return _superPropGet(Darwinia, "createCurrencySpec", this, 3)([amount, scenario, version]);
5152
+ }
5153
+ }
5154
+ }, {
5155
+ key: "transferLocalNonNativeAsset",
5156
+ value: function transferLocalNonNativeAsset(options) {
5157
+ var api = options.api,
5158
+ asset = options.asset,
5159
+ address = options.address;
5160
+ if (!assets.isForeignAsset(asset)) {
5161
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
5162
+ }
5163
+ if (asset.assetId === undefined) {
5164
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
5165
+ }
5166
+ return api.callTxMethod({
5167
+ module: 'Assets',
5168
+ section: 'transfer',
5169
+ parameters: {
5170
+ id: BigInt(asset.assetId),
5171
+ target: address,
5172
+ amount: BigInt(asset.amount)
5173
+ }
5174
+ });
4848
5175
  }
4849
5176
  }]);
4850
5177
  }(ParachainNode);
@@ -5057,6 +5384,30 @@ var Polimec = /*#__PURE__*/function (_ParachainNode) {
5057
5384
  }), version, 'Teleport');
5058
5385
  return call;
5059
5386
  }
5387
+ }, {
5388
+ key: "transferLocalNonNativeAsset",
5389
+ value: function transferLocalNonNativeAsset(options) {
5390
+ var api = options.api,
5391
+ asset = options.asset,
5392
+ address = options.address;
5393
+ if (!assets.isForeignAsset(asset)) {
5394
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
5395
+ }
5396
+ if (asset.multiLocation === undefined) {
5397
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no multi-location"));
5398
+ }
5399
+ return api.callTxMethod({
5400
+ module: 'ForeignAssets',
5401
+ section: 'transfer',
5402
+ parameters: {
5403
+ id: asset.multiLocation,
5404
+ target: {
5405
+ Id: address
5406
+ },
5407
+ amount: BigInt(asset.amount)
5408
+ }
5409
+ });
5410
+ }
5060
5411
  }]);
5061
5412
  }(ParachainNode);
5062
5413
 
@@ -5186,6 +5537,43 @@ var Hydration = /*#__PURE__*/function (_ParachainNode) {
5186
5537
  var isEthAsset = asset.multiLocation && assets.findAssetByMultiLocation(assets.getOtherAssets('Ethereum'), asset.multiLocation);
5187
5538
  return destination !== 'Ethereum' && destination !== 'Polimec' && !(destination === 'AssetHubPolkadot' && asset.symbol === 'DOT') && !isEthAsset;
5188
5539
  }
5540
+ }, {
5541
+ key: "transferLocalNativeAsset",
5542
+ value: function transferLocalNativeAsset(options) {
5543
+ var api = options.api,
5544
+ asset = options.asset,
5545
+ address = options.address;
5546
+ return api.callTxMethod({
5547
+ module: 'Balances',
5548
+ section: 'transfer_keep_alive',
5549
+ parameters: {
5550
+ dest: address,
5551
+ value: BigInt(asset.amount)
5552
+ }
5553
+ });
5554
+ }
5555
+ }, {
5556
+ key: "transferLocalNonNativeAsset",
5557
+ value: function transferLocalNonNativeAsset(options) {
5558
+ var api = options.api,
5559
+ asset = options.asset,
5560
+ address = options.address;
5561
+ if (!assets.isForeignAsset(asset)) {
5562
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
5563
+ }
5564
+ if (asset.assetId === undefined) {
5565
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
5566
+ }
5567
+ return api.callTxMethod({
5568
+ module: 'Tokens',
5569
+ section: 'transfer',
5570
+ parameters: {
5571
+ dest: address,
5572
+ currency_id: Number(asset.assetId),
5573
+ amount: BigInt(asset.amount)
5574
+ }
5575
+ });
5576
+ }
5189
5577
  }]);
5190
5578
  }(ParachainNode);
5191
5579
  Hydration.NATIVE_ASSET_ID = 0;
@@ -5197,16 +5585,42 @@ var Interlay = /*#__PURE__*/function (_ParachainNode) {
5197
5585
  }
5198
5586
  _inherits(Interlay, _ParachainNode);
5199
5587
  return _createClass(Interlay, [{
5200
- key: "transferXTokens",
5201
- value: function transferXTokens(input) {
5202
- var asset = input.asset;
5203
- var currencySelection = assets.isForeignAsset(asset) ? {
5588
+ key: "getCurrencySelection",
5589
+ value: function getCurrencySelection(asset) {
5590
+ return assets.isForeignAsset(asset) ? {
5204
5591
  ForeignAsset: Number(asset.assetId)
5205
5592
  } : {
5206
5593
  Token: asset.symbol
5207
5594
  };
5595
+ }
5596
+ }, {
5597
+ key: "transferXTokens",
5598
+ value: function transferXTokens(input) {
5599
+ var asset = input.asset;
5600
+ var currencySelection = this.getCurrencySelection(asset);
5208
5601
  return XTokensTransferImpl.transferXTokens(input, currencySelection);
5209
5602
  }
5603
+ }, {
5604
+ key: "transferLocalNativeAsset",
5605
+ value: function transferLocalNativeAsset(options) {
5606
+ return this.transferLocalNonNativeAsset(options);
5607
+ }
5608
+ }, {
5609
+ key: "transferLocalNonNativeAsset",
5610
+ value: function transferLocalNonNativeAsset(options) {
5611
+ var api = options.api,
5612
+ asset = options.asset,
5613
+ address = options.address;
5614
+ return api.callTxMethod({
5615
+ module: 'Tokens',
5616
+ section: 'transfer',
5617
+ parameters: {
5618
+ dest: address,
5619
+ currency_id: this.getCurrencySelection(asset),
5620
+ value: BigInt(asset.amount)
5621
+ }
5622
+ });
5623
+ }
5210
5624
  }]);
5211
5625
  }(ParachainNode);
5212
5626
 
@@ -5239,22 +5653,34 @@ var Karura = /*#__PURE__*/function (_ParachainNode) {
5239
5653
  value: function transferXTokens(input) {
5240
5654
  return getNode('Acala').transferXTokens(input);
5241
5655
  }
5656
+ }, {
5657
+ key: "transferLocalNativeAsset",
5658
+ value: function transferLocalNativeAsset(options) {
5659
+ return getNode('Acala').transferLocalNativeAsset(options);
5660
+ }
5661
+ }, {
5662
+ key: "transferLocalNonNativeAsset",
5663
+ value: function transferLocalNonNativeAsset(options) {
5664
+ return getNode('Acala').transferLocalNonNativeAsset(options);
5665
+ }
5242
5666
  }]);
5243
5667
  }(ParachainNode);
5244
5668
 
5245
5669
  var KiltSpiritnet = /*#__PURE__*/function (_ParachainNode) {
5246
5670
  function KiltSpiritnet() {
5247
5671
  _classCallCheck(this, KiltSpiritnet);
5248
- return _callSuper(this, KiltSpiritnet, ['KiltSpiritnet', 'kilt', 'polkadot', exports.Version.V2]);
5672
+ return _callSuper(this, KiltSpiritnet, ['KiltSpiritnet', 'kilt', 'polkadot', exports.Version.V3]);
5249
5673
  }
5250
5674
  _inherits(KiltSpiritnet, _ParachainNode);
5251
5675
  return _createClass(KiltSpiritnet, [{
5252
5676
  key: "transferPolkadotXCM",
5253
5677
  value: function transferPolkadotXCM(input) {
5254
- if (input.scenario !== 'ParaToPara') {
5255
- throw new ScenarioNotSupportedError(this.node, input.scenario);
5678
+ var scenario = input.scenario,
5679
+ asset = input.asset;
5680
+ if (scenario === 'ParaToPara' && asset.symbol !== this.getNativeAssetSymbol()) {
5681
+ throw new ScenarioNotSupportedError(this.node, scenario, 'KiltSpiritnet only supports native asset ParaToPara transfers');
5256
5682
  }
5257
- return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(input, 'reserve_transfer_assets'));
5683
+ return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(input, 'limited_reserve_transfer_assets', 'Unlimited'));
5258
5684
  }
5259
5685
  }, {
5260
5686
  key: "transferRelayToPara",
@@ -5271,16 +5697,42 @@ var Kintsugi = /*#__PURE__*/function (_ParachainNode) {
5271
5697
  }
5272
5698
  _inherits(Kintsugi, _ParachainNode);
5273
5699
  return _createClass(Kintsugi, [{
5274
- key: "transferXTokens",
5275
- value: function transferXTokens(input) {
5276
- var asset = input.asset;
5277
- var currencySelection = assets.isForeignAsset(asset) ? {
5700
+ key: "getCurrencySelection",
5701
+ value: function getCurrencySelection(asset) {
5702
+ return assets.isForeignAsset(asset) ? {
5278
5703
  ForeignAsset: Number(asset.assetId)
5279
5704
  } : {
5280
5705
  Token: asset.symbol
5281
5706
  };
5707
+ }
5708
+ }, {
5709
+ key: "transferXTokens",
5710
+ value: function transferXTokens(input) {
5711
+ var asset = input.asset;
5712
+ var currencySelection = this.getCurrencySelection(asset);
5282
5713
  return XTokensTransferImpl.transferXTokens(input, currencySelection);
5283
5714
  }
5715
+ }, {
5716
+ key: "transferLocalNativeAsset",
5717
+ value: function transferLocalNativeAsset(options) {
5718
+ return this.transferLocalNonNativeAsset(options);
5719
+ }
5720
+ }, {
5721
+ key: "transferLocalNonNativeAsset",
5722
+ value: function transferLocalNonNativeAsset(options) {
5723
+ var api = options.api,
5724
+ asset = options.asset,
5725
+ address = options.address;
5726
+ return api.callTxMethod({
5727
+ module: 'Tokens',
5728
+ section: 'transfer',
5729
+ parameters: {
5730
+ dest: address,
5731
+ currency_id: this.getCurrencySelection(asset),
5732
+ value: BigInt(asset.amount)
5733
+ }
5734
+ });
5735
+ }
5284
5736
  }]);
5285
5737
  }(ParachainNode);
5286
5738
 
@@ -5308,6 +5760,30 @@ var Manta = /*#__PURE__*/function (_ParachainNode) {
5308
5760
  };
5309
5761
  return XTokensTransferImpl.transferXTokens(input, currencySelection);
5310
5762
  }
5763
+ }, {
5764
+ key: "transferLocalNonNativeAsset",
5765
+ value: function transferLocalNonNativeAsset(options) {
5766
+ var api = options.api,
5767
+ asset = options.asset,
5768
+ address = options.address;
5769
+ if (!assets.isForeignAsset(asset)) {
5770
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
5771
+ }
5772
+ if (asset.assetId === undefined) {
5773
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
5774
+ }
5775
+ return api.callTxMethod({
5776
+ module: 'Assets',
5777
+ section: 'transfer',
5778
+ parameters: {
5779
+ id: BigInt(asset.assetId),
5780
+ target: {
5781
+ Id: address
5782
+ },
5783
+ amount: BigInt(asset.amount)
5784
+ }
5785
+ });
5786
+ }
5311
5787
  }]);
5312
5788
  }(ParachainNode);
5313
5789
  Manta.NATIVE_ASSET_ID = 1n;
@@ -5355,6 +5831,28 @@ var Moonbeam = /*#__PURE__*/function (_ParachainNode) {
5355
5831
  includeFee: true
5356
5832
  };
5357
5833
  }
5834
+ }, {
5835
+ key: "transferLocalNonNativeAsset",
5836
+ value: function transferLocalNonNativeAsset(options) {
5837
+ var api = options.api,
5838
+ asset = options.asset,
5839
+ address = options.address;
5840
+ if (!assets.isForeignAsset(asset)) {
5841
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
5842
+ }
5843
+ if (asset.assetId === undefined) {
5844
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
5845
+ }
5846
+ return api.callTxMethod({
5847
+ module: 'Assets',
5848
+ section: 'transfer',
5849
+ parameters: {
5850
+ id: BigInt(asset.assetId),
5851
+ target: address,
5852
+ amount: BigInt(asset.amount)
5853
+ }
5854
+ });
5855
+ }
5358
5856
  }]);
5359
5857
  }(ParachainNode);
5360
5858
 
@@ -5401,6 +5899,11 @@ var Moonriver = /*#__PURE__*/function (_ParachainNode) {
5401
5899
  includeFee: true
5402
5900
  };
5403
5901
  }
5902
+ }, {
5903
+ key: "transferLocalNonNativeAsset",
5904
+ value: function transferLocalNonNativeAsset(options) {
5905
+ return getNode('Moonbeam').transferLocalNonNativeAsset(options);
5906
+ }
5404
5907
  }]);
5405
5908
  }(ParachainNode);
5406
5909
 
@@ -5498,6 +6001,30 @@ var Peaq = /*#__PURE__*/function (_ParachainNode) {
5498
6001
  value: function transferRelayToPara() {
5499
6002
  throw new NodeNotSupportedError();
5500
6003
  }
6004
+ }, {
6005
+ key: "transferLocalNonNativeAsset",
6006
+ value: function transferLocalNonNativeAsset(options) {
6007
+ var api = options.api,
6008
+ asset = options.asset,
6009
+ address = options.address;
6010
+ if (!assets.isForeignAsset(asset)) {
6011
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
6012
+ }
6013
+ if (asset.assetId === undefined) {
6014
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
6015
+ }
6016
+ return api.callTxMethod({
6017
+ module: 'Assets',
6018
+ section: 'transfer',
6019
+ parameters: {
6020
+ id: BigInt(asset.assetId),
6021
+ target: {
6022
+ Id: address
6023
+ },
6024
+ amount: BigInt(asset.amount)
6025
+ }
6026
+ });
6027
+ }
5501
6028
  }]);
5502
6029
  }(ParachainNode);
5503
6030
 
@@ -5687,6 +6214,30 @@ var Phala = /*#__PURE__*/function (_ParachainNode) {
5687
6214
  }
5688
6215
  return XTransferTransferImpl.transferXTransfer(input);
5689
6216
  }
6217
+ }, {
6218
+ key: "transferLocalNonNativeAsset",
6219
+ value: function transferLocalNonNativeAsset(options) {
6220
+ var api = options.api,
6221
+ asset = options.asset,
6222
+ address = options.address;
6223
+ if (!assets.isForeignAsset(asset)) {
6224
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
6225
+ }
6226
+ if (asset.assetId === undefined) {
6227
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
6228
+ }
6229
+ return api.callTxMethod({
6230
+ module: 'Assets',
6231
+ section: 'transfer',
6232
+ parameters: {
6233
+ id: BigInt(asset.assetId),
6234
+ target: {
6235
+ Id: address
6236
+ },
6237
+ amount: BigInt(asset.amount)
6238
+ }
6239
+ });
6240
+ }
5690
6241
  }]);
5691
6242
  }(ParachainNode);
5692
6243
 
@@ -5723,6 +6274,11 @@ var RobonomicsKusama = /*#__PURE__*/function (_ParachainNode) {
5723
6274
  value: function transferPolkadotXCM(input) {
5724
6275
  return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(input, 'limited_reserve_transfer_assets', 'Unlimited'));
5725
6276
  }
6277
+ }, {
6278
+ key: "transferLocalNonNativeAsset",
6279
+ value: function transferLocalNonNativeAsset(options) {
6280
+ return getNode('RobonomicsPolkadot').transferLocalNonNativeAsset(options);
6281
+ }
5726
6282
  }]);
5727
6283
  }(ParachainNode);
5728
6284
 
@@ -5737,6 +6293,30 @@ var RobonomicsPolkadot = /*#__PURE__*/function (_ParachainNode) {
5737
6293
  value: function transferPolkadotXCM(input) {
5738
6294
  return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(input, 'limited_reserve_transfer_assets', 'Unlimited'));
5739
6295
  }
6296
+ }, {
6297
+ key: "transferLocalNonNativeAsset",
6298
+ value: function transferLocalNonNativeAsset(options) {
6299
+ var api = options.api,
6300
+ asset = options.asset,
6301
+ address = options.address;
6302
+ if (!assets.isForeignAsset(asset)) {
6303
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
6304
+ }
6305
+ if (asset.assetId === undefined) {
6306
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
6307
+ }
6308
+ return api.callTxMethod({
6309
+ module: 'Assets',
6310
+ section: 'transfer',
6311
+ parameters: {
6312
+ id: BigInt(asset.assetId),
6313
+ target: {
6314
+ Id: address
6315
+ },
6316
+ amount: BigInt(asset.amount)
6317
+ }
6318
+ });
6319
+ }
5740
6320
  }]);
5741
6321
  }(ParachainNode);
5742
6322
 
@@ -5764,6 +6344,11 @@ var Shiden = /*#__PURE__*/function (_ParachainNode) {
5764
6344
  var asset = _ref.asset;
5765
6345
  return asset.symbol !== this.getNativeAssetSymbol();
5766
6346
  }
6347
+ }, {
6348
+ key: "transferLocalNonNativeAsset",
6349
+ value: function transferLocalNonNativeAsset(options) {
6350
+ return getNode('Astar').transferLocalNonNativeAsset(options);
6351
+ }
5767
6352
  }]);
5768
6353
  }(ParachainNode);
5769
6354
 
@@ -5806,6 +6391,30 @@ var Turing = /*#__PURE__*/function (_ParachainNode) {
5806
6391
  useMultiAssetTransfer: true
5807
6392
  }), BigInt(asset.assetId));
5808
6393
  }
6394
+ }, {
6395
+ key: "transferLocalNonNativeAsset",
6396
+ value: function transferLocalNonNativeAsset(options) {
6397
+ var api = options.api,
6398
+ asset = options.asset,
6399
+ address = options.address;
6400
+ if (!assets.isForeignAsset(asset)) {
6401
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
6402
+ }
6403
+ if (asset.assetId === undefined) {
6404
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
6405
+ }
6406
+ return api.callTxMethod({
6407
+ module: 'Currencies',
6408
+ section: 'transfer',
6409
+ parameters: {
6410
+ dest: {
6411
+ Id: address
6412
+ },
6413
+ currency_id: BigInt(asset.assetId),
6414
+ amount: BigInt(asset.amount)
6415
+ }
6416
+ });
6417
+ }
5809
6418
  }]);
5810
6419
  }(ParachainNode);
5811
6420
 
@@ -5827,6 +6436,11 @@ var Unique = /*#__PURE__*/function (_ParachainNode) {
5827
6436
  }
5828
6437
  return XTokensTransferImpl.transferXTokens(input, Number(asset.assetId));
5829
6438
  }
6439
+ }, {
6440
+ key: "transferLocalNonNativeAsset",
6441
+ value: function transferLocalNonNativeAsset(_options) {
6442
+ throw new ScenarioNotSupportedError(this.node, 'ParaToPara', "".concat(this.node, " does not support foreign assets local transfers"));
6443
+ }
5830
6444
  }]);
5831
6445
  }(ParachainNode);
5832
6446
  Unique.NATIVE_ASSET_ID = 0;
@@ -5855,6 +6469,30 @@ var Zeitgeist = /*#__PURE__*/function (_ParachainNode) {
5855
6469
  var currencySelection = this.getCurrencySelection(asset);
5856
6470
  return XTokensTransferImpl.transferXTokens(input, currencySelection);
5857
6471
  }
6472
+ }, {
6473
+ key: "transferLocalNonNativeAsset",
6474
+ value: function transferLocalNonNativeAsset(options) {
6475
+ var api = options.api,
6476
+ asset = options.asset,
6477
+ address = options.address;
6478
+ if (!assets.isForeignAsset(asset)) {
6479
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
6480
+ }
6481
+ if (asset.assetId === undefined) {
6482
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
6483
+ }
6484
+ return api.callTxMethod({
6485
+ module: 'AssetManager',
6486
+ section: 'transfer',
6487
+ parameters: {
6488
+ dest: {
6489
+ Id: address
6490
+ },
6491
+ currency_id: this.getCurrencySelection(asset),
6492
+ amount: BigInt(asset.amount)
6493
+ }
6494
+ });
6495
+ }
5858
6496
  }]);
5859
6497
  }(ParachainNode);
5860
6498
 
@@ -6517,7 +7155,7 @@ var validateCurrency = function validateCurrency(currency, feeAsset) {
6517
7155
  }
6518
7156
  };
6519
7157
  var validateDestination = function validateDestination(origin, destination) {
6520
- if (sdkCommon.isRelayChain(origin) && !sdkCommon.isTMultiLocation(destination) && sdkCommon.isRelayChain(destination)) {
7158
+ if (sdkCommon.isRelayChain(origin) && !sdkCommon.isTMultiLocation(destination) && sdkCommon.isRelayChain(destination) && origin !== destination) {
6521
7159
  throw new IncompatibleNodesError('Direct relay chain to relay chain transfers are not supported. Please use Polkadot <-> Kusama bridge through AssetHub.');
6522
7160
  }
6523
7161
  if (destination === 'Ethereum' && origin !== 'AssetHubPolkadot' && origin !== 'Hydration' && origin !== 'BifrostPolkadot') {
@@ -6646,7 +7284,7 @@ var validateDestinationAddress = function validateDestinationAddress(address, de
6646
7284
 
6647
7285
  var send = /*#__PURE__*/function () {
6648
7286
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
6649
- var api, origin, currency, feeAsset, address, destination, paraIdTo, version, senderAddress, pallet, method, isBridge, assetCheckEnabled, asset, resolvedFeeAsset, overriddenAsset, resolvedAsset, originNode;
7287
+ var api, origin, currency, feeAsset, address, destination, paraIdTo, version, senderAddress, pallet, method, isBridge, assetCheckEnabled, asset, resolvedFeeAsset, isLocalTransfer, overriddenAsset, resolvedAsset, originNode;
6650
7288
  return _regeneratorRuntime().wrap(function _callee$(_context) {
6651
7289
  while (1) switch (_context.prev = _context.next) {
6652
7290
  case 0:
@@ -6655,12 +7293,6 @@ var send = /*#__PURE__*/function () {
6655
7293
  validateDestination(origin, destination);
6656
7294
  validateDestinationAddress(address, destination);
6657
7295
  if (senderAddress) validateAddress(senderAddress, origin, false);
6658
- if (!(sdkCommon.isRelayChain(origin) && !sdkCommon.isTMultiLocation(destination) && sdkCommon.isRelayChain(destination))) {
6659
- _context.next = 7;
6660
- break;
6661
- }
6662
- throw new Error('Relay chain to relay chain transfers are not supported.');
6663
- case 7:
6664
7296
  isBridge = isBridgeTransfer(origin, destination);
6665
7297
  assetCheckEnabled = determineAssetCheckEnabled(origin, currency);
6666
7298
  validateAssetSpecifiers(assetCheckEnabled, currency);
@@ -6668,21 +7300,46 @@ var send = /*#__PURE__*/function () {
6668
7300
  resolvedFeeAsset = feeAsset ? resolveFeeAsset(feeAsset, origin, destination, currency) : undefined;
6669
7301
  validateAssetSupport(options, assetCheckEnabled, isBridge, asset);
6670
7302
  if (!sdkCommon.isRelayChain(origin)) {
6671
- _context.next = 19;
7303
+ _context.next = 24;
6672
7304
  break;
6673
7305
  }
6674
7306
  if (!(destination === 'Ethereum')) {
6675
- _context.next = 16;
7307
+ _context.next = 14;
6676
7308
  break;
6677
7309
  }
6678
7310
  throw new Error('Transfers from relay chain to Ethereum are not supported.');
6679
- case 16:
7311
+ case 14:
6680
7312
  if (asset) {
6681
- _context.next = 18;
7313
+ _context.next = 16;
6682
7314
  break;
6683
7315
  }
6684
7316
  throw new Error('Asset is required for relay chain to relay chain transfers.');
6685
- case 18:
7317
+ case 16:
7318
+ isLocalTransfer = origin === destination;
7319
+ if (!isLocalTransfer) {
7320
+ _context.next = 23;
7321
+ break;
7322
+ }
7323
+ if (!sdkCommon.isTMultiLocation(address)) {
7324
+ _context.next = 20;
7325
+ break;
7326
+ }
7327
+ throw new InvalidAddressError('Multi-Location address is not supported for local transfers.');
7328
+ case 20:
7329
+ _context.next = 22;
7330
+ return api.init(origin);
7331
+ case 22:
7332
+ return _context.abrupt("return", api.callTxMethod({
7333
+ module: 'Balances',
7334
+ section: 'transfer_keep_alive',
7335
+ parameters: {
7336
+ dest: {
7337
+ Id: address
7338
+ },
7339
+ value: 'multiasset' in currency ? 0n : BigInt(currency.amount)
7340
+ }
7341
+ }));
7342
+ case 23:
6686
7343
  return _context.abrupt("return", transferRelayToPara({
6687
7344
  api: api,
6688
7345
  origin: origin,
@@ -6696,11 +7353,11 @@ var send = /*#__PURE__*/function () {
6696
7353
  pallet: pallet,
6697
7354
  method: method
6698
7355
  }));
6699
- case 19:
7356
+ case 24:
6700
7357
  overriddenAsset = resolveOverriddenAsset(options, isBridge, assetCheckEnabled, resolvedFeeAsset);
6701
- _context.next = 22;
7358
+ _context.next = 27;
6702
7359
  return api.init(origin);
6703
- case 22:
7360
+ case 27:
6704
7361
  // In case asset check is disabled, we create asset object from currency symbol
6705
7362
  resolvedAsset = asset !== null && asset !== void 0 ? asset : {
6706
7363
  symbol: 'symbol' in currency ? currency.symbol : undefined
@@ -6721,7 +7378,7 @@ var send = /*#__PURE__*/function () {
6721
7378
  pallet: pallet,
6722
7379
  method: method
6723
7380
  }));
6724
- case 25:
7381
+ case 30:
6725
7382
  case "end":
6726
7383
  return _context.stop();
6727
7384
  }
@@ -6975,6 +7632,7 @@ var GeneralBuilder = /*#__PURE__*/function () {
6975
7632
  key: "build",
6976
7633
  value: (function () {
6977
7634
  var _build = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
7635
+ var _this$_options, from, to;
6978
7636
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
6979
7637
  while (1) switch (_context2.prev = _context2.next) {
6980
7638
  case 0:
@@ -6984,16 +7642,17 @@ var GeneralBuilder = /*#__PURE__*/function () {
6984
7642
  }
6985
7643
  throw new Error('Transaction manager contains batched items. Use buildBatch() to process them.');
6986
7644
  case 2:
6987
- if (!(!sdkCommon.isTMultiLocation(this._options.to) && sdkCommon.isRelayChain(this._options.from) && sdkCommon.isRelayChain(this._options.to))) {
6988
- _context2.next = 4;
7645
+ _this$_options = this._options, from = _this$_options.from, to = _this$_options.to;
7646
+ if (!(!sdkCommon.isTMultiLocation(to) && sdkCommon.isRelayChain(from) && sdkCommon.isRelayChain(to) && from !== to)) {
7647
+ _context2.next = 5;
6989
7648
  break;
6990
7649
  }
6991
7650
  throw new Error('Transfers between relay chains are not yet supported.');
6992
- case 4:
7651
+ case 5:
6993
7652
  return _context2.abrupt("return", send(_objectSpread2({
6994
7653
  api: this.api
6995
7654
  }, this._options)));
6996
- case 5:
7655
+ case 6:
6997
7656
  case "end":
6998
7657
  return _context2.stop();
6999
7658
  }
@@ -7335,8 +7994,8 @@ var getBalanceNative = /*#__PURE__*/function () {
7335
7994
 
7336
7995
  var getAssetBalanceInternal = /*#__PURE__*/function () {
7337
7996
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
7338
- var _yield$getBalanceFore;
7339
- var address, node, currency, api, isNativeSymbol;
7997
+ var _findAsset, _yield$getBalanceFore;
7998
+ var address, node, currency, api, asset, isNativeSymbol;
7340
7999
  return _regeneratorRuntime().wrap(function _callee$(_context) {
7341
8000
  while (1) switch (_context.prev = _context.next) {
7342
8001
  case 0:
@@ -7344,52 +8003,59 @@ var getAssetBalanceInternal = /*#__PURE__*/function () {
7344
8003
  _context.next = 3;
7345
8004
  return api.init(node);
7346
8005
  case 3:
7347
- isNativeSymbol = 'symbol' in currency ? assets.getNativeAssetSymbol(node) === currency.symbol : false;
8006
+ asset = (_findAsset = assets.findAsset(node, currency, null)) !== null && _findAsset !== void 0 ? _findAsset : node === 'AssetHubPolkadot' ? assets.findAsset('Ethereum', currency, null) : null;
8007
+ if (asset) {
8008
+ _context.next = 6;
8009
+ break;
8010
+ }
8011
+ throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(currency), " not found on ").concat(node));
8012
+ case 6:
8013
+ isNativeSymbol = asset.symbol === assets.getNativeAssetSymbol(node);
7348
8014
  if (!(isNativeSymbol && node !== 'Interlay' && node !== 'Kintsugi')) {
7349
- _context.next = 10;
8015
+ _context.next = 13;
7350
8016
  break;
7351
8017
  }
7352
- _context.next = 7;
8018
+ _context.next = 10;
7353
8019
  return getBalanceNativeInternal({
7354
8020
  address: address,
7355
8021
  node: node,
7356
8022
  api: api
7357
8023
  });
7358
- case 7:
8024
+ case 10:
7359
8025
  _context.t0 = _context.sent;
7360
- _context.next = 22;
8026
+ _context.next = 25;
7361
8027
  break;
7362
- case 10:
7363
- _context.next = 12;
8028
+ case 13:
8029
+ _context.next = 15;
7364
8030
  return getBalanceForeignInternal({
7365
8031
  address: address,
7366
8032
  node: node,
7367
8033
  api: api,
7368
8034
  currency: currency
7369
8035
  });
7370
- case 12:
8036
+ case 15:
7371
8037
  _context.t2 = _yield$getBalanceFore = _context.sent;
7372
8038
  _context.t1 = _context.t2 !== null;
7373
8039
  if (!_context.t1) {
7374
- _context.next = 16;
8040
+ _context.next = 19;
7375
8041
  break;
7376
8042
  }
7377
8043
  _context.t1 = _yield$getBalanceFore !== void 0;
7378
- case 16:
8044
+ case 19:
7379
8045
  if (!_context.t1) {
7380
- _context.next = 20;
8046
+ _context.next = 23;
7381
8047
  break;
7382
8048
  }
7383
8049
  _context.t3 = _yield$getBalanceFore;
7384
- _context.next = 21;
8050
+ _context.next = 24;
7385
8051
  break;
7386
- case 20:
8052
+ case 23:
7387
8053
  _context.t3 = 0n;
7388
- case 21:
8054
+ case 24:
7389
8055
  _context.t0 = _context.t3;
7390
- case 22:
8056
+ case 25:
7391
8057
  return _context.abrupt("return", _context.t0);
7392
- case 23:
8058
+ case 26:
7393
8059
  case "end":
7394
8060
  return _context.stop();
7395
8061
  }