@talismn/balances 0.0.0-pr2075-20250711045153 → 0.0.0-pr2075-20250711073805

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.
@@ -20,6 +20,7 @@ export declare class BalancesProvider {
20
20
  fetchBalances(addressesByTokenId: Record<TokenId, Address[]>): Promise<IBalance[]>;
21
21
  private getNetworkBalances$;
22
22
  private getNetworkMiniMetadatas$;
23
+ private getNetworkSpecVersion$;
23
24
  private getMiniMetadatas$;
24
25
  private getStoredMiniMetadatas$;
25
26
  private getDefaultMiniMetadatas$;
@@ -5,3 +5,8 @@ export type BalanceDef<T extends TokenType = TokenType> = {
5
5
  address: TokenPlatform<T> extends "ethereum" ? `0x${string}` : string;
6
6
  };
7
7
  export declare const getBalanceDefs: <T extends TokenType = TokenType>(addressesByToken: TokensWithAddresses) => BalanceDef<T>[];
8
+ export type QueryStorageChange = [stateKey: `0x${string}`, value: `0x${string}`];
9
+ export type QueryStorageResult = [{
10
+ block: `0x${string}`;
11
+ changes: QueryStorageChange[];
12
+ }] | [];
@@ -621,6 +621,10 @@ const getBalanceDefs = addressesByToken => {
621
621
  })));
622
622
  };
623
623
 
624
+ // esponse of getStorageAt queries:
625
+ // if there is at least one storage entry, the results will be an array with a single object
626
+ // if the storage has no entries in it (ex: Assets on ewx or moonbeam), the response will be an empty array
627
+
624
628
  const fetchBalances$8 = async ({
625
629
  networkId,
626
630
  tokensWithAddresses,
@@ -1502,7 +1506,7 @@ const decodeRpcQueryPack = (queries, result) => {
1502
1506
  decodeResult
1503
1507
  }) => {
1504
1508
  const changes = stateKeys.map(stateKey => {
1505
- if (!stateKey) return null;
1509
+ if (!stateKey || !result) return null;
1506
1510
  const change = result.changes.find(([key]) => key === stateKey);
1507
1511
  if (!change) return null;
1508
1512
  return change[1];
@@ -1750,8 +1754,8 @@ const fetchTokens$5 = async ({
1750
1754
  const metadataCodec = builder.buildStorage("Assets", "Metadata");
1751
1755
  const [allAssetStorageKeys, allMetadataStorageKeys] = await Promise.all([connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("Assets", "Asset")]), connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("Assets", "Metadata")])]);
1752
1756
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
1753
- const assetStorageEntries = assetStorageResults[0].changes;
1754
- const metadataStorageEntries = metadataStorageResults[0].changes;
1757
+ const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
1758
+ const metadataStorageEntries = metadataStorageResults.length ? metadataStorageResults[0].changes : [];
1755
1759
  const assetByAssetId = lodashEs.keyBy(assetStorageEntries.map(([key, value]) => {
1756
1760
  const [assetId] = assetCodec.keys.dec(key);
1757
1761
  const asset = assetCodec.value.dec(value);
@@ -2899,8 +2903,11 @@ const fetchTokens$4 = async ({
2899
2903
  const metadataCodec = builder.buildStorage("ForeignAssets", "Metadata");
2900
2904
  const [allAssetStorageKeys, allMetadataStorageKeys] = await Promise.all([connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("ForeignAssets", "Asset")]), connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("ForeignAssets", "Metadata")])]);
2901
2905
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
2902
- const assetStorageEntries = assetStorageResults[0].changes;
2903
- const metadataStorageEntries = metadataStorageResults[0].changes;
2906
+
2907
+ // if there is at least one storage entry, the results will be an array with a single object
2908
+ // some networks avec the pallet with no tokens in it, in which case the response will be an empty array
2909
+ const assetStorageEntries = assetStorageResults[0]?.changes ?? [];
2910
+ const metadataStorageEntries = metadataStorageResults[0]?.changes ?? [];
2904
2911
  const assetByOnChainId = lodashEs.keyBy(assetStorageEntries.map(([key, value]) => {
2905
2912
  const [decodedKey] = assetCodec.keys.dec(key);
2906
2913
  const onChainId = scale.papiStringify(decodedKey);
@@ -3241,7 +3248,7 @@ const fetchTokens$3 = async ({
3241
3248
  const assetsCodec = builder.buildStorage("AssetRegistry", "Assets");
3242
3249
  const allAssetStorageKeys = await connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("AssetRegistry", "Assets")]);
3243
3250
  const assetStorageResults = await connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]);
3244
- const assetStorageEntries = assetStorageResults[0].changes;
3251
+ const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
3245
3252
  const configTokenByAssetId = lodashEs.keyBy(tokens, t => t.onChainId);
3246
3253
  return assetStorageEntries.map(([key, value]) => {
3247
3254
  // parse results
@@ -6328,7 +6335,9 @@ class BalancesProvider {
6328
6335
  networkId,
6329
6336
  tokensWithAddresses,
6330
6337
  connector: this.#chainConnectors.evm
6331
- }).pipe(rxjs.map(results => ({
6338
+ }).pipe(rxjs.catchError(() => rxjs.EMPTY),
6339
+ // don't emit, let provider mark balances stale
6340
+ rxjs.map(results => ({
6332
6341
  status: "live",
6333
6342
  // exclude zero balances
6334
6343
  balances: results.success.filter(b => new Balance(b).total.planck > 0n)
@@ -6344,7 +6353,9 @@ class BalancesProvider {
6344
6353
  tokensWithAddresses,
6345
6354
  connector: this.#chainConnectors.substrate,
6346
6355
  miniMetadata: miniMetadata
6347
- }).pipe(rxjs.map(results => ({
6356
+ }).pipe(rxjs.catchError(() => rxjs.EMPTY),
6357
+ // don't emit, let provider mark balances stale
6358
+ rxjs.map(results => ({
6348
6359
  status: "live",
6349
6360
  // exclude zero balances
6350
6361
  balances: results.success.filter(b => new Balance(b).total.planck > 0n)
@@ -6371,7 +6382,20 @@ class BalancesProvider {
6371
6382
  });
6372
6383
  }
6373
6384
  getNetworkMiniMetadatas$(networkId) {
6374
- return this.#chaindataProvider.getNetworkById$(networkId).pipe(rxjs.switchMap(network => chaindataProvider.isNetworkDot(network) && this.#chainConnectors.substrate ? rxjs.from(getSpecVersion(this.#chainConnectors.substrate, networkId)).pipe(rxjs.switchMap(specVersion => this.getMiniMetadatas$(networkId, specVersion))) : rxjs.of([])));
6385
+ return this.#chaindataProvider.getNetworkById$(networkId).pipe(rxjs.switchMap(network => chaindataProvider.isNetworkDot(network) ? this.getNetworkSpecVersion$(networkId).pipe(rxjs.switchMap(specVersion => specVersion === null ? rxjs.of([]) : this.getMiniMetadatas$(networkId, specVersion))) : rxjs.of([])));
6386
+ }
6387
+ getNetworkSpecVersion$(networkId) {
6388
+ return rxjs.from(viem.withRetry(async () => {
6389
+ if (!this.#chainConnectors.substrate) return null;
6390
+ return await getSpecVersion(this.#chainConnectors.substrate, networkId);
6391
+ }, {
6392
+ delay: 2_000
6393
+ })).pipe(rxjs.catchError(() => {
6394
+ log.warn("Failed to fetch spec version for network", {
6395
+ networkId
6396
+ });
6397
+ return rxjs.of(null);
6398
+ }));
6375
6399
  }
6376
6400
  getMiniMetadatas$(networkId, specVersion) {
6377
6401
  const miniMetadataIds = BALANCE_MODULES.filter(mod => mod.platform === "polkadot").map(mod => deriveMiniMetadataId({
@@ -621,6 +621,10 @@ const getBalanceDefs = addressesByToken => {
621
621
  })));
622
622
  };
623
623
 
624
+ // esponse of getStorageAt queries:
625
+ // if there is at least one storage entry, the results will be an array with a single object
626
+ // if the storage has no entries in it (ex: Assets on ewx or moonbeam), the response will be an empty array
627
+
624
628
  const fetchBalances$8 = async ({
625
629
  networkId,
626
630
  tokensWithAddresses,
@@ -1502,7 +1506,7 @@ const decodeRpcQueryPack = (queries, result) => {
1502
1506
  decodeResult
1503
1507
  }) => {
1504
1508
  const changes = stateKeys.map(stateKey => {
1505
- if (!stateKey) return null;
1509
+ if (!stateKey || !result) return null;
1506
1510
  const change = result.changes.find(([key]) => key === stateKey);
1507
1511
  if (!change) return null;
1508
1512
  return change[1];
@@ -1750,8 +1754,8 @@ const fetchTokens$5 = async ({
1750
1754
  const metadataCodec = builder.buildStorage("Assets", "Metadata");
1751
1755
  const [allAssetStorageKeys, allMetadataStorageKeys] = await Promise.all([connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("Assets", "Asset")]), connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("Assets", "Metadata")])]);
1752
1756
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
1753
- const assetStorageEntries = assetStorageResults[0].changes;
1754
- const metadataStorageEntries = metadataStorageResults[0].changes;
1757
+ const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
1758
+ const metadataStorageEntries = metadataStorageResults.length ? metadataStorageResults[0].changes : [];
1755
1759
  const assetByAssetId = lodashEs.keyBy(assetStorageEntries.map(([key, value]) => {
1756
1760
  const [assetId] = assetCodec.keys.dec(key);
1757
1761
  const asset = assetCodec.value.dec(value);
@@ -2899,8 +2903,11 @@ const fetchTokens$4 = async ({
2899
2903
  const metadataCodec = builder.buildStorage("ForeignAssets", "Metadata");
2900
2904
  const [allAssetStorageKeys, allMetadataStorageKeys] = await Promise.all([connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("ForeignAssets", "Asset")]), connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("ForeignAssets", "Metadata")])]);
2901
2905
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
2902
- const assetStorageEntries = assetStorageResults[0].changes;
2903
- const metadataStorageEntries = metadataStorageResults[0].changes;
2906
+
2907
+ // if there is at least one storage entry, the results will be an array with a single object
2908
+ // some networks avec the pallet with no tokens in it, in which case the response will be an empty array
2909
+ const assetStorageEntries = assetStorageResults[0]?.changes ?? [];
2910
+ const metadataStorageEntries = metadataStorageResults[0]?.changes ?? [];
2904
2911
  const assetByOnChainId = lodashEs.keyBy(assetStorageEntries.map(([key, value]) => {
2905
2912
  const [decodedKey] = assetCodec.keys.dec(key);
2906
2913
  const onChainId = scale.papiStringify(decodedKey);
@@ -3241,7 +3248,7 @@ const fetchTokens$3 = async ({
3241
3248
  const assetsCodec = builder.buildStorage("AssetRegistry", "Assets");
3242
3249
  const allAssetStorageKeys = await connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("AssetRegistry", "Assets")]);
3243
3250
  const assetStorageResults = await connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]);
3244
- const assetStorageEntries = assetStorageResults[0].changes;
3251
+ const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
3245
3252
  const configTokenByAssetId = lodashEs.keyBy(tokens, t => t.onChainId);
3246
3253
  return assetStorageEntries.map(([key, value]) => {
3247
3254
  // parse results
@@ -6328,7 +6335,9 @@ class BalancesProvider {
6328
6335
  networkId,
6329
6336
  tokensWithAddresses,
6330
6337
  connector: this.#chainConnectors.evm
6331
- }).pipe(rxjs.map(results => ({
6338
+ }).pipe(rxjs.catchError(() => rxjs.EMPTY),
6339
+ // don't emit, let provider mark balances stale
6340
+ rxjs.map(results => ({
6332
6341
  status: "live",
6333
6342
  // exclude zero balances
6334
6343
  balances: results.success.filter(b => new Balance(b).total.planck > 0n)
@@ -6344,7 +6353,9 @@ class BalancesProvider {
6344
6353
  tokensWithAddresses,
6345
6354
  connector: this.#chainConnectors.substrate,
6346
6355
  miniMetadata: miniMetadata
6347
- }).pipe(rxjs.map(results => ({
6356
+ }).pipe(rxjs.catchError(() => rxjs.EMPTY),
6357
+ // don't emit, let provider mark balances stale
6358
+ rxjs.map(results => ({
6348
6359
  status: "live",
6349
6360
  // exclude zero balances
6350
6361
  balances: results.success.filter(b => new Balance(b).total.planck > 0n)
@@ -6371,7 +6382,20 @@ class BalancesProvider {
6371
6382
  });
6372
6383
  }
6373
6384
  getNetworkMiniMetadatas$(networkId) {
6374
- return this.#chaindataProvider.getNetworkById$(networkId).pipe(rxjs.switchMap(network => chaindataProvider.isNetworkDot(network) && this.#chainConnectors.substrate ? rxjs.from(getSpecVersion(this.#chainConnectors.substrate, networkId)).pipe(rxjs.switchMap(specVersion => this.getMiniMetadatas$(networkId, specVersion))) : rxjs.of([])));
6385
+ return this.#chaindataProvider.getNetworkById$(networkId).pipe(rxjs.switchMap(network => chaindataProvider.isNetworkDot(network) ? this.getNetworkSpecVersion$(networkId).pipe(rxjs.switchMap(specVersion => specVersion === null ? rxjs.of([]) : this.getMiniMetadatas$(networkId, specVersion))) : rxjs.of([])));
6386
+ }
6387
+ getNetworkSpecVersion$(networkId) {
6388
+ return rxjs.from(viem.withRetry(async () => {
6389
+ if (!this.#chainConnectors.substrate) return null;
6390
+ return await getSpecVersion(this.#chainConnectors.substrate, networkId);
6391
+ }, {
6392
+ delay: 2_000
6393
+ })).pipe(rxjs.catchError(() => {
6394
+ log.warn("Failed to fetch spec version for network", {
6395
+ networkId
6396
+ });
6397
+ return rxjs.of(null);
6398
+ }));
6375
6399
  }
6376
6400
  getMiniMetadatas$(networkId, specVersion) {
6377
6401
  const miniMetadataIds = BALANCE_MODULES.filter(mod => mod.platform === "polkadot").map(mod => deriveMiniMetadataId({
@@ -5,7 +5,7 @@ import { parseAbi, erc20Abi, getContract, ContractFunctionExecutionError, hexToS
5
5
  import { assign, omit, isEqual, keyBy, keys, uniq, fromPairs, values, toPairs } from 'lodash-es';
6
6
  import z from 'zod/v4';
7
7
  import anylogger from 'anylogger';
8
- import { of, Observable, distinctUntilChanged, map, timer, switchMap, from, firstValueFrom, combineLatest, BehaviorSubject, shareReplay, startWith, filter, tap } from 'rxjs';
8
+ import { of, Observable, distinctUntilChanged, map, timer, switchMap, from, firstValueFrom, combineLatest, BehaviorSubject, shareReplay, startWith, filter, catchError, EMPTY, tap } from 'rxjs';
9
9
  import { parseMetadataRpc, toHex, unifyMetadata, decAnyMetadata, getDynamicBuilder, getLookupFn, decodeScale, getStorageKeyPrefix, Twox128, compactMetadata, encodeMetadata, papiParse, papiStringify } from '@talismn/scale';
10
10
  import { newTokenRates } from '@talismn/token-rates';
11
11
  import BigNumber from 'bignumber.js';
@@ -612,6 +612,10 @@ const getBalanceDefs = addressesByToken => {
612
612
  })));
613
613
  };
614
614
 
615
+ // esponse of getStorageAt queries:
616
+ // if there is at least one storage entry, the results will be an array with a single object
617
+ // if the storage has no entries in it (ex: Assets on ewx or moonbeam), the response will be an empty array
618
+
615
619
  const fetchBalances$8 = async ({
616
620
  networkId,
617
621
  tokensWithAddresses,
@@ -1493,7 +1497,7 @@ const decodeRpcQueryPack = (queries, result) => {
1493
1497
  decodeResult
1494
1498
  }) => {
1495
1499
  const changes = stateKeys.map(stateKey => {
1496
- if (!stateKey) return null;
1500
+ if (!stateKey || !result) return null;
1497
1501
  const change = result.changes.find(([key]) => key === stateKey);
1498
1502
  if (!change) return null;
1499
1503
  return change[1];
@@ -1741,8 +1745,8 @@ const fetchTokens$5 = async ({
1741
1745
  const metadataCodec = builder.buildStorage("Assets", "Metadata");
1742
1746
  const [allAssetStorageKeys, allMetadataStorageKeys] = await Promise.all([connector.send(networkId, "state_getKeys", [getStorageKeyPrefix("Assets", "Asset")]), connector.send(networkId, "state_getKeys", [getStorageKeyPrefix("Assets", "Metadata")])]);
1743
1747
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
1744
- const assetStorageEntries = assetStorageResults[0].changes;
1745
- const metadataStorageEntries = metadataStorageResults[0].changes;
1748
+ const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
1749
+ const metadataStorageEntries = metadataStorageResults.length ? metadataStorageResults[0].changes : [];
1746
1750
  const assetByAssetId = keyBy(assetStorageEntries.map(([key, value]) => {
1747
1751
  const [assetId] = assetCodec.keys.dec(key);
1748
1752
  const asset = assetCodec.value.dec(value);
@@ -2890,8 +2894,11 @@ const fetchTokens$4 = async ({
2890
2894
  const metadataCodec = builder.buildStorage("ForeignAssets", "Metadata");
2891
2895
  const [allAssetStorageKeys, allMetadataStorageKeys] = await Promise.all([connector.send(networkId, "state_getKeys", [getStorageKeyPrefix("ForeignAssets", "Asset")]), connector.send(networkId, "state_getKeys", [getStorageKeyPrefix("ForeignAssets", "Metadata")])]);
2892
2896
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
2893
- const assetStorageEntries = assetStorageResults[0].changes;
2894
- const metadataStorageEntries = metadataStorageResults[0].changes;
2897
+
2898
+ // if there is at least one storage entry, the results will be an array with a single object
2899
+ // some networks avec the pallet with no tokens in it, in which case the response will be an empty array
2900
+ const assetStorageEntries = assetStorageResults[0]?.changes ?? [];
2901
+ const metadataStorageEntries = metadataStorageResults[0]?.changes ?? [];
2895
2902
  const assetByOnChainId = keyBy(assetStorageEntries.map(([key, value]) => {
2896
2903
  const [decodedKey] = assetCodec.keys.dec(key);
2897
2904
  const onChainId = papiStringify(decodedKey);
@@ -3232,7 +3239,7 @@ const fetchTokens$3 = async ({
3232
3239
  const assetsCodec = builder.buildStorage("AssetRegistry", "Assets");
3233
3240
  const allAssetStorageKeys = await connector.send(networkId, "state_getKeys", [getStorageKeyPrefix("AssetRegistry", "Assets")]);
3234
3241
  const assetStorageResults = await connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]);
3235
- const assetStorageEntries = assetStorageResults[0].changes;
3242
+ const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
3236
3243
  const configTokenByAssetId = keyBy(tokens, t => t.onChainId);
3237
3244
  return assetStorageEntries.map(([key, value]) => {
3238
3245
  // parse results
@@ -6319,7 +6326,9 @@ class BalancesProvider {
6319
6326
  networkId,
6320
6327
  tokensWithAddresses,
6321
6328
  connector: this.#chainConnectors.evm
6322
- }).pipe(map(results => ({
6329
+ }).pipe(catchError(() => EMPTY),
6330
+ // don't emit, let provider mark balances stale
6331
+ map(results => ({
6323
6332
  status: "live",
6324
6333
  // exclude zero balances
6325
6334
  balances: results.success.filter(b => new Balance(b).total.planck > 0n)
@@ -6335,7 +6344,9 @@ class BalancesProvider {
6335
6344
  tokensWithAddresses,
6336
6345
  connector: this.#chainConnectors.substrate,
6337
6346
  miniMetadata: miniMetadata
6338
- }).pipe(map(results => ({
6347
+ }).pipe(catchError(() => EMPTY),
6348
+ // don't emit, let provider mark balances stale
6349
+ map(results => ({
6339
6350
  status: "live",
6340
6351
  // exclude zero balances
6341
6352
  balances: results.success.filter(b => new Balance(b).total.planck > 0n)
@@ -6362,7 +6373,20 @@ class BalancesProvider {
6362
6373
  });
6363
6374
  }
6364
6375
  getNetworkMiniMetadatas$(networkId) {
6365
- return this.#chaindataProvider.getNetworkById$(networkId).pipe(switchMap(network => isNetworkDot(network) && this.#chainConnectors.substrate ? from(getSpecVersion(this.#chainConnectors.substrate, networkId)).pipe(switchMap(specVersion => this.getMiniMetadatas$(networkId, specVersion))) : of([])));
6376
+ return this.#chaindataProvider.getNetworkById$(networkId).pipe(switchMap(network => isNetworkDot(network) ? this.getNetworkSpecVersion$(networkId).pipe(switchMap(specVersion => specVersion === null ? of([]) : this.getMiniMetadatas$(networkId, specVersion))) : of([])));
6377
+ }
6378
+ getNetworkSpecVersion$(networkId) {
6379
+ return from(withRetry(async () => {
6380
+ if (!this.#chainConnectors.substrate) return null;
6381
+ return await getSpecVersion(this.#chainConnectors.substrate, networkId);
6382
+ }, {
6383
+ delay: 2_000
6384
+ })).pipe(catchError(() => {
6385
+ log.warn("Failed to fetch spec version for network", {
6386
+ networkId
6387
+ });
6388
+ return of(null);
6389
+ }));
6366
6390
  }
6367
6391
  getMiniMetadatas$(networkId, specVersion) {
6368
6392
  const miniMetadataIds = BALANCE_MODULES.filter(mod => mod.platform === "polkadot").map(mod => deriveMiniMetadataId({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talismn/balances",
3
- "version": "0.0.0-pr2075-20250711045153",
3
+ "version": "0.0.0-pr2075-20250711073805",
4
4
  "author": "Talisman",
5
5
  "homepage": "https://talisman.xyz",
6
6
  "license": "GPL-3.0-or-later",
@@ -34,13 +34,13 @@
34
34
  "scale-ts": "^1.6.1",
35
35
  "viem": "^2.27.3",
36
36
  "zod": "^3.25.62",
37
- "@talismn/chain-connector": "0.0.0-pr2075-20250711045153",
38
- "@talismn/chain-connector-evm": "0.0.0-pr2075-20250711045153",
39
- "@talismn/chaindata-provider": "0.0.0-pr2075-20250711045153",
40
- "@talismn/sapi": "0.0.0-pr2075-20250711045153",
41
- "@talismn/scale": "0.0.0-pr2075-20250711045153",
42
- "@talismn/token-rates": "0.0.0-pr2075-20250711045153",
43
- "@talismn/util": "0.0.0-pr2075-20250711045153"
37
+ "@talismn/chain-connector": "0.0.0-pr2075-20250711073805",
38
+ "@talismn/chain-connector-evm": "0.0.0-pr2075-20250711073805",
39
+ "@talismn/scale": "0.0.0-pr2075-20250711073805",
40
+ "@talismn/sapi": "0.0.0-pr2075-20250711073805",
41
+ "@talismn/chaindata-provider": "0.0.0-pr2075-20250711073805",
42
+ "@talismn/token-rates": "0.0.0-pr2075-20250711073805",
43
+ "@talismn/util": "0.0.0-pr2075-20250711073805"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@polkadot/api-contract": "16.1.2",
@@ -55,8 +55,8 @@
55
55
  "jest": "^29.7.0",
56
56
  "ts-jest": "^29.2.5",
57
57
  "typescript": "^5.6.3",
58
- "@talismn/tsconfig": "0.0.2",
59
- "@talismn/eslint-config": "0.0.3"
58
+ "@talismn/eslint-config": "0.0.3",
59
+ "@talismn/tsconfig": "0.0.2"
60
60
  },
61
61
  "peerDependencies": {
62
62
  "@polkadot/api-contract": "*",