@subwallet/extension-base 1.3.40-0 → 1.3.42-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 (232) hide show
  1. package/background/KoniTypes.d.ts +121 -4
  2. package/background/KoniTypes.js +18 -0
  3. package/background/errors/BitcoinProviderError.d.ts +6 -0
  4. package/background/errors/BitcoinProviderError.js +47 -0
  5. package/cjs/background/KoniTypes.js +20 -1
  6. package/cjs/background/errors/BitcoinProviderError.js +54 -0
  7. package/cjs/constants/bitcoin.js +22 -0
  8. package/cjs/constants/environment.js +4 -2
  9. package/cjs/constants/index.js +16 -1
  10. package/cjs/core/logic-validation/recipientAddress.js +9 -0
  11. package/cjs/core/logic-validation/transfer.js +25 -5
  12. package/cjs/core/types.js +1 -0
  13. package/cjs/core/utils.js +15 -1
  14. package/cjs/koni/background/handlers/Extension.js +96 -41
  15. package/cjs/koni/background/handlers/State.js +52 -11
  16. package/cjs/packageInfo.js +1 -1
  17. package/cjs/services/balance-service/helpers/subscribe/bitcoin.js +94 -0
  18. package/cjs/services/balance-service/helpers/subscribe/evm.js +6 -1
  19. package/cjs/services/balance-service/helpers/subscribe/index.js +19 -7
  20. package/cjs/services/balance-service/index.js +32 -4
  21. package/cjs/services/balance-service/transfer/bitcoin-transfer.js +119 -0
  22. package/cjs/services/balance-service/transfer/token.js +2 -0
  23. package/cjs/services/balance-service/transfer/xcm/index.js +15 -9
  24. package/cjs/services/balance-service/transfer/xcm/utils.js +12 -14
  25. package/cjs/services/base/types.js +2 -0
  26. package/cjs/services/chain-service/constants.js +18 -6
  27. package/cjs/services/chain-service/handler/CardanoApi.js +25 -35
  28. package/cjs/services/chain-service/handler/bitcoin/BitcoinApi.js +105 -0
  29. package/cjs/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +78 -0
  30. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +371 -0
  31. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +19 -0
  32. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +368 -0
  33. package/cjs/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +302 -0
  34. package/cjs/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
  35. package/cjs/services/chain-service/index.js +27 -3
  36. package/cjs/services/chain-service/utils/index.js +57 -4
  37. package/cjs/services/chain-service/utils/patch.js +1 -1
  38. package/cjs/services/earning-service/handlers/native-staking/tao.js +4 -38
  39. package/cjs/services/event-service/index.js +4 -0
  40. package/cjs/services/fee-service/service.js +8 -3
  41. package/cjs/services/hiro-service/index.js +96 -0
  42. package/cjs/services/hiro-service/utils/index.js +85 -0
  43. package/cjs/services/history-service/bitcoin-history.js +58 -0
  44. package/cjs/services/history-service/helpers/recoverHistoryStatus.js +96 -4
  45. package/cjs/services/history-service/index.js +41 -3
  46. package/cjs/services/keyring-service/context/handlers/Derive.js +1 -1
  47. package/cjs/services/keyring-service/context/handlers/Migration.js +2 -2
  48. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +4 -3
  49. package/cjs/services/migration-service/scripts/MigrateNewUnifiedAccount.js +29 -0
  50. package/cjs/services/migration-service/scripts/index.js +3 -1
  51. package/cjs/services/request-service/handler/BitcoinRequestHandler.js +440 -0
  52. package/cjs/services/request-service/index.js +29 -3
  53. package/cjs/services/rune-service/index.js +105 -0
  54. package/cjs/services/swap-service/handler/chainflip-handler.js +29 -18
  55. package/cjs/services/swap-service/handler/kyber-handler.js +5 -9
  56. package/cjs/services/swap-service/handler/simpleswap-handler.js +4 -7
  57. package/cjs/services/swap-service/handler/uniswap-handler.js +5 -12
  58. package/cjs/services/swap-service/utils.js +46 -37
  59. package/cjs/services/transaction-service/helpers/index.js +7 -1
  60. package/cjs/services/transaction-service/index.js +136 -15
  61. package/cjs/services/transaction-service/utils.js +6 -3
  62. package/cjs/strategy/api-request-strategy/context/base.js +31 -0
  63. package/cjs/strategy/api-request-strategy/index.js +90 -0
  64. package/cjs/strategy/api-request-strategy/types.js +1 -0
  65. package/cjs/strategy/api-request-strategy/utils/index.js +33 -0
  66. package/cjs/types/account/info/keyring.js +1 -1
  67. package/cjs/types/bitcoin.js +24 -0
  68. package/cjs/types/environment.js +19 -0
  69. package/cjs/types/fee/bitcoin.js +1 -0
  70. package/cjs/types/fee/index.js +11 -0
  71. package/cjs/types/index.js +11 -0
  72. package/cjs/utils/account/analyze.js +3 -3
  73. package/cjs/utils/account/common.js +16 -6
  74. package/cjs/utils/account/derive/info/solo.js +68 -19
  75. package/cjs/utils/account/derive/info/unified.js +2 -0
  76. package/cjs/utils/account/derive/validate.js +70 -2
  77. package/cjs/utils/account/transform.js +11 -5
  78. package/cjs/utils/bitcoin/common.js +98 -0
  79. package/cjs/utils/bitcoin/fee.js +21 -0
  80. package/cjs/utils/bitcoin/index.js +38 -0
  81. package/cjs/utils/bitcoin/utxo-management.js +281 -0
  82. package/cjs/utils/environment.js +30 -2
  83. package/cjs/utils/fee/transfer.js +48 -0
  84. package/cjs/utils/index.js +15 -1
  85. package/constants/bitcoin.d.ts +3 -0
  86. package/constants/bitcoin.js +13 -0
  87. package/constants/environment.d.ts +1 -0
  88. package/constants/environment.js +2 -1
  89. package/constants/index.d.ts +2 -0
  90. package/constants/index.js +3 -1
  91. package/core/logic-validation/recipientAddress.js +10 -1
  92. package/core/logic-validation/transfer.d.ts +2 -2
  93. package/core/logic-validation/transfer.js +27 -7
  94. package/core/types.d.ts +1 -0
  95. package/core/types.js +1 -0
  96. package/core/utils.d.ts +1 -0
  97. package/core/utils.js +15 -2
  98. package/koni/background/handlers/Extension.d.ts +2 -0
  99. package/koni/background/handlers/Extension.js +95 -42
  100. package/koni/background/handlers/State.d.ts +7 -3
  101. package/koni/background/handlers/State.js +52 -12
  102. package/package.json +149 -8
  103. package/packageInfo.js +1 -1
  104. package/services/balance-service/helpers/subscribe/bitcoin.d.ts +2 -0
  105. package/services/balance-service/helpers/subscribe/bitcoin.js +87 -0
  106. package/services/balance-service/helpers/subscribe/evm.js +6 -1
  107. package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
  108. package/services/balance-service/helpers/subscribe/index.js +20 -8
  109. package/services/balance-service/index.d.ts +2 -0
  110. package/services/balance-service/index.js +32 -4
  111. package/services/balance-service/transfer/bitcoin-transfer.d.ts +14 -0
  112. package/services/balance-service/transfer/bitcoin-transfer.js +112 -0
  113. package/services/balance-service/transfer/token.js +2 -0
  114. package/services/balance-service/transfer/xcm/index.js +15 -9
  115. package/services/balance-service/transfer/xcm/utils.d.ts +2 -0
  116. package/services/balance-service/transfer/xcm/utils.js +12 -14
  117. package/services/base/types.d.ts +2 -0
  118. package/services/base/types.js +2 -0
  119. package/services/chain-service/constants.d.ts +7 -0
  120. package/services/chain-service/constants.js +12 -5
  121. package/services/chain-service/handler/CardanoApi.d.ts +1 -5
  122. package/services/chain-service/handler/CardanoApi.js +26 -34
  123. package/services/chain-service/handler/bitcoin/BitcoinApi.d.ts +31 -0
  124. package/services/chain-service/handler/bitcoin/BitcoinApi.js +98 -0
  125. package/services/chain-service/handler/bitcoin/BitcoinChainHandler.d.ts +16 -0
  126. package/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +70 -0
  127. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.d.ts +28 -0
  128. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +362 -0
  129. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.d.ts +2 -0
  130. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +5 -0
  131. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.d.ts +28 -0
  132. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +359 -0
  133. package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.d.ts +28 -0
  134. package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +293 -0
  135. package/services/chain-service/handler/bitcoin/strategy/types.d.ts +291 -0
  136. package/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
  137. package/services/chain-service/index.d.ts +3 -0
  138. package/services/chain-service/index.js +31 -5
  139. package/services/chain-service/types.d.ts +20 -0
  140. package/services/chain-service/utils/index.d.ts +4 -0
  141. package/services/chain-service/utils/index.js +50 -4
  142. package/services/chain-service/utils/patch.js +1 -1
  143. package/services/earning-service/handlers/native-staking/tao.d.ts +0 -11
  144. package/services/earning-service/handlers/native-staking/tao.js +4 -24
  145. package/services/event-service/index.d.ts +3 -0
  146. package/services/event-service/index.js +4 -0
  147. package/services/event-service/types.d.ts +3 -0
  148. package/services/fee-service/service.js +8 -3
  149. package/services/hiro-service/index.d.ts +17 -0
  150. package/services/hiro-service/index.js +88 -0
  151. package/services/hiro-service/utils/index.d.ts +6 -0
  152. package/services/hiro-service/utils/index.js +72 -0
  153. package/services/history-service/bitcoin-history.d.ts +4 -0
  154. package/services/history-service/bitcoin-history.js +52 -0
  155. package/services/history-service/helpers/recoverHistoryStatus.d.ts +3 -1
  156. package/services/history-service/helpers/recoverHistoryStatus.js +96 -4
  157. package/services/history-service/index.d.ts +1 -0
  158. package/services/history-service/index.js +42 -4
  159. package/services/keyring-service/context/handlers/Derive.js +2 -2
  160. package/services/keyring-service/context/handlers/Migration.js +2 -2
  161. package/services/keyring-service/context/handlers/Mnemonic.js +4 -3
  162. package/services/migration-service/scripts/MigrateNewUnifiedAccount.d.ts +4 -0
  163. package/services/migration-service/scripts/MigrateNewUnifiedAccount.js +21 -0
  164. package/services/migration-service/scripts/index.js +3 -1
  165. package/services/request-service/handler/BitcoinRequestHandler.d.ts +23 -0
  166. package/services/request-service/handler/BitcoinRequestHandler.js +427 -0
  167. package/services/request-service/index.d.ts +9 -2
  168. package/services/request-service/index.js +25 -3
  169. package/services/rune-service/index.d.ts +17 -0
  170. package/services/rune-service/index.js +97 -0
  171. package/services/swap-service/handler/chainflip-handler.d.ts +0 -2
  172. package/services/swap-service/handler/chainflip-handler.js +25 -13
  173. package/services/swap-service/handler/kyber-handler.d.ts +0 -1
  174. package/services/swap-service/handler/kyber-handler.js +5 -8
  175. package/services/swap-service/handler/simpleswap-handler.d.ts +0 -1
  176. package/services/swap-service/handler/simpleswap-handler.js +4 -6
  177. package/services/swap-service/handler/uniswap-handler.js +6 -13
  178. package/services/swap-service/utils.d.ts +0 -13
  179. package/services/swap-service/utils.js +46 -34
  180. package/services/transaction-service/helpers/index.d.ts +3 -1
  181. package/services/transaction-service/helpers/index.js +5 -0
  182. package/services/transaction-service/index.d.ts +3 -5
  183. package/services/transaction-service/index.js +135 -16
  184. package/services/transaction-service/types.d.ts +12 -2
  185. package/services/transaction-service/utils.js +7 -4
  186. package/strategy/api-request-strategy/context/base.d.ts +15 -0
  187. package/strategy/api-request-strategy/context/base.js +24 -0
  188. package/strategy/api-request-strategy/index.d.ts +15 -0
  189. package/strategy/api-request-strategy/index.js +83 -0
  190. package/strategy/api-request-strategy/types.d.ts +22 -0
  191. package/strategy/api-request-strategy/types.js +1 -0
  192. package/strategy/api-request-strategy/utils/index.d.ts +2 -0
  193. package/strategy/api-request-strategy/utils/index.js +23 -0
  194. package/types/account/info/keyring.d.ts +1 -1
  195. package/types/account/info/keyring.js +1 -1
  196. package/types/balance/index.d.ts +4 -1
  197. package/types/balance/transfer.d.ts +17 -0
  198. package/types/bitcoin.d.ts +93 -0
  199. package/types/bitcoin.js +17 -0
  200. package/types/environment.d.ts +9 -0
  201. package/types/environment.js +13 -0
  202. package/types/fee/base.d.ts +4 -1
  203. package/types/fee/bitcoin.d.ts +18 -0
  204. package/types/fee/bitcoin.js +1 -0
  205. package/types/fee/index.d.ts +1 -0
  206. package/types/fee/index.js +2 -1
  207. package/types/fee/subscription.d.ts +4 -3
  208. package/types/index.d.ts +1 -0
  209. package/types/index.js +1 -0
  210. package/utils/account/analyze.js +4 -4
  211. package/utils/account/common.d.ts +7 -8
  212. package/utils/account/common.js +16 -6
  213. package/utils/account/derive/info/solo.js +70 -21
  214. package/utils/account/derive/info/unified.js +2 -0
  215. package/utils/account/derive/validate.d.ts +1 -0
  216. package/utils/account/derive/validate.js +68 -1
  217. package/utils/account/transform.d.ts +1 -1
  218. package/utils/account/transform.js +11 -5
  219. package/utils/bitcoin/common.d.ts +22 -0
  220. package/utils/bitcoin/common.js +88 -0
  221. package/utils/bitcoin/fee.d.ts +2 -0
  222. package/utils/bitcoin/fee.js +14 -0
  223. package/utils/bitcoin/index.d.ts +3 -0
  224. package/utils/bitcoin/index.js +6 -0
  225. package/utils/bitcoin/utxo-management.d.ts +33 -0
  226. package/utils/bitcoin/utxo-management.js +266 -0
  227. package/utils/environment.d.ts +2 -0
  228. package/utils/environment.js +27 -1
  229. package/utils/fee/transfer.d.ts +3 -1
  230. package/utils/fee/transfer.js +47 -1
  231. package/utils/index.d.ts +1 -0
  232. package/utils/index.js +6 -3
@@ -0,0 +1,97 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { SWError } from '@subwallet/extension-base/background/errors/SWError';
5
+ import { _BTC_SERVICE_TOKEN } from '@subwallet/extension-base/services/chain-service/constants';
6
+ import { BaseApiRequestStrategy } from '@subwallet/extension-base/strategy/api-request-strategy';
7
+ import { BaseApiRequestContext } from '@subwallet/extension-base/strategy/api-request-strategy/context/base';
8
+ import { getRequest } from '@subwallet/extension-base/strategy/api-request-strategy/utils';
9
+ const BITCOIN_API_URL = 'https://btc-api.koni.studio';
10
+ const BITCOIN_API_URL_TEST = 'https://api-testnet.openbit.app';
11
+ export class RunesService extends BaseApiRequestStrategy {
12
+ constructor(url) {
13
+ const context = new BaseApiRequestContext();
14
+ super(context);
15
+ this.baseUrl = url;
16
+ }
17
+ headers = {
18
+ 'Content-Type': 'application/json',
19
+ Authorization: `Bearer ${_BTC_SERVICE_TOKEN}`
20
+ };
21
+ isRateLimited() {
22
+ return false;
23
+ }
24
+ getUrl(path) {
25
+ return `${this.baseUrl}/${path}`;
26
+ }
27
+ getAddressRunesInfo(address, params) {
28
+ return this.addRequest(async () => {
29
+ const _rs = await getRequest(this.getUrl(`rune/address/${address}`), params, this.headers);
30
+ const rs = await _rs.json();
31
+ if (rs.status_code !== 200) {
32
+ throw new SWError('RuneScanService.getAddressRunesInfo', rs.message);
33
+ }
34
+ return rs.result;
35
+ }, 1);
36
+ }
37
+
38
+ // * Deprecated
39
+ getRuneCollectionsByBatch(params) {
40
+ return this.addRequest(async () => {
41
+ const url = this.getUrl('rune');
42
+ const rs = await getRequest(url, params);
43
+ if (rs.status !== 200) {
44
+ throw new SWError('RuneScanService.getRuneCollectionsByBatch', await rs.text());
45
+ }
46
+ return await rs.json();
47
+ }, 1);
48
+ }
49
+
50
+ // * Deprecated
51
+ getAddressRuneTxs(address, params) {
52
+ return this.addRequest(async () => {
53
+ const url = this.getUrl(`address/${address}/txs`);
54
+ const rs = await getRequest(url, params);
55
+ if (rs.status !== 200) {
56
+ throw new SWError('RuneScanService.getAddressRuneTxs', await rs.text());
57
+ }
58
+ return await rs.json();
59
+ }, 0);
60
+ }
61
+ getRuneMetadata(runeid) {
62
+ return this.addRequest(async () => {
63
+ const _rs = await getRequest(this.getUrl(`rune/metadata/${runeid}`), undefined, this.headers);
64
+ const rs = await _rs.json();
65
+ if (rs.status_code !== 200) {
66
+ throw new SWError('RuneScanService.getRuneMetadata', rs.message);
67
+ }
68
+ return rs.result;
69
+ }, 0);
70
+ }
71
+ getAddressRuneUtxos(address) {
72
+ return this.addRequest(async () => {
73
+ const _rs = await getRequest(this.getUrl(`rune/address/${address}/rune/utxo`), undefined, this.headers);
74
+ const rs = await _rs.json();
75
+ if (rs.status_code !== 200) {
76
+ throw new SWError('RuneScanService.getAddressRuneUtxos', rs.message);
77
+ }
78
+ return rs.result;
79
+ }, 0);
80
+ }
81
+
82
+ // Singleton
83
+
84
+ static getInstance(isTestnet = false) {
85
+ if (isTestnet) {
86
+ if (!RunesService.testnet) {
87
+ RunesService.testnet = new RunesService(BITCOIN_API_URL_TEST);
88
+ }
89
+ return RunesService.testnet;
90
+ } else {
91
+ if (!RunesService.mainnet) {
92
+ RunesService.mainnet = new RunesService(BITCOIN_API_URL);
93
+ }
94
+ return RunesService.mainnet;
95
+ }
96
+ }
97
+ }
@@ -5,12 +5,10 @@ import { ChainService } from '@subwallet/extension-base/services/chain-service';
5
5
  import FeeService from '@subwallet/extension-base/services/fee-service/service';
6
6
  import { SwapBaseInterface } from '@subwallet/extension-base/services/swap-service/handler/base-handler';
7
7
  import { BaseStepDetail, CommonOptimalSwapPath, CommonStepFeeInfo, OptimalSwapPathParamsV2, SwapProviderId, SwapSubmitParams, SwapSubmitStepData, ValidateSwapProcessParams } from '@subwallet/extension-base/types';
8
- export declare const CHAINFLIP_BROKER_API: string;
9
8
  export declare class ChainflipSwapHandler implements SwapBaseInterface {
10
9
  private readonly isTestnet;
11
10
  private swapBaseHandler;
12
11
  providerSlug: SwapProviderId;
13
- private baseUrl;
14
12
  constructor(chainService: ChainService, balanceService: BalanceService, feeService: FeeService, isTestnet?: boolean);
15
13
  get chainService(): ChainService;
16
14
  get balanceService(): BalanceService;
@@ -8,15 +8,17 @@ import { getERC20TransactionObject, getEVMTransactionObject } from '@subwallet/e
8
8
  import { createSubstrateExtrinsic } from '@subwallet/extension-base/services/balance-service/transfer/token';
9
9
  import { _getAssetSymbol, _getContractAddressOfToken, _isChainSubstrateCompatible, _isNativeToken } from '@subwallet/extension-base/services/chain-service/utils';
10
10
  import { SwapBaseHandler } from '@subwallet/extension-base/services/swap-service/handler/base-handler';
11
- import { getChainflipSwap } from '@subwallet/extension-base/services/swap-service/utils';
12
11
  import { BasicTxErrorType, CommonStepType, DynamicSwapType, SwapProviderId, SwapStepType } from '@subwallet/extension-base/types';
13
- import { _reformatAddressWithChain } from '@subwallet/extension-base/utils';
12
+ import { ProxyServiceRoute } from '@subwallet/extension-base/types/environment';
13
+ import { _reformatAddressWithChain, fetchFromProxyService } from '@subwallet/extension-base/utils';
14
14
  import { getId } from '@subwallet/extension-base/utils/getId';
15
15
  import BigNumber from 'bignumber.js';
16
16
  const INTERMEDIARY_MAINNET_ASSET_SLUG = COMMON_ASSETS.USDC_ETHEREUM;
17
17
  const INTERMEDIARY_TESTNET_ASSET_SLUG = COMMON_ASSETS.USDC_SEPOLIA;
18
- export const CHAINFLIP_BROKER_API = process.env.CHAINFLIP_BROKER_API || '';
19
18
  export class ChainflipSwapHandler {
19
+ // private baseUrl: string;
20
+ // private assetsUrl: string;
21
+
20
22
  constructor(chainService, balanceService, feeService, isTestnet = true) {
21
23
  this.swapBaseHandler = new SwapBaseHandler({
22
24
  chainService,
@@ -27,8 +29,10 @@ export class ChainflipSwapHandler {
27
29
  });
28
30
  this.isTestnet = isTestnet;
29
31
  this.providerSlug = isTestnet ? SwapProviderId.CHAIN_FLIP_TESTNET : SwapProviderId.CHAIN_FLIP_MAINNET;
30
- this.baseUrl = getChainflipSwap(isTestnet);
32
+ // this.baseUrl = getChainflipSwap(isTestnet);
33
+ // this.assetsUrl = getAssetsUrl(isTestnet);
31
34
  }
35
+
32
36
  get chainService() {
33
37
  return this.swapBaseHandler.chainService;
34
38
  }
@@ -76,23 +80,31 @@ export class ChainflipSwapHandler {
76
80
  if (processMetadata.destChain !== quoteMetadata.destChain || processMetadata.srcChain !== quoteMetadata.srcChain) {
77
81
  throw new Error('Metadata for Chainflip not found');
78
82
  }
83
+ const assetsResponse = await fetchFromProxyService(ProxyServiceRoute.CHAINFLIP, '/assets', {
84
+ method: 'GET'
85
+ }, this.isTestnet);
86
+ const _allAssets = await assetsResponse.json();
87
+ const allAssets = _allAssets.assets;
88
+ const sourceAsset = allAssets.find(asset => asset.network === processMetadata.srcChain && asset.ticker === fromAssetId);
89
+ const destinationAsset = allAssets.find(asset => asset.network === processMetadata.destChain && asset.ticker === toAssetId);
90
+ if (!sourceAsset || !destinationAsset) {
91
+ throw new Error('Error get Chainflip data');
92
+ }
79
93
  const depositParams = {
80
- sourceChain: processMetadata.srcChain,
81
94
  destinationAddress: receiver,
82
- destinationAsset: toAssetId,
83
- destinationChain: processMetadata.destChain,
95
+ destinationAsset: destinationAsset.id,
96
+ sourceAsset: sourceAsset.id,
84
97
  minimumPrice: minReceive,
85
98
  // minimum accepted price for swaps through the channel
86
99
  refundAddress: address,
87
100
  // address to which assets are refunded
88
- retryDurationInBlocks: '100',
89
- // 100 blocks * 6 seconds = 10 minutes before deposits are refunded
90
- sourceAsset: fromAssetId
101
+ retryDurationInBlocks: '100' // 100 blocks * 6 seconds = 10 minutes before deposits are refunded
91
102
  };
92
- const url = `${this.baseUrl}&${new URLSearchParams(depositParams).toString()}`;
93
- const response = await fetch(url, {
103
+
104
+ const path = `/swap?${new URLSearchParams(depositParams).toString()}`;
105
+ const response = await fetchFromProxyService(ProxyServiceRoute.CHAINFLIP, path, {
94
106
  method: 'GET'
95
- });
107
+ }, this.isTestnet);
96
108
  const data = await response.json();
97
109
  if (!data.id || !data.address || data.address === '' || !data.issuedBlock || !data.network || !data.channelId) {
98
110
  throw new Error('Error get Chainflip data');
@@ -8,7 +8,6 @@ import { SwapBaseInterface } from './base-handler';
8
8
  export interface KyberSwapQuoteMetadata {
9
9
  priceImpact?: string;
10
10
  }
11
- export declare const KYBER_CLIENT_ID: string;
12
11
  export declare class KyberHandler implements SwapBaseInterface {
13
12
  private swapBaseHandler;
14
13
  transactionService: TransactionService;
@@ -6,14 +6,13 @@ import { TransactionError } from '@subwallet/extension-base/background/errors/Tr
6
6
  import { ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
7
7
  import { estimateTxFee, getERC20Allowance, getERC20SpendingApprovalTx } from '@subwallet/extension-base/koni/api/contract-handler/evm/web3';
8
8
  import { BasicTxErrorType, CommonStepType, DynamicSwapType, SwapErrorType, SwapFeeType, SwapProviderId, SwapStepType } from '@subwallet/extension-base/types';
9
- import { _reformatAddressWithChain, combineEthFee } from '@subwallet/extension-base/utils';
9
+ import { ProxyServiceRoute } from '@subwallet/extension-base/types/environment';
10
+ import { _reformatAddressWithChain, combineEthFee, fetchFromProxyService } from '@subwallet/extension-base/utils';
10
11
  import { getId } from '@subwallet/extension-base/utils/getId';
11
12
  import BigNumber from 'bignumber.js';
12
13
  import { _getChainNativeTokenSlug, _getContractAddressOfToken, _isNativeToken } from "../../chain-service/utils/index.js";
13
14
  import { calculateGasFeeParams } from "../../fee-service/utils/index.js";
14
15
  import { SwapBaseHandler } from "./base-handler.js";
15
- export const KYBER_CLIENT_ID = process.env.KYBER_CLIENT_ID || '';
16
- const kyberUrl = 'https://aggregator-api.kyberswap.com';
17
16
  async function buildTxForKyberSwap(params, chain) {
18
17
  const {
19
18
  recipient,
@@ -38,14 +37,13 @@ async function buildTxForKyberSwap(params, chain) {
38
37
  amountIn,
39
38
  gasInclude: 'true'
40
39
  });
41
- const url = `${kyberUrl}/${chain}/api/v1/routes?${queryParams.toString()}`;
40
+ const path = `/${chain}/api/v1/routes?${queryParams.toString()}`;
42
41
  try {
43
42
  var _routeData$data;
44
- const res = await fetch(url, {
43
+ const res = await fetchFromProxyService(ProxyServiceRoute.KYBER, path, {
45
44
  method: 'GET',
46
45
  headers: {
47
46
  'Content-Type': 'application/json',
48
- 'x-client-id': KYBER_CLIENT_ID,
49
47
  accept: 'application/json'
50
48
  }
51
49
  });
@@ -78,11 +76,10 @@ async function buildTxForKyberSwap(params, chain) {
78
76
  };
79
77
  console.log('routeSummary2', routeSummary);
80
78
  try {
81
- const res = await fetch(`${kyberUrl}/${chain}/api/v1/route/build`, {
79
+ const res = await fetchFromProxyService(ProxyServiceRoute.KYBER, `/${chain}/api/v1/route/build`, {
82
80
  method: 'POST',
83
81
  headers: {
84
82
  'Content-Type': 'application/json',
85
- 'x-client-id': KYBER_CLIENT_ID,
86
83
  accept: 'application/json'
87
84
  },
88
85
  body: JSON.stringify(body)
@@ -4,7 +4,6 @@ import { BaseStepDetail, CommonOptimalSwapPath, CommonStepFeeInfo, OptimalSwapPa
4
4
  import { BalanceService } from '../../balance-service';
5
5
  import { ChainService } from '../../chain-service';
6
6
  import { SwapBaseInterface } from './base-handler';
7
- export declare const simpleSwapApiKey: string;
8
7
  export declare class SimpleSwapHandler implements SwapBaseInterface {
9
8
  private swapBaseHandler;
10
9
  providerSlug: SwapProviderId;
@@ -6,14 +6,13 @@ import { TransactionError } from '@subwallet/extension-base/background/errors/Tr
6
6
  import { ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
7
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
- import { _reformatAddressWithChain, formatNumber } from '@subwallet/extension-base/utils';
9
+ import { ProxyServiceRoute } from '@subwallet/extension-base/types/environment';
10
+ import { _reformatAddressWithChain, fetchFromProxyService, formatNumber } from '@subwallet/extension-base/utils';
10
11
  import { getId } from '@subwallet/extension-base/utils/getId';
11
12
  import BigN, { BigNumber } from 'bignumber.js';
12
13
  import { getERC20TransactionObject, getEVMTransactionObject } from "../../balance-service/transfer/smart-contract.js";
13
14
  import { createSubstrateExtrinsic } from "../../balance-service/transfer/token.js";
14
15
  import { SwapBaseHandler } from "./base-handler.js";
15
- const apiUrl = 'https://api.simpleswap.io/v3';
16
- export const simpleSwapApiKey = process.env.SIMPLE_SWAP_API_KEY || '';
17
16
  const toBNString = (input, decimal) => {
18
17
  const raw = new BigNumber(input);
19
18
  return raw.shiftedBy(decimal).integerValue(BigNumber.ROUND_CEIL).toFixed();
@@ -45,12 +44,11 @@ const buildTxForSimpleSwap = async params => {
45
44
  userRefundAddress: sender,
46
45
  userRefundExtraId: ''
47
46
  };
48
- const response = await fetch(`${apiUrl}/exchanges`, {
47
+ const response = await fetchFromProxyService(ProxyServiceRoute.SIMPLESWAP, '/exchanges', {
49
48
  method: 'POST',
50
49
  headers: {
51
- accept: 'application/json',
52
50
  'Content-Type': 'application/json',
53
- 'x-api-key': simpleSwapApiKey
51
+ accept: 'application/json'
54
52
  },
55
53
  body: JSON.stringify(requestBody)
56
54
  });
@@ -9,16 +9,13 @@ import { createAcrossBridgeExtrinsic } from '@subwallet/extension-base/services/
9
9
  import { getAcrossQuote } from '@subwallet/extension-base/services/balance-service/transfer/xcm/acrossBridge';
10
10
  import { DEFAULT_EXCESS_AMOUNT_WEIGHT, FEE_RATE_MULTIPLIER } from '@subwallet/extension-base/services/swap-service/utils';
11
11
  import { BasicTxErrorType, CommonStepType, DynamicSwapType, FeeOptionKey, SwapFeeType, SwapProviderId, SwapStepType } from '@subwallet/extension-base/types';
12
- import { _reformatAddressWithChain } from '@subwallet/extension-base/utils';
12
+ import { ProxyServiceRoute } from '@subwallet/extension-base/types/environment';
13
+ import { _reformatAddressWithChain, fetchFromProxyService } from '@subwallet/extension-base/utils';
13
14
  import { getId } from '@subwallet/extension-base/utils/getId';
14
15
  import BigNumber from 'bignumber.js';
15
16
  import { _getAssetOriginChain, _getChainNativeTokenSlug, _getContractAddressOfToken, _getEvmChainId, _isNativeToken } from "../../chain-service/utils/index.js";
16
17
  import { calculateGasFeeParams } from "../../fee-service/utils/index.js";
17
18
  import { SwapBaseHandler } from "./base-handler.js";
18
- const API_URL = 'https://trade-api.gateway.uniswap.org/v1';
19
- const headers = {
20
- 'x-api-key': process.env.UNISWAP_API_KEY || ''
21
- };
22
19
  async function fetchCheckApproval(request) {
23
20
  const {
24
21
  address,
@@ -49,10 +46,9 @@ async function fetchCheckApproval(request) {
49
46
  } else {
50
47
  return undefined;
51
48
  }
52
- const response = await fetch(`${API_URL}/check_approval`, {
49
+ const response = await fetchFromProxyService(ProxyServiceRoute.UNISWAP, '/check_approval', {
53
50
  method: 'POST',
54
51
  headers: {
55
- ...headers,
56
52
  'Content-Type': 'application/json'
57
53
  },
58
54
  body: JSON.stringify({
@@ -617,10 +613,9 @@ export class UniswapHandler {
617
613
  if (permitData) {
618
614
  body.permitData = permitData;
619
615
  }
620
- postTransactionResponse = await fetch(`${API_URL}/swap`, {
616
+ postTransactionResponse = await fetchFromProxyService(ProxyServiceRoute.UNISWAP, '/swap', {
621
617
  method: 'POST',
622
618
  headers: {
623
- ...headers,
624
619
  'Content-Type': 'application/json'
625
620
  },
626
621
  body: JSON.stringify(body)
@@ -631,10 +626,9 @@ export class UniswapHandler {
631
626
  const dutchQuote = quote;
632
627
  const submitSwapOrder = async () => {
633
628
  try {
634
- const res = await fetch(`${API_URL}/order`, {
629
+ const res = await fetchFromProxyService(ProxyServiceRoute.UNISWAP, '/order', {
635
630
  method: 'POST',
636
631
  headers: {
637
- ...headers,
638
632
  'Content-Type': 'application/json'
639
633
  },
640
634
  body: JSON.stringify({
@@ -675,10 +669,9 @@ export class UniswapHandler {
675
669
  const swapper = dutchQuote.orderInfo.swapper;
676
670
  return retryGetUniswapTx(async () => {
677
671
  try {
678
- const response = await fetch(`${API_URL}/orders?orderId=${orderId}&swapper=${swapper}`, {
672
+ const response = await fetchFromProxyService(ProxyServiceRoute.UNISWAP, `/orders?orderId=${orderId}&swapper=${swapper}`, {
679
673
  method: 'GET',
680
674
  headers: {
681
- ...headers,
682
675
  'Content-Type': 'application/json'
683
676
  }
684
677
  });
@@ -13,19 +13,6 @@ export declare function getSwapAlternativeAsset(swapPair: SwapPair): string | un
13
13
  export declare function getSwapAltToken(chainAsset: _ChainAsset): string | undefined;
14
14
  export declare function calculateSwapRate(fromAmount: string, toAmount: string, fromAsset: _ChainAsset, toAsset: _ChainAsset): number;
15
15
  export declare function convertSwapRate(rate: string, fromAsset: _ChainAsset, toAsset: _ChainAsset): number;
16
- export declare function getChainflipOptions(isTestnet: boolean): {
17
- network: string;
18
- broker?: undefined;
19
- } | {
20
- network: string;
21
- broker: {
22
- url: string;
23
- };
24
- };
25
- export declare function getChainflipBroker(isTestnet: boolean): {
26
- url: string;
27
- };
28
- export declare function getChainflipSwap(isTestnet: boolean): string;
29
16
  export declare function getBridgeStep(from: string, to: string): DynamicSwapAction;
30
17
  export declare function getSwapStep(from: string, to: string): DynamicSwapAction;
31
18
  export declare function findBridgeTransitDestination(assetRefMap: Record<string, _AssetRef>, fromToken: _ChainAsset, toToken: _ChainAsset): string | undefined;
@@ -4,7 +4,6 @@
4
4
  import { COMMON_ASSETS, COMMON_CHAIN_SLUGS } from '@subwallet/chain-list';
5
5
  import { _AssetRefPath } from '@subwallet/chain-list/types';
6
6
  import { _getAssetDecimals, _getAssetOriginChain, _getOriginChainOfAsset, _parseAssetRefKey } from '@subwallet/extension-base/services/chain-service/utils';
7
- import { CHAINFLIP_BROKER_API } from '@subwallet/extension-base/services/swap-service/handler/chainflip-handler';
8
7
  import { CommonStepType, DynamicSwapType, SwapStepType } from '@subwallet/extension-base/types';
9
8
  import { SwapProviderId } from '@subwallet/extension-base/types/swap';
10
9
  import BigN from 'bignumber.js';
@@ -70,39 +69,52 @@ export function convertSwapRate(rate, fromAsset, toAsset) {
70
69
  const bnRate = BigN(rate);
71
70
  return bnRate.times(10 ** decimalDiff).pow(-1).toNumber();
72
71
  }
73
- export function getChainflipOptions(isTestnet) {
74
- if (isTestnet) {
75
- return {
76
- network: getChainflipNetwork(isTestnet)
77
- };
78
- }
79
- return {
80
- network: getChainflipNetwork(isTestnet),
81
- broker: getChainflipBroker(isTestnet)
82
- };
83
- }
84
- function getChainflipNetwork(isTestnet) {
85
- return isTestnet ? 'perseverance' : 'mainnet';
86
- }
87
- export function getChainflipBroker(isTestnet) {
88
- // noted: currently not use testnet broker
89
- if (isTestnet) {
90
- return {
91
- url: `https://perseverance.chainflip-broker.io/rpc/${CHAINFLIP_BROKER_API}`
92
- };
93
- } else {
94
- return {
95
- url: `https://chainflip-broker.io/rpc/${CHAINFLIP_BROKER_API}`
96
- };
97
- }
98
- }
99
- export function getChainflipSwap(isTestnet) {
100
- if (isTestnet) {
101
- return `https://perseverance.chainflip-broker.io/swap?apikey=${CHAINFLIP_BROKER_API}`;
102
- } else {
103
- return `https://chainflip-broker.io/swap?apikey=${CHAINFLIP_BROKER_API}`;
104
- }
105
- }
72
+
73
+ // export function getChainflipOptions (isTestnet: boolean) {
74
+ // if (isTestnet) {
75
+ // return {
76
+ // network: getChainflipNetwork(isTestnet)
77
+ // };
78
+ // }
79
+
80
+ // return {
81
+ // network: getChainflipNetwork(isTestnet),
82
+ // broker: getChainflipBroker(isTestnet)
83
+ // };
84
+ // }
85
+
86
+ // function getChainflipNetwork (isTestnet: boolean) {
87
+ // return isTestnet ? 'perseverance' : 'mainnet';
88
+ // }
89
+
90
+ // export function getChainflipBroker (isTestnet: boolean) { // noted: currently not use testnet broker
91
+ // if (isTestnet) {
92
+ // return {
93
+ // url: `https://perseverance.chainflip-broker.io/rpc/${CHAINFLIP_BROKER_API}`
94
+ // };
95
+ // } else {
96
+ // return {
97
+ // url: `https://chainflip-broker.io/rpc/${CHAINFLIP_BROKER_API}`
98
+ // };
99
+ // }
100
+ // }
101
+
102
+ // export function getChainflipSwap (isTestnet: boolean) {
103
+ // if (isTestnet) {
104
+ // return `https://perseverance.chainflip-broker.io/swap?apikey=${CHAINFLIP_BROKER_API}`;
105
+ // } else {
106
+ // return `https://chainflip-broker.io/swap?apikey=${CHAINFLIP_BROKER_API}`;
107
+ // }
108
+ // }
109
+
110
+ // export function getAssetsUrl (isTestnet: boolean) {
111
+ // if (isTestnet) {
112
+ // return 'https://perseverance.chainflip-broker.io/assets';
113
+ // } else {
114
+ // return 'https://chainflip-broker.io/assets';
115
+ // }
116
+ // }
117
+
106
118
  export function getBridgeStep(from, to) {
107
119
  return {
108
120
  action: DynamicSwapType.BRIDGE,
@@ -1,11 +1,13 @@
1
1
  import { _ChainInfo } from '@subwallet/chain-list/types';
2
2
  import { CardanoTransactionConfig } from '@subwallet/extension-base/services/balance-service/transfer/cardano-transfer';
3
3
  import { TonTransactionConfig } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
4
- import { SWTransactionBase } from '@subwallet/extension-base/services/transaction-service/types';
4
+ import { SWTransaction, SWTransactionBase } from '@subwallet/extension-base/services/transaction-service/types';
5
+ import { Psbt } from 'bitcoinjs-lib';
5
6
  import { SubmittableExtrinsic } from '@polkadot/api/promise/types';
6
7
  export declare const getTransactionId: (chainType: string, chain: string, isInternal: boolean, isWalletConnect?: boolean) => string;
7
8
  export declare const getValidationId: (chainType: string, chain: string) => string;
8
9
  export declare const isSubstrateTransaction: (tx: SWTransactionBase['transaction']) => tx is SubmittableExtrinsic;
9
10
  export declare const isTonTransaction: (tx: SWTransactionBase['transaction']) => tx is TonTransactionConfig;
10
11
  export declare const isCardanoTransaction: (tx: SWTransactionBase['transaction']) => tx is CardanoTransactionConfig;
12
+ export declare const isBitcoinTransaction: (tx: SWTransaction['transaction']) => tx is Psbt;
11
13
  export declare const getBaseTransactionInfo: (transaction: SWTransactionBase, chainInfoMap: Record<string, _ChainInfo>) => string;
@@ -21,6 +21,11 @@ export const isCardanoTransaction = tx => {
21
21
  const cardanoTransactionConfig = tx;
22
22
  return cardanoTransactionConfig.cardanoPayload !== null && cardanoTransactionConfig.cardanoPayload !== undefined;
23
23
  };
24
+
25
+ // TODO: [Review] this function
26
+ export const isBitcoinTransaction = tx => {
27
+ return 'data' in tx && Array.isArray(tx.data.inputs);
28
+ };
24
29
  const typeName = type => {
25
30
  switch (type) {
26
31
  case ExtrinsicType.TRANSFER_BALANCE:
@@ -1,16 +1,12 @@
1
1
  import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
2
2
  import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
3
- import { SWDutchTransactionInput, SWPermitTransactionInput, SWTransactionBase, SWTransactionInput, SWTransactionResponse, TransactionEmitter } from '@subwallet/extension-base/services/transaction-service/types';
3
+ import { SWDutchTransactionInput, SWPermitTransactionInput, SWTransactionBase, SWTransactionInput, SWTransactionResponse, TransactionEmitter, TransactionEventResponse } from '@subwallet/extension-base/services/transaction-service/types';
4
4
  import { BaseStepType, BriefProcessStep, ProcessStep, ProcessTransactionData } from '@subwallet/extension-base/types';
5
5
  import { BehaviorSubject } from 'rxjs';
6
6
  import { TransactionConfig } from 'web3-core';
7
7
  import { HexString } from '@polkadot/util/types';
8
8
  export default class TransactionService {
9
9
  private readonly state;
10
- private readonly eventService;
11
- private readonly historyService;
12
- private readonly notificationService;
13
- private readonly chainService;
14
10
  private readonly watchTransactionSubscribes;
15
11
  private aliveProcessMap;
16
12
  private readonly transactionSubject;
@@ -63,6 +59,8 @@ export default class TransactionService {
63
59
  private signAndSendSubstrateTransaction;
64
60
  private signAndSendTonTransaction;
65
61
  private signAndSendCardanoTransaction;
62
+ emitterEventTransaction: (emitter: TransactionEmitter, eventData: TransactionEventResponse, chain: string, payload: string) => void;
63
+ private signAndSendBitcoinTransaction;
66
64
  private handleTransactionTimeout;
67
65
  private handlePostEarningTransaction;
68
66
  createProcessIfNeed(process: ProcessTransactionData): Promise<void>;