@paraspell/sdk-core 14.3.5 → 14.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -83,7 +83,7 @@ declare abstract class PolkadotApi<TApi, TRes, TSigner, TCustomChain extends str
83
83
  getRelayChainSymbol(chain: TChain | TCustomChain): string;
84
84
  hasDryRunSupport(chain: TChain | TCustomChain): boolean;
85
85
  hasXcmPaymentApiSupport(chain: TChain | TCustomChain): boolean;
86
- getExistentialDepositOrThrow(chain: TChain | TCustomChain, currency?: TCurrencyCore): bigint;
86
+ getExistentialDeposit(chain: TChain | TCustomChain, currency?: TCurrencyCore): bigint;
87
87
  hasPallet(chain: TSubstrateChain | TCustomChain, pallet: TPallet): boolean;
88
88
  getXcmPallet(chain: TSubstrateChain | TCustomChain): TPallet;
89
89
  getRelayChainOf(chain: TSubstrateChain | TCustomChain): TRelaychain;
@@ -338,20 +338,6 @@ declare class CoretimeWestend<TApi, TRes, TSigner, TCustomChain extends string =
338
338
  constructor();
339
339
  }
340
340
 
341
- declare class Crust<TApi, TRes, TSigner, TCustomChain extends string = never> extends SubstrateChain<TApi, TRes, TSigner, TCustomChain> implements IXTokensTransfer<TApi, TRes, TSigner, TCustomChain> {
342
- constructor();
343
- private getCurrencySelection;
344
- transferXTokens(input: TXTokensTransferOptions<TApi, TRes, TSigner, TCustomChain>): TRes;
345
- transferLocalNonNativeAsset(options: TTransferLocalOptions<TApi, TRes, TSigner, TCustomChain>): TRes;
346
- }
347
-
348
- declare class CrustShadow<TApi, TRes, TSigner, TCustomChain extends string = never> extends SubstrateChain<TApi, TRes, TSigner, TCustomChain> implements IXTokensTransfer<TApi, TRes, TSigner, TCustomChain> {
349
- constructor();
350
- private getCurrencySelection;
351
- transferXTokens(input: TXTokensTransferOptions<TApi, TRes, TSigner, TCustomChain>): TRes;
352
- transferLocalNonNativeAsset(options: TTransferLocalOptions<TApi, TRes, TSigner, TCustomChain>): TRes;
353
- }
354
-
355
341
  declare class Curio<TApi, TRes, TSigner, TCustomChain extends string = never> extends SubstrateChain<TApi, TRes, TSigner, TCustomChain> implements IPolkadotXCMTransfer<TApi, TRes, TSigner, TCustomChain> {
356
342
  constructor();
357
343
  getCustomCurrencyId(_api: PolkadotApi<TApi, TRes, TSigner, TCustomChain>, asset: TAssetInfo): TForeignOrTokenAsset;
@@ -534,7 +520,6 @@ declare const chains: <TApi, TRes, TSigner>() => {
534
520
  Ajuna: Ajuna<TApi, TRes, TSigner, never>;
535
521
  Astar: Astar<TApi, TRes, TSigner, never>;
536
522
  Unique: Unique<TApi, TRes, TSigner, never>;
537
- Crust: Crust<TApi, TRes, TSigner, never>;
538
523
  BifrostPolkadot: BifrostPolkadot<TApi, TRes, TSigner, never>;
539
524
  BridgeHubPolkadot: BridgeHubPolkadot<TApi, TRes, TSigner, never>;
540
525
  Centrifuge: Centrifuge<TApi, TRes, TSigner, never>;
@@ -560,7 +545,6 @@ declare const chains: <TApi, TRes, TSigner>() => {
560
545
  Basilisk: Basilisk<TApi, TRes, TSigner, never>;
561
546
  BifrostKusama: BifrostKusama<TApi, TRes, TSigner, never>;
562
547
  Curio: Curio<TApi, TRes, TSigner, never>;
563
- CrustShadow: CrustShadow<TApi, TRes, TSigner, never>;
564
548
  Karura: Karura<TApi, TRes, TSigner, never>;
565
549
  PeopleKusama: PeopleKusama<TApi, TRes, TSigner, never>;
566
550
  Shiden: Shiden<TApi, TRes, TSigner, never>;
@@ -2306,7 +2290,7 @@ declare const resolveTransferParams: <TApi, TRes, TSigner, TCustomChain extends
2306
2290
  isNative?: boolean;
2307
2291
  assetId?: string;
2308
2292
  location: _paraspell_sdk_common.TLocation;
2309
- existentialDeposit?: string;
2293
+ existentialDeposit: string;
2310
2294
  isFeeAsset?: boolean;
2311
2295
  erc20?: _paraspell_assets.TErc20Info;
2312
2296
  alias?: string;
@@ -2546,7 +2530,7 @@ declare const reverseTransformLocation: (location: TLocation) => TLocation;
2546
2530
 
2547
2531
  declare const normalizeAmount: (amount: bigint) => bigint;
2548
2532
 
2549
- declare const resolveDestChain: <TApi, TRes, TSigner, TCustomChain extends string = never>(api: PolkadotApi<TApi, TRes, TSigner, TCustomChain>, originChain: TSubstrateChain | TCustomChain, paraId: number | undefined) => "AssetHubPolkadot" | "Acala" | "Ajuna" | "Astar" | "BifrostPolkadot" | "BridgeHubPolkadot" | "Centrifuge" | "Darwinia" | "EnergyWebX" | "Hydration" | "Heima" | "Jamton" | "CoretimePolkadot" | "Collectives" | "Crust" | "NeuroWeb" | "Pendulum" | "Mythos" | "Peaq" | "PeoplePolkadot" | "Unique" | "Xode" | "AssetHubKusama" | "BridgeHubKusama" | "Karura" | "CoretimeKusama" | "Encointer" | "Basilisk" | "BifrostKusama" | "Curio" | "CrustShadow" | "RobonomicsPolkadot" | "PeopleKusama" | "Shiden" | "AssetHubWestend" | "BridgeHubWestend" | "CollectivesWestend" | "CoretimeWestend" | "Penpal" | "PeopleWestend" | "AssetHubPaseo" | "EnergyWebXPaseo" | "HeimaPaseo" | "HydrationPaseo" | "PeoplePaseo" | undefined;
2533
+ declare const resolveDestChain: <TApi, TRes, TSigner, TCustomChain extends string = never>(api: PolkadotApi<TApi, TRes, TSigner, TCustomChain>, originChain: TSubstrateChain | TCustomChain, paraId: number | undefined) => "AssetHubPolkadot" | "Acala" | "Ajuna" | "Astar" | "BifrostPolkadot" | "BridgeHubPolkadot" | "Centrifuge" | "Darwinia" | "EnergyWebX" | "Hydration" | "Heima" | "Jamton" | "CoretimePolkadot" | "Collectives" | "NeuroWeb" | "Pendulum" | "Mythos" | "Peaq" | "PeoplePolkadot" | "Unique" | "Xode" | "AssetHubKusama" | "BridgeHubKusama" | "Karura" | "CoretimeKusama" | "Encointer" | "Basilisk" | "BifrostKusama" | "Curio" | "RobonomicsPolkadot" | "PeopleKusama" | "Shiden" | "AssetHubWestend" | "BridgeHubWestend" | "CollectivesWestend" | "CoretimeWestend" | "Penpal" | "PeopleWestend" | "AssetHubPaseo" | "EnergyWebXPaseo" | "HeimaPaseo" | "HydrationPaseo" | "PeoplePaseo" | undefined;
2550
2534
 
2551
2535
  declare const resolveParaId: <TApi, TRes, TSigner, TCustomChain extends string = never>(paraId: number | undefined, destination: TDestination, api: PolkadotApi<TApi, TRes, TSigner, TCustomChain>) => number | undefined;
2552
2536
 
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { blake2b } from '@noble/hashes/blake2.js';
2
- import { isChainEvm, getAssetsObject, InvalidCurrencyError, isAssetEqual, isSymbolMatch, isStableCoinAsset, isAdditionalSubstrateBridgeAsset, isBridgedSystemAsset, STABLECOIN_IDS, isSymbolSpecifier, normalizeLocation, getNativeAssetSymbol, getEdFromAssetOrThrow, extractAssetLocation, hasDryRunSupport, normalizeSymbol, Native, getOtherAssets, canonicalizeLocation, getAssetsObjectImpl, getAssetsImpl, getNativeAssetsImpl, getOtherAssetsImpl, findAssetInfoImpl, findAssetInfoOrThrowImpl, findAssetInfoOnDestImpl, findAssetOnDestOrThrowImpl, findNativeAssetInfoImpl, findNativeAssetInfoOrThrowImpl, isChainEvmImpl, getNativeAssetSymbolImpl, getRelayChainSymbolImpl, hasDryRunSupportImpl, hasXcmPaymentApiSupportImpl, getExistentialDepositOrThrowImpl, normalizeCustomAssets } from '@paraspell/assets';
2
+ import { isChainEvm, getAssetsObject, InvalidCurrencyError, isAssetEqual, isSymbolMatch, isStableCoinAsset, isAdditionalSubstrateBridgeAsset, isBridgedSystemAsset, STABLECOIN_IDS, isSymbolSpecifier, normalizeLocation, getNativeAssetSymbol, extractAssetLocation, hasDryRunSupport, normalizeSymbol, Native, getOtherAssets, canonicalizeLocation, getAssetsObjectImpl, getAssetsImpl, getNativeAssetsImpl, getOtherAssetsImpl, findAssetInfoImpl, findAssetInfoOrThrowImpl, findAssetInfoOnDestImpl, findAssetOnDestOrThrowImpl, findNativeAssetInfoImpl, findNativeAssetInfoOrThrowImpl, isChainEvmImpl, getNativeAssetSymbolImpl, getRelayChainSymbolImpl, hasDryRunSupportImpl, hasXcmPaymentApiSupportImpl, getExistentialDepositImpl, normalizeCustomAssets } from '@paraspell/assets';
3
3
  export * from '@paraspell/assets';
4
4
  import { base58 } from '@scure/base';
5
5
  import { isAddress, isHex, createPublicClient, http, formatUnits as formatUnits$1, parseUnits as parseUnits$1 } from 'viem';
@@ -1204,29 +1204,6 @@ var Collectives$1 = {
1204
1204
  }
1205
1205
  ]
1206
1206
  };
1207
- var Crust$1 = {
1208
- name: "Crust",
1209
- info: "crustParachain",
1210
- paraId: 2008,
1211
- providers: [
1212
- {
1213
- name: "Crust",
1214
- endpoint: "wss://crust-parachain.crustapps.net"
1215
- },
1216
- {
1217
- name: "Crust APP",
1218
- endpoint: "wss://crust-parachain.crustnetwork.app"
1219
- },
1220
- {
1221
- name: "Crust CC",
1222
- endpoint: "wss://crust-parachain.crustnetwork.cc"
1223
- },
1224
- {
1225
- name: "Crust XYZ",
1226
- endpoint: "wss://crust-parachain.crustnetwork.xyz"
1227
- }
1228
- ]
1229
- };
1230
1207
  var NeuroWeb$1 = {
1231
1208
  name: "NeuroWeb",
1232
1209
  info: "neuroweb",
@@ -1492,29 +1469,6 @@ var Curio$1 = {
1492
1469
  }
1493
1470
  ]
1494
1471
  };
1495
- var CrustShadow$1 = {
1496
- name: "Crust Shadow",
1497
- info: "shadow",
1498
- paraId: 2012,
1499
- providers: [
1500
- {
1501
- name: "Crust",
1502
- endpoint: "wss://rpc-shadow.crust.network/"
1503
- },
1504
- {
1505
- name: "Crust APP",
1506
- endpoint: "wss://rpc-shadow.crustnetwork.app"
1507
- },
1508
- {
1509
- name: "Crust CC",
1510
- endpoint: "wss://rpc-shadow.crustnetwork.cc"
1511
- },
1512
- {
1513
- name: "Crust XYZ",
1514
- endpoint: "wss://rpc-shadow.crustnetwork.xyz"
1515
- }
1516
- ]
1517
- };
1518
1472
  var RobonomicsPolkadot$1 = {
1519
1473
  name: "Robonomics",
1520
1474
  info: "robonomics",
@@ -1860,7 +1814,6 @@ var configs = {
1860
1814
  Jamton: Jamton$1,
1861
1815
  CoretimePolkadot: CoretimePolkadot$1,
1862
1816
  Collectives: Collectives$1,
1863
- Crust: Crust$1,
1864
1817
  NeuroWeb: NeuroWeb$1,
1865
1818
  Pendulum: Pendulum$1,
1866
1819
  Mythos: Mythos$1,
@@ -1876,7 +1829,6 @@ var configs = {
1876
1829
  Basilisk: Basilisk$1,
1877
1830
  BifrostKusama: BifrostKusama$1,
1878
1831
  Curio: Curio$1,
1879
- CrustShadow: CrustShadow$1,
1880
1832
  RobonomicsPolkadot: RobonomicsPolkadot$1,
1881
1833
  PeopleKusama: PeopleKusama$1,
1882
1834
  Shiden: Shiden$1,
@@ -2523,7 +2475,6 @@ var SystemPallet = /*#__PURE__*/function (_BaseAssetsPallet) {
2523
2475
  key: "getBalance",
2524
2476
  value: function () {
2525
2477
  var _getBalance = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(api, address, asset) {
2526
- var _asset$existentialDep;
2527
2478
  var account, free, reserved, frozen, ed, frozenUntouchable, untouchable, spendable;
2528
2479
  return _regenerator().w(function (_context) {
2529
2480
  while (1) switch (_context.n) {
@@ -2545,7 +2496,7 @@ var SystemPallet = /*#__PURE__*/function (_BaseAssetsPallet) {
2545
2496
  free = BigInt(account.data.free);
2546
2497
  reserved = BigInt(account.data.reserved);
2547
2498
  frozen = BigInt(account.data.frozen);
2548
- ed = BigInt((_asset$existentialDep = asset.existentialDeposit) !== null && _asset$existentialDep !== void 0 ? _asset$existentialDep : 0);
2499
+ ed = BigInt(asset.existentialDeposit);
2549
2500
  frozenUntouchable = frozen - reserved;
2550
2501
  untouchable = frozenUntouchable > ed ? frozenUntouchable : ed;
2551
2502
  spendable = free - untouchable;
@@ -5363,7 +5314,7 @@ var isSufficientOrigin = /*#__PURE__*/function () {
5363
5314
  }
5364
5315
  return _context.a(2, undefined);
5365
5316
  case 1:
5366
- edNative = api.getExistentialDepositOrThrow(origin);
5317
+ edNative = api.getExistentialDeposit(origin);
5367
5318
  _context.n = 2;
5368
5319
  return getBalanceInternal({
5369
5320
  api: api,
@@ -5394,7 +5345,7 @@ var isSufficientOrigin = /*#__PURE__*/function () {
5394
5345
  });
5395
5346
  case 4:
5396
5347
  balanceAsset = _context.v;
5397
- edAsset = getEdFromAssetOrThrow(asset);
5348
+ edAsset = BigInt(asset.existentialDeposit);
5398
5349
  isSufficientAsset = balanceAsset - edAsset > 0n;
5399
5350
  return _context.a(2, isSufficientNative && isSufficientAsset);
5400
5351
  case 5:
@@ -5421,7 +5372,7 @@ var isSufficientDestination = /*#__PURE__*/function () {
5421
5372
  }
5422
5373
  return _context2.a(2, undefined);
5423
5374
  case 1:
5424
- existentialDeposit = api.getExistentialDepositOrThrow(destination);
5375
+ existentialDeposit = api.getExistentialDeposit(destination);
5425
5376
  _context2.n = 2;
5426
5377
  return getBalanceInternal({
5427
5378
  api: api,
@@ -6295,7 +6246,7 @@ var wrapTxBypass = /*#__PURE__*/function () {
6295
6246
  if ((options === null || options === void 0 ? void 0 : options.sentAssetMintMode) === 'bypass') {
6296
6247
  mintAmount = parseUnits(bypassMintAmount, sentAsset.decimals) + sentAsset.amount;
6297
6248
  } else {
6298
- keepAliveBuffer = dryRunOptions.keepAlive ? getEdFromAssetOrThrow(sentAsset) : 0n;
6249
+ keepAliveBuffer = dryRunOptions.keepAlive ? BigInt(sentAsset.existentialDeposit) : 0n;
6299
6250
  desiredBalance = sentAsset.amount + keepAliveBuffer;
6300
6251
  missing = (_calcPreviewMintAmoun = calcPreviewMintAmount(balance, desiredBalance)) !== null && _calcPreviewMintAmoun !== void 0 ? _calcPreviewMintAmoun : 0n;
6301
6252
  total = missing + bonus;
@@ -7198,7 +7149,7 @@ var buildDestInfo = /*#__PURE__*/function () {
7198
7149
  return destApi.init(destination);
7199
7150
  case 1:
7200
7151
  destAsset = api.findAssetOnDestOrThrow(origin, destination, currency);
7201
- edDest = getEdFromAssetOrThrow(destAsset);
7152
+ edDest = BigInt(destAsset.existentialDeposit);
7202
7153
  _context.n = 2;
7203
7154
  return getAssetBalanceInternal({
7204
7155
  api: destApi,
@@ -7362,7 +7313,7 @@ var buildOriginInfo = /*#__PURE__*/function () {
7362
7313
  balance = _context.v;
7363
7314
  balanceAfter = balance - assetAmount;
7364
7315
  return _context.a(2, {
7365
- sufficient: balanceAfter >= getEdFromAssetOrThrow(asset),
7316
+ sufficient: balanceAfter >= BigInt(asset.existentialDeposit),
7366
7317
  balance: balance,
7367
7318
  balanceAfter: balanceAfter,
7368
7319
  asset: asset
@@ -7588,8 +7539,9 @@ var sumHopFees = function sumHopFees(result, _ref) {
7588
7539
  var assetInfo = _ref.assetInfo,
7589
7540
  feeAssetInfo = _ref.feeAssetInfo,
7590
7541
  isRelayAsset = _ref.isRelayAsset,
7591
- systemAsset = _ref.systemAsset;
7592
- var feeAsset = isRelayAsset ? assetInfo : feeAssetInfo !== null && feeAssetInfo !== void 0 ? feeAssetInfo : systemAsset;
7542
+ systemAsset = _ref.systemAsset,
7543
+ overriddenAsset = _ref.options.overriddenAsset;
7544
+ var feeAsset = isRelayAsset || overriddenAsset ? assetInfo : feeAssetInfo !== null && feeAssetInfo !== void 0 ? feeAssetInfo : systemAsset;
7593
7545
  return result.hops.reduce(function (acc, hop) {
7594
7546
  // only add if asset is equal
7595
7547
  return isAssetEqual(hop.result.asset, feeAsset) ? acc + hop.result.fee : acc;
@@ -7597,20 +7549,26 @@ var sumHopFees = function sumHopFees(result, _ref) {
7597
7549
  };
7598
7550
  var computeAllFees = /*#__PURE__*/function () {
7599
7551
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(context, buildTx) {
7600
- var origin, dest, _context$options, sender, recipient, currency, feeCurrency, version, result, hopFees, destFee;
7552
+ var origin, dest, feeAssetInfo, _context$options, sender, recipient, currency, feeCurrency, version, overriddenAsset, result, hopFees, destFee;
7601
7553
  return _regenerator().w(function (_context) {
7602
7554
  while (1) switch (_context.n) {
7603
7555
  case 0:
7604
- origin = context.origin, dest = context.dest, _context$options = context.options, sender = _context$options.sender, recipient = _context$options.recipient, currency = _context$options.currency, feeCurrency = _context$options.feeCurrency, version = _context$options.version;
7556
+ origin = context.origin, dest = context.dest, feeAssetInfo = context.feeAssetInfo, _context$options = context.options, sender = _context$options.sender, recipient = _context$options.recipient, currency = _context$options.currency, feeCurrency = _context$options.feeCurrency, version = _context$options.version, overriddenAsset = _context$options.overriddenAsset;
7605
7557
  assertSender(sender);
7606
7558
  assertAddressIsString(recipient);
7607
7559
  if (origin.api.hasDryRunSupport(context.origin.chain)) {
7560
+ _context.n = 2;
7561
+ break;
7562
+ }
7563
+ if (!(feeAssetInfo || overriddenAsset)) {
7608
7564
  _context.n = 1;
7609
7565
  break;
7610
7566
  }
7611
- return _context.a(2, null);
7567
+ throw new ScenarioNotSupportedError("Fee asset cannot be used on ".concat(origin.chain, " because it does not support dry run."));
7612
7568
  case 1:
7613
- _context.n = 2;
7569
+ return _context.a(2, null);
7570
+ case 2:
7571
+ _context.n = 3;
7614
7572
  return getXcmFeeInternal({
7615
7573
  api: origin.api,
7616
7574
  buildTx: buildTx,
@@ -7624,7 +7582,7 @@ var computeAllFees = /*#__PURE__*/function () {
7624
7582
  disableFallback: false,
7625
7583
  skipReverseFeeCalculation: true
7626
7584
  });
7627
- case 2:
7585
+ case 3:
7628
7586
  result = _context.v;
7629
7587
  hopFees = sumHopFees(result, context);
7630
7588
  destFee = result.destination.fee;
@@ -7697,7 +7655,7 @@ var getMinTransferableAmountInternal = /*#__PURE__*/function () {
7697
7655
  });
7698
7656
  case 1:
7699
7657
  destBalance = _context.v;
7700
- destEd = getEdFromAssetOrThrow(destAsset);
7658
+ destEd = BigInt(destAsset.existentialDeposit);
7701
7659
  paysOriginInSendingAsset = !resolvedFeeAsset && isAssetEqual(nativeAssetInfo, asset) || resolvedFeeAsset && isAssetEqual(resolvedFeeAsset, asset);
7702
7660
  originFee = result.origin && paysOriginInSendingAsset && isAssetEqual(result.origin.asset, asset) ? result.origin.fee : 0n;
7703
7661
  hopFeeTotal = result.hops.reduce(function (acc, hop) {
@@ -7837,7 +7795,7 @@ var getMinTransferableAmount = /*#__PURE__*/function () {
7837
7795
 
7838
7796
  var getOriginFeeOrThrow = /*#__PURE__*/function () {
7839
7797
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(_ref, feeCurrency) {
7840
- var api, buildTx, chain, sender, feeAsset, version, currency, _yield$getOriginXcmFe, fee;
7798
+ var api, buildTx, chain, sender, feeAsset, version, currency, result;
7841
7799
  return _regenerator().w(function (_context) {
7842
7800
  while (1) switch (_context.n) {
7843
7801
  case 0:
@@ -7855,15 +7813,14 @@ var getOriginFeeOrThrow = /*#__PURE__*/function () {
7855
7813
  disableFallback: false
7856
7814
  });
7857
7815
  case 1:
7858
- _yield$getOriginXcmFe = _context.v;
7859
- fee = _yield$getOriginXcmFe.fee;
7860
- if (!(fee === undefined)) {
7816
+ result = _context.v;
7817
+ if (!(result.fee === undefined)) {
7861
7818
  _context.n = 2;
7862
7819
  break;
7863
7820
  }
7864
7821
  throw new UnableToComputeError("Cannot get origin xcm fee for currency ".concat(JSON.stringify(currency, replaceBigInt), " on chain ").concat(chain, "."));
7865
7822
  case 2:
7866
- return _context.a(2, fee);
7823
+ return _context.a(2, result);
7867
7824
  }
7868
7825
  }, _callee);
7869
7826
  }));
@@ -7886,7 +7843,7 @@ var computeTransferableAmount = /*#__PURE__*/function () {
7886
7843
  });
7887
7844
  case 1:
7888
7845
  balance = _context2.v;
7889
- transferable = balance - getEdFromAssetOrThrow(asset) - fee;
7846
+ transferable = balance - BigInt(asset.existentialDeposit) - fee;
7890
7847
  return _context2.a(2, transferable > 0n ? transferable : 0n);
7891
7848
  }
7892
7849
  }, _callee2);
@@ -7897,7 +7854,7 @@ var computeTransferableAmount = /*#__PURE__*/function () {
7897
7854
  }();
7898
7855
  var getTransferableAmountForAsset = /*#__PURE__*/function () {
7899
7856
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(options, resolvedFeeAsset) {
7900
- var api, sender, chain, currency, asset, amount, nativeAssetInfo, isNativeAsset, paysOriginInSendingAsset, fee, _t;
7857
+ var api, sender, chain, currency, asset, amount, nativeAssetInfo, isNativeAsset, mayPayOriginInSendingAsset, originFee, fee, _t;
7901
7858
  return _regenerator().w(function (_context3) {
7902
7859
  while (1) switch (_context3.n) {
7903
7860
  case 0:
@@ -7906,8 +7863,8 @@ var getTransferableAmountForAsset = /*#__PURE__*/function () {
7906
7863
  amount = abstractDecimals(currency.amount, asset.decimals, api);
7907
7864
  nativeAssetInfo = api.findNativeAssetInfoOrThrow(chain);
7908
7865
  isNativeAsset = isAssetEqual(nativeAssetInfo, asset);
7909
- paysOriginInSendingAsset = !resolvedFeeAsset && isNativeAsset || resolvedFeeAsset && isAssetEqual(resolvedFeeAsset, asset);
7910
- if (!paysOriginInSendingAsset) {
7866
+ mayPayOriginInSendingAsset = isNativeAsset || resolvedFeeAsset && isAssetEqual(resolvedFeeAsset, asset);
7867
+ if (!mayPayOriginInSendingAsset) {
7911
7868
  _context3.n = 2;
7912
7869
  break;
7913
7870
  }
@@ -7920,9 +7877,10 @@ var getTransferableAmountForAsset = /*#__PURE__*/function () {
7920
7877
  _context3.n = 3;
7921
7878
  break;
7922
7879
  case 2:
7923
- _t = 0n;
7880
+ _t = undefined;
7924
7881
  case 3:
7925
- fee = _t;
7882
+ originFee = _t;
7883
+ fee = originFee && isAssetEqual(originFee.asset, asset) ? originFee.fee : 0n;
7926
7884
  return _context3.a(2, computeTransferableAmount(api, sender, chain, asset, fee));
7927
7885
  }
7928
7886
  }, _callee3);
@@ -7933,7 +7891,7 @@ var getTransferableAmountForAsset = /*#__PURE__*/function () {
7933
7891
  }();
7934
7892
  var getTransferableAmountForAssets = /*#__PURE__*/function () {
7935
7893
  var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(options, resolvedFeeAsset) {
7936
- var api, sender, chain, destination, currency, _resolveCurrency, assets, fee;
7894
+ var api, sender, chain, destination, currency, _resolveCurrency, assets, originFee;
7937
7895
  return _regenerator().w(function (_context4) {
7938
7896
  while (1) switch (_context4.n) {
7939
7897
  case 0:
@@ -7942,9 +7900,9 @@ var getTransferableAmountForAssets = /*#__PURE__*/function () {
7942
7900
  _context4.n = 1;
7943
7901
  return getOriginFeeOrThrow(options, currency);
7944
7902
  case 1:
7945
- fee = _context4.v;
7903
+ originFee = _context4.v;
7946
7904
  return _context4.a(2, Promise.all(assets.map(function (asset) {
7947
- return computeTransferableAmount(api, sender, chain, asset, asset.isFeeAsset ? fee : 0n);
7905
+ return computeTransferableAmount(api, sender, chain, asset, isAssetEqual(originFee.asset, asset) ? originFee.fee : 0n);
7948
7906
  })));
7949
7907
  }
7950
7908
  }, _callee4);
@@ -8539,8 +8497,12 @@ var createCustomXcm = /*#__PURE__*/function () {
8539
8497
  feeAssetLocation,
8540
8498
  feeLocLocalized,
8541
8499
  assetLocLocalized,
8500
+ transferredAsset,
8501
+ depositLocLocalized,
8542
8502
  asset,
8543
8503
  allOfSelector,
8504
+ isFeeLeftoverAboveEd,
8505
+ depositsFeeAsset,
8544
8506
  depositInstruction,
8545
8507
  localizeFilterAsset,
8546
8508
  assetsFilter,
@@ -8600,17 +8562,28 @@ var createCustomXcm = /*#__PURE__*/function () {
8600
8562
  feeAssetLocation = getFeeAssetLocation(context);
8601
8563
  feeLocLocalized = origin.api.localizeLocation(dest.chain, feeAssetLocation, origin.chain);
8602
8564
  assetLocLocalized = origin.api.localizeLocation(dest.chain, assetInfo.location, origin.chain);
8603
- asset = createAsset(version, assetInfo.amount, assetLocLocalized);
8565
+ transferredAsset = overriddenAsset === null || overriddenAsset === void 0 ? void 0 : overriddenAsset.find(function (asset) {
8566
+ return !asset.isFeeAsset;
8567
+ });
8568
+ depositLocLocalized = transferredAsset ? origin.api.localizeLocation(dest.chain, extractAssetLocation(transferredAsset), origin.chain) : assetLocLocalized;
8569
+ asset = createAsset(version, assetInfo.amount, depositLocLocalized);
8604
8570
  allOfSelector = {
8605
8571
  AllOf: {
8606
8572
  id: asset.id,
8607
8573
  fun: 'Fungible'
8608
8574
  }
8609
8575
  };
8576
+ isFeeLeftoverAboveEd = function isFeeLeftoverAboveEd() {
8577
+ var destFeeAsset = origin.api.findAssetInfoOnDest(origin.chain, dest.chain, {
8578
+ location: assetInfo.location
8579
+ }, assetInfo);
8580
+ return destFeeAsset !== null && assetInfo.amount - hopFees - destFee >= BigInt(destFeeAsset.existentialDeposit);
8581
+ };
8582
+ depositsFeeAsset = overriddenAsset !== undefined && (isForFeeCalc || isExternalChain(dest.chain) || isFeeLeftoverAboveEd());
8610
8583
  depositInstruction = {
8611
8584
  DepositAsset: {
8612
8585
  assets: {
8613
- Wild: assetCount > 1 && !overriddenAsset ? allOfSelector : {
8586
+ Wild: assetCount > 1 && !depositsFeeAsset ? allOfSelector : {
8614
8587
  AllCounted: assetCount
8615
8588
  }
8616
8589
  },
@@ -9095,7 +9068,7 @@ var verifyEdOnDestinationInternal = /*#__PURE__*/function () {
9095
9068
  while (1) switch (_context.n) {
9096
9069
  case 0:
9097
9070
  destAsset = _ref4.destAsset, amount = _ref4.amount, paysDestFee = _ref4.paysDestFee;
9098
- ed = getEdFromAssetOrThrow(destAsset);
9071
+ ed = BigInt(destAsset.existentialDeposit);
9099
9072
  _context.n = 1;
9100
9073
  return getAssetBalanceInternal({
9101
9074
  address: recipient,
@@ -9644,6 +9617,7 @@ var createExecuteExchangeXcm = function createExecuteExchangeXcm(input, origin,
9644
9617
  };
9645
9618
 
9646
9619
  var prepareCommonExecuteXcm = function prepareCommonExecuteXcm(options, assetToDeposit) {
9620
+ var depositFeeAsset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
9647
9621
  var api = options.api,
9648
9622
  useJitWithdraw = options.useJitWithdraw,
9649
9623
  recipient = options.recipient,
@@ -9673,7 +9647,7 @@ var prepareCommonExecuteXcm = function prepareCommonExecuteXcm(options, assetToD
9673
9647
  });
9674
9648
  var depositInstruction = {
9675
9649
  DepositAsset: {
9676
- assets: createAssetsFilter(assetToDeposit !== null && assetToDeposit !== void 0 ? assetToDeposit : assetLocalizedToDest, version),
9650
+ assets: depositFeeAsset ? createAllCountedFilter(2) : createAssetsFilter(assetToDeposit !== null && assetToDeposit !== void 0 ? assetToDeposit : assetLocalizedToDest, version),
9677
9651
  beneficiary: beneficiary
9678
9652
  }
9679
9653
  };
@@ -10051,7 +10025,7 @@ var createExchangeInstructions = /*#__PURE__*/function () {
10051
10025
  var createSwapExecuteXcm = /*#__PURE__*/function () {
10052
10026
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(options) {
10053
10027
  var _ref3, _ref4;
10054
- var api, chain, exchangeChain, destChain, assetInfoFrom, assetInfoTo, feeAssetInfo, _options$fees2, originFee, originReserveFee, exchangeFee, destReserveFee, destFee, sender, recipient, version, paraIdTo, isEthereumDest, resolvedDestChain, assetFrom, amountOut, assetTo, assetToLocalizedToDest, ethFeeAssetInfo, ethBridgeFee, nativeFeeAssetInfo, ahApi, _yield$getParaEthTran, _yield$getParaEthTran2, bridgeFee, executionFee, resolvedFeeAssetInfo, hasSeparateFeeAsset, createLegFees, feeAssetBudget, _prepareCommonExecute, prefix, depositInstruction, exchangeInstructions, exchangeToDestXcm, ethAsset, messageId, snowbridgeInstructions, finalXcm, fullXcm;
10028
+ var api, chain, exchangeChain, destChain, assetInfoFrom, assetInfoTo, feeAssetInfo, _options$fees2, originFee, originReserveFee, exchangeFee, destReserveFee, destFee, sender, recipient, version, paraIdTo, isEthereumDest, resolvedDestChain, assetFrom, amountOut, assetTo, assetToLocalizedToDest, ethFeeAssetInfo, ethBridgeFee, nativeFeeAssetInfo, ahApi, _yield$getParaEthTran, _yield$getParaEthTran2, bridgeFee, executionFee, resolvedFeeAssetInfo, hasSeparateFeeAsset, createLegFees, feeAssetBudget, isFeeLeftoverAboveEd, _prepareCommonExecute, prefix, depositInstruction, exchangeInstructions, exchangeToDestXcm, ethAsset, messageId, snowbridgeInstructions, finalXcm, fullXcm;
10055
10029
  return _regenerator().w(function (_context2) {
10056
10030
  while (1) switch (_context2.n) {
10057
10031
  case 0:
@@ -10095,6 +10069,13 @@ var createSwapExecuteXcm = /*#__PURE__*/function () {
10095
10069
  };
10096
10070
  };
10097
10071
  feeAssetBudget = ethFeeAssetInfo ? ethBridgeFee : originFee + originReserveFee + exchangeFee + destReserveFee + destFee;
10072
+ isFeeLeftoverAboveEd = function isFeeLeftoverAboveEd() {
10073
+ if (isEthereumDest || !resolvedFeeAssetInfo || !getFeeAssetInfo(assetInfoTo, resolvedFeeAssetInfo)) return false;
10074
+ var finalFeeAsset = api.findAssetInfo(destChain !== null && destChain !== void 0 ? destChain : exchangeChain, {
10075
+ location: resolvedFeeAssetInfo.location
10076
+ });
10077
+ return finalFeeAsset !== null && feeAssetBudget - (originReserveFee + exchangeFee + destReserveFee + destFee) >= BigInt(finalFeeAsset.existentialDeposit);
10078
+ };
10098
10079
  _prepareCommonExecute = prepareCommonExecuteXcm({
10099
10080
  api: api,
10100
10081
  chain: chain !== null && chain !== void 0 ? chain : exchangeChain,
@@ -10109,7 +10090,7 @@ var createSwapExecuteXcm = /*#__PURE__*/function () {
10109
10090
  destFee: 0n
10110
10091
  },
10111
10092
  version: version
10112
- }, assetToLocalizedToDest), prefix = _prepareCommonExecute.prefix, depositInstruction = _prepareCommonExecute.depositInstruction;
10093
+ }, assetToLocalizedToDest, isFeeLeftoverAboveEd()), prefix = _prepareCommonExecute.prefix, depositInstruction = _prepareCommonExecute.depositInstruction;
10113
10094
  _context2.n = 4;
10114
10095
  return createExchangeInstructions(options, assetFrom, assetTo, resolvedFeeAssetInfo);
10115
10096
  case 4:
@@ -10505,7 +10486,7 @@ var getLocalTransferAmount = function getLocalTransferAmount(_ref) {
10505
10486
  isAmountAll = _ref.isAmountAll,
10506
10487
  keepAlive = _ref.keepAlive;
10507
10488
  var fee = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0n;
10508
- var ed = getEdFromAssetOrThrow(assetInfo);
10489
+ var ed = BigInt(assetInfo.existentialDeposit);
10509
10490
  var amount = assetInfo.amount;
10510
10491
  var freeBalance = balance > fee ? balance - fee : 0n;
10511
10492
  if (isAmountAll) {
@@ -11121,7 +11102,7 @@ var Hydration = /*#__PURE__*/function (_SubstrateChain) {
11121
11102
  assertHasId(asset);
11122
11103
  var currencyId = Number(asset.assetId);
11123
11104
  if (asset.erc20) {
11124
- var amount = isAmountAll ? balance - (keepAlive ? getEdFromAssetOrThrow(asset) : 0n) : asset.amount;
11105
+ var amount = isAmountAll ? balance - (keepAlive ? BigInt(asset.existentialDeposit) : 0n) : asset.amount;
11125
11106
  return api.deserializeExtrinsics({
11126
11107
  module: 'Currencies',
11127
11108
  method: 'transfer',
@@ -11575,98 +11556,6 @@ var CoretimeWestend = /*#__PURE__*/function (_CoretimePolkadot) {
11575
11556
  return _createClass(CoretimeWestend);
11576
11557
  }(CoretimePolkadot);
11577
11558
 
11578
- var Crust = /*#__PURE__*/function (_SubstrateChain) {
11579
- function Crust() {
11580
- _classCallCheck(this, Crust);
11581
- return _callSuper(this, Crust, ['Crust', 'crustParachain', 'Polkadot', Version.V3]);
11582
- }
11583
- _inherits(Crust, _SubstrateChain);
11584
- return _createClass(Crust, [{
11585
- key: "getCurrencySelection",
11586
- value: function getCurrencySelection(asset) {
11587
- if (asset.isNative) return 'SelfReserve';
11588
- assertHasId(asset);
11589
- return {
11590
- OtherReserve: BigInt(asset.assetId)
11591
- };
11592
- }
11593
- }, {
11594
- key: "transferXTokens",
11595
- value: function transferXTokens$1(input) {
11596
- var asset = input.asset;
11597
- var currencySelection = this.getCurrencySelection(asset);
11598
- return transferXTokens(input, currencySelection);
11599
- }
11600
- }, {
11601
- key: "transferLocalNonNativeAsset",
11602
- value: function transferLocalNonNativeAsset(options) {
11603
- var api = options.api,
11604
- asset = options.assetInfo,
11605
- recipient = options.recipient,
11606
- isAmountAll = options.isAmountAll,
11607
- keepAlive = options.keepAlive;
11608
- assertHasId(asset);
11609
- var assetId = BigInt(asset.assetId);
11610
- var dest = {
11611
- Id: recipient
11612
- };
11613
- if (isAmountAll) {
11614
- return api.deserializeExtrinsics({
11615
- module: 'Assets',
11616
- method: 'transfer_all',
11617
- params: {
11618
- id: assetId,
11619
- dest: dest,
11620
- keep_alive: keepAlive
11621
- }
11622
- });
11623
- }
11624
- return api.deserializeExtrinsics({
11625
- module: 'Assets',
11626
- method: keepAlive ? 'transfer_keep_alive' : 'transfer',
11627
- params: {
11628
- id: assetId,
11629
- target: dest,
11630
- amount: asset.amount
11631
- }
11632
- });
11633
- }
11634
- }]);
11635
- }(SubstrateChain);
11636
-
11637
- var CrustShadow = /*#__PURE__*/function (_SubstrateChain) {
11638
- function CrustShadow() {
11639
- _classCallCheck(this, CrustShadow);
11640
- return _callSuper(this, CrustShadow, ['CrustShadow', 'shadow', 'Kusama', Version.V3]);
11641
- }
11642
- _inherits(CrustShadow, _SubstrateChain);
11643
- return _createClass(CrustShadow, [{
11644
- key: "getCurrencySelection",
11645
- value: function getCurrencySelection(api, asset) {
11646
- if (asset.symbol === this.getNativeAssetSymbol(api)) {
11647
- return 'SelfReserve';
11648
- }
11649
- assertHasId(asset);
11650
- return {
11651
- OtherReserve: BigInt(asset.assetId)
11652
- };
11653
- }
11654
- }, {
11655
- key: "transferXTokens",
11656
- value: function transferXTokens$1(input) {
11657
- var asset = input.asset,
11658
- api = input.api;
11659
- var currencySelection = this.getCurrencySelection(api, asset);
11660
- return transferXTokens(input, currencySelection);
11661
- }
11662
- }, {
11663
- key: "transferLocalNonNativeAsset",
11664
- value: function transferLocalNonNativeAsset(options) {
11665
- return getSubstrateChainImpl('Crust').transferLocalNonNativeAsset(options);
11666
- }
11667
- }]);
11668
- }(SubstrateChain);
11669
-
11670
11559
  var Curio = /*#__PURE__*/function (_SubstrateChain) {
11671
11560
  function Curio() {
11672
11561
  _classCallCheck(this, Curio);
@@ -12581,7 +12470,6 @@ var chains = function chains() {
12581
12470
  Ajuna: new Ajuna(),
12582
12471
  Astar: new Astar(),
12583
12472
  Unique: new Unique(),
12584
- Crust: new Crust(),
12585
12473
  BifrostPolkadot: new BifrostPolkadot(),
12586
12474
  BridgeHubPolkadot: new BridgeHubPolkadot(),
12587
12475
  Centrifuge: new Centrifuge(),
@@ -12608,7 +12496,6 @@ var chains = function chains() {
12608
12496
  Basilisk: new Basilisk(),
12609
12497
  BifrostKusama: new BifrostKusama(),
12610
12498
  Curio: new Curio(),
12611
- CrustShadow: new CrustShadow(),
12612
12499
  Karura: new Karura(),
12613
12500
  PeopleKusama: new PeopleKusama(),
12614
12501
  Shiden: new Shiden(),
@@ -13483,30 +13370,21 @@ var buildAutoNativeAsset = function buildAutoNativeAsset(entry) {
13483
13370
  var _requireNativeAssetFi = requireNativeAssetFields(entry),
13484
13371
  symbol = _requireNativeAssetFi.symbol,
13485
13372
  decimals = _requireNativeAssetFi.decimals;
13486
- return _objectSpread2({
13373
+ if (entry.nativeExistentialDeposit === undefined) {
13374
+ throw new CustomChainInvalidError("Custom chain '".concat(entry.name, "' failed to automatically fetch the native existential deposit. Please declare the native asset with existentialDeposit."));
13375
+ }
13376
+ return {
13487
13377
  symbol: symbol,
13488
13378
  decimals: decimals,
13489
13379
  location: buildNativeLocation(entry.paraId),
13490
- isNative: true
13491
- }, entry.nativeExistentialDeposit !== undefined && {
13380
+ isNative: true,
13492
13381
  existentialDeposit: entry.nativeExistentialDeposit
13493
- });
13382
+ };
13494
13383
  };
13495
13384
  var resolveAssets = function resolveAssets(entry) {
13496
- var declaredNativeAsset = entry.assets.find(function (asset) {
13385
+ return entry.assets.some(function (asset) {
13497
13386
  return asset.isNative;
13498
- });
13499
- if (declaredNativeAsset) {
13500
- if (declaredNativeAsset.existentialDeposit === undefined && entry.nativeExistentialDeposit) {
13501
- return entry.assets.map(function (asset) {
13502
- return asset === declaredNativeAsset ? _objectSpread2(_objectSpread2({}, asset), {}, {
13503
- existentialDeposit: entry.nativeExistentialDeposit
13504
- }) : asset;
13505
- });
13506
- }
13507
- return entry.assets;
13508
- }
13509
- return [buildAutoNativeAsset(entry)].concat(_toConsumableArray(entry.assets));
13387
+ }) ? entry.assets : [buildAutoNativeAsset(entry)].concat(_toConsumableArray(entry.assets));
13510
13388
  };
13511
13389
  var buildCustomChainAssetsInfo = function buildCustomChainAssetsInfo(entry) {
13512
13390
  var _entry$ss58Prefix;
@@ -13735,9 +13613,9 @@ var PolkadotApi = /*#__PURE__*/function () {
13735
13613
  return hasXcmPaymentApiSupportImpl(chain, this._customCtx);
13736
13614
  }
13737
13615
  }, {
13738
- key: "getExistentialDepositOrThrow",
13739
- value: function getExistentialDepositOrThrow(chain, currency) {
13740
- return getExistentialDepositOrThrowImpl(chain, currency, this._customCtx);
13616
+ key: "getExistentialDeposit",
13617
+ value: function getExistentialDeposit(chain, currency) {
13618
+ return getExistentialDepositImpl(chain, currency, this._customCtx);
13741
13619
  }
13742
13620
  }, {
13743
13621
  key: "hasPallet",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paraspell/sdk-core",
3
- "version": "14.3.5",
3
+ "version": "14.4.0",
4
4
  "description": "SDK core for ParaSpell XCM/XCMP tool for developers",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,12 +22,12 @@
22
22
  "dist"
23
23
  ],
24
24
  "dependencies": {
25
- "@noble/hashes": "^2.3.0",
26
- "@paraspell/assets": "14.3.5",
27
- "@paraspell/pallets": "14.3.5",
28
- "@paraspell/sdk-common": "14.3.5",
29
- "@scure/base": "^2.3.0",
30
- "viem": "^2.55.19"
25
+ "@noble/hashes": "^2.4.0",
26
+ "@paraspell/assets": "14.4.0",
27
+ "@paraspell/pallets": "14.4.0",
28
+ "@paraspell/sdk-common": "14.4.0",
29
+ "@scure/base": "^2.4.0",
30
+ "viem": "^2.57.0"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@babel/plugin-syntax-import-attributes": "^7.29.7",
@@ -36,13 +36,13 @@
36
36
  "@rollup/plugin-babel": "^7.1.0",
37
37
  "@rollup/plugin-json": "^6.1.0",
38
38
  "@rollup/plugin-typescript": "^12.3.0",
39
- "@vitest/coverage-v8": "^4.1.11",
40
- "axios": "^1.19.0",
41
- "dotenv": "^17.4.2",
42
- "rollup": "^4.62.5",
39
+ "@vitest/coverage-v8": "^5.0.2",
40
+ "axios": "^1.20.0",
41
+ "dotenv": "^18.0.4",
42
+ "rollup": "^4.63.5",
43
43
  "rollup-plugin-dts": "^6.5.1",
44
44
  "ts-morph": "^28.0.0",
45
- "tsx": "^4.23.12"
45
+ "tsx": "^4.23.15"
46
46
  },
47
47
  "scripts": {
48
48
  "compile": "tsc --noEmit",