@subwallet/extension-base 1.1.24-0 → 1.1.24-2

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 (99) hide show
  1. package/background/KoniTypes.d.ts +2 -25
  2. package/cjs/constants/index.js +9 -3
  3. package/cjs/koni/api/staking/bonding/amplitude.js +6 -4
  4. package/cjs/koni/api/staking/bonding/astar.js +4 -0
  5. package/cjs/koni/api/staking/bonding/index.js +5 -0
  6. package/cjs/koni/api/staking/bonding/paraChain.js +9 -20
  7. package/cjs/koni/api/staking/bonding/relayChain.js +41 -23
  8. package/cjs/koni/api/staking/bonding/utils.js +67 -16
  9. package/cjs/koni/api/tokens/evm/balance.js +5 -1
  10. package/cjs/koni/api/tokens/evm/transfer.js +8 -4
  11. package/cjs/koni/background/cron.js +2 -2
  12. package/cjs/koni/background/handlers/Extension.js +5 -5
  13. package/cjs/koni/background/handlers/Mobile.js +1 -1
  14. package/cjs/koni/background/handlers/State.js +123 -44
  15. package/cjs/koni/background/subscription.js +2 -2
  16. package/cjs/packageInfo.js +1 -1
  17. package/cjs/services/balance-service/helpers/group.js +53 -0
  18. package/cjs/services/balance-service/helpers/subscribe/balance.js +111 -0
  19. package/cjs/services/balance-service/helpers/subscribe/evm.js +95 -0
  20. package/cjs/services/balance-service/helpers/subscribe/substrate/equilibrium.js +113 -0
  21. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +324 -0
  22. package/cjs/services/balance-service/index.js +41 -16
  23. package/cjs/services/chain-service/constants.js +4 -3
  24. package/cjs/services/history-service/helpers/subscan-extrinsic-parser-helper.js +7 -1
  25. package/cjs/services/history-service/index.js +12 -8
  26. package/cjs/services/migration-service/scripts/MigrateProvider.js +1 -1
  27. package/cjs/services/storage-service/DatabaseService.js +7 -2
  28. package/cjs/services/storage-service/db-stores/Balance.js +9 -9
  29. package/cjs/services/subscan-service/index.js +66 -22
  30. package/cjs/services/transaction-service/index.js +4 -3
  31. package/cjs/types/balance.js +1 -0
  32. package/cjs/types/index.js +11 -0
  33. package/cjs/utils/{address.js → account.js} +32 -2
  34. package/cjs/utils/eth.js +7 -2
  35. package/cjs/utils/index.js +12 -0
  36. package/constants/index.d.ts +2 -0
  37. package/constants/index.js +2 -0
  38. package/koni/api/staking/bonding/amplitude.d.ts +3 -0
  39. package/koni/api/staking/bonding/amplitude.js +6 -4
  40. package/koni/api/staking/bonding/astar.d.ts +3 -0
  41. package/koni/api/staking/bonding/astar.js +4 -0
  42. package/koni/api/staking/bonding/index.d.ts +3 -0
  43. package/koni/api/staking/bonding/index.js +5 -0
  44. package/koni/api/staking/bonding/paraChain.d.ts +3 -0
  45. package/koni/api/staking/bonding/paraChain.js +9 -20
  46. package/koni/api/staking/bonding/relayChain.d.ts +3 -0
  47. package/koni/api/staking/bonding/relayChain.js +41 -24
  48. package/koni/api/staking/bonding/utils.d.ts +15 -2
  49. package/koni/api/staking/bonding/utils.js +69 -18
  50. package/koni/api/tokens/evm/balance.js +5 -1
  51. package/koni/api/tokens/evm/transfer.d.ts +1 -1
  52. package/koni/api/tokens/evm/transfer.js +8 -4
  53. package/koni/background/cron.js +3 -3
  54. package/koni/background/handlers/Extension.js +5 -5
  55. package/koni/background/handlers/Mobile.js +1 -1
  56. package/koni/background/handlers/State.d.ts +6 -4
  57. package/koni/background/handlers/State.js +111 -33
  58. package/koni/background/subscription.js +2 -2
  59. package/package.json +40 -15
  60. package/packageInfo.js +1 -1
  61. package/services/balance-service/helpers/group.d.ts +9 -0
  62. package/services/balance-service/helpers/group.js +46 -0
  63. package/services/balance-service/helpers/subscribe/balance.d.ts +4 -0
  64. package/services/balance-service/helpers/subscribe/balance.js +103 -0
  65. package/services/balance-service/helpers/subscribe/evm.d.ts +5 -0
  66. package/services/balance-service/helpers/subscribe/evm.js +87 -0
  67. package/services/balance-service/helpers/subscribe/substrate/equilibrium.d.ts +4 -0
  68. package/services/balance-service/helpers/subscribe/substrate/equilibrium.js +105 -0
  69. package/services/balance-service/helpers/subscribe/substrate/index.d.ts +4 -0
  70. package/services/balance-service/helpers/subscribe/substrate/index.js +316 -0
  71. package/services/balance-service/index.d.ts +24 -5
  72. package/services/balance-service/index.js +40 -14
  73. package/services/chain-service/constants.js +4 -3
  74. package/services/history-service/helpers/subscan-extrinsic-parser-helper.js +7 -1
  75. package/services/history-service/index.js +12 -8
  76. package/services/migration-service/scripts/MigrateProvider.js +1 -1
  77. package/services/storage-service/DatabaseService.d.ts +4 -2
  78. package/services/storage-service/DatabaseService.js +7 -2
  79. package/services/storage-service/databases/index.d.ts +2 -1
  80. package/services/storage-service/db-stores/Balance.d.ts +2 -2
  81. package/services/storage-service/db-stores/Balance.js +9 -9
  82. package/services/subscan-service/index.d.ts +11 -5
  83. package/services/subscan-service/index.js +66 -26
  84. package/services/subscan-service/types.d.ts +4 -0
  85. package/services/transaction-service/index.js +5 -4
  86. package/types/balance.d.ts +40 -0
  87. package/types/balance.js +1 -0
  88. package/types/index.d.ts +1 -0
  89. package/types/index.js +1 -0
  90. package/utils/account.d.ts +15 -0
  91. package/utils/{address.js → account.js} +28 -0
  92. package/utils/eth.d.ts +1 -0
  93. package/utils/eth.js +4 -0
  94. package/utils/index.d.ts +1 -0
  95. package/utils/index.js +1 -0
  96. package/cjs/koni/api/dotsama/balance.js +0 -464
  97. package/koni/api/dotsama/balance.d.ts +0 -6
  98. package/koni/api/dotsama/balance.js +0 -451
  99. package/utils/address.d.ts +0 -5
@@ -11,6 +11,7 @@ var _subscriptions = require("@subwallet/extension-base/background/handlers/subs
11
11
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
12
12
  var _constants = require("@subwallet/extension-base/constants");
13
13
  var _balanceService = require("@subwallet/extension-base/services/balance-service");
14
+ var _group = require("@subwallet/extension-base/services/balance-service/helpers/group");
14
15
  var _types = require("@subwallet/extension-base/services/base/types");
15
16
  var _buyService = _interopRequireDefault(require("@subwallet/extension-base/services/buy-service"));
16
17
  var _campaignService = _interopRequireDefault(require("@subwallet/extension-base/services/campaign-service"));
@@ -32,6 +33,7 @@ var _transactionService = _interopRequireDefault(require("@subwallet/extension-b
32
33
  var _walletConnectService = _interopRequireDefault(require("@subwallet/extension-base/services/wallet-connect-service"));
33
34
  var _AccountRef = _interopRequireDefault(require("@subwallet/extension-base/stores/AccountRef"));
34
35
  var _utils2 = require("@subwallet/extension-base/utils");
36
+ var _eth = require("@subwallet/extension-base/utils/eth");
35
37
  var _parseTransaction = require("@subwallet/extension-base/utils/eth/parseTransaction");
36
38
  var _promise = require("@subwallet/extension-base/utils/promise");
37
39
  var _decode = require("@subwallet/keyring/pair/decode");
@@ -97,7 +99,7 @@ class KoniState {
97
99
  this.settingService = new _SettingService.default();
98
100
  this.requestService = new _requestService.default(this.chainService, this.settingService, this.keyringService);
99
101
  this.priceService = new _priceService.PriceService(this.dbService, this.eventService, this.chainService);
100
- this.balanceService = new _balanceService.BalanceService(this.chainService);
102
+ this.balanceService = new _balanceService.BalanceService(this);
101
103
  this.historyService = new _historyService.HistoryService(this.dbService, this.chainService, this.eventService, this.keyringService, this.subscanService);
102
104
  this.transactionService = new _transactionService.default(this.chainService, this.eventService, this.requestService, this.balanceService, this.historyService, this.notificationService, this.dbService);
103
105
  this.walletConnectService = new _walletConnectService.default(this, this.requestService);
@@ -195,16 +197,23 @@ class KoniState {
195
197
  generateDefaultBalanceMap() {
196
198
  const balanceMap = {};
197
199
  const activeChains = this.chainService.getActiveChainInfoMap();
198
- Object.values(activeChains).forEach(chainInfo => {
199
- const chainAssetMap = this.chainService.getFungibleTokensByChain(chainInfo.slug);
200
- Object.keys(chainAssetMap).forEach(assetSlug => {
201
- balanceMap[assetSlug] = {
202
- tokenSlug: assetSlug,
203
- free: '',
204
- locked: '',
205
- state: _KoniTypes.APIItemState.PENDING
206
- };
200
+ const isAllAccount = (0, _utils2.isAccountAll)(this.keyringService.currentAccount.address);
201
+ const addresses = isAllAccount ? Object.keys(this.keyringService.accounts) : [this.keyringService.currentAccount.address];
202
+ addresses.forEach(address => {
203
+ const temp = {};
204
+ Object.values(activeChains).forEach(chainInfo => {
205
+ const chainAssetMap = this.chainService.getFungibleTokensByChain(chainInfo.slug);
206
+ Object.keys(chainAssetMap).forEach(assetSlug => {
207
+ temp[assetSlug] = {
208
+ address,
209
+ tokenSlug: assetSlug,
210
+ free: '',
211
+ locked: '',
212
+ state: _KoniTypes.APIItemState.PENDING
213
+ };
214
+ });
207
215
  });
216
+ balanceMap[address] = temp;
208
217
  });
209
218
  return balanceMap;
210
219
  }
@@ -681,14 +690,18 @@ class KoniState {
681
690
  removeInactiveChainBalances(balanceMap) {
682
691
  const activeBalanceMap = {};
683
692
  Object.entries(balanceMap).forEach(_ref5 => {
684
- let [tokenSlug, balanceItem] = _ref5;
685
- const tokenInfo = this.chainService.getAssetBySlug(tokenSlug);
686
- if (tokenInfo) {
687
- const chainInfo = this.chainService.getChainInfoByKey(tokenInfo.originChain);
688
- if (chainInfo && this.getChainStateByKey(chainInfo.slug).active) {
689
- activeBalanceMap[tokenSlug] = balanceItem;
693
+ let [address, balances] = _ref5;
694
+ activeBalanceMap[address] = {};
695
+ Object.entries(balances).forEach(_ref6 => {
696
+ let [tokenSlug, item] = _ref6;
697
+ const tokenInfo = this.chainService.getAssetBySlug(tokenSlug);
698
+ if (tokenInfo) {
699
+ const chainInfo = this.chainService.getChainInfoByKey(tokenInfo.originChain);
700
+ if (chainInfo && this.getChainStateByKey(chainInfo.slug).active) {
701
+ activeBalanceMap[address][tokenSlug] = item;
702
+ }
690
703
  }
691
- }
704
+ });
692
705
  });
693
706
  return activeBalanceMap;
694
707
  }
@@ -700,7 +713,7 @@ class KoniState {
700
713
  };
701
714
  }
702
715
  async getStoredBalance(address) {
703
- const items = await this.dbService.stores.balance.getBalanceMapByAddress(address);
716
+ const items = await this.dbService.stores.balance.getBalanceMapByAddresses(address);
704
717
  return items || {};
705
718
  }
706
719
  async handleSwitchAccount(newAddress) {
@@ -710,6 +723,31 @@ class KoniState {
710
723
  const defaultData = this.generateDefaultBalanceMap();
711
724
  let storedData = await this.getStoredBalance(newAddress);
712
725
  storedData = this.removeInactiveChainBalances(storedData);
726
+ const result = {};
727
+ for (const [address, balanceInfo] of Object.entries(defaultData)) {
728
+ result[address] = {
729
+ ...balanceInfo
730
+ };
731
+ }
732
+ for (const [address, balanceInfo] of Object.entries(storedData)) {
733
+ if (!result[address]) {
734
+ result[address] = {
735
+ ...balanceInfo
736
+ };
737
+ } else {
738
+ const temp = {
739
+ ...result[address]
740
+ };
741
+ for (const [slug, item] of Object.entries(balanceInfo)) {
742
+ temp[slug] = {
743
+ ...item
744
+ };
745
+ }
746
+ result[address] = {
747
+ ...temp
748
+ };
749
+ }
750
+ }
713
751
  this.balanceMap = {
714
752
  ...defaultData,
715
753
  ...storedData
@@ -737,19 +775,59 @@ class KoniState {
737
775
  });
738
776
  });
739
777
  }
740
- setBalanceItem(tokenSlug, item) {
741
- this.balanceMap[tokenSlug] = {
742
- timestamp: +new Date(),
743
- ...item
744
- };
745
- this.updateBalanceStore(item);
746
- this.lazyNext('setBalanceItem', () => {
747
- this.publishBalance();
748
- });
778
+
779
+ /** Note: items must be same tokenSlug */
780
+ setBalanceItem(items) {
781
+ if (items.length) {
782
+ const tokens = [];
783
+ const updates = [];
784
+ for (const item of items) {
785
+ const address = item.address;
786
+ const tokenSlug = item.tokenSlug;
787
+ if (!tokens.includes(tokenSlug)) {
788
+ tokens.push(tokenSlug);
789
+ }
790
+ if (!this.balanceMap[address]) {
791
+ this.balanceMap[address] = {};
792
+ }
793
+ const data = {
794
+ timestamp: +new Date(),
795
+ ...item
796
+ };
797
+ this.balanceMap[address][tokenSlug] = data;
798
+ updates.push(data);
799
+ }
800
+ const isAllAccount = (0, _utils2.isAccountAll)(this.keyringService.currentAccount.address);
801
+ if (isAllAccount) {
802
+ const address = _constants.ALL_ACCOUNT_KEY;
803
+ for (const token of tokens) {
804
+ const items = [];
805
+ for (const [_adr, balanceInfo] of Object.entries(this.balanceMap)) {
806
+ if (!(0, _utils2.isSameAddress)(_adr, address)) {
807
+ const item = balanceInfo[token];
808
+ item && items.push(item);
809
+ }
810
+ }
811
+ const _balance = (0, _group.groupBalance)(items, address, token);
812
+ const balance = {
813
+ timestamp: +new Date(),
814
+ ..._balance
815
+ };
816
+ if (!this.balanceMap[address]) {
817
+ this.balanceMap[address] = {};
818
+ }
819
+ this.balanceMap[address][token] = balance;
820
+ updates.push(balance);
821
+ }
822
+ }
823
+ this.updateBalanceStore(updates);
824
+ this.lazyNext('setBalanceItem', () => {
825
+ this.publishBalance();
826
+ });
827
+ }
749
828
  }
750
- updateBalanceStore(item) {
751
- const currentAccountInfo = this.keyringService.currentAccount;
752
- this.dbService.updateBalanceStore(currentAccountInfo.address, item).catch(e => this.logger.warn(e));
829
+ updateBalanceStore(items) {
830
+ this.dbService.updateBulkBalanceStore(items).catch(e => this.logger.warn(e));
753
831
  }
754
832
  subscribeBalance() {
755
833
  return this.balanceSubject;
@@ -1030,8 +1108,8 @@ class KoniState {
1030
1108
  if (!genesisHash) {
1031
1109
  return [undefined, undefined];
1032
1110
  }
1033
- const rs = Object.entries(this.chainService.getChainInfoMap()).find(_ref6 => {
1034
- let [networkKey, chainInfo] = _ref6;
1111
+ const rs = Object.entries(this.chainService.getChainInfoMap()).find(_ref7 => {
1112
+ let [networkKey, chainInfo] = _ref7;
1035
1113
  return (0, _utils._getSubstrateGenesisHash)(chainInfo) === genesisHash;
1036
1114
  });
1037
1115
  if (rs) {
@@ -1048,9 +1126,9 @@ class KoniState {
1048
1126
  if (!chainId) {
1049
1127
  return [undefined, undefined];
1050
1128
  }
1051
- const rs = Object.entries(this.chainService.getChainInfoMap()).find(_ref7 => {
1129
+ const rs = Object.entries(this.chainService.getChainInfoMap()).find(_ref8 => {
1052
1130
  var _chainInfo$evmInfo;
1053
- let [networkKey, chainInfo] = _ref7;
1131
+ let [networkKey, chainInfo] = _ref8;
1054
1132
  return (chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$evmInfo = chainInfo.evmInfo) === null || _chainInfo$evmInfo === void 0 ? void 0 : _chainInfo$evmInfo.evmChainId) === chainId;
1055
1133
  });
1056
1134
  if (rs) {
@@ -1066,11 +1144,11 @@ class KoniState {
1066
1144
  }
1067
1145
  return Object.values(_constants2._PREDEFINED_SINGLE_MODES).find(item => item.networkKeys.includes(networkKey));
1068
1146
  }
1069
- accountExportPrivateKey(_ref8) {
1147
+ accountExportPrivateKey(_ref9) {
1070
1148
  let {
1071
1149
  address,
1072
1150
  password
1073
- } = _ref8;
1151
+ } = _ref9;
1074
1152
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
1075
1153
  const exportedJson = _uiKeyring.keyring.backupAccount(_uiKeyring.keyring.getPair(address), password);
1076
1154
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
@@ -1080,11 +1158,11 @@ class KoniState {
1080
1158
  publicKey: (0, _util.u8aToHex)(decoded.publicKey)
1081
1159
  };
1082
1160
  }
1083
- checkPublicAndSecretKey(_ref9) {
1161
+ checkPublicAndSecretKey(_ref10) {
1084
1162
  let {
1085
1163
  publicKey,
1086
1164
  secretKey
1087
- } = _ref9;
1165
+ } = _ref10;
1088
1166
  try {
1089
1167
  const _secret = (0, _util.hexStripPrefix)(secretKey);
1090
1168
  if (_secret.length === 64) {
@@ -1202,11 +1280,11 @@ class KoniState {
1202
1280
  return this.requestService.addConfirmation(id, url, 'evmSignatureRequest', signPayload, {
1203
1281
  requiredPassword: false,
1204
1282
  address
1205
- }).then(_ref10 => {
1283
+ }).then(_ref11 => {
1206
1284
  let {
1207
1285
  isApproved,
1208
1286
  payload
1209
- } = _ref10;
1287
+ } = _ref11;
1210
1288
  if (isApproved) {
1211
1289
  if (payload) {
1212
1290
  return payload;
@@ -1253,7 +1331,8 @@ class KoniState {
1253
1331
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
1254
1332
  throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, e === null || e === void 0 ? void 0 : e.message);
1255
1333
  }
1256
- const gasPrice = await web3.eth.getGasPrice();
1334
+ const _price = await web3.eth.getGasPrice();
1335
+ const gasPrice = (0, _eth.recalculateGasPrice)(_price, networkKey);
1257
1336
  transaction.gasPrice = gasPrice;
1258
1337
  const estimateGas = new _util.BN(gasPrice.toString()).mul(new _util.BN(transaction.gas)).toString();
1259
1338
 
@@ -1490,7 +1569,7 @@ class KoniState {
1490
1569
  const chainMap = this.chainService.getChainInfoMap();
1491
1570
  const balanceDataList = await Promise.all(promiseList);
1492
1571
  balanceDataList.forEach(balanceData => {
1493
- balanceData && balanceData.forEach(_ref11 => {
1572
+ balanceData && balanceData.forEach(_ref12 => {
1494
1573
  var _currentAssetSettings;
1495
1574
  let {
1496
1575
  balance,
@@ -1499,7 +1578,7 @@ class KoniState {
1499
1578
  locked,
1500
1579
  network,
1501
1580
  symbol
1502
- } = _ref11;
1581
+ } = _ref12;
1503
1582
  const chain = _subscanChainMap.SUBSCAN_BALANCE_CHAIN_MAP_REVERSE[network];
1504
1583
  const chainInfo = chain ? chainMap[chain] : null;
1505
1584
  const balanceIsEmpty = (!balance || balance === '0') && (!locked || locked === '0') && (!bonded || bonded === '0');
@@ -1688,7 +1767,7 @@ class KoniState {
1688
1767
  };
1689
1768
  balanceItem.free = ((_zkBalances$i = zkBalances[i]) === null || _zkBalances$i === void 0 ? void 0 : _zkBalances$i.toString()) || '0';
1690
1769
  balanceItem.state = _KoniTypes.APIItemState.READY;
1691
- this.setBalanceItem(balanceItem.tokenSlug, balanceItem);
1770
+ this.setBalanceItem([balanceItem]);
1692
1771
  }
1693
1772
  }).catch(console.warn);
1694
1773
  }
@@ -4,12 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.KoniSubscription = void 0;
7
- var _balance = require("@subwallet/extension-base/koni/api/dotsama/balance");
8
7
  var _crowdloan = require("@subwallet/extension-base/koni/api/dotsama/crowdloan");
9
8
  var _staking = require("@subwallet/extension-base/koni/api/staking");
10
9
  var _bonding = require("@subwallet/extension-base/koni/api/staking/bonding");
11
10
  var _paraChain = require("@subwallet/extension-base/koni/api/staking/paraChain");
12
11
  var _handlers = require("@subwallet/extension-base/koni/background/handlers");
12
+ var _balance = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/balance");
13
13
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
14
14
  var _types = require("@subwallet/extension-base/services/event-service/types");
15
15
  var _utils2 = require("@subwallet/extension-base/utils");
@@ -153,7 +153,7 @@ class KoniSubscription {
153
153
  }
154
154
  });
155
155
  const unsub = (0, _balance.subscribeBalance)(addresses, filteredChainInfoMap, substrateApiMap, evmApiMap, result => {
156
- this.state.setBalanceItem(result.tokenSlug, result);
156
+ this.state.setBalanceItem(result);
157
157
  });
158
158
  const unsub2 = this.state.subscribeMantaPayBalance();
159
159
  if (onlyRunOnFirstTime) {
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.1.24-0'
16
+ version: '1.1.24-2'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.groupBalance = void 0;
8
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
+ var _utils = require("@subwallet/extension-base/utils");
10
+ var _bn = _interopRequireDefault(require("bn.js"));
11
+ // Copyright 2019-2022 @subwallet/extension-base
12
+ // SPDX-License-Identifier: Apache-2.0
13
+
14
+ /**
15
+ * Group the balance of {token} from {items} into {address}
16
+ * @param {BalanceItem[]} items - List balance want to group
17
+ * @param {string} address - Address will be grouped to
18
+ * @param {string} token - Slug of token will be group balance
19
+ * @return {BalanceItem} - Grouped balance information of token
20
+ */
21
+ const groupBalance = (items, address, token) => {
22
+ const states = items.map(item => item.state);
23
+ const result = {
24
+ address,
25
+ tokenSlug: token,
26
+ free: (0, _utils.sumBN)(items.map(item => new _bn.default(item.free))).toString(),
27
+ locked: (0, _utils.sumBN)(items.map(item => new _bn.default(item.locked))).toString(),
28
+ state: states.every(item => item === _KoniTypes.APIItemState.NOT_SUPPORT) ? _KoniTypes.APIItemState.NOT_SUPPORT : states.some(item => item === _KoniTypes.APIItemState.READY) ? _KoniTypes.APIItemState.READY : _KoniTypes.APIItemState.PENDING
29
+ };
30
+ for (const item of items) {
31
+ if (item.substrateInfo) {
32
+ if (!result.substrateInfo) {
33
+ result.substrateInfo = {
34
+ ...item.substrateInfo
35
+ };
36
+ } else {
37
+ const old = {
38
+ ...result.substrateInfo
39
+ };
40
+ const _new = {
41
+ ...item.substrateInfo
42
+ };
43
+ result.substrateInfo = {
44
+ reserved: new _bn.default(old.reserved || '0').add(new _bn.default(_new.reserved || '0')).toString(),
45
+ feeFrozen: new _bn.default(old.feeFrozen || '0').add(new _bn.default(_new.feeFrozen || '0')).toString(),
46
+ miscFrozen: new _bn.default(old.miscFrozen || '0').add(new _bn.default(_new.miscFrozen || '0')).toString()
47
+ };
48
+ }
49
+ }
50
+ }
51
+ return result;
52
+ };
53
+ exports.groupBalance = groupBalance;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.subscribeBalance = subscribeBalance;
7
+ var _types = require("@subwallet/chain-list/types");
8
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
+ var _handlers = require("@subwallet/extension-base/koni/background/handlers");
10
+ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
11
+ var _utils2 = require("@subwallet/extension-base/utils");
12
+ var _account = require("@subwallet/extension-base/utils/account");
13
+ var _evm = require("./evm");
14
+ var _substrate = require("./substrate");
15
+ // Copyright 2019-2022 @subwallet/extension-base
16
+ // SPDX-License-Identifier: Apache-2.0
17
+
18
+ const filterAddress = (addresses, chainInfo) => {
19
+ const isEvmChain = (0, _utils._isChainEvmCompatible)(chainInfo);
20
+ const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
21
+ if (isEvmChain) {
22
+ return [evmAddresses, []];
23
+ } else {
24
+ const fetchList = [];
25
+ const unfetchList = [];
26
+ substrateAddresses.forEach(address => {
27
+ const account = (0, _account.getAccountJsonByAddress)(address);
28
+ if (account) {
29
+ if (account.isHardware) {
30
+ const availGen = account.availableGenesisHashes || [];
31
+ const gen = (0, _utils._getSubstrateGenesisHash)(chainInfo);
32
+ if (availGen.includes(gen)) {
33
+ fetchList.push(address);
34
+ } else {
35
+ unfetchList.push(address);
36
+ }
37
+ } else {
38
+ fetchList.push(address);
39
+ }
40
+ } else {
41
+ fetchList.push(address);
42
+ }
43
+ });
44
+ return [fetchList, [...unfetchList, ...evmAddresses]];
45
+ }
46
+ };
47
+
48
+ // main subscription
49
+ function subscribeBalance(addresses, chainInfoMap, substrateApiMap, evmApiMap, callback) {
50
+ // Looping over each chain
51
+ const unsubList = Object.entries(chainInfoMap).map(async _ref => {
52
+ let [chainSlug, chainInfo] = _ref;
53
+ const [useAddresses, notSupportAddresses] = filterAddress(addresses, chainInfo);
54
+ if (notSupportAddresses.length) {
55
+ const tokens = _handlers.state.chainService.getAssetByChainAndType(chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL]);
56
+ const assetSetting = await _handlers.state.chainService.getAssetSettings();
57
+ const filtered = Object.values(tokens).filter(_ref2 => {
58
+ var _assetSetting$slug;
59
+ let {
60
+ slug
61
+ } = _ref2;
62
+ return (_assetSetting$slug = assetSetting[slug]) === null || _assetSetting$slug === void 0 ? void 0 : _assetSetting$slug.visible;
63
+ });
64
+ const now = new Date().getTime();
65
+ notSupportAddresses.forEach(address => {
66
+ const items = filtered.map(token => {
67
+ return {
68
+ address,
69
+ tokenSlug: token.slug,
70
+ free: '0',
71
+ locked: '0',
72
+ state: _KoniTypes.APIItemState.NOT_SUPPORT,
73
+ timestamp: now
74
+ };
75
+ });
76
+ callback(items);
77
+ });
78
+ }
79
+ if ((0, _utils._isPureEvmChain)(chainInfo)) {
80
+ const nativeTokenInfo = _handlers.state.getNativeTokenInfo(chainSlug);
81
+ return (0, _evm.subscribeEVMBalance)(chainSlug, useAddresses, evmApiMap, callback, nativeTokenInfo);
82
+ }
83
+
84
+ // if (!useAddresses || useAddresses.length === 0 || _PURE_EVM_CHAINS.indexOf(chainSlug) > -1) {
85
+ // const fungibleTokensByChain = state.chainService.getFungibleTokensByChain(chainSlug, true);
86
+ // const now = new Date().getTime();
87
+ //
88
+ // Object.values(fungibleTokensByChain).map((token) => {
89
+ // return {
90
+ // tokenSlug: token.slug,
91
+ // free: '0',
92
+ // locked: '0',
93
+ // state: APIItemState.READY,
94
+ // timestamp: now
95
+ // } as BalanceItem;
96
+ // }).forEach(callback);
97
+ //
98
+ // return undefined;
99
+ // }
100
+
101
+ const networkAPI = await substrateApiMap[chainSlug].isReady;
102
+ return (0, _substrate.subscribeSubstrateBalance)(useAddresses, chainInfo, chainSlug, networkAPI, evmApiMap, callback);
103
+ });
104
+ return () => {
105
+ unsubList.forEach(subProm => {
106
+ subProm.then(unsub => {
107
+ unsub && unsub();
108
+ }).catch(console.error);
109
+ });
110
+ };
111
+ }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.subscribeERC20Interval = subscribeERC20Interval;
7
+ exports.subscribeEVMBalance = subscribeEVMBalance;
8
+ var _types = require("@subwallet/chain-list/types");
9
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
+ var _constants = require("@subwallet/extension-base/constants");
11
+ var _balance = require("@subwallet/extension-base/koni/api/tokens/evm/balance");
12
+ var _web = require("@subwallet/extension-base/koni/api/tokens/evm/web3");
13
+ var _handlers = require("@subwallet/extension-base/koni/background/handlers");
14
+ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
15
+ var _util = require("@polkadot/util");
16
+ // Copyright 2019-2022 @subwallet/extension-base
17
+ // SPDX-License-Identifier: Apache-2.0
18
+
19
+ function subscribeERC20Interval(addresses, chain, evmApiMap, callBack) {
20
+ let tokenList = {};
21
+ const erc20ContractMap = {};
22
+ const getTokenBalances = () => {
23
+ Object.values(tokenList).map(async tokenInfo => {
24
+ try {
25
+ const contract = erc20ContractMap[tokenInfo.slug];
26
+ const balances = await Promise.all(addresses.map(async address => {
27
+ try {
28
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
29
+ return await contract.methods.balanceOf(address).call();
30
+ } catch (e) {
31
+ console.error(`Error on get balance of account ${address} for token ${tokenInfo.slug}`, e);
32
+ return '0';
33
+ }
34
+ }));
35
+ const items = balances.map((balance, index) => {
36
+ return {
37
+ address: addresses[index],
38
+ tokenSlug: tokenInfo.slug,
39
+ free: new _util.BN(balance || 0).toString(),
40
+ locked: '0',
41
+ state: _KoniTypes.APIItemState.READY
42
+ };
43
+ });
44
+ callBack(items);
45
+ } catch (err) {
46
+ console.log(tokenInfo.slug, err);
47
+ }
48
+ });
49
+ };
50
+ tokenList = _handlers.state.getAssetByChainAndAsset(chain, [_types._AssetType.ERC20]);
51
+ Object.entries(tokenList).forEach(_ref => {
52
+ let [slug, tokenInfo] = _ref;
53
+ erc20ContractMap[slug] = (0, _web.getERC20Contract)(chain, (0, _utils._getContractAddressOfToken)(tokenInfo), evmApiMap);
54
+ });
55
+ getTokenBalances();
56
+ const interval = setInterval(getTokenBalances, _constants.SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
57
+ return () => {
58
+ clearInterval(interval);
59
+ };
60
+ }
61
+ function subscribeEVMBalance(chain, addresses, evmApiMap, callback, tokenInfo) {
62
+ function getBalance() {
63
+ (0, _balance.getEVMBalance)(chain, addresses, evmApiMap).then(balances => {
64
+ return balances.map((balance, index) => {
65
+ return {
66
+ address: addresses[index],
67
+ tokenSlug: tokenInfo.slug,
68
+ state: _KoniTypes.APIItemState.READY,
69
+ free: new _util.BN(balance || '0').toString(),
70
+ locked: '0'
71
+ };
72
+ });
73
+ }).catch(e => {
74
+ console.error(`Error on get native balance with token ${tokenInfo.slug}`, e);
75
+ return addresses.map(address => {
76
+ return {
77
+ address: address,
78
+ tokenSlug: tokenInfo.slug,
79
+ state: _KoniTypes.APIItemState.READY,
80
+ free: '0',
81
+ locked: '0'
82
+ };
83
+ });
84
+ }).then(items => {
85
+ callback(items);
86
+ }).catch(console.error);
87
+ }
88
+ getBalance();
89
+ const interval = setInterval(getBalance, _constants.ASTAR_REFRESH_BALANCE_INTERVAL);
90
+ const unsub2 = subscribeERC20Interval(addresses, chain, evmApiMap, callback);
91
+ return () => {
92
+ clearInterval(interval);
93
+ unsub2 && unsub2();
94
+ };
95
+ }