@paraspell/sdk-core 8.12.0 → 8.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1315 -1072
- package/dist/index.d.ts +54 -12
- package/dist/index.mjs +1315 -1073
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -954,25 +954,6 @@ var ScenarioNotSupportedError = /*#__PURE__*/function (_Error) {
|
|
|
954
954
|
return _createClass(ScenarioNotSupportedError);
|
|
955
955
|
}(/*#__PURE__*/_wrapNativeSuper(Error));
|
|
956
956
|
|
|
957
|
-
var DEFAULT_FEE_ASSET = 0;
|
|
958
|
-
var ETH_PARA_ID = 1;
|
|
959
|
-
var ETH_CHAIN_ID = BigInt(ETH_PARA_ID);
|
|
960
|
-
var ETHEREUM_JUNCTION = {
|
|
961
|
-
GlobalConsensus: {
|
|
962
|
-
Ethereum: {
|
|
963
|
-
chainId: ETH_CHAIN_ID
|
|
964
|
-
}
|
|
965
|
-
}
|
|
966
|
-
};
|
|
967
|
-
var DOT_MULTILOCATION = {
|
|
968
|
-
parents: sdkCommon.Parents.ONE,
|
|
969
|
-
interior: 'Here'
|
|
970
|
-
};
|
|
971
|
-
var SYSTEM_NODES_POLKADOT = ['PeoplePolkadot', 'CoretimePolkadot', 'Collectives'];
|
|
972
|
-
var SYSTEM_NODES_KUSAMA = ['PeopleKusama', 'CoretimeKusama'];
|
|
973
|
-
var ASSET_HUB_EXECUTION_FEE = 2200000000n; // 0.22 DOT
|
|
974
|
-
// 30% padding
|
|
975
|
-
|
|
976
957
|
var AssetHubPolkadot$1 = {
|
|
977
958
|
name: "AssetHub",
|
|
978
959
|
info: "PolkadotAssetHub",
|
|
@@ -1226,14 +1207,14 @@ var Centrifuge$1 = {
|
|
|
1226
1207
|
info: "centrifuge",
|
|
1227
1208
|
paraId: 2031,
|
|
1228
1209
|
providers: [
|
|
1229
|
-
{
|
|
1230
|
-
name: "Centrifuge",
|
|
1231
|
-
endpoint: "wss://fullnode.centrifuge.io"
|
|
1232
|
-
},
|
|
1233
1210
|
{
|
|
1234
1211
|
name: "LuckyFriday",
|
|
1235
1212
|
endpoint: "wss://rpc-centrifuge.luckyfriday.io"
|
|
1236
1213
|
},
|
|
1214
|
+
{
|
|
1215
|
+
name: "Centrifuge",
|
|
1216
|
+
endpoint: "wss://fullnode.centrifuge.io"
|
|
1217
|
+
},
|
|
1237
1218
|
{
|
|
1238
1219
|
name: "OnFinality",
|
|
1239
1220
|
endpoint: "wss://centrifuge-parachain.api.onfinality.io/public-ws"
|
|
@@ -1329,20 +1310,20 @@ var Moonbeam$1 = {
|
|
|
1329
1310
|
paraId: 2004,
|
|
1330
1311
|
providers: [
|
|
1331
1312
|
{
|
|
1332
|
-
name: "
|
|
1333
|
-
endpoint: "wss://moonbeam
|
|
1313
|
+
name: "IBP1",
|
|
1314
|
+
endpoint: "wss://moonbeam.ibp.network"
|
|
1334
1315
|
},
|
|
1335
1316
|
{
|
|
1336
|
-
name: "
|
|
1337
|
-
endpoint: "wss://moonbeam.public.
|
|
1317
|
+
name: "RadiumBlock",
|
|
1318
|
+
endpoint: "wss://moonbeam.public.curie.radiumblock.co/ws"
|
|
1338
1319
|
},
|
|
1339
1320
|
{
|
|
1340
|
-
name: "
|
|
1341
|
-
endpoint: "wss://moonbeam-rpc.
|
|
1321
|
+
name: "Allnodes",
|
|
1322
|
+
endpoint: "wss://moonbeam-rpc.publicnode.com"
|
|
1342
1323
|
},
|
|
1343
1324
|
{
|
|
1344
|
-
name: "
|
|
1345
|
-
endpoint: "wss://moonbeam.
|
|
1325
|
+
name: "Blast",
|
|
1326
|
+
endpoint: "wss://moonbeam.public.blastapi.io"
|
|
1346
1327
|
},
|
|
1347
1328
|
{
|
|
1348
1329
|
name: "IBP2",
|
|
@@ -1356,10 +1337,6 @@ var Moonbeam$1 = {
|
|
|
1356
1337
|
name: "OnFinality",
|
|
1357
1338
|
endpoint: "wss://moonbeam.api.onfinality.io/public-ws"
|
|
1358
1339
|
},
|
|
1359
|
-
{
|
|
1360
|
-
name: "RadiumBlock",
|
|
1361
|
-
endpoint: "wss://moonbeam.public.curie.radiumblock.co/ws"
|
|
1362
|
-
},
|
|
1363
1340
|
{
|
|
1364
1341
|
name: "UnitedBloc",
|
|
1365
1342
|
endpoint: "wss://moonbeam.unitedbloc.com"
|
|
@@ -2304,57 +2281,24 @@ var getNodeProviders = function getNodeProviders(node) {
|
|
|
2304
2281
|
});
|
|
2305
2282
|
};
|
|
2306
2283
|
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
return ETH_PARA_ID;
|
|
2316
|
-
}
|
|
2317
|
-
return getNodeConfig(node).paraId;
|
|
2318
|
-
};
|
|
2319
|
-
|
|
2320
|
-
var shuffleArray = function shuffleArray(array) {
|
|
2321
|
-
var copy = _toConsumableArray(array);
|
|
2322
|
-
for (var i = copy.length - 1; i > 0; i--) {
|
|
2323
|
-
var j = Math.floor(Math.random() * (i + 1));
|
|
2324
|
-
var _ref = [copy[j], copy[i]];
|
|
2325
|
-
copy[i] = _ref[0];
|
|
2326
|
-
copy[j] = _ref[1];
|
|
2284
|
+
var DEFAULT_FEE_ASSET = 0;
|
|
2285
|
+
var ETH_PARA_ID = 1;
|
|
2286
|
+
var ETH_CHAIN_ID = BigInt(ETH_PARA_ID);
|
|
2287
|
+
var ETHEREUM_JUNCTION = {
|
|
2288
|
+
GlobalConsensus: {
|
|
2289
|
+
Ethereum: {
|
|
2290
|
+
chainId: ETH_CHAIN_ID
|
|
2291
|
+
}
|
|
2327
2292
|
}
|
|
2328
|
-
return copy;
|
|
2329
2293
|
};
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
if (ALLOWED_NODES.includes(node)) {
|
|
2334
|
-
return shuffleArray(wsProviders);
|
|
2335
|
-
}
|
|
2336
|
-
return wsProviders;
|
|
2294
|
+
var DOT_MULTILOCATION = {
|
|
2295
|
+
parents: sdkCommon.Parents.ONE,
|
|
2296
|
+
interior: 'Here'
|
|
2337
2297
|
};
|
|
2338
|
-
|
|
2339
|
-
var
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
2343
|
-
while (1) switch (_context.prev = _context.next) {
|
|
2344
|
-
case 0:
|
|
2345
|
-
wsUrl = getNodeProviders(node);
|
|
2346
|
-
resolvedWsUrl = Array.isArray(wsUrl) ? shuffleWsProviders(node, wsUrl) : wsUrl;
|
|
2347
|
-
return _context.abrupt("return", api.createApiInstance(resolvedWsUrl));
|
|
2348
|
-
case 3:
|
|
2349
|
-
case "end":
|
|
2350
|
-
return _context.stop();
|
|
2351
|
-
}
|
|
2352
|
-
}, _callee);
|
|
2353
|
-
}));
|
|
2354
|
-
return function createApiInstanceForNode(_x, _x2) {
|
|
2355
|
-
return _ref.apply(this, arguments);
|
|
2356
|
-
};
|
|
2357
|
-
}();
|
|
2298
|
+
var SYSTEM_NODES_POLKADOT = ['PeoplePolkadot', 'CoretimePolkadot', 'Collectives'];
|
|
2299
|
+
var SYSTEM_NODES_KUSAMA = ['PeopleKusama', 'CoretimeKusama'];
|
|
2300
|
+
var ASSET_HUB_EXECUTION_FEE = 2200000000n; // 0.22 DOT
|
|
2301
|
+
// 30% padding
|
|
2358
2302
|
|
|
2359
2303
|
var createX1Payload = function createX1Payload(version, junction) {
|
|
2360
2304
|
return version === exports.Version.V4 ? {
|
|
@@ -2517,297 +2461,389 @@ var throwUnsupportedCurrency = function throwUnsupportedCurrency(currency, node)
|
|
|
2517
2461
|
throw new assets.InvalidCurrencyError("".concat(isDestination ? 'Destination' : 'Origin', " node ").concat(node, " does not support currency ").concat(JSON.stringify(currency), "."));
|
|
2518
2462
|
};
|
|
2519
2463
|
|
|
2520
|
-
var
|
|
2521
|
-
var
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
return recipientAddress;
|
|
2529
|
-
}
|
|
2530
|
-
var isEthAddress = ethers.ethers.isAddress(recipientAddress);
|
|
2531
|
-
var getAccountPayload = function getAccountPayload(allowNetwork) {
|
|
2532
|
-
if (isEthAddress) {
|
|
2533
|
-
return {
|
|
2534
|
-
AccountKey20: _objectSpread2({
|
|
2535
|
-
key: recipientAddress
|
|
2536
|
-
}, allowNetwork ? {
|
|
2537
|
-
network: 'any'
|
|
2538
|
-
} : {})
|
|
2539
|
-
};
|
|
2464
|
+
var buildMultiLocation = function buildMultiLocation(_ref) {
|
|
2465
|
+
var paraIdTo = _ref.paraIdTo,
|
|
2466
|
+
asset = _ref.asset,
|
|
2467
|
+
origin = _ref.origin,
|
|
2468
|
+
destination = _ref.destination;
|
|
2469
|
+
if (!assets.isForeignAsset(asset)) {
|
|
2470
|
+
if (_typeof(destination) === 'object') {
|
|
2471
|
+
return destination;
|
|
2540
2472
|
}
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
};
|
|
2560
|
-
} else if (scenario === 'ParaToPara' && pallet === 'XTokens') {
|
|
2473
|
+
// ParaToRelay scenario
|
|
2474
|
+
if (sdkCommon.isRelayChain(destination)) {
|
|
2475
|
+
return DOT_MULTILOCATION;
|
|
2476
|
+
}
|
|
2477
|
+
// If it is a native asset, search by symbol on AssetHub and use the multiLocation from there
|
|
2478
|
+
var assetHubAsset = assets.getOtherAssets(destination).find(function (ahAsset) {
|
|
2479
|
+
var _ahAsset$symbol, _asset$symbol;
|
|
2480
|
+
return ((_ahAsset$symbol = ahAsset.symbol) === null || _ahAsset$symbol === void 0 ? void 0 : _ahAsset$symbol.toLowerCase()) === ((_asset$symbol = asset.symbol) === null || _asset$symbol === void 0 ? void 0 : _asset$symbol.toLowerCase());
|
|
2481
|
+
});
|
|
2482
|
+
if (assetHubAsset === undefined) {
|
|
2483
|
+
throw new assets.InvalidCurrencyError("Asset ".concat(asset.symbol, " not found in AssetHub"));
|
|
2484
|
+
}
|
|
2485
|
+
if (assetHubAsset.multiLocation) {
|
|
2486
|
+
return assetHubAsset.multiLocation;
|
|
2487
|
+
}
|
|
2488
|
+
throw new assets.InvalidCurrencyError("Asset ".concat(asset.symbol, " has no multiLocation"));
|
|
2489
|
+
}
|
|
2490
|
+
var createDefaultMultiLocation = function createDefaultMultiLocation(assetId) {
|
|
2561
2491
|
return {
|
|
2562
2492
|
parents: sdkCommon.Parents.ONE,
|
|
2563
2493
|
interior: {
|
|
2564
|
-
|
|
2565
|
-
Parachain:
|
|
2566
|
-
},
|
|
2494
|
+
X3: [{
|
|
2495
|
+
Parachain: paraIdTo
|
|
2496
|
+
}, {
|
|
2497
|
+
PalletInstance: '50'
|
|
2498
|
+
}, {
|
|
2499
|
+
GeneralIndex: BigInt(assetId)
|
|
2500
|
+
}]
|
|
2567
2501
|
}
|
|
2568
2502
|
};
|
|
2569
|
-
}
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2503
|
+
};
|
|
2504
|
+
var isBifrostOrigin = origin === 'BifrostPolkadot' || origin === 'BifrostKusama';
|
|
2505
|
+
if (isBifrostOrigin) {
|
|
2506
|
+
return createDefaultMultiLocation(asset.assetId);
|
|
2507
|
+
}
|
|
2508
|
+
if (asset.multiLocation) {
|
|
2509
|
+
return asset.multiLocation;
|
|
2574
2510
|
} else {
|
|
2575
|
-
return
|
|
2576
|
-
parents: sdkCommon.Parents.ZERO,
|
|
2577
|
-
interior: createX1Payload(version, getAccountPayload(false))
|
|
2578
|
-
};
|
|
2511
|
+
return createDefaultMultiLocation(asset.assetId);
|
|
2579
2512
|
}
|
|
2580
2513
|
};
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
* @param multiLocation - The multiLocation to transform
|
|
2587
|
-
* @returns The transformed multiLocation
|
|
2588
|
-
*/
|
|
2589
|
-
var transformMultiLocation = function transformMultiLocation(multiLocation) {
|
|
2590
|
-
var newInterior;
|
|
2591
|
-
if (multiLocation.interior === 'Here') {
|
|
2592
|
-
newInterior = 'Here';
|
|
2593
|
-
} else {
|
|
2594
|
-
var junctions = Object.values(multiLocation.interior).flat().filter(function (junction) {
|
|
2595
|
-
return _typeof(junction) === 'object' && junction !== null;
|
|
2596
|
-
});
|
|
2597
|
-
var filteredJunctions = junctions.filter(function (junction) {
|
|
2598
|
-
return !('Parachain' in junction);
|
|
2599
|
-
});
|
|
2600
|
-
if (filteredJunctions.length === 0) {
|
|
2601
|
-
newInterior = 'Here';
|
|
2602
|
-
} else {
|
|
2603
|
-
newInterior = _defineProperty({}, "X".concat(filteredJunctions.length), filteredJunctions);
|
|
2604
|
-
}
|
|
2514
|
+
var getModifiedCurrencySelection = function getModifiedCurrencySelection(version, input) {
|
|
2515
|
+
var amount = input.asset.amount,
|
|
2516
|
+
overriddenAsset = input.overriddenAsset;
|
|
2517
|
+
if (overriddenAsset) {
|
|
2518
|
+
return addXcmVersionHeader(maybeOverrideMultiAssets(version, amount, [], overriddenAsset), version);
|
|
2605
2519
|
}
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
});
|
|
2520
|
+
var multiLocation = buildMultiLocation(input);
|
|
2521
|
+
var multiAsset = createMultiAsset(version, amount, multiLocation);
|
|
2522
|
+
return addXcmVersionHeader(multiAsset, version);
|
|
2610
2523
|
};
|
|
2611
2524
|
|
|
2612
|
-
var
|
|
2613
|
-
var
|
|
2614
|
-
var
|
|
2615
|
-
|
|
2525
|
+
var getCurrencySelection = function getCurrencySelection(input, useMultiAssets, currencySelection) {
|
|
2526
|
+
var origin = input.origin;
|
|
2527
|
+
var _getNode = getNode(origin),
|
|
2528
|
+
version = _getNode.version;
|
|
2529
|
+
if (useMultiAssets) {
|
|
2530
|
+
return getModifiedCurrencySelection(version, input);
|
|
2531
|
+
}
|
|
2532
|
+
return currencySelection;
|
|
2616
2533
|
};
|
|
2617
2534
|
|
|
2618
|
-
var
|
|
2619
|
-
if (
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
})) === null || _foreignAssets$find === void 0 ? void 0 : _foreignAssets$find.assetId) !== null && _foreignAssets$find$a !== void 0 ? _foreignAssets$find$a : null;
|
|
2631
|
-
}
|
|
2535
|
+
var getXTokensParameters = function getXTokensParameters(isMultiAssetTransfer, currencySelection, addressSelection, amount, fees, overriddenAsset) {
|
|
2536
|
+
if (isMultiAssetTransfer) {
|
|
2537
|
+
var isOverridenMultiAssets = overriddenAsset && !sdkCommon.isTMultiLocation(overriddenAsset);
|
|
2538
|
+
var feeAssetIndex = isOverridenMultiAssets ? overriddenAsset.findIndex(function (asset) {
|
|
2539
|
+
return asset.isFeeAsset;
|
|
2540
|
+
}) : undefined;
|
|
2541
|
+
return _objectSpread2(_objectSpread2(_defineProperty({}, isOverridenMultiAssets ? 'assets' : 'asset', currencySelection), isOverridenMultiAssets && {
|
|
2542
|
+
fee_item: feeAssetIndex
|
|
2543
|
+
}), {}, {
|
|
2544
|
+
dest: addressSelection,
|
|
2545
|
+
dest_weight_limit: fees
|
|
2546
|
+
});
|
|
2632
2547
|
}
|
|
2633
|
-
return
|
|
2548
|
+
return {
|
|
2549
|
+
currency_id: currencySelection,
|
|
2550
|
+
amount: BigInt(amount),
|
|
2551
|
+
dest: addressSelection,
|
|
2552
|
+
dest_weight_limit: fees
|
|
2553
|
+
};
|
|
2634
2554
|
};
|
|
2635
2555
|
|
|
2636
|
-
var
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
var
|
|
2644
|
-
var
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
tokenSymbol: tokenSymbol
|
|
2659
|
-
});
|
|
2660
|
-
}
|
|
2661
|
-
} catch (err) {
|
|
2662
|
-
_iterator2.e(err);
|
|
2663
|
-
} finally {
|
|
2664
|
-
_iterator2.f();
|
|
2665
|
-
}
|
|
2556
|
+
var XTokensTransferImpl = /*#__PURE__*/function () {
|
|
2557
|
+
function XTokensTransferImpl() {
|
|
2558
|
+
_classCallCheck(this, XTokensTransferImpl);
|
|
2559
|
+
}
|
|
2560
|
+
return _createClass(XTokensTransferImpl, null, [{
|
|
2561
|
+
key: "transferXTokens",
|
|
2562
|
+
value: function transferXTokens(input, currencySelection) {
|
|
2563
|
+
var fees = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Unlimited';
|
|
2564
|
+
var api = input.api,
|
|
2565
|
+
origin = input.origin,
|
|
2566
|
+
asset = input.asset,
|
|
2567
|
+
addressSelection = input.addressSelection,
|
|
2568
|
+
destination = input.destination,
|
|
2569
|
+
scenario = input.scenario,
|
|
2570
|
+
overriddenAsset = input.overriddenAsset,
|
|
2571
|
+
pallet = input.pallet,
|
|
2572
|
+
method = input.method,
|
|
2573
|
+
_input$useMultiAssetT = input.useMultiAssetTransfer,
|
|
2574
|
+
useMultiAssetTransfer = _input$useMultiAssetT === void 0 ? false : _input$useMultiAssetT;
|
|
2575
|
+
var isMultiLocationDestination = _typeof(destination) === 'object';
|
|
2576
|
+
if (isMultiLocationDestination) {
|
|
2577
|
+
throw new Error('Multilocation destinations are not supported for specific transfer you are trying to create. In special cases such as xTokens or xTransfer pallet try using address multilocation instead (for both destination and address in same multilocation set (eg. X2 - Parachain, Address). For further assistance please open issue in our repository.');
|
|
2666
2578
|
}
|
|
2579
|
+
var isBifrostOrigin = origin === 'BifrostPolkadot' || origin === 'BifrostKusama';
|
|
2580
|
+
var isAssetHubDest = destination === 'AssetHubPolkadot' || destination === 'AssetHubKusama';
|
|
2581
|
+
var isAstarOrShidenToRelay = scenario === 'ParaToRelay' && (origin === 'Astar' || origin === 'Shiden');
|
|
2582
|
+
var isOverridenMultiAssets = overriddenAsset && !sdkCommon.isTMultiLocation(overriddenAsset);
|
|
2583
|
+
var shouldUseMultiasset = useMultiAssetTransfer || isAstarOrShidenToRelay || isAssetHubDest && !isBifrostOrigin || !!isOverridenMultiAssets;
|
|
2584
|
+
var modifiedCurrencySelection = getCurrencySelection(input, shouldUseMultiasset, currencySelection);
|
|
2585
|
+
var section = shouldUseMultiasset ? isOverridenMultiAssets ? 'transfer_multiassets' : 'transfer_multiasset' : 'transfer';
|
|
2586
|
+
var parameters = getXTokensParameters(shouldUseMultiasset, modifiedCurrencySelection, addressSelection, asset.amount, fees, overriddenAsset);
|
|
2587
|
+
var call = {
|
|
2588
|
+
module: pallet !== null && pallet !== void 0 ? pallet : 'XTokens',
|
|
2589
|
+
section: method !== null && method !== void 0 ? method : section,
|
|
2590
|
+
parameters: parameters
|
|
2591
|
+
};
|
|
2592
|
+
return api.callTxMethod(call);
|
|
2667
2593
|
}
|
|
2668
|
-
}
|
|
2669
|
-
|
|
2670
|
-
} finally {
|
|
2671
|
-
_iterator.f();
|
|
2672
|
-
}
|
|
2673
|
-
var nativeAssetSymbol = assets.getNativeAssetSymbol(node);
|
|
2674
|
-
// Sum the fees that match the feeToken
|
|
2675
|
-
var totalDeliveryFees = deliveryFees.filter(function (df) {
|
|
2676
|
-
return df.tokenSymbol === nativeAssetSymbol;
|
|
2677
|
-
}).reduce(function (acc, df) {
|
|
2678
|
-
return acc + df.plancks;
|
|
2679
|
-
}, 0n);
|
|
2680
|
-
return totalDeliveryFees + executionFee;
|
|
2681
|
-
};
|
|
2594
|
+
}]);
|
|
2595
|
+
}();
|
|
2682
2596
|
|
|
2683
|
-
var
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2597
|
+
var getBridgeStatus = /*#__PURE__*/function () {
|
|
2598
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(api) {
|
|
2599
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
2600
|
+
while (1) switch (_context.prev = _context.next) {
|
|
2601
|
+
case 0:
|
|
2602
|
+
_context.next = 2;
|
|
2603
|
+
return api.init('BridgeHubPolkadot');
|
|
2604
|
+
case 2:
|
|
2605
|
+
_context.prev = 2;
|
|
2606
|
+
_context.next = 5;
|
|
2607
|
+
return api.getBridgeStatus();
|
|
2608
|
+
case 5:
|
|
2609
|
+
return _context.abrupt("return", _context.sent);
|
|
2610
|
+
case 6:
|
|
2611
|
+
_context.prev = 6;
|
|
2612
|
+
_context.next = 9;
|
|
2613
|
+
return api.disconnect();
|
|
2614
|
+
case 9:
|
|
2615
|
+
return _context.finish(6);
|
|
2616
|
+
case 10:
|
|
2617
|
+
case "end":
|
|
2618
|
+
return _context.stop();
|
|
2619
|
+
}
|
|
2620
|
+
}, _callee, null, [[2,, 6, 10]]);
|
|
2621
|
+
}));
|
|
2622
|
+
return function getBridgeStatus(_x) {
|
|
2623
|
+
return _ref.apply(this, arguments);
|
|
2624
|
+
};
|
|
2625
|
+
}();
|
|
2626
|
+
|
|
2627
|
+
var createBeneficiaryMultiLocation = function createBeneficiaryMultiLocation(_ref) {
|
|
2628
|
+
var api = _ref.api,
|
|
2629
|
+
scenario = _ref.scenario,
|
|
2630
|
+
pallet = _ref.pallet,
|
|
2631
|
+
recipientAddress = _ref.recipientAddress,
|
|
2632
|
+
version = _ref.version,
|
|
2633
|
+
paraId = _ref.paraId;
|
|
2634
|
+
if (sdkCommon.isTMultiLocation(recipientAddress)) {
|
|
2635
|
+
return recipientAddress;
|
|
2687
2636
|
}
|
|
2688
|
-
var
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2637
|
+
var isEthAddress = ethers.ethers.isAddress(recipientAddress);
|
|
2638
|
+
var getAccountPayload = function getAccountPayload(allowNetwork) {
|
|
2639
|
+
if (isEthAddress) {
|
|
2640
|
+
return {
|
|
2641
|
+
AccountKey20: _objectSpread2({
|
|
2642
|
+
key: recipientAddress
|
|
2643
|
+
}, allowNetwork ? {
|
|
2644
|
+
network: 'any'
|
|
2645
|
+
} : {})
|
|
2646
|
+
};
|
|
2697
2647
|
}
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
2718
|
-
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
tokenSymbol: tokenSymbol
|
|
2725
|
-
});
|
|
2726
|
-
}
|
|
2727
|
-
} catch (err) {
|
|
2728
|
-
_iterator2.e(err);
|
|
2729
|
-
} finally {
|
|
2730
|
-
_iterator2.f();
|
|
2731
|
-
}
|
|
2648
|
+
return {
|
|
2649
|
+
AccountId32: _objectSpread2({
|
|
2650
|
+
id: api.accountToHex(recipientAddress)
|
|
2651
|
+
}, allowNetwork ? {
|
|
2652
|
+
network: 'any'
|
|
2653
|
+
} : {})
|
|
2654
|
+
};
|
|
2655
|
+
};
|
|
2656
|
+
if (scenario === 'ParaToRelay') {
|
|
2657
|
+
return {
|
|
2658
|
+
parents: pallet === 'XTokens' ? sdkCommon.Parents.ONE : sdkCommon.Parents.ZERO,
|
|
2659
|
+
interior: createX1Payload(version, {
|
|
2660
|
+
AccountId32: _objectSpread2({
|
|
2661
|
+
id: api.accountToHex(recipientAddress)
|
|
2662
|
+
}, version === exports.Version.V1 ? {
|
|
2663
|
+
network: 'any'
|
|
2664
|
+
} : {})
|
|
2665
|
+
})
|
|
2666
|
+
};
|
|
2667
|
+
} else if (scenario === 'ParaToPara' && pallet === 'XTokens') {
|
|
2668
|
+
return {
|
|
2669
|
+
parents: sdkCommon.Parents.ONE,
|
|
2670
|
+
interior: {
|
|
2671
|
+
X2: [{
|
|
2672
|
+
Parachain: paraId
|
|
2673
|
+
}, getAccountPayload(version === exports.Version.V1 || version === exports.Version.V2)]
|
|
2732
2674
|
}
|
|
2733
|
-
}
|
|
2734
|
-
}
|
|
2735
|
-
|
|
2736
|
-
|
|
2737
|
-
|
|
2675
|
+
};
|
|
2676
|
+
} else if (scenario === 'ParaToPara' && pallet === 'PolkadotXcm') {
|
|
2677
|
+
return {
|
|
2678
|
+
parents: sdkCommon.Parents.ZERO,
|
|
2679
|
+
interior: createX1Payload(version, getAccountPayload(version === exports.Version.V1 || version === exports.Version.V2))
|
|
2680
|
+
};
|
|
2681
|
+
} else {
|
|
2682
|
+
return {
|
|
2683
|
+
parents: sdkCommon.Parents.ZERO,
|
|
2684
|
+
interior: createX1Payload(version, getAccountPayload(false))
|
|
2685
|
+
};
|
|
2738
2686
|
}
|
|
2739
|
-
var nativeAssetSymbol = assets.getNativeAssetSymbol(node);
|
|
2740
|
-
// Sum the fees that match the feeToken
|
|
2741
|
-
var totalDeliveryFees = deliveryFees.filter(function (df) {
|
|
2742
|
-
return df.tokenSymbol === nativeAssetSymbol;
|
|
2743
|
-
}).reduce(function (acc, df) {
|
|
2744
|
-
return acc + df.plancks;
|
|
2745
|
-
}, 0n);
|
|
2746
|
-
return totalDeliveryFees + executionFee;
|
|
2747
2687
|
};
|
|
2748
2688
|
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2689
|
+
/**
|
|
2690
|
+
* This function transforms a multiLocation by removing the `Parachain` junction
|
|
2691
|
+
* if it exists and setting the `parents` to `0`.
|
|
2692
|
+
*
|
|
2693
|
+
* @param multiLocation - The multiLocation to transform
|
|
2694
|
+
* @returns The transformed multiLocation
|
|
2695
|
+
*/
|
|
2696
|
+
var transformMultiLocation = function transformMultiLocation(multiLocation) {
|
|
2697
|
+
var newInterior;
|
|
2698
|
+
if (multiLocation.interior === 'Here') {
|
|
2699
|
+
newInterior = 'Here';
|
|
2700
|
+
} else {
|
|
2701
|
+
var junctions = Object.values(multiLocation.interior).flat().filter(function (junction) {
|
|
2702
|
+
return _typeof(junction) === 'object' && junction !== null;
|
|
2703
|
+
});
|
|
2704
|
+
var filteredJunctions = junctions.filter(function (junction) {
|
|
2705
|
+
return !('Parachain' in junction);
|
|
2706
|
+
});
|
|
2707
|
+
if (filteredJunctions.length === 0) {
|
|
2708
|
+
newInterior = 'Here';
|
|
2709
|
+
} else {
|
|
2710
|
+
newInterior = _defineProperty({}, "X".concat(filteredJunctions.length), filteredJunctions);
|
|
2711
|
+
}
|
|
2712
|
+
}
|
|
2713
|
+
return _objectSpread2(_objectSpread2({}, multiLocation), {}, {
|
|
2714
|
+
parents: sdkCommon.Parents.ZERO,
|
|
2715
|
+
interior: newInterior
|
|
2752
2716
|
});
|
|
2753
|
-
|
|
2754
|
-
|
|
2717
|
+
};
|
|
2718
|
+
|
|
2719
|
+
var createCustomXcmOnDest = function createCustomXcmOnDest(_ref, origin, version, messageId) {
|
|
2720
|
+
var api = _ref.api,
|
|
2721
|
+
address = _ref.address,
|
|
2722
|
+
asset = _ref.asset,
|
|
2723
|
+
scenario = _ref.scenario,
|
|
2724
|
+
senderAddress = _ref.senderAddress,
|
|
2725
|
+
ahAddress = _ref.ahAddress;
|
|
2726
|
+
if (!assets.isForeignAsset(asset)) {
|
|
2727
|
+
throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
|
|
2755
2728
|
}
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
var name = palletDetails.name;
|
|
2759
|
-
if (name !== 'XTokens' && name !== 'PolkadotXcm' && name !== 'XcmPallet') {
|
|
2760
|
-
throw new Error("Pallet ".concat(name, " is not supported"));
|
|
2729
|
+
if (!asset.multiLocation) {
|
|
2730
|
+
throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no multiLocation"));
|
|
2761
2731
|
}
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
throw new Error("Error index ".concat(errorIndex, " not found in ").concat(name, " pallet"));
|
|
2732
|
+
if (!senderAddress) {
|
|
2733
|
+
throw new InvalidParameterError("Please provide senderAddress");
|
|
2765
2734
|
}
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
var generateAddressMultiLocationV4 = function generateAddressMultiLocationV4(api, address) {
|
|
2770
|
-
var isMultiLocation = _typeof(address) === 'object';
|
|
2771
|
-
if (isMultiLocation) {
|
|
2772
|
-
return _defineProperty({}, exports.Version.V4, address);
|
|
2735
|
+
if (assets.isNodeEvm(origin) && !ahAddress) {
|
|
2736
|
+
throw new InvalidParameterError("Please provide ahAddress");
|
|
2773
2737
|
}
|
|
2774
|
-
var
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
2738
|
+
var ethAsset = assets.findAssetByMultiLocation(assets.getOtherAssets('Ethereum'), asset.multiLocation);
|
|
2739
|
+
if (!ethAsset) {
|
|
2740
|
+
throw new assets.InvalidCurrencyError("Could not obtain Ethereum asset address for ".concat(JSON.stringify(asset)));
|
|
2741
|
+
}
|
|
2742
|
+
var interiorSb = ethAsset.symbol === 'ETH' ? {
|
|
2743
|
+
Here: null
|
|
2744
|
+
} : {
|
|
2745
|
+
X1: [{
|
|
2746
|
+
AccountKey20: {
|
|
2747
|
+
network: null,
|
|
2748
|
+
key: ethAsset.assetId
|
|
2749
|
+
}
|
|
2750
|
+
}]
|
|
2751
|
+
};
|
|
2752
|
+
return _defineProperty({}, version, [{
|
|
2753
|
+
SetAppendix: [{
|
|
2754
|
+
DepositAsset: {
|
|
2755
|
+
assets: {
|
|
2756
|
+
Wild: 'All'
|
|
2757
|
+
},
|
|
2758
|
+
beneficiary: createBeneficiaryMultiLocation({
|
|
2759
|
+
api: api,
|
|
2760
|
+
scenario: scenario,
|
|
2761
|
+
pallet: 'PolkadotXcm',
|
|
2762
|
+
recipientAddress: assets.isNodeEvm(origin) ? ahAddress : senderAddress,
|
|
2763
|
+
version: version
|
|
2764
|
+
})
|
|
2765
|
+
}
|
|
2766
|
+
}]
|
|
2767
|
+
}, {
|
|
2768
|
+
InitiateReserveWithdraw: {
|
|
2769
|
+
assets: {
|
|
2770
|
+
Wild: {
|
|
2771
|
+
AllOf: {
|
|
2772
|
+
id: asset.multiLocation,
|
|
2773
|
+
fun: 'Fungible'
|
|
2774
|
+
}
|
|
2781
2775
|
}
|
|
2782
|
-
}
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2776
|
+
},
|
|
2777
|
+
reserve: {
|
|
2778
|
+
parents: sdkCommon.Parents.TWO,
|
|
2779
|
+
interior: {
|
|
2780
|
+
X1: [ETHEREUM_JUNCTION]
|
|
2781
|
+
}
|
|
2782
|
+
},
|
|
2783
|
+
xcm: [{
|
|
2784
|
+
BuyExecution: {
|
|
2785
|
+
fees: {
|
|
2786
|
+
id: {
|
|
2787
|
+
parents: sdkCommon.Parents.ZERO,
|
|
2788
|
+
interior: interiorSb
|
|
2789
|
+
},
|
|
2790
|
+
fun: {
|
|
2791
|
+
Fungible: 1n
|
|
2792
|
+
}
|
|
2793
|
+
},
|
|
2794
|
+
weight_limit: 'Unlimited'
|
|
2795
|
+
}
|
|
2796
|
+
}, {
|
|
2797
|
+
DepositAsset: {
|
|
2798
|
+
assets: {
|
|
2799
|
+
Wild: {
|
|
2800
|
+
AllCounted: 1
|
|
2801
|
+
}
|
|
2802
|
+
},
|
|
2803
|
+
beneficiary: {
|
|
2804
|
+
parents: sdkCommon.Parents.ZERO,
|
|
2805
|
+
interior: {
|
|
2806
|
+
X1: [{
|
|
2807
|
+
AccountKey20: {
|
|
2808
|
+
network: null,
|
|
2809
|
+
key: address
|
|
2810
|
+
}
|
|
2811
|
+
}]
|
|
2812
|
+
}
|
|
2813
|
+
}
|
|
2786
2814
|
}
|
|
2815
|
+
}, {
|
|
2816
|
+
SetTopic: messageId
|
|
2787
2817
|
}]
|
|
2788
2818
|
}
|
|
2789
|
-
},
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
var getFees = function getFees(scenario) {
|
|
2793
|
-
if (scenario === 'ParaToRelay') {
|
|
2794
|
-
return 4600000000;
|
|
2795
|
-
} else if (scenario === 'ParaToPara') {
|
|
2796
|
-
return 399600000000;
|
|
2797
|
-
}
|
|
2798
|
-
throw new Error("Fees for scenario ".concat(scenario, " are not defined."));
|
|
2819
|
+
}, {
|
|
2820
|
+
SetTopic: messageId
|
|
2821
|
+
}]);
|
|
2799
2822
|
};
|
|
2800
2823
|
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
|
|
2808
|
-
|
|
2809
|
-
|
|
2810
|
-
|
|
2824
|
+
var generateMessageId = /*#__PURE__*/function () {
|
|
2825
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(api, senderAddress, sourceParaId, tokenAddress, recipientAddress, amount) {
|
|
2826
|
+
var accountNextId, sourceAccountHex, entropy;
|
|
2827
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
2828
|
+
while (1) switch (_context.prev = _context.next) {
|
|
2829
|
+
case 0:
|
|
2830
|
+
_context.next = 2;
|
|
2831
|
+
return api.getFromRpc('system', 'accountNextIndex', senderAddress);
|
|
2832
|
+
case 2:
|
|
2833
|
+
accountNextId = _context.sent;
|
|
2834
|
+
sourceAccountHex = api.accountToHex(senderAddress);
|
|
2835
|
+
entropy = new Uint8Array([].concat(_toConsumableArray(api.stringToUint8a(sourceParaId.toString())), _toConsumableArray(api.hexToUint8a(sourceAccountHex)), _toConsumableArray(api.stringToUint8a(accountNextId)), _toConsumableArray(api.hexToUint8a(tokenAddress)), _toConsumableArray(api.stringToUint8a(recipientAddress)), _toConsumableArray(api.stringToUint8a(amount.toString()))));
|
|
2836
|
+
return _context.abrupt("return", api.blake2AsHex(entropy));
|
|
2837
|
+
case 6:
|
|
2838
|
+
case "end":
|
|
2839
|
+
return _context.stop();
|
|
2840
|
+
}
|
|
2841
|
+
}, _callee);
|
|
2842
|
+
}));
|
|
2843
|
+
return function generateMessageId(_x, _x2, _x3, _x4, _x5, _x6) {
|
|
2844
|
+
return _ref.apply(this, arguments);
|
|
2845
|
+
};
|
|
2846
|
+
}();
|
|
2811
2847
|
|
|
2812
2848
|
var resolveParaId = function resolveParaId(paraId, destination) {
|
|
2813
2849
|
if (sdkCommon.isTMultiLocation(destination) || sdkCommon.isRelayChain(destination) || destination === 'Ethereum') {
|
|
@@ -2816,379 +2852,65 @@ var resolveParaId = function resolveParaId(paraId, destination) {
|
|
|
2816
2852
|
return paraId !== null && paraId !== void 0 ? paraId : getParaId(destination);
|
|
2817
2853
|
};
|
|
2818
2854
|
|
|
2819
|
-
var
|
|
2820
|
-
|
|
2821
|
-
var isEvm = assets.isNodeEvm(node);
|
|
2822
|
-
var isEthereumAddress = ethers.ethers.isAddress(address);
|
|
2823
|
-
if (isEvm) {
|
|
2824
|
-
if (!isEthereumAddress) {
|
|
2825
|
-
throw new InvalidAddressError("".concat(isDestination ? 'Destination node' : 'Node', " is an EVM chain, but the address provided is not a valid Ethereum address."));
|
|
2826
|
-
}
|
|
2827
|
-
} else {
|
|
2828
|
-
if (isEthereumAddress) {
|
|
2829
|
-
throw new InvalidAddressError("EVM address provided but ".concat(isDestination ? 'destination ' : '', "node is not an EVM chain."));
|
|
2830
|
-
}
|
|
2831
|
-
}
|
|
2855
|
+
var supportsXTokens = function supportsXTokens(obj) {
|
|
2856
|
+
return _typeof(obj) === 'object' && obj !== null && 'transferXTokens' in obj;
|
|
2832
2857
|
};
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
/**
|
|
2836
|
-
* Determines the relay chain for a given node.
|
|
2837
|
-
*
|
|
2838
|
-
* @param node - The node for which to determine the relay chain.
|
|
2839
|
-
* @returns 'Kusama' if the node's relay chain symbol is 'KSM'; otherwise, 'Polkadot'.
|
|
2840
|
-
*/
|
|
2841
|
-
var determineRelayChain = function determineRelayChain(node) {
|
|
2842
|
-
return assets.getRelayChainSymbol(node) === 'KSM' ? 'Kusama' : 'Polkadot';
|
|
2858
|
+
var supportsXTransfer = function supportsXTransfer(obj) {
|
|
2859
|
+
return _typeof(obj) === 'object' && obj !== null && 'transferXTransfer' in obj;
|
|
2843
2860
|
};
|
|
2844
|
-
|
|
2845
|
-
|
|
2846
|
-
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2851
|
-
|
|
2852
|
-
|
|
2861
|
+
var supportsPolkadotXCM = function supportsPolkadotXCM(obj) {
|
|
2862
|
+
return _typeof(obj) === 'object' && obj !== null && 'transferPolkadotXCM' in obj;
|
|
2863
|
+
};
|
|
2864
|
+
var ParachainNode = /*#__PURE__*/function () {
|
|
2865
|
+
function ParachainNode(node, info, type, version) {
|
|
2866
|
+
_classCallCheck(this, ParachainNode);
|
|
2867
|
+
this._assetCheckEnabled = true;
|
|
2868
|
+
this._info = info;
|
|
2869
|
+
this._type = type;
|
|
2870
|
+
this._node = node;
|
|
2871
|
+
this._version = version;
|
|
2872
|
+
}
|
|
2873
|
+
return _createClass(ParachainNode, [{
|
|
2874
|
+
key: "info",
|
|
2875
|
+
get: function get() {
|
|
2876
|
+
return this._info;
|
|
2853
2877
|
}
|
|
2854
|
-
|
|
2855
|
-
|
|
2856
|
-
|
|
2878
|
+
}, {
|
|
2879
|
+
key: "type",
|
|
2880
|
+
get: function get() {
|
|
2881
|
+
return this._type;
|
|
2857
2882
|
}
|
|
2858
|
-
|
|
2859
|
-
|
|
2860
|
-
|
|
2861
|
-
return
|
|
2862
|
-
});
|
|
2863
|
-
if (assetHubAsset === undefined) {
|
|
2864
|
-
throw new assets.InvalidCurrencyError("Asset ".concat(asset.symbol, " not found in AssetHub"));
|
|
2883
|
+
}, {
|
|
2884
|
+
key: "node",
|
|
2885
|
+
get: function get() {
|
|
2886
|
+
return this._node;
|
|
2865
2887
|
}
|
|
2866
|
-
|
|
2867
|
-
|
|
2888
|
+
}, {
|
|
2889
|
+
key: "version",
|
|
2890
|
+
get: function get() {
|
|
2891
|
+
return this._version;
|
|
2868
2892
|
}
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
parents: sdkCommon.Parents.ONE,
|
|
2874
|
-
interior: {
|
|
2875
|
-
X3: [{
|
|
2876
|
-
Parachain: paraIdTo
|
|
2877
|
-
}, {
|
|
2878
|
-
PalletInstance: '50'
|
|
2879
|
-
}, {
|
|
2880
|
-
GeneralIndex: BigInt(assetId)
|
|
2881
|
-
}]
|
|
2882
|
-
}
|
|
2883
|
-
};
|
|
2884
|
-
};
|
|
2885
|
-
var isBifrostOrigin = origin === 'BifrostPolkadot' || origin === 'BifrostKusama';
|
|
2886
|
-
if (isBifrostOrigin) {
|
|
2887
|
-
return createDefaultMultiLocation(asset.assetId);
|
|
2888
|
-
}
|
|
2889
|
-
if (asset.multiLocation) {
|
|
2890
|
-
return asset.multiLocation;
|
|
2891
|
-
} else {
|
|
2892
|
-
return createDefaultMultiLocation(asset.assetId);
|
|
2893
|
-
}
|
|
2894
|
-
};
|
|
2895
|
-
var getModifiedCurrencySelection = function getModifiedCurrencySelection(version, input) {
|
|
2896
|
-
var amount = input.asset.amount,
|
|
2897
|
-
overriddenAsset = input.overriddenAsset;
|
|
2898
|
-
if (overriddenAsset) {
|
|
2899
|
-
return addXcmVersionHeader(maybeOverrideMultiAssets(version, amount, [], overriddenAsset), version);
|
|
2900
|
-
}
|
|
2901
|
-
var multiLocation = buildMultiLocation(input);
|
|
2902
|
-
var multiAsset = createMultiAsset(version, amount, multiLocation);
|
|
2903
|
-
return addXcmVersionHeader(multiAsset, version);
|
|
2904
|
-
};
|
|
2905
|
-
|
|
2906
|
-
var getCurrencySelection = function getCurrencySelection(input, useMultiAssets, currencySelection) {
|
|
2907
|
-
var origin = input.origin;
|
|
2908
|
-
var _getNode = getNode(origin),
|
|
2909
|
-
version = _getNode.version;
|
|
2910
|
-
if (useMultiAssets) {
|
|
2911
|
-
return getModifiedCurrencySelection(version, input);
|
|
2912
|
-
}
|
|
2913
|
-
return currencySelection;
|
|
2914
|
-
};
|
|
2915
|
-
|
|
2916
|
-
var getXTokensParameters = function getXTokensParameters(isMultiAssetTransfer, currencySelection, addressSelection, amount, fees, overriddenAsset) {
|
|
2917
|
-
if (isMultiAssetTransfer) {
|
|
2918
|
-
var isOverridenMultiAssets = overriddenAsset && !sdkCommon.isTMultiLocation(overriddenAsset);
|
|
2919
|
-
var feeAssetIndex = isOverridenMultiAssets ? overriddenAsset.findIndex(function (asset) {
|
|
2920
|
-
return asset.isFeeAsset;
|
|
2921
|
-
}) : undefined;
|
|
2922
|
-
return _objectSpread2(_objectSpread2(_defineProperty({}, isOverridenMultiAssets ? 'assets' : 'asset', currencySelection), isOverridenMultiAssets && {
|
|
2923
|
-
fee_item: feeAssetIndex
|
|
2924
|
-
}), {}, {
|
|
2925
|
-
dest: addressSelection,
|
|
2926
|
-
dest_weight_limit: fees
|
|
2927
|
-
});
|
|
2928
|
-
}
|
|
2929
|
-
return {
|
|
2930
|
-
currency_id: currencySelection,
|
|
2931
|
-
amount: BigInt(amount),
|
|
2932
|
-
dest: addressSelection,
|
|
2933
|
-
dest_weight_limit: fees
|
|
2934
|
-
};
|
|
2935
|
-
};
|
|
2936
|
-
|
|
2937
|
-
var XTokensTransferImpl = /*#__PURE__*/function () {
|
|
2938
|
-
function XTokensTransferImpl() {
|
|
2939
|
-
_classCallCheck(this, XTokensTransferImpl);
|
|
2940
|
-
}
|
|
2941
|
-
return _createClass(XTokensTransferImpl, null, [{
|
|
2942
|
-
key: "transferXTokens",
|
|
2943
|
-
value: function transferXTokens(input, currencySelection) {
|
|
2944
|
-
var fees = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Unlimited';
|
|
2945
|
-
var api = input.api,
|
|
2946
|
-
origin = input.origin,
|
|
2947
|
-
asset = input.asset,
|
|
2948
|
-
addressSelection = input.addressSelection,
|
|
2949
|
-
destination = input.destination,
|
|
2950
|
-
scenario = input.scenario,
|
|
2951
|
-
overriddenAsset = input.overriddenAsset,
|
|
2952
|
-
pallet = input.pallet,
|
|
2953
|
-
method = input.method,
|
|
2954
|
-
_input$useMultiAssetT = input.useMultiAssetTransfer,
|
|
2955
|
-
useMultiAssetTransfer = _input$useMultiAssetT === void 0 ? false : _input$useMultiAssetT;
|
|
2956
|
-
var isMultiLocationDestination = _typeof(destination) === 'object';
|
|
2957
|
-
if (isMultiLocationDestination) {
|
|
2958
|
-
throw new Error('Multilocation destinations are not supported for specific transfer you are trying to create. In special cases such as xTokens or xTransfer pallet try using address multilocation instead (for both destination and address in same multilocation set (eg. X2 - Parachain, Address). For further assistance please open issue in our repository.');
|
|
2959
|
-
}
|
|
2960
|
-
var isBifrostOrigin = origin === 'BifrostPolkadot' || origin === 'BifrostKusama';
|
|
2961
|
-
var isAssetHubDest = destination === 'AssetHubPolkadot' || destination === 'AssetHubKusama';
|
|
2962
|
-
var isAstarOrShidenToRelay = scenario === 'ParaToRelay' && (origin === 'Astar' || origin === 'Shiden');
|
|
2963
|
-
var isOverridenMultiAssets = overriddenAsset && !sdkCommon.isTMultiLocation(overriddenAsset);
|
|
2964
|
-
var shouldUseMultiasset = useMultiAssetTransfer || isAstarOrShidenToRelay || isAssetHubDest && !isBifrostOrigin || !!isOverridenMultiAssets;
|
|
2965
|
-
var modifiedCurrencySelection = getCurrencySelection(input, shouldUseMultiasset, currencySelection);
|
|
2966
|
-
var section = shouldUseMultiasset ? isOverridenMultiAssets ? 'transfer_multiassets' : 'transfer_multiasset' : 'transfer';
|
|
2967
|
-
var parameters = getXTokensParameters(shouldUseMultiasset, modifiedCurrencySelection, addressSelection, asset.amount, fees, overriddenAsset);
|
|
2968
|
-
var call = {
|
|
2969
|
-
module: pallet !== null && pallet !== void 0 ? pallet : 'XTokens',
|
|
2970
|
-
section: method !== null && method !== void 0 ? method : section,
|
|
2971
|
-
parameters: parameters
|
|
2972
|
-
};
|
|
2973
|
-
return api.callTxMethod(call);
|
|
2893
|
+
}, {
|
|
2894
|
+
key: "assetCheckEnabled",
|
|
2895
|
+
get: function get() {
|
|
2896
|
+
return this._assetCheckEnabled;
|
|
2974
2897
|
}
|
|
2975
|
-
}]);
|
|
2976
|
-
}();
|
|
2977
|
-
|
|
2978
|
-
var getBridgeStatus = /*#__PURE__*/function () {
|
|
2979
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(api) {
|
|
2980
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
2981
|
-
while (1) switch (_context.prev = _context.next) {
|
|
2982
|
-
case 0:
|
|
2983
|
-
_context.next = 2;
|
|
2984
|
-
return api.init('BridgeHubPolkadot');
|
|
2985
|
-
case 2:
|
|
2986
|
-
_context.prev = 2;
|
|
2987
|
-
_context.next = 5;
|
|
2988
|
-
return api.getBridgeStatus();
|
|
2989
|
-
case 5:
|
|
2990
|
-
return _context.abrupt("return", _context.sent);
|
|
2991
|
-
case 6:
|
|
2992
|
-
_context.prev = 6;
|
|
2993
|
-
_context.next = 9;
|
|
2994
|
-
return api.disconnect();
|
|
2995
|
-
case 9:
|
|
2996
|
-
return _context.finish(6);
|
|
2997
|
-
case 10:
|
|
2998
|
-
case "end":
|
|
2999
|
-
return _context.stop();
|
|
3000
|
-
}
|
|
3001
|
-
}, _callee, null, [[2,, 6, 10]]);
|
|
3002
|
-
}));
|
|
3003
|
-
return function getBridgeStatus(_x) {
|
|
3004
|
-
return _ref.apply(this, arguments);
|
|
3005
|
-
};
|
|
3006
|
-
}();
|
|
3007
|
-
|
|
3008
|
-
var createCustomXcmOnDest = function createCustomXcmOnDest(_ref, version, messageId) {
|
|
3009
|
-
var api = _ref.api,
|
|
3010
|
-
address = _ref.address,
|
|
3011
|
-
asset = _ref.asset,
|
|
3012
|
-
scenario = _ref.scenario,
|
|
3013
|
-
senderAddress = _ref.senderAddress;
|
|
3014
|
-
if (!assets.isForeignAsset(asset)) {
|
|
3015
|
-
throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
|
|
3016
|
-
}
|
|
3017
|
-
if (!asset.multiLocation) {
|
|
3018
|
-
throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no multiLocation"));
|
|
3019
|
-
}
|
|
3020
|
-
if (!senderAddress) {
|
|
3021
|
-
throw new assets.InvalidCurrencyError("Please provide senderAddress");
|
|
3022
|
-
}
|
|
3023
|
-
var ethAsset = assets.findAssetByMultiLocation(assets.getOtherAssets('Ethereum'), asset.multiLocation);
|
|
3024
|
-
if (!ethAsset) {
|
|
3025
|
-
throw new assets.InvalidCurrencyError("Could not obtain Ethereum asset address for ".concat(JSON.stringify(asset)));
|
|
3026
|
-
}
|
|
3027
|
-
var interiorSb = ethAsset.symbol === 'ETH' ? {
|
|
3028
|
-
Here: null
|
|
3029
|
-
} : {
|
|
3030
|
-
X1: [{
|
|
3031
|
-
AccountKey20: {
|
|
3032
|
-
network: null,
|
|
3033
|
-
key: ethAsset.assetId
|
|
3034
|
-
}
|
|
3035
|
-
}]
|
|
3036
|
-
};
|
|
3037
|
-
return _defineProperty({}, version, [{
|
|
3038
|
-
SetAppendix: [{
|
|
3039
|
-
DepositAsset: {
|
|
3040
|
-
assets: {
|
|
3041
|
-
Wild: 'All'
|
|
3042
|
-
},
|
|
3043
|
-
beneficiary: createBeneficiaryMultiLocation({
|
|
3044
|
-
api: api,
|
|
3045
|
-
scenario: scenario,
|
|
3046
|
-
pallet: 'PolkadotXcm',
|
|
3047
|
-
recipientAddress: senderAddress,
|
|
3048
|
-
version: version
|
|
3049
|
-
})
|
|
3050
|
-
}
|
|
3051
|
-
}]
|
|
3052
2898
|
}, {
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
|
|
3057
|
-
|
|
3058
|
-
fun: 'Fungible'
|
|
3059
|
-
}
|
|
3060
|
-
}
|
|
3061
|
-
},
|
|
3062
|
-
reserve: {
|
|
3063
|
-
parents: sdkCommon.Parents.TWO,
|
|
3064
|
-
interior: {
|
|
3065
|
-
X1: [ETHEREUM_JUNCTION]
|
|
3066
|
-
}
|
|
3067
|
-
},
|
|
3068
|
-
xcm: [{
|
|
3069
|
-
BuyExecution: {
|
|
3070
|
-
fees: {
|
|
3071
|
-
id: {
|
|
3072
|
-
parents: sdkCommon.Parents.ZERO,
|
|
3073
|
-
interior: interiorSb
|
|
3074
|
-
},
|
|
3075
|
-
fun: {
|
|
3076
|
-
Fungible: 1n
|
|
3077
|
-
}
|
|
3078
|
-
},
|
|
3079
|
-
weight_limit: 'Unlimited'
|
|
3080
|
-
}
|
|
3081
|
-
}, {
|
|
3082
|
-
DepositAsset: {
|
|
3083
|
-
assets: {
|
|
3084
|
-
Wild: {
|
|
3085
|
-
AllCounted: 1
|
|
3086
|
-
}
|
|
3087
|
-
},
|
|
3088
|
-
beneficiary: {
|
|
3089
|
-
parents: sdkCommon.Parents.ZERO,
|
|
3090
|
-
interior: {
|
|
3091
|
-
X1: [{
|
|
3092
|
-
AccountKey20: {
|
|
3093
|
-
network: null,
|
|
3094
|
-
key: address
|
|
3095
|
-
}
|
|
3096
|
-
}]
|
|
3097
|
-
}
|
|
3098
|
-
}
|
|
3099
|
-
}
|
|
3100
|
-
}, {
|
|
3101
|
-
SetTopic: messageId
|
|
3102
|
-
}]
|
|
3103
|
-
}
|
|
3104
|
-
}, {
|
|
3105
|
-
SetTopic: messageId
|
|
3106
|
-
}]);
|
|
3107
|
-
};
|
|
3108
|
-
|
|
3109
|
-
var generateMessageId = /*#__PURE__*/function () {
|
|
3110
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(api, senderAddress, sourceParaId, tokenAddress, recipientAddress, amount) {
|
|
3111
|
-
var accountNextId, sourceAccountHex, entropy;
|
|
3112
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3113
|
-
while (1) switch (_context.prev = _context.next) {
|
|
3114
|
-
case 0:
|
|
3115
|
-
_context.next = 2;
|
|
3116
|
-
return api.getFromRpc('system', 'accountNextIndex', senderAddress);
|
|
3117
|
-
case 2:
|
|
3118
|
-
accountNextId = _context.sent;
|
|
3119
|
-
sourceAccountHex = api.accountToHex(senderAddress);
|
|
3120
|
-
entropy = new Uint8Array([].concat(_toConsumableArray(api.stringToUint8a(sourceParaId.toString())), _toConsumableArray(api.hexToUint8a(sourceAccountHex)), _toConsumableArray(api.stringToUint8a(accountNextId)), _toConsumableArray(api.hexToUint8a(tokenAddress)), _toConsumableArray(api.stringToUint8a(recipientAddress)), _toConsumableArray(api.stringToUint8a(amount.toString()))));
|
|
3121
|
-
return _context.abrupt("return", api.blake2AsHex(entropy));
|
|
3122
|
-
case 6:
|
|
3123
|
-
case "end":
|
|
3124
|
-
return _context.stop();
|
|
3125
|
-
}
|
|
3126
|
-
}, _callee);
|
|
3127
|
-
}));
|
|
3128
|
-
return function generateMessageId(_x, _x2, _x3, _x4, _x5, _x6) {
|
|
3129
|
-
return _ref.apply(this, arguments);
|
|
3130
|
-
};
|
|
3131
|
-
}();
|
|
3132
|
-
|
|
3133
|
-
var supportsXTokens = function supportsXTokens(obj) {
|
|
3134
|
-
return _typeof(obj) === 'object' && obj !== null && 'transferXTokens' in obj;
|
|
3135
|
-
};
|
|
3136
|
-
var supportsXTransfer = function supportsXTransfer(obj) {
|
|
3137
|
-
return _typeof(obj) === 'object' && obj !== null && 'transferXTransfer' in obj;
|
|
3138
|
-
};
|
|
3139
|
-
var supportsPolkadotXCM = function supportsPolkadotXCM(obj) {
|
|
3140
|
-
return _typeof(obj) === 'object' && obj !== null && 'transferPolkadotXCM' in obj;
|
|
3141
|
-
};
|
|
3142
|
-
var ParachainNode = /*#__PURE__*/function () {
|
|
3143
|
-
function ParachainNode(node, info, type, version) {
|
|
3144
|
-
_classCallCheck(this, ParachainNode);
|
|
3145
|
-
this._assetCheckEnabled = true;
|
|
3146
|
-
this._info = info;
|
|
3147
|
-
this._type = type;
|
|
3148
|
-
this._node = node;
|
|
3149
|
-
this._version = version;
|
|
3150
|
-
}
|
|
3151
|
-
return _createClass(ParachainNode, [{
|
|
3152
|
-
key: "info",
|
|
3153
|
-
get: function get() {
|
|
3154
|
-
return this._info;
|
|
3155
|
-
}
|
|
3156
|
-
}, {
|
|
3157
|
-
key: "type",
|
|
3158
|
-
get: function get() {
|
|
3159
|
-
return this._type;
|
|
3160
|
-
}
|
|
3161
|
-
}, {
|
|
3162
|
-
key: "node",
|
|
3163
|
-
get: function get() {
|
|
3164
|
-
return this._node;
|
|
3165
|
-
}
|
|
3166
|
-
}, {
|
|
3167
|
-
key: "version",
|
|
3168
|
-
get: function get() {
|
|
3169
|
-
return this._version;
|
|
3170
|
-
}
|
|
3171
|
-
}, {
|
|
3172
|
-
key: "assetCheckEnabled",
|
|
3173
|
-
get: function get() {
|
|
3174
|
-
return this._assetCheckEnabled;
|
|
3175
|
-
}
|
|
3176
|
-
}, {
|
|
3177
|
-
key: "canUseXTokens",
|
|
3178
|
-
value: function canUseXTokens(_ref) {
|
|
3179
|
-
var asset = _ref.asset;
|
|
3180
|
-
var isEthAsset = asset.multiLocation && assets.findAssetByMultiLocation(assets.getOtherAssets('Ethereum'), asset.multiLocation);
|
|
3181
|
-
return !isEthAsset;
|
|
2899
|
+
key: "canUseXTokens",
|
|
2900
|
+
value: function canUseXTokens(_ref) {
|
|
2901
|
+
var asset = _ref.asset;
|
|
2902
|
+
var isEthAsset = asset.multiLocation && assets.findAssetByMultiLocation(assets.getOtherAssets('Ethereum'), asset.multiLocation);
|
|
2903
|
+
return !isEthAsset;
|
|
3182
2904
|
}
|
|
3183
2905
|
}, {
|
|
3184
2906
|
key: "transfer",
|
|
3185
2907
|
value: function () {
|
|
3186
2908
|
var _transfer = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
3187
|
-
var api, asset, feeAsset, address, destination, paraIdTo, overriddenAsset, version, senderAddress, pallet, method, isRelayDestination, scenario, paraId, versionOrDefault, isLocalTransfer, isBifrostOrigin, isAssetHubDest, shouldUseMultiasset, input, _options, isEthAsset, isAHPOrigin, isAHPDest, isEthDest;
|
|
2909
|
+
var api, asset, feeAsset, address, destination, paraIdTo, overriddenAsset, version, senderAddress, ahAddress, pallet, method, isRelayDestination, scenario, paraId, versionOrDefault, isLocalTransfer, isBifrostOrigin, isAssetHubDest, shouldUseMultiasset, input, _options, isEthAsset, isAHPOrigin, isAHPDest, isEthDest;
|
|
3188
2910
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3189
2911
|
while (1) switch (_context.prev = _context.next) {
|
|
3190
2912
|
case 0:
|
|
3191
|
-
api = options.api, asset = options.asset, feeAsset = options.feeAsset, address = options.address, destination = options.to, paraIdTo = options.paraIdTo, overriddenAsset = options.overriddenAsset, version = options.version, senderAddress = options.senderAddress, pallet = options.pallet, method = options.method;
|
|
2913
|
+
api = options.api, asset = options.asset, feeAsset = options.feeAsset, address = options.address, destination = options.to, paraIdTo = options.paraIdTo, overriddenAsset = options.overriddenAsset, version = options.version, senderAddress = options.senderAddress, ahAddress = options.ahAddress, pallet = options.pallet, method = options.method;
|
|
3192
2914
|
isRelayDestination = !sdkCommon.isTMultiLocation(destination) && sdkCommon.isRelayChain(destination);
|
|
3193
2915
|
scenario = isRelayDestination ? 'ParaToRelay' : 'ParaToPara';
|
|
3194
2916
|
paraId = resolveParaId(paraIdTo, destination);
|
|
@@ -3282,6 +3004,7 @@ var ParachainNode = /*#__PURE__*/function () {
|
|
|
3282
3004
|
paraIdTo: paraId,
|
|
3283
3005
|
version: version,
|
|
3284
3006
|
senderAddress: senderAddress,
|
|
3007
|
+
ahAddress: ahAddress,
|
|
3285
3008
|
pallet: pallet,
|
|
3286
3009
|
method: method
|
|
3287
3010
|
}; // Handle common cases
|
|
@@ -3454,17 +3177,17 @@ var ParachainNode = /*#__PURE__*/function () {
|
|
|
3454
3177
|
return Builder(api.clone()).from('AssetHubPolkadot').to(destination).currency({
|
|
3455
3178
|
symbol: 'DOT',
|
|
3456
3179
|
amount: AH_EXECUTION_FEE_PADDED
|
|
3457
|
-
}).address(address).
|
|
3180
|
+
}).address(address).senderAddress(senderAddress).dryRun();
|
|
3458
3181
|
case 12:
|
|
3459
3182
|
dryRunResult = _context2.sent;
|
|
3460
|
-
if (dryRunResult.success) {
|
|
3183
|
+
if (dryRunResult.origin.success) {
|
|
3461
3184
|
_context2.next = 15;
|
|
3462
3185
|
break;
|
|
3463
3186
|
}
|
|
3464
|
-
throw new DryRunFailedError(dryRunResult.failureReason);
|
|
3187
|
+
throw new DryRunFailedError(dryRunResult.origin.failureReason);
|
|
3465
3188
|
case 15:
|
|
3466
3189
|
// Pad fee by 50%
|
|
3467
|
-
dryRunFeePadded = BigInt(dryRunResult.fee) * BigInt(3) / BigInt(2);
|
|
3190
|
+
dryRunFeePadded = BigInt(dryRunResult.origin.fee) * BigInt(3) / BigInt(2);
|
|
3468
3191
|
destWithHeader = createVersionedDestination(scenario, version, destination, paraIdTo);
|
|
3469
3192
|
_extractVersionFromHe = extractVersionFromHeader(destWithHeader), _extractVersionFromHe2 = _slicedToArray(_extractVersionFromHe, 2), _extractVersionFromHe2[0], dest = _extractVersionFromHe2[1];
|
|
3470
3193
|
call = {
|
|
@@ -3648,7 +3371,7 @@ var ParachainNode = /*#__PURE__*/function () {
|
|
|
3648
3371
|
version: version
|
|
3649
3372
|
})
|
|
3650
3373
|
}
|
|
3651
|
-
}], version) : createCustomXcmOnDest(input, version, messageId),
|
|
3374
|
+
}], version) : createCustomXcmOnDest(input, this.node, version, messageId),
|
|
3652
3375
|
weight_limit: 'Unlimited'
|
|
3653
3376
|
}
|
|
3654
3377
|
};
|
|
@@ -3955,6 +3678,12 @@ var AssetHubKusama = /*#__PURE__*/function (_ParachainNode) {
|
|
|
3955
3678
|
}]);
|
|
3956
3679
|
}(ParachainNode);
|
|
3957
3680
|
|
|
3681
|
+
var createVersionedBeneficiary = function createVersionedBeneficiary(options) {
|
|
3682
|
+
var version = options.version;
|
|
3683
|
+
var multiLocation = createBeneficiaryMultiLocation(options);
|
|
3684
|
+
return addXcmVersionHeader(multiLocation, version);
|
|
3685
|
+
};
|
|
3686
|
+
|
|
3958
3687
|
var createExecuteXcm = function createExecuteXcm(input, weight, executionFee) {
|
|
3959
3688
|
var api = input.api,
|
|
3960
3689
|
_input$version = input.version,
|
|
@@ -4054,6 +3783,44 @@ var createExecuteXcm = function createExecuteXcm(input, weight, executionFee) {
|
|
|
4054
3783
|
return api.callTxMethod(call);
|
|
4055
3784
|
};
|
|
4056
3785
|
|
|
3786
|
+
var generateAddressMultiLocationV4 = function generateAddressMultiLocationV4(api, address) {
|
|
3787
|
+
var isMultiLocation = _typeof(address) === 'object';
|
|
3788
|
+
if (isMultiLocation) {
|
|
3789
|
+
return _defineProperty({}, exports.Version.V4, address);
|
|
3790
|
+
}
|
|
3791
|
+
var isEthAddress = ethers.ethers.isAddress(address);
|
|
3792
|
+
return addXcmVersionHeader({
|
|
3793
|
+
parents: sdkCommon.Parents.ZERO,
|
|
3794
|
+
interior: {
|
|
3795
|
+
X1: [isEthAddress ? {
|
|
3796
|
+
AccountKey20: {
|
|
3797
|
+
key: address
|
|
3798
|
+
}
|
|
3799
|
+
} : {
|
|
3800
|
+
AccountId32: {
|
|
3801
|
+
id: api.accountToHex(address),
|
|
3802
|
+
network: null
|
|
3803
|
+
}
|
|
3804
|
+
}]
|
|
3805
|
+
}
|
|
3806
|
+
}, exports.Version.V4);
|
|
3807
|
+
};
|
|
3808
|
+
|
|
3809
|
+
var validateAddress = function validateAddress(address, node) {
|
|
3810
|
+
var isDestination = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
3811
|
+
var isEvm = assets.isNodeEvm(node);
|
|
3812
|
+
var isEthereumAddress = ethers.ethers.isAddress(address);
|
|
3813
|
+
if (isEvm) {
|
|
3814
|
+
if (!isEthereumAddress) {
|
|
3815
|
+
throw new InvalidAddressError("".concat(isDestination ? 'Destination node' : 'Node', " is an EVM chain, but the address provided is not a valid Ethereum address."));
|
|
3816
|
+
}
|
|
3817
|
+
} else {
|
|
3818
|
+
if (isEthereumAddress) {
|
|
3819
|
+
throw new InvalidAddressError("EVM address provided but ".concat(isDestination ? 'destination ' : '', "node is not an EVM chain."));
|
|
3820
|
+
}
|
|
3821
|
+
}
|
|
3822
|
+
};
|
|
3823
|
+
|
|
4057
3824
|
var createCustomXcmToBifrost = function createCustomXcmToBifrost(_ref, version) {
|
|
4058
3825
|
var api = _ref.api,
|
|
4059
3826
|
address = _ref.address,
|
|
@@ -5809,10 +5576,14 @@ var Moonbeam = /*#__PURE__*/function (_ParachainNode) {
|
|
|
5809
5576
|
}, {
|
|
5810
5577
|
key: "transferPolkadotXCM",
|
|
5811
5578
|
value: function transferPolkadotXCM(input) {
|
|
5812
|
-
var
|
|
5579
|
+
var destination = input.destination,
|
|
5580
|
+
asset = input.asset,
|
|
5813
5581
|
scenario = input.scenario,
|
|
5814
5582
|
_input$version = input.version,
|
|
5815
5583
|
version = _input$version === void 0 ? this.version : _input$version;
|
|
5584
|
+
if (destination === 'Ethereum') {
|
|
5585
|
+
return this.transferToEthereum(input);
|
|
5586
|
+
}
|
|
5816
5587
|
var multiLocation = this.getMultiLocation(asset, scenario);
|
|
5817
5588
|
return Promise.resolve(PolkadotXCMTransferImpl.transferPolkadotXCM(_objectSpread2(_objectSpread2({}, input), {}, {
|
|
5818
5589
|
currencySelection: createVersionedMultiAssets(version, asset.amount, multiLocation)
|
|
@@ -6544,7 +6315,618 @@ var nodes = function nodes() {
|
|
|
6544
6315
|
Peaq: new Peaq(),
|
|
6545
6316
|
Polimec: new Polimec()
|
|
6546
6317
|
};
|
|
6547
|
-
};
|
|
6318
|
+
};
|
|
6319
|
+
|
|
6320
|
+
/**
|
|
6321
|
+
* Retrieves the parachain ID for a specified node.
|
|
6322
|
+
*
|
|
6323
|
+
* @param node - The node for which to get the paraId.
|
|
6324
|
+
* @returns The parachain ID of the node.
|
|
6325
|
+
*/
|
|
6326
|
+
var getParaId = function getParaId(node) {
|
|
6327
|
+
if (node === 'Ethereum') {
|
|
6328
|
+
return ETH_PARA_ID;
|
|
6329
|
+
}
|
|
6330
|
+
return getNodeConfig(node).paraId;
|
|
6331
|
+
};
|
|
6332
|
+
|
|
6333
|
+
var shuffleArray = function shuffleArray(array) {
|
|
6334
|
+
var copy = _toConsumableArray(array);
|
|
6335
|
+
for (var i = copy.length - 1; i > 0; i--) {
|
|
6336
|
+
var j = Math.floor(Math.random() * (i + 1));
|
|
6337
|
+
var _ref = [copy[j], copy[i]];
|
|
6338
|
+
copy[i] = _ref[0];
|
|
6339
|
+
copy[j] = _ref[1];
|
|
6340
|
+
}
|
|
6341
|
+
return copy;
|
|
6342
|
+
};
|
|
6343
|
+
|
|
6344
|
+
var shuffleWsProviders = function shuffleWsProviders(node, wsProviders) {
|
|
6345
|
+
var ALLOWED_NODES = ['Hydration', 'Acala'];
|
|
6346
|
+
if (ALLOWED_NODES.includes(node)) {
|
|
6347
|
+
return shuffleArray(wsProviders);
|
|
6348
|
+
}
|
|
6349
|
+
return wsProviders;
|
|
6350
|
+
};
|
|
6351
|
+
|
|
6352
|
+
var createApiInstanceForNode = /*#__PURE__*/function () {
|
|
6353
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(api, node) {
|
|
6354
|
+
var wsUrl, resolvedWsUrl;
|
|
6355
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
6356
|
+
while (1) switch (_context.prev = _context.next) {
|
|
6357
|
+
case 0:
|
|
6358
|
+
wsUrl = getNodeProviders(node);
|
|
6359
|
+
resolvedWsUrl = Array.isArray(wsUrl) ? shuffleWsProviders(node, wsUrl) : wsUrl;
|
|
6360
|
+
return _context.abrupt("return", api.createApiInstance(resolvedWsUrl));
|
|
6361
|
+
case 3:
|
|
6362
|
+
case "end":
|
|
6363
|
+
return _context.stop();
|
|
6364
|
+
}
|
|
6365
|
+
}, _callee);
|
|
6366
|
+
}));
|
|
6367
|
+
return function createApiInstanceForNode(_x, _x2) {
|
|
6368
|
+
return _ref.apply(this, arguments);
|
|
6369
|
+
};
|
|
6370
|
+
}();
|
|
6371
|
+
|
|
6372
|
+
var getMultiLocationTokenId = function getMultiLocationTokenId(location, node) {
|
|
6373
|
+
if (location.interior.type === 'Here') {
|
|
6374
|
+
// native token
|
|
6375
|
+
return assets.getNativeAssetSymbol(node);
|
|
6376
|
+
}
|
|
6377
|
+
var foreignAssets = assets.getOtherAssets(node);
|
|
6378
|
+
if (location.interior.type === 'X2') {
|
|
6379
|
+
if (location.interior.value[0].type === 'PalletInstance' && location.interior.value[0].value === 50 && location.interior.value[1].type === 'GeneralIndex') {
|
|
6380
|
+
var _foreignAssets$find$a, _foreignAssets$find;
|
|
6381
|
+
var assetId = location.interior.value[1].value;
|
|
6382
|
+
return (_foreignAssets$find$a = (_foreignAssets$find = foreignAssets.find(function (asset) {
|
|
6383
|
+
return asset.assetId === String(assetId);
|
|
6384
|
+
})) === null || _foreignAssets$find === void 0 ? void 0 : _foreignAssets$find.assetId) !== null && _foreignAssets$find$a !== void 0 ? _foreignAssets$find$a : null;
|
|
6385
|
+
}
|
|
6386
|
+
}
|
|
6387
|
+
return null;
|
|
6388
|
+
};
|
|
6389
|
+
|
|
6390
|
+
var computeFeeFromDryRun = function computeFeeFromDryRun(dryRun, node, executionFee) {
|
|
6391
|
+
// Extract delivery fees from emitted events
|
|
6392
|
+
var deliveryFees = [];
|
|
6393
|
+
var _iterator = _createForOfIteratorHelper(dryRun.value.emitted_events),
|
|
6394
|
+
_step;
|
|
6395
|
+
try {
|
|
6396
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
6397
|
+
var e = _step.value;
|
|
6398
|
+
var isXcmEvent = e.type === 'XcmPallet' || e.type === 'PolkadotXcm' || e.type === 'CumulusXcm';
|
|
6399
|
+
var isFeesPaid = e.value.type === 'FeesPaid';
|
|
6400
|
+
if (isXcmEvent && isFeesPaid && e.value.value.fees) {
|
|
6401
|
+
var _iterator2 = _createForOfIteratorHelper(e.value.value.fees),
|
|
6402
|
+
_step2;
|
|
6403
|
+
try {
|
|
6404
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
6405
|
+
var feeItem = _step2.value;
|
|
6406
|
+
if (feeItem.fun.type === 'NonFungible') continue;
|
|
6407
|
+
var plancks = feeItem.fun.value;
|
|
6408
|
+
var tokenSymbol = getMultiLocationTokenId(feeItem.id, node);
|
|
6409
|
+
if (!tokenSymbol || !plancks) continue;
|
|
6410
|
+
deliveryFees.push({
|
|
6411
|
+
plancks: plancks,
|
|
6412
|
+
tokenSymbol: tokenSymbol
|
|
6413
|
+
});
|
|
6414
|
+
}
|
|
6415
|
+
} catch (err) {
|
|
6416
|
+
_iterator2.e(err);
|
|
6417
|
+
} finally {
|
|
6418
|
+
_iterator2.f();
|
|
6419
|
+
}
|
|
6420
|
+
}
|
|
6421
|
+
}
|
|
6422
|
+
} catch (err) {
|
|
6423
|
+
_iterator.e(err);
|
|
6424
|
+
} finally {
|
|
6425
|
+
_iterator.f();
|
|
6426
|
+
}
|
|
6427
|
+
var nativeAssetSymbol = assets.getNativeAssetSymbol(node);
|
|
6428
|
+
// Sum the fees that match the feeToken
|
|
6429
|
+
var totalDeliveryFees = deliveryFees.filter(function (df) {
|
|
6430
|
+
return df.tokenSymbol === nativeAssetSymbol;
|
|
6431
|
+
}).reduce(function (acc, df) {
|
|
6432
|
+
return acc + df.plancks;
|
|
6433
|
+
}, 0n);
|
|
6434
|
+
return totalDeliveryFees + executionFee;
|
|
6435
|
+
};
|
|
6436
|
+
|
|
6437
|
+
var getMultiLocationTokenIdPjs = function getMultiLocationTokenIdPjs(location, node) {
|
|
6438
|
+
if (location.interior === 'Here') {
|
|
6439
|
+
// native token
|
|
6440
|
+
return assets.getNativeAssetSymbol(node);
|
|
6441
|
+
}
|
|
6442
|
+
var foreignAssets = assets.getOtherAssets(node);
|
|
6443
|
+
if (Object.keys(location.interior)[0] === 'X2') {
|
|
6444
|
+
var junctions = Object.values(location.interior)[0];
|
|
6445
|
+
if (Object.keys(junctions[0])[0] === 'PalletInstance' && junctions[0].PalletInstance === '50' && Object.keys(junctions[1])[0] === 'GeneralIndex') {
|
|
6446
|
+
var _foreignAssets$find$s, _foreignAssets$find;
|
|
6447
|
+
var assetId = junctions[1].GeneralIndex;
|
|
6448
|
+
return (_foreignAssets$find$s = (_foreignAssets$find = foreignAssets.find(function (asset) {
|
|
6449
|
+
return asset.assetId === String(assetId);
|
|
6450
|
+
})) === null || _foreignAssets$find === void 0 ? void 0 : _foreignAssets$find.symbol) !== null && _foreignAssets$find$s !== void 0 ? _foreignAssets$find$s : null;
|
|
6451
|
+
}
|
|
6452
|
+
}
|
|
6453
|
+
return null;
|
|
6454
|
+
};
|
|
6455
|
+
|
|
6456
|
+
var computeFeeFromDryRunPjs = function computeFeeFromDryRunPjs(dryRun, node, executionFee) {
|
|
6457
|
+
// Extract delivery fees from emitted events
|
|
6458
|
+
var deliveryFees = [];
|
|
6459
|
+
var _iterator = _createForOfIteratorHelper(dryRun.Ok.emittedEvents),
|
|
6460
|
+
_step;
|
|
6461
|
+
try {
|
|
6462
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
6463
|
+
var e = _step.value;
|
|
6464
|
+
var isXcmEvent = e.section === 'xcmPallet' || e.section === 'polkadotXcm' || e.section === 'cumulusXcm';
|
|
6465
|
+
var isFeesPaid = e.method === 'FeesPaid';
|
|
6466
|
+
if (isXcmEvent && isFeesPaid && e.data.fees) {
|
|
6467
|
+
var _iterator2 = _createForOfIteratorHelper(e.data.fees),
|
|
6468
|
+
_step2;
|
|
6469
|
+
try {
|
|
6470
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
6471
|
+
var feeItem = _step2.value;
|
|
6472
|
+
if (feeItem.fun.NonFungible) continue;
|
|
6473
|
+
var plancks = BigInt(feeItem.fun.Fungible.replace(/,/g, ''));
|
|
6474
|
+
var tokenSymbol = getMultiLocationTokenIdPjs(feeItem.id, node);
|
|
6475
|
+
if (!tokenSymbol || !plancks) continue;
|
|
6476
|
+
deliveryFees.push({
|
|
6477
|
+
plancks: plancks,
|
|
6478
|
+
tokenSymbol: tokenSymbol
|
|
6479
|
+
});
|
|
6480
|
+
}
|
|
6481
|
+
} catch (err) {
|
|
6482
|
+
_iterator2.e(err);
|
|
6483
|
+
} finally {
|
|
6484
|
+
_iterator2.f();
|
|
6485
|
+
}
|
|
6486
|
+
}
|
|
6487
|
+
}
|
|
6488
|
+
} catch (err) {
|
|
6489
|
+
_iterator.e(err);
|
|
6490
|
+
} finally {
|
|
6491
|
+
_iterator.f();
|
|
6492
|
+
}
|
|
6493
|
+
var nativeAssetSymbol = assets.getNativeAssetSymbol(node);
|
|
6494
|
+
// Sum the fees that match the feeToken
|
|
6495
|
+
var totalDeliveryFees = deliveryFees.filter(function (df) {
|
|
6496
|
+
return df.tokenSymbol === nativeAssetSymbol;
|
|
6497
|
+
}).reduce(function (acc, df) {
|
|
6498
|
+
return acc + df.plancks;
|
|
6499
|
+
}, 0n);
|
|
6500
|
+
return totalDeliveryFees + executionFee;
|
|
6501
|
+
};
|
|
6502
|
+
|
|
6503
|
+
var resolveModuleError = function resolveModuleError(node, error) {
|
|
6504
|
+
var palletDetails = pallets.getSupportedPalletsDetails(node).find(function (p) {
|
|
6505
|
+
return p.index === Number(error.index);
|
|
6506
|
+
});
|
|
6507
|
+
if (!palletDetails) {
|
|
6508
|
+
throw new Error("Pallet with index ".concat(error.index, " not found"));
|
|
6509
|
+
}
|
|
6510
|
+
// Use only the first byte of the error to get the error index
|
|
6511
|
+
var errorIndex = Number(error.error.slice(0, 4));
|
|
6512
|
+
var name = palletDetails.name;
|
|
6513
|
+
if (name !== 'XTokens' && name !== 'PolkadotXcm' && name !== 'XcmPallet') {
|
|
6514
|
+
throw new Error("Pallet ".concat(name, " is not supported"));
|
|
6515
|
+
}
|
|
6516
|
+
var failureReason = name === 'XTokens' ? Object.values(exports.XTokensError)[errorIndex] : Object.values(exports.PolkadotXcmError)[errorIndex];
|
|
6517
|
+
if (!failureReason) {
|
|
6518
|
+
throw new Error("Error index ".concat(errorIndex, " not found in ").concat(name, " pallet"));
|
|
6519
|
+
}
|
|
6520
|
+
return failureReason;
|
|
6521
|
+
};
|
|
6522
|
+
|
|
6523
|
+
var getFees = function getFees(scenario) {
|
|
6524
|
+
if (scenario === 'ParaToRelay') {
|
|
6525
|
+
return 4600000000;
|
|
6526
|
+
} else if (scenario === 'ParaToPara') {
|
|
6527
|
+
return 399600000000;
|
|
6528
|
+
}
|
|
6529
|
+
throw new Error("Fees for scenario ".concat(scenario, " are not defined."));
|
|
6530
|
+
};
|
|
6531
|
+
|
|
6532
|
+
/**
|
|
6533
|
+
* Retrieves the node instance for a given node.
|
|
6534
|
+
*
|
|
6535
|
+
* @param node - The node identifier.
|
|
6536
|
+
* @returns The node instance
|
|
6537
|
+
*/
|
|
6538
|
+
var getNode = function getNode(node) {
|
|
6539
|
+
var nodeMap = nodes();
|
|
6540
|
+
return nodeMap[node];
|
|
6541
|
+
};
|
|
6542
|
+
|
|
6543
|
+
// Contains important call creation utils (Selection of fees,formating of header and more.. )
|
|
6544
|
+
/**
|
|
6545
|
+
* Determines the relay chain for a given node.
|
|
6546
|
+
*
|
|
6547
|
+
* @param node - The node for which to determine the relay chain.
|
|
6548
|
+
* @returns 'Kusama' if the node's relay chain symbol is 'KSM'; otherwise, 'Polkadot'.
|
|
6549
|
+
*/
|
|
6550
|
+
var determineRelayChain = function determineRelayChain(node) {
|
|
6551
|
+
return assets.getRelayChainSymbol(node) === 'KSM' ? 'Kusama' : 'Polkadot';
|
|
6552
|
+
};
|
|
6553
|
+
|
|
6554
|
+
/**
|
|
6555
|
+
* Retrieves the node name corresponding to a specified parachain ID.
|
|
6556
|
+
*
|
|
6557
|
+
* @param paraId - The parachain ID.
|
|
6558
|
+
* @returns The node name if found; otherwise, null.
|
|
6559
|
+
*/
|
|
6560
|
+
var getTNode = function getTNode(paraId, ecosystem) {
|
|
6561
|
+
var _NODE_NAMES_DOT_KSM$f;
|
|
6562
|
+
if (paraId === 0) {
|
|
6563
|
+
return ecosystem === 'polkadot' ? 'Polkadot' : 'Kusama';
|
|
6564
|
+
}
|
|
6565
|
+
if (paraId === 1) {
|
|
6566
|
+
return 'Ethereum';
|
|
6567
|
+
}
|
|
6568
|
+
return (_NODE_NAMES_DOT_KSM$f = sdkCommon.NODE_NAMES_DOT_KSM.find(function (nodeName) {
|
|
6569
|
+
return getNode(nodeName).type === ecosystem && getParaId(nodeName) === paraId;
|
|
6570
|
+
})) !== null && _NODE_NAMES_DOT_KSM$f !== void 0 ? _NODE_NAMES_DOT_KSM$f : null;
|
|
6571
|
+
};
|
|
6572
|
+
|
|
6573
|
+
var isAssetHub = function isAssetHub(chain) {
|
|
6574
|
+
return chain === 'AssetHubPolkadot' || chain === 'AssetHubKusama';
|
|
6575
|
+
};
|
|
6576
|
+
var isBridgeHub = function isBridgeHub(chain) {
|
|
6577
|
+
return chain === 'BridgeHubPolkadot' || chain === 'BridgeHubKusama';
|
|
6578
|
+
};
|
|
6579
|
+
var isPeople = function isPeople(chain) {
|
|
6580
|
+
return chain === 'PeoplePolkadot' || chain === 'PeopleKusama';
|
|
6581
|
+
};
|
|
6582
|
+
var isSystemPara = function isSystemPara(chain) {
|
|
6583
|
+
return isAssetHub(chain) || isBridgeHub(chain) || isPeople(chain);
|
|
6584
|
+
};
|
|
6585
|
+
var mul = function mul(v, num) {
|
|
6586
|
+
var den = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1n;
|
|
6587
|
+
return v * num / den;
|
|
6588
|
+
};
|
|
6589
|
+
var padFee = function padFee(raw, origin, dest, side) {
|
|
6590
|
+
var relayOrigin = sdkCommon.isRelayChain(origin);
|
|
6591
|
+
var relayDest = sdkCommon.isRelayChain(dest);
|
|
6592
|
+
var sysParaOrigin = isSystemPara(origin);
|
|
6593
|
+
var sysParaDest = isSystemPara(dest);
|
|
6594
|
+
var relayToPara = relayOrigin && !relayDest;
|
|
6595
|
+
var sysParaToPara = sysParaOrigin && !sysParaDest;
|
|
6596
|
+
var paraToPara = !relayOrigin && !sysParaOrigin;
|
|
6597
|
+
if (sysParaToPara) return raw * 40n;
|
|
6598
|
+
if (relayToPara) return side === 'origin' ? mul(raw, 320n, 100n) : mul(raw, 3000n, 100n);
|
|
6599
|
+
if (paraToPara) return mul(raw, 130n, 100n);
|
|
6600
|
+
// apply default 30% padding
|
|
6601
|
+
return mul(raw, 130n, 100n);
|
|
6602
|
+
};
|
|
6603
|
+
|
|
6604
|
+
var createOriginLocation = function createOriginLocation(origin, destination) {
|
|
6605
|
+
if (sdkCommon.isRelayChain(origin)) return DOT_MULTILOCATION;
|
|
6606
|
+
return {
|
|
6607
|
+
parents: sdkCommon.isRelayChain(destination) ? sdkCommon.Parents.ZERO : sdkCommon.Parents.ONE,
|
|
6608
|
+
interior: {
|
|
6609
|
+
X1: [{
|
|
6610
|
+
Parachain: getParaId(origin)
|
|
6611
|
+
}]
|
|
6612
|
+
}
|
|
6613
|
+
};
|
|
6614
|
+
};
|
|
6615
|
+
var getFeeForDestNode = /*#__PURE__*/function () {
|
|
6616
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref) {
|
|
6617
|
+
var api, forwardedXcms, origin, destination, address, senderAddress, currency, disableFallback, calcPaymentInfoFee, dryRunResult, fee, newForwardedXcms, destParaId;
|
|
6618
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
6619
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
6620
|
+
case 0:
|
|
6621
|
+
api = _ref.api, forwardedXcms = _ref.forwardedXcms, origin = _ref.origin, destination = _ref.destination, address = _ref.address, senderAddress = _ref.senderAddress, currency = _ref.currency, disableFallback = _ref.disableFallback;
|
|
6622
|
+
calcPaymentInfoFee = /*#__PURE__*/function () {
|
|
6623
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
6624
|
+
var originAsset, currencyInput, tx, rawFee;
|
|
6625
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
6626
|
+
while (1) switch (_context.prev = _context.next) {
|
|
6627
|
+
case 0:
|
|
6628
|
+
if (!('multiasset' in currency)) {
|
|
6629
|
+
_context.next = 2;
|
|
6630
|
+
break;
|
|
6631
|
+
}
|
|
6632
|
+
throw new assets.InvalidCurrencyError('Multi-assets are not yet supported for XCM fee calculation.');
|
|
6633
|
+
case 2:
|
|
6634
|
+
originAsset = assets.findAsset(origin, currency, destination);
|
|
6635
|
+
if (originAsset) {
|
|
6636
|
+
_context.next = 5;
|
|
6637
|
+
break;
|
|
6638
|
+
}
|
|
6639
|
+
throw new assets.InvalidCurrencyError("Currency ".concat(JSON.stringify(currency), " not found in ").concat(origin));
|
|
6640
|
+
case 5:
|
|
6641
|
+
currencyInput = originAsset.multiLocation ? {
|
|
6642
|
+
multilocation: originAsset.multiLocation
|
|
6643
|
+
} : {
|
|
6644
|
+
symbol: originAsset.symbol
|
|
6645
|
+
};
|
|
6646
|
+
_context.next = 8;
|
|
6647
|
+
return Builder(api).from(destination).to(origin).address(senderAddress).senderAddress(address).currency(_objectSpread2(_objectSpread2({}, currencyInput), {}, {
|
|
6648
|
+
amount: currency.amount
|
|
6649
|
+
})).build();
|
|
6650
|
+
case 8:
|
|
6651
|
+
tx = _context.sent;
|
|
6652
|
+
_context.next = 11;
|
|
6653
|
+
return api.calculateTransactionFee(tx, address);
|
|
6654
|
+
case 11:
|
|
6655
|
+
rawFee = _context.sent;
|
|
6656
|
+
return _context.abrupt("return", padFee(rawFee, origin, destination, 'destination'));
|
|
6657
|
+
case 13:
|
|
6658
|
+
case "end":
|
|
6659
|
+
return _context.stop();
|
|
6660
|
+
}
|
|
6661
|
+
}, _callee);
|
|
6662
|
+
}));
|
|
6663
|
+
return function calcPaymentInfoFee() {
|
|
6664
|
+
return _ref3.apply(this, arguments);
|
|
6665
|
+
};
|
|
6666
|
+
}();
|
|
6667
|
+
if (!(!assets.hasDryRunSupport(destination) || !forwardedXcms)) {
|
|
6668
|
+
_context2.next = 7;
|
|
6669
|
+
break;
|
|
6670
|
+
}
|
|
6671
|
+
_context2.next = 5;
|
|
6672
|
+
return calcPaymentInfoFee();
|
|
6673
|
+
case 5:
|
|
6674
|
+
_context2.t0 = _context2.sent;
|
|
6675
|
+
return _context2.abrupt("return", {
|
|
6676
|
+
fee: _context2.t0,
|
|
6677
|
+
feeType: 'paymentInfo'
|
|
6678
|
+
});
|
|
6679
|
+
case 7:
|
|
6680
|
+
_context2.next = 9;
|
|
6681
|
+
return api.getDryRunXcm({
|
|
6682
|
+
originLocation: addXcmVersionHeader(createOriginLocation(origin, destination), exports.Version.V4),
|
|
6683
|
+
xcm: forwardedXcms[1][0],
|
|
6684
|
+
node: destination,
|
|
6685
|
+
origin: origin
|
|
6686
|
+
});
|
|
6687
|
+
case 9:
|
|
6688
|
+
dryRunResult = _context2.sent;
|
|
6689
|
+
if (dryRunResult.success) {
|
|
6690
|
+
_context2.next = 18;
|
|
6691
|
+
break;
|
|
6692
|
+
}
|
|
6693
|
+
if (!disableFallback) {
|
|
6694
|
+
_context2.next = 13;
|
|
6695
|
+
break;
|
|
6696
|
+
}
|
|
6697
|
+
return _context2.abrupt("return", {
|
|
6698
|
+
dryRunError: dryRunResult.failureReason
|
|
6699
|
+
});
|
|
6700
|
+
case 13:
|
|
6701
|
+
_context2.next = 15;
|
|
6702
|
+
return calcPaymentInfoFee();
|
|
6703
|
+
case 15:
|
|
6704
|
+
_context2.t1 = _context2.sent;
|
|
6705
|
+
_context2.t2 = dryRunResult.failureReason;
|
|
6706
|
+
return _context2.abrupt("return", {
|
|
6707
|
+
fee: _context2.t1,
|
|
6708
|
+
feeType: 'paymentInfo',
|
|
6709
|
+
dryRunError: _context2.t2
|
|
6710
|
+
});
|
|
6711
|
+
case 18:
|
|
6712
|
+
fee = dryRunResult.fee, newForwardedXcms = dryRunResult.forwardedXcms, destParaId = dryRunResult.destParaId;
|
|
6713
|
+
return _context2.abrupt("return", {
|
|
6714
|
+
fee: fee,
|
|
6715
|
+
feeType: 'dryRun',
|
|
6716
|
+
forwardedXcms: newForwardedXcms,
|
|
6717
|
+
destParaId: destParaId
|
|
6718
|
+
});
|
|
6719
|
+
case 20:
|
|
6720
|
+
case "end":
|
|
6721
|
+
return _context2.stop();
|
|
6722
|
+
}
|
|
6723
|
+
}, _callee2);
|
|
6724
|
+
}));
|
|
6725
|
+
return function getFeeForDestNode(_x) {
|
|
6726
|
+
return _ref2.apply(this, arguments);
|
|
6727
|
+
};
|
|
6728
|
+
}();
|
|
6729
|
+
|
|
6730
|
+
var dryRunInternal = /*#__PURE__*/function () {
|
|
6731
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
6732
|
+
var _findAsset, _intermediateFees$ass, _intermediateFees$bri, _destinationDryRun;
|
|
6733
|
+
var origin, destination, currency, api, tx, senderAddress, asset, originDryRun, initialForwardedXcms, initialDestParaId, currentOrigin, forwardedXcms, nextParaId, intermediateFees, destinationDryRun, nextChain, hopApi, hopDryRun, newXcms, destParaId;
|
|
6734
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
6735
|
+
while (1) switch (_context.prev = _context.next) {
|
|
6736
|
+
case 0:
|
|
6737
|
+
origin = options.origin, destination = options.destination, currency = options.currency, api = options.api, tx = options.tx, senderAddress = options.senderAddress;
|
|
6738
|
+
asset = (_findAsset = assets.findAsset(origin, currency, destination)) !== null && _findAsset !== void 0 ? _findAsset : origin === 'AssetHubPolkadot' ? assets.findAsset('Ethereum', currency, null) : null;
|
|
6739
|
+
if (asset) {
|
|
6740
|
+
_context.next = 4;
|
|
6741
|
+
break;
|
|
6742
|
+
}
|
|
6743
|
+
throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(currency), " not found on ").concat(origin));
|
|
6744
|
+
case 4:
|
|
6745
|
+
_context.next = 6;
|
|
6746
|
+
return api.getDryRunCall({
|
|
6747
|
+
tx: tx,
|
|
6748
|
+
node: origin,
|
|
6749
|
+
address: senderAddress
|
|
6750
|
+
});
|
|
6751
|
+
case 6:
|
|
6752
|
+
originDryRun = _context.sent;
|
|
6753
|
+
if (originDryRun.success) {
|
|
6754
|
+
_context.next = 9;
|
|
6755
|
+
break;
|
|
6756
|
+
}
|
|
6757
|
+
return _context.abrupt("return", {
|
|
6758
|
+
origin: originDryRun
|
|
6759
|
+
});
|
|
6760
|
+
case 9:
|
|
6761
|
+
initialForwardedXcms = originDryRun.forwardedXcms, initialDestParaId = originDryRun.destParaId;
|
|
6762
|
+
currentOrigin = origin;
|
|
6763
|
+
forwardedXcms = initialForwardedXcms;
|
|
6764
|
+
nextParaId = initialDestParaId;
|
|
6765
|
+
intermediateFees = {};
|
|
6766
|
+
case 14:
|
|
6767
|
+
if (!(Array.isArray(forwardedXcms) && forwardedXcms.length && forwardedXcms[1].length && ('disconnect' in api.getApi() ? Object.values(forwardedXcms[1][0]).length : forwardedXcms[1][0].value.length) > 0 && nextParaId !== undefined)) {
|
|
6768
|
+
_context.next = 41;
|
|
6769
|
+
break;
|
|
6770
|
+
}
|
|
6771
|
+
nextChain = getTNode(nextParaId, determineRelayChain(origin) === 'Polkadot' ? 'polkadot' : 'kusama');
|
|
6772
|
+
if (nextChain) {
|
|
6773
|
+
_context.next = 18;
|
|
6774
|
+
break;
|
|
6775
|
+
}
|
|
6776
|
+
throw new Error("Unable to find TNode for paraId ".concat(nextParaId));
|
|
6777
|
+
case 18:
|
|
6778
|
+
hopApi = api.clone();
|
|
6779
|
+
_context.prev = 19;
|
|
6780
|
+
if (assets.hasDryRunSupport(nextChain)) {
|
|
6781
|
+
_context.next = 23;
|
|
6782
|
+
break;
|
|
6783
|
+
}
|
|
6784
|
+
if (nextChain === destination) {
|
|
6785
|
+
destinationDryRun = {
|
|
6786
|
+
success: false,
|
|
6787
|
+
failureReason: "DryRunApi is not available on node ".concat(nextChain)
|
|
6788
|
+
};
|
|
6789
|
+
}
|
|
6790
|
+
return _context.abrupt("break", 41);
|
|
6791
|
+
case 23:
|
|
6792
|
+
_context.next = 25;
|
|
6793
|
+
return hopApi.init(nextChain);
|
|
6794
|
+
case 25:
|
|
6795
|
+
_context.next = 27;
|
|
6796
|
+
return hopApi.getDryRunXcm({
|
|
6797
|
+
originLocation: addXcmVersionHeader(createOriginLocation(currentOrigin, nextChain), exports.Version.V4),
|
|
6798
|
+
xcm: forwardedXcms[1][0],
|
|
6799
|
+
node: nextChain,
|
|
6800
|
+
origin: currentOrigin
|
|
6801
|
+
});
|
|
6802
|
+
case 27:
|
|
6803
|
+
hopDryRun = _context.sent;
|
|
6804
|
+
if (nextChain === destination || sdkCommon.isRelayChain(nextChain) && !sdkCommon.isRelayChain(destination)) {
|
|
6805
|
+
destinationDryRun = hopDryRun;
|
|
6806
|
+
} else if (nextChain === 'AssetHubPolkadot') {
|
|
6807
|
+
intermediateFees.assetHub = hopDryRun;
|
|
6808
|
+
} else if (nextChain === 'BridgeHubPolkadot') {
|
|
6809
|
+
intermediateFees.bridgeHub = hopDryRun;
|
|
6810
|
+
}
|
|
6811
|
+
if (hopDryRun.success) {
|
|
6812
|
+
_context.next = 31;
|
|
6813
|
+
break;
|
|
6814
|
+
}
|
|
6815
|
+
return _context.abrupt("break", 41);
|
|
6816
|
+
case 31:
|
|
6817
|
+
newXcms = hopDryRun.forwardedXcms, destParaId = hopDryRun.destParaId;
|
|
6818
|
+
forwardedXcms = newXcms;
|
|
6819
|
+
nextParaId = destParaId;
|
|
6820
|
+
currentOrigin = nextChain;
|
|
6821
|
+
case 35:
|
|
6822
|
+
_context.prev = 35;
|
|
6823
|
+
_context.next = 38;
|
|
6824
|
+
return hopApi.disconnect();
|
|
6825
|
+
case 38:
|
|
6826
|
+
return _context.finish(35);
|
|
6827
|
+
case 39:
|
|
6828
|
+
_context.next = 14;
|
|
6829
|
+
break;
|
|
6830
|
+
case 41:
|
|
6831
|
+
return _context.abrupt("return", {
|
|
6832
|
+
origin: originDryRun.success ? _objectSpread2(_objectSpread2({}, originDryRun), {}, {
|
|
6833
|
+
currency: assets.getNativeAssetSymbol(origin)
|
|
6834
|
+
}) : originDryRun,
|
|
6835
|
+
assetHub: (_intermediateFees$ass = intermediateFees.assetHub) !== null && _intermediateFees$ass !== void 0 && _intermediateFees$ass.success ? _objectSpread2(_objectSpread2({}, intermediateFees.assetHub), {}, {
|
|
6836
|
+
currency: assets.getNativeAssetSymbol('AssetHubPolkadot')
|
|
6837
|
+
}) : intermediateFees.assetHub,
|
|
6838
|
+
bridgeHub: (_intermediateFees$bri = intermediateFees.bridgeHub) !== null && _intermediateFees$bri !== void 0 && _intermediateFees$bri.success ? _objectSpread2(_objectSpread2({}, intermediateFees.bridgeHub), {}, {
|
|
6839
|
+
currency: assets.getNativeAssetSymbol('BridgeHubPolkadot')
|
|
6840
|
+
}) : intermediateFees.bridgeHub,
|
|
6841
|
+
destination: (_destinationDryRun = destinationDryRun) !== null && _destinationDryRun !== void 0 && _destinationDryRun.success ? _objectSpread2(_objectSpread2({}, destinationDryRun), {}, {
|
|
6842
|
+
currency: asset.symbol
|
|
6843
|
+
}) : destinationDryRun
|
|
6844
|
+
});
|
|
6845
|
+
case 42:
|
|
6846
|
+
case "end":
|
|
6847
|
+
return _context.stop();
|
|
6848
|
+
}
|
|
6849
|
+
}, _callee, null, [[19,, 35, 39]]);
|
|
6850
|
+
}));
|
|
6851
|
+
return function dryRunInternal(_x) {
|
|
6852
|
+
return _ref.apply(this, arguments);
|
|
6853
|
+
};
|
|
6854
|
+
}();
|
|
6855
|
+
|
|
6856
|
+
var dryRun = /*#__PURE__*/function () {
|
|
6857
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
6858
|
+
var api, senderAddress, origin;
|
|
6859
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
6860
|
+
while (1) switch (_context.prev = _context.next) {
|
|
6861
|
+
case 0:
|
|
6862
|
+
api = options.api, senderAddress = options.senderAddress, origin = options.origin;
|
|
6863
|
+
validateAddress(senderAddress, origin, false);
|
|
6864
|
+
_context.next = 4;
|
|
6865
|
+
return api.init(origin);
|
|
6866
|
+
case 4:
|
|
6867
|
+
_context.prev = 4;
|
|
6868
|
+
_context.next = 7;
|
|
6869
|
+
return dryRunInternal(options);
|
|
6870
|
+
case 7:
|
|
6871
|
+
return _context.abrupt("return", _context.sent);
|
|
6872
|
+
case 8:
|
|
6873
|
+
_context.prev = 8;
|
|
6874
|
+
_context.next = 11;
|
|
6875
|
+
return api.disconnect();
|
|
6876
|
+
case 11:
|
|
6877
|
+
return _context.finish(8);
|
|
6878
|
+
case 12:
|
|
6879
|
+
case "end":
|
|
6880
|
+
return _context.stop();
|
|
6881
|
+
}
|
|
6882
|
+
}, _callee, null, [[4,, 8, 12]]);
|
|
6883
|
+
}));
|
|
6884
|
+
return function dryRun(_x) {
|
|
6885
|
+
return _ref.apply(this, arguments);
|
|
6886
|
+
};
|
|
6887
|
+
}();
|
|
6888
|
+
|
|
6889
|
+
var dryRunOrigin = /*#__PURE__*/function () {
|
|
6890
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
6891
|
+
var api, node, address, result;
|
|
6892
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
6893
|
+
while (1) switch (_context.prev = _context.next) {
|
|
6894
|
+
case 0:
|
|
6895
|
+
api = options.api, node = options.node, address = options.address;
|
|
6896
|
+
validateAddress(address, node, false);
|
|
6897
|
+
_context.next = 4;
|
|
6898
|
+
return api.init(node);
|
|
6899
|
+
case 4:
|
|
6900
|
+
_context.prev = 4;
|
|
6901
|
+
_context.next = 7;
|
|
6902
|
+
return api.getDryRunCall(options);
|
|
6903
|
+
case 7:
|
|
6904
|
+
result = _context.sent;
|
|
6905
|
+
if (!result.success) {
|
|
6906
|
+
_context.next = 12;
|
|
6907
|
+
break;
|
|
6908
|
+
}
|
|
6909
|
+
return _context.abrupt("return", _objectSpread2(_objectSpread2({}, result), {}, {
|
|
6910
|
+
currency: assets.getNativeAssetSymbol(node)
|
|
6911
|
+
}));
|
|
6912
|
+
case 12:
|
|
6913
|
+
return _context.abrupt("return", result);
|
|
6914
|
+
case 13:
|
|
6915
|
+
_context.prev = 13;
|
|
6916
|
+
_context.next = 16;
|
|
6917
|
+
return api.disconnect();
|
|
6918
|
+
case 16:
|
|
6919
|
+
return _context.finish(13);
|
|
6920
|
+
case 17:
|
|
6921
|
+
case "end":
|
|
6922
|
+
return _context.stop();
|
|
6923
|
+
}
|
|
6924
|
+
}, _callee, null, [[4,, 13, 17]]);
|
|
6925
|
+
}));
|
|
6926
|
+
return function dryRunOrigin(_x) {
|
|
6927
|
+
return _ref.apply(this, arguments);
|
|
6928
|
+
};
|
|
6929
|
+
}();
|
|
6548
6930
|
|
|
6549
6931
|
var getParaEthTransferFees = /*#__PURE__*/function () {
|
|
6550
6932
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(ahApi) {
|
|
@@ -6904,345 +7286,137 @@ var transferMoonbeamToEth = /*#__PURE__*/function () {
|
|
|
6904
7286
|
break;
|
|
6905
7287
|
}
|
|
6906
7288
|
throw new BridgeHaltedError();
|
|
6907
|
-
case 8:
|
|
6908
|
-
if (!('multiasset' in currency)) {
|
|
6909
|
-
_context.next = 10;
|
|
6910
|
-
break;
|
|
6911
|
-
}
|
|
6912
|
-
throw new Error('Multiassets syntax is not supported for Evm transfers');
|
|
6913
|
-
case 10:
|
|
6914
|
-
if (!('multilocation' in currency && assets.isOverrideMultiLocationSpecifier(currency.multilocation))) {
|
|
6915
|
-
_context.next = 12;
|
|
6916
|
-
break;
|
|
6917
|
-
}
|
|
6918
|
-
throw new Error('Override multilocation is not supported for Evm transfers');
|
|
6919
|
-
case 12:
|
|
6920
|
-
foundAsset = assets.findAsset(from, currency, to);
|
|
6921
|
-
if (!(foundAsset === null)) {
|
|
6922
|
-
_context.next = 15;
|
|
6923
|
-
break;
|
|
6924
|
-
}
|
|
6925
|
-
throw new assets.InvalidCurrencyError("Origin node ".concat(from, " does not support currency ").concat(JSON.stringify(currency), "."));
|
|
6926
|
-
case 15:
|
|
6927
|
-
if (!(!assets.isForeignAsset(foundAsset) || !foundAsset.multiLocation)) {
|
|
6928
|
-
_context.next = 17;
|
|
6929
|
-
break;
|
|
6930
|
-
}
|
|
6931
|
-
throw new assets.InvalidCurrencyError('Currency must be a foreign asset with valid multi-location');
|
|
6932
|
-
case 17:
|
|
6933
|
-
ethAsset = assets.findAssetByMultiLocation(assets.getOtherAssets('Ethereum'), foundAsset.multiLocation);
|
|
6934
|
-
if (!(!ethAsset || !ethAsset.assetId)) {
|
|
6935
|
-
_context.next = 20;
|
|
6936
|
-
break;
|
|
6937
|
-
}
|
|
6938
|
-
throw new assets.InvalidCurrencyError("Could not obtain Ethereum asset address for ".concat(JSON.stringify(foundAsset)));
|
|
6939
|
-
case 20:
|
|
6940
|
-
contract = isEthersSigner(signer) ? new ethers.Contract(xcmInterfacePrecompile, abi, signer) : viem.getContract({
|
|
6941
|
-
abi: abi,
|
|
6942
|
-
address: xcmInterfacePrecompile,
|
|
6943
|
-
client: {
|
|
6944
|
-
"public": viem.createPublicClient({
|
|
6945
|
-
chain: signer.chain,
|
|
6946
|
-
transport: viem.http()
|
|
6947
|
-
}),
|
|
6948
|
-
wallet: signer
|
|
6949
|
-
}
|
|
6950
|
-
});
|
|
6951
|
-
if (!isEthersSigner(signer)) {
|
|
6952
|
-
_context.next = 27;
|
|
6953
|
-
break;
|
|
6954
|
-
}
|
|
6955
|
-
_context.next = 24;
|
|
6956
|
-
return signer.getAddress();
|
|
6957
|
-
case 24:
|
|
6958
|
-
_context.t0 = _context.sent;
|
|
6959
|
-
_context.next = 28;
|
|
6960
|
-
break;
|
|
6961
|
-
case 27:
|
|
6962
|
-
_context.t0 = (_signer$account = signer.account) === null || _signer$account === void 0 ? void 0 : _signer$account.address;
|
|
6963
|
-
case 28:
|
|
6964
|
-
senderAddress = _context.t0;
|
|
6965
|
-
if (senderAddress) {
|
|
6966
|
-
_context.next = 31;
|
|
6967
|
-
break;
|
|
6968
|
-
}
|
|
6969
|
-
throw new Error('Unable to get sender address');
|
|
6970
|
-
case 31:
|
|
6971
|
-
_context.next = 33;
|
|
6972
|
-
return api.init(from);
|
|
6973
|
-
case 33:
|
|
6974
|
-
_context.next = 35;
|
|
6975
|
-
return generateMessageId(api, senderAddress, getParaId(from), ethAsset.assetId, address, currency.amount);
|
|
6976
|
-
case 35:
|
|
6977
|
-
messageId = _context.sent;
|
|
6978
|
-
customXcm = createCustomXcmOnDest({
|
|
6979
|
-
api: api,
|
|
6980
|
-
address: address,
|
|
6981
|
-
scenario: 'ParaToPara',
|
|
6982
|
-
senderAddress: senderAddress,
|
|
6983
|
-
asset: _objectSpread2(_objectSpread2({}, foundAsset), {}, {
|
|
6984
|
-
amount: currency.amount
|
|
6985
|
-
})}, exports.Version.V4, messageId);
|
|
6986
|
-
_context.next = 39;
|
|
6987
|
-
return api.objectToHex(customXcm, 'XcmVersionedXcm');
|
|
6988
|
-
case 39:
|
|
6989
|
-
customXcmOnDest = _context.sent;
|
|
6990
|
-
_context.next = 42;
|
|
6991
|
-
return api.createApiForNode('AssetHubPolkadot');
|
|
6992
|
-
case 42:
|
|
6993
|
-
assetHubApi = _context.sent;
|
|
6994
|
-
_context.next = 45;
|
|
6995
|
-
return getParaEthTransferFees(assetHubApi);
|
|
6996
|
-
case 45:
|
|
6997
|
-
_yield$getParaEthTran = _context.sent;
|
|
6998
|
-
_yield$getParaEthTran2 = _slicedToArray(_yield$getParaEthTran, 2);
|
|
6999
|
-
bridgeFee = _yield$getParaEthTran2[0];
|
|
7000
|
-
executionFee = _yield$getParaEthTran2[1];
|
|
7001
|
-
transferFee = (bridgeFee + executionFee).toString(); // Partially inspired by Moonbeam XCM-SDK
|
|
7002
|
-
// https://github.com/moonbeam-foundation/xcm-sdk/blob/ab835c15bf41612604b1c858d956a9f07705ed65/packages/sdk/src/contract/contracts/Xtokens/Xtokens.ts#L53
|
|
7003
|
-
createTx = function createTx(func, args) {
|
|
7004
|
-
if (isEthersContract(contract)) {
|
|
7005
|
-
return contract[func].apply(contract, _toConsumableArray(args));
|
|
7006
|
-
}
|
|
7007
|
-
return contract.write[func](args);
|
|
7008
|
-
};
|
|
7009
|
-
numberToHex32 = function numberToHex32(num) {
|
|
7010
|
-
return typeof num !== 'number' || isNaN(num) ? function () {
|
|
7011
|
-
throw new Error('Input must be a valid number');
|
|
7012
|
-
}() : "0x".concat((num >>> 0).toString(16).padStart(8, '0'));
|
|
7013
|
-
}; // Execute the custom XCM message with the precompile
|
|
7014
|
-
_context.next = 54;
|
|
7015
|
-
return createTx(isEthersSigner(signer) ? 'transferAssetsUsingTypeAndThenAddress((uint8,bytes[]),(address,uint256)[],uint8,uint8,uint8,bytes)' : 'transferAssetsUsingTypeAndThenAddress', [
|
|
7016
|
-
// This represents (1,X1(Parachain(1000)))
|
|
7017
|
-
[1, ['0x00' + numberToHex32(getParaId('AssetHubPolkadot')).slice(2)]],
|
|
7018
|
-
// Assets including fee and the ERC20 asset, with fee be the first
|
|
7019
|
-
[[XCDOT, transferFee], [ethAsset.assetId, currency.amount.toString()]],
|
|
7020
|
-
// The TransferType corresponding to asset being sent, 2 represents `DestinationReserve`
|
|
7021
|
-
2,
|
|
7022
|
-
// index for the fee
|
|
7023
|
-
0,
|
|
7024
|
-
// The TransferType corresponding to fee asset
|
|
7025
|
-
2, customXcmOnDest]);
|
|
7026
|
-
case 54:
|
|
7027
|
-
tx = _context.sent;
|
|
7028
|
-
return _context.abrupt("return", _typeof(tx) === 'object' ? tx.hash : tx);
|
|
7029
|
-
case 56:
|
|
7030
|
-
case "end":
|
|
7031
|
-
return _context.stop();
|
|
7032
|
-
}
|
|
7033
|
-
}, _callee);
|
|
7034
|
-
}));
|
|
7035
|
-
return function transferMoonbeamToEth(_x) {
|
|
7036
|
-
return _ref2.apply(this, arguments);
|
|
7037
|
-
};
|
|
7038
|
-
}();
|
|
7039
|
-
|
|
7040
|
-
/**
|
|
7041
|
-
* Retrieves the node name corresponding to a specified parachain ID.
|
|
7042
|
-
*
|
|
7043
|
-
* @param paraId - The parachain ID.
|
|
7044
|
-
* @returns The node name if found; otherwise, null.
|
|
7045
|
-
*/
|
|
7046
|
-
var getTNode = function getTNode(paraId, ecosystem) {
|
|
7047
|
-
var _NODE_NAMES_DOT_KSM$f;
|
|
7048
|
-
if (paraId === 0) {
|
|
7049
|
-
return ecosystem === 'polkadot' ? 'Polkadot' : 'Kusama';
|
|
7050
|
-
}
|
|
7051
|
-
if (paraId === 1) {
|
|
7052
|
-
return 'Ethereum';
|
|
7053
|
-
}
|
|
7054
|
-
return (_NODE_NAMES_DOT_KSM$f = sdkCommon.NODE_NAMES_DOT_KSM.find(function (nodeName) {
|
|
7055
|
-
return getNode(nodeName).type === ecosystem && getParaId(nodeName) === paraId;
|
|
7056
|
-
})) !== null && _NODE_NAMES_DOT_KSM$f !== void 0 ? _NODE_NAMES_DOT_KSM$f : null;
|
|
7057
|
-
};
|
|
7058
|
-
|
|
7059
|
-
var isAssetHub = function isAssetHub(chain) {
|
|
7060
|
-
return chain === 'AssetHubPolkadot' || chain === 'AssetHubKusama';
|
|
7061
|
-
};
|
|
7062
|
-
var isBridgeHub = function isBridgeHub(chain) {
|
|
7063
|
-
return chain === 'BridgeHubPolkadot' || chain === 'BridgeHubKusama';
|
|
7064
|
-
};
|
|
7065
|
-
var isPeople = function isPeople(chain) {
|
|
7066
|
-
return chain === 'PeoplePolkadot' || chain === 'PeopleKusama';
|
|
7067
|
-
};
|
|
7068
|
-
var isSystemPara = function isSystemPara(chain) {
|
|
7069
|
-
return isAssetHub(chain) || isBridgeHub(chain) || isPeople(chain);
|
|
7070
|
-
};
|
|
7071
|
-
var mul = function mul(v, num) {
|
|
7072
|
-
var den = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1n;
|
|
7073
|
-
return v * num / den;
|
|
7074
|
-
};
|
|
7075
|
-
var padFee = function padFee(raw, origin, dest, side) {
|
|
7076
|
-
var relayOrigin = sdkCommon.isRelayChain(origin);
|
|
7077
|
-
var relayDest = sdkCommon.isRelayChain(dest);
|
|
7078
|
-
var sysParaOrigin = isSystemPara(origin);
|
|
7079
|
-
var sysParaDest = isSystemPara(dest);
|
|
7080
|
-
var relayToPara = relayOrigin && !relayDest;
|
|
7081
|
-
var sysParaToPara = sysParaOrigin && !sysParaDest;
|
|
7082
|
-
var paraToPara = !relayOrigin && !sysParaOrigin;
|
|
7083
|
-
if (sysParaToPara) return raw * 40n;
|
|
7084
|
-
if (relayToPara) return side === 'origin' ? mul(raw, 320n, 100n) : mul(raw, 3000n, 100n);
|
|
7085
|
-
if (paraToPara) return mul(raw, 130n, 100n);
|
|
7086
|
-
// apply default 30% padding
|
|
7087
|
-
return mul(raw, 130n, 100n);
|
|
7088
|
-
};
|
|
7089
|
-
|
|
7090
|
-
var createOriginLocation = function createOriginLocation(origin, destination) {
|
|
7091
|
-
if (sdkCommon.isRelayChain(origin)) return DOT_MULTILOCATION;
|
|
7092
|
-
return {
|
|
7093
|
-
parents: sdkCommon.isRelayChain(destination) ? sdkCommon.Parents.ZERO : sdkCommon.Parents.ONE,
|
|
7094
|
-
interior: {
|
|
7095
|
-
X1: [{
|
|
7096
|
-
Parachain: getParaId(origin)
|
|
7097
|
-
}]
|
|
7098
|
-
}
|
|
7099
|
-
};
|
|
7100
|
-
};
|
|
7101
|
-
var getFeeForDestNode = /*#__PURE__*/function () {
|
|
7102
|
-
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref) {
|
|
7103
|
-
var api, forwardedXcms, origin, destination, address, senderAddress, currency, disableFallback, calcPaymentInfoFee, dryRunResult, fee, newForwardedXcms, destParaId;
|
|
7104
|
-
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
7105
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
7106
|
-
case 0:
|
|
7107
|
-
api = _ref.api, forwardedXcms = _ref.forwardedXcms, origin = _ref.origin, destination = _ref.destination, address = _ref.address, senderAddress = _ref.senderAddress, currency = _ref.currency, disableFallback = _ref.disableFallback;
|
|
7108
|
-
calcPaymentInfoFee = /*#__PURE__*/function () {
|
|
7109
|
-
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
7110
|
-
var originAsset, currencyInput, tx, rawFee;
|
|
7111
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
7112
|
-
while (1) switch (_context.prev = _context.next) {
|
|
7113
|
-
case 0:
|
|
7114
|
-
if (!('multiasset' in currency)) {
|
|
7115
|
-
_context.next = 2;
|
|
7116
|
-
break;
|
|
7117
|
-
}
|
|
7118
|
-
throw new assets.InvalidCurrencyError('Multi-assets are not yet supported for XCM fee calculation.');
|
|
7119
|
-
case 2:
|
|
7120
|
-
originAsset = assets.findAsset(origin, currency, destination);
|
|
7121
|
-
if (originAsset) {
|
|
7122
|
-
_context.next = 5;
|
|
7123
|
-
break;
|
|
7124
|
-
}
|
|
7125
|
-
throw new assets.InvalidCurrencyError("Currency ".concat(JSON.stringify(currency), " not found in ").concat(origin));
|
|
7126
|
-
case 5:
|
|
7127
|
-
currencyInput = originAsset.multiLocation ? {
|
|
7128
|
-
multilocation: originAsset.multiLocation
|
|
7129
|
-
} : {
|
|
7130
|
-
symbol: originAsset.symbol
|
|
7131
|
-
};
|
|
7132
|
-
_context.next = 8;
|
|
7133
|
-
return Builder(api).from(destination).to(origin).address(senderAddress, address).currency(_objectSpread2(_objectSpread2({}, currencyInput), {}, {
|
|
7134
|
-
amount: currency.amount
|
|
7135
|
-
})).build();
|
|
7136
|
-
case 8:
|
|
7137
|
-
tx = _context.sent;
|
|
7138
|
-
_context.next = 11;
|
|
7139
|
-
return api.calculateTransactionFee(tx, address);
|
|
7140
|
-
case 11:
|
|
7141
|
-
rawFee = _context.sent;
|
|
7142
|
-
return _context.abrupt("return", padFee(rawFee, origin, destination, 'destination'));
|
|
7143
|
-
case 13:
|
|
7144
|
-
case "end":
|
|
7145
|
-
return _context.stop();
|
|
7146
|
-
}
|
|
7147
|
-
}, _callee);
|
|
7148
|
-
}));
|
|
7149
|
-
return function calcPaymentInfoFee() {
|
|
7150
|
-
return _ref3.apply(this, arguments);
|
|
7151
|
-
};
|
|
7152
|
-
}();
|
|
7153
|
-
if (!(!assets.hasDryRunSupport(destination) || !forwardedXcms)) {
|
|
7154
|
-
_context2.next = 7;
|
|
7289
|
+
case 8:
|
|
7290
|
+
if (!('multiasset' in currency)) {
|
|
7291
|
+
_context.next = 10;
|
|
7155
7292
|
break;
|
|
7156
7293
|
}
|
|
7157
|
-
|
|
7158
|
-
|
|
7159
|
-
|
|
7160
|
-
|
|
7161
|
-
return _context2.abrupt("return", {
|
|
7162
|
-
fee: _context2.t0,
|
|
7163
|
-
feeType: 'paymentInfo'
|
|
7164
|
-
});
|
|
7165
|
-
case 7:
|
|
7166
|
-
_context2.next = 9;
|
|
7167
|
-
return api.getDryRunXcm({
|
|
7168
|
-
originLocation: addXcmVersionHeader(createOriginLocation(origin, destination), exports.Version.V4),
|
|
7169
|
-
xcm: forwardedXcms[1][0],
|
|
7170
|
-
node: destination,
|
|
7171
|
-
origin: origin
|
|
7172
|
-
});
|
|
7173
|
-
case 9:
|
|
7174
|
-
dryRunResult = _context2.sent;
|
|
7175
|
-
if (dryRunResult.success) {
|
|
7176
|
-
_context2.next = 18;
|
|
7294
|
+
throw new Error('Multiassets syntax is not supported for Evm transfers');
|
|
7295
|
+
case 10:
|
|
7296
|
+
if (!('multilocation' in currency && assets.isOverrideMultiLocationSpecifier(currency.multilocation))) {
|
|
7297
|
+
_context.next = 12;
|
|
7177
7298
|
break;
|
|
7178
7299
|
}
|
|
7179
|
-
|
|
7180
|
-
|
|
7300
|
+
throw new Error('Override multilocation is not supported for Evm transfers');
|
|
7301
|
+
case 12:
|
|
7302
|
+
foundAsset = assets.findAsset(from, currency, to);
|
|
7303
|
+
if (!(foundAsset === null)) {
|
|
7304
|
+
_context.next = 15;
|
|
7181
7305
|
break;
|
|
7182
7306
|
}
|
|
7183
|
-
|
|
7184
|
-
dryRunError: dryRunResult.failureReason
|
|
7185
|
-
});
|
|
7186
|
-
case 13:
|
|
7187
|
-
_context2.next = 15;
|
|
7188
|
-
return calcPaymentInfoFee();
|
|
7307
|
+
throw new assets.InvalidCurrencyError("Origin node ".concat(from, " does not support currency ").concat(JSON.stringify(currency), "."));
|
|
7189
7308
|
case 15:
|
|
7190
|
-
|
|
7191
|
-
|
|
7192
|
-
|
|
7193
|
-
|
|
7194
|
-
|
|
7195
|
-
|
|
7196
|
-
|
|
7197
|
-
|
|
7198
|
-
|
|
7199
|
-
|
|
7200
|
-
|
|
7201
|
-
|
|
7202
|
-
forwardedXcms: newForwardedXcms,
|
|
7203
|
-
destParaId: destParaId
|
|
7204
|
-
});
|
|
7309
|
+
if (!(!assets.isForeignAsset(foundAsset) || !foundAsset.multiLocation)) {
|
|
7310
|
+
_context.next = 17;
|
|
7311
|
+
break;
|
|
7312
|
+
}
|
|
7313
|
+
throw new assets.InvalidCurrencyError('Currency must be a foreign asset with valid multi-location');
|
|
7314
|
+
case 17:
|
|
7315
|
+
ethAsset = assets.findAssetByMultiLocation(assets.getOtherAssets('Ethereum'), foundAsset.multiLocation);
|
|
7316
|
+
if (!(!ethAsset || !ethAsset.assetId)) {
|
|
7317
|
+
_context.next = 20;
|
|
7318
|
+
break;
|
|
7319
|
+
}
|
|
7320
|
+
throw new assets.InvalidCurrencyError("Could not obtain Ethereum asset address for ".concat(JSON.stringify(foundAsset)));
|
|
7205
7321
|
case 20:
|
|
7206
|
-
|
|
7207
|
-
|
|
7208
|
-
|
|
7209
|
-
|
|
7210
|
-
|
|
7211
|
-
|
|
7212
|
-
|
|
7213
|
-
|
|
7214
|
-
|
|
7215
|
-
|
|
7216
|
-
|
|
7217
|
-
|
|
7218
|
-
|
|
7219
|
-
|
|
7220
|
-
|
|
7221
|
-
|
|
7222
|
-
|
|
7223
|
-
|
|
7224
|
-
_context.
|
|
7225
|
-
|
|
7226
|
-
|
|
7227
|
-
|
|
7228
|
-
_context.
|
|
7229
|
-
|
|
7230
|
-
|
|
7231
|
-
|
|
7232
|
-
|
|
7233
|
-
|
|
7234
|
-
|
|
7235
|
-
|
|
7236
|
-
case
|
|
7237
|
-
|
|
7238
|
-
|
|
7322
|
+
contract = isEthersSigner(signer) ? new ethers.Contract(xcmInterfacePrecompile, abi, signer) : viem.getContract({
|
|
7323
|
+
abi: abi,
|
|
7324
|
+
address: xcmInterfacePrecompile,
|
|
7325
|
+
client: {
|
|
7326
|
+
"public": viem.createPublicClient({
|
|
7327
|
+
chain: signer.chain,
|
|
7328
|
+
transport: viem.http()
|
|
7329
|
+
}),
|
|
7330
|
+
wallet: signer
|
|
7331
|
+
}
|
|
7332
|
+
});
|
|
7333
|
+
if (!isEthersSigner(signer)) {
|
|
7334
|
+
_context.next = 27;
|
|
7335
|
+
break;
|
|
7336
|
+
}
|
|
7337
|
+
_context.next = 24;
|
|
7338
|
+
return signer.getAddress();
|
|
7339
|
+
case 24:
|
|
7340
|
+
_context.t0 = _context.sent;
|
|
7341
|
+
_context.next = 28;
|
|
7342
|
+
break;
|
|
7343
|
+
case 27:
|
|
7344
|
+
_context.t0 = (_signer$account = signer.account) === null || _signer$account === void 0 ? void 0 : _signer$account.address;
|
|
7345
|
+
case 28:
|
|
7346
|
+
senderAddress = _context.t0;
|
|
7347
|
+
if (senderAddress) {
|
|
7348
|
+
_context.next = 31;
|
|
7349
|
+
break;
|
|
7350
|
+
}
|
|
7351
|
+
throw new Error('Unable to get sender address');
|
|
7352
|
+
case 31:
|
|
7353
|
+
_context.next = 33;
|
|
7354
|
+
return api.init(from);
|
|
7355
|
+
case 33:
|
|
7356
|
+
_context.next = 35;
|
|
7357
|
+
return generateMessageId(api, senderAddress, getParaId(from), ethAsset.assetId, address, currency.amount);
|
|
7358
|
+
case 35:
|
|
7359
|
+
messageId = _context.sent;
|
|
7360
|
+
customXcm = createCustomXcmOnDest({
|
|
7361
|
+
api: api,
|
|
7362
|
+
address: address,
|
|
7363
|
+
scenario: 'ParaToPara',
|
|
7364
|
+
senderAddress: senderAddress,
|
|
7365
|
+
ahAddress: ahAddress,
|
|
7366
|
+
asset: _objectSpread2(_objectSpread2({}, foundAsset), {}, {
|
|
7367
|
+
amount: currency.amount
|
|
7368
|
+
})}, from, exports.Version.V4, messageId);
|
|
7369
|
+
_context.next = 39;
|
|
7370
|
+
return api.objectToHex(customXcm, 'XcmVersionedXcm');
|
|
7371
|
+
case 39:
|
|
7372
|
+
customXcmOnDest = _context.sent;
|
|
7373
|
+
_context.next = 42;
|
|
7374
|
+
return api.createApiForNode('AssetHubPolkadot');
|
|
7375
|
+
case 42:
|
|
7376
|
+
assetHubApi = _context.sent;
|
|
7377
|
+
_context.next = 45;
|
|
7378
|
+
return getParaEthTransferFees(assetHubApi);
|
|
7379
|
+
case 45:
|
|
7380
|
+
_yield$getParaEthTran = _context.sent;
|
|
7381
|
+
_yield$getParaEthTran2 = _slicedToArray(_yield$getParaEthTran, 2);
|
|
7382
|
+
bridgeFee = _yield$getParaEthTran2[0];
|
|
7383
|
+
executionFee = _yield$getParaEthTran2[1];
|
|
7384
|
+
transferFee = (bridgeFee + executionFee).toString(); // Partially inspired by Moonbeam XCM-SDK
|
|
7385
|
+
// https://github.com/moonbeam-foundation/xcm-sdk/blob/ab835c15bf41612604b1c858d956a9f07705ed65/packages/sdk/src/contract/contracts/Xtokens/Xtokens.ts#L53
|
|
7386
|
+
createTx = function createTx(func, args) {
|
|
7387
|
+
if (isEthersContract(contract)) {
|
|
7388
|
+
return contract[func].apply(contract, _toConsumableArray(args));
|
|
7389
|
+
}
|
|
7390
|
+
return contract.write[func](args);
|
|
7391
|
+
};
|
|
7392
|
+
numberToHex32 = function numberToHex32(num) {
|
|
7393
|
+
return typeof num !== 'number' || isNaN(num) ? function () {
|
|
7394
|
+
throw new Error('Input must be a valid number');
|
|
7395
|
+
}() : "0x".concat((num >>> 0).toString(16).padStart(8, '0'));
|
|
7396
|
+
}; // Execute the custom XCM message with the precompile
|
|
7397
|
+
_context.next = 54;
|
|
7398
|
+
return createTx(isEthersSigner(signer) ? 'transferAssetsUsingTypeAndThenAddress((uint8,bytes[]),(address,uint256)[],uint8,uint8,uint8,bytes)' : 'transferAssetsUsingTypeAndThenAddress', [
|
|
7399
|
+
// This represents (1,X1(Parachain(1000)))
|
|
7400
|
+
[1, ['0x00' + numberToHex32(getParaId('AssetHubPolkadot')).slice(2)]],
|
|
7401
|
+
// Assets including fee and the ERC20 asset, with fee be the first
|
|
7402
|
+
[[XCDOT, transferFee], [ethAsset.assetId, currency.amount.toString()]],
|
|
7403
|
+
// The TransferType corresponding to asset being sent, 2 represents `DestinationReserve`
|
|
7404
|
+
2,
|
|
7405
|
+
// index for the fee
|
|
7406
|
+
0,
|
|
7407
|
+
// The TransferType corresponding to fee asset
|
|
7408
|
+
2, customXcmOnDest]);
|
|
7409
|
+
case 54:
|
|
7410
|
+
tx = _context.sent;
|
|
7411
|
+
return _context.abrupt("return", _typeof(tx) === 'object' ? tx.hash : tx);
|
|
7412
|
+
case 56:
|
|
7239
7413
|
case "end":
|
|
7240
7414
|
return _context.stop();
|
|
7241
7415
|
}
|
|
7242
|
-
}, _callee
|
|
7416
|
+
}, _callee);
|
|
7243
7417
|
}));
|
|
7244
|
-
return function
|
|
7245
|
-
return
|
|
7418
|
+
return function transferMoonbeamToEth(_x) {
|
|
7419
|
+
return _ref2.apply(this, arguments);
|
|
7246
7420
|
};
|
|
7247
7421
|
}();
|
|
7248
7422
|
|
|
@@ -7267,8 +7441,7 @@ var getFeeForOriginNode = /*#__PURE__*/function () {
|
|
|
7267
7441
|
});
|
|
7268
7442
|
case 6:
|
|
7269
7443
|
_context.next = 8;
|
|
7270
|
-
return
|
|
7271
|
-
api: api,
|
|
7444
|
+
return api.getDryRunCall({
|
|
7272
7445
|
tx: tx,
|
|
7273
7446
|
node: origin,
|
|
7274
7447
|
address: senderAddress
|
|
@@ -7407,7 +7580,7 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
7407
7580
|
destinationFeeType = 'paymentInfo';
|
|
7408
7581
|
case 36:
|
|
7409
7582
|
if (!(Array.isArray(forwardedXcms) && forwardedXcms.length > 0 && forwardedXcms[1].length > 0 && ('disconnect' in api.getApi() ? Object.values(forwardedXcms[1][0]).length : forwardedXcms[1][0].value.length) > 0 && nextParaId !== undefined)) {
|
|
7410
|
-
_context.next =
|
|
7583
|
+
_context.next = 68;
|
|
7411
7584
|
break;
|
|
7412
7585
|
}
|
|
7413
7586
|
nextChain = getTNode(nextParaId, determineRelayChain(origin) === 'Polkadot' ? 'polkadot' : 'kusama');
|
|
@@ -7478,7 +7651,7 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
7478
7651
|
destinationFee = destFallback.fee;
|
|
7479
7652
|
destinationFeeType = destFallback.feeType; // paymentInfo
|
|
7480
7653
|
case 57:
|
|
7481
|
-
return _context.abrupt("break",
|
|
7654
|
+
return _context.abrupt("break", 68);
|
|
7482
7655
|
case 58:
|
|
7483
7656
|
if (nextChain === destination || sdkCommon.isRelayChain(nextChain) && !sdkCommon.isRelayChain(destination)) {
|
|
7484
7657
|
destinationFee = hopResult.fee;
|
|
@@ -7501,15 +7674,14 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
7501
7674
|
currentOrigin = nextChain;
|
|
7502
7675
|
case 62:
|
|
7503
7676
|
_context.prev = 62;
|
|
7504
|
-
|
|
7505
|
-
_context.next = 66;
|
|
7677
|
+
_context.next = 65;
|
|
7506
7678
|
return hopApi.disconnect();
|
|
7507
|
-
case
|
|
7679
|
+
case 65:
|
|
7508
7680
|
return _context.finish(62);
|
|
7509
|
-
case
|
|
7681
|
+
case 66:
|
|
7510
7682
|
_context.next = 36;
|
|
7511
7683
|
break;
|
|
7512
|
-
case
|
|
7684
|
+
case 68:
|
|
7513
7685
|
return _context.abrupt("return", _objectSpread2(_objectSpread2({
|
|
7514
7686
|
origin: _objectSpread2(_objectSpread2(_objectSpread2({}, originFee && {
|
|
7515
7687
|
fee: originFee
|
|
@@ -7531,11 +7703,11 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
7531
7703
|
dryRunError: destinationDryRunError
|
|
7532
7704
|
})
|
|
7533
7705
|
}));
|
|
7534
|
-
case
|
|
7706
|
+
case 69:
|
|
7535
7707
|
case "end":
|
|
7536
7708
|
return _context.stop();
|
|
7537
7709
|
}
|
|
7538
|
-
}, _callee, null, [[17,, 25, 30], [41,, 62,
|
|
7710
|
+
}, _callee, null, [[17,, 25, 30], [41,, 62, 66]]);
|
|
7539
7711
|
}));
|
|
7540
7712
|
return function getXcmFee(_x) {
|
|
7541
7713
|
return _ref2.apply(this, arguments);
|
|
@@ -7609,7 +7781,7 @@ var getXcmFeeEstimate = /*#__PURE__*/function () {
|
|
|
7609
7781
|
symbol: originAsset.symbol
|
|
7610
7782
|
};
|
|
7611
7783
|
_context.next = 20;
|
|
7612
|
-
return Builder(destApi).from(destination).to(origin).address(senderAddress
|
|
7784
|
+
return Builder(destApi).from(destination).to(origin).address(senderAddress).senderAddress(address).currency(_objectSpread2(_objectSpread2({}, currencyInput), {}, {
|
|
7613
7785
|
amount: currency.amount
|
|
7614
7786
|
})).build();
|
|
7615
7787
|
case 20:
|
|
@@ -7722,7 +7894,7 @@ var validateDestination = function validateDestination(origin, destination) {
|
|
|
7722
7894
|
if (sdkCommon.isRelayChain(origin) && !sdkCommon.isTMultiLocation(destination) && sdkCommon.isRelayChain(destination) && origin !== destination) {
|
|
7723
7895
|
throw new IncompatibleNodesError('Direct relay chain to relay chain transfers are not supported. Please use Polkadot <-> Kusama bridge through AssetHub.');
|
|
7724
7896
|
}
|
|
7725
|
-
if (destination === 'Ethereum' && origin !== 'AssetHubPolkadot' && origin !== 'Hydration' && origin !== 'BifrostPolkadot') {
|
|
7897
|
+
if (destination === 'Ethereum' && origin !== 'AssetHubPolkadot' && origin !== 'Hydration' && origin !== 'BifrostPolkadot' && origin !== 'Moonbeam') {
|
|
7726
7898
|
throw new IncompatibleNodesError('Transfers to Ethereum are only supported from AssetHubPolkadot and Hydration.');
|
|
7727
7899
|
}
|
|
7728
7900
|
var isMultiLocationDestination = _typeof(destination) === 'object';
|
|
@@ -7848,11 +8020,11 @@ var validateDestinationAddress = function validateDestinationAddress(address, de
|
|
|
7848
8020
|
|
|
7849
8021
|
var send = /*#__PURE__*/function () {
|
|
7850
8022
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
7851
|
-
var api, origin, currency, feeAsset, address, destination, paraIdTo, version, senderAddress, pallet, method, isBridge, assetCheckEnabled, asset, resolvedFeeAsset, isLocalTransfer, overriddenAsset, resolvedAsset, originNode;
|
|
8023
|
+
var api, origin, currency, feeAsset, address, destination, paraIdTo, version, senderAddress, ahAddress, pallet, method, isBridge, assetCheckEnabled, asset, resolvedFeeAsset, isLocalTransfer, overriddenAsset, resolvedAsset, originNode;
|
|
7852
8024
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
7853
8025
|
while (1) switch (_context.prev = _context.next) {
|
|
7854
8026
|
case 0:
|
|
7855
|
-
api = options.api, origin = options.from, currency = options.currency, feeAsset = options.feeAsset, address = options.address, destination = options.to, paraIdTo = options.paraIdTo, version = options.version, senderAddress = options.senderAddress, pallet = options.pallet, method = options.method;
|
|
8027
|
+
api = options.api, origin = options.from, currency = options.currency, feeAsset = options.feeAsset, address = options.address, destination = options.to, paraIdTo = options.paraIdTo, version = options.version, senderAddress = options.senderAddress, ahAddress = options.ahAddress, pallet = options.pallet, method = options.method;
|
|
7856
8028
|
validateCurrency(currency, feeAsset);
|
|
7857
8029
|
validateDestination(origin, destination);
|
|
7858
8030
|
validateDestinationAddress(address, destination);
|
|
@@ -7939,6 +8111,7 @@ var send = /*#__PURE__*/function () {
|
|
|
7939
8111
|
overriddenAsset: overriddenAsset,
|
|
7940
8112
|
version: version,
|
|
7941
8113
|
senderAddress: senderAddress,
|
|
8114
|
+
ahAddress: ahAddress,
|
|
7942
8115
|
pallet: pallet,
|
|
7943
8116
|
method: method
|
|
7944
8117
|
}));
|
|
@@ -8092,14 +8265,44 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
8092
8265
|
currency: _currency
|
|
8093
8266
|
}));
|
|
8094
8267
|
}
|
|
8268
|
+
/**
|
|
8269
|
+
* Sets the recipient address.
|
|
8270
|
+
*
|
|
8271
|
+
* @param address - The destination address.
|
|
8272
|
+
* @returns An instance of Builder
|
|
8273
|
+
*/
|
|
8095
8274
|
}, {
|
|
8096
8275
|
key: "address",
|
|
8097
|
-
value: function address(_address
|
|
8276
|
+
value: function address(_address) {
|
|
8098
8277
|
return new GeneralBuilder(this.api, this.batchManager, _objectSpread2(_objectSpread2({}, this._options), {}, {
|
|
8099
8278
|
address: _address
|
|
8100
|
-
}
|
|
8101
|
-
|
|
8102
|
-
|
|
8279
|
+
}));
|
|
8280
|
+
}
|
|
8281
|
+
/**
|
|
8282
|
+
* Sets the sender address.
|
|
8283
|
+
*
|
|
8284
|
+
* @param address - The sender address.
|
|
8285
|
+
* @returns
|
|
8286
|
+
*/
|
|
8287
|
+
}, {
|
|
8288
|
+
key: "senderAddress",
|
|
8289
|
+
value: function senderAddress(address) {
|
|
8290
|
+
return new GeneralBuilder(this.api, this.batchManager, _objectSpread2(_objectSpread2({}, this._options), {}, {
|
|
8291
|
+
senderAddress: address
|
|
8292
|
+
}));
|
|
8293
|
+
}
|
|
8294
|
+
/**
|
|
8295
|
+
* Sets the asset hub address. This is used for transfers that go through the Asset Hub and originate from an EVM chain.
|
|
8296
|
+
*
|
|
8297
|
+
* @param address - The address to be used.
|
|
8298
|
+
* @returns An instance of Builder
|
|
8299
|
+
*/
|
|
8300
|
+
}, {
|
|
8301
|
+
key: "ahAddress",
|
|
8302
|
+
value: function ahAddress(address) {
|
|
8303
|
+
return new GeneralBuilder(this.api, this.batchManager, _objectSpread2(_objectSpread2({}, this._options), {}, {
|
|
8304
|
+
ahAddress: address
|
|
8305
|
+
}));
|
|
8103
8306
|
}
|
|
8104
8307
|
/**
|
|
8105
8308
|
* Sets the XCM version to be used for the transfer.
|
|
@@ -8225,33 +8428,53 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
8225
8428
|
}, {
|
|
8226
8429
|
key: "dryRun",
|
|
8227
8430
|
value: function () {
|
|
8228
|
-
var
|
|
8229
|
-
var tx;
|
|
8431
|
+
var _dryRun2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
|
|
8432
|
+
var _this$_options2, to, address, senderAddress, tx;
|
|
8230
8433
|
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
8231
8434
|
while (1) switch (_context3.prev = _context3.next) {
|
|
8232
8435
|
case 0:
|
|
8233
|
-
this.
|
|
8436
|
+
_this$_options2 = this._options, to = _this$_options2.to, address = _this$_options2.address, senderAddress = _this$_options2.senderAddress;
|
|
8234
8437
|
_context3.next = 3;
|
|
8235
8438
|
return this.build();
|
|
8236
8439
|
case 3:
|
|
8237
8440
|
tx = _context3.sent;
|
|
8238
|
-
|
|
8239
|
-
|
|
8441
|
+
if (!sdkCommon.isTMultiLocation(to)) {
|
|
8442
|
+
_context3.next = 6;
|
|
8443
|
+
break;
|
|
8444
|
+
}
|
|
8445
|
+
throw new InvalidParameterError('Multi-Location destination is not supported for XCM fee calculation.');
|
|
8446
|
+
case 6:
|
|
8447
|
+
if (!sdkCommon.isTMultiLocation(address)) {
|
|
8448
|
+
_context3.next = 8;
|
|
8449
|
+
break;
|
|
8450
|
+
}
|
|
8451
|
+
throw new InvalidParameterError('Multi-Location address is not supported for XCM fee calculation.');
|
|
8452
|
+
case 8:
|
|
8453
|
+
if (!(to === 'Ethereum')) {
|
|
8454
|
+
_context3.next = 10;
|
|
8455
|
+
break;
|
|
8456
|
+
}
|
|
8457
|
+
throw new InvalidParameterError('Ethereum destination is not yet supported for XCM fee calculation.');
|
|
8458
|
+
case 10:
|
|
8459
|
+
return _context3.abrupt("return", dryRun({
|
|
8240
8460
|
api: this.api,
|
|
8241
8461
|
tx: tx,
|
|
8242
8462
|
address: senderAddress,
|
|
8243
|
-
|
|
8463
|
+
origin: this._options.from,
|
|
8464
|
+
destination: to,
|
|
8465
|
+
currency: this._options.currency,
|
|
8466
|
+
senderAddress: this._options.senderAddress
|
|
8244
8467
|
}));
|
|
8245
|
-
case
|
|
8468
|
+
case 11:
|
|
8246
8469
|
case "end":
|
|
8247
8470
|
return _context3.stop();
|
|
8248
8471
|
}
|
|
8249
8472
|
}, _callee3, this);
|
|
8250
8473
|
}));
|
|
8251
|
-
function dryRun(
|
|
8252
|
-
return
|
|
8474
|
+
function dryRun$1() {
|
|
8475
|
+
return _dryRun2.apply(this, arguments);
|
|
8253
8476
|
}
|
|
8254
|
-
return dryRun;
|
|
8477
|
+
return dryRun$1;
|
|
8255
8478
|
}()
|
|
8256
8479
|
/**
|
|
8257
8480
|
* Estimates the XCM fee for the transfer using paymentInfo function.
|
|
@@ -8262,11 +8485,11 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
8262
8485
|
key: "getXcmFeeEstimate",
|
|
8263
8486
|
value: (function () {
|
|
8264
8487
|
var _getXcmFeeEstimate2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
|
|
8265
|
-
var _this$
|
|
8488
|
+
var _this$_options3, from, to, address, senderAddress, tx;
|
|
8266
8489
|
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
8267
8490
|
while (1) switch (_context4.prev = _context4.next) {
|
|
8268
8491
|
case 0:
|
|
8269
|
-
_this$
|
|
8492
|
+
_this$_options3 = this._options, from = _this$_options3.from, to = _this$_options3.to, address = _this$_options3.address, senderAddress = _this$_options3.senderAddress;
|
|
8270
8493
|
if (!sdkCommon.isTMultiLocation(to)) {
|
|
8271
8494
|
_context4.next = 3;
|
|
8272
8495
|
break;
|
|
@@ -8291,7 +8514,9 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
8291
8514
|
case 10:
|
|
8292
8515
|
tx = _context4.sent;
|
|
8293
8516
|
this.api.setDisconnectAllowed(true);
|
|
8294
|
-
|
|
8517
|
+
_context4.prev = 12;
|
|
8518
|
+
_context4.next = 15;
|
|
8519
|
+
return getXcmFeeEstimate({
|
|
8295
8520
|
api: this.api,
|
|
8296
8521
|
tx: tx,
|
|
8297
8522
|
origin: from,
|
|
@@ -8299,12 +8524,20 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
8299
8524
|
address: address,
|
|
8300
8525
|
senderAddress: senderAddress,
|
|
8301
8526
|
currency: this._options.currency
|
|
8302
|
-
})
|
|
8303
|
-
case
|
|
8527
|
+
});
|
|
8528
|
+
case 15:
|
|
8529
|
+
return _context4.abrupt("return", _context4.sent);
|
|
8530
|
+
case 16:
|
|
8531
|
+
_context4.prev = 16;
|
|
8532
|
+
_context4.next = 19;
|
|
8533
|
+
return this.api.disconnect();
|
|
8534
|
+
case 19:
|
|
8535
|
+
return _context4.finish(16);
|
|
8536
|
+
case 20:
|
|
8304
8537
|
case "end":
|
|
8305
8538
|
return _context4.stop();
|
|
8306
8539
|
}
|
|
8307
|
-
}, _callee4, this);
|
|
8540
|
+
}, _callee4, this, [[12,, 16, 20]]);
|
|
8308
8541
|
}));
|
|
8309
8542
|
function getXcmFeeEstimate$1() {
|
|
8310
8543
|
return _getXcmFeeEstimate2.apply(this, arguments);
|
|
@@ -8323,7 +8556,7 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
8323
8556
|
var _getXcmFee2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
|
|
8324
8557
|
var _ref,
|
|
8325
8558
|
disableFallback,
|
|
8326
|
-
_this$
|
|
8559
|
+
_this$_options4,
|
|
8327
8560
|
from,
|
|
8328
8561
|
to,
|
|
8329
8562
|
address,
|
|
@@ -8336,7 +8569,7 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
8336
8569
|
_ref = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : {
|
|
8337
8570
|
disableFallback: false
|
|
8338
8571
|
}, disableFallback = _ref.disableFallback;
|
|
8339
|
-
_this$
|
|
8572
|
+
_this$_options4 = this._options, from = _this$_options4.from, to = _this$_options4.to, address = _this$_options4.address, senderAddress = _this$_options4.senderAddress;
|
|
8340
8573
|
if (!sdkCommon.isTMultiLocation(to)) {
|
|
8341
8574
|
_context5.next = 4;
|
|
8342
8575
|
break;
|
|
@@ -8359,8 +8592,9 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
8359
8592
|
return this.build();
|
|
8360
8593
|
case 10:
|
|
8361
8594
|
tx = _context5.sent;
|
|
8362
|
-
|
|
8363
|
-
|
|
8595
|
+
_context5.prev = 11;
|
|
8596
|
+
_context5.next = 14;
|
|
8597
|
+
return getXcmFee({
|
|
8364
8598
|
api: this.api,
|
|
8365
8599
|
tx: tx,
|
|
8366
8600
|
origin: from,
|
|
@@ -8369,12 +8603,20 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
8369
8603
|
address: address,
|
|
8370
8604
|
currency: this._options.currency,
|
|
8371
8605
|
disableFallback: disableFallback
|
|
8372
|
-
})
|
|
8373
|
-
case
|
|
8606
|
+
});
|
|
8607
|
+
case 14:
|
|
8608
|
+
return _context5.abrupt("return", _context5.sent);
|
|
8609
|
+
case 15:
|
|
8610
|
+
_context5.prev = 15;
|
|
8611
|
+
_context5.next = 18;
|
|
8612
|
+
return this.api.disconnect();
|
|
8613
|
+
case 18:
|
|
8614
|
+
return _context5.finish(15);
|
|
8615
|
+
case 19:
|
|
8374
8616
|
case "end":
|
|
8375
8617
|
return _context5.stop();
|
|
8376
8618
|
}
|
|
8377
|
-
}, _callee5, this);
|
|
8619
|
+
}, _callee5, this, [[11,, 15, 19]]);
|
|
8378
8620
|
}));
|
|
8379
8621
|
function getXcmFee$1() {
|
|
8380
8622
|
return _getXcmFee2.apply(this, arguments);
|
|
@@ -8775,7 +9017,7 @@ var getOriginFeeDetailsInternal = /*#__PURE__*/function () {
|
|
|
8775
9017
|
return api.init(origin);
|
|
8776
9018
|
case 3:
|
|
8777
9019
|
_context.next = 5;
|
|
8778
|
-
return Builder(api).from(origin).to(destination).currency(currency).address(accountDestination
|
|
9020
|
+
return Builder(api).from(origin).to(destination).currency(currency).address(accountDestination).senderAddress(account).build();
|
|
8779
9021
|
case 5:
|
|
8780
9022
|
tx = _context.sent;
|
|
8781
9023
|
_context.next = 8;
|
|
@@ -9191,6 +9433,8 @@ exports.createBeneficiaryMultiLocation = createBeneficiaryMultiLocation;
|
|
|
9191
9433
|
exports.createVersionedBeneficiary = createVersionedBeneficiary;
|
|
9192
9434
|
exports.createX1Payload = createX1Payload;
|
|
9193
9435
|
exports.determineRelayChain = determineRelayChain;
|
|
9436
|
+
exports.dryRun = dryRun;
|
|
9437
|
+
exports.dryRunOrigin = dryRunOrigin;
|
|
9194
9438
|
exports.generateAddressMultiLocationV4 = generateAddressMultiLocationV4;
|
|
9195
9439
|
exports.getAssetBalance = getAssetBalance;
|
|
9196
9440
|
exports.getAssetBalanceInternal = getAssetBalanceInternal;
|
|
@@ -9199,7 +9443,6 @@ exports.getBalanceForeignInternal = getBalanceForeignInternal;
|
|
|
9199
9443
|
exports.getBalanceNative = getBalanceNative;
|
|
9200
9444
|
exports.getBalanceNativeInternal = getBalanceNativeInternal;
|
|
9201
9445
|
exports.getBridgeStatus = getBridgeStatus;
|
|
9202
|
-
exports.getDryRun = getDryRun;
|
|
9203
9446
|
exports.getFees = getFees;
|
|
9204
9447
|
exports.getMaxForeignTransferableAmount = getMaxForeignTransferableAmount;
|
|
9205
9448
|
exports.getMaxNativeTransferableAmount = getMaxNativeTransferableAmount;
|