@subwallet/extension-base 1.1.23-0 → 1.1.24-1

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 (82) hide show
  1. package/background/KoniTypes.d.ts +12 -26
  2. package/cjs/constants/index.js +9 -3
  3. package/cjs/koni/api/staking/bonding/index.js +1 -0
  4. package/cjs/koni/api/tokens/evm/balance.js +5 -1
  5. package/cjs/koni/api/tokens/evm/transfer.js +8 -4
  6. package/cjs/koni/background/cron.js +2 -2
  7. package/cjs/koni/background/handlers/Extension.js +14 -5
  8. package/cjs/koni/background/handlers/Mobile.js +32 -0
  9. package/cjs/koni/background/handlers/State.js +126 -45
  10. package/cjs/koni/background/subscription.js +2 -2
  11. package/cjs/packageInfo.js +1 -1
  12. package/cjs/services/balance-service/helpers/group.js +53 -0
  13. package/cjs/services/balance-service/helpers/subscribe/balance.js +111 -0
  14. package/cjs/services/balance-service/helpers/subscribe/evm.js +95 -0
  15. package/cjs/services/balance-service/helpers/subscribe/substrate/equilibrium.js +113 -0
  16. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +324 -0
  17. package/cjs/services/balance-service/index.js +41 -16
  18. package/cjs/services/history-service/helpers/subscan-extrinsic-parser-helper.js +7 -1
  19. package/cjs/services/history-service/index.js +12 -8
  20. package/cjs/services/migration-service/scripts/MigrateProvider.js +1 -1
  21. package/cjs/services/storage-service/DatabaseService.js +47 -2
  22. package/cjs/services/storage-service/db-stores/Balance.js +9 -9
  23. package/cjs/services/subscan-service/index.js +66 -22
  24. package/cjs/services/transaction-service/index.js +4 -3
  25. package/cjs/types/balance.js +1 -0
  26. package/cjs/types/index.js +11 -0
  27. package/cjs/utils/{address.js → account.js} +32 -2
  28. package/cjs/utils/eth.js +7 -2
  29. package/cjs/utils/index.js +12 -0
  30. package/constants/index.d.ts +2 -0
  31. package/constants/index.js +2 -0
  32. package/koni/api/staking/bonding/index.js +1 -0
  33. package/koni/api/tokens/evm/balance.js +5 -1
  34. package/koni/api/tokens/evm/transfer.d.ts +1 -1
  35. package/koni/api/tokens/evm/transfer.js +8 -4
  36. package/koni/background/cron.js +3 -3
  37. package/koni/background/handlers/Extension.js +14 -5
  38. package/koni/background/handlers/Mobile.d.ts +5 -1
  39. package/koni/background/handlers/Mobile.js +31 -0
  40. package/koni/background/handlers/State.d.ts +6 -4
  41. package/koni/background/handlers/State.js +114 -34
  42. package/koni/background/subscription.js +2 -2
  43. package/package.json +40 -14
  44. package/packageInfo.js +1 -1
  45. package/services/balance-service/helpers/group.d.ts +9 -0
  46. package/services/balance-service/helpers/group.js +46 -0
  47. package/services/balance-service/helpers/subscribe/balance.d.ts +4 -0
  48. package/services/balance-service/helpers/subscribe/balance.js +103 -0
  49. package/services/balance-service/helpers/subscribe/evm.d.ts +5 -0
  50. package/services/balance-service/helpers/subscribe/evm.js +87 -0
  51. package/services/balance-service/helpers/subscribe/substrate/equilibrium.d.ts +4 -0
  52. package/services/balance-service/helpers/subscribe/substrate/equilibrium.js +105 -0
  53. package/services/balance-service/helpers/subscribe/substrate/index.d.ts +4 -0
  54. package/services/balance-service/helpers/subscribe/substrate/index.js +316 -0
  55. package/services/balance-service/index.d.ts +24 -5
  56. package/services/balance-service/index.js +40 -14
  57. package/services/history-service/helpers/subscan-extrinsic-parser-helper.js +7 -1
  58. package/services/history-service/index.js +12 -8
  59. package/services/migration-service/scripts/MigrateProvider.js +1 -1
  60. package/services/storage-service/DatabaseService.d.ts +7 -2
  61. package/services/storage-service/DatabaseService.js +47 -2
  62. package/services/storage-service/databases/index.d.ts +2 -1
  63. package/services/storage-service/db-stores/Balance.d.ts +2 -2
  64. package/services/storage-service/db-stores/Balance.js +9 -9
  65. package/services/subscan-service/index.d.ts +11 -5
  66. package/services/subscan-service/index.js +66 -26
  67. package/services/subscan-service/types.d.ts +4 -0
  68. package/services/transaction-service/index.js +5 -4
  69. package/types/balance.d.ts +40 -0
  70. package/types/balance.js +1 -0
  71. package/types/index.d.ts +1 -0
  72. package/types/index.js +1 -0
  73. package/utils/account.d.ts +15 -0
  74. package/utils/{address.js → account.js} +28 -0
  75. package/utils/eth.d.ts +1 -0
  76. package/utils/eth.js +4 -0
  77. package/utils/index.d.ts +1 -0
  78. package/utils/index.js +1 -0
  79. package/cjs/koni/api/dotsama/balance.js +0 -464
  80. package/koni/api/dotsama/balance.d.ts +0 -6
  81. package/koni/api/dotsama/balance.js +0 -451
  82. package/utils/address.d.ts +0 -5
@@ -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
+ }
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.subscribeEqBalanceAccountPallet = subscribeEqBalanceAccountPallet;
8
+ exports.subscribeEquilibriumTokenBalance = subscribeEquilibriumTokenBalance;
9
+ var _types = require("@subwallet/chain-list/types");
10
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
+ var _handlers = require("@subwallet/extension-base/koni/background/handlers");
12
+ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
13
+ var _bignumber = _interopRequireDefault(require("bignumber.js"));
14
+ var _util = require("@polkadot/util");
15
+ // Copyright 2019-2022 @subwallet/extension-base
16
+ // SPDX-License-Identifier: Apache-2.0
17
+
18
+ async function subscribeEquilibriumTokenBalance(addresses, chain, api, callBack, includeNativeToken) {
19
+ const tokenTypes = includeNativeToken ? [_types._AssetType.NATIVE, _types._AssetType.LOCAL] : [_types._AssetType.LOCAL];
20
+ const tokenMap = _handlers.state.getAssetByChainAndAsset(chain, tokenTypes);
21
+ try {
22
+ const unsub = await api.query.system.account.multi(addresses, balances => {
23
+ // Equilibrium customizes the SystemAccount pallet
24
+ Object.values(tokenMap).forEach(tokenInfo => {
25
+ const assetId = (0, _utils._getTokenOnChainAssetId)(tokenInfo);
26
+ const items = balances.map((balance, index) => {
27
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
28
+ const balancesData = JSON.parse(balance.data.toString());
29
+ const balanceList = balancesData.v0.balance;
30
+
31
+ // @ts-ignore
32
+ const freeTokenBalance = balanceList.find(data => data[0] === parseInt(assetId));
33
+ const bnFreeTokenBalance = freeTokenBalance ? new _util.BN(new _bignumber.default(freeTokenBalance[1].positive).toString()) : _util.BN_ZERO;
34
+ return {
35
+ address: addresses[index],
36
+ free: bnFreeTokenBalance.toString(),
37
+ locked: '0',
38
+ // Equilibrium doesn't show locked balance
39
+ state: _KoniTypes.APIItemState.READY,
40
+ tokenSlug: tokenInfo.slug
41
+ };
42
+ });
43
+ callBack(items);
44
+ });
45
+ });
46
+ return () => {
47
+ unsub();
48
+ };
49
+ } catch (e) {
50
+ Object.values(tokenMap).forEach(tokenInfo => {
51
+ const items = addresses.map(address => {
52
+ return {
53
+ address: address,
54
+ free: '0',
55
+ locked: '0',
56
+ // Equilibrium doesn't show locked balance
57
+ state: _KoniTypes.APIItemState.READY,
58
+ tokenSlug: tokenInfo.slug
59
+ };
60
+ });
61
+ callBack(items);
62
+ });
63
+ return () => {
64
+ // Empty
65
+ };
66
+ }
67
+ }
68
+
69
+ // eslint-disable-next-line @typescript-eslint/require-await
70
+ async function subscribeEqBalanceAccountPallet(addresses, chain, api, callBack, includeNativeToken) {
71
+ const tokenTypes = includeNativeToken ? [_types._AssetType.NATIVE, _types._AssetType.LOCAL] : [_types._AssetType.LOCAL];
72
+ const tokenMap = _handlers.state.getAssetByChainAndAsset(chain, tokenTypes);
73
+ const unsubList = Object.values(tokenMap).map(async tokenInfo => {
74
+ try {
75
+ const assetId = (0, _utils._getTokenOnChainAssetId)(tokenInfo);
76
+ const unsub = await api.query.eqBalances.account.multi(addresses.map(address => [address, [assetId]]), balances => {
77
+ const items = balances.map((balance, index) => {
78
+ return {
79
+ address: addresses[index],
80
+ free: balance.asPositive.toString(),
81
+ locked: '0',
82
+ // Equilibrium doesn't show locked balance
83
+ state: _KoniTypes.APIItemState.READY,
84
+ tokenSlug: tokenInfo.slug
85
+ };
86
+ });
87
+ callBack(items);
88
+ });
89
+ return unsub;
90
+ } catch (err) {
91
+ console.warn(err);
92
+ const items = addresses.map(address => {
93
+ return {
94
+ address: address,
95
+ free: '0',
96
+ locked: '0',
97
+ // Equilibrium doesn't show locked balance
98
+ state: _KoniTypes.APIItemState.READY,
99
+ tokenSlug: tokenInfo.slug
100
+ };
101
+ });
102
+ callBack(items);
103
+ return undefined;
104
+ }
105
+ });
106
+ return () => {
107
+ unsubList.forEach(subProm => {
108
+ subProm.then(unsub => {
109
+ unsub && unsub();
110
+ }).catch(console.error);
111
+ });
112
+ };
113
+ }