@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.
- package/background/KoniTypes.d.ts +2 -25
- package/cjs/constants/index.js +9 -3
- package/cjs/koni/api/staking/bonding/amplitude.js +6 -4
- package/cjs/koni/api/staking/bonding/astar.js +4 -0
- package/cjs/koni/api/staking/bonding/index.js +5 -0
- package/cjs/koni/api/staking/bonding/paraChain.js +9 -20
- package/cjs/koni/api/staking/bonding/relayChain.js +41 -23
- package/cjs/koni/api/staking/bonding/utils.js +67 -16
- package/cjs/koni/api/tokens/evm/balance.js +5 -1
- package/cjs/koni/api/tokens/evm/transfer.js +8 -4
- package/cjs/koni/background/cron.js +2 -2
- package/cjs/koni/background/handlers/Extension.js +5 -5
- package/cjs/koni/background/handlers/Mobile.js +1 -1
- package/cjs/koni/background/handlers/State.js +123 -44
- package/cjs/koni/background/subscription.js +2 -2
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/group.js +53 -0
- package/cjs/services/balance-service/helpers/subscribe/balance.js +111 -0
- package/cjs/services/balance-service/helpers/subscribe/evm.js +95 -0
- package/cjs/services/balance-service/helpers/subscribe/substrate/equilibrium.js +113 -0
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +324 -0
- package/cjs/services/balance-service/index.js +41 -16
- package/cjs/services/chain-service/constants.js +4 -3
- package/cjs/services/history-service/helpers/subscan-extrinsic-parser-helper.js +7 -1
- package/cjs/services/history-service/index.js +12 -8
- package/cjs/services/migration-service/scripts/MigrateProvider.js +1 -1
- package/cjs/services/storage-service/DatabaseService.js +7 -2
- package/cjs/services/storage-service/db-stores/Balance.js +9 -9
- package/cjs/services/subscan-service/index.js +66 -22
- package/cjs/services/transaction-service/index.js +4 -3
- package/cjs/types/balance.js +1 -0
- package/cjs/types/index.js +11 -0
- package/cjs/utils/{address.js → account.js} +32 -2
- package/cjs/utils/eth.js +7 -2
- package/cjs/utils/index.js +12 -0
- package/constants/index.d.ts +2 -0
- package/constants/index.js +2 -0
- package/koni/api/staking/bonding/amplitude.d.ts +3 -0
- package/koni/api/staking/bonding/amplitude.js +6 -4
- package/koni/api/staking/bonding/astar.d.ts +3 -0
- package/koni/api/staking/bonding/astar.js +4 -0
- package/koni/api/staking/bonding/index.d.ts +3 -0
- package/koni/api/staking/bonding/index.js +5 -0
- package/koni/api/staking/bonding/paraChain.d.ts +3 -0
- package/koni/api/staking/bonding/paraChain.js +9 -20
- package/koni/api/staking/bonding/relayChain.d.ts +3 -0
- package/koni/api/staking/bonding/relayChain.js +41 -24
- package/koni/api/staking/bonding/utils.d.ts +15 -2
- package/koni/api/staking/bonding/utils.js +69 -18
- package/koni/api/tokens/evm/balance.js +5 -1
- package/koni/api/tokens/evm/transfer.d.ts +1 -1
- package/koni/api/tokens/evm/transfer.js +8 -4
- package/koni/background/cron.js +3 -3
- package/koni/background/handlers/Extension.js +5 -5
- package/koni/background/handlers/Mobile.js +1 -1
- package/koni/background/handlers/State.d.ts +6 -4
- package/koni/background/handlers/State.js +111 -33
- package/koni/background/subscription.js +2 -2
- package/package.json +40 -15
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/group.d.ts +9 -0
- package/services/balance-service/helpers/group.js +46 -0
- package/services/balance-service/helpers/subscribe/balance.d.ts +4 -0
- package/services/balance-service/helpers/subscribe/balance.js +103 -0
- package/services/balance-service/helpers/subscribe/evm.d.ts +5 -0
- package/services/balance-service/helpers/subscribe/evm.js +87 -0
- package/services/balance-service/helpers/subscribe/substrate/equilibrium.d.ts +4 -0
- package/services/balance-service/helpers/subscribe/substrate/equilibrium.js +105 -0
- package/services/balance-service/helpers/subscribe/substrate/index.d.ts +4 -0
- package/services/balance-service/helpers/subscribe/substrate/index.js +316 -0
- package/services/balance-service/index.d.ts +24 -5
- package/services/balance-service/index.js +40 -14
- package/services/chain-service/constants.js +4 -3
- package/services/history-service/helpers/subscan-extrinsic-parser-helper.js +7 -1
- package/services/history-service/index.js +12 -8
- package/services/migration-service/scripts/MigrateProvider.js +1 -1
- package/services/storage-service/DatabaseService.d.ts +4 -2
- package/services/storage-service/DatabaseService.js +7 -2
- package/services/storage-service/databases/index.d.ts +2 -1
- package/services/storage-service/db-stores/Balance.d.ts +2 -2
- package/services/storage-service/db-stores/Balance.js +9 -9
- package/services/subscan-service/index.d.ts +11 -5
- package/services/subscan-service/index.js +66 -26
- package/services/subscan-service/types.d.ts +4 -0
- package/services/transaction-service/index.js +5 -4
- package/types/balance.d.ts +40 -0
- package/types/balance.js +1 -0
- package/types/index.d.ts +1 -0
- package/types/index.js +1 -0
- package/utils/account.d.ts +15 -0
- package/utils/{address.js → account.js} +28 -0
- package/utils/eth.d.ts +1 -0
- package/utils/eth.js +4 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/cjs/koni/api/dotsama/balance.js +0 -464
- package/koni/api/dotsama/balance.d.ts +0 -6
- package/koni/api/dotsama/balance.js +0 -451
- 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
|
|
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
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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 [
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
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.
|
|
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
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
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(
|
|
751
|
-
|
|
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(
|
|
1034
|
-
let [networkKey, chainInfo] =
|
|
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(
|
|
1129
|
+
const rs = Object.entries(this.chainService.getChainInfoMap()).find(_ref8 => {
|
|
1052
1130
|
var _chainInfo$evmInfo;
|
|
1053
|
-
let [networkKey, chainInfo] =
|
|
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(
|
|
1147
|
+
accountExportPrivateKey(_ref9) {
|
|
1070
1148
|
let {
|
|
1071
1149
|
address,
|
|
1072
1150
|
password
|
|
1073
|
-
} =
|
|
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(
|
|
1161
|
+
checkPublicAndSecretKey(_ref10) {
|
|
1084
1162
|
let {
|
|
1085
1163
|
publicKey,
|
|
1086
1164
|
secretKey
|
|
1087
|
-
} =
|
|
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(
|
|
1283
|
+
}).then(_ref11 => {
|
|
1206
1284
|
let {
|
|
1207
1285
|
isApproved,
|
|
1208
1286
|
payload
|
|
1209
|
-
} =
|
|
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
|
|
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(
|
|
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
|
-
} =
|
|
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
|
|
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
|
|
156
|
+
this.state.setBalanceItem(result);
|
|
157
157
|
});
|
|
158
158
|
const unsub2 = this.state.subscribeMantaPayBalance();
|
|
159
159
|
if (onlyRunOnFirstTime) {
|
package/cjs/packageInfo.js
CHANGED
|
@@ -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
|
+
}
|