@paraspell/sdk-core 8.6.2 → 8.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +334 -97
- package/dist/index.d.ts +30 -7
- package/dist/index.mjs +333 -98
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -2473,10 +2473,71 @@ var throwUnsupportedCurrency = function throwUnsupportedCurrency(currency, node)
|
|
|
2473
2473
|
throw new InvalidCurrencyError("".concat(isDestination ? 'Destination' : 'Origin', " node ").concat(node, " does not support currency ").concat(JSON.stringify(currency), "."));
|
|
2474
2474
|
};
|
|
2475
2475
|
|
|
2476
|
+
var isPrimitive = function isPrimitive(obj) {
|
|
2477
|
+
return obj !== Object(obj);
|
|
2478
|
+
};
|
|
2479
|
+
var _deepEqual = function deepEqual(obj1, obj2) {
|
|
2480
|
+
if (obj1 === obj2) return true;
|
|
2481
|
+
if (isPrimitive(obj1) && isPrimitive(obj2)) return obj1 === obj2;
|
|
2482
|
+
if (_typeof(obj1) !== 'object' || obj1 === null || _typeof(obj2) !== 'object' || obj2 === null) {
|
|
2483
|
+
return false;
|
|
2484
|
+
}
|
|
2485
|
+
if (Array.isArray(obj1) !== Array.isArray(obj2)) {
|
|
2486
|
+
return false;
|
|
2487
|
+
}
|
|
2488
|
+
var obj1Keys = Object.keys(obj1).map(function (key) {
|
|
2489
|
+
return key.toLowerCase();
|
|
2490
|
+
});
|
|
2491
|
+
var obj2Keys = Object.keys(obj2).map(function (key) {
|
|
2492
|
+
return key.toLowerCase();
|
|
2493
|
+
});
|
|
2494
|
+
if (obj1Keys.length !== obj2Keys.length) return false;
|
|
2495
|
+
var _iterator = _createForOfIteratorHelper(obj1Keys),
|
|
2496
|
+
_step;
|
|
2497
|
+
try {
|
|
2498
|
+
var _loop = function _loop() {
|
|
2499
|
+
var key = _step.value;
|
|
2500
|
+
var keyInObj2 = obj2Keys.find(function (k) {
|
|
2501
|
+
return k === key;
|
|
2502
|
+
});
|
|
2503
|
+
if (!keyInObj2) return {
|
|
2504
|
+
v: false
|
|
2505
|
+
};
|
|
2506
|
+
var obj1Value = obj1[Object.keys(obj1).find(function (k) {
|
|
2507
|
+
return k.toLowerCase() === key;
|
|
2508
|
+
})];
|
|
2509
|
+
var obj2Value = obj2[Object.keys(obj2).find(function (k) {
|
|
2510
|
+
return k.toLowerCase() === key;
|
|
2511
|
+
})];
|
|
2512
|
+
if (!_deepEqual(obj1Value, obj2Value)) return {
|
|
2513
|
+
v: false
|
|
2514
|
+
};
|
|
2515
|
+
},
|
|
2516
|
+
_ret;
|
|
2517
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
2518
|
+
_ret = _loop();
|
|
2519
|
+
if (_ret) return _ret.v;
|
|
2520
|
+
}
|
|
2521
|
+
} catch (err) {
|
|
2522
|
+
_iterator.e(err);
|
|
2523
|
+
} finally {
|
|
2524
|
+
_iterator.f();
|
|
2525
|
+
}
|
|
2526
|
+
return true;
|
|
2527
|
+
};
|
|
2528
|
+
|
|
2476
2529
|
var isForeignAsset = function isForeignAsset(asset) {
|
|
2477
2530
|
return _typeof(asset) === 'object' && asset !== null && ('assetId' in asset || 'multiLocation' in asset) && !('isNative' in asset);
|
|
2478
2531
|
};
|
|
2479
2532
|
|
|
2533
|
+
var isAssetEqual = function isAssetEqual(asset1, asset2) {
|
|
2534
|
+
var ml1 = asset1.multiLocation;
|
|
2535
|
+
var ml2 = asset2.multiLocation;
|
|
2536
|
+
if (ml1 && ml2 && _deepEqual(ml1, ml2)) return true;
|
|
2537
|
+
if (isForeignAsset(asset1) && isForeignAsset(asset2) && asset1.assetId === asset2.assetId) return true;
|
|
2538
|
+
return asset1.symbol.toLowerCase() === asset2.symbol.toLowerCase();
|
|
2539
|
+
};
|
|
2540
|
+
|
|
2480
2541
|
var isSymbolSpecifier = function isSymbolSpecifier(currencySymbolValue) {
|
|
2481
2542
|
return _typeof(currencySymbolValue) === 'object' && 'type' in currencySymbolValue && 'value' in currencySymbolValue;
|
|
2482
2543
|
};
|
|
@@ -3668,6 +3729,14 @@ var resolveAsset = function resolveAsset(currency, origin, destination, assetChe
|
|
|
3668
3729
|
return assetCheckEnabled ? getAssetBySymbolOrId(origin, currency, !isTMultiLocation(destination) ? destination : null) : null;
|
|
3669
3730
|
};
|
|
3670
3731
|
|
|
3732
|
+
var resolveFeeAsset = function resolveFeeAsset(feeAsset, origin, destination) {
|
|
3733
|
+
var asset = getAssetBySymbolOrId(origin, feeAsset, !isTMultiLocation(destination) ? destination : null);
|
|
3734
|
+
if (!asset) {
|
|
3735
|
+
throwUnsupportedCurrency(feeAsset, origin);
|
|
3736
|
+
}
|
|
3737
|
+
return asset !== null && asset !== void 0 ? asset : undefined;
|
|
3738
|
+
};
|
|
3739
|
+
|
|
3671
3740
|
var AssetHubPolkadot$2 = {
|
|
3672
3741
|
defaultPallet: "PolkadotXcm",
|
|
3673
3742
|
supportedPallets: [
|
|
@@ -4476,7 +4545,7 @@ var getSupportedPalletsDetails = function getSupportedPalletsDetails(node) {
|
|
|
4476
4545
|
return palletsMap[node].supportedPallets;
|
|
4477
4546
|
};
|
|
4478
4547
|
|
|
4479
|
-
var validateCurrency = function validateCurrency(currency) {
|
|
4548
|
+
var validateCurrency = function validateCurrency(currency, feeAsset) {
|
|
4480
4549
|
if ('multiasset' in currency) {
|
|
4481
4550
|
if (currency.multiasset.length === 0) {
|
|
4482
4551
|
throw new InvalidCurrencyError('Overridden multi assets cannot be empty');
|
|
@@ -4484,16 +4553,9 @@ var validateCurrency = function validateCurrency(currency) {
|
|
|
4484
4553
|
if (currency.multiasset.length === 1) {
|
|
4485
4554
|
throw new InvalidCurrencyError('Please provide more than one multi asset');
|
|
4486
4555
|
}
|
|
4487
|
-
if (currency.multiasset.length > 1 && !
|
|
4488
|
-
return asset.isFeeAsset;
|
|
4489
|
-
})) {
|
|
4556
|
+
if (currency.multiasset.length > 1 && !feeAsset) {
|
|
4490
4557
|
throw new InvalidCurrencyError('Overridden multi assets cannot be used without specifying fee asset');
|
|
4491
4558
|
}
|
|
4492
|
-
if (currency.multiasset.length > 1 && currency.multiasset.filter(function (asset) {
|
|
4493
|
-
return asset.isFeeAsset;
|
|
4494
|
-
}).length > 1) {
|
|
4495
|
-
throw new InvalidCurrencyError('Overridden multi assets cannot have more than one fee asset');
|
|
4496
|
-
}
|
|
4497
4559
|
}
|
|
4498
4560
|
};
|
|
4499
4561
|
var validateDestination = function validateDestination(origin, destination) {
|
|
@@ -4553,7 +4615,7 @@ var validateAssetSupport = function validateAssetSupport(_ref, assetCheckEnabled
|
|
|
4553
4615
|
}
|
|
4554
4616
|
};
|
|
4555
4617
|
|
|
4556
|
-
var resolveOverriddenAsset = function resolveOverriddenAsset(options, isBridge, assetCheckEnabled) {
|
|
4618
|
+
var resolveOverriddenAsset = function resolveOverriddenAsset(options, isBridge, assetCheckEnabled, feeAsset) {
|
|
4557
4619
|
var currency = options.currency,
|
|
4558
4620
|
origin = options.from,
|
|
4559
4621
|
destination = options.to;
|
|
@@ -4561,6 +4623,9 @@ var resolveOverriddenAsset = function resolveOverriddenAsset(options, isBridge,
|
|
|
4561
4623
|
return currency.multilocation.value;
|
|
4562
4624
|
}
|
|
4563
4625
|
if ('multiasset' in currency) {
|
|
4626
|
+
if (!feeAsset) {
|
|
4627
|
+
throw new InvalidCurrencyError('Overridden multi assets cannot be used without specifying fee asset');
|
|
4628
|
+
}
|
|
4564
4629
|
if (currency.multiasset.every(function (asset) {
|
|
4565
4630
|
return isTMultiAsset(asset);
|
|
4566
4631
|
})) {
|
|
@@ -4568,18 +4633,30 @@ var resolveOverriddenAsset = function resolveOverriddenAsset(options, isBridge,
|
|
|
4568
4633
|
}
|
|
4569
4634
|
// MultiAsset is an array of TCurrencyCore, search for assets
|
|
4570
4635
|
var assets = currency.multiasset.map(function (currency) {
|
|
4571
|
-
var _currency$isFeeAsset;
|
|
4572
4636
|
var asset = getAssetBySymbolOrId(origin, currency, !isTMultiLocation(destination) ? destination : null);
|
|
4573
4637
|
if (asset && (!isForeignAsset(asset) || !asset.multiLocation)) {
|
|
4574
4638
|
throw new InvalidCurrencyError("Asset ".concat(JSON.stringify(currency), " does not have a multiLocation"));
|
|
4575
4639
|
}
|
|
4640
|
+
if (!asset) {
|
|
4641
|
+
throw new InvalidCurrencyError("Origin node ".concat(origin, " does not support currency ").concat(JSON.stringify(currency)));
|
|
4642
|
+
}
|
|
4576
4643
|
validateAssetSupport(options, assetCheckEnabled, isBridge, asset);
|
|
4577
4644
|
var originTyped = origin;
|
|
4578
4645
|
var originNode = getNode(originTyped);
|
|
4579
4646
|
return _objectSpread2({
|
|
4580
|
-
isFeeAsset: (
|
|
4581
|
-
}, createMultiAsset(originNode.version, currency.amount, asset
|
|
4647
|
+
isFeeAsset: isAssetEqual(feeAsset, asset)
|
|
4648
|
+
}, createMultiAsset(originNode.version, currency.amount, asset.multiLocation));
|
|
4582
4649
|
});
|
|
4650
|
+
if (assets.filter(function (asset) {
|
|
4651
|
+
return asset.isFeeAsset;
|
|
4652
|
+
}).length > 1) {
|
|
4653
|
+
throw new InvalidCurrencyError("Fee asset matches multiple assets in multiassets");
|
|
4654
|
+
}
|
|
4655
|
+
if (assets.filter(function (asset) {
|
|
4656
|
+
return asset.isFeeAsset;
|
|
4657
|
+
}).length === 0) {
|
|
4658
|
+
throw new InvalidCurrencyError("Fee asset not found in multiassets");
|
|
4659
|
+
}
|
|
4583
4660
|
return assets;
|
|
4584
4661
|
}
|
|
4585
4662
|
return undefined;
|
|
@@ -4608,12 +4685,12 @@ var validateDestinationAddress = function validateDestinationAddress(address, de
|
|
|
4608
4685
|
|
|
4609
4686
|
var send = /*#__PURE__*/function () {
|
|
4610
4687
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
4611
|
-
var api, origin, currency, address, destination, paraIdTo, version, senderAddress, pallet, method, isBridge, assetCheckEnabled, asset, overriddenAsset, resolvedAsset, originNode;
|
|
4688
|
+
var api, origin, currency, feeAsset, address, destination, paraIdTo, version, senderAddress, pallet, method, isBridge, assetCheckEnabled, asset, resolvedFeeAsset, overriddenAsset, resolvedAsset, originNode;
|
|
4612
4689
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
4613
4690
|
while (1) switch (_context.prev = _context.next) {
|
|
4614
4691
|
case 0:
|
|
4615
|
-
api = options.api, origin = options.from, currency = options.currency, address = options.address, destination = options.to, paraIdTo = options.paraIdTo, version = options.version, senderAddress = options.senderAddress, pallet = options.pallet, method = options.method;
|
|
4616
|
-
validateCurrency(currency);
|
|
4692
|
+
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;
|
|
4693
|
+
validateCurrency(currency, feeAsset);
|
|
4617
4694
|
validateDestination(origin, destination);
|
|
4618
4695
|
validateDestinationAddress(address, destination);
|
|
4619
4696
|
if (senderAddress) validateAddress(senderAddress, origin, false);
|
|
@@ -4627,23 +4704,24 @@ var send = /*#__PURE__*/function () {
|
|
|
4627
4704
|
assetCheckEnabled = determineAssetCheckEnabled(origin, currency, isBridge);
|
|
4628
4705
|
validateAssetSpecifiers(assetCheckEnabled, currency);
|
|
4629
4706
|
asset = resolveAsset(currency, origin, destination, assetCheckEnabled);
|
|
4707
|
+
resolvedFeeAsset = feeAsset ? resolveFeeAsset(feeAsset, origin, destination) : undefined;
|
|
4630
4708
|
validateAssetSupport(options, assetCheckEnabled, isBridge, asset);
|
|
4631
4709
|
if (!isRelayChain(origin)) {
|
|
4632
|
-
_context.next =
|
|
4710
|
+
_context.next = 19;
|
|
4633
4711
|
break;
|
|
4634
4712
|
}
|
|
4635
4713
|
if (!(destination === 'Ethereum')) {
|
|
4636
|
-
_context.next =
|
|
4714
|
+
_context.next = 16;
|
|
4637
4715
|
break;
|
|
4638
4716
|
}
|
|
4639
4717
|
throw new Error('Transfers from relay chain to Ethereum are not supported.');
|
|
4640
|
-
case
|
|
4718
|
+
case 16:
|
|
4641
4719
|
if (asset) {
|
|
4642
|
-
_context.next =
|
|
4720
|
+
_context.next = 18;
|
|
4643
4721
|
break;
|
|
4644
4722
|
}
|
|
4645
4723
|
throw new Error('Asset is required for relay chain to relay chain transfers.');
|
|
4646
|
-
case
|
|
4724
|
+
case 18:
|
|
4647
4725
|
return _context.abrupt("return", transferRelayToPara({
|
|
4648
4726
|
api: api,
|
|
4649
4727
|
origin: origin,
|
|
@@ -4657,11 +4735,11 @@ var send = /*#__PURE__*/function () {
|
|
|
4657
4735
|
pallet: pallet,
|
|
4658
4736
|
method: method
|
|
4659
4737
|
}));
|
|
4660
|
-
case
|
|
4661
|
-
overriddenAsset = resolveOverriddenAsset(options, isBridge, assetCheckEnabled);
|
|
4662
|
-
_context.next =
|
|
4738
|
+
case 19:
|
|
4739
|
+
overriddenAsset = resolveOverriddenAsset(options, isBridge, assetCheckEnabled, resolvedFeeAsset);
|
|
4740
|
+
_context.next = 22;
|
|
4663
4741
|
return api.init(origin);
|
|
4664
|
-
case
|
|
4742
|
+
case 22:
|
|
4665
4743
|
// In case asset check is disabled, we create asset object from currency symbol
|
|
4666
4744
|
resolvedAsset = asset !== null && asset !== void 0 ? asset : {
|
|
4667
4745
|
symbol: 'symbol' in currency ? currency.symbol : undefined
|
|
@@ -4672,6 +4750,7 @@ var send = /*#__PURE__*/function () {
|
|
|
4672
4750
|
asset: _objectSpread2(_objectSpread2({}, resolvedAsset), {}, {
|
|
4673
4751
|
amount: 'multiasset' in currency ? 0 : currency.amount
|
|
4674
4752
|
}),
|
|
4753
|
+
feeAsset: resolvedFeeAsset,
|
|
4675
4754
|
address: address,
|
|
4676
4755
|
to: destination,
|
|
4677
4756
|
paraIdTo: paraIdTo,
|
|
@@ -4681,7 +4760,7 @@ var send = /*#__PURE__*/function () {
|
|
|
4681
4760
|
pallet: pallet,
|
|
4682
4761
|
method: method
|
|
4683
4762
|
}));
|
|
4684
|
-
case
|
|
4763
|
+
case 25:
|
|
4685
4764
|
case "end":
|
|
4686
4765
|
return _context.stop();
|
|
4687
4766
|
}
|
|
@@ -4751,11 +4830,11 @@ var ParachainNode = /*#__PURE__*/function () {
|
|
|
4751
4830
|
key: "transfer",
|
|
4752
4831
|
value: function () {
|
|
4753
4832
|
var _transfer = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
4754
|
-
var api, asset, address, destination, paraIdTo, overriddenAsset, version, senderAddress, pallet, method, isRelayDestination, scenario, paraId, versionOrDefault, isBifrostOrigin, isAssetHubDest, shouldUseMultiasset, input;
|
|
4833
|
+
var api, asset, feeAsset, address, destination, paraIdTo, overriddenAsset, version, senderAddress, pallet, method, isRelayDestination, scenario, paraId, versionOrDefault, isBifrostOrigin, isAssetHubDest, shouldUseMultiasset, input;
|
|
4755
4834
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
4756
4835
|
while (1) switch (_context.prev = _context.next) {
|
|
4757
4836
|
case 0:
|
|
4758
|
-
api = options.api, asset = options.asset, address = options.address, destination = options.to, paraIdTo = options.paraIdTo, overriddenAsset = options.overriddenAsset, version = options.version, senderAddress = options.senderAddress, pallet = options.pallet, method = options.method;
|
|
4837
|
+
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;
|
|
4759
4838
|
isRelayDestination = !isTMultiLocation(destination) && isRelayChain(destination);
|
|
4760
4839
|
scenario = isRelayDestination ? 'ParaToRelay' : 'ParaToPara';
|
|
4761
4840
|
paraId = resolveParaId(paraIdTo, destination);
|
|
@@ -4822,6 +4901,7 @@ var ParachainNode = /*#__PURE__*/function () {
|
|
|
4822
4901
|
currencySelection: this.createCurrencySpec(asset.amount, scenario, versionOrDefault, asset),
|
|
4823
4902
|
overriddenAsset: overriddenAsset,
|
|
4824
4903
|
asset: asset,
|
|
4904
|
+
feeAsset: feeAsset,
|
|
4825
4905
|
scenario: scenario,
|
|
4826
4906
|
destination: destination,
|
|
4827
4907
|
paraIdTo: paraId,
|
|
@@ -5122,6 +5202,118 @@ var AssetHubKusama$1 = /*#__PURE__*/function (_ParachainNode) {
|
|
|
5122
5202
|
}]);
|
|
5123
5203
|
}(ParachainNode);
|
|
5124
5204
|
|
|
5205
|
+
var transformMultiLocation = function transformMultiLocation(multiLocation) {
|
|
5206
|
+
var newInterior;
|
|
5207
|
+
if (multiLocation.interior === 'Here') {
|
|
5208
|
+
newInterior = 'Here';
|
|
5209
|
+
} else {
|
|
5210
|
+
var junctions = Object.values(multiLocation.interior).flat().filter(function (junction) {
|
|
5211
|
+
return _typeof(junction) === 'object' && junction !== null;
|
|
5212
|
+
});
|
|
5213
|
+
var filteredJunctions = junctions.filter(function (junction) {
|
|
5214
|
+
return !('Parachain' in junction);
|
|
5215
|
+
});
|
|
5216
|
+
if (filteredJunctions.length === 0) {
|
|
5217
|
+
newInterior = 'Here';
|
|
5218
|
+
} else {
|
|
5219
|
+
newInterior = _defineProperty({}, "X".concat(filteredJunctions.length), filteredJunctions);
|
|
5220
|
+
}
|
|
5221
|
+
}
|
|
5222
|
+
return _objectSpread2(_objectSpread2({}, multiLocation), {}, {
|
|
5223
|
+
parents: exports.Parents.ZERO,
|
|
5224
|
+
interior: newInterior
|
|
5225
|
+
});
|
|
5226
|
+
};
|
|
5227
|
+
|
|
5228
|
+
var createExecuteXcm = function createExecuteXcm(input, weight, executionFee) {
|
|
5229
|
+
var api = input.api,
|
|
5230
|
+
_input$version = input.version,
|
|
5231
|
+
version = _input$version === void 0 ? exports.Version.V4 : _input$version,
|
|
5232
|
+
asset = input.asset,
|
|
5233
|
+
scenario = input.scenario,
|
|
5234
|
+
destination = input.destination,
|
|
5235
|
+
paraIdTo = input.paraIdTo,
|
|
5236
|
+
address = input.address;
|
|
5237
|
+
var destWithHeader = createPolkadotXcmHeader(scenario, version, destination, paraIdTo);
|
|
5238
|
+
var _extractVersionFromHe = extractVersionFromHeader(destWithHeader),
|
|
5239
|
+
_extractVersionFromHe2 = _slicedToArray(_extractVersionFromHe, 2);
|
|
5240
|
+
_extractVersionFromHe2[0];
|
|
5241
|
+
var dest = _extractVersionFromHe2[1];
|
|
5242
|
+
var beneficiaryWithHeader = generateAddressPayload(api, scenario, 'PolkadotXcm', address, version, paraIdTo);
|
|
5243
|
+
var _extractVersionFromHe3 = extractVersionFromHeader(beneficiaryWithHeader),
|
|
5244
|
+
_extractVersionFromHe4 = _slicedToArray(_extractVersionFromHe3, 2);
|
|
5245
|
+
_extractVersionFromHe4[0];
|
|
5246
|
+
var beneficiary = _extractVersionFromHe4[1];
|
|
5247
|
+
var transformedMultiLocation = transformMultiLocation(asset.multiLocation);
|
|
5248
|
+
var amountWithoutFee = BigInt(asset.amount) - executionFee;
|
|
5249
|
+
var call = {
|
|
5250
|
+
module: 'PolkadotXcm',
|
|
5251
|
+
section: 'execute',
|
|
5252
|
+
parameters: {
|
|
5253
|
+
message: _defineProperty({}, version, [{
|
|
5254
|
+
WithdrawAsset: [{
|
|
5255
|
+
id: transformedMultiLocation,
|
|
5256
|
+
fun: {
|
|
5257
|
+
Fungible: asset.amount
|
|
5258
|
+
}
|
|
5259
|
+
}]
|
|
5260
|
+
}, {
|
|
5261
|
+
BuyExecution: {
|
|
5262
|
+
fees: {
|
|
5263
|
+
id: transformedMultiLocation,
|
|
5264
|
+
fun: {
|
|
5265
|
+
Fungible: executionFee
|
|
5266
|
+
}
|
|
5267
|
+
},
|
|
5268
|
+
weight_limit: {
|
|
5269
|
+
Limited: {
|
|
5270
|
+
ref_time: 100n,
|
|
5271
|
+
proof_size: 0n
|
|
5272
|
+
}
|
|
5273
|
+
}
|
|
5274
|
+
}
|
|
5275
|
+
}, {
|
|
5276
|
+
DepositReserveAsset: {
|
|
5277
|
+
assets: {
|
|
5278
|
+
Definite: [{
|
|
5279
|
+
id: transformedMultiLocation,
|
|
5280
|
+
fun: {
|
|
5281
|
+
Fungible: amountWithoutFee
|
|
5282
|
+
}
|
|
5283
|
+
}]
|
|
5284
|
+
},
|
|
5285
|
+
dest: dest,
|
|
5286
|
+
xcm: [{
|
|
5287
|
+
BuyExecution: {
|
|
5288
|
+
fees: {
|
|
5289
|
+
id: asset.multiLocation,
|
|
5290
|
+
fun: {
|
|
5291
|
+
Fungible: amountWithoutFee
|
|
5292
|
+
}
|
|
5293
|
+
},
|
|
5294
|
+
weight_limit: 'Unlimited'
|
|
5295
|
+
}
|
|
5296
|
+
}, {
|
|
5297
|
+
DepositAsset: {
|
|
5298
|
+
assets: {
|
|
5299
|
+
Wild: {
|
|
5300
|
+
AllCounted: 1
|
|
5301
|
+
}
|
|
5302
|
+
},
|
|
5303
|
+
beneficiary: beneficiary
|
|
5304
|
+
}
|
|
5305
|
+
}]
|
|
5306
|
+
}
|
|
5307
|
+
}]),
|
|
5308
|
+
max_weight: {
|
|
5309
|
+
ref_time: weight.refTime,
|
|
5310
|
+
proof_size: weight.proofSize
|
|
5311
|
+
}
|
|
5312
|
+
}
|
|
5313
|
+
};
|
|
5314
|
+
return api.callTxMethod(call);
|
|
5315
|
+
};
|
|
5316
|
+
|
|
5125
5317
|
var generateAddressMultiLocationV4 = function generateAddressMultiLocationV4(api, address) {
|
|
5126
5318
|
var isMultiLocation = _typeof(address) === 'object';
|
|
5127
5319
|
if (isMultiLocation) {
|
|
@@ -5166,7 +5358,8 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
|
|
|
5166
5358
|
_this.handleBifrostEthTransfer = function (input) {
|
|
5167
5359
|
var api = input.api,
|
|
5168
5360
|
scenario = input.scenario,
|
|
5169
|
-
version = input.version,
|
|
5361
|
+
_input$version = input.version,
|
|
5362
|
+
version = _input$version === void 0 ? _this.version : _input$version,
|
|
5170
5363
|
destination = input.destination,
|
|
5171
5364
|
asset = input.asset;
|
|
5172
5365
|
if (!isForeignAsset(asset)) {
|
|
@@ -5175,19 +5368,18 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
|
|
|
5175
5368
|
if (!asset.multiLocation) {
|
|
5176
5369
|
throw new InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no multiLocation"));
|
|
5177
5370
|
}
|
|
5178
|
-
var versionOrDefault = version !== null && version !== void 0 ? version : _this.version;
|
|
5179
5371
|
var call = {
|
|
5180
5372
|
module: 'PolkadotXcm',
|
|
5181
5373
|
section: 'transfer_assets_using_type_and_then',
|
|
5182
5374
|
parameters: {
|
|
5183
|
-
dest: _this.createPolkadotXcmHeader(scenario,
|
|
5184
|
-
assets: _defineProperty({},
|
|
5375
|
+
dest: _this.createPolkadotXcmHeader(scenario, version, destination, getParaId('BifrostPolkadot')),
|
|
5376
|
+
assets: _defineProperty({}, version, [createMultiAsset(version, asset.amount, asset.multiLocation)]),
|
|
5185
5377
|
assets_transfer_type: 'LocalReserve',
|
|
5186
|
-
remote_fees_id: _defineProperty({},
|
|
5378
|
+
remote_fees_id: _defineProperty({}, version, {
|
|
5187
5379
|
Concrete: asset.multiLocation
|
|
5188
5380
|
}),
|
|
5189
5381
|
fees_transfer_type: 'LocalReserve',
|
|
5190
|
-
custom_xcm_on_dest: createCustomXcmToBifrost(input,
|
|
5382
|
+
custom_xcm_on_dest: createCustomXcmToBifrost(input, version),
|
|
5191
5383
|
weight_limit: 'Unlimited'
|
|
5192
5384
|
}
|
|
5193
5385
|
};
|
|
@@ -5286,11 +5478,12 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
|
|
|
5286
5478
|
paraIdTo = input.paraIdTo,
|
|
5287
5479
|
scenario = input.scenario,
|
|
5288
5480
|
api = input.api,
|
|
5289
|
-
|
|
5481
|
+
_input$version2 = input.version,
|
|
5482
|
+
version = _input$version2 === void 0 ? this.version : _input$version2,
|
|
5290
5483
|
address = input.address;
|
|
5291
5484
|
if ((((_asset$symbol = asset.symbol) === null || _asset$symbol === void 0 ? void 0 : _asset$symbol.toUpperCase()) === 'USDT' || ((_asset$symbol2 = asset.symbol) === null || _asset$symbol2 === void 0 ? void 0 : _asset$symbol2.toUpperCase()) === 'USDC') && destination === 'BifrostPolkadot') {
|
|
5292
|
-
var _input$
|
|
5293
|
-
var versionOrDefault = (_input$
|
|
5485
|
+
var _input$version3;
|
|
5486
|
+
var versionOrDefault = (_input$version3 = input.version) !== null && _input$version3 !== void 0 ? _input$version3 : exports.Version.V2;
|
|
5294
5487
|
return _objectSpread2(_objectSpread2({}, input), {}, {
|
|
5295
5488
|
header: this.createPolkadotXcmHeader(scenario, versionOrDefault, destination, paraIdTo),
|
|
5296
5489
|
addressSelection: generateAddressPayload(api, scenario, 'PolkadotXcm', address, versionOrDefault, paraIdTo),
|
|
@@ -5298,9 +5491,8 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
|
|
|
5298
5491
|
});
|
|
5299
5492
|
}
|
|
5300
5493
|
if ((destination === 'Hydration' || destination === 'Polimec' || destination === 'Moonbeam' || destination === 'BifrostPolkadot') && asset.symbol === 'DOT') {
|
|
5301
|
-
var _versionOrDefault = version !== null && version !== void 0 ? version : this.version;
|
|
5302
5494
|
return _objectSpread2(_objectSpread2({}, input), {}, {
|
|
5303
|
-
currencySelection: createVersionedMultiAssets(
|
|
5495
|
+
currencySelection: createVersionedMultiAssets(version, asset.amount, DOT_MULTILOCATION)
|
|
5304
5496
|
});
|
|
5305
5497
|
}
|
|
5306
5498
|
return input;
|
|
@@ -5312,12 +5504,92 @@ var AssetHubPolkadot$1 = /*#__PURE__*/function (_ParachainNode) {
|
|
|
5312
5504
|
if (destination === 'Polimec' || destination === 'Moonbeam') return 'transfer_assets';
|
|
5313
5505
|
return scenario === 'ParaToPara' && !isSystemNode ? 'limited_reserve_transfer_assets' : 'limited_teleport_assets';
|
|
5314
5506
|
}
|
|
5507
|
+
}, {
|
|
5508
|
+
key: "handleExecuteTransfer",
|
|
5509
|
+
value: function () {
|
|
5510
|
+
var _handleExecuteTransfer = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(input) {
|
|
5511
|
+
var api, senderAddress, asset, MIN_FEE, maxU64, dummyTx, dryRunResult, feeDotShifted, toMl, feeConverted, feeConvertedPadded;
|
|
5512
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
5513
|
+
while (1) switch (_context.prev = _context.next) {
|
|
5514
|
+
case 0:
|
|
5515
|
+
api = input.api, senderAddress = input.senderAddress, asset = input.asset;
|
|
5516
|
+
if (senderAddress) {
|
|
5517
|
+
_context.next = 3;
|
|
5518
|
+
break;
|
|
5519
|
+
}
|
|
5520
|
+
throw new Error('Please provide senderAddress');
|
|
5521
|
+
case 3:
|
|
5522
|
+
validateAddress(senderAddress, this.node, false);
|
|
5523
|
+
MIN_FEE = 150000n;
|
|
5524
|
+
maxU64 = (1n << 64n) - 1n;
|
|
5525
|
+
dummyTx = createExecuteXcm(input, {
|
|
5526
|
+
refTime: maxU64,
|
|
5527
|
+
proofSize: maxU64
|
|
5528
|
+
}, MIN_FEE);
|
|
5529
|
+
_context.next = 9;
|
|
5530
|
+
return api.getDryRun({
|
|
5531
|
+
node: this.node,
|
|
5532
|
+
tx: dummyTx,
|
|
5533
|
+
address: senderAddress
|
|
5534
|
+
});
|
|
5535
|
+
case 9:
|
|
5536
|
+
dryRunResult = _context.sent;
|
|
5537
|
+
if (dryRunResult.success) {
|
|
5538
|
+
_context.next = 12;
|
|
5539
|
+
break;
|
|
5540
|
+
}
|
|
5541
|
+
throw new Error("Dry run failed: ".concat(dryRunResult.failureReason));
|
|
5542
|
+
case 12:
|
|
5543
|
+
if (dryRunResult.weight) {
|
|
5544
|
+
_context.next = 14;
|
|
5545
|
+
break;
|
|
5546
|
+
}
|
|
5547
|
+
throw new Error('Dry run failed: weight not found');
|
|
5548
|
+
case 14:
|
|
5549
|
+
feeDotShifted = dryRunResult.fee / 10n;
|
|
5550
|
+
toMl = transformMultiLocation(asset.multiLocation);
|
|
5551
|
+
_context.next = 18;
|
|
5552
|
+
return api.quoteAhPrice(DOT_MULTILOCATION, toMl, feeDotShifted);
|
|
5553
|
+
case 18:
|
|
5554
|
+
feeConverted = _context.sent;
|
|
5555
|
+
if (feeConverted) {
|
|
5556
|
+
_context.next = 21;
|
|
5557
|
+
break;
|
|
5558
|
+
}
|
|
5559
|
+
throw new Error("Pool DOT -> ".concat(asset.symbol, " not found."));
|
|
5560
|
+
case 21:
|
|
5561
|
+
if (!(BigInt(asset.amount) - feeConverted < 0)) {
|
|
5562
|
+
_context.next = 23;
|
|
5563
|
+
break;
|
|
5564
|
+
}
|
|
5565
|
+
throw new Error("Insufficient balance. Fee: ".concat(feeConverted, ", Amount: ").concat(asset.amount));
|
|
5566
|
+
case 23:
|
|
5567
|
+
feeConvertedPadded = feeConverted * 3n / 2n; // increases fee by 50%
|
|
5568
|
+
return _context.abrupt("return", createExecuteXcm(input, dryRunResult.weight, feeConvertedPadded));
|
|
5569
|
+
case 25:
|
|
5570
|
+
case "end":
|
|
5571
|
+
return _context.stop();
|
|
5572
|
+
}
|
|
5573
|
+
}, _callee, this);
|
|
5574
|
+
}));
|
|
5575
|
+
function handleExecuteTransfer(_x) {
|
|
5576
|
+
return _handleExecuteTransfer.apply(this, arguments);
|
|
5577
|
+
}
|
|
5578
|
+
return handleExecuteTransfer;
|
|
5579
|
+
}()
|
|
5315
5580
|
}, {
|
|
5316
5581
|
key: "transferPolkadotXCM",
|
|
5317
5582
|
value: function transferPolkadotXCM(input) {
|
|
5318
5583
|
var scenario = input.scenario,
|
|
5319
5584
|
asset = input.asset,
|
|
5320
|
-
destination = input.destination
|
|
5585
|
+
destination = input.destination,
|
|
5586
|
+
feeAsset = input.feeAsset;
|
|
5587
|
+
if (feeAsset) {
|
|
5588
|
+
if (!isAssetEqual(feeAsset, asset)) {
|
|
5589
|
+
throw new InvalidCurrencyError("Fee asset does not match transfer asset.");
|
|
5590
|
+
}
|
|
5591
|
+
return Promise.resolve(this.handleExecuteTransfer(input));
|
|
5592
|
+
}
|
|
5321
5593
|
if (destination === 'AssetHubKusama') {
|
|
5322
5594
|
return Promise.resolve(this.handleBridgeTransfer(input, 'Kusama'));
|
|
5323
5595
|
}
|
|
@@ -6737,7 +7009,10 @@ var Polimec$1 = /*#__PURE__*/function (_ParachainNode) {
|
|
|
6737
7009
|
section: 'transfer_assets_using_type_and_then',
|
|
6738
7010
|
parameters: {
|
|
6739
7011
|
dest: this.createPolkadotXcmHeader('RelayToPara', version, destination, getParaId('AssetHubPolkadot')),
|
|
6740
|
-
assets: _defineProperty({}, version, [createMultiAsset(version, asset.amount,
|
|
7012
|
+
assets: _defineProperty({}, version, [createMultiAsset(version, asset.amount, {
|
|
7013
|
+
parents: exports.Parents.ZERO,
|
|
7014
|
+
interior: 'Here'
|
|
7015
|
+
})]),
|
|
6741
7016
|
assets_transfer_type: 'Teleport',
|
|
6742
7017
|
remote_fees_id: _defineProperty({}, version, {
|
|
6743
7018
|
Concrete: {
|
|
@@ -19032,13 +19307,13 @@ var getBalanceForeignPolkadotXcm = /*#__PURE__*/function () {
|
|
|
19032
19307
|
_context.next = 12;
|
|
19033
19308
|
break;
|
|
19034
19309
|
}
|
|
19035
|
-
if (!(asset.
|
|
19310
|
+
if (!(asset.multiLocation === undefined)) {
|
|
19036
19311
|
_context.next = 11;
|
|
19037
19312
|
break;
|
|
19038
19313
|
}
|
|
19039
|
-
throw new InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no
|
|
19314
|
+
throw new InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no multi-location"));
|
|
19040
19315
|
case 11:
|
|
19041
|
-
return _context.abrupt("return", api.
|
|
19316
|
+
return _context.abrupt("return", api.getAssetHubForeignBalance(address, asset.multiLocation));
|
|
19042
19317
|
case 12:
|
|
19043
19318
|
if (!(node === 'AssetHubPolkadot')) {
|
|
19044
19319
|
_context.next = 18;
|
|
@@ -19848,59 +20123,6 @@ var createApiInstanceForNode = /*#__PURE__*/function () {
|
|
|
19848
20123
|
};
|
|
19849
20124
|
}();
|
|
19850
20125
|
|
|
19851
|
-
var isPrimitive = function isPrimitive(obj) {
|
|
19852
|
-
return obj !== Object(obj);
|
|
19853
|
-
};
|
|
19854
|
-
var _deepEqual = function deepEqual(obj1, obj2) {
|
|
19855
|
-
if (obj1 === obj2) return true;
|
|
19856
|
-
if (isPrimitive(obj1) && isPrimitive(obj2)) return obj1 === obj2;
|
|
19857
|
-
if (_typeof(obj1) !== 'object' || obj1 === null || _typeof(obj2) !== 'object' || obj2 === null) {
|
|
19858
|
-
return false;
|
|
19859
|
-
}
|
|
19860
|
-
if (Array.isArray(obj1) !== Array.isArray(obj2)) {
|
|
19861
|
-
return false;
|
|
19862
|
-
}
|
|
19863
|
-
var obj1Keys = Object.keys(obj1).map(function (key) {
|
|
19864
|
-
return key.toLowerCase();
|
|
19865
|
-
});
|
|
19866
|
-
var obj2Keys = Object.keys(obj2).map(function (key) {
|
|
19867
|
-
return key.toLowerCase();
|
|
19868
|
-
});
|
|
19869
|
-
if (obj1Keys.length !== obj2Keys.length) return false;
|
|
19870
|
-
var _iterator = _createForOfIteratorHelper(obj1Keys),
|
|
19871
|
-
_step;
|
|
19872
|
-
try {
|
|
19873
|
-
var _loop = function _loop() {
|
|
19874
|
-
var key = _step.value;
|
|
19875
|
-
var keyInObj2 = obj2Keys.find(function (k) {
|
|
19876
|
-
return k === key;
|
|
19877
|
-
});
|
|
19878
|
-
if (!keyInObj2) return {
|
|
19879
|
-
v: false
|
|
19880
|
-
};
|
|
19881
|
-
var obj1Value = obj1[Object.keys(obj1).find(function (k) {
|
|
19882
|
-
return k.toLowerCase() === key;
|
|
19883
|
-
})];
|
|
19884
|
-
var obj2Value = obj2[Object.keys(obj2).find(function (k) {
|
|
19885
|
-
return k.toLowerCase() === key;
|
|
19886
|
-
})];
|
|
19887
|
-
if (!_deepEqual(obj1Value, obj2Value)) return {
|
|
19888
|
-
v: false
|
|
19889
|
-
};
|
|
19890
|
-
},
|
|
19891
|
-
_ret;
|
|
19892
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
19893
|
-
_ret = _loop();
|
|
19894
|
-
if (_ret) return _ret.v;
|
|
19895
|
-
}
|
|
19896
|
-
} catch (err) {
|
|
19897
|
-
_iterator.e(err);
|
|
19898
|
-
} finally {
|
|
19899
|
-
_iterator.f();
|
|
19900
|
-
}
|
|
19901
|
-
return true;
|
|
19902
|
-
};
|
|
19903
|
-
|
|
19904
20126
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
19905
20127
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
19906
20128
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
@@ -20423,6 +20645,19 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
20423
20645
|
method: method
|
|
20424
20646
|
}));
|
|
20425
20647
|
}
|
|
20648
|
+
/**
|
|
20649
|
+
* Optional fee asset for the transaction.
|
|
20650
|
+
*
|
|
20651
|
+
* @param currency - The currency to be used for the fee.
|
|
20652
|
+
* @returns An instance of the Builder
|
|
20653
|
+
*/
|
|
20654
|
+
}, {
|
|
20655
|
+
key: "feeAsset",
|
|
20656
|
+
value: function feeAsset(currency) {
|
|
20657
|
+
return new GeneralBuilder(this.api, this.batchManager, _objectSpread2(_objectSpread2({}, this._options), {}, {
|
|
20658
|
+
feeAsset: currency
|
|
20659
|
+
}));
|
|
20660
|
+
}
|
|
20426
20661
|
/**
|
|
20427
20662
|
* Adds the transfer transaction to the batch.
|
|
20428
20663
|
*
|
|
@@ -20638,6 +20873,7 @@ exports.getTransferInfo = getTransferInfo;
|
|
|
20638
20873
|
exports.getTransferableAmount = getTransferableAmount;
|
|
20639
20874
|
exports.hasDryRunSupport = hasDryRunSupport;
|
|
20640
20875
|
exports.hasSupportForAsset = hasSupportForAsset;
|
|
20876
|
+
exports.isAssetEqual = isAssetEqual;
|
|
20641
20877
|
exports.isEthersContract = isEthersContract;
|
|
20642
20878
|
exports.isEthersSigner = isEthersSigner;
|
|
20643
20879
|
exports.isForeignAsset = isForeignAsset;
|
|
@@ -20652,5 +20888,6 @@ exports.send = send;
|
|
|
20652
20888
|
exports.transferMoonbeamEvm = transferMoonbeamEvm;
|
|
20653
20889
|
exports.transferMoonbeamToEth = transferMoonbeamToEth;
|
|
20654
20890
|
exports.transferRelayToPara = transferRelayToPara;
|
|
20891
|
+
exports.transformMultiLocation = transformMultiLocation;
|
|
20655
20892
|
exports.validateAddress = validateAddress;
|
|
20656
20893
|
exports.verifyEdOnDestination = verifyEdOnDestination;
|