@talismn/balances 0.0.0-pr2075-20250707160526 → 0.0.0-pr2075-20250708110002
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/dist/declarations/src/BalancesProvider.d.ts +23 -0
- package/dist/declarations/src/getMiniMetadata/getMiniMetadatas.d.ts +1 -1
- package/dist/declarations/src/index.d.ts +1 -0
- package/dist/declarations/src/modules/IBalanceModule.d.ts +4 -4
- package/dist/declarations/src/types/balances.d.ts +4 -3
- package/dist/talismn-balances.cjs.dev.js +190 -82
- package/dist/talismn-balances.cjs.prod.js +190 -82
- package/dist/talismn-balances.esm.js +191 -84
- package/package.json +8 -8
@@ -288,11 +288,10 @@ class Balances {
|
|
288
288
|
}
|
289
289
|
const getBalanceId = balance => {
|
290
290
|
const {
|
291
|
-
source,
|
292
291
|
address,
|
293
292
|
tokenId
|
294
293
|
} = balance;
|
295
|
-
return [
|
294
|
+
return [address, tokenId].join("::");
|
296
295
|
};
|
297
296
|
|
298
297
|
/**
|
@@ -1551,16 +1550,16 @@ const getBalanceDefs = addressesByToken => {
|
|
1551
1550
|
|
1552
1551
|
const fetchBalances$c = async ({
|
1553
1552
|
networkId,
|
1554
|
-
|
1553
|
+
tokensWithAddresses,
|
1555
1554
|
connector
|
1556
1555
|
}) => {
|
1557
1556
|
const client = await connector.getPublicClientForEvmNetwork(networkId);
|
1558
1557
|
if (!client) throw new Error(`Could not get rpc provider for evm network ${networkId}`);
|
1559
|
-
for (const [token, addresses] of
|
1558
|
+
for (const [token, addresses] of tokensWithAddresses) {
|
1560
1559
|
if (token.type !== MODULE_TYPE$8 || token.networkId !== networkId) throw new Error(`Invalid token type or networkId for EVM ERC20 balance module: ${token.type} on ${token.networkId}`);
|
1561
1560
|
for (const address of addresses) if (!util.isEthereumAddress(address)) throw new Error(`Invalid ethereum address for EVM ERC20 balance module: ${address} for token ${token.id}`);
|
1562
1561
|
}
|
1563
|
-
const balanceDefs = getBalanceDefs(
|
1562
|
+
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
1564
1563
|
if (client.chain?.contracts?.erc20Aggregator && balanceDefs.length > 1) {
|
1565
1564
|
const erc20Aggregator = client.chain.contracts.erc20Aggregator;
|
1566
1565
|
return fetchWithAggregator$1(client, balanceDefs, erc20Aggregator.address);
|
@@ -1783,7 +1782,7 @@ const getTransferCallData$8 = ({
|
|
1783
1782
|
const SUBSCRIPTION_INTERVAL$8 = 6_000;
|
1784
1783
|
const subscribeBalances$8 = ({
|
1785
1784
|
networkId,
|
1786
|
-
|
1785
|
+
tokensWithAddresses,
|
1787
1786
|
connector
|
1788
1787
|
}) => {
|
1789
1788
|
return new rxjs.Observable(subscriber => {
|
@@ -1793,7 +1792,7 @@ const subscribeBalances$8 = ({
|
|
1793
1792
|
if (abortController.signal.aborted) return;
|
1794
1793
|
const balances = await fetchBalances$c({
|
1795
1794
|
networkId,
|
1796
|
-
|
1795
|
+
tokensWithAddresses: tokensWithAddresses,
|
1797
1796
|
connector
|
1798
1797
|
});
|
1799
1798
|
if (abortController.signal.aborted) return;
|
@@ -1803,7 +1802,7 @@ const subscribeBalances$8 = ({
|
|
1803
1802
|
log.error("Error", {
|
1804
1803
|
module: MODULE_TYPE$8,
|
1805
1804
|
networkId,
|
1806
|
-
addressesByToken,
|
1805
|
+
addressesByToken: tokensWithAddresses,
|
1807
1806
|
error
|
1808
1807
|
});
|
1809
1808
|
subscriber.error(error);
|
@@ -1841,16 +1840,16 @@ const PLATFORM$7 = chaindataProvider.EvmNativeTokenSchema.shape.platform.value;
|
|
1841
1840
|
|
1842
1841
|
const fetchBalances$b = async ({
|
1843
1842
|
networkId,
|
1844
|
-
|
1843
|
+
tokensWithAddresses,
|
1845
1844
|
connector
|
1846
1845
|
}) => {
|
1847
1846
|
const client = await connector.getPublicClientForEvmNetwork(networkId);
|
1848
1847
|
if (!client) throw new Error(`Could not get rpc provider for evm network ${networkId}`);
|
1849
|
-
for (const [token, addresses] of
|
1848
|
+
for (const [token, addresses] of tokensWithAddresses) {
|
1850
1849
|
if (token.type !== MODULE_TYPE$7 || token.networkId !== networkId) throw new Error(`Invalid token type or networkId for EVM ERC20 balance module: ${token.type} on ${token.networkId}`);
|
1851
1850
|
for (const address of addresses) if (!util.isEthereumAddress(address)) throw new Error(`Invalid ethereum address for EVM ERC20 balance module: ${address} for token ${token.id}`);
|
1852
1851
|
}
|
1853
|
-
const balanceDefs = getBalanceDefs(
|
1852
|
+
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
1854
1853
|
if (client.chain?.contracts?.multicall3 && balanceDefs.length > 1) {
|
1855
1854
|
const multicall3 = client.chain.contracts.multicall3;
|
1856
1855
|
return fetchWithMulticall(client, balanceDefs, multicall3.address);
|
@@ -1997,7 +1996,7 @@ const getTransferCallData$7 = ({
|
|
1997
1996
|
const SUBSCRIPTION_INTERVAL$7 = 6_000;
|
1998
1997
|
const subscribeBalances$7 = ({
|
1999
1998
|
networkId,
|
2000
|
-
|
1999
|
+
tokensWithAddresses,
|
2001
2000
|
connector
|
2002
2001
|
}) => {
|
2003
2002
|
return new rxjs.Observable(subscriber => {
|
@@ -2007,7 +2006,7 @@ const subscribeBalances$7 = ({
|
|
2007
2006
|
if (abortController.signal.aborted) return;
|
2008
2007
|
const balances = await fetchBalances$b({
|
2009
2008
|
networkId,
|
2010
|
-
|
2009
|
+
tokensWithAddresses: tokensWithAddresses,
|
2011
2010
|
connector
|
2012
2011
|
});
|
2013
2012
|
if (abortController.signal.aborted) return;
|
@@ -2017,7 +2016,7 @@ const subscribeBalances$7 = ({
|
|
2017
2016
|
log.error("Error", {
|
2018
2017
|
module: MODULE_TYPE$7,
|
2019
2018
|
networkId,
|
2020
|
-
addressesByToken,
|
2019
|
+
addressesByToken: tokensWithAddresses,
|
2021
2020
|
error
|
2022
2021
|
});
|
2023
2022
|
subscriber.error(error);
|
@@ -2050,16 +2049,16 @@ const PLATFORM$6 = chaindataProvider.EvmUniswapV2TokenSchema.shape.platform.valu
|
|
2050
2049
|
|
2051
2050
|
const fetchBalances$a = async ({
|
2052
2051
|
networkId,
|
2053
|
-
|
2052
|
+
tokensWithAddresses,
|
2054
2053
|
connector
|
2055
2054
|
}) => {
|
2056
2055
|
const client = await connector.getPublicClientForEvmNetwork(networkId);
|
2057
2056
|
if (!client) throw new Error(`Could not get rpc provider for evm network ${networkId}`);
|
2058
|
-
for (const [token, addresses] of
|
2057
|
+
for (const [token, addresses] of tokensWithAddresses) {
|
2059
2058
|
if (token.type !== MODULE_TYPE$6 || token.networkId !== networkId) throw new Error(`Invalid token type or networkId for EVM ERC20 balance module: ${token.type} on ${token.networkId}`);
|
2060
2059
|
for (const address of addresses) if (!util.isEthereumAddress(address)) throw new Error(`Invalid ethereum address for EVM ERC20 balance module: ${address} for token ${token.id}`);
|
2061
2060
|
}
|
2062
|
-
const balanceDefs = getBalanceDefs(
|
2061
|
+
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
2063
2062
|
if (client.chain?.contracts?.erc20Aggregator && balanceDefs.length > 1) {
|
2064
2063
|
const erc20Aggregator = client.chain.contracts.erc20Aggregator;
|
2065
2064
|
return fetchWithAggregator(client, balanceDefs, erc20Aggregator.address);
|
@@ -2330,7 +2329,7 @@ const getTransferCallData$6 = ({
|
|
2330
2329
|
const SUBSCRIPTION_INTERVAL$6 = 6_000;
|
2331
2330
|
const subscribeBalances$6 = ({
|
2332
2331
|
networkId,
|
2333
|
-
|
2332
|
+
tokensWithAddresses,
|
2334
2333
|
connector
|
2335
2334
|
}) => {
|
2336
2335
|
return new rxjs.Observable(subscriber => {
|
@@ -2340,7 +2339,7 @@ const subscribeBalances$6 = ({
|
|
2340
2339
|
if (abortController.signal.aborted) return;
|
2341
2340
|
const balances = await fetchBalances$a({
|
2342
2341
|
networkId,
|
2343
|
-
|
2342
|
+
tokensWithAddresses: tokensWithAddresses,
|
2344
2343
|
connector
|
2345
2344
|
});
|
2346
2345
|
if (abortController.signal.aborted) return;
|
@@ -2350,7 +2349,7 @@ const subscribeBalances$6 = ({
|
|
2350
2349
|
log.error("Error", {
|
2351
2350
|
module: MODULE_TYPE$6,
|
2352
2351
|
networkId,
|
2353
|
-
addressesByToken,
|
2352
|
+
addressesByToken: tokensWithAddresses,
|
2354
2353
|
error
|
2355
2354
|
});
|
2356
2355
|
subscriber.error(error);
|
@@ -3472,11 +3471,11 @@ const decompress = data => {
|
|
3472
3471
|
|
3473
3472
|
const fetchBalances$6 = async ({
|
3474
3473
|
networkId,
|
3475
|
-
|
3474
|
+
tokensWithAddresses,
|
3476
3475
|
connector,
|
3477
3476
|
miniMetadata
|
3478
3477
|
}) => {
|
3479
|
-
const balanceDefs = getBalanceDefs(
|
3478
|
+
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
3480
3479
|
if (!miniMetadata?.data) {
|
3481
3480
|
log.warn("MiniMetadata is required for fetching balances");
|
3482
3481
|
return {
|
@@ -3851,7 +3850,7 @@ const getTransferAllEncodedArgs$2 = (assetId, to, codec) => {
|
|
3851
3850
|
const SUBSCRIPTION_INTERVAL$5 = 6_000;
|
3852
3851
|
const subscribeBalances$5 = ({
|
3853
3852
|
networkId,
|
3854
|
-
|
3853
|
+
tokensWithAddresses,
|
3855
3854
|
connector,
|
3856
3855
|
miniMetadata
|
3857
3856
|
}) => {
|
@@ -3865,7 +3864,7 @@ const subscribeBalances$5 = ({
|
|
3865
3864
|
if (abortController.signal.aborted) return;
|
3866
3865
|
const balances = await fetchBalances$6({
|
3867
3866
|
networkId,
|
3868
|
-
|
3867
|
+
tokensWithAddresses: tokensWithAddresses,
|
3869
3868
|
connector,
|
3870
3869
|
miniMetadata
|
3871
3870
|
});
|
@@ -3877,7 +3876,7 @@ const subscribeBalances$5 = ({
|
|
3877
3876
|
module: MODULE_TYPE$5,
|
3878
3877
|
networkId,
|
3879
3878
|
miniMetadata,
|
3880
|
-
addressesByToken,
|
3879
|
+
addressesByToken: tokensWithAddresses,
|
3881
3880
|
error
|
3882
3881
|
});
|
3883
3882
|
subscriber.error(error);
|
@@ -3911,11 +3910,11 @@ const PLATFORM$4 = chaindataProvider.SubForeignAssetsTokenSchema.shape.platform.
|
|
3911
3910
|
|
3912
3911
|
const fetchBalances$5 = async ({
|
3913
3912
|
networkId,
|
3914
|
-
|
3913
|
+
tokensWithAddresses,
|
3915
3914
|
connector,
|
3916
3915
|
miniMetadata
|
3917
3916
|
}) => {
|
3918
|
-
const balanceDefs = getBalanceDefs(
|
3917
|
+
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
3919
3918
|
if (!miniMetadata?.data) {
|
3920
3919
|
log.warn("MiniMetadata is required for fetching balances");
|
3921
3920
|
return {
|
@@ -4249,7 +4248,7 @@ const getTransferAllEncodedArgs$1 = (onChainId, to, codec) => {
|
|
4249
4248
|
const SUBSCRIPTION_INTERVAL$4 = 6_000;
|
4250
4249
|
const subscribeBalances$4 = ({
|
4251
4250
|
networkId,
|
4252
|
-
|
4251
|
+
tokensWithAddresses,
|
4253
4252
|
connector,
|
4254
4253
|
miniMetadata
|
4255
4254
|
}) => {
|
@@ -4263,7 +4262,7 @@ const subscribeBalances$4 = ({
|
|
4263
4262
|
if (abortController.signal.aborted) return;
|
4264
4263
|
const balances = await fetchBalances$5({
|
4265
4264
|
networkId,
|
4266
|
-
|
4265
|
+
tokensWithAddresses: tokensWithAddresses,
|
4267
4266
|
connector,
|
4268
4267
|
miniMetadata
|
4269
4268
|
});
|
@@ -4275,7 +4274,7 @@ const subscribeBalances$4 = ({
|
|
4275
4274
|
module: MODULE_TYPE$4,
|
4276
4275
|
networkId,
|
4277
4276
|
miniMetadata,
|
4278
|
-
addressesByToken,
|
4277
|
+
addressesByToken: tokensWithAddresses,
|
4279
4278
|
error
|
4280
4279
|
});
|
4281
4280
|
subscriber.error(error);
|
@@ -4339,11 +4338,11 @@ const tryGetConstantValue = (metadataRpc, pallet, constant) => {
|
|
4339
4338
|
|
4340
4339
|
const fetchBalances$4 = async ({
|
4341
4340
|
networkId,
|
4342
|
-
|
4341
|
+
tokensWithAddresses,
|
4343
4342
|
connector,
|
4344
4343
|
miniMetadata
|
4345
4344
|
}) => {
|
4346
|
-
const balanceDefs = getBalanceDefs(
|
4345
|
+
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
4347
4346
|
if (!miniMetadata?.data) {
|
4348
4347
|
log.warn("MiniMetadata is required for fetching balances");
|
4349
4348
|
return {
|
@@ -4390,7 +4389,7 @@ const fetchBalances$4 = async ({
|
|
4390
4389
|
})).filter(b => b.onChainId !== undefined);
|
4391
4390
|
});
|
4392
4391
|
const balancesByKey = lodash.keyBy(fetchedBalances, b => `${b.address}:${b.onChainId}`);
|
4393
|
-
const success =
|
4392
|
+
const success = tokensWithAddresses.reduce((acc, [token, addresses]) => {
|
4394
4393
|
if (token.type === MODULE_TYPE$3) for (const address of addresses) {
|
4395
4394
|
const rawBalance = balancesByKey[`${address}:${token.onChainId}`];
|
4396
4395
|
|
@@ -4595,7 +4594,7 @@ const getTransferCallData$3 = ({
|
|
4595
4594
|
const SUBSCRIPTION_INTERVAL$3 = 6_000;
|
4596
4595
|
const subscribeBalances$3 = ({
|
4597
4596
|
networkId,
|
4598
|
-
|
4597
|
+
tokensWithAddresses,
|
4599
4598
|
connector,
|
4600
4599
|
miniMetadata
|
4601
4600
|
}) => {
|
@@ -4609,7 +4608,7 @@ const subscribeBalances$3 = ({
|
|
4609
4608
|
if (abortController.signal.aborted) return;
|
4610
4609
|
const balances = await fetchBalances$4({
|
4611
4610
|
networkId,
|
4612
|
-
|
4611
|
+
tokensWithAddresses: tokensWithAddresses,
|
4613
4612
|
connector,
|
4614
4613
|
miniMetadata
|
4615
4614
|
});
|
@@ -4621,7 +4620,7 @@ const subscribeBalances$3 = ({
|
|
4621
4620
|
module: MODULE_TYPE$3,
|
4622
4621
|
networkId,
|
4623
4622
|
miniMetadata,
|
4624
|
-
addressesByToken,
|
4623
|
+
addressesByToken: tokensWithAddresses,
|
4625
4624
|
error
|
4626
4625
|
});
|
4627
4626
|
subscriber.error(error);
|
@@ -5494,11 +5493,11 @@ const getNomPoolStateKeys = (coders, nomPoolMemberInfo, extra) => {
|
|
5494
5493
|
|
5495
5494
|
const fetchBalances$3 = async ({
|
5496
5495
|
networkId,
|
5497
|
-
|
5496
|
+
tokensWithAddresses,
|
5498
5497
|
connector,
|
5499
5498
|
miniMetadata
|
5500
5499
|
}) => {
|
5501
|
-
const balanceDefs = getBalanceDefs(
|
5500
|
+
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
5502
5501
|
if (!miniMetadata?.data) {
|
5503
5502
|
log.warn("MiniMetadata is required for fetching balances");
|
5504
5503
|
return {
|
@@ -5776,7 +5775,7 @@ const getTransferAllEncodedArgs = (to, codec) => {
|
|
5776
5775
|
const SUBSCRIPTION_INTERVAL$2 = 6_000;
|
5777
5776
|
const subscribeBalances$2 = ({
|
5778
5777
|
networkId,
|
5779
|
-
|
5778
|
+
tokensWithAddresses,
|
5780
5779
|
connector,
|
5781
5780
|
miniMetadata
|
5782
5781
|
}) => {
|
@@ -5790,7 +5789,7 @@ const subscribeBalances$2 = ({
|
|
5790
5789
|
if (abortController.signal.aborted) return;
|
5791
5790
|
const balances = await fetchBalances$3({
|
5792
5791
|
networkId,
|
5793
|
-
|
5792
|
+
tokensWithAddresses: tokensWithAddresses,
|
5794
5793
|
connector,
|
5795
5794
|
miniMetadata
|
5796
5795
|
});
|
@@ -5802,7 +5801,7 @@ const subscribeBalances$2 = ({
|
|
5802
5801
|
module: MODULE_TYPE$2,
|
5803
5802
|
networkId,
|
5804
5803
|
miniMetadata,
|
5805
|
-
addressesByToken,
|
5804
|
+
addressesByToken: tokensWithAddresses,
|
5806
5805
|
error
|
5807
5806
|
});
|
5808
5807
|
subscriber.error(error);
|
@@ -6993,10 +6992,10 @@ var psp22Abi = {
|
|
6993
6992
|
|
6994
6993
|
const fetchBalances$2 = async ({
|
6995
6994
|
networkId,
|
6996
|
-
|
6995
|
+
tokensWithAddresses,
|
6997
6996
|
connector
|
6998
6997
|
}) => {
|
6999
|
-
const balanceDefs = getBalanceDefs(
|
6998
|
+
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
7000
6999
|
if (!balanceDefs.length) return {
|
7001
7000
|
success: [],
|
7002
7001
|
errors: []
|
@@ -7186,7 +7185,7 @@ const getTransferCallData$1 = async ({
|
|
7186
7185
|
const SUBSCRIPTION_INTERVAL$1 = 6_000;
|
7187
7186
|
const subscribeBalances$1 = ({
|
7188
7187
|
networkId,
|
7189
|
-
|
7188
|
+
tokensWithAddresses,
|
7190
7189
|
connector,
|
7191
7190
|
miniMetadata
|
7192
7191
|
}) => {
|
@@ -7200,7 +7199,7 @@ const subscribeBalances$1 = ({
|
|
7200
7199
|
if (abortController.signal.aborted) return;
|
7201
7200
|
const balances = await fetchBalances$2({
|
7202
7201
|
networkId,
|
7203
|
-
|
7202
|
+
tokensWithAddresses: tokensWithAddresses,
|
7204
7203
|
connector,
|
7205
7204
|
miniMetadata
|
7206
7205
|
});
|
@@ -7212,7 +7211,7 @@ const subscribeBalances$1 = ({
|
|
7212
7211
|
module: MODULE_TYPE$1,
|
7213
7212
|
networkId,
|
7214
7213
|
miniMetadata,
|
7215
|
-
addressesByToken,
|
7214
|
+
addressesByToken: tokensWithAddresses,
|
7216
7215
|
error
|
7217
7216
|
});
|
7218
7217
|
subscriber.error(error);
|
@@ -7246,11 +7245,11 @@ const PLATFORM = chaindataProvider.SubTokensTokenSchema.shape.platform.value;
|
|
7246
7245
|
|
7247
7246
|
const fetchBalances$1 = async ({
|
7248
7247
|
networkId,
|
7249
|
-
|
7248
|
+
tokensWithAddresses,
|
7250
7249
|
connector,
|
7251
7250
|
miniMetadata
|
7252
7251
|
}) => {
|
7253
|
-
const balanceDefs = getBalanceDefs(
|
7252
|
+
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
7254
7253
|
if (!miniMetadata?.data) {
|
7255
7254
|
log.warn("MiniMetadata is required for fetching balances");
|
7256
7255
|
return {
|
@@ -7576,7 +7575,7 @@ const getCallDataOptions = (to, token, value, type, config) => {
|
|
7576
7575
|
const SUBSCRIPTION_INTERVAL = 6_000;
|
7577
7576
|
const subscribeBalances = ({
|
7578
7577
|
networkId,
|
7579
|
-
|
7578
|
+
tokensWithAddresses,
|
7580
7579
|
connector,
|
7581
7580
|
miniMetadata
|
7582
7581
|
}) => {
|
@@ -7590,7 +7589,7 @@ const subscribeBalances = ({
|
|
7590
7589
|
if (abortController.signal.aborted) return;
|
7591
7590
|
const balances = await fetchBalances$1({
|
7592
7591
|
networkId,
|
7593
|
-
|
7592
|
+
tokensWithAddresses: tokensWithAddresses,
|
7594
7593
|
connector,
|
7595
7594
|
miniMetadata
|
7596
7595
|
});
|
@@ -7602,7 +7601,7 @@ const subscribeBalances = ({
|
|
7602
7601
|
module: MODULE_TYPE,
|
7603
7602
|
networkId,
|
7604
7603
|
miniMetadata,
|
7605
|
-
addressesByToken,
|
7604
|
+
addressesByToken: tokensWithAddresses,
|
7606
7605
|
error
|
7607
7606
|
});
|
7608
7607
|
subscriber.error(error);
|
@@ -7706,6 +7705,7 @@ const getMiniMetadatas = async (chainConnector, chaindataProvider, networkId, sp
|
|
7706
7705
|
if (CACHE.has(networkId)) return CACHE.get(networkId);
|
7707
7706
|
if (!signal) log.warn("[miniMetadata] getMiniMetadatas called without signal, this may hang the updates", new Error("No signal provided") // this will show the stack trace
|
7708
7707
|
);
|
7708
|
+
if (specVersion === undefined) specVersion = await getSpecVersion(chainConnector, networkId);
|
7709
7709
|
const pResult = POOL.add(() => fetchMiniMetadatas(chainConnector, chaindataProvider, networkId, specVersion), {
|
7710
7710
|
signal
|
7711
7711
|
});
|
@@ -7721,42 +7721,21 @@ const getMiniMetadatas = async (chainConnector, chaindataProvider, networkId, sp
|
|
7721
7721
|
CACHE.delete(networkId);
|
7722
7722
|
}
|
7723
7723
|
};
|
7724
|
-
const
|
7725
|
-
const fetchMiniMetadatas = async (chainConnector, chaindataProvider$1, chainId, specVersion, signal) => {
|
7724
|
+
const fetchMiniMetadatas = async (chainConnector, chaindataProvider, chainId, specVersion, signal) => {
|
7726
7725
|
const start = performance.now();
|
7727
7726
|
log.info("[miniMetadata] fetching minimetadatas for %s", chainId);
|
7728
7727
|
try {
|
7728
|
+
const network = await chaindataProvider.getNetworkById(chainId, "polkadot");
|
7729
|
+
if (!network) throw new Error(`Network ${chainId} not found in chaindataProvider`);
|
7730
|
+
signal?.throwIfAborted();
|
7729
7731
|
const metadataRpc = await getMetadataRpc(chainConnector, chainId);
|
7730
7732
|
signal?.throwIfAborted();
|
7731
|
-
|
7732
|
-
|
7733
|
-
|
7734
|
-
|
7735
|
-
|
7736
|
-
|
7737
|
-
chaindataProvider: chaindataProvider$1
|
7738
|
-
})).filter(mod => DotBalanceModuleTypeSchema.safeParse(mod.type).success);
|
7739
|
-
return Promise.all(modules.map(async mod => {
|
7740
|
-
const source = mod.type;
|
7741
|
-
const chain = await chaindataProvider$1.getNetworkById(chainId, "polkadot");
|
7742
|
-
const balancesConfig = chain?.balancesConfig?.[mod.type];
|
7743
|
-
const chainMeta = await mod.fetchSubstrateChainMeta(chainId, balancesConfig,
|
7744
|
-
// TODO better typing
|
7745
|
-
metadataRpc);
|
7746
|
-
return {
|
7747
|
-
id: deriveMiniMetadataId({
|
7748
|
-
source,
|
7749
|
-
chainId,
|
7750
|
-
specVersion
|
7751
|
-
}),
|
7752
|
-
source,
|
7753
|
-
chainId,
|
7754
|
-
specVersion,
|
7755
|
-
version: chaindataProvider.MINIMETADATA_VERSION,
|
7756
|
-
data: chainMeta?.miniMetadata ?? null,
|
7757
|
-
extra: chainMeta?.extra ?? null
|
7758
|
-
};
|
7759
|
-
}));
|
7733
|
+
return Promise.all(BALANCE_MODULES.filter(m => m.platform === "polkadot").map(mod => mod.getMiniMetadata({
|
7734
|
+
networkId: chainId,
|
7735
|
+
metadataRpc,
|
7736
|
+
specVersion,
|
7737
|
+
config: network.balancesConfig?.[mod.type]
|
7738
|
+
})));
|
7760
7739
|
} finally {
|
7761
7740
|
log.debug("[miniMetadata] updated miniMetadatas for %s in %sms", chainId, (performance.now() - start).toFixed(2));
|
7762
7741
|
}
|
@@ -10467,6 +10446,134 @@ async function buildQueries(chainConnector, chaindataProvider$1, addressesByToke
|
|
10467
10446
|
const defaultBalanceModules = [EvmErc20Module, EvmNativeModule, EvmUniswapV2Module, SubAssetsModule, SubForeignAssetsModule, SubNativeModule, SubPsp22Module, SubTokensModule];
|
10468
10447
|
const BALANCE_MODULES = [SubNativeBalanceModule, SubAssetsBalanceModule, SubHydrationBalanceModule, SubForeignAssetsBalanceModule, SubPsp22BalanceModule, SubTokensBalanceModule, EvmErc20BalanceModule, EvmUniswapV2BalanceModule, EvmNativeBalanceModule];
|
10469
10448
|
|
10449
|
+
const DEFAULT_STORAGE = {
|
10450
|
+
balances: [],
|
10451
|
+
miniMetadatas: []
|
10452
|
+
};
|
10453
|
+
class BalancesProvider {
|
10454
|
+
#chaindataProvider;
|
10455
|
+
#chainConnectors;
|
10456
|
+
#storage;
|
10457
|
+
constructor(chaindataProvider, chainConnectors, storage = DEFAULT_STORAGE) {
|
10458
|
+
this.#chaindataProvider = chaindataProvider;
|
10459
|
+
this.#chainConnectors = chainConnectors;
|
10460
|
+
this.#storage = new rxjs.BehaviorSubject({
|
10461
|
+
balances: lodash.keyBy(storage.balances.filter(util.isNotNil), b => getBalanceId(b)),
|
10462
|
+
miniMetadatas: lodash.keyBy(storage.miniMetadatas.filter(util.isNotNil), m => m.id)
|
10463
|
+
});
|
10464
|
+
}
|
10465
|
+
get storage$() {
|
10466
|
+
return this.#storage.pipe(rxjs.map(({
|
10467
|
+
balances,
|
10468
|
+
miniMetadatas
|
10469
|
+
}) => ({
|
10470
|
+
balances: lodash.values(balances).filter(util.isNotNil),
|
10471
|
+
miniMetadatas: lodash.values(miniMetadatas).filter(util.isNotNil)
|
10472
|
+
})));
|
10473
|
+
}
|
10474
|
+
getBalances$(addressesByToken) {
|
10475
|
+
const networkIds = lodash.uniq(lodash.keys(addressesByToken).map(tokenId => chaindataProvider.parseTokenId(tokenId).networkId));
|
10476
|
+
return rxjs.combineLatest(networkIds.map(networkId => this.getNetworkBalances$(networkId, addressesByToken))).pipe(rxjs.map(results => {
|
10477
|
+
return {
|
10478
|
+
status: results.some(({
|
10479
|
+
status
|
10480
|
+
}) => status === "initialising") ? "initialising" : "live",
|
10481
|
+
balances: results.flatMap(result => result.balances)
|
10482
|
+
};
|
10483
|
+
}), rxjs.startWith({
|
10484
|
+
status: "initialising",
|
10485
|
+
balances: this.getStoredBalances(addressesByToken)
|
10486
|
+
}), rxjs.distinctUntilChanged(lodash.isEqual));
|
10487
|
+
}
|
10488
|
+
getNetworkBalances$(networkId, addressesByTokenId) {
|
10489
|
+
const network$ = this.#chaindataProvider.getNetworkById$(networkId);
|
10490
|
+
const tokensMapById$ = this.#chaindataProvider.getTokensMapById$();
|
10491
|
+
const miniMetadatas$ = this.getNetworkMiniMetadatas$(networkId);
|
10492
|
+
return rxjs.combineLatest([network$, miniMetadatas$, tokensMapById$]).pipe(rxjs.switchMap(([network, miniMetadatas, tokensMapById]) => {
|
10493
|
+
const tokensAndAddresses = lodash.toPairs(addressesByTokenId).map(([tokenId, addresses]) => [tokensMapById[tokenId], addresses]);
|
10494
|
+
return rxjs.combineLatest(BALANCE_MODULES.filter(mod => mod.platform === network?.platform).map(mod => {
|
10495
|
+
const tokensWithAddresses = tokensAndAddresses.filter(([token]) => token.type === mod.type);
|
10496
|
+
const moduleAddressesByTokenId = lodash.fromPairs(tokensWithAddresses.map(([token, addresses]) => [token.id, addresses]));
|
10497
|
+
const miniMetadata = miniMetadatas.find(m => m.source === mod.type);
|
10498
|
+
|
10499
|
+
// all balance ids expected in result set
|
10500
|
+
const balanceIds = lodash.toPairs(moduleAddressesByTokenId).flatMap(([tokenId, addresses]) => addresses.map(address => getBalanceId({
|
10501
|
+
tokenId,
|
10502
|
+
address
|
10503
|
+
})));
|
10504
|
+
const initValue = {
|
10505
|
+
status: "initialising",
|
10506
|
+
balances: this.getStoredBalances(moduleAddressesByTokenId)
|
10507
|
+
};
|
10508
|
+
const updateStorage = results => {
|
10509
|
+
if (results.status !== "live") return;
|
10510
|
+
const storage = this.#storage.getValue();
|
10511
|
+
const balances = lodash.assign({}, storage.balances,
|
10512
|
+
// delete all balances expected in the result set. because if they are not present it means they are empty.
|
10513
|
+
lodash.fromPairs(balanceIds.map(balanceId => [balanceId, undefined])), lodash.keyBy(results.balances, b => getBalanceId(b)));
|
10514
|
+
this.#storage.next(lodash.assign({}, storage, {
|
10515
|
+
balances
|
10516
|
+
}));
|
10517
|
+
};
|
10518
|
+
switch (mod.platform) {
|
10519
|
+
case "ethereum":
|
10520
|
+
{
|
10521
|
+
if (!this.#chainConnectors.evm) return rxjs.of(initValue);
|
10522
|
+
return mod.subscribeBalances({
|
10523
|
+
networkId,
|
10524
|
+
tokensWithAddresses,
|
10525
|
+
connector: this.#chainConnectors.evm
|
10526
|
+
}).pipe(rxjs.map(results => ({
|
10527
|
+
status: "live",
|
10528
|
+
// exclude zero balances
|
10529
|
+
balances: results.success.filter(b => new Balance(b).total.planck > 0n)
|
10530
|
+
})), rxjs.tap(updateStorage), rxjs.startWith(initValue));
|
10531
|
+
}
|
10532
|
+
case "polkadot":
|
10533
|
+
if (!this.#chainConnectors.substrate || !miniMetadata) {
|
10534
|
+
log.debug("[balances] no substrate connector or miniMetadata for polkadot", mod.type);
|
10535
|
+
return rxjs.of(initValue);
|
10536
|
+
}
|
10537
|
+
return mod.subscribeBalances({
|
10538
|
+
networkId,
|
10539
|
+
tokensWithAddresses,
|
10540
|
+
connector: this.#chainConnectors.substrate,
|
10541
|
+
miniMetadata: miniMetadata
|
10542
|
+
}).pipe(rxjs.map(results => ({
|
10543
|
+
status: "live",
|
10544
|
+
// exclude zero balances
|
10545
|
+
balances: results.success.filter(b => new Balance(b).total.planck > 0n)
|
10546
|
+
})), rxjs.tap(updateStorage), rxjs.startWith(initValue));
|
10547
|
+
}
|
10548
|
+
}));
|
10549
|
+
}), rxjs.map(results => {
|
10550
|
+
return {
|
10551
|
+
status: results.some(({
|
10552
|
+
status
|
10553
|
+
}) => status === "initialising") ? "initialising" : "live",
|
10554
|
+
balances: results.flatMap(result => result.balances)
|
10555
|
+
};
|
10556
|
+
}));
|
10557
|
+
}
|
10558
|
+
getNetworkMiniMetadatas$(networkId) {
|
10559
|
+
return this.#chaindataProvider.getNetworkById$(networkId).pipe(rxjs.switchMap(network => chaindataProvider.isNetworkDot(network) && this.#chainConnectors.substrate ? rxjs.from(getMiniMetadatas(this.#chainConnectors.substrate, this.#chaindataProvider, networkId)) : rxjs.of([])));
|
10560
|
+
}
|
10561
|
+
getStoredBalances(addressesByToken) {
|
10562
|
+
const balanceDefs = lodash.toPairs(addressesByToken).flatMap(([tokenId, addresses]) => addresses.map(address => [tokenId, address]));
|
10563
|
+
return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({
|
10564
|
+
address,
|
10565
|
+
tokenId
|
10566
|
+
})]).filter(util.isNotNil);
|
10567
|
+
}
|
10568
|
+
}
|
10569
|
+
|
10570
|
+
// const getStoredBalances = (
|
10571
|
+
// storedBalances: Record<string, IBalance>,
|
10572
|
+
// addressesByToken: Record<TokenId, Address[]>,
|
10573
|
+
// ): IBalance[] => {
|
10574
|
+
|
10575
|
+
// }
|
10576
|
+
|
10470
10577
|
Object.defineProperty(exports, "MINIMETADATA_VERSION", {
|
10471
10578
|
enumerable: true,
|
10472
10579
|
get: function () { return chaindataProvider.MINIMETADATA_VERSION; }
|
@@ -10476,6 +10583,7 @@ exports.Balance = Balance;
|
|
10476
10583
|
exports.BalanceFormatter = BalanceFormatter;
|
10477
10584
|
exports.BalanceValueGetter = BalanceValueGetter;
|
10478
10585
|
exports.Balances = Balances;
|
10586
|
+
exports.BalancesProvider = BalancesProvider;
|
10479
10587
|
exports.Change24hCurrencyFormatter = Change24hCurrencyFormatter;
|
10480
10588
|
exports.DefaultBalanceModule = DefaultBalanceModule;
|
10481
10589
|
exports.EvmErc20BalanceModule = EvmErc20BalanceModule;
|