@subwallet/extension-base 1.3.22-0 → 1.3.23-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/background/KoniTypes.d.ts +75 -2
- package/background/KoniTypes.js +2 -0
- package/cjs/background/KoniTypes.js +2 -0
- package/cjs/constants/environment.js +4 -2
- package/cjs/constants/signing.js +6 -2
- package/cjs/core/logic-validation/recipientAddress.js +9 -1
- package/cjs/core/logic-validation/transfer.js +35 -29
- package/cjs/core/types.js +1 -0
- package/cjs/core/utils.js +12 -1
- package/cjs/defaults.js +1 -1
- package/cjs/koni/api/dotsama/crowdloan.js +1 -1
- package/cjs/koni/api/nft/index.js +9 -16
- package/cjs/koni/api/staking/index.js +3 -4
- package/cjs/koni/background/handlers/Extension.js +234 -96
- package/cjs/koni/background/handlers/State.js +15 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/cardano/consts.js +11 -0
- package/cjs/services/balance-service/helpers/subscribe/cardano/index.js +63 -0
- package/cjs/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
- package/cjs/services/balance-service/helpers/subscribe/cardano/utils.js +74 -0
- package/cjs/services/balance-service/helpers/subscribe/index.js +21 -7
- package/cjs/services/balance-service/helpers/subscribe/ton/utils.js +2 -2
- package/cjs/services/balance-service/index.js +4 -2
- package/cjs/services/balance-service/transfer/cardano-transfer.js +122 -0
- package/cjs/services/balance-service/transfer/token.js +4 -4
- package/cjs/services/chain-service/handler/CardanoApi.js +176 -0
- package/cjs/services/chain-service/handler/CardanoChainHandler.js +83 -0
- package/cjs/services/chain-service/handler/TonApi.js +2 -5
- package/cjs/services/chain-service/index.js +29 -7
- package/cjs/services/chain-service/utils/index.js +40 -11
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
- package/cjs/services/earning-service/service.js +6 -12
- package/cjs/services/fee-service/service.js +19 -8
- package/cjs/services/history-service/index.js +4 -6
- package/cjs/services/inapp-notification-service/index.js +12 -4
- package/cjs/services/keyring-service/context/account-context.js +17 -2
- package/cjs/services/keyring-service/context/handlers/Derive.js +10 -7
- package/cjs/services/keyring-service/context/handlers/Migration.js +268 -0
- package/cjs/services/keyring-service/context/handlers/Mnemonic.js +2 -2
- package/cjs/services/keyring-service/context/handlers/Secret.js +1 -1
- package/cjs/services/keyring-service/utils.js +18 -0
- package/cjs/services/request-service/handler/CardanoRequestHandler.js +172 -0
- package/cjs/services/request-service/handler/EvmRequestHandler.js +1 -1
- package/cjs/services/request-service/index.js +20 -2
- package/cjs/services/setting-service/constants.js +10 -1
- package/cjs/services/storage-service/DatabaseService.js +3 -0
- package/cjs/services/storage-service/db-stores/InappNotification.js +6 -0
- package/cjs/services/swap-service/handler/asset-hub/handler.js +0 -59
- package/cjs/services/swap-service/handler/chainflip-handler.js +33 -281
- package/cjs/services/swap-service/handler/hydradx-handler.js +23 -190
- package/cjs/services/swap-service/handler/simpleswap-handler.js +1 -222
- package/cjs/services/swap-service/handler/uniswap-handler.js +331 -0
- package/cjs/services/swap-service/index.js +31 -22
- package/cjs/services/swap-service/utils.js +21 -38
- package/cjs/services/transaction-service/helpers/index.js +6 -1
- package/cjs/services/transaction-service/index.js +278 -21
- package/cjs/services/transaction-service/utils.js +5 -1
- package/cjs/types/account/info/keyring.js +12 -1
- package/cjs/types/fee/cardano.js +1 -0
- package/cjs/types/swap/index.js +7 -2
- package/cjs/utils/account/analyze.js +2 -1
- package/cjs/utils/account/common.js +29 -20
- package/cjs/utils/account/derive/info/solo.js +9 -4
- package/cjs/utils/account/derive/validate.js +36 -2
- package/cjs/utils/account/transform.js +38 -13
- package/cjs/utils/fee/transfer.js +40 -7
- package/cjs/utils/index.js +2 -2
- package/cjs/utils/staticData/index.js +7 -2
- package/constants/environment.d.ts +1 -0
- package/constants/environment.js +2 -1
- package/constants/signing.js +6 -2
- package/core/logic-validation/recipientAddress.js +11 -3
- package/core/logic-validation/transfer.js +9 -3
- package/core/substrate/xcm-parser.d.ts +1 -1
- package/core/types.d.ts +1 -0
- package/core/types.js +1 -0
- package/core/utils.d.ts +1 -0
- package/core/utils.js +13 -3
- package/defaults.d.ts +1 -1
- package/defaults.js +1 -1
- package/koni/api/dotsama/crowdloan.js +3 -3
- package/koni/api/nft/index.js +10 -16
- package/koni/api/nft/story_odyssey_nft/index.d.ts +1 -1
- package/koni/api/staking/index.js +4 -5
- package/koni/background/handlers/Extension.d.ts +9 -0
- package/koni/background/handlers/Extension.js +144 -8
- package/koni/background/handlers/State.d.ts +5 -1
- package/koni/background/handlers/State.js +16 -1
- package/package.json +71 -9
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/cardano/consts.d.ts +1 -0
- package/services/balance-service/helpers/subscribe/cardano/consts.js +4 -0
- package/services/balance-service/helpers/subscribe/cardano/index.d.ts +2 -0
- package/services/balance-service/helpers/subscribe/cardano/index.js +57 -0
- package/services/balance-service/helpers/subscribe/cardano/types.d.ts +34 -0
- package/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
- package/services/balance-service/helpers/subscribe/cardano/utils.d.ts +15 -0
- package/services/balance-service/helpers/subscribe/cardano/utils.js +62 -0
- package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
- package/services/balance-service/helpers/subscribe/index.js +23 -9
- package/services/balance-service/helpers/subscribe/ton/utils.d.ts +1 -1
- package/services/balance-service/helpers/subscribe/ton/utils.js +1 -1
- package/services/balance-service/index.js +4 -2
- package/services/balance-service/transfer/cardano-transfer.d.ts +24 -0
- package/services/balance-service/transfer/cardano-transfer.js +114 -0
- package/services/balance-service/transfer/token.d.ts +1 -1
- package/services/balance-service/transfer/token.js +2 -2
- package/services/chain-service/handler/CardanoApi.d.ts +38 -0
- package/services/chain-service/handler/CardanoApi.js +167 -0
- package/services/chain-service/handler/CardanoChainHandler.d.ts +17 -0
- package/services/chain-service/handler/CardanoChainHandler.js +75 -0
- package/services/chain-service/handler/TonApi.js +3 -6
- package/services/chain-service/handler/types.d.ts +1 -0
- package/services/chain-service/index.d.ts +3 -1
- package/services/chain-service/index.js +29 -7
- package/services/chain-service/types.d.ts +9 -1
- package/services/chain-service/utils/index.d.ts +4 -0
- package/services/chain-service/utils/index.js +32 -11
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
- package/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
- package/services/earning-service/service.js +8 -14
- package/services/fee-service/service.js +19 -8
- package/services/history-service/index.js +6 -8
- package/services/inapp-notification-service/index.d.ts +3 -4
- package/services/inapp-notification-service/index.js +14 -6
- package/services/keyring-service/context/account-context.d.ts +6 -2
- package/services/keyring-service/context/account-context.js +17 -2
- package/services/keyring-service/context/handlers/Derive.d.ts +1 -1
- package/services/keyring-service/context/handlers/Derive.js +10 -8
- package/services/keyring-service/context/handlers/Migration.d.ts +17 -0
- package/services/keyring-service/context/handlers/Migration.js +258 -0
- package/services/keyring-service/context/handlers/Mnemonic.js +2 -2
- package/services/keyring-service/context/handlers/Secret.js +2 -2
- package/services/keyring-service/utils.d.ts +2 -0
- package/services/keyring-service/utils.js +11 -0
- package/services/request-service/handler/CardanoRequestHandler.d.ts +16 -0
- package/services/request-service/handler/CardanoRequestHandler.js +163 -0
- package/services/request-service/handler/EvmRequestHandler.js +1 -1
- package/services/request-service/index.d.ts +6 -3
- package/services/request-service/index.js +19 -5
- package/services/setting-service/constants.d.ts +3 -0
- package/services/setting-service/constants.js +6 -0
- package/services/storage-service/DatabaseService.d.ts +1 -0
- package/services/storage-service/DatabaseService.js +3 -0
- package/services/storage-service/db-stores/InappNotification.d.ts +1 -0
- package/services/storage-service/db-stores/InappNotification.js +6 -0
- package/services/swap-service/handler/asset-hub/handler.d.ts +1 -4
- package/services/swap-service/handler/asset-hub/handler.js +2 -61
- package/services/swap-service/handler/base-handler.d.ts +1 -4
- package/services/swap-service/handler/chainflip-handler.d.ts +2 -9
- package/services/swap-service/handler/chainflip-handler.js +31 -280
- package/services/swap-service/handler/hydradx-handler.d.ts +1 -6
- package/services/swap-service/handler/hydradx-handler.js +13 -180
- package/services/swap-service/handler/simpleswap-handler.d.ts +1 -4
- package/services/swap-service/handler/simpleswap-handler.js +5 -226
- package/services/swap-service/handler/uniswap-handler.d.ts +41 -0
- package/services/swap-service/handler/uniswap-handler.js +323 -0
- package/services/swap-service/index.js +30 -22
- package/services/swap-service/utils.d.ts +1 -5
- package/services/swap-service/utils.js +7 -21
- package/services/transaction-service/helpers/index.d.ts +2 -0
- package/services/transaction-service/helpers/index.js +4 -0
- package/services/transaction-service/index.d.ts +8 -2
- package/services/transaction-service/index.js +263 -10
- package/services/transaction-service/types.d.ts +7 -0
- package/services/transaction-service/utils.js +7 -2
- package/types/account/info/keyring.d.ts +4 -1
- package/types/account/info/keyring.js +9 -0
- package/types/account/info/proxy.d.ts +2 -0
- package/types/balance/index.d.ts +4 -1
- package/types/fee/base.d.ts +1 -1
- package/types/fee/cardano.d.ts +18 -0
- package/types/fee/cardano.js +1 -0
- package/types/fee/subscription.d.ts +4 -3
- package/types/swap/index.d.ts +11 -3
- package/types/swap/index.js +7 -2
- package/utils/account/analyze.js +2 -1
- package/utils/account/common.d.ts +11 -6
- package/utils/account/common.js +28 -19
- package/utils/account/derive/info/solo.js +10 -5
- package/utils/account/derive/validate.d.ts +1 -0
- package/utils/account/derive/validate.js +34 -1
- package/utils/account/transform.d.ts +2 -1
- package/utils/account/transform.js +37 -13
- package/utils/fee/transfer.d.ts +2 -1
- package/utils/fee/transfer.js +44 -11
- package/utils/index.js +4 -4
- package/utils/staticData/index.d.ts +4 -1
- package/utils/staticData/index.js +5 -1
- package/utils/staticData/oldChainPrefix.json +1 -0
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.AssetHubSwapHandler = void 0;
|
|
8
|
-
var _SwapError = require("@subwallet/extension-base/background/errors/SwapError");
|
|
9
8
|
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
10
9
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
11
10
|
var _constants = require("@subwallet/extension-base/constants");
|
|
@@ -23,7 +22,6 @@ var _router = require("./router");
|
|
|
23
22
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
24
23
|
// SPDX-License-Identifier: Apache-2.0
|
|
25
24
|
|
|
26
|
-
const PAH_LOW_LIQUIDITY_THRESHOLD = 0.15;
|
|
27
25
|
class AssetHubSwapHandler {
|
|
28
26
|
isReady = false;
|
|
29
27
|
constructor(chainService, balanceService, feeService, chain) {
|
|
@@ -157,57 +155,6 @@ class AssetHubSwapHandler {
|
|
|
157
155
|
generateOptimalProcess(params) {
|
|
158
156
|
return this.swapBaseHandler.generateOptimalProcess(params, [this.getXcmStep.bind(this), this.getSubmitStep.bind(this)]);
|
|
159
157
|
}
|
|
160
|
-
async getSwapQuote(request) {
|
|
161
|
-
const fromAsset = this.chainService.getAssetBySlug(request.pair.from);
|
|
162
|
-
const toAsset = this.chainService.getAssetBySlug(request.pair.to);
|
|
163
|
-
const fromChain = this.chainService.getChainInfoByKey(fromAsset.originChain);
|
|
164
|
-
const fromChainNativeTokenSlug = (0, _utils._getChainNativeTokenSlug)(fromChain);
|
|
165
|
-
if (!this.isReady || !this.router) {
|
|
166
|
-
return new _SwapError.SwapError(_swap2.SwapErrorType.UNKNOWN);
|
|
167
|
-
}
|
|
168
|
-
const earlyValidation = await this.validateSwapRequest(request);
|
|
169
|
-
if (earlyValidation.error) {
|
|
170
|
-
const metadata = earlyValidation.metadata;
|
|
171
|
-
return (0, _swap._getEarlyAssetHubValidationError)(earlyValidation.error, metadata);
|
|
172
|
-
}
|
|
173
|
-
try {
|
|
174
|
-
const paths = this.router.buildPath(request.pair);
|
|
175
|
-
const amountOut = earlyValidation.metadata.toAmount;
|
|
176
|
-
const toAmount = new _bignumber.default(amountOut);
|
|
177
|
-
const minReceive = toAmount.times(1 - request.slippage).integerValue(_bignumber.default.ROUND_DOWN);
|
|
178
|
-
const extrinsic = await this.router.buildSwapExtrinsic(paths, request.address, request.fromAmount, minReceive.toString());
|
|
179
|
-
const paymentInfo = await extrinsic.paymentInfo(request.address);
|
|
180
|
-
const networkFee = {
|
|
181
|
-
tokenSlug: fromChainNativeTokenSlug,
|
|
182
|
-
amount: paymentInfo.partialFee.toString(),
|
|
183
|
-
feeType: _swap2.SwapFeeType.NETWORK_FEE
|
|
184
|
-
};
|
|
185
|
-
const feeTokenOptions = [fromChainNativeTokenSlug];
|
|
186
|
-
const selectedFeeToken = fromChainNativeTokenSlug;
|
|
187
|
-
const priceImpactPct = earlyValidation.metadata.priceImpactPct || '0';
|
|
188
|
-
return {
|
|
189
|
-
pair: request.pair,
|
|
190
|
-
fromAmount: request.fromAmount,
|
|
191
|
-
toAmount: toAmount.toString(),
|
|
192
|
-
rate: (0, _utils2.convertSwapRate)(earlyValidation.metadata.quoteRate, fromAsset, toAsset),
|
|
193
|
-
provider: this.providerInfo,
|
|
194
|
-
aliveUntil: +Date.now() + (_utils2.SWAP_QUOTE_TIMEOUT_MAP[this.slug] || _utils2.SWAP_QUOTE_TIMEOUT_MAP.default),
|
|
195
|
-
feeInfo: {
|
|
196
|
-
feeComponent: [networkFee],
|
|
197
|
-
defaultFeeToken: fromChainNativeTokenSlug,
|
|
198
|
-
feeOptions: feeTokenOptions,
|
|
199
|
-
// TODO: enable fee options
|
|
200
|
-
selectedFeeToken
|
|
201
|
-
},
|
|
202
|
-
isLowLiquidity: Math.abs(parseFloat(priceImpactPct)) >= PAH_LOW_LIQUIDITY_THRESHOLD,
|
|
203
|
-
route: {
|
|
204
|
-
path: paths.map(asset => asset.slug)
|
|
205
|
-
}
|
|
206
|
-
};
|
|
207
|
-
} catch (e) {
|
|
208
|
-
return new _SwapError.SwapError(_swap2.SwapErrorType.ERROR_FETCHING_QUOTE);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
158
|
async handleXcmStep(params) {
|
|
212
159
|
const pair = params.quote.pair;
|
|
213
160
|
const alternativeAssetSlug = (0, _utils2.getSwapAlternativeAsset)(pair);
|
|
@@ -369,11 +316,5 @@ class AssetHubSwapHandler {
|
|
|
369
316
|
}
|
|
370
317
|
return [];
|
|
371
318
|
}
|
|
372
|
-
validateSwapRequest(request) {
|
|
373
|
-
if (!this.isReady || !this.router) {
|
|
374
|
-
throw new _SwapError.SwapError(_swap2.SwapErrorType.ERROR_FETCHING_QUOTE);
|
|
375
|
-
}
|
|
376
|
-
return this.router.earlyValidateSwapValidation(request);
|
|
377
|
-
}
|
|
378
319
|
}
|
|
379
320
|
exports.AssetHubSwapHandler = AssetHubSwapHandler;
|
|
@@ -5,12 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.ChainflipSwapHandler = exports.CHAINFLIP_BROKER_API = void 0;
|
|
8
|
-
var _swap = require("@chainflip/sdk/swap");
|
|
9
8
|
var _chainList = require("@subwallet/chain-list");
|
|
10
|
-
var _SwapError = require("@subwallet/extension-base/background/errors/SwapError");
|
|
11
9
|
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
12
10
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
13
|
-
var _swap2 = require("@subwallet/extension-base/core/logic-validation/swap");
|
|
14
11
|
var _smartContract = require("@subwallet/extension-base/services/balance-service/transfer/smart-contract");
|
|
15
12
|
var _token = require("@subwallet/extension-base/services/balance-service/transfer/token");
|
|
16
13
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
@@ -18,29 +15,17 @@ var _baseHandler = require("@subwallet/extension-base/services/swap-service/hand
|
|
|
18
15
|
var _utils2 = require("@subwallet/extension-base/services/swap-service/utils");
|
|
19
16
|
var _types = require("@subwallet/extension-base/types");
|
|
20
17
|
var _serviceBase = require("@subwallet/extension-base/types/service-base");
|
|
21
|
-
var
|
|
18
|
+
var _swap = require("@subwallet/extension-base/types/swap");
|
|
19
|
+
var _utils3 = require("@subwallet/extension-base/utils");
|
|
22
20
|
var _getId = require("@subwallet/extension-base/utils/getId");
|
|
23
21
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
24
22
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
25
23
|
// SPDX-License-Identifier: Apache-2.0
|
|
26
|
-
|
|
27
|
-
(function (ChainflipFeeType) {
|
|
28
|
-
ChainflipFeeType["INGRESS"] = "INGRESS";
|
|
29
|
-
ChainflipFeeType["NETWORK"] = "NETWORK";
|
|
30
|
-
ChainflipFeeType["EGRESS"] = "EGRESS";
|
|
31
|
-
ChainflipFeeType["BOOST"] = "BOOST";
|
|
32
|
-
ChainflipFeeType["BROKER"] = "BROKER";
|
|
33
|
-
})(ChainflipFeeType || (ChainflipFeeType = {}));
|
|
24
|
+
|
|
34
25
|
const INTERMEDIARY_MAINNET_ASSET_SLUG = _chainList.COMMON_ASSETS.USDC_ETHEREUM;
|
|
35
26
|
const INTERMEDIARY_TESTNET_ASSET_SLUG = _chainList.COMMON_ASSETS.USDC_SEPOLIA;
|
|
36
27
|
const CHAINFLIP_BROKER_API = process.env.CHAINFLIP_BROKER_API || '';
|
|
37
28
|
exports.CHAINFLIP_BROKER_API = CHAINFLIP_BROKER_API;
|
|
38
|
-
var CHAINFLIP_QUOTE_ERROR;
|
|
39
|
-
(function (CHAINFLIP_QUOTE_ERROR) {
|
|
40
|
-
CHAINFLIP_QUOTE_ERROR["InsufficientLiquidity"] = "InsufficientLiquidity";
|
|
41
|
-
CHAINFLIP_QUOTE_ERROR["InsufficientEgress"] = "is lower than minimum egress amount";
|
|
42
|
-
CHAINFLIP_QUOTE_ERROR["InsufficientIngress"] = "amount is lower than estimated ingress fee";
|
|
43
|
-
})(CHAINFLIP_QUOTE_ERROR || (CHAINFLIP_QUOTE_ERROR = {}));
|
|
44
29
|
class ChainflipSwapHandler {
|
|
45
30
|
constructor(chainService, balanceService, feeService) {
|
|
46
31
|
let isTestnet = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
@@ -49,13 +34,11 @@ class ChainflipSwapHandler {
|
|
|
49
34
|
balanceService,
|
|
50
35
|
feeService,
|
|
51
36
|
providerName: isTestnet ? 'Chainflip Testnet' : 'Chainflip',
|
|
52
|
-
providerSlug: isTestnet ?
|
|
37
|
+
providerSlug: isTestnet ? _swap.SwapProviderId.CHAIN_FLIP_TESTNET : _swap.SwapProviderId.CHAIN_FLIP_MAINNET
|
|
53
38
|
});
|
|
54
39
|
this.isTestnet = isTestnet;
|
|
55
|
-
this.providerSlug = isTestnet ?
|
|
56
|
-
|
|
57
|
-
// @ts-ignore
|
|
58
|
-
this.swapSdk = new _swap.SwapSDK((0, _utils2.getChainflipOptions)(isTestnet));
|
|
40
|
+
this.providerSlug = isTestnet ? _swap.SwapProviderId.CHAIN_FLIP_TESTNET : _swap.SwapProviderId.CHAIN_FLIP_MAINNET;
|
|
41
|
+
this.baseUrl = (0, _utils2.getChainflipSwap)(isTestnet);
|
|
59
42
|
}
|
|
60
43
|
get chainService() {
|
|
61
44
|
return this.swapBaseHandler.chainService;
|
|
@@ -72,20 +55,6 @@ class ChainflipSwapHandler {
|
|
|
72
55
|
get slug() {
|
|
73
56
|
return this.swapBaseHandler.slug;
|
|
74
57
|
}
|
|
75
|
-
get assetMapping() {
|
|
76
|
-
if (this.isTestnet) {
|
|
77
|
-
return _utils2.CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING;
|
|
78
|
-
} else {
|
|
79
|
-
return _utils2.CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
get chainMapping() {
|
|
83
|
-
if (this.isTestnet) {
|
|
84
|
-
return _utils2.CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING;
|
|
85
|
-
} else {
|
|
86
|
-
return _utils2.CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
58
|
get intermediaryAssetSlug() {
|
|
90
59
|
if (this.isTestnet) {
|
|
91
60
|
return INTERMEDIARY_TESTNET_ASSET_SLUG;
|
|
@@ -93,224 +62,6 @@ class ChainflipSwapHandler {
|
|
|
93
62
|
return INTERMEDIARY_MAINNET_ASSET_SLUG;
|
|
94
63
|
}
|
|
95
64
|
}
|
|
96
|
-
async validateSwapRequest(request) {
|
|
97
|
-
try {
|
|
98
|
-
// todo: risk of matching wrong chain, asset can lead to loss of funds
|
|
99
|
-
|
|
100
|
-
const fromAsset = this.chainService.getAssetBySlug(request.pair.from);
|
|
101
|
-
const toAsset = this.chainService.getAssetBySlug(request.pair.to);
|
|
102
|
-
const srcChain = fromAsset.originChain;
|
|
103
|
-
const destChain = toAsset.originChain;
|
|
104
|
-
const isSwapCrossChain = srcChain !== destChain;
|
|
105
|
-
const srcChainInfo = this.chainService.getChainInfoByKey(srcChain);
|
|
106
|
-
const srcChainId = this.chainMapping[srcChain];
|
|
107
|
-
const destChainId = this.chainMapping[destChain];
|
|
108
|
-
const fromAssetId = (0, _utils._getAssetSymbol)(fromAsset);
|
|
109
|
-
const toAssetId = (0, _utils._getAssetSymbol)(toAsset);
|
|
110
|
-
if (!srcChainId || !destChainId || !fromAssetId || !toAssetId) {
|
|
111
|
-
return {
|
|
112
|
-
error: _swap3.SwapErrorType.ASSET_NOT_SUPPORTED
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
const [supportedDestChains, srcAssets, destAssets] = await Promise.all([this.swapSdk.getChains(srcChainId), this.swapSdk.getAssets(srcChainId), this.swapSdk.getAssets(destChainId)]);
|
|
116
|
-
const supportedDestChainId = supportedDestChains.find(c => c.chain === destChainId);
|
|
117
|
-
const srcAssetData = srcAssets.find(a => {
|
|
118
|
-
if ((0, _utils._isSmartContractToken)(fromAsset)) {
|
|
119
|
-
var _a$contractAddress;
|
|
120
|
-
return (a === null || a === void 0 ? void 0 : (_a$contractAddress = a.contractAddress) === null || _a$contractAddress === void 0 ? void 0 : _a$contractAddress.toLowerCase()) === (0, _utils._getContractAddressOfToken)(fromAsset).toLowerCase() && a.asset === fromAssetId;
|
|
121
|
-
}
|
|
122
|
-
return a.asset === fromAssetId;
|
|
123
|
-
});
|
|
124
|
-
const destAssetData = destAssets.find(a => {
|
|
125
|
-
if ((0, _utils._isSmartContractToken)(toAsset)) {
|
|
126
|
-
var _a$contractAddress2;
|
|
127
|
-
return (a === null || a === void 0 ? void 0 : (_a$contractAddress2 = a.contractAddress) === null || _a$contractAddress2 === void 0 ? void 0 : _a$contractAddress2.toLowerCase()) === (0, _utils._getContractAddressOfToken)(toAsset).toLowerCase() && a.asset === toAssetId;
|
|
128
|
-
}
|
|
129
|
-
return a.asset === toAssetId;
|
|
130
|
-
});
|
|
131
|
-
if (!destAssetData || !srcAssetData || isSwapCrossChain && !supportedDestChainId) {
|
|
132
|
-
return {
|
|
133
|
-
error: _swap3.SwapErrorType.UNKNOWN
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
const bnAmount = new _bignumber.default(request.fromAmount);
|
|
137
|
-
const bnMinSwap = new _bignumber.default(srcAssetData.minimumSwapAmount);
|
|
138
|
-
if (srcAssetData.maximumSwapAmount) {
|
|
139
|
-
const bnMaxProtocolSwap = new _bignumber.default(srcAssetData.maximumSwapAmount);
|
|
140
|
-
if (bnMinSwap.gte(bnMaxProtocolSwap)) {
|
|
141
|
-
return {
|
|
142
|
-
error: _swap3.SwapErrorType.UNKNOWN
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
if (bnAmount.gte(bnMaxProtocolSwap)) {
|
|
146
|
-
return {
|
|
147
|
-
error: _swap3.SwapErrorType.SWAP_EXCEED_ALLOWANCE,
|
|
148
|
-
metadata: {
|
|
149
|
-
minSwap: {
|
|
150
|
-
value: srcAssetData.minimumSwapAmount,
|
|
151
|
-
decimals: (0, _utils._getAssetDecimals)(fromAsset),
|
|
152
|
-
symbol: fromAsset.symbol
|
|
153
|
-
},
|
|
154
|
-
maxSwap: {
|
|
155
|
-
value: bnMaxProtocolSwap.toString(),
|
|
156
|
-
decimals: (0, _utils._getAssetDecimals)(fromAsset),
|
|
157
|
-
symbol: fromAsset.symbol
|
|
158
|
-
},
|
|
159
|
-
chain: srcChainInfo
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
if (bnAmount.lt(bnMinSwap)) {
|
|
165
|
-
// might miss case when minSwap is 0
|
|
166
|
-
return {
|
|
167
|
-
error: _swap3.SwapErrorType.NOT_MEET_MIN_SWAP,
|
|
168
|
-
metadata: {
|
|
169
|
-
minSwap: {
|
|
170
|
-
value: srcAssetData.minimumSwapAmount,
|
|
171
|
-
decimals: (0, _utils._getAssetDecimals)(fromAsset),
|
|
172
|
-
symbol: fromAsset.symbol
|
|
173
|
-
},
|
|
174
|
-
maxSwap: {
|
|
175
|
-
value: srcAssetData.maximumSwapAmount,
|
|
176
|
-
decimals: (0, _utils._getAssetDecimals)(fromAsset),
|
|
177
|
-
symbol: fromAsset.symbol
|
|
178
|
-
},
|
|
179
|
-
chain: srcChainInfo
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
return {
|
|
184
|
-
metadata: {
|
|
185
|
-
minSwap: {
|
|
186
|
-
value: srcAssetData.minimumSwapAmount,
|
|
187
|
-
decimals: (0, _utils._getAssetDecimals)(fromAsset),
|
|
188
|
-
symbol: fromAsset.symbol
|
|
189
|
-
},
|
|
190
|
-
maxSwap: {
|
|
191
|
-
value: srcAssetData.maximumSwapAmount,
|
|
192
|
-
decimals: (0, _utils._getAssetDecimals)(fromAsset),
|
|
193
|
-
symbol: fromAsset.symbol
|
|
194
|
-
},
|
|
195
|
-
chain: srcChainInfo
|
|
196
|
-
}
|
|
197
|
-
};
|
|
198
|
-
} catch (e) {
|
|
199
|
-
return {
|
|
200
|
-
error: _swap3.SwapErrorType.UNKNOWN
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
parseSwapPath(fromAsset, toAsset) {
|
|
205
|
-
if (toAsset.slug !== this.intermediaryAssetSlug && fromAsset.slug !== this.intermediaryAssetSlug) {
|
|
206
|
-
// Chainflip always use USDC as intermediary
|
|
207
|
-
return [fromAsset.slug, this.intermediaryAssetSlug, toAsset.slug]; // todo: generalize this
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
return [fromAsset.slug, toAsset.slug];
|
|
211
|
-
}
|
|
212
|
-
async getSwapQuote(request) {
|
|
213
|
-
const fromAsset = this.chainService.getAssetBySlug(request.pair.from);
|
|
214
|
-
const toAsset = this.chainService.getAssetBySlug(request.pair.to);
|
|
215
|
-
const fromChain = this.chainService.getChainInfoByKey(fromAsset.originChain);
|
|
216
|
-
const fromChainNativeTokenSlug = (0, _utils._getChainNativeTokenSlug)(fromChain);
|
|
217
|
-
if (!fromAsset || !toAsset) {
|
|
218
|
-
return new _SwapError.SwapError(_swap3.SwapErrorType.UNKNOWN);
|
|
219
|
-
}
|
|
220
|
-
const earlyValidation = await this.validateSwapRequest(request);
|
|
221
|
-
const metadata = earlyValidation.metadata;
|
|
222
|
-
if (earlyValidation.error) {
|
|
223
|
-
return (0, _swap2._getChainflipEarlyValidationError)(earlyValidation.error, metadata);
|
|
224
|
-
}
|
|
225
|
-
const srcChainId = this.chainMapping[fromAsset.originChain];
|
|
226
|
-
const destChainId = this.chainMapping[toAsset.originChain];
|
|
227
|
-
const fromAssetId = (0, _utils._getAssetSymbol)(fromAsset);
|
|
228
|
-
const toAssetId = (0, _utils._getAssetSymbol)(toAsset);
|
|
229
|
-
try {
|
|
230
|
-
var _metadata$maxSwap;
|
|
231
|
-
const quoteResponse = await this.swapSdk.getQuote({
|
|
232
|
-
srcChain: srcChainId,
|
|
233
|
-
destChain: destChainId,
|
|
234
|
-
srcAsset: fromAssetId,
|
|
235
|
-
destAsset: toAssetId,
|
|
236
|
-
amount: request.fromAmount
|
|
237
|
-
});
|
|
238
|
-
const feeComponent = [];
|
|
239
|
-
quoteResponse.quote.includedFees.forEach(fee => {
|
|
240
|
-
switch (fee.type) {
|
|
241
|
-
case ChainflipFeeType.INGRESS:
|
|
242
|
-
{
|
|
243
|
-
feeComponent.push({
|
|
244
|
-
tokenSlug: fromAsset.slug,
|
|
245
|
-
amount: fee.amount,
|
|
246
|
-
feeType: _swap3.SwapFeeType.NETWORK_FEE
|
|
247
|
-
});
|
|
248
|
-
break;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// eslint-disable-next-line no-fallthrough
|
|
252
|
-
case ChainflipFeeType.EGRESS:
|
|
253
|
-
{
|
|
254
|
-
feeComponent.push({
|
|
255
|
-
tokenSlug: toAsset.slug,
|
|
256
|
-
amount: fee.amount,
|
|
257
|
-
feeType: _swap3.SwapFeeType.NETWORK_FEE
|
|
258
|
-
});
|
|
259
|
-
break;
|
|
260
|
-
}
|
|
261
|
-
case ChainflipFeeType.NETWORK:
|
|
262
|
-
|
|
263
|
-
// eslint-disable-next-line no-fallthrough
|
|
264
|
-
case ChainflipFeeType.BOOST:
|
|
265
|
-
|
|
266
|
-
// eslint-disable-next-line no-fallthrough
|
|
267
|
-
case ChainflipFeeType.BROKER:
|
|
268
|
-
{
|
|
269
|
-
feeComponent.push({
|
|
270
|
-
tokenSlug: this.intermediaryAssetSlug,
|
|
271
|
-
amount: fee.amount,
|
|
272
|
-
feeType: _swap3.SwapFeeType.PLATFORM_FEE
|
|
273
|
-
});
|
|
274
|
-
break;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
});
|
|
278
|
-
const defaultFeeToken = (0, _utils._isNativeToken)(fromAsset) ? fromAsset.slug : fromChainNativeTokenSlug;
|
|
279
|
-
return {
|
|
280
|
-
pair: request.pair,
|
|
281
|
-
fromAmount: request.fromAmount,
|
|
282
|
-
toAmount: quoteResponse.quote.egressAmount.toString(),
|
|
283
|
-
rate: (0, _utils2.calculateSwapRate)(request.fromAmount, quoteResponse.quote.egressAmount.toString(), fromAsset, toAsset),
|
|
284
|
-
provider: this.providerInfo,
|
|
285
|
-
aliveUntil: +Date.now() + (_utils2.SWAP_QUOTE_TIMEOUT_MAP[this.slug] || _utils2.SWAP_QUOTE_TIMEOUT_MAP.default),
|
|
286
|
-
minSwap: metadata.minSwap.value,
|
|
287
|
-
maxSwap: (_metadata$maxSwap = metadata.maxSwap) === null || _metadata$maxSwap === void 0 ? void 0 : _metadata$maxSwap.value,
|
|
288
|
-
estimatedArrivalTime: quoteResponse.quote.estimatedDurationSeconds,
|
|
289
|
-
// in seconds
|
|
290
|
-
isLowLiquidity: quoteResponse.quote.lowLiquidityWarning,
|
|
291
|
-
feeInfo: {
|
|
292
|
-
feeComponent: feeComponent,
|
|
293
|
-
defaultFeeToken,
|
|
294
|
-
feeOptions: [defaultFeeToken]
|
|
295
|
-
},
|
|
296
|
-
route: {
|
|
297
|
-
path: this.parseSwapPath(fromAsset, toAsset)
|
|
298
|
-
}
|
|
299
|
-
};
|
|
300
|
-
} catch (e) {
|
|
301
|
-
var _error$response;
|
|
302
|
-
const error = e;
|
|
303
|
-
const errorObj = error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data;
|
|
304
|
-
if (errorObj && errorObj.error && errorObj.error.includes(CHAINFLIP_QUOTE_ERROR.InsufficientLiquidity)) {
|
|
305
|
-
// todo: Chainflip will improve this
|
|
306
|
-
return new _SwapError.SwapError(_swap3.SwapErrorType.NOT_ENOUGH_LIQUIDITY);
|
|
307
|
-
}
|
|
308
|
-
if (errorObj && errorObj.message && errorObj.message.includes(CHAINFLIP_QUOTE_ERROR.InsufficientLiquidity)) {
|
|
309
|
-
return new _SwapError.SwapError(_swap3.SwapErrorType.NOT_ENOUGH_LIQUIDITY);
|
|
310
|
-
}
|
|
311
|
-
return new _SwapError.SwapError(_swap3.SwapErrorType.ERROR_FETCHING_QUOTE);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
65
|
async validateSwapProcess(params) {
|
|
315
66
|
const amount = params.selectedQuote.fromAmount;
|
|
316
67
|
const bnAmount = new _bignumber.default(amount);
|
|
@@ -349,48 +100,49 @@ class ChainflipSwapHandler {
|
|
|
349
100
|
const fromAsset = this.chainService.getAssetBySlug(pair.from);
|
|
350
101
|
const toAsset = this.chainService.getAssetBySlug(pair.to);
|
|
351
102
|
const chainInfo = this.chainService.getChainInfoByKey(fromAsset.originChain);
|
|
103
|
+
const toChainInfo = this.chainService.getChainInfoByKey(fromAsset.originChain);
|
|
352
104
|
const chainType = (0, _utils._isChainSubstrateCompatible)(chainInfo) ? _KoniTypes.ChainType.SUBSTRATE : _KoniTypes.ChainType.EVM;
|
|
353
|
-
const receiver = recipient !== null && recipient !== void 0 ? recipient : address;
|
|
354
|
-
const srcChainId = this.chainMapping[fromAsset.originChain];
|
|
355
|
-
const destChainId = this.chainMapping[toAsset.originChain];
|
|
105
|
+
const receiver = (0, _utils3._reformatAddressWithChain)(recipient !== null && recipient !== void 0 ? recipient : address, toChainInfo);
|
|
356
106
|
const fromAssetId = (0, _utils._getAssetSymbol)(fromAsset);
|
|
357
107
|
const toAssetId = (0, _utils._getAssetSymbol)(toAsset);
|
|
358
108
|
const minReceive = new _bignumber.default(quote.rate).times(1 - slippage).toString();
|
|
359
|
-
const
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
109
|
+
const depositParams = {
|
|
110
|
+
destinationAddress: receiver,
|
|
111
|
+
destinationAsset: toAssetId,
|
|
112
|
+
minimumPrice: minReceive,
|
|
113
|
+
// minimum accepted price for swaps through the channel
|
|
114
|
+
refundAddress: address,
|
|
115
|
+
// address to which assets are refunded
|
|
116
|
+
retryDurationInBlocks: '100',
|
|
117
|
+
// 100 blocks * 6 seconds = 10 minutes before deposits are refunded
|
|
118
|
+
sourceAsset: fromAssetId
|
|
119
|
+
};
|
|
120
|
+
const url = `${this.baseUrl}&${new URLSearchParams(depositParams).toString()}`;
|
|
121
|
+
const response = await fetch(url, {
|
|
122
|
+
method: 'GET'
|
|
373
123
|
});
|
|
374
|
-
|
|
124
|
+
const data = await response.json();
|
|
125
|
+
const depositChannelId = `${data.issuedBlock}-${data.network}-${data.channelId}`;
|
|
126
|
+
const depositAddress = data.address;
|
|
375
127
|
const txData = {
|
|
376
128
|
address,
|
|
377
129
|
provider: this.providerInfo,
|
|
378
130
|
quote: params.quote,
|
|
379
131
|
slippage: params.slippage,
|
|
380
132
|
recipient,
|
|
381
|
-
depositChannelId:
|
|
382
|
-
depositAddress:
|
|
133
|
+
depositChannelId: depositChannelId,
|
|
134
|
+
depositAddress: depositAddress,
|
|
383
135
|
process: params.process
|
|
384
136
|
};
|
|
385
137
|
let extrinsic;
|
|
386
138
|
if (chainType === _KoniTypes.ChainType.SUBSTRATE) {
|
|
387
139
|
const chainApi = this.chainService.getSubstrateApi(chainInfo.slug);
|
|
388
140
|
const substrateApi = await chainApi.isReady;
|
|
389
|
-
const [submittableExtrinsic] = await (0, _token.
|
|
141
|
+
const [submittableExtrinsic] = await (0, _token.createSubstrateExtrinsic)({
|
|
390
142
|
from: address,
|
|
391
143
|
networkKey: chainInfo.slug,
|
|
392
144
|
substrateApi,
|
|
393
|
-
to:
|
|
145
|
+
to: depositAddress,
|
|
394
146
|
tokenInfo: fromAsset,
|
|
395
147
|
transferAll: false,
|
|
396
148
|
// always false, because we do not allow swapping all the balance
|
|
@@ -405,7 +157,7 @@ class ChainflipSwapHandler {
|
|
|
405
157
|
chain: chainInfo.slug,
|
|
406
158
|
evmApi: this.chainService.getEvmApi(chainInfo.slug),
|
|
407
159
|
from: address,
|
|
408
|
-
to:
|
|
160
|
+
to: depositAddress,
|
|
409
161
|
value: quote.fromAmount,
|
|
410
162
|
feeInfo,
|
|
411
163
|
transferAll: false
|
|
@@ -417,7 +169,7 @@ class ChainflipSwapHandler {
|
|
|
417
169
|
chain: chainInfo.slug,
|
|
418
170
|
evmApi: this.chainService.getEvmApi(chainInfo.slug),
|
|
419
171
|
from: address,
|
|
420
|
-
to:
|
|
172
|
+
to: depositAddress,
|
|
421
173
|
value: quote.fromAmount,
|
|
422
174
|
feeInfo,
|
|
423
175
|
transferAll: false
|
|
@@ -444,7 +196,7 @@ class ChainflipSwapHandler {
|
|
|
444
196
|
switch (type) {
|
|
445
197
|
case _serviceBase.CommonStepType.DEFAULT:
|
|
446
198
|
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNSUPPORTED));
|
|
447
|
-
case
|
|
199
|
+
case _swap.SwapStepType.SWAP:
|
|
448
200
|
return this.handleSubmitStep(params);
|
|
449
201
|
default:
|
|
450
202
|
return this.handleSubmitStep(params);
|
|
@@ -454,7 +206,7 @@ class ChainflipSwapHandler {
|
|
|
454
206
|
if (params.selectedQuote) {
|
|
455
207
|
const submitStep = {
|
|
456
208
|
name: 'Swap',
|
|
457
|
-
type:
|
|
209
|
+
type: _swap.SwapStepType.SWAP
|
|
458
210
|
};
|
|
459
211
|
return Promise.resolve([submitStep, params.selectedQuote.feeInfo]);
|
|
460
212
|
}
|