@paraspell/sdk-core 14.3.4 → 14.3.6
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 +37 -3
- package/dist/index.mjs +942 -816
- package/package.json +4 -4
package/dist/index.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { blake2b } from '@noble/hashes/blake2.js';
|
|
2
|
-
import { isChainEvm, getAssetsObject, InvalidCurrencyError,
|
|
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';
|
|
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';
|
|
6
|
-
import { ParaSpellError, isTLocation, replaceBigInt, isExternalChain, CHAINS, Version, isRelayChain, isSubstrateBridge, Parents, deepEqual, isTrustedChain, isCustomChain, isSnowbridge, getJunctionValue, hasJunction, ETHEREUM_BRIDGE_ORIGINS, isBridge, flattenJunctions, RELAYCHAINS, DEFAULT_SS58_PREFIX } from '@paraspell/sdk-common';
|
|
6
|
+
import { ParaSpellError, isTLocation, replaceBigInt, isExternalChain, CHAINS, Version, isRelayChain, isSubstrateBridge, Parents, deepEqual, isTrustedChain, isCustomChain, isSnowbridge, getJunctionValue, hasJunction, ETHEREUM_BRIDGE_ORIGINS, isBridge, isSubstrateChain, flattenJunctions, RELAYCHAINS, DEFAULT_SS58_PREFIX } from '@paraspell/sdk-common';
|
|
7
7
|
export * from '@paraspell/sdk-common';
|
|
8
|
-
import {
|
|
8
|
+
import { getOtherAssetsPallets, getNativeAssetsPallet, BRIDGE_PALLETS, getPalletIndex, getXcmPallet, getSupportedPalletsDetails, ASSETS_PALLETS, NATIVE_ASSETS_PALLET_PRIORITY, OTHER_ASSETS_PALLET_PRIORITY, hasPalletImpl, getXcmPalletImpl } from '@paraspell/pallets';
|
|
9
9
|
export * from '@paraspell/pallets';
|
|
10
10
|
import { mainnet, sepolia } from 'viem/chains';
|
|
11
11
|
import { keccak_256 } from '@noble/hashes/sha3.js';
|
|
@@ -2040,7 +2040,12 @@ var createBuyExecution = function createBuyExecution(asset, weight) {
|
|
|
2040
2040
|
return [{
|
|
2041
2041
|
BuyExecution: {
|
|
2042
2042
|
fees: asset,
|
|
2043
|
-
weight_limit:
|
|
2043
|
+
weight_limit: weight ? {
|
|
2044
|
+
Limited: {
|
|
2045
|
+
ref_time: weight.refTime,
|
|
2046
|
+
proof_size: weight.proofSize
|
|
2047
|
+
}
|
|
2048
|
+
} : 'Unlimited'
|
|
2044
2049
|
}
|
|
2045
2050
|
}];
|
|
2046
2051
|
};
|
|
@@ -2142,65 +2147,6 @@ var createTransactInstructions = /*#__PURE__*/function () {
|
|
|
2142
2147
|
};
|
|
2143
2148
|
}();
|
|
2144
2149
|
|
|
2145
|
-
var handleTransactUsingSend = /*#__PURE__*/function () {
|
|
2146
|
-
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(_ref) {
|
|
2147
|
-
var api, version, chain, destination, destChain, recipient, paraIdTo, asset, transactOptions, dest, transactInstructions, message;
|
|
2148
|
-
return _regenerator().w(function (_context) {
|
|
2149
|
-
while (1) switch (_context.n) {
|
|
2150
|
-
case 0:
|
|
2151
|
-
api = _ref.api, version = _ref.version, chain = _ref.chain, destination = _ref.destination, destChain = _ref.destChain, recipient = _ref.recipient, paraIdTo = _ref.paraIdTo, asset = _ref.asset, transactOptions = _ref.transactOptions;
|
|
2152
|
-
dest = createDestination(api, version, chain, destination, paraIdTo);
|
|
2153
|
-
if (transactOptions !== null && transactOptions !== void 0 && transactOptions.call) {
|
|
2154
|
-
_context.n = 1;
|
|
2155
|
-
break;
|
|
2156
|
-
}
|
|
2157
|
-
throw new UnsupportedOperationError('Cannot use handleTransactUsingSend without transactOptions.call defined');
|
|
2158
|
-
case 1:
|
|
2159
|
-
if (destChain) {
|
|
2160
|
-
_context.n = 2;
|
|
2161
|
-
break;
|
|
2162
|
-
}
|
|
2163
|
-
throw new UnsupportedOperationError('destChain must be provided when using handleTransactUsingSend');
|
|
2164
|
-
case 2:
|
|
2165
|
-
assertAddressIsString(recipient);
|
|
2166
|
-
_context.n = 3;
|
|
2167
|
-
return createTransactInstructions(api, transactOptions, version, destChain, recipient);
|
|
2168
|
-
case 3:
|
|
2169
|
-
transactInstructions = _context.v;
|
|
2170
|
-
message = [{
|
|
2171
|
-
WithdrawAsset: [asset]
|
|
2172
|
-
}].concat(_toConsumableArray(createBuyExecution(asset)), _toConsumableArray(transactInstructions), [{
|
|
2173
|
-
RefundSurplus: undefined
|
|
2174
|
-
}, {
|
|
2175
|
-
DepositAsset: {
|
|
2176
|
-
assets: {
|
|
2177
|
-
Wild: {
|
|
2178
|
-
AllCounted: 1
|
|
2179
|
-
}
|
|
2180
|
-
},
|
|
2181
|
-
beneficiary: createBeneficiaryLocation({
|
|
2182
|
-
api: api,
|
|
2183
|
-
address: recipient,
|
|
2184
|
-
version: version
|
|
2185
|
-
})
|
|
2186
|
-
}
|
|
2187
|
-
}]);
|
|
2188
|
-
return _context.a(2, {
|
|
2189
|
-
module: getXcmPallet(chain),
|
|
2190
|
-
method: 'send',
|
|
2191
|
-
params: {
|
|
2192
|
-
dest: addXcmVersionHeader(dest, version),
|
|
2193
|
-
message: addXcmVersionHeader(message, version)
|
|
2194
|
-
}
|
|
2195
|
-
});
|
|
2196
|
-
}
|
|
2197
|
-
}, _callee);
|
|
2198
|
-
}));
|
|
2199
|
-
return function handleTransactUsingSend(_x) {
|
|
2200
|
-
return _ref2.apply(this, arguments);
|
|
2201
|
-
};
|
|
2202
|
-
}();
|
|
2203
|
-
|
|
2204
2150
|
var BaseAssetsPallet = /*#__PURE__*/_createClass(function BaseAssetsPallet(palletName) {
|
|
2205
2151
|
_classCallCheck(this, BaseAssetsPallet);
|
|
2206
2152
|
this.palletName = palletName;
|
|
@@ -2705,6 +2651,14 @@ var resolveParaId = function resolveParaId(paraId, destination, api) {
|
|
|
2705
2651
|
return paraId !== undefined ? paraId : api.getParaId(destination);
|
|
2706
2652
|
};
|
|
2707
2653
|
|
|
2654
|
+
var getFeeAssetInfo = function getFeeAssetInfo(assetInfo, feeAssetInfo) {
|
|
2655
|
+
return feeAssetInfo && !isAssetEqual(assetInfo, feeAssetInfo) ? feeAssetInfo : undefined;
|
|
2656
|
+
};
|
|
2657
|
+
var hasMatchingFeeAssetReserve = function hasMatchingFeeAssetReserve(api, chain, assetInfo, feeAssetInfo) {
|
|
2658
|
+
var resolvedFeeAssetInfo = getFeeAssetInfo(assetInfo, feeAssetInfo);
|
|
2659
|
+
return !resolvedFeeAssetInfo || api.getAssetReserveChain(chain, resolvedFeeAssetInfo.location) === api.getAssetReserveChain(chain, assetInfo.location);
|
|
2660
|
+
};
|
|
2661
|
+
|
|
2708
2662
|
var resolveScenario = function resolveScenario(origin, destination) {
|
|
2709
2663
|
if (isRelayChain(origin)) return 'RelayToPara';
|
|
2710
2664
|
var isRelayDestination = !isTLocation(destination) && isRelayChain(destination);
|
|
@@ -2762,7 +2716,7 @@ var SubstrateChain = /*#__PURE__*/function (_Chain) {
|
|
|
2762
2716
|
key: "transfer",
|
|
2763
2717
|
value: function () {
|
|
2764
2718
|
var _transfer = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(transferOptions) {
|
|
2765
|
-
var api, asset, currency, feeAsset, feeCurrency, recipient, destination, paraIdTo, overriddenAsset, version, sender, ahAddress, pallet, method, keepAlive, transactOptions, scenario, paraId, destChain, isLocalTransfer, isRelayAsset, mythAsset, isMythAsset, assetNeedsTypeThen, shouldUseReserveTransfer, supportsTypeThen, isSubBridge, useTypeAndThen, options, promise, isAHOrigin, isAHDest, isExternalAsset, isEthDest, isExternalAssetViaAh, isExternalAssetToAh, call, input, _t;
|
|
2719
|
+
var api, asset, currency, feeAsset, feeCurrency, recipient, destination, paraIdTo, overriddenAsset, version, sender, ahAddress, pallet, method, keepAlive, transactOptions, scenario, paraId, destChain, isLocalTransfer, isRelayAsset, mythAsset, isMythAsset, assetNeedsTypeThen, shouldUseReserveTransfer, supportsTypeThen, isSubBridge, useTypeAndThen, options, promise, isAHOrigin, isAHDest, isExternalAsset, isEthDest, isExternalAssetViaAh, isExternalAssetToAh, tx, call, input, _t;
|
|
2766
2720
|
return _regenerator().w(function (_context) {
|
|
2767
2721
|
while (1) switch (_context.n) {
|
|
2768
2722
|
case 0:
|
|
@@ -2803,9 +2757,9 @@ var SubstrateChain = /*#__PURE__*/function (_Chain) {
|
|
|
2803
2757
|
}
|
|
2804
2758
|
throw new TypeAndThenUnavailableError('Relaychain assets require the type-and-then method which is not supported by this chain.');
|
|
2805
2759
|
case 4:
|
|
2806
|
-
useTypeAndThen = !shouldUseReserveTransfer && assetNeedsTypeThen && supportsTypeThen && destChain && !isExternalChain(destChain) &&
|
|
2760
|
+
useTypeAndThen = !shouldUseReserveTransfer && assetNeedsTypeThen && supportsTypeThen && destChain && !isExternalChain(destChain) && (!isTrustedChain(this.chain) || !isTrustedChain(destChain)) || isSubBridge;
|
|
2807
2761
|
if (!(supportsPolkadotXCM(this) || useTypeAndThen)) {
|
|
2808
|
-
_context.n =
|
|
2762
|
+
_context.n = 14;
|
|
2809
2763
|
break;
|
|
2810
2764
|
}
|
|
2811
2765
|
options = {
|
|
@@ -2856,44 +2810,52 @@ var SubstrateChain = /*#__PURE__*/function (_Chain) {
|
|
|
2856
2810
|
isAHDest = !isTLocation(destination) && destination.includes('AssetHub'); // Handle common cases
|
|
2857
2811
|
isExternalAsset = asset.location.parents === Parents.TWO;
|
|
2858
2812
|
isEthDest = _typeof(destination) !== 'object' && isExternalChain(destination); // External asset - Any origin to any dest via AH - DestinationReserve - multiple instructions
|
|
2859
|
-
isExternalAssetViaAh = isExternalAsset && !isAHOrigin && !isAHDest && !isEthDest
|
|
2860
|
-
isExternalAssetToAh = isExternalAsset && isAHDest && !isAHOrigin && !isEthDest
|
|
2813
|
+
isExternalAssetViaAh = isExternalAsset && !isAHOrigin && !isAHDest && !isEthDest; // External asset - Any origin to AHP - DestinationReserve - one DepositAsset instruction
|
|
2814
|
+
isExternalAssetToAh = isExternalAsset && isAHDest && !isAHOrigin && !isEthDest;
|
|
2861
2815
|
if (!(isExternalAssetViaAh || isExternalAssetToAh || useTypeAndThen)) {
|
|
2862
|
-
_context.n =
|
|
2816
|
+
_context.n = 11;
|
|
2863
2817
|
break;
|
|
2864
2818
|
}
|
|
2865
2819
|
if (!(useTypeAndThen && supportsPolkadotXCM(this) && !isSubBridge)) {
|
|
2866
|
-
_context.n =
|
|
2820
|
+
_context.n = 9;
|
|
2867
2821
|
break;
|
|
2868
2822
|
}
|
|
2869
2823
|
_context.n = 8;
|
|
2870
2824
|
return this.transferPolkadotXCM(options);
|
|
2871
2825
|
case 8:
|
|
2872
|
-
|
|
2873
|
-
|
|
2826
|
+
tx = _context.v;
|
|
2827
|
+
if (!this.shouldUseExecuteTransfer(options)) {
|
|
2828
|
+
_context.n = 9;
|
|
2829
|
+
break;
|
|
2830
|
+
}
|
|
2831
|
+
return _context.a(2, tx);
|
|
2874
2832
|
case 9:
|
|
2833
|
+
_context.n = 10;
|
|
2834
|
+
return createTypeAndThenCall(options);
|
|
2835
|
+
case 10:
|
|
2875
2836
|
call = _context.v;
|
|
2876
2837
|
return _context.a(2, api.deserializeExtrinsics(call));
|
|
2877
|
-
case
|
|
2838
|
+
case 11:
|
|
2878
2839
|
if (!supportsPolkadotXCM(this)) {
|
|
2879
|
-
_context.n =
|
|
2840
|
+
_context.n = 13;
|
|
2880
2841
|
break;
|
|
2881
2842
|
}
|
|
2882
|
-
if (!(this.shouldUseNativeAssetTeleport(transferOptions) && !this.shouldUseExecuteTransfer(options))) {
|
|
2883
|
-
_context.n =
|
|
2843
|
+
if (!(this.shouldUseNativeAssetTeleport(transferOptions) && !getFeeAssetInfo(asset, feeAsset) && !this.shouldUseExecuteTransfer(options))) {
|
|
2844
|
+
_context.n = 12;
|
|
2884
2845
|
break;
|
|
2885
2846
|
}
|
|
2886
2847
|
return _context.a(2, transferPolkadotXcm(options, 'limited_teleport_assets', 'Unlimited'));
|
|
2887
|
-
case 11:
|
|
2888
|
-
return _context.a(2, this.transferPolkadotXCM(options));
|
|
2889
2848
|
case 12:
|
|
2890
|
-
_context.
|
|
2891
|
-
break;
|
|
2849
|
+
return _context.a(2, this.transferPolkadotXCM(options));
|
|
2892
2850
|
case 13:
|
|
2851
|
+
_context.n = 15;
|
|
2852
|
+
break;
|
|
2853
|
+
case 14:
|
|
2893
2854
|
if (!supportsXTokens(this)) {
|
|
2894
|
-
_context.n =
|
|
2855
|
+
_context.n = 15;
|
|
2895
2856
|
break;
|
|
2896
2857
|
}
|
|
2858
|
+
validateFeeAssetSupport(asset, feeAsset, overriddenAsset, 'XTokens');
|
|
2897
2859
|
input = {
|
|
2898
2860
|
api: api,
|
|
2899
2861
|
asset: asset,
|
|
@@ -2908,9 +2870,9 @@ var SubstrateChain = /*#__PURE__*/function (_Chain) {
|
|
|
2908
2870
|
method: method
|
|
2909
2871
|
};
|
|
2910
2872
|
return _context.a(2, this.transferXTokens(input));
|
|
2911
|
-
case 14:
|
|
2912
|
-
throw new NoXCMSupportImplementedError(this.chain);
|
|
2913
2873
|
case 15:
|
|
2874
|
+
throw new NoXCMSupportImplementedError(this.chain);
|
|
2875
|
+
case 16:
|
|
2914
2876
|
return _context.a(2);
|
|
2915
2877
|
}
|
|
2916
2878
|
}, _callee, this);
|
|
@@ -3310,15 +3272,19 @@ var resolveCurrency = function resolveCurrency(api, currency, resolvedFeeAsset,
|
|
|
3310
3272
|
};
|
|
3311
3273
|
|
|
3312
3274
|
var resolveFeeAsset = function resolveFeeAsset(api, feeAsset, origin, destination, currency) {
|
|
3313
|
-
if (!Array.isArray(currency) && !origin.startsWith('Hydration') && origin !== 'AssetHubPolkadot') {
|
|
3314
|
-
throw new ScenarioNotSupportedError("Fee asset is not supported on ".concat(origin));
|
|
3315
|
-
}
|
|
3316
3275
|
var dest = !isTLocation(destination) ? destination : null;
|
|
3317
3276
|
var asset = api.findAssetInfo(origin, feeAsset, dest);
|
|
3318
3277
|
if (!asset) {
|
|
3319
3278
|
return throwUnsupportedCurrency(feeAsset, origin);
|
|
3320
3279
|
}
|
|
3321
3280
|
if (!Array.isArray(currency)) {
|
|
3281
|
+
if (dest && isExternalChain(dest)) {
|
|
3282
|
+
var transferredAsset = api.findAssetInfo(origin, currency, dest);
|
|
3283
|
+
var relayAsset = api.findNativeAssetInfoOrThrow(api.getRelayChainOf(origin));
|
|
3284
|
+
if (!isAssetEqual(asset, relayAsset) && !(transferredAsset && isAssetEqual(asset, transferredAsset))) {
|
|
3285
|
+
throw new ScenarioNotSupportedError('Only the relay chain native asset can be used as fee asset for Snowbridge transfers');
|
|
3286
|
+
}
|
|
3287
|
+
}
|
|
3322
3288
|
return asset;
|
|
3323
3289
|
}
|
|
3324
3290
|
var feeElement = currency.find(function (item) {
|
|
@@ -3328,13 +3294,16 @@ var resolveFeeAsset = function resolveFeeAsset(api, feeAsset, origin, destinatio
|
|
|
3328
3294
|
if (!feeElement) {
|
|
3329
3295
|
throw new InvalidCurrencyError('Fee asset must be one of the provided assets');
|
|
3330
3296
|
}
|
|
3297
|
+
if (currency.length > 2) {
|
|
3298
|
+
throw new UnsupportedOperationError('Sending more than one non-fee asset is not yet supported');
|
|
3299
|
+
}
|
|
3331
3300
|
return _objectSpread2(_objectSpread2({}, asset), {}, {
|
|
3332
3301
|
amount: abstractDecimals(feeElement.amount, asset.decimals, api)
|
|
3333
3302
|
});
|
|
3334
3303
|
};
|
|
3335
3304
|
|
|
3336
3305
|
var resolveHopAsset = function resolveHopAsset(_ref) {
|
|
3337
|
-
var _api$
|
|
3306
|
+
var _api$findAssetInfoOnD2;
|
|
3338
3307
|
var api = _ref.api,
|
|
3339
3308
|
tx = _ref.tx,
|
|
3340
3309
|
originChain = _ref.originChain,
|
|
@@ -3344,16 +3313,27 @@ var resolveHopAsset = function resolveHopAsset(_ref) {
|
|
|
3344
3313
|
asset = _ref.asset,
|
|
3345
3314
|
currentAsset = _ref.currentAsset,
|
|
3346
3315
|
hasPassedExchange = _ref.hasPassedExchange,
|
|
3347
|
-
currency = _ref.currency
|
|
3348
|
-
|
|
3316
|
+
currency = _ref.currency,
|
|
3317
|
+
feeAsset = _ref.feeAsset;
|
|
3318
|
+
var feeAssetInfo = feeAsset && getFeeAssetInfo(asset, feeAsset);
|
|
3319
|
+
var isRelayAssetIncluded = !Array.isArray(currency) && !feeAssetInfo && api.getTypeThenAssetCount(tx) === 2;
|
|
3349
3320
|
var useRelayAssetAsFee = typeof destination === 'string' && isExternalChain(destination) || isRelayAssetIncluded;
|
|
3350
3321
|
if (useRelayAssetAsFee) {
|
|
3351
|
-
|
|
3322
|
+
var originRelay = api.getRelayChainOf(originChain);
|
|
3323
|
+
return getRelayChainOf(currentChain) === originRelay ? api.findNativeAssetInfoOrThrow(originRelay) : api.findAssetInfoOrThrow(currentChain, {
|
|
3324
|
+
location: api.localizeLocation(currentChain, RELAY_LOCATION, originChain)
|
|
3325
|
+
});
|
|
3326
|
+
}
|
|
3327
|
+
if (feeAssetInfo) {
|
|
3328
|
+
var _api$findAssetInfoOnD;
|
|
3329
|
+
return (_api$findAssetInfoOnD = api.findAssetInfoOnDest(originChain, currentChain, {
|
|
3330
|
+
location: feeAssetInfo.location
|
|
3331
|
+
}, feeAssetInfo)) !== null && _api$findAssetInfoOnD !== void 0 ? _api$findAssetInfoOnD : feeAssetInfo;
|
|
3352
3332
|
}
|
|
3353
3333
|
if (hasPassedExchange && swapConfig && currentChain !== swapConfig.exchangeChain) {
|
|
3354
3334
|
return api.findAssetOnDestOrThrow(swapConfig.exchangeChain, currentChain, swapConfig.currencyTo);
|
|
3355
3335
|
}
|
|
3356
|
-
return (_api$
|
|
3336
|
+
return (_api$findAssetInfoOnD2 = api.findAssetInfoOnDest(originChain, currentChain, currency, asset)) !== null && _api$findAssetInfoOnD2 !== void 0 ? _api$findAssetInfoOnD2 : currentAsset;
|
|
3357
3337
|
};
|
|
3358
3338
|
|
|
3359
3339
|
var getEthereumJunction = function getEthereumJunction(api, chain) {
|
|
@@ -3466,6 +3446,13 @@ var resolveOverriddenAsset = function resolveOverriddenAsset(options, isBridge,
|
|
|
3466
3446
|
return undefined;
|
|
3467
3447
|
};
|
|
3468
3448
|
|
|
3449
|
+
/**
|
|
3450
|
+
* Whether the chain can charge the origin transaction fee in a user-selected fee asset.
|
|
3451
|
+
*/
|
|
3452
|
+
var supportsFeeAssetPayment = function supportsFeeAssetPayment(chain) {
|
|
3453
|
+
return chain === 'AssetHubPolkadot' || chain.startsWith('Hydration');
|
|
3454
|
+
};
|
|
3455
|
+
|
|
3469
3456
|
var validateCurrency = function validateCurrency(currency, feeAsset) {
|
|
3470
3457
|
if (Array.isArray(currency)) {
|
|
3471
3458
|
if (currency.length === 0) {
|
|
@@ -3479,6 +3466,11 @@ var validateCurrency = function validateCurrency(currency, feeAsset) {
|
|
|
3479
3466
|
}
|
|
3480
3467
|
}
|
|
3481
3468
|
};
|
|
3469
|
+
var validateFeeAssetSupport = function validateFeeAssetSupport(assetInfo, feeAsset, overriddenAsset, method) {
|
|
3470
|
+
if (getFeeAssetInfo(assetInfo, feeAsset) && !overriddenAsset) {
|
|
3471
|
+
throw new ScenarioNotSupportedError("Fee asset cannot be used with ".concat(method));
|
|
3472
|
+
}
|
|
3473
|
+
};
|
|
3482
3474
|
var validateDestination = function validateDestination(origin, destination, api) {
|
|
3483
3475
|
if (isRelayChain(origin) && !isTLocation(destination) && isRelayChain(destination) && origin !== destination) {
|
|
3484
3476
|
throw new ScenarioNotSupportedError('Direct relay chain to relay chain transfers are not supported. Please use Polkadot <-> Kusama bridge through AssetHub.');
|
|
@@ -3710,357 +3702,37 @@ var getMythosOriginFee = /*#__PURE__*/function () {
|
|
|
3710
3702
|
};
|
|
3711
3703
|
}();
|
|
3712
3704
|
|
|
3713
|
-
var
|
|
3714
|
-
|
|
3715
|
-
|
|
3716
|
-
} : {
|
|
3717
|
-
X1: [junction]
|
|
3718
|
-
};
|
|
3705
|
+
var evmExtension;
|
|
3706
|
+
var registerEvmExtension = function registerEvmExtension(extension) {
|
|
3707
|
+
evmExtension = extension;
|
|
3719
3708
|
};
|
|
3720
|
-
|
|
3721
|
-
|
|
3722
|
-
return
|
|
3723
|
-
AccountKey20: {
|
|
3724
|
-
key: address
|
|
3725
|
-
}
|
|
3726
|
-
} : {
|
|
3727
|
-
AccountId32: {
|
|
3728
|
-
id: api.accountToHex(address)
|
|
3729
|
-
}
|
|
3730
|
-
};
|
|
3709
|
+
var getEvmExtensionOrThrow = function getEvmExtensionOrThrow() {
|
|
3710
|
+
assertExtensionInstalled(evmExtension, 'EVM', '@paraspell/evm', 'using an EVM origin');
|
|
3711
|
+
return evmExtension;
|
|
3731
3712
|
};
|
|
3732
|
-
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
|
|
3736
|
-
destination = _ref.destination,
|
|
3737
|
-
version = _ref.version,
|
|
3738
|
-
paraId = _ref.paraId;
|
|
3739
|
-
if (isTLocation(recipient)) {
|
|
3740
|
-
return recipient;
|
|
3741
|
-
}
|
|
3742
|
-
var scenario = resolveScenario(origin, destination);
|
|
3743
|
-
var accountPayload = createAccountPayload(api, recipient);
|
|
3744
|
-
if (scenario === 'ParaToRelay') {
|
|
3745
|
-
return {
|
|
3746
|
-
parents: Parents.ONE,
|
|
3747
|
-
interior: createX1Payload(version, {
|
|
3748
|
-
AccountId32: {
|
|
3749
|
-
id: api.accountToHex(recipient)
|
|
3750
|
-
}
|
|
3751
|
-
})
|
|
3752
|
-
};
|
|
3753
|
-
} else if (scenario === 'ParaToPara') {
|
|
3754
|
-
return {
|
|
3755
|
-
parents: Parents.ONE,
|
|
3756
|
-
interior: {
|
|
3757
|
-
X2: [{
|
|
3758
|
-
Parachain: paraId
|
|
3759
|
-
}, accountPayload]
|
|
3760
|
-
}
|
|
3761
|
-
};
|
|
3762
|
-
}
|
|
3763
|
-
return {
|
|
3764
|
-
parents: Parents.ZERO,
|
|
3765
|
-
interior: createX1Payload(version, accountPayload)
|
|
3766
|
-
};
|
|
3713
|
+
|
|
3714
|
+
var evmSnowbridgeExtension;
|
|
3715
|
+
var registerEvmSnowbridgeExtension = function registerEvmSnowbridgeExtension(extension) {
|
|
3716
|
+
evmSnowbridgeExtension = extension;
|
|
3767
3717
|
};
|
|
3768
|
-
var
|
|
3769
|
-
|
|
3770
|
-
|
|
3771
|
-
version = _ref2.version;
|
|
3772
|
-
if (isTLocation(address)) return address;
|
|
3773
|
-
var accountPayload = createAccountPayload(api, address);
|
|
3774
|
-
return {
|
|
3775
|
-
parents: Parents.ZERO,
|
|
3776
|
-
interior: createX1Payload(version, accountPayload)
|
|
3777
|
-
};
|
|
3718
|
+
var getEvmSnowbridgeExtensionOrThrow = function getEvmSnowbridgeExtensionOrThrow() {
|
|
3719
|
+
assertExtensionInstalled(evmSnowbridgeExtension, 'EVM Snowbridge', '@paraspell/evm-snowbridge', 'using Ethereum as an origin');
|
|
3720
|
+
return evmSnowbridgeExtension;
|
|
3778
3721
|
};
|
|
3779
3722
|
|
|
3780
|
-
var
|
|
3781
|
-
|
|
3782
|
-
|
|
3783
|
-
if (isSubBridge) {
|
|
3784
|
-
return {
|
|
3785
|
-
parents: Parents.TWO,
|
|
3786
|
-
interior: {
|
|
3787
|
-
X2: [{
|
|
3788
|
-
GlobalConsensus: api.getRelayChainOf(destination)
|
|
3789
|
-
}, {
|
|
3790
|
-
Parachain: chainId
|
|
3791
|
-
}]
|
|
3792
|
-
}
|
|
3793
|
-
};
|
|
3794
|
-
}
|
|
3795
|
-
var isExternalDestination = !isLocDestination && isExternalChain(destination);
|
|
3796
|
-
if (isExternalDestination) {
|
|
3797
|
-
return {
|
|
3798
|
-
parents: Parents.TWO,
|
|
3799
|
-
interior: {
|
|
3800
|
-
X1: [getEthereumJunction(api, origin)]
|
|
3801
|
-
}
|
|
3802
|
-
};
|
|
3803
|
-
}
|
|
3804
|
-
var scenario = resolveScenario(origin, destination);
|
|
3805
|
-
var parentsResolved = parents !== null && parents !== void 0 ? parents : scenario === 'RelayToPara' ? Parents.ZERO : Parents.ONE;
|
|
3806
|
-
var interior = scenario === 'ParaToRelay' ? 'Here' : createX1Payload(version, junction !== null && junction !== void 0 ? junction : {
|
|
3807
|
-
Parachain: chainId
|
|
3808
|
-
});
|
|
3809
|
-
return isLocDestination ? destination : {
|
|
3810
|
-
parents: parentsResolved,
|
|
3811
|
-
interior: interior
|
|
3812
|
-
};
|
|
3723
|
+
var swapExtension;
|
|
3724
|
+
var registerSwapExtension = function registerSwapExtension(extension) {
|
|
3725
|
+
swapExtension = extension;
|
|
3813
3726
|
};
|
|
3814
|
-
var
|
|
3815
|
-
|
|
3816
|
-
return
|
|
3727
|
+
var getSwapExtensionOrThrow = function getSwapExtensionOrThrow() {
|
|
3728
|
+
assertExtensionInstalled(swapExtension, 'swap', '@paraspell/swap', 'using swap features');
|
|
3729
|
+
return swapExtension;
|
|
3817
3730
|
};
|
|
3818
3731
|
|
|
3819
|
-
var
|
|
3820
|
-
var fromRelay = isRelayChain(chain);
|
|
3821
|
-
var toRelay = isRelayChain(destChain);
|
|
3822
|
-
var parents = fromRelay ? Parents.ZERO : Parents.ONE;
|
|
3823
|
-
var interior = toRelay ? 'Here' : {
|
|
3824
|
-
X1: [{
|
|
3825
|
-
Parachain: getParaIdImpl(destChain, customCtx)
|
|
3826
|
-
}]
|
|
3827
|
-
};
|
|
3828
|
-
return {
|
|
3829
|
-
parents: parents,
|
|
3830
|
-
interior: interior
|
|
3831
|
-
};
|
|
3832
|
-
};
|
|
3732
|
+
var API_TYPES = ['PAPI', 'PJS', 'DEDOT'];
|
|
3833
3733
|
|
|
3834
3734
|
/**
|
|
3835
|
-
*
|
|
3836
|
-
* if it exists. The `parents` field is set to `0` either if a `Parachain` was removed
|
|
3837
|
-
* or if the resulting interior is `'Here'` and the chain is a relay chain.
|
|
3838
|
-
*
|
|
3839
|
-
* @param chain - The current chain
|
|
3840
|
-
* @param location - The location to localize
|
|
3841
|
-
* @returns The localized location
|
|
3842
|
-
*/
|
|
3843
|
-
var localizeLocationInner = function localizeLocationInner(chain, location, origin, resolveRelay, resolveParaId) {
|
|
3844
|
-
var _Object$keys$;
|
|
3845
|
-
var targetRelay = isExternalChain(chain) ? undefined : resolveRelay(chain).toLowerCase();
|
|
3846
|
-
var originRelay = origin && !isExternalChain(origin) ? resolveRelay(origin).toLowerCase() : undefined;
|
|
3847
|
-
var locationConsensus = getJunctionValue(location, 'GlobalConsensus');
|
|
3848
|
-
var locationRelay = locationConsensus ? (_Object$keys$ = Object.keys(locationConsensus)[0]) === null || _Object$keys$ === void 0 ? void 0 : _Object$keys$.toLowerCase() : undefined;
|
|
3849
|
-
var ecosystemDiffers = targetRelay && originRelay && originRelay !== targetRelay;
|
|
3850
|
-
var junctions = location.interior === 'Here' ? [] : flattenJunctions(location.interior);
|
|
3851
|
-
var junctionCount = junctions.length;
|
|
3852
|
-
var isLocationOnTargetRelay = targetRelay !== undefined && locationRelay === targetRelay;
|
|
3853
|
-
// Check if target is an external chain and location's GlobalConsensus matches it
|
|
3854
|
-
var isLocationOnTargetExternal = isExternalChain(chain) && locationRelay === chain.toLowerCase();
|
|
3855
|
-
var isConsensusAnchored = junctions.findIndex(function (junction) {
|
|
3856
|
-
return 'GlobalConsensus' in junction;
|
|
3857
|
-
}) === 0;
|
|
3858
|
-
if (locationRelay && targetRelay && locationRelay !== targetRelay && (!origin || !ecosystemDiffers && isConsensusAnchored)) {
|
|
3859
|
-
return location;
|
|
3860
|
-
}
|
|
3861
|
-
if (origin && ecosystemDiffers && location.parents === Parents.TWO && originRelay !== undefined && targetRelay !== undefined && deepEqual(getJunctionValue(location, 'GlobalConsensus'), _defineProperty({}, targetRelay, null)) && junctionCount === 1) {
|
|
3862
|
-
return RELAY_LOCATION;
|
|
3863
|
-
}
|
|
3864
|
-
var newInterior = location.interior;
|
|
3865
|
-
var parachainRemoved = false;
|
|
3866
|
-
if (location.interior !== 'Here') {
|
|
3867
|
-
var paraId = resolveParaId(chain);
|
|
3868
|
-
var filteredJunctions = junctions.filter(function (junction) {
|
|
3869
|
-
if ('GlobalConsensus' in junction && (isLocationOnTargetRelay || isLocationOnTargetExternal)) {
|
|
3870
|
-
return false;
|
|
3871
|
-
}
|
|
3872
|
-
if ('Parachain' in junction && (!ecosystemDiffers || isLocationOnTargetRelay)) {
|
|
3873
|
-
var paraJunctionId = getJunctionValue(location, 'Parachain');
|
|
3874
|
-
if (paraJunctionId === paraId) {
|
|
3875
|
-
parachainRemoved = true;
|
|
3876
|
-
return false;
|
|
3877
|
-
}
|
|
3878
|
-
}
|
|
3879
|
-
return true;
|
|
3880
|
-
});
|
|
3881
|
-
if (filteredJunctions.length === 0) {
|
|
3882
|
-
newInterior = 'Here';
|
|
3883
|
-
} else {
|
|
3884
|
-
newInterior = _defineProperty({}, "X".concat(filteredJunctions.length), filteredJunctions);
|
|
3885
|
-
}
|
|
3886
|
-
}
|
|
3887
|
-
var isOriginRelayHere = deepEqual(location, RELAY_LOCATION);
|
|
3888
|
-
var hasGlobalConsensus = hasJunction(location, 'GlobalConsensus');
|
|
3889
|
-
if (origin && isExternalChain(chain) && originRelay !== undefined && isOriginRelayHere && !hasGlobalConsensus) {
|
|
3890
|
-
return {
|
|
3891
|
-
parents: Parents.ONE,
|
|
3892
|
-
interior: {
|
|
3893
|
-
X1: [{
|
|
3894
|
-
GlobalConsensus: _defineProperty({}, originRelay, null)
|
|
3895
|
-
}]
|
|
3896
|
-
}
|
|
3897
|
-
};
|
|
3898
|
-
}
|
|
3899
|
-
if (isExternalChain(chain) && location.parents === Parents.TWO && RELAYCHAINS.some(function (relay) {
|
|
3900
|
-
return deepEqual(getJunctionValue(location, 'GlobalConsensus'), _defineProperty({}, relay.toLowerCase(), null));
|
|
3901
|
-
})) {
|
|
3902
|
-
return _objectSpread2(_objectSpread2({}, location), {}, {
|
|
3903
|
-
parents: Parents.ONE
|
|
3904
|
-
});
|
|
3905
|
-
}
|
|
3906
|
-
if (origin && ecosystemDiffers && isOriginRelayHere && !hasGlobalConsensus && originRelay !== undefined) {
|
|
3907
|
-
return {
|
|
3908
|
-
parents: Parents.TWO,
|
|
3909
|
-
interior: {
|
|
3910
|
-
X2: [{
|
|
3911
|
-
GlobalConsensus: _defineProperty({}, originRelay, null)
|
|
3912
|
-
}, {
|
|
3913
|
-
Parachain: resolveParaId(origin)
|
|
3914
|
-
}]
|
|
3915
|
-
}
|
|
3916
|
-
};
|
|
3917
|
-
}
|
|
3918
|
-
if (origin && ecosystemDiffers && newInterior !== 'Here' && !hasGlobalConsensus && originRelay !== undefined) {
|
|
3919
|
-
var _junctions = flattenJunctions(newInterior);
|
|
3920
|
-
var updatedJunctions = [{
|
|
3921
|
-
GlobalConsensus: _defineProperty({}, originRelay, null)
|
|
3922
|
-
}].concat(_toConsumableArray(_junctions));
|
|
3923
|
-
return {
|
|
3924
|
-
parents: Parents.TWO,
|
|
3925
|
-
interior: _defineProperty({}, "X".concat(updatedJunctions.length), updatedJunctions)
|
|
3926
|
-
};
|
|
3927
|
-
}
|
|
3928
|
-
var shouldSetParentsToZero = parachainRemoved || newInterior === 'Here' && isRelayChain(chain) || isLocationOnTargetExternal;
|
|
3929
|
-
return {
|
|
3930
|
-
parents: shouldSetParentsToZero ? Parents.ZERO : location.parents,
|
|
3931
|
-
interior: newInterior
|
|
3932
|
-
};
|
|
3933
|
-
};
|
|
3934
|
-
var localizeLocation = function localizeLocation(chain, location, origin) {
|
|
3935
|
-
return localizeLocationInner(chain, location, origin, function (c) {
|
|
3936
|
-
return getRelayChainOf(c);
|
|
3937
|
-
}, function (c) {
|
|
3938
|
-
return getParaId(c);
|
|
3939
|
-
});
|
|
3940
|
-
};
|
|
3941
|
-
var localizeLocationImpl = function localizeLocationImpl(api, chain, location, origin) {
|
|
3942
|
-
return localizeLocationInner(chain, location, origin, function (c) {
|
|
3943
|
-
return getRelayChainOfImpl(api, c);
|
|
3944
|
-
}, function (c) {
|
|
3945
|
-
return getParaIdImpl(c, api._customCtx);
|
|
3946
|
-
});
|
|
3947
|
-
};
|
|
3948
|
-
|
|
3949
|
-
var reverseTransformLocation = function reverseTransformLocation(location) {
|
|
3950
|
-
var parachainJunction = {
|
|
3951
|
-
Parachain: 1000
|
|
3952
|
-
};
|
|
3953
|
-
var alreadyHasP1000 = location.interior !== 'Here' && Object.values(location.interior).flat().some(function (j) {
|
|
3954
|
-
return _typeof(j) === 'object' && j !== null && 'Parachain' in j && j.Parachain === 1000;
|
|
3955
|
-
});
|
|
3956
|
-
if (alreadyHasP1000) {
|
|
3957
|
-
return _objectSpread2(_objectSpread2({}, location), {}, {
|
|
3958
|
-
parents: Parents.ONE
|
|
3959
|
-
});
|
|
3960
|
-
}
|
|
3961
|
-
var existingJunctions = location.interior === 'Here' ? [] // no other junctions
|
|
3962
|
-
: Object.values(location.interior).flat();
|
|
3963
|
-
var allJunctions = [parachainJunction].concat(_toConsumableArray(existingJunctions));
|
|
3964
|
-
return _objectSpread2(_objectSpread2({}, location), {}, {
|
|
3965
|
-
parents: Parents.ONE,
|
|
3966
|
-
interior: _defineProperty({}, "X".concat(allJunctions.length), allJunctions)
|
|
3967
|
-
});
|
|
3968
|
-
};
|
|
3969
|
-
|
|
3970
|
-
var EMPTY_TOPIC = "0x".concat('00'.repeat(32));
|
|
3971
|
-
var getBridgeDestFee = /*#__PURE__*/function () {
|
|
3972
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(api, destApi, origin, destination, assetInfo, feeAssetInfo, hasSystemFeeAsset, recipient, version) {
|
|
3973
|
-
var systemAsset, transferredAsset, assets, destIsReserve, feeAssetLocation, buyExecution, depositAsset, feesSplitFromAssets, prologue, xcm;
|
|
3974
|
-
return _regenerator().w(function (_context) {
|
|
3975
|
-
while (1) switch (_context.n) {
|
|
3976
|
-
case 0:
|
|
3977
|
-
systemAsset = createAsset(version, MIN_AMOUNT, RELAY_LOCATION);
|
|
3978
|
-
transferredAsset = createAsset(version, assetInfo.amount, normalizeLocation(api.localizeLocation(origin, assetInfo.location), version));
|
|
3979
|
-
assets = hasSystemFeeAsset ? sortAssets([systemAsset, transferredAsset]) : [transferredAsset];
|
|
3980
|
-
destIsReserve = hasSystemFeeAsset ? destination === 'AssetHubPolkadot' : deepEqual(getJunctionValue(assetInfo.location, 'GlobalConsensus'), _defineProperty({}, getRelayChainOf(destination).toLowerCase(), null));
|
|
3981
|
-
feeAssetLocation = hasSystemFeeAsset ? RELAY_LOCATION : assetInfo.location;
|
|
3982
|
-
buyExecution = {
|
|
3983
|
-
BuyExecution: {
|
|
3984
|
-
fees: createAsset(version, MIN_AMOUNT, api.localizeLocation(destination, feeAssetLocation, origin)),
|
|
3985
|
-
weight_limit: 'Unlimited'
|
|
3986
|
-
}
|
|
3987
|
-
};
|
|
3988
|
-
depositAsset = {
|
|
3989
|
-
DepositAsset: {
|
|
3990
|
-
assets: {
|
|
3991
|
-
Wild: hasSystemFeeAsset ? {
|
|
3992
|
-
AllOf: {
|
|
3993
|
-
id: api.localizeLocation(destination, assetInfo.location, origin),
|
|
3994
|
-
fun: 'Fungible'
|
|
3995
|
-
}
|
|
3996
|
-
} : {
|
|
3997
|
-
AllCounted: 1
|
|
3998
|
-
}
|
|
3999
|
-
},
|
|
4000
|
-
beneficiary: createBeneficiaryLocation({
|
|
4001
|
-
api: destApi,
|
|
4002
|
-
address: recipient,
|
|
4003
|
-
version: version
|
|
4004
|
-
})
|
|
4005
|
-
}
|
|
4006
|
-
};
|
|
4007
|
-
feesSplitFromAssets = destIsReserve && hasSystemFeeAsset;
|
|
4008
|
-
prologue = feesSplitFromAssets ? [{
|
|
4009
|
-
ReserveAssetDeposited: [systemAsset]
|
|
4010
|
-
}, buyExecution, {
|
|
4011
|
-
WithdrawAsset: [transferredAsset]
|
|
4012
|
-
}, {
|
|
4013
|
-
ClearOrigin: null
|
|
4014
|
-
}] : [destIsReserve ? {
|
|
4015
|
-
WithdrawAsset: assets
|
|
4016
|
-
} : {
|
|
4017
|
-
ReserveAssetDeposited: assets
|
|
4018
|
-
}, {
|
|
4019
|
-
ClearOrigin: null
|
|
4020
|
-
}, buyExecution];
|
|
4021
|
-
xcm = [].concat(prologue, [buyExecution, depositAsset, {
|
|
4022
|
-
SetTopic: EMPTY_TOPIC
|
|
4023
|
-
}]);
|
|
4024
|
-
return _context.a(2, destApi.getXcmPaymentApiFee(destination, addXcmVersionHeader(xcm, version), [], feeAssetInfo, version, true));
|
|
4025
|
-
}
|
|
4026
|
-
}, _callee);
|
|
4027
|
-
}));
|
|
4028
|
-
return function getBridgeDestFee(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9) {
|
|
4029
|
-
return _ref.apply(this, arguments);
|
|
4030
|
-
};
|
|
4031
|
-
}();
|
|
4032
|
-
|
|
4033
|
-
var evmExtension;
|
|
4034
|
-
var registerEvmExtension = function registerEvmExtension(extension) {
|
|
4035
|
-
evmExtension = extension;
|
|
4036
|
-
};
|
|
4037
|
-
var getEvmExtensionOrThrow = function getEvmExtensionOrThrow() {
|
|
4038
|
-
assertExtensionInstalled(evmExtension, 'EVM', '@paraspell/evm', 'using an EVM origin');
|
|
4039
|
-
return evmExtension;
|
|
4040
|
-
};
|
|
4041
|
-
|
|
4042
|
-
var evmSnowbridgeExtension;
|
|
4043
|
-
var registerEvmSnowbridgeExtension = function registerEvmSnowbridgeExtension(extension) {
|
|
4044
|
-
evmSnowbridgeExtension = extension;
|
|
4045
|
-
};
|
|
4046
|
-
var getEvmSnowbridgeExtensionOrThrow = function getEvmSnowbridgeExtensionOrThrow() {
|
|
4047
|
-
assertExtensionInstalled(evmSnowbridgeExtension, 'EVM Snowbridge', '@paraspell/evm-snowbridge', 'using Ethereum as an origin');
|
|
4048
|
-
return evmSnowbridgeExtension;
|
|
4049
|
-
};
|
|
4050
|
-
|
|
4051
|
-
var swapExtension;
|
|
4052
|
-
var registerSwapExtension = function registerSwapExtension(extension) {
|
|
4053
|
-
swapExtension = extension;
|
|
4054
|
-
};
|
|
4055
|
-
var getSwapExtensionOrThrow = function getSwapExtensionOrThrow() {
|
|
4056
|
-
assertExtensionInstalled(swapExtension, 'swap', '@paraspell/swap', 'using swap features');
|
|
4057
|
-
return swapExtension;
|
|
4058
|
-
};
|
|
4059
|
-
|
|
4060
|
-
var API_TYPES = ['PAPI', 'PJS', 'DEDOT'];
|
|
4061
|
-
|
|
4062
|
-
/**
|
|
4063
|
-
* The options for the batch builder.
|
|
3735
|
+
* The options for the batch builder.
|
|
4064
3736
|
*/
|
|
4065
3737
|
var BatchMode;
|
|
4066
3738
|
(function (BatchMode) {
|
|
@@ -6023,9 +5695,34 @@ var getParaEthTransferFees = /*#__PURE__*/function () {
|
|
|
6023
5695
|
};
|
|
6024
5696
|
}();
|
|
6025
5697
|
|
|
5698
|
+
var resolveBridgedHop = function resolveBridgedHop(api, origin, destination, currentChain,
|
|
5699
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5700
|
+
forwardedXcms) {
|
|
5701
|
+
if (isExternalChain(destination) || !isSubstrateBridge(origin, destination)) return undefined;
|
|
5702
|
+
var originRelay = api.getRelayChainOf(origin);
|
|
5703
|
+
var destBridgeHub = "BridgeHub".concat(api.getRelayChainOf(destination));
|
|
5704
|
+
var messagesPallet = BRIDGE_PALLETS.find(function (pallet) {
|
|
5705
|
+
return pallet === "Bridge".concat(originRelay, "Messages");
|
|
5706
|
+
});
|
|
5707
|
+
if (!messagesPallet || !isSubstrateChain(destBridgeHub) || currentChain !== "BridgeHub".concat(originRelay)) return undefined;
|
|
5708
|
+
var palletIndex = getPalletIndex(destBridgeHub, messagesPallet);
|
|
5709
|
+
if (palletIndex === undefined) {
|
|
5710
|
+
throw new RoutingResolutionError("Unable to find ".concat(messagesPallet, " pallet index on ").concat(destBridgeHub));
|
|
5711
|
+
}
|
|
5712
|
+
return {
|
|
5713
|
+
forwardedXcms: api.createBridgedForwardedXcms(forwardedXcms[1][0], {
|
|
5714
|
+
palletIndex: palletIndex,
|
|
5715
|
+
relay: originRelay,
|
|
5716
|
+
paraId: api.getParaId(origin),
|
|
5717
|
+
destination: getChainLocation(destBridgeHub, destination, api._customCtx)
|
|
5718
|
+
}),
|
|
5719
|
+
destParaId: api.getParaId(destination),
|
|
5720
|
+
currentOrigin: destBridgeHub
|
|
5721
|
+
};
|
|
5722
|
+
};
|
|
6026
5723
|
var traverseXcmHops = /*#__PURE__*/function () {
|
|
6027
5724
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(config) {
|
|
6028
|
-
var api, origin, destination, asset, initialForwardedXcms, initialDestParaId, swapConfig, processHop, shouldContinue, extractNextHopData, currentOrigin, forwardedXcms, nextParaId, currentAsset, hasPassedExchange, hops, destinationResult, nextChain, hopApi, isDestination, hopResult,
|
|
5725
|
+
var api, origin, destination, asset, initialForwardedXcms, initialDestParaId, swapConfig, processHop, shouldContinue, extractNextHopData, currentOrigin, forwardedXcms, nextParaId, currentAsset, hasPassedExchange, hops, destinationResult, nextChain, hopApi, _resolveBridgedHop, isDestination, hopResult, next;
|
|
6029
5726
|
return _regenerator().w(function (_context) {
|
|
6030
5727
|
while (1) switch (_context.p = _context.n) {
|
|
6031
5728
|
case 0:
|
|
@@ -6041,7 +5738,7 @@ var traverseXcmHops = /*#__PURE__*/function () {
|
|
|
6041
5738
|
_context.n = 10;
|
|
6042
5739
|
break;
|
|
6043
5740
|
}
|
|
6044
|
-
nextChain = getTSubstrateChain(nextParaId, api.getRelayChainOf(
|
|
5741
|
+
nextChain = getTSubstrateChain(nextParaId, api.getRelayChainOf(currentOrigin));
|
|
6045
5742
|
if (nextChain) {
|
|
6046
5743
|
_context.n = 2;
|
|
6047
5744
|
break;
|
|
@@ -6089,10 +5786,12 @@ var traverseXcmHops = /*#__PURE__*/function () {
|
|
|
6089
5786
|
hasPassedExchange = true;
|
|
6090
5787
|
currentAsset = api.findAssetOnDestOrThrow(swapConfig.exchangeChain, nextChain, swapConfig.currencyTo);
|
|
6091
5788
|
}
|
|
6092
|
-
|
|
6093
|
-
|
|
6094
|
-
|
|
6095
|
-
|
|
5789
|
+
next = (_resolveBridgedHop = resolveBridgedHop(api, origin, destination, nextChain, forwardedXcms)) !== null && _resolveBridgedHop !== void 0 ? _resolveBridgedHop : _objectSpread2(_objectSpread2({}, extractNextHopData(hopResult)), {}, {
|
|
5790
|
+
currentOrigin: nextChain
|
|
5791
|
+
});
|
|
5792
|
+
forwardedXcms = next.forwardedXcms;
|
|
5793
|
+
nextParaId = next.destParaId;
|
|
5794
|
+
currentOrigin = next.currentOrigin;
|
|
6096
5795
|
case 7:
|
|
6097
5796
|
_context.p = 7;
|
|
6098
5797
|
_context.n = 8;
|
|
@@ -6151,18 +5850,17 @@ var addEthereumBridgeFees = /*#__PURE__*/function () {
|
|
|
6151
5850
|
}();
|
|
6152
5851
|
|
|
6153
5852
|
var dryRunInternal = /*#__PURE__*/function () {
|
|
6154
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
6155
|
-
var
|
|
6156
|
-
|
|
6157
|
-
|
|
6158
|
-
while (1) switch (_context3.n) {
|
|
5853
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(options) {
|
|
5854
|
+
var api, origin, destination, currency, tx, sender, feeAsset, swapConfig, version, bypassOptions, keepAlive, _options$useRootOrigi, useRootOrigin, resolvedFeeAsset, _resolveCurrency, assets, asset, amount, resolvedVersion, originDryRun, isMythosToEthereum, originDryModified, initialForwardedXcms, initialDestParaId, processHop, traversalResult, relayChain, bridgeHubChain, assetHubChain, bridgeHubHop, processedBridgeHub, bridgeHubHopIndex, result, dryRunError, _t, _t2, _t3, _t4, _t5, _t6, _t7, _t8, _t9;
|
|
5855
|
+
return _regenerator().w(function (_context2) {
|
|
5856
|
+
while (1) switch (_context2.n) {
|
|
6159
5857
|
case 0:
|
|
6160
5858
|
api = options.api, origin = options.origin, destination = options.destination, currency = options.currency, tx = options.tx, sender = options.sender, feeAsset = options.feeAsset, swapConfig = options.swapConfig, version = options.version, bypassOptions = options.bypassOptions, keepAlive = options.keepAlive, _options$useRootOrigi = options.useRootOrigin, useRootOrigin = _options$useRootOrigi === void 0 ? false : _options$useRootOrigi;
|
|
6161
5859
|
resolvedFeeAsset = feeAsset ? resolveFeeAsset(api, feeAsset, origin, destination, currency) : undefined;
|
|
6162
5860
|
_resolveCurrency = resolveCurrency(api, currency, resolvedFeeAsset, origin, destination), assets = _resolveCurrency.assets, asset = _resolveCurrency.asset;
|
|
6163
5861
|
amount = asset.amount;
|
|
6164
5862
|
resolvedVersion = pickCompatibleXcmVersion(api, origin, destination, version);
|
|
6165
|
-
|
|
5863
|
+
_context2.n = 1;
|
|
6166
5864
|
return api.getDryRunCall({
|
|
6167
5865
|
tx: tx,
|
|
6168
5866
|
chain: origin,
|
|
@@ -6179,12 +5877,12 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6179
5877
|
useRootOrigin: useRootOrigin || !!bypassOptions
|
|
6180
5878
|
});
|
|
6181
5879
|
case 1:
|
|
6182
|
-
originDryRun =
|
|
5880
|
+
originDryRun = _context2.v;
|
|
6183
5881
|
if (originDryRun.success) {
|
|
6184
|
-
|
|
5882
|
+
_context2.n = 2;
|
|
6185
5883
|
break;
|
|
6186
5884
|
}
|
|
6187
|
-
return
|
|
5885
|
+
return _context2.a(2, {
|
|
6188
5886
|
success: false,
|
|
6189
5887
|
dryRunError: _objectSpread2({
|
|
6190
5888
|
chainKind: 'origin',
|
|
@@ -6196,27 +5894,27 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6196
5894
|
case 2:
|
|
6197
5895
|
isMythosToEthereum = origin === 'Mythos' && destination === 'Ethereum';
|
|
6198
5896
|
if (!isMythosToEthereum) {
|
|
6199
|
-
|
|
5897
|
+
_context2.n = 4;
|
|
6200
5898
|
break;
|
|
6201
5899
|
}
|
|
6202
|
-
|
|
6203
|
-
|
|
6204
|
-
|
|
6205
|
-
|
|
6206
|
-
|
|
5900
|
+
_t2 = _objectSpread2;
|
|
5901
|
+
_t3 = _objectSpread2({}, originDryRun);
|
|
5902
|
+
_t4 = {};
|
|
5903
|
+
_t5 = originDryRun.fee;
|
|
5904
|
+
_context2.n = 3;
|
|
6207
5905
|
return getMythosOriginFee(api);
|
|
6208
5906
|
case 3:
|
|
6209
|
-
|
|
6210
|
-
|
|
6211
|
-
|
|
6212
|
-
fee:
|
|
5907
|
+
_t6 = _context2.v;
|
|
5908
|
+
_t7 = _t5 + _t6;
|
|
5909
|
+
_t = _t2(_t3, _t4, {
|
|
5910
|
+
fee: _t7
|
|
6213
5911
|
});
|
|
6214
|
-
|
|
5912
|
+
_context2.n = 5;
|
|
6215
5913
|
break;
|
|
6216
5914
|
case 4:
|
|
6217
|
-
|
|
5915
|
+
_t = originDryRun;
|
|
6218
5916
|
case 5:
|
|
6219
|
-
originDryModified =
|
|
5917
|
+
originDryModified = _t;
|
|
6220
5918
|
initialForwardedXcms = originDryModified.forwardedXcms, initialDestParaId = originDryModified.destParaId;
|
|
6221
5919
|
processHop = /*#__PURE__*/function () {
|
|
6222
5920
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(params) {
|
|
@@ -6234,6 +5932,7 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6234
5932
|
asset: asset,
|
|
6235
5933
|
currentAsset: currentAsset,
|
|
6236
5934
|
currency: currency,
|
|
5935
|
+
feeAsset: resolvedFeeAsset,
|
|
6237
5936
|
swapConfig: swapConfig,
|
|
6238
5937
|
hasPassedExchange: hasPassedExchange
|
|
6239
5938
|
});
|
|
@@ -6274,7 +5973,7 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6274
5973
|
return _ref2.apply(this, arguments);
|
|
6275
5974
|
};
|
|
6276
5975
|
}();
|
|
6277
|
-
|
|
5976
|
+
_context2.n = 6;
|
|
6278
5977
|
return traverseXcmHops({
|
|
6279
5978
|
api: api,
|
|
6280
5979
|
origin: origin,
|
|
@@ -6295,7 +5994,7 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6295
5994
|
}
|
|
6296
5995
|
});
|
|
6297
5996
|
case 6:
|
|
6298
|
-
traversalResult =
|
|
5997
|
+
traversalResult = _context2.v;
|
|
6299
5998
|
// Process Ethereum bridge fees
|
|
6300
5999
|
relayChain = api.getRelayChainOf(origin);
|
|
6301
6000
|
bridgeHubChain = relayChain === 'Paseo' ? undefined : "BridgeHub".concat(relayChain);
|
|
@@ -6304,29 +6003,29 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6304
6003
|
return hop.chain === bridgeHubChain;
|
|
6305
6004
|
}); // For Mythos → Ethereum, we skip additional Ethereum bridge fees (aligns with getXcmFeeInternal)
|
|
6306
6005
|
if (!isMythosToEthereum) {
|
|
6307
|
-
|
|
6006
|
+
_context2.n = 7;
|
|
6308
6007
|
break;
|
|
6309
6008
|
}
|
|
6310
|
-
|
|
6311
|
-
|
|
6009
|
+
_t8 = bridgeHubHop === null || bridgeHubHop === void 0 ? void 0 : bridgeHubHop.result;
|
|
6010
|
+
_context2.n = 11;
|
|
6312
6011
|
break;
|
|
6313
6012
|
case 7:
|
|
6314
6013
|
if (!(bridgeHubHop !== null && bridgeHubHop !== void 0 && bridgeHubHop.result.success)) {
|
|
6315
|
-
|
|
6014
|
+
_context2.n = 9;
|
|
6316
6015
|
break;
|
|
6317
6016
|
}
|
|
6318
|
-
|
|
6017
|
+
_context2.n = 8;
|
|
6319
6018
|
return addEthereumBridgeFees(api, bridgeHubHop === null || bridgeHubHop === void 0 ? void 0 : bridgeHubHop.result, destination, assetHubChain);
|
|
6320
6019
|
case 8:
|
|
6321
|
-
|
|
6322
|
-
|
|
6020
|
+
_t9 = _context2.v;
|
|
6021
|
+
_context2.n = 10;
|
|
6323
6022
|
break;
|
|
6324
6023
|
case 9:
|
|
6325
|
-
|
|
6024
|
+
_t9 = bridgeHubHop === null || bridgeHubHop === void 0 ? void 0 : bridgeHubHop.result;
|
|
6326
6025
|
case 10:
|
|
6327
|
-
|
|
6026
|
+
_t8 = _t9;
|
|
6328
6027
|
case 11:
|
|
6329
|
-
processedBridgeHub =
|
|
6028
|
+
processedBridgeHub = _t8;
|
|
6330
6029
|
// Update bridge hub in hops if needed
|
|
6331
6030
|
if (processedBridgeHub && processedBridgeHub.success && bridgeHubHop && bridgeHubHop.result.success && processedBridgeHub.fee !== bridgeHubHop.result.fee) {
|
|
6332
6031
|
bridgeHubHopIndex = traversalResult.hops.findIndex(function (hop) {
|
|
@@ -6338,67 +6037,10 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6338
6037
|
});
|
|
6339
6038
|
}
|
|
6340
6039
|
}
|
|
6341
|
-
resolveBridgeDestination = /*#__PURE__*/function () {
|
|
6342
|
-
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
|
|
6343
|
-
var _api$findAssetInfoOnD;
|
|
6344
|
-
var destApi, systemAsset, hasSystemFeeAsset, destAsset, _t, _t2, _t3;
|
|
6345
|
-
return _regenerator().w(function (_context2) {
|
|
6346
|
-
while (1) switch (_context2.n) {
|
|
6347
|
-
case 0:
|
|
6348
|
-
if (!(isExternalChain(destination) || !isSubstrateBridge(origin, destination))) {
|
|
6349
|
-
_context2.n = 1;
|
|
6350
|
-
break;
|
|
6351
|
-
}
|
|
6352
|
-
return _context2.a(2, undefined);
|
|
6353
|
-
case 1:
|
|
6354
|
-
destApi = api.clone();
|
|
6355
|
-
_context2.n = 2;
|
|
6356
|
-
return destApi.init(destination);
|
|
6357
|
-
case 2:
|
|
6358
|
-
systemAsset = api.findNativeAssetInfoOrThrow(api.getRelayChainOf(origin));
|
|
6359
|
-
hasSystemFeeAsset = deepEqual(getJunctionValue(asset.location, 'GlobalConsensus'), getEthereumJunction(api, origin, false).GlobalConsensus);
|
|
6360
|
-
destAsset = hasSystemFeeAsset ? api.findAssetInfoOrThrow(destination, {
|
|
6361
|
-
symbol: systemAsset.symbol
|
|
6362
|
-
}) : (_api$findAssetInfoOnD = api.findAssetInfoOnDest(origin, destination, currency, asset)) !== null && _api$findAssetInfoOnD !== void 0 ? _api$findAssetInfoOnD : asset;
|
|
6363
|
-
_context2.n = 3;
|
|
6364
|
-
return getBridgeDestFee(api, destApi, origin, destination, asset, destAsset, hasSystemFeeAsset, sender, resolvedVersion);
|
|
6365
|
-
case 3:
|
|
6366
|
-
_t = _context2.v;
|
|
6367
|
-
_t2 = destAsset;
|
|
6368
|
-
_t3 = [];
|
|
6369
|
-
return _context2.a(2, {
|
|
6370
|
-
success: true,
|
|
6371
|
-
fee: _t,
|
|
6372
|
-
asset: _t2,
|
|
6373
|
-
forwardedXcms: _t3
|
|
6374
|
-
});
|
|
6375
|
-
}
|
|
6376
|
-
}, _callee2);
|
|
6377
|
-
}));
|
|
6378
|
-
return function resolveBridgeDestination() {
|
|
6379
|
-
return _ref3.apply(this, arguments);
|
|
6380
|
-
};
|
|
6381
|
-
}();
|
|
6382
|
-
_t11 = originDryModified;
|
|
6383
|
-
if (!((_traversalResult$dest = traversalResult.destination) !== null && _traversalResult$dest !== void 0)) {
|
|
6384
|
-
_context3.n = 12;
|
|
6385
|
-
break;
|
|
6386
|
-
}
|
|
6387
|
-
_t12 = _traversalResult$dest;
|
|
6388
|
-
_context3.n = 14;
|
|
6389
|
-
break;
|
|
6390
|
-
case 12:
|
|
6391
|
-
_context3.n = 13;
|
|
6392
|
-
return resolveBridgeDestination();
|
|
6393
|
-
case 13:
|
|
6394
|
-
_t12 = _context3.v;
|
|
6395
|
-
case 14:
|
|
6396
|
-
_t13 = _t12;
|
|
6397
|
-
_t14 = traversalResult.hops;
|
|
6398
6040
|
result = {
|
|
6399
|
-
origin:
|
|
6400
|
-
destination:
|
|
6401
|
-
hops:
|
|
6041
|
+
origin: originDryModified,
|
|
6042
|
+
destination: traversalResult.destination,
|
|
6043
|
+
hops: traversalResult.hops
|
|
6402
6044
|
};
|
|
6403
6045
|
dryRunError = getDryRunError({
|
|
6404
6046
|
origin: {
|
|
@@ -6411,12 +6053,12 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6411
6053
|
} : undefined,
|
|
6412
6054
|
hops: result.hops
|
|
6413
6055
|
});
|
|
6414
|
-
return
|
|
6056
|
+
return _context2.a(2, _objectSpread2({
|
|
6415
6057
|
success: !dryRunError,
|
|
6416
6058
|
dryRunError: dryRunError
|
|
6417
6059
|
}, result));
|
|
6418
6060
|
}
|
|
6419
|
-
},
|
|
6061
|
+
}, _callee2);
|
|
6420
6062
|
}));
|
|
6421
6063
|
return function dryRunInternal(_x) {
|
|
6422
6064
|
return _ref.apply(this, arguments);
|
|
@@ -6902,12 +6544,13 @@ var getBypassResultWithRetries = /*#__PURE__*/function () {
|
|
|
6902
6544
|
|
|
6903
6545
|
var getOriginXcmFeeInternal = /*#__PURE__*/function () {
|
|
6904
6546
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(_ref) {
|
|
6905
|
-
var api, tx, origin, destination, sender, disableFallback, feeAsset, currency, version, _ref$useRootOrigin, useRootOrigin, resolvedFeeAsset, _resolveCurrency, assets, asset, _yield$api$getPayment, rawFee, paddedFee, sufficient, resolvedVersion, dryRunResult, _yield$api$getPayment2, _rawFee, _paddedFee, fee, forwardedXcms, destParaId, weight;
|
|
6547
|
+
var api, tx, origin, destination, sender, disableFallback, feeAsset, currency, version, _ref$useRootOrigin, useRootOrigin, resolvedFeeAsset, originFeeAsset, _resolveCurrency, assets, asset, _yield$api$getPayment, rawFee, paddedFee, sufficient, resolvedVersion, dryRunResult, _yield$api$getPayment2, _rawFee, _paddedFee, fee, forwardedXcms, destParaId, weight;
|
|
6906
6548
|
return _regenerator().w(function (_context) {
|
|
6907
6549
|
while (1) switch (_context.n) {
|
|
6908
6550
|
case 0:
|
|
6909
6551
|
api = _ref.api, tx = _ref.tx, origin = _ref.origin, destination = _ref.destination, sender = _ref.sender, disableFallback = _ref.disableFallback, feeAsset = _ref.feeAsset, currency = _ref.currency, version = _ref.version, _ref$useRootOrigin = _ref.useRootOrigin, useRootOrigin = _ref$useRootOrigin === void 0 ? false : _ref$useRootOrigin;
|
|
6910
6552
|
resolvedFeeAsset = feeAsset ? resolveFeeAsset(api, feeAsset, origin, destination, currency) : undefined;
|
|
6553
|
+
originFeeAsset = supportsFeeAssetPayment(origin) ? resolvedFeeAsset : undefined;
|
|
6911
6554
|
_resolveCurrency = resolveCurrency(api, currency, resolvedFeeAsset, origin, destination), assets = _resolveCurrency.assets, asset = _resolveCurrency.asset;
|
|
6912
6555
|
_context.n = 1;
|
|
6913
6556
|
return api.init(origin, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
@@ -6923,12 +6566,12 @@ var getOriginXcmFeeInternal = /*#__PURE__*/function () {
|
|
|
6923
6566
|
rawFee = _yield$api$getPayment.partialFee;
|
|
6924
6567
|
paddedFee = padFee(rawFee, origin, destination, 'origin');
|
|
6925
6568
|
_context.n = 3;
|
|
6926
|
-
return isSufficientOrigin(api, origin, destination, sender, paddedFee, asset,
|
|
6569
|
+
return isSufficientOrigin(api, origin, destination, sender, paddedFee, asset, originFeeAsset);
|
|
6927
6570
|
case 3:
|
|
6928
6571
|
sufficient = _context.v;
|
|
6929
6572
|
return _context.a(2, {
|
|
6930
6573
|
fee: paddedFee,
|
|
6931
|
-
asset:
|
|
6574
|
+
asset: originFeeAsset !== null && originFeeAsset !== void 0 ? originFeeAsset : api.findNativeAssetInfoOrThrow(origin),
|
|
6932
6575
|
feeType: 'paymentInfo',
|
|
6933
6576
|
sufficient: sufficient
|
|
6934
6577
|
});
|
|
@@ -7046,7 +6689,7 @@ var getOriginXcmFee = /*#__PURE__*/function () {
|
|
|
7046
6689
|
|
|
7047
6690
|
var getXcmFeeOnce = /*#__PURE__*/function () {
|
|
7048
6691
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(_ref) {
|
|
7049
|
-
var api, tx, origin, destination, sender, recipient, currency, feeAsset, version, disableFallback, swapConfig, useRootOrigin, skipReverseFeeCalculation, resolvedFeeAsset, _resolveCurrency, asset, resolvedVersion, _yield$getOriginXcmFe, originFeeRaw, originAsset, originFeeType, originDryRunError, initialForwardedXcm, initialDestParaId, originWeight, sufficientOriginFee, isMythosToEthereum, originFee, destApi, destFeeRes, _result, _dryRunError, processHop, traversalResult, destFee, destAsset, destFeeType, destDryRunError, destSufficient, destResult, _destApi, destFallback,
|
|
6692
|
+
var api, tx, origin, destination, sender, recipient, currency, feeAsset, version, disableFallback, swapConfig, useRootOrigin, skipReverseFeeCalculation, resolvedFeeAsset, _resolveCurrency, asset, resolvedVersion, _yield$getOriginXcmFe, originFeeRaw, originAsset, originFeeType, originDryRunError, initialForwardedXcm, initialDestParaId, originWeight, sufficientOriginFee, isMythosToEthereum, originFee, destApi, destFeeRes, _result, _dryRunError, processHop, traversalResult, destFee, destAsset, destFeeType, destDryRunError, destSufficient, destResult, _destApi, destFallback, relayChain, bridgeHubChain, assetHubChain, bridgeHubHop, processedBridgeHub, bridgeHubHopIndex, convertToFeeDetail, result, dryRunError, _t, _t2, _t3, _t4;
|
|
7050
6693
|
return _regenerator().w(function (_context2) {
|
|
7051
6694
|
while (1) switch (_context2.p = _context2.n) {
|
|
7052
6695
|
case 0:
|
|
@@ -7190,6 +6833,7 @@ var getXcmFeeOnce = /*#__PURE__*/function () {
|
|
|
7190
6833
|
asset: asset,
|
|
7191
6834
|
currentAsset: currentAsset,
|
|
7192
6835
|
currency: currency,
|
|
6836
|
+
feeAsset: resolvedFeeAsset,
|
|
7193
6837
|
swapConfig: swapConfig,
|
|
7194
6838
|
hasPassedExchange: hasPassedExchange
|
|
7195
6839
|
});
|
|
@@ -7258,7 +6902,7 @@ var getXcmFeeOnce = /*#__PURE__*/function () {
|
|
|
7258
6902
|
destDryRunError = destResult.dryRunError;
|
|
7259
6903
|
destSufficient = destResult.sufficient;
|
|
7260
6904
|
destAsset = destResult.asset;
|
|
7261
|
-
_context2.n =
|
|
6905
|
+
_context2.n = 16;
|
|
7262
6906
|
break;
|
|
7263
6907
|
case 12:
|
|
7264
6908
|
if (!(traversalResult.hops.length > 0 && traversalResult.hops[traversalResult.hops.length - 1].result.dryRunError)) {
|
|
@@ -7297,36 +6941,14 @@ var getXcmFeeOnce = /*#__PURE__*/function () {
|
|
|
7297
6941
|
destFeeType = destFallback.feeType;
|
|
7298
6942
|
destSufficient = destFallback.sufficient;
|
|
7299
6943
|
destAsset = api.findNativeAssetInfoOrThrow(destination);
|
|
7300
|
-
_context2.n =
|
|
6944
|
+
_context2.n = 16;
|
|
7301
6945
|
break;
|
|
7302
6946
|
case 15:
|
|
7303
|
-
|
|
7304
|
-
|
|
7305
|
-
break;
|
|
7306
|
-
}
|
|
7307
|
-
_destApi2 = api.clone();
|
|
7308
|
-
_context2.n = 16;
|
|
7309
|
-
return _destApi2.init(destination, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
7310
|
-
case 16:
|
|
7311
|
-
systemAsset = api.findNativeAssetInfoOrThrow(api.getRelayChainOf(origin));
|
|
7312
|
-
hasSystemFeeAsset = deepEqual(getJunctionValue(asset.location, 'GlobalConsensus'), getEthereumJunction(api, origin, false).GlobalConsensus);
|
|
7313
|
-
destAsset = hasSystemFeeAsset ? api.findAssetInfoOrThrow(destination, {
|
|
7314
|
-
symbol: systemAsset.symbol
|
|
7315
|
-
}) : (_api$findAssetInfoOnD = api.findAssetInfoOnDest(origin, destination, currency, asset)) !== null && _api$findAssetInfoOnD !== void 0 ? _api$findAssetInfoOnD : asset;
|
|
7316
|
-
_context2.n = 17;
|
|
7317
|
-
return getBridgeDestFee(api, _destApi2, origin, destination, asset, destAsset, hasSystemFeeAsset, recipient, resolvedVersion);
|
|
7318
|
-
case 17:
|
|
7319
|
-
destFee = _context2.v;
|
|
7320
|
-
destFeeType = 'dryRun';
|
|
7321
|
-
destSufficient = true;
|
|
7322
|
-
_context2.n = 19;
|
|
7323
|
-
break;
|
|
7324
|
-
case 18:
|
|
7325
|
-
destFee = 0n;
|
|
7326
|
-
destFeeType = 'noFeeRequired';
|
|
6947
|
+
destFee = 0n;
|
|
6948
|
+
destFeeType = 'noFeeRequired';
|
|
7327
6949
|
destSufficient = true;
|
|
7328
6950
|
destAsset = api.findNativeAssetInfoOrThrow(destination);
|
|
7329
|
-
case
|
|
6951
|
+
case 16:
|
|
7330
6952
|
// Process Ethereum bridge fees
|
|
7331
6953
|
relayChain = api.getRelayChainOf(origin);
|
|
7332
6954
|
bridgeHubChain = relayChain === 'Paseo' ? undefined : "BridgeHub".concat(relayChain);
|
|
@@ -7335,18 +6957,18 @@ var getXcmFeeOnce = /*#__PURE__*/function () {
|
|
|
7335
6957
|
return hop.chain === bridgeHubChain;
|
|
7336
6958
|
});
|
|
7337
6959
|
if (!isMythosToEthereum) {
|
|
7338
|
-
_context2.n =
|
|
6960
|
+
_context2.n = 17;
|
|
7339
6961
|
break;
|
|
7340
6962
|
}
|
|
7341
6963
|
_t4 = bridgeHubHop === null || bridgeHubHop === void 0 ? void 0 : bridgeHubHop.result;
|
|
7342
|
-
_context2.n =
|
|
6964
|
+
_context2.n = 19;
|
|
7343
6965
|
break;
|
|
7344
|
-
case
|
|
7345
|
-
_context2.n =
|
|
6966
|
+
case 17:
|
|
6967
|
+
_context2.n = 18;
|
|
7346
6968
|
return addEthereumBridgeFees(api, bridgeHubHop === null || bridgeHubHop === void 0 ? void 0 : bridgeHubHop.result, destination, assetHubChain);
|
|
7347
|
-
case
|
|
6969
|
+
case 18:
|
|
7348
6970
|
_t4 = _context2.v;
|
|
7349
|
-
case
|
|
6971
|
+
case 19:
|
|
7350
6972
|
processedBridgeHub = _t4;
|
|
7351
6973
|
// Update bridge hub fee in hops if needed
|
|
7352
6974
|
if (processedBridgeHub && bridgeHubHop && processedBridgeHub.fee !== bridgeHubHop.result.fee) {
|
|
@@ -7964,11 +7586,13 @@ var getTransferInfo = /*#__PURE__*/function () {
|
|
|
7964
7586
|
var FEE_PADDING = 30;
|
|
7965
7587
|
var sumHopFees = function sumHopFees(result, _ref) {
|
|
7966
7588
|
var assetInfo = _ref.assetInfo,
|
|
7589
|
+
feeAssetInfo = _ref.feeAssetInfo,
|
|
7967
7590
|
isRelayAsset = _ref.isRelayAsset,
|
|
7968
7591
|
systemAsset = _ref.systemAsset;
|
|
7592
|
+
var feeAsset = isRelayAsset ? assetInfo : feeAssetInfo !== null && feeAssetInfo !== void 0 ? feeAssetInfo : systemAsset;
|
|
7969
7593
|
return result.hops.reduce(function (acc, hop) {
|
|
7970
7594
|
// only add if asset is equal
|
|
7971
|
-
return isAssetEqual(hop.result.asset,
|
|
7595
|
+
return isAssetEqual(hop.result.asset, feeAsset) ? acc + hop.result.fee : acc;
|
|
7972
7596
|
}, 0n);
|
|
7973
7597
|
};
|
|
7974
7598
|
var computeAllFees = /*#__PURE__*/function () {
|
|
@@ -8213,7 +7837,7 @@ var getMinTransferableAmount = /*#__PURE__*/function () {
|
|
|
8213
7837
|
|
|
8214
7838
|
var getOriginFeeOrThrow = /*#__PURE__*/function () {
|
|
8215
7839
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(_ref, feeCurrency) {
|
|
8216
|
-
var api, buildTx, chain, sender, feeAsset, version, currency,
|
|
7840
|
+
var api, buildTx, chain, sender, feeAsset, version, currency, result;
|
|
8217
7841
|
return _regenerator().w(function (_context) {
|
|
8218
7842
|
while (1) switch (_context.n) {
|
|
8219
7843
|
case 0:
|
|
@@ -8231,15 +7855,14 @@ var getOriginFeeOrThrow = /*#__PURE__*/function () {
|
|
|
8231
7855
|
disableFallback: false
|
|
8232
7856
|
});
|
|
8233
7857
|
case 1:
|
|
8234
|
-
|
|
8235
|
-
fee
|
|
8236
|
-
if (!(fee === undefined)) {
|
|
7858
|
+
result = _context.v;
|
|
7859
|
+
if (!(result.fee === undefined)) {
|
|
8237
7860
|
_context.n = 2;
|
|
8238
7861
|
break;
|
|
8239
7862
|
}
|
|
8240
7863
|
throw new UnableToComputeError("Cannot get origin xcm fee for currency ".concat(JSON.stringify(currency, replaceBigInt), " on chain ").concat(chain, "."));
|
|
8241
7864
|
case 2:
|
|
8242
|
-
return _context.a(2,
|
|
7865
|
+
return _context.a(2, result);
|
|
8243
7866
|
}
|
|
8244
7867
|
}, _callee);
|
|
8245
7868
|
}));
|
|
@@ -8273,7 +7896,7 @@ var computeTransferableAmount = /*#__PURE__*/function () {
|
|
|
8273
7896
|
}();
|
|
8274
7897
|
var getTransferableAmountForAsset = /*#__PURE__*/function () {
|
|
8275
7898
|
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(options, resolvedFeeAsset) {
|
|
8276
|
-
var api, sender, chain, currency, asset, amount, nativeAssetInfo, isNativeAsset,
|
|
7899
|
+
var api, sender, chain, currency, asset, amount, nativeAssetInfo, isNativeAsset, mayPayOriginInSendingAsset, originFee, fee, _t;
|
|
8277
7900
|
return _regenerator().w(function (_context3) {
|
|
8278
7901
|
while (1) switch (_context3.n) {
|
|
8279
7902
|
case 0:
|
|
@@ -8282,8 +7905,8 @@ var getTransferableAmountForAsset = /*#__PURE__*/function () {
|
|
|
8282
7905
|
amount = abstractDecimals(currency.amount, asset.decimals, api);
|
|
8283
7906
|
nativeAssetInfo = api.findNativeAssetInfoOrThrow(chain);
|
|
8284
7907
|
isNativeAsset = isAssetEqual(nativeAssetInfo, asset);
|
|
8285
|
-
|
|
8286
|
-
if (!
|
|
7908
|
+
mayPayOriginInSendingAsset = isNativeAsset || resolvedFeeAsset && isAssetEqual(resolvedFeeAsset, asset);
|
|
7909
|
+
if (!mayPayOriginInSendingAsset) {
|
|
8287
7910
|
_context3.n = 2;
|
|
8288
7911
|
break;
|
|
8289
7912
|
}
|
|
@@ -8296,9 +7919,10 @@ var getTransferableAmountForAsset = /*#__PURE__*/function () {
|
|
|
8296
7919
|
_context3.n = 3;
|
|
8297
7920
|
break;
|
|
8298
7921
|
case 2:
|
|
8299
|
-
_t =
|
|
7922
|
+
_t = undefined;
|
|
8300
7923
|
case 3:
|
|
8301
|
-
|
|
7924
|
+
originFee = _t;
|
|
7925
|
+
fee = originFee && isAssetEqual(originFee.asset, asset) ? originFee.fee : 0n;
|
|
8302
7926
|
return _context3.a(2, computeTransferableAmount(api, sender, chain, asset, fee));
|
|
8303
7927
|
}
|
|
8304
7928
|
}, _callee3);
|
|
@@ -8309,7 +7933,7 @@ var getTransferableAmountForAsset = /*#__PURE__*/function () {
|
|
|
8309
7933
|
}();
|
|
8310
7934
|
var getTransferableAmountForAssets = /*#__PURE__*/function () {
|
|
8311
7935
|
var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(options, resolvedFeeAsset) {
|
|
8312
|
-
var api, sender, chain, destination, currency, _resolveCurrency, assets,
|
|
7936
|
+
var api, sender, chain, destination, currency, _resolveCurrency, assets, originFee;
|
|
8313
7937
|
return _regenerator().w(function (_context4) {
|
|
8314
7938
|
while (1) switch (_context4.n) {
|
|
8315
7939
|
case 0:
|
|
@@ -8318,9 +7942,9 @@ var getTransferableAmountForAssets = /*#__PURE__*/function () {
|
|
|
8318
7942
|
_context4.n = 1;
|
|
8319
7943
|
return getOriginFeeOrThrow(options, currency);
|
|
8320
7944
|
case 1:
|
|
8321
|
-
|
|
7945
|
+
originFee = _context4.v;
|
|
8322
7946
|
return _context4.a(2, Promise.all(assets.map(function (asset) {
|
|
8323
|
-
return computeTransferableAmount(api, sender, chain, asset, asset
|
|
7947
|
+
return computeTransferableAmount(api, sender, chain, asset, isAssetEqual(originFee.asset, asset) ? originFee.fee : 0n);
|
|
8324
7948
|
})));
|
|
8325
7949
|
}
|
|
8326
7950
|
}, _callee4);
|
|
@@ -8380,58 +8004,260 @@ var getTransferableAmount = /*#__PURE__*/function () {
|
|
|
8380
8004
|
};
|
|
8381
8005
|
}();
|
|
8382
8006
|
|
|
8383
|
-
var
|
|
8384
|
-
|
|
8385
|
-
|
|
8386
|
-
|
|
8387
|
-
|
|
8388
|
-
|
|
8389
|
-
// Direct A → C: when origin is reserve OR dest is reserve, check origin <-> dest trust
|
|
8390
|
-
// Hop A → B → C: when reserve differs from both, check origin <-> reserve trust
|
|
8391
|
-
var isDirect = origin.chain === reserve.chain || dest.chain === reserve.chain;
|
|
8392
|
-
var chainToCheck = isDirect ? dest.chain : reserve.chain;
|
|
8393
|
-
var canTeleport = isTrustedChain(origin.chain) && isTrustedChain(chainToCheck) || isNativeAssetTeleport(origin.api, origin.chain, chainToCheck, assetInfo);
|
|
8394
|
-
if (canTeleport && !isSubBridge) return 'Teleport';
|
|
8395
|
-
if (origin.chain === reserve.chain) return 'LocalReserve';
|
|
8396
|
-
return 'DestinationReserve';
|
|
8007
|
+
var createX1Payload = function createX1Payload(version, junction) {
|
|
8008
|
+
return version === Version.V3 ? {
|
|
8009
|
+
X1: junction
|
|
8010
|
+
} : {
|
|
8011
|
+
X1: [junction]
|
|
8012
|
+
};
|
|
8397
8013
|
};
|
|
8398
|
-
|
|
8399
|
-
|
|
8400
|
-
|
|
8401
|
-
|
|
8402
|
-
|
|
8403
|
-
|
|
8404
|
-
|
|
8405
|
-
|
|
8406
|
-
|
|
8407
|
-
|
|
8408
|
-
|
|
8409
|
-
|
|
8410
|
-
|
|
8411
|
-
var
|
|
8412
|
-
|
|
8413
|
-
|
|
8414
|
-
|
|
8415
|
-
|
|
8416
|
-
|
|
8417
|
-
|
|
8418
|
-
|
|
8419
|
-
|
|
8420
|
-
var
|
|
8014
|
+
|
|
8015
|
+
var createAccountPayload = function createAccountPayload(api, address) {
|
|
8016
|
+
return isAddress(address) ? {
|
|
8017
|
+
AccountKey20: {
|
|
8018
|
+
key: address
|
|
8019
|
+
}
|
|
8020
|
+
} : {
|
|
8021
|
+
AccountId32: {
|
|
8022
|
+
id: api.accountToHex(address)
|
|
8023
|
+
}
|
|
8024
|
+
};
|
|
8025
|
+
};
|
|
8026
|
+
var createBeneficiaryLocXTokens = function createBeneficiaryLocXTokens(_ref) {
|
|
8027
|
+
var api = _ref.api,
|
|
8028
|
+
recipient = _ref.recipient,
|
|
8029
|
+
origin = _ref.origin,
|
|
8030
|
+
destination = _ref.destination,
|
|
8031
|
+
version = _ref.version,
|
|
8032
|
+
paraId = _ref.paraId;
|
|
8033
|
+
if (isTLocation(recipient)) {
|
|
8034
|
+
return recipient;
|
|
8035
|
+
}
|
|
8036
|
+
var scenario = resolveScenario(origin, destination);
|
|
8037
|
+
var accountPayload = createAccountPayload(api, recipient);
|
|
8038
|
+
if (scenario === 'ParaToRelay') {
|
|
8039
|
+
return {
|
|
8040
|
+
parents: Parents.ONE,
|
|
8041
|
+
interior: createX1Payload(version, {
|
|
8042
|
+
AccountId32: {
|
|
8043
|
+
id: api.accountToHex(recipient)
|
|
8044
|
+
}
|
|
8045
|
+
})
|
|
8046
|
+
};
|
|
8047
|
+
} else if (scenario === 'ParaToPara') {
|
|
8048
|
+
return {
|
|
8049
|
+
parents: Parents.ONE,
|
|
8050
|
+
interior: {
|
|
8051
|
+
X2: [{
|
|
8052
|
+
Parachain: paraId
|
|
8053
|
+
}, accountPayload]
|
|
8054
|
+
}
|
|
8055
|
+
};
|
|
8056
|
+
}
|
|
8421
8057
|
return {
|
|
8422
|
-
|
|
8423
|
-
|
|
8424
|
-
|
|
8425
|
-
|
|
8426
|
-
|
|
8427
|
-
|
|
8428
|
-
|
|
8429
|
-
|
|
8430
|
-
|
|
8431
|
-
|
|
8058
|
+
parents: Parents.ZERO,
|
|
8059
|
+
interior: createX1Payload(version, accountPayload)
|
|
8060
|
+
};
|
|
8061
|
+
};
|
|
8062
|
+
var createBeneficiaryLocation = function createBeneficiaryLocation(_ref2) {
|
|
8063
|
+
var api = _ref2.api,
|
|
8064
|
+
address = _ref2.address,
|
|
8065
|
+
version = _ref2.version;
|
|
8066
|
+
if (isTLocation(address)) return address;
|
|
8067
|
+
var accountPayload = createAccountPayload(api, address);
|
|
8068
|
+
return {
|
|
8069
|
+
parents: Parents.ZERO,
|
|
8070
|
+
interior: createX1Payload(version, accountPayload)
|
|
8071
|
+
};
|
|
8072
|
+
};
|
|
8073
|
+
|
|
8074
|
+
var createDestination = function createDestination(api, version, origin, destination, chainId, junction, parents) {
|
|
8075
|
+
var isLocDestination = isTLocation(destination);
|
|
8076
|
+
var isSubBridge = !isLocDestination && !isExternalChain(destination) && isSubstrateBridge(origin, destination);
|
|
8077
|
+
if (isSubBridge) {
|
|
8078
|
+
return {
|
|
8079
|
+
parents: Parents.TWO,
|
|
8080
|
+
interior: {
|
|
8081
|
+
X2: [{
|
|
8082
|
+
GlobalConsensus: api.getRelayChainOf(destination)
|
|
8083
|
+
}, {
|
|
8084
|
+
Parachain: chainId
|
|
8085
|
+
}]
|
|
8086
|
+
}
|
|
8087
|
+
};
|
|
8088
|
+
}
|
|
8089
|
+
var isExternalDestination = !isLocDestination && isExternalChain(destination);
|
|
8090
|
+
if (isExternalDestination) {
|
|
8091
|
+
return {
|
|
8092
|
+
parents: Parents.TWO,
|
|
8093
|
+
interior: {
|
|
8094
|
+
X1: [getEthereumJunction(api, origin)]
|
|
8095
|
+
}
|
|
8096
|
+
};
|
|
8097
|
+
}
|
|
8098
|
+
var scenario = resolveScenario(origin, destination);
|
|
8099
|
+
var parentsResolved = parents !== null && parents !== void 0 ? parents : scenario === 'RelayToPara' ? Parents.ZERO : Parents.ONE;
|
|
8100
|
+
var interior = scenario === 'ParaToRelay' ? 'Here' : createX1Payload(version, junction !== null && junction !== void 0 ? junction : {
|
|
8101
|
+
Parachain: chainId
|
|
8102
|
+
});
|
|
8103
|
+
return isLocDestination ? destination : {
|
|
8104
|
+
parents: parentsResolved,
|
|
8105
|
+
interior: interior
|
|
8106
|
+
};
|
|
8107
|
+
};
|
|
8108
|
+
var createVersionedDestination = function createVersionedDestination(api, version, origin, destination, chainId, junction, parents) {
|
|
8109
|
+
var plainDestination = createDestination(api, version, origin, destination, chainId, junction, parents);
|
|
8110
|
+
return addXcmVersionHeader(plainDestination, version);
|
|
8111
|
+
};
|
|
8112
|
+
|
|
8113
|
+
var getChainLocation = function getChainLocation(chain, destChain, customCtx) {
|
|
8114
|
+
var fromRelay = isRelayChain(chain);
|
|
8115
|
+
var toRelay = isRelayChain(destChain);
|
|
8116
|
+
var parents = fromRelay ? Parents.ZERO : Parents.ONE;
|
|
8117
|
+
var interior = toRelay ? 'Here' : {
|
|
8118
|
+
X1: [{
|
|
8119
|
+
Parachain: getParaIdImpl(destChain, customCtx)
|
|
8120
|
+
}]
|
|
8121
|
+
};
|
|
8122
|
+
return {
|
|
8123
|
+
parents: parents,
|
|
8124
|
+
interior: interior
|
|
8125
|
+
};
|
|
8126
|
+
};
|
|
8127
|
+
|
|
8128
|
+
/**
|
|
8129
|
+
* This function localizes a location by removing the `Parachain` junction
|
|
8130
|
+
* if it exists. The `parents` field is set to `0` either if a `Parachain` was removed
|
|
8131
|
+
* or if the resulting interior is `'Here'` and the chain is a relay chain.
|
|
8132
|
+
*
|
|
8133
|
+
* @param chain - The current chain
|
|
8134
|
+
* @param location - The location to localize
|
|
8135
|
+
* @returns The localized location
|
|
8136
|
+
*/
|
|
8137
|
+
var localizeLocationInner = function localizeLocationInner(chain, location, origin, resolveRelay, resolveParaId) {
|
|
8138
|
+
var _Object$keys$;
|
|
8139
|
+
var targetRelay = isExternalChain(chain) ? undefined : resolveRelay(chain).toLowerCase();
|
|
8140
|
+
var originRelay = origin && !isExternalChain(origin) ? resolveRelay(origin).toLowerCase() : undefined;
|
|
8141
|
+
var locationConsensus = getJunctionValue(location, 'GlobalConsensus');
|
|
8142
|
+
var locationRelay = locationConsensus ? (_Object$keys$ = Object.keys(locationConsensus)[0]) === null || _Object$keys$ === void 0 ? void 0 : _Object$keys$.toLowerCase() : undefined;
|
|
8143
|
+
var ecosystemDiffers = targetRelay && originRelay && originRelay !== targetRelay;
|
|
8144
|
+
var junctions = location.interior === 'Here' ? [] : flattenJunctions(location.interior);
|
|
8145
|
+
var junctionCount = junctions.length;
|
|
8146
|
+
var isLocationOnTargetRelay = targetRelay !== undefined && locationRelay === targetRelay;
|
|
8147
|
+
// Check if target is an external chain and location's GlobalConsensus matches it
|
|
8148
|
+
var isLocationOnTargetExternal = isExternalChain(chain) && locationRelay === chain.toLowerCase();
|
|
8149
|
+
var isConsensusAnchored = junctions.findIndex(function (junction) {
|
|
8150
|
+
return 'GlobalConsensus' in junction;
|
|
8151
|
+
}) === 0;
|
|
8152
|
+
if (locationRelay && targetRelay && locationRelay !== targetRelay && (!origin || !ecosystemDiffers && isConsensusAnchored)) {
|
|
8153
|
+
return location;
|
|
8154
|
+
}
|
|
8155
|
+
if (origin && ecosystemDiffers && location.parents === Parents.TWO && originRelay !== undefined && targetRelay !== undefined && deepEqual(getJunctionValue(location, 'GlobalConsensus'), _defineProperty({}, targetRelay, null)) && junctionCount === 1) {
|
|
8156
|
+
return RELAY_LOCATION;
|
|
8157
|
+
}
|
|
8158
|
+
var newInterior = location.interior;
|
|
8159
|
+
var parachainRemoved = false;
|
|
8160
|
+
if (location.interior !== 'Here') {
|
|
8161
|
+
var paraId = resolveParaId(chain);
|
|
8162
|
+
var filteredJunctions = junctions.filter(function (junction) {
|
|
8163
|
+
if ('GlobalConsensus' in junction && (isLocationOnTargetRelay || isLocationOnTargetExternal)) {
|
|
8164
|
+
return false;
|
|
8165
|
+
}
|
|
8166
|
+
if ('Parachain' in junction && (!ecosystemDiffers || isLocationOnTargetRelay)) {
|
|
8167
|
+
var paraJunctionId = getJunctionValue(location, 'Parachain');
|
|
8168
|
+
if (paraJunctionId === paraId) {
|
|
8169
|
+
parachainRemoved = true;
|
|
8170
|
+
return false;
|
|
8171
|
+
}
|
|
8172
|
+
}
|
|
8173
|
+
return true;
|
|
8174
|
+
});
|
|
8175
|
+
if (filteredJunctions.length === 0) {
|
|
8176
|
+
newInterior = 'Here';
|
|
8177
|
+
} else {
|
|
8178
|
+
newInterior = _defineProperty({}, "X".concat(filteredJunctions.length), filteredJunctions);
|
|
8432
8179
|
}
|
|
8180
|
+
}
|
|
8181
|
+
var isOriginRelayHere = deepEqual(location, RELAY_LOCATION);
|
|
8182
|
+
var hasGlobalConsensus = hasJunction(location, 'GlobalConsensus');
|
|
8183
|
+
if (origin && isExternalChain(chain) && originRelay !== undefined && isOriginRelayHere && !hasGlobalConsensus) {
|
|
8184
|
+
return {
|
|
8185
|
+
parents: Parents.ONE,
|
|
8186
|
+
interior: {
|
|
8187
|
+
X1: [{
|
|
8188
|
+
GlobalConsensus: _defineProperty({}, originRelay, null)
|
|
8189
|
+
}]
|
|
8190
|
+
}
|
|
8191
|
+
};
|
|
8192
|
+
}
|
|
8193
|
+
if (isExternalChain(chain) && location.parents === Parents.TWO && RELAYCHAINS.some(function (relay) {
|
|
8194
|
+
return deepEqual(getJunctionValue(location, 'GlobalConsensus'), _defineProperty({}, relay.toLowerCase(), null));
|
|
8195
|
+
})) {
|
|
8196
|
+
return _objectSpread2(_objectSpread2({}, location), {}, {
|
|
8197
|
+
parents: Parents.ONE
|
|
8198
|
+
});
|
|
8199
|
+
}
|
|
8200
|
+
if (origin && ecosystemDiffers && isOriginRelayHere && !hasGlobalConsensus && originRelay !== undefined) {
|
|
8201
|
+
return {
|
|
8202
|
+
parents: Parents.TWO,
|
|
8203
|
+
interior: {
|
|
8204
|
+
X1: [{
|
|
8205
|
+
GlobalConsensus: _defineProperty({}, originRelay, null)
|
|
8206
|
+
}]
|
|
8207
|
+
}
|
|
8208
|
+
};
|
|
8209
|
+
}
|
|
8210
|
+
if (origin && ecosystemDiffers && newInterior !== 'Here' && !hasGlobalConsensus && originRelay !== undefined) {
|
|
8211
|
+
var _junctions = flattenJunctions(newInterior);
|
|
8212
|
+
var updatedJunctions = [{
|
|
8213
|
+
GlobalConsensus: _defineProperty({}, originRelay, null)
|
|
8214
|
+
}].concat(_toConsumableArray(_junctions));
|
|
8215
|
+
return {
|
|
8216
|
+
parents: Parents.TWO,
|
|
8217
|
+
interior: _defineProperty({}, "X".concat(updatedJunctions.length), updatedJunctions)
|
|
8218
|
+
};
|
|
8219
|
+
}
|
|
8220
|
+
var shouldSetParentsToZero = parachainRemoved || newInterior === 'Here' && isRelayChain(chain) || isLocationOnTargetExternal;
|
|
8221
|
+
return {
|
|
8222
|
+
parents: shouldSetParentsToZero ? Parents.ZERO : location.parents,
|
|
8223
|
+
interior: newInterior
|
|
8433
8224
|
};
|
|
8434
8225
|
};
|
|
8226
|
+
var localizeLocation = function localizeLocation(chain, location, origin) {
|
|
8227
|
+
return localizeLocationInner(chain, location, origin, function (c) {
|
|
8228
|
+
return getRelayChainOf(c);
|
|
8229
|
+
}, function (c) {
|
|
8230
|
+
return getParaId(c);
|
|
8231
|
+
});
|
|
8232
|
+
};
|
|
8233
|
+
var localizeLocationImpl = function localizeLocationImpl(api, chain, location, origin) {
|
|
8234
|
+
return localizeLocationInner(chain, location, origin, function (c) {
|
|
8235
|
+
return getRelayChainOfImpl(api, c);
|
|
8236
|
+
}, function (c) {
|
|
8237
|
+
return getParaIdImpl(c, api._customCtx);
|
|
8238
|
+
});
|
|
8239
|
+
};
|
|
8240
|
+
|
|
8241
|
+
var reverseTransformLocation = function reverseTransformLocation(location) {
|
|
8242
|
+
var parachainJunction = {
|
|
8243
|
+
Parachain: 1000
|
|
8244
|
+
};
|
|
8245
|
+
var alreadyHasP1000 = location.interior !== 'Here' && Object.values(location.interior).flat().some(function (j) {
|
|
8246
|
+
return _typeof(j) === 'object' && j !== null && 'Parachain' in j && j.Parachain === 1000;
|
|
8247
|
+
});
|
|
8248
|
+
if (alreadyHasP1000) {
|
|
8249
|
+
return _objectSpread2(_objectSpread2({}, location), {}, {
|
|
8250
|
+
parents: Parents.ONE
|
|
8251
|
+
});
|
|
8252
|
+
}
|
|
8253
|
+
var existingJunctions = location.interior === 'Here' ? [] // no other junctions
|
|
8254
|
+
: Object.values(location.interior).flat();
|
|
8255
|
+
var allJunctions = [parachainJunction].concat(_toConsumableArray(existingJunctions));
|
|
8256
|
+
return _objectSpread2(_objectSpread2({}, location), {}, {
|
|
8257
|
+
parents: Parents.ONE,
|
|
8258
|
+
interior: _defineProperty({}, "X".concat(allJunctions.length), allJunctions)
|
|
8259
|
+
});
|
|
8260
|
+
};
|
|
8435
8261
|
|
|
8436
8262
|
var PINK_LOCATION = {
|
|
8437
8263
|
parents: 1,
|
|
@@ -8453,6 +8279,13 @@ var requiresSystemAssetByLocation = function requiresSystemAssetByLocation(api,
|
|
|
8453
8279
|
return deepEqual(assetLocation, location);
|
|
8454
8280
|
});
|
|
8455
8281
|
};
|
|
8282
|
+
var getFeeAssetLocation = function getFeeAssetLocation(_ref) {
|
|
8283
|
+
var _feeAssetInfo$locatio;
|
|
8284
|
+
var feeAssetInfo = _ref.feeAssetInfo,
|
|
8285
|
+
isRelayAsset = _ref.isRelayAsset,
|
|
8286
|
+
assetInfo = _ref.assetInfo;
|
|
8287
|
+
return (_feeAssetInfo$locatio = feeAssetInfo === null || feeAssetInfo === void 0 ? void 0 : feeAssetInfo.location) !== null && _feeAssetInfo$locatio !== void 0 ? _feeAssetInfo$locatio : isRelayAsset ? assetInfo.location : RELAY_LOCATION;
|
|
8288
|
+
};
|
|
8456
8289
|
var getBridgeReserve = function getBridgeReserve(api, chain, destination, location) {
|
|
8457
8290
|
var assetConsensus = getJunctionValue(location, 'GlobalConsensus');
|
|
8458
8291
|
var ethereumConsensus = getEthereumJunction(api, chain, false).GlobalConsensus;
|
|
@@ -8472,17 +8305,23 @@ var resolveReserveChain = function resolveReserveChain(api, chain, destination,
|
|
|
8472
8305
|
return api.getAssetReserveChain(chain, assetLocation, isExternalChain(destination));
|
|
8473
8306
|
};
|
|
8474
8307
|
var createTypeAndThenCallContext = /*#__PURE__*/function () {
|
|
8475
|
-
var
|
|
8308
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options, overrides) {
|
|
8476
8309
|
var _overrides$noFeeAsset;
|
|
8477
|
-
var api, chain, destination, assetInfo, isSubBridge, isSb, reserveChain, NO_FEE_ASSET_LOCS, systemAsset, assetGlobalConsensus, originRelayChain, isExternalDestination, isSnowbridgeAsset, requiresSystemAsset, isAssetHubToExternal, isForeignRelayToExternal, isRelayAsset, assetHubChain, bridgeHopChain, destApi, reserveApi;
|
|
8310
|
+
var api, chain, destination, assetInfo, overriddenAsset, isSubBridge, isSb, transferredAsset, reserveChain, feeAssetInfo, feeAssetLocation, feeReserveChain, NO_FEE_ASSET_LOCS, systemAsset, assetGlobalConsensus, originRelayChain, isExternalDestination, isSnowbridgeAsset, requiresSystemAsset, isAssetHubToExternal, isForeignRelayToExternal, isRelayAsset, assetHubChain, bridgeHopChain, routedChain, destApi, reserveApi;
|
|
8478
8311
|
return _regenerator().w(function (_context) {
|
|
8479
8312
|
while (1) switch (_context.n) {
|
|
8480
8313
|
case 0:
|
|
8481
|
-
api = options.api, chain = options.chain, destination = options.destination, assetInfo = options.assetInfo;
|
|
8314
|
+
api = options.api, chain = options.chain, destination = options.destination, assetInfo = options.assetInfo, overriddenAsset = options.overriddenAsset;
|
|
8482
8315
|
assertToIsString(destination);
|
|
8483
8316
|
isSubBridge = isSubstrateBridge(chain, destination);
|
|
8484
|
-
isSb = isSnowbridge(chain, destination);
|
|
8485
|
-
|
|
8317
|
+
isSb = isSnowbridge(chain, destination); // For multi-asset transfers `assetInfo` is the fee asset, so the reserve is taken from the transferred asset
|
|
8318
|
+
transferredAsset = overriddenAsset === null || overriddenAsset === void 0 ? void 0 : overriddenAsset.find(function (asset) {
|
|
8319
|
+
return !asset.isFeeAsset;
|
|
8320
|
+
});
|
|
8321
|
+
reserveChain = resolveReserveChain(api, chain, destination, transferredAsset ? extractAssetLocation(transferredAsset) : assetInfo.location, isSubBridge, overrides.reserveChain);
|
|
8322
|
+
feeAssetInfo = getFeeAssetInfo(assetInfo, options.feeAssetInfo);
|
|
8323
|
+
feeAssetLocation = transferredAsset ? assetInfo.location : feeAssetInfo === null || feeAssetInfo === void 0 ? void 0 : feeAssetInfo.location;
|
|
8324
|
+
feeReserveChain = feeAssetLocation && resolveReserveChain(api, chain, destination, feeAssetLocation, isSubBridge);
|
|
8486
8325
|
NO_FEE_ASSET_LOCS = [RELAY_LOCATION, {
|
|
8487
8326
|
parents: 2,
|
|
8488
8327
|
interior: {
|
|
@@ -8519,19 +8358,26 @@ var createTypeAndThenCallContext = /*#__PURE__*/function () {
|
|
|
8519
8358
|
isForeignRelayToExternal = isExternalDestination && !chain.startsWith('AssetHub') && assetInfo.location.parents === 2 && RELAYCHAINS.some(function (relay) {
|
|
8520
8359
|
return relay !== originRelayChain && deepEqual(assetGlobalConsensus, _defineProperty({}, relay.toLowerCase(), null));
|
|
8521
8360
|
});
|
|
8522
|
-
isRelayAsset = !requiresSystemAsset && !isForeignRelayToExternal && (isAssetHubToExternal || NO_FEE_ASSET_LOCS.some(function (loc) {
|
|
8361
|
+
isRelayAsset = !feeAssetInfo && !requiresSystemAsset && !isForeignRelayToExternal && (isAssetHubToExternal || NO_FEE_ASSET_LOCS.some(function (loc) {
|
|
8523
8362
|
return deepEqual(assetInfo.location, loc);
|
|
8524
8363
|
}) || isSubBridge || ((_overrides$noFeeAsset = overrides.noFeeAsset) !== null && _overrides$noFeeAsset !== void 0 ? _overrides$noFeeAsset : false));
|
|
8525
8364
|
assetHubChain = "AssetHub".concat(originRelayChain);
|
|
8526
8365
|
bridgeHopChain = !chain.startsWith('AssetHub') && destination !== assetHubChain && assetGlobalConsensus !== undefined ? assetHubChain : undefined;
|
|
8366
|
+
routedChain = bridgeHopChain !== null && bridgeHopChain !== void 0 ? bridgeHopChain : reserveChain === chain ? destination : reserveChain;
|
|
8367
|
+
if (!(feeReserveChain !== undefined && feeReserveChain !== chain && feeReserveChain !== routedChain)) {
|
|
8368
|
+
_context.n = 1;
|
|
8369
|
+
break;
|
|
8370
|
+
}
|
|
8371
|
+
throw new ScenarioNotSupportedError("Fee asset cannot pay fees on ".concat(routedChain, " because its reserve chain (").concat(feeReserveChain, ") is neither the origin nor ").concat(routedChain));
|
|
8372
|
+
case 1:
|
|
8527
8373
|
destApi = api.clone();
|
|
8528
|
-
_context.n =
|
|
8374
|
+
_context.n = 2;
|
|
8529
8375
|
return destApi.init(destination);
|
|
8530
|
-
case
|
|
8376
|
+
case 2:
|
|
8531
8377
|
reserveApi = reserveChain === chain ? api : reserveChain === destination ? destApi : api.clone();
|
|
8532
|
-
_context.n =
|
|
8378
|
+
_context.n = 3;
|
|
8533
8379
|
return reserveApi.init(reserveChain);
|
|
8534
|
-
case
|
|
8380
|
+
case 3:
|
|
8535
8381
|
return _context.a(2, {
|
|
8536
8382
|
origin: {
|
|
8537
8383
|
api: api,
|
|
@@ -8549,6 +8395,8 @@ var createTypeAndThenCallContext = /*#__PURE__*/function () {
|
|
|
8549
8395
|
isSnowbridge: isSb,
|
|
8550
8396
|
isRelayAsset: isRelayAsset,
|
|
8551
8397
|
assetInfo: assetInfo,
|
|
8398
|
+
feeAssetInfo: feeAssetInfo,
|
|
8399
|
+
feeReserveChain: feeReserveChain,
|
|
8552
8400
|
options: options,
|
|
8553
8401
|
systemAsset: systemAsset,
|
|
8554
8402
|
bridgeHopChain: bridgeHopChain
|
|
@@ -8557,10 +8405,70 @@ var createTypeAndThenCallContext = /*#__PURE__*/function () {
|
|
|
8557
8405
|
}, _callee);
|
|
8558
8406
|
}));
|
|
8559
8407
|
return function createTypeAndThenCallContext(_x, _x2) {
|
|
8560
|
-
return
|
|
8408
|
+
return _ref3.apply(this, arguments);
|
|
8561
8409
|
};
|
|
8562
8410
|
}();
|
|
8563
8411
|
|
|
8412
|
+
var resolveTransferType = function resolveTransferType(_ref, assetInfo, assetReserveChain) {
|
|
8413
|
+
var origin = _ref.origin,
|
|
8414
|
+
reserve = _ref.reserve,
|
|
8415
|
+
dest = _ref.dest,
|
|
8416
|
+
isSubBridge = _ref.isSubBridge;
|
|
8417
|
+
// Direct A → C: when origin is reserve OR dest is reserve, check origin <-> dest trust
|
|
8418
|
+
// Hop A → B → C: when reserve differs from both, check origin <-> reserve trust
|
|
8419
|
+
var isDirect = origin.chain === reserve.chain || dest.chain === reserve.chain;
|
|
8420
|
+
var chainToCheck = isDirect ? dest.chain : reserve.chain;
|
|
8421
|
+
var canTeleport = isTrustedChain(origin.chain) && isTrustedChain(chainToCheck) || isNativeAssetTeleport(origin.api, origin.chain, chainToCheck, assetInfo);
|
|
8422
|
+
if (canTeleport && !isSubBridge) return 'Teleport';
|
|
8423
|
+
if (origin.chain === assetReserveChain) return 'LocalReserve';
|
|
8424
|
+
return 'DestinationReserve';
|
|
8425
|
+
};
|
|
8426
|
+
var buildTypeAndThenCall = function buildTypeAndThenCall(context, isDotAsset, customXcm, assets) {
|
|
8427
|
+
var origin = context.origin,
|
|
8428
|
+
reserve = context.reserve,
|
|
8429
|
+
dest = context.dest,
|
|
8430
|
+
assetInfo = context.assetInfo,
|
|
8431
|
+
feeAssetInfo = context.feeAssetInfo,
|
|
8432
|
+
feeReserveChain = context.feeReserveChain,
|
|
8433
|
+
bridgeHopChain = context.bridgeHopChain,
|
|
8434
|
+
isSubBridge = context.isSubBridge,
|
|
8435
|
+
_context$options = context.options,
|
|
8436
|
+
version = _context$options.version,
|
|
8437
|
+
pallet = _context$options.pallet,
|
|
8438
|
+
method = _context$options.method,
|
|
8439
|
+
overriddenAsset = _context$options.overriddenAsset;
|
|
8440
|
+
var feeAssetLocation = getFeeAssetLocation(context);
|
|
8441
|
+
var finalDest = bridgeHopChain !== null && bridgeHopChain !== void 0 ? bridgeHopChain : origin.chain === reserve.chain ? dest.chain : reserve.chain;
|
|
8442
|
+
var destLocation = createDestination(origin.api, version, origin.chain, finalDest, origin.api.getParaId(finalDest));
|
|
8443
|
+
var transferType = bridgeHopChain ? 'DestinationReserve' : resolveTransferType(context, assetInfo, reserve.chain);
|
|
8444
|
+
var resolveFeesTransferType = function resolveFeesTransferType() {
|
|
8445
|
+
if (feeReserveChain !== undefined) {
|
|
8446
|
+
return resolveTransferType(context, feeAssetInfo !== null && feeAssetInfo !== void 0 ? feeAssetInfo : assetInfo, feeReserveChain);
|
|
8447
|
+
}
|
|
8448
|
+
return isSubBridge && !isDotAsset ? 'LocalReserve' : transferType;
|
|
8449
|
+
};
|
|
8450
|
+
var feesTransferType = resolveFeesTransferType();
|
|
8451
|
+
var overriddenFeeAsset = overriddenAsset === null || overriddenAsset === void 0 ? void 0 : overriddenAsset.find(function (asset) {
|
|
8452
|
+
return asset.isFeeAsset;
|
|
8453
|
+
});
|
|
8454
|
+
var feeMultiAsset = createAsset(version, assetInfo.amount, normalizeLocation(origin.api.localizeLocation(origin.chain, overriddenFeeAsset ? extractAssetLocation(overriddenFeeAsset) : feeAssetLocation), version));
|
|
8455
|
+
var module = pallet !== null && pallet !== void 0 ? pallet : origin.api.getXcmPallet(origin.chain);
|
|
8456
|
+
var methodName = method !== null && method !== void 0 ? method : 'transfer_assets_using_type_and_then';
|
|
8457
|
+
return {
|
|
8458
|
+
module: module,
|
|
8459
|
+
method: methodName,
|
|
8460
|
+
params: {
|
|
8461
|
+
dest: addXcmVersionHeader(destLocation, version),
|
|
8462
|
+
assets: addXcmVersionHeader(assets, version),
|
|
8463
|
+
assets_transfer_type: transferType,
|
|
8464
|
+
remote_fees_id: addXcmVersionHeader(feeMultiAsset.id, version),
|
|
8465
|
+
fees_transfer_type: feesTransferType,
|
|
8466
|
+
custom_xcm_on_dest: addXcmVersionHeader(customXcm, version),
|
|
8467
|
+
weight_limit: 'Unlimited'
|
|
8468
|
+
}
|
|
8469
|
+
};
|
|
8470
|
+
};
|
|
8471
|
+
|
|
8564
8472
|
var generateMessageId = /*#__PURE__*/function () {
|
|
8565
8473
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(api, senderAddress, sourceParaId, tokenAddress, recipient, amount) {
|
|
8566
8474
|
var accountNextId, sourceAccountHex, entropy;
|
|
@@ -8689,7 +8597,7 @@ var createCustomXcm = /*#__PURE__*/function () {
|
|
|
8689
8597
|
setTopic = messageId ? [{
|
|
8690
8598
|
SetTopic: messageId
|
|
8691
8599
|
}] : [];
|
|
8692
|
-
feeAssetLocation =
|
|
8600
|
+
feeAssetLocation = getFeeAssetLocation(context);
|
|
8693
8601
|
feeLocLocalized = origin.api.localizeLocation(dest.chain, feeAssetLocation, origin.chain);
|
|
8694
8602
|
assetLocLocalized = origin.api.localizeLocation(dest.chain, assetInfo.location, origin.chain);
|
|
8695
8603
|
asset = createAsset(version, assetInfo.amount, assetLocLocalized);
|
|
@@ -8722,7 +8630,7 @@ var createCustomXcm = /*#__PURE__*/function () {
|
|
|
8722
8630
|
return localizeFilterAsset(asset.fun.Fungible, extractAssetLocation(asset));
|
|
8723
8631
|
})));
|
|
8724
8632
|
} else {
|
|
8725
|
-
if (!isRelayAsset && !isExternalChain(dest.chain)) assetsFilter.push(createAsset(version, hopFees + destFee, origin.api.localizeLocation(reserve.chain,
|
|
8633
|
+
if (!isRelayAsset && !isExternalChain(dest.chain)) assetsFilter.push(createAsset(version, normalizeAmount(hopFees + destFee), origin.api.localizeLocation(reserve.chain, feeAssetLocation)));
|
|
8726
8634
|
assetsFilter.push(localizeFilterAsset(assetInfo.amount, assetInfo.location));
|
|
8727
8635
|
}
|
|
8728
8636
|
isAssetEthereumNative = deepEqual(getJunctionValue(assetInfo.location, 'GlobalConsensus'), getEthereumJunction(origin.api, origin.chain, false).GlobalConsensus);
|
|
@@ -8742,7 +8650,7 @@ var createCustomXcm = /*#__PURE__*/function () {
|
|
|
8742
8650
|
AllCounted: assetCount
|
|
8743
8651
|
}
|
|
8744
8652
|
} : {
|
|
8745
|
-
Definite: assetsFilter
|
|
8653
|
+
Definite: sortAssets(assetsFilter)
|
|
8746
8654
|
};
|
|
8747
8655
|
buyExecutionAsset = isExternalChain(dest.chain) ? createAsset(version, buyExecutionAmount, assetLocLocalized) : createAsset(version, normalizeAmount(buyExecutionAmount), feeLocLocalized);
|
|
8748
8656
|
buyExecution = {
|
|
@@ -8816,17 +8724,25 @@ var createCustomXcm = /*#__PURE__*/function () {
|
|
|
8816
8724
|
};
|
|
8817
8725
|
}();
|
|
8818
8726
|
|
|
8819
|
-
var buildAssets = function buildAssets(
|
|
8820
|
-
var
|
|
8821
|
-
|
|
8727
|
+
var buildAssets = function buildAssets(context, feeAmount) {
|
|
8728
|
+
var _context$origin = context.origin,
|
|
8729
|
+
api = _context$origin.api,
|
|
8730
|
+
chain = _context$origin.chain,
|
|
8731
|
+
assetInfo = context.assetInfo,
|
|
8732
|
+
isRelayAsset = context.isRelayAsset,
|
|
8733
|
+
_context$options = context.options,
|
|
8734
|
+
version = _context$options.version,
|
|
8735
|
+
overriddenAsset = _context$options.overriddenAsset;
|
|
8736
|
+
var localize = function localize(amount, location) {
|
|
8737
|
+
return createAsset(version, amount, normalizeLocation(api.localizeLocation(chain, location), version));
|
|
8738
|
+
};
|
|
8822
8739
|
if (overriddenAsset) {
|
|
8823
|
-
return overriddenAsset
|
|
8824
|
-
|
|
8825
|
-
|
|
8826
|
-
if (!isRelayAsset) {
|
|
8827
|
-
assets.push(createAsset(version, feeAmount, RELAY_LOCATION));
|
|
8740
|
+
return sortAssets(overriddenAsset.map(function (asset) {
|
|
8741
|
+
return localize(asset.fun.Fungible, extractAssetLocation(asset));
|
|
8742
|
+
}));
|
|
8828
8743
|
}
|
|
8829
|
-
assets
|
|
8744
|
+
var assets = isRelayAsset ? [] : [localize(feeAmount, getFeeAssetLocation(context))];
|
|
8745
|
+
assets.push(localize(assetInfo.amount, assetInfo.location));
|
|
8830
8746
|
return sortAssets(assets);
|
|
8831
8747
|
};
|
|
8832
8748
|
var resolveAssetCount = function resolveAssetCount(overriddenAsset, isRelayAsset) {
|
|
@@ -8837,22 +8753,20 @@ var resolveAssetCount = function resolveAssetCount(overriddenAsset, isRelayAsset
|
|
|
8837
8753
|
};
|
|
8838
8754
|
var DEFAULT_SYSTEM_ASSET_AMOUNT = '1';
|
|
8839
8755
|
var DEFAULT_SYSTEM_ASSET_AMOUNT_EXTERNAL = '10';
|
|
8840
|
-
var resolveSystemAssetAmount = function resolveSystemAssetAmount(
|
|
8841
|
-
var systemAsset =
|
|
8842
|
-
|
|
8756
|
+
var resolveSystemAssetAmount = function resolveSystemAssetAmount(_ref, isForFeeCalc, fees) {
|
|
8757
|
+
var systemAsset = _ref.systemAsset,
|
|
8758
|
+
feeAssetInfo = _ref.feeAssetInfo,
|
|
8759
|
+
dest = _ref.dest;
|
|
8843
8760
|
if (isForFeeCalc) {
|
|
8844
8761
|
var defaultAmount = isExternalChain(dest.chain) ? DEFAULT_SYSTEM_ASSET_AMOUNT_EXTERNAL : DEFAULT_SYSTEM_ASSET_AMOUNT;
|
|
8845
|
-
return parseUnits(defaultAmount, systemAsset.decimals);
|
|
8762
|
+
return parseUnits(defaultAmount, (feeAssetInfo !== null && feeAssetInfo !== void 0 ? feeAssetInfo : systemAsset).decimals);
|
|
8846
8763
|
}
|
|
8847
8764
|
return normalizeAmount(fees.destFee + fees.hopFees);
|
|
8848
8765
|
};
|
|
8849
8766
|
var constructTypeAndThenCall = /*#__PURE__*/function () {
|
|
8850
|
-
var
|
|
8767
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(context) {
|
|
8851
8768
|
var fees,
|
|
8852
|
-
origin,
|
|
8853
|
-
assetInfo,
|
|
8854
8769
|
isRelayAsset,
|
|
8855
|
-
options,
|
|
8856
8770
|
overriddenAsset,
|
|
8857
8771
|
assetCount,
|
|
8858
8772
|
resolvedFees,
|
|
@@ -8865,8 +8779,7 @@ var constructTypeAndThenCall = /*#__PURE__*/function () {
|
|
|
8865
8779
|
while (1) switch (_context.n) {
|
|
8866
8780
|
case 0:
|
|
8867
8781
|
fees = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;
|
|
8868
|
-
|
|
8869
|
-
overriddenAsset = options.overriddenAsset;
|
|
8782
|
+
isRelayAsset = context.isRelayAsset, overriddenAsset = context.options.overriddenAsset;
|
|
8870
8783
|
assetCount = resolveAssetCount(overriddenAsset, isRelayAsset);
|
|
8871
8784
|
resolvedFees = fees !== null && fees !== void 0 ? fees : {
|
|
8872
8785
|
hopFees: 0n,
|
|
@@ -8878,20 +8791,20 @@ var constructTypeAndThenCall = /*#__PURE__*/function () {
|
|
|
8878
8791
|
return createCustomXcm(context, assetCount, isForFeeCalc, systemAssetAmount, resolvedFees);
|
|
8879
8792
|
case 1:
|
|
8880
8793
|
customXcm = _context.v;
|
|
8881
|
-
assets = buildAssets(
|
|
8794
|
+
assets = buildAssets(context, systemAssetAmount);
|
|
8882
8795
|
return _context.a(2, buildTypeAndThenCall(context, isRelayAsset, customXcm, assets));
|
|
8883
8796
|
}
|
|
8884
8797
|
}, _callee);
|
|
8885
8798
|
}));
|
|
8886
8799
|
return function constructTypeAndThenCall(_x) {
|
|
8887
|
-
return
|
|
8800
|
+
return _ref2.apply(this, arguments);
|
|
8888
8801
|
};
|
|
8889
8802
|
}();
|
|
8890
8803
|
/**
|
|
8891
8804
|
* Creates a type and then call for transferring assets using XCM. Works only for DOT and snowbridge assets so far.
|
|
8892
8805
|
*/
|
|
8893
8806
|
var createTypeAndThenCall = /*#__PURE__*/function () {
|
|
8894
|
-
var
|
|
8807
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(options) {
|
|
8895
8808
|
var overrides,
|
|
8896
8809
|
context,
|
|
8897
8810
|
origin,
|
|
@@ -8928,7 +8841,7 @@ var createTypeAndThenCall = /*#__PURE__*/function () {
|
|
|
8928
8841
|
case 3:
|
|
8929
8842
|
_context3.n = 4;
|
|
8930
8843
|
return computeAllFees(context, /*#__PURE__*/function () {
|
|
8931
|
-
var
|
|
8844
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(amount, relative) {
|
|
8932
8845
|
var overridenAmount, _t, _t2;
|
|
8933
8846
|
return _regenerator().w(function (_context2) {
|
|
8934
8847
|
while (1) switch (_context2.n) {
|
|
@@ -8948,7 +8861,7 @@ var createTypeAndThenCall = /*#__PURE__*/function () {
|
|
|
8948
8861
|
}, _callee2);
|
|
8949
8862
|
}));
|
|
8950
8863
|
return function (_x3, _x4) {
|
|
8951
|
-
return
|
|
8864
|
+
return _ref4.apply(this, arguments);
|
|
8952
8865
|
};
|
|
8953
8866
|
}());
|
|
8954
8867
|
case 4:
|
|
@@ -8958,7 +8871,7 @@ var createTypeAndThenCall = /*#__PURE__*/function () {
|
|
|
8958
8871
|
}, _callee3);
|
|
8959
8872
|
}));
|
|
8960
8873
|
return function createTypeAndThenCall(_x2) {
|
|
8961
|
-
return
|
|
8874
|
+
return _ref3.apply(this, arguments);
|
|
8962
8875
|
};
|
|
8963
8876
|
}();
|
|
8964
8877
|
|
|
@@ -9242,6 +9155,66 @@ var verifyEdOnDestination = /*#__PURE__*/function () {
|
|
|
9242
9155
|
};
|
|
9243
9156
|
}();
|
|
9244
9157
|
|
|
9158
|
+
var handleTransactUsingSend = /*#__PURE__*/function () {
|
|
9159
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(_ref) {
|
|
9160
|
+
var api, version, chain, destination, destChain, recipient, paraIdTo, asset, assetInfo, feeAssetInfo, overriddenAsset, transactOptions, dest, transactInstructions, message;
|
|
9161
|
+
return _regenerator().w(function (_context) {
|
|
9162
|
+
while (1) switch (_context.n) {
|
|
9163
|
+
case 0:
|
|
9164
|
+
api = _ref.api, version = _ref.version, chain = _ref.chain, destination = _ref.destination, destChain = _ref.destChain, recipient = _ref.recipient, paraIdTo = _ref.paraIdTo, asset = _ref.asset, assetInfo = _ref.assetInfo, feeAssetInfo = _ref.feeAssetInfo, overriddenAsset = _ref.overriddenAsset, transactOptions = _ref.transactOptions;
|
|
9165
|
+
validateFeeAssetSupport(assetInfo, feeAssetInfo, overriddenAsset, 'send');
|
|
9166
|
+
dest = createDestination(api, version, chain, destination, paraIdTo);
|
|
9167
|
+
if (transactOptions !== null && transactOptions !== void 0 && transactOptions.call) {
|
|
9168
|
+
_context.n = 1;
|
|
9169
|
+
break;
|
|
9170
|
+
}
|
|
9171
|
+
throw new UnsupportedOperationError('Cannot use handleTransactUsingSend without transactOptions.call defined');
|
|
9172
|
+
case 1:
|
|
9173
|
+
if (destChain) {
|
|
9174
|
+
_context.n = 2;
|
|
9175
|
+
break;
|
|
9176
|
+
}
|
|
9177
|
+
throw new UnsupportedOperationError('destChain must be provided when using handleTransactUsingSend');
|
|
9178
|
+
case 2:
|
|
9179
|
+
assertAddressIsString(recipient);
|
|
9180
|
+
_context.n = 3;
|
|
9181
|
+
return createTransactInstructions(api, transactOptions, version, destChain, recipient);
|
|
9182
|
+
case 3:
|
|
9183
|
+
transactInstructions = _context.v;
|
|
9184
|
+
message = [{
|
|
9185
|
+
WithdrawAsset: [asset]
|
|
9186
|
+
}].concat(_toConsumableArray(createBuyExecution(asset)), _toConsumableArray(transactInstructions), [{
|
|
9187
|
+
RefundSurplus: undefined
|
|
9188
|
+
}, {
|
|
9189
|
+
DepositAsset: {
|
|
9190
|
+
assets: {
|
|
9191
|
+
Wild: {
|
|
9192
|
+
AllCounted: 1
|
|
9193
|
+
}
|
|
9194
|
+
},
|
|
9195
|
+
beneficiary: createBeneficiaryLocation({
|
|
9196
|
+
api: api,
|
|
9197
|
+
address: recipient,
|
|
9198
|
+
version: version
|
|
9199
|
+
})
|
|
9200
|
+
}
|
|
9201
|
+
}]);
|
|
9202
|
+
return _context.a(2, {
|
|
9203
|
+
module: getXcmPallet(chain),
|
|
9204
|
+
method: 'send',
|
|
9205
|
+
params: {
|
|
9206
|
+
dest: addXcmVersionHeader(dest, version),
|
|
9207
|
+
message: addXcmVersionHeader(message, version)
|
|
9208
|
+
}
|
|
9209
|
+
});
|
|
9210
|
+
}
|
|
9211
|
+
}, _callee);
|
|
9212
|
+
}));
|
|
9213
|
+
return function handleTransactUsingSend(_x) {
|
|
9214
|
+
return _ref2.apply(this, arguments);
|
|
9215
|
+
};
|
|
9216
|
+
}();
|
|
9217
|
+
|
|
9245
9218
|
var transferPolkadotXcm = /*#__PURE__*/function () {
|
|
9246
9219
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options) {
|
|
9247
9220
|
var method,
|
|
@@ -9253,6 +9226,7 @@ var transferPolkadotXcm = /*#__PURE__*/function () {
|
|
|
9253
9226
|
beneficiaryLocation,
|
|
9254
9227
|
multiAsset,
|
|
9255
9228
|
overriddenAsset,
|
|
9229
|
+
feeAssetInfo,
|
|
9256
9230
|
pallet,
|
|
9257
9231
|
version,
|
|
9258
9232
|
methodOverride,
|
|
@@ -9269,7 +9243,7 @@ var transferPolkadotXcm = /*#__PURE__*/function () {
|
|
|
9269
9243
|
case 0:
|
|
9270
9244
|
method = _args.length > 1 && _args[1] !== undefined ? _args[1] : 'transfer_assets_using_type_and_then';
|
|
9271
9245
|
fees = _args.length > 2 && _args[2] !== undefined ? _args[2] : undefined;
|
|
9272
|
-
api = options.api, chain = options.chain, destination = options.destination, asset = options.assetInfo, beneficiaryLocation = options.beneficiaryLocation, multiAsset = options.asset, overriddenAsset = options.overriddenAsset, pallet = options.pallet, version = options.version, methodOverride = options.method, paraIdTo = options.paraIdTo;
|
|
9246
|
+
api = options.api, chain = options.chain, destination = options.destination, asset = options.assetInfo, beneficiaryLocation = options.beneficiaryLocation, multiAsset = options.asset, overriddenAsset = options.overriddenAsset, feeAssetInfo = options.feeAssetInfo, pallet = options.pallet, version = options.version, methodOverride = options.method, paraIdTo = options.paraIdTo;
|
|
9273
9247
|
if (!(method === 'transfer_assets_using_type_and_then')) {
|
|
9274
9248
|
_context.n = 2;
|
|
9275
9249
|
break;
|
|
@@ -9283,6 +9257,7 @@ var transferPolkadotXcm = /*#__PURE__*/function () {
|
|
|
9283
9257
|
case 1:
|
|
9284
9258
|
return _context.a(2, _t.deserializeExtrinsics.call(_t, _context.v));
|
|
9285
9259
|
case 2:
|
|
9260
|
+
validateFeeAssetSupport(asset, feeAssetInfo, overriddenAsset, methodOverride !== null && methodOverride !== void 0 ? methodOverride : method);
|
|
9286
9261
|
resolvedMultiAssets = maybeOverrideAssets(version, asset.amount, [multiAsset], overriddenAsset);
|
|
9287
9262
|
destLocation = createDestination(api, version, chain, destination, paraIdTo);
|
|
9288
9263
|
feeAssetIndex = overriddenAsset === undefined ? DEFAULT_FEE_ASSET : overriddenAsset.findIndex(function (asset) {
|
|
@@ -9337,6 +9312,13 @@ var applyDecimalAbstraction = function applyDecimalAbstraction(amount, decimals,
|
|
|
9337
9312
|
return parseUnits(amount.toString(), decimals);
|
|
9338
9313
|
};
|
|
9339
9314
|
|
|
9315
|
+
var createAllCountedFilter = function createAllCountedFilter(count) {
|
|
9316
|
+
return {
|
|
9317
|
+
Wild: {
|
|
9318
|
+
AllCounted: count
|
|
9319
|
+
}
|
|
9320
|
+
};
|
|
9321
|
+
};
|
|
9340
9322
|
var createAssetsFilter = function createAssetsFilter(asset, version) {
|
|
9341
9323
|
var location = extractAssetLocation(asset);
|
|
9342
9324
|
var id = createAssetId(version, location);
|
|
@@ -9367,7 +9349,10 @@ var prepareExecuteContext = function prepareExecuteContext(_ref) {
|
|
|
9367
9349
|
destChain = _ref.destChain,
|
|
9368
9350
|
assetInfo = _ref.assetInfo,
|
|
9369
9351
|
feeAssetInfo = _ref.feeAssetInfo,
|
|
9370
|
-
|
|
9352
|
+
_ref$fees = _ref.fees,
|
|
9353
|
+
originFee = _ref$fees.originFee,
|
|
9354
|
+
reserveFee = _ref$fees.reserveFee,
|
|
9355
|
+
destFee = _ref$fees.destFee,
|
|
9371
9356
|
version = _ref.version;
|
|
9372
9357
|
var amount = assetInfo.amount;
|
|
9373
9358
|
var reserveChain = api.getAssetReserveChain(chain, assetInfo.location);
|
|
@@ -9375,10 +9360,13 @@ var prepareExecuteContext = function prepareExecuteContext(_ref) {
|
|
|
9375
9360
|
var assetLocalized = createAsset(version, amount, api.localizeLocation(chain, assetInfo.location));
|
|
9376
9361
|
var assetLocalizedToDest = createAsset(version, amount, localizeLocation(destChain, assetInfo.location));
|
|
9377
9362
|
var assetLocalizedToReserve = createAsset(version, amount, api.localizeLocation(reserveChain !== null && reserveChain !== void 0 ? reserveChain : chain, assetInfo.location));
|
|
9378
|
-
var
|
|
9379
|
-
var
|
|
9380
|
-
var
|
|
9381
|
-
var
|
|
9363
|
+
var resolvedFeeAssetInfo = getFeeAssetInfo(assetInfo, feeAssetInfo);
|
|
9364
|
+
var feeAssetTotal = originFee + reserveFee + destFee;
|
|
9365
|
+
var feeAsset = resolvedFeeAssetInfo && createAsset(version, feeAssetTotal, resolvedFeeAssetInfo.location);
|
|
9366
|
+
var feeAssetLocalized = resolvedFeeAssetInfo && createAsset(version, feeAssetTotal, api.localizeLocation(chain, resolvedFeeAssetInfo.location));
|
|
9367
|
+
var feeAssetLocalizedToDest = resolvedFeeAssetInfo && createAsset(version, destFee, localizeLocation(destChain, resolvedFeeAssetInfo.location));
|
|
9368
|
+
var feeAssetLocalizedToReserve = resolvedFeeAssetInfo && createAsset(version, reserveFee, api.localizeLocation(reserveChain !== null && reserveChain !== void 0 ? reserveChain : chain, resolvedFeeAssetInfo.location));
|
|
9369
|
+
var feeReserveChain = resolvedFeeAssetInfo && api.getAssetReserveChain(chain, resolvedFeeAssetInfo.location);
|
|
9382
9370
|
return {
|
|
9383
9371
|
amount: amount,
|
|
9384
9372
|
asset: asset,
|
|
@@ -9389,6 +9377,7 @@ var prepareExecuteContext = function prepareExecuteContext(_ref) {
|
|
|
9389
9377
|
feeAssetLocalized: feeAssetLocalized,
|
|
9390
9378
|
feeAssetLocalizedToDest: feeAssetLocalizedToDest,
|
|
9391
9379
|
feeAssetLocalizedToReserve: feeAssetLocalizedToReserve,
|
|
9380
|
+
feeReserveChain: feeReserveChain,
|
|
9392
9381
|
reserveChain: reserveChain
|
|
9393
9382
|
};
|
|
9394
9383
|
};
|
|
@@ -9400,6 +9389,12 @@ var updateAsset = function updateAsset(asset, amount) {
|
|
|
9400
9389
|
}
|
|
9401
9390
|
});
|
|
9402
9391
|
};
|
|
9392
|
+
var isTeleportLeg = function isTeleportLeg(api, from, to, assetInfo) {
|
|
9393
|
+
return isTrustedChain(from) && isTrustedChain(to) || isNativeAssetTeleport(api, from, to, assetInfo);
|
|
9394
|
+
};
|
|
9395
|
+
var isTeleportableAsset = function isTeleportableAsset(api, from, to, assetInfo) {
|
|
9396
|
+
return deepEqual(assetInfo.location, RELAY_LOCATION) || isNativeAssetTeleport(api, from, to, assetInfo);
|
|
9397
|
+
};
|
|
9403
9398
|
var getInstructionType = function getInstructionType(api, version, origin, destination, assetInfo, reserveChain, transactOptions) {
|
|
9404
9399
|
if (version >= Version.V5 && transactOptions !== null && transactOptions !== void 0 && transactOptions.call) {
|
|
9405
9400
|
return 'InitiateTransfer';
|
|
@@ -9408,7 +9403,7 @@ var getInstructionType = function getInstructionType(api, version, origin, desti
|
|
|
9408
9403
|
return 'InitiateTeleportToReserve';
|
|
9409
9404
|
}
|
|
9410
9405
|
// Trusted chains (or native-asset teleports to/from AssetHub) can teleport
|
|
9411
|
-
if (
|
|
9406
|
+
if (isTeleportLeg(api, origin, destination, assetInfo)) {
|
|
9412
9407
|
return 'InitiateTeleport';
|
|
9413
9408
|
}
|
|
9414
9409
|
// If we need intermediary reserve (not on reserve chain)
|
|
@@ -9419,7 +9414,7 @@ var getInstructionType = function getInstructionType(api, version, origin, desti
|
|
|
9419
9414
|
return 'DepositAsset';
|
|
9420
9415
|
};
|
|
9421
9416
|
var getInitiateTransferType = function getInitiateTransferType(api, origin, destination, assetInfo, reserveChain) {
|
|
9422
|
-
if (
|
|
9417
|
+
if (isTeleportLeg(api, origin, destination, assetInfo)) {
|
|
9423
9418
|
return 'Teleport';
|
|
9424
9419
|
}
|
|
9425
9420
|
if (origin === reserveChain) return 'ReserveDeposit';
|
|
@@ -9430,13 +9425,13 @@ var createBaseExecuteXcm = function createBaseExecuteXcm(options) {
|
|
|
9430
9425
|
chain = options.chain,
|
|
9431
9426
|
destChain = options.destChain,
|
|
9432
9427
|
assetInfo = options.assetInfo,
|
|
9428
|
+
feeAssetInfo = options.feeAssetInfo,
|
|
9433
9429
|
_options$fees = options.fees,
|
|
9434
9430
|
originFee = _options$fees.originFee,
|
|
9435
9431
|
reserveFee = _options$fees.reserveFee,
|
|
9436
9432
|
version = options.version,
|
|
9437
9433
|
paraIdTo = options.paraIdTo,
|
|
9438
9434
|
transactOptions = options.transactOptions,
|
|
9439
|
-
useFeeAssetOnHops = options.useFeeAssetOnHops,
|
|
9440
9435
|
_options$suffixXcm = options.suffixXcm,
|
|
9441
9436
|
suffixXcm = _options$suffixXcm === void 0 ? [] : _options$suffixXcm;
|
|
9442
9437
|
var _prepareExecuteContex = prepareExecuteContext(options),
|
|
@@ -9445,11 +9440,13 @@ var createBaseExecuteXcm = function createBaseExecuteXcm(options) {
|
|
|
9445
9440
|
assetLocalizedToReserve = _prepareExecuteContex.assetLocalizedToReserve,
|
|
9446
9441
|
assetLocalizedToDest = _prepareExecuteContex.assetLocalizedToDest,
|
|
9447
9442
|
feeAsset = _prepareExecuteContex.feeAsset,
|
|
9443
|
+
feeAssetLocalized = _prepareExecuteContex.feeAssetLocalized,
|
|
9448
9444
|
feeAssetLocalizedToReserve = _prepareExecuteContex.feeAssetLocalizedToReserve,
|
|
9449
9445
|
feeAssetLocalizedToDest = _prepareExecuteContex.feeAssetLocalizedToDest,
|
|
9446
|
+
feeReserveChain = _prepareExecuteContex.feeReserveChain,
|
|
9450
9447
|
reserveChain = _prepareExecuteContex.reserveChain;
|
|
9451
|
-
var
|
|
9452
|
-
var
|
|
9448
|
+
var isReserveDest = reserveChain === destChain;
|
|
9449
|
+
var hopFeeAssetToReserve = isReserveDest ? feeAssetLocalizedToDest : feeAssetLocalizedToReserve;
|
|
9453
9450
|
// When fees are paid in a separate asset, originFee is denominated in that asset's
|
|
9454
9451
|
// currency and must not be subtracted from the transfer amount.
|
|
9455
9452
|
var originFeeDeduction = feeAsset ? 0n : originFee;
|
|
@@ -9457,29 +9454,41 @@ var createBaseExecuteXcm = function createBaseExecuteXcm(options) {
|
|
|
9457
9454
|
if (chain !== 'AssetHubPolkadot' && reserveChain === undefined) {
|
|
9458
9455
|
throw new UnsupportedOperationError('Sending local reserve assets with custom fee asset is not yet supported for this chain.');
|
|
9459
9456
|
}
|
|
9457
|
+
if (feeReserveChain !== undefined && feeReserveChain !== reserveChain) {
|
|
9458
|
+
throw new ScenarioNotSupportedError("Fee asset cannot pay fees on hops and destination because its reserve chain (".concat(feeReserveChain, ") differs from the reserve chain of the transferred asset (").concat(reserveChain, ")."));
|
|
9459
|
+
}
|
|
9460
9460
|
var transferType = getInstructionType(api, version, chain, destChain, assetInfo, reserveChain, transactOptions);
|
|
9461
|
-
var
|
|
9462
|
-
|
|
9463
|
-
|
|
9461
|
+
var createRoutingFilter = function createRoutingFilter(asset) {
|
|
9462
|
+
return feeAsset ? createAllCountedFilter(2) : createAssetsFilter(asset, version);
|
|
9463
|
+
};
|
|
9464
|
+
var routingAssetsFilter = createRoutingFilter(assetLocalized);
|
|
9465
|
+
var assertFeeAssetTeleportable = function assertFeeAssetTeleportable(from, to) {
|
|
9466
|
+
if (feeAsset && feeAssetInfo && !isTeleportableAsset(api, from, to, feeAssetInfo)) {
|
|
9467
|
+
throw new ScenarioNotSupportedError("Fee asset ".concat(feeAssetInfo.symbol, " cannot be teleported from ").concat(from, " to ").concat(to, ", so it cannot pay fees there."));
|
|
9464
9468
|
}
|
|
9465
|
-
}
|
|
9466
|
-
var
|
|
9467
|
-
var
|
|
9468
|
-
|
|
9469
|
-
|
|
9470
|
-
|
|
9471
|
-
xcm: [].concat(_toConsumableArray(createBuyExecution(hopFeeAssetToDest !== null && hopFeeAssetToDest !== void 0 ? hopFeeAssetToDest : updateAsset(assetLocalizedToDest, reserveFee === 1000n ? amount / 2n : amount - originFeeDeduction - reserveFee))), _toConsumableArray(suffixXcm))
|
|
9469
|
+
};
|
|
9470
|
+
var reserveToDestInstruction = isTeleportLeg(api, reserveChain !== null && reserveChain !== void 0 ? reserveChain : chain, destChain, assetInfo) ? 'InitiateTeleport' : 'DepositReserveAsset';
|
|
9471
|
+
var createReserveToDestXcm = function createReserveToDestXcm() {
|
|
9472
|
+
if (isReserveDest) return suffixXcm;
|
|
9473
|
+
if (reserveToDestInstruction === 'InitiateTeleport') {
|
|
9474
|
+
assertFeeAssetTeleportable(reserveChain !== null && reserveChain !== void 0 ? reserveChain : chain, destChain);
|
|
9472
9475
|
}
|
|
9473
|
-
|
|
9476
|
+
return [_defineProperty({}, reserveToDestInstruction, {
|
|
9477
|
+
assets: createRoutingFilter(assetLocalizedToReserve),
|
|
9478
|
+
dest: createDestination(api, version, reserveChain !== null && reserveChain !== void 0 ? reserveChain : chain, destChain, paraIdTo),
|
|
9479
|
+
xcm: [].concat(_toConsumableArray(createBuyExecution(feeAssetLocalizedToDest !== null && feeAssetLocalizedToDest !== void 0 ? feeAssetLocalizedToDest : updateAsset(assetLocalizedToDest, reserveFee === 1000n ? amount / 2n : amount - originFeeDeduction - reserveFee))), _toConsumableArray(suffixXcm))
|
|
9480
|
+
})];
|
|
9481
|
+
};
|
|
9474
9482
|
var mainInstructions;
|
|
9475
9483
|
switch (transferType) {
|
|
9476
9484
|
case 'InitiateTransfer':
|
|
9477
9485
|
{
|
|
9478
9486
|
var transferFilter = getInitiateTransferType(api, chain, destChain, assetInfo, reserveChain);
|
|
9487
|
+
if (transferFilter === 'Teleport') assertFeeAssetTeleportable(chain, destChain);
|
|
9479
9488
|
mainInstructions = [{
|
|
9480
9489
|
InitiateTransfer: {
|
|
9481
9490
|
destination: destLocation,
|
|
9482
|
-
remote_fees: _defineProperty({}, transferFilter,
|
|
9491
|
+
remote_fees: _defineProperty({}, transferFilter, createAssetsFilter(feeAssetLocalized !== null && feeAssetLocalized !== void 0 ? feeAssetLocalized : assetLocalized, version)),
|
|
9483
9492
|
preserve_origin: true,
|
|
9484
9493
|
assets: [_defineProperty({}, transferFilter, routingAssetsFilter)],
|
|
9485
9494
|
remote_xcm: [{
|
|
@@ -9491,21 +9500,23 @@ var createBaseExecuteXcm = function createBaseExecuteXcm(options) {
|
|
|
9491
9500
|
}
|
|
9492
9501
|
case 'InitiateTeleport':
|
|
9493
9502
|
// Use teleport for trusted chains
|
|
9503
|
+
assertFeeAssetTeleportable(chain, destChain);
|
|
9494
9504
|
mainInstructions = [{
|
|
9495
9505
|
InitiateTeleport: {
|
|
9496
9506
|
assets: routingAssetsFilter,
|
|
9497
9507
|
dest: destLocation,
|
|
9498
|
-
xcm: [].concat(_toConsumableArray(createBuyExecution(
|
|
9508
|
+
xcm: [].concat(_toConsumableArray(createBuyExecution(feeAssetLocalizedToDest !== null && feeAssetLocalizedToDest !== void 0 ? feeAssetLocalizedToDest : updateAsset(assetLocalizedToDest, amount - originFeeDeduction))), _toConsumableArray(suffixXcm))
|
|
9499
9509
|
}
|
|
9500
9510
|
}];
|
|
9501
9511
|
break;
|
|
9502
9512
|
case 'InitiateTeleportToReserve':
|
|
9503
9513
|
// Teleport to reserve chain first
|
|
9514
|
+
assertFeeAssetTeleportable(chain, reserveChain);
|
|
9504
9515
|
mainInstructions = [{
|
|
9505
9516
|
InitiateTeleport: {
|
|
9506
9517
|
assets: routingAssetsFilter,
|
|
9507
9518
|
dest: getChainLocation(chain, reserveChain, api._customCtx),
|
|
9508
|
-
xcm: [].concat(_toConsumableArray(createBuyExecution(hopFeeAssetToReserve !== null && hopFeeAssetToReserve !== void 0 ? hopFeeAssetToReserve : updateAsset(assetLocalizedToReserve, amount - originFeeDeduction))), _toConsumableArray(
|
|
9519
|
+
xcm: [].concat(_toConsumableArray(createBuyExecution(hopFeeAssetToReserve !== null && hopFeeAssetToReserve !== void 0 ? hopFeeAssetToReserve : updateAsset(assetLocalizedToReserve, amount - originFeeDeduction))), _toConsumableArray(createReserveToDestXcm()))
|
|
9509
9520
|
}
|
|
9510
9521
|
}];
|
|
9511
9522
|
break;
|
|
@@ -9517,12 +9528,12 @@ var createBaseExecuteXcm = function createBaseExecuteXcm(options) {
|
|
|
9517
9528
|
reserve: getChainLocation(chain, reserveChain, api._customCtx),
|
|
9518
9529
|
xcm: [].concat(_toConsumableArray(createBuyExecution(// Decrease amount by 2 units because for some reason polkadot withdraws 2 units less
|
|
9519
9530
|
// than requested, so we need to account for that
|
|
9520
|
-
hopFeeAssetToReserve !== null && hopFeeAssetToReserve !== void 0 ? hopFeeAssetToReserve : updateAsset(assetLocalizedToReserve, amount - 2n))), _toConsumableArray(
|
|
9531
|
+
hopFeeAssetToReserve !== null && hopFeeAssetToReserve !== void 0 ? hopFeeAssetToReserve : updateAsset(assetLocalizedToReserve, amount - 2n))), _toConsumableArray(createReserveToDestXcm()))
|
|
9521
9532
|
}
|
|
9522
9533
|
}];
|
|
9523
9534
|
break;
|
|
9524
9535
|
case 'DepositAsset':
|
|
9525
|
-
mainInstructions =
|
|
9536
|
+
mainInstructions = createReserveToDestXcm();
|
|
9526
9537
|
}
|
|
9527
9538
|
return mainInstructions;
|
|
9528
9539
|
};
|
|
@@ -9647,7 +9658,7 @@ var prepareCommonExecuteXcm = function prepareCommonExecuteXcm(options, assetToD
|
|
|
9647
9658
|
WithdrawAsset: withdrawAssets
|
|
9648
9659
|
});
|
|
9649
9660
|
if (feeAssetLocalized && !useJitWithdraw) {
|
|
9650
|
-
prefix.push.apply(prefix, _toConsumableArray(createBuyExecution(feeAssetLocalized)));
|
|
9661
|
+
prefix.push.apply(prefix, _toConsumableArray(createBuyExecution(feeAssetLocalized, MIN_WEIGHT)));
|
|
9651
9662
|
} else {
|
|
9652
9663
|
prefix.push({
|
|
9653
9664
|
SetFeesMode: {
|
|
@@ -9707,32 +9718,36 @@ var createDirectExecuteXcm = /*#__PURE__*/function () {
|
|
|
9707
9718
|
};
|
|
9708
9719
|
}();
|
|
9709
9720
|
|
|
9710
|
-
var
|
|
9711
|
-
|
|
9712
|
-
return MIN_FEE;
|
|
9713
|
-
}
|
|
9714
|
-
return hops[0].result.fee;
|
|
9721
|
+
var getFeeFromResult = function getFeeFromResult(result) {
|
|
9722
|
+
return result !== null && result !== void 0 && result.success ? result.fee : MIN_FEE;
|
|
9715
9723
|
};
|
|
9716
9724
|
var FEE_PADDING_PERCENTAGE$1 = 40;
|
|
9717
9725
|
var handleExecuteTransfer = /*#__PURE__*/function () {
|
|
9718
9726
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options) {
|
|
9719
|
-
var
|
|
9727
|
+
var _dryRunResult$hops$at;
|
|
9728
|
+
var api, chain, sender, paraIdTo, destChain, assetInfo, currency, feeCurrency, recipient, feeAssetInfo, version, transactOptions, checkAmount, internalOptions, FEE_ASSET_AMOUNT, feeAssetAmount, resolvedFeeAssetInfo, hopFeeAmount, call, dryRunResult, originFee, reserveFee, destFee, xcm, weight, _t, _t2;
|
|
9720
9729
|
return _regenerator().w(function (_context) {
|
|
9721
9730
|
while (1) switch (_context.n) {
|
|
9722
9731
|
case 0:
|
|
9723
9732
|
api = options.api, chain = options.chain, sender = options.sender, paraIdTo = options.paraIdTo, destChain = options.destChain, assetInfo = options.assetInfo, currency = options.currency, feeCurrency = options.feeCurrency, recipient = options.recipient, feeAssetInfo = options.feeAssetInfo, version = options.version, transactOptions = options.transactOptions;
|
|
9724
9733
|
assertSender(sender);
|
|
9725
9734
|
assertAddressIsString(recipient);
|
|
9735
|
+
if (!(feeAssetInfo && !supportsFeeAssetPayment(chain))) {
|
|
9736
|
+
_context.n = 1;
|
|
9737
|
+
break;
|
|
9738
|
+
}
|
|
9739
|
+
throw new ScenarioNotSupportedError("Fee asset is not supported on ".concat(chain));
|
|
9740
|
+
case 1:
|
|
9726
9741
|
checkAmount = function checkAmount(fee) {
|
|
9727
9742
|
if (assetInfo.amount <= fee) throw new AmountTooLowError();
|
|
9728
9743
|
};
|
|
9729
9744
|
checkAmount(MIN_FEE);
|
|
9730
9745
|
if (!(destChain === undefined)) {
|
|
9731
|
-
_context.n =
|
|
9746
|
+
_context.n = 2;
|
|
9732
9747
|
break;
|
|
9733
9748
|
}
|
|
9734
9749
|
throw new RoutingResolutionError('Could not determine destination chain for execute transfer');
|
|
9735
|
-
case
|
|
9750
|
+
case 2:
|
|
9736
9751
|
internalOptions = {
|
|
9737
9752
|
api: api,
|
|
9738
9753
|
chain: chain,
|
|
@@ -9749,18 +9764,21 @@ var handleExecuteTransfer = /*#__PURE__*/function () {
|
|
|
9749
9764
|
}; // We mint 1000 units of feeAsset and use 100
|
|
9750
9765
|
FEE_ASSET_AMOUNT = 100;
|
|
9751
9766
|
feeAssetAmount = feeAssetInfo ? parseUnits(FEE_ASSET_AMOUNT.toString(), feeAssetInfo.decimals) : MIN_FEE;
|
|
9767
|
+
resolvedFeeAssetInfo = getFeeAssetInfo(assetInfo, feeAssetInfo);
|
|
9768
|
+
hopFeeAmount = resolvedFeeAssetInfo ? feeAssetAmount : MIN_FEE;
|
|
9752
9769
|
_t = createExecuteCall;
|
|
9753
9770
|
_t2 = chain;
|
|
9754
|
-
_context.n =
|
|
9771
|
+
_context.n = 3;
|
|
9755
9772
|
return createDirectExecuteXcm(_objectSpread2(_objectSpread2({}, internalOptions), {}, {
|
|
9756
9773
|
fees: {
|
|
9757
9774
|
originFee: feeAssetAmount,
|
|
9758
|
-
reserveFee:
|
|
9775
|
+
reserveFee: hopFeeAmount,
|
|
9776
|
+
destFee: hopFeeAmount
|
|
9759
9777
|
}
|
|
9760
9778
|
}));
|
|
9761
|
-
case
|
|
9779
|
+
case 3:
|
|
9762
9780
|
call = _t(_t2, _context.v, MAX_WEIGHT);
|
|
9763
|
-
_context.n =
|
|
9781
|
+
_context.n = 4;
|
|
9764
9782
|
return dryRunInternal({
|
|
9765
9783
|
api: api,
|
|
9766
9784
|
tx: api.deserializeExtrinsics(call),
|
|
@@ -9772,34 +9790,34 @@ var handleExecuteTransfer = /*#__PURE__*/function () {
|
|
|
9772
9790
|
feeAsset: feeCurrency,
|
|
9773
9791
|
useRootOrigin: true
|
|
9774
9792
|
});
|
|
9775
|
-
case
|
|
9793
|
+
case 4:
|
|
9776
9794
|
dryRunResult = _context.v;
|
|
9777
9795
|
if (dryRunResult.origin.success) {
|
|
9778
|
-
_context.n =
|
|
9796
|
+
_context.n = 5;
|
|
9779
9797
|
break;
|
|
9780
9798
|
}
|
|
9781
9799
|
throw new DryRunFailedError(_objectSpread2(_objectSpread2({}, dryRunResult.origin.dryRunError), {}, {
|
|
9782
9800
|
chainKind: 'origin',
|
|
9783
9801
|
chain: chain
|
|
9784
9802
|
}));
|
|
9785
|
-
case
|
|
9786
|
-
|
|
9787
|
-
|
|
9788
|
-
|
|
9789
|
-
|
|
9790
|
-
|
|
9791
|
-
_context.n = 5;
|
|
9803
|
+
case 5:
|
|
9804
|
+
originFee = padValueBy(dryRunResult.origin.fee, FEE_PADDING_PERCENTAGE$1);
|
|
9805
|
+
reserveFee = padValueBy(getFeeFromResult((_dryRunResult$hops$at = dryRunResult.hops.at(0)) === null || _dryRunResult$hops$at === void 0 ? void 0 : _dryRunResult$hops$at.result), FEE_PADDING_PERCENTAGE$1);
|
|
9806
|
+
destFee = padValueBy(getFeeFromResult(dryRunResult.destination), FEE_PADDING_PERCENTAGE$1);
|
|
9807
|
+
if (!resolvedFeeAssetInfo) checkAmount(reserveFee);
|
|
9808
|
+
_context.n = 6;
|
|
9792
9809
|
return createDirectExecuteXcm(_objectSpread2(_objectSpread2({}, internalOptions), {}, {
|
|
9793
9810
|
fees: {
|
|
9794
9811
|
originFee: originFee,
|
|
9795
|
-
reserveFee: reserveFee
|
|
9812
|
+
reserveFee: reserveFee,
|
|
9813
|
+
destFee: destFee
|
|
9796
9814
|
}
|
|
9797
9815
|
}));
|
|
9798
|
-
case
|
|
9816
|
+
case 6:
|
|
9799
9817
|
xcm = _context.v;
|
|
9800
|
-
_context.n =
|
|
9818
|
+
_context.n = 7;
|
|
9801
9819
|
return api.getXcmWeight(xcm);
|
|
9802
|
-
case
|
|
9820
|
+
case 7:
|
|
9803
9821
|
weight = _context.v;
|
|
9804
9822
|
return _context.a(2, createExecuteCall(chain, xcm, weight));
|
|
9805
9823
|
}
|
|
@@ -9979,12 +9997,13 @@ var isMultiHopSwap = function isMultiHopSwap(exchangeChain, assetFrom, assetTo)
|
|
|
9979
9997
|
};
|
|
9980
9998
|
|
|
9981
9999
|
var createExchangeInstructions = /*#__PURE__*/function () {
|
|
9982
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options, assetFrom, assetTo,
|
|
9983
|
-
var api, chain, exchangeChain, assetInfoFrom, assetInfoTo, version, calculateMinAmountOut, _options$fees, originReserveFee, exchangeFee, nativeSymbol, needsMultiHop, nativeAsset, nativeAmountOut, assetNative;
|
|
10000
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options, assetFrom, assetTo, separateFeeAssetInfo) {
|
|
10001
|
+
var api, chain, exchangeChain, assetInfoFrom, assetInfoTo, version, calculateMinAmountOut, _options$fees, originReserveFee, exchangeFee, hasSeparateFeeAsset, nativeSymbol, needsMultiHop, nativeAsset, nativeAmountOut, assetNative;
|
|
9984
10002
|
return _regenerator().w(function (_context) {
|
|
9985
10003
|
while (1) switch (_context.n) {
|
|
9986
10004
|
case 0:
|
|
9987
10005
|
api = options.api, chain = options.chain, exchangeChain = options.exchangeChain, assetInfoFrom = options.assetInfoFrom, assetInfoTo = options.assetInfoTo, version = options.version, calculateMinAmountOut = options.calculateMinAmountOut, _options$fees = options.fees, originReserveFee = _options$fees.originReserveFee, exchangeFee = _options$fees.exchangeFee;
|
|
10006
|
+
hasSeparateFeeAsset = separateFeeAssetInfo !== undefined;
|
|
9988
10007
|
nativeSymbol = getNativeAssetSymbol(exchangeChain);
|
|
9989
10008
|
needsMultiHop = isMultiHopSwap(exchangeChain, assetInfoFrom, assetInfoTo);
|
|
9990
10009
|
nativeAsset = api.findAssetInfoOrThrow(exchangeChain, {
|
|
@@ -10003,7 +10022,7 @@ var createExchangeInstructions = /*#__PURE__*/function () {
|
|
|
10003
10022
|
}]);
|
|
10004
10023
|
case 1:
|
|
10005
10024
|
_context.n = 2;
|
|
10006
|
-
return calculateMinAmountOut(BigInt(assetInfoFrom.amount) - (chain ? originReserveFee + exchangeFee : 0n), nativeAsset);
|
|
10025
|
+
return calculateMinAmountOut(BigInt(assetInfoFrom.amount) - (chain && !hasSeparateFeeAsset ? originReserveFee + exchangeFee : 0n), nativeAsset);
|
|
10007
10026
|
case 2:
|
|
10008
10027
|
nativeAmountOut = _context.v;
|
|
10009
10028
|
assetNative = createAsset(version, exchangeFee === 0n ? (nativeAmountOut + 1n) / 2n : nativeAmountOut, localizeLocation(exchangeChain, nativeAsset.location));
|
|
@@ -10011,11 +10030,13 @@ var createExchangeInstructions = /*#__PURE__*/function () {
|
|
|
10011
10030
|
ExchangeAsset: {
|
|
10012
10031
|
give: createAssetsFilter(assetFrom, version),
|
|
10013
10032
|
want: [assetNative],
|
|
10014
|
-
maximal:
|
|
10033
|
+
maximal: hasSeparateFeeAsset
|
|
10015
10034
|
}
|
|
10016
10035
|
}, {
|
|
10017
10036
|
ExchangeAsset: {
|
|
10018
|
-
give:
|
|
10037
|
+
give: separateFeeAssetInfo && isAssetEqual(separateFeeAssetInfo, nativeAsset) ? {
|
|
10038
|
+
Definite: [assetNative]
|
|
10039
|
+
} : createAssetsFilter(assetNative, version),
|
|
10019
10040
|
want: [assetTo],
|
|
10020
10041
|
maximal: true
|
|
10021
10042
|
}
|
|
@@ -10030,19 +10051,18 @@ var createExchangeInstructions = /*#__PURE__*/function () {
|
|
|
10030
10051
|
var createSwapExecuteXcm = /*#__PURE__*/function () {
|
|
10031
10052
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(options) {
|
|
10032
10053
|
var _ref3, _ref4;
|
|
10033
|
-
var api, chain, exchangeChain, destChain, assetInfoFrom, assetInfoTo, feeAssetInfo, _options$fees2, originFee, originReserveFee, destReserveFee, sender, recipient, version, paraIdTo, isEthereumDest, resolvedDestChain, assetFrom, amountOut, assetTo, assetToLocalizedToDest, ethFeeAssetInfo, ethBridgeFee,
|
|
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;
|
|
10034
10055
|
return _regenerator().w(function (_context2) {
|
|
10035
10056
|
while (1) switch (_context2.n) {
|
|
10036
10057
|
case 0:
|
|
10037
|
-
api = options.api, chain = options.chain, exchangeChain = options.exchangeChain, destChain = options.destChain, assetInfoFrom = options.assetInfoFrom, assetInfoTo = options.assetInfoTo, feeAssetInfo = options.feeAssetInfo, _options$fees2 = options.fees, originFee = _options$fees2.originFee, originReserveFee = _options$fees2.originReserveFee, destReserveFee = _options$fees2.destReserveFee, sender = options.sender, recipient = options.recipient, version = options.version, paraIdTo = options.paraIdTo;
|
|
10058
|
+
api = options.api, chain = options.chain, exchangeChain = options.exchangeChain, destChain = options.destChain, assetInfoFrom = options.assetInfoFrom, assetInfoTo = options.assetInfoTo, feeAssetInfo = options.feeAssetInfo, _options$fees2 = options.fees, originFee = _options$fees2.originFee, originReserveFee = _options$fees2.originReserveFee, exchangeFee = _options$fees2.exchangeFee, destReserveFee = _options$fees2.destReserveFee, destFee = _options$fees2.destFee, sender = options.sender, recipient = options.recipient, version = options.version, paraIdTo = options.paraIdTo;
|
|
10038
10059
|
isEthereumDest = destChain !== undefined && isExternalChain(destChain); // For Ethereum destination, the actual hop target is AssetHub (bridge hub)
|
|
10039
10060
|
resolvedDestChain = isEthereumDest ? "AssetHub".concat(getRelayChainOf(chain !== null && chain !== void 0 ? chain : exchangeChain)) : undefined;
|
|
10040
10061
|
assetFrom = createAsset(version, assetInfoFrom.amount, localizeLocation(exchangeChain, assetInfoFrom.location));
|
|
10041
10062
|
amountOut = assetInfoTo.amount;
|
|
10042
10063
|
assetTo = createAsset(version, amountOut, localizeLocation(exchangeChain, assetInfoTo.location)); // For Ethereum, localize to AssetHub since that's where instructions execute
|
|
10043
10064
|
assetToLocalizedToDest = createAsset(version, amountOut, localizeLocation((_ref3 = resolvedDestChain !== null && resolvedDestChain !== void 0 ? resolvedDestChain : destChain) !== null && _ref3 !== void 0 ? _ref3 : exchangeChain, assetInfoTo.location)); // For Ethereum destination, use DOT as feeAsset for bridge fees
|
|
10044
|
-
ethBridgeFee = 0n;
|
|
10045
|
-
isMainAssetDot = false;
|
|
10065
|
+
ethBridgeFee = 0n;
|
|
10046
10066
|
if (!isEthereumDest) {
|
|
10047
10067
|
_context2.n = 3;
|
|
10048
10068
|
break;
|
|
@@ -10060,14 +10080,21 @@ var createSwapExecuteXcm = /*#__PURE__*/function () {
|
|
|
10060
10080
|
bridgeFee = _yield$getParaEthTran2[0];
|
|
10061
10081
|
executionFee = _yield$getParaEthTran2[1];
|
|
10062
10082
|
ethBridgeFee = bridgeFee + executionFee;
|
|
10063
|
-
|
|
10064
|
-
if (!isMainAssetDot) {
|
|
10083
|
+
if (!isAssetEqual(assetInfoFrom, nativeFeeAssetInfo)) {
|
|
10065
10084
|
ethFeeAssetInfo = nativeFeeAssetInfo;
|
|
10066
10085
|
}
|
|
10067
10086
|
case 3:
|
|
10068
10087
|
// Ethereum fee asset takes precedence over user-provided feeAssetInfo
|
|
10069
|
-
resolvedFeeAssetInfo =
|
|
10070
|
-
hasSeparateFeeAsset =
|
|
10088
|
+
resolvedFeeAssetInfo = isEthereumDest ? ethFeeAssetInfo : getFeeAssetInfo(assetInfoFrom, feeAssetInfo);
|
|
10089
|
+
hasSeparateFeeAsset = resolvedFeeAssetInfo !== undefined;
|
|
10090
|
+
createLegFees = function createLegFees(reserveFee, destFee) {
|
|
10091
|
+
return {
|
|
10092
|
+
originFee: hasSeparateFeeAsset ? ethBridgeFee : 0n,
|
|
10093
|
+
reserveFee: ethFeeAssetInfo ? ethBridgeFee : reserveFee,
|
|
10094
|
+
destFee: isEthereumDest ? ethBridgeFee : destFee
|
|
10095
|
+
};
|
|
10096
|
+
};
|
|
10097
|
+
feeAssetBudget = ethFeeAssetInfo ? ethBridgeFee : originFee + originReserveFee + exchangeFee + destReserveFee + destFee;
|
|
10071
10098
|
_prepareCommonExecute = prepareCommonExecuteXcm({
|
|
10072
10099
|
api: api,
|
|
10073
10100
|
chain: chain !== null && chain !== void 0 ? chain : exchangeChain,
|
|
@@ -10077,13 +10104,14 @@ var createSwapExecuteXcm = /*#__PURE__*/function () {
|
|
|
10077
10104
|
useJitWithdraw: isEthereumDest,
|
|
10078
10105
|
recipient: recipient,
|
|
10079
10106
|
fees: {
|
|
10080
|
-
originFee: hasSeparateFeeAsset ?
|
|
10081
|
-
reserveFee:
|
|
10107
|
+
originFee: hasSeparateFeeAsset ? feeAssetBudget : originFee,
|
|
10108
|
+
reserveFee: 0n,
|
|
10109
|
+
destFee: 0n
|
|
10082
10110
|
},
|
|
10083
10111
|
version: version
|
|
10084
10112
|
}, assetToLocalizedToDest), prefix = _prepareCommonExecute.prefix, depositInstruction = _prepareCommonExecute.depositInstruction;
|
|
10085
10113
|
_context2.n = 4;
|
|
10086
|
-
return createExchangeInstructions(options, assetFrom, assetTo,
|
|
10114
|
+
return createExchangeInstructions(options, assetFrom, assetTo, resolvedFeeAssetInfo);
|
|
10087
10115
|
case 4:
|
|
10088
10116
|
exchangeInstructions = _context2.v;
|
|
10089
10117
|
if (!isEthereumDest) {
|
|
@@ -10111,13 +10139,9 @@ var createSwapExecuteXcm = /*#__PURE__*/function () {
|
|
|
10111
10139
|
destChain: resolvedDestChain,
|
|
10112
10140
|
assetInfo: assetInfoTo,
|
|
10113
10141
|
feeAssetInfo: ethFeeAssetInfo,
|
|
10114
|
-
useFeeAssetOnHops: hasSeparateFeeAsset,
|
|
10115
10142
|
paraIdTo: getParaId(resolvedDestChain),
|
|
10116
10143
|
version: version,
|
|
10117
|
-
fees:
|
|
10118
|
-
originFee: hasSeparateFeeAsset ? ethBridgeFee : 0n,
|
|
10119
|
-
reserveFee: destReserveFee
|
|
10120
|
-
},
|
|
10144
|
+
fees: createLegFees(destReserveFee, destFee),
|
|
10121
10145
|
suffixXcm: snowbridgeInstructions
|
|
10122
10146
|
});
|
|
10123
10147
|
_context2.n = 7;
|
|
@@ -10129,13 +10153,10 @@ var createSwapExecuteXcm = /*#__PURE__*/function () {
|
|
|
10129
10153
|
chain: exchangeChain,
|
|
10130
10154
|
destChain: destChain,
|
|
10131
10155
|
assetInfo: assetInfoTo,
|
|
10156
|
+
feeAssetInfo: resolvedFeeAssetInfo,
|
|
10132
10157
|
paraIdTo: paraIdTo,
|
|
10133
10158
|
version: version,
|
|
10134
|
-
|
|
10135
|
-
fees: {
|
|
10136
|
-
originFee: 0n,
|
|
10137
|
-
reserveFee: destReserveFee
|
|
10138
|
-
},
|
|
10159
|
+
fees: createLegFees(destReserveFee, destFee),
|
|
10139
10160
|
suffixXcm: [depositInstruction]
|
|
10140
10161
|
});
|
|
10141
10162
|
} else {
|
|
@@ -10147,14 +10168,10 @@ var createSwapExecuteXcm = /*#__PURE__*/function () {
|
|
|
10147
10168
|
chain: chain,
|
|
10148
10169
|
destChain: exchangeChain,
|
|
10149
10170
|
assetInfo: assetInfoFrom,
|
|
10150
|
-
feeAssetInfo:
|
|
10151
|
-
useFeeAssetOnHops: hasSeparateFeeAsset,
|
|
10171
|
+
feeAssetInfo: resolvedFeeAssetInfo,
|
|
10152
10172
|
paraIdTo: getParaId(exchangeChain),
|
|
10153
10173
|
version: version,
|
|
10154
|
-
fees:
|
|
10155
|
-
originFee: hasSeparateFeeAsset ? ethBridgeFee : 0n,
|
|
10156
|
-
reserveFee: originReserveFee
|
|
10157
|
-
},
|
|
10174
|
+
fees: createLegFees(originReserveFee, exchangeFee),
|
|
10158
10175
|
suffixXcm: [].concat(_toConsumableArray(exchangeInstructions), _toConsumableArray(exchangeToDestXcm))
|
|
10159
10176
|
}) : [].concat(_toConsumableArray(exchangeInstructions), _toConsumableArray(exchangeToDestXcm));
|
|
10160
10177
|
fullXcm = [].concat(_toConsumableArray(prefix), _toConsumableArray(finalXcm));
|
|
@@ -10220,12 +10237,14 @@ var findExchangeHopIndex = function findExchangeHopIndex(chain, dryRunResult, ex
|
|
|
10220
10237
|
return index;
|
|
10221
10238
|
};
|
|
10222
10239
|
var extractFeesFromDryRun = function extractFeesFromDryRun(chain, exchangeChain, dryRunResult, exchangeHopIndex, destChain) {
|
|
10240
|
+
var _dryRunResult$destina;
|
|
10223
10241
|
var requireHopsSuccess = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
|
|
10224
10242
|
var fees = {
|
|
10225
10243
|
originFee: 0n,
|
|
10226
10244
|
originReserveFee: 0n,
|
|
10227
10245
|
exchangeFee: 0n,
|
|
10228
|
-
destReserveFee: 0n
|
|
10246
|
+
destReserveFee: 0n,
|
|
10247
|
+
destFee: 0n
|
|
10229
10248
|
};
|
|
10230
10249
|
var hops = dryRunResult.hops;
|
|
10231
10250
|
// Handle exchange fee
|
|
@@ -10305,6 +10324,9 @@ var extractFeesFromDryRun = function extractFeesFromDryRun(chain, exchangeChain,
|
|
|
10305
10324
|
fees.destReserveFee = padValueBy(hopAfterExchange.result.fee, FEE_PADDING_PERCENTAGE);
|
|
10306
10325
|
}
|
|
10307
10326
|
}
|
|
10327
|
+
if (destChain && (_dryRunResult$destina = dryRunResult.destination) !== null && _dryRunResult$destina !== void 0 && _dryRunResult$destina.success) {
|
|
10328
|
+
fees.destFee = padValueBy(dryRunResult.destination.fee, FEE_PADDING_PERCENTAGE);
|
|
10329
|
+
}
|
|
10308
10330
|
return fees;
|
|
10309
10331
|
};
|
|
10310
10332
|
var createXcmAndCall = /*#__PURE__*/function () {
|
|
@@ -10348,8 +10370,8 @@ var createXcmAndCall = /*#__PURE__*/function () {
|
|
|
10348
10370
|
}();
|
|
10349
10371
|
var handleSwapExecuteTransfer = /*#__PURE__*/function () {
|
|
10350
10372
|
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(options) {
|
|
10351
|
-
var _firstDryRunResult$dr;
|
|
10352
|
-
var api, chain, exchangeChain, destChain, assetFrom, assetTo, currencyTo, feeAssetInfo, sender, recipient, calculateMinAmountOut, version, isEthereumDest, hasSeparateFeeAsset, internalOptions, dryRunParams, FEE_ASSET_AMOUNT,
|
|
10373
|
+
var _ref4, _firstDryRunResult$dr;
|
|
10374
|
+
var api, chain, exchangeChain, destChain, assetFrom, assetTo, currencyTo, feeAssetInfo, sender, recipient, calculateMinAmountOut, version, isEthereumDest, separateFeeAssetInfo, hasSeparateFeeAsset, internalOptions, dryRunParams, FEE_ASSET_AMOUNT, dummyFeeAssetAmount, dummyDestFee, fees, totalFeesPre, _yield$createXcmAndCa, initialCall, firstDryRunResult, exchangeHopIndex, extractedFees, totalFees, updatedAssetTo, amountAvailableForSwap, recalculatedMinAmountOut, _yield$createXcmAndCa2, finalCall;
|
|
10353
10375
|
return _regenerator().w(function (_context3) {
|
|
10354
10376
|
while (1) switch (_context3.n) {
|
|
10355
10377
|
case 0:
|
|
@@ -10360,9 +10382,10 @@ var handleSwapExecuteTransfer = /*#__PURE__*/function () {
|
|
|
10360
10382
|
case 1:
|
|
10361
10383
|
validateAmount(assetFrom.amount, MIN_FEE);
|
|
10362
10384
|
version = pickRouterCompatibleXcmVersion(api, chain, exchangeChain, destChain);
|
|
10363
|
-
isEthereumDest = destChain !== undefined && isExternalChain(destChain);
|
|
10385
|
+
isEthereumDest = destChain !== undefined && isExternalChain(destChain);
|
|
10386
|
+
separateFeeAssetInfo = isEthereumDest ? undefined : getFeeAssetInfo(assetFrom, feeAssetInfo); // When main asset is DOT and dest is Ethereum, fees come from the same asset
|
|
10364
10387
|
// (no separate fee asset needed). Only skip fee validation when currencies differ.
|
|
10365
|
-
hasSeparateFeeAsset = isEthereumDest && !isAssetEqual(assetFrom, api.findNativeAssetInfoOrThrow(getRelayChainOf(chain !== null && chain !== void 0 ? chain : exchangeChain)));
|
|
10388
|
+
hasSeparateFeeAsset = separateFeeAssetInfo !== undefined || isEthereumDest && !isAssetEqual(assetFrom, api.findNativeAssetInfoOrThrow(getRelayChainOf(chain !== null && chain !== void 0 ? chain : exchangeChain)));
|
|
10366
10389
|
internalOptions = _objectSpread2(_objectSpread2({}, options), {}, {
|
|
10367
10390
|
version: version,
|
|
10368
10391
|
paraIdTo: getParaId(destChain !== null && destChain !== void 0 ? destChain : exchangeChain)
|
|
@@ -10389,12 +10412,14 @@ var handleSwapExecuteTransfer = /*#__PURE__*/function () {
|
|
|
10389
10412
|
useRootOrigin: true
|
|
10390
10413
|
};
|
|
10391
10414
|
FEE_ASSET_AMOUNT = 100;
|
|
10392
|
-
|
|
10415
|
+
dummyFeeAssetAmount = separateFeeAssetInfo ? parseUnits(FEE_ASSET_AMOUNT.toString(), separateFeeAssetInfo.decimals) : undefined;
|
|
10416
|
+
dummyDestFee = (_ref4 = separateFeeAssetInfo && getFeeAssetInfo(assetTo, separateFeeAssetInfo) && dummyFeeAssetAmount) !== null && _ref4 !== void 0 ? _ref4 : MIN_FEE;
|
|
10393
10417
|
fees = {
|
|
10394
|
-
originFee:
|
|
10395
|
-
originReserveFee: MIN_FEE,
|
|
10396
|
-
exchangeFee: 0n,
|
|
10397
|
-
destReserveFee:
|
|
10418
|
+
originFee: dummyFeeAssetAmount !== null && dummyFeeAssetAmount !== void 0 ? dummyFeeAssetAmount : 0n,
|
|
10419
|
+
originReserveFee: dummyFeeAssetAmount !== null && dummyFeeAssetAmount !== void 0 ? dummyFeeAssetAmount : MIN_FEE,
|
|
10420
|
+
exchangeFee: dummyFeeAssetAmount !== null && dummyFeeAssetAmount !== void 0 ? dummyFeeAssetAmount : 0n,
|
|
10421
|
+
destReserveFee: dummyDestFee,
|
|
10422
|
+
destFee: dummyDestFee
|
|
10398
10423
|
};
|
|
10399
10424
|
totalFeesPre = calculateTotalFees(chain, fees);
|
|
10400
10425
|
if (!hasSeparateFeeAsset) {
|
|
@@ -10419,14 +10444,20 @@ var handleSwapExecuteTransfer = /*#__PURE__*/function () {
|
|
|
10419
10444
|
case 3:
|
|
10420
10445
|
firstDryRunResult = _context3.v;
|
|
10421
10446
|
if (!(((_firstDryRunResult$dr = firstDryRunResult.dryRunError) === null || _firstDryRunResult$dr === void 0 ? void 0 : _firstDryRunResult$dr.reason) === 'NotHoldingFees')) {
|
|
10447
|
+
_context3.n = 5;
|
|
10448
|
+
break;
|
|
10449
|
+
}
|
|
10450
|
+
if (!separateFeeAssetInfo) {
|
|
10422
10451
|
_context3.n = 4;
|
|
10423
10452
|
break;
|
|
10424
10453
|
}
|
|
10425
|
-
throw new
|
|
10454
|
+
throw new DryRunFailedError(firstDryRunResult.dryRunError);
|
|
10426
10455
|
case 4:
|
|
10456
|
+
throw new AmountTooLowError("Asset amount is too low to cover the fees, please increase the amount.");
|
|
10457
|
+
case 5:
|
|
10427
10458
|
exchangeHopIndex = findExchangeHopIndex(chain, firstDryRunResult, exchangeChain, destChain);
|
|
10428
10459
|
extractedFees = extractFeesFromDryRun(chain, exchangeChain, firstDryRunResult, exchangeHopIndex, destChain, false); // Set originFee from dry run origin fee (padded), same as handleExecuteTransfer
|
|
10429
|
-
extractedFees.originFee =
|
|
10460
|
+
extractedFees.originFee = separateFeeAssetInfo && firstDryRunResult.origin.success ? padValueBy(firstDryRunResult.origin.fee, FEE_PADDING_PERCENTAGE) : 0n;
|
|
10430
10461
|
if (extractedFees.exchangeFee === 0n) {
|
|
10431
10462
|
// We set the exchange fee to non-zero value to prevent creating dummy tx
|
|
10432
10463
|
extractedFees.exchangeFee = MIN_FEE;
|
|
@@ -10437,26 +10468,26 @@ var handleSwapExecuteTransfer = /*#__PURE__*/function () {
|
|
|
10437
10468
|
}
|
|
10438
10469
|
updatedAssetTo = assetTo;
|
|
10439
10470
|
if (!chain) {
|
|
10440
|
-
_context3.n =
|
|
10471
|
+
_context3.n = 7;
|
|
10441
10472
|
break;
|
|
10442
10473
|
}
|
|
10443
10474
|
// When fees are paid from a separate asset (e.g. DOT for Ethereum),
|
|
10444
10475
|
// the full main asset amount is available for the swap
|
|
10445
10476
|
amountAvailableForSwap = hasSeparateFeeAsset ? assetFrom.amount : assetFrom.amount - totalFees;
|
|
10446
|
-
_context3.n =
|
|
10477
|
+
_context3.n = 6;
|
|
10447
10478
|
return calculateMinAmountOut(amountAvailableForSwap);
|
|
10448
|
-
case
|
|
10479
|
+
case 6:
|
|
10449
10480
|
recalculatedMinAmountOut = _context3.v;
|
|
10450
10481
|
updatedAssetTo = _objectSpread2(_objectSpread2({}, assetTo), {}, {
|
|
10451
10482
|
amount: recalculatedMinAmountOut
|
|
10452
10483
|
});
|
|
10453
|
-
case
|
|
10454
|
-
_context3.n =
|
|
10484
|
+
case 7:
|
|
10485
|
+
_context3.n = 8;
|
|
10455
10486
|
return createXcmAndCall(_objectSpread2(_objectSpread2({}, internalOptions), {}, {
|
|
10456
10487
|
assetInfoTo: updatedAssetTo,
|
|
10457
10488
|
fees: extractedFees
|
|
10458
10489
|
}), firstDryRunResult.origin.success ? firstDryRunResult.origin.weight : undefined);
|
|
10459
|
-
case
|
|
10490
|
+
case 8:
|
|
10460
10491
|
_yield$createXcmAndCa2 = _context3.v;
|
|
10461
10492
|
finalCall = _yield$createXcmAndCa2.call;
|
|
10462
10493
|
return _context3.a(2, api.deserializeExtrinsics(finalCall));
|
|
@@ -10786,7 +10817,7 @@ var AssetHubPolkadot = /*#__PURE__*/function (_SubstrateChain) {
|
|
|
10786
10817
|
var nativeAsset = api.findNativeAssetInfoOrThrow(this.chain);
|
|
10787
10818
|
var isNativeAsset = isAssetEqual(nativeAsset, assetInfo);
|
|
10788
10819
|
var isNativeFeeAsset = isAssetEqual(nativeAsset, feeAssetInfo);
|
|
10789
|
-
return !isNativeAsset || !isNativeFeeAsset;
|
|
10820
|
+
return (!isNativeAsset || !isNativeFeeAsset) && hasMatchingFeeAssetReserve(api, this.chain, assetInfo, feeAssetInfo);
|
|
10790
10821
|
}
|
|
10791
10822
|
}, {
|
|
10792
10823
|
key: "transferPolkadotXCM",
|
|
@@ -11016,7 +11047,7 @@ var Hydration = /*#__PURE__*/function (_SubstrateChain) {
|
|
|
11016
11047
|
var nativeAsset = api.findNativeAssetInfoOrThrow(this.chain);
|
|
11017
11048
|
var isNativeAsset = isAssetEqual(nativeAsset, asset);
|
|
11018
11049
|
var isNativeFeeAsset = isAssetEqual(nativeAsset, feeAsset);
|
|
11019
|
-
return !isNativeAsset || !isNativeFeeAsset;
|
|
11050
|
+
return (!isNativeAsset || !isNativeFeeAsset) && hasMatchingFeeAssetReserve(api, this.chain, asset, feeAsset);
|
|
11020
11051
|
}
|
|
11021
11052
|
}, {
|
|
11022
11053
|
key: "transferPolkadotXCM",
|
|
@@ -12627,6 +12658,10 @@ var DEFAULT_TTL_MS = 60000; // 1 minute
|
|
|
12627
12658
|
var MAX_CLIENTS = 100;
|
|
12628
12659
|
var EXTENSION_MS = 5 * 60000; // 5 minutes
|
|
12629
12660
|
var MAX_U64 = (1n << 64n) - 1n;
|
|
12661
|
+
var MIN_WEIGHT = {
|
|
12662
|
+
proofSize: 1n,
|
|
12663
|
+
refTime: 1n
|
|
12664
|
+
};
|
|
12630
12665
|
var MAX_WEIGHT = {
|
|
12631
12666
|
proofSize: MAX_U64,
|
|
12632
12667
|
refTime: MAX_U64
|
|
@@ -12882,39 +12917,98 @@ var pickOtherMintPallet = function pickOtherMintPallet(asset, pallets) {
|
|
|
12882
12917
|
return pallets[0];
|
|
12883
12918
|
};
|
|
12884
12919
|
|
|
12885
|
-
|
|
12886
|
-
|
|
12887
|
-
|
|
12920
|
+
// Mirrors the runtime `Ord` of `Location` so that encoded `Assets` decode on chain
|
|
12921
|
+
var JUNCTION_ORDER = ['Parachain', 'AccountId32', 'AccountIndex64', 'AccountKey20', 'PalletInstance', 'GeneralIndex', 'GeneralKey', 'OnlyChild', 'Plurality', 'GlobalConsensus'];
|
|
12922
|
+
var NETWORK_ORDER = ['bygenesis', 'byfork', 'polkadot', 'kusama', 'westend', 'rococo', 'wococo', 'ethereum', 'bitcoincore', 'bitcoincash', 'polkadotbulletin'];
|
|
12923
|
+
var isRecord = function isRecord(value) {
|
|
12924
|
+
return _typeof(value) === 'object' && value !== null;
|
|
12925
|
+
};
|
|
12926
|
+
var toBigInt = function toBigInt(value) {
|
|
12927
|
+
if (typeof value === 'bigint') return value;
|
|
12928
|
+
if (typeof value === 'number') return BigInt(value);
|
|
12929
|
+
if (typeof value === 'string' && /^\d+$/.test(value)) return BigInt(value);
|
|
12930
|
+
return undefined;
|
|
12931
|
+
};
|
|
12932
|
+
var _compareValues = function compareValues(a, b) {
|
|
12933
|
+
if (a === b) return 0;
|
|
12934
|
+
if (a === null || a === undefined) return -1;
|
|
12935
|
+
if (b === null || b === undefined) return 1;
|
|
12936
|
+
var aNumber = toBigInt(a);
|
|
12937
|
+
var bNumber = toBigInt(b);
|
|
12938
|
+
if (aNumber !== undefined && bNumber !== undefined) {
|
|
12939
|
+
return aNumber < bNumber ? -1 : aNumber > bNumber ? 1 : 0;
|
|
12940
|
+
}
|
|
12941
|
+
if (typeof a === 'string' && typeof b === 'string') return a < b ? -1 : a > b ? 1 : 0;
|
|
12942
|
+
if (isRecord(a) && isRecord(b)) {
|
|
12943
|
+
for (var _i = 0, _Object$keys = Object.keys(a); _i < _Object$keys.length; _i++) {
|
|
12944
|
+
var key = _Object$keys[_i];
|
|
12945
|
+
var result = _compareValues(a[key], b[key]);
|
|
12946
|
+
if (result !== 0) return result;
|
|
12947
|
+
}
|
|
12948
|
+
}
|
|
12949
|
+
return 0;
|
|
12950
|
+
};
|
|
12951
|
+
var compareNetworks = function compareNetworks(a, b) {
|
|
12952
|
+
var variant = function variant(value) {
|
|
12953
|
+
return typeof value === 'string' ? [value, null] : isRecord(value) ? Object.entries(value)[0] : [];
|
|
12954
|
+
};
|
|
12955
|
+
var _variant = variant(a),
|
|
12956
|
+
_variant2 = _slicedToArray(_variant, 2),
|
|
12957
|
+
aName = _variant2[0],
|
|
12958
|
+
aValue = _variant2[1];
|
|
12959
|
+
var _variant3 = variant(b),
|
|
12960
|
+
_variant4 = _slicedToArray(_variant3, 2),
|
|
12961
|
+
bName = _variant4[0],
|
|
12962
|
+
bValue = _variant4[1];
|
|
12963
|
+
var order = NETWORK_ORDER.indexOf(String(aName).toLowerCase()) - NETWORK_ORDER.indexOf(String(bName).toLowerCase());
|
|
12964
|
+
return order !== 0 ? order : _compareValues(aValue, bValue);
|
|
12965
|
+
};
|
|
12966
|
+
var compareJunctions = function compareJunctions(a, b) {
|
|
12967
|
+
var _Object$entries$ = _slicedToArray(Object.entries(a)[0], 2),
|
|
12968
|
+
aType = _Object$entries$[0],
|
|
12969
|
+
aValue = _Object$entries$[1];
|
|
12970
|
+
var _Object$entries$2 = _slicedToArray(Object.entries(b)[0], 2),
|
|
12971
|
+
bType = _Object$entries$2[0],
|
|
12972
|
+
bValue = _Object$entries$2[1];
|
|
12973
|
+
var order = JUNCTION_ORDER.indexOf(aType) - JUNCTION_ORDER.indexOf(bType);
|
|
12974
|
+
if (order !== 0) return order;
|
|
12975
|
+
return aType === 'GlobalConsensus' ? compareNetworks(aValue, bValue) : _compareValues(aValue, bValue);
|
|
12976
|
+
};
|
|
12977
|
+
var getJunctions = function getJunctions(_ref) {
|
|
12978
|
+
var interior = _ref.interior;
|
|
12979
|
+
if (interior === 'Here') return [];
|
|
12980
|
+
var junctions = Object.values(interior).find(function (value) {
|
|
12981
|
+
return value !== null && value !== undefined;
|
|
12982
|
+
});
|
|
12983
|
+
if (junctions === undefined) return [];
|
|
12984
|
+
return Array.isArray(junctions) ? junctions : [junctions];
|
|
12985
|
+
};
|
|
12986
|
+
var compareLocationOrder = function compareLocationOrder(a, b) {
|
|
12987
|
+
var parents = Number(a.parents) - Number(b.parents);
|
|
12988
|
+
if (parents !== 0) return parents;
|
|
12989
|
+
var aJunctions = getJunctions(a);
|
|
12990
|
+
var bJunctions = getJunctions(b);
|
|
12991
|
+
if (aJunctions.length !== bJunctions.length) return aJunctions.length - bJunctions.length;
|
|
12992
|
+
var _iterator = _createForOfIteratorHelper(aJunctions.entries()),
|
|
12993
|
+
_step;
|
|
12994
|
+
try {
|
|
12995
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
12996
|
+
var _step$value = _slicedToArray(_step.value, 2),
|
|
12997
|
+
index = _step$value[0],
|
|
12998
|
+
junction = _step$value[1];
|
|
12999
|
+
var result = compareJunctions(junction, bJunctions[index]);
|
|
13000
|
+
if (result !== 0) return result;
|
|
13001
|
+
}
|
|
13002
|
+
} catch (err) {
|
|
13003
|
+
_iterator.e(err);
|
|
13004
|
+
} finally {
|
|
13005
|
+
_iterator.f();
|
|
13006
|
+
}
|
|
13007
|
+
return 0;
|
|
12888
13008
|
};
|
|
12889
13009
|
var sortAssets = function sortAssets(assets) {
|
|
12890
13010
|
return assets.sort(function (a, b) {
|
|
12891
|
-
|
|
12892
|
-
var bLoc = extractAssetLocation(b);
|
|
12893
|
-
// 1. Sort by parents first
|
|
12894
|
-
if (aLoc.parents !== bLoc.parents) {
|
|
12895
|
-
return Number(aLoc.parents) - Number(bLoc.parents);
|
|
12896
|
-
}
|
|
12897
|
-
// 2. If parents are equal, use priority function
|
|
12898
|
-
var aIsHere = isHere(aLoc);
|
|
12899
|
-
var bIsHere = isHere(bLoc);
|
|
12900
|
-
var aHasGlobal = hasJunction(aLoc, 'GlobalConsensus');
|
|
12901
|
-
var bHasGlobal = hasJunction(bLoc, 'GlobalConsensus');
|
|
12902
|
-
var aGeneralIndex = getJunctionValue(aLoc, 'GeneralIndex');
|
|
12903
|
-
var bGeneralIndex = getJunctionValue(bLoc, 'GeneralIndex');
|
|
12904
|
-
var getPriority = function getPriority(isHere, hasGlobal) {
|
|
12905
|
-
if (isHere) return 0;
|
|
12906
|
-
if (hasGlobal) return 2;
|
|
12907
|
-
return 1;
|
|
12908
|
-
};
|
|
12909
|
-
var aPriority = getPriority(aIsHere, aHasGlobal);
|
|
12910
|
-
var bPriority = getPriority(bIsHere, bHasGlobal);
|
|
12911
|
-
if (aPriority !== bPriority) return aPriority - bPriority;
|
|
12912
|
-
if (aGeneralIndex === undefined && bGeneralIndex === undefined) return 0;
|
|
12913
|
-
if (aGeneralIndex === undefined) return 1;
|
|
12914
|
-
if (bGeneralIndex === undefined) return -1;
|
|
12915
|
-
var aIndex = BigInt(aGeneralIndex);
|
|
12916
|
-
var bIndex = BigInt(bGeneralIndex);
|
|
12917
|
-
return aIndex < bIndex ? -1 : aIndex > bIndex ? 1 : 0;
|
|
13011
|
+
return compareLocationOrder(extractAssetLocation(a), extractAssetLocation(b));
|
|
12918
13012
|
});
|
|
12919
13013
|
};
|
|
12920
13014
|
|
|
@@ -12971,6 +13065,7 @@ var createSwapBuilder = function createSwapBuilder(options) {
|
|
|
12971
13065
|
var from = options.from,
|
|
12972
13066
|
to = options.to,
|
|
12973
13067
|
currency = options.currency,
|
|
13068
|
+
feeAsset = options.feeAsset,
|
|
12974
13069
|
_options$swapOptions = options.swapOptions,
|
|
12975
13070
|
currencyTo = _options$swapOptions.currencyTo,
|
|
12976
13071
|
evmSenderAddress = _options$swapOptions.evmSenderAddress,
|
|
@@ -12985,7 +13080,7 @@ var createSwapBuilder = function createSwapBuilder(options) {
|
|
|
12985
13080
|
if (Array.isArray(currency)) {
|
|
12986
13081
|
throw new UnsupportedOperationError('Swaps with multiple currencies are not supported.');
|
|
12987
13082
|
}
|
|
12988
|
-
var builder = SwapBuilder(api).from(from).exchange(exchange).to(to).currencyFrom(currency).currencyTo(currencyTo).amount(currency.amount).sender(sender).evmSenderAddress(evmSenderAddress).recipient(address).slippagePct((_slippage$toString = slippage === null || slippage === void 0 ? void 0 : slippage.toString()) !== null && _slippage$toString !== void 0 ? _slippage$toString : DEFAULT_SWAP_SLIPPAGE.toString());
|
|
13083
|
+
var builder = SwapBuilder(api).from(from).exchange(exchange).to(to).currencyFrom(currency).currencyTo(currencyTo).feeAsset(feeAsset).amount(currency.amount).sender(sender).evmSenderAddress(evmSenderAddress).recipient(address).slippagePct((_slippage$toString = slippage === null || slippage === void 0 ? void 0 : slippage.toString()) !== null && _slippage$toString !== void 0 ? _slippage$toString : DEFAULT_SWAP_SLIPPAGE.toString());
|
|
12989
13084
|
if (onStatusChange) {
|
|
12990
13085
|
builder = builder.onStatusChange(onStatusChange);
|
|
12991
13086
|
}
|
|
@@ -13164,6 +13259,25 @@ var createChainClient = /*#__PURE__*/function () {
|
|
|
13164
13259
|
};
|
|
13165
13260
|
}();
|
|
13166
13261
|
|
|
13262
|
+
var createBridgedXcmPrefix = function createBridgedXcmPrefix(version, _ref) {
|
|
13263
|
+
var palletIndex = _ref.palletIndex,
|
|
13264
|
+
relay = _ref.relay,
|
|
13265
|
+
paraId = _ref.paraId;
|
|
13266
|
+
return [{
|
|
13267
|
+
DescendOrigin: createX1Payload(version, {
|
|
13268
|
+
PalletInstance: palletIndex
|
|
13269
|
+
})
|
|
13270
|
+
}, {
|
|
13271
|
+
UniversalOrigin: {
|
|
13272
|
+
GlobalConsensus: _defineProperty({}, relay.toLowerCase(), null)
|
|
13273
|
+
}
|
|
13274
|
+
}, {
|
|
13275
|
+
DescendOrigin: createX1Payload(version, {
|
|
13276
|
+
Parachain: paraId
|
|
13277
|
+
})
|
|
13278
|
+
}];
|
|
13279
|
+
};
|
|
13280
|
+
|
|
13167
13281
|
var getErrorInstruction = function getErrorInstruction(message, index) {
|
|
13168
13282
|
if (index === undefined || _typeof(message) !== 'object' || message === null) {
|
|
13169
13283
|
return undefined;
|
|
@@ -13674,30 +13788,37 @@ var PolkadotApi = /*#__PURE__*/function () {
|
|
|
13674
13788
|
case 0:
|
|
13675
13789
|
clientTtlMs = _args.length > 1 && _args[1] !== undefined ? _args[1] : DEFAULT_TTL_MS;
|
|
13676
13790
|
destination = _args.length > 2 ? _args[2] : undefined;
|
|
13677
|
-
if (!(this._chain
|
|
13791
|
+
if (!(this._chain === chain || isExternalChain(chain))) {
|
|
13678
13792
|
_context.n = 1;
|
|
13679
13793
|
break;
|
|
13680
13794
|
}
|
|
13681
13795
|
return _context.a(2);
|
|
13682
13796
|
case 1:
|
|
13797
|
+
if (!(this._chain !== undefined)) {
|
|
13798
|
+
_context.n = 2;
|
|
13799
|
+
break;
|
|
13800
|
+
}
|
|
13801
|
+
_context.n = 2;
|
|
13802
|
+
return this.disconnect();
|
|
13803
|
+
case 2:
|
|
13683
13804
|
this._ttlMs = clientTtlMs;
|
|
13684
13805
|
this._chain = chain;
|
|
13685
|
-
_context.n =
|
|
13806
|
+
_context.n = 3;
|
|
13686
13807
|
return resolveChainApi(this._config, chain, function (wsUrl) {
|
|
13687
13808
|
return _this.leaseClient(wsUrl, _this._ttlMs);
|
|
13688
13809
|
}, this._customCtx);
|
|
13689
|
-
case
|
|
13810
|
+
case 3:
|
|
13690
13811
|
this._api = _context.v;
|
|
13691
|
-
_context.n =
|
|
13812
|
+
_context.n = 4;
|
|
13692
13813
|
return this.maybeHydrateCustomChain(chain);
|
|
13693
|
-
case
|
|
13814
|
+
case 4:
|
|
13694
13815
|
if (!(typeof destination === 'string' && isCustomChain(destination))) {
|
|
13695
|
-
_context.n =
|
|
13816
|
+
_context.n = 5;
|
|
13696
13817
|
break;
|
|
13697
13818
|
}
|
|
13698
|
-
_context.n =
|
|
13819
|
+
_context.n = 5;
|
|
13699
13820
|
return this.hydrateCustomChain(destination);
|
|
13700
|
-
case
|
|
13821
|
+
case 5:
|
|
13701
13822
|
return _context.a(2);
|
|
13702
13823
|
}
|
|
13703
13824
|
}, _callee, this);
|
|
@@ -13712,6 +13833,11 @@ var PolkadotApi = /*#__PURE__*/function () {
|
|
|
13712
13833
|
value: function setCustomCtx(ctx) {
|
|
13713
13834
|
this._customCtx = ctx;
|
|
13714
13835
|
}
|
|
13836
|
+
}, {
|
|
13837
|
+
key: "resetChain",
|
|
13838
|
+
value: function resetChain() {
|
|
13839
|
+
this._chain = undefined;
|
|
13840
|
+
}
|
|
13715
13841
|
}, {
|
|
13716
13842
|
key: "hydrateCustomChain",
|
|
13717
13843
|
value: function () {
|
|
@@ -14026,4 +14152,4 @@ var createClientCache = function createClientCache(maxSize, pingClient, onEvicti
|
|
|
14026
14152
|
};
|
|
14027
14153
|
};
|
|
14028
14154
|
|
|
14029
|
-
export { API_TYPES, AmountTooLowError, ApiNotInitializedError, BaseAssetsPallet, BatchMode, BatchValidationError, BridgeHaltedError, Builder, CustomChainConflictError, CustomChainInvalidError, DEFAULT_TTL_MS, DRY_RUN_CLIENT_TIMEOUT_MS, DryRunFailedError, ETH_MAINNET_CHAIN_ID, ETH_TESTNET_CHAIN_ID, EXCHANGE_CHAINS, EXTENSION_MS, ExtensionNotInstalledError, FeatureTemporarilyDisabledError, GeneralBuilder, InvalidAddressError, MAX_CLIENTS, MissingChainApiError, MissingParameterError, NoXCMSupportImplementedError, NumberFormatError, OverrideConflictError, PolkadotApi, PolkadotXcmError, PolkadotXcmExecutionError, ProviderUnavailableError, RELAY_LOCATION, RoutingResolutionError, RuntimeApiError, RuntimeApiUnavailableError, ScenarioNotSupportedError, SubmitTransactionError, TRANSACT_ORIGINS, TX_CLIENT_TIMEOUT_MS, TypeAndThenUnavailableError, UnableToComputeError, UnsupportedOperationError, ValidationError, XTokensError, abstractDecimals, addEthereumBridgeFees, addXcmVersionHeader, aggregateHopFees, applyDecimalAbstraction, assertAddressIsString, assertCurrencyCore, assertEvmAddress, assertExtensionInstalled, assertHasId, assertNotEvmTransfer, assertSender, assertSenderSource, assertSubstrateOrigin, assertSwapSupport, assertToIsString, blake2b256, blake2b512, buildCustomChainAssetsInfo, buildCustomChainConfig, buildDestInfo, buildDryRunError, buildErc20StorageMint, buildHopInfo, buildOriginInfo, calcPreviewMintAmount, compareAddresses, computeOverridenAmount, constructTypeAndThenCall, convertBuilderConfig, convertSs58, createAsset, createAssetId, createAssetsFilter, createBaseExecuteXcm, createBeneficiaryLocXTokens, createBeneficiaryLocation, createChainClient, createClientCache, createClientPoolHelpers, createCustomXcmOnDest, createDestination, createDirectExecuteXcm, createEthereumBridgeInstructions, createExecuteCall, createExecuteExchangeXcm, createSwapBuilder, createTransfer, createTransferOrSwap, createTransferOrSwapAll, createTxOverrideAmount, createTypeAndThenCall, createTypeThenAutoReserve, createVersionedAssets, createVersionedDestination, createX1Payload, deriveAccountId, dryRun, dryRunInternal, dryRunOrigin, encodeSs58, executeWithSwap, formatAssetIdToERC20, formatUnits, generateMessageId, getAssetBalanceInternal, getAssetReserveChain, getAssetReserveChainImpl, getBalance, getBalanceInternal, getBridgeStatus, getChain, getChainConfig, getChainConfigImpl, getChainLocation, getChainProviders, getChainProvidersImpl, getChainVersion, getDryRunError, getErrorInstruction, getEthErc20Balance, getEvmExtensionOrThrow, getEvmPrivateKeyHex, getEvmSnowbridgeExtensionOrThrow, getLocalTransferAmount, getMinTransferableAmount, getMinTransferableAmountInternal, getOriginXcmFee, getOriginXcmFeeInternal, getParaEthTransferFees, getParaId, getParaIdImpl, getRelayChainOf, getRelayChainOfImpl, getRelayChainSymbolOf, getSwapExtensionOrThrow, getTChain, getTSubstrateChain, getTransferInfo, getTransferableAmount, getTransferableAmountInternal, getXcmFee, getXcmFeeInternal, getXcmFeeOnce, handleExecuteTransfer, handleSwapExecuteTransfer, handleToAhTeleport, isConfig, isExchange, isNativeAssetTeleport, isSenderSigner, isViemSigner, keyFromWs, localizeLocation, localizeLocationImpl, maybeOverrideAsset, maybeOverrideAssets, normalizeAmount, normalizeCustomChains, normalizeExchange, overrideTxAmount, padFee, padValueBy, parseUnits, pickCompatibleXcmVersion, pickOtherMintPallet, pickRouterCompatibleXcmVersion, registerEvmExtension, registerEvmSnowbridgeExtension, registerSwapExtension, resolveAssetCount, resolveDestChain, resolveModuleError, resolveParaId, resolveTransferParams, reverseTransformLocation, selectXcmVersion, sortAssets, throwUnsupportedCurrency, traverseXcmHops, validateAddress, validateAssetSpecifiers, validateCurrency, validateDestination, validateDestinationAddress, validateTransact, verifyEdOnDestination, wrapTxBypass };
|
|
14155
|
+
export { API_TYPES, AmountTooLowError, ApiNotInitializedError, BaseAssetsPallet, BatchMode, BatchValidationError, BridgeHaltedError, Builder, CustomChainConflictError, CustomChainInvalidError, DEFAULT_TTL_MS, DRY_RUN_CLIENT_TIMEOUT_MS, DryRunFailedError, ETH_MAINNET_CHAIN_ID, ETH_TESTNET_CHAIN_ID, EXCHANGE_CHAINS, EXTENSION_MS, ExtensionNotInstalledError, FeatureTemporarilyDisabledError, GeneralBuilder, InvalidAddressError, MAX_CLIENTS, MissingChainApiError, MissingParameterError, NoXCMSupportImplementedError, NumberFormatError, OverrideConflictError, PolkadotApi, PolkadotXcmError, PolkadotXcmExecutionError, ProviderUnavailableError, RELAY_LOCATION, RoutingResolutionError, RuntimeApiError, RuntimeApiUnavailableError, ScenarioNotSupportedError, SubmitTransactionError, TRANSACT_ORIGINS, TX_CLIENT_TIMEOUT_MS, TypeAndThenUnavailableError, UnableToComputeError, UnsupportedOperationError, ValidationError, XTokensError, abstractDecimals, addEthereumBridgeFees, addXcmVersionHeader, aggregateHopFees, applyDecimalAbstraction, assertAddressIsString, assertCurrencyCore, assertEvmAddress, assertExtensionInstalled, assertHasId, assertNotEvmTransfer, assertSender, assertSenderSource, assertSubstrateOrigin, assertSwapSupport, assertToIsString, blake2b256, blake2b512, buildCustomChainAssetsInfo, buildCustomChainConfig, buildDestInfo, buildDryRunError, buildErc20StorageMint, buildHopInfo, buildOriginInfo, calcPreviewMintAmount, compareAddresses, compareLocationOrder, computeOverridenAmount, constructTypeAndThenCall, convertBuilderConfig, convertSs58, createAllCountedFilter, createAsset, createAssetId, createAssetsFilter, createBaseExecuteXcm, createBeneficiaryLocXTokens, createBeneficiaryLocation, createBridgedXcmPrefix, createChainClient, createClientCache, createClientPoolHelpers, createCustomXcmOnDest, createDestination, createDirectExecuteXcm, createEthereumBridgeInstructions, createExecuteCall, createExecuteExchangeXcm, createSwapBuilder, createTransfer, createTransferOrSwap, createTransferOrSwapAll, createTxOverrideAmount, createTypeAndThenCall, createTypeThenAutoReserve, createVersionedAssets, createVersionedDestination, createX1Payload, deriveAccountId, dryRun, dryRunInternal, dryRunOrigin, encodeSs58, executeWithSwap, formatAssetIdToERC20, formatUnits, generateMessageId, getAssetBalanceInternal, getAssetReserveChain, getAssetReserveChainImpl, getBalance, getBalanceInternal, getBridgeStatus, getChain, getChainConfig, getChainConfigImpl, getChainLocation, getChainProviders, getChainProvidersImpl, getChainVersion, getDryRunError, getErrorInstruction, getEthErc20Balance, getEvmExtensionOrThrow, getEvmPrivateKeyHex, getEvmSnowbridgeExtensionOrThrow, getLocalTransferAmount, getMinTransferableAmount, getMinTransferableAmountInternal, getOriginXcmFee, getOriginXcmFeeInternal, getParaEthTransferFees, getParaId, getParaIdImpl, getRelayChainOf, getRelayChainOfImpl, getRelayChainSymbolOf, getSwapExtensionOrThrow, getTChain, getTSubstrateChain, getTransferInfo, getTransferableAmount, getTransferableAmountInternal, getXcmFee, getXcmFeeInternal, getXcmFeeOnce, handleExecuteTransfer, handleSwapExecuteTransfer, handleToAhTeleport, isConfig, isExchange, isNativeAssetTeleport, isSenderSigner, isViemSigner, keyFromWs, localizeLocation, localizeLocationImpl, maybeOverrideAsset, maybeOverrideAssets, normalizeAmount, normalizeCustomChains, normalizeExchange, overrideTxAmount, padFee, padValueBy, parseUnits, pickCompatibleXcmVersion, pickOtherMintPallet, pickRouterCompatibleXcmVersion, registerEvmExtension, registerEvmSnowbridgeExtension, registerSwapExtension, resolveAssetCount, resolveDestChain, resolveModuleError, resolveParaId, resolveTransferParams, reverseTransformLocation, selectXcmVersion, sortAssets, throwUnsupportedCurrency, traverseXcmHops, validateAddress, validateAssetSpecifiers, validateCurrency, validateDestination, validateDestinationAddress, validateFeeAssetSupport, validateTransact, verifyEdOnDestination, wrapTxBypass };
|