@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
@@ -87,6 +87,7 @@ export default class KoniState {
87
87
  generalStatus = ServiceStatus.INITIALIZING;
88
88
  waitSleeping = null;
89
89
  waitStarting = null;
90
+ waitStartingFull = null;
90
91
  constructor(providers = {}) {
91
92
  // Init subwallet api sdk
92
93
  subwalletApiSdk.init({
@@ -97,11 +98,13 @@ export default class KoniState {
97
98
  this.eventService = new EventService();
98
99
  this.dbService = new DatabaseService(this.eventService);
99
100
  this.keyringService = new KeyringService(this);
101
+ this.feeService = new FeeService(this);
102
+ this.transactionService = new TransactionService(this);
100
103
  this.notificationService = new NotificationService();
101
104
  this.chainService = new ChainService(this.dbService, this.eventService);
102
105
  this.subscanService = SubscanService.getInstance();
103
106
  this.settingService = new SettingService();
104
- this.requestService = new RequestService(this.chainService, this.settingService, this.keyringService);
107
+ this.requestService = new RequestService(this.chainService, this.settingService, this.keyringService, this.feeService, this.transactionService);
105
108
  this.priceService = new PriceService(this.dbService, this.eventService, this.chainService);
106
109
  this.balanceService = new BalanceService(this);
107
110
  this.historyService = new HistoryService(this.dbService, this.chainService, this.eventService, this.keyringService, this.subscanService);
@@ -111,9 +114,7 @@ export default class KoniState {
111
114
  this.campaignService = new CampaignService(this);
112
115
  this.mktCampaignService = new MktCampaignService(this);
113
116
  this.buyService = new BuyService(this);
114
- this.transactionService = new TransactionService(this);
115
117
  this.earningService = new EarningService(this);
116
- this.feeService = new FeeService(this);
117
118
  this.swapService = new SwapService(this);
118
119
  this.inappNotificationService = new InappNotificationService(this.dbService, this.keyringService, this.eventService, this.chainService);
119
120
  this.chainOnlineService = new ChainOnlineService(this.chainService, this.settingService, this.eventService, this.dbService);
@@ -123,7 +124,9 @@ export default class KoniState {
123
124
 
124
125
  // Init state
125
126
  if (targetIsWeb) {
126
- this.init().catch(console.error);
127
+ this.init().then(() => {
128
+ this.wakeup(true).catch(console.error);
129
+ }).catch(console.error);
127
130
  }
128
131
  }
129
132
 
@@ -218,7 +221,8 @@ export default class KoniState {
218
221
  await this.earningService.init();
219
222
  await this.swapService.init();
220
223
  await this.inappNotificationService.init();
221
- this.onReady();
224
+
225
+ // this.onReady();
222
226
  this.onAccountAdd();
223
227
  this.onAccountRemove();
224
228
 
@@ -230,6 +234,9 @@ export default class KoniState {
230
234
  this.chainService.subscribeChainInfoMap().subscribe(() => {
231
235
  this.afterChainServiceInit();
232
236
  });
237
+
238
+ // Mark app is ready
239
+ this.eventService.emit('general.init', true);
233
240
  }
234
241
  async initMantaPay(password) {
235
242
  var _this$chainService, _this$chainService$ma;
@@ -253,11 +260,6 @@ export default class KoniState {
253
260
  this.mantaPayConfigSubject.next(data);
254
261
  });
255
262
  }
256
- onReady() {
257
- // Todo: Need optimize in the future to, only run important services onetime to save resources
258
- // Todo: If optimize must check activity of web-runner of mobile
259
- this._start().catch(console.error);
260
- }
261
263
  updateKeyringState(isReady = true, callback) {
262
264
  this.keyringService.updateKeyringState(isReady);
263
265
  callback && callback();
@@ -740,6 +742,9 @@ export default class KoniState {
740
742
  getCardanoApi(networkKey) {
741
743
  return this.chainService.getCardanoApi(networkKey);
742
744
  }
745
+ getBitcoinApi(networkKey) {
746
+ return this.chainService.getBitcoinApi(networkKey);
747
+ }
743
748
  getApiMap() {
744
749
  return {
745
750
  substrate: this.chainService.getSubstrateApiMap(),
@@ -1245,6 +1250,9 @@ export default class KoniState {
1245
1250
  getConfirmationsQueueSubjectCardano() {
1246
1251
  return this.requestService.confirmationsQueueSubjectCardano;
1247
1252
  }
1253
+ getConfirmationsQueueSubjectBitcoin() {
1254
+ return this.requestService.confirmationsQueueSubjectBitcoin;
1255
+ }
1248
1256
  async completeConfirmation(request) {
1249
1257
  return await this.requestService.completeConfirmation(request);
1250
1258
  }
@@ -1254,6 +1262,9 @@ export default class KoniState {
1254
1262
  async completeConfirmationCardano(request) {
1255
1263
  return await this.requestService.completeConfirmationCardano(request);
1256
1264
  }
1265
+ async completeConfirmationBitcoin(request) {
1266
+ return await this.requestService.completeConfirmationBitcoin(request);
1267
+ }
1257
1268
  async onMV3Update() {
1258
1269
  const migrationStatus = await SWStorage.instance.getItem('mv3_migration');
1259
1270
  if (!migrationStatus || migrationStatus !== 'done') {
@@ -1404,8 +1415,12 @@ export default class KoniState {
1404
1415
  });
1405
1416
  }
1406
1417
  async sleep() {
1418
+ // Wait for app initialized before sleep
1419
+ await this.eventService.waitAppInitialized;
1420
+
1407
1421
  // Wait starting finish before sleep to avoid conflict
1408
1422
  this.generalStatus === ServiceStatus.STARTING && this.waitStarting && (await this.waitStarting);
1423
+ this.generalStatus === ServiceStatus.STARTING_FULL && this.waitStartingFull && (await this.waitStartingFull);
1409
1424
  this.eventService.emit('general.sleep', true);
1410
1425
 
1411
1426
  // Avoid sleep multiple times
@@ -1434,6 +1449,9 @@ export default class KoniState {
1434
1449
  this.waitSleeping = null;
1435
1450
  }
1436
1451
  async _start() {
1452
+ // Wait for app initialized before start
1453
+ await this.eventService.waitAppInitialized;
1454
+
1437
1455
  // Wait sleep finish before start to avoid conflict
1438
1456
  this.generalStatus === ServiceStatus.STOPPING && this.waitSleeping && (await this.waitSleeping);
1439
1457
 
@@ -1459,15 +1477,37 @@ export default class KoniState {
1459
1477
  }
1460
1478
 
1461
1479
  // Start services
1462
- await Promise.all([this.cron.start(), this.subscription.start(), this.historyService.start(), this.priceService.start(), this.balanceService.start(), this.earningService.start(), this.swapService.start(), this.inappNotificationService.start()]);
1480
+ this.eventService.emit('general.start', true);
1463
1481
 
1464
1482
  // Complete starting
1465
1483
  starting.resolve();
1466
1484
  this.waitStarting = null;
1467
1485
  this.generalStatus = ServiceStatus.STARTED;
1468
1486
  }
1469
- async wakeup() {
1487
+ async _startFull() {
1488
+ // Continue wait existed starting process
1489
+ if (this.generalStatus === ServiceStatus.STARTING) {
1490
+ await this.waitStarting;
1491
+ }
1492
+
1493
+ // Always start full from start state
1494
+ if (this.generalStatus !== ServiceStatus.STARTED) {
1495
+ return;
1496
+ }
1497
+ this.generalStatus = ServiceStatus.STARTING_FULL;
1498
+ const startingFull = createPromiseHandler();
1499
+ this.waitStartingFull = startingFull.promise;
1500
+ await Promise.all([this.cron.start(), this.subscription.start(), this.historyService.start(), this.priceService.start(), this.balanceService.start(), this.earningService.start(), this.swapService.start(), this.inappNotificationService.start()]);
1501
+ this.eventService.emit('general.start_full', true);
1502
+ this.waitStartingFull = null;
1503
+ this.generalStatus = ServiceStatus.STARTED_FULL;
1504
+ startingFull.resolve();
1505
+ }
1506
+ async wakeup(fullWakeup = false) {
1470
1507
  await this._start();
1508
+ if (fullWakeup) {
1509
+ await this._startFull();
1510
+ }
1471
1511
  }
1472
1512
  cancelSubscription(id) {
1473
1513
  if (isSubscriptionRunning(id)) {
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.3.40-0",
20
+ "version": "1.3.42-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -34,6 +34,11 @@
34
34
  "require": "./cjs/background/errors/BalanceError.js",
35
35
  "default": "./background/errors/BalanceError.js"
36
36
  },
37
+ "./background/errors/BitcoinProviderError": {
38
+ "types": "./background/errors/BitcoinProviderError.d.ts",
39
+ "require": "./cjs/background/errors/BitcoinProviderError.js",
40
+ "default": "./background/errors/BitcoinProviderError.js"
41
+ },
37
42
  "./background/errors/CardanoProviderError": {
38
43
  "types": "./background/errors/CardanoProviderError.d.ts",
39
44
  "require": "./cjs/background/errors/CardanoProviderError.js",
@@ -119,6 +124,11 @@
119
124
  "require": "./cjs/constants/index.js",
120
125
  "default": "./constants/index.js"
121
126
  },
127
+ "./constants/bitcoin": {
128
+ "types": "./constants/bitcoin.d.ts",
129
+ "require": "./cjs/constants/bitcoin.js",
130
+ "default": "./constants/bitcoin.js"
131
+ },
122
132
  "./constants/blocked-actions": {
123
133
  "types": "./constants/blocked-actions.d.ts",
124
134
  "require": "./cjs/constants/blocked-actions.js",
@@ -679,6 +689,11 @@
679
689
  "require": "./cjs/services/balance-service/helpers/subscribe/index.js",
680
690
  "default": "./services/balance-service/helpers/subscribe/index.js"
681
691
  },
692
+ "./services/balance-service/helpers/subscribe/bitcoin": {
693
+ "types": "./services/balance-service/helpers/subscribe/bitcoin.d.ts",
694
+ "require": "./cjs/services/balance-service/helpers/subscribe/bitcoin.js",
695
+ "default": "./services/balance-service/helpers/subscribe/bitcoin.js"
696
+ },
682
697
  "./services/balance-service/helpers/subscribe/cardano": {
683
698
  "types": "./services/balance-service/helpers/subscribe/cardano/index.d.ts",
684
699
  "require": "./cjs/services/balance-service/helpers/subscribe/cardano/index.js",
@@ -739,6 +754,11 @@
739
754
  "require": "./cjs/services/balance-service/helpers/subscribe/ton/utils.js",
740
755
  "default": "./services/balance-service/helpers/subscribe/ton/utils.js"
741
756
  },
757
+ "./services/balance-service/transfer/bitcoin-transfer": {
758
+ "types": "./services/balance-service/transfer/bitcoin-transfer.d.ts",
759
+ "require": "./cjs/services/balance-service/transfer/bitcoin-transfer.js",
760
+ "default": "./services/balance-service/transfer/bitcoin-transfer.js"
761
+ },
742
762
  "./services/balance-service/transfer/cardano-transfer": {
743
763
  "types": "./services/balance-service/transfer/cardano-transfer.d.ts",
744
764
  "require": "./cjs/services/balance-service/transfer/cardano-transfer.js",
@@ -874,6 +894,41 @@
874
894
  "require": "./cjs/services/chain-service/handler/AbstractChainHandler.js",
875
895
  "default": "./services/chain-service/handler/AbstractChainHandler.js"
876
896
  },
897
+ "./services/chain-service/handler/bitcoin/BitcoinApi": {
898
+ "types": "./services/chain-service/handler/bitcoin/BitcoinApi.d.ts",
899
+ "require": "./cjs/services/chain-service/handler/bitcoin/BitcoinApi.js",
900
+ "default": "./services/chain-service/handler/bitcoin/BitcoinApi.js"
901
+ },
902
+ "./services/chain-service/handler/bitcoin/BitcoinChainHandler": {
903
+ "types": "./services/chain-service/handler/bitcoin/BitcoinChainHandler.d.ts",
904
+ "require": "./cjs/services/chain-service/handler/bitcoin/BitcoinChainHandler.js",
905
+ "default": "./services/chain-service/handler/bitcoin/BitcoinChainHandler.js"
906
+ },
907
+ "./services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet": {
908
+ "types": "./services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.d.ts",
909
+ "require": "./cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js",
910
+ "default": "./services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js"
911
+ },
912
+ "./services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy": {
913
+ "types": "./services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.d.ts",
914
+ "require": "./cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js",
915
+ "default": "./services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js"
916
+ },
917
+ "./services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy": {
918
+ "types": "./services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.d.ts",
919
+ "require": "./cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js",
920
+ "default": "./services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js"
921
+ },
922
+ "./services/chain-service/handler/bitcoin/strategy/SubWalletMainnet": {
923
+ "types": "./services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.d.ts",
924
+ "require": "./cjs/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js",
925
+ "default": "./services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js"
926
+ },
927
+ "./services/chain-service/handler/bitcoin/strategy/types": {
928
+ "types": "./services/chain-service/handler/bitcoin/strategy/types.d.ts",
929
+ "require": "./cjs/services/chain-service/handler/bitcoin/strategy/types.js",
930
+ "default": "./services/chain-service/handler/bitcoin/strategy/types.js"
931
+ },
877
932
  "./services/chain-service/handler/CardanoApi": {
878
933
  "types": "./services/chain-service/handler/CardanoApi.d.ts",
879
934
  "require": "./cjs/services/chain-service/handler/CardanoApi.js",
@@ -1186,11 +1241,26 @@
1186
1241
  "require": "./cjs/services/fee-service/utils/tokenPayFee.js",
1187
1242
  "default": "./services/fee-service/utils/tokenPayFee.js"
1188
1243
  },
1244
+ "./services/hiro-service": {
1245
+ "types": "./services/hiro-service/index.d.ts",
1246
+ "require": "./cjs/services/hiro-service/index.js",
1247
+ "default": "./services/hiro-service/index.js"
1248
+ },
1249
+ "./services/hiro-service/utils": {
1250
+ "types": "./services/hiro-service/utils/index.d.ts",
1251
+ "require": "./cjs/services/hiro-service/utils/index.js",
1252
+ "default": "./services/hiro-service/utils/index.js"
1253
+ },
1189
1254
  "./services/history-service": {
1190
1255
  "types": "./services/history-service/index.d.ts",
1191
1256
  "require": "./cjs/services/history-service/index.js",
1192
1257
  "default": "./services/history-service/index.js"
1193
1258
  },
1259
+ "./services/history-service/bitcoin-history": {
1260
+ "types": "./services/history-service/bitcoin-history.d.ts",
1261
+ "require": "./cjs/services/history-service/bitcoin-history.js",
1262
+ "default": "./services/history-service/bitcoin-history.js"
1263
+ },
1194
1264
  "./services/history-service/constants": {
1195
1265
  "types": "./services/history-service/constants/index.d.ts",
1196
1266
  "require": "./cjs/services/history-service/constants/index.js",
@@ -1496,6 +1566,11 @@
1496
1566
  "require": "./cjs/services/migration-service/scripts/MigrateNetworkSettings.js",
1497
1567
  "default": "./services/migration-service/scripts/MigrateNetworkSettings.js"
1498
1568
  },
1569
+ "./services/migration-service/scripts/MigrateNewUnifiedAccount": {
1570
+ "types": "./services/migration-service/scripts/MigrateNewUnifiedAccount.d.ts",
1571
+ "require": "./cjs/services/migration-service/scripts/MigrateNewUnifiedAccount.js",
1572
+ "default": "./services/migration-service/scripts/MigrateNewUnifiedAccount.js"
1573
+ },
1499
1574
  "./services/migration-service/scripts/MigrateSettings": {
1500
1575
  "types": "./services/migration-service/scripts/MigrateSettings.d.ts",
1501
1576
  "require": "./cjs/services/migration-service/scripts/MigrateSettings.js",
@@ -1631,6 +1706,11 @@
1631
1706
  "require": "./cjs/services/request-service/handler/AuthRequestHandler.js",
1632
1707
  "default": "./services/request-service/handler/AuthRequestHandler.js"
1633
1708
  },
1709
+ "./services/request-service/handler/BitcoinRequestHandler": {
1710
+ "types": "./services/request-service/handler/BitcoinRequestHandler.d.ts",
1711
+ "require": "./cjs/services/request-service/handler/BitcoinRequestHandler.js",
1712
+ "default": "./services/request-service/handler/BitcoinRequestHandler.js"
1713
+ },
1634
1714
  "./services/request-service/handler/CardanoRequestHandler": {
1635
1715
  "types": "./services/request-service/handler/CardanoRequestHandler.d.ts",
1636
1716
  "require": "./cjs/services/request-service/handler/CardanoRequestHandler.js",
@@ -1681,6 +1761,11 @@
1681
1761
  "require": "./cjs/services/request-service/types.js",
1682
1762
  "default": "./services/request-service/types.js"
1683
1763
  },
1764
+ "./services/rune-service": {
1765
+ "types": "./services/rune-service/index.d.ts",
1766
+ "require": "./cjs/services/rune-service/index.js",
1767
+ "default": "./services/rune-service/index.js"
1768
+ },
1684
1769
  "./services/setting-service/constants": {
1685
1770
  "types": "./services/setting-service/constants.d.ts",
1686
1771
  "require": "./cjs/services/setting-service/constants.js",
@@ -2106,6 +2191,26 @@
2106
2191
  "require": "./cjs/stores/TransactionHistoryV3.js",
2107
2192
  "default": "./stores/TransactionHistoryV3.js"
2108
2193
  },
2194
+ "./strategy/api-request-strategy": {
2195
+ "types": "./strategy/api-request-strategy/index.d.ts",
2196
+ "require": "./cjs/strategy/api-request-strategy/index.js",
2197
+ "default": "./strategy/api-request-strategy/index.js"
2198
+ },
2199
+ "./strategy/api-request-strategy/context/base": {
2200
+ "types": "./strategy/api-request-strategy/context/base.d.ts",
2201
+ "require": "./cjs/strategy/api-request-strategy/context/base.js",
2202
+ "default": "./strategy/api-request-strategy/context/base.js"
2203
+ },
2204
+ "./strategy/api-request-strategy/types": {
2205
+ "types": "./strategy/api-request-strategy/types.d.ts",
2206
+ "require": "./cjs/strategy/api-request-strategy/types.js",
2207
+ "default": "./strategy/api-request-strategy/types.js"
2208
+ },
2209
+ "./strategy/api-request-strategy/utils": {
2210
+ "types": "./strategy/api-request-strategy/utils/index.d.ts",
2211
+ "require": "./cjs/strategy/api-request-strategy/utils/index.js",
2212
+ "default": "./strategy/api-request-strategy/utils/index.js"
2213
+ },
2109
2214
  "./types": {
2110
2215
  "types": "./types/index.d.ts",
2111
2216
  "require": "./cjs/types/index.js",
@@ -2211,6 +2316,11 @@
2211
2316
  "require": "./cjs/types/balance/transfer.js",
2212
2317
  "default": "./types/balance/transfer.js"
2213
2318
  },
2319
+ "./types/bitcoin": {
2320
+ "types": "./types/bitcoin.d.ts",
2321
+ "require": "./cjs/types/bitcoin.js",
2322
+ "default": "./types/bitcoin.js"
2323
+ },
2214
2324
  "./types/bridge": {
2215
2325
  "types": "./types/bridge/index.d.ts",
2216
2326
  "require": "./cjs/types/bridge/index.js",
@@ -2241,6 +2351,11 @@
2241
2351
  "require": "./cjs/types/common/storage.js",
2242
2352
  "default": "./types/common/storage.js"
2243
2353
  },
2354
+ "./types/environment": {
2355
+ "types": "./types/environment.d.ts",
2356
+ "require": "./cjs/types/environment.js",
2357
+ "default": "./types/environment.js"
2358
+ },
2244
2359
  "./types/error": {
2245
2360
  "types": "./types/error.d.ts",
2246
2361
  "require": "./cjs/types/error.js",
@@ -2256,6 +2371,11 @@
2256
2371
  "require": "./cjs/types/fee/base.js",
2257
2372
  "default": "./types/fee/base.js"
2258
2373
  },
2374
+ "./types/fee/bitcoin": {
2375
+ "types": "./types/fee/bitcoin.d.ts",
2376
+ "require": "./cjs/types/fee/bitcoin.js",
2377
+ "default": "./types/fee/bitcoin.js"
2378
+ },
2259
2379
  "./types/fee/cardano": {
2260
2380
  "types": "./types/fee/cardano.d.ts",
2261
2381
  "require": "./cjs/types/fee/cardano.js",
@@ -2506,6 +2626,26 @@
2506
2626
  "require": "./cjs/utils/auth.js",
2507
2627
  "default": "./utils/auth.js"
2508
2628
  },
2629
+ "./utils/bitcoin": {
2630
+ "types": "./utils/bitcoin/index.d.ts",
2631
+ "require": "./cjs/utils/bitcoin/index.js",
2632
+ "default": "./utils/bitcoin/index.js"
2633
+ },
2634
+ "./utils/bitcoin/common": {
2635
+ "types": "./utils/bitcoin/common.d.ts",
2636
+ "require": "./cjs/utils/bitcoin/common.js",
2637
+ "default": "./utils/bitcoin/common.js"
2638
+ },
2639
+ "./utils/bitcoin/fee": {
2640
+ "types": "./utils/bitcoin/fee.d.ts",
2641
+ "require": "./cjs/utils/bitcoin/fee.js",
2642
+ "default": "./utils/bitcoin/fee.js"
2643
+ },
2644
+ "./utils/bitcoin/utxo-management": {
2645
+ "types": "./utils/bitcoin/utxo-management.d.ts",
2646
+ "require": "./cjs/utils/bitcoin/utxo-management.js",
2647
+ "default": "./utils/bitcoin/utxo-management.js"
2648
+ },
2509
2649
  "./utils/cardano": {
2510
2650
  "types": "./utils/cardano.d.ts",
2511
2651
  "require": "./cjs/utils/cardano.js",
@@ -2709,13 +2849,13 @@
2709
2849
  "@reduxjs/toolkit": "^1.9.1",
2710
2850
  "@sora-substrate/type-definitions": "^1.17.7",
2711
2851
  "@substrate/connect": "^0.8.9",
2712
- "@subwallet/chain-list": "0.2.105",
2713
- "@subwallet/extension-base": "^1.3.40-0",
2714
- "@subwallet/extension-chains": "^1.3.40-0",
2715
- "@subwallet/extension-dapp": "^1.3.40-0",
2716
- "@subwallet/extension-inject": "^1.3.40-0",
2852
+ "@subwallet/chain-list": "0.2.107",
2853
+ "@subwallet/extension-base": "^1.3.42-0",
2854
+ "@subwallet/extension-chains": "^1.3.42-0",
2855
+ "@subwallet/extension-dapp": "^1.3.42-0",
2856
+ "@subwallet/extension-inject": "^1.3.42-0",
2717
2857
  "@subwallet/keyring": "^0.1.12",
2718
- "@subwallet/subwallet-api-sdk": "^1.3.40-0",
2858
+ "@subwallet/subwallet-api-sdk": "^1.3.42-0",
2719
2859
  "@subwallet/ui-keyring": "^0.1.12",
2720
2860
  "@ton/core": "^0.56.3",
2721
2861
  "@ton/crypto": "^3.2.0",
@@ -2727,11 +2867,12 @@
2727
2867
  "avail-js-sdk": "^0.2.12",
2728
2868
  "axios": "^1.6.2",
2729
2869
  "bignumber.js": "^9.1.1",
2870
+ "bitcoinjs-lib": "6.1.5",
2730
2871
  "bn.js": "^5.2.1",
2731
2872
  "bowser": "^2.11.0",
2732
2873
  "browser-passworder": "^2.0.3",
2733
2874
  "buffer": "^6.0.3",
2734
- "cross-fetch": "^3.1.5",
2875
+ "cross-fetch": "^4.1.0",
2735
2876
  "dexie": "^3.2.2",
2736
2877
  "dexie-export-import": "^4.0.7",
2737
2878
  "eth-simple-keyring": "^4.2.0",
package/packageInfo.js CHANGED
@@ -7,5 +7,5 @@ export const packageInfo = {
7
7
  name: '@subwallet/extension-base',
8
8
  path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
9
9
  type: 'esm',
10
- version: '1.3.40-0'
10
+ version: '1.3.42-0'
11
11
  };
@@ -0,0 +1,2 @@
1
+ import { SusbcribeBitcoinPalletBalance } from '@subwallet/extension-base/types';
2
+ export declare function subscribeBitcoinBalance(params: SusbcribeBitcoinPalletBalance): () => void;
@@ -0,0 +1,87 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { _AssetType } from '@subwallet/chain-list/types';
5
+ import { APIItemState } from '@subwallet/extension-base/background/KoniTypes';
6
+ import { BITCOIN_REFRESH_BALANCE_INTERVAL } from '@subwallet/extension-base/constants';
7
+ import { filterAssetsByChainAndType } from '@subwallet/extension-base/utils';
8
+ function getDefaultBalanceResult() {
9
+ return {
10
+ balance: '0',
11
+ bitcoinBalanceMetadata: {
12
+ inscriptionCount: 0,
13
+ runeBalance: '0',
14
+ inscriptionBalance: '0'
15
+ }
16
+ };
17
+ }
18
+ async function getBitcoinBalance(bitcoinApi, addresses) {
19
+ return await Promise.all(addresses.map(async address => {
20
+ try {
21
+ const [addressSummaryInfo] = await Promise.all([bitcoinApi.api.getAddressSummaryInfo(address)]);
22
+ if (Number(addressSummaryInfo.balance) < 0) {
23
+ return getDefaultBalanceResult();
24
+ }
25
+ const bitcoinBalanceMetadata = {
26
+ inscriptionCount: addressSummaryInfo.total_inscription,
27
+ runeBalance: addressSummaryInfo.balance_rune,
28
+ inscriptionBalance: addressSummaryInfo.balance_inscription
29
+ };
30
+ return {
31
+ balance: addressSummaryInfo.balance.toString(),
32
+ bitcoinBalanceMetadata: bitcoinBalanceMetadata
33
+ };
34
+ } catch (error) {
35
+ console.log('Error while fetching Bitcoin balances', error);
36
+ return getDefaultBalanceResult();
37
+ }
38
+ }));
39
+ }
40
+ export function subscribeBitcoinBalance(params) {
41
+ var _Object$values$;
42
+ const {
43
+ addresses,
44
+ assetMap,
45
+ bitcoinApi,
46
+ callback,
47
+ chainInfo
48
+ } = params;
49
+ const chain = chainInfo.slug;
50
+ const nativeTokenInfo = filterAssetsByChainAndType(assetMap, chain, [_AssetType.NATIVE]);
51
+ const nativeTokenSlug = ((_Object$values$ = Object.values(nativeTokenInfo)[0]) === null || _Object$values$ === void 0 ? void 0 : _Object$values$.slug) || '';
52
+ const getBalance = () => {
53
+ getBitcoinBalance(bitcoinApi, addresses).then(balances => {
54
+ return balances.map(({
55
+ balance,
56
+ bitcoinBalanceMetadata
57
+ }, index) => {
58
+ return {
59
+ address: addresses[index],
60
+ tokenSlug: nativeTokenSlug,
61
+ state: APIItemState.READY,
62
+ free: balance,
63
+ locked: (parseInt(bitcoinBalanceMetadata.runeBalance.toString()) + parseInt(bitcoinBalanceMetadata.inscriptionBalance.toString())).toString(),
64
+ metadata: bitcoinBalanceMetadata
65
+ };
66
+ });
67
+ }).catch(e => {
68
+ console.error('Error on get Bitcoin balance with token bitcoin', e);
69
+ return addresses.map(address => {
70
+ return {
71
+ address: address,
72
+ tokenSlug: nativeTokenSlug,
73
+ state: APIItemState.READY,
74
+ free: '0',
75
+ locked: '0'
76
+ };
77
+ });
78
+ }).then(items => {
79
+ callback(items);
80
+ }).catch(console.error);
81
+ };
82
+ const interval = setInterval(getBalance, BITCOIN_REFRESH_BALANCE_INTERVAL);
83
+ getBalance();
84
+ return () => {
85
+ clearInterval(interval);
86
+ };
87
+ }
@@ -5,6 +5,7 @@ import { _AssetType } from '@subwallet/chain-list/types';
5
5
  import { APIItemState } from '@subwallet/extension-base/background/KoniTypes';
6
6
  import { ASTAR_REFRESH_BALANCE_INTERVAL, SUB_TOKEN_REFRESH_BALANCE_INTERVAL } from '@subwallet/extension-base/constants';
7
7
  import { getERC20Contract } from '@subwallet/extension-base/koni/api/contract-handler/evm/web3';
8
+ import { _BALANCE_CHAIN_GROUP } from '@subwallet/extension-base/services/chain-service/constants';
8
9
  import { _getContractAddressOfToken } from '@subwallet/extension-base/services/chain-service/utils';
9
10
  import { filterAssetsByChainAndType } from '@subwallet/extension-base/utils';
10
11
  import { BN } from '@polkadot/util';
@@ -16,7 +17,11 @@ export function subscribeERC20Interval({
16
17
  evmApi
17
18
  }) {
18
19
  const chain = chainInfo.slug;
19
- const tokenList = filterAssetsByChainAndType(assetMap, chain, [_AssetType.ERC20]);
20
+ let tokenList = filterAssetsByChainAndType(assetMap, chain, [_AssetType.ERC20]);
21
+ if (_BALANCE_CHAIN_GROUP.moonbeam.includes(chain)) {
22
+ const moonbeamLocal = filterAssetsByChainAndType(assetMap, chain, [_AssetType.LOCAL]);
23
+ tokenList = Object.assign({}, tokenList, moonbeamLocal);
24
+ }
20
25
  const erc20ContractMap = {};
21
26
  Object.entries(tokenList).forEach(([slug, tokenInfo]) => {
22
27
  erc20ContractMap[slug] = getERC20Contract(_getContractAddressOfToken(tokenInfo), evmApi);
@@ -1,6 +1,6 @@
1
1
  import { _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
2
2
  import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
3
- import { _CardanoApi, _EvmApi, _SubstrateApi, _TonApi } from '@subwallet/extension-base/services/chain-service/types';
3
+ import { _BitcoinApi, _CardanoApi, _EvmApi, _SubstrateApi, _TonApi } from '@subwallet/extension-base/services/chain-service/types';
4
4
  import { AccountJson, BalanceItem } from '@subwallet/extension-base/types';
5
5
  /**
6
6
  * @function getAccountJsonByAddress
@@ -12,4 +12,4 @@ import { AccountJson, BalanceItem } from '@subwallet/extension-base/types';
12
12
  * @returns {AccountJson|null} - Account info or null if not found
13
13
  */
14
14
  export declare const getAccountJsonByAddress: (address: string) => AccountJson | null;
15
- export declare function subscribeBalance(addresses: string[], chains: string[], tokens: string[], _chainAssetMap: Record<string, _ChainAsset>, _chainInfoMap: Record<string, _ChainInfo>, substrateApiMap: Record<string, _SubstrateApi>, evmApiMap: Record<string, _EvmApi>, tonApiMap: Record<string, _TonApi>, cardanoApiMap: Record<string, _CardanoApi>, callback: (rs: BalanceItem[]) => void, extrinsicType?: ExtrinsicType): () => void;
15
+ export declare function subscribeBalance(addresses: string[], chains: string[], tokens: string[], _chainAssetMap: Record<string, _ChainAsset>, _chainInfoMap: Record<string, _ChainInfo>, substrateApiMap: Record<string, _SubstrateApi>, evmApiMap: Record<string, _EvmApi>, tonApiMap: Record<string, _TonApi>, cardanoApiMap: Record<string, _CardanoApi>, bitcoinApiMap: Record<string, _BitcoinApi>, callback: (rs: BalanceItem[]) => void, extrinsicType?: ExtrinsicType): () => void;
@@ -3,8 +3,9 @@
3
3
 
4
4
  import { _AssetType } from '@subwallet/chain-list/types';
5
5
  import { APIItemState } from '@subwallet/extension-base/background/KoniTypes';
6
+ import { subscribeBitcoinBalance } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/bitcoin';
6
7
  import { subscribeCardanoBalance } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano';
7
- import { _getSubstrateGenesisHash, _isChainBitcoinCompatible, _isChainCardanoCompatible, _isChainEvmCompatible, _isChainTonCompatible, _isPureCardanoChain, _isPureEvmChain, _isPureTonChain } from '@subwallet/extension-base/services/chain-service/utils';
8
+ import { _getSubstrateGenesisHash, _isChainBitcoinCompatible, _isChainCardanoCompatible, _isChainEvmCompatible, _isChainTonCompatible, _isPureBitcoinChain, _isPureCardanoChain, _isPureEvmChain, _isPureTonChain } from '@subwallet/extension-base/services/chain-service/utils';
8
9
  import { filterAssetsByChainAndType, getAddressesByChainTypeMap, pairToAccount } from '@subwallet/extension-base/utils';
9
10
  import keyring from '@subwallet/ui-keyring';
10
11
  import { subscribeTonBalance } from "./ton/ton.js";
@@ -37,20 +38,21 @@ export const getAccountJsonByAddress = address => {
37
38
  /** Filter addresses to subscribe by chain info */
38
39
  const filterAddress = (addresses, chainInfo) => {
39
40
  const {
41
+ _bitcoin,
40
42
  bitcoin,
41
43
  cardano,
42
44
  evm,
43
45
  substrate,
44
46
  ton
45
- } = getAddressesByChainTypeMap(addresses);
47
+ } = getAddressesByChainTypeMap(addresses, chainInfo);
46
48
  if (_isChainEvmCompatible(chainInfo)) {
47
- return [evm, [...bitcoin, ...substrate, ...ton, ...cardano]];
49
+ return [evm, [bitcoin, substrate, ton, cardano, _bitcoin].flat()];
48
50
  } else if (_isChainBitcoinCompatible(chainInfo)) {
49
- return [bitcoin, [...evm, ...substrate, ...ton, ...cardano]];
51
+ return [bitcoin, [evm, substrate, ton, cardano, _bitcoin].flat()];
50
52
  } else if (_isChainTonCompatible(chainInfo)) {
51
- return [ton, [...bitcoin, ...evm, ...substrate, ...cardano]];
53
+ return [ton, [bitcoin, evm, substrate, cardano, _bitcoin].flat()];
52
54
  } else if (_isChainCardanoCompatible(chainInfo)) {
53
- return [cardano, [...bitcoin, ...evm, ...substrate, ...ton]];
55
+ return [cardano, [bitcoin, evm, substrate, ton, _bitcoin].flat()];
54
56
  } else {
55
57
  const fetchList = [];
56
58
  const unfetchList = [];
@@ -76,7 +78,7 @@ const filterAddress = (addresses, chainInfo) => {
76
78
  fetchList.push(address);
77
79
  }
78
80
  });
79
- return [fetchList, [...unfetchList, ...bitcoin, ...evm, ...ton, ...cardano]];
81
+ return [fetchList, [unfetchList, bitcoin, evm, ton, cardano, _bitcoin].flat()];
80
82
  }
81
83
  };
82
84
  const handleUnsupportedOrPendingAddresses = (addresses, chainSlug, chainAssetMap, state, callback) => {
@@ -96,7 +98,7 @@ const handleUnsupportedOrPendingAddresses = (addresses, chainSlug, chainAssetMap
96
98
  };
97
99
 
98
100
  // main subscription, use for multiple chains, multiple addresses and multiple tokens
99
- export function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, callback, extrinsicType) {
101
+ export function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, bitcoinApiMap, callback, extrinsicType) {
100
102
  // Filter chain and token
101
103
  const chainAssetMap = Object.fromEntries(Object.entries(_chainAssetMap).filter(([token]) => tokens.includes(token)));
102
104
  const chainInfoMap = Object.fromEntries(Object.entries(_chainInfoMap).filter(([chain]) => chains.includes(chain)));
@@ -138,6 +140,16 @@ export function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _cha
138
140
  cardanoApi
139
141
  });
140
142
  }
143
+ const bitcoinApi = bitcoinApiMap[chainSlug];
144
+ if (_isPureBitcoinChain(chainInfo)) {
145
+ return subscribeBitcoinBalance({
146
+ addresses: useAddresses,
147
+ assetMap: chainAssetMap,
148
+ bitcoinApi,
149
+ callback,
150
+ chainInfo
151
+ });
152
+ }
141
153
 
142
154
  // If the chain is not ready, return pending state
143
155
  if (!substrateApiMap[chainSlug].isApiReady) {