@talismn/balances 0.0.0-pr2075-20250710142256 → 0.0.0-pr2075-20250711064604

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.
@@ -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);
@@ -1801,7 +1805,8 @@ const fetchTokens$5 = async ({
1801
1805
  // validate results
1802
1806
  .filter(t => {
1803
1807
  const parsed = chaindataProvider.SubAssetsTokenSchema.safeParse(t);
1804
- if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$5}`, t);
1808
+ // if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE}`, t)
1809
+
1805
1810
  return parsed.success;
1806
1811
  });
1807
1812
  };
@@ -2580,11 +2585,7 @@ const getMiniMetadata$5 = ({
2580
2585
  const source = MODULE_TYPE$5;
2581
2586
  const chainId = networkId;
2582
2587
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
2583
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
2584
- networkId,
2585
- specVersion,
2586
- systemVersion
2587
- });
2588
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
2588
2589
  const id = deriveMiniMetadataId({
2589
2590
  source,
2590
2591
  chainId,
@@ -2902,8 +2903,11 @@ const fetchTokens$4 = async ({
2902
2903
  const metadataCodec = builder.buildStorage("ForeignAssets", "Metadata");
2903
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")])]);
2904
2905
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
2905
- const assetStorageEntries = assetStorageResults[0].changes;
2906
- 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 ?? [];
2907
2911
  const assetByOnChainId = lodashEs.keyBy(assetStorageEntries.map(([key, value]) => {
2908
2912
  const [decodedKey] = assetCodec.keys.dec(key);
2909
2913
  const onChainId = scale.papiStringify(decodedKey);
@@ -2955,7 +2959,8 @@ const fetchTokens$4 = async ({
2955
2959
  // validate results
2956
2960
  .filter(t => {
2957
2961
  const parsed = chaindataProvider.SubForeignAssetsTokenSchema.safeParse(t);
2958
- if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$4}`, t);
2962
+ // if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE}`, t)
2963
+
2959
2964
  return parsed.success;
2960
2965
  });
2961
2966
  };
@@ -2968,11 +2973,7 @@ const getMiniMetadata$4 = ({
2968
2973
  const source = MODULE_TYPE$4;
2969
2974
  const chainId = networkId;
2970
2975
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
2971
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
2972
- networkId,
2973
- specVersion,
2974
- systemVersion
2975
- });
2976
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
2976
2977
  const id = deriveMiniMetadataId({
2977
2978
  source,
2978
2979
  chainId,
@@ -3247,7 +3248,7 @@ const fetchTokens$3 = async ({
3247
3248
  const assetsCodec = builder.buildStorage("AssetRegistry", "Assets");
3248
3249
  const allAssetStorageKeys = await connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("AssetRegistry", "Assets")]);
3249
3250
  const assetStorageResults = await connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]);
3250
- const assetStorageEntries = assetStorageResults[0].changes;
3251
+ const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
3251
3252
  const configTokenByAssetId = lodashEs.keyBy(tokens, t => t.onChainId);
3252
3253
  return assetStorageEntries.map(([key, value]) => {
3253
3254
  // parse results
@@ -3292,7 +3293,8 @@ const fetchTokens$3 = async ({
3292
3293
  // validate results
3293
3294
  .filter(t => {
3294
3295
  const parsed = chaindataProvider.SubHydrationTokenSchema.safeParse(t);
3295
- if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$3}`, t);
3296
+ // if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE}`, t)
3297
+
3296
3298
  return parsed.success;
3297
3299
  });
3298
3300
  };
@@ -3305,11 +3307,7 @@ const getMiniMetadata$3 = ({
3305
3307
  const source = MODULE_TYPE$3;
3306
3308
  const chainId = networkId;
3307
3309
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
3308
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
3309
- networkId,
3310
- specVersion,
3311
- systemVersion
3312
- });
3310
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
3313
3311
  const id = deriveMiniMetadataId({
3314
3312
  source,
3315
3313
  chainId,
@@ -4074,7 +4072,7 @@ const fetchTokens$2 = async ({
4074
4072
  const token = lodashEs.assign(nativeToken, tokenConfig);
4075
4073
  const parsed = chaindataProvider.SubNativeTokenSchema.safeParse(token);
4076
4074
  if (!parsed.success) {
4077
- log.warn(`Ignoring invalid token ${MODULE_TYPE$2}`, token, parsed.error);
4075
+ // log.warn(`Ignoring invalid token ${MODULE_TYPE}`, token, parsed.error)
4078
4076
  return [];
4079
4077
  }
4080
4078
  return [parsed.data];
@@ -4105,11 +4103,7 @@ const getMiniMetadata$2 = ({
4105
4103
  const source = MODULE_TYPE$2;
4106
4104
  const chainId = networkId;
4107
4105
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
4108
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
4109
- networkId,
4110
- specVersion,
4111
- systemVersion
4112
- });
4106
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
4113
4107
  const id = deriveMiniMetadataId({
4114
4108
  source,
4115
4109
  chainId,
@@ -5604,7 +5598,8 @@ const fetchTokens$1 = async ({
5604
5598
  }
5605
5599
  return lodashEs.values(tokenList).filter(t => {
5606
5600
  const parsed = chaindataProvider.SubPsp22TokenSchema.safeParse(t);
5607
- if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$1}`, t);
5601
+ // if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE}`, t)
5602
+
5608
5603
  return parsed.success;
5609
5604
  });
5610
5605
  };
@@ -5617,11 +5612,7 @@ const getMiniMetadata$1 = ({
5617
5612
  const source = MODULE_TYPE$1;
5618
5613
  const chainId = networkId;
5619
5614
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
5620
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
5621
- networkId,
5622
- specVersion,
5623
- systemVersion
5624
- });
5615
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
5625
5616
  const id = deriveMiniMetadataId({
5626
5617
  source,
5627
5618
  chainId,
@@ -5920,11 +5911,7 @@ const getMiniMetadata = ({
5920
5911
  const source = MODULE_TYPE;
5921
5912
  const chainId = networkId;
5922
5913
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
5923
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
5924
- networkId,
5925
- specVersion,
5926
- systemVersion
5927
- });
5914
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
5928
5915
  const id = deriveMiniMetadataId({
5929
5916
  source,
5930
5917
  chainId,
@@ -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);
@@ -1801,7 +1805,8 @@ const fetchTokens$5 = async ({
1801
1805
  // validate results
1802
1806
  .filter(t => {
1803
1807
  const parsed = chaindataProvider.SubAssetsTokenSchema.safeParse(t);
1804
- if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$5}`, t);
1808
+ // if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE}`, t)
1809
+
1805
1810
  return parsed.success;
1806
1811
  });
1807
1812
  };
@@ -2580,11 +2585,7 @@ const getMiniMetadata$5 = ({
2580
2585
  const source = MODULE_TYPE$5;
2581
2586
  const chainId = networkId;
2582
2587
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
2583
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
2584
- networkId,
2585
- specVersion,
2586
- systemVersion
2587
- });
2588
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
2588
2589
  const id = deriveMiniMetadataId({
2589
2590
  source,
2590
2591
  chainId,
@@ -2902,8 +2903,11 @@ const fetchTokens$4 = async ({
2902
2903
  const metadataCodec = builder.buildStorage("ForeignAssets", "Metadata");
2903
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")])]);
2904
2905
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
2905
- const assetStorageEntries = assetStorageResults[0].changes;
2906
- 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 ?? [];
2907
2911
  const assetByOnChainId = lodashEs.keyBy(assetStorageEntries.map(([key, value]) => {
2908
2912
  const [decodedKey] = assetCodec.keys.dec(key);
2909
2913
  const onChainId = scale.papiStringify(decodedKey);
@@ -2955,7 +2959,8 @@ const fetchTokens$4 = async ({
2955
2959
  // validate results
2956
2960
  .filter(t => {
2957
2961
  const parsed = chaindataProvider.SubForeignAssetsTokenSchema.safeParse(t);
2958
- if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$4}`, t);
2962
+ // if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE}`, t)
2963
+
2959
2964
  return parsed.success;
2960
2965
  });
2961
2966
  };
@@ -2968,11 +2973,7 @@ const getMiniMetadata$4 = ({
2968
2973
  const source = MODULE_TYPE$4;
2969
2974
  const chainId = networkId;
2970
2975
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
2971
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
2972
- networkId,
2973
- specVersion,
2974
- systemVersion
2975
- });
2976
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
2976
2977
  const id = deriveMiniMetadataId({
2977
2978
  source,
2978
2979
  chainId,
@@ -3247,7 +3248,7 @@ const fetchTokens$3 = async ({
3247
3248
  const assetsCodec = builder.buildStorage("AssetRegistry", "Assets");
3248
3249
  const allAssetStorageKeys = await connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("AssetRegistry", "Assets")]);
3249
3250
  const assetStorageResults = await connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]);
3250
- const assetStorageEntries = assetStorageResults[0].changes;
3251
+ const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
3251
3252
  const configTokenByAssetId = lodashEs.keyBy(tokens, t => t.onChainId);
3252
3253
  return assetStorageEntries.map(([key, value]) => {
3253
3254
  // parse results
@@ -3292,7 +3293,8 @@ const fetchTokens$3 = async ({
3292
3293
  // validate results
3293
3294
  .filter(t => {
3294
3295
  const parsed = chaindataProvider.SubHydrationTokenSchema.safeParse(t);
3295
- if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$3}`, t);
3296
+ // if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE}`, t)
3297
+
3296
3298
  return parsed.success;
3297
3299
  });
3298
3300
  };
@@ -3305,11 +3307,7 @@ const getMiniMetadata$3 = ({
3305
3307
  const source = MODULE_TYPE$3;
3306
3308
  const chainId = networkId;
3307
3309
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
3308
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
3309
- networkId,
3310
- specVersion,
3311
- systemVersion
3312
- });
3310
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
3313
3311
  const id = deriveMiniMetadataId({
3314
3312
  source,
3315
3313
  chainId,
@@ -4074,7 +4072,7 @@ const fetchTokens$2 = async ({
4074
4072
  const token = lodashEs.assign(nativeToken, tokenConfig);
4075
4073
  const parsed = chaindataProvider.SubNativeTokenSchema.safeParse(token);
4076
4074
  if (!parsed.success) {
4077
- log.warn(`Ignoring invalid token ${MODULE_TYPE$2}`, token, parsed.error);
4075
+ // log.warn(`Ignoring invalid token ${MODULE_TYPE}`, token, parsed.error)
4078
4076
  return [];
4079
4077
  }
4080
4078
  return [parsed.data];
@@ -4105,11 +4103,7 @@ const getMiniMetadata$2 = ({
4105
4103
  const source = MODULE_TYPE$2;
4106
4104
  const chainId = networkId;
4107
4105
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
4108
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
4109
- networkId,
4110
- specVersion,
4111
- systemVersion
4112
- });
4106
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
4113
4107
  const id = deriveMiniMetadataId({
4114
4108
  source,
4115
4109
  chainId,
@@ -5604,7 +5598,8 @@ const fetchTokens$1 = async ({
5604
5598
  }
5605
5599
  return lodashEs.values(tokenList).filter(t => {
5606
5600
  const parsed = chaindataProvider.SubPsp22TokenSchema.safeParse(t);
5607
- if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$1}`, t);
5601
+ // if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE}`, t)
5602
+
5608
5603
  return parsed.success;
5609
5604
  });
5610
5605
  };
@@ -5617,11 +5612,7 @@ const getMiniMetadata$1 = ({
5617
5612
  const source = MODULE_TYPE$1;
5618
5613
  const chainId = networkId;
5619
5614
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
5620
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
5621
- networkId,
5622
- specVersion,
5623
- systemVersion
5624
- });
5615
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
5625
5616
  const id = deriveMiniMetadataId({
5626
5617
  source,
5627
5618
  chainId,
@@ -5920,11 +5911,7 @@ const getMiniMetadata = ({
5920
5911
  const source = MODULE_TYPE;
5921
5912
  const chainId = networkId;
5922
5913
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
5923
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
5924
- networkId,
5925
- specVersion,
5926
- systemVersion
5927
- });
5914
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
5928
5915
  const id = deriveMiniMetadataId({
5929
5916
  source,
5930
5917
  chainId,
@@ -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);
@@ -1792,7 +1796,8 @@ const fetchTokens$5 = async ({
1792
1796
  // validate results
1793
1797
  .filter(t => {
1794
1798
  const parsed = SubAssetsTokenSchema.safeParse(t);
1795
- if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$5}`, t);
1799
+ // if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE}`, t)
1800
+
1796
1801
  return parsed.success;
1797
1802
  });
1798
1803
  };
@@ -2571,11 +2576,7 @@ const getMiniMetadata$5 = ({
2571
2576
  const source = MODULE_TYPE$5;
2572
2577
  const chainId = networkId;
2573
2578
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
2574
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
2575
- networkId,
2576
- specVersion,
2577
- systemVersion
2578
- });
2579
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
2579
2580
  const id = deriveMiniMetadataId({
2580
2581
  source,
2581
2582
  chainId,
@@ -2893,8 +2894,11 @@ const fetchTokens$4 = async ({
2893
2894
  const metadataCodec = builder.buildStorage("ForeignAssets", "Metadata");
2894
2895
  const [allAssetStorageKeys, allMetadataStorageKeys] = await Promise.all([connector.send(networkId, "state_getKeys", [getStorageKeyPrefix("ForeignAssets", "Asset")]), connector.send(networkId, "state_getKeys", [getStorageKeyPrefix("ForeignAssets", "Metadata")])]);
2895
2896
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
2896
- const assetStorageEntries = assetStorageResults[0].changes;
2897
- 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 ?? [];
2898
2902
  const assetByOnChainId = keyBy(assetStorageEntries.map(([key, value]) => {
2899
2903
  const [decodedKey] = assetCodec.keys.dec(key);
2900
2904
  const onChainId = papiStringify(decodedKey);
@@ -2946,7 +2950,8 @@ const fetchTokens$4 = async ({
2946
2950
  // validate results
2947
2951
  .filter(t => {
2948
2952
  const parsed = SubForeignAssetsTokenSchema.safeParse(t);
2949
- if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$4}`, t);
2953
+ // if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE}`, t)
2954
+
2950
2955
  return parsed.success;
2951
2956
  });
2952
2957
  };
@@ -2959,11 +2964,7 @@ const getMiniMetadata$4 = ({
2959
2964
  const source = MODULE_TYPE$4;
2960
2965
  const chainId = networkId;
2961
2966
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
2962
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
2963
- networkId,
2964
- specVersion,
2965
- systemVersion
2966
- });
2967
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
2967
2968
  const id = deriveMiniMetadataId({
2968
2969
  source,
2969
2970
  chainId,
@@ -3238,7 +3239,7 @@ const fetchTokens$3 = async ({
3238
3239
  const assetsCodec = builder.buildStorage("AssetRegistry", "Assets");
3239
3240
  const allAssetStorageKeys = await connector.send(networkId, "state_getKeys", [getStorageKeyPrefix("AssetRegistry", "Assets")]);
3240
3241
  const assetStorageResults = await connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]);
3241
- const assetStorageEntries = assetStorageResults[0].changes;
3242
+ const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
3242
3243
  const configTokenByAssetId = keyBy(tokens, t => t.onChainId);
3243
3244
  return assetStorageEntries.map(([key, value]) => {
3244
3245
  // parse results
@@ -3283,7 +3284,8 @@ const fetchTokens$3 = async ({
3283
3284
  // validate results
3284
3285
  .filter(t => {
3285
3286
  const parsed = SubHydrationTokenSchema.safeParse(t);
3286
- if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$3}`, t);
3287
+ // if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE}`, t)
3288
+
3287
3289
  return parsed.success;
3288
3290
  });
3289
3291
  };
@@ -3296,11 +3298,7 @@ const getMiniMetadata$3 = ({
3296
3298
  const source = MODULE_TYPE$3;
3297
3299
  const chainId = networkId;
3298
3300
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
3299
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
3300
- networkId,
3301
- specVersion,
3302
- systemVersion
3303
- });
3301
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
3304
3302
  const id = deriveMiniMetadataId({
3305
3303
  source,
3306
3304
  chainId,
@@ -4065,7 +4063,7 @@ const fetchTokens$2 = async ({
4065
4063
  const token = assign(nativeToken, tokenConfig);
4066
4064
  const parsed = SubNativeTokenSchema.safeParse(token);
4067
4065
  if (!parsed.success) {
4068
- log.warn(`Ignoring invalid token ${MODULE_TYPE$2}`, token, parsed.error);
4066
+ // log.warn(`Ignoring invalid token ${MODULE_TYPE}`, token, parsed.error)
4069
4067
  return [];
4070
4068
  }
4071
4069
  return [parsed.data];
@@ -4096,11 +4094,7 @@ const getMiniMetadata$2 = ({
4096
4094
  const source = MODULE_TYPE$2;
4097
4095
  const chainId = networkId;
4098
4096
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
4099
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
4100
- networkId,
4101
- specVersion,
4102
- systemVersion
4103
- });
4097
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
4104
4098
  const id = deriveMiniMetadataId({
4105
4099
  source,
4106
4100
  chainId,
@@ -5595,7 +5589,8 @@ const fetchTokens$1 = async ({
5595
5589
  }
5596
5590
  return values(tokenList).filter(t => {
5597
5591
  const parsed = SubPsp22TokenSchema.safeParse(t);
5598
- if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$1}`, t);
5592
+ // if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE}`, t)
5593
+
5599
5594
  return parsed.success;
5600
5595
  });
5601
5596
  };
@@ -5608,11 +5603,7 @@ const getMiniMetadata$1 = ({
5608
5603
  const source = MODULE_TYPE$1;
5609
5604
  const chainId = networkId;
5610
5605
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
5611
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
5612
- networkId,
5613
- specVersion,
5614
- systemVersion
5615
- });
5606
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
5616
5607
  const id = deriveMiniMetadataId({
5617
5608
  source,
5618
5609
  chainId,
@@ -5911,11 +5902,7 @@ const getMiniMetadata = ({
5911
5902
  const source = MODULE_TYPE;
5912
5903
  const chainId = networkId;
5913
5904
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
5914
- if (specVersion !== systemVersion.spec_version) log.warn("specVersion mismatch", {
5915
- networkId,
5916
- specVersion,
5917
- systemVersion
5918
- });
5905
+ if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
5919
5906
  const id = deriveMiniMetadataId({
5920
5907
  source,
5921
5908
  chainId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talismn/balances",
3
- "version": "0.0.0-pr2075-20250710142256",
3
+ "version": "0.0.0-pr2075-20250711064604",
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-20250710142256",
38
- "@talismn/chain-connector-evm": "0.0.0-pr2075-20250710142256",
39
- "@talismn/chaindata-provider": "0.0.0-pr2075-20250710142256",
40
- "@talismn/sapi": "0.0.0-pr2075-20250710142256",
41
- "@talismn/token-rates": "0.0.0-pr2075-20250710142256",
42
- "@talismn/util": "0.0.0-pr2075-20250710142256",
43
- "@talismn/scale": "0.0.0-pr2075-20250710142256"
37
+ "@talismn/chain-connector": "0.0.0-pr2075-20250711064604",
38
+ "@talismn/chain-connector-evm": "0.0.0-pr2075-20250711064604",
39
+ "@talismn/sapi": "0.0.0-pr2075-20250711064604",
40
+ "@talismn/chaindata-provider": "0.0.0-pr2075-20250711064604",
41
+ "@talismn/scale": "0.0.0-pr2075-20250711064604",
42
+ "@talismn/token-rates": "0.0.0-pr2075-20250711064604",
43
+ "@talismn/util": "0.0.0-pr2075-20250711064604"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@polkadot/api-contract": "16.1.2",