@subwallet/extension-base 1.3.38-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.
Files changed (31) hide show
  1. package/cjs/koni/background/handlers/Extension.js +79 -69
  2. package/cjs/packageInfo.js +1 -1
  3. package/cjs/services/balance-service/transfer/xcm/index.js +19 -28
  4. package/cjs/services/balance-service/transfer/xcm/utils.js +47 -49
  5. package/cjs/services/chain-service/constants.js +2 -2
  6. package/cjs/services/chain-service/index.js +4 -0
  7. package/cjs/services/chain-service/utils/patch.js +1 -1
  8. package/cjs/services/earning-service/handlers/special.js +28 -36
  9. package/cjs/services/request-service/handler/AuthRequestHandler.js +2 -0
  10. package/cjs/services/swap-service/handler/base-handler.js +58 -53
  11. package/cjs/services/swap-service/handler/kyber-handler.js +44 -28
  12. package/cjs/services/swap-service/handler/simpleswap-handler.js +79 -40
  13. package/cjs/services/swap-service/utils.js +2 -0
  14. package/cjs/utils/fee/transfer.js +41 -33
  15. package/koni/background/handlers/Extension.js +15 -5
  16. package/package.json +7 -7
  17. package/packageInfo.js +1 -1
  18. package/services/balance-service/transfer/xcm/index.d.ts +1 -2
  19. package/services/balance-service/transfer/xcm/index.js +16 -25
  20. package/services/balance-service/transfer/xcm/utils.d.ts +36 -6
  21. package/services/balance-service/transfer/xcm/utils.js +46 -48
  22. package/services/chain-service/constants.js +2 -2
  23. package/services/chain-service/index.js +4 -0
  24. package/services/chain-service/utils/patch.js +1 -1
  25. package/services/earning-service/handlers/special.js +12 -20
  26. package/services/request-service/handler/AuthRequestHandler.js +2 -0
  27. package/services/swap-service/handler/base-handler.js +11 -6
  28. package/services/swap-service/handler/kyber-handler.js +44 -28
  29. package/services/swap-service/handler/simpleswap-handler.js +80 -41
  30. package/services/swap-service/utils.js +2 -0
  31. 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 createSwapRequest = async params => {
23
- const fromDecimals = _getAssetDecimals(params.fromAsset);
24
- const toDecimals = _getAssetDecimals(params.toAsset);
25
- const formatedAmount = formatNumber(params.fromAmount, fromDecimals, s => s);
26
- const requestBody = {
27
- fixed: false,
28
- currency_from: params.fromSymbol,
29
- currency_to: params.toSymbol,
30
- amount: formatedAmount,
31
- // Convert to small number due to require of api
32
- address_to: params.receiver,
33
- extra_id_to: '',
34
- user_refund_address: params.sender,
35
- user_refund_extra_id: ''
36
- };
37
- const response = await fetch(`${apiUrl}/create_exchange?api_key=${simpleSwapApiKey}`, {
38
- method: 'POST',
39
- headers: {
40
- 'Content-Type': 'application/json',
41
- Accept: 'application/json'
42
- },
43
- body: JSON.stringify(requestBody)
44
- });
45
- const depositAddressResponse = await response.json();
46
- return {
47
- id: depositAddressResponse.id,
48
- addressFrom: depositAddressResponse.address_from,
49
- amountTo: toBNString(depositAddressResponse.amount_to, toDecimals)
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 = SIMPLE_SWAP_SUPPORTED_TESTNET_ASSET_MAPPING[fromAsset.slug];
135
- const toSymbol = SIMPLE_SWAP_SUPPORTED_TESTNET_ASSET_MAPPING[toAsset.slug];
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
- console.log('simpleswap data', id, addressFrom);
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',
@@ -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, dryRunXcmExtrinsicV2 } from '@subwallet/extension-base/services/balance-service/transfer/xcm';
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 estimatedFeeByDryRun = await dryRunXcmExtrinsicV2(params);
373
- estimatedFee = estimatedFeeByDryRun.fee || '0';
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;