@talismn/balances 0.0.0-pr2075-20250711045153 → 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);
|
@@ -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
|
-
|
2903
|
-
|
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
|
@@ -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
|
-
|
2903
|
-
|
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
|
@@ -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
|
-
|
2894
|
-
|
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
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@talismn/balances",
|
3
|
-
"version": "0.0.0-pr2075-
|
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-
|
38
|
-
"@talismn/chain-connector-evm": "0.0.0-pr2075-
|
39
|
-
"@talismn/
|
40
|
-
"@talismn/
|
41
|
-
"@talismn/scale": "0.0.0-pr2075-
|
42
|
-
"@talismn/token-rates": "0.0.0-pr2075-
|
43
|
-
"@talismn/util": "0.0.0-pr2075-
|
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",
|
@@ -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/
|
59
|
-
"@talismn/
|
58
|
+
"@talismn/eslint-config": "0.0.3",
|
59
|
+
"@talismn/tsconfig": "0.0.2"
|
60
60
|
},
|
61
61
|
"peerDependencies": {
|
62
62
|
"@polkadot/api-contract": "*",
|