@paraspell/sdk-core 10.0.2 → 10.1.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 +1391 -1039
- package/dist/index.d.ts +32 -18
- package/dist/index.mjs +1393 -1041
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -183,7 +183,10 @@ function _iterableToArrayLimit(r, l) {
|
|
|
183
183
|
f = true,
|
|
184
184
|
o = false;
|
|
185
185
|
try {
|
|
186
|
-
if (i = (t = t.call(r)).next, 0 === l)
|
|
186
|
+
if (i = (t = t.call(r)).next, 0 === l) {
|
|
187
|
+
if (Object(t) !== t) return;
|
|
188
|
+
f = !1;
|
|
189
|
+
} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
|
|
187
190
|
} catch (r) {
|
|
188
191
|
o = true, n = r;
|
|
189
192
|
} finally {
|
|
@@ -2960,652 +2963,310 @@ var getTNode = function getTNode(paraId, ecosystem) {
|
|
|
2960
2963
|
})) !== null && _NODE_NAMES_DOT_KSM$f !== void 0 ? _NODE_NAMES_DOT_KSM$f : null;
|
|
2961
2964
|
};
|
|
2962
2965
|
|
|
2963
|
-
var
|
|
2964
|
-
var
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2966
|
+
var getParaEthTransferFees = /*#__PURE__*/function () {
|
|
2967
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(ahApi) {
|
|
2968
|
+
var DEFAULT_FEE, feeStorageItem, leFeeHex, bytes, reversedHex, validReversedHex, leFee, transferBridgeFee, finalBridgeFee, finalAssethubExecutionFee;
|
|
2969
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
2970
|
+
while (1) switch (_context.prev = _context.next) {
|
|
2971
|
+
case 0:
|
|
2972
|
+
DEFAULT_FEE = 2750872500000n;
|
|
2973
|
+
_context.next = 3;
|
|
2974
|
+
return ahApi.getFromRpc('state', 'getStorage', '0x5fbc5c7ba58845ad1f1a9a7c5bc12fad');
|
|
2975
|
+
case 3:
|
|
2976
|
+
feeStorageItem = _context.sent;
|
|
2977
|
+
leFeeHex = feeStorageItem.replace('0x', '');
|
|
2978
|
+
_context.next = 7;
|
|
2979
|
+
return ahApi.disconnect();
|
|
2980
|
+
case 7:
|
|
2981
|
+
bytes = leFeeHex.match(/.{1,2}/g) || [];
|
|
2982
|
+
reversedHex = bytes.reverse().join('');
|
|
2983
|
+
validReversedHex = reversedHex === '' ? '0' : reversedHex;
|
|
2984
|
+
leFee = BigInt('0x' + validReversedHex);
|
|
2985
|
+
transferBridgeFee = leFee === 0n ? DEFAULT_FEE : BigInt(leFee.toString());
|
|
2986
|
+
finalBridgeFee = transferBridgeFee * 110n / 100n;
|
|
2987
|
+
finalAssethubExecutionFee = ASSET_HUB_EXECUTION_FEE * 110n / 100n;
|
|
2988
|
+
return _context.abrupt("return", [finalBridgeFee, finalAssethubExecutionFee]);
|
|
2989
|
+
case 15:
|
|
2990
|
+
case "end":
|
|
2991
|
+
return _context.stop();
|
|
2992
|
+
}
|
|
2993
|
+
}, _callee);
|
|
2994
|
+
}));
|
|
2995
|
+
return function getParaEthTransferFees(_x) {
|
|
2996
|
+
return _ref.apply(this, arguments);
|
|
2997
|
+
};
|
|
2998
|
+
}();
|
|
2999
|
+
|
|
3000
|
+
// Inspired by Moonbeam XCM-SDK
|
|
3001
|
+
// https://github.com/moonbeam-foundation/xcm-sdk/blob/ab835c15bf41612604b1c858d956a9f07705ed65/packages/utils/src/format/asset.ts#L1
|
|
3002
|
+
var formatAssetIdToERC20 = function formatAssetIdToERC20(id) {
|
|
3003
|
+
if (id.startsWith('0x')) {
|
|
3004
|
+
return id;
|
|
2968
3005
|
}
|
|
2969
|
-
|
|
3006
|
+
if (!(/^\d{38,39}$/.test(id) || /^\d{4}$/.test(id))) {
|
|
3007
|
+
throw new InvalidParameterError("Asset id: ".concat(id, " must be a string and have either 4 digits or 38-39 digits"));
|
|
3008
|
+
}
|
|
3009
|
+
return "0xffffffff".concat(BigInt(id).toString(16).padStart(32, '0'));
|
|
2970
3010
|
};
|
|
2971
3011
|
|
|
2972
|
-
var
|
|
2973
|
-
|
|
2974
|
-
|
|
2975
|
-
var
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
2979
|
-
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2988
|
-
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
|
|
2996
|
-
|
|
2997
|
-
|
|
2998
|
-
|
|
2999
|
-
|
|
3000
|
-
|
|
3001
|
-
|
|
3012
|
+
var MOONBEAM_RPC = 'https://rpc.api.moonbeam.network';
|
|
3013
|
+
var MOONBEAM_ID = 1284;
|
|
3014
|
+
var MOONRIVER_RPC = 'https://rpc.api.moonriver.moonbeam.network';
|
|
3015
|
+
var MOONRIVER_ID = 1285;
|
|
3016
|
+
var ERC20_ABI$1 = ['function balanceOf(address) view returns (uint256)'];
|
|
3017
|
+
function getMoonbeamErc20Balance(_x, _x2, _x3) {
|
|
3018
|
+
return _getMoonbeamErc20Balance.apply(this, arguments);
|
|
3019
|
+
}
|
|
3020
|
+
function _getMoonbeamErc20Balance() {
|
|
3021
|
+
_getMoonbeamErc20Balance = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(node, assetId, address) {
|
|
3022
|
+
var _ref, rpc, id, provider, addr, token;
|
|
3023
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3024
|
+
while (1) switch (_context.prev = _context.next) {
|
|
3025
|
+
case 0:
|
|
3026
|
+
_ref = node === 'Moonbeam' ? {
|
|
3027
|
+
rpc: MOONBEAM_RPC,
|
|
3028
|
+
id: MOONBEAM_ID
|
|
3029
|
+
} : {
|
|
3030
|
+
rpc: MOONRIVER_RPC,
|
|
3031
|
+
id: MOONRIVER_ID
|
|
3032
|
+
}, rpc = _ref.rpc, id = _ref.id;
|
|
3033
|
+
provider = new ethers.ethers.JsonRpcProvider(rpc, id);
|
|
3034
|
+
addr = formatAssetIdToERC20(assetId);
|
|
3035
|
+
token = new ethers.ethers.Contract(addr, ERC20_ABI$1, provider);
|
|
3036
|
+
_context.next = 6;
|
|
3037
|
+
return token.balanceOf(address);
|
|
3038
|
+
case 6:
|
|
3039
|
+
return _context.abrupt("return", _context.sent);
|
|
3040
|
+
case 7:
|
|
3041
|
+
case "end":
|
|
3042
|
+
return _context.stop();
|
|
3043
|
+
}
|
|
3044
|
+
}, _callee);
|
|
3045
|
+
}));
|
|
3046
|
+
return _getMoonbeamErc20Balance.apply(this, arguments);
|
|
3047
|
+
}
|
|
3002
3048
|
|
|
3003
|
-
var
|
|
3004
|
-
var
|
|
3005
|
-
var
|
|
3049
|
+
var getBalanceForeignPolkadotXcm = /*#__PURE__*/function () {
|
|
3050
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(api, node, address, asset) {
|
|
3051
|
+
var ASSETS_PALLET_ID, hasRequiredJunctions;
|
|
3006
3052
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3007
3053
|
while (1) switch (_context.prev = _context.next) {
|
|
3008
3054
|
case 0:
|
|
3009
|
-
|
|
3010
|
-
|
|
3055
|
+
if (!(node === 'Moonbeam' || node === 'Moonriver')) {
|
|
3056
|
+
_context.next = 6;
|
|
3057
|
+
break;
|
|
3058
|
+
}
|
|
3059
|
+
if (!(!assets.isForeignAsset(asset) || !asset.assetId)) {
|
|
3011
3060
|
_context.next = 3;
|
|
3012
3061
|
break;
|
|
3013
3062
|
}
|
|
3014
|
-
throw new assets.InvalidCurrencyError(
|
|
3063
|
+
throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
|
|
3015
3064
|
case 3:
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
}
|
|
3065
|
+
if (!(asset.multiLocation && sdkCommon.hasJunction(asset.multiLocation, 'GlobalConsensus'))) {
|
|
3066
|
+
_context.next = 5;
|
|
3067
|
+
break;
|
|
3068
|
+
}
|
|
3069
|
+
return _context.abrupt("return", getMoonbeamErc20Balance(node, asset.assetId, address));
|
|
3020
3070
|
case 5:
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3071
|
+
return _context.abrupt("return", api.getBalanceAssetsPallet(address, BigInt(asset.assetId)));
|
|
3072
|
+
case 6:
|
|
3073
|
+
if (!(node === 'Mythos')) {
|
|
3074
|
+
_context.next = 8;
|
|
3075
|
+
break;
|
|
3076
|
+
}
|
|
3077
|
+
return _context.abrupt("return", api.getMythosForeignBalance(address));
|
|
3024
3078
|
case 8:
|
|
3025
|
-
|
|
3026
|
-
|
|
3079
|
+
if (assets.isForeignAsset(asset)) {
|
|
3080
|
+
_context.next = 10;
|
|
3081
|
+
break;
|
|
3082
|
+
}
|
|
3083
|
+
throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset"));
|
|
3027
3084
|
case 10:
|
|
3085
|
+
if (!(node === 'Polimec')) {
|
|
3086
|
+
_context.next = 14;
|
|
3087
|
+
break;
|
|
3088
|
+
}
|
|
3089
|
+
if (!(asset.multiLocation === undefined)) {
|
|
3090
|
+
_context.next = 13;
|
|
3091
|
+
break;
|
|
3092
|
+
}
|
|
3093
|
+
throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no multi-location"));
|
|
3094
|
+
case 13:
|
|
3095
|
+
return _context.abrupt("return", api.getBalanceForeignAssetsPallet(address, asset.multiLocation));
|
|
3096
|
+
case 14:
|
|
3097
|
+
if (!(node === 'AssetHubPolkadot')) {
|
|
3098
|
+
_context.next = 20;
|
|
3099
|
+
break;
|
|
3100
|
+
}
|
|
3101
|
+
ASSETS_PALLET_ID = 50;
|
|
3102
|
+
hasRequiredJunctions = asset.multiLocation && sdkCommon.hasJunction(asset.multiLocation, 'PalletInstance', ASSETS_PALLET_ID) && sdkCommon.hasJunction(asset.multiLocation, 'GeneralIndex');
|
|
3103
|
+
if (!(!asset.multiLocation || hasRequiredJunctions)) {
|
|
3104
|
+
_context.next = 19;
|
|
3105
|
+
break;
|
|
3106
|
+
}
|
|
3107
|
+
return _context.abrupt("return", api.getBalanceAssetsPallet(address, Number(asset.assetId)));
|
|
3108
|
+
case 19:
|
|
3109
|
+
return _context.abrupt("return", api.getBalanceForeignAssetsPallet(address, asset.multiLocation));
|
|
3110
|
+
case 20:
|
|
3111
|
+
return _context.abrupt("return", api.getBalanceForeignPolkadotXcm(address, asset.assetId));
|
|
3112
|
+
case 21:
|
|
3028
3113
|
case "end":
|
|
3029
3114
|
return _context.stop();
|
|
3030
3115
|
}
|
|
3031
3116
|
}, _callee);
|
|
3032
3117
|
}));
|
|
3033
|
-
return function
|
|
3034
|
-
return
|
|
3118
|
+
return function getBalanceForeignPolkadotXcm(_x, _x2, _x3, _x4) {
|
|
3119
|
+
return _ref.apply(this, arguments);
|
|
3035
3120
|
};
|
|
3036
3121
|
}();
|
|
3037
3122
|
|
|
3038
|
-
var
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
interior: {
|
|
3043
|
-
X1: [{
|
|
3044
|
-
Parachain: getParaId(origin)
|
|
3045
|
-
}]
|
|
3046
|
-
}
|
|
3047
|
-
};
|
|
3048
|
-
};
|
|
3049
|
-
var getDestXcmFee = /*#__PURE__*/function () {
|
|
3050
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(options) {
|
|
3051
|
-
var api, origin, destination, currency, forwardedXcms, asset, feeAsset, originFee, disableFallback, resolvedFeeAsset, calcPaymentInfoFee, dryRunResult, fee, newForwardedXcms, destParaId;
|
|
3052
|
-
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
3053
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
3123
|
+
var getBalanceForeignXTokens = /*#__PURE__*/function () {
|
|
3124
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(api, node, address, asset) {
|
|
3125
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3126
|
+
while (1) switch (_context.prev = _context.next) {
|
|
3054
3127
|
case 0:
|
|
3055
|
-
|
|
3056
|
-
|
|
3057
|
-
calcPaymentInfoFee = /*#__PURE__*/function () {
|
|
3058
|
-
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
3059
|
-
var originAsset;
|
|
3060
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3061
|
-
while (1) switch (_context.prev = _context.next) {
|
|
3062
|
-
case 0:
|
|
3063
|
-
originAsset = assets.findAsset(origin, currency, destination);
|
|
3064
|
-
if (originAsset) {
|
|
3065
|
-
_context.next = 3;
|
|
3066
|
-
break;
|
|
3067
|
-
}
|
|
3068
|
-
throw new assets.InvalidCurrencyError("Currency ".concat(JSON.stringify(currency), " not found in ").concat(origin));
|
|
3069
|
-
case 3:
|
|
3070
|
-
if (!originAsset.multiLocation) {
|
|
3071
|
-
_context.next = 17;
|
|
3072
|
-
break;
|
|
3073
|
-
}
|
|
3074
|
-
_context.prev = 4;
|
|
3075
|
-
_context.next = 7;
|
|
3076
|
-
return getReverseTxFee(options, {
|
|
3077
|
-
multilocation: originAsset.multiLocation
|
|
3078
|
-
});
|
|
3079
|
-
case 7:
|
|
3080
|
-
return _context.abrupt("return", _context.sent);
|
|
3081
|
-
case 10:
|
|
3082
|
-
_context.prev = 10;
|
|
3083
|
-
_context.t0 = _context["catch"](4);
|
|
3084
|
-
if (!(_context.t0 instanceof assets.InvalidCurrencyError)) {
|
|
3085
|
-
_context.next = 16;
|
|
3086
|
-
break;
|
|
3087
|
-
}
|
|
3088
|
-
_context.next = 15;
|
|
3089
|
-
return getReverseTxFee(options, {
|
|
3090
|
-
symbol: originAsset.symbol
|
|
3091
|
-
});
|
|
3092
|
-
case 15:
|
|
3093
|
-
return _context.abrupt("return", _context.sent);
|
|
3094
|
-
case 16:
|
|
3095
|
-
throw _context.t0;
|
|
3096
|
-
case 17:
|
|
3097
|
-
_context.next = 19;
|
|
3098
|
-
return getReverseTxFee(options, {
|
|
3099
|
-
symbol: originAsset.symbol
|
|
3100
|
-
});
|
|
3101
|
-
case 19:
|
|
3102
|
-
return _context.abrupt("return", _context.sent);
|
|
3103
|
-
case 20:
|
|
3104
|
-
case "end":
|
|
3105
|
-
return _context.stop();
|
|
3106
|
-
}
|
|
3107
|
-
}, _callee, null, [[4, 10]]);
|
|
3108
|
-
}));
|
|
3109
|
-
return function calcPaymentInfoFee() {
|
|
3110
|
-
return _ref2.apply(this, arguments);
|
|
3111
|
-
};
|
|
3112
|
-
}();
|
|
3113
|
-
if (!(!assets.hasDryRunSupport(destination) || !forwardedXcms)) {
|
|
3114
|
-
_context2.next = 8;
|
|
3128
|
+
if (!(node === 'Astar' || node === 'Shiden')) {
|
|
3129
|
+
_context.next = 4;
|
|
3115
3130
|
break;
|
|
3116
3131
|
}
|
|
3117
|
-
|
|
3118
|
-
|
|
3119
|
-
case 6:
|
|
3120
|
-
_context2.t0 = _context2.sent;
|
|
3121
|
-
return _context2.abrupt("return", {
|
|
3122
|
-
fee: _context2.t0,
|
|
3123
|
-
feeType: 'paymentInfo'
|
|
3124
|
-
});
|
|
3125
|
-
case 8:
|
|
3126
|
-
_context2.next = 10;
|
|
3127
|
-
return api.getDryRunXcm({
|
|
3128
|
-
originLocation: addXcmVersionHeader(createOriginLocation(origin, destination), exports.Version.V4),
|
|
3129
|
-
xcm: forwardedXcms[1][0],
|
|
3130
|
-
node: destination,
|
|
3131
|
-
origin: origin,
|
|
3132
|
-
asset: asset,
|
|
3133
|
-
originFee: originFee,
|
|
3134
|
-
feeAsset: resolvedFeeAsset,
|
|
3135
|
-
amount: BigInt(currency.amount)
|
|
3136
|
-
});
|
|
3137
|
-
case 10:
|
|
3138
|
-
dryRunResult = _context2.sent;
|
|
3139
|
-
if (dryRunResult.success) {
|
|
3140
|
-
_context2.next = 19;
|
|
3132
|
+
if (!(!assets.isForeignAsset(asset) || !asset.assetId)) {
|
|
3133
|
+
_context.next = 3;
|
|
3141
3134
|
break;
|
|
3142
3135
|
}
|
|
3143
|
-
|
|
3144
|
-
|
|
3136
|
+
throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
|
|
3137
|
+
case 3:
|
|
3138
|
+
return _context.abrupt("return", api.getBalanceAssetsPallet(address, BigInt(asset.assetId)));
|
|
3139
|
+
case 4:
|
|
3140
|
+
if (!(node === 'BifrostPolkadot' || node === 'BifrostKusama')) {
|
|
3141
|
+
_context.next = 6;
|
|
3145
3142
|
break;
|
|
3146
3143
|
}
|
|
3147
|
-
return
|
|
3148
|
-
|
|
3149
|
-
|
|
3150
|
-
case
|
|
3151
|
-
_context2.next = 16;
|
|
3152
|
-
return calcPaymentInfoFee();
|
|
3153
|
-
case 16:
|
|
3154
|
-
_context2.t1 = _context2.sent;
|
|
3155
|
-
_context2.t2 = dryRunResult.failureReason;
|
|
3156
|
-
return _context2.abrupt("return", {
|
|
3157
|
-
fee: _context2.t1,
|
|
3158
|
-
feeType: 'paymentInfo',
|
|
3159
|
-
dryRunError: _context2.t2
|
|
3160
|
-
});
|
|
3161
|
-
case 19:
|
|
3162
|
-
fee = dryRunResult.fee, newForwardedXcms = dryRunResult.forwardedXcms, destParaId = dryRunResult.destParaId;
|
|
3163
|
-
return _context2.abrupt("return", {
|
|
3164
|
-
fee: fee,
|
|
3165
|
-
feeType: 'dryRun',
|
|
3166
|
-
forwardedXcms: newForwardedXcms,
|
|
3167
|
-
destParaId: destParaId
|
|
3168
|
-
});
|
|
3169
|
-
case 21:
|
|
3144
|
+
return _context.abrupt("return", api.getBalanceForeignBifrost(address, asset));
|
|
3145
|
+
case 6:
|
|
3146
|
+
return _context.abrupt("return", api.getBalanceForeignXTokens(node, address, asset));
|
|
3147
|
+
case 7:
|
|
3170
3148
|
case "end":
|
|
3171
|
-
return
|
|
3149
|
+
return _context.stop();
|
|
3172
3150
|
}
|
|
3173
|
-
},
|
|
3151
|
+
}, _callee);
|
|
3174
3152
|
}));
|
|
3175
|
-
return function
|
|
3153
|
+
return function getBalanceForeignXTokens(_x, _x2, _x3, _x4) {
|
|
3176
3154
|
return _ref.apply(this, arguments);
|
|
3177
3155
|
};
|
|
3178
3156
|
}();
|
|
3179
3157
|
|
|
3180
|
-
var
|
|
3181
|
-
var
|
|
3182
|
-
var
|
|
3183
|
-
var origin, destination, currency, api, tx, senderAddress, feeAsset, resolvedFeeAsset, asset, originDryRun, initialForwardedXcms, initialDestParaId, currentOrigin, forwardedXcms, nextParaId, intermediateFees, destinationDryRun, nextChain, hopApi, hopDryRun, newXcms, destParaId;
|
|
3158
|
+
var getBalanceForeignInternal = /*#__PURE__*/function () {
|
|
3159
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
3160
|
+
var address, node, currency, api, asset, defaultPallet;
|
|
3184
3161
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3185
3162
|
while (1) switch (_context.prev = _context.next) {
|
|
3186
3163
|
case 0:
|
|
3187
|
-
|
|
3188
|
-
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
isFeeAsset: !!resolvedFeeAsset
|
|
3196
|
-
});
|
|
3197
|
-
case 5:
|
|
3198
|
-
originDryRun = _context.sent;
|
|
3199
|
-
if (originDryRun.success) {
|
|
3200
|
-
_context.next = 8;
|
|
3201
|
-
break;
|
|
3202
|
-
}
|
|
3203
|
-
return _context.abrupt("return", {
|
|
3204
|
-
origin: originDryRun
|
|
3205
|
-
});
|
|
3206
|
-
case 8:
|
|
3207
|
-
initialForwardedXcms = originDryRun.forwardedXcms, initialDestParaId = originDryRun.destParaId;
|
|
3208
|
-
currentOrigin = origin;
|
|
3209
|
-
forwardedXcms = initialForwardedXcms;
|
|
3210
|
-
nextParaId = initialDestParaId;
|
|
3211
|
-
intermediateFees = {};
|
|
3212
|
-
case 13:
|
|
3213
|
-
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)) {
|
|
3214
|
-
_context.next = 40;
|
|
3215
|
-
break;
|
|
3216
|
-
}
|
|
3217
|
-
nextChain = getTNode(nextParaId, determineRelayChain(origin) === 'Polkadot' ? 'polkadot' : 'kusama');
|
|
3218
|
-
if (nextChain) {
|
|
3219
|
-
_context.next = 17;
|
|
3220
|
-
break;
|
|
3221
|
-
}
|
|
3222
|
-
throw new InvalidParameterError("Unable to find TNode for paraId ".concat(nextParaId));
|
|
3223
|
-
case 17:
|
|
3224
|
-
hopApi = api.clone();
|
|
3225
|
-
_context.prev = 18;
|
|
3226
|
-
if (assets.hasDryRunSupport(nextChain)) {
|
|
3227
|
-
_context.next = 22;
|
|
3164
|
+
address = _ref.address, node = _ref.node, currency = _ref.currency, api = _ref.api;
|
|
3165
|
+
_context.next = 3;
|
|
3166
|
+
return api.init(node);
|
|
3167
|
+
case 3:
|
|
3168
|
+
asset = assets.findAssetForNodeOrThrow(node, currency, null);
|
|
3169
|
+
defaultPallet = pallets.getDefaultPallet(node);
|
|
3170
|
+
if (!(defaultPallet === 'XTokens')) {
|
|
3171
|
+
_context.next = 9;
|
|
3228
3172
|
break;
|
|
3229
3173
|
}
|
|
3230
|
-
|
|
3231
|
-
|
|
3232
|
-
|
|
3233
|
-
|
|
3234
|
-
};
|
|
3235
|
-
}
|
|
3236
|
-
return _context.abrupt("break", 40);
|
|
3237
|
-
case 22:
|
|
3238
|
-
_context.next = 24;
|
|
3239
|
-
return hopApi.init(nextChain, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
3240
|
-
case 24:
|
|
3241
|
-
_context.next = 26;
|
|
3242
|
-
return hopApi.getDryRunXcm({
|
|
3243
|
-
originLocation: addXcmVersionHeader(createOriginLocation(currentOrigin, nextChain), exports.Version.V4),
|
|
3244
|
-
xcm: forwardedXcms[1][0],
|
|
3245
|
-
node: nextChain,
|
|
3246
|
-
origin: currentOrigin,
|
|
3247
|
-
asset: asset,
|
|
3248
|
-
feeAsset: resolvedFeeAsset,
|
|
3249
|
-
originFee: originDryRun.fee,
|
|
3250
|
-
amount: BigInt(currency.amount)
|
|
3251
|
-
});
|
|
3252
|
-
case 26:
|
|
3253
|
-
hopDryRun = _context.sent;
|
|
3254
|
-
if (nextChain === destination || sdkCommon.isRelayChain(nextChain) && !sdkCommon.isRelayChain(destination)) {
|
|
3255
|
-
destinationDryRun = hopDryRun;
|
|
3256
|
-
} else if (nextChain === 'AssetHubPolkadot') {
|
|
3257
|
-
intermediateFees.assetHub = hopDryRun;
|
|
3258
|
-
} else if (nextChain === 'BridgeHubPolkadot') {
|
|
3259
|
-
intermediateFees.bridgeHub = hopDryRun;
|
|
3260
|
-
}
|
|
3261
|
-
if (hopDryRun.success) {
|
|
3262
|
-
_context.next = 30;
|
|
3174
|
+
return _context.abrupt("return", getBalanceForeignXTokens(api, node, address, asset));
|
|
3175
|
+
case 9:
|
|
3176
|
+
if (!(defaultPallet === 'PolkadotXcm')) {
|
|
3177
|
+
_context.next = 11;
|
|
3263
3178
|
break;
|
|
3264
3179
|
}
|
|
3265
|
-
return _context.abrupt("
|
|
3266
|
-
case
|
|
3267
|
-
|
|
3268
|
-
|
|
3269
|
-
nextParaId = destParaId;
|
|
3270
|
-
currentOrigin = nextChain;
|
|
3271
|
-
case 34:
|
|
3272
|
-
_context.prev = 34;
|
|
3273
|
-
_context.next = 37;
|
|
3274
|
-
return hopApi.disconnect();
|
|
3275
|
-
case 37:
|
|
3276
|
-
return _context.finish(34);
|
|
3277
|
-
case 38:
|
|
3278
|
-
_context.next = 13;
|
|
3279
|
-
break;
|
|
3280
|
-
case 40:
|
|
3281
|
-
return _context.abrupt("return", {
|
|
3282
|
-
origin: originDryRun.success ? _objectSpread2(_objectSpread2({}, originDryRun), {}, {
|
|
3283
|
-
currency: resolvedFeeAsset ? resolvedFeeAsset.symbol : assets.getNativeAssetSymbol(origin)
|
|
3284
|
-
}) : originDryRun,
|
|
3285
|
-
assetHub: (_intermediateFees$ass = intermediateFees.assetHub) !== null && _intermediateFees$ass !== void 0 && _intermediateFees$ass.success ? _objectSpread2(_objectSpread2({}, intermediateFees.assetHub), {}, {
|
|
3286
|
-
currency: assets.getNativeAssetSymbol('AssetHubPolkadot')
|
|
3287
|
-
}) : intermediateFees.assetHub,
|
|
3288
|
-
bridgeHub: (_intermediateFees$bri = intermediateFees.bridgeHub) !== null && _intermediateFees$bri !== void 0 && _intermediateFees$bri.success ? _objectSpread2(_objectSpread2({}, intermediateFees.bridgeHub), {}, {
|
|
3289
|
-
currency: assets.getNativeAssetSymbol('BridgeHubPolkadot')
|
|
3290
|
-
}) : intermediateFees.bridgeHub,
|
|
3291
|
-
destination: (_destinationDryRun = destinationDryRun) !== null && _destinationDryRun !== void 0 && _destinationDryRun.success ? _objectSpread2(_objectSpread2({}, destinationDryRun), {}, {
|
|
3292
|
-
currency: asset.symbol
|
|
3293
|
-
}) : destinationDryRun
|
|
3294
|
-
});
|
|
3295
|
-
case 41:
|
|
3180
|
+
return _context.abrupt("return", getBalanceForeignPolkadotXcm(api, node, address, asset));
|
|
3181
|
+
case 11:
|
|
3182
|
+
throw new InvalidParameterError('Unsupported pallet');
|
|
3183
|
+
case 12:
|
|
3296
3184
|
case "end":
|
|
3297
3185
|
return _context.stop();
|
|
3298
3186
|
}
|
|
3299
|
-
}, _callee
|
|
3187
|
+
}, _callee);
|
|
3300
3188
|
}));
|
|
3301
|
-
return function
|
|
3302
|
-
return
|
|
3189
|
+
return function getBalanceForeignInternal(_x) {
|
|
3190
|
+
return _ref2.apply(this, arguments);
|
|
3303
3191
|
};
|
|
3304
3192
|
}();
|
|
3305
|
-
|
|
3306
|
-
var
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
while (1) switch (_context.prev = _context.next) {
|
|
3193
|
+
var getBalanceForeign = /*#__PURE__*/function () {
|
|
3194
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(options) {
|
|
3195
|
+
var api;
|
|
3196
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
3197
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
3311
3198
|
case 0:
|
|
3312
|
-
api = options.api
|
|
3313
|
-
|
|
3314
|
-
|
|
3315
|
-
return
|
|
3199
|
+
api = options.api;
|
|
3200
|
+
_context2.prev = 1;
|
|
3201
|
+
_context2.next = 4;
|
|
3202
|
+
return getBalanceForeignInternal(options);
|
|
3316
3203
|
case 4:
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
|
|
3321
|
-
return _context.abrupt("return", _context.sent);
|
|
3322
|
-
case 8:
|
|
3323
|
-
_context.prev = 8;
|
|
3324
|
-
_context.next = 11;
|
|
3204
|
+
return _context2.abrupt("return", _context2.sent);
|
|
3205
|
+
case 5:
|
|
3206
|
+
_context2.prev = 5;
|
|
3207
|
+
_context2.next = 8;
|
|
3325
3208
|
return api.disconnect();
|
|
3326
|
-
case
|
|
3327
|
-
return
|
|
3328
|
-
case
|
|
3209
|
+
case 8:
|
|
3210
|
+
return _context2.finish(5);
|
|
3211
|
+
case 9:
|
|
3329
3212
|
case "end":
|
|
3330
|
-
return
|
|
3213
|
+
return _context2.stop();
|
|
3331
3214
|
}
|
|
3332
|
-
},
|
|
3215
|
+
}, _callee2, null, [[1,, 5, 9]]);
|
|
3333
3216
|
}));
|
|
3334
|
-
return function
|
|
3335
|
-
return
|
|
3217
|
+
return function getBalanceForeign(_x2) {
|
|
3218
|
+
return _ref3.apply(this, arguments);
|
|
3336
3219
|
};
|
|
3337
3220
|
}();
|
|
3338
3221
|
|
|
3339
|
-
var
|
|
3340
|
-
var
|
|
3341
|
-
var
|
|
3222
|
+
var getBalanceNativeInternal = /*#__PURE__*/function () {
|
|
3223
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
3224
|
+
var address, node, api, currency, symbol;
|
|
3342
3225
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3343
3226
|
while (1) switch (_context.prev = _context.next) {
|
|
3344
3227
|
case 0:
|
|
3345
|
-
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
_context.next = 7;
|
|
3352
|
-
return api.getDryRunCall(options);
|
|
3353
|
-
case 7:
|
|
3354
|
-
result = _context.sent;
|
|
3355
|
-
if (!result.success) {
|
|
3356
|
-
_context.next = 12;
|
|
3228
|
+
address = _ref.address, node = _ref.node, api = _ref.api, currency = _ref.currency;
|
|
3229
|
+
_context.next = 3;
|
|
3230
|
+
return api.init(node);
|
|
3231
|
+
case 3:
|
|
3232
|
+
if (!(node === 'Interlay' || node === 'Kintsugi')) {
|
|
3233
|
+
_context.next = 5;
|
|
3357
3234
|
break;
|
|
3358
3235
|
}
|
|
3359
|
-
return _context.abrupt("return",
|
|
3360
|
-
|
|
3236
|
+
return _context.abrupt("return", getBalanceForeignInternal({
|
|
3237
|
+
address: address,
|
|
3238
|
+
node: node,
|
|
3239
|
+
api: api,
|
|
3240
|
+
currency: {
|
|
3241
|
+
symbol: currency ? currency.symbol : assets.getAssetsObject(node).nativeAssetSymbol
|
|
3242
|
+
}
|
|
3361
3243
|
}));
|
|
3362
|
-
case 12:
|
|
3363
|
-
return _context.abrupt("return", result);
|
|
3364
|
-
case 13:
|
|
3365
|
-
_context.prev = 13;
|
|
3366
|
-
_context.next = 16;
|
|
3367
|
-
return api.disconnect();
|
|
3368
|
-
case 16:
|
|
3369
|
-
return _context.finish(13);
|
|
3370
|
-
case 17:
|
|
3371
|
-
case "end":
|
|
3372
|
-
return _context.stop();
|
|
3373
|
-
}
|
|
3374
|
-
}, _callee, null, [[4,, 13, 17]]);
|
|
3375
|
-
}));
|
|
3376
|
-
return function dryRunOrigin(_x) {
|
|
3377
|
-
return _ref.apply(this, arguments);
|
|
3378
|
-
};
|
|
3379
|
-
}();
|
|
3380
|
-
|
|
3381
|
-
var getParaEthTransferFees = /*#__PURE__*/function () {
|
|
3382
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(ahApi) {
|
|
3383
|
-
var DEFAULT_FEE, feeStorageItem, leFeeHex, bytes, reversedHex, validReversedHex, leFee, transferBridgeFee, finalBridgeFee, finalAssethubExecutionFee;
|
|
3384
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3385
|
-
while (1) switch (_context.prev = _context.next) {
|
|
3386
|
-
case 0:
|
|
3387
|
-
DEFAULT_FEE = 2750872500000n;
|
|
3388
|
-
_context.next = 3;
|
|
3389
|
-
return ahApi.getFromRpc('state', 'getStorage', '0x5fbc5c7ba58845ad1f1a9a7c5bc12fad');
|
|
3390
|
-
case 3:
|
|
3391
|
-
feeStorageItem = _context.sent;
|
|
3392
|
-
leFeeHex = feeStorageItem.replace('0x', '');
|
|
3393
|
-
_context.next = 7;
|
|
3394
|
-
return ahApi.disconnect();
|
|
3395
|
-
case 7:
|
|
3396
|
-
bytes = leFeeHex.match(/.{1,2}/g) || [];
|
|
3397
|
-
reversedHex = bytes.reverse().join('');
|
|
3398
|
-
validReversedHex = reversedHex === '' ? '0' : reversedHex;
|
|
3399
|
-
leFee = BigInt('0x' + validReversedHex);
|
|
3400
|
-
transferBridgeFee = leFee === 0n ? DEFAULT_FEE : BigInt(leFee.toString());
|
|
3401
|
-
finalBridgeFee = transferBridgeFee * 110n / 100n;
|
|
3402
|
-
finalAssethubExecutionFee = ASSET_HUB_EXECUTION_FEE * 110n / 100n;
|
|
3403
|
-
return _context.abrupt("return", [finalBridgeFee, finalAssethubExecutionFee]);
|
|
3404
|
-
case 15:
|
|
3405
|
-
case "end":
|
|
3406
|
-
return _context.stop();
|
|
3407
|
-
}
|
|
3408
|
-
}, _callee);
|
|
3409
|
-
}));
|
|
3410
|
-
return function getParaEthTransferFees(_x) {
|
|
3411
|
-
return _ref.apply(this, arguments);
|
|
3412
|
-
};
|
|
3413
|
-
}();
|
|
3414
|
-
|
|
3415
|
-
// Inspired by Moonbeam XCM-SDK
|
|
3416
|
-
// https://github.com/moonbeam-foundation/xcm-sdk/blob/ab835c15bf41612604b1c858d956a9f07705ed65/packages/utils/src/format/asset.ts#L1
|
|
3417
|
-
var formatAssetIdToERC20 = function formatAssetIdToERC20(id) {
|
|
3418
|
-
if (id.startsWith('0x')) {
|
|
3419
|
-
return id;
|
|
3420
|
-
}
|
|
3421
|
-
if (!(/^\d{38,39}$/.test(id) || /^\d{4}$/.test(id))) {
|
|
3422
|
-
throw new InvalidParameterError("Asset id: ".concat(id, " must be a string and have either 4 digits or 38-39 digits"));
|
|
3423
|
-
}
|
|
3424
|
-
return "0xffffffff".concat(BigInt(id).toString(16).padStart(32, '0'));
|
|
3425
|
-
};
|
|
3426
|
-
|
|
3427
|
-
var MOONBEAM_RPC = 'https://rpc.api.moonbeam.network';
|
|
3428
|
-
var MOONBEAM_ID = 1284;
|
|
3429
|
-
var MOONRIVER_RPC = 'https://rpc.api.moonriver.moonbeam.network';
|
|
3430
|
-
var MOONRIVER_ID = 1285;
|
|
3431
|
-
var ERC20_ABI = ['function balanceOf(address) view returns (uint256)'];
|
|
3432
|
-
function getMoonbeamErc20Balance(_x, _x2, _x3) {
|
|
3433
|
-
return _getMoonbeamErc20Balance.apply(this, arguments);
|
|
3434
|
-
}
|
|
3435
|
-
function _getMoonbeamErc20Balance() {
|
|
3436
|
-
_getMoonbeamErc20Balance = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(node, assetId, address) {
|
|
3437
|
-
var _ref, rpc, id, provider, addr, token;
|
|
3438
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3439
|
-
while (1) switch (_context.prev = _context.next) {
|
|
3440
|
-
case 0:
|
|
3441
|
-
_ref = node === 'Moonbeam' ? {
|
|
3442
|
-
rpc: MOONBEAM_RPC,
|
|
3443
|
-
id: MOONBEAM_ID
|
|
3444
|
-
} : {
|
|
3445
|
-
rpc: MOONRIVER_RPC,
|
|
3446
|
-
id: MOONRIVER_ID
|
|
3447
|
-
}, rpc = _ref.rpc, id = _ref.id;
|
|
3448
|
-
provider = new ethers.ethers.JsonRpcProvider(rpc, id);
|
|
3449
|
-
addr = formatAssetIdToERC20(assetId);
|
|
3450
|
-
token = new ethers.ethers.Contract(addr, ERC20_ABI, provider);
|
|
3451
|
-
_context.next = 6;
|
|
3452
|
-
return token.balanceOf(address);
|
|
3453
|
-
case 6:
|
|
3454
|
-
return _context.abrupt("return", _context.sent);
|
|
3455
|
-
case 7:
|
|
3456
|
-
case "end":
|
|
3457
|
-
return _context.stop();
|
|
3458
|
-
}
|
|
3459
|
-
}, _callee);
|
|
3460
|
-
}));
|
|
3461
|
-
return _getMoonbeamErc20Balance.apply(this, arguments);
|
|
3462
|
-
}
|
|
3463
|
-
|
|
3464
|
-
var getBalanceForeignPolkadotXcm = /*#__PURE__*/function () {
|
|
3465
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(api, node, address, asset) {
|
|
3466
|
-
var ASSETS_PALLET_ID, hasRequiredJunctions;
|
|
3467
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3468
|
-
while (1) switch (_context.prev = _context.next) {
|
|
3469
|
-
case 0:
|
|
3470
|
-
if (!(node === 'Moonbeam' || node === 'Moonriver')) {
|
|
3471
|
-
_context.next = 6;
|
|
3472
|
-
break;
|
|
3473
|
-
}
|
|
3474
|
-
if (!(!assets.isForeignAsset(asset) || !asset.assetId)) {
|
|
3475
|
-
_context.next = 3;
|
|
3476
|
-
break;
|
|
3477
|
-
}
|
|
3478
|
-
throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
|
|
3479
|
-
case 3:
|
|
3480
|
-
if (!(asset.multiLocation && sdkCommon.hasJunction(asset.multiLocation, 'GlobalConsensus'))) {
|
|
3481
|
-
_context.next = 5;
|
|
3482
|
-
break;
|
|
3483
|
-
}
|
|
3484
|
-
return _context.abrupt("return", getMoonbeamErc20Balance(node, asset.assetId, address));
|
|
3485
3244
|
case 5:
|
|
3486
|
-
|
|
3487
|
-
case 6:
|
|
3488
|
-
if (!(node === 'Mythos')) {
|
|
3489
|
-
_context.next = 8;
|
|
3490
|
-
break;
|
|
3491
|
-
}
|
|
3492
|
-
return _context.abrupt("return", api.getMythosForeignBalance(address));
|
|
3493
|
-
case 8:
|
|
3494
|
-
if (assets.isForeignAsset(asset)) {
|
|
3245
|
+
if (!(currency && currency.symbol !== assets.getNativeAssetSymbol(node) && (node === 'Acala' || node === 'Karura'))) {
|
|
3495
3246
|
_context.next = 10;
|
|
3496
3247
|
break;
|
|
3497
3248
|
}
|
|
3498
|
-
|
|
3499
|
-
|
|
3500
|
-
if (!(node === 'Polimec')) {
|
|
3501
|
-
_context.next = 14;
|
|
3502
|
-
break;
|
|
3503
|
-
}
|
|
3504
|
-
if (!(asset.multiLocation === undefined)) {
|
|
3505
|
-
_context.next = 13;
|
|
3506
|
-
break;
|
|
3507
|
-
}
|
|
3508
|
-
throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no multi-location"));
|
|
3509
|
-
case 13:
|
|
3510
|
-
return _context.abrupt("return", api.getBalanceForeignAssetsPallet(address, asset.multiLocation));
|
|
3511
|
-
case 14:
|
|
3512
|
-
if (!(node === 'AssetHubPolkadot')) {
|
|
3513
|
-
_context.next = 20;
|
|
3514
|
-
break;
|
|
3515
|
-
}
|
|
3516
|
-
ASSETS_PALLET_ID = 50;
|
|
3517
|
-
hasRequiredJunctions = asset.multiLocation && sdkCommon.hasJunction(asset.multiLocation, 'PalletInstance', ASSETS_PALLET_ID) && sdkCommon.hasJunction(asset.multiLocation, 'GeneralIndex');
|
|
3518
|
-
if (!(!asset.multiLocation || hasRequiredJunctions)) {
|
|
3519
|
-
_context.next = 19;
|
|
3520
|
-
break;
|
|
3521
|
-
}
|
|
3522
|
-
return _context.abrupt("return", api.getBalanceAssetsPallet(address, Number(asset.assetId)));
|
|
3523
|
-
case 19:
|
|
3524
|
-
return _context.abrupt("return", api.getBalanceForeignAssetsPallet(address, asset.multiLocation));
|
|
3525
|
-
case 20:
|
|
3526
|
-
return _context.abrupt("return", api.getBalanceForeignPolkadotXcm(address, asset.assetId));
|
|
3527
|
-
case 21:
|
|
3528
|
-
case "end":
|
|
3529
|
-
return _context.stop();
|
|
3530
|
-
}
|
|
3531
|
-
}, _callee);
|
|
3532
|
-
}));
|
|
3533
|
-
return function getBalanceForeignPolkadotXcm(_x, _x2, _x3, _x4) {
|
|
3534
|
-
return _ref.apply(this, arguments);
|
|
3535
|
-
};
|
|
3536
|
-
}();
|
|
3537
|
-
|
|
3538
|
-
var getBalanceForeignXTokens = /*#__PURE__*/function () {
|
|
3539
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(api, node, address, asset) {
|
|
3540
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3541
|
-
while (1) switch (_context.prev = _context.next) {
|
|
3542
|
-
case 0:
|
|
3543
|
-
if (!(node === 'Astar' || node === 'Shiden')) {
|
|
3544
|
-
_context.next = 4;
|
|
3545
|
-
break;
|
|
3546
|
-
}
|
|
3547
|
-
if (!(!assets.isForeignAsset(asset) || !asset.assetId)) {
|
|
3548
|
-
_context.next = 3;
|
|
3549
|
-
break;
|
|
3550
|
-
}
|
|
3551
|
-
throw new assets.InvalidCurrencyError("Asset ".concat(JSON.stringify(asset), " has no assetId"));
|
|
3552
|
-
case 3:
|
|
3553
|
-
return _context.abrupt("return", api.getBalanceAssetsPallet(address, BigInt(asset.assetId)));
|
|
3554
|
-
case 4:
|
|
3555
|
-
if (!(node === 'BifrostPolkadot' || node === 'BifrostKusama')) {
|
|
3556
|
-
_context.next = 6;
|
|
3557
|
-
break;
|
|
3558
|
-
}
|
|
3559
|
-
return _context.abrupt("return", api.getBalanceForeignBifrost(address, asset));
|
|
3560
|
-
case 6:
|
|
3561
|
-
return _context.abrupt("return", api.getBalanceForeignXTokens(node, address, asset));
|
|
3562
|
-
case 7:
|
|
3563
|
-
case "end":
|
|
3564
|
-
return _context.stop();
|
|
3565
|
-
}
|
|
3566
|
-
}, _callee);
|
|
3567
|
-
}));
|
|
3568
|
-
return function getBalanceForeignXTokens(_x, _x2, _x3, _x4) {
|
|
3569
|
-
return _ref.apply(this, arguments);
|
|
3570
|
-
};
|
|
3571
|
-
}();
|
|
3572
|
-
|
|
3573
|
-
var getBalanceForeignInternal = /*#__PURE__*/function () {
|
|
3574
|
-
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
3575
|
-
var address, node, currency, api, asset, defaultPallet;
|
|
3576
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3577
|
-
while (1) switch (_context.prev = _context.next) {
|
|
3578
|
-
case 0:
|
|
3579
|
-
address = _ref.address, node = _ref.node, currency = _ref.currency, api = _ref.api;
|
|
3580
|
-
_context.next = 3;
|
|
3581
|
-
return api.init(node);
|
|
3582
|
-
case 3:
|
|
3583
|
-
asset = assets.findAssetForNodeOrThrow(node, currency, null);
|
|
3584
|
-
defaultPallet = pallets.getDefaultPallet(node);
|
|
3585
|
-
if (!(defaultPallet === 'XTokens')) {
|
|
3249
|
+
symbol = currency.symbol === 'aSEED' ? 'AUSD' : currency.symbol;
|
|
3250
|
+
if (!(symbol.toLowerCase() === 'lcdot')) {
|
|
3586
3251
|
_context.next = 9;
|
|
3587
3252
|
break;
|
|
3588
3253
|
}
|
|
3589
|
-
|
|
3254
|
+
throw new assets.InvalidCurrencyError('LcDOT balance is not supported');
|
|
3590
3255
|
case 9:
|
|
3591
|
-
|
|
3592
|
-
|
|
3593
|
-
|
|
3594
|
-
}
|
|
3595
|
-
return _context.abrupt("return", getBalanceForeignPolkadotXcm(api, node, address, asset));
|
|
3256
|
+
return _context.abrupt("return", api.getBalanceNativeAcala(address, symbol));
|
|
3257
|
+
case 10:
|
|
3258
|
+
return _context.abrupt("return", api.getBalanceNative(address));
|
|
3596
3259
|
case 11:
|
|
3597
|
-
throw new InvalidParameterError('Unsupported pallet');
|
|
3598
|
-
case 12:
|
|
3599
3260
|
case "end":
|
|
3600
3261
|
return _context.stop();
|
|
3601
3262
|
}
|
|
3602
3263
|
}, _callee);
|
|
3603
3264
|
}));
|
|
3604
|
-
return function
|
|
3265
|
+
return function getBalanceNativeInternal(_x) {
|
|
3605
3266
|
return _ref2.apply(this, arguments);
|
|
3606
3267
|
};
|
|
3607
3268
|
}();
|
|
3608
|
-
var
|
|
3269
|
+
var getBalanceNative = /*#__PURE__*/function () {
|
|
3609
3270
|
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(options) {
|
|
3610
3271
|
var api;
|
|
3611
3272
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
@@ -3614,7 +3275,7 @@ var getBalanceForeign = /*#__PURE__*/function () {
|
|
|
3614
3275
|
api = options.api;
|
|
3615
3276
|
_context2.prev = 1;
|
|
3616
3277
|
_context2.next = 4;
|
|
3617
|
-
return
|
|
3278
|
+
return getBalanceNativeInternal(options);
|
|
3618
3279
|
case 4:
|
|
3619
3280
|
return _context2.abrupt("return", _context2.sent);
|
|
3620
3281
|
case 5:
|
|
@@ -3629,106 +3290,30 @@ var getBalanceForeign = /*#__PURE__*/function () {
|
|
|
3629
3290
|
}
|
|
3630
3291
|
}, _callee2, null, [[1,, 5, 9]]);
|
|
3631
3292
|
}));
|
|
3632
|
-
return function
|
|
3293
|
+
return function getBalanceNative(_x2) {
|
|
3633
3294
|
return _ref3.apply(this, arguments);
|
|
3634
3295
|
};
|
|
3635
3296
|
}();
|
|
3636
3297
|
|
|
3637
|
-
var
|
|
3298
|
+
var getAssetBalanceInternal = /*#__PURE__*/function () {
|
|
3638
3299
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
3639
|
-
var
|
|
3300
|
+
var _yield$getBalanceFore;
|
|
3301
|
+
var address, node, currency, api, asset, isNativeSymbol;
|
|
3640
3302
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3641
3303
|
while (1) switch (_context.prev = _context.next) {
|
|
3642
3304
|
case 0:
|
|
3643
|
-
address = _ref.address, node = _ref.node,
|
|
3305
|
+
address = _ref.address, node = _ref.node, currency = _ref.currency, api = _ref.api;
|
|
3644
3306
|
_context.next = 3;
|
|
3645
3307
|
return api.init(node);
|
|
3646
3308
|
case 3:
|
|
3647
|
-
|
|
3648
|
-
|
|
3309
|
+
asset = assets.findAssetForNodeOrThrow(node, currency, null);
|
|
3310
|
+
isNativeSymbol = asset.symbol === assets.getNativeAssetSymbol(node);
|
|
3311
|
+
if (!(isNativeSymbol && node !== 'Interlay' && node !== 'Kintsugi')) {
|
|
3312
|
+
_context.next = 11;
|
|
3649
3313
|
break;
|
|
3650
3314
|
}
|
|
3651
|
-
|
|
3652
|
-
|
|
3653
|
-
node: node,
|
|
3654
|
-
api: api,
|
|
3655
|
-
currency: {
|
|
3656
|
-
symbol: currency ? currency.symbol : assets.getAssetsObject(node).nativeAssetSymbol
|
|
3657
|
-
}
|
|
3658
|
-
}));
|
|
3659
|
-
case 5:
|
|
3660
|
-
if (!(currency && currency.symbol !== assets.getNativeAssetSymbol(node) && (node === 'Acala' || node === 'Karura'))) {
|
|
3661
|
-
_context.next = 10;
|
|
3662
|
-
break;
|
|
3663
|
-
}
|
|
3664
|
-
symbol = currency.symbol === 'aSEED' ? 'AUSD' : currency.symbol;
|
|
3665
|
-
if (!(symbol.toLowerCase() === 'lcdot')) {
|
|
3666
|
-
_context.next = 9;
|
|
3667
|
-
break;
|
|
3668
|
-
}
|
|
3669
|
-
throw new assets.InvalidCurrencyError('LcDOT balance is not supported');
|
|
3670
|
-
case 9:
|
|
3671
|
-
return _context.abrupt("return", api.getBalanceNativeAcala(address, symbol));
|
|
3672
|
-
case 10:
|
|
3673
|
-
return _context.abrupt("return", api.getBalanceNative(address));
|
|
3674
|
-
case 11:
|
|
3675
|
-
case "end":
|
|
3676
|
-
return _context.stop();
|
|
3677
|
-
}
|
|
3678
|
-
}, _callee);
|
|
3679
|
-
}));
|
|
3680
|
-
return function getBalanceNativeInternal(_x) {
|
|
3681
|
-
return _ref2.apply(this, arguments);
|
|
3682
|
-
};
|
|
3683
|
-
}();
|
|
3684
|
-
var getBalanceNative = /*#__PURE__*/function () {
|
|
3685
|
-
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(options) {
|
|
3686
|
-
var api;
|
|
3687
|
-
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
3688
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
3689
|
-
case 0:
|
|
3690
|
-
api = options.api;
|
|
3691
|
-
_context2.prev = 1;
|
|
3692
|
-
_context2.next = 4;
|
|
3693
|
-
return getBalanceNativeInternal(options);
|
|
3694
|
-
case 4:
|
|
3695
|
-
return _context2.abrupt("return", _context2.sent);
|
|
3696
|
-
case 5:
|
|
3697
|
-
_context2.prev = 5;
|
|
3698
|
-
_context2.next = 8;
|
|
3699
|
-
return api.disconnect();
|
|
3700
|
-
case 8:
|
|
3701
|
-
return _context2.finish(5);
|
|
3702
|
-
case 9:
|
|
3703
|
-
case "end":
|
|
3704
|
-
return _context2.stop();
|
|
3705
|
-
}
|
|
3706
|
-
}, _callee2, null, [[1,, 5, 9]]);
|
|
3707
|
-
}));
|
|
3708
|
-
return function getBalanceNative(_x2) {
|
|
3709
|
-
return _ref3.apply(this, arguments);
|
|
3710
|
-
};
|
|
3711
|
-
}();
|
|
3712
|
-
|
|
3713
|
-
var getAssetBalanceInternal = /*#__PURE__*/function () {
|
|
3714
|
-
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
3715
|
-
var _yield$getBalanceFore;
|
|
3716
|
-
var address, node, currency, api, asset, isNativeSymbol;
|
|
3717
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3718
|
-
while (1) switch (_context.prev = _context.next) {
|
|
3719
|
-
case 0:
|
|
3720
|
-
address = _ref.address, node = _ref.node, currency = _ref.currency, api = _ref.api;
|
|
3721
|
-
_context.next = 3;
|
|
3722
|
-
return api.init(node);
|
|
3723
|
-
case 3:
|
|
3724
|
-
asset = assets.findAssetForNodeOrThrow(node, currency, null);
|
|
3725
|
-
isNativeSymbol = asset.symbol === assets.getNativeAssetSymbol(node);
|
|
3726
|
-
if (!(isNativeSymbol && node !== 'Interlay' && node !== 'Kintsugi')) {
|
|
3727
|
-
_context.next = 11;
|
|
3728
|
-
break;
|
|
3729
|
-
}
|
|
3730
|
-
_context.next = 8;
|
|
3731
|
-
return getBalanceNativeInternal({
|
|
3315
|
+
_context.next = 8;
|
|
3316
|
+
return getBalanceNativeInternal({
|
|
3732
3317
|
address: address,
|
|
3733
3318
|
node: node,
|
|
3734
3319
|
api: api
|
|
@@ -4251,163 +3836,614 @@ var abi = [
|
|
|
4251
3836
|
}
|
|
4252
3837
|
];
|
|
4253
3838
|
|
|
4254
|
-
// https://github.com/moonbeam-foundation/moonbeam/blob/b2b1bde7ced13aad4bd2928effc415c521fd48cb/runtime/moonbeam/src/precompiles.rs#L281
|
|
4255
|
-
var xcmInterfacePrecompile = '0x000000000000000000000000000000000000081A';
|
|
4256
|
-
var XCDOT = '0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080';
|
|
4257
|
-
var transferMoonbeamToEth = /*#__PURE__*/function () {
|
|
4258
|
-
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
4259
|
-
var _signer$account;
|
|
4260
|
-
var api, from, to, signer, address, ahAddress, currency, bridgeStatus, foundAsset, ethAsset, contract, senderAddress, messageId, customXcm, customXcmOnDest, assetHubApi, _yield$getParaEthTran, _yield$getParaEthTran2, bridgeFee, executionFee, transferFee, createTx, numberToHex32, tx;
|
|
3839
|
+
// https://github.com/moonbeam-foundation/moonbeam/blob/b2b1bde7ced13aad4bd2928effc415c521fd48cb/runtime/moonbeam/src/precompiles.rs#L281
|
|
3840
|
+
var xcmInterfacePrecompile = '0x000000000000000000000000000000000000081A';
|
|
3841
|
+
var XCDOT = '0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080';
|
|
3842
|
+
var transferMoonbeamToEth = /*#__PURE__*/function () {
|
|
3843
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
3844
|
+
var _signer$account;
|
|
3845
|
+
var api, from, to, signer, address, ahAddress, currency, bridgeStatus, foundAsset, ethAsset, contract, senderAddress, messageId, customXcm, customXcmOnDest, assetHubApi, _yield$getParaEthTran, _yield$getParaEthTran2, bridgeFee, executionFee, transferFee, createTx, numberToHex32, tx;
|
|
3846
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
3847
|
+
while (1) switch (_context.prev = _context.next) {
|
|
3848
|
+
case 0:
|
|
3849
|
+
api = _ref.api, from = _ref.from, to = _ref.to, signer = _ref.signer, address = _ref.address, ahAddress = _ref.ahAddress, currency = _ref.currency;
|
|
3850
|
+
if (ahAddress) {
|
|
3851
|
+
_context.next = 3;
|
|
3852
|
+
break;
|
|
3853
|
+
}
|
|
3854
|
+
throw new InvalidParameterError('AssetHub address is required');
|
|
3855
|
+
case 3:
|
|
3856
|
+
_context.next = 5;
|
|
3857
|
+
return getBridgeStatus(api.clone());
|
|
3858
|
+
case 5:
|
|
3859
|
+
bridgeStatus = _context.sent;
|
|
3860
|
+
if (!(bridgeStatus !== 'Normal')) {
|
|
3861
|
+
_context.next = 8;
|
|
3862
|
+
break;
|
|
3863
|
+
}
|
|
3864
|
+
throw new BridgeHaltedError();
|
|
3865
|
+
case 8:
|
|
3866
|
+
if (!('multiasset' in currency)) {
|
|
3867
|
+
_context.next = 10;
|
|
3868
|
+
break;
|
|
3869
|
+
}
|
|
3870
|
+
throw new InvalidParameterError('Multiassets syntax is not supported for Evm transfers');
|
|
3871
|
+
case 10:
|
|
3872
|
+
if (!('multilocation' in currency && assets.isOverrideMultiLocationSpecifier(currency.multilocation))) {
|
|
3873
|
+
_context.next = 12;
|
|
3874
|
+
break;
|
|
3875
|
+
}
|
|
3876
|
+
throw new InvalidParameterError('Override multilocation is not supported for Evm transfers');
|
|
3877
|
+
case 12:
|
|
3878
|
+
foundAsset = assets.findAsset(from, currency, to);
|
|
3879
|
+
if (!(foundAsset === null)) {
|
|
3880
|
+
_context.next = 15;
|
|
3881
|
+
break;
|
|
3882
|
+
}
|
|
3883
|
+
throw new assets.InvalidCurrencyError("Origin node ".concat(from, " does not support currency ").concat(JSON.stringify(currency), "."));
|
|
3884
|
+
case 15:
|
|
3885
|
+
if (!(!assets.isForeignAsset(foundAsset) || !foundAsset.multiLocation)) {
|
|
3886
|
+
_context.next = 17;
|
|
3887
|
+
break;
|
|
3888
|
+
}
|
|
3889
|
+
throw new assets.InvalidCurrencyError('Currency must be a foreign asset with valid multi-location');
|
|
3890
|
+
case 17:
|
|
3891
|
+
ethAsset = assets.findAssetByMultiLocation(assets.getOtherAssets('Ethereum'), foundAsset.multiLocation);
|
|
3892
|
+
if (!(!ethAsset || !ethAsset.assetId)) {
|
|
3893
|
+
_context.next = 20;
|
|
3894
|
+
break;
|
|
3895
|
+
}
|
|
3896
|
+
throw new assets.InvalidCurrencyError("Could not obtain Ethereum asset address for ".concat(JSON.stringify(foundAsset)));
|
|
3897
|
+
case 20:
|
|
3898
|
+
contract = isEthersSigner(signer) ? new ethers.Contract(xcmInterfacePrecompile, abi, signer) : viem.getContract({
|
|
3899
|
+
abi: abi,
|
|
3900
|
+
address: xcmInterfacePrecompile,
|
|
3901
|
+
client: {
|
|
3902
|
+
"public": viem.createPublicClient({
|
|
3903
|
+
chain: signer.chain,
|
|
3904
|
+
transport: viem.http()
|
|
3905
|
+
}),
|
|
3906
|
+
wallet: signer
|
|
3907
|
+
}
|
|
3908
|
+
});
|
|
3909
|
+
if (!isEthersSigner(signer)) {
|
|
3910
|
+
_context.next = 27;
|
|
3911
|
+
break;
|
|
3912
|
+
}
|
|
3913
|
+
_context.next = 24;
|
|
3914
|
+
return signer.getAddress();
|
|
3915
|
+
case 24:
|
|
3916
|
+
_context.t0 = _context.sent;
|
|
3917
|
+
_context.next = 28;
|
|
3918
|
+
break;
|
|
3919
|
+
case 27:
|
|
3920
|
+
_context.t0 = (_signer$account = signer.account) === null || _signer$account === void 0 ? void 0 : _signer$account.address;
|
|
3921
|
+
case 28:
|
|
3922
|
+
senderAddress = _context.t0;
|
|
3923
|
+
if (senderAddress) {
|
|
3924
|
+
_context.next = 31;
|
|
3925
|
+
break;
|
|
3926
|
+
}
|
|
3927
|
+
throw new InvalidParameterError('Unable to get sender address');
|
|
3928
|
+
case 31:
|
|
3929
|
+
_context.next = 33;
|
|
3930
|
+
return api.init(from, TX_CLIENT_TIMEOUT_MS);
|
|
3931
|
+
case 33:
|
|
3932
|
+
_context.next = 35;
|
|
3933
|
+
return generateMessageId(api, senderAddress, getParaId(from), ethAsset.assetId, address, currency.amount);
|
|
3934
|
+
case 35:
|
|
3935
|
+
messageId = _context.sent;
|
|
3936
|
+
customXcm = createCustomXcmOnDest({
|
|
3937
|
+
api: api,
|
|
3938
|
+
address: address,
|
|
3939
|
+
scenario: 'ParaToPara',
|
|
3940
|
+
senderAddress: senderAddress,
|
|
3941
|
+
ahAddress: ahAddress,
|
|
3942
|
+
asset: _objectSpread2(_objectSpread2({}, foundAsset), {}, {
|
|
3943
|
+
amount: currency.amount
|
|
3944
|
+
})}, from, exports.Version.V4, messageId);
|
|
3945
|
+
_context.next = 39;
|
|
3946
|
+
return api.objectToHex(customXcm, 'XcmVersionedXcm');
|
|
3947
|
+
case 39:
|
|
3948
|
+
customXcmOnDest = _context.sent;
|
|
3949
|
+
_context.next = 42;
|
|
3950
|
+
return api.createApiForNode('AssetHubPolkadot');
|
|
3951
|
+
case 42:
|
|
3952
|
+
assetHubApi = _context.sent;
|
|
3953
|
+
_context.next = 45;
|
|
3954
|
+
return getParaEthTransferFees(assetHubApi);
|
|
3955
|
+
case 45:
|
|
3956
|
+
_yield$getParaEthTran = _context.sent;
|
|
3957
|
+
_yield$getParaEthTran2 = _slicedToArray(_yield$getParaEthTran, 2);
|
|
3958
|
+
bridgeFee = _yield$getParaEthTran2[0];
|
|
3959
|
+
executionFee = _yield$getParaEthTran2[1];
|
|
3960
|
+
transferFee = (bridgeFee + executionFee).toString(); // Partially inspired by Moonbeam XCM-SDK
|
|
3961
|
+
// https://github.com/moonbeam-foundation/xcm-sdk/blob/ab835c15bf41612604b1c858d956a9f07705ed65/packages/sdk/src/contract/contracts/Xtokens/Xtokens.ts#L53
|
|
3962
|
+
createTx = function createTx(func, args) {
|
|
3963
|
+
if (isEthersContract(contract)) {
|
|
3964
|
+
return contract[func].apply(contract, _toConsumableArray(args));
|
|
3965
|
+
}
|
|
3966
|
+
return contract.write[func](args);
|
|
3967
|
+
};
|
|
3968
|
+
numberToHex32 = function numberToHex32(num) {
|
|
3969
|
+
return typeof num !== 'number' || isNaN(num) ? function () {
|
|
3970
|
+
throw new InvalidParameterError('Input must be a valid number');
|
|
3971
|
+
}() : "0x".concat((num >>> 0).toString(16).padStart(8, '0'));
|
|
3972
|
+
}; // Execute the custom XCM message with the precompile
|
|
3973
|
+
_context.next = 54;
|
|
3974
|
+
return createTx(isEthersSigner(signer) ? 'transferAssetsUsingTypeAndThenAddress((uint8,bytes[]),(address,uint256)[],uint8,uint8,uint8,bytes)' : 'transferAssetsUsingTypeAndThenAddress', [
|
|
3975
|
+
// This represents (1,X1(Parachain(1000)))
|
|
3976
|
+
[1, ['0x00' + numberToHex32(getParaId('AssetHubPolkadot')).slice(2)]],
|
|
3977
|
+
// Assets including fee and the ERC20 asset, with fee be the first
|
|
3978
|
+
[[XCDOT, transferFee], [ethAsset.assetId, currency.amount.toString()]],
|
|
3979
|
+
// The TransferType corresponding to asset being sent, 2 represents `DestinationReserve`
|
|
3980
|
+
2,
|
|
3981
|
+
// index for the fee
|
|
3982
|
+
0,
|
|
3983
|
+
// The TransferType corresponding to fee asset
|
|
3984
|
+
2, customXcmOnDest]);
|
|
3985
|
+
case 54:
|
|
3986
|
+
tx = _context.sent;
|
|
3987
|
+
return _context.abrupt("return", _typeof(tx) === 'object' ? tx.hash : tx);
|
|
3988
|
+
case 56:
|
|
3989
|
+
case "end":
|
|
3990
|
+
return _context.stop();
|
|
3991
|
+
}
|
|
3992
|
+
}, _callee);
|
|
3993
|
+
}));
|
|
3994
|
+
return function transferMoonbeamToEth(_x) {
|
|
3995
|
+
return _ref2.apply(this, arguments);
|
|
3996
|
+
};
|
|
3997
|
+
}();
|
|
3998
|
+
|
|
3999
|
+
var resolveFeeAsset = function resolveFeeAsset(feeAsset, origin, destination, currency) {
|
|
4000
|
+
var asset = assets.findAsset(origin, feeAsset, !sdkCommon.isTMultiLocation(destination) ? destination : null);
|
|
4001
|
+
var usesRawOverriddenMultiAssets = 'multiasset' in currency && currency.multiasset.every(assets.isTMultiAsset);
|
|
4002
|
+
if (!asset && !usesRawOverriddenMultiAssets) {
|
|
4003
|
+
throwUnsupportedCurrency(feeAsset, origin);
|
|
4004
|
+
}
|
|
4005
|
+
return asset !== null && asset !== void 0 ? asset : undefined;
|
|
4006
|
+
};
|
|
4007
|
+
|
|
4008
|
+
var isAssetHub = function isAssetHub(chain) {
|
|
4009
|
+
return chain === 'AssetHubPolkadot' || chain === 'AssetHubKusama';
|
|
4010
|
+
};
|
|
4011
|
+
var isBridgeHub = function isBridgeHub(chain) {
|
|
4012
|
+
return chain === 'BridgeHubPolkadot' || chain === 'BridgeHubKusama';
|
|
4013
|
+
};
|
|
4014
|
+
var isPeople = function isPeople(chain) {
|
|
4015
|
+
return chain === 'PeoplePolkadot' || chain === 'PeopleKusama';
|
|
4016
|
+
};
|
|
4017
|
+
var isSystemPara = function isSystemPara(chain) {
|
|
4018
|
+
return isAssetHub(chain) || isBridgeHub(chain) || isPeople(chain);
|
|
4019
|
+
};
|
|
4020
|
+
var mul = function mul(v, num) {
|
|
4021
|
+
var den = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1n;
|
|
4022
|
+
return v * num / den;
|
|
4023
|
+
};
|
|
4024
|
+
var padFee = function padFee(raw, origin, dest, side) {
|
|
4025
|
+
var relayOrigin = sdkCommon.isRelayChain(origin);
|
|
4026
|
+
var relayDest = sdkCommon.isRelayChain(dest);
|
|
4027
|
+
var sysParaOrigin = isSystemPara(origin);
|
|
4028
|
+
var sysParaDest = isSystemPara(dest);
|
|
4029
|
+
var relayToPara = relayOrigin && !relayDest;
|
|
4030
|
+
var sysParaToPara = sysParaOrigin && !sysParaDest;
|
|
4031
|
+
var paraToPara = !relayOrigin && !sysParaOrigin;
|
|
4032
|
+
if (sysParaToPara) return raw * 40n;
|
|
4033
|
+
if (relayToPara) return side === 'origin' ? mul(raw, 320n, 100n) : mul(raw, 3000n, 100n);
|
|
4034
|
+
if (paraToPara) return mul(raw, 130n, 100n);
|
|
4035
|
+
// apply default 30% padding
|
|
4036
|
+
return mul(raw, 130n, 100n);
|
|
4037
|
+
};
|
|
4038
|
+
|
|
4039
|
+
var getReverseTxFee = /*#__PURE__*/function () {
|
|
4040
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref, currencyInput) {
|
|
4041
|
+
var api, origin, destination, senderAddress, address, currency, tx, rawFee;
|
|
4042
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
4043
|
+
while (1) switch (_context.prev = _context.next) {
|
|
4044
|
+
case 0:
|
|
4045
|
+
api = _ref.api, origin = _ref.origin, destination = _ref.destination, senderAddress = _ref.senderAddress, address = _ref.address, currency = _ref.currency;
|
|
4046
|
+
if (!('multiasset' in currency)) {
|
|
4047
|
+
_context.next = 3;
|
|
4048
|
+
break;
|
|
4049
|
+
}
|
|
4050
|
+
throw new assets.InvalidCurrencyError('Multi-assets are not yet supported for XCM fee calculation.');
|
|
4051
|
+
case 3:
|
|
4052
|
+
_context.next = 5;
|
|
4053
|
+
return Builder(api).from(destination).to(origin).address(senderAddress).senderAddress(address).currency(_objectSpread2(_objectSpread2({}, currencyInput), {}, {
|
|
4054
|
+
amount: currency.amount
|
|
4055
|
+
})).build();
|
|
4056
|
+
case 5:
|
|
4057
|
+
tx = _context.sent;
|
|
4058
|
+
_context.next = 8;
|
|
4059
|
+
return api.calculateTransactionFee(tx, address);
|
|
4060
|
+
case 8:
|
|
4061
|
+
rawFee = _context.sent;
|
|
4062
|
+
return _context.abrupt("return", padFee(rawFee, origin, destination, 'destination'));
|
|
4063
|
+
case 10:
|
|
4064
|
+
case "end":
|
|
4065
|
+
return _context.stop();
|
|
4066
|
+
}
|
|
4067
|
+
}, _callee);
|
|
4068
|
+
}));
|
|
4069
|
+
return function getReverseTxFee(_x, _x2) {
|
|
4070
|
+
return _ref2.apply(this, arguments);
|
|
4071
|
+
};
|
|
4072
|
+
}();
|
|
4073
|
+
|
|
4074
|
+
var createOriginLocation = function createOriginLocation(origin, destination) {
|
|
4075
|
+
if (sdkCommon.isRelayChain(origin)) return DOT_MULTILOCATION;
|
|
4076
|
+
return {
|
|
4077
|
+
parents: sdkCommon.isRelayChain(destination) ? sdkCommon.Parents.ZERO : sdkCommon.Parents.ONE,
|
|
4078
|
+
interior: {
|
|
4079
|
+
X1: [{
|
|
4080
|
+
Parachain: getParaId(origin)
|
|
4081
|
+
}]
|
|
4082
|
+
}
|
|
4083
|
+
};
|
|
4084
|
+
};
|
|
4085
|
+
var getDestXcmFee = /*#__PURE__*/function () {
|
|
4086
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(options) {
|
|
4087
|
+
var api, origin, destination, currency, forwardedXcms, asset, feeAsset, originFee, disableFallback, resolvedFeeAsset, calcPaymentInfoFee, dryRunResult, fee, newForwardedXcms, destParaId;
|
|
4088
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
4089
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
4090
|
+
case 0:
|
|
4091
|
+
api = options.api, origin = options.origin, destination = options.destination, currency = options.currency, forwardedXcms = options.forwardedXcms, asset = options.asset, feeAsset = options.feeAsset, originFee = options.originFee, disableFallback = options.disableFallback;
|
|
4092
|
+
resolvedFeeAsset = feeAsset ? resolveFeeAsset(feeAsset, origin, destination, currency) : undefined;
|
|
4093
|
+
calcPaymentInfoFee = /*#__PURE__*/function () {
|
|
4094
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
4095
|
+
var originAsset;
|
|
4096
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
4097
|
+
while (1) switch (_context.prev = _context.next) {
|
|
4098
|
+
case 0:
|
|
4099
|
+
if (!(destination === 'Ethereum')) {
|
|
4100
|
+
_context.next = 2;
|
|
4101
|
+
break;
|
|
4102
|
+
}
|
|
4103
|
+
return _context.abrupt("return", 0n);
|
|
4104
|
+
case 2:
|
|
4105
|
+
originAsset = assets.findAsset(origin, currency, destination);
|
|
4106
|
+
if (originAsset) {
|
|
4107
|
+
_context.next = 5;
|
|
4108
|
+
break;
|
|
4109
|
+
}
|
|
4110
|
+
throw new assets.InvalidCurrencyError("Currency ".concat(JSON.stringify(currency), " not found in ").concat(origin));
|
|
4111
|
+
case 5:
|
|
4112
|
+
if (!originAsset.multiLocation) {
|
|
4113
|
+
_context.next = 19;
|
|
4114
|
+
break;
|
|
4115
|
+
}
|
|
4116
|
+
_context.prev = 6;
|
|
4117
|
+
_context.next = 9;
|
|
4118
|
+
return getReverseTxFee(_objectSpread2(_objectSpread2({}, options), {}, {
|
|
4119
|
+
destination: destination
|
|
4120
|
+
}), {
|
|
4121
|
+
multilocation: originAsset.multiLocation
|
|
4122
|
+
});
|
|
4123
|
+
case 9:
|
|
4124
|
+
return _context.abrupt("return", _context.sent);
|
|
4125
|
+
case 12:
|
|
4126
|
+
_context.prev = 12;
|
|
4127
|
+
_context.t0 = _context["catch"](6);
|
|
4128
|
+
if (!(_context.t0 instanceof assets.InvalidCurrencyError)) {
|
|
4129
|
+
_context.next = 18;
|
|
4130
|
+
break;
|
|
4131
|
+
}
|
|
4132
|
+
_context.next = 17;
|
|
4133
|
+
return getReverseTxFee(_objectSpread2(_objectSpread2({}, options), {}, {
|
|
4134
|
+
destination: destination
|
|
4135
|
+
}), {
|
|
4136
|
+
symbol: originAsset.symbol
|
|
4137
|
+
});
|
|
4138
|
+
case 17:
|
|
4139
|
+
return _context.abrupt("return", _context.sent);
|
|
4140
|
+
case 18:
|
|
4141
|
+
throw _context.t0;
|
|
4142
|
+
case 19:
|
|
4143
|
+
_context.next = 21;
|
|
4144
|
+
return getReverseTxFee(_objectSpread2(_objectSpread2({}, options), {}, {
|
|
4145
|
+
destination: destination
|
|
4146
|
+
}), {
|
|
4147
|
+
symbol: originAsset.symbol
|
|
4148
|
+
});
|
|
4149
|
+
case 21:
|
|
4150
|
+
return _context.abrupt("return", _context.sent);
|
|
4151
|
+
case 22:
|
|
4152
|
+
case "end":
|
|
4153
|
+
return _context.stop();
|
|
4154
|
+
}
|
|
4155
|
+
}, _callee, null, [[6, 12]]);
|
|
4156
|
+
}));
|
|
4157
|
+
return function calcPaymentInfoFee() {
|
|
4158
|
+
return _ref2.apply(this, arguments);
|
|
4159
|
+
};
|
|
4160
|
+
}();
|
|
4161
|
+
if (!(!assets.hasDryRunSupport(destination) || !forwardedXcms || destination === 'Ethereum')) {
|
|
4162
|
+
_context2.next = 8;
|
|
4163
|
+
break;
|
|
4164
|
+
}
|
|
4165
|
+
_context2.next = 6;
|
|
4166
|
+
return calcPaymentInfoFee();
|
|
4167
|
+
case 6:
|
|
4168
|
+
_context2.t0 = _context2.sent;
|
|
4169
|
+
return _context2.abrupt("return", {
|
|
4170
|
+
fee: _context2.t0,
|
|
4171
|
+
feeType: 'paymentInfo'
|
|
4172
|
+
});
|
|
4173
|
+
case 8:
|
|
4174
|
+
_context2.next = 10;
|
|
4175
|
+
return api.getDryRunXcm({
|
|
4176
|
+
originLocation: addXcmVersionHeader(createOriginLocation(origin, destination), exports.Version.V4),
|
|
4177
|
+
xcm: forwardedXcms[1][0],
|
|
4178
|
+
node: destination,
|
|
4179
|
+
origin: origin,
|
|
4180
|
+
asset: asset,
|
|
4181
|
+
originFee: originFee,
|
|
4182
|
+
feeAsset: resolvedFeeAsset,
|
|
4183
|
+
amount: BigInt(currency.amount)
|
|
4184
|
+
});
|
|
4185
|
+
case 10:
|
|
4186
|
+
dryRunResult = _context2.sent;
|
|
4187
|
+
if (dryRunResult.success) {
|
|
4188
|
+
_context2.next = 19;
|
|
4189
|
+
break;
|
|
4190
|
+
}
|
|
4191
|
+
if (!disableFallback) {
|
|
4192
|
+
_context2.next = 14;
|
|
4193
|
+
break;
|
|
4194
|
+
}
|
|
4195
|
+
return _context2.abrupt("return", {
|
|
4196
|
+
dryRunError: dryRunResult.failureReason
|
|
4197
|
+
});
|
|
4198
|
+
case 14:
|
|
4199
|
+
_context2.next = 16;
|
|
4200
|
+
return calcPaymentInfoFee();
|
|
4201
|
+
case 16:
|
|
4202
|
+
_context2.t1 = _context2.sent;
|
|
4203
|
+
_context2.t2 = dryRunResult.failureReason;
|
|
4204
|
+
return _context2.abrupt("return", {
|
|
4205
|
+
fee: _context2.t1,
|
|
4206
|
+
feeType: 'paymentInfo',
|
|
4207
|
+
dryRunError: _context2.t2
|
|
4208
|
+
});
|
|
4209
|
+
case 19:
|
|
4210
|
+
fee = dryRunResult.fee, newForwardedXcms = dryRunResult.forwardedXcms, destParaId = dryRunResult.destParaId;
|
|
4211
|
+
return _context2.abrupt("return", {
|
|
4212
|
+
fee: fee,
|
|
4213
|
+
feeType: 'dryRun',
|
|
4214
|
+
forwardedXcms: newForwardedXcms,
|
|
4215
|
+
destParaId: destParaId
|
|
4216
|
+
});
|
|
4217
|
+
case 21:
|
|
4218
|
+
case "end":
|
|
4219
|
+
return _context2.stop();
|
|
4220
|
+
}
|
|
4221
|
+
}, _callee2);
|
|
4222
|
+
}));
|
|
4223
|
+
return function getDestXcmFee(_x) {
|
|
4224
|
+
return _ref.apply(this, arguments);
|
|
4225
|
+
};
|
|
4226
|
+
}();
|
|
4227
|
+
|
|
4228
|
+
var dryRunInternal = /*#__PURE__*/function () {
|
|
4229
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
4230
|
+
var _intermediateFees$bri, _intermediateFees$ass, _processedBridgeHubDa, _destinationDryRun;
|
|
4231
|
+
var origin, destination, currency, api, tx, senderAddress, feeAsset, resolvedFeeAsset, asset, originDryRun, initialForwardedXcms, initialDestParaId, assetHubNode, bridgeHubNode, currentOrigin, forwardedXcms, nextParaId, intermediateFees, destinationDryRun, nextChain, hopApi, hopDryRun, newXcms, destParaId, processedBridgeHubData, ahApi, _yield$getParaEthTran, _yield$getParaEthTran2, bridgeFee;
|
|
4261
4232
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
4262
4233
|
while (1) switch (_context.prev = _context.next) {
|
|
4263
4234
|
case 0:
|
|
4264
|
-
|
|
4265
|
-
|
|
4266
|
-
|
|
4267
|
-
break;
|
|
4268
|
-
}
|
|
4269
|
-
throw new InvalidParameterError('AssetHub address is required');
|
|
4270
|
-
case 3:
|
|
4235
|
+
origin = options.origin, destination = options.destination, currency = options.currency, api = options.api, tx = options.tx, senderAddress = options.senderAddress, feeAsset = options.feeAsset;
|
|
4236
|
+
resolvedFeeAsset = feeAsset && origin === 'AssetHubPolkadot' ? resolveFeeAsset(feeAsset, origin, destination, currency) : undefined;
|
|
4237
|
+
asset = 'multiasset' in currency ? null : assets.findAssetForNodeOrThrow(origin, currency, destination);
|
|
4271
4238
|
_context.next = 5;
|
|
4272
|
-
return
|
|
4239
|
+
return api.getDryRunCall({
|
|
4240
|
+
tx: tx,
|
|
4241
|
+
node: origin,
|
|
4242
|
+
address: senderAddress,
|
|
4243
|
+
isFeeAsset: !!resolvedFeeAsset
|
|
4244
|
+
});
|
|
4273
4245
|
case 5:
|
|
4274
|
-
|
|
4275
|
-
if (
|
|
4246
|
+
originDryRun = _context.sent;
|
|
4247
|
+
if (originDryRun.success) {
|
|
4276
4248
|
_context.next = 8;
|
|
4277
4249
|
break;
|
|
4278
4250
|
}
|
|
4279
|
-
|
|
4251
|
+
return _context.abrupt("return", {
|
|
4252
|
+
origin: originDryRun
|
|
4253
|
+
});
|
|
4280
4254
|
case 8:
|
|
4281
|
-
|
|
4282
|
-
|
|
4283
|
-
|
|
4284
|
-
|
|
4285
|
-
|
|
4286
|
-
|
|
4287
|
-
|
|
4288
|
-
_context.next = 12;
|
|
4289
|
-
break;
|
|
4290
|
-
}
|
|
4291
|
-
throw new InvalidParameterError('Override multilocation is not supported for Evm transfers');
|
|
4292
|
-
case 12:
|
|
4293
|
-
foundAsset = assets.findAsset(from, currency, to);
|
|
4294
|
-
if (!(foundAsset === null)) {
|
|
4295
|
-
_context.next = 15;
|
|
4296
|
-
break;
|
|
4297
|
-
}
|
|
4298
|
-
throw new assets.InvalidCurrencyError("Origin node ".concat(from, " does not support currency ").concat(JSON.stringify(currency), "."));
|
|
4255
|
+
initialForwardedXcms = originDryRun.forwardedXcms, initialDestParaId = originDryRun.destParaId;
|
|
4256
|
+
assetHubNode = determineRelayChain(origin) === 'Polkadot' ? 'AssetHubPolkadot' : 'AssetHubKusama';
|
|
4257
|
+
bridgeHubNode = determineRelayChain(origin) === 'Polkadot' ? 'BridgeHubPolkadot' : 'BridgeHubKusama';
|
|
4258
|
+
currentOrigin = origin;
|
|
4259
|
+
forwardedXcms = initialForwardedXcms;
|
|
4260
|
+
nextParaId = initialDestParaId;
|
|
4261
|
+
intermediateFees = {};
|
|
4299
4262
|
case 15:
|
|
4300
|
-
if (!(
|
|
4301
|
-
_context.next =
|
|
4263
|
+
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)) {
|
|
4264
|
+
_context.next = 42;
|
|
4302
4265
|
break;
|
|
4303
4266
|
}
|
|
4304
|
-
|
|
4305
|
-
|
|
4306
|
-
|
|
4307
|
-
if (!(!ethAsset || !ethAsset.assetId)) {
|
|
4308
|
-
_context.next = 20;
|
|
4267
|
+
nextChain = getTNode(nextParaId, determineRelayChain(origin) === 'Polkadot' ? 'polkadot' : 'kusama');
|
|
4268
|
+
if (nextChain) {
|
|
4269
|
+
_context.next = 19;
|
|
4309
4270
|
break;
|
|
4310
4271
|
}
|
|
4311
|
-
throw new
|
|
4312
|
-
case
|
|
4313
|
-
|
|
4314
|
-
|
|
4315
|
-
|
|
4316
|
-
|
|
4317
|
-
"public": viem.createPublicClient({
|
|
4318
|
-
chain: signer.chain,
|
|
4319
|
-
transport: viem.http()
|
|
4320
|
-
}),
|
|
4321
|
-
wallet: signer
|
|
4322
|
-
}
|
|
4323
|
-
});
|
|
4324
|
-
if (!isEthersSigner(signer)) {
|
|
4325
|
-
_context.next = 27;
|
|
4272
|
+
throw new InvalidParameterError("Unable to find TNode for paraId ".concat(nextParaId));
|
|
4273
|
+
case 19:
|
|
4274
|
+
hopApi = api.clone();
|
|
4275
|
+
_context.prev = 20;
|
|
4276
|
+
if (assets.hasDryRunSupport(nextChain)) {
|
|
4277
|
+
_context.next = 24;
|
|
4326
4278
|
break;
|
|
4327
4279
|
}
|
|
4328
|
-
|
|
4329
|
-
|
|
4280
|
+
if (nextChain === destination) {
|
|
4281
|
+
destinationDryRun = {
|
|
4282
|
+
success: false,
|
|
4283
|
+
failureReason: "DryRunApi is not available on node ".concat(nextChain)
|
|
4284
|
+
};
|
|
4285
|
+
}
|
|
4286
|
+
return _context.abrupt("break", 42);
|
|
4330
4287
|
case 24:
|
|
4331
|
-
_context.
|
|
4288
|
+
_context.next = 26;
|
|
4289
|
+
return hopApi.init(nextChain, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
4290
|
+
case 26:
|
|
4332
4291
|
_context.next = 28;
|
|
4333
|
-
|
|
4334
|
-
|
|
4335
|
-
|
|
4292
|
+
return hopApi.getDryRunXcm({
|
|
4293
|
+
originLocation: addXcmVersionHeader(createOriginLocation(currentOrigin, nextChain), exports.Version.V4),
|
|
4294
|
+
xcm: forwardedXcms[1][0],
|
|
4295
|
+
node: nextChain,
|
|
4296
|
+
origin: currentOrigin,
|
|
4297
|
+
asset: asset,
|
|
4298
|
+
feeAsset: resolvedFeeAsset,
|
|
4299
|
+
originFee: originDryRun.fee,
|
|
4300
|
+
amount: BigInt(currency.amount)
|
|
4301
|
+
});
|
|
4336
4302
|
case 28:
|
|
4337
|
-
|
|
4338
|
-
if (
|
|
4339
|
-
|
|
4303
|
+
hopDryRun = _context.sent;
|
|
4304
|
+
if (nextChain === destination || sdkCommon.isRelayChain(nextChain) && !sdkCommon.isRelayChain(destination)) {
|
|
4305
|
+
destinationDryRun = hopDryRun;
|
|
4306
|
+
} else if (nextChain === assetHubNode) {
|
|
4307
|
+
intermediateFees.assetHub = hopDryRun;
|
|
4308
|
+
} else if (nextChain === bridgeHubNode) {
|
|
4309
|
+
intermediateFees.bridgeHub = hopDryRun;
|
|
4310
|
+
}
|
|
4311
|
+
if (hopDryRun.success) {
|
|
4312
|
+
_context.next = 32;
|
|
4340
4313
|
break;
|
|
4341
4314
|
}
|
|
4342
|
-
|
|
4343
|
-
case
|
|
4344
|
-
|
|
4345
|
-
|
|
4346
|
-
|
|
4347
|
-
|
|
4348
|
-
|
|
4349
|
-
|
|
4350
|
-
messageId = _context.sent;
|
|
4351
|
-
customXcm = createCustomXcmOnDest({
|
|
4352
|
-
api: api,
|
|
4353
|
-
address: address,
|
|
4354
|
-
scenario: 'ParaToPara',
|
|
4355
|
-
senderAddress: senderAddress,
|
|
4356
|
-
ahAddress: ahAddress,
|
|
4357
|
-
asset: _objectSpread2(_objectSpread2({}, foundAsset), {}, {
|
|
4358
|
-
amount: currency.amount
|
|
4359
|
-
})}, from, exports.Version.V4, messageId);
|
|
4315
|
+
return _context.abrupt("break", 42);
|
|
4316
|
+
case 32:
|
|
4317
|
+
newXcms = hopDryRun.forwardedXcms, destParaId = hopDryRun.destParaId;
|
|
4318
|
+
forwardedXcms = newXcms;
|
|
4319
|
+
nextParaId = destParaId;
|
|
4320
|
+
currentOrigin = nextChain;
|
|
4321
|
+
case 36:
|
|
4322
|
+
_context.prev = 36;
|
|
4360
4323
|
_context.next = 39;
|
|
4361
|
-
return
|
|
4324
|
+
return hopApi.disconnect();
|
|
4362
4325
|
case 39:
|
|
4363
|
-
|
|
4364
|
-
|
|
4365
|
-
|
|
4326
|
+
return _context.finish(36);
|
|
4327
|
+
case 40:
|
|
4328
|
+
_context.next = 15;
|
|
4329
|
+
break;
|
|
4366
4330
|
case 42:
|
|
4367
|
-
|
|
4368
|
-
|
|
4369
|
-
|
|
4370
|
-
|
|
4331
|
+
processedBridgeHubData = intermediateFees.bridgeHub;
|
|
4332
|
+
if (!((_intermediateFees$bri = intermediateFees.bridgeHub) !== null && _intermediateFees$bri !== void 0 && _intermediateFees$bri.success && destination === 'Ethereum')) {
|
|
4333
|
+
_context.next = 53;
|
|
4334
|
+
break;
|
|
4335
|
+
}
|
|
4336
|
+
ahApi = api.clone();
|
|
4337
|
+
_context.next = 47;
|
|
4338
|
+
return ahApi.init(assetHubNode, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
4339
|
+
case 47:
|
|
4340
|
+
_context.next = 49;
|
|
4341
|
+
return getParaEthTransferFees(ahApi);
|
|
4342
|
+
case 49:
|
|
4371
4343
|
_yield$getParaEthTran = _context.sent;
|
|
4372
|
-
_yield$getParaEthTran2 = _slicedToArray(_yield$getParaEthTran,
|
|
4344
|
+
_yield$getParaEthTran2 = _slicedToArray(_yield$getParaEthTran, 1);
|
|
4373
4345
|
bridgeFee = _yield$getParaEthTran2[0];
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
|
|
4378
|
-
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
// Assets including fee and the ERC20 asset, with fee be the first
|
|
4393
|
-
[[XCDOT, transferFee], [ethAsset.assetId, currency.amount.toString()]],
|
|
4394
|
-
// The TransferType corresponding to asset being sent, 2 represents `DestinationReserve`
|
|
4395
|
-
2,
|
|
4396
|
-
// index for the fee
|
|
4397
|
-
0,
|
|
4398
|
-
// The TransferType corresponding to fee asset
|
|
4399
|
-
2, customXcmOnDest]);
|
|
4346
|
+
processedBridgeHubData = _objectSpread2(_objectSpread2({}, intermediateFees.bridgeHub), {}, {
|
|
4347
|
+
fee: intermediateFees.bridgeHub.fee + bridgeFee
|
|
4348
|
+
});
|
|
4349
|
+
case 53:
|
|
4350
|
+
return _context.abrupt("return", {
|
|
4351
|
+
origin: originDryRun.success ? _objectSpread2(_objectSpread2({}, originDryRun), {}, {
|
|
4352
|
+
currency: resolvedFeeAsset ? resolvedFeeAsset.symbol : assets.getNativeAssetSymbol(origin)
|
|
4353
|
+
}) : originDryRun,
|
|
4354
|
+
assetHub: (_intermediateFees$ass = intermediateFees.assetHub) !== null && _intermediateFees$ass !== void 0 && _intermediateFees$ass.success ? _objectSpread2(_objectSpread2({}, intermediateFees.assetHub), {}, {
|
|
4355
|
+
currency: assets.getNativeAssetSymbol(assetHubNode)
|
|
4356
|
+
}) : intermediateFees.assetHub,
|
|
4357
|
+
bridgeHub: (_processedBridgeHubDa = processedBridgeHubData) !== null && _processedBridgeHubDa !== void 0 && _processedBridgeHubDa.success ? _objectSpread2(_objectSpread2({}, processedBridgeHubData), {}, {
|
|
4358
|
+
currency: assets.getNativeAssetSymbol(bridgeHubNode)
|
|
4359
|
+
}) : processedBridgeHubData,
|
|
4360
|
+
destination: (_destinationDryRun = destinationDryRun) !== null && _destinationDryRun !== void 0 && _destinationDryRun.success ? _objectSpread2(_objectSpread2({}, destinationDryRun), {}, {
|
|
4361
|
+
currency: asset === null || asset === void 0 ? void 0 : asset.symbol
|
|
4362
|
+
}) : destinationDryRun
|
|
4363
|
+
});
|
|
4400
4364
|
case 54:
|
|
4401
|
-
tx = _context.sent;
|
|
4402
|
-
return _context.abrupt("return", _typeof(tx) === 'object' ? tx.hash : tx);
|
|
4403
|
-
case 56:
|
|
4404
4365
|
case "end":
|
|
4405
4366
|
return _context.stop();
|
|
4406
4367
|
}
|
|
4407
|
-
}, _callee);
|
|
4368
|
+
}, _callee, null, [[20,, 36, 40]]);
|
|
4369
|
+
}));
|
|
4370
|
+
return function dryRunInternal(_x) {
|
|
4371
|
+
return _ref.apply(this, arguments);
|
|
4372
|
+
};
|
|
4373
|
+
}();
|
|
4374
|
+
|
|
4375
|
+
var dryRun = /*#__PURE__*/function () {
|
|
4376
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
4377
|
+
var api, senderAddress, origin;
|
|
4378
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
4379
|
+
while (1) switch (_context.prev = _context.next) {
|
|
4380
|
+
case 0:
|
|
4381
|
+
api = options.api, senderAddress = options.senderAddress, origin = options.origin;
|
|
4382
|
+
validateAddress(senderAddress, origin, false);
|
|
4383
|
+
_context.next = 4;
|
|
4384
|
+
return api.init(origin, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
4385
|
+
case 4:
|
|
4386
|
+
_context.prev = 4;
|
|
4387
|
+
_context.next = 7;
|
|
4388
|
+
return dryRunInternal(options);
|
|
4389
|
+
case 7:
|
|
4390
|
+
return _context.abrupt("return", _context.sent);
|
|
4391
|
+
case 8:
|
|
4392
|
+
_context.prev = 8;
|
|
4393
|
+
_context.next = 11;
|
|
4394
|
+
return api.disconnect();
|
|
4395
|
+
case 11:
|
|
4396
|
+
return _context.finish(8);
|
|
4397
|
+
case 12:
|
|
4398
|
+
case "end":
|
|
4399
|
+
return _context.stop();
|
|
4400
|
+
}
|
|
4401
|
+
}, _callee, null, [[4,, 8, 12]]);
|
|
4402
|
+
}));
|
|
4403
|
+
return function dryRun(_x) {
|
|
4404
|
+
return _ref.apply(this, arguments);
|
|
4405
|
+
};
|
|
4406
|
+
}();
|
|
4407
|
+
|
|
4408
|
+
var dryRunOrigin = /*#__PURE__*/function () {
|
|
4409
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
4410
|
+
var api, node, address, result;
|
|
4411
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
4412
|
+
while (1) switch (_context.prev = _context.next) {
|
|
4413
|
+
case 0:
|
|
4414
|
+
api = options.api, node = options.node, address = options.address;
|
|
4415
|
+
validateAddress(address, node, false);
|
|
4416
|
+
_context.next = 4;
|
|
4417
|
+
return api.init(node, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
4418
|
+
case 4:
|
|
4419
|
+
_context.prev = 4;
|
|
4420
|
+
_context.next = 7;
|
|
4421
|
+
return api.getDryRunCall(options);
|
|
4422
|
+
case 7:
|
|
4423
|
+
result = _context.sent;
|
|
4424
|
+
if (!result.success) {
|
|
4425
|
+
_context.next = 12;
|
|
4426
|
+
break;
|
|
4427
|
+
}
|
|
4428
|
+
return _context.abrupt("return", _objectSpread2(_objectSpread2({}, result), {}, {
|
|
4429
|
+
currency: assets.getNativeAssetSymbol(node)
|
|
4430
|
+
}));
|
|
4431
|
+
case 12:
|
|
4432
|
+
return _context.abrupt("return", result);
|
|
4433
|
+
case 13:
|
|
4434
|
+
_context.prev = 13;
|
|
4435
|
+
_context.next = 16;
|
|
4436
|
+
return api.disconnect();
|
|
4437
|
+
case 16:
|
|
4438
|
+
return _context.finish(13);
|
|
4439
|
+
case 17:
|
|
4440
|
+
case "end":
|
|
4441
|
+
return _context.stop();
|
|
4442
|
+
}
|
|
4443
|
+
}, _callee, null, [[4,, 13, 17]]);
|
|
4408
4444
|
}));
|
|
4409
|
-
return function
|
|
4410
|
-
return
|
|
4445
|
+
return function dryRunOrigin(_x) {
|
|
4446
|
+
return _ref.apply(this, arguments);
|
|
4411
4447
|
};
|
|
4412
4448
|
}();
|
|
4413
4449
|
|
|
@@ -4517,7 +4553,7 @@ var getOriginXcmFeeEstimate = /*#__PURE__*/function () {
|
|
|
4517
4553
|
|
|
4518
4554
|
var getXcmFee = /*#__PURE__*/function () {
|
|
4519
4555
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
4520
|
-
var api, tx, origin, destination, senderAddress, address, currency, feeAsset, disableFallback, asset, _yield$getOriginXcmFe, originFee, originCurrency, originFeeType, originDryRunError, initialForwardedXcm, initialDestParaId, destApi, destFeeRes, currentOrigin, forwardedXcms, nextParaId, intermediateFees, destinationFee, destinationFeeType, destinationDryRunError, nextChain, hopApi, hopResult, failingRecord, hopIsDestination, destFallback;
|
|
4556
|
+
var api, tx, origin, destination, senderAddress, address, currency, feeAsset, disableFallback, asset, _yield$getOriginXcmFe, originFee, originCurrency, originFeeType, originDryRunError, initialForwardedXcm, initialDestParaId, destApi, destFeeRes, assetHubNode, bridgeHubNode, currentOrigin, forwardedXcms, nextParaId, intermediateFees, destinationFee, destinationFeeType, destinationDryRunError, nextChain, hopApi, hopResult, failingRecord, hopIsDestination, destFallback, processedBridgeHubData, ahApi, _yield$getParaEthTran, _yield$getParaEthTran2, bridgeFee;
|
|
4521
4557
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
4522
4558
|
while (1) switch (_context.prev = _context.next) {
|
|
4523
4559
|
case 0:
|
|
@@ -4547,16 +4583,20 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
4547
4583
|
return api.disconnect();
|
|
4548
4584
|
case 14:
|
|
4549
4585
|
if (!(originDryRunError || originFeeType === 'paymentInfo')) {
|
|
4550
|
-
_context.next =
|
|
4586
|
+
_context.next = 30;
|
|
4551
4587
|
break;
|
|
4552
4588
|
}
|
|
4553
4589
|
destApi = api.clone();
|
|
4554
4590
|
_context.prev = 16;
|
|
4555
|
-
|
|
4591
|
+
if (!(destination !== 'Ethereum')) {
|
|
4592
|
+
_context.next = 20;
|
|
4593
|
+
break;
|
|
4594
|
+
}
|
|
4595
|
+
_context.next = 20;
|
|
4556
4596
|
return destApi.init(destination, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
4557
|
-
case
|
|
4597
|
+
case 20:
|
|
4558
4598
|
destApi.setDisconnectAllowed(false);
|
|
4559
|
-
_context.next =
|
|
4599
|
+
_context.next = 23;
|
|
4560
4600
|
return getDestXcmFee({
|
|
4561
4601
|
api: destApi,
|
|
4562
4602
|
forwardedXcms: undefined,
|
|
@@ -4570,7 +4610,7 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
4570
4610
|
senderAddress: senderAddress,
|
|
4571
4611
|
disableFallback: disableFallback
|
|
4572
4612
|
});
|
|
4573
|
-
case
|
|
4613
|
+
case 23:
|
|
4574
4614
|
destFeeRes = _context.sent;
|
|
4575
4615
|
return _context.abrupt("return", {
|
|
4576
4616
|
origin: _objectSpread2(_objectSpread2(_objectSpread2({}, originFee && {
|
|
@@ -4582,46 +4622,50 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
4582
4622
|
}, originDryRunError && {
|
|
4583
4623
|
dryRunError: originDryRunError
|
|
4584
4624
|
}),
|
|
4585
|
-
destination: _objectSpread2(_objectSpread2(_objectSpread2({}, destFeeRes.fee
|
|
4625
|
+
destination: _objectSpread2(_objectSpread2(_objectSpread2({}, destFeeRes.fee ? {
|
|
4586
4626
|
fee: destFeeRes.fee
|
|
4627
|
+
} : {
|
|
4628
|
+
fee: 0n
|
|
4587
4629
|
}), destFeeRes.feeType && {
|
|
4588
4630
|
feeType: destFeeRes.feeType
|
|
4589
4631
|
}), {}, {
|
|
4590
4632
|
currency: assets.getNativeAssetSymbol(destination)
|
|
4591
4633
|
})
|
|
4592
4634
|
});
|
|
4593
|
-
case
|
|
4594
|
-
_context.prev =
|
|
4635
|
+
case 25:
|
|
4636
|
+
_context.prev = 25;
|
|
4595
4637
|
destApi.setDisconnectAllowed(true);
|
|
4596
|
-
_context.next =
|
|
4638
|
+
_context.next = 29;
|
|
4597
4639
|
return destApi.disconnect();
|
|
4598
|
-
case 28:
|
|
4599
|
-
return _context.finish(24);
|
|
4600
4640
|
case 29:
|
|
4641
|
+
return _context.finish(25);
|
|
4642
|
+
case 30:
|
|
4643
|
+
assetHubNode = determineRelayChain(origin) === 'Polkadot' ? 'AssetHubPolkadot' : 'AssetHubKusama';
|
|
4644
|
+
bridgeHubNode = determineRelayChain(origin) === 'Polkadot' ? 'BridgeHubPolkadot' : 'BridgeHubKusama';
|
|
4601
4645
|
currentOrigin = origin;
|
|
4602
4646
|
forwardedXcms = initialForwardedXcm;
|
|
4603
4647
|
nextParaId = initialDestParaId;
|
|
4604
4648
|
intermediateFees = {};
|
|
4605
4649
|
destinationFee = 0n;
|
|
4606
|
-
destinationFeeType = 'paymentInfo';
|
|
4607
|
-
case
|
|
4650
|
+
destinationFeeType = destination === 'Ethereum' ? 'noFeeRequired' : 'paymentInfo';
|
|
4651
|
+
case 38:
|
|
4608
4652
|
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)) {
|
|
4609
|
-
_context.next =
|
|
4653
|
+
_context.next = 70;
|
|
4610
4654
|
break;
|
|
4611
4655
|
}
|
|
4612
4656
|
nextChain = getTNode(nextParaId, determineRelayChain(origin) === 'Polkadot' ? 'polkadot' : 'kusama');
|
|
4613
4657
|
if (!(nextChain === null)) {
|
|
4614
|
-
_context.next =
|
|
4658
|
+
_context.next = 42;
|
|
4615
4659
|
break;
|
|
4616
4660
|
}
|
|
4617
4661
|
throw new InvalidParameterError("Unable to find TNode for paraId ".concat(nextParaId));
|
|
4618
|
-
case
|
|
4662
|
+
case 42:
|
|
4619
4663
|
hopApi = api.clone();
|
|
4620
|
-
_context.prev =
|
|
4621
|
-
_context.next =
|
|
4664
|
+
_context.prev = 43;
|
|
4665
|
+
_context.next = 46;
|
|
4622
4666
|
return hopApi.init(nextChain, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
4623
|
-
case
|
|
4624
|
-
_context.next =
|
|
4667
|
+
case 46:
|
|
4668
|
+
_context.next = 48;
|
|
4625
4669
|
return getDestXcmFee({
|
|
4626
4670
|
api: hopApi,
|
|
4627
4671
|
forwardedXcms: forwardedXcms,
|
|
@@ -4635,10 +4679,10 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
4635
4679
|
originFee: originFee !== null && originFee !== void 0 ? originFee : 0n,
|
|
4636
4680
|
disableFallback: disableFallback
|
|
4637
4681
|
});
|
|
4638
|
-
case
|
|
4682
|
+
case 48:
|
|
4639
4683
|
hopResult = _context.sent;
|
|
4640
4684
|
if (!hopResult.dryRunError) {
|
|
4641
|
-
_context.next =
|
|
4685
|
+
_context.next = 60;
|
|
4642
4686
|
break;
|
|
4643
4687
|
}
|
|
4644
4688
|
failingRecord = {
|
|
@@ -4652,17 +4696,17 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
4652
4696
|
destinationFee = hopResult.fee;
|
|
4653
4697
|
destinationFeeType = hopResult.feeType; // paymentInfo
|
|
4654
4698
|
destinationDryRunError = hopResult.dryRunError;
|
|
4655
|
-
} else if (nextChain ===
|
|
4699
|
+
} else if (nextChain === assetHubNode) {
|
|
4656
4700
|
intermediateFees.assetHub = failingRecord;
|
|
4657
|
-
} else if (nextChain ===
|
|
4701
|
+
} else if (nextChain === bridgeHubNode) {
|
|
4658
4702
|
intermediateFees.bridgeHub = failingRecord;
|
|
4659
4703
|
}
|
|
4660
4704
|
// We failed before the true destination, use fallback via paymentInfo.
|
|
4661
4705
|
if (hopIsDestination) {
|
|
4662
|
-
_context.next =
|
|
4706
|
+
_context.next = 59;
|
|
4663
4707
|
break;
|
|
4664
4708
|
}
|
|
4665
|
-
_context.next =
|
|
4709
|
+
_context.next = 56;
|
|
4666
4710
|
return getDestXcmFee({
|
|
4667
4711
|
api: hopApi,
|
|
4668
4712
|
forwardedXcms: undefined,
|
|
@@ -4675,23 +4719,23 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
4675
4719
|
senderAddress: senderAddress,
|
|
4676
4720
|
disableFallback: disableFallback
|
|
4677
4721
|
});
|
|
4678
|
-
case
|
|
4722
|
+
case 56:
|
|
4679
4723
|
destFallback = _context.sent;
|
|
4680
4724
|
destinationFee = destFallback.fee;
|
|
4681
4725
|
destinationFeeType = destFallback.feeType;
|
|
4682
|
-
case
|
|
4683
|
-
return _context.abrupt("break",
|
|
4684
|
-
case
|
|
4726
|
+
case 59:
|
|
4727
|
+
return _context.abrupt("break", 70);
|
|
4728
|
+
case 60:
|
|
4685
4729
|
if (nextChain === destination || sdkCommon.isRelayChain(nextChain) && !sdkCommon.isRelayChain(destination)) {
|
|
4686
4730
|
destinationFee = hopResult.fee;
|
|
4687
4731
|
destinationFeeType = hopResult.feeType;
|
|
4688
|
-
} else if (nextChain ===
|
|
4732
|
+
} else if (nextChain === assetHubNode) {
|
|
4689
4733
|
intermediateFees.assetHub = {
|
|
4690
4734
|
fee: hopResult.fee,
|
|
4691
4735
|
feeType: hopResult.feeType,
|
|
4692
4736
|
currency: assets.getNativeAssetSymbol(nextChain)
|
|
4693
4737
|
};
|
|
4694
|
-
} else if (nextChain ===
|
|
4738
|
+
} else if (nextChain === bridgeHubNode) {
|
|
4695
4739
|
intermediateFees.bridgeHub = {
|
|
4696
4740
|
fee: hopResult.fee,
|
|
4697
4741
|
feeType: hopResult.feeType,
|
|
@@ -4701,16 +4745,36 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
4701
4745
|
forwardedXcms = hopResult.forwardedXcms;
|
|
4702
4746
|
nextParaId = hopResult.destParaId;
|
|
4703
4747
|
currentOrigin = nextChain;
|
|
4704
|
-
case 61:
|
|
4705
|
-
_context.prev = 61;
|
|
4706
|
-
_context.next = 64;
|
|
4707
|
-
return hopApi.disconnect();
|
|
4708
4748
|
case 64:
|
|
4709
|
-
|
|
4710
|
-
|
|
4711
|
-
|
|
4712
|
-
break;
|
|
4749
|
+
_context.prev = 64;
|
|
4750
|
+
_context.next = 67;
|
|
4751
|
+
return hopApi.disconnect();
|
|
4713
4752
|
case 67:
|
|
4753
|
+
return _context.finish(64);
|
|
4754
|
+
case 68:
|
|
4755
|
+
_context.next = 38;
|
|
4756
|
+
break;
|
|
4757
|
+
case 70:
|
|
4758
|
+
processedBridgeHubData = intermediateFees.bridgeHub;
|
|
4759
|
+
if (!(intermediateFees.bridgeHub && !intermediateFees.bridgeHub.dryRunError && destination === 'Ethereum')) {
|
|
4760
|
+
_context.next = 81;
|
|
4761
|
+
break;
|
|
4762
|
+
}
|
|
4763
|
+
ahApi = api.clone();
|
|
4764
|
+
_context.next = 75;
|
|
4765
|
+
return ahApi.init(assetHubNode, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
4766
|
+
case 75:
|
|
4767
|
+
_context.next = 77;
|
|
4768
|
+
return getParaEthTransferFees(ahApi);
|
|
4769
|
+
case 77:
|
|
4770
|
+
_yield$getParaEthTran = _context.sent;
|
|
4771
|
+
_yield$getParaEthTran2 = _slicedToArray(_yield$getParaEthTran, 1);
|
|
4772
|
+
bridgeFee = _yield$getParaEthTran2[0];
|
|
4773
|
+
processedBridgeHubData = _objectSpread2(_objectSpread2({}, intermediateFees.bridgeHub), {}, {
|
|
4774
|
+
fee: intermediateFees.bridgeHub.fee + bridgeFee
|
|
4775
|
+
});
|
|
4776
|
+
case 81:
|
|
4777
|
+
intermediateFees.bridgeHub = processedBridgeHubData;
|
|
4714
4778
|
return _context.abrupt("return", _objectSpread2(_objectSpread2({
|
|
4715
4779
|
origin: _objectSpread2(_objectSpread2(_objectSpread2({}, originFee && {
|
|
4716
4780
|
fee: originFee
|
|
@@ -4722,7 +4786,7 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
4722
4786
|
dryRunError: originDryRunError
|
|
4723
4787
|
})
|
|
4724
4788
|
}, intermediateFees), {}, {
|
|
4725
|
-
destination: _objectSpread2(_objectSpread2(_objectSpread2({}, destinationFee && {
|
|
4789
|
+
destination: _objectSpread2(_objectSpread2(_objectSpread2({}, destinationFee !== undefined && {
|
|
4726
4790
|
fee: destinationFee
|
|
4727
4791
|
}), destinationFeeType && {
|
|
4728
4792
|
feeType: destinationFeeType
|
|
@@ -4732,11 +4796,11 @@ var getXcmFee = /*#__PURE__*/function () {
|
|
|
4732
4796
|
dryRunError: destinationDryRunError
|
|
4733
4797
|
})
|
|
4734
4798
|
}));
|
|
4735
|
-
case
|
|
4799
|
+
case 83:
|
|
4736
4800
|
case "end":
|
|
4737
4801
|
return _context.stop();
|
|
4738
4802
|
}
|
|
4739
|
-
}, _callee, null, [[16,,
|
|
4803
|
+
}, _callee, null, [[16,, 25, 30], [43,, 64, 68]]);
|
|
4740
4804
|
}));
|
|
4741
4805
|
return function getXcmFee(_x) {
|
|
4742
4806
|
return _ref2.apply(this, arguments);
|
|
@@ -4747,11 +4811,11 @@ var BRIDGE_FEE_DOT = 682395810n; // 0.068239581 DOT
|
|
|
4747
4811
|
var BRIDGE_FEE_KSM = 12016807000n; // 0.012016807 KSM
|
|
4748
4812
|
var getXcmFeeEstimate = /*#__PURE__*/function () {
|
|
4749
4813
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
4750
|
-
var api, origin, destination,
|
|
4814
|
+
var api, origin, destination, currency, originFeeDetails, destApi, originAsset, currencyInput, destinationFee, destFeeDetails;
|
|
4751
4815
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
4752
4816
|
while (1) switch (_context.prev = _context.next) {
|
|
4753
4817
|
case 0:
|
|
4754
|
-
api = options.api, origin = options.origin, destination = options.destination,
|
|
4818
|
+
api = options.api, origin = options.origin, destination = options.destination, currency = options.currency;
|
|
4755
4819
|
if (!(origin === 'AssetHubPolkadot' && destination === 'AssetHubKusama')) {
|
|
4756
4820
|
_context.next = 3;
|
|
4757
4821
|
break;
|
|
@@ -4787,32 +4851,35 @@ var getXcmFeeEstimate = /*#__PURE__*/function () {
|
|
|
4787
4851
|
case 7:
|
|
4788
4852
|
originFeeDetails = _context.sent;
|
|
4789
4853
|
destApi = api.clone();
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
case 11:
|
|
4793
|
-
if (!('multiasset' in currency)) {
|
|
4794
|
-
_context.next = 13;
|
|
4854
|
+
if (!(destination !== 'Ethereum')) {
|
|
4855
|
+
_context.next = 12;
|
|
4795
4856
|
break;
|
|
4796
4857
|
}
|
|
4797
|
-
|
|
4798
|
-
|
|
4858
|
+
_context.next = 12;
|
|
4859
|
+
return destApi.init(destination, DRY_RUN_CLIENT_TIMEOUT_MS);
|
|
4860
|
+
case 12:
|
|
4799
4861
|
originAsset = assets.findAssetForNodeOrThrow(origin, currency, destination);
|
|
4800
4862
|
currencyInput = originAsset.multiLocation ? {
|
|
4801
4863
|
multilocation: originAsset.multiLocation
|
|
4802
4864
|
} : {
|
|
4803
4865
|
symbol: originAsset.symbol
|
|
4804
4866
|
};
|
|
4805
|
-
|
|
4806
|
-
|
|
4807
|
-
|
|
4808
|
-
}
|
|
4809
|
-
|
|
4810
|
-
|
|
4867
|
+
if (!(destination === 'Ethereum')) {
|
|
4868
|
+
_context.next = 18;
|
|
4869
|
+
break;
|
|
4870
|
+
}
|
|
4871
|
+
_context.t0 = 0n;
|
|
4872
|
+
_context.next = 21;
|
|
4873
|
+
break;
|
|
4874
|
+
case 18:
|
|
4811
4875
|
_context.next = 20;
|
|
4812
|
-
return
|
|
4876
|
+
return getReverseTxFee(_objectSpread2(_objectSpread2({}, options), {}, {
|
|
4877
|
+
destination: destination
|
|
4878
|
+
}), currencyInput);
|
|
4813
4879
|
case 20:
|
|
4814
|
-
|
|
4815
|
-
|
|
4880
|
+
_context.t0 = _context.sent;
|
|
4881
|
+
case 21:
|
|
4882
|
+
destinationFee = _context.t0;
|
|
4816
4883
|
destFeeDetails = {
|
|
4817
4884
|
fee: destinationFee,
|
|
4818
4885
|
currency: assets.getNativeAssetSymbol(destination)
|
|
@@ -4878,10 +4945,6 @@ var determineAssetCheckEnabled = function determineAssetCheckEnabled(origin, cur
|
|
|
4878
4945
|
return 'multiasset' in currency || 'multilocation' in currency && assets.isOverrideMultiLocationSpecifier(currency.multilocation) ? false : originNode.assetCheckEnabled;
|
|
4879
4946
|
};
|
|
4880
4947
|
|
|
4881
|
-
var isBridgeTransfer = function isBridgeTransfer(origin, destination) {
|
|
4882
|
-
return origin === 'AssetHubPolkadot' && destination === 'AssetHubKusama' || origin === 'AssetHubKusama' && destination === 'AssetHubPolkadot';
|
|
4883
|
-
};
|
|
4884
|
-
|
|
4885
4948
|
var resolveAsset = function resolveAsset(currency, origin, destination, assetCheckEnabled) {
|
|
4886
4949
|
return assetCheckEnabled ? assets.findAsset(origin, currency, !sdkCommon.isTMultiLocation(destination) ? destination : null) : null;
|
|
4887
4950
|
};
|
|
@@ -5000,7 +5063,7 @@ var validateDestination = function validateDestination(origin, destination) {
|
|
|
5000
5063
|
throw new IncompatibleNodesError("Transfers to Ethereum are only supported from: ".concat(allowedChainsToEthereum.join(', ')));
|
|
5001
5064
|
}
|
|
5002
5065
|
var isMultiLocationDestination = _typeof(destination) === 'object';
|
|
5003
|
-
var isBridge =
|
|
5066
|
+
var isBridge = !sdkCommon.isTMultiLocation(destination) && sdkCommon.isDotKsmBridge(origin, destination);
|
|
5004
5067
|
var isRelayDestination = !sdkCommon.isTMultiLocation(destination) && sdkCommon.isRelayChain(destination);
|
|
5005
5068
|
if (!isRelayDestination && !isMultiLocationDestination) {
|
|
5006
5069
|
var originRelayChainSymbol = assets.getRelayChainSymbol(origin);
|
|
@@ -5021,7 +5084,7 @@ var validateAssetSpecifiers = function validateAssetSpecifiers(assetCheckEnabled
|
|
|
5021
5084
|
|
|
5022
5085
|
var send = /*#__PURE__*/function () {
|
|
5023
5086
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
5024
|
-
var api, origin, currency, feeAsset, address, destination, paraIdTo, version, senderAddress, ahAddress, pallet, method, isBridge, assetCheckEnabled, asset, resolvedFeeAsset, isLocalTransfer, overriddenAsset, resolvedAsset, originNode;
|
|
5087
|
+
var api, origin, currency, feeAsset, address, destination, paraIdTo, version, senderAddress, ahAddress, pallet, method, isBridge, assetCheckEnabled, asset, resolvedFeeAsset, isLocalTransfer, overriddenAsset, resolvedAsset, originNode, finalAsset;
|
|
5025
5088
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
5026
5089
|
while (1) switch (_context.prev = _context.next) {
|
|
5027
5090
|
case 0:
|
|
@@ -5030,7 +5093,7 @@ var send = /*#__PURE__*/function () {
|
|
|
5030
5093
|
validateDestination(origin, destination);
|
|
5031
5094
|
validateDestinationAddress(address, destination);
|
|
5032
5095
|
if (senderAddress) validateAddress(senderAddress, origin, false);
|
|
5033
|
-
isBridge =
|
|
5096
|
+
isBridge = !sdkCommon.isTMultiLocation(destination) && sdkCommon.isDotKsmBridge(origin, destination);
|
|
5034
5097
|
assetCheckEnabled = determineAssetCheckEnabled(origin, currency);
|
|
5035
5098
|
validateAssetSpecifiers(assetCheckEnabled, currency);
|
|
5036
5099
|
asset = resolveAsset(currency, origin, destination, assetCheckEnabled);
|
|
@@ -5100,11 +5163,15 @@ var send = /*#__PURE__*/function () {
|
|
|
5100
5163
|
symbol: 'symbol' in currency ? currency.symbol : undefined
|
|
5101
5164
|
};
|
|
5102
5165
|
originNode = getNode(origin);
|
|
5166
|
+
finalAsset = 'multiasset' in currency ? _objectSpread2(_objectSpread2({}, resolvedAsset), {}, {
|
|
5167
|
+
amount: 0,
|
|
5168
|
+
assetId: '1'
|
|
5169
|
+
}) : _objectSpread2(_objectSpread2({}, resolvedAsset), {}, {
|
|
5170
|
+
amount: currency.amount
|
|
5171
|
+
});
|
|
5103
5172
|
return _context.abrupt("return", originNode.transfer({
|
|
5104
5173
|
api: api,
|
|
5105
|
-
asset:
|
|
5106
|
-
amount: 'multiasset' in currency ? 0 : currency.amount
|
|
5107
|
-
}),
|
|
5174
|
+
asset: finalAsset,
|
|
5108
5175
|
feeAsset: resolvedFeeAsset,
|
|
5109
5176
|
address: address,
|
|
5110
5177
|
to: destination,
|
|
@@ -5116,7 +5183,7 @@ var send = /*#__PURE__*/function () {
|
|
|
5116
5183
|
pallet: pallet,
|
|
5117
5184
|
method: method
|
|
5118
5185
|
}));
|
|
5119
|
-
case
|
|
5186
|
+
case 31:
|
|
5120
5187
|
case "end":
|
|
5121
5188
|
return _context.stop();
|
|
5122
5189
|
}
|
|
@@ -8822,145 +8889,399 @@ var getTransferableAmountInternal = /*#__PURE__*/function () {
|
|
|
8822
8889
|
currency: currency,
|
|
8823
8890
|
disableFallback: false
|
|
8824
8891
|
});
|
|
8825
|
-
case 17:
|
|
8826
|
-
_yield$getOriginXcmFe = _context.sent;
|
|
8827
|
-
fee = _yield$getOriginXcmFe.fee;
|
|
8828
|
-
if (!(fee === undefined)) {
|
|
8829
|
-
_context.next = 21;
|
|
8830
|
-
break;
|
|
8831
|
-
}
|
|
8832
|
-
throw new InvalidParameterError("Cannot get origin xcm fee for currency ".concat(JSON.stringify(currency), " on node ").concat(node, "."));
|
|
8833
|
-
case 21:
|
|
8834
|
-
feeToSubtract = fee;
|
|
8835
|
-
case 22:
|
|
8836
|
-
transferable = balance - edBN - feeToSubtract;
|
|
8837
|
-
return _context.abrupt("return", transferable > 0n ? transferable : 0n);
|
|
8838
|
-
case 24:
|
|
8892
|
+
case 17:
|
|
8893
|
+
_yield$getOriginXcmFe = _context.sent;
|
|
8894
|
+
fee = _yield$getOriginXcmFe.fee;
|
|
8895
|
+
if (!(fee === undefined)) {
|
|
8896
|
+
_context.next = 21;
|
|
8897
|
+
break;
|
|
8898
|
+
}
|
|
8899
|
+
throw new InvalidParameterError("Cannot get origin xcm fee for currency ".concat(JSON.stringify(currency), " on node ").concat(node, "."));
|
|
8900
|
+
case 21:
|
|
8901
|
+
feeToSubtract = fee;
|
|
8902
|
+
case 22:
|
|
8903
|
+
transferable = balance - edBN - feeToSubtract;
|
|
8904
|
+
return _context.abrupt("return", transferable > 0n ? transferable : 0n);
|
|
8905
|
+
case 24:
|
|
8906
|
+
case "end":
|
|
8907
|
+
return _context.stop();
|
|
8908
|
+
}
|
|
8909
|
+
}, _callee);
|
|
8910
|
+
}));
|
|
8911
|
+
return function getTransferableAmountInternal(_x) {
|
|
8912
|
+
return _ref2.apply(this, arguments);
|
|
8913
|
+
};
|
|
8914
|
+
}();
|
|
8915
|
+
var getTransferableAmount = /*#__PURE__*/function () {
|
|
8916
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(options) {
|
|
8917
|
+
var api;
|
|
8918
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
8919
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
8920
|
+
case 0:
|
|
8921
|
+
api = options.api;
|
|
8922
|
+
api.setDisconnectAllowed(false);
|
|
8923
|
+
_context2.prev = 2;
|
|
8924
|
+
_context2.next = 5;
|
|
8925
|
+
return getTransferableAmountInternal(options);
|
|
8926
|
+
case 5:
|
|
8927
|
+
return _context2.abrupt("return", _context2.sent);
|
|
8928
|
+
case 6:
|
|
8929
|
+
_context2.prev = 6;
|
|
8930
|
+
api.setDisconnectAllowed(true);
|
|
8931
|
+
_context2.next = 10;
|
|
8932
|
+
return api.disconnect();
|
|
8933
|
+
case 10:
|
|
8934
|
+
return _context2.finish(6);
|
|
8935
|
+
case 11:
|
|
8936
|
+
case "end":
|
|
8937
|
+
return _context2.stop();
|
|
8938
|
+
}
|
|
8939
|
+
}, _callee2, null, [[2,, 6, 11]]);
|
|
8940
|
+
}));
|
|
8941
|
+
return function getTransferableAmount(_x2) {
|
|
8942
|
+
return _ref3.apply(this, arguments);
|
|
8943
|
+
};
|
|
8944
|
+
}();
|
|
8945
|
+
|
|
8946
|
+
var ETH_RPC = 'https://ethereum.publicnode.com/';
|
|
8947
|
+
var ETH_ID = 1;
|
|
8948
|
+
var ERC20_ABI = ['function balanceOf(address) view returns (uint256)'];
|
|
8949
|
+
function getEthErc20Balance(_x, _x2) {
|
|
8950
|
+
return _getEthErc20Balance.apply(this, arguments);
|
|
8951
|
+
}
|
|
8952
|
+
function _getEthErc20Balance() {
|
|
8953
|
+
_getEthErc20Balance = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(currency, address) {
|
|
8954
|
+
var _rpc$id, rpc, id, asset, provider, tokenAddress, token;
|
|
8955
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
8956
|
+
while (1) switch (_context.prev = _context.next) {
|
|
8957
|
+
case 0:
|
|
8958
|
+
_rpc$id = {
|
|
8959
|
+
rpc: ETH_RPC,
|
|
8960
|
+
id: ETH_ID
|
|
8961
|
+
}, rpc = _rpc$id.rpc, id = _rpc$id.id;
|
|
8962
|
+
asset = assets.findAssetForNodeOrThrow('Ethereum', currency, null);
|
|
8963
|
+
if (!(!assets.isForeignAsset(asset) || !asset.assetId)) {
|
|
8964
|
+
_context.next = 4;
|
|
8965
|
+
break;
|
|
8966
|
+
}
|
|
8967
|
+
throw new InvalidParameterError("Asset ".concat(JSON.stringify(asset), " is not a foreign asset."));
|
|
8968
|
+
case 4:
|
|
8969
|
+
provider = new ethers.ethers.JsonRpcProvider(rpc, id);
|
|
8970
|
+
if (!(asset.symbol === 'ETH')) {
|
|
8971
|
+
_context.next = 9;
|
|
8972
|
+
break;
|
|
8973
|
+
}
|
|
8974
|
+
_context.next = 8;
|
|
8975
|
+
return provider.getBalance(address);
|
|
8976
|
+
case 8:
|
|
8977
|
+
return _context.abrupt("return", _context.sent);
|
|
8978
|
+
case 9:
|
|
8979
|
+
tokenAddress = asset.assetId;
|
|
8980
|
+
token = new ethers.ethers.Contract(tokenAddress, ERC20_ABI, provider);
|
|
8981
|
+
_context.next = 13;
|
|
8982
|
+
return token.balanceOf(address);
|
|
8983
|
+
case 13:
|
|
8984
|
+
return _context.abrupt("return", _context.sent);
|
|
8985
|
+
case 14:
|
|
8986
|
+
case "end":
|
|
8987
|
+
return _context.stop();
|
|
8988
|
+
}
|
|
8989
|
+
}, _callee);
|
|
8990
|
+
}));
|
|
8991
|
+
return _getEthErc20Balance.apply(this, arguments);
|
|
8992
|
+
}
|
|
8993
|
+
|
|
8994
|
+
var buildDestInfo = /*#__PURE__*/function () {
|
|
8995
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
8996
|
+
var api, origin, destination, address, currency, originFee, destAsset, isFeeAssetAh, destFeeDetail, assetHubFee, bridgeFee, destApi, destCurrency, edDest, edDestBn, destBalance, destAmount, destBalanceSufficient, destBalanceSufficientResult, destBalanceAfter, destbalanceAfterResult, receivedAmount, isAssetHubToAssetHubRoute, nativeAssetOfOriginSymbol, isOriginAssetNative, destXcmFeeBalance, isDestFeeInNativeCurrency, destRecipientNativeBalance, destXcmFeeBalanceAfter;
|
|
8997
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
8998
|
+
while (1) switch (_context.prev = _context.next) {
|
|
8999
|
+
case 0:
|
|
9000
|
+
api = _ref.api, origin = _ref.origin, destination = _ref.destination, address = _ref.address, currency = _ref.currency, originFee = _ref.originFee, destAsset = _ref.destAsset, isFeeAssetAh = _ref.isFeeAssetAh, destFeeDetail = _ref.destFeeDetail, assetHubFee = _ref.assetHubFee, bridgeFee = _ref.bridgeFee;
|
|
9001
|
+
destApi = api.clone();
|
|
9002
|
+
if (!(destination !== 'Ethereum')) {
|
|
9003
|
+
_context.next = 5;
|
|
9004
|
+
break;
|
|
9005
|
+
}
|
|
9006
|
+
_context.next = 5;
|
|
9007
|
+
return destApi.init(destination);
|
|
9008
|
+
case 5:
|
|
9009
|
+
destCurrency = destAsset.multiLocation ? {
|
|
9010
|
+
multilocation: destAsset.multiLocation
|
|
9011
|
+
} : {
|
|
9012
|
+
symbol: destAsset.symbol
|
|
9013
|
+
};
|
|
9014
|
+
edDest = assets.getExistentialDeposit(destination, destCurrency);
|
|
9015
|
+
if (edDest) {
|
|
9016
|
+
_context.next = 9;
|
|
9017
|
+
break;
|
|
9018
|
+
}
|
|
9019
|
+
throw new InvalidParameterError("Existential deposit not found for ".concat(destination, " with currency ").concat(JSON.stringify(currency)));
|
|
9020
|
+
case 9:
|
|
9021
|
+
edDestBn = BigInt(edDest);
|
|
9022
|
+
if (!(destination === 'Ethereum')) {
|
|
9023
|
+
_context.next = 16;
|
|
9024
|
+
break;
|
|
9025
|
+
}
|
|
9026
|
+
_context.next = 13;
|
|
9027
|
+
return getEthErc20Balance(destCurrency, address);
|
|
9028
|
+
case 13:
|
|
9029
|
+
_context.t0 = _context.sent;
|
|
9030
|
+
_context.next = 19;
|
|
9031
|
+
break;
|
|
9032
|
+
case 16:
|
|
9033
|
+
_context.next = 18;
|
|
9034
|
+
return getAssetBalanceInternal({
|
|
9035
|
+
api: destApi,
|
|
9036
|
+
address: address,
|
|
9037
|
+
node: destination,
|
|
9038
|
+
currency: destCurrency
|
|
9039
|
+
});
|
|
9040
|
+
case 18:
|
|
9041
|
+
_context.t0 = _context.sent;
|
|
9042
|
+
case 19:
|
|
9043
|
+
destBalance = _context.t0;
|
|
9044
|
+
destAmount = isFeeAssetAh ? BigInt(currency.amount) - originFee : BigInt(currency.amount);
|
|
9045
|
+
destBalanceSufficient = destAmount - destFeeDetail.fee > (destBalance < edDestBn ? edDestBn : 0);
|
|
9046
|
+
destBalanceSufficientResult = destFeeDetail.currency !== destAsset.symbol && destination !== 'Ethereum' ? new UnableToComputeError('Unable to compute if dest balance will be sufficient. Fee currency is not the same') : destBalanceSufficient;
|
|
9047
|
+
destBalanceAfter = destBalance - (destFeeDetail.currency === destAsset.symbol ? destFeeDetail.fee : 0n) + destAmount;
|
|
9048
|
+
destbalanceAfterResult = destFeeDetail.currency !== destAsset.symbol && destination !== 'Ethereum' ? new UnableToComputeError('Unable to compute if dest balance will be sufficient. Fee currency is not the same') : destBalanceAfter;
|
|
9049
|
+
isAssetHubToAssetHubRoute = origin === 'AssetHubKusama' && destination === 'AssetHubPolkadot' || origin === 'AssetHubPolkadot' && destination === 'AssetHubKusama';
|
|
9050
|
+
if (isAssetHubToAssetHubRoute) {
|
|
9051
|
+
nativeAssetOfOriginSymbol = assets.getNativeAssetSymbol(origin);
|
|
9052
|
+
isOriginAssetNative = false;
|
|
9053
|
+
if (destAsset.symbol === nativeAssetOfOriginSymbol) {
|
|
9054
|
+
isOriginAssetNative = true;
|
|
9055
|
+
}
|
|
9056
|
+
if (isOriginAssetNative) {
|
|
9057
|
+
if (bridgeFee === undefined) {
|
|
9058
|
+
receivedAmount = new UnableToComputeError("bridgeFee is required for native asset transfer from ".concat(origin, " to ").concat(destination, " but was not provided."));
|
|
9059
|
+
} else {
|
|
9060
|
+
receivedAmount = BigInt(currency.amount) - originFee - bridgeFee;
|
|
9061
|
+
}
|
|
9062
|
+
} else {
|
|
9063
|
+
receivedAmount = new UnableToComputeError("Unable to compute received amount: The transferred asset (".concat(destAsset.symbol, ") is not the native asset (").concat(nativeAssetOfOriginSymbol, ") of origin ").concat(origin, " for the ").concat(origin, "->").concat(destination, " route."));
|
|
9064
|
+
}
|
|
9065
|
+
} else {
|
|
9066
|
+
if (destbalanceAfterResult instanceof UnableToComputeError) {
|
|
9067
|
+
receivedAmount = destbalanceAfterResult;
|
|
9068
|
+
} else {
|
|
9069
|
+
receivedAmount = destbalanceAfterResult - destBalance;
|
|
9070
|
+
}
|
|
9071
|
+
}
|
|
9072
|
+
if (destination === 'Ethereum' && assetHubFee && !(receivedAmount instanceof UnableToComputeError)) {
|
|
9073
|
+
receivedAmount -= assetHubFee;
|
|
9074
|
+
}
|
|
9075
|
+
isDestFeeInNativeCurrency = destFeeDetail.currency === assets.getNativeAssetSymbol(destination);
|
|
9076
|
+
if (!isDestFeeInNativeCurrency) {
|
|
9077
|
+
_context.next = 43;
|
|
9078
|
+
break;
|
|
9079
|
+
}
|
|
9080
|
+
if (!(destination === 'Ethereum')) {
|
|
9081
|
+
_context.next = 36;
|
|
9082
|
+
break;
|
|
9083
|
+
}
|
|
9084
|
+
_context.next = 33;
|
|
9085
|
+
return getEthErc20Balance({
|
|
9086
|
+
symbol: assets.getNativeAssetSymbol(destination)
|
|
9087
|
+
}, address);
|
|
9088
|
+
case 33:
|
|
9089
|
+
_context.t1 = _context.sent;
|
|
9090
|
+
_context.next = 39;
|
|
9091
|
+
break;
|
|
9092
|
+
case 36:
|
|
9093
|
+
_context.next = 38;
|
|
9094
|
+
return getBalanceNativeInternal({
|
|
9095
|
+
address: address,
|
|
9096
|
+
node: destination,
|
|
9097
|
+
api: destApi
|
|
9098
|
+
});
|
|
9099
|
+
case 38:
|
|
9100
|
+
_context.t1 = _context.sent;
|
|
9101
|
+
case 39:
|
|
9102
|
+
destRecipientNativeBalance = _context.t1;
|
|
9103
|
+
destXcmFeeBalance = destRecipientNativeBalance;
|
|
9104
|
+
_context.next = 44;
|
|
9105
|
+
break;
|
|
9106
|
+
case 43:
|
|
9107
|
+
destXcmFeeBalance = destBalance;
|
|
9108
|
+
case 44:
|
|
9109
|
+
destXcmFeeBalanceAfter = isFeeAssetAh ? destBalanceAfter : destXcmFeeBalance - destFeeDetail.fee + (destFeeDetail.currency === destAsset.symbol ? BigInt(currency.amount) : 0n);
|
|
9110
|
+
return _context.abrupt("return", {
|
|
9111
|
+
receivedCurrency: {
|
|
9112
|
+
sufficient: destBalanceSufficientResult,
|
|
9113
|
+
receivedAmount: receivedAmount,
|
|
9114
|
+
balance: destBalance,
|
|
9115
|
+
balanceAfter: destbalanceAfterResult,
|
|
9116
|
+
currencySymbol: destAsset.symbol,
|
|
9117
|
+
existentialDeposit: edDestBn
|
|
9118
|
+
},
|
|
9119
|
+
xcmFee: {
|
|
9120
|
+
fee: destFeeDetail.fee,
|
|
9121
|
+
balance: destXcmFeeBalance,
|
|
9122
|
+
balanceAfter: destXcmFeeBalanceAfter,
|
|
9123
|
+
currencySymbol: destFeeDetail.currency
|
|
9124
|
+
}
|
|
9125
|
+
});
|
|
9126
|
+
case 46:
|
|
8839
9127
|
case "end":
|
|
8840
9128
|
return _context.stop();
|
|
8841
9129
|
}
|
|
8842
9130
|
}, _callee);
|
|
8843
9131
|
}));
|
|
8844
|
-
return function
|
|
9132
|
+
return function buildDestInfo(_x) {
|
|
8845
9133
|
return _ref2.apply(this, arguments);
|
|
8846
9134
|
};
|
|
8847
9135
|
}();
|
|
8848
|
-
|
|
8849
|
-
|
|
8850
|
-
|
|
8851
|
-
|
|
8852
|
-
|
|
9136
|
+
|
|
9137
|
+
var buildHopInfo = /*#__PURE__*/function () {
|
|
9138
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
9139
|
+
var api, node, feeData, originNode, currency, senderAddress, ahAddress, hopApi, resolvedAddress, nativeBalanceOnHop, nativeAssetSymbolOnHop, xcmFeeDetails, isBridgeHubNode, hopAsset, hopCurrencyPayload, balance, ed;
|
|
9140
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
9141
|
+
while (1) switch (_context.prev = _context.next) {
|
|
8853
9142
|
case 0:
|
|
8854
|
-
api =
|
|
8855
|
-
api.
|
|
8856
|
-
|
|
8857
|
-
|
|
8858
|
-
|
|
8859
|
-
|
|
8860
|
-
|
|
8861
|
-
|
|
8862
|
-
|
|
8863
|
-
|
|
8864
|
-
|
|
8865
|
-
|
|
8866
|
-
|
|
8867
|
-
|
|
8868
|
-
case
|
|
9143
|
+
api = _ref.api, node = _ref.node, feeData = _ref.feeData, originNode = _ref.originNode, currency = _ref.currency, senderAddress = _ref.senderAddress, ahAddress = _ref.ahAddress;
|
|
9144
|
+
hopApi = api.clone();
|
|
9145
|
+
_context.next = 4;
|
|
9146
|
+
return hopApi.init(node);
|
|
9147
|
+
case 4:
|
|
9148
|
+
hopApi.setDisconnectAllowed(false);
|
|
9149
|
+
_context.prev = 5;
|
|
9150
|
+
resolvedAddress = assets.isNodeEvm(originNode) && ahAddress ? ahAddress : senderAddress;
|
|
9151
|
+
_context.next = 9;
|
|
9152
|
+
return getBalanceNativeInternal({
|
|
9153
|
+
api: hopApi,
|
|
9154
|
+
address: resolvedAddress,
|
|
9155
|
+
node: node
|
|
9156
|
+
});
|
|
9157
|
+
case 9:
|
|
9158
|
+
nativeBalanceOnHop = _context.sent;
|
|
9159
|
+
nativeAssetSymbolOnHop = assets.getNativeAssetSymbol(node);
|
|
9160
|
+
xcmFeeDetails = {
|
|
9161
|
+
fee: feeData.fee,
|
|
9162
|
+
balance: nativeBalanceOnHop,
|
|
9163
|
+
currencySymbol: nativeAssetSymbolOnHop
|
|
9164
|
+
};
|
|
9165
|
+
isBridgeHubNode = node.includes('BridgeHub');
|
|
9166
|
+
if (!isBridgeHubNode) {
|
|
9167
|
+
_context.next = 17;
|
|
9168
|
+
break;
|
|
9169
|
+
}
|
|
9170
|
+
return _context.abrupt("return", {
|
|
9171
|
+
currencySymbol: assets.getNativeAssetSymbol(node),
|
|
9172
|
+
xcmFee: xcmFeeDetails
|
|
9173
|
+
});
|
|
9174
|
+
case 17:
|
|
9175
|
+
hopAsset = assets.findAssetOnDestOrThrow(originNode, node, currency);
|
|
9176
|
+
hopCurrencyPayload = hopAsset.multiLocation ? {
|
|
9177
|
+
multilocation: hopAsset.multiLocation
|
|
9178
|
+
} : {
|
|
9179
|
+
symbol: hopAsset.symbol
|
|
9180
|
+
};
|
|
9181
|
+
_context.next = 21;
|
|
9182
|
+
return getAssetBalanceInternal({
|
|
9183
|
+
api: hopApi,
|
|
9184
|
+
address: resolvedAddress,
|
|
9185
|
+
node: node,
|
|
9186
|
+
currency: hopCurrencyPayload
|
|
9187
|
+
});
|
|
9188
|
+
case 21:
|
|
9189
|
+
balance = _context.sent;
|
|
9190
|
+
ed = assets.getExistentialDeposit(node, hopCurrencyPayload);
|
|
9191
|
+
if (ed) {
|
|
9192
|
+
_context.next = 25;
|
|
9193
|
+
break;
|
|
9194
|
+
}
|
|
9195
|
+
throw new InvalidParameterError("Existential deposit not found for node ".concat(node, " with currency ").concat(JSON.stringify(hopCurrencyPayload)));
|
|
9196
|
+
case 25:
|
|
9197
|
+
return _context.abrupt("return", {
|
|
9198
|
+
balance: balance,
|
|
9199
|
+
currencySymbol: hopAsset.symbol,
|
|
9200
|
+
existentialDeposit: BigInt(ed),
|
|
9201
|
+
xcmFee: xcmFeeDetails
|
|
9202
|
+
});
|
|
9203
|
+
case 26:
|
|
9204
|
+
_context.prev = 26;
|
|
9205
|
+
hopApi.setDisconnectAllowed(true);
|
|
9206
|
+
_context.next = 30;
|
|
9207
|
+
return hopApi.disconnect();
|
|
9208
|
+
case 30:
|
|
9209
|
+
return _context.finish(26);
|
|
9210
|
+
case 31:
|
|
8869
9211
|
case "end":
|
|
8870
|
-
return
|
|
9212
|
+
return _context.stop();
|
|
8871
9213
|
}
|
|
8872
|
-
},
|
|
9214
|
+
}, _callee, null, [[5,, 26, 31]]);
|
|
8873
9215
|
}));
|
|
8874
|
-
return function
|
|
8875
|
-
return
|
|
9216
|
+
return function buildHopInfo(_x) {
|
|
9217
|
+
return _ref2.apply(this, arguments);
|
|
8876
9218
|
};
|
|
8877
9219
|
}();
|
|
8878
9220
|
|
|
8879
9221
|
var getTransferInfo = /*#__PURE__*/function () {
|
|
8880
9222
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
8881
|
-
var api, tx, origin, destination, senderAddress, address, currency, feeAsset, resolvedFeeAsset,
|
|
9223
|
+
var api, tx, origin, destination, senderAddress, ahAddress, address, currency, feeAsset, resolvedFeeAsset, destAsset, originBalanceFee, originBalance, edOrigin, edOriginBn, _yield$getXcmFee, _yield$getXcmFee$orig, originFee, originFeeCurrency, assetHubFeeResult, bridgeHubFeeResult, destFeeDetail, isFeeAssetAh, originBalanceAfter, originBalanceFeeAfter, originBalanceNativeSufficient, originBalanceSufficient, assetHub, bridgeHub, bridgeHubNode, destinationInfo;
|
|
8882
9224
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
8883
9225
|
while (1) switch (_context.prev = _context.next) {
|
|
8884
9226
|
case 0:
|
|
8885
|
-
api = _ref.api, tx = _ref.tx, origin = _ref.origin, destination = _ref.destination, senderAddress = _ref.senderAddress, address = _ref.address, currency = _ref.currency, feeAsset = _ref.feeAsset;
|
|
9227
|
+
api = _ref.api, tx = _ref.tx, origin = _ref.origin, destination = _ref.destination, senderAddress = _ref.senderAddress, ahAddress = _ref.ahAddress, address = _ref.address, currency = _ref.currency, feeAsset = _ref.feeAsset;
|
|
9228
|
+
if (!(assets.isNodeEvm(origin) && !ahAddress)) {
|
|
9229
|
+
_context.next = 3;
|
|
9230
|
+
break;
|
|
9231
|
+
}
|
|
9232
|
+
throw new InvalidParameterError("ahAddress is required for EVM origin ".concat(origin, "."));
|
|
9233
|
+
case 3:
|
|
8886
9234
|
resolvedFeeAsset = feeAsset ? resolveFeeAsset(feeAsset, origin, destination, currency) : undefined;
|
|
8887
|
-
_context.next =
|
|
9235
|
+
_context.next = 6;
|
|
8888
9236
|
return api.init(origin);
|
|
8889
|
-
case
|
|
9237
|
+
case 6:
|
|
8890
9238
|
api.setDisconnectAllowed(false);
|
|
8891
|
-
|
|
8892
|
-
_context.next = 8;
|
|
8893
|
-
return destApi.init(destination);
|
|
8894
|
-
case 8:
|
|
8895
|
-
destApi.setDisconnectAllowed(false);
|
|
8896
|
-
_context.prev = 9;
|
|
9239
|
+
_context.prev = 7;
|
|
8897
9240
|
destAsset = assets.findAssetOnDestOrThrow(origin, destination, currency);
|
|
8898
|
-
destCurrency = destAsset.multiLocation ? {
|
|
8899
|
-
multilocation: destAsset.multiLocation
|
|
8900
|
-
} : {
|
|
8901
|
-
symbol: destAsset.symbol
|
|
8902
|
-
};
|
|
8903
9241
|
if (!(feeAsset && resolvedFeeAsset)) {
|
|
8904
|
-
_context.next =
|
|
9242
|
+
_context.next = 15;
|
|
8905
9243
|
break;
|
|
8906
9244
|
}
|
|
8907
|
-
_context.next =
|
|
9245
|
+
_context.next = 12;
|
|
8908
9246
|
return getAssetBalanceInternal({
|
|
8909
9247
|
api: api,
|
|
8910
9248
|
address: senderAddress,
|
|
8911
9249
|
node: origin,
|
|
8912
9250
|
currency: feeAsset
|
|
8913
9251
|
});
|
|
8914
|
-
case
|
|
9252
|
+
case 12:
|
|
8915
9253
|
_context.t0 = _context.sent;
|
|
8916
|
-
_context.next =
|
|
9254
|
+
_context.next = 18;
|
|
8917
9255
|
break;
|
|
8918
|
-
case
|
|
8919
|
-
_context.next =
|
|
9256
|
+
case 15:
|
|
9257
|
+
_context.next = 17;
|
|
8920
9258
|
return getBalanceNativeInternal({
|
|
8921
9259
|
api: api,
|
|
8922
9260
|
address: senderAddress,
|
|
8923
9261
|
node: origin
|
|
8924
9262
|
});
|
|
8925
|
-
case
|
|
9263
|
+
case 17:
|
|
8926
9264
|
_context.t0 = _context.sent;
|
|
8927
|
-
case
|
|
9265
|
+
case 18:
|
|
8928
9266
|
originBalanceFee = _context.t0;
|
|
8929
|
-
_context.next =
|
|
9267
|
+
_context.next = 21;
|
|
8930
9268
|
return getAssetBalanceInternal({
|
|
8931
9269
|
api: api,
|
|
8932
9270
|
address: senderAddress,
|
|
8933
9271
|
node: origin,
|
|
8934
9272
|
currency: currency
|
|
8935
9273
|
});
|
|
8936
|
-
case
|
|
9274
|
+
case 21:
|
|
8937
9275
|
originBalance = _context.sent;
|
|
8938
|
-
_context.next = 27;
|
|
8939
|
-
return getAssetBalanceInternal({
|
|
8940
|
-
api: destApi,
|
|
8941
|
-
address: address,
|
|
8942
|
-
node: destination,
|
|
8943
|
-
currency: destCurrency
|
|
8944
|
-
});
|
|
8945
|
-
case 27:
|
|
8946
|
-
destBalance = _context.sent;
|
|
8947
9276
|
edOrigin = assets.getExistentialDeposit(origin, currency);
|
|
8948
9277
|
if (edOrigin) {
|
|
8949
|
-
_context.next =
|
|
9278
|
+
_context.next = 25;
|
|
8950
9279
|
break;
|
|
8951
9280
|
}
|
|
8952
9281
|
throw new InvalidParameterError("Existential deposit not found for ".concat(origin, " with currency ").concat(JSON.stringify(currency)));
|
|
8953
|
-
case
|
|
9282
|
+
case 25:
|
|
8954
9283
|
edOriginBn = BigInt(edOrigin);
|
|
8955
|
-
|
|
8956
|
-
if (edDest) {
|
|
8957
|
-
_context.next = 35;
|
|
8958
|
-
break;
|
|
8959
|
-
}
|
|
8960
|
-
throw new InvalidParameterError("Existential deposit not found for ".concat(destination, " with currency ").concat(JSON.stringify(currency)));
|
|
8961
|
-
case 35:
|
|
8962
|
-
edDestBn = BigInt(edDest);
|
|
8963
|
-
_context.next = 38;
|
|
9284
|
+
_context.next = 28;
|
|
8964
9285
|
return getXcmFee({
|
|
8965
9286
|
api: api,
|
|
8966
9287
|
tx: tx,
|
|
@@ -8972,51 +9293,76 @@ var getTransferInfo = /*#__PURE__*/function () {
|
|
|
8972
9293
|
feeAsset: feeAsset,
|
|
8973
9294
|
disableFallback: false
|
|
8974
9295
|
});
|
|
8975
|
-
case
|
|
9296
|
+
case 28:
|
|
8976
9297
|
_yield$getXcmFee = _context.sent;
|
|
8977
9298
|
_yield$getXcmFee$orig = _yield$getXcmFee.origin;
|
|
8978
9299
|
originFee = _yield$getXcmFee$orig.fee;
|
|
8979
9300
|
originFeeCurrency = _yield$getXcmFee$orig.currency;
|
|
8980
|
-
|
|
8981
|
-
|
|
8982
|
-
|
|
9301
|
+
assetHubFeeResult = _yield$getXcmFee.assetHub;
|
|
9302
|
+
bridgeHubFeeResult = _yield$getXcmFee.bridgeHub;
|
|
9303
|
+
destFeeDetail = _yield$getXcmFee.destination;
|
|
8983
9304
|
if (!(originFee === undefined)) {
|
|
8984
|
-
_context.next =
|
|
9305
|
+
_context.next = 37;
|
|
8985
9306
|
break;
|
|
8986
9307
|
}
|
|
8987
9308
|
throw new InvalidParameterError("Cannot get origin xcm fee for currency ".concat(JSON.stringify(currency), " on node ").concat(origin, "."));
|
|
8988
|
-
case
|
|
8989
|
-
isDestFeeInNativeCurrency = destFeeCurrency === assets.getNativeAssetSymbol(destination);
|
|
8990
|
-
if (!isDestFeeInNativeCurrency) {
|
|
8991
|
-
_context.next = 55;
|
|
8992
|
-
break;
|
|
8993
|
-
}
|
|
8994
|
-
_context.next = 51;
|
|
8995
|
-
return getBalanceNativeInternal({
|
|
8996
|
-
address: address,
|
|
8997
|
-
node: destination,
|
|
8998
|
-
api: destApi
|
|
8999
|
-
});
|
|
9000
|
-
case 51:
|
|
9001
|
-
destRecipientNativeBalance = _context.sent;
|
|
9002
|
-
destXcmFeeBalance = destRecipientNativeBalance;
|
|
9003
|
-
_context.next = 56;
|
|
9004
|
-
break;
|
|
9005
|
-
case 55:
|
|
9006
|
-
destXcmFeeBalance = destBalance;
|
|
9007
|
-
case 56:
|
|
9309
|
+
case 37:
|
|
9008
9310
|
isFeeAssetAh = origin === 'AssetHubPolkadot' && resolvedFeeAsset && assets.isAssetEqual(resolvedFeeAsset, destAsset);
|
|
9009
9311
|
originBalanceAfter = originBalance - BigInt(currency.amount);
|
|
9010
9312
|
originBalanceFeeAfter = isFeeAssetAh ? originBalanceFee - BigInt(currency.amount) : originBalanceFee - originFee;
|
|
9011
9313
|
originBalanceNativeSufficient = originBalanceFee >= originFee;
|
|
9012
9314
|
originBalanceSufficient = originBalanceAfter >= edOriginBn;
|
|
9013
|
-
|
|
9014
|
-
|
|
9015
|
-
|
|
9016
|
-
|
|
9017
|
-
|
|
9018
|
-
|
|
9019
|
-
|
|
9315
|
+
if (!assetHubFeeResult) {
|
|
9316
|
+
_context.next = 46;
|
|
9317
|
+
break;
|
|
9318
|
+
}
|
|
9319
|
+
_context.next = 45;
|
|
9320
|
+
return buildHopInfo({
|
|
9321
|
+
api: api,
|
|
9322
|
+
node: determineRelayChain(origin) === 'Polkadot' ? 'AssetHubPolkadot' : 'AssetHubKusama',
|
|
9323
|
+
feeData: assetHubFeeResult,
|
|
9324
|
+
originNode: origin,
|
|
9325
|
+
currency: currency,
|
|
9326
|
+
senderAddress: senderAddress,
|
|
9327
|
+
ahAddress: ahAddress
|
|
9328
|
+
});
|
|
9329
|
+
case 45:
|
|
9330
|
+
assetHub = _context.sent;
|
|
9331
|
+
case 46:
|
|
9332
|
+
if (!bridgeHubFeeResult) {
|
|
9333
|
+
_context.next = 51;
|
|
9334
|
+
break;
|
|
9335
|
+
}
|
|
9336
|
+
bridgeHubNode = determineRelayChain(origin) === 'Polkadot' ? 'BridgeHubPolkadot' : 'BridgeHubKusama';
|
|
9337
|
+
_context.next = 50;
|
|
9338
|
+
return buildHopInfo({
|
|
9339
|
+
api: api,
|
|
9340
|
+
node: bridgeHubNode,
|
|
9341
|
+
feeData: bridgeHubFeeResult,
|
|
9342
|
+
originNode: origin,
|
|
9343
|
+
currency: currency,
|
|
9344
|
+
senderAddress: senderAddress,
|
|
9345
|
+
ahAddress: ahAddress
|
|
9346
|
+
});
|
|
9347
|
+
case 50:
|
|
9348
|
+
bridgeHub = _context.sent;
|
|
9349
|
+
case 51:
|
|
9350
|
+
_context.next = 53;
|
|
9351
|
+
return buildDestInfo({
|
|
9352
|
+
api: api,
|
|
9353
|
+
origin: origin,
|
|
9354
|
+
destination: destination,
|
|
9355
|
+
address: address,
|
|
9356
|
+
currency: currency,
|
|
9357
|
+
destAsset: destAsset,
|
|
9358
|
+
originFee: originFee,
|
|
9359
|
+
isFeeAssetAh: !!isFeeAssetAh,
|
|
9360
|
+
destFeeDetail: destFeeDetail,
|
|
9361
|
+
assetHubFee: assetHubFeeResult === null || assetHubFeeResult === void 0 ? void 0 : assetHubFeeResult.fee,
|
|
9362
|
+
bridgeFee: bridgeHubFeeResult === null || bridgeHubFeeResult === void 0 ? void 0 : bridgeHubFeeResult.fee
|
|
9363
|
+
});
|
|
9364
|
+
case 53:
|
|
9365
|
+
destinationInfo = _context.sent;
|
|
9020
9366
|
return _context.abrupt("return", {
|
|
9021
9367
|
chain: {
|
|
9022
9368
|
origin: origin,
|
|
@@ -9039,57 +9385,69 @@ var getTransferInfo = /*#__PURE__*/function () {
|
|
|
9039
9385
|
currencySymbol: originFeeCurrency
|
|
9040
9386
|
}
|
|
9041
9387
|
},
|
|
9042
|
-
|
|
9043
|
-
|
|
9044
|
-
|
|
9045
|
-
receivedAmount: receivedAmount,
|
|
9046
|
-
balance: destBalance,
|
|
9047
|
-
balanceAfter: destbalanceAfterResult,
|
|
9048
|
-
currencySymbol: destAsset.symbol,
|
|
9049
|
-
existentialDeposit: edDestBn
|
|
9050
|
-
},
|
|
9051
|
-
xcmFee: {
|
|
9052
|
-
fee: destFee,
|
|
9053
|
-
balance: destXcmFeeBalance,
|
|
9054
|
-
balanceAfter: destXcmFeeBalanceAfter,
|
|
9055
|
-
currencySymbol: destFeeCurrency
|
|
9056
|
-
}
|
|
9057
|
-
}
|
|
9388
|
+
assetHub: assetHub,
|
|
9389
|
+
bridgeHub: bridgeHub,
|
|
9390
|
+
destination: destinationInfo
|
|
9058
9391
|
});
|
|
9059
|
-
case
|
|
9060
|
-
_context.prev =
|
|
9392
|
+
case 55:
|
|
9393
|
+
_context.prev = 55;
|
|
9061
9394
|
api.setDisconnectAllowed(true);
|
|
9062
|
-
|
|
9063
|
-
_context.next = 74;
|
|
9395
|
+
_context.next = 59;
|
|
9064
9396
|
return api.disconnect();
|
|
9065
|
-
case
|
|
9066
|
-
_context.
|
|
9067
|
-
|
|
9068
|
-
case 76:
|
|
9069
|
-
return _context.finish(69);
|
|
9070
|
-
case 77:
|
|
9397
|
+
case 59:
|
|
9398
|
+
return _context.finish(55);
|
|
9399
|
+
case 60:
|
|
9071
9400
|
case "end":
|
|
9072
9401
|
return _context.stop();
|
|
9073
9402
|
}
|
|
9074
|
-
}, _callee, null, [[
|
|
9403
|
+
}, _callee, null, [[7,, 55, 60]]);
|
|
9075
9404
|
}));
|
|
9076
9405
|
return function getTransferInfo(_x) {
|
|
9077
9406
|
return _ref2.apply(this, arguments);
|
|
9078
9407
|
};
|
|
9079
9408
|
}();
|
|
9080
9409
|
|
|
9410
|
+
var calculateTotalXcmFee = function calculateTotalXcmFee(feeResult) {
|
|
9411
|
+
var _feeResult$assetHub;
|
|
9412
|
+
var totalFee = 0n;
|
|
9413
|
+
if (((_feeResult$assetHub = feeResult.assetHub) === null || _feeResult$assetHub === void 0 ? void 0 : _feeResult$assetHub.fee) !== undefined) {
|
|
9414
|
+
totalFee += feeResult.assetHub.fee;
|
|
9415
|
+
}
|
|
9416
|
+
if (feeResult.destination.fee !== undefined) {
|
|
9417
|
+
totalFee += feeResult.destination.fee;
|
|
9418
|
+
}
|
|
9419
|
+
return totalFee;
|
|
9420
|
+
};
|
|
9081
9421
|
var verifyEdOnDestinationInternal = /*#__PURE__*/function () {
|
|
9082
9422
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
9083
|
-
var api, tx, origin, destination, address, senderAddress, feeAsset, currency, destApi, asset, destCurrency, ed, edBN, balance,
|
|
9423
|
+
var api, tx, origin, destination, address, senderAddress, feeAsset, currency, destApi, asset, destCurrency, ed, edBN, balance, xcmFeeResult, dryRunError, _xcmFeeResult$destina, destFee, destFeeCurrency, destDryRunError, totalFee, method, feeToSubtract;
|
|
9084
9424
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
9085
9425
|
while (1) switch (_context.prev = _context.next) {
|
|
9086
9426
|
case 0:
|
|
9087
9427
|
api = _ref.api, tx = _ref.tx, origin = _ref.origin, destination = _ref.destination, address = _ref.address, senderAddress = _ref.senderAddress, feeAsset = _ref.feeAsset, currency = _ref.currency;
|
|
9428
|
+
if (!(destination === 'Ethereum')) {
|
|
9429
|
+
_context.next = 3;
|
|
9430
|
+
break;
|
|
9431
|
+
}
|
|
9432
|
+
return _context.abrupt("return", true);
|
|
9433
|
+
case 3:
|
|
9088
9434
|
validateAddress(address, destination);
|
|
9435
|
+
if (!(origin === 'AssetHubPolkadot' && destination === 'AssetHubKusama')) {
|
|
9436
|
+
_context.next = 6;
|
|
9437
|
+
break;
|
|
9438
|
+
}
|
|
9439
|
+
throw new InvalidParameterError('Kusama is outside of Polkadot ecosystem, thus function is unable to verify the existential deposit for it.');
|
|
9440
|
+
case 6:
|
|
9441
|
+
if (!(origin === 'AssetHubKusama' && destination === 'AssetHubPolkadot')) {
|
|
9442
|
+
_context.next = 8;
|
|
9443
|
+
break;
|
|
9444
|
+
}
|
|
9445
|
+
throw new InvalidParameterError('Polkadot is outside of Kusama ecosystem, thus function is unable to verify the existential deposit for it.');
|
|
9446
|
+
case 8:
|
|
9089
9447
|
destApi = api.clone();
|
|
9090
|
-
_context.next =
|
|
9448
|
+
_context.next = 11;
|
|
9091
9449
|
return destApi.init(destination);
|
|
9092
|
-
case
|
|
9450
|
+
case 11:
|
|
9093
9451
|
asset = assets.findAssetOnDestOrThrow(origin, destination, currency);
|
|
9094
9452
|
destCurrency = asset.multiLocation ? {
|
|
9095
9453
|
multilocation: asset.multiLocation
|
|
@@ -9098,22 +9456,22 @@ var verifyEdOnDestinationInternal = /*#__PURE__*/function () {
|
|
|
9098
9456
|
};
|
|
9099
9457
|
ed = assets.getExistentialDeposit(destination, destCurrency);
|
|
9100
9458
|
if (!(ed === null)) {
|
|
9101
|
-
_context.next =
|
|
9459
|
+
_context.next = 16;
|
|
9102
9460
|
break;
|
|
9103
9461
|
}
|
|
9104
9462
|
throw new InvalidParameterError("Cannot get existential deposit for currency ".concat(JSON.stringify(currency)));
|
|
9105
|
-
case
|
|
9463
|
+
case 16:
|
|
9106
9464
|
edBN = BigInt(ed);
|
|
9107
|
-
_context.next =
|
|
9465
|
+
_context.next = 19;
|
|
9108
9466
|
return getAssetBalanceInternal({
|
|
9109
9467
|
address: address,
|
|
9110
9468
|
node: destination,
|
|
9111
9469
|
api: destApi,
|
|
9112
9470
|
currency: destCurrency
|
|
9113
9471
|
});
|
|
9114
|
-
case
|
|
9472
|
+
case 19:
|
|
9115
9473
|
balance = _context.sent;
|
|
9116
|
-
_context.next =
|
|
9474
|
+
_context.next = 22;
|
|
9117
9475
|
return getXcmFee({
|
|
9118
9476
|
api: api,
|
|
9119
9477
|
tx: tx,
|
|
@@ -9125,39 +9483,42 @@ var verifyEdOnDestinationInternal = /*#__PURE__*/function () {
|
|
|
9125
9483
|
feeAsset: feeAsset,
|
|
9126
9484
|
disableFallback: false
|
|
9127
9485
|
});
|
|
9128
|
-
case
|
|
9129
|
-
|
|
9130
|
-
dryRunError =
|
|
9131
|
-
_yield$getXcmFee$dest = _yield$getXcmFee.destination;
|
|
9132
|
-
destFee = _yield$getXcmFee$dest.fee;
|
|
9133
|
-
destFeeCurrency = _yield$getXcmFee$dest.currency;
|
|
9134
|
-
destDryRunError = _yield$getXcmFee$dest.dryRunError;
|
|
9486
|
+
case 22:
|
|
9487
|
+
xcmFeeResult = _context.sent;
|
|
9488
|
+
dryRunError = xcmFeeResult.origin.dryRunError, _xcmFeeResult$destina = xcmFeeResult.destination, destFee = _xcmFeeResult$destina.fee, destFeeCurrency = _xcmFeeResult$destina.currency, destDryRunError = _xcmFeeResult$destina.dryRunError;
|
|
9135
9489
|
if (!(destFee === undefined)) {
|
|
9136
|
-
_context.next =
|
|
9490
|
+
_context.next = 26;
|
|
9137
9491
|
break;
|
|
9138
9492
|
}
|
|
9139
9493
|
throw new InvalidParameterError("Cannot get destination xcm fee for currency ".concat(JSON.stringify(currency), " on node ").concat(destination, "."));
|
|
9140
|
-
case
|
|
9494
|
+
case 26:
|
|
9141
9495
|
if (!dryRunError) {
|
|
9142
|
-
_context.next =
|
|
9496
|
+
_context.next = 28;
|
|
9143
9497
|
break;
|
|
9144
9498
|
}
|
|
9145
9499
|
throw new DryRunFailedError(dryRunError, 'origin');
|
|
9146
|
-
case
|
|
9500
|
+
case 28:
|
|
9147
9501
|
if (!destDryRunError) {
|
|
9148
|
-
_context.next =
|
|
9502
|
+
_context.next = 30;
|
|
9149
9503
|
break;
|
|
9150
9504
|
}
|
|
9151
9505
|
throw new UnableToComputeError("Unable to compute fee for the destination asset. Destination dry run error: ".concat(destDryRunError));
|
|
9152
|
-
case
|
|
9506
|
+
case 30:
|
|
9153
9507
|
if (!(assets.normalizeSymbol(asset.symbol) !== assets.normalizeSymbol(destFeeCurrency))) {
|
|
9154
|
-
_context.next =
|
|
9508
|
+
_context.next = 32;
|
|
9155
9509
|
break;
|
|
9156
9510
|
}
|
|
9157
9511
|
throw new UnableToComputeError("The XCM fee could not be calculated because the origin or destination chain does not support DryRun.\n As a result, fee estimation is only available through PaymentInfo, which provides the cost in the native asset.\n This limitation restricts support to transfers involving the native asset of the Destination chain only.");
|
|
9158
|
-
case
|
|
9159
|
-
|
|
9160
|
-
|
|
9512
|
+
case 32:
|
|
9513
|
+
totalFee = calculateTotalXcmFee(xcmFeeResult);
|
|
9514
|
+
method = api.getMethod(tx);
|
|
9515
|
+
if (method === 'transfer_assets_using_type_and_then' || method === 'transferAssetsUsingTypeAndThen') {
|
|
9516
|
+
feeToSubtract = totalFee;
|
|
9517
|
+
} else {
|
|
9518
|
+
feeToSubtract = destFee;
|
|
9519
|
+
}
|
|
9520
|
+
return _context.abrupt("return", BigInt(currency.amount) - feeToSubtract > (balance < edBN ? edBN : 0));
|
|
9521
|
+
case 36:
|
|
9161
9522
|
case "end":
|
|
9162
9523
|
return _context.stop();
|
|
9163
9524
|
}
|
|
@@ -9197,13 +9558,10 @@ var verifyEdOnDestination = /*#__PURE__*/function () {
|
|
|
9197
9558
|
};
|
|
9198
9559
|
}();
|
|
9199
9560
|
|
|
9200
|
-
var
|
|
9561
|
+
var assertToIsString = function assertToIsString(to) {
|
|
9201
9562
|
if (sdkCommon.isTMultiLocation(to)) {
|
|
9202
9563
|
throw new InvalidParameterError('Multi-Location destination is not supported for XCM fee calculation.');
|
|
9203
9564
|
}
|
|
9204
|
-
if (to === 'Ethereum') {
|
|
9205
|
-
throw new InvalidParameterError('Ethereum destination is not yet supported for XCM fee calculation.');
|
|
9206
|
-
}
|
|
9207
9565
|
};
|
|
9208
9566
|
var assertAddressIsString = function assertAddressIsString(address) {
|
|
9209
9567
|
if (sdkCommon.isTMultiLocation(address)) {
|
|
@@ -9535,12 +9893,6 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
9535
9893
|
}
|
|
9536
9894
|
throw new InvalidParameterError('Multi-Location address is not supported for XCM fee calculation.');
|
|
9537
9895
|
case 8:
|
|
9538
|
-
if (!(to === 'Ethereum')) {
|
|
9539
|
-
_context3.next = 10;
|
|
9540
|
-
break;
|
|
9541
|
-
}
|
|
9542
|
-
throw new InvalidParameterError('Ethereum destination is not yet supported for XCM fee calculation.');
|
|
9543
|
-
case 10:
|
|
9544
9896
|
return _context3.abrupt("return", dryRun({
|
|
9545
9897
|
api: this.api,
|
|
9546
9898
|
tx: tx,
|
|
@@ -9551,7 +9903,7 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
9551
9903
|
senderAddress: this._options.senderAddress,
|
|
9552
9904
|
feeAsset: feeAsset
|
|
9553
9905
|
}));
|
|
9554
|
-
case
|
|
9906
|
+
case 9:
|
|
9555
9907
|
case "end":
|
|
9556
9908
|
return _context3.stop();
|
|
9557
9909
|
}
|
|
@@ -9588,7 +9940,7 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
9588
9940
|
disableFallback: false
|
|
9589
9941
|
}, disableFallback = _ref.disableFallback;
|
|
9590
9942
|
_this$_options3 = this._options, from = _this$_options3.from, to = _this$_options3.to, address = _this$_options3.address, senderAddress = _this$_options3.senderAddress, feeAsset = _this$_options3.feeAsset;
|
|
9591
|
-
|
|
9943
|
+
assertToIsString(to);
|
|
9592
9944
|
assertAddressIsString(address);
|
|
9593
9945
|
_context4.next = 6;
|
|
9594
9946
|
return this.build();
|
|
@@ -9653,7 +10005,7 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
9653
10005
|
disableFallback: false
|
|
9654
10006
|
}, disableFallback = _ref2.disableFallback;
|
|
9655
10007
|
_this$_options4 = this._options, from = _this$_options4.from, to = _this$_options4.to, senderAddress = _this$_options4.senderAddress, currency = _this$_options4.currency, feeAsset = _this$_options4.feeAsset;
|
|
9656
|
-
|
|
10008
|
+
assertToIsString(to);
|
|
9657
10009
|
_context5.next = 5;
|
|
9658
10010
|
return this.build();
|
|
9659
10011
|
case 5:
|
|
@@ -9704,7 +10056,7 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
9704
10056
|
while (1) switch (_context6.prev = _context6.next) {
|
|
9705
10057
|
case 0:
|
|
9706
10058
|
_this$_options5 = this._options, from = _this$_options5.from, to = _this$_options5.to, address = _this$_options5.address, senderAddress = _this$_options5.senderAddress;
|
|
9707
|
-
|
|
10059
|
+
assertToIsString(to);
|
|
9708
10060
|
assertAddressIsString(address);
|
|
9709
10061
|
_context6.next = 5;
|
|
9710
10062
|
return this.build();
|
|
@@ -9755,7 +10107,7 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
9755
10107
|
while (1) switch (_context7.prev = _context7.next) {
|
|
9756
10108
|
case 0:
|
|
9757
10109
|
_this$_options6 = this._options, from = _this$_options6.from, to = _this$_options6.to, senderAddress = _this$_options6.senderAddress;
|
|
9758
|
-
|
|
10110
|
+
assertToIsString(to);
|
|
9759
10111
|
_context7.next = 4;
|
|
9760
10112
|
return this.build();
|
|
9761
10113
|
case 4:
|
|
@@ -9803,7 +10155,7 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
9803
10155
|
while (1) switch (_context8.prev = _context8.next) {
|
|
9804
10156
|
case 0:
|
|
9805
10157
|
_this$_options7 = this._options, from = _this$_options7.from, to = _this$_options7.to, senderAddress = _this$_options7.senderAddress, currency = _this$_options7.currency, feeAsset = _this$_options7.feeAsset;
|
|
9806
|
-
|
|
10158
|
+
assertToIsString(to);
|
|
9807
10159
|
_context8.next = 4;
|
|
9808
10160
|
return this.build();
|
|
9809
10161
|
case 4:
|
|
@@ -9846,7 +10198,7 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
9846
10198
|
while (1) switch (_context9.prev = _context9.next) {
|
|
9847
10199
|
case 0:
|
|
9848
10200
|
_this$_options8 = this._options, from = _this$_options8.from, to = _this$_options8.to, address = _this$_options8.address, currency = _this$_options8.currency, senderAddress = _this$_options8.senderAddress, feeAsset = _this$_options8.feeAsset;
|
|
9849
|
-
|
|
10201
|
+
assertToIsString(to);
|
|
9850
10202
|
assertAddressIsString(address);
|
|
9851
10203
|
_context9.next = 5;
|
|
9852
10204
|
return this.build();
|
|
@@ -9888,7 +10240,7 @@ var GeneralBuilder = /*#__PURE__*/function () {
|
|
|
9888
10240
|
while (1) switch (_context0.prev = _context0.next) {
|
|
9889
10241
|
case 0:
|
|
9890
10242
|
_this$_options9 = this._options, from = _this$_options9.from, to = _this$_options9.to, address = _this$_options9.address, currency = _this$_options9.currency, senderAddress = _this$_options9.senderAddress, feeAsset = _this$_options9.feeAsset;
|
|
9891
|
-
|
|
10243
|
+
assertToIsString(to);
|
|
9892
10244
|
assertAddressIsString(address);
|
|
9893
10245
|
_context0.next = 5;
|
|
9894
10246
|
return this.build();
|