@subwallet/extension-base 1.3.41-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 (196) 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/index.js +16 -1
  9. package/cjs/core/logic-validation/recipientAddress.js +9 -0
  10. package/cjs/core/logic-validation/transfer.js +25 -5
  11. package/cjs/core/types.js +1 -0
  12. package/cjs/core/utils.js +15 -1
  13. package/cjs/koni/background/handlers/Extension.js +59 -3
  14. package/cjs/koni/background/handlers/State.js +52 -11
  15. package/cjs/packageInfo.js +1 -1
  16. package/cjs/services/balance-service/helpers/subscribe/bitcoin.js +94 -0
  17. package/cjs/services/balance-service/helpers/subscribe/index.js +19 -7
  18. package/cjs/services/balance-service/index.js +32 -4
  19. package/cjs/services/balance-service/transfer/bitcoin-transfer.js +119 -0
  20. package/cjs/services/balance-service/transfer/token.js +2 -0
  21. package/cjs/services/base/types.js +2 -0
  22. package/cjs/services/chain-service/constants.js +14 -3
  23. package/cjs/services/chain-service/handler/bitcoin/BitcoinApi.js +105 -0
  24. package/cjs/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +78 -0
  25. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +371 -0
  26. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +19 -0
  27. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +368 -0
  28. package/cjs/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +302 -0
  29. package/cjs/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
  30. package/cjs/services/chain-service/index.js +27 -3
  31. package/cjs/services/chain-service/utils/index.js +57 -4
  32. package/cjs/services/chain-service/utils/patch.js +1 -1
  33. package/cjs/services/event-service/index.js +4 -0
  34. package/cjs/services/fee-service/service.js +8 -3
  35. package/cjs/services/hiro-service/index.js +96 -0
  36. package/cjs/services/hiro-service/utils/index.js +85 -0
  37. package/cjs/services/history-service/bitcoin-history.js +58 -0
  38. package/cjs/services/history-service/helpers/recoverHistoryStatus.js +96 -4
  39. package/cjs/services/history-service/index.js +41 -3
  40. package/cjs/services/keyring-service/context/handlers/Derive.js +1 -1
  41. package/cjs/services/keyring-service/context/handlers/Migration.js +2 -2
  42. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +4 -3
  43. package/cjs/services/migration-service/scripts/MigrateNewUnifiedAccount.js +29 -0
  44. package/cjs/services/migration-service/scripts/index.js +3 -1
  45. package/cjs/services/request-service/handler/BitcoinRequestHandler.js +440 -0
  46. package/cjs/services/request-service/index.js +29 -3
  47. package/cjs/services/rune-service/index.js +105 -0
  48. package/cjs/services/transaction-service/helpers/index.js +7 -1
  49. package/cjs/services/transaction-service/index.js +136 -15
  50. package/cjs/services/transaction-service/utils.js +6 -3
  51. package/cjs/strategy/api-request-strategy/context/base.js +31 -0
  52. package/cjs/strategy/api-request-strategy/index.js +90 -0
  53. package/cjs/strategy/api-request-strategy/types.js +1 -0
  54. package/cjs/strategy/api-request-strategy/utils/index.js +33 -0
  55. package/cjs/types/account/info/keyring.js +1 -1
  56. package/cjs/types/bitcoin.js +24 -0
  57. package/cjs/types/fee/bitcoin.js +1 -0
  58. package/cjs/types/fee/index.js +11 -0
  59. package/cjs/types/index.js +11 -0
  60. package/cjs/utils/account/analyze.js +3 -3
  61. package/cjs/utils/account/common.js +16 -6
  62. package/cjs/utils/account/derive/info/solo.js +68 -19
  63. package/cjs/utils/account/derive/info/unified.js +2 -0
  64. package/cjs/utils/account/derive/validate.js +70 -2
  65. package/cjs/utils/account/transform.js +11 -5
  66. package/cjs/utils/bitcoin/common.js +98 -0
  67. package/cjs/utils/bitcoin/fee.js +21 -0
  68. package/cjs/utils/bitcoin/index.js +38 -0
  69. package/cjs/utils/bitcoin/utxo-management.js +281 -0
  70. package/cjs/utils/fee/transfer.js +48 -0
  71. package/cjs/utils/index.js +15 -1
  72. package/constants/bitcoin.d.ts +3 -0
  73. package/constants/bitcoin.js +13 -0
  74. package/constants/index.d.ts +2 -0
  75. package/constants/index.js +3 -1
  76. package/core/logic-validation/recipientAddress.js +10 -1
  77. package/core/logic-validation/transfer.d.ts +2 -2
  78. package/core/logic-validation/transfer.js +27 -7
  79. package/core/types.d.ts +1 -0
  80. package/core/types.js +1 -0
  81. package/core/utils.d.ts +1 -0
  82. package/core/utils.js +15 -2
  83. package/koni/background/handlers/Extension.d.ts +2 -0
  84. package/koni/background/handlers/Extension.js +58 -4
  85. package/koni/background/handlers/State.d.ts +7 -3
  86. package/koni/background/handlers/State.js +52 -12
  87. package/package.json +144 -8
  88. package/packageInfo.js +1 -1
  89. package/services/balance-service/helpers/subscribe/bitcoin.d.ts +2 -0
  90. package/services/balance-service/helpers/subscribe/bitcoin.js +87 -0
  91. package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
  92. package/services/balance-service/helpers/subscribe/index.js +20 -8
  93. package/services/balance-service/index.d.ts +2 -0
  94. package/services/balance-service/index.js +32 -4
  95. package/services/balance-service/transfer/bitcoin-transfer.d.ts +14 -0
  96. package/services/balance-service/transfer/bitcoin-transfer.js +112 -0
  97. package/services/balance-service/transfer/token.js +2 -0
  98. package/services/base/types.d.ts +2 -0
  99. package/services/base/types.js +2 -0
  100. package/services/chain-service/constants.d.ts +6 -0
  101. package/services/chain-service/constants.js +8 -2
  102. package/services/chain-service/handler/bitcoin/BitcoinApi.d.ts +31 -0
  103. package/services/chain-service/handler/bitcoin/BitcoinApi.js +98 -0
  104. package/services/chain-service/handler/bitcoin/BitcoinChainHandler.d.ts +16 -0
  105. package/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +70 -0
  106. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.d.ts +28 -0
  107. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +362 -0
  108. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.d.ts +2 -0
  109. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +5 -0
  110. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.d.ts +28 -0
  111. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +359 -0
  112. package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.d.ts +28 -0
  113. package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +293 -0
  114. package/services/chain-service/handler/bitcoin/strategy/types.d.ts +291 -0
  115. package/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
  116. package/services/chain-service/index.d.ts +3 -0
  117. package/services/chain-service/index.js +31 -5
  118. package/services/chain-service/types.d.ts +20 -0
  119. package/services/chain-service/utils/index.d.ts +4 -0
  120. package/services/chain-service/utils/index.js +50 -4
  121. package/services/chain-service/utils/patch.js +1 -1
  122. package/services/event-service/index.d.ts +3 -0
  123. package/services/event-service/index.js +4 -0
  124. package/services/event-service/types.d.ts +3 -0
  125. package/services/fee-service/service.js +8 -3
  126. package/services/hiro-service/index.d.ts +17 -0
  127. package/services/hiro-service/index.js +88 -0
  128. package/services/hiro-service/utils/index.d.ts +6 -0
  129. package/services/hiro-service/utils/index.js +72 -0
  130. package/services/history-service/bitcoin-history.d.ts +4 -0
  131. package/services/history-service/bitcoin-history.js +52 -0
  132. package/services/history-service/helpers/recoverHistoryStatus.d.ts +3 -1
  133. package/services/history-service/helpers/recoverHistoryStatus.js +96 -4
  134. package/services/history-service/index.d.ts +1 -0
  135. package/services/history-service/index.js +42 -4
  136. package/services/keyring-service/context/handlers/Derive.js +2 -2
  137. package/services/keyring-service/context/handlers/Migration.js +2 -2
  138. package/services/keyring-service/context/handlers/Mnemonic.js +4 -3
  139. package/services/migration-service/scripts/MigrateNewUnifiedAccount.d.ts +4 -0
  140. package/services/migration-service/scripts/MigrateNewUnifiedAccount.js +21 -0
  141. package/services/migration-service/scripts/index.js +3 -1
  142. package/services/request-service/handler/BitcoinRequestHandler.d.ts +23 -0
  143. package/services/request-service/handler/BitcoinRequestHandler.js +427 -0
  144. package/services/request-service/index.d.ts +9 -2
  145. package/services/request-service/index.js +25 -3
  146. package/services/rune-service/index.d.ts +17 -0
  147. package/services/rune-service/index.js +97 -0
  148. package/services/transaction-service/helpers/index.d.ts +3 -1
  149. package/services/transaction-service/helpers/index.js +5 -0
  150. package/services/transaction-service/index.d.ts +3 -5
  151. package/services/transaction-service/index.js +135 -16
  152. package/services/transaction-service/types.d.ts +12 -2
  153. package/services/transaction-service/utils.js +7 -4
  154. package/strategy/api-request-strategy/context/base.d.ts +15 -0
  155. package/strategy/api-request-strategy/context/base.js +24 -0
  156. package/strategy/api-request-strategy/index.d.ts +15 -0
  157. package/strategy/api-request-strategy/index.js +83 -0
  158. package/strategy/api-request-strategy/types.d.ts +22 -0
  159. package/strategy/api-request-strategy/types.js +1 -0
  160. package/strategy/api-request-strategy/utils/index.d.ts +2 -0
  161. package/strategy/api-request-strategy/utils/index.js +23 -0
  162. package/types/account/info/keyring.d.ts +1 -1
  163. package/types/account/info/keyring.js +1 -1
  164. package/types/balance/index.d.ts +4 -1
  165. package/types/balance/transfer.d.ts +17 -0
  166. package/types/bitcoin.d.ts +93 -0
  167. package/types/bitcoin.js +17 -0
  168. package/types/fee/base.d.ts +4 -1
  169. package/types/fee/bitcoin.d.ts +18 -0
  170. package/types/fee/bitcoin.js +1 -0
  171. package/types/fee/index.d.ts +1 -0
  172. package/types/fee/index.js +2 -1
  173. package/types/fee/subscription.d.ts +4 -3
  174. package/types/index.d.ts +1 -0
  175. package/types/index.js +1 -0
  176. package/utils/account/analyze.js +4 -4
  177. package/utils/account/common.d.ts +7 -8
  178. package/utils/account/common.js +16 -6
  179. package/utils/account/derive/info/solo.js +70 -21
  180. package/utils/account/derive/info/unified.js +2 -0
  181. package/utils/account/derive/validate.d.ts +1 -0
  182. package/utils/account/derive/validate.js +68 -1
  183. package/utils/account/transform.d.ts +1 -1
  184. package/utils/account/transform.js +11 -5
  185. package/utils/bitcoin/common.d.ts +22 -0
  186. package/utils/bitcoin/common.js +88 -0
  187. package/utils/bitcoin/fee.d.ts +2 -0
  188. package/utils/bitcoin/fee.js +14 -0
  189. package/utils/bitcoin/index.d.ts +3 -0
  190. package/utils/bitcoin/index.js +6 -0
  191. package/utils/bitcoin/utxo-management.d.ts +33 -0
  192. package/utils/bitcoin/utxo-management.js +266 -0
  193. package/utils/fee/transfer.d.ts +3 -1
  194. package/utils/fee/transfer.js +47 -1
  195. package/utils/index.d.ts +1 -0
  196. package/utils/index.js +6 -3
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
+ var _BitcoinRequestHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/BitcoinRequestHandler"));
8
9
  var _CardanoRequestHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/CardanoRequestHandler"));
9
10
  var _TonRequestHandler = _interopRequireDefault(require("./handler/TonRequestHandler"));
10
11
  var _handler = require("./handler");
@@ -19,13 +20,14 @@ class RequestService {
19
20
  #authRequestHandler;
20
21
  #substrateRequestHandler;
21
22
  #evmRequestHandler;
23
+ #bitcoinRequestHandler;
22
24
  #tonRequestHandler;
23
25
  #cardanoRequestHandler;
24
26
  #connectWCRequestHandler;
25
27
  #notSupportWCRequestHandler;
26
28
 
27
29
  // Common
28
- constructor(chainService, settingService, keyringService) {
30
+ constructor(chainService, settingService, keyringService, feeService, transactionService) {
29
31
  this.#chainService = chainService;
30
32
  this.settingService = settingService;
31
33
  this.keyringService = keyringService;
@@ -36,6 +38,7 @@ class RequestService {
36
38
  this.#evmRequestHandler = new _handler.EvmRequestHandler(this);
37
39
  this.#tonRequestHandler = new _TonRequestHandler.default(this);
38
40
  this.#cardanoRequestHandler = new _CardanoRequestHandler.default(this);
41
+ this.#bitcoinRequestHandler = new _BitcoinRequestHandler.default(this, this.#chainService, feeService, transactionService);
39
42
  this.#connectWCRequestHandler = new _handler.ConnectWCRequestHandler(this);
40
43
  this.#notSupportWCRequestHandler = new _handler.NotSupportWCRequestHandler(this);
41
44
 
@@ -43,7 +46,7 @@ class RequestService {
43
46
  this.updateIconV2();
44
47
  }
45
48
  get numAllRequests() {
46
- return this.allSubstrateRequests.length + this.numEvmRequests + this.numTonRequests + this.numCardanoRequests;
49
+ return this.allSubstrateRequests.length + this.numEvmRequests + this.numTonRequests + this.numCardanoRequests + this.numBitcoinRequests;
47
50
  }
48
51
  updateIconV2(shouldClose) {
49
52
  this.#popupHandler.updateIconV2(shouldClose);
@@ -156,6 +159,9 @@ class RequestService {
156
159
  get numCardanoRequests() {
157
160
  return this.#cardanoRequestHandler.numCardanoRequests;
158
161
  }
162
+ get numBitcoinRequests() {
163
+ return this.#bitcoinRequestHandler.numBitcoinRequests;
164
+ }
159
165
  get confirmationsQueueSubject() {
160
166
  return this.#evmRequestHandler.getConfirmationsQueueSubject();
161
167
  }
@@ -201,6 +207,25 @@ class RequestService {
201
207
  return this.#evmRequestHandler.updateConfirmation(id, type, payload, options, validator);
202
208
  }
203
209
 
210
+ // Bitcoin requests
211
+
212
+ get confirmationsQueueSubjectBitcoin() {
213
+ return this.#bitcoinRequestHandler.getConfirmationsQueueSubjectBitcoin();
214
+ }
215
+ addConfirmationBitcoin(id, url, type, payload) {
216
+ let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
217
+ let validator = arguments.length > 5 ? arguments[5] : undefined;
218
+ return this.#bitcoinRequestHandler.addConfirmationBitcoin(id, url, type, payload, options, validator);
219
+ }
220
+ async completeConfirmationBitcoin(request) {
221
+ return await this.#bitcoinRequestHandler.completeConfirmationBitcoin(request);
222
+ }
223
+ updateConfirmationBitcoin(id, type, payload) {
224
+ let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
225
+ let validator = arguments.length > 4 ? arguments[4] : undefined;
226
+ return this.#bitcoinRequestHandler.updateConfirmationBitcoin(id, type, payload, options, validator);
227
+ }
228
+
204
229
  // WalletConnect Connect requests
205
230
  getConnectWCRequest(id) {
206
231
  return this.#connectWCRequestHandler.getConnectWCRequest(id);
@@ -237,7 +262,7 @@ class RequestService {
237
262
 
238
263
  // General methods
239
264
  get numRequests() {
240
- return this.numMetaRequests + this.numAuthRequests + this.numSubstrateRequests + this.numEvmRequests + this.numConnectWCRequests + this.numNotSupportWCRequests + this.numTonRequests + this.numCardanoRequests;
265
+ return this.numMetaRequests + this.numAuthRequests + this.numSubstrateRequests + this.numEvmRequests + this.numConnectWCRequests + this.numNotSupportWCRequests + this.numTonRequests + this.numCardanoRequests + this.numBitcoinRequests;
241
266
  }
242
267
  resetWallet() {
243
268
  this.#authRequestHandler.resetWallet();
@@ -245,6 +270,7 @@ class RequestService {
245
270
  this.#evmRequestHandler.resetWallet();
246
271
  this.#tonRequestHandler.resetWallet();
247
272
  this.#cardanoRequestHandler.resetWallet();
273
+ this.#bitcoinRequestHandler.resetWallet();
248
274
  this.#metadataRequestHandler.resetWallet();
249
275
  this.#connectWCRequestHandler.resetWallet();
250
276
  this.#notSupportWCRequestHandler.resetWallet();
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.RunesService = void 0;
7
+ var _SWError = require("@subwallet/extension-base/background/errors/SWError");
8
+ var _constants = require("@subwallet/extension-base/services/chain-service/constants");
9
+ var _apiRequestStrategy = require("@subwallet/extension-base/strategy/api-request-strategy");
10
+ var _base = require("@subwallet/extension-base/strategy/api-request-strategy/context/base");
11
+ var _utils = require("@subwallet/extension-base/strategy/api-request-strategy/utils");
12
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
13
+ // SPDX-License-Identifier: Apache-2.0
14
+
15
+ const BITCOIN_API_URL = 'https://btc-api.koni.studio';
16
+ const BITCOIN_API_URL_TEST = 'https://api-testnet.openbit.app';
17
+ class RunesService extends _apiRequestStrategy.BaseApiRequestStrategy {
18
+ constructor(url) {
19
+ const context = new _base.BaseApiRequestContext();
20
+ super(context);
21
+ this.baseUrl = url;
22
+ }
23
+ headers = {
24
+ 'Content-Type': 'application/json',
25
+ Authorization: `Bearer ${_constants._BTC_SERVICE_TOKEN}`
26
+ };
27
+ isRateLimited() {
28
+ return false;
29
+ }
30
+ getUrl(path) {
31
+ return `${this.baseUrl}/${path}`;
32
+ }
33
+ getAddressRunesInfo(address, params) {
34
+ return this.addRequest(async () => {
35
+ const _rs = await (0, _utils.getRequest)(this.getUrl(`rune/address/${address}`), params, this.headers);
36
+ const rs = await _rs.json();
37
+ if (rs.status_code !== 200) {
38
+ throw new _SWError.SWError('RuneScanService.getAddressRunesInfo', rs.message);
39
+ }
40
+ return rs.result;
41
+ }, 1);
42
+ }
43
+
44
+ // * Deprecated
45
+ getRuneCollectionsByBatch(params) {
46
+ return this.addRequest(async () => {
47
+ const url = this.getUrl('rune');
48
+ const rs = await (0, _utils.getRequest)(url, params);
49
+ if (rs.status !== 200) {
50
+ throw new _SWError.SWError('RuneScanService.getRuneCollectionsByBatch', await rs.text());
51
+ }
52
+ return await rs.json();
53
+ }, 1);
54
+ }
55
+
56
+ // * Deprecated
57
+ getAddressRuneTxs(address, params) {
58
+ return this.addRequest(async () => {
59
+ const url = this.getUrl(`address/${address}/txs`);
60
+ const rs = await (0, _utils.getRequest)(url, params);
61
+ if (rs.status !== 200) {
62
+ throw new _SWError.SWError('RuneScanService.getAddressRuneTxs', await rs.text());
63
+ }
64
+ return await rs.json();
65
+ }, 0);
66
+ }
67
+ getRuneMetadata(runeid) {
68
+ return this.addRequest(async () => {
69
+ const _rs = await (0, _utils.getRequest)(this.getUrl(`rune/metadata/${runeid}`), undefined, this.headers);
70
+ const rs = await _rs.json();
71
+ if (rs.status_code !== 200) {
72
+ throw new _SWError.SWError('RuneScanService.getRuneMetadata', rs.message);
73
+ }
74
+ return rs.result;
75
+ }, 0);
76
+ }
77
+ getAddressRuneUtxos(address) {
78
+ return this.addRequest(async () => {
79
+ const _rs = await (0, _utils.getRequest)(this.getUrl(`rune/address/${address}/rune/utxo`), undefined, this.headers);
80
+ const rs = await _rs.json();
81
+ if (rs.status_code !== 200) {
82
+ throw new _SWError.SWError('RuneScanService.getAddressRuneUtxos', rs.message);
83
+ }
84
+ return rs.result;
85
+ }, 0);
86
+ }
87
+
88
+ // Singleton
89
+
90
+ static getInstance() {
91
+ let isTestnet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
92
+ if (isTestnet) {
93
+ if (!RunesService.testnet) {
94
+ RunesService.testnet = new RunesService(BITCOIN_API_URL_TEST);
95
+ }
96
+ return RunesService.testnet;
97
+ } else {
98
+ if (!RunesService.mainnet) {
99
+ RunesService.mainnet = new RunesService(BITCOIN_API_URL);
100
+ }
101
+ return RunesService.mainnet;
102
+ }
103
+ }
104
+ }
105
+ exports.RunesService = RunesService;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isTonTransaction = exports.isSubstrateTransaction = exports.isCardanoTransaction = exports.getValidationId = exports.getTransactionId = exports.getBaseTransactionInfo = void 0;
6
+ exports.isTonTransaction = exports.isSubstrateTransaction = exports.isCardanoTransaction = exports.isBitcoinTransaction = exports.getValidationId = exports.getTransactionId = exports.getBaseTransactionInfo = void 0;
7
7
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
8
8
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
9
9
  // SPDX-License-Identifier: Apache-2.0
@@ -32,7 +32,13 @@ const isCardanoTransaction = tx => {
32
32
  const cardanoTransactionConfig = tx;
33
33
  return cardanoTransactionConfig.cardanoPayload !== null && cardanoTransactionConfig.cardanoPayload !== undefined;
34
34
  };
35
+
36
+ // TODO: [Review] this function
35
37
  exports.isCardanoTransaction = isCardanoTransaction;
38
+ const isBitcoinTransaction = tx => {
39
+ return 'data' in tx && Array.isArray(tx.data.inputs);
40
+ };
41
+ exports.isBitcoinTransaction = isBitcoinTransaction;
36
42
  const typeName = type => {
37
43
  switch (type) {
38
44
  case _KoniTypes.ExtrinsicType.TRANSFER_BALANCE:
@@ -46,10 +46,6 @@ class TransactionService {
46
46
  }
47
47
  constructor(state) {
48
48
  this.state = state;
49
- this.eventService = state.eventService;
50
- this.historyService = state.historyService;
51
- this.notificationService = state.notificationService;
52
- this.chainService = state.chainService;
53
49
  }
54
50
  get allTransactions() {
55
51
  return Object.values(this.transactions);
@@ -81,6 +77,7 @@ class TransactionService {
81
77
  additionalValidator,
82
78
  address,
83
79
  chain,
80
+ chainType,
84
81
  extrinsicType
85
82
  } = validationResponse;
86
83
  const chainInfo = this.state.chainService.getChainInfoByKey(chain);
@@ -110,27 +107,30 @@ class TransactionService {
110
107
  const evmApi = this.state.chainService.getEvmApi(chainInfo.slug);
111
108
  const tonApi = this.state.chainService.getTonApi(chainInfo.slug);
112
109
  const cardanoApi = this.state.chainService.getCardanoApi(chainInfo.slug);
110
+ const bitcoinApi = this.state.chainService.getBitcoinApi(chainInfo.slug);
113
111
  // todo: should split into isEvmTx && isNoEvmApi. Because other chains type also has no Evm Api. Same to all blockchain.
114
112
  // todo: refactor check evmTransaction.
115
- const isNoEvmApi = transaction && !(0, _helpers.isSubstrateTransaction)(transaction) && !(0, _helpers.isTonTransaction)(transaction) && !(0, _helpers.isCardanoTransaction)(transaction) && !evmApi;
113
+ const isNoEvmApi = transaction && !(0, _helpers.isSubstrateTransaction)(transaction) && !(0, _helpers.isTonTransaction)(transaction) && !(0, _helpers.isCardanoTransaction)(transaction) && !(0, _helpers.isBitcoinTransaction)(transaction) && !evmApi;
116
114
  const isNoTonApi = transaction && (0, _helpers.isTonTransaction)(transaction) && !tonApi;
117
115
  const isNoCardanoApi = transaction && (0, _helpers.isCardanoTransaction)(transaction) && !cardanoApi;
118
- if (isNoEvmApi || isNoTonApi || isNoCardanoApi) {
116
+ const isNoBitcoinApi = transaction && (0, _helpers.isBitcoinTransaction)(transaction) && !bitcoinApi;
117
+ if (isNoEvmApi || isNoTonApi || isNoCardanoApi || isNoBitcoinApi) {
119
118
  validationResponse.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.CHAIN_DISCONNECTED, undefined));
120
119
  }
121
120
 
122
121
  // Estimate fee for transaction
123
122
  const id = (0, _getId.getId)();
124
- const feeInfo = await this.state.feeService.subscribeChainFee(id, chain, 'evm');
123
+ const feeInfo = await this.state.feeService.subscribeChainFee(id, chain, chainType);
125
124
  const nativeTokenInfo = this.state.chainService.getNativeTokenInfo(chain);
126
125
  const tokenPayFeeSlug = transactionInput.tokenPayFeeSlug;
127
126
  const isNonNativeTokenPayFee = tokenPayFeeSlug && !(0, _utils2._isNativeTokenBySlug)(tokenPayFeeSlug);
128
- const nonNativeTokenPayFeeInfo = isNonNativeTokenPayFee ? this.chainService.getAssetBySlug(tokenPayFeeSlug) : undefined;
127
+ const nonNativeTokenPayFeeInfo = isNonNativeTokenPayFee ? this.state.chainService.getAssetBySlug(tokenPayFeeSlug) : undefined;
129
128
  const priceMap = (await this.state.priceService.getPrice()).priceMap;
130
129
  validationResponse.estimateFee = await (0, _transfer.estimateFeeForTransaction)(validationResponse, transaction, chainInfo, evmApi, substrateApi, priceMap, feeInfo, nativeTokenInfo, nonNativeTokenPayFeeInfo, transactionInput.isTransferLocalTokenAndPayThatTokenAsFee);
131
130
  const chainInfoMap = this.state.chainService.getChainInfoMap();
132
131
 
133
132
  // Check account signing transaction
133
+
134
134
  (0, _transfer.checkSigningAccountForTransaction)(validationResponse, chainInfoMap);
135
135
  const nativeTokenAvailable = await this.state.balanceService.getTransferableBalance(address, chain, nativeTokenInfo.slug, extrinsicType);
136
136
 
@@ -193,7 +193,7 @@ class TransactionService {
193
193
  }
194
194
  fillTransactionDefaultInfo(transaction) {
195
195
  const isInternal = !transaction.url;
196
- const transactionId = (0, _helpers.getTransactionId)(transaction.chainType, transaction.chain, isInternal, (0, _helpers2.isWalletConnectRequest)(transaction.id));
196
+ const transactionId = transaction.id || (0, _helpers.getTransactionId)(transaction.chainType, transaction.chain, isInternal, (0, _helpers2.isWalletConnectRequest)(transaction.id));
197
197
  return {
198
198
  ...transaction,
199
199
  createdAt: new Date().getTime(),
@@ -417,7 +417,7 @@ class TransactionService {
417
417
  }
418
418
  async sendTransaction(transaction) {
419
419
  // Send Transaction
420
- const emitter = await (transaction.chainType === 'substrate' ? this.signAndSendSubstrateTransaction(transaction) : transaction.chainType === 'evm' ? this.signAndSendEvmTransaction(transaction) : transaction.chainType === 'cardano' ? this.signAndSendCardanoTransaction(transaction) : this.signAndSendTonTransaction(transaction));
420
+ const emitter = await (transaction.chainType === 'substrate' ? this.signAndSendSubstrateTransaction(transaction) : transaction.chainType === 'evm' ? this.signAndSendEvmTransaction(transaction) : transaction.chainType === 'cardano' ? this.signAndSendCardanoTransaction(transaction) : transaction.chainType === 'ton' ? this.signAndSendTonTransaction(transaction) : this.signAndSendBitcoinTransaction(transaction));
421
421
  const {
422
422
  eventsHandler,
423
423
  step
@@ -676,6 +676,7 @@ class TransactionService {
676
676
  extrinsicHash: transaction.extrinsicHash,
677
677
  time: transaction.createdAt,
678
678
  fee: transaction.estimateFee,
679
+ blockTime: undefined,
679
680
  blockNumber: 0,
680
681
  // Will be added in next step
681
682
  blockHash: '',
@@ -1065,6 +1066,24 @@ class TransactionService {
1065
1066
  if ([_KoniTypes.ExtrinsicType.STAKING_JOIN_POOL, _KoniTypes.ExtrinsicType.STAKING_BOND, _KoniTypes.ExtrinsicType.JOIN_YIELD_POOL, _KoniTypes.ExtrinsicType.MINT_LDOT, _KoniTypes.ExtrinsicType.MINT_QDOT, _KoniTypes.ExtrinsicType.MINT_SDOT, _KoniTypes.ExtrinsicType.MINT_STDOT, _KoniTypes.ExtrinsicType.MINT_VDOT, _KoniTypes.ExtrinsicType.MINT_VMANTA].includes(transaction.extrinsicType)) {
1066
1067
  this.handlePostEarningTransaction(id);
1067
1068
  }
1069
+
1070
+ // Trigger balance update for Bitcoin transactions after receiving extrinsicHash
1071
+ if (_KoniTypes.ExtrinsicType.TRANSFER_BALANCE && transaction.chainType === 'bitcoin') {
1072
+ const balanceService = this.state.balanceService;
1073
+ const inputData = (0, _utils3.parseTransactionData)(transaction.data);
1074
+ try {
1075
+ const sender = _uiKeyring.default.getPair(inputData.from);
1076
+ balanceService.refreshBalanceForAddress(sender.address, transaction.chain, inputData.tokenSlug, transaction.extrinsicType).catch(error => console.error('Failed to run balance subscription:', error));
1077
+ } catch (e) {
1078
+ console.error(e);
1079
+ }
1080
+ try {
1081
+ const recipient = _uiKeyring.default.getPair(inputData.to);
1082
+ balanceService.refreshBalanceForAddress(recipient.address, transaction.chain, inputData.tokenSlug, transaction.extrinsicType).catch(error => console.error('Failed to run balance subscription:', error));
1083
+ } catch (e) {
1084
+ console.error(e);
1085
+ }
1086
+ }
1068
1087
  }
1069
1088
  handlePostProcessing(id) {
1070
1089
  // must be done after success/failure to make sure the transaction is finalized
@@ -1104,6 +1123,7 @@ class TransactionService {
1104
1123
  let {
1105
1124
  blockHash,
1106
1125
  blockNumber,
1126
+ blockTime,
1107
1127
  extrinsicHash,
1108
1128
  id
1109
1129
  } = _ref4;
@@ -1118,7 +1138,8 @@ class TransactionService {
1118
1138
  extrinsicHash,
1119
1139
  status: _KoniTypes.ExtrinsicStatus.SUCCESS,
1120
1140
  blockNumber: blockNumber || 0,
1121
- blockHash: blockHash || ''
1141
+ blockHash: blockHash || '',
1142
+ blockTime
1122
1143
  }).catch(console.error);
1123
1144
  const info = (0, _util.isHex)(extrinsicHash) ? extrinsicHash : (0, _helpers.getBaseTransactionInfo)(transaction, this.state.chainService.getChainInfoMap());
1124
1145
  this.state.notificationService.notify({
@@ -1193,14 +1214,14 @@ class TransactionService {
1193
1214
  errors,
1194
1215
  extrinsicHash
1195
1216
  });
1196
- this.historyService.updateHistoryByExtrinsicHash(transaction.extrinsicHash, {
1217
+ this.state.historyService.updateHistoryByExtrinsicHash(transaction.extrinsicHash, {
1197
1218
  extrinsicHash: extrinsicHash || transaction.extrinsicHash,
1198
1219
  status: nextStatus,
1199
1220
  blockNumber: blockNumber || 0,
1200
1221
  blockHash: blockHash || ''
1201
1222
  }).catch(console.error);
1202
- const info = (0, _util.isHex)(transaction === null || transaction === void 0 ? void 0 : transaction.extrinsicHash) ? transaction === null || transaction === void 0 ? void 0 : transaction.extrinsicHash : (0, _helpers.getBaseTransactionInfo)(transaction, this.chainService.getChainInfoMap());
1203
- this.notificationService.notify({
1223
+ const info = (0, _util.isHex)(transaction === null || transaction === void 0 ? void 0 : transaction.extrinsicHash) ? transaction === null || transaction === void 0 ? void 0 : transaction.extrinsicHash : (0, _helpers.getBaseTransactionInfo)(transaction, this.state.chainService.getChainInfoMap());
1224
+ this.state.notificationService.notify({
1204
1225
  type: _KoniTypes.NotificationType.ERROR,
1205
1226
  title: (0, _i18next.t)('Transaction timed out'),
1206
1227
  message: (0, _i18next.t)('Transaction {{info}} timed out', {
@@ -1214,7 +1235,7 @@ class TransactionService {
1214
1235
  notifyViaBrowser: true
1215
1236
  });
1216
1237
  }
1217
- this.eventService.emit('transaction.timeout', transaction);
1238
+ this.state.eventService.emit('transaction.timeout', transaction);
1218
1239
  }
1219
1240
  generateHashPayload(chain, transaction) {
1220
1241
  const chainInfo = this.state.chainService.getChainInfoByKey(chain);
@@ -1894,6 +1915,106 @@ class TransactionService {
1894
1915
  });
1895
1916
  return emitter;
1896
1917
  }
1918
+ emitterEventTransaction = (emitter, eventData, chain, payload) => {
1919
+ // Emit signed event
1920
+ emitter.emit('signed', eventData);
1921
+ // Add start info
1922
+ emitter.emit('send', eventData);
1923
+ const event = this.state.chainService.getBitcoinApi(chain).api.sendRawTransaction(payload);
1924
+ event.on('extrinsicHash', txHash => {
1925
+ eventData.extrinsicHash = txHash;
1926
+ emitter.emit('extrinsicHash', eventData);
1927
+ });
1928
+ event.on('success', transactionStatus => {
1929
+ console.log(transactionStatus);
1930
+ eventData.blockHash = transactionStatus.block_hash || undefined;
1931
+ eventData.blockNumber = transactionStatus.block_height || undefined;
1932
+ eventData.blockTime = transactionStatus.block_time ? transactionStatus.block_time * 1000 : undefined;
1933
+ emitter.emit('success', eventData);
1934
+ });
1935
+ event.on('error', error => {
1936
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNABLE_TO_SEND, error));
1937
+ emitter.emit('error', eventData);
1938
+ });
1939
+ };
1940
+ signAndSendBitcoinTransaction(_ref22) {
1941
+ let {
1942
+ address,
1943
+ chain,
1944
+ id,
1945
+ transaction,
1946
+ url
1947
+ } = _ref22;
1948
+ const tx = transaction;
1949
+ // const bitcoinApi = this.state.chainService.getBitcoinApi(chain);
1950
+ // const chainInfo = this.state.chainService.getChainInfoByKey(chain);
1951
+
1952
+ const accountPair = _uiKeyring.default.getPair(address);
1953
+ const account = (0, _utils4.pairToAccount)(accountPair);
1954
+ const payload = {
1955
+ payload: undefined,
1956
+ payloadJson: undefined,
1957
+ account,
1958
+ canSign: true,
1959
+ hashPayload: tx.toHex(),
1960
+ id
1961
+ };
1962
+ const emitter = new _eventemitter.default();
1963
+ const eventData = {
1964
+ id,
1965
+ errors: [],
1966
+ warnings: [],
1967
+ extrinsicHash: id
1968
+ };
1969
+ const isInjected = !!account.isInjected;
1970
+ // const isExternal = !!account.isExternal;
1971
+
1972
+ if (isInjected) {
1973
+ throw new _TransactionError.TransactionError(_types.BasicTxErrorType.UNSUPPORTED);
1974
+ } else {
1975
+ this.state.requestService.addConfirmationBitcoin(id, url || _constants2.EXTENSION_REQUEST_URL, 'bitcoinSendTransactionRequest', payload, {}).then(_ref23 => {
1976
+ let {
1977
+ isApproved,
1978
+ payload
1979
+ } = _ref23;
1980
+ if (isApproved) {
1981
+ if (!payload) {
1982
+ throw new Error('Bad signature');
1983
+ }
1984
+
1985
+ // Emit signed event
1986
+ emitter.emit('signed', eventData);
1987
+ // Add start info
1988
+ emitter.emit('send', eventData);
1989
+ const bitcoinApi = this.state.chainService.getBitcoinApi(chain);
1990
+ const event = bitcoinApi.api.sendRawTransaction(payload);
1991
+ event.on('extrinsicHash', txHash => {
1992
+ eventData.extrinsicHash = txHash;
1993
+ emitter.emit('extrinsicHash', eventData);
1994
+ });
1995
+ event.on('success', transactionStatus => {
1996
+ eventData.blockHash = transactionStatus.block_hash || undefined;
1997
+ eventData.blockNumber = transactionStatus.block_height || undefined;
1998
+ eventData.blockTime = transactionStatus.block_time ? transactionStatus.block_time * 1000 : undefined;
1999
+ emitter.emit('success', eventData);
2000
+ });
2001
+ event.on('error', error => {
2002
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNABLE_TO_SEND, error));
2003
+ emitter.emit('error', eventData);
2004
+ });
2005
+ } else {
2006
+ this.removeTransaction(id);
2007
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.USER_REJECT_REQUEST));
2008
+ emitter.emit('error', eventData);
2009
+ }
2010
+ }).catch(e => {
2011
+ this.removeTransaction(id);
2012
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNABLE_TO_SIGN, e.message));
2013
+ emitter.emit('error', eventData);
2014
+ });
2015
+ }
2016
+ return emitter;
2017
+ }
1897
2018
  handleTransactionTimeout(emitter, eventData) {
1898
2019
  const timeout = setTimeout(() => {
1899
2020
  const transaction = this.getTransaction(eventData.id);
@@ -37,8 +37,8 @@ function getBlockExplorerAccountRoute(explorerLink) {
37
37
  if (explorerLink.includes('statescan.io')) {
38
38
  return '#/accounts';
39
39
  }
40
- if (explorerLink.includes('explorer.zkverify.io')) {
41
- return 'account';
40
+ if (explorerLink.includes('explorer.gen6.app')) {
41
+ return '#/accounts';
42
42
  }
43
43
  if (explorerLink.includes('astral.autonomys')) {
44
44
  return 'accounts';
@@ -49,7 +49,7 @@ function getBlockExplorerAccountRoute(explorerLink) {
49
49
  return 'address';
50
50
  }
51
51
  function getBlockExplorerTxRoute(chainInfo) {
52
- if ((0, _utils._isPureEvmChain)(chainInfo)) {
52
+ if ((0, _utils._isPureEvmChain)(chainInfo) || (0, _utils._isPureBitcoinChain)(chainInfo)) {
53
53
  return 'tx';
54
54
  }
55
55
  if ((0, _utils._isPureCardanoChain)(chainInfo)) {
@@ -58,6 +58,9 @@ function getBlockExplorerTxRoute(chainInfo) {
58
58
  if (['aventus', 'deeper_network'].includes(chainInfo.slug)) {
59
59
  return 'transaction';
60
60
  }
61
+ if (['gen6_public'].includes(chainInfo.slug)) {
62
+ return '#/extrinsics';
63
+ }
61
64
  const explorerLink = (0, _utils._getBlockExplorerFromChain)(chainInfo);
62
65
  if (explorerLink && explorerLink.includes('statescan.io')) {
63
66
  return '#/extrinsics';
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BaseApiRequestContext = void 0;
7
+ // Copyright 2019-2022 @subwallet/extension-base
8
+ // SPDX-License-Identifier: Apache-2.0
9
+
10
+ class BaseApiRequestContext {
11
+ callRate = 2; // limit per interval check
12
+ limitRate = 2; // max rate per interval check
13
+ intervalCheck = 1000; // interval check in ms
14
+ maxRetry = 9; // interval check in ms
15
+ rollbackRateTime = 30 * 1000; // rollback rate time in ms
16
+ timeoutRollbackRate = undefined;
17
+ constructor(options) {
18
+ this.callRate = (options === null || options === void 0 ? void 0 : options.limitRate) || this.callRate;
19
+ this.limitRate = (options === null || options === void 0 ? void 0 : options.limitRate) || this.limitRate;
20
+ this.intervalCheck = (options === null || options === void 0 ? void 0 : options.intervalCheck) || this.intervalCheck;
21
+ this.maxRetry = (options === null || options === void 0 ? void 0 : options.maxRetry) || this.maxRetry;
22
+ }
23
+ reduceLimitRate() {
24
+ clearTimeout(this.timeoutRollbackRate);
25
+ this.callRate = Math.ceil(this.limitRate / 2);
26
+ this.timeoutRollbackRate = setTimeout(() => {
27
+ this.callRate = this.limitRate;
28
+ }, this.rollbackRateTime);
29
+ }
30
+ }
31
+ exports.BaseApiRequestContext = BaseApiRequestContext;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BaseApiRequestStrategy = void 0;
7
+ var _SWError = require("@subwallet/extension-base/background/errors/SWError");
8
+ // Copyright 2019-2022 @subwallet/extension-base
9
+ // SPDX-License-Identifier: Apache-2.0
10
+
11
+ class BaseApiRequestStrategy {
12
+ nextId = 0;
13
+ isRunning = false;
14
+ requestMap = {};
15
+ processInterval = undefined;
16
+ getId() {
17
+ return this.nextId++;
18
+ }
19
+ constructor(context) {
20
+ this.context = context;
21
+ }
22
+ addRequest(run, ordinal) {
23
+ const newId = this.getId();
24
+ return new Promise((resolve, reject) => {
25
+ this.requestMap[newId] = {
26
+ id: newId,
27
+ status: 'pending',
28
+ retry: -1,
29
+ ordinal,
30
+ run,
31
+ resolve,
32
+ reject
33
+ };
34
+ if (!this.isRunning) {
35
+ this.process();
36
+ }
37
+ });
38
+ }
39
+ process() {
40
+ this.stop();
41
+ this.isRunning = true;
42
+ const maxRetry = this.context.maxRetry;
43
+ const interval = setInterval(() => {
44
+ const remainingRequests = Object.values(this.requestMap);
45
+ if (remainingRequests.length === 0) {
46
+ this.isRunning = false;
47
+ clearInterval(interval);
48
+ return;
49
+ }
50
+
51
+ // Get first this.limit requests base on id
52
+ const requests = remainingRequests.filter(request => request.status !== 'running').sort((a, b) => a.id - b.id).sort((a, b) => a.ordinal - b.ordinal).slice(0, this.context.callRate);
53
+
54
+ // Start requests
55
+ requests.forEach(request => {
56
+ request.status = 'running';
57
+ request.run().then(rs => {
58
+ request.resolve(rs);
59
+ }).catch(e => {
60
+ const isRateLimited = this.isRateLimited(e);
61
+
62
+ // Limit rate
63
+ if (isRateLimited) {
64
+ if (request.retry < maxRetry) {
65
+ request.status = 'pending';
66
+ request.retry++;
67
+ this.context.reduceLimitRate();
68
+ } else {
69
+ // Reject request
70
+ request.reject(new _SWError.SWError('MAX_RETRY', String(e)));
71
+ }
72
+ } else {
73
+ request.reject(new _SWError.SWError('UNKNOWN', String(e)));
74
+ }
75
+ });
76
+ });
77
+ }, this.context.intervalCheck);
78
+ this.processInterval = interval;
79
+ }
80
+ stop() {
81
+ clearInterval(this.processInterval);
82
+ this.processInterval = undefined;
83
+ }
84
+ setContext(context) {
85
+ this.stop();
86
+ this.context = context;
87
+ this.process();
88
+ }
89
+ }
90
+ exports.BaseApiRequestStrategy = BaseApiRequestStrategy;
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.postRequest = exports.getRequest = void 0;
8
+ var _crossFetch = _interopRequireDefault(require("cross-fetch"));
9
+ // Copyright 2019-2022 @subwallet/extension-base
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ const postRequest = function (url, body, headers) {
13
+ let jsonBody = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
14
+ return (0, _crossFetch.default)(url, {
15
+ method: 'POST',
16
+ headers: headers || {
17
+ 'Content-Type': 'application/json'
18
+ },
19
+ body: jsonBody ? JSON.stringify(body) : body
20
+ });
21
+ };
22
+ exports.postRequest = postRequest;
23
+ const getRequest = (url, params, headers) => {
24
+ const queryString = params ? Object.keys(params).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`).join('&') : '';
25
+ const _url = `${url}?${queryString}`;
26
+ return (0, _crossFetch.default)(_url, {
27
+ method: 'GET',
28
+ headers: headers || {
29
+ 'Content-Type': 'application/json'
30
+ }
31
+ });
32
+ };
33
+ exports.getRequest = getRequest;
@@ -77,7 +77,7 @@ const ACCOUNT_CHAIN_TYPE_ORDINAL_MAP = {
77
77
  [AccountChainType.BITCOIN]: 5
78
78
  };
79
79
  exports.ACCOUNT_CHAIN_TYPE_ORDINAL_MAP = ACCOUNT_CHAIN_TYPE_ORDINAL_MAP;
80
- const SUPPORTED_ACCOUNT_CHAIN_TYPES = ['substrate', 'ethereum', 'ton', 'cardano'];
80
+ const SUPPORTED_ACCOUNT_CHAIN_TYPES = [AccountChainType.SUBSTRATE, AccountChainType.ETHEREUM, AccountChainType.TON, AccountChainType.CARDANO, AccountChainType.BITCOIN];
81
81
  exports.SUPPORTED_ACCOUNT_CHAIN_TYPES = SUPPORTED_ACCOUNT_CHAIN_TYPES;
82
82
  let AccountActions;
83
83
  /**