@subwallet/extension-base 1.1.51-2 → 1.1.53-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.
- package/cjs/koni/api/tokens/evm/balance.js +1 -2
- package/cjs/koni/api/tokens/evm/transfer.js +3 -5
- package/cjs/koni/api/tokens/evm/web3.js +3 -3
- package/cjs/koni/background/handlers/Extension.js +5 -4
- package/cjs/koni/background/handlers/State.js +8 -71
- package/cjs/koni/background/subscription.js +3 -63
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/BalanceMapImpl.js +2 -2
- package/cjs/services/balance-service/helpers/index.js +27 -0
- package/cjs/services/balance-service/helpers/subscribe/evm.js +33 -15
- package/cjs/services/balance-service/helpers/subscribe/{balance.js → index.js} +46 -29
- package/cjs/services/balance-service/helpers/subscribe/substrate/equilibrium.js +34 -15
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +157 -72
- package/cjs/services/balance-service/index.js +277 -75
- package/cjs/services/chain-service/constants.js +2 -1
- package/cjs/services/chain-service/health-check/utils/asset-info.js +1 -3
- package/cjs/services/chain-service/index.js +1 -9
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +2 -2
- package/cjs/services/request-service/handler/ConnectWCRequestHandler.js +0 -1
- package/cjs/services/storage-service/DatabaseService.js +10 -1
- package/cjs/services/wallet-connect-service/helpers.js +1 -1
- package/cjs/services/wallet-connect-service/index.js +19 -0
- package/cjs/utils/asset.js +19 -0
- package/cjs/utils/eth/parseTransaction/index.js +1 -1
- package/cjs/utils/index.js +12 -0
- package/koni/api/tokens/evm/balance.d.ts +1 -1
- package/koni/api/tokens/evm/balance.js +1 -2
- package/koni/api/tokens/evm/transfer.d.ts +2 -2
- package/koni/api/tokens/evm/transfer.js +3 -5
- package/koni/api/tokens/evm/web3.d.ts +1 -1
- package/koni/api/tokens/evm/web3.js +2 -2
- package/koni/background/handlers/Extension.js +5 -4
- package/koni/background/handlers/State.d.ts +1 -12
- package/koni/background/handlers/State.js +9 -72
- package/koni/background/subscription.d.ts +1 -5
- package/koni/background/subscription.js +1 -60
- package/package.json +23 -13
- package/packageInfo.js +1 -1
- package/services/balance-service/BalanceMapImpl.js +1 -1
- package/services/balance-service/helpers/index.d.ts +2 -0
- package/services/balance-service/helpers/index.js +5 -0
- package/services/balance-service/helpers/subscribe/evm.d.ts +3 -5
- package/services/balance-service/helpers/subscribe/evm.js +31 -14
- package/services/balance-service/helpers/subscribe/{balance.d.ts → index.d.ts} +2 -2
- package/services/balance-service/helpers/subscribe/{balance.js → index.js} +41 -28
- package/services/balance-service/helpers/subscribe/substrate/equilibrium.d.ts +3 -4
- package/services/balance-service/helpers/subscribe/substrate/equilibrium.js +29 -13
- package/services/balance-service/helpers/subscribe/substrate/index.d.ts +2 -2
- package/services/balance-service/helpers/subscribe/substrate/index.js +144 -67
- package/services/balance-service/index.d.ts +64 -6
- package/services/balance-service/index.js +279 -77
- package/services/chain-service/constants.js +2 -1
- package/services/chain-service/health-check/utils/asset-info.js +1 -3
- package/services/chain-service/index.js +2 -10
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +2 -2
- package/services/request-service/handler/ConnectWCRequestHandler.js +0 -1
- package/services/storage-service/DatabaseService.js +7 -1
- package/services/wallet-connect-service/helpers.js +1 -1
- package/services/wallet-connect-service/index.d.ts +1 -0
- package/services/wallet-connect-service/index.js +19 -1
- package/types/{balance.d.ts → balance/index.d.ts} +16 -0
- package/types/index.js +1 -1
- package/utils/asset.d.ts +2 -0
- package/utils/asset.js +12 -0
- package/utils/eth/parseTransaction/index.js +1 -1
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- /package/cjs/types/{balance.js → balance/index.js} +0 -0
- /package/types/{balance.js → balance/index.js} +0 -0
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
import { _AssetType } from '@subwallet/chain-list/types';
|
|
5
5
|
import { APIItemState } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
|
-
import { state } from '@subwallet/extension-base/koni/background/handlers';
|
|
7
6
|
import { _getSubstrateGenesisHash, _isChainEvmCompatible, _isPureEvmChain } from '@subwallet/extension-base/services/chain-service/utils';
|
|
8
|
-
import { categoryAddresses } from '@subwallet/extension-base/utils';
|
|
7
|
+
import { categoryAddresses, filterAssetsByChainAndType } from '@subwallet/extension-base/utils';
|
|
9
8
|
import keyring from '@subwallet/ui-keyring';
|
|
10
9
|
import { subscribeEVMBalance } from "./evm.js";
|
|
11
10
|
import { subscribeSubstrateBalance } from "./substrate/index.js";
|
|
@@ -36,6 +35,8 @@ export const getAccountJsonByAddress = address => {
|
|
|
36
35
|
return null;
|
|
37
36
|
}
|
|
38
37
|
};
|
|
38
|
+
|
|
39
|
+
/** Filter addresses to subscribe by chain info */
|
|
39
40
|
const filterAddress = (addresses, chainInfo) => {
|
|
40
41
|
const isEvmChain = _isChainEvmCompatible(chainInfo);
|
|
41
42
|
const [substrateAddresses, evmAddresses] = categoryAddresses(addresses);
|
|
@@ -66,38 +67,50 @@ const filterAddress = (addresses, chainInfo) => {
|
|
|
66
67
|
}
|
|
67
68
|
};
|
|
68
69
|
|
|
69
|
-
//
|
|
70
|
-
|
|
70
|
+
// interface SubscribeBlanceOptions {
|
|
71
|
+
// addresses: string[];
|
|
72
|
+
// chains: string[];
|
|
73
|
+
// tokens: string[];
|
|
74
|
+
// chainInfoMap: Record<string, _ChainInfo>;
|
|
75
|
+
// substrateApiMap: Record<string, _SubstrateApi>;
|
|
76
|
+
// evmApiMap: Record<string, _EvmApi>;
|
|
77
|
+
// callback: (rs: BalanceItem[]) => void;
|
|
78
|
+
// }
|
|
79
|
+
|
|
80
|
+
// main subscription, use for multiple chains, multiple addresses and multiple tokens
|
|
81
|
+
export function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, callback) {
|
|
82
|
+
// Filter chain and token
|
|
83
|
+
const chainAssetMap = Object.fromEntries(Object.entries(_chainAssetMap).filter(([token]) => tokens.includes(token)));
|
|
84
|
+
const chainInfoMap = Object.fromEntries(Object.entries(_chainInfoMap).filter(([chain]) => chains.includes(chain)));
|
|
85
|
+
|
|
71
86
|
// Looping over each chain
|
|
72
|
-
const unsubList = Object.
|
|
87
|
+
const unsubList = Object.values(chainInfoMap).map(async chainInfo => {
|
|
88
|
+
const chainSlug = chainInfo.slug;
|
|
73
89
|
const [useAddresses, notSupportAddresses] = filterAddress(addresses, chainInfo);
|
|
74
90
|
if (notSupportAddresses.length) {
|
|
75
|
-
const tokens =
|
|
76
|
-
const assetSetting = await state.chainService.getAssetSettings();
|
|
77
|
-
const filtered = Object.values(tokens).filter(({
|
|
78
|
-
slug
|
|
79
|
-
}) => {
|
|
80
|
-
var _assetSetting$slug;
|
|
81
|
-
return (_assetSetting$slug = assetSetting[slug]) === null || _assetSetting$slug === void 0 ? void 0 : _assetSetting$slug.visible;
|
|
82
|
-
});
|
|
91
|
+
const tokens = filterAssetsByChainAndType(chainAssetMap, chainSlug, [_AssetType.NATIVE, _AssetType.ERC20, _AssetType.PSP22, _AssetType.LOCAL]);
|
|
83
92
|
const now = new Date().getTime();
|
|
84
|
-
|
|
85
|
-
const items =
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
};
|
|
94
|
-
});
|
|
93
|
+
Object.values(tokens).forEach(token => {
|
|
94
|
+
const items = notSupportAddresses.map(address => ({
|
|
95
|
+
address,
|
|
96
|
+
tokenSlug: token.slug,
|
|
97
|
+
free: '0',
|
|
98
|
+
locked: '0',
|
|
99
|
+
state: APIItemState.NOT_SUPPORT,
|
|
100
|
+
timestamp: now
|
|
101
|
+
}));
|
|
95
102
|
callback(items);
|
|
96
103
|
});
|
|
97
104
|
}
|
|
105
|
+
const evmApi = evmApiMap[chainSlug];
|
|
98
106
|
if (_isPureEvmChain(chainInfo)) {
|
|
99
|
-
|
|
100
|
-
|
|
107
|
+
return subscribeEVMBalance({
|
|
108
|
+
addresses: useAddresses,
|
|
109
|
+
assetMap: chainAssetMap,
|
|
110
|
+
callback,
|
|
111
|
+
chainInfo,
|
|
112
|
+
evmApi
|
|
113
|
+
});
|
|
101
114
|
}
|
|
102
115
|
|
|
103
116
|
// if (!useAddresses || useAddresses.length === 0 || _PURE_EVM_CHAINS.indexOf(chainSlug) > -1) {
|
|
@@ -117,8 +130,8 @@ export function subscribeBalance(addresses, chainInfoMap, substrateApiMap, evmAp
|
|
|
117
130
|
// return undefined;
|
|
118
131
|
// }
|
|
119
132
|
|
|
120
|
-
const
|
|
121
|
-
return subscribeSubstrateBalance(useAddresses, chainInfo,
|
|
133
|
+
const substrateApi = await substrateApiMap[chainSlug].isReady;
|
|
134
|
+
return subscribeSubstrateBalance(useAddresses, chainInfo, chainAssetMap, substrateApi, evmApi, callback);
|
|
122
135
|
});
|
|
123
136
|
return () => {
|
|
124
137
|
unsubList.forEach(subProm => {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export declare
|
|
4
|
-
export declare function subscribeEqBalanceAccountPallet(addresses: string[], chain: string, api: ApiPromise, callBack: (rs: BalanceItem[]) => void, includeNativeToken?: boolean): Promise<() => void>;
|
|
1
|
+
import { SubscribeSubstratePalletBalance } from '@subwallet/extension-base/types';
|
|
2
|
+
export declare const subscribeEquilibriumTokenBalance: ({ addresses, assetMap, callback, chainInfo, includeNativeToken, substrateApi }: SubscribeSubstratePalletBalance) => Promise<() => void>;
|
|
3
|
+
export declare const subscribeEqBalanceAccountPallet: ({ addresses, assetMap, callback, chainInfo, includeNativeToken, substrateApi }: SubscribeSubstratePalletBalance) => Promise<() => void>;
|
|
@@ -3,15 +3,23 @@
|
|
|
3
3
|
|
|
4
4
|
import { _AssetType } from '@subwallet/chain-list/types';
|
|
5
5
|
import { APIItemState } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
|
-
import { state } from '@subwallet/extension-base/koni/background/handlers';
|
|
7
6
|
import { _getTokenOnChainAssetId } from '@subwallet/extension-base/services/chain-service/utils';
|
|
7
|
+
import { filterAssetsByChainAndType } from '@subwallet/extension-base/utils';
|
|
8
8
|
import BigN from 'bignumber.js';
|
|
9
9
|
import { BN, BN_ZERO } from '@polkadot/util';
|
|
10
|
-
export
|
|
10
|
+
export const subscribeEquilibriumTokenBalance = async ({
|
|
11
|
+
addresses,
|
|
12
|
+
assetMap,
|
|
13
|
+
callback,
|
|
14
|
+
chainInfo,
|
|
15
|
+
includeNativeToken,
|
|
16
|
+
substrateApi
|
|
17
|
+
}) => {
|
|
18
|
+
const chain = chainInfo.slug;
|
|
11
19
|
const tokenTypes = includeNativeToken ? [_AssetType.NATIVE, _AssetType.LOCAL] : [_AssetType.LOCAL];
|
|
12
|
-
const tokenMap =
|
|
20
|
+
const tokenMap = filterAssetsByChainAndType(assetMap, chain, tokenTypes);
|
|
13
21
|
try {
|
|
14
|
-
const unsub = await
|
|
22
|
+
const unsub = await substrateApi.query.system.account.multi(addresses, balances => {
|
|
15
23
|
// Equilibrium customizes the SystemAccount pallet
|
|
16
24
|
Object.values(tokenMap).forEach(tokenInfo => {
|
|
17
25
|
const assetId = _getTokenOnChainAssetId(tokenInfo);
|
|
@@ -32,7 +40,7 @@ export async function subscribeEquilibriumTokenBalance(addresses, chain, api, ca
|
|
|
32
40
|
tokenSlug: tokenInfo.slug
|
|
33
41
|
};
|
|
34
42
|
});
|
|
35
|
-
|
|
43
|
+
callback(items);
|
|
36
44
|
});
|
|
37
45
|
});
|
|
38
46
|
return () => {
|
|
@@ -50,22 +58,30 @@ export async function subscribeEquilibriumTokenBalance(addresses, chain, api, ca
|
|
|
50
58
|
tokenSlug: tokenInfo.slug
|
|
51
59
|
};
|
|
52
60
|
});
|
|
53
|
-
|
|
61
|
+
callback(items);
|
|
54
62
|
});
|
|
55
63
|
return () => {
|
|
56
64
|
// Empty
|
|
57
65
|
};
|
|
58
66
|
}
|
|
59
|
-
}
|
|
67
|
+
};
|
|
60
68
|
|
|
61
69
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
62
|
-
export
|
|
70
|
+
export const subscribeEqBalanceAccountPallet = async ({
|
|
71
|
+
addresses,
|
|
72
|
+
assetMap,
|
|
73
|
+
callback,
|
|
74
|
+
chainInfo,
|
|
75
|
+
includeNativeToken,
|
|
76
|
+
substrateApi
|
|
77
|
+
}) => {
|
|
78
|
+
const chain = chainInfo.slug;
|
|
63
79
|
const tokenTypes = includeNativeToken ? [_AssetType.NATIVE, _AssetType.LOCAL] : [_AssetType.LOCAL];
|
|
64
|
-
const tokenMap =
|
|
80
|
+
const tokenMap = filterAssetsByChainAndType(assetMap, chain, tokenTypes);
|
|
65
81
|
const unsubList = Object.values(tokenMap).map(async tokenInfo => {
|
|
66
82
|
try {
|
|
67
83
|
const assetId = _getTokenOnChainAssetId(tokenInfo);
|
|
68
|
-
const unsub = await
|
|
84
|
+
const unsub = await substrateApi.query.eqBalances.account.multi(addresses.map(address => [address, [assetId]]), balances => {
|
|
69
85
|
const items = balances.map((balance, index) => {
|
|
70
86
|
return {
|
|
71
87
|
address: addresses[index],
|
|
@@ -76,7 +92,7 @@ export async function subscribeEqBalanceAccountPallet(addresses, chain, api, cal
|
|
|
76
92
|
tokenSlug: tokenInfo.slug
|
|
77
93
|
};
|
|
78
94
|
});
|
|
79
|
-
|
|
95
|
+
callback(items);
|
|
80
96
|
});
|
|
81
97
|
return unsub;
|
|
82
98
|
} catch (err) {
|
|
@@ -91,7 +107,7 @@ export async function subscribeEqBalanceAccountPallet(addresses, chain, api, cal
|
|
|
91
107
|
tokenSlug: tokenInfo.slug
|
|
92
108
|
};
|
|
93
109
|
});
|
|
94
|
-
|
|
110
|
+
callback(items);
|
|
95
111
|
return undefined;
|
|
96
112
|
}
|
|
97
113
|
});
|
|
@@ -102,4 +118,4 @@ export async function subscribeEqBalanceAccountPallet(addresses, chain, api, cal
|
|
|
102
118
|
}).catch(console.error);
|
|
103
119
|
});
|
|
104
120
|
};
|
|
105
|
-
}
|
|
121
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ChainInfo } from '@subwallet/chain-list/types';
|
|
1
|
+
import { _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
|
|
2
2
|
import { _EvmApi, _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
|
|
3
3
|
import { BalanceItem } from '@subwallet/extension-base/types';
|
|
4
|
-
export declare
|
|
4
|
+
export declare const subscribeSubstrateBalance: (addresses: string[], chainInfo: _ChainInfo, assetMap: Record<string, _ChainAsset>, substrateApi: _SubstrateApi, evmApi: _EvmApi, callback: (rs: BalanceItem[]) => void) => Promise<() => void>;
|
|
@@ -6,42 +6,63 @@ import { APIItemState } from '@subwallet/extension-base/background/KoniTypes';
|
|
|
6
6
|
import { SUB_TOKEN_REFRESH_BALANCE_INTERVAL } from '@subwallet/extension-base/constants';
|
|
7
7
|
import { getPSP22ContractPromise } from '@subwallet/extension-base/koni/api/tokens/wasm';
|
|
8
8
|
import { getDefaultWeightV2 } from '@subwallet/extension-base/koni/api/tokens/wasm/utils';
|
|
9
|
-
import { state } from '@subwallet/extension-base/koni/background/handlers';
|
|
10
|
-
import { subscribeERC20Interval } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/evm';
|
|
11
9
|
import { _BALANCE_CHAIN_GROUP, _MANTA_ZK_CHAIN_GROUP, _ZK_ASSET_PREFIX } from '@subwallet/extension-base/services/chain-service/constants';
|
|
12
10
|
import { _checkSmartContractSupportByChain, _getChainNativeTokenSlug, _getContractAddressOfToken, _getTokenOnChainAssetId, _getTokenOnChainInfo, _getXcmAssetMultilocation, _isBridgedToken, _isChainEvmCompatible, _isSubstrateRelayChain } from '@subwallet/extension-base/services/chain-service/utils';
|
|
11
|
+
import { filterAssetsByChainAndType } from '@subwallet/extension-base/utils';
|
|
12
|
+
import { combineLatest, Observable } from 'rxjs';
|
|
13
13
|
import { BN, BN_ZERO } from '@polkadot/util';
|
|
14
|
+
import { subscribeERC20Interval } from "../evm.js";
|
|
14
15
|
import { subscribeEquilibriumTokenBalance } from "./equilibrium.js";
|
|
15
|
-
export async
|
|
16
|
+
export const subscribeSubstrateBalance = async (addresses, chainInfo, assetMap, substrateApi, evmApi, callback) => {
|
|
16
17
|
let unsubNativeToken;
|
|
17
|
-
if (!_BALANCE_CHAIN_GROUP.kintsugi.includes(chain) && !_BALANCE_CHAIN_GROUP.genshiro.includes(chain) && !_BALANCE_CHAIN_GROUP.equilibrium_parachain.includes(chain)) {
|
|
18
|
-
unsubNativeToken = await subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI.api, callBack);
|
|
19
|
-
}
|
|
20
18
|
let unsubLocalToken;
|
|
21
19
|
let unsubEvmContractToken;
|
|
22
20
|
let unsubWasmContractToken;
|
|
23
21
|
let unsubBridgedToken;
|
|
22
|
+
const chain = chainInfo.slug;
|
|
23
|
+
const baseParams = {
|
|
24
|
+
addresses,
|
|
25
|
+
chainInfo,
|
|
26
|
+
assetMap,
|
|
27
|
+
callback
|
|
28
|
+
};
|
|
29
|
+
const substrateParams = {
|
|
30
|
+
...baseParams,
|
|
31
|
+
substrateApi: substrateApi.api
|
|
32
|
+
};
|
|
33
|
+
if (!_BALANCE_CHAIN_GROUP.kintsugi.includes(chain) && !_BALANCE_CHAIN_GROUP.genshiro.includes(chain) && !_BALANCE_CHAIN_GROUP.equilibrium_parachain.includes(chain)) {
|
|
34
|
+
unsubNativeToken = await subscribeWithSystemAccountPallet(substrateParams);
|
|
35
|
+
}
|
|
24
36
|
try {
|
|
25
37
|
if (_BALANCE_CHAIN_GROUP.bifrost.includes(chain)) {
|
|
26
|
-
unsubLocalToken = await subscribeTokensAccountsPallet(
|
|
38
|
+
unsubLocalToken = await subscribeTokensAccountsPallet(substrateParams);
|
|
27
39
|
} else if (_BALANCE_CHAIN_GROUP.kintsugi.includes(chain)) {
|
|
28
|
-
unsubLocalToken = await subscribeTokensAccountsPallet(
|
|
40
|
+
unsubLocalToken = await subscribeTokensAccountsPallet({
|
|
41
|
+
...substrateParams,
|
|
42
|
+
includeNativeToken: true
|
|
43
|
+
});
|
|
29
44
|
} else if (_BALANCE_CHAIN_GROUP.statemine.includes(chain)) {
|
|
30
|
-
unsubLocalToken = await subscribeAssetsAccountPallet(
|
|
45
|
+
unsubLocalToken = await subscribeAssetsAccountPallet(substrateParams);
|
|
31
46
|
} else if (_BALANCE_CHAIN_GROUP.genshiro.includes(chain) || _BALANCE_CHAIN_GROUP.equilibrium_parachain.includes(chain)) {
|
|
32
|
-
unsubLocalToken = await subscribeEquilibriumTokenBalance(
|
|
47
|
+
unsubLocalToken = await subscribeEquilibriumTokenBalance({
|
|
48
|
+
...substrateParams,
|
|
49
|
+
includeNativeToken: true
|
|
50
|
+
});
|
|
33
51
|
} else if (_BALANCE_CHAIN_GROUP.centrifuge.includes(chain)) {
|
|
34
|
-
unsubLocalToken = await subscribeOrmlTokensPallet(
|
|
52
|
+
unsubLocalToken = await subscribeOrmlTokensPallet(substrateParams);
|
|
35
53
|
}
|
|
36
54
|
if (_BALANCE_CHAIN_GROUP.supportBridged.includes(chain)) {
|
|
37
|
-
unsubBridgedToken = await subscribeBridgedBalance(
|
|
55
|
+
unsubBridgedToken = await subscribeBridgedBalance(substrateParams);
|
|
38
56
|
}
|
|
39
57
|
if (_isChainEvmCompatible(chainInfo)) {
|
|
40
|
-
unsubEvmContractToken = subscribeERC20Interval(
|
|
58
|
+
unsubEvmContractToken = subscribeERC20Interval({
|
|
59
|
+
...baseParams,
|
|
60
|
+
evmApi: evmApi
|
|
61
|
+
});
|
|
41
62
|
}
|
|
42
63
|
if (_checkSmartContractSupportByChain(chainInfo, _AssetType.PSP22)) {
|
|
43
64
|
// Get sub-token for substrate-based chains
|
|
44
|
-
unsubWasmContractToken = subscribePSP22Balance(
|
|
65
|
+
unsubWasmContractToken = subscribePSP22Balance(substrateParams);
|
|
45
66
|
}
|
|
46
67
|
} catch (err) {
|
|
47
68
|
console.warn(err);
|
|
@@ -53,31 +74,51 @@ export async function subscribeSubstrateBalance(addresses, chainInfo, chain, net
|
|
|
53
74
|
unsubWasmContractToken && unsubWasmContractToken();
|
|
54
75
|
unsubBridgedToken && unsubBridgedToken();
|
|
55
76
|
};
|
|
56
|
-
}
|
|
77
|
+
};
|
|
57
78
|
|
|
58
79
|
// handler according to different logic
|
|
59
|
-
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
81
|
+
const subscribeWithSystemAccountPallet = async ({
|
|
82
|
+
addresses,
|
|
83
|
+
callback,
|
|
84
|
+
chainInfo,
|
|
85
|
+
substrateApi
|
|
86
|
+
}) => {
|
|
60
87
|
const chainNativeTokenSlug = _getChainNativeTokenSlug(chainInfo);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
let pooled = new BN(poolMemberData.points.toString());
|
|
73
|
-
Object.entries(poolMemberData.unbondingEras).forEach(([, amount]) => {
|
|
74
|
-
pooled = pooled.add(new BN(amount));
|
|
75
|
-
});
|
|
76
|
-
pooledStakingBalances.push(pooled);
|
|
77
|
-
} else {
|
|
78
|
-
pooledStakingBalances.push(BN_ZERO);
|
|
79
|
-
}
|
|
88
|
+
const balanceSubscribe = substrateApi.rx.query.system.account.multi(addresses);
|
|
89
|
+
let poolSubscribe;
|
|
90
|
+
if (_isSubstrateRelayChain(chainInfo) && substrateApi.query.nominationPools) {
|
|
91
|
+
var _substrateApi$rx$quer;
|
|
92
|
+
poolSubscribe = (_substrateApi$rx$quer = substrateApi.rx.query.nominationPools.poolMembers) === null || _substrateApi$rx$quer === void 0 ? void 0 : _substrateApi$rx$quer.multi(addresses);
|
|
93
|
+
}
|
|
94
|
+
if (!poolSubscribe) {
|
|
95
|
+
poolSubscribe = new Observable(subscriber => {
|
|
96
|
+
subscriber.next(addresses.map(() => ({
|
|
97
|
+
toPrimitive() {
|
|
98
|
+
return null;
|
|
80
99
|
}
|
|
100
|
+
})));
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
const subscription = combineLatest({
|
|
104
|
+
balances: balanceSubscribe,
|
|
105
|
+
pools: poolSubscribe
|
|
106
|
+
}).subscribe(({
|
|
107
|
+
balances: _balances,
|
|
108
|
+
pools: poolMemberDatas
|
|
109
|
+
}) => {
|
|
110
|
+
const balances = _balances;
|
|
111
|
+
const pooledStakingBalances = [];
|
|
112
|
+
for (const _poolMemberData of poolMemberDatas) {
|
|
113
|
+
const poolMemberData = _poolMemberData.toPrimitive();
|
|
114
|
+
if (poolMemberData) {
|
|
115
|
+
let pooled = new BN(poolMemberData.points.toString());
|
|
116
|
+
Object.entries(poolMemberData.unbondingEras).forEach(([, amount]) => {
|
|
117
|
+
pooled = pooled.add(new BN(amount));
|
|
118
|
+
});
|
|
119
|
+
pooledStakingBalances.push(pooled);
|
|
120
|
+
} else {
|
|
121
|
+
pooledStakingBalances.push(BN_ZERO);
|
|
81
122
|
}
|
|
82
123
|
}
|
|
83
124
|
const items = balances.map((balance, index) => {
|
|
@@ -109,14 +150,21 @@ async function subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI
|
|
|
109
150
|
}
|
|
110
151
|
};
|
|
111
152
|
});
|
|
112
|
-
|
|
153
|
+
callback(items);
|
|
113
154
|
});
|
|
114
155
|
return () => {
|
|
115
|
-
|
|
156
|
+
subscription.unsubscribe();
|
|
116
157
|
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
158
|
+
};
|
|
159
|
+
const subscribeBridgedBalance = async ({
|
|
160
|
+
addresses,
|
|
161
|
+
assetMap,
|
|
162
|
+
callback,
|
|
163
|
+
chainInfo,
|
|
164
|
+
substrateApi
|
|
165
|
+
}) => {
|
|
166
|
+
const chain = chainInfo.slug;
|
|
167
|
+
const tokenMap = filterAssetsByChainAndType(assetMap, chain, [_AssetType.LOCAL]);
|
|
120
168
|
|
|
121
169
|
// @ts-ignore
|
|
122
170
|
const unsubList = await Promise.all(Object.values(tokenMap).map(async tokenInfo => {
|
|
@@ -124,7 +172,7 @@ async function subscribeBridgedBalance(addresses, chain, api, callBack) {
|
|
|
124
172
|
const isBridgedToken = _isBridgedToken(tokenInfo);
|
|
125
173
|
if (isBridgedToken) {
|
|
126
174
|
const multiLocation = _getXcmAssetMultilocation(tokenInfo);
|
|
127
|
-
return await
|
|
175
|
+
return await substrateApi.query.foreignAssets.account.multi(addresses.map(address => [multiLocation, address]), balances => {
|
|
128
176
|
const items = balances.map((balance, index) => {
|
|
129
177
|
const bdata = balance === null || balance === void 0 ? void 0 : balance.toHuman();
|
|
130
178
|
let frozen = BN_ZERO;
|
|
@@ -154,7 +202,7 @@ async function subscribeBridgedBalance(addresses, chain, api, callBack) {
|
|
|
154
202
|
}
|
|
155
203
|
};
|
|
156
204
|
});
|
|
157
|
-
|
|
205
|
+
callback(items);
|
|
158
206
|
});
|
|
159
207
|
}
|
|
160
208
|
} catch (err) {
|
|
@@ -167,10 +215,20 @@ async function subscribeBridgedBalance(addresses, chain, api, callBack) {
|
|
|
167
215
|
unsub && unsub();
|
|
168
216
|
});
|
|
169
217
|
};
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
|
|
218
|
+
};
|
|
219
|
+
const subscribePSP22Balance = ({
|
|
220
|
+
addresses,
|
|
221
|
+
assetMap,
|
|
222
|
+
callback,
|
|
223
|
+
chainInfo,
|
|
224
|
+
substrateApi
|
|
225
|
+
}) => {
|
|
226
|
+
const chain = chainInfo.slug;
|
|
173
227
|
const psp22ContractMap = {};
|
|
228
|
+
const tokenList = filterAssetsByChainAndType(assetMap, chain, [_AssetType.PSP22]);
|
|
229
|
+
Object.entries(tokenList).forEach(([slug, tokenInfo]) => {
|
|
230
|
+
psp22ContractMap[slug] = getPSP22ContractPromise(substrateApi, _getContractAddressOfToken(tokenInfo));
|
|
231
|
+
});
|
|
174
232
|
const getTokenBalances = () => {
|
|
175
233
|
Object.values(tokenList).map(async tokenInfo => {
|
|
176
234
|
try {
|
|
@@ -179,7 +237,7 @@ function subscribePSP22Balance(addresses, chain, api, callBack) {
|
|
|
179
237
|
try {
|
|
180
238
|
var _balanceOf$output, _ref;
|
|
181
239
|
const _balanceOf = await contract.query['psp22::balanceOf'](address, {
|
|
182
|
-
gasLimit: getDefaultWeightV2(
|
|
240
|
+
gasLimit: getDefaultWeightV2(substrateApi)
|
|
183
241
|
}, address);
|
|
184
242
|
const balanceObj = _balanceOf === null || _balanceOf === void 0 ? void 0 : (_balanceOf$output = _balanceOf.output) === null || _balanceOf$output === void 0 ? void 0 : _balanceOf$output.toPrimitive();
|
|
185
243
|
return {
|
|
@@ -200,26 +258,30 @@ function subscribePSP22Balance(addresses, chain, api, callBack) {
|
|
|
200
258
|
};
|
|
201
259
|
}
|
|
202
260
|
}));
|
|
203
|
-
|
|
261
|
+
callback(balances);
|
|
204
262
|
} catch (err) {
|
|
205
263
|
console.warn(tokenInfo.slug, err); // TODO: error createType
|
|
206
264
|
}
|
|
207
265
|
});
|
|
208
266
|
};
|
|
209
267
|
|
|
210
|
-
tokenList = state.getAssetByChainAndAsset(chain, [_AssetType.PSP22]);
|
|
211
|
-
Object.entries(tokenList).forEach(([slug, tokenInfo]) => {
|
|
212
|
-
psp22ContractMap[slug] = getPSP22ContractPromise(api, _getContractAddressOfToken(tokenInfo));
|
|
213
|
-
});
|
|
214
268
|
getTokenBalances();
|
|
215
269
|
const interval = setInterval(getTokenBalances, SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
|
|
216
270
|
return () => {
|
|
217
271
|
clearInterval(interval);
|
|
218
272
|
};
|
|
219
|
-
}
|
|
220
|
-
|
|
273
|
+
};
|
|
274
|
+
const subscribeTokensAccountsPallet = async ({
|
|
275
|
+
addresses,
|
|
276
|
+
assetMap,
|
|
277
|
+
callback,
|
|
278
|
+
chainInfo,
|
|
279
|
+
includeNativeToken,
|
|
280
|
+
substrateApi
|
|
281
|
+
}) => {
|
|
282
|
+
const chain = chainInfo.slug;
|
|
221
283
|
const tokenTypes = includeNativeToken ? [_AssetType.NATIVE, _AssetType.LOCAL] : [_AssetType.LOCAL];
|
|
222
|
-
const tokenMap =
|
|
284
|
+
const tokenMap = filterAssetsByChainAndType(assetMap, chain, tokenTypes);
|
|
223
285
|
const unsubList = await Promise.all(Object.values(tokenMap).map(async tokenInfo => {
|
|
224
286
|
try {
|
|
225
287
|
const onChainInfo = _getTokenOnChainInfo(tokenInfo);
|
|
@@ -227,7 +289,7 @@ async function subscribeTokensAccountsPallet(addresses, chain, api, callBack, in
|
|
|
227
289
|
|
|
228
290
|
// Get Token Balance
|
|
229
291
|
// @ts-ignore
|
|
230
|
-
return await
|
|
292
|
+
return await substrateApi.query.tokens.accounts.multi(addresses.map(address => [address, onChainInfo || assetId]), balances => {
|
|
231
293
|
const items = balances.map((balance, index) => {
|
|
232
294
|
const tokenBalance = {
|
|
233
295
|
reserved: balance.reserved || new BN(0),
|
|
@@ -249,7 +311,7 @@ async function subscribeTokensAccountsPallet(addresses, chain, api, callBack, in
|
|
|
249
311
|
}
|
|
250
312
|
};
|
|
251
313
|
});
|
|
252
|
-
|
|
314
|
+
callback(items);
|
|
253
315
|
});
|
|
254
316
|
} catch (err) {
|
|
255
317
|
console.warn(err);
|
|
@@ -261,9 +323,17 @@ async function subscribeTokensAccountsPallet(addresses, chain, api, callBack, in
|
|
|
261
323
|
unsub && unsub();
|
|
262
324
|
});
|
|
263
325
|
};
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
|
|
326
|
+
};
|
|
327
|
+
const subscribeAssetsAccountPallet = async ({
|
|
328
|
+
addresses,
|
|
329
|
+
assetMap,
|
|
330
|
+
callback,
|
|
331
|
+
chainInfo,
|
|
332
|
+
includeNativeToken,
|
|
333
|
+
substrateApi
|
|
334
|
+
}) => {
|
|
335
|
+
const chain = chainInfo.slug;
|
|
336
|
+
const tokenMap = filterAssetsByChainAndType(assetMap, chain, [_AssetType.LOCAL]);
|
|
267
337
|
Object.values(tokenMap).forEach(token => {
|
|
268
338
|
if (_MANTA_ZK_CHAIN_GROUP.includes(token.originChain) && token.symbol.startsWith(_ZK_ASSET_PREFIX)) {
|
|
269
339
|
delete tokenMap[token.slug];
|
|
@@ -274,7 +344,7 @@ async function subscribeAssetsAccountPallet(addresses, chain, api, callBack) {
|
|
|
274
344
|
const assetIndex = _getTokenOnChainAssetId(tokenInfo);
|
|
275
345
|
|
|
276
346
|
// Get Token Balance
|
|
277
|
-
return await
|
|
347
|
+
return await substrateApi.query.assets.account.multi(addresses.map(address => [assetIndex, address]), balances => {
|
|
278
348
|
const items = balances.map((balance, index) => {
|
|
279
349
|
const bdata = balance === null || balance === void 0 ? void 0 : balance.toPrimitive();
|
|
280
350
|
let frozen = BN_ZERO;
|
|
@@ -303,7 +373,7 @@ async function subscribeAssetsAccountPallet(addresses, chain, api, callBack) {
|
|
|
303
373
|
}
|
|
304
374
|
};
|
|
305
375
|
});
|
|
306
|
-
|
|
376
|
+
callback(items);
|
|
307
377
|
});
|
|
308
378
|
} catch (err) {
|
|
309
379
|
console.warn(err);
|
|
@@ -315,19 +385,26 @@ async function subscribeAssetsAccountPallet(addresses, chain, api, callBack) {
|
|
|
315
385
|
unsub && unsub();
|
|
316
386
|
});
|
|
317
387
|
};
|
|
318
|
-
}
|
|
388
|
+
};
|
|
319
389
|
|
|
320
390
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
321
|
-
|
|
391
|
+
const subscribeOrmlTokensPallet = async ({
|
|
392
|
+
addresses,
|
|
393
|
+
assetMap,
|
|
394
|
+
callback,
|
|
395
|
+
chainInfo,
|
|
396
|
+
substrateApi
|
|
397
|
+
}) => {
|
|
398
|
+
const chain = chainInfo.slug;
|
|
322
399
|
const tokenTypes = [_AssetType.LOCAL];
|
|
323
|
-
const tokenMap =
|
|
400
|
+
const tokenMap = filterAssetsByChainAndType(assetMap, chain, tokenTypes);
|
|
324
401
|
const unsubList = Object.values(tokenMap).map(async tokenInfo => {
|
|
325
402
|
try {
|
|
326
403
|
const onChainInfo = _getTokenOnChainInfo(tokenInfo);
|
|
327
404
|
|
|
328
405
|
// Get Token Balance
|
|
329
406
|
// @ts-ignore
|
|
330
|
-
const unsub = await
|
|
407
|
+
const unsub = await substrateApi.query.ormlTokens.accounts.multi(addresses.map(address => [address, onChainInfo]), balances => {
|
|
331
408
|
const items = balances.map((balance, index) => {
|
|
332
409
|
const tokenBalance = {
|
|
333
410
|
reserved: balance.reserved || new BN(0),
|
|
@@ -351,7 +428,7 @@ async function subscribeOrmlTokensPallet(addresses, chain, api, callBack) {
|
|
|
351
428
|
}
|
|
352
429
|
};
|
|
353
430
|
});
|
|
354
|
-
|
|
431
|
+
callback(items);
|
|
355
432
|
});
|
|
356
433
|
return unsub;
|
|
357
434
|
} catch (err) {
|
|
@@ -366,4 +443,4 @@ async function subscribeOrmlTokensPallet(addresses, chain, api, callBack) {
|
|
|
366
443
|
}).catch(console.error);
|
|
367
444
|
});
|
|
368
445
|
};
|
|
369
|
-
}
|
|
446
|
+
};
|