@paraspell/sdk-core 14.3.3 → 14.3.5
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 +43 -4
- package/dist/index.mjs +1017 -806
- package/package.json +4 -4
package/dist/index.mjs
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
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
|
+
import { keccak_256 } from '@noble/hashes/sha3.js';
|
|
12
|
+
import { bytesToHex, hexToBytes } from '@noble/hashes/utils.js';
|
|
11
13
|
|
|
12
14
|
function _arrayLikeToArray(r, a) {
|
|
13
15
|
(null == a || a > r.length) && (a = r.length);
|
|
@@ -2038,7 +2040,12 @@ var createBuyExecution = function createBuyExecution(asset, weight) {
|
|
|
2038
2040
|
return [{
|
|
2039
2041
|
BuyExecution: {
|
|
2040
2042
|
fees: asset,
|
|
2041
|
-
weight_limit:
|
|
2043
|
+
weight_limit: weight ? {
|
|
2044
|
+
Limited: {
|
|
2045
|
+
ref_time: weight.refTime,
|
|
2046
|
+
proof_size: weight.proofSize
|
|
2047
|
+
}
|
|
2048
|
+
} : 'Unlimited'
|
|
2042
2049
|
}
|
|
2043
2050
|
}];
|
|
2044
2051
|
};
|
|
@@ -2140,65 +2147,6 @@ var createTransactInstructions = /*#__PURE__*/function () {
|
|
|
2140
2147
|
};
|
|
2141
2148
|
}();
|
|
2142
2149
|
|
|
2143
|
-
var handleTransactUsingSend = /*#__PURE__*/function () {
|
|
2144
|
-
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(_ref) {
|
|
2145
|
-
var api, version, chain, destination, destChain, recipient, paraIdTo, asset, transactOptions, dest, transactInstructions, message;
|
|
2146
|
-
return _regenerator().w(function (_context) {
|
|
2147
|
-
while (1) switch (_context.n) {
|
|
2148
|
-
case 0:
|
|
2149
|
-
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;
|
|
2150
|
-
dest = createDestination(api, version, chain, destination, paraIdTo);
|
|
2151
|
-
if (transactOptions !== null && transactOptions !== void 0 && transactOptions.call) {
|
|
2152
|
-
_context.n = 1;
|
|
2153
|
-
break;
|
|
2154
|
-
}
|
|
2155
|
-
throw new UnsupportedOperationError('Cannot use handleTransactUsingSend without transactOptions.call defined');
|
|
2156
|
-
case 1:
|
|
2157
|
-
if (destChain) {
|
|
2158
|
-
_context.n = 2;
|
|
2159
|
-
break;
|
|
2160
|
-
}
|
|
2161
|
-
throw new UnsupportedOperationError('destChain must be provided when using handleTransactUsingSend');
|
|
2162
|
-
case 2:
|
|
2163
|
-
assertAddressIsString(recipient);
|
|
2164
|
-
_context.n = 3;
|
|
2165
|
-
return createTransactInstructions(api, transactOptions, version, destChain, recipient);
|
|
2166
|
-
case 3:
|
|
2167
|
-
transactInstructions = _context.v;
|
|
2168
|
-
message = [{
|
|
2169
|
-
WithdrawAsset: [asset]
|
|
2170
|
-
}].concat(_toConsumableArray(createBuyExecution(asset)), _toConsumableArray(transactInstructions), [{
|
|
2171
|
-
RefundSurplus: undefined
|
|
2172
|
-
}, {
|
|
2173
|
-
DepositAsset: {
|
|
2174
|
-
assets: {
|
|
2175
|
-
Wild: {
|
|
2176
|
-
AllCounted: 1
|
|
2177
|
-
}
|
|
2178
|
-
},
|
|
2179
|
-
beneficiary: createBeneficiaryLocation({
|
|
2180
|
-
api: api,
|
|
2181
|
-
address: recipient,
|
|
2182
|
-
version: version
|
|
2183
|
-
})
|
|
2184
|
-
}
|
|
2185
|
-
}]);
|
|
2186
|
-
return _context.a(2, {
|
|
2187
|
-
module: getXcmPallet(chain),
|
|
2188
|
-
method: 'send',
|
|
2189
|
-
params: {
|
|
2190
|
-
dest: addXcmVersionHeader(dest, version),
|
|
2191
|
-
message: addXcmVersionHeader(message, version)
|
|
2192
|
-
}
|
|
2193
|
-
});
|
|
2194
|
-
}
|
|
2195
|
-
}, _callee);
|
|
2196
|
-
}));
|
|
2197
|
-
return function handleTransactUsingSend(_x) {
|
|
2198
|
-
return _ref2.apply(this, arguments);
|
|
2199
|
-
};
|
|
2200
|
-
}();
|
|
2201
|
-
|
|
2202
2150
|
var BaseAssetsPallet = /*#__PURE__*/_createClass(function BaseAssetsPallet(palletName) {
|
|
2203
2151
|
_classCallCheck(this, BaseAssetsPallet);
|
|
2204
2152
|
this.palletName = palletName;
|
|
@@ -2427,9 +2375,30 @@ var CurrenciesPallet = /*#__PURE__*/function (_BaseAssetsPallet) {
|
|
|
2427
2375
|
}
|
|
2428
2376
|
}, {
|
|
2429
2377
|
key: "getBalance",
|
|
2430
|
-
value: function
|
|
2431
|
-
|
|
2432
|
-
|
|
2378
|
+
value: function () {
|
|
2379
|
+
var _getBalance = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(api, address, asset) {
|
|
2380
|
+
var account;
|
|
2381
|
+
return _regenerator().w(function (_context) {
|
|
2382
|
+
while (1) switch (_context.n) {
|
|
2383
|
+
case 0:
|
|
2384
|
+
assertHasId(asset);
|
|
2385
|
+
_context.n = 1;
|
|
2386
|
+
return api.queryRuntimeApi({
|
|
2387
|
+
module: 'CurrenciesApi',
|
|
2388
|
+
method: 'account',
|
|
2389
|
+
params: [Number(asset.assetId), address]
|
|
2390
|
+
});
|
|
2391
|
+
case 1:
|
|
2392
|
+
account = _context.v;
|
|
2393
|
+
return _context.a(2, (account === null || account === void 0 ? void 0 : account.free) !== undefined ? BigInt(account.free) : 0n);
|
|
2394
|
+
}
|
|
2395
|
+
}, _callee);
|
|
2396
|
+
}));
|
|
2397
|
+
function getBalance(_x, _x2, _x3) {
|
|
2398
|
+
return _getBalance.apply(this, arguments);
|
|
2399
|
+
}
|
|
2400
|
+
return getBalance;
|
|
2401
|
+
}()
|
|
2433
2402
|
}]);
|
|
2434
2403
|
}(BaseAssetsPallet);
|
|
2435
2404
|
|
|
@@ -2682,6 +2651,14 @@ var resolveParaId = function resolveParaId(paraId, destination, api) {
|
|
|
2682
2651
|
return paraId !== undefined ? paraId : api.getParaId(destination);
|
|
2683
2652
|
};
|
|
2684
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
|
+
|
|
2685
2662
|
var resolveScenario = function resolveScenario(origin, destination) {
|
|
2686
2663
|
if (isRelayChain(origin)) return 'RelayToPara';
|
|
2687
2664
|
var isRelayDestination = !isTLocation(destination) && isRelayChain(destination);
|
|
@@ -2739,7 +2716,7 @@ var SubstrateChain = /*#__PURE__*/function (_Chain) {
|
|
|
2739
2716
|
key: "transfer",
|
|
2740
2717
|
value: function () {
|
|
2741
2718
|
var _transfer = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(transferOptions) {
|
|
2742
|
-
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;
|
|
2743
2720
|
return _regenerator().w(function (_context) {
|
|
2744
2721
|
while (1) switch (_context.n) {
|
|
2745
2722
|
case 0:
|
|
@@ -2780,9 +2757,9 @@ var SubstrateChain = /*#__PURE__*/function (_Chain) {
|
|
|
2780
2757
|
}
|
|
2781
2758
|
throw new TypeAndThenUnavailableError('Relaychain assets require the type-and-then method which is not supported by this chain.');
|
|
2782
2759
|
case 4:
|
|
2783
|
-
useTypeAndThen = !shouldUseReserveTransfer && assetNeedsTypeThen && supportsTypeThen && destChain && !isExternalChain(destChain) &&
|
|
2760
|
+
useTypeAndThen = !shouldUseReserveTransfer && assetNeedsTypeThen && supportsTypeThen && destChain && !isExternalChain(destChain) && (!isTrustedChain(this.chain) || !isTrustedChain(destChain)) || isSubBridge;
|
|
2784
2761
|
if (!(supportsPolkadotXCM(this) || useTypeAndThen)) {
|
|
2785
|
-
_context.n =
|
|
2762
|
+
_context.n = 14;
|
|
2786
2763
|
break;
|
|
2787
2764
|
}
|
|
2788
2765
|
options = {
|
|
@@ -2833,44 +2810,52 @@ var SubstrateChain = /*#__PURE__*/function (_Chain) {
|
|
|
2833
2810
|
isAHDest = !isTLocation(destination) && destination.includes('AssetHub'); // Handle common cases
|
|
2834
2811
|
isExternalAsset = asset.location.parents === Parents.TWO;
|
|
2835
2812
|
isEthDest = _typeof(destination) !== 'object' && isExternalChain(destination); // External asset - Any origin to any dest via AH - DestinationReserve - multiple instructions
|
|
2836
|
-
isExternalAssetViaAh = isExternalAsset && !isAHOrigin && !isAHDest && !isEthDest
|
|
2837
|
-
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;
|
|
2838
2815
|
if (!(isExternalAssetViaAh || isExternalAssetToAh || useTypeAndThen)) {
|
|
2839
|
-
_context.n =
|
|
2816
|
+
_context.n = 11;
|
|
2840
2817
|
break;
|
|
2841
2818
|
}
|
|
2842
2819
|
if (!(useTypeAndThen && supportsPolkadotXCM(this) && !isSubBridge)) {
|
|
2843
|
-
_context.n =
|
|
2820
|
+
_context.n = 9;
|
|
2844
2821
|
break;
|
|
2845
2822
|
}
|
|
2846
2823
|
_context.n = 8;
|
|
2847
2824
|
return this.transferPolkadotXCM(options);
|
|
2848
2825
|
case 8:
|
|
2849
|
-
|
|
2850
|
-
|
|
2826
|
+
tx = _context.v;
|
|
2827
|
+
if (!this.shouldUseExecuteTransfer(options)) {
|
|
2828
|
+
_context.n = 9;
|
|
2829
|
+
break;
|
|
2830
|
+
}
|
|
2831
|
+
return _context.a(2, tx);
|
|
2851
2832
|
case 9:
|
|
2833
|
+
_context.n = 10;
|
|
2834
|
+
return createTypeAndThenCall(options);
|
|
2835
|
+
case 10:
|
|
2852
2836
|
call = _context.v;
|
|
2853
2837
|
return _context.a(2, api.deserializeExtrinsics(call));
|
|
2854
|
-
case
|
|
2838
|
+
case 11:
|
|
2855
2839
|
if (!supportsPolkadotXCM(this)) {
|
|
2856
|
-
_context.n =
|
|
2840
|
+
_context.n = 13;
|
|
2857
2841
|
break;
|
|
2858
2842
|
}
|
|
2859
|
-
if (!(this.shouldUseNativeAssetTeleport(transferOptions) && !this.shouldUseExecuteTransfer(options))) {
|
|
2860
|
-
_context.n =
|
|
2843
|
+
if (!(this.shouldUseNativeAssetTeleport(transferOptions) && !getFeeAssetInfo(asset, feeAsset) && !this.shouldUseExecuteTransfer(options))) {
|
|
2844
|
+
_context.n = 12;
|
|
2861
2845
|
break;
|
|
2862
2846
|
}
|
|
2863
2847
|
return _context.a(2, transferPolkadotXcm(options, 'limited_teleport_assets', 'Unlimited'));
|
|
2864
|
-
case 11:
|
|
2865
|
-
return _context.a(2, this.transferPolkadotXCM(options));
|
|
2866
2848
|
case 12:
|
|
2867
|
-
_context.
|
|
2868
|
-
break;
|
|
2849
|
+
return _context.a(2, this.transferPolkadotXCM(options));
|
|
2869
2850
|
case 13:
|
|
2851
|
+
_context.n = 15;
|
|
2852
|
+
break;
|
|
2853
|
+
case 14:
|
|
2870
2854
|
if (!supportsXTokens(this)) {
|
|
2871
|
-
_context.n =
|
|
2855
|
+
_context.n = 15;
|
|
2872
2856
|
break;
|
|
2873
2857
|
}
|
|
2858
|
+
validateFeeAssetSupport(asset, feeAsset, overriddenAsset, 'XTokens');
|
|
2874
2859
|
input = {
|
|
2875
2860
|
api: api,
|
|
2876
2861
|
asset: asset,
|
|
@@ -2885,9 +2870,9 @@ var SubstrateChain = /*#__PURE__*/function (_Chain) {
|
|
|
2885
2870
|
method: method
|
|
2886
2871
|
};
|
|
2887
2872
|
return _context.a(2, this.transferXTokens(input));
|
|
2888
|
-
case 14:
|
|
2889
|
-
throw new NoXCMSupportImplementedError(this.chain);
|
|
2890
2873
|
case 15:
|
|
2874
|
+
throw new NoXCMSupportImplementedError(this.chain);
|
|
2875
|
+
case 16:
|
|
2891
2876
|
return _context.a(2);
|
|
2892
2877
|
}
|
|
2893
2878
|
}, _callee, this);
|
|
@@ -3287,15 +3272,19 @@ var resolveCurrency = function resolveCurrency(api, currency, resolvedFeeAsset,
|
|
|
3287
3272
|
};
|
|
3288
3273
|
|
|
3289
3274
|
var resolveFeeAsset = function resolveFeeAsset(api, feeAsset, origin, destination, currency) {
|
|
3290
|
-
if (!Array.isArray(currency) && !origin.startsWith('Hydration') && origin !== 'AssetHubPolkadot') {
|
|
3291
|
-
throw new ScenarioNotSupportedError("Fee asset is not supported on ".concat(origin));
|
|
3292
|
-
}
|
|
3293
3275
|
var dest = !isTLocation(destination) ? destination : null;
|
|
3294
3276
|
var asset = api.findAssetInfo(origin, feeAsset, dest);
|
|
3295
3277
|
if (!asset) {
|
|
3296
3278
|
return throwUnsupportedCurrency(feeAsset, origin);
|
|
3297
3279
|
}
|
|
3298
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
|
+
}
|
|
3299
3288
|
return asset;
|
|
3300
3289
|
}
|
|
3301
3290
|
var feeElement = currency.find(function (item) {
|
|
@@ -3305,13 +3294,16 @@ var resolveFeeAsset = function resolveFeeAsset(api, feeAsset, origin, destinatio
|
|
|
3305
3294
|
if (!feeElement) {
|
|
3306
3295
|
throw new InvalidCurrencyError('Fee asset must be one of the provided assets');
|
|
3307
3296
|
}
|
|
3297
|
+
if (currency.length > 2) {
|
|
3298
|
+
throw new UnsupportedOperationError('Sending more than one non-fee asset is not yet supported');
|
|
3299
|
+
}
|
|
3308
3300
|
return _objectSpread2(_objectSpread2({}, asset), {}, {
|
|
3309
3301
|
amount: abstractDecimals(feeElement.amount, asset.decimals, api)
|
|
3310
3302
|
});
|
|
3311
3303
|
};
|
|
3312
3304
|
|
|
3313
3305
|
var resolveHopAsset = function resolveHopAsset(_ref) {
|
|
3314
|
-
var _api$
|
|
3306
|
+
var _api$findAssetInfoOnD2;
|
|
3315
3307
|
var api = _ref.api,
|
|
3316
3308
|
tx = _ref.tx,
|
|
3317
3309
|
originChain = _ref.originChain,
|
|
@@ -3321,16 +3313,27 @@ var resolveHopAsset = function resolveHopAsset(_ref) {
|
|
|
3321
3313
|
asset = _ref.asset,
|
|
3322
3314
|
currentAsset = _ref.currentAsset,
|
|
3323
3315
|
hasPassedExchange = _ref.hasPassedExchange,
|
|
3324
|
-
currency = _ref.currency
|
|
3325
|
-
|
|
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;
|
|
3326
3320
|
var useRelayAssetAsFee = typeof destination === 'string' && isExternalChain(destination) || isRelayAssetIncluded;
|
|
3327
3321
|
if (useRelayAssetAsFee) {
|
|
3328
|
-
|
|
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;
|
|
3329
3332
|
}
|
|
3330
3333
|
if (hasPassedExchange && swapConfig && currentChain !== swapConfig.exchangeChain) {
|
|
3331
3334
|
return api.findAssetOnDestOrThrow(swapConfig.exchangeChain, currentChain, swapConfig.currencyTo);
|
|
3332
3335
|
}
|
|
3333
|
-
return (_api$
|
|
3336
|
+
return (_api$findAssetInfoOnD2 = api.findAssetInfoOnDest(originChain, currentChain, currency, asset)) !== null && _api$findAssetInfoOnD2 !== void 0 ? _api$findAssetInfoOnD2 : currentAsset;
|
|
3334
3337
|
};
|
|
3335
3338
|
|
|
3336
3339
|
var getEthereumJunction = function getEthereumJunction(api, chain) {
|
|
@@ -3443,6 +3446,13 @@ var resolveOverriddenAsset = function resolveOverriddenAsset(options, isBridge,
|
|
|
3443
3446
|
return undefined;
|
|
3444
3447
|
};
|
|
3445
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
|
+
|
|
3446
3456
|
var validateCurrency = function validateCurrency(currency, feeAsset) {
|
|
3447
3457
|
if (Array.isArray(currency)) {
|
|
3448
3458
|
if (currency.length === 0) {
|
|
@@ -3456,6 +3466,11 @@ var validateCurrency = function validateCurrency(currency, feeAsset) {
|
|
|
3456
3466
|
}
|
|
3457
3467
|
}
|
|
3458
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
|
+
};
|
|
3459
3474
|
var validateDestination = function validateDestination(origin, destination, api) {
|
|
3460
3475
|
if (isRelayChain(origin) && !isTLocation(destination) && isRelayChain(destination) && origin !== destination) {
|
|
3461
3476
|
throw new ScenarioNotSupportedError('Direct relay chain to relay chain transfers are not supported. Please use Polkadot <-> Kusama bridge through AssetHub.');
|
|
@@ -3687,354 +3702,34 @@ var getMythosOriginFee = /*#__PURE__*/function () {
|
|
|
3687
3702
|
};
|
|
3688
3703
|
}();
|
|
3689
3704
|
|
|
3690
|
-
var
|
|
3691
|
-
|
|
3692
|
-
|
|
3693
|
-
} : {
|
|
3694
|
-
X1: [junction]
|
|
3695
|
-
};
|
|
3705
|
+
var evmExtension;
|
|
3706
|
+
var registerEvmExtension = function registerEvmExtension(extension) {
|
|
3707
|
+
evmExtension = extension;
|
|
3696
3708
|
};
|
|
3697
|
-
|
|
3698
|
-
|
|
3699
|
-
return
|
|
3700
|
-
AccountKey20: {
|
|
3701
|
-
key: address
|
|
3702
|
-
}
|
|
3703
|
-
} : {
|
|
3704
|
-
AccountId32: {
|
|
3705
|
-
id: api.accountToHex(address)
|
|
3706
|
-
}
|
|
3707
|
-
};
|
|
3709
|
+
var getEvmExtensionOrThrow = function getEvmExtensionOrThrow() {
|
|
3710
|
+
assertExtensionInstalled(evmExtension, 'EVM', '@paraspell/evm', 'using an EVM origin');
|
|
3711
|
+
return evmExtension;
|
|
3708
3712
|
};
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
destination = _ref.destination,
|
|
3714
|
-
version = _ref.version,
|
|
3715
|
-
paraId = _ref.paraId;
|
|
3716
|
-
if (isTLocation(recipient)) {
|
|
3717
|
-
return recipient;
|
|
3718
|
-
}
|
|
3719
|
-
var scenario = resolveScenario(origin, destination);
|
|
3720
|
-
var accountPayload = createAccountPayload(api, recipient);
|
|
3721
|
-
if (scenario === 'ParaToRelay') {
|
|
3722
|
-
return {
|
|
3723
|
-
parents: Parents.ONE,
|
|
3724
|
-
interior: createX1Payload(version, {
|
|
3725
|
-
AccountId32: {
|
|
3726
|
-
id: api.accountToHex(recipient)
|
|
3727
|
-
}
|
|
3728
|
-
})
|
|
3729
|
-
};
|
|
3730
|
-
} else if (scenario === 'ParaToPara') {
|
|
3731
|
-
return {
|
|
3732
|
-
parents: Parents.ONE,
|
|
3733
|
-
interior: {
|
|
3734
|
-
X2: [{
|
|
3735
|
-
Parachain: paraId
|
|
3736
|
-
}, accountPayload]
|
|
3737
|
-
}
|
|
3738
|
-
};
|
|
3739
|
-
}
|
|
3740
|
-
return {
|
|
3741
|
-
parents: Parents.ZERO,
|
|
3742
|
-
interior: createX1Payload(version, accountPayload)
|
|
3743
|
-
};
|
|
3713
|
+
|
|
3714
|
+
var evmSnowbridgeExtension;
|
|
3715
|
+
var registerEvmSnowbridgeExtension = function registerEvmSnowbridgeExtension(extension) {
|
|
3716
|
+
evmSnowbridgeExtension = extension;
|
|
3744
3717
|
};
|
|
3745
|
-
var
|
|
3746
|
-
|
|
3747
|
-
|
|
3748
|
-
version = _ref2.version;
|
|
3749
|
-
if (isTLocation(address)) return address;
|
|
3750
|
-
var accountPayload = createAccountPayload(api, address);
|
|
3751
|
-
return {
|
|
3752
|
-
parents: Parents.ZERO,
|
|
3753
|
-
interior: createX1Payload(version, accountPayload)
|
|
3754
|
-
};
|
|
3718
|
+
var getEvmSnowbridgeExtensionOrThrow = function getEvmSnowbridgeExtensionOrThrow() {
|
|
3719
|
+
assertExtensionInstalled(evmSnowbridgeExtension, 'EVM Snowbridge', '@paraspell/evm-snowbridge', 'using Ethereum as an origin');
|
|
3720
|
+
return evmSnowbridgeExtension;
|
|
3755
3721
|
};
|
|
3756
3722
|
|
|
3757
|
-
var
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
if (isSubBridge) {
|
|
3761
|
-
return {
|
|
3762
|
-
parents: Parents.TWO,
|
|
3763
|
-
interior: {
|
|
3764
|
-
X2: [{
|
|
3765
|
-
GlobalConsensus: api.getRelayChainOf(destination)
|
|
3766
|
-
}, {
|
|
3767
|
-
Parachain: chainId
|
|
3768
|
-
}]
|
|
3769
|
-
}
|
|
3770
|
-
};
|
|
3771
|
-
}
|
|
3772
|
-
var isExternalDestination = !isLocDestination && isExternalChain(destination);
|
|
3773
|
-
if (isExternalDestination) {
|
|
3774
|
-
return {
|
|
3775
|
-
parents: Parents.TWO,
|
|
3776
|
-
interior: {
|
|
3777
|
-
X1: [getEthereumJunction(api, origin)]
|
|
3778
|
-
}
|
|
3779
|
-
};
|
|
3780
|
-
}
|
|
3781
|
-
var scenario = resolveScenario(origin, destination);
|
|
3782
|
-
var parentsResolved = parents !== null && parents !== void 0 ? parents : scenario === 'RelayToPara' ? Parents.ZERO : Parents.ONE;
|
|
3783
|
-
var interior = scenario === 'ParaToRelay' ? 'Here' : createX1Payload(version, junction !== null && junction !== void 0 ? junction : {
|
|
3784
|
-
Parachain: chainId
|
|
3785
|
-
});
|
|
3786
|
-
return isLocDestination ? destination : {
|
|
3787
|
-
parents: parentsResolved,
|
|
3788
|
-
interior: interior
|
|
3789
|
-
};
|
|
3723
|
+
var swapExtension;
|
|
3724
|
+
var registerSwapExtension = function registerSwapExtension(extension) {
|
|
3725
|
+
swapExtension = extension;
|
|
3790
3726
|
};
|
|
3791
|
-
var
|
|
3792
|
-
|
|
3793
|
-
return
|
|
3727
|
+
var getSwapExtensionOrThrow = function getSwapExtensionOrThrow() {
|
|
3728
|
+
assertExtensionInstalled(swapExtension, 'swap', '@paraspell/swap', 'using swap features');
|
|
3729
|
+
return swapExtension;
|
|
3794
3730
|
};
|
|
3795
3731
|
|
|
3796
|
-
var
|
|
3797
|
-
var fromRelay = isRelayChain(chain);
|
|
3798
|
-
var toRelay = isRelayChain(destChain);
|
|
3799
|
-
var parents = fromRelay ? Parents.ZERO : Parents.ONE;
|
|
3800
|
-
var interior = toRelay ? 'Here' : {
|
|
3801
|
-
X1: [{
|
|
3802
|
-
Parachain: getParaIdImpl(destChain, customCtx)
|
|
3803
|
-
}]
|
|
3804
|
-
};
|
|
3805
|
-
return {
|
|
3806
|
-
parents: parents,
|
|
3807
|
-
interior: interior
|
|
3808
|
-
};
|
|
3809
|
-
};
|
|
3810
|
-
|
|
3811
|
-
/**
|
|
3812
|
-
* This function localizes a location by removing the `Parachain` junction
|
|
3813
|
-
* if it exists. The `parents` field is set to `0` either if a `Parachain` was removed
|
|
3814
|
-
* or if the resulting interior is `'Here'` and the chain is a relay chain.
|
|
3815
|
-
*
|
|
3816
|
-
* @param chain - The current chain
|
|
3817
|
-
* @param location - The location to localize
|
|
3818
|
-
* @returns The localized location
|
|
3819
|
-
*/
|
|
3820
|
-
var localizeLocationInner = function localizeLocationInner(chain, location, origin, resolveRelay, resolveParaId) {
|
|
3821
|
-
var _Object$keys$;
|
|
3822
|
-
var targetRelay = isExternalChain(chain) ? undefined : resolveRelay(chain).toLowerCase();
|
|
3823
|
-
var originRelay = origin && !isExternalChain(origin) ? resolveRelay(origin).toLowerCase() : undefined;
|
|
3824
|
-
var locationConsensus = getJunctionValue(location, 'GlobalConsensus');
|
|
3825
|
-
var locationRelay = locationConsensus ? (_Object$keys$ = Object.keys(locationConsensus)[0]) === null || _Object$keys$ === void 0 ? void 0 : _Object$keys$.toLowerCase() : undefined;
|
|
3826
|
-
var ecosystemDiffers = targetRelay && originRelay && originRelay !== targetRelay;
|
|
3827
|
-
var junctions = location.interior === 'Here' ? [] : flattenJunctions(location.interior);
|
|
3828
|
-
var junctionCount = junctions.length;
|
|
3829
|
-
var isLocationOnTargetRelay = targetRelay !== undefined && locationRelay === targetRelay;
|
|
3830
|
-
// Check if target is an external chain and location's GlobalConsensus matches it
|
|
3831
|
-
var isLocationOnTargetExternal = isExternalChain(chain) && locationRelay === chain.toLowerCase();
|
|
3832
|
-
var isConsensusAnchored = junctions.findIndex(function (junction) {
|
|
3833
|
-
return 'GlobalConsensus' in junction;
|
|
3834
|
-
}) === 0;
|
|
3835
|
-
if (locationRelay && targetRelay && locationRelay !== targetRelay && (!origin || !ecosystemDiffers && isConsensusAnchored)) {
|
|
3836
|
-
return location;
|
|
3837
|
-
}
|
|
3838
|
-
if (origin && ecosystemDiffers && location.parents === Parents.TWO && originRelay !== undefined && targetRelay !== undefined && deepEqual(getJunctionValue(location, 'GlobalConsensus'), _defineProperty({}, targetRelay, null)) && junctionCount === 1) {
|
|
3839
|
-
return RELAY_LOCATION;
|
|
3840
|
-
}
|
|
3841
|
-
var newInterior = location.interior;
|
|
3842
|
-
var parachainRemoved = false;
|
|
3843
|
-
if (location.interior !== 'Here') {
|
|
3844
|
-
var paraId = resolveParaId(chain);
|
|
3845
|
-
var filteredJunctions = junctions.filter(function (junction) {
|
|
3846
|
-
if ('GlobalConsensus' in junction && (isLocationOnTargetRelay || isLocationOnTargetExternal)) {
|
|
3847
|
-
return false;
|
|
3848
|
-
}
|
|
3849
|
-
if ('Parachain' in junction && (!ecosystemDiffers || isLocationOnTargetRelay)) {
|
|
3850
|
-
var paraJunctionId = getJunctionValue(location, 'Parachain');
|
|
3851
|
-
if (paraJunctionId === paraId) {
|
|
3852
|
-
parachainRemoved = true;
|
|
3853
|
-
return false;
|
|
3854
|
-
}
|
|
3855
|
-
}
|
|
3856
|
-
return true;
|
|
3857
|
-
});
|
|
3858
|
-
if (filteredJunctions.length === 0) {
|
|
3859
|
-
newInterior = 'Here';
|
|
3860
|
-
} else {
|
|
3861
|
-
newInterior = _defineProperty({}, "X".concat(filteredJunctions.length), filteredJunctions);
|
|
3862
|
-
}
|
|
3863
|
-
}
|
|
3864
|
-
var isOriginRelayHere = deepEqual(location, RELAY_LOCATION);
|
|
3865
|
-
var hasGlobalConsensus = hasJunction(location, 'GlobalConsensus');
|
|
3866
|
-
if (origin && isExternalChain(chain) && originRelay !== undefined && isOriginRelayHere && !hasGlobalConsensus) {
|
|
3867
|
-
return {
|
|
3868
|
-
parents: Parents.ONE,
|
|
3869
|
-
interior: {
|
|
3870
|
-
X1: [{
|
|
3871
|
-
GlobalConsensus: _defineProperty({}, originRelay, null)
|
|
3872
|
-
}]
|
|
3873
|
-
}
|
|
3874
|
-
};
|
|
3875
|
-
}
|
|
3876
|
-
if (isExternalChain(chain) && location.parents === Parents.TWO && RELAYCHAINS.some(function (relay) {
|
|
3877
|
-
return deepEqual(getJunctionValue(location, 'GlobalConsensus'), _defineProperty({}, relay.toLowerCase(), null));
|
|
3878
|
-
})) {
|
|
3879
|
-
return _objectSpread2(_objectSpread2({}, location), {}, {
|
|
3880
|
-
parents: Parents.ONE
|
|
3881
|
-
});
|
|
3882
|
-
}
|
|
3883
|
-
if (origin && ecosystemDiffers && isOriginRelayHere && !hasGlobalConsensus && originRelay !== undefined) {
|
|
3884
|
-
return {
|
|
3885
|
-
parents: Parents.TWO,
|
|
3886
|
-
interior: {
|
|
3887
|
-
X2: [{
|
|
3888
|
-
GlobalConsensus: _defineProperty({}, originRelay, null)
|
|
3889
|
-
}, {
|
|
3890
|
-
Parachain: resolveParaId(origin)
|
|
3891
|
-
}]
|
|
3892
|
-
}
|
|
3893
|
-
};
|
|
3894
|
-
}
|
|
3895
|
-
if (origin && ecosystemDiffers && newInterior !== 'Here' && !hasGlobalConsensus && originRelay !== undefined) {
|
|
3896
|
-
var _junctions = flattenJunctions(newInterior);
|
|
3897
|
-
var updatedJunctions = [{
|
|
3898
|
-
GlobalConsensus: _defineProperty({}, originRelay, null)
|
|
3899
|
-
}].concat(_toConsumableArray(_junctions));
|
|
3900
|
-
return {
|
|
3901
|
-
parents: Parents.TWO,
|
|
3902
|
-
interior: _defineProperty({}, "X".concat(updatedJunctions.length), updatedJunctions)
|
|
3903
|
-
};
|
|
3904
|
-
}
|
|
3905
|
-
var shouldSetParentsToZero = parachainRemoved || newInterior === 'Here' && isRelayChain(chain) || isLocationOnTargetExternal;
|
|
3906
|
-
return {
|
|
3907
|
-
parents: shouldSetParentsToZero ? Parents.ZERO : location.parents,
|
|
3908
|
-
interior: newInterior
|
|
3909
|
-
};
|
|
3910
|
-
};
|
|
3911
|
-
var localizeLocation = function localizeLocation(chain, location, origin) {
|
|
3912
|
-
return localizeLocationInner(chain, location, origin, function (c) {
|
|
3913
|
-
return getRelayChainOf(c);
|
|
3914
|
-
}, function (c) {
|
|
3915
|
-
return getParaId(c);
|
|
3916
|
-
});
|
|
3917
|
-
};
|
|
3918
|
-
var localizeLocationImpl = function localizeLocationImpl(api, chain, location, origin) {
|
|
3919
|
-
return localizeLocationInner(chain, location, origin, function (c) {
|
|
3920
|
-
return getRelayChainOfImpl(api, c);
|
|
3921
|
-
}, function (c) {
|
|
3922
|
-
return getParaIdImpl(c, api._customCtx);
|
|
3923
|
-
});
|
|
3924
|
-
};
|
|
3925
|
-
|
|
3926
|
-
var reverseTransformLocation = function reverseTransformLocation(location) {
|
|
3927
|
-
var parachainJunction = {
|
|
3928
|
-
Parachain: 1000
|
|
3929
|
-
};
|
|
3930
|
-
var alreadyHasP1000 = location.interior !== 'Here' && Object.values(location.interior).flat().some(function (j) {
|
|
3931
|
-
return _typeof(j) === 'object' && j !== null && 'Parachain' in j && j.Parachain === 1000;
|
|
3932
|
-
});
|
|
3933
|
-
if (alreadyHasP1000) {
|
|
3934
|
-
return _objectSpread2(_objectSpread2({}, location), {}, {
|
|
3935
|
-
parents: Parents.ONE
|
|
3936
|
-
});
|
|
3937
|
-
}
|
|
3938
|
-
var existingJunctions = location.interior === 'Here' ? [] // no other junctions
|
|
3939
|
-
: Object.values(location.interior).flat();
|
|
3940
|
-
var allJunctions = [parachainJunction].concat(_toConsumableArray(existingJunctions));
|
|
3941
|
-
return _objectSpread2(_objectSpread2({}, location), {}, {
|
|
3942
|
-
parents: Parents.ONE,
|
|
3943
|
-
interior: _defineProperty({}, "X".concat(allJunctions.length), allJunctions)
|
|
3944
|
-
});
|
|
3945
|
-
};
|
|
3946
|
-
|
|
3947
|
-
var EMPTY_TOPIC = "0x".concat('00'.repeat(32));
|
|
3948
|
-
var getBridgeDestFee = /*#__PURE__*/function () {
|
|
3949
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(api, destApi, origin, destination, assetInfo, feeAssetInfo, hasSystemFeeAsset, recipient, version) {
|
|
3950
|
-
var systemAsset, transferredAsset, assets, destIsReserve, feeAssetLocation, buyExecution, depositAsset, feesSplitFromAssets, prologue, xcm;
|
|
3951
|
-
return _regenerator().w(function (_context) {
|
|
3952
|
-
while (1) switch (_context.n) {
|
|
3953
|
-
case 0:
|
|
3954
|
-
systemAsset = createAsset(version, MIN_AMOUNT, RELAY_LOCATION);
|
|
3955
|
-
transferredAsset = createAsset(version, assetInfo.amount, normalizeLocation(api.localizeLocation(origin, assetInfo.location), version));
|
|
3956
|
-
assets = hasSystemFeeAsset ? sortAssets([systemAsset, transferredAsset]) : [transferredAsset];
|
|
3957
|
-
destIsReserve = hasSystemFeeAsset ? destination === 'AssetHubPolkadot' : deepEqual(getJunctionValue(assetInfo.location, 'GlobalConsensus'), _defineProperty({}, getRelayChainOf(destination).toLowerCase(), null));
|
|
3958
|
-
feeAssetLocation = hasSystemFeeAsset ? RELAY_LOCATION : assetInfo.location;
|
|
3959
|
-
buyExecution = {
|
|
3960
|
-
BuyExecution: {
|
|
3961
|
-
fees: createAsset(version, MIN_AMOUNT, api.localizeLocation(destination, feeAssetLocation, origin)),
|
|
3962
|
-
weight_limit: 'Unlimited'
|
|
3963
|
-
}
|
|
3964
|
-
};
|
|
3965
|
-
depositAsset = {
|
|
3966
|
-
DepositAsset: {
|
|
3967
|
-
assets: {
|
|
3968
|
-
Wild: hasSystemFeeAsset ? {
|
|
3969
|
-
AllOf: {
|
|
3970
|
-
id: api.localizeLocation(destination, assetInfo.location, origin),
|
|
3971
|
-
fun: 'Fungible'
|
|
3972
|
-
}
|
|
3973
|
-
} : {
|
|
3974
|
-
AllCounted: 1
|
|
3975
|
-
}
|
|
3976
|
-
},
|
|
3977
|
-
beneficiary: createBeneficiaryLocation({
|
|
3978
|
-
api: destApi,
|
|
3979
|
-
address: recipient,
|
|
3980
|
-
version: version
|
|
3981
|
-
})
|
|
3982
|
-
}
|
|
3983
|
-
};
|
|
3984
|
-
feesSplitFromAssets = destIsReserve && hasSystemFeeAsset;
|
|
3985
|
-
prologue = feesSplitFromAssets ? [{
|
|
3986
|
-
ReserveAssetDeposited: [systemAsset]
|
|
3987
|
-
}, buyExecution, {
|
|
3988
|
-
WithdrawAsset: [transferredAsset]
|
|
3989
|
-
}, {
|
|
3990
|
-
ClearOrigin: null
|
|
3991
|
-
}] : [destIsReserve ? {
|
|
3992
|
-
WithdrawAsset: assets
|
|
3993
|
-
} : {
|
|
3994
|
-
ReserveAssetDeposited: assets
|
|
3995
|
-
}, {
|
|
3996
|
-
ClearOrigin: null
|
|
3997
|
-
}, buyExecution];
|
|
3998
|
-
xcm = [].concat(prologue, [buyExecution, depositAsset, {
|
|
3999
|
-
SetTopic: EMPTY_TOPIC
|
|
4000
|
-
}]);
|
|
4001
|
-
return _context.a(2, destApi.getXcmPaymentApiFee(destination, addXcmVersionHeader(xcm, version), [], feeAssetInfo, version, true));
|
|
4002
|
-
}
|
|
4003
|
-
}, _callee);
|
|
4004
|
-
}));
|
|
4005
|
-
return function getBridgeDestFee(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9) {
|
|
4006
|
-
return _ref.apply(this, arguments);
|
|
4007
|
-
};
|
|
4008
|
-
}();
|
|
4009
|
-
|
|
4010
|
-
var evmExtension;
|
|
4011
|
-
var registerEvmExtension = function registerEvmExtension(extension) {
|
|
4012
|
-
evmExtension = extension;
|
|
4013
|
-
};
|
|
4014
|
-
var getEvmExtensionOrThrow = function getEvmExtensionOrThrow() {
|
|
4015
|
-
assertExtensionInstalled(evmExtension, 'EVM', '@paraspell/evm', 'using an EVM origin');
|
|
4016
|
-
return evmExtension;
|
|
4017
|
-
};
|
|
4018
|
-
|
|
4019
|
-
var evmSnowbridgeExtension;
|
|
4020
|
-
var registerEvmSnowbridgeExtension = function registerEvmSnowbridgeExtension(extension) {
|
|
4021
|
-
evmSnowbridgeExtension = extension;
|
|
4022
|
-
};
|
|
4023
|
-
var getEvmSnowbridgeExtensionOrThrow = function getEvmSnowbridgeExtensionOrThrow() {
|
|
4024
|
-
assertExtensionInstalled(evmSnowbridgeExtension, 'EVM Snowbridge', '@paraspell/evm-snowbridge', 'using Ethereum as an origin');
|
|
4025
|
-
return evmSnowbridgeExtension;
|
|
4026
|
-
};
|
|
4027
|
-
|
|
4028
|
-
var swapExtension;
|
|
4029
|
-
var registerSwapExtension = function registerSwapExtension(extension) {
|
|
4030
|
-
swapExtension = extension;
|
|
4031
|
-
};
|
|
4032
|
-
var getSwapExtensionOrThrow = function getSwapExtensionOrThrow() {
|
|
4033
|
-
assertExtensionInstalled(swapExtension, 'swap', '@paraspell/swap', 'using swap features');
|
|
4034
|
-
return swapExtension;
|
|
4035
|
-
};
|
|
4036
|
-
|
|
4037
|
-
var API_TYPES = ['PAPI', 'PJS', 'DEDOT'];
|
|
3732
|
+
var API_TYPES = ['PAPI', 'PJS', 'DEDOT'];
|
|
4038
3733
|
|
|
4039
3734
|
/**
|
|
4040
3735
|
* The options for the batch builder.
|
|
@@ -6000,9 +5695,34 @@ var getParaEthTransferFees = /*#__PURE__*/function () {
|
|
|
6000
5695
|
};
|
|
6001
5696
|
}();
|
|
6002
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
|
+
};
|
|
6003
5723
|
var traverseXcmHops = /*#__PURE__*/function () {
|
|
6004
5724
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(config) {
|
|
6005
|
-
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;
|
|
6006
5726
|
return _regenerator().w(function (_context) {
|
|
6007
5727
|
while (1) switch (_context.p = _context.n) {
|
|
6008
5728
|
case 0:
|
|
@@ -6018,7 +5738,7 @@ var traverseXcmHops = /*#__PURE__*/function () {
|
|
|
6018
5738
|
_context.n = 10;
|
|
6019
5739
|
break;
|
|
6020
5740
|
}
|
|
6021
|
-
nextChain = getTSubstrateChain(nextParaId, api.getRelayChainOf(
|
|
5741
|
+
nextChain = getTSubstrateChain(nextParaId, api.getRelayChainOf(currentOrigin));
|
|
6022
5742
|
if (nextChain) {
|
|
6023
5743
|
_context.n = 2;
|
|
6024
5744
|
break;
|
|
@@ -6066,10 +5786,12 @@ var traverseXcmHops = /*#__PURE__*/function () {
|
|
|
6066
5786
|
hasPassedExchange = true;
|
|
6067
5787
|
currentAsset = api.findAssetOnDestOrThrow(swapConfig.exchangeChain, nextChain, swapConfig.currencyTo);
|
|
6068
5788
|
}
|
|
6069
|
-
|
|
6070
|
-
|
|
6071
|
-
|
|
6072
|
-
|
|
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;
|
|
6073
5795
|
case 7:
|
|
6074
5796
|
_context.p = 7;
|
|
6075
5797
|
_context.n = 8;
|
|
@@ -6128,18 +5850,17 @@ var addEthereumBridgeFees = /*#__PURE__*/function () {
|
|
|
6128
5850
|
}();
|
|
6129
5851
|
|
|
6130
5852
|
var dryRunInternal = /*#__PURE__*/function () {
|
|
6131
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
6132
|
-
var
|
|
6133
|
-
|
|
6134
|
-
|
|
6135
|
-
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) {
|
|
6136
5857
|
case 0:
|
|
6137
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;
|
|
6138
5859
|
resolvedFeeAsset = feeAsset ? resolveFeeAsset(api, feeAsset, origin, destination, currency) : undefined;
|
|
6139
5860
|
_resolveCurrency = resolveCurrency(api, currency, resolvedFeeAsset, origin, destination), assets = _resolveCurrency.assets, asset = _resolveCurrency.asset;
|
|
6140
5861
|
amount = asset.amount;
|
|
6141
5862
|
resolvedVersion = pickCompatibleXcmVersion(api, origin, destination, version);
|
|
6142
|
-
|
|
5863
|
+
_context2.n = 1;
|
|
6143
5864
|
return api.getDryRunCall({
|
|
6144
5865
|
tx: tx,
|
|
6145
5866
|
chain: origin,
|
|
@@ -6156,12 +5877,12 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6156
5877
|
useRootOrigin: useRootOrigin || !!bypassOptions
|
|
6157
5878
|
});
|
|
6158
5879
|
case 1:
|
|
6159
|
-
originDryRun =
|
|
5880
|
+
originDryRun = _context2.v;
|
|
6160
5881
|
if (originDryRun.success) {
|
|
6161
|
-
|
|
5882
|
+
_context2.n = 2;
|
|
6162
5883
|
break;
|
|
6163
5884
|
}
|
|
6164
|
-
return
|
|
5885
|
+
return _context2.a(2, {
|
|
6165
5886
|
success: false,
|
|
6166
5887
|
dryRunError: _objectSpread2({
|
|
6167
5888
|
chainKind: 'origin',
|
|
@@ -6173,27 +5894,27 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6173
5894
|
case 2:
|
|
6174
5895
|
isMythosToEthereum = origin === 'Mythos' && destination === 'Ethereum';
|
|
6175
5896
|
if (!isMythosToEthereum) {
|
|
6176
|
-
|
|
5897
|
+
_context2.n = 4;
|
|
6177
5898
|
break;
|
|
6178
5899
|
}
|
|
6179
|
-
|
|
6180
|
-
|
|
6181
|
-
|
|
6182
|
-
|
|
6183
|
-
|
|
5900
|
+
_t2 = _objectSpread2;
|
|
5901
|
+
_t3 = _objectSpread2({}, originDryRun);
|
|
5902
|
+
_t4 = {};
|
|
5903
|
+
_t5 = originDryRun.fee;
|
|
5904
|
+
_context2.n = 3;
|
|
6184
5905
|
return getMythosOriginFee(api);
|
|
6185
5906
|
case 3:
|
|
6186
|
-
|
|
6187
|
-
|
|
6188
|
-
|
|
6189
|
-
fee:
|
|
5907
|
+
_t6 = _context2.v;
|
|
5908
|
+
_t7 = _t5 + _t6;
|
|
5909
|
+
_t = _t2(_t3, _t4, {
|
|
5910
|
+
fee: _t7
|
|
6190
5911
|
});
|
|
6191
|
-
|
|
5912
|
+
_context2.n = 5;
|
|
6192
5913
|
break;
|
|
6193
5914
|
case 4:
|
|
6194
|
-
|
|
5915
|
+
_t = originDryRun;
|
|
6195
5916
|
case 5:
|
|
6196
|
-
originDryModified =
|
|
5917
|
+
originDryModified = _t;
|
|
6197
5918
|
initialForwardedXcms = originDryModified.forwardedXcms, initialDestParaId = originDryModified.destParaId;
|
|
6198
5919
|
processHop = /*#__PURE__*/function () {
|
|
6199
5920
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(params) {
|
|
@@ -6211,6 +5932,7 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6211
5932
|
asset: asset,
|
|
6212
5933
|
currentAsset: currentAsset,
|
|
6213
5934
|
currency: currency,
|
|
5935
|
+
feeAsset: resolvedFeeAsset,
|
|
6214
5936
|
swapConfig: swapConfig,
|
|
6215
5937
|
hasPassedExchange: hasPassedExchange
|
|
6216
5938
|
});
|
|
@@ -6251,7 +5973,7 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6251
5973
|
return _ref2.apply(this, arguments);
|
|
6252
5974
|
};
|
|
6253
5975
|
}();
|
|
6254
|
-
|
|
5976
|
+
_context2.n = 6;
|
|
6255
5977
|
return traverseXcmHops({
|
|
6256
5978
|
api: api,
|
|
6257
5979
|
origin: origin,
|
|
@@ -6272,7 +5994,7 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6272
5994
|
}
|
|
6273
5995
|
});
|
|
6274
5996
|
case 6:
|
|
6275
|
-
traversalResult =
|
|
5997
|
+
traversalResult = _context2.v;
|
|
6276
5998
|
// Process Ethereum bridge fees
|
|
6277
5999
|
relayChain = api.getRelayChainOf(origin);
|
|
6278
6000
|
bridgeHubChain = relayChain === 'Paseo' ? undefined : "BridgeHub".concat(relayChain);
|
|
@@ -6281,29 +6003,29 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6281
6003
|
return hop.chain === bridgeHubChain;
|
|
6282
6004
|
}); // For Mythos → Ethereum, we skip additional Ethereum bridge fees (aligns with getXcmFeeInternal)
|
|
6283
6005
|
if (!isMythosToEthereum) {
|
|
6284
|
-
|
|
6006
|
+
_context2.n = 7;
|
|
6285
6007
|
break;
|
|
6286
6008
|
}
|
|
6287
|
-
|
|
6288
|
-
|
|
6009
|
+
_t8 = bridgeHubHop === null || bridgeHubHop === void 0 ? void 0 : bridgeHubHop.result;
|
|
6010
|
+
_context2.n = 11;
|
|
6289
6011
|
break;
|
|
6290
6012
|
case 7:
|
|
6291
6013
|
if (!(bridgeHubHop !== null && bridgeHubHop !== void 0 && bridgeHubHop.result.success)) {
|
|
6292
|
-
|
|
6014
|
+
_context2.n = 9;
|
|
6293
6015
|
break;
|
|
6294
6016
|
}
|
|
6295
|
-
|
|
6017
|
+
_context2.n = 8;
|
|
6296
6018
|
return addEthereumBridgeFees(api, bridgeHubHop === null || bridgeHubHop === void 0 ? void 0 : bridgeHubHop.result, destination, assetHubChain);
|
|
6297
6019
|
case 8:
|
|
6298
|
-
|
|
6299
|
-
|
|
6020
|
+
_t9 = _context2.v;
|
|
6021
|
+
_context2.n = 10;
|
|
6300
6022
|
break;
|
|
6301
6023
|
case 9:
|
|
6302
|
-
|
|
6024
|
+
_t9 = bridgeHubHop === null || bridgeHubHop === void 0 ? void 0 : bridgeHubHop.result;
|
|
6303
6025
|
case 10:
|
|
6304
|
-
|
|
6026
|
+
_t8 = _t9;
|
|
6305
6027
|
case 11:
|
|
6306
|
-
processedBridgeHub =
|
|
6028
|
+
processedBridgeHub = _t8;
|
|
6307
6029
|
// Update bridge hub in hops if needed
|
|
6308
6030
|
if (processedBridgeHub && processedBridgeHub.success && bridgeHubHop && bridgeHubHop.result.success && processedBridgeHub.fee !== bridgeHubHop.result.fee) {
|
|
6309
6031
|
bridgeHubHopIndex = traversalResult.hops.findIndex(function (hop) {
|
|
@@ -6315,67 +6037,10 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6315
6037
|
});
|
|
6316
6038
|
}
|
|
6317
6039
|
}
|
|
6318
|
-
resolveBridgeDestination = /*#__PURE__*/function () {
|
|
6319
|
-
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
|
|
6320
|
-
var _api$findAssetInfoOnD;
|
|
6321
|
-
var destApi, systemAsset, hasSystemFeeAsset, destAsset, _t, _t2, _t3;
|
|
6322
|
-
return _regenerator().w(function (_context2) {
|
|
6323
|
-
while (1) switch (_context2.n) {
|
|
6324
|
-
case 0:
|
|
6325
|
-
if (!(isExternalChain(destination) || !isSubstrateBridge(origin, destination))) {
|
|
6326
|
-
_context2.n = 1;
|
|
6327
|
-
break;
|
|
6328
|
-
}
|
|
6329
|
-
return _context2.a(2, undefined);
|
|
6330
|
-
case 1:
|
|
6331
|
-
destApi = api.clone();
|
|
6332
|
-
_context2.n = 2;
|
|
6333
|
-
return destApi.init(destination);
|
|
6334
|
-
case 2:
|
|
6335
|
-
systemAsset = api.findNativeAssetInfoOrThrow(api.getRelayChainOf(origin));
|
|
6336
|
-
hasSystemFeeAsset = deepEqual(getJunctionValue(asset.location, 'GlobalConsensus'), getEthereumJunction(api, origin, false).GlobalConsensus);
|
|
6337
|
-
destAsset = hasSystemFeeAsset ? api.findAssetInfoOrThrow(destination, {
|
|
6338
|
-
symbol: systemAsset.symbol
|
|
6339
|
-
}) : (_api$findAssetInfoOnD = api.findAssetInfoOnDest(origin, destination, currency, asset)) !== null && _api$findAssetInfoOnD !== void 0 ? _api$findAssetInfoOnD : asset;
|
|
6340
|
-
_context2.n = 3;
|
|
6341
|
-
return getBridgeDestFee(api, destApi, origin, destination, asset, destAsset, hasSystemFeeAsset, sender, resolvedVersion);
|
|
6342
|
-
case 3:
|
|
6343
|
-
_t = _context2.v;
|
|
6344
|
-
_t2 = destAsset;
|
|
6345
|
-
_t3 = [];
|
|
6346
|
-
return _context2.a(2, {
|
|
6347
|
-
success: true,
|
|
6348
|
-
fee: _t,
|
|
6349
|
-
asset: _t2,
|
|
6350
|
-
forwardedXcms: _t3
|
|
6351
|
-
});
|
|
6352
|
-
}
|
|
6353
|
-
}, _callee2);
|
|
6354
|
-
}));
|
|
6355
|
-
return function resolveBridgeDestination() {
|
|
6356
|
-
return _ref3.apply(this, arguments);
|
|
6357
|
-
};
|
|
6358
|
-
}();
|
|
6359
|
-
_t11 = originDryModified;
|
|
6360
|
-
if (!((_traversalResult$dest = traversalResult.destination) !== null && _traversalResult$dest !== void 0)) {
|
|
6361
|
-
_context3.n = 12;
|
|
6362
|
-
break;
|
|
6363
|
-
}
|
|
6364
|
-
_t12 = _traversalResult$dest;
|
|
6365
|
-
_context3.n = 14;
|
|
6366
|
-
break;
|
|
6367
|
-
case 12:
|
|
6368
|
-
_context3.n = 13;
|
|
6369
|
-
return resolveBridgeDestination();
|
|
6370
|
-
case 13:
|
|
6371
|
-
_t12 = _context3.v;
|
|
6372
|
-
case 14:
|
|
6373
|
-
_t13 = _t12;
|
|
6374
|
-
_t14 = traversalResult.hops;
|
|
6375
6040
|
result = {
|
|
6376
|
-
origin:
|
|
6377
|
-
destination:
|
|
6378
|
-
hops:
|
|
6041
|
+
origin: originDryModified,
|
|
6042
|
+
destination: traversalResult.destination,
|
|
6043
|
+
hops: traversalResult.hops
|
|
6379
6044
|
};
|
|
6380
6045
|
dryRunError = getDryRunError({
|
|
6381
6046
|
origin: {
|
|
@@ -6388,12 +6053,12 @@ var dryRunInternal = /*#__PURE__*/function () {
|
|
|
6388
6053
|
} : undefined,
|
|
6389
6054
|
hops: result.hops
|
|
6390
6055
|
});
|
|
6391
|
-
return
|
|
6056
|
+
return _context2.a(2, _objectSpread2({
|
|
6392
6057
|
success: !dryRunError,
|
|
6393
6058
|
dryRunError: dryRunError
|
|
6394
6059
|
}, result));
|
|
6395
6060
|
}
|
|
6396
|
-
},
|
|
6061
|
+
}, _callee2);
|
|
6397
6062
|
}));
|
|
6398
6063
|
return function dryRunInternal(_x) {
|
|
6399
6064
|
return _ref.apply(this, arguments);
|
|
@@ -6879,12 +6544,13 @@ var getBypassResultWithRetries = /*#__PURE__*/function () {
|
|
|
6879
6544
|
|
|
6880
6545
|
var getOriginXcmFeeInternal = /*#__PURE__*/function () {
|
|
6881
6546
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(_ref) {
|
|
6882
|
-
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;
|
|
6883
6548
|
return _regenerator().w(function (_context) {
|
|
6884
6549
|
while (1) switch (_context.n) {
|
|
6885
6550
|
case 0:
|
|
6886
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;
|
|
6887
6552
|
resolvedFeeAsset = feeAsset ? resolveFeeAsset(api, feeAsset, origin, destination, currency) : undefined;
|
|
6553
|
+
originFeeAsset = supportsFeeAssetPayment(origin) ? resolvedFeeAsset : undefined;
|
|
6888
6554
|
_resolveCurrency = resolveCurrency(api, currency, resolvedFeeAsset, origin, destination), assets = _resolveCurrency.assets, asset = _resolveCurrency.asset;
|
|
6889
6555
|
_context.n = 1;
|
|
6890
6556
|
return api.init(origin, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
@@ -6900,12 +6566,12 @@ var getOriginXcmFeeInternal = /*#__PURE__*/function () {
|
|
|
6900
6566
|
rawFee = _yield$api$getPayment.partialFee;
|
|
6901
6567
|
paddedFee = padFee(rawFee, origin, destination, 'origin');
|
|
6902
6568
|
_context.n = 3;
|
|
6903
|
-
return isSufficientOrigin(api, origin, destination, sender, paddedFee, asset,
|
|
6569
|
+
return isSufficientOrigin(api, origin, destination, sender, paddedFee, asset, originFeeAsset);
|
|
6904
6570
|
case 3:
|
|
6905
6571
|
sufficient = _context.v;
|
|
6906
6572
|
return _context.a(2, {
|
|
6907
6573
|
fee: paddedFee,
|
|
6908
|
-
asset:
|
|
6574
|
+
asset: originFeeAsset !== null && originFeeAsset !== void 0 ? originFeeAsset : api.findNativeAssetInfoOrThrow(origin),
|
|
6909
6575
|
feeType: 'paymentInfo',
|
|
6910
6576
|
sufficient: sufficient
|
|
6911
6577
|
});
|
|
@@ -7023,7 +6689,7 @@ var getOriginXcmFee = /*#__PURE__*/function () {
|
|
|
7023
6689
|
|
|
7024
6690
|
var getXcmFeeOnce = /*#__PURE__*/function () {
|
|
7025
6691
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(_ref) {
|
|
7026
|
-
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;
|
|
7027
6693
|
return _regenerator().w(function (_context2) {
|
|
7028
6694
|
while (1) switch (_context2.p = _context2.n) {
|
|
7029
6695
|
case 0:
|
|
@@ -7167,6 +6833,7 @@ var getXcmFeeOnce = /*#__PURE__*/function () {
|
|
|
7167
6833
|
asset: asset,
|
|
7168
6834
|
currentAsset: currentAsset,
|
|
7169
6835
|
currency: currency,
|
|
6836
|
+
feeAsset: resolvedFeeAsset,
|
|
7170
6837
|
swapConfig: swapConfig,
|
|
7171
6838
|
hasPassedExchange: hasPassedExchange
|
|
7172
6839
|
});
|
|
@@ -7235,7 +6902,7 @@ var getXcmFeeOnce = /*#__PURE__*/function () {
|
|
|
7235
6902
|
destDryRunError = destResult.dryRunError;
|
|
7236
6903
|
destSufficient = destResult.sufficient;
|
|
7237
6904
|
destAsset = destResult.asset;
|
|
7238
|
-
_context2.n =
|
|
6905
|
+
_context2.n = 16;
|
|
7239
6906
|
break;
|
|
7240
6907
|
case 12:
|
|
7241
6908
|
if (!(traversalResult.hops.length > 0 && traversalResult.hops[traversalResult.hops.length - 1].result.dryRunError)) {
|
|
@@ -7274,36 +6941,14 @@ var getXcmFeeOnce = /*#__PURE__*/function () {
|
|
|
7274
6941
|
destFeeType = destFallback.feeType;
|
|
7275
6942
|
destSufficient = destFallback.sufficient;
|
|
7276
6943
|
destAsset = api.findNativeAssetInfoOrThrow(destination);
|
|
7277
|
-
_context2.n = 19;
|
|
7278
|
-
break;
|
|
7279
|
-
case 15:
|
|
7280
|
-
if (!(!isExternalChain(destination) && isSubstrateBridge(origin, destination))) {
|
|
7281
|
-
_context2.n = 18;
|
|
7282
|
-
break;
|
|
7283
|
-
}
|
|
7284
|
-
_destApi2 = api.clone();
|
|
7285
6944
|
_context2.n = 16;
|
|
7286
|
-
return _destApi2.init(destination, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
7287
|
-
case 16:
|
|
7288
|
-
systemAsset = api.findNativeAssetInfoOrThrow(api.getRelayChainOf(origin));
|
|
7289
|
-
hasSystemFeeAsset = deepEqual(getJunctionValue(asset.location, 'GlobalConsensus'), getEthereumJunction(api, origin, false).GlobalConsensus);
|
|
7290
|
-
destAsset = hasSystemFeeAsset ? api.findAssetInfoOrThrow(destination, {
|
|
7291
|
-
symbol: systemAsset.symbol
|
|
7292
|
-
}) : (_api$findAssetInfoOnD = api.findAssetInfoOnDest(origin, destination, currency, asset)) !== null && _api$findAssetInfoOnD !== void 0 ? _api$findAssetInfoOnD : asset;
|
|
7293
|
-
_context2.n = 17;
|
|
7294
|
-
return getBridgeDestFee(api, _destApi2, origin, destination, asset, destAsset, hasSystemFeeAsset, recipient, resolvedVersion);
|
|
7295
|
-
case 17:
|
|
7296
|
-
destFee = _context2.v;
|
|
7297
|
-
destFeeType = 'dryRun';
|
|
7298
|
-
destSufficient = true;
|
|
7299
|
-
_context2.n = 19;
|
|
7300
6945
|
break;
|
|
7301
|
-
case
|
|
6946
|
+
case 15:
|
|
7302
6947
|
destFee = 0n;
|
|
7303
6948
|
destFeeType = 'noFeeRequired';
|
|
7304
6949
|
destSufficient = true;
|
|
7305
6950
|
destAsset = api.findNativeAssetInfoOrThrow(destination);
|
|
7306
|
-
case
|
|
6951
|
+
case 16:
|
|
7307
6952
|
// Process Ethereum bridge fees
|
|
7308
6953
|
relayChain = api.getRelayChainOf(origin);
|
|
7309
6954
|
bridgeHubChain = relayChain === 'Paseo' ? undefined : "BridgeHub".concat(relayChain);
|
|
@@ -7312,18 +6957,18 @@ var getXcmFeeOnce = /*#__PURE__*/function () {
|
|
|
7312
6957
|
return hop.chain === bridgeHubChain;
|
|
7313
6958
|
});
|
|
7314
6959
|
if (!isMythosToEthereum) {
|
|
7315
|
-
_context2.n =
|
|
6960
|
+
_context2.n = 17;
|
|
7316
6961
|
break;
|
|
7317
6962
|
}
|
|
7318
6963
|
_t4 = bridgeHubHop === null || bridgeHubHop === void 0 ? void 0 : bridgeHubHop.result;
|
|
7319
|
-
_context2.n =
|
|
6964
|
+
_context2.n = 19;
|
|
7320
6965
|
break;
|
|
7321
|
-
case
|
|
7322
|
-
_context2.n =
|
|
6966
|
+
case 17:
|
|
6967
|
+
_context2.n = 18;
|
|
7323
6968
|
return addEthereumBridgeFees(api, bridgeHubHop === null || bridgeHubHop === void 0 ? void 0 : bridgeHubHop.result, destination, assetHubChain);
|
|
7324
|
-
case
|
|
6969
|
+
case 18:
|
|
7325
6970
|
_t4 = _context2.v;
|
|
7326
|
-
case
|
|
6971
|
+
case 19:
|
|
7327
6972
|
processedBridgeHub = _t4;
|
|
7328
6973
|
// Update bridge hub fee in hops if needed
|
|
7329
6974
|
if (processedBridgeHub && bridgeHubHop && processedBridgeHub.fee !== bridgeHubHop.result.fee) {
|
|
@@ -7941,11 +7586,13 @@ var getTransferInfo = /*#__PURE__*/function () {
|
|
|
7941
7586
|
var FEE_PADDING = 30;
|
|
7942
7587
|
var sumHopFees = function sumHopFees(result, _ref) {
|
|
7943
7588
|
var assetInfo = _ref.assetInfo,
|
|
7589
|
+
feeAssetInfo = _ref.feeAssetInfo,
|
|
7944
7590
|
isRelayAsset = _ref.isRelayAsset,
|
|
7945
7591
|
systemAsset = _ref.systemAsset;
|
|
7592
|
+
var feeAsset = isRelayAsset ? assetInfo : feeAssetInfo !== null && feeAssetInfo !== void 0 ? feeAssetInfo : systemAsset;
|
|
7946
7593
|
return result.hops.reduce(function (acc, hop) {
|
|
7947
7594
|
// only add if asset is equal
|
|
7948
|
-
return isAssetEqual(hop.result.asset,
|
|
7595
|
+
return isAssetEqual(hop.result.asset, feeAsset) ? acc + hop.result.fee : acc;
|
|
7949
7596
|
}, 0n);
|
|
7950
7597
|
};
|
|
7951
7598
|
var computeAllFees = /*#__PURE__*/function () {
|
|
@@ -8357,57 +8004,259 @@ var getTransferableAmount = /*#__PURE__*/function () {
|
|
|
8357
8004
|
};
|
|
8358
8005
|
}();
|
|
8359
8006
|
|
|
8360
|
-
var
|
|
8361
|
-
|
|
8362
|
-
|
|
8363
|
-
|
|
8364
|
-
|
|
8365
|
-
|
|
8366
|
-
// Direct A → C: when origin is reserve OR dest is reserve, check origin <-> dest trust
|
|
8367
|
-
// Hop A → B → C: when reserve differs from both, check origin <-> reserve trust
|
|
8368
|
-
var isDirect = origin.chain === reserve.chain || dest.chain === reserve.chain;
|
|
8369
|
-
var chainToCheck = isDirect ? dest.chain : reserve.chain;
|
|
8370
|
-
var canTeleport = isTrustedChain(origin.chain) && isTrustedChain(chainToCheck) || isNativeAssetTeleport(origin.api, origin.chain, chainToCheck, assetInfo);
|
|
8371
|
-
if (canTeleport && !isSubBridge) return 'Teleport';
|
|
8372
|
-
if (origin.chain === reserve.chain) return 'LocalReserve';
|
|
8373
|
-
return 'DestinationReserve';
|
|
8007
|
+
var createX1Payload = function createX1Payload(version, junction) {
|
|
8008
|
+
return version === Version.V3 ? {
|
|
8009
|
+
X1: junction
|
|
8010
|
+
} : {
|
|
8011
|
+
X1: [junction]
|
|
8012
|
+
};
|
|
8374
8013
|
};
|
|
8375
|
-
|
|
8376
|
-
|
|
8377
|
-
|
|
8378
|
-
|
|
8379
|
-
|
|
8380
|
-
|
|
8381
|
-
|
|
8382
|
-
|
|
8383
|
-
|
|
8384
|
-
|
|
8385
|
-
|
|
8386
|
-
|
|
8387
|
-
|
|
8388
|
-
var
|
|
8389
|
-
|
|
8390
|
-
|
|
8391
|
-
|
|
8392
|
-
|
|
8393
|
-
|
|
8394
|
-
|
|
8395
|
-
|
|
8396
|
-
|
|
8397
|
-
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
|
+
}
|
|
8398
8057
|
return {
|
|
8399
|
-
|
|
8400
|
-
|
|
8401
|
-
|
|
8402
|
-
|
|
8403
|
-
|
|
8404
|
-
|
|
8405
|
-
|
|
8406
|
-
|
|
8407
|
-
|
|
8408
|
-
|
|
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);
|
|
8409
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
|
|
8224
|
+
};
|
|
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
|
|
8410
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
|
+
});
|
|
8411
8260
|
};
|
|
8412
8261
|
|
|
8413
8262
|
var PINK_LOCATION = {
|
|
@@ -8430,6 +8279,13 @@ var requiresSystemAssetByLocation = function requiresSystemAssetByLocation(api,
|
|
|
8430
8279
|
return deepEqual(assetLocation, location);
|
|
8431
8280
|
});
|
|
8432
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
|
+
};
|
|
8433
8289
|
var getBridgeReserve = function getBridgeReserve(api, chain, destination, location) {
|
|
8434
8290
|
var assetConsensus = getJunctionValue(location, 'GlobalConsensus');
|
|
8435
8291
|
var ethereumConsensus = getEthereumJunction(api, chain, false).GlobalConsensus;
|
|
@@ -8449,17 +8305,23 @@ var resolveReserveChain = function resolveReserveChain(api, chain, destination,
|
|
|
8449
8305
|
return api.getAssetReserveChain(chain, assetLocation, isExternalChain(destination));
|
|
8450
8306
|
};
|
|
8451
8307
|
var createTypeAndThenCallContext = /*#__PURE__*/function () {
|
|
8452
|
-
var
|
|
8308
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options, overrides) {
|
|
8453
8309
|
var _overrides$noFeeAsset;
|
|
8454
|
-
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;
|
|
8455
8311
|
return _regenerator().w(function (_context) {
|
|
8456
8312
|
while (1) switch (_context.n) {
|
|
8457
8313
|
case 0:
|
|
8458
|
-
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;
|
|
8459
8315
|
assertToIsString(destination);
|
|
8460
8316
|
isSubBridge = isSubstrateBridge(chain, destination);
|
|
8461
|
-
isSb = isSnowbridge(chain, destination);
|
|
8462
|
-
|
|
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);
|
|
8463
8325
|
NO_FEE_ASSET_LOCS = [RELAY_LOCATION, {
|
|
8464
8326
|
parents: 2,
|
|
8465
8327
|
interior: {
|
|
@@ -8496,19 +8358,26 @@ var createTypeAndThenCallContext = /*#__PURE__*/function () {
|
|
|
8496
8358
|
isForeignRelayToExternal = isExternalDestination && !chain.startsWith('AssetHub') && assetInfo.location.parents === 2 && RELAYCHAINS.some(function (relay) {
|
|
8497
8359
|
return relay !== originRelayChain && deepEqual(assetGlobalConsensus, _defineProperty({}, relay.toLowerCase(), null));
|
|
8498
8360
|
});
|
|
8499
|
-
isRelayAsset = !requiresSystemAsset && !isForeignRelayToExternal && (isAssetHubToExternal || NO_FEE_ASSET_LOCS.some(function (loc) {
|
|
8361
|
+
isRelayAsset = !feeAssetInfo && !requiresSystemAsset && !isForeignRelayToExternal && (isAssetHubToExternal || NO_FEE_ASSET_LOCS.some(function (loc) {
|
|
8500
8362
|
return deepEqual(assetInfo.location, loc);
|
|
8501
8363
|
}) || isSubBridge || ((_overrides$noFeeAsset = overrides.noFeeAsset) !== null && _overrides$noFeeAsset !== void 0 ? _overrides$noFeeAsset : false));
|
|
8502
8364
|
assetHubChain = "AssetHub".concat(originRelayChain);
|
|
8503
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:
|
|
8504
8373
|
destApi = api.clone();
|
|
8505
|
-
_context.n =
|
|
8374
|
+
_context.n = 2;
|
|
8506
8375
|
return destApi.init(destination);
|
|
8507
|
-
case
|
|
8376
|
+
case 2:
|
|
8508
8377
|
reserveApi = reserveChain === chain ? api : reserveChain === destination ? destApi : api.clone();
|
|
8509
|
-
_context.n =
|
|
8378
|
+
_context.n = 3;
|
|
8510
8379
|
return reserveApi.init(reserveChain);
|
|
8511
|
-
case
|
|
8380
|
+
case 3:
|
|
8512
8381
|
return _context.a(2, {
|
|
8513
8382
|
origin: {
|
|
8514
8383
|
api: api,
|
|
@@ -8526,6 +8395,8 @@ var createTypeAndThenCallContext = /*#__PURE__*/function () {
|
|
|
8526
8395
|
isSnowbridge: isSb,
|
|
8527
8396
|
isRelayAsset: isRelayAsset,
|
|
8528
8397
|
assetInfo: assetInfo,
|
|
8398
|
+
feeAssetInfo: feeAssetInfo,
|
|
8399
|
+
feeReserveChain: feeReserveChain,
|
|
8529
8400
|
options: options,
|
|
8530
8401
|
systemAsset: systemAsset,
|
|
8531
8402
|
bridgeHopChain: bridgeHopChain
|
|
@@ -8534,9 +8405,69 @@ var createTypeAndThenCallContext = /*#__PURE__*/function () {
|
|
|
8534
8405
|
}, _callee);
|
|
8535
8406
|
}));
|
|
8536
8407
|
return function createTypeAndThenCallContext(_x, _x2) {
|
|
8537
|
-
return
|
|
8408
|
+
return _ref3.apply(this, arguments);
|
|
8409
|
+
};
|
|
8410
|
+
}();
|
|
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;
|
|
8538
8449
|
};
|
|
8539
|
-
|
|
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
|
+
};
|
|
8540
8471
|
|
|
8541
8472
|
var generateMessageId = /*#__PURE__*/function () {
|
|
8542
8473
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(api, senderAddress, sourceParaId, tokenAddress, recipient, amount) {
|
|
@@ -8666,7 +8597,7 @@ var createCustomXcm = /*#__PURE__*/function () {
|
|
|
8666
8597
|
setTopic = messageId ? [{
|
|
8667
8598
|
SetTopic: messageId
|
|
8668
8599
|
}] : [];
|
|
8669
|
-
feeAssetLocation =
|
|
8600
|
+
feeAssetLocation = getFeeAssetLocation(context);
|
|
8670
8601
|
feeLocLocalized = origin.api.localizeLocation(dest.chain, feeAssetLocation, origin.chain);
|
|
8671
8602
|
assetLocLocalized = origin.api.localizeLocation(dest.chain, assetInfo.location, origin.chain);
|
|
8672
8603
|
asset = createAsset(version, assetInfo.amount, assetLocLocalized);
|
|
@@ -8699,7 +8630,7 @@ var createCustomXcm = /*#__PURE__*/function () {
|
|
|
8699
8630
|
return localizeFilterAsset(asset.fun.Fungible, extractAssetLocation(asset));
|
|
8700
8631
|
})));
|
|
8701
8632
|
} else {
|
|
8702
|
-
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)));
|
|
8703
8634
|
assetsFilter.push(localizeFilterAsset(assetInfo.amount, assetInfo.location));
|
|
8704
8635
|
}
|
|
8705
8636
|
isAssetEthereumNative = deepEqual(getJunctionValue(assetInfo.location, 'GlobalConsensus'), getEthereumJunction(origin.api, origin.chain, false).GlobalConsensus);
|
|
@@ -8719,7 +8650,7 @@ var createCustomXcm = /*#__PURE__*/function () {
|
|
|
8719
8650
|
AllCounted: assetCount
|
|
8720
8651
|
}
|
|
8721
8652
|
} : {
|
|
8722
|
-
Definite: assetsFilter
|
|
8653
|
+
Definite: sortAssets(assetsFilter)
|
|
8723
8654
|
};
|
|
8724
8655
|
buyExecutionAsset = isExternalChain(dest.chain) ? createAsset(version, buyExecutionAmount, assetLocLocalized) : createAsset(version, normalizeAmount(buyExecutionAmount), feeLocLocalized);
|
|
8725
8656
|
buyExecution = {
|
|
@@ -8793,17 +8724,25 @@ var createCustomXcm = /*#__PURE__*/function () {
|
|
|
8793
8724
|
};
|
|
8794
8725
|
}();
|
|
8795
8726
|
|
|
8796
|
-
var buildAssets = function buildAssets(
|
|
8797
|
-
var
|
|
8798
|
-
|
|
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
|
+
};
|
|
8799
8739
|
if (overriddenAsset) {
|
|
8800
|
-
return overriddenAsset
|
|
8801
|
-
|
|
8802
|
-
|
|
8803
|
-
if (!isRelayAsset) {
|
|
8804
|
-
assets.push(createAsset(version, feeAmount, RELAY_LOCATION));
|
|
8740
|
+
return sortAssets(overriddenAsset.map(function (asset) {
|
|
8741
|
+
return localize(asset.fun.Fungible, extractAssetLocation(asset));
|
|
8742
|
+
}));
|
|
8805
8743
|
}
|
|
8806
|
-
assets
|
|
8744
|
+
var assets = isRelayAsset ? [] : [localize(feeAmount, getFeeAssetLocation(context))];
|
|
8745
|
+
assets.push(localize(assetInfo.amount, assetInfo.location));
|
|
8807
8746
|
return sortAssets(assets);
|
|
8808
8747
|
};
|
|
8809
8748
|
var resolveAssetCount = function resolveAssetCount(overriddenAsset, isRelayAsset) {
|
|
@@ -8814,22 +8753,20 @@ var resolveAssetCount = function resolveAssetCount(overriddenAsset, isRelayAsset
|
|
|
8814
8753
|
};
|
|
8815
8754
|
var DEFAULT_SYSTEM_ASSET_AMOUNT = '1';
|
|
8816
8755
|
var DEFAULT_SYSTEM_ASSET_AMOUNT_EXTERNAL = '10';
|
|
8817
|
-
var resolveSystemAssetAmount = function resolveSystemAssetAmount(
|
|
8818
|
-
var systemAsset =
|
|
8819
|
-
|
|
8756
|
+
var resolveSystemAssetAmount = function resolveSystemAssetAmount(_ref, isForFeeCalc, fees) {
|
|
8757
|
+
var systemAsset = _ref.systemAsset,
|
|
8758
|
+
feeAssetInfo = _ref.feeAssetInfo,
|
|
8759
|
+
dest = _ref.dest;
|
|
8820
8760
|
if (isForFeeCalc) {
|
|
8821
8761
|
var defaultAmount = isExternalChain(dest.chain) ? DEFAULT_SYSTEM_ASSET_AMOUNT_EXTERNAL : DEFAULT_SYSTEM_ASSET_AMOUNT;
|
|
8822
|
-
return parseUnits(defaultAmount, systemAsset.decimals);
|
|
8762
|
+
return parseUnits(defaultAmount, (feeAssetInfo !== null && feeAssetInfo !== void 0 ? feeAssetInfo : systemAsset).decimals);
|
|
8823
8763
|
}
|
|
8824
8764
|
return normalizeAmount(fees.destFee + fees.hopFees);
|
|
8825
8765
|
};
|
|
8826
8766
|
var constructTypeAndThenCall = /*#__PURE__*/function () {
|
|
8827
|
-
var
|
|
8767
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(context) {
|
|
8828
8768
|
var fees,
|
|
8829
|
-
origin,
|
|
8830
|
-
assetInfo,
|
|
8831
8769
|
isRelayAsset,
|
|
8832
|
-
options,
|
|
8833
8770
|
overriddenAsset,
|
|
8834
8771
|
assetCount,
|
|
8835
8772
|
resolvedFees,
|
|
@@ -8842,8 +8779,7 @@ var constructTypeAndThenCall = /*#__PURE__*/function () {
|
|
|
8842
8779
|
while (1) switch (_context.n) {
|
|
8843
8780
|
case 0:
|
|
8844
8781
|
fees = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;
|
|
8845
|
-
|
|
8846
|
-
overriddenAsset = options.overriddenAsset;
|
|
8782
|
+
isRelayAsset = context.isRelayAsset, overriddenAsset = context.options.overriddenAsset;
|
|
8847
8783
|
assetCount = resolveAssetCount(overriddenAsset, isRelayAsset);
|
|
8848
8784
|
resolvedFees = fees !== null && fees !== void 0 ? fees : {
|
|
8849
8785
|
hopFees: 0n,
|
|
@@ -8855,20 +8791,20 @@ var constructTypeAndThenCall = /*#__PURE__*/function () {
|
|
|
8855
8791
|
return createCustomXcm(context, assetCount, isForFeeCalc, systemAssetAmount, resolvedFees);
|
|
8856
8792
|
case 1:
|
|
8857
8793
|
customXcm = _context.v;
|
|
8858
|
-
assets = buildAssets(
|
|
8794
|
+
assets = buildAssets(context, systemAssetAmount);
|
|
8859
8795
|
return _context.a(2, buildTypeAndThenCall(context, isRelayAsset, customXcm, assets));
|
|
8860
8796
|
}
|
|
8861
8797
|
}, _callee);
|
|
8862
8798
|
}));
|
|
8863
8799
|
return function constructTypeAndThenCall(_x) {
|
|
8864
|
-
return
|
|
8800
|
+
return _ref2.apply(this, arguments);
|
|
8865
8801
|
};
|
|
8866
8802
|
}();
|
|
8867
8803
|
/**
|
|
8868
8804
|
* Creates a type and then call for transferring assets using XCM. Works only for DOT and snowbridge assets so far.
|
|
8869
8805
|
*/
|
|
8870
8806
|
var createTypeAndThenCall = /*#__PURE__*/function () {
|
|
8871
|
-
var
|
|
8807
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(options) {
|
|
8872
8808
|
var overrides,
|
|
8873
8809
|
context,
|
|
8874
8810
|
origin,
|
|
@@ -8905,7 +8841,7 @@ var createTypeAndThenCall = /*#__PURE__*/function () {
|
|
|
8905
8841
|
case 3:
|
|
8906
8842
|
_context3.n = 4;
|
|
8907
8843
|
return computeAllFees(context, /*#__PURE__*/function () {
|
|
8908
|
-
var
|
|
8844
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(amount, relative) {
|
|
8909
8845
|
var overridenAmount, _t, _t2;
|
|
8910
8846
|
return _regenerator().w(function (_context2) {
|
|
8911
8847
|
while (1) switch (_context2.n) {
|
|
@@ -8925,7 +8861,7 @@ var createTypeAndThenCall = /*#__PURE__*/function () {
|
|
|
8925
8861
|
}, _callee2);
|
|
8926
8862
|
}));
|
|
8927
8863
|
return function (_x3, _x4) {
|
|
8928
|
-
return
|
|
8864
|
+
return _ref4.apply(this, arguments);
|
|
8929
8865
|
};
|
|
8930
8866
|
}());
|
|
8931
8867
|
case 4:
|
|
@@ -8935,7 +8871,7 @@ var createTypeAndThenCall = /*#__PURE__*/function () {
|
|
|
8935
8871
|
}, _callee3);
|
|
8936
8872
|
}));
|
|
8937
8873
|
return function createTypeAndThenCall(_x2) {
|
|
8938
|
-
return
|
|
8874
|
+
return _ref3.apply(this, arguments);
|
|
8939
8875
|
};
|
|
8940
8876
|
}();
|
|
8941
8877
|
|
|
@@ -9219,6 +9155,66 @@ var verifyEdOnDestination = /*#__PURE__*/function () {
|
|
|
9219
9155
|
};
|
|
9220
9156
|
}();
|
|
9221
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
|
+
|
|
9222
9218
|
var transferPolkadotXcm = /*#__PURE__*/function () {
|
|
9223
9219
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options) {
|
|
9224
9220
|
var method,
|
|
@@ -9230,6 +9226,7 @@ var transferPolkadotXcm = /*#__PURE__*/function () {
|
|
|
9230
9226
|
beneficiaryLocation,
|
|
9231
9227
|
multiAsset,
|
|
9232
9228
|
overriddenAsset,
|
|
9229
|
+
feeAssetInfo,
|
|
9233
9230
|
pallet,
|
|
9234
9231
|
version,
|
|
9235
9232
|
methodOverride,
|
|
@@ -9246,7 +9243,7 @@ var transferPolkadotXcm = /*#__PURE__*/function () {
|
|
|
9246
9243
|
case 0:
|
|
9247
9244
|
method = _args.length > 1 && _args[1] !== undefined ? _args[1] : 'transfer_assets_using_type_and_then';
|
|
9248
9245
|
fees = _args.length > 2 && _args[2] !== undefined ? _args[2] : undefined;
|
|
9249
|
-
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;
|
|
9250
9247
|
if (!(method === 'transfer_assets_using_type_and_then')) {
|
|
9251
9248
|
_context.n = 2;
|
|
9252
9249
|
break;
|
|
@@ -9260,6 +9257,7 @@ var transferPolkadotXcm = /*#__PURE__*/function () {
|
|
|
9260
9257
|
case 1:
|
|
9261
9258
|
return _context.a(2, _t.deserializeExtrinsics.call(_t, _context.v));
|
|
9262
9259
|
case 2:
|
|
9260
|
+
validateFeeAssetSupport(asset, feeAssetInfo, overriddenAsset, methodOverride !== null && methodOverride !== void 0 ? methodOverride : method);
|
|
9263
9261
|
resolvedMultiAssets = maybeOverrideAssets(version, asset.amount, [multiAsset], overriddenAsset);
|
|
9264
9262
|
destLocation = createDestination(api, version, chain, destination, paraIdTo);
|
|
9265
9263
|
feeAssetIndex = overriddenAsset === undefined ? DEFAULT_FEE_ASSET : overriddenAsset.findIndex(function (asset) {
|
|
@@ -9314,6 +9312,13 @@ var applyDecimalAbstraction = function applyDecimalAbstraction(amount, decimals,
|
|
|
9314
9312
|
return parseUnits(amount.toString(), decimals);
|
|
9315
9313
|
};
|
|
9316
9314
|
|
|
9315
|
+
var createAllCountedFilter = function createAllCountedFilter(count) {
|
|
9316
|
+
return {
|
|
9317
|
+
Wild: {
|
|
9318
|
+
AllCounted: count
|
|
9319
|
+
}
|
|
9320
|
+
};
|
|
9321
|
+
};
|
|
9317
9322
|
var createAssetsFilter = function createAssetsFilter(asset, version) {
|
|
9318
9323
|
var location = extractAssetLocation(asset);
|
|
9319
9324
|
var id = createAssetId(version, location);
|
|
@@ -9344,7 +9349,10 @@ var prepareExecuteContext = function prepareExecuteContext(_ref) {
|
|
|
9344
9349
|
destChain = _ref.destChain,
|
|
9345
9350
|
assetInfo = _ref.assetInfo,
|
|
9346
9351
|
feeAssetInfo = _ref.feeAssetInfo,
|
|
9347
|
-
|
|
9352
|
+
_ref$fees = _ref.fees,
|
|
9353
|
+
originFee = _ref$fees.originFee,
|
|
9354
|
+
reserveFee = _ref$fees.reserveFee,
|
|
9355
|
+
destFee = _ref$fees.destFee,
|
|
9348
9356
|
version = _ref.version;
|
|
9349
9357
|
var amount = assetInfo.amount;
|
|
9350
9358
|
var reserveChain = api.getAssetReserveChain(chain, assetInfo.location);
|
|
@@ -9352,10 +9360,13 @@ var prepareExecuteContext = function prepareExecuteContext(_ref) {
|
|
|
9352
9360
|
var assetLocalized = createAsset(version, amount, api.localizeLocation(chain, assetInfo.location));
|
|
9353
9361
|
var assetLocalizedToDest = createAsset(version, amount, localizeLocation(destChain, assetInfo.location));
|
|
9354
9362
|
var assetLocalizedToReserve = createAsset(version, amount, api.localizeLocation(reserveChain !== null && reserveChain !== void 0 ? reserveChain : chain, assetInfo.location));
|
|
9355
|
-
var
|
|
9356
|
-
var
|
|
9357
|
-
var
|
|
9358
|
-
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);
|
|
9359
9370
|
return {
|
|
9360
9371
|
amount: amount,
|
|
9361
9372
|
asset: asset,
|
|
@@ -9366,6 +9377,7 @@ var prepareExecuteContext = function prepareExecuteContext(_ref) {
|
|
|
9366
9377
|
feeAssetLocalized: feeAssetLocalized,
|
|
9367
9378
|
feeAssetLocalizedToDest: feeAssetLocalizedToDest,
|
|
9368
9379
|
feeAssetLocalizedToReserve: feeAssetLocalizedToReserve,
|
|
9380
|
+
feeReserveChain: feeReserveChain,
|
|
9369
9381
|
reserveChain: reserveChain
|
|
9370
9382
|
};
|
|
9371
9383
|
};
|
|
@@ -9377,6 +9389,12 @@ var updateAsset = function updateAsset(asset, amount) {
|
|
|
9377
9389
|
}
|
|
9378
9390
|
});
|
|
9379
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
|
+
};
|
|
9380
9398
|
var getInstructionType = function getInstructionType(api, version, origin, destination, assetInfo, reserveChain, transactOptions) {
|
|
9381
9399
|
if (version >= Version.V5 && transactOptions !== null && transactOptions !== void 0 && transactOptions.call) {
|
|
9382
9400
|
return 'InitiateTransfer';
|
|
@@ -9385,7 +9403,7 @@ var getInstructionType = function getInstructionType(api, version, origin, desti
|
|
|
9385
9403
|
return 'InitiateTeleportToReserve';
|
|
9386
9404
|
}
|
|
9387
9405
|
// Trusted chains (or native-asset teleports to/from AssetHub) can teleport
|
|
9388
|
-
if (
|
|
9406
|
+
if (isTeleportLeg(api, origin, destination, assetInfo)) {
|
|
9389
9407
|
return 'InitiateTeleport';
|
|
9390
9408
|
}
|
|
9391
9409
|
// If we need intermediary reserve (not on reserve chain)
|
|
@@ -9396,7 +9414,7 @@ var getInstructionType = function getInstructionType(api, version, origin, desti
|
|
|
9396
9414
|
return 'DepositAsset';
|
|
9397
9415
|
};
|
|
9398
9416
|
var getInitiateTransferType = function getInitiateTransferType(api, origin, destination, assetInfo, reserveChain) {
|
|
9399
|
-
if (
|
|
9417
|
+
if (isTeleportLeg(api, origin, destination, assetInfo)) {
|
|
9400
9418
|
return 'Teleport';
|
|
9401
9419
|
}
|
|
9402
9420
|
if (origin === reserveChain) return 'ReserveDeposit';
|
|
@@ -9407,13 +9425,13 @@ var createBaseExecuteXcm = function createBaseExecuteXcm(options) {
|
|
|
9407
9425
|
chain = options.chain,
|
|
9408
9426
|
destChain = options.destChain,
|
|
9409
9427
|
assetInfo = options.assetInfo,
|
|
9428
|
+
feeAssetInfo = options.feeAssetInfo,
|
|
9410
9429
|
_options$fees = options.fees,
|
|
9411
9430
|
originFee = _options$fees.originFee,
|
|
9412
9431
|
reserveFee = _options$fees.reserveFee,
|
|
9413
9432
|
version = options.version,
|
|
9414
9433
|
paraIdTo = options.paraIdTo,
|
|
9415
9434
|
transactOptions = options.transactOptions,
|
|
9416
|
-
useFeeAssetOnHops = options.useFeeAssetOnHops,
|
|
9417
9435
|
_options$suffixXcm = options.suffixXcm,
|
|
9418
9436
|
suffixXcm = _options$suffixXcm === void 0 ? [] : _options$suffixXcm;
|
|
9419
9437
|
var _prepareExecuteContex = prepareExecuteContext(options),
|
|
@@ -9422,11 +9440,13 @@ var createBaseExecuteXcm = function createBaseExecuteXcm(options) {
|
|
|
9422
9440
|
assetLocalizedToReserve = _prepareExecuteContex.assetLocalizedToReserve,
|
|
9423
9441
|
assetLocalizedToDest = _prepareExecuteContex.assetLocalizedToDest,
|
|
9424
9442
|
feeAsset = _prepareExecuteContex.feeAsset,
|
|
9443
|
+
feeAssetLocalized = _prepareExecuteContex.feeAssetLocalized,
|
|
9425
9444
|
feeAssetLocalizedToReserve = _prepareExecuteContex.feeAssetLocalizedToReserve,
|
|
9426
9445
|
feeAssetLocalizedToDest = _prepareExecuteContex.feeAssetLocalizedToDest,
|
|
9446
|
+
feeReserveChain = _prepareExecuteContex.feeReserveChain,
|
|
9427
9447
|
reserveChain = _prepareExecuteContex.reserveChain;
|
|
9428
|
-
var
|
|
9429
|
-
var
|
|
9448
|
+
var isReserveDest = reserveChain === destChain;
|
|
9449
|
+
var hopFeeAssetToReserve = isReserveDest ? feeAssetLocalizedToDest : feeAssetLocalizedToReserve;
|
|
9430
9450
|
// When fees are paid in a separate asset, originFee is denominated in that asset's
|
|
9431
9451
|
// currency and must not be subtracted from the transfer amount.
|
|
9432
9452
|
var originFeeDeduction = feeAsset ? 0n : originFee;
|
|
@@ -9434,29 +9454,41 @@ var createBaseExecuteXcm = function createBaseExecuteXcm(options) {
|
|
|
9434
9454
|
if (chain !== 'AssetHubPolkadot' && reserveChain === undefined) {
|
|
9435
9455
|
throw new UnsupportedOperationError('Sending local reserve assets with custom fee asset is not yet supported for this chain.');
|
|
9436
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
|
+
}
|
|
9437
9460
|
var transferType = getInstructionType(api, version, chain, destChain, assetInfo, reserveChain, transactOptions);
|
|
9438
|
-
var
|
|
9439
|
-
|
|
9440
|
-
|
|
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."));
|
|
9441
9468
|
}
|
|
9442
|
-
}
|
|
9443
|
-
var
|
|
9444
|
-
var
|
|
9445
|
-
|
|
9446
|
-
|
|
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);
|
|
9475
|
+
}
|
|
9476
|
+
return [_defineProperty({}, reserveToDestInstruction, {
|
|
9477
|
+
assets: createRoutingFilter(assetLocalizedToReserve),
|
|
9447
9478
|
dest: createDestination(api, version, reserveChain !== null && reserveChain !== void 0 ? reserveChain : chain, destChain, paraIdTo),
|
|
9448
|
-
xcm: [].concat(_toConsumableArray(createBuyExecution(
|
|
9449
|
-
}
|
|
9450
|
-
}
|
|
9479
|
+
xcm: [].concat(_toConsumableArray(createBuyExecution(feeAssetLocalizedToDest !== null && feeAssetLocalizedToDest !== void 0 ? feeAssetLocalizedToDest : updateAsset(assetLocalizedToDest, reserveFee === 1000n ? amount / 2n : amount - originFeeDeduction - reserveFee))), _toConsumableArray(suffixXcm))
|
|
9480
|
+
})];
|
|
9481
|
+
};
|
|
9451
9482
|
var mainInstructions;
|
|
9452
9483
|
switch (transferType) {
|
|
9453
9484
|
case 'InitiateTransfer':
|
|
9454
9485
|
{
|
|
9455
9486
|
var transferFilter = getInitiateTransferType(api, chain, destChain, assetInfo, reserveChain);
|
|
9487
|
+
if (transferFilter === 'Teleport') assertFeeAssetTeleportable(chain, destChain);
|
|
9456
9488
|
mainInstructions = [{
|
|
9457
9489
|
InitiateTransfer: {
|
|
9458
9490
|
destination: destLocation,
|
|
9459
|
-
remote_fees: _defineProperty({}, transferFilter,
|
|
9491
|
+
remote_fees: _defineProperty({}, transferFilter, createAssetsFilter(feeAssetLocalized !== null && feeAssetLocalized !== void 0 ? feeAssetLocalized : assetLocalized, version)),
|
|
9460
9492
|
preserve_origin: true,
|
|
9461
9493
|
assets: [_defineProperty({}, transferFilter, routingAssetsFilter)],
|
|
9462
9494
|
remote_xcm: [{
|
|
@@ -9468,21 +9500,23 @@ var createBaseExecuteXcm = function createBaseExecuteXcm(options) {
|
|
|
9468
9500
|
}
|
|
9469
9501
|
case 'InitiateTeleport':
|
|
9470
9502
|
// Use teleport for trusted chains
|
|
9503
|
+
assertFeeAssetTeleportable(chain, destChain);
|
|
9471
9504
|
mainInstructions = [{
|
|
9472
9505
|
InitiateTeleport: {
|
|
9473
9506
|
assets: routingAssetsFilter,
|
|
9474
9507
|
dest: destLocation,
|
|
9475
|
-
xcm: [].concat(_toConsumableArray(createBuyExecution(
|
|
9508
|
+
xcm: [].concat(_toConsumableArray(createBuyExecution(feeAssetLocalizedToDest !== null && feeAssetLocalizedToDest !== void 0 ? feeAssetLocalizedToDest : updateAsset(assetLocalizedToDest, amount - originFeeDeduction))), _toConsumableArray(suffixXcm))
|
|
9476
9509
|
}
|
|
9477
9510
|
}];
|
|
9478
9511
|
break;
|
|
9479
9512
|
case 'InitiateTeleportToReserve':
|
|
9480
9513
|
// Teleport to reserve chain first
|
|
9514
|
+
assertFeeAssetTeleportable(chain, reserveChain);
|
|
9481
9515
|
mainInstructions = [{
|
|
9482
9516
|
InitiateTeleport: {
|
|
9483
9517
|
assets: routingAssetsFilter,
|
|
9484
9518
|
dest: getChainLocation(chain, reserveChain, api._customCtx),
|
|
9485
|
-
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()))
|
|
9486
9520
|
}
|
|
9487
9521
|
}];
|
|
9488
9522
|
break;
|
|
@@ -9494,12 +9528,12 @@ var createBaseExecuteXcm = function createBaseExecuteXcm(options) {
|
|
|
9494
9528
|
reserve: getChainLocation(chain, reserveChain, api._customCtx),
|
|
9495
9529
|
xcm: [].concat(_toConsumableArray(createBuyExecution(// Decrease amount by 2 units because for some reason polkadot withdraws 2 units less
|
|
9496
9530
|
// than requested, so we need to account for that
|
|
9497
|
-
hopFeeAssetToReserve !== null && hopFeeAssetToReserve !== void 0 ? hopFeeAssetToReserve : updateAsset(assetLocalizedToReserve, amount - 2n))), _toConsumableArray(
|
|
9531
|
+
hopFeeAssetToReserve !== null && hopFeeAssetToReserve !== void 0 ? hopFeeAssetToReserve : updateAsset(assetLocalizedToReserve, amount - 2n))), _toConsumableArray(createReserveToDestXcm()))
|
|
9498
9532
|
}
|
|
9499
9533
|
}];
|
|
9500
9534
|
break;
|
|
9501
9535
|
case 'DepositAsset':
|
|
9502
|
-
mainInstructions =
|
|
9536
|
+
mainInstructions = createReserveToDestXcm();
|
|
9503
9537
|
}
|
|
9504
9538
|
return mainInstructions;
|
|
9505
9539
|
};
|
|
@@ -9624,7 +9658,7 @@ var prepareCommonExecuteXcm = function prepareCommonExecuteXcm(options, assetToD
|
|
|
9624
9658
|
WithdrawAsset: withdrawAssets
|
|
9625
9659
|
});
|
|
9626
9660
|
if (feeAssetLocalized && !useJitWithdraw) {
|
|
9627
|
-
prefix.push.apply(prefix, _toConsumableArray(createBuyExecution(feeAssetLocalized)));
|
|
9661
|
+
prefix.push.apply(prefix, _toConsumableArray(createBuyExecution(feeAssetLocalized, MIN_WEIGHT)));
|
|
9628
9662
|
} else {
|
|
9629
9663
|
prefix.push({
|
|
9630
9664
|
SetFeesMode: {
|
|
@@ -9684,32 +9718,36 @@ var createDirectExecuteXcm = /*#__PURE__*/function () {
|
|
|
9684
9718
|
};
|
|
9685
9719
|
}();
|
|
9686
9720
|
|
|
9687
|
-
var
|
|
9688
|
-
|
|
9689
|
-
return MIN_FEE;
|
|
9690
|
-
}
|
|
9691
|
-
return hops[0].result.fee;
|
|
9721
|
+
var getFeeFromResult = function getFeeFromResult(result) {
|
|
9722
|
+
return result !== null && result !== void 0 && result.success ? result.fee : MIN_FEE;
|
|
9692
9723
|
};
|
|
9693
9724
|
var FEE_PADDING_PERCENTAGE$1 = 40;
|
|
9694
9725
|
var handleExecuteTransfer = /*#__PURE__*/function () {
|
|
9695
9726
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options) {
|
|
9696
|
-
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;
|
|
9697
9729
|
return _regenerator().w(function (_context) {
|
|
9698
9730
|
while (1) switch (_context.n) {
|
|
9699
9731
|
case 0:
|
|
9700
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;
|
|
9701
9733
|
assertSender(sender);
|
|
9702
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:
|
|
9703
9741
|
checkAmount = function checkAmount(fee) {
|
|
9704
9742
|
if (assetInfo.amount <= fee) throw new AmountTooLowError();
|
|
9705
9743
|
};
|
|
9706
9744
|
checkAmount(MIN_FEE);
|
|
9707
9745
|
if (!(destChain === undefined)) {
|
|
9708
|
-
_context.n =
|
|
9746
|
+
_context.n = 2;
|
|
9709
9747
|
break;
|
|
9710
9748
|
}
|
|
9711
9749
|
throw new RoutingResolutionError('Could not determine destination chain for execute transfer');
|
|
9712
|
-
case
|
|
9750
|
+
case 2:
|
|
9713
9751
|
internalOptions = {
|
|
9714
9752
|
api: api,
|
|
9715
9753
|
chain: chain,
|
|
@@ -9726,18 +9764,21 @@ var handleExecuteTransfer = /*#__PURE__*/function () {
|
|
|
9726
9764
|
}; // We mint 1000 units of feeAsset and use 100
|
|
9727
9765
|
FEE_ASSET_AMOUNT = 100;
|
|
9728
9766
|
feeAssetAmount = feeAssetInfo ? parseUnits(FEE_ASSET_AMOUNT.toString(), feeAssetInfo.decimals) : MIN_FEE;
|
|
9767
|
+
resolvedFeeAssetInfo = getFeeAssetInfo(assetInfo, feeAssetInfo);
|
|
9768
|
+
hopFeeAmount = resolvedFeeAssetInfo ? feeAssetAmount : MIN_FEE;
|
|
9729
9769
|
_t = createExecuteCall;
|
|
9730
9770
|
_t2 = chain;
|
|
9731
|
-
_context.n =
|
|
9771
|
+
_context.n = 3;
|
|
9732
9772
|
return createDirectExecuteXcm(_objectSpread2(_objectSpread2({}, internalOptions), {}, {
|
|
9733
9773
|
fees: {
|
|
9734
9774
|
originFee: feeAssetAmount,
|
|
9735
|
-
reserveFee:
|
|
9775
|
+
reserveFee: hopFeeAmount,
|
|
9776
|
+
destFee: hopFeeAmount
|
|
9736
9777
|
}
|
|
9737
9778
|
}));
|
|
9738
|
-
case
|
|
9779
|
+
case 3:
|
|
9739
9780
|
call = _t(_t2, _context.v, MAX_WEIGHT);
|
|
9740
|
-
_context.n =
|
|
9781
|
+
_context.n = 4;
|
|
9741
9782
|
return dryRunInternal({
|
|
9742
9783
|
api: api,
|
|
9743
9784
|
tx: api.deserializeExtrinsics(call),
|
|
@@ -9749,34 +9790,34 @@ var handleExecuteTransfer = /*#__PURE__*/function () {
|
|
|
9749
9790
|
feeAsset: feeCurrency,
|
|
9750
9791
|
useRootOrigin: true
|
|
9751
9792
|
});
|
|
9752
|
-
case
|
|
9793
|
+
case 4:
|
|
9753
9794
|
dryRunResult = _context.v;
|
|
9754
9795
|
if (dryRunResult.origin.success) {
|
|
9755
|
-
_context.n =
|
|
9796
|
+
_context.n = 5;
|
|
9756
9797
|
break;
|
|
9757
9798
|
}
|
|
9758
9799
|
throw new DryRunFailedError(_objectSpread2(_objectSpread2({}, dryRunResult.origin.dryRunError), {}, {
|
|
9759
9800
|
chainKind: 'origin',
|
|
9760
9801
|
chain: chain
|
|
9761
9802
|
}));
|
|
9762
|
-
case
|
|
9763
|
-
|
|
9764
|
-
|
|
9765
|
-
|
|
9766
|
-
|
|
9767
|
-
|
|
9768
|
-
_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;
|
|
9769
9809
|
return createDirectExecuteXcm(_objectSpread2(_objectSpread2({}, internalOptions), {}, {
|
|
9770
9810
|
fees: {
|
|
9771
9811
|
originFee: originFee,
|
|
9772
|
-
reserveFee: reserveFee
|
|
9812
|
+
reserveFee: reserveFee,
|
|
9813
|
+
destFee: destFee
|
|
9773
9814
|
}
|
|
9774
9815
|
}));
|
|
9775
|
-
case
|
|
9816
|
+
case 6:
|
|
9776
9817
|
xcm = _context.v;
|
|
9777
|
-
_context.n =
|
|
9818
|
+
_context.n = 7;
|
|
9778
9819
|
return api.getXcmWeight(xcm);
|
|
9779
|
-
case
|
|
9820
|
+
case 7:
|
|
9780
9821
|
weight = _context.v;
|
|
9781
9822
|
return _context.a(2, createExecuteCall(chain, xcm, weight));
|
|
9782
9823
|
}
|
|
@@ -9956,12 +9997,13 @@ var isMultiHopSwap = function isMultiHopSwap(exchangeChain, assetFrom, assetTo)
|
|
|
9956
9997
|
};
|
|
9957
9998
|
|
|
9958
9999
|
var createExchangeInstructions = /*#__PURE__*/function () {
|
|
9959
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options, assetFrom, assetTo,
|
|
9960
|
-
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;
|
|
9961
10002
|
return _regenerator().w(function (_context) {
|
|
9962
10003
|
while (1) switch (_context.n) {
|
|
9963
10004
|
case 0:
|
|
9964
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;
|
|
9965
10007
|
nativeSymbol = getNativeAssetSymbol(exchangeChain);
|
|
9966
10008
|
needsMultiHop = isMultiHopSwap(exchangeChain, assetInfoFrom, assetInfoTo);
|
|
9967
10009
|
nativeAsset = api.findAssetInfoOrThrow(exchangeChain, {
|
|
@@ -9980,7 +10022,7 @@ var createExchangeInstructions = /*#__PURE__*/function () {
|
|
|
9980
10022
|
}]);
|
|
9981
10023
|
case 1:
|
|
9982
10024
|
_context.n = 2;
|
|
9983
|
-
return calculateMinAmountOut(BigInt(assetInfoFrom.amount) - (chain ? originReserveFee + exchangeFee : 0n), nativeAsset);
|
|
10025
|
+
return calculateMinAmountOut(BigInt(assetInfoFrom.amount) - (chain && !hasSeparateFeeAsset ? originReserveFee + exchangeFee : 0n), nativeAsset);
|
|
9984
10026
|
case 2:
|
|
9985
10027
|
nativeAmountOut = _context.v;
|
|
9986
10028
|
assetNative = createAsset(version, exchangeFee === 0n ? (nativeAmountOut + 1n) / 2n : nativeAmountOut, localizeLocation(exchangeChain, nativeAsset.location));
|
|
@@ -9988,11 +10030,13 @@ var createExchangeInstructions = /*#__PURE__*/function () {
|
|
|
9988
10030
|
ExchangeAsset: {
|
|
9989
10031
|
give: createAssetsFilter(assetFrom, version),
|
|
9990
10032
|
want: [assetNative],
|
|
9991
|
-
maximal:
|
|
10033
|
+
maximal: hasSeparateFeeAsset
|
|
9992
10034
|
}
|
|
9993
10035
|
}, {
|
|
9994
10036
|
ExchangeAsset: {
|
|
9995
|
-
give:
|
|
10037
|
+
give: separateFeeAssetInfo && isAssetEqual(separateFeeAssetInfo, nativeAsset) ? {
|
|
10038
|
+
Definite: [assetNative]
|
|
10039
|
+
} : createAssetsFilter(assetNative, version),
|
|
9996
10040
|
want: [assetTo],
|
|
9997
10041
|
maximal: true
|
|
9998
10042
|
}
|
|
@@ -10007,19 +10051,18 @@ var createExchangeInstructions = /*#__PURE__*/function () {
|
|
|
10007
10051
|
var createSwapExecuteXcm = /*#__PURE__*/function () {
|
|
10008
10052
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(options) {
|
|
10009
10053
|
var _ref3, _ref4;
|
|
10010
|
-
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;
|
|
10011
10055
|
return _regenerator().w(function (_context2) {
|
|
10012
10056
|
while (1) switch (_context2.n) {
|
|
10013
10057
|
case 0:
|
|
10014
|
-
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;
|
|
10015
10059
|
isEthereumDest = destChain !== undefined && isExternalChain(destChain); // For Ethereum destination, the actual hop target is AssetHub (bridge hub)
|
|
10016
10060
|
resolvedDestChain = isEthereumDest ? "AssetHub".concat(getRelayChainOf(chain !== null && chain !== void 0 ? chain : exchangeChain)) : undefined;
|
|
10017
10061
|
assetFrom = createAsset(version, assetInfoFrom.amount, localizeLocation(exchangeChain, assetInfoFrom.location));
|
|
10018
10062
|
amountOut = assetInfoTo.amount;
|
|
10019
10063
|
assetTo = createAsset(version, amountOut, localizeLocation(exchangeChain, assetInfoTo.location)); // For Ethereum, localize to AssetHub since that's where instructions execute
|
|
10020
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
|
|
10021
|
-
ethBridgeFee = 0n;
|
|
10022
|
-
isMainAssetDot = false;
|
|
10065
|
+
ethBridgeFee = 0n;
|
|
10023
10066
|
if (!isEthereumDest) {
|
|
10024
10067
|
_context2.n = 3;
|
|
10025
10068
|
break;
|
|
@@ -10037,14 +10080,21 @@ var createSwapExecuteXcm = /*#__PURE__*/function () {
|
|
|
10037
10080
|
bridgeFee = _yield$getParaEthTran2[0];
|
|
10038
10081
|
executionFee = _yield$getParaEthTran2[1];
|
|
10039
10082
|
ethBridgeFee = bridgeFee + executionFee;
|
|
10040
|
-
|
|
10041
|
-
if (!isMainAssetDot) {
|
|
10083
|
+
if (!isAssetEqual(assetInfoFrom, nativeFeeAssetInfo)) {
|
|
10042
10084
|
ethFeeAssetInfo = nativeFeeAssetInfo;
|
|
10043
10085
|
}
|
|
10044
10086
|
case 3:
|
|
10045
10087
|
// Ethereum fee asset takes precedence over user-provided feeAssetInfo
|
|
10046
|
-
resolvedFeeAssetInfo =
|
|
10047
|
-
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;
|
|
10048
10098
|
_prepareCommonExecute = prepareCommonExecuteXcm({
|
|
10049
10099
|
api: api,
|
|
10050
10100
|
chain: chain !== null && chain !== void 0 ? chain : exchangeChain,
|
|
@@ -10054,13 +10104,14 @@ var createSwapExecuteXcm = /*#__PURE__*/function () {
|
|
|
10054
10104
|
useJitWithdraw: isEthereumDest,
|
|
10055
10105
|
recipient: recipient,
|
|
10056
10106
|
fees: {
|
|
10057
|
-
originFee: hasSeparateFeeAsset ?
|
|
10058
|
-
reserveFee:
|
|
10107
|
+
originFee: hasSeparateFeeAsset ? feeAssetBudget : originFee,
|
|
10108
|
+
reserveFee: 0n,
|
|
10109
|
+
destFee: 0n
|
|
10059
10110
|
},
|
|
10060
10111
|
version: version
|
|
10061
10112
|
}, assetToLocalizedToDest), prefix = _prepareCommonExecute.prefix, depositInstruction = _prepareCommonExecute.depositInstruction;
|
|
10062
10113
|
_context2.n = 4;
|
|
10063
|
-
return createExchangeInstructions(options, assetFrom, assetTo,
|
|
10114
|
+
return createExchangeInstructions(options, assetFrom, assetTo, resolvedFeeAssetInfo);
|
|
10064
10115
|
case 4:
|
|
10065
10116
|
exchangeInstructions = _context2.v;
|
|
10066
10117
|
if (!isEthereumDest) {
|
|
@@ -10088,13 +10139,9 @@ var createSwapExecuteXcm = /*#__PURE__*/function () {
|
|
|
10088
10139
|
destChain: resolvedDestChain,
|
|
10089
10140
|
assetInfo: assetInfoTo,
|
|
10090
10141
|
feeAssetInfo: ethFeeAssetInfo,
|
|
10091
|
-
useFeeAssetOnHops: hasSeparateFeeAsset,
|
|
10092
10142
|
paraIdTo: getParaId(resolvedDestChain),
|
|
10093
10143
|
version: version,
|
|
10094
|
-
fees:
|
|
10095
|
-
originFee: hasSeparateFeeAsset ? ethBridgeFee : 0n,
|
|
10096
|
-
reserveFee: destReserveFee
|
|
10097
|
-
},
|
|
10144
|
+
fees: createLegFees(destReserveFee, destFee),
|
|
10098
10145
|
suffixXcm: snowbridgeInstructions
|
|
10099
10146
|
});
|
|
10100
10147
|
_context2.n = 7;
|
|
@@ -10106,13 +10153,10 @@ var createSwapExecuteXcm = /*#__PURE__*/function () {
|
|
|
10106
10153
|
chain: exchangeChain,
|
|
10107
10154
|
destChain: destChain,
|
|
10108
10155
|
assetInfo: assetInfoTo,
|
|
10156
|
+
feeAssetInfo: resolvedFeeAssetInfo,
|
|
10109
10157
|
paraIdTo: paraIdTo,
|
|
10110
10158
|
version: version,
|
|
10111
|
-
|
|
10112
|
-
fees: {
|
|
10113
|
-
originFee: 0n,
|
|
10114
|
-
reserveFee: destReserveFee
|
|
10115
|
-
},
|
|
10159
|
+
fees: createLegFees(destReserveFee, destFee),
|
|
10116
10160
|
suffixXcm: [depositInstruction]
|
|
10117
10161
|
});
|
|
10118
10162
|
} else {
|
|
@@ -10124,14 +10168,10 @@ var createSwapExecuteXcm = /*#__PURE__*/function () {
|
|
|
10124
10168
|
chain: chain,
|
|
10125
10169
|
destChain: exchangeChain,
|
|
10126
10170
|
assetInfo: assetInfoFrom,
|
|
10127
|
-
feeAssetInfo:
|
|
10128
|
-
useFeeAssetOnHops: hasSeparateFeeAsset,
|
|
10171
|
+
feeAssetInfo: resolvedFeeAssetInfo,
|
|
10129
10172
|
paraIdTo: getParaId(exchangeChain),
|
|
10130
10173
|
version: version,
|
|
10131
|
-
fees:
|
|
10132
|
-
originFee: hasSeparateFeeAsset ? ethBridgeFee : 0n,
|
|
10133
|
-
reserveFee: originReserveFee
|
|
10134
|
-
},
|
|
10174
|
+
fees: createLegFees(originReserveFee, exchangeFee),
|
|
10135
10175
|
suffixXcm: [].concat(_toConsumableArray(exchangeInstructions), _toConsumableArray(exchangeToDestXcm))
|
|
10136
10176
|
}) : [].concat(_toConsumableArray(exchangeInstructions), _toConsumableArray(exchangeToDestXcm));
|
|
10137
10177
|
fullXcm = [].concat(_toConsumableArray(prefix), _toConsumableArray(finalXcm));
|
|
@@ -10197,12 +10237,14 @@ var findExchangeHopIndex = function findExchangeHopIndex(chain, dryRunResult, ex
|
|
|
10197
10237
|
return index;
|
|
10198
10238
|
};
|
|
10199
10239
|
var extractFeesFromDryRun = function extractFeesFromDryRun(chain, exchangeChain, dryRunResult, exchangeHopIndex, destChain) {
|
|
10240
|
+
var _dryRunResult$destina;
|
|
10200
10241
|
var requireHopsSuccess = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
|
|
10201
10242
|
var fees = {
|
|
10202
10243
|
originFee: 0n,
|
|
10203
10244
|
originReserveFee: 0n,
|
|
10204
10245
|
exchangeFee: 0n,
|
|
10205
|
-
destReserveFee: 0n
|
|
10246
|
+
destReserveFee: 0n,
|
|
10247
|
+
destFee: 0n
|
|
10206
10248
|
};
|
|
10207
10249
|
var hops = dryRunResult.hops;
|
|
10208
10250
|
// Handle exchange fee
|
|
@@ -10282,6 +10324,9 @@ var extractFeesFromDryRun = function extractFeesFromDryRun(chain, exchangeChain,
|
|
|
10282
10324
|
fees.destReserveFee = padValueBy(hopAfterExchange.result.fee, FEE_PADDING_PERCENTAGE);
|
|
10283
10325
|
}
|
|
10284
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
|
+
}
|
|
10285
10330
|
return fees;
|
|
10286
10331
|
};
|
|
10287
10332
|
var createXcmAndCall = /*#__PURE__*/function () {
|
|
@@ -10325,8 +10370,8 @@ var createXcmAndCall = /*#__PURE__*/function () {
|
|
|
10325
10370
|
}();
|
|
10326
10371
|
var handleSwapExecuteTransfer = /*#__PURE__*/function () {
|
|
10327
10372
|
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(options) {
|
|
10328
|
-
var _firstDryRunResult$dr;
|
|
10329
|
-
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;
|
|
10330
10375
|
return _regenerator().w(function (_context3) {
|
|
10331
10376
|
while (1) switch (_context3.n) {
|
|
10332
10377
|
case 0:
|
|
@@ -10337,9 +10382,10 @@ var handleSwapExecuteTransfer = /*#__PURE__*/function () {
|
|
|
10337
10382
|
case 1:
|
|
10338
10383
|
validateAmount(assetFrom.amount, MIN_FEE);
|
|
10339
10384
|
version = pickRouterCompatibleXcmVersion(api, chain, exchangeChain, destChain);
|
|
10340
|
-
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
|
|
10341
10387
|
// (no separate fee asset needed). Only skip fee validation when currencies differ.
|
|
10342
|
-
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)));
|
|
10343
10389
|
internalOptions = _objectSpread2(_objectSpread2({}, options), {}, {
|
|
10344
10390
|
version: version,
|
|
10345
10391
|
paraIdTo: getParaId(destChain !== null && destChain !== void 0 ? destChain : exchangeChain)
|
|
@@ -10366,12 +10412,14 @@ var handleSwapExecuteTransfer = /*#__PURE__*/function () {
|
|
|
10366
10412
|
useRootOrigin: true
|
|
10367
10413
|
};
|
|
10368
10414
|
FEE_ASSET_AMOUNT = 100;
|
|
10369
|
-
|
|
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;
|
|
10370
10417
|
fees = {
|
|
10371
|
-
originFee:
|
|
10372
|
-
originReserveFee: MIN_FEE,
|
|
10373
|
-
exchangeFee: 0n,
|
|
10374
|
-
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
|
|
10375
10423
|
};
|
|
10376
10424
|
totalFeesPre = calculateTotalFees(chain, fees);
|
|
10377
10425
|
if (!hasSeparateFeeAsset) {
|
|
@@ -10396,14 +10444,20 @@ var handleSwapExecuteTransfer = /*#__PURE__*/function () {
|
|
|
10396
10444
|
case 3:
|
|
10397
10445
|
firstDryRunResult = _context3.v;
|
|
10398
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) {
|
|
10399
10451
|
_context3.n = 4;
|
|
10400
10452
|
break;
|
|
10401
10453
|
}
|
|
10402
|
-
throw new
|
|
10454
|
+
throw new DryRunFailedError(firstDryRunResult.dryRunError);
|
|
10403
10455
|
case 4:
|
|
10456
|
+
throw new AmountTooLowError("Asset amount is too low to cover the fees, please increase the amount.");
|
|
10457
|
+
case 5:
|
|
10404
10458
|
exchangeHopIndex = findExchangeHopIndex(chain, firstDryRunResult, exchangeChain, destChain);
|
|
10405
10459
|
extractedFees = extractFeesFromDryRun(chain, exchangeChain, firstDryRunResult, exchangeHopIndex, destChain, false); // Set originFee from dry run origin fee (padded), same as handleExecuteTransfer
|
|
10406
|
-
extractedFees.originFee =
|
|
10460
|
+
extractedFees.originFee = separateFeeAssetInfo && firstDryRunResult.origin.success ? padValueBy(firstDryRunResult.origin.fee, FEE_PADDING_PERCENTAGE) : 0n;
|
|
10407
10461
|
if (extractedFees.exchangeFee === 0n) {
|
|
10408
10462
|
// We set the exchange fee to non-zero value to prevent creating dummy tx
|
|
10409
10463
|
extractedFees.exchangeFee = MIN_FEE;
|
|
@@ -10414,26 +10468,26 @@ var handleSwapExecuteTransfer = /*#__PURE__*/function () {
|
|
|
10414
10468
|
}
|
|
10415
10469
|
updatedAssetTo = assetTo;
|
|
10416
10470
|
if (!chain) {
|
|
10417
|
-
_context3.n =
|
|
10471
|
+
_context3.n = 7;
|
|
10418
10472
|
break;
|
|
10419
10473
|
}
|
|
10420
10474
|
// When fees are paid from a separate asset (e.g. DOT for Ethereum),
|
|
10421
10475
|
// the full main asset amount is available for the swap
|
|
10422
10476
|
amountAvailableForSwap = hasSeparateFeeAsset ? assetFrom.amount : assetFrom.amount - totalFees;
|
|
10423
|
-
_context3.n =
|
|
10477
|
+
_context3.n = 6;
|
|
10424
10478
|
return calculateMinAmountOut(amountAvailableForSwap);
|
|
10425
|
-
case
|
|
10479
|
+
case 6:
|
|
10426
10480
|
recalculatedMinAmountOut = _context3.v;
|
|
10427
10481
|
updatedAssetTo = _objectSpread2(_objectSpread2({}, assetTo), {}, {
|
|
10428
10482
|
amount: recalculatedMinAmountOut
|
|
10429
10483
|
});
|
|
10430
|
-
case
|
|
10431
|
-
_context3.n =
|
|
10484
|
+
case 7:
|
|
10485
|
+
_context3.n = 8;
|
|
10432
10486
|
return createXcmAndCall(_objectSpread2(_objectSpread2({}, internalOptions), {}, {
|
|
10433
10487
|
assetInfoTo: updatedAssetTo,
|
|
10434
10488
|
fees: extractedFees
|
|
10435
10489
|
}), firstDryRunResult.origin.success ? firstDryRunResult.origin.weight : undefined);
|
|
10436
|
-
case
|
|
10490
|
+
case 8:
|
|
10437
10491
|
_yield$createXcmAndCa2 = _context3.v;
|
|
10438
10492
|
finalCall = _yield$createXcmAndCa2.call;
|
|
10439
10493
|
return _context3.a(2, api.deserializeExtrinsics(finalCall));
|
|
@@ -10763,7 +10817,7 @@ var AssetHubPolkadot = /*#__PURE__*/function (_SubstrateChain) {
|
|
|
10763
10817
|
var nativeAsset = api.findNativeAssetInfoOrThrow(this.chain);
|
|
10764
10818
|
var isNativeAsset = isAssetEqual(nativeAsset, assetInfo);
|
|
10765
10819
|
var isNativeFeeAsset = isAssetEqual(nativeAsset, feeAssetInfo);
|
|
10766
|
-
return !isNativeAsset || !isNativeFeeAsset;
|
|
10820
|
+
return (!isNativeAsset || !isNativeFeeAsset) && hasMatchingFeeAssetReserve(api, this.chain, assetInfo, feeAssetInfo);
|
|
10767
10821
|
}
|
|
10768
10822
|
}, {
|
|
10769
10823
|
key: "transferPolkadotXCM",
|
|
@@ -10974,6 +11028,14 @@ var Hydration = /*#__PURE__*/function (_SubstrateChain) {
|
|
|
10974
11028
|
useIdPrefix: false
|
|
10975
11029
|
};
|
|
10976
11030
|
}
|
|
11031
|
+
}, {
|
|
11032
|
+
key: "mint",
|
|
11033
|
+
value: function mint(api, address, assetInfo, balance) {
|
|
11034
|
+
if (assetInfo.erc20) {
|
|
11035
|
+
return Promise.resolve(buildErc20StorageMint(api, address, assetInfo, assetInfo.erc20, balance + assetInfo.amount));
|
|
11036
|
+
}
|
|
11037
|
+
return _superPropGet(Hydration, "mint", this, 3)([api, address, assetInfo, balance]);
|
|
11038
|
+
}
|
|
10977
11039
|
}, {
|
|
10978
11040
|
key: "shouldUseExecuteTransfer",
|
|
10979
11041
|
value: function shouldUseExecuteTransfer(input) {
|
|
@@ -10985,7 +11047,7 @@ var Hydration = /*#__PURE__*/function (_SubstrateChain) {
|
|
|
10985
11047
|
var nativeAsset = api.findNativeAssetInfoOrThrow(this.chain);
|
|
10986
11048
|
var isNativeAsset = isAssetEqual(nativeAsset, asset);
|
|
10987
11049
|
var isNativeFeeAsset = isAssetEqual(nativeAsset, feeAsset);
|
|
10988
|
-
return !isNativeAsset || !isNativeFeeAsset;
|
|
11050
|
+
return (!isNativeAsset || !isNativeFeeAsset) && hasMatchingFeeAssetReserve(api, this.chain, asset, feeAsset);
|
|
10989
11051
|
}
|
|
10990
11052
|
}, {
|
|
10991
11053
|
key: "transferPolkadotXCM",
|
|
@@ -11041,6 +11103,12 @@ var Hydration = /*#__PURE__*/function (_SubstrateChain) {
|
|
|
11041
11103
|
}
|
|
11042
11104
|
}));
|
|
11043
11105
|
}
|
|
11106
|
+
}, {
|
|
11107
|
+
key: "getBalanceForeign",
|
|
11108
|
+
value: function getBalanceForeign(api, address, asset) {
|
|
11109
|
+
if (!asset.erc20) return _superPropGet(Hydration, "getBalanceForeign", this, 3)([api, address, asset]);
|
|
11110
|
+
return getPalletInstance('Currencies').getBalance(api, address, asset);
|
|
11111
|
+
}
|
|
11044
11112
|
}, {
|
|
11045
11113
|
key: "transferLocalNonNativeAsset",
|
|
11046
11114
|
value: function transferLocalNonNativeAsset(options) {
|
|
@@ -11048,9 +11116,22 @@ var Hydration = /*#__PURE__*/function (_SubstrateChain) {
|
|
|
11048
11116
|
asset = options.assetInfo,
|
|
11049
11117
|
recipient = options.recipient,
|
|
11050
11118
|
isAmountAll = options.isAmountAll,
|
|
11051
|
-
keepAlive = options.keepAlive
|
|
11119
|
+
keepAlive = options.keepAlive,
|
|
11120
|
+
balance = options.balance;
|
|
11052
11121
|
assertHasId(asset);
|
|
11053
11122
|
var currencyId = Number(asset.assetId);
|
|
11123
|
+
if (asset.erc20) {
|
|
11124
|
+
var amount = isAmountAll ? balance - (keepAlive ? getEdFromAssetOrThrow(asset) : 0n) : asset.amount;
|
|
11125
|
+
return api.deserializeExtrinsics({
|
|
11126
|
+
module: 'Currencies',
|
|
11127
|
+
method: 'transfer',
|
|
11128
|
+
params: {
|
|
11129
|
+
dest: recipient,
|
|
11130
|
+
currency_id: currencyId,
|
|
11131
|
+
amount: amount
|
|
11132
|
+
}
|
|
11133
|
+
});
|
|
11134
|
+
}
|
|
11054
11135
|
if (isAmountAll) {
|
|
11055
11136
|
return api.deserializeExtrinsics({
|
|
11056
11137
|
module: 'Tokens',
|
|
@@ -11725,7 +11806,9 @@ var EnergyWebX = /*#__PURE__*/function (_SubstrateChain) {
|
|
|
11725
11806
|
scenario: scenario
|
|
11726
11807
|
});
|
|
11727
11808
|
}
|
|
11728
|
-
|
|
11809
|
+
// EnergyWebX has to stay on reserve_transfer_assets for now.
|
|
11810
|
+
// limited_reserve_transfer_assets causes 'Extrinsic is now allowed error'
|
|
11811
|
+
return transferPolkadotXcm(input, 'reserve_transfer_assets');
|
|
11729
11812
|
}
|
|
11730
11813
|
}, {
|
|
11731
11814
|
key: "isRelayToParaEnabled",
|
|
@@ -12575,6 +12658,10 @@ var DEFAULT_TTL_MS = 60000; // 1 minute
|
|
|
12575
12658
|
var MAX_CLIENTS = 100;
|
|
12576
12659
|
var EXTENSION_MS = 5 * 60000; // 5 minutes
|
|
12577
12660
|
var MAX_U64 = (1n << 64n) - 1n;
|
|
12661
|
+
var MIN_WEIGHT = {
|
|
12662
|
+
proofSize: 1n,
|
|
12663
|
+
refTime: 1n
|
|
12664
|
+
};
|
|
12578
12665
|
var MAX_WEIGHT = {
|
|
12579
12666
|
proofSize: MAX_U64,
|
|
12580
12667
|
refTime: MAX_U64
|
|
@@ -12767,6 +12854,39 @@ var formatAssetIdToERC20 = function formatAssetIdToERC20(id) {
|
|
|
12767
12854
|
return "0xffffffff".concat(BigInt(id).toString(16).padStart(32, '0'));
|
|
12768
12855
|
};
|
|
12769
12856
|
|
|
12857
|
+
// twox128("EVM") ++ twox128("AccountStorages") — the pallet_evm::AccountStorages storage prefix.
|
|
12858
|
+
var ACCOUNT_STORAGES_PREFIX = '1da53b775b270400e7e61ed5cbc5a146ab1160471b1418779239ba8e2b847e42';
|
|
12859
|
+
// "ETH\0" — prefix of account ids that Hydration derives from an EVM address
|
|
12860
|
+
var EVM_ACCOUNT_PREFIX = '45544800';
|
|
12861
|
+
var word = function word(hex) {
|
|
12862
|
+
return hex.padStart(64, '0');
|
|
12863
|
+
};
|
|
12864
|
+
var blake2128Concat = function blake2128Concat(hex) {
|
|
12865
|
+
return bytesToHex(blake2b(hexToBytes(hex), {
|
|
12866
|
+
dkLen: 16
|
|
12867
|
+
})) + hex;
|
|
12868
|
+
};
|
|
12869
|
+
// Mirrors pallet_evm_accounts::evm_address
|
|
12870
|
+
var toEvmAddress = function toEvmAddress(accountId) {
|
|
12871
|
+
return accountId.startsWith(EVM_ACCOUNT_PREFIX) && accountId.endsWith('0'.repeat(16)) ? accountId.slice(8, 48) : accountId.slice(0, 40);
|
|
12872
|
+
};
|
|
12873
|
+
var buildErc20StorageMint = function buildErc20StorageMint(api, address, asset, erc20, balance) {
|
|
12874
|
+
var _erc20$contract, _getJunctionValue;
|
|
12875
|
+
var contract = (_erc20$contract = erc20.contract) !== null && _erc20$contract !== void 0 ? _erc20$contract : (_getJunctionValue = getJunctionValue(asset.location, 'AccountKey20')) === null || _getJunctionValue === void 0 ? void 0 : _getJunctionValue.key;
|
|
12876
|
+
if (!contract) throw new InvalidCurrencyError("Missing ERC20 contract for asset ".concat(asset.symbol));
|
|
12877
|
+
var evmAddress = toEvmAddress(bytesToHex(api.accountToUint8a(address)));
|
|
12878
|
+
var slotKey = bytesToHex(keccak_256(hexToBytes(word(evmAddress) + word(erc20.balanceSlot.toString(16)))));
|
|
12879
|
+
return {
|
|
12880
|
+
balanceTx: {
|
|
12881
|
+
module: 'System',
|
|
12882
|
+
method: 'set_storage',
|
|
12883
|
+
params: {
|
|
12884
|
+
items: [['0x' + ACCOUNT_STORAGES_PREFIX + blake2128Concat(contract.slice(2)) + blake2128Concat(slotKey), '0x' + word(balance.toString(16))]]
|
|
12885
|
+
}
|
|
12886
|
+
}
|
|
12887
|
+
};
|
|
12888
|
+
};
|
|
12889
|
+
|
|
12770
12890
|
var maybeOverrideAssets = function maybeOverrideAssets(version, amount, assets, overriddenCurrency) {
|
|
12771
12891
|
if (!overriddenCurrency) {
|
|
12772
12892
|
return assets;
|
|
@@ -12797,39 +12917,98 @@ var pickOtherMintPallet = function pickOtherMintPallet(asset, pallets) {
|
|
|
12797
12917
|
return pallets[0];
|
|
12798
12918
|
};
|
|
12799
12919
|
|
|
12800
|
-
|
|
12801
|
-
|
|
12802
|
-
|
|
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;
|
|
12803
13008
|
};
|
|
12804
13009
|
var sortAssets = function sortAssets(assets) {
|
|
12805
13010
|
return assets.sort(function (a, b) {
|
|
12806
|
-
|
|
12807
|
-
var bLoc = extractAssetLocation(b);
|
|
12808
|
-
// 1. Sort by parents first
|
|
12809
|
-
if (aLoc.parents !== bLoc.parents) {
|
|
12810
|
-
return Number(aLoc.parents) - Number(bLoc.parents);
|
|
12811
|
-
}
|
|
12812
|
-
// 2. If parents are equal, use priority function
|
|
12813
|
-
var aIsHere = isHere(aLoc);
|
|
12814
|
-
var bIsHere = isHere(bLoc);
|
|
12815
|
-
var aHasGlobal = hasJunction(aLoc, 'GlobalConsensus');
|
|
12816
|
-
var bHasGlobal = hasJunction(bLoc, 'GlobalConsensus');
|
|
12817
|
-
var aGeneralIndex = getJunctionValue(aLoc, 'GeneralIndex');
|
|
12818
|
-
var bGeneralIndex = getJunctionValue(bLoc, 'GeneralIndex');
|
|
12819
|
-
var getPriority = function getPriority(isHere, hasGlobal) {
|
|
12820
|
-
if (isHere) return 0;
|
|
12821
|
-
if (hasGlobal) return 2;
|
|
12822
|
-
return 1;
|
|
12823
|
-
};
|
|
12824
|
-
var aPriority = getPriority(aIsHere, aHasGlobal);
|
|
12825
|
-
var bPriority = getPriority(bIsHere, bHasGlobal);
|
|
12826
|
-
if (aPriority !== bPriority) return aPriority - bPriority;
|
|
12827
|
-
if (aGeneralIndex === undefined && bGeneralIndex === undefined) return 0;
|
|
12828
|
-
if (aGeneralIndex === undefined) return 1;
|
|
12829
|
-
if (bGeneralIndex === undefined) return -1;
|
|
12830
|
-
var aIndex = BigInt(aGeneralIndex);
|
|
12831
|
-
var bIndex = BigInt(bGeneralIndex);
|
|
12832
|
-
return aIndex < bIndex ? -1 : aIndex > bIndex ? 1 : 0;
|
|
13011
|
+
return compareLocationOrder(extractAssetLocation(a), extractAssetLocation(b));
|
|
12833
13012
|
});
|
|
12834
13013
|
};
|
|
12835
13014
|
|
|
@@ -12886,6 +13065,7 @@ var createSwapBuilder = function createSwapBuilder(options) {
|
|
|
12886
13065
|
var from = options.from,
|
|
12887
13066
|
to = options.to,
|
|
12888
13067
|
currency = options.currency,
|
|
13068
|
+
feeAsset = options.feeAsset,
|
|
12889
13069
|
_options$swapOptions = options.swapOptions,
|
|
12890
13070
|
currencyTo = _options$swapOptions.currencyTo,
|
|
12891
13071
|
evmSenderAddress = _options$swapOptions.evmSenderAddress,
|
|
@@ -12900,7 +13080,7 @@ var createSwapBuilder = function createSwapBuilder(options) {
|
|
|
12900
13080
|
if (Array.isArray(currency)) {
|
|
12901
13081
|
throw new UnsupportedOperationError('Swaps with multiple currencies are not supported.');
|
|
12902
13082
|
}
|
|
12903
|
-
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());
|
|
12904
13084
|
if (onStatusChange) {
|
|
12905
13085
|
builder = builder.onStatusChange(onStatusChange);
|
|
12906
13086
|
}
|
|
@@ -13079,6 +13259,25 @@ var createChainClient = /*#__PURE__*/function () {
|
|
|
13079
13259
|
};
|
|
13080
13260
|
}();
|
|
13081
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
|
+
|
|
13082
13281
|
var getErrorInstruction = function getErrorInstruction(message, index) {
|
|
13083
13282
|
if (index === undefined || _typeof(message) !== 'object' || message === null) {
|
|
13084
13283
|
return undefined;
|
|
@@ -13589,30 +13788,37 @@ var PolkadotApi = /*#__PURE__*/function () {
|
|
|
13589
13788
|
case 0:
|
|
13590
13789
|
clientTtlMs = _args.length > 1 && _args[1] !== undefined ? _args[1] : DEFAULT_TTL_MS;
|
|
13591
13790
|
destination = _args.length > 2 ? _args[2] : undefined;
|
|
13592
|
-
if (!(this._chain
|
|
13791
|
+
if (!(this._chain === chain || isExternalChain(chain))) {
|
|
13593
13792
|
_context.n = 1;
|
|
13594
13793
|
break;
|
|
13595
13794
|
}
|
|
13596
13795
|
return _context.a(2);
|
|
13597
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:
|
|
13598
13804
|
this._ttlMs = clientTtlMs;
|
|
13599
13805
|
this._chain = chain;
|
|
13600
|
-
_context.n =
|
|
13806
|
+
_context.n = 3;
|
|
13601
13807
|
return resolveChainApi(this._config, chain, function (wsUrl) {
|
|
13602
13808
|
return _this.leaseClient(wsUrl, _this._ttlMs);
|
|
13603
13809
|
}, this._customCtx);
|
|
13604
|
-
case
|
|
13810
|
+
case 3:
|
|
13605
13811
|
this._api = _context.v;
|
|
13606
|
-
_context.n =
|
|
13812
|
+
_context.n = 4;
|
|
13607
13813
|
return this.maybeHydrateCustomChain(chain);
|
|
13608
|
-
case
|
|
13814
|
+
case 4:
|
|
13609
13815
|
if (!(typeof destination === 'string' && isCustomChain(destination))) {
|
|
13610
|
-
_context.n =
|
|
13816
|
+
_context.n = 5;
|
|
13611
13817
|
break;
|
|
13612
13818
|
}
|
|
13613
|
-
_context.n =
|
|
13819
|
+
_context.n = 5;
|
|
13614
13820
|
return this.hydrateCustomChain(destination);
|
|
13615
|
-
case
|
|
13821
|
+
case 5:
|
|
13616
13822
|
return _context.a(2);
|
|
13617
13823
|
}
|
|
13618
13824
|
}, _callee, this);
|
|
@@ -13627,6 +13833,11 @@ var PolkadotApi = /*#__PURE__*/function () {
|
|
|
13627
13833
|
value: function setCustomCtx(ctx) {
|
|
13628
13834
|
this._customCtx = ctx;
|
|
13629
13835
|
}
|
|
13836
|
+
}, {
|
|
13837
|
+
key: "resetChain",
|
|
13838
|
+
value: function resetChain() {
|
|
13839
|
+
this._chain = undefined;
|
|
13840
|
+
}
|
|
13630
13841
|
}, {
|
|
13631
13842
|
key: "hydrateCustomChain",
|
|
13632
13843
|
value: function () {
|
|
@@ -13941,4 +14152,4 @@ var createClientCache = function createClientCache(maxSize, pingClient, onEvicti
|
|
|
13941
14152
|
};
|
|
13942
14153
|
};
|
|
13943
14154
|
|
|
13944
|
-
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, 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 };
|