@subwallet/extension-base 1.1.53-beta.0 → 1.1.54-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 +1 -9
- package/background/KoniTypes.js +0 -1
- package/background/errors/TransactionError.js +0 -9
- package/cjs/background/KoniTypes.js +0 -1
- package/cjs/background/errors/TransactionError.js +0 -9
- package/cjs/koni/api/staking/bonding/utils.js +6 -35
- package/cjs/koni/background/handlers/Extension.js +0 -85
- package/cjs/koni/background/handlers/State.js +5 -25
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/index.js +3 -6
- package/cjs/services/chain-service/constants.js +1 -1
- package/cjs/services/chain-service/index.js +18 -43
- package/cjs/services/chain-service/utils/index.js +2 -7
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/constants/chains.js +2 -4
- package/cjs/services/earning-service/handlers/native-staking/astar.js +3 -4
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +3 -22
- package/cjs/services/transaction-service/index.js +0 -20
- package/cjs/services/transaction-service/utils.js +0 -6
- package/cjs/types/fee/index.js +1 -27
- package/cjs/utils/index.js +0 -12
- package/koni/api/staking/bonding/utils.d.ts +1 -3
- package/koni/api/staking/bonding/utils.js +6 -32
- package/koni/background/handlers/Extension.d.ts +0 -5
- package/koni/background/handlers/Extension.js +0 -85
- package/koni/background/handlers/State.d.ts +0 -2
- package/koni/background/handlers/State.js +6 -26
- package/package.json +7 -64
- package/packageInfo.js +1 -1
- package/services/balance-service/index.js +3 -6
- package/services/base/types.d.ts +0 -4
- package/services/chain-service/constants.js +1 -1
- package/services/chain-service/index.d.ts +0 -4
- package/services/chain-service/index.js +0 -24
- package/services/chain-service/utils/index.d.ts +5 -6
- package/services/chain-service/utils/index.js +2 -5
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/constants/chains.d.ts +0 -1
- package/services/earning-service/constants/chains.js +0 -1
- package/services/earning-service/handlers/native-staking/astar.js +3 -4
- package/services/earning-service/handlers/native-staking/relay-chain.js +5 -24
- package/services/event-service/types.d.ts +0 -1
- package/services/transaction-service/index.js +0 -20
- package/services/transaction-service/utils.d.ts +0 -2
- package/services/transaction-service/utils.js +2 -6
- package/types/fee/index.d.ts +49 -2
- package/types/fee/index.js +1 -5
- package/types/yield/info/chain/target.d.ts +0 -2
- package/types/yield/info/pallet.d.ts +0 -4
- package/utils/index.d.ts +0 -1
- package/utils/index.js +1 -2
- package/background/errors/SwapError.d.ts +0 -6
- package/background/errors/SwapError.js +0 -57
- package/cjs/background/errors/SwapError.js +0 -64
- package/cjs/koni/api/dotsama/balance.js +0 -464
- package/cjs/koni/api/nft/ordinal_nft/utils.js +0 -41
- package/cjs/services/balance-service/helpers/subscribe/balance.js +0 -140
- package/cjs/services/chain-service/utils.js +0 -506
- package/cjs/services/migration-service/scripts/MigrateEthProvider.js +0 -17
- package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +0 -17
- package/cjs/services/migration-service/scripts/MigrateProvider.js +0 -29
- package/cjs/services/storage-service/index.js +0 -241
- package/cjs/services/swap-service/handler/base-handler.js +0 -171
- package/cjs/services/swap-service/handler/chainflip-handler.js +0 -407
- package/cjs/services/swap-service/handler/hydradx-handler.js +0 -444
- package/cjs/services/swap-service/index.js +0 -249
- package/cjs/services/swap-service/utils.js +0 -126
- package/cjs/types/balance.js +0 -1
- package/cjs/types/fee/evm.js +0 -1
- package/cjs/types/fee/fee.js +0 -70
- package/cjs/types/service-base.js +0 -1
- package/cjs/types/swap/index.js +0 -50
- package/cjs/types.js +0 -1
- package/cjs/utils/address.js +0 -34
- package/cjs/utils/keyring.js +0 -57
- package/cjs/utils/swap.js +0 -78
- package/services/swap-service/handler/base-handler.d.ts +0 -38
- package/services/swap-service/handler/base-handler.js +0 -162
- package/services/swap-service/handler/chainflip-handler.d.ts +0 -30
- package/services/swap-service/handler/chainflip-handler.js +0 -399
- package/services/swap-service/handler/hydradx-handler.d.ts +0 -36
- package/services/swap-service/handler/hydradx-handler.js +0 -435
- package/services/swap-service/index.d.ts +0 -32
- package/services/swap-service/index.js +0 -240
- package/services/swap-service/utils.d.ts +0 -18
- package/services/swap-service/utils.js +0 -105
- package/types/fee/evm.d.ts +0 -49
- package/types/fee/evm.js +0 -1
- package/types/fee/fee.d.ts +0 -32
- package/types/fee/fee.js +0 -63
- package/types/service-base.d.ts +0 -10
- package/types/service-base.js +0 -1
- package/types/swap/index.d.ts +0 -166
- package/types/swap/index.js +0 -41
- package/utils/swap.d.ts +0 -3
- package/utils/swap.js +0 -70
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.SWAP_QUOTE_TIMEOUT_MAP = exports.MOCK_SWAP_FEE = exports.DEFAULT_SWAP_FIRST_STEP = exports.CHAIN_FLIP_TESTNET_EXPLORER = exports.CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = exports.CHAIN_FLIP_MAINNET_EXPLORER = void 0;
|
|
8
|
-
exports.calculateSwapRate = calculateSwapRate;
|
|
9
|
-
exports.getChainflipEarlyValidationError = getChainflipEarlyValidationError;
|
|
10
|
-
exports.getEarlyHydradxValidationError = getEarlyHydradxValidationError;
|
|
11
|
-
exports.getSwapAltToken = getSwapAltToken;
|
|
12
|
-
exports.getSwapAlternativeAsset = getSwapAlternativeAsset;
|
|
13
|
-
var _swap = require("@chainflip/sdk/swap");
|
|
14
|
-
var _chainList = require("@subwallet/chain-list");
|
|
15
|
-
var _SwapError = require("@subwallet/extension-base/background/errors/SwapError");
|
|
16
|
-
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
17
|
-
var _swap2 = require("@subwallet/extension-base/types/swap");
|
|
18
|
-
var _utils2 = require("@subwallet/extension-base/utils");
|
|
19
|
-
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
20
|
-
// Copyright 2019-2022 @subwallet/extension-base
|
|
21
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
22
|
-
|
|
23
|
-
const CHAIN_FLIP_TESTNET_EXPLORER = 'https://blocks-perseverance.chainflip.io';
|
|
24
|
-
exports.CHAIN_FLIP_TESTNET_EXPLORER = CHAIN_FLIP_TESTNET_EXPLORER;
|
|
25
|
-
const CHAIN_FLIP_MAINNET_EXPLORER = 'https://scan.chainflip.io';
|
|
26
|
-
exports.CHAIN_FLIP_MAINNET_EXPLORER = CHAIN_FLIP_MAINNET_EXPLORER;
|
|
27
|
-
const CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = {
|
|
28
|
-
[_chainList.COMMON_CHAIN_SLUGS.POLKADOT]: _swap.Chains.Polkadot,
|
|
29
|
-
[_chainList.COMMON_CHAIN_SLUGS.ETHEREUM]: _swap.Chains.Ethereum
|
|
30
|
-
};
|
|
31
|
-
exports.CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING;
|
|
32
|
-
const CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = {
|
|
33
|
-
[_chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA]: _swap.Chains.Ethereum,
|
|
34
|
-
[_chainList.COMMON_CHAIN_SLUGS.CHAINFLIP_POLKADOT]: _swap.Chains.Polkadot
|
|
35
|
-
};
|
|
36
|
-
exports.CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING;
|
|
37
|
-
const CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = {
|
|
38
|
-
[_chainList.COMMON_ASSETS.DOT]: _swap.Assets.DOT,
|
|
39
|
-
[_chainList.COMMON_ASSETS.ETH]: _swap.Assets.ETH,
|
|
40
|
-
[_chainList.COMMON_ASSETS.USDC_ETHEREUM]: _swap.Assets.USDC
|
|
41
|
-
};
|
|
42
|
-
exports.CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING;
|
|
43
|
-
const CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING = {
|
|
44
|
-
[_chainList.COMMON_ASSETS.PDOT]: _swap.Assets.DOT,
|
|
45
|
-
[_chainList.COMMON_ASSETS.ETH_SEPOLIA]: _swap.Assets.ETH,
|
|
46
|
-
[_chainList.COMMON_ASSETS.USDC_SEPOLIA]: _swap.Assets.USDC
|
|
47
|
-
};
|
|
48
|
-
exports.CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING = CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING;
|
|
49
|
-
const SWAP_QUOTE_TIMEOUT_MAP = {
|
|
50
|
-
// in milliseconds
|
|
51
|
-
default: 30000,
|
|
52
|
-
[_swap2.SwapProviderId.CHAIN_FLIP_TESTNET]: 30000,
|
|
53
|
-
[_swap2.SwapProviderId.CHAIN_FLIP_MAINNET]: 30000
|
|
54
|
-
};
|
|
55
|
-
exports.SWAP_QUOTE_TIMEOUT_MAP = SWAP_QUOTE_TIMEOUT_MAP;
|
|
56
|
-
const DEFAULT_SWAP_FIRST_STEP = {
|
|
57
|
-
id: 0,
|
|
58
|
-
name: 'Fill information',
|
|
59
|
-
type: _swap2.SwapStepType.DEFAULT
|
|
60
|
-
};
|
|
61
|
-
exports.DEFAULT_SWAP_FIRST_STEP = DEFAULT_SWAP_FIRST_STEP;
|
|
62
|
-
const MOCK_SWAP_FEE = {
|
|
63
|
-
feeComponent: [],
|
|
64
|
-
defaultFeeToken: '',
|
|
65
|
-
feeOptions: []
|
|
66
|
-
};
|
|
67
|
-
exports.MOCK_SWAP_FEE = MOCK_SWAP_FEE;
|
|
68
|
-
function getSwapAlternativeAsset(swapPair) {
|
|
69
|
-
var _swapPair$metadata;
|
|
70
|
-
return swapPair === null || swapPair === void 0 ? void 0 : (_swapPair$metadata = swapPair.metadata) === null || _swapPair$metadata === void 0 ? void 0 : _swapPair$metadata.alternativeAsset;
|
|
71
|
-
}
|
|
72
|
-
function getSwapAltToken(chainAsset) {
|
|
73
|
-
var _chainAsset$metadata;
|
|
74
|
-
return (_chainAsset$metadata = chainAsset.metadata) === null || _chainAsset$metadata === void 0 ? void 0 : _chainAsset$metadata.alternativeSwapAsset;
|
|
75
|
-
}
|
|
76
|
-
function calculateSwapRate(fromAmount, toAmount, fromAsset, toAsset) {
|
|
77
|
-
const bnFromAmount = new _bignumber.default(fromAmount);
|
|
78
|
-
const bnToAmount = new _bignumber.default(toAmount);
|
|
79
|
-
const decimalDiff = (0, _utils._getAssetDecimals)(toAsset) - (0, _utils._getAssetDecimals)(fromAsset);
|
|
80
|
-
const bnRate = bnFromAmount.div(bnToAmount);
|
|
81
|
-
return 1 / bnRate.times(10 ** decimalDiff).toNumber();
|
|
82
|
-
}
|
|
83
|
-
function getChainflipEarlyValidationError(error, metadata) {
|
|
84
|
-
// todo: support more providers
|
|
85
|
-
switch (error) {
|
|
86
|
-
case _swap2.SwapErrorType.NOT_MEET_MIN_SWAP:
|
|
87
|
-
{
|
|
88
|
-
const parsedMinSwapValue = (0, _utils2.formatNumber)(metadata.minSwap.value, metadata.minSwap.decimals);
|
|
89
|
-
const message = `Amount too low. Increase your amount above ${parsedMinSwapValue} ${metadata.minSwap.symbol} and try again`;
|
|
90
|
-
return new _SwapError.SwapError(error, message);
|
|
91
|
-
}
|
|
92
|
-
case _swap2.SwapErrorType.SWAP_EXCEED_ALLOWANCE:
|
|
93
|
-
{
|
|
94
|
-
if (metadata.maxSwap) {
|
|
95
|
-
const parsedMaxSwapValue = (0, _utils2.formatNumber)(metadata.maxSwap.value, metadata.maxSwap.decimals);
|
|
96
|
-
return new _SwapError.SwapError(error, `Amount too high. Lower your amount below ${parsedMaxSwapValue} ${metadata.maxSwap.symbol} and try again`);
|
|
97
|
-
} else {
|
|
98
|
-
return new _SwapError.SwapError(error, 'Amount too high. Lower your amount and try again');
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
case _swap2.SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
102
|
-
return new _SwapError.SwapError(error, 'This swap pair is not supported');
|
|
103
|
-
case _swap2.SwapErrorType.UNKNOWN:
|
|
104
|
-
return new _SwapError.SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
105
|
-
case _swap2.SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
106
|
-
return new _SwapError.SwapError(error, 'No swap quote found. Adjust your amount or try again later.');
|
|
107
|
-
default:
|
|
108
|
-
return new _SwapError.SwapError(error);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
function getEarlyHydradxValidationError(error, metadata) {
|
|
112
|
-
switch (error) {
|
|
113
|
-
case _swap2.SwapErrorType.AMOUNT_CANNOT_BE_ZERO:
|
|
114
|
-
{
|
|
115
|
-
return new _SwapError.SwapError(error, 'Amount too low. Increase your amount above 0 and try again');
|
|
116
|
-
}
|
|
117
|
-
case _swap2.SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
118
|
-
return new _SwapError.SwapError(error, 'This swap pair is not supported');
|
|
119
|
-
case _swap2.SwapErrorType.UNKNOWN:
|
|
120
|
-
return new _SwapError.SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
121
|
-
case _swap2.SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
122
|
-
return new _SwapError.SwapError(error, 'No swap quote found. Adjust your amount or try again later.');
|
|
123
|
-
default:
|
|
124
|
-
return new _SwapError.SwapError(error);
|
|
125
|
-
}
|
|
126
|
-
}
|
package/cjs/types/balance.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
package/cjs/types/fee/evm.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
package/cjs/types/fee/fee.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.SWFeeType = exports.SWFee = void 0;
|
|
7
|
-
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
8
|
-
// Copyright 2019-2022 @subwallet/extension-base
|
|
9
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
10
|
-
let SWFeeType;
|
|
11
|
-
exports.SWFeeType = SWFeeType;
|
|
12
|
-
(function (SWFeeType) {
|
|
13
|
-
SWFeeType["EIP_1559"] = "EIP_1559";
|
|
14
|
-
SWFeeType["LEGACY"] = "LEGACY";
|
|
15
|
-
SWFeeType["SUBSTRATE"] = "SUBSTRATE";
|
|
16
|
-
})(SWFeeType || (exports.SWFeeType = SWFeeType = {}));
|
|
17
|
-
class SWFee {
|
|
18
|
-
get transactionId() {
|
|
19
|
-
return this._transactionId;
|
|
20
|
-
}
|
|
21
|
-
get selectedFeeOption() {
|
|
22
|
-
return this._selectedFeeOption;
|
|
23
|
-
}
|
|
24
|
-
static build(feeOptions, chain, selectedFeeOption) {
|
|
25
|
-
// todo: might need to parse metadata depending on the type
|
|
26
|
-
if (selectedFeeOption) {
|
|
27
|
-
return new SWFee(feeOptions, chain, selectedFeeOption);
|
|
28
|
-
} else {
|
|
29
|
-
const defaultFeeOption = feeOptions.find(option => option.isDefault);
|
|
30
|
-
return new SWFee(feeOptions, chain, defaultFeeOption);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
static buildSimpleFee(tokenInfo, amount, type) {
|
|
34
|
-
// used for simple transaction paid in native tokens
|
|
35
|
-
const defaultOption = {
|
|
36
|
-
tokenInfo,
|
|
37
|
-
isDefault: (0, _utils._isNativeToken)(tokenInfo),
|
|
38
|
-
// if it's the native token of the chain
|
|
39
|
-
amount,
|
|
40
|
-
type
|
|
41
|
-
};
|
|
42
|
-
return new SWFee([defaultOption], tokenInfo.originChain, defaultOption);
|
|
43
|
-
}
|
|
44
|
-
static buildFeeOption(tokenInfo, amount, type) {
|
|
45
|
-
// todo: calculate totalFeeValue
|
|
46
|
-
// todo: implement more logic to handle complicated transaction process
|
|
47
|
-
return {
|
|
48
|
-
tokenInfo,
|
|
49
|
-
isDefault: (0, _utils._isNativeToken)(tokenInfo),
|
|
50
|
-
// if it's the native token of the chain
|
|
51
|
-
amount,
|
|
52
|
-
type
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
setTransactionId(transactionId) {
|
|
56
|
-
this._transactionId = transactionId;
|
|
57
|
-
}
|
|
58
|
-
setSelectedFeeOption(feeOption) {
|
|
59
|
-
this._selectedFeeOption = feeOption;
|
|
60
|
-
}
|
|
61
|
-
constructor(feeOptions, chain, selectedFeeOption) {
|
|
62
|
-
this.chain = chain;
|
|
63
|
-
this.feeOptions = feeOptions;
|
|
64
|
-
this._selectedFeeOption = selectedFeeOption;
|
|
65
|
-
}
|
|
66
|
-
getDefaultFeeOption() {
|
|
67
|
-
return this.feeOptions.find(option => option.isDefault);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
exports.SWFee = SWFee;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
package/cjs/types/swap/index.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports._SUPPORTED_SWAP_PROVIDERS = exports.SwapStepType = exports.SwapProviderId = exports.SwapFeeType = exports.SwapErrorType = void 0;
|
|
7
|
-
// Copyright 2019-2022 @subwallet/extension-base
|
|
8
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
-
// core
|
|
10
|
-
let SwapErrorType;
|
|
11
|
-
exports.SwapErrorType = SwapErrorType;
|
|
12
|
-
(function (SwapErrorType) {
|
|
13
|
-
SwapErrorType["ERROR_FETCHING_QUOTE"] = "ERROR_FETCHING_QUOTE";
|
|
14
|
-
SwapErrorType["NOT_MEET_MIN_SWAP"] = "NOT_MEET_MIN_SWAP";
|
|
15
|
-
SwapErrorType["UNKNOWN"] = "UNKNOWN";
|
|
16
|
-
SwapErrorType["ASSET_NOT_SUPPORTED"] = "ASSET_NOT_SUPPORTED";
|
|
17
|
-
SwapErrorType["QUOTE_TIMEOUT"] = "QUOTE_TIMEOUT";
|
|
18
|
-
SwapErrorType["INVALID_RECIPIENT"] = "INVALID_RECIPIENT";
|
|
19
|
-
SwapErrorType["SWAP_EXCEED_ALLOWANCE"] = "SWAP_EXCEED_ALLOWANCE";
|
|
20
|
-
SwapErrorType["SWAP_NOT_ENOUGH_BALANCE"] = "SWAP_NOT_ENOUGH_BALANCE";
|
|
21
|
-
SwapErrorType["NOT_ENOUGH_LIQUIDITY"] = "NOT_ENOUGH_LIQUIDITY";
|
|
22
|
-
SwapErrorType["AMOUNT_CANNOT_BE_ZERO"] = "AMOUNT_CANNOT_BE_ZERO";
|
|
23
|
-
})(SwapErrorType || (exports.SwapErrorType = SwapErrorType = {}));
|
|
24
|
-
let SwapStepType;
|
|
25
|
-
exports.SwapStepType = SwapStepType;
|
|
26
|
-
(function (SwapStepType) {
|
|
27
|
-
SwapStepType["DEFAULT"] = "DEFAULT";
|
|
28
|
-
SwapStepType["TOKEN_APPROVAL"] = "TOKEN_APPROVAL";
|
|
29
|
-
SwapStepType["SET_FEE_TOKEN"] = "SET_FEE_TOKEN";
|
|
30
|
-
SwapStepType["SWAP"] = "SWAP";
|
|
31
|
-
SwapStepType["XCM"] = "XCM";
|
|
32
|
-
})(SwapStepType || (exports.SwapStepType = SwapStepType = {}));
|
|
33
|
-
let SwapProviderId;
|
|
34
|
-
exports.SwapProviderId = SwapProviderId;
|
|
35
|
-
(function (SwapProviderId) {
|
|
36
|
-
SwapProviderId["CHAIN_FLIP_TESTNET"] = "CHAIN_FLIP_TESTNET";
|
|
37
|
-
SwapProviderId["CHAIN_FLIP_MAINNET"] = "CHAIN_FLIP_MAINNET";
|
|
38
|
-
SwapProviderId["HYDRADX_MAINNET"] = "HYDRADX_MAINNET";
|
|
39
|
-
SwapProviderId["HYDRADX_TESTNET"] = "HYDRADX_TESTNET";
|
|
40
|
-
})(SwapProviderId || (exports.SwapProviderId = SwapProviderId = {}));
|
|
41
|
-
const _SUPPORTED_SWAP_PROVIDERS = [SwapProviderId.CHAIN_FLIP_TESTNET, SwapProviderId.CHAIN_FLIP_MAINNET, SwapProviderId.HYDRADX_MAINNET, SwapProviderId.HYDRADX_TESTNET];
|
|
42
|
-
exports._SUPPORTED_SWAP_PROVIDERS = _SUPPORTED_SWAP_PROVIDERS;
|
|
43
|
-
// process handling
|
|
44
|
-
let SwapFeeType;
|
|
45
|
-
exports.SwapFeeType = SwapFeeType;
|
|
46
|
-
(function (SwapFeeType) {
|
|
47
|
-
SwapFeeType["PLATFORM_FEE"] = "PLATFORM_FEE";
|
|
48
|
-
SwapFeeType["NETWORK_FEE"] = "NETWORK_FEE";
|
|
49
|
-
SwapFeeType["WALLET_FEE"] = "WALLET_FEE";
|
|
50
|
-
})(SwapFeeType || (exports.SwapFeeType = SwapFeeType = {}));
|
package/cjs/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
package/cjs/utils/address.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.convertSubjectInfoToAddresses = void 0;
|
|
7
|
-
exports.quickFormatAddressToCompare = quickFormatAddressToCompare;
|
|
8
|
-
exports.simpleAddress = void 0;
|
|
9
|
-
var _index = require("@subwallet/extension-base/utils/index");
|
|
10
|
-
var _utilCrypto = require("@polkadot/util-crypto");
|
|
11
|
-
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
12
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
13
|
-
|
|
14
|
-
const simpleAddress = address => {
|
|
15
|
-
if ((0, _utilCrypto.isEthereumAddress)(address)) {
|
|
16
|
-
return address;
|
|
17
|
-
}
|
|
18
|
-
return (0, _utilCrypto.encodeAddress)((0, _utilCrypto.decodeAddress)(address));
|
|
19
|
-
};
|
|
20
|
-
exports.simpleAddress = simpleAddress;
|
|
21
|
-
function quickFormatAddressToCompare(address) {
|
|
22
|
-
if (!(0, _utilCrypto.isAddress)(address)) {
|
|
23
|
-
return address;
|
|
24
|
-
}
|
|
25
|
-
return (0, _index.reformatAddress)(address, 42).toLowerCase();
|
|
26
|
-
}
|
|
27
|
-
const convertSubjectInfoToAddresses = subjectInfo => {
|
|
28
|
-
return Object.values(subjectInfo).map(info => ({
|
|
29
|
-
address: info.json.address,
|
|
30
|
-
type: info.type,
|
|
31
|
-
...info.json.meta
|
|
32
|
-
}));
|
|
33
|
-
};
|
|
34
|
-
exports.convertSubjectInfoToAddresses = convertSubjectInfoToAddresses;
|
package/cjs/utils/keyring.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.extractPrivateKey = extractPrivateKey;
|
|
7
|
-
exports.unlockAccount = exports.lockAccount = void 0;
|
|
8
|
-
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
9
|
-
// Copyright 2019-2022 @subwallet/extension-base
|
|
10
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
-
|
|
12
|
-
// import _decode from '@polkadot/keyring/pair/decode';
|
|
13
|
-
|
|
14
|
-
function extract(address) {
|
|
15
|
-
// @ts-ignore
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
17
|
-
const rs = this.getPair(address);
|
|
18
|
-
|
|
19
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
20
|
-
console.log(rs.publicKey);
|
|
21
|
-
}
|
|
22
|
-
function extractPrivateKey(keyring, address, password) {
|
|
23
|
-
extract.call(keyring, address);
|
|
24
|
-
}
|
|
25
|
-
const unlockAccount = signAddress => {
|
|
26
|
-
let publicKey;
|
|
27
|
-
try {
|
|
28
|
-
publicKey = _uiKeyring.keyring.decodeAddress(signAddress);
|
|
29
|
-
} catch (error) {
|
|
30
|
-
console.error(error);
|
|
31
|
-
return 'Unable to decode address';
|
|
32
|
-
}
|
|
33
|
-
const pair = _uiKeyring.keyring.getPair(publicKey);
|
|
34
|
-
if (!pair) {
|
|
35
|
-
return 'Unable to find pair';
|
|
36
|
-
}
|
|
37
|
-
if (pair.isLocked) {
|
|
38
|
-
try {
|
|
39
|
-
_uiKeyring.keyring.unlockPair(pair.address);
|
|
40
|
-
} catch (e) {
|
|
41
|
-
return e.message;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return null;
|
|
45
|
-
};
|
|
46
|
-
exports.unlockAccount = unlockAccount;
|
|
47
|
-
const lockAccount = address => {
|
|
48
|
-
try {
|
|
49
|
-
const pair = _uiKeyring.keyring.getPair(address);
|
|
50
|
-
if (pair) {
|
|
51
|
-
pair.lock();
|
|
52
|
-
}
|
|
53
|
-
} catch (error) {
|
|
54
|
-
console.error('Unable to lock account', error);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
exports.lockAccount = lockAccount;
|
package/cjs/utils/swap.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.swapCustomFormatter = exports.formatNumberString = void 0;
|
|
8
|
-
var _number = require("@subwallet/extension-base/utils/number");
|
|
9
|
-
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
10
|
-
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
11
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
12
|
-
|
|
13
|
-
// Clear zero from end, use with decimal only
|
|
14
|
-
const clearZero = result => {
|
|
15
|
-
let index = result.length - 1;
|
|
16
|
-
while (result[index] === '0') {
|
|
17
|
-
result = result.slice(0, index);
|
|
18
|
-
index--;
|
|
19
|
-
}
|
|
20
|
-
return result;
|
|
21
|
-
};
|
|
22
|
-
const NUM_1T = new _bignumber.default(1e12);
|
|
23
|
-
const TLIM = new _bignumber.default(1e17);
|
|
24
|
-
const NUM_1B = new _bignumber.default(1e9);
|
|
25
|
-
const BLIM = new _bignumber.default(1e14);
|
|
26
|
-
const NUM_1M = new _bignumber.default(1e6);
|
|
27
|
-
const NUM_100M = new _bignumber.default(1e8);
|
|
28
|
-
const swapCustomFormatter = (input, metadata) => {
|
|
29
|
-
const minNumberFormat = 2;
|
|
30
|
-
const maxNumberFormat = (metadata === null || metadata === void 0 ? void 0 : metadata.maxNumberFormat) || 6;
|
|
31
|
-
const [int, decimal = '0'] = input.split('.');
|
|
32
|
-
let _decimal = '';
|
|
33
|
-
const intNumber = new _bignumber.default(int);
|
|
34
|
-
const max = _number.BN_TEN.pow(maxNumberFormat);
|
|
35
|
-
|
|
36
|
-
// If count of number in integer part greater or equal maxNumberFormat, do not show decimal
|
|
37
|
-
if (intNumber.gte(max)) {
|
|
38
|
-
if (intNumber.gte(NUM_100M)) {
|
|
39
|
-
if (intNumber.gte(BLIM)) {
|
|
40
|
-
if (intNumber.gte(TLIM)) {
|
|
41
|
-
return `${intNumber.dividedBy(NUM_1T).toFixed()} T`;
|
|
42
|
-
}
|
|
43
|
-
return `${intNumber.dividedBy(NUM_1B).toFixed()} B`;
|
|
44
|
-
}
|
|
45
|
-
return `${intNumber.dividedBy(NUM_1M).toFixed()} M`;
|
|
46
|
-
}
|
|
47
|
-
_decimal = decimal.slice(0, metadata === null || metadata === void 0 ? void 0 : metadata.maxNumberFormat);
|
|
48
|
-
return `${int}.${_decimal}`;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Get only minNumberFormat number at decimal
|
|
52
|
-
if (decimal.length <= minNumberFormat || !(metadata !== null && metadata !== void 0 && metadata.maxNumberFormat)) {
|
|
53
|
-
_decimal = decimal;
|
|
54
|
-
} else {
|
|
55
|
-
_decimal = decimal.slice(0, maxNumberFormat);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Clear zero number for decimal
|
|
59
|
-
_decimal = clearZero(_decimal);
|
|
60
|
-
if (_decimal) {
|
|
61
|
-
return `${int}.${_decimal}`;
|
|
62
|
-
}
|
|
63
|
-
return int;
|
|
64
|
-
};
|
|
65
|
-
exports.swapCustomFormatter = swapCustomFormatter;
|
|
66
|
-
const formatNumberString = numberString => {
|
|
67
|
-
const number = parseFloat(numberString);
|
|
68
|
-
const exponentNotation = number.toExponential();
|
|
69
|
-
let [coefficient, exponent] = exponentNotation.split('e');
|
|
70
|
-
if (parseInt(exponent) < 0) {
|
|
71
|
-
coefficient = coefficient.replace(/^0+|\./g, '');
|
|
72
|
-
coefficient = '0.' + '0'.repeat(Math.abs(parseInt(exponent)) - 1) + coefficient;
|
|
73
|
-
} else {
|
|
74
|
-
coefficient += '0'.repeat(parseInt(exponent) - coefficient.length + 1);
|
|
75
|
-
}
|
|
76
|
-
return coefficient;
|
|
77
|
-
};
|
|
78
|
-
exports.formatNumberString = formatNumberString;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { SwapError } from '@subwallet/extension-base/background/errors/SwapError';
|
|
2
|
-
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
3
|
-
import { BalanceService } from '@subwallet/extension-base/services/balance-service';
|
|
4
|
-
import { ChainService } from '@subwallet/extension-base/services/chain-service';
|
|
5
|
-
import { BaseStepDetail } from '@subwallet/extension-base/types/service-base';
|
|
6
|
-
import { GenSwapStepFunc, OptimalSwapPath, OptimalSwapPathParams, SwapEarlyValidation, SwapFeeInfo, SwapProvider, SwapQuote, SwapRequest, SwapSubmitParams, SwapSubmitStepData, ValidateSwapProcessParams } from '@subwallet/extension-base/types/swap';
|
|
7
|
-
export interface SwapBaseInterface {
|
|
8
|
-
getSwapQuote: (request: SwapRequest) => Promise<SwapQuote | SwapError>;
|
|
9
|
-
generateOptimalProcess: (params: OptimalSwapPathParams) => Promise<OptimalSwapPath>;
|
|
10
|
-
getSubmitStep: (params: OptimalSwapPathParams) => Promise<[BaseStepDetail, SwapFeeInfo] | undefined>;
|
|
11
|
-
validateSwapRequest: (request: SwapRequest) => Promise<SwapEarlyValidation>;
|
|
12
|
-
validateSwapProcess: (params: ValidateSwapProcessParams) => Promise<TransactionError[]>;
|
|
13
|
-
handleSwapProcess: (params: SwapSubmitParams) => Promise<SwapSubmitStepData>;
|
|
14
|
-
handleSubmitStep: (params: SwapSubmitParams) => Promise<SwapSubmitStepData>;
|
|
15
|
-
isReady?: boolean;
|
|
16
|
-
init?: () => Promise<void>;
|
|
17
|
-
}
|
|
18
|
-
export interface SwapBaseHandlerInitParams {
|
|
19
|
-
providerSlug: string;
|
|
20
|
-
providerName: string;
|
|
21
|
-
chainService: ChainService;
|
|
22
|
-
balanceService: BalanceService;
|
|
23
|
-
}
|
|
24
|
-
export declare class SwapBaseHandler {
|
|
25
|
-
private readonly providerSlug;
|
|
26
|
-
private readonly providerName;
|
|
27
|
-
chainService: ChainService;
|
|
28
|
-
balanceService: BalanceService;
|
|
29
|
-
constructor({ balanceService, chainService, providerName, providerSlug }: SwapBaseHandlerInitParams);
|
|
30
|
-
generateOptimalProcess(params: OptimalSwapPathParams, genStepFuncList: GenSwapStepFunc[]): Promise<OptimalSwapPath>;
|
|
31
|
-
validateXcmStep(params: ValidateSwapProcessParams, stepIndex: number): Promise<TransactionError[]>;
|
|
32
|
-
validateTokenApproveStep(params: ValidateSwapProcessParams, stepIndex: number): Promise<TransactionError[]>;
|
|
33
|
-
validateSetFeeTokenStep(params: ValidateSwapProcessParams, stepIndex: number): Promise<TransactionError[]>;
|
|
34
|
-
validateSwapStep(params: ValidateSwapProcessParams, isXcmOk: boolean, stepIndex: number): Promise<TransactionError[]>;
|
|
35
|
-
get name(): string;
|
|
36
|
-
get slug(): string;
|
|
37
|
-
get providerInfo(): SwapProvider;
|
|
38
|
-
}
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
4
|
-
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
5
|
-
import { BasicTxErrorType } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
|
-
import { _getAssetDecimals, _getTokenMinAmount, _isChainEvmCompatible, _isNativeToken } from '@subwallet/extension-base/services/chain-service/utils';
|
|
7
|
-
import { DEFAULT_SWAP_FIRST_STEP, getSwapAlternativeAsset, MOCK_SWAP_FEE } from '@subwallet/extension-base/services/swap-service/utils';
|
|
8
|
-
import { SwapErrorType, SwapFeeType } from '@subwallet/extension-base/types/swap';
|
|
9
|
-
import { formatNumber } from '@subwallet/extension-base/utils';
|
|
10
|
-
import BigNumber from 'bignumber.js';
|
|
11
|
-
import { t } from 'i18next';
|
|
12
|
-
import { isEthereumAddress } from '@polkadot/util-crypto';
|
|
13
|
-
export class SwapBaseHandler {
|
|
14
|
-
constructor({
|
|
15
|
-
balanceService,
|
|
16
|
-
chainService,
|
|
17
|
-
providerName,
|
|
18
|
-
providerSlug
|
|
19
|
-
}) {
|
|
20
|
-
this.providerName = providerName;
|
|
21
|
-
this.providerSlug = providerSlug;
|
|
22
|
-
this.chainService = chainService;
|
|
23
|
-
this.balanceService = balanceService;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// public abstract getSwapQuote(request: SwapRequest): Promise<SwapQuote | SwapError>;
|
|
27
|
-
async generateOptimalProcess(params, genStepFuncList) {
|
|
28
|
-
const result = {
|
|
29
|
-
totalFee: [MOCK_SWAP_FEE],
|
|
30
|
-
steps: [DEFAULT_SWAP_FIRST_STEP]
|
|
31
|
-
};
|
|
32
|
-
try {
|
|
33
|
-
for (const genStepFunc of genStepFuncList) {
|
|
34
|
-
const step = await genStepFunc.bind(this, params)();
|
|
35
|
-
if (step) {
|
|
36
|
-
result.steps.push({
|
|
37
|
-
id: result.steps.length,
|
|
38
|
-
...step[0]
|
|
39
|
-
});
|
|
40
|
-
result.totalFee.push(step[1]);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return result;
|
|
44
|
-
} catch (e) {
|
|
45
|
-
return result;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
async validateXcmStep(params, stepIndex) {
|
|
49
|
-
const bnAmount = new BigNumber(params.selectedQuote.fromAmount);
|
|
50
|
-
const swapPair = params.selectedQuote.pair;
|
|
51
|
-
const alternativeAssetSlug = getSwapAlternativeAsset(swapPair);
|
|
52
|
-
if (!alternativeAssetSlug) {
|
|
53
|
-
return [new TransactionError(BasicTxErrorType.INTERNAL_ERROR)];
|
|
54
|
-
}
|
|
55
|
-
const alternativeAsset = this.chainService.getAssetBySlug(alternativeAssetSlug);
|
|
56
|
-
const fromAsset = this.chainService.getAssetBySlug(swapPair.from);
|
|
57
|
-
const [alternativeAssetBalance, fromAssetBalance] = await Promise.all([this.balanceService.getTokenFreeBalance(params.address, alternativeAsset.originChain, alternativeAssetSlug), this.balanceService.getTokenFreeBalance(params.address, fromAsset.originChain, fromAsset.slug)]);
|
|
58
|
-
const bnAlternativeAssetBalance = new BigNumber(alternativeAssetBalance.value);
|
|
59
|
-
const bnFromAssetBalance = new BigNumber(fromAssetBalance.value);
|
|
60
|
-
const xcmFeeComponent = params.process.totalFee[stepIndex].feeComponent[0]; // todo: can do better than indexing
|
|
61
|
-
const xcmFee = new BigNumber(xcmFeeComponent.amount || '0');
|
|
62
|
-
let xcmAmount = bnAmount.minus(bnFromAssetBalance);
|
|
63
|
-
if (_isNativeToken(alternativeAsset)) {
|
|
64
|
-
xcmAmount = xcmAmount.plus(xcmFee);
|
|
65
|
-
}
|
|
66
|
-
const alternativeTokenMinAmount = new BigNumber(alternativeAsset.minAmount || '0');
|
|
67
|
-
if (!bnAlternativeAssetBalance.minus(xcmAmount).gte(alternativeTokenMinAmount)) {
|
|
68
|
-
const maxBn = bnFromAssetBalance.plus(new BigNumber(alternativeAssetBalance.value)).minus(xcmFee).minus(alternativeTokenMinAmount);
|
|
69
|
-
const maxValue = formatNumber(maxBn.toString(), fromAsset.decimals || 0);
|
|
70
|
-
const altInputTokenInfo = this.chainService.getAssetBySlug(alternativeAssetSlug);
|
|
71
|
-
const symbol = altInputTokenInfo.symbol;
|
|
72
|
-
const alternativeChain = this.chainService.getChainInfoByKey(altInputTokenInfo.originChain);
|
|
73
|
-
const chain = this.chainService.getChainInfoByKey(fromAsset.originChain);
|
|
74
|
-
const inputNetworkName = chain.name;
|
|
75
|
-
const altNetworkName = alternativeChain.name;
|
|
76
|
-
const currentValue = formatNumber(bnFromAssetBalance.toString(), fromAsset.decimals || 0);
|
|
77
|
-
const bnMaxXCM = new BigNumber(alternativeAssetBalance.value).minus(xcmFee).minus(alternativeTokenMinAmount);
|
|
78
|
-
const maxXCMValue = formatNumber(bnMaxXCM.toString(), fromAsset.decimals || 0);
|
|
79
|
-
if (maxBn.lte(0) || bnFromAssetBalance.lte(0) || bnMaxXCM.lte(0)) {
|
|
80
|
-
return [new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, t(`Insufficient balance. Deposit ${fromAsset.symbol} and try again.`))];
|
|
81
|
-
}
|
|
82
|
-
return [new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, t('You can only enter a maximum of {{maxValue}} {{symbol}}, which is {{currentValue}} {{symbol}} ({{inputNetworkName}}) and {{maxXCMValue}} {{symbol}} ({{altNetworkName}}). Lower your amount and try again.', {
|
|
83
|
-
replace: {
|
|
84
|
-
symbol,
|
|
85
|
-
maxValue,
|
|
86
|
-
inputNetworkName,
|
|
87
|
-
altNetworkName,
|
|
88
|
-
currentValue,
|
|
89
|
-
maxXCMValue
|
|
90
|
-
}
|
|
91
|
-
}))];
|
|
92
|
-
}
|
|
93
|
-
return [];
|
|
94
|
-
}
|
|
95
|
-
async validateTokenApproveStep(params, stepIndex) {
|
|
96
|
-
return Promise.resolve([]);
|
|
97
|
-
}
|
|
98
|
-
async validateSetFeeTokenStep(params, stepIndex) {
|
|
99
|
-
return Promise.resolve([]);
|
|
100
|
-
}
|
|
101
|
-
async validateSwapStep(params, isXcmOk, stepIndex) {
|
|
102
|
-
if (!params.selectedQuote) {
|
|
103
|
-
return Promise.resolve([new TransactionError(BasicTxErrorType.INTERNAL_ERROR)]);
|
|
104
|
-
}
|
|
105
|
-
const selectedQuote = params.selectedQuote;
|
|
106
|
-
const currentTimestamp = +Date.now();
|
|
107
|
-
if (selectedQuote.aliveUntil <= currentTimestamp) {
|
|
108
|
-
return Promise.resolve([new TransactionError(SwapErrorType.QUOTE_TIMEOUT)]);
|
|
109
|
-
}
|
|
110
|
-
const bnAmount = new BigNumber(params.selectedQuote.fromAmount);
|
|
111
|
-
const fromAsset = this.chainService.getAssetBySlug(params.selectedQuote.pair.from);
|
|
112
|
-
const stepFee = params.process.totalFee[stepIndex].feeComponent;
|
|
113
|
-
const networkFee = stepFee.find(fee => fee.feeType === SwapFeeType.NETWORK_FEE);
|
|
114
|
-
if (!networkFee) {
|
|
115
|
-
return Promise.resolve([new TransactionError(BasicTxErrorType.INTERNAL_ERROR)]);
|
|
116
|
-
}
|
|
117
|
-
const feeTokenInfo = this.chainService.getAssetBySlug(networkFee.tokenSlug);
|
|
118
|
-
const feeTokenChain = this.chainService.getChainInfoByKey(feeTokenInfo.originChain);
|
|
119
|
-
const [feeTokenBalance, fromAssetBalance] = await Promise.all([this.balanceService.getTokenFreeBalance(params.address, feeTokenInfo.originChain, feeTokenInfo.slug), this.balanceService.getTokenFreeBalance(params.address, fromAsset.originChain, fromAsset.slug)]);
|
|
120
|
-
const bnFeeTokenBalance = new BigNumber(feeTokenBalance.value);
|
|
121
|
-
const bnFromAssetBalance = new BigNumber(fromAssetBalance.value);
|
|
122
|
-
if (bnFeeTokenBalance.lte(new BigNumber(networkFee.amount))) {
|
|
123
|
-
return Promise.resolve([new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, `You don't have enough ${feeTokenInfo.symbol} (${feeTokenChain.name}) to pay transaction fee`)]);
|
|
124
|
-
}
|
|
125
|
-
if (params.selectedQuote.minSwap) {
|
|
126
|
-
const minProtocolSwap = new BigNumber(params.selectedQuote.minSwap);
|
|
127
|
-
if (!isXcmOk && bnFromAssetBalance.lte(minProtocolSwap)) {
|
|
128
|
-
const parsedMinSwapValue = formatNumber(minProtocolSwap, _getAssetDecimals(fromAsset));
|
|
129
|
-
return Promise.resolve([new TransactionError(SwapErrorType.SWAP_NOT_ENOUGH_BALANCE, `Insufficient balance. You need more than ${parsedMinSwapValue} ${fromAsset.symbol} to start swapping. Deposit ${fromAsset.symbol} and try again.`)]); // todo: min swap or amount?
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
const bnSrcAssetMinAmount = new BigNumber(_getTokenMinAmount(fromAsset));
|
|
134
|
-
const bnMaxBalanceSwap = bnFromAssetBalance.minus(bnSrcAssetMinAmount);
|
|
135
|
-
if (!isXcmOk && bnAmount.gte(bnMaxBalanceSwap)) {
|
|
136
|
-
const parsedMaxBalanceSwap = formatNumber(bnMaxBalanceSwap, _getAssetDecimals(fromAsset));
|
|
137
|
-
return Promise.resolve([new TransactionError(SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnMaxBalanceSwap.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromAsset.symbol}` : ''} and try again`)]);
|
|
138
|
-
}
|
|
139
|
-
if (params.recipient) {
|
|
140
|
-
const toAsset = this.chainService.getAssetBySlug(params.selectedQuote.pair.to);
|
|
141
|
-
const destChainInfo = this.chainService.getChainInfoByKey(toAsset.originChain);
|
|
142
|
-
const isEvmAddress = isEthereumAddress(params.recipient);
|
|
143
|
-
const isEvmDestChain = _isChainEvmCompatible(destChainInfo);
|
|
144
|
-
if (isEvmAddress && !isEvmDestChain || !isEvmAddress && isEvmDestChain) {
|
|
145
|
-
return Promise.resolve([new TransactionError(SwapErrorType.INVALID_RECIPIENT)]);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return Promise.resolve([]);
|
|
149
|
-
}
|
|
150
|
-
get name() {
|
|
151
|
-
return this.providerName;
|
|
152
|
-
}
|
|
153
|
-
get slug() {
|
|
154
|
-
return this.providerSlug;
|
|
155
|
-
}
|
|
156
|
-
get providerInfo() {
|
|
157
|
-
return {
|
|
158
|
-
id: this.providerSlug,
|
|
159
|
-
name: this.providerName
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { COMMON_ASSETS } from '@subwallet/chain-list';
|
|
2
|
-
import { SwapError } from '@subwallet/extension-base/background/errors/SwapError';
|
|
3
|
-
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
4
|
-
import { BalanceService } from '@subwallet/extension-base/services/balance-service';
|
|
5
|
-
import { ChainService } from '@subwallet/extension-base/services/chain-service';
|
|
6
|
-
import { SwapBaseInterface } from '@subwallet/extension-base/services/swap-service/handler/base-handler';
|
|
7
|
-
import { BaseStepDetail } from '@subwallet/extension-base/types/service-base';
|
|
8
|
-
import { OptimalSwapPath, OptimalSwapPathParams, SwapEarlyValidation, SwapFeeInfo, SwapQuote, SwapRequest, SwapSubmitParams, SwapSubmitStepData, ValidateSwapProcessParams } from '@subwallet/extension-base/types/swap';
|
|
9
|
-
export declare class ChainflipSwapHandler implements SwapBaseInterface {
|
|
10
|
-
private swapSdk;
|
|
11
|
-
private readonly isTestnet;
|
|
12
|
-
private swapBaseHandler;
|
|
13
|
-
constructor(chainService: ChainService, balanceService: BalanceService, isTestnet?: boolean);
|
|
14
|
-
get chainService(): ChainService;
|
|
15
|
-
get balanceService(): BalanceService;
|
|
16
|
-
get providerInfo(): import("@subwallet/extension-base/types/swap").SwapProvider;
|
|
17
|
-
get name(): string;
|
|
18
|
-
get slug(): string;
|
|
19
|
-
get assetMapping(): Record<string, import("@chainflip/sdk/dist/contracts-b0BB7B5m").A>;
|
|
20
|
-
get chainMapping(): Record<string, import("@chainflip/sdk/dist/contracts-b0BB7B5m").C>;
|
|
21
|
-
get intermediaryAssetSlug(): COMMON_ASSETS.USDC_ETHEREUM | COMMON_ASSETS.USDC_SEPOLIA;
|
|
22
|
-
validateSwapRequest(request: SwapRequest): Promise<SwapEarlyValidation>;
|
|
23
|
-
private parseSwapPath;
|
|
24
|
-
getSwapQuote(request: SwapRequest): Promise<SwapQuote | SwapError>;
|
|
25
|
-
validateSwapProcess(params: ValidateSwapProcessParams): Promise<TransactionError[]>;
|
|
26
|
-
handleSubmitStep(params: SwapSubmitParams): Promise<SwapSubmitStepData>;
|
|
27
|
-
handleSwapProcess(params: SwapSubmitParams): Promise<SwapSubmitStepData>;
|
|
28
|
-
getSubmitStep(params: OptimalSwapPathParams): Promise<[BaseStepDetail, SwapFeeInfo] | undefined>;
|
|
29
|
-
generateOptimalProcess(params: OptimalSwapPathParams): Promise<OptimalSwapPath>;
|
|
30
|
-
}
|