@subwallet/extension-base 1.3.39-0 → 1.3.40-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/cjs/koni/background/handlers/Extension.js +79 -69
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/transfer/xcm/index.js +19 -28
- package/cjs/services/balance-service/transfer/xcm/utils.js +47 -49
- package/cjs/services/chain-service/constants.js +2 -2
- package/cjs/services/chain-service/index.js +4 -0
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/handlers/special.js +28 -36
- package/cjs/services/swap-service/handler/base-handler.js +58 -53
- package/cjs/services/swap-service/handler/kyber-handler.js +44 -28
- package/cjs/services/swap-service/handler/simpleswap-handler.js +79 -40
- package/cjs/services/swap-service/utils.js +2 -0
- package/cjs/utils/fee/transfer.js +41 -33
- package/koni/background/handlers/Extension.js +15 -5
- package/package.json +7 -7
- package/packageInfo.js +1 -1
- package/services/balance-service/transfer/xcm/index.d.ts +1 -2
- package/services/balance-service/transfer/xcm/index.js +16 -25
- package/services/balance-service/transfer/xcm/utils.d.ts +36 -6
- package/services/balance-service/transfer/xcm/utils.js +46 -48
- package/services/chain-service/constants.js +2 -2
- package/services/chain-service/index.js +4 -0
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/handlers/special.js +12 -20
- package/services/swap-service/handler/base-handler.js +11 -6
- package/services/swap-service/handler/kyber-handler.js +44 -28
- package/services/swap-service/handler/simpleswap-handler.js +80 -41
- package/services/swap-service/utils.js +2 -0
- package/utils/fee/transfer.js +11 -3
|
@@ -4,50 +4,83 @@
|
|
|
4
4
|
import { SwapError } from '@subwallet/extension-base/background/errors/SwapError';
|
|
5
5
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
6
6
|
import { ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
7
|
-
import { _getAssetDecimals, _getContractAddressOfToken, _isChainSubstrateCompatible, _isNativeToken } from '@subwallet/extension-base/services/chain-service/utils';
|
|
7
|
+
import { _getAssetDecimals, _getAssetSymbol, _getContractAddressOfToken, _isChainSubstrateCompatible, _isNativeToken } from '@subwallet/extension-base/services/chain-service/utils';
|
|
8
8
|
import { BasicTxErrorType, CommonStepType, DynamicSwapType, SwapErrorType, SwapProviderId, SwapStepType } from '@subwallet/extension-base/types';
|
|
9
9
|
import { _reformatAddressWithChain, formatNumber } from '@subwallet/extension-base/utils';
|
|
10
10
|
import { getId } from '@subwallet/extension-base/utils/getId';
|
|
11
11
|
import BigN, { BigNumber } from 'bignumber.js';
|
|
12
12
|
import { getERC20TransactionObject, getEVMTransactionObject } from "../../balance-service/transfer/smart-contract.js";
|
|
13
13
|
import { createSubstrateExtrinsic } from "../../balance-service/transfer/token.js";
|
|
14
|
-
import { SIMPLE_SWAP_SUPPORTED_TESTNET_ASSET_MAPPING } from "../utils.js";
|
|
15
14
|
import { SwapBaseHandler } from "./base-handler.js";
|
|
16
|
-
const apiUrl = 'https://api.simpleswap.io';
|
|
15
|
+
const apiUrl = 'https://api.simpleswap.io/v3';
|
|
17
16
|
export const simpleSwapApiKey = process.env.SIMPLE_SWAP_API_KEY || '';
|
|
18
17
|
const toBNString = (input, decimal) => {
|
|
19
18
|
const raw = new BigNumber(input);
|
|
20
19
|
return raw.shiftedBy(decimal).integerValue(BigNumber.ROUND_CEIL).toFixed();
|
|
21
20
|
};
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
21
|
+
const buildTxForSimpleSwap = async params => {
|
|
22
|
+
try {
|
|
23
|
+
const {
|
|
24
|
+
fromAmount,
|
|
25
|
+
fromAsset,
|
|
26
|
+
fromSymbol,
|
|
27
|
+
metadata,
|
|
28
|
+
receiver,
|
|
29
|
+
sender,
|
|
30
|
+
toAsset,
|
|
31
|
+
toSymbol
|
|
32
|
+
} = params;
|
|
33
|
+
const fromDecimals = _getAssetDecimals(fromAsset);
|
|
34
|
+
const toDecimals = _getAssetDecimals(toAsset);
|
|
35
|
+
const formattedAmount = formatNumber(fromAmount, fromDecimals, s => s);
|
|
36
|
+
const requestBody = {
|
|
37
|
+
fixed: false,
|
|
38
|
+
tickerFrom: fromSymbol,
|
|
39
|
+
tickerTo: toSymbol,
|
|
40
|
+
amount: formattedAmount,
|
|
41
|
+
networkFrom: metadata.fromChainSymbol,
|
|
42
|
+
networkTo: metadata.toChainSymbol,
|
|
43
|
+
addressTo: receiver,
|
|
44
|
+
extraIdTo: '',
|
|
45
|
+
userRefundAddress: sender,
|
|
46
|
+
userRefundExtraId: ''
|
|
47
|
+
};
|
|
48
|
+
const response = await fetch(`${apiUrl}/exchanges`, {
|
|
49
|
+
method: 'POST',
|
|
50
|
+
headers: {
|
|
51
|
+
accept: 'application/json',
|
|
52
|
+
'Content-Type': 'application/json',
|
|
53
|
+
'x-api-key': simpleSwapApiKey
|
|
54
|
+
},
|
|
55
|
+
body: JSON.stringify(requestBody)
|
|
56
|
+
});
|
|
57
|
+
if (!response.ok) {
|
|
58
|
+
const errorText = await response.text();
|
|
59
|
+
return {
|
|
60
|
+
error: new TransactionError(BasicTxErrorType.INTERNAL_ERROR, `Unable to create simpleswap transaction: ${errorText}`)
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const depositAddressResponse = await response.json();
|
|
64
|
+
const result = depositAddressResponse.result;
|
|
65
|
+
console.log('simpleswapID', result.id);
|
|
66
|
+
if (!(result !== null && result !== void 0 && result.id) || !result.addressFrom || !result.amountTo) {
|
|
67
|
+
return {
|
|
68
|
+
error: new TransactionError(BasicTxErrorType.INTERNAL_ERROR)
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
data: {
|
|
73
|
+
id: result.id,
|
|
74
|
+
addressFrom: result.addressFrom,
|
|
75
|
+
amountTo: toBNString(result.amountTo, toDecimals)
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
} catch (err) {
|
|
79
|
+
console.error('Error:', err);
|
|
80
|
+
return {
|
|
81
|
+
error: new TransactionError(BasicTxErrorType.INTERNAL_ERROR)
|
|
82
|
+
};
|
|
83
|
+
}
|
|
51
84
|
};
|
|
52
85
|
export class SimpleSwapHandler {
|
|
53
86
|
constructor(chainService, balanceService, feeService) {
|
|
@@ -131,25 +164,31 @@ export class SimpleSwapHandler {
|
|
|
131
164
|
const chainType = _isChainSubstrateCompatible(chainInfo) ? ChainType.SUBSTRATE : ChainType.EVM;
|
|
132
165
|
const sender = _reformatAddressWithChain(address, chainInfo);
|
|
133
166
|
const receiver = _reformatAddressWithChain(recipient !== null && recipient !== void 0 ? recipient : sender, toChainInfo);
|
|
134
|
-
const fromSymbol =
|
|
135
|
-
const toSymbol =
|
|
167
|
+
const fromSymbol = _getAssetSymbol(fromAsset).toLowerCase();
|
|
168
|
+
const toSymbol = _getAssetSymbol(toAsset).toLowerCase();
|
|
169
|
+
const metadata = quote.metadata;
|
|
136
170
|
const {
|
|
137
171
|
fromAmount
|
|
138
172
|
} = quote;
|
|
139
|
-
const {
|
|
140
|
-
addressFrom,
|
|
141
|
-
amountTo,
|
|
142
|
-
id
|
|
143
|
-
} = await createSwapRequest({
|
|
173
|
+
const result = await buildTxForSimpleSwap({
|
|
144
174
|
fromSymbol,
|
|
145
175
|
toSymbol,
|
|
146
176
|
fromAmount,
|
|
147
177
|
fromAsset,
|
|
148
178
|
receiver,
|
|
149
179
|
sender,
|
|
150
|
-
toAsset
|
|
180
|
+
toAsset,
|
|
181
|
+
metadata
|
|
151
182
|
});
|
|
152
|
-
|
|
183
|
+
if (result.error) {
|
|
184
|
+
console.error('Simple swap error:', result.error);
|
|
185
|
+
throw result.error;
|
|
186
|
+
}
|
|
187
|
+
const {
|
|
188
|
+
addressFrom,
|
|
189
|
+
amountTo,
|
|
190
|
+
id
|
|
191
|
+
} = result.data;
|
|
153
192
|
if (!id || id.length === 0 || !addressFrom || addressFrom.length === 0) {
|
|
154
193
|
throw new SwapError(SwapErrorType.UNKNOWN);
|
|
155
194
|
}
|
|
@@ -11,6 +11,8 @@ import BigN from 'bignumber.js';
|
|
|
11
11
|
export const CHAIN_FLIP_TESTNET_EXPLORER = 'https://blocks-perseverance.chainflip.io';
|
|
12
12
|
export const CHAIN_FLIP_MAINNET_EXPLORER = 'https://scan.chainflip.io';
|
|
13
13
|
export const SIMPLE_SWAP_EXPLORER = 'https://simpleswap.io';
|
|
14
|
+
|
|
15
|
+
// Deprecated
|
|
14
16
|
export const SIMPLE_SWAP_SUPPORTED_TESTNET_ASSET_MAPPING = {
|
|
15
17
|
'bittensor-NATIVE-TAO': 'tao',
|
|
16
18
|
[COMMON_ASSETS.ETH]: 'eth',
|
package/utils/fee/transfer.js
CHANGED
|
@@ -8,11 +8,12 @@ import { createCardanoTransaction } from '@subwallet/extension-base/services/bal
|
|
|
8
8
|
import { getERC20TransactionObject, getEVMTransactionObject } from '@subwallet/extension-base/services/balance-service/transfer/smart-contract';
|
|
9
9
|
import { createSubstrateExtrinsic } from '@subwallet/extension-base/services/balance-service/transfer/token';
|
|
10
10
|
import { createTonTransaction } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
|
|
11
|
-
import { createAcrossBridgeExtrinsic, createAvailBridgeExtrinsicFromAvail, createAvailBridgeTxFromEth, createPolygonBridgeExtrinsic, createSnowBridgeExtrinsic, createXcmExtrinsicV2
|
|
11
|
+
import { createAcrossBridgeExtrinsic, createAvailBridgeExtrinsicFromAvail, createAvailBridgeTxFromEth, createPolygonBridgeExtrinsic, createSnowBridgeExtrinsic, createXcmExtrinsicV2 } from '@subwallet/extension-base/services/balance-service/transfer/xcm';
|
|
12
12
|
import { _isAcrossChainBridge, _isAcrossTestnetBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/acrossBridge';
|
|
13
13
|
import { isAvailChainBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge';
|
|
14
14
|
import { _isPolygonChainBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge';
|
|
15
15
|
import { _isPosChainBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/posBridge';
|
|
16
|
+
import { estimateXcmFee } from '@subwallet/extension-base/services/balance-service/transfer/xcm/utils';
|
|
16
17
|
import { _getAssetDecimals, _getContractAddressOfToken, _isChainCardanoCompatible, _isChainEvmCompatible, _isChainTonCompatible, _isLocalToken, _isNativeToken, _isPureEvmChain, _isTokenEvmSmartContract, _isTokenTransferredByCardano, _isTokenTransferredByEvm, _isTokenTransferredByTon } from '@subwallet/extension-base/services/chain-service/utils';
|
|
17
18
|
import { calculateToAmountByReservePool, FEE_COVERAGE_PERCENTAGE_SPECIAL_CASE } from '@subwallet/extension-base/services/fee-service/utils';
|
|
18
19
|
import { getHydrationRate } from '@subwallet/extension-base/services/fee-service/utils/tokenPayFee';
|
|
@@ -369,8 +370,15 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
|
|
|
369
370
|
} else if (feeChainType === 'substrate') {
|
|
370
371
|
// Calculate fee for substrate transaction
|
|
371
372
|
if (isSubstrateXcm) {
|
|
372
|
-
const
|
|
373
|
-
|
|
373
|
+
const xcmFeeInfo = await estimateXcmFee({
|
|
374
|
+
fromChainInfo: params.originChain,
|
|
375
|
+
fromTokenInfo: params.originTokenInfo,
|
|
376
|
+
toChainInfo: params.destinationChain,
|
|
377
|
+
recipient: params.recipient,
|
|
378
|
+
sender: params.sender,
|
|
379
|
+
value: params.sendingValue
|
|
380
|
+
});
|
|
381
|
+
estimatedFee = (xcmFeeInfo === null || xcmFeeInfo === void 0 ? void 0 : xcmFeeInfo.origin.fee) || '0';
|
|
374
382
|
} else {
|
|
375
383
|
try {
|
|
376
384
|
var _paymentInfo$partialF2;
|