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