@talismn/balances 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -81,7 +81,9 @@ __export(index_exports, {
81
81
  excludeFromTransferableAmount: () => excludeFromTransferableAmount,
82
82
  filterBaseLocks: () => filterBaseLocks,
83
83
  filterMirrorTokens: () => filterMirrorTokens,
84
+ findDTaoConvictionLock: () => findDTaoConvictionLock,
84
85
  getBalanceId: () => getBalanceId,
86
+ getConvictionLockLabel: () => getConvictionLockLabel,
85
87
  getDTaoTokenRates: () => getDTaoTokenRates,
86
88
  getLockTitle: () => getLockTitle,
87
89
  getLockedType: () => getLockedType,
@@ -89,14 +91,20 @@ __export(index_exports, {
89
91
  getValueId: () => getValueId,
90
92
  includeInTotalExtraAmount: () => includeInTotalExtraAmount,
91
93
  taoToAlpha: () => taoToAlpha,
94
+ taoToAlphaCeil: () => taoToAlphaCeil,
92
95
  uniswapV2PairAbi: () => uniswapV2PairAbi
93
96
  });
94
97
  module.exports = __toCommonJS(index_exports);
95
98
 
99
+ // src/configureBigNumber.ts
100
+ var import_bignumber = __toESM(require("bignumber.js"));
101
+ import_bignumber.default.set({ STRICT: false });
102
+ var configureBigNumber_default = import_bignumber.default;
103
+
96
104
  // src/BalancesProvider.ts
97
105
  var import_chaindata_provider71 = require("@talismn/chaindata-provider");
98
106
  var import_crypto8 = require("@talismn/crypto");
99
- var import_util15 = require("@talismn/util");
107
+ var import_util17 = require("@talismn/util");
100
108
  var import_lodash_es30 = require("lodash-es");
101
109
  var import_rxjs16 = require("rxjs");
102
110
  var import_viem9 = require("viem");
@@ -110,7 +118,7 @@ var import_anylogger = __toESM(require("anylogger"));
110
118
  // package.json
111
119
  var package_default = {
112
120
  name: "@talismn/balances",
113
- version: "1.4.0",
121
+ version: "1.5.0",
114
122
  author: "Talisman",
115
123
  homepage: "https://talisman.xyz",
116
124
  license: "GPL-3.0-or-later",
@@ -138,9 +146,9 @@ var package_default = {
138
146
  },
139
147
  dependencies: {
140
148
  "@metaplex-foundation/mpl-token-metadata": "^3.4.0",
141
- "@metaplex-foundation/umi": "^1.2.0",
149
+ "@metaplex-foundation/umi": "^1.5.1",
142
150
  "@polkadot-api/utils": "0.2.0",
143
- "@solana/spl-token": "^0.4.13",
151
+ "@solana/spl-token": "^0.4.14",
144
152
  "@solana/web3.js": "^1.98.2",
145
153
  "@talismn/chain-connectors": "workspace:*",
146
154
  "@talismn/chaindata-provider": "workspace:*",
@@ -150,21 +158,22 @@ var package_default = {
150
158
  "@talismn/token-rates": "workspace:*",
151
159
  "@talismn/util": "workspace:*",
152
160
  anylogger: "^1.0.11",
153
- "bignumber.js": "^9.1.2",
154
- "lodash-es": "4.17.21",
161
+ "bignumber.js": "^11.1.3",
162
+ "lodash-es": "4.18.1",
155
163
  "p-queue": "8.1.0",
156
164
  "polkadot-api": "1.23.3",
157
- rxjs: "^7.8.1",
165
+ rxjs: "^7.8.2",
158
166
  "scale-ts": "^1.6.1",
159
- viem: "^2.27.3",
160
- zod: "^3.25.76"
167
+ viem: "2.52.2",
168
+ zod: "^4.4.3"
161
169
  },
162
170
  devDependencies: {
163
171
  "@polkadot/api-contract": "16.1.2",
164
172
  "@polkadot/types": "16.1.2",
165
173
  "@talismn/tsconfig": "workspace:*",
166
174
  "@types/lodash-es": "4.17.12",
167
- typescript: "^5.6.3"
175
+ "@types/node": "^24.5.1",
176
+ typescript: "^6.0.3"
168
177
  },
169
178
  peerDependencies: {
170
179
  "@polkadot/api-contract": "*",
@@ -1088,6 +1097,7 @@ var import_lodash_es = require("lodash-es");
1088
1097
  var import_v4 = __toESM(require("zod/v4"));
1089
1098
 
1090
1099
  // src/modules/evm-erc20/utils.ts
1100
+ var import_util = require("@talismn/util");
1091
1101
  var import_viem4 = require("viem");
1092
1102
  var getErc20ContractData = async (client, contractAddress) => {
1093
1103
  try {
@@ -1098,7 +1108,7 @@ var getErc20ContractData = async (client, contractAddress) => {
1098
1108
  contract.read.name()
1099
1109
  ]);
1100
1110
  } catch (e) {
1101
- if (e instanceof import_viem4.ContractFunctionExecutionError) {
1111
+ if ((0, import_util.isErrorOfName)(e, "ContractFunctionExecutionError")) {
1102
1112
  const contract = getTypedContract(client, import_viem4.erc20Abi_bytes32, contractAddress);
1103
1113
  var [bytesSymbol, decimals, nameSymbol] = await Promise.all([
1104
1114
  contract.read.symbol(),
@@ -1315,21 +1325,30 @@ var fetchBalances2 = async ({
1315
1325
  }
1316
1326
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
1317
1327
  if (client.chain?.contracts?.multicall3 && balanceDefs.length > 1) {
1318
- const multicall3 = client.chain.contracts.multicall3;
1319
- return fetchWithMulticall(client, balanceDefs, multicall3.address);
1328
+ try {
1329
+ return await fetchWithMulticall(
1330
+ client,
1331
+ balanceDefs,
1332
+ client.chain.contracts.multicall3.address
1333
+ );
1334
+ } catch {
1335
+ }
1320
1336
  }
1321
- return fetchWithoutMulticall(client, balanceDefs);
1337
+ return fetchWithGetBalance(client, balanceDefs);
1322
1338
  };
1323
- var fetchWithoutMulticall = async (client, balanceDefs) => {
1339
+ var fetchWithGetBalance = async (client, balanceDefs) => {
1324
1340
  if (balanceDefs.length === 0) return { success: [], errors: [] };
1325
1341
  const results = await Promise.allSettled(
1326
1342
  balanceDefs.map(async ({ token, address }) => {
1327
1343
  try {
1328
- const result = await client.getBalance({ address });
1344
+ const result = await client.request({
1345
+ method: "eth_getBalance",
1346
+ params: [address, "latest"]
1347
+ });
1329
1348
  const balance = {
1330
1349
  address,
1331
1350
  tokenId: token.id,
1332
- value: result.toString(),
1351
+ value: BigInt(result).toString(),
1333
1352
  source: MODULE_TYPE2,
1334
1353
  networkId: (0, import_chaindata_provider8.parseTokenId)(token.id).networkId,
1335
1354
  status: "live"
@@ -1363,55 +1382,28 @@ var fetchWithoutMulticall = async (client, balanceDefs) => {
1363
1382
  };
1364
1383
  var fetchWithMulticall = async (client, balanceDefs, multicall3Address) => {
1365
1384
  if (balanceDefs.length === 0) return { success: [], errors: [] };
1366
- try {
1367
- const callResults = await client.multicall({
1368
- contracts: balanceDefs.map(({ address }) => ({
1369
- address: multicall3Address,
1370
- abi: abiMulticall,
1371
- functionName: "getEthBalance",
1372
- args: [address]
1373
- }))
1374
- });
1375
- return callResults.reduce(
1376
- (acc, result, index) => {
1377
- if (result.status === "success") {
1378
- acc.success.push({
1379
- address: balanceDefs[index].address,
1380
- tokenId: balanceDefs[index].token.id,
1381
- value: result.result.toString(),
1382
- source: MODULE_TYPE2,
1383
- networkId: (0, import_chaindata_provider8.parseTokenId)(balanceDefs[index].token.id).networkId,
1384
- status: "live"
1385
- });
1386
- }
1387
- if (result.status === "failure") {
1388
- acc.errors.push({
1389
- tokenId: balanceDefs[index].token.id,
1390
- address: balanceDefs[index].address,
1391
- error: new BalanceFetchError(
1392
- `Failed to get balance for token ${balanceDefs[index].token.id} and address ${balanceDefs[index].address} on chain ${client.chain?.id}`,
1393
- balanceDefs[index].token.id,
1394
- balanceDefs[index].address,
1395
- result.error
1396
- )
1397
- });
1398
- }
1399
- return acc;
1400
- },
1401
- { success: [], errors: [] }
1402
- );
1403
- } catch (err) {
1404
- const errors = balanceDefs.map((balanceDef) => ({
1405
- tokenId: balanceDef.token.id,
1406
- address: balanceDef.address,
1407
- error: new BalanceFetchNetworkError(
1408
- `Failed to get balances for evm-erc20 tokens on chain ${client.chain?.id}`,
1409
- String(client.chain?.id),
1410
- err
1411
- )
1412
- }));
1413
- return { success: [], errors };
1414
- }
1385
+ const results = await client.multicall({
1386
+ allowFailure: false,
1387
+ contracts: balanceDefs.map(({ address }) => ({
1388
+ address: multicall3Address,
1389
+ abi: abiMulticall,
1390
+ functionName: "getEthBalance",
1391
+ args: [address]
1392
+ }))
1393
+ });
1394
+ return {
1395
+ success: results.map(
1396
+ (value, index) => ({
1397
+ address: balanceDefs[index].address,
1398
+ tokenId: balanceDefs[index].token.id,
1399
+ value: String(value),
1400
+ source: MODULE_TYPE2,
1401
+ networkId: (0, import_chaindata_provider8.parseTokenId)(balanceDefs[index].token.id).networkId,
1402
+ status: "live"
1403
+ })
1404
+ ),
1405
+ errors: []
1406
+ };
1415
1407
  };
1416
1408
 
1417
1409
  // src/modules/evm-native/fetchTokens.ts
@@ -1529,7 +1521,6 @@ var PLATFORM3 = import_chaindata_provider11.EvmUniswapV2TokenSchema.shape.platfo
1529
1521
  // src/modules/evm-uniswapv2/fetchBalances.ts
1530
1522
  var import_chaindata_provider12 = require("@talismn/chaindata-provider");
1531
1523
  var import_crypto5 = require("@talismn/crypto");
1532
- var import_bignumber = __toESM(require("bignumber.js"));
1533
1524
  var import_lodash_es5 = require("lodash-es");
1534
1525
  var import_viem6 = require("viem");
1535
1526
  var fetchBalances3 = async ({
@@ -1621,7 +1612,7 @@ var fetchPoolBalances = async (client, balanceDefs) => {
1621
1612
  label,
1622
1613
  amount
1623
1614
  });
1624
- const ratio = (0, import_bignumber.default)(String(balance)).div(totalSupply === 0n ? "1" : String(totalSupply));
1615
+ const ratio = configureBigNumber_default(String(balance)).div(totalSupply === 0n ? "1" : String(totalSupply));
1625
1616
  acc.success.push({
1626
1617
  address,
1627
1618
  tokenId: token.id,
@@ -1650,6 +1641,7 @@ var import_lodash_es6 = require("lodash-es");
1650
1641
  var import_v44 = __toESM(require("zod/v4"));
1651
1642
 
1652
1643
  // src/modules/evm-uniswapv2/utils.ts
1644
+ var import_util2 = require("@talismn/util");
1653
1645
  var import_viem7 = require("viem");
1654
1646
  var getErc20ContractData2 = async (client, contractAddress) => {
1655
1647
  try {
@@ -1660,7 +1652,7 @@ var getErc20ContractData2 = async (client, contractAddress) => {
1660
1652
  contract.read.name()
1661
1653
  ]);
1662
1654
  } catch (e) {
1663
- if (e instanceof import_viem7.ContractFunctionExecutionError) {
1655
+ if ((0, import_util2.isErrorOfName)(e, "ContractFunctionExecutionError")) {
1664
1656
  const contract = getTypedContract2(client, import_viem7.erc20Abi_bytes32, contractAddress);
1665
1657
  var [bytesSymbol, decimals, nameSymbol] = await Promise.all([
1666
1658
  contract.read.symbol(),
@@ -2056,7 +2048,7 @@ var PLATFORM5 = import_chaindata_provider19.SolSplTokenSchema.shape.platform.val
2056
2048
  // src/modules/sol-spl/fetchBalances.ts
2057
2049
  var import_web34 = require("@solana/web3.js");
2058
2050
  var import_chaindata_provider22 = require("@talismn/chaindata-provider");
2059
- var import_util2 = require("@talismn/util");
2051
+ var import_util4 = require("@talismn/util");
2060
2052
  var import_lodash_es12 = require("lodash-es");
2061
2053
 
2062
2054
  // src/modules/shared/buildNetworkStorageCoders.ts
@@ -2094,9 +2086,9 @@ var buildNetworkStorageCoders = (chainId, miniMetadata, coders) => {
2094
2086
 
2095
2087
  // src/modules/shared/fetchRuntimeCallResult.ts
2096
2088
  var import_scale2 = require("@talismn/scale");
2097
- var fetchRuntimeCallResult = async (connector, networkId, metadataRpc, apiName, method, args) => {
2089
+ var fetchRuntimeCallResult = async (connector, networkId, metadataRpcOrBuilder, apiName, method, args) => {
2098
2090
  try {
2099
- const { builder } = (0, import_scale2.parseMetadataRpc)(metadataRpc);
2091
+ const builder = typeof metadataRpcOrBuilder === "string" ? (0, import_scale2.parseMetadataRpc)(metadataRpcOrBuilder).builder : metadataRpcOrBuilder;
2100
2092
  const call = builder.buildRuntimeCall(apiName, method);
2101
2093
  const hex = await connector.send(networkId, "state_call", [
2102
2094
  `${apiName}_${method}`,
@@ -2111,11 +2103,11 @@ var fetchRuntimeCallResult = async (connector, networkId, metadataRpc, apiName,
2111
2103
  };
2112
2104
 
2113
2105
  // src/modules/shared/rpcQueryPack.ts
2114
- var import_util = require("@talismn/util");
2106
+ var import_util3 = require("@talismn/util");
2115
2107
  var import_lodash_es10 = require("lodash-es");
2116
2108
  var import_rxjs5 = require("rxjs");
2117
2109
  var fetchRpcQueryPack = async (connector, networkId, queries) => {
2118
- const allStateKeys = queries.flatMap(({ stateKeys }) => stateKeys).filter(import_util.isNotNil);
2110
+ const allStateKeys = queries.flatMap(({ stateKeys }) => stateKeys).filter(import_util3.isNotNil);
2119
2111
  if (!allStateKeys.length)
2120
2112
  return queries.map(({ stateKeys, decodeResult }) => decodeResult(stateKeys.map(() => null)));
2121
2113
  const [result] = await connector.send(networkId, "state_queryStorageAt", [
@@ -2124,7 +2116,7 @@ var fetchRpcQueryPack = async (connector, networkId, queries) => {
2124
2116
  return decodeRpcQueryPack(queries, result);
2125
2117
  };
2126
2118
  var getRpcQueryPack$ = (connector, networkId, queries, timeout = false) => {
2127
- const allStateKeys = queries.flatMap(({ stateKeys }) => stateKeys).filter(import_util.isNotNil);
2119
+ const allStateKeys = queries.flatMap(({ stateKeys }) => stateKeys).filter(import_util3.isNotNil);
2128
2120
  if (!allStateKeys.length)
2129
2121
  return (0, import_rxjs5.of)(queries.map(({ stateKeys, decodeResult }) => decodeResult(stateKeys.map(() => null))));
2130
2122
  return new import_rxjs5.Observable((subscriber) => {
@@ -2167,17 +2159,17 @@ var decodeRpcQueryPack = (queries, result) => {
2167
2159
  var import_scale3 = require("@talismn/scale");
2168
2160
  var hasStorageItem = (metadata, palletName, itemName) => {
2169
2161
  const pallet = metadata.pallets.find((p) => p.name === palletName);
2170
- if (!pallet || !pallet.storage) return false;
2162
+ if (!pallet?.storage) return false;
2171
2163
  return pallet.storage.items.some((item) => item.name === itemName);
2172
2164
  };
2173
2165
  var hasStorageItems = (metadata, palletName, itemNames) => {
2174
2166
  const pallet = metadata.pallets.find((p) => p.name === palletName);
2175
- if (!pallet || !pallet.storage) return false;
2167
+ if (!pallet?.storage) return false;
2176
2168
  return itemNames.every((itemName) => pallet.storage?.items.some((item) => item.name === itemName));
2177
2169
  };
2178
2170
  var hasRuntimeApi = (metadata, apiName, method) => {
2179
2171
  const api = metadata.apis.find((api2) => api2.name === apiName);
2180
- if (!api || !api.methods) return false;
2172
+ if (!api?.methods) return false;
2181
2173
  return api.methods.some((m) => m.name === method);
2182
2174
  };
2183
2175
  var getConstantValue = (metadataRpc, pallet, constant) => {
@@ -2321,7 +2313,7 @@ var fetchBalances5 = async ({
2321
2313
  });
2322
2314
  return null;
2323
2315
  }
2324
- }).filter(import_util2.isNotNil);
2316
+ }).filter(import_util4.isNotNil);
2325
2317
  setDetectedTokenIds(
2326
2318
  address,
2327
2319
  MODULE_TYPE5,
@@ -2343,7 +2335,7 @@ var fetchBalances5 = async ({
2343
2335
  cached = fetched;
2344
2336
  }
2345
2337
  }
2346
- if (!cached || !cached.isValid) return;
2338
+ if (!cached?.isValid) return;
2347
2339
  const token = {
2348
2340
  id: tokenId,
2349
2341
  type: MODULE_TYPE5,
@@ -2549,7 +2541,7 @@ var PLATFORM6 = import_chaindata_provider26.SolToken2022TokenSchema.shape.platfo
2549
2541
  // src/modules/sol-token2022/fetchBalances.ts
2550
2542
  var import_web37 = require("@solana/web3.js");
2551
2543
  var import_chaindata_provider28 = require("@talismn/chaindata-provider");
2552
- var import_util3 = require("@talismn/util");
2544
+ var import_util5 = require("@talismn/util");
2553
2545
  var import_lodash_es15 = require("lodash-es");
2554
2546
 
2555
2547
  // src/modules/sol-token2022/onChainTokenMetadata.ts
@@ -2703,7 +2695,7 @@ var fetchBalances6 = async ({
2703
2695
  });
2704
2696
  return null;
2705
2697
  }
2706
- }).filter(import_util3.isNotNil);
2698
+ }).filter(import_util5.isNotNil);
2707
2699
  setDetectedTokenIds(
2708
2700
  address,
2709
2701
  MODULE_TYPE6,
@@ -2725,7 +2717,7 @@ var fetchBalances6 = async ({
2725
2717
  cached = fetched;
2726
2718
  }
2727
2719
  }
2728
- if (!cached || !cached.isValid) return;
2720
+ if (!cached?.isValid) return;
2729
2721
  const token = {
2730
2722
  id: tokenId,
2731
2723
  type: MODULE_TYPE6,
@@ -3003,7 +2995,7 @@ var PLATFORM7 = import_chaindata_provider32.SubAssetsTokenSchema.shape.platform.
3003
2995
 
3004
2996
  // src/modules/substrate-assets/buildQueries.ts
3005
2997
  var import_scale4 = require("@talismn/scale");
3006
- var import_util4 = require("@talismn/util");
2998
+ var import_util6 = require("@talismn/util");
3007
2999
  var buildQueries = (networkId, balanceDefs, miniMetadata) => {
3008
3000
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
3009
3001
  storage: ["Assets", "Account"]
@@ -3052,7 +3044,7 @@ var buildQueries = (networkId, balanceDefs, miniMetadata) => {
3052
3044
  stateKeys: [stateKey],
3053
3045
  decodeResult
3054
3046
  };
3055
- }).filter(import_util4.isNotNil);
3047
+ }).filter(import_util6.isNotNil);
3056
3048
  };
3057
3049
  var tryEncode = (scaleCoder, ...args) => {
3058
3050
  try {
@@ -3216,13 +3208,12 @@ var fetchTokens7 = async ({
3216
3208
 
3217
3209
  // src/modules/substrate-assets/getMiniMetadata.ts
3218
3210
  var import_chaindata_provider44 = require("@talismn/chaindata-provider");
3219
- var import_scale11 = require("@talismn/scale");
3211
+ var import_scale12 = require("@talismn/scale");
3220
3212
 
3221
3213
  // src/types/balances.ts
3222
3214
  var import_chaindata_provider42 = require("@talismn/chaindata-provider");
3223
3215
  var import_token_rates2 = require("@talismn/token-rates");
3224
- var import_util7 = require("@talismn/util");
3225
- var import_bignumber2 = __toESM(require("bignumber.js"));
3216
+ var import_util9 = require("@talismn/util");
3226
3217
 
3227
3218
  // src/modules/substrate-dtao/alphaPrice.ts
3228
3219
  var TAO_DECIMALS = 9n;
@@ -3239,12 +3230,189 @@ var taoToAlpha = (tao, scaledAlphaPrice) => {
3239
3230
  if (!tao || !scaledAlphaPrice) return 0n;
3240
3231
  return tao * ALPHA_PRICE_SCALE / scaledAlphaPrice;
3241
3232
  };
3233
+ var taoToAlphaCeil = (tao, scaledAlphaPrice) => {
3234
+ if (!tao || !scaledAlphaPrice) return 0n;
3235
+ return (tao * ALPHA_PRICE_SCALE + scaledAlphaPrice - 1n) / scaledAlphaPrice;
3236
+ };
3237
+
3238
+ // src/modules/substrate-dtao/convictionLocks.ts
3239
+ var import_scale6 = require("@talismn/scale");
3240
+ var convictionLockKey = (address, netuid) => `${address}:${netuid}`;
3241
+ var getConvictionLockLabel = (lockType) => lockType === "perpetual" ? "Perpetual Conviction Lock" : "Decaying Conviction Lock";
3242
+ var findDTaoConvictionLock = (locks) => {
3243
+ for (const lock of locks ?? []) {
3244
+ const meta = lock.meta;
3245
+ if (meta?.convictionLock?.type !== "conviction-lock") continue;
3246
+ const lockType = meta.convictionLock.lockType;
3247
+ return {
3248
+ amount: lock.amount.planck,
3249
+ hotkey: meta.convictionLock.hotkey,
3250
+ lockType,
3251
+ label: getConvictionLockLabel(lockType)
3252
+ };
3253
+ }
3254
+ return null;
3255
+ };
3256
+ var toBigIntValue = (value) => {
3257
+ if (typeof value === "bigint") return value;
3258
+ if (value && typeof value === "object" && "bits" in value) {
3259
+ const bits = value.bits;
3260
+ if (typeof bits === "bigint") return bits;
3261
+ }
3262
+ return 0n;
3263
+ };
3264
+ var fetchConvictionLocks = async (connector, networkId, metadataRpc, addresses) => {
3265
+ if (!addresses.length) return [];
3266
+ const { unifiedMetadata, builder } = (0, import_scale6.parseMetadataRpc)(metadataRpc);
3267
+ if (!hasRuntimeApi(unifiedMetadata, "StakeInfoRuntimeApi", "get_coldkey_lock") || !hasStorageItems(unifiedMetadata, "SubtensorModule", ["Lock", "DecayingLock"])) {
3268
+ return [];
3269
+ }
3270
+ try {
3271
+ const lockStorageCoder = builder.buildStorage("SubtensorModule", "Lock");
3272
+ const decayingLockStorageCoder = builder.buildStorage("SubtensorModule", "DecayingLock");
3273
+ const lockStorageKeys = await fetchConvictionLockStorageKeys(
3274
+ connector,
3275
+ networkId,
3276
+ addresses,
3277
+ lockStorageCoder
3278
+ );
3279
+ if (!lockStorageKeys.length) return [];
3280
+ const hotkeyByPair = new Map(
3281
+ lockStorageKeys.map(({ address, netuid, hotkey }) => [
3282
+ convictionLockKey(address, netuid),
3283
+ hotkey
3284
+ ])
3285
+ );
3286
+ const [lockModesByPair, lockStates] = await Promise.all([
3287
+ fetchConvictionLockModes(connector, networkId, lockStorageKeys, decayingLockStorageCoder),
3288
+ fetchColdkeyLockStates(connector, networkId, builder, lockStorageKeys)
3289
+ ]);
3290
+ return lockStates.flatMap(({ address, netuid, lockState }) => {
3291
+ const amount = lockState?.locked_mass ?? 0n;
3292
+ const convictionRaw = toBigIntValue(lockState?.conviction);
3293
+ if (amount <= 0n && convictionRaw <= 0n) return [];
3294
+ const hotkey = hotkeyByPair.get(convictionLockKey(address, netuid));
3295
+ if (!hotkey) return [];
3296
+ return [
3297
+ {
3298
+ address,
3299
+ netuid,
3300
+ lock: {
3301
+ amount,
3302
+ hotkey,
3303
+ lockType: lockModesByPair.get(convictionLockKey(address, netuid)) ?? "decaying",
3304
+ convictionRaw: convictionRaw.toString()
3305
+ }
3306
+ }
3307
+ ];
3308
+ });
3309
+ } catch (cause) {
3310
+ log_default.warn(`Failed to fetch Bittensor conviction locks on ${networkId}`, { cause });
3311
+ return [];
3312
+ }
3313
+ };
3314
+ var fetchConvictionLockStorageKeys = async (connector, networkId, addresses, storageCoder) => {
3315
+ const keysPerAddress = await Promise.all(
3316
+ addresses.map(async (address) => {
3317
+ let keyPrefix;
3318
+ try {
3319
+ keyPrefix = storageCoder.keys.enc(address);
3320
+ } catch (cause) {
3321
+ log_default.warn(
3322
+ `Failed to encode conviction Lock key prefix (address=${address}) on ${networkId}`,
3323
+ { cause }
3324
+ );
3325
+ return [];
3326
+ }
3327
+ try {
3328
+ const stateKeys = await connector.send(networkId, "state_getKeys", [
3329
+ keyPrefix
3330
+ ]);
3331
+ return stateKeys.flatMap((stateKey) => {
3332
+ try {
3333
+ const [, netuid, hotkey] = storageCoder.keys.dec(stateKey);
3334
+ return [{ address, netuid, hotkey }];
3335
+ } catch (cause) {
3336
+ log_default.warn(`Failed to decode conviction Lock key ${stateKey} on ${networkId}`, { cause });
3337
+ return [];
3338
+ }
3339
+ });
3340
+ } catch (cause) {
3341
+ log_default.warn(`Failed to fetch conviction Lock keys (address=${address}) on ${networkId}`, {
3342
+ cause
3343
+ });
3344
+ return [];
3345
+ }
3346
+ })
3347
+ );
3348
+ return keysPerAddress.flat();
3349
+ };
3350
+ var fetchConvictionLockModes = async (connector, networkId, pairs, storageCoder) => {
3351
+ const queries = pairs.map(
3352
+ ({ address, netuid }) => {
3353
+ let stateKey = null;
3354
+ try {
3355
+ stateKey = storageCoder.keys.enc(address, netuid);
3356
+ } catch (cause) {
3357
+ log_default.warn(
3358
+ `Failed to encode conviction DecayingLock key (netuid=${netuid}, address=${address}) on ${networkId}`,
3359
+ { cause }
3360
+ );
3361
+ }
3362
+ const key = convictionLockKey(address, netuid);
3363
+ return {
3364
+ stateKeys: [stateKey],
3365
+ decodeResult: (changes) => {
3366
+ const hexValue = changes[0];
3367
+ if (!hexValue) return [key, "decaying"];
3368
+ const decoded = (0, import_scale6.decodeScale)(
3369
+ storageCoder,
3370
+ hexValue,
3371
+ `Failed to decode DecayingLock for (netuid=${netuid}, address=${address}) on ${networkId}`
3372
+ );
3373
+ return [key, decoded === false ? "perpetual" : "decaying"];
3374
+ }
3375
+ };
3376
+ }
3377
+ );
3378
+ return new Map(await fetchRpcQueryPack(connector, networkId, queries));
3379
+ };
3380
+ var fetchColdkeyLockStates = async (connector, networkId, builder, pairs) => {
3381
+ return Promise.all(
3382
+ pairs.map(async ({ address, netuid }) => {
3383
+ try {
3384
+ const lockState = await fetchRuntimeCallResult(
3385
+ connector,
3386
+ networkId,
3387
+ builder,
3388
+ "StakeInfoRuntimeApi",
3389
+ "get_coldkey_lock",
3390
+ [address, netuid]
3391
+ );
3392
+ return { address, netuid, lockState };
3393
+ } catch (cause) {
3394
+ log_default.warn(
3395
+ `Failed to fetch get_coldkey_lock for (netuid=${netuid}, address=${address}) on ${networkId}`,
3396
+ { cause }
3397
+ );
3398
+ return { address, netuid, lockState: null };
3399
+ }
3400
+ })
3401
+ );
3402
+ };
3242
3403
 
3243
3404
  // src/modules/substrate-dtao/getDtaoTokenRates.ts
3244
3405
  var import_chaindata_provider34 = require("@talismn/chaindata-provider");
3245
3406
  var import_token_rates = require("@talismn/token-rates");
3246
3407
  var ONE_ALPHA = 10n ** TAO_DECIMALS;
3247
- var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice) => {
3408
+ var getAlphaChange24h = (currency, taoChange24h, alphaPriceChange24h) => {
3409
+ if (typeof alphaPriceChange24h !== "number" || !Number.isFinite(alphaPriceChange24h))
3410
+ return void 0;
3411
+ if (currency === "tao") return alphaPriceChange24h;
3412
+ if (typeof taoChange24h !== "number" || !Number.isFinite(taoChange24h)) return void 0;
3413
+ return ((1 + alphaPriceChange24h / 100) * (1 + taoChange24h / 100) - 1) * 100;
3414
+ };
3415
+ var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice, alphaPriceChange24h) => {
3248
3416
  try {
3249
3417
  const taoTokenId = (0, import_chaindata_provider34.subNativeTokenId)(token.networkId);
3250
3418
  const taoTokenRates = tokenRates[taoTokenId];
@@ -3260,8 +3428,7 @@ var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice) => {
3260
3428
  alphaRates[currency] = {
3261
3429
  price: taoRate.price * priceRatio,
3262
3430
  marketCap: taoRate.marketCap ? taoRate.marketCap * priceRatio : void 0,
3263
- change24h: void 0
3264
- // cannot be determined from TAO rates alone
3431
+ change24h: getAlphaChange24h(currency, taoRate.change24h, alphaPriceChange24h)
3265
3432
  };
3266
3433
  }
3267
3434
  }
@@ -3279,8 +3446,8 @@ var PLATFORM8 = import_chaindata_provider35.SubDTaoTokenSchema.shape.platform.va
3279
3446
 
3280
3447
  // src/modules/substrate-dtao/fetchBalances.ts
3281
3448
  var import_chaindata_provider37 = require("@talismn/chaindata-provider");
3282
- var import_scale6 = require("@talismn/scale");
3283
- var import_util5 = require("@talismn/util");
3449
+ var import_scale7 = require("@talismn/scale");
3450
+ var import_util7 = require("@talismn/util");
3284
3451
  var import_lodash_es19 = require("lodash-es");
3285
3452
 
3286
3453
  // src/modules/substrate-dtao/calculatePendingRootClaimable.ts
@@ -3385,6 +3552,7 @@ var fetchBalances8 = async ({
3385
3552
  []
3386
3553
  )
3387
3554
  ]);
3555
+ const dynamicInfoByNetuid = (0, import_lodash_es19.keyBy)(dynamicInfos.filter(import_util7.isNotNil), (info) => info.netuid);
3388
3556
  const rootHotkeys = (0, import_lodash_es19.uniq)(
3389
3557
  stakeInfos.flatMap(
3390
3558
  ([, stakes]) => stakes.filter((stake) => stake.netuid === ROOT_NETUID).map((stake) => stake.hotkey)
@@ -3404,13 +3572,10 @@ var fetchBalances8 = async ({
3404
3572
  }
3405
3573
  }
3406
3574
  }
3407
- const rootClaimedAmounts = addressHotkeyNetuidPairs.length && miniMetadata.data ? await fetchRootClaimedAmounts(
3408
- connector,
3409
- networkId,
3410
- miniMetadata.data,
3411
- addressHotkeyNetuidPairs
3412
- ) : /* @__PURE__ */ new Map();
3413
- const dynamicInfoByNetuid = (0, import_lodash_es19.keyBy)(dynamicInfos.filter(import_util5.isNotNil), (info) => info.netuid);
3575
+ const [rootClaimedAmounts, convictionLocks] = await Promise.all([
3576
+ addressHotkeyNetuidPairs.length && miniMetadata.data ? fetchRootClaimedAmounts(connector, networkId, miniMetadata.data, addressHotkeyNetuidPairs) : Promise.resolve(/* @__PURE__ */ new Map()),
3577
+ miniMetadata.data ? fetchConvictionLocks(connector, networkId, miniMetadata.data, addresses) : Promise.resolve([])
3578
+ ]);
3414
3579
  const upsertBalance = (acc, address, tokenId, balance) => {
3415
3580
  const key = `${address}:${tokenId}`;
3416
3581
  const recordedBalance = acc[key];
@@ -3421,6 +3586,9 @@ var fetchBalances8 = async ({
3421
3586
  // If the new balance has pendingRootClaim, use it (it's calculated from current state)
3422
3587
  ...balance.pendingRootClaim !== void 0 && {
3423
3588
  pendingRootClaim: balance.pendingRootClaim
3589
+ },
3590
+ ...balance.convictionLock !== void 0 && {
3591
+ convictionLock: balance.convictionLock
3424
3592
  }
3425
3593
  };
3426
3594
  } else {
@@ -3463,6 +3631,21 @@ var fetchBalances8 = async ({
3463
3631
  },
3464
3632
  {}
3465
3633
  );
3634
+ for (const { address, netuid, lock } of convictionLocks) {
3635
+ const dynamicInfo = dynamicInfoByNetuid[netuid];
3636
+ const scaledAlphaPrice = dynamicInfo ? getScaledAlphaPrice(dynamicInfo.alpha_in, dynamicInfo.tao_in) : 0n;
3637
+ const balance = {
3638
+ address,
3639
+ tokenId: (0, import_chaindata_provider37.subDTaoTokenId)(networkId, netuid),
3640
+ baseTokenId: (0, import_chaindata_provider37.subDTaoTokenId)(networkId, netuid),
3641
+ stake: 0n,
3642
+ hotkey: lock.hotkey,
3643
+ netuid,
3644
+ scaledAlphaPrice,
3645
+ convictionLock: lock
3646
+ };
3647
+ upsertBalance(balancesRaw, address, balance.tokenId, balance);
3648
+ }
3466
3649
  const balances = Object.values(balancesRaw);
3467
3650
  const tokensById = (0, import_lodash_es19.keyBy)(
3468
3651
  tokensWithAddresses.map(([token]) => token),
@@ -3470,6 +3653,7 @@ var fetchBalances8 = async ({
3470
3653
  );
3471
3654
  const dynamicTokens = [];
3472
3655
  for (const bal of balances) {
3656
+ if (bal.tokenId === bal.baseTokenId) continue;
3473
3657
  if (!balanceDefs.some((def) => def.token.id === bal.tokenId)) {
3474
3658
  const baseToken = tokensById[bal.baseTokenId];
3475
3659
  if (baseToken) {
@@ -3490,6 +3674,8 @@ var fetchBalances8 = async ({
3490
3674
  };
3491
3675
  const stakeAmount = BigInt(stake?.stake?.toString() ?? "0");
3492
3676
  const pendingRootClaimAmount = BigInt(stake?.pendingRootClaim?.toString() ?? "0");
3677
+ const convictionLockAmount = BigInt(stake?.convictionLock?.amount?.toString() ?? "0");
3678
+ const convictionLockConviction = BigInt(stake?.convictionLock?.convictionRaw ?? "0");
3493
3679
  const hasZeroStake = stakeAmount === 0n;
3494
3680
  const hasPendingRootClaim = pendingRootClaimAmount > 0n;
3495
3681
  const balanceValue = {
@@ -3502,9 +3688,30 @@ var fetchBalances8 = async ({
3502
3688
  type: "locked",
3503
3689
  label: "Pending root claim",
3504
3690
  amount: pendingRootClaimAmount.toString(),
3691
+ // The pending claim is not part of the stake (free amount): on-chain it only becomes
3692
+ // stake once claimed (root_claim_on_subnet). Since it was never included in `free`,
3693
+ // it must not be subtracted from it either: flag it so it does not reduce the staked
3694
+ // position's transferable amount.
3695
+ includeInTransferable: true,
3505
3696
  meta
3506
3697
  };
3507
3698
  const values3 = [balanceValue, pendingRootClaimValue];
3699
+ if (stake?.convictionLock && (convictionLockAmount > 0n || convictionLockConviction > 0n)) {
3700
+ const convictionLockMeta = {
3701
+ ...meta,
3702
+ convictionLock: {
3703
+ type: "conviction-lock",
3704
+ hotkey: stake.convictionLock.hotkey,
3705
+ lockType: stake.convictionLock.lockType
3706
+ }
3707
+ };
3708
+ values3.push({
3709
+ type: "locked",
3710
+ label: getConvictionLockLabel(stake.convictionLock.lockType),
3711
+ amount: convictionLockAmount.toString(),
3712
+ meta: convictionLockMeta
3713
+ });
3714
+ }
3508
3715
  if (hasZeroStake && hasPendingRootClaim) {
3509
3716
  values3.push({
3510
3717
  type: "extra",
@@ -3542,7 +3749,7 @@ var fetchBalances8 = async ({
3542
3749
  }
3543
3750
  };
3544
3751
  var buildStorageCoder = (metadataRpc, pallet, entry) => {
3545
- const { builder } = (0, import_scale6.parseMetadataRpc)(metadataRpc);
3752
+ const { builder } = (0, import_scale7.parseMetadataRpc)(metadataRpc);
3546
3753
  return builder.buildStorage(pallet, entry);
3547
3754
  };
3548
3755
  var buildRootClaimableStorageCoder = async (_connector, networkId, metadataRpc) => {
@@ -3586,7 +3793,7 @@ var buildRootClaimableQueries = (networkId, hotkeys, storageCoder) => {
3586
3793
  if (!hexValue) {
3587
3794
  return [hotkey, /* @__PURE__ */ new Map()];
3588
3795
  }
3589
- const decoded = (0, import_scale6.decodeScale)(
3796
+ const decoded = (0, import_scale7.decodeScale)(
3590
3797
  storageCoder,
3591
3798
  hexValue,
3592
3799
  `Failed to decode RootClaimable for hotkey ${hotkey} on ${networkId}`
@@ -3630,7 +3837,7 @@ var buildRootClaimedQueries = (networkId, addressHotkeyNetuidPairs, storageCoder
3630
3837
  if (!hexValue) {
3631
3838
  return [address, hotkey, netuid, 0n];
3632
3839
  }
3633
- const decoded = (0, import_scale6.decodeScale)(
3840
+ const decoded = (0, import_scale7.decodeScale)(
3634
3841
  storageCoder,
3635
3842
  hexValue,
3636
3843
  `Failed to decode RootClaimed for (netuid=${netuid}, hotkey=${hotkey}, address=${address}) on ${networkId}`
@@ -3686,8 +3893,8 @@ var fetchRootClaimedAmounts = async (connector, networkId, metadataRpc, addressH
3686
3893
 
3687
3894
  // src/modules/substrate-dtao/fetchTokens.ts
3688
3895
  var import_chaindata_provider38 = require("@talismn/chaindata-provider");
3689
- var import_scale7 = require("@talismn/scale");
3690
- var import_util6 = require("@talismn/util");
3896
+ var import_scale8 = require("@talismn/scale");
3897
+ var import_util8 = require("@talismn/util");
3691
3898
  var import_lodash_es20 = require("lodash-es");
3692
3899
  var NATIVE_TOKEN_SYMBOLS = {
3693
3900
  "bittensor": "TAO",
@@ -3712,7 +3919,7 @@ var fetchTokens8 = async ({
3712
3919
  []
3713
3920
  )
3714
3921
  ]);
3715
- return dynamicInfos.filter(import_util6.isNotNil).map((info) => {
3922
+ return dynamicInfos.filter(import_util8.isNotNil).map((info) => {
3716
3923
  const config = tokens.find((t) => t.netuid === info.netuid);
3717
3924
  let symbol = new TextDecoder().decode(Uint8Array.from(info.token_symbol));
3718
3925
  const subnetName = info.subnet_identity?.subnet_name?.asText() ?? (info.netuid === 0 ? "Root" : `Subnet ${info.netuid}`);
@@ -3740,10 +3947,10 @@ var fetchTokens8 = async ({
3740
3947
  });
3741
3948
  };
3742
3949
  var fetchTransferableTokensMap = async (connector, metadata, networkId) => {
3743
- const { builder } = (0, import_scale7.parseMetadataRpc)(metadata);
3950
+ const { builder } = (0, import_scale8.parseMetadataRpc)(metadata);
3744
3951
  const transferToggleCodec = builder.buildStorage("SubtensorModule", "TransferToggle");
3745
3952
  const transferToggleKeys = await connector.send(networkId, "state_getKeys", [
3746
- (0, import_scale7.getStorageKeyPrefix)("SubtensorModule", "TransferToggle")
3953
+ (0, import_scale8.getStorageKeyPrefix)("SubtensorModule", "TransferToggle")
3747
3954
  ]);
3748
3955
  const transferToggleResults = await connector.send(
3749
3956
  networkId,
@@ -3762,7 +3969,7 @@ var fetchTransferableTokensMap = async (connector, metadata, networkId) => {
3762
3969
 
3763
3970
  // src/modules/substrate-dtao/getMiniMetadata.ts
3764
3971
  var import_chaindata_provider39 = require("@talismn/chaindata-provider");
3765
- var import_scale8 = require("@talismn/scale");
3972
+ var import_scale9 = require("@talismn/scale");
3766
3973
  var getMiniMetadata7 = ({
3767
3974
  networkId,
3768
3975
  specVersion,
@@ -3776,7 +3983,7 @@ var getMiniMetadata7 = ({
3776
3983
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
3777
3984
  );
3778
3985
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
3779
- const { unifiedMetadata } = (0, import_scale8.parseMetadataRpc)(metadataRpc);
3986
+ const { unifiedMetadata } = (0, import_scale9.parseMetadataRpc)(metadataRpc);
3780
3987
  if (unifiedMetadata.version < 14)
3781
3988
  throw new Error(
3782
3989
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -3792,16 +3999,21 @@ var getMiniMetadata7 = ({
3792
3999
  };
3793
4000
  };
3794
4001
  var getData = (metadataRpc) => {
3795
- const { metadata, unifiedMetadata } = (0, import_scale8.parseMetadataRpc)(metadataRpc);
4002
+ const { metadata, unifiedMetadata } = (0, import_scale9.parseMetadataRpc)(metadataRpc);
3796
4003
  const isBittensor = unifiedMetadata.pallets.some(({ name }) => name === "SubtensorModule");
3797
4004
  if (!isBittensor) return null;
3798
- (0, import_scale8.compactMetadata)(
4005
+ (0, import_scale9.compactMetadata)(
3799
4006
  metadata,
3800
- [{ pallet: "SubtensorModule", items: ["TransferToggle", "RootClaimable", "RootClaimed"] }],
4007
+ [
4008
+ {
4009
+ pallet: "SubtensorModule",
4010
+ items: ["TransferToggle", "RootClaimable", "RootClaimed", "Lock", "DecayingLock"]
4011
+ }
4012
+ ],
3801
4013
  [
3802
4014
  {
3803
4015
  runtimeApi: "StakeInfoRuntimeApi",
3804
- methods: ["get_stake_info_for_coldkeys"]
4016
+ methods: ["get_stake_info_for_coldkeys", "get_coldkey_lock"]
3805
4017
  },
3806
4018
  {
3807
4019
  runtimeApi: "SubnetInfoRuntimeApi",
@@ -3809,13 +4021,13 @@ var getData = (metadataRpc) => {
3809
4021
  }
3810
4022
  ]
3811
4023
  );
3812
- return (0, import_scale8.encodeMetadata)(metadata);
4024
+ return (0, import_scale9.encodeMetadata)(metadata);
3813
4025
  };
3814
4026
 
3815
4027
  // src/modules/substrate-dtao/getTransferCallData.ts
3816
4028
  var import_utils3 = require("@polkadot-api/utils");
3817
4029
  var import_chaindata_provider40 = require("@talismn/chaindata-provider");
3818
- var import_scale9 = require("@talismn/scale");
4030
+ var import_scale10 = require("@talismn/scale");
3819
4031
  var import_polkadot_api = require("polkadot-api");
3820
4032
  var getTransferCallData7 = ({
3821
4033
  from: from2,
@@ -3828,7 +4040,7 @@ var getTransferCallData7 = ({
3828
4040
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE8}.`);
3829
4041
  const { netuid: subnetId, hotkey } = (0, import_chaindata_provider40.parseSubDTaoTokenId)(token.id);
3830
4042
  if (!hotkey) throw new Error(`Missing hotkey`);
3831
- const { builder } = (0, import_scale9.parseMetadataRpc)(metadataRpc);
4043
+ const { builder } = (0, import_scale10.parseMetadataRpc)(metadataRpc);
3832
4044
  const { codec, location } = builder.buildCall("SubtensorModule", "transfer_stake");
3833
4045
  const args = codec.enc({
3834
4046
  origin_netuid: subnetId,
@@ -3855,6 +4067,7 @@ var subscribeBalances7 = ({
3855
4067
  miniMetadata
3856
4068
  }) => {
3857
4069
  if (!tokensWithAddresses.length) return (0, import_rxjs9.of)({ success: [], errors: [] });
4070
+ const balanceDefs = getBalanceDefs(tokensWithAddresses);
3858
4071
  return new import_rxjs9.Observable((subscriber) => {
3859
4072
  const abortController = new AbortController();
3860
4073
  const poll = async () => {
@@ -3868,8 +4081,8 @@ var subscribeBalances7 = ({
3868
4081
  });
3869
4082
  if (abortController.signal.aborted) return;
3870
4083
  subscriber.next(balances);
3871
- setTimeout(poll, SUBSCRIPTION_INTERVAL7);
3872
4084
  } catch (error) {
4085
+ if (abortController.signal.aborted) return;
3873
4086
  log_default.error("Error", {
3874
4087
  module: MODULE_TYPE8,
3875
4088
  networkId,
@@ -3877,8 +4090,17 @@ var subscribeBalances7 = ({
3877
4090
  addressesByToken: tokensWithAddresses,
3878
4091
  error
3879
4092
  });
3880
- subscriber.error(error);
4093
+ const fetchError = error instanceof Error ? error : new Error(String(error));
4094
+ subscriber.next({
4095
+ success: [],
4096
+ errors: balanceDefs.map((def) => ({
4097
+ tokenId: def.token.id,
4098
+ address: def.address,
4099
+ error: fetchError
4100
+ }))
4101
+ });
3881
4102
  }
4103
+ if (!abortController.signal.aborted) setTimeout(poll, SUBSCRIPTION_INTERVAL7);
3882
4104
  };
3883
4105
  poll();
3884
4106
  return () => {
@@ -3910,7 +4132,7 @@ var SubDTaoTokenConfigSchema = import_v411.default.strictObject({
3910
4132
  function excludeFromTransferableAmount(locks) {
3911
4133
  if (typeof locks === "string") return BigInt(locks);
3912
4134
  if (!Array.isArray(locks)) locks = [locks];
3913
- return locks.filter((lock) => lock.includeInTransferable !== true).map((lock) => lock.amount.planck).reduce((max, lock) => import_util7.BigMath.max(max, lock), 0n);
4135
+ return locks.filter((lock) => lock.includeInTransferable !== true).map((lock) => lock.amount.planck).reduce((max, lock) => import_util9.BigMath.max(max, lock), 0n);
3914
4136
  }
3915
4137
  function excludeFromFeePayableLocks(locks) {
3916
4138
  if (typeof locks === "string") return [];
@@ -3938,7 +4160,7 @@ var Balances = class _Balances {
3938
4160
  if (balances instanceof Balance) return new _Balances([balances], hydrate);
3939
4161
  if (!Array.isArray(balances)) return new _Balances(Object.values(balances), hydrate);
3940
4162
  if (balances.length === 0) return this;
3941
- if (!(0, import_util7.isArrayOf)(balances, Balance))
4163
+ if (!(0, import_util9.isArrayOf)(balances, Balance))
3942
4164
  return new _Balances(
3943
4165
  balances.map((storage) => new Balance(storage)),
3944
4166
  hydrate
@@ -4132,7 +4354,7 @@ var Balance = class {
4132
4354
  if (hydrate !== void 0) this.#db = hydrate;
4133
4355
  };
4134
4356
  #format = (balance) => new BalanceFormatter(
4135
- (0, import_util7.isBigInt)(balance) ? balance.toString() : balance,
4357
+ (0, import_util9.isBigInt)(balance) ? balance.toString() : balance,
4136
4358
  this.decimals || void 0,
4137
4359
  this.rates
4138
4360
  );
@@ -4181,9 +4403,9 @@ var Balance = class {
4181
4403
  const totalSupply = extras.find((extra2) => extra2.label === "totalSupply")?.amount ?? "0";
4182
4404
  const reserve0 = extras.find((extra2) => extra2.label === "reserve0")?.amount ?? "0";
4183
4405
  const reserve1 = extras.find((extra2) => extra2.label === "reserve1")?.amount ?? "0";
4184
- const totalSupplyTokens = (0, import_bignumber2.default)(totalSupply).times(10 ** (-1 * decimals));
4185
- const reserve0Tokens = (0, import_bignumber2.default)(reserve0).times(10 ** (-1 * decimals0));
4186
- const reserve1Tokens = (0, import_bignumber2.default)(reserve1).times(10 ** (-1 * decimals1));
4406
+ const totalSupplyTokens = configureBigNumber_default(totalSupply).times(10 ** (-1 * decimals));
4407
+ const reserve0Tokens = configureBigNumber_default(reserve0).times(10 ** (-1 * decimals0));
4408
+ const reserve1Tokens = configureBigNumber_default(reserve1).times(10 ** (-1 * decimals1));
4187
4409
  const rates0Currencies = new Set(Object.keys(rates0));
4188
4410
  const rates1Currencies = new Set(Object.keys(rates1));
4189
4411
  const currencies = [...rates0Currencies].filter((c) => rates1Currencies.has(c));
@@ -4191,7 +4413,7 @@ var Balance = class {
4191
4413
  (currency) => [
4192
4414
  currency,
4193
4415
  // tvl (in a given currency) == reserve0*currencyRate0 + reserve1*currencyRate1
4194
- import_bignumber2.default.sum(
4416
+ configureBigNumber_default.sum(
4195
4417
  reserve0Tokens.times(rates0[currency]?.price ?? 0),
4196
4418
  reserve1Tokens.times(rates1[currency]?.price ?? 0)
4197
4419
  )
@@ -4277,7 +4499,7 @@ var Balance = class {
4277
4499
  /** The frozen balance of this token. Is included in the free amount. */
4278
4500
  get locked() {
4279
4501
  return this.#format(
4280
- this.locks.map(({ amount }) => amount.planck).reduce((a, b) => import_util7.BigMath.max(a, b), 0n)
4502
+ this.locks.map(({ amount }) => amount.planck).reduce((a, b) => import_util9.BigMath.max(a, b), 0n)
4281
4503
  );
4282
4504
  }
4283
4505
  get locks() {
@@ -4301,15 +4523,15 @@ var Balance = class {
4301
4523
  const oldTransferableCalculation = () => {
4302
4524
  if (this.locks.length === 0) return this.free;
4303
4525
  const excludeAmount = excludeFromTransferableAmount(this.locks);
4304
- return this.#format(import_util7.BigMath.max(this.free.planck - excludeAmount, 0n));
4526
+ return this.#format(import_util9.BigMath.max(this.free.planck - excludeAmount, 0n));
4305
4527
  };
4306
4528
  const newTransferableCalculation = () => {
4307
4529
  if (this.locks.length === 0) return this.free;
4308
- const untouchableAmount = import_util7.BigMath.max(
4530
+ const untouchableAmount = import_util9.BigMath.max(
4309
4531
  excludeFromTransferableAmount(this.locks) - this.reserved.planck,
4310
4532
  0n
4311
4533
  );
4312
- return this.#format(import_util7.BigMath.max(this.free.planck - untouchableAmount, 0n));
4534
+ return this.#format(import_util9.BigMath.max(this.free.planck - untouchableAmount, 0n));
4313
4535
  };
4314
4536
  if (this.#storage.useLegacyTransferableCalculation) return oldTransferableCalculation();
4315
4537
  return newTransferableCalculation();
@@ -4321,7 +4543,7 @@ var Balance = class {
4321
4543
  */
4322
4544
  get unavailable() {
4323
4545
  const oldCalculation = () => this.locked.planck + this.reserved.planck;
4324
- const newCalculation = () => import_util7.BigMath.max(this.locked.planck, this.reserved.planck);
4546
+ const newCalculation = () => import_util9.BigMath.max(this.locked.planck, this.reserved.planck);
4325
4547
  const baseUnavailable = this.#storage.useLegacyTransferableCalculation ? oldCalculation() : newCalculation();
4326
4548
  const nomPoolStakedPlancks = this.locks.some(
4327
4549
  (lock) => lock.source === "substrate-native-holds" && lock.label === "DelegatedStaking"
@@ -4331,8 +4553,8 @@ var Balance = class {
4331
4553
  /** The feePayable balance of this token. Is generally the free amount - the feeFrozen amount. */
4332
4554
  get feePayable() {
4333
4555
  if (this.locks.length === 0) return this.free;
4334
- const excludeAmount = excludeFromFeePayableLocks(this.locked.planck.toString()).map((lock) => BigInt(lock.amount)).reduce((max, lock) => import_util7.BigMath.max(max, lock), 0n);
4335
- return this.#format(import_util7.BigMath.max(this.free.planck - excludeAmount, 0n));
4556
+ const excludeAmount = excludeFromFeePayableLocks(this.locked.planck.toString()).map((lock) => BigInt(lock.amount)).reduce((max, lock) => import_util9.BigMath.max(max, lock), 0n);
4557
+ return this.#format(import_util9.BigMath.max(this.free.planck - excludeAmount, 0n));
4336
4558
  }
4337
4559
  };
4338
4560
  var BalanceValueGetter = class {
@@ -4355,7 +4577,7 @@ var BalanceFormatter = class {
4355
4577
  #decimals;
4356
4578
  #tokenRates;
4357
4579
  constructor(planck, decimals, fiatRatios) {
4358
- this.#planck = (0, import_util7.isBigInt)(planck) ? planck.toString() : planck ?? "0";
4580
+ this.#planck = (0, import_util9.isBigInt)(planck) ? planck.toString() : planck ?? "0";
4359
4581
  this.#decimals = decimals || 0;
4360
4582
  this.#tokenRates = fiatRatios || null;
4361
4583
  }
@@ -4364,7 +4586,7 @@ var BalanceFormatter = class {
4364
4586
  return BigInt(this.#planck);
4365
4587
  }
4366
4588
  get tokens() {
4367
- return (0, import_util7.planckToTokens)(this.#planck, this.#decimals);
4589
+ return (0, import_util9.planckToTokens)(this.#planck, this.#decimals);
4368
4590
  }
4369
4591
  fiat(currency) {
4370
4592
  if (!this.#tokenRates) return null;
@@ -4559,13 +4781,13 @@ var getValueId = (amount) => {
4559
4781
 
4560
4782
  // src/types/minimetadatas.ts
4561
4783
  var import_chaindata_provider43 = require("@talismn/chaindata-provider");
4562
- var import_scale10 = require("@talismn/scale");
4784
+ var import_scale11 = require("@talismn/scale");
4563
4785
  var deriveMiniMetadataId = ({
4564
4786
  source,
4565
4787
  chainId,
4566
4788
  specVersion
4567
- }) => (0, import_scale10.toHex)(
4568
- (0, import_scale10.Twox128)(new TextEncoder().encode(`${source}${chainId}${specVersion}${import_chaindata_provider43.MINIMETADATA_VERSION}`))
4789
+ }) => (0, import_scale11.toHex)(
4790
+ (0, import_scale11.Twox128)(new TextEncoder().encode(`${source}${chainId}${specVersion}${import_chaindata_provider43.MINIMETADATA_VERSION}`))
4569
4791
  ).slice(-32);
4570
4792
 
4571
4793
  // src/modules/substrate-assets/getMiniMetadata.ts
@@ -4582,7 +4804,7 @@ var getMiniMetadata8 = ({
4582
4804
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
4583
4805
  );
4584
4806
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
4585
- const { unifiedMetadata } = (0, import_scale11.parseMetadataRpc)(metadataRpc);
4807
+ const { unifiedMetadata } = (0, import_scale12.parseMetadataRpc)(metadataRpc);
4586
4808
  if (unifiedMetadata.version < 14)
4587
4809
  throw new Error(
4588
4810
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -4598,16 +4820,16 @@ var getMiniMetadata8 = ({
4598
4820
  };
4599
4821
  };
4600
4822
  var getData2 = (metadataRpc) => {
4601
- const { metadata, unifiedMetadata } = (0, import_scale11.parseMetadataRpc)(metadataRpc);
4823
+ const { metadata, unifiedMetadata } = (0, import_scale12.parseMetadataRpc)(metadataRpc);
4602
4824
  if (!hasStorageItems(unifiedMetadata, "Assets", ["Account", "Asset", "Metadata"])) return null;
4603
- (0, import_scale11.compactMetadata)(metadata, [{ pallet: "Assets", items: ["Account", "Asset", "Metadata"] }]);
4604
- return (0, import_scale11.encodeMetadata)(metadata);
4825
+ (0, import_scale12.compactMetadata)(metadata, [{ pallet: "Assets", items: ["Account", "Asset", "Metadata"] }]);
4826
+ return (0, import_scale12.encodeMetadata)(metadata);
4605
4827
  };
4606
4828
 
4607
4829
  // src/modules/substrate-assets/getTransferCallData.ts
4608
4830
  var import_utils4 = require("@polkadot-api/utils");
4609
4831
  var import_chaindata_provider45 = require("@talismn/chaindata-provider");
4610
- var import_scale12 = require("@talismn/scale");
4832
+ var import_scale13 = require("@talismn/scale");
4611
4833
  var import_polkadot_api2 = require("polkadot-api");
4612
4834
  var getTransferCallData8 = ({
4613
4835
  from: from2,
@@ -4619,7 +4841,7 @@ var getTransferCallData8 = ({
4619
4841
  }) => {
4620
4842
  if (!(0, import_chaindata_provider45.isTokenOfType)(token, MODULE_TYPE7))
4621
4843
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE7}.`);
4622
- const { builder } = (0, import_scale12.parseMetadataRpc)(metadataRpc);
4844
+ const { builder } = (0, import_scale13.parseMetadataRpc)(metadataRpc);
4623
4845
  const method = getTransferMethod(type);
4624
4846
  const { codec, location } = builder.buildCall("Assets", method);
4625
4847
  const args = getEncodedArgs(method, token.assetId, to, value, codec);
@@ -4750,8 +4972,8 @@ var MODULE_TYPE9 = import_chaindata_provider47.SubForeignAssetsTokenSchema.shape
4750
4972
  var PLATFORM9 = import_chaindata_provider47.SubForeignAssetsTokenSchema.shape.platform.value;
4751
4973
 
4752
4974
  // src/modules/substrate-foreignassets/buildQueries.ts
4753
- var import_scale13 = require("@talismn/scale");
4754
- var import_util8 = require("@talismn/util");
4975
+ var import_scale14 = require("@talismn/scale");
4976
+ var import_util10 = require("@talismn/util");
4755
4977
  var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
4756
4978
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
4757
4979
  storage: ["ForeignAssets", "Account"]
@@ -4760,7 +4982,7 @@ var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
4760
4982
  const scaleCoder = networkStorageCoders?.storage;
4761
4983
  const getStateKey = (onChainId) => {
4762
4984
  try {
4763
- return scaleCoder?.keys?.enc?.((0, import_scale13.papiParse)(onChainId), address);
4985
+ return scaleCoder?.keys?.enc?.((0, import_scale14.papiParse)(onChainId), address);
4764
4986
  } catch {
4765
4987
  return null;
4766
4988
  }
@@ -4773,7 +4995,7 @@ var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
4773
4995
  return null;
4774
4996
  }
4775
4997
  const decodeResult = (changes) => {
4776
- const decoded = (0, import_scale13.decodeScale)(
4998
+ const decoded = (0, import_scale14.decodeScale)(
4777
4999
  scaleCoder,
4778
5000
  changes[0],
4779
5001
  `Failed to decode substrate-assets balance on chain ${networkId}`
@@ -4806,7 +5028,7 @@ var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
4806
5028
  stateKeys: [stateKey],
4807
5029
  decodeResult
4808
5030
  };
4809
- }).filter(import_util8.isNotNil);
5031
+ }).filter(import_util10.isNotNil);
4810
5032
  };
4811
5033
 
4812
5034
  // src/modules/substrate-foreignassets/fetchBalances.ts
@@ -4881,7 +5103,7 @@ var fetchBalances9 = async ({
4881
5103
 
4882
5104
  // src/modules/substrate-foreignassets/fetchTokens.ts
4883
5105
  var import_chaindata_provider48 = require("@talismn/chaindata-provider");
4884
- var import_scale14 = require("@talismn/scale");
5106
+ var import_scale15 = require("@talismn/scale");
4885
5107
  var import_lodash_es22 = require("lodash-es");
4886
5108
  var fetchTokens9 = async ({
4887
5109
  networkId,
@@ -4891,15 +5113,15 @@ var fetchTokens9 = async ({
4891
5113
  }) => {
4892
5114
  const anyMiniMetadata = miniMetadata;
4893
5115
  if (!anyMiniMetadata?.data) return [];
4894
- const { builder } = (0, import_scale14.parseMetadataRpc)(anyMiniMetadata.data);
5116
+ const { builder } = (0, import_scale15.parseMetadataRpc)(anyMiniMetadata.data);
4895
5117
  const assetCodec = builder.buildStorage("ForeignAssets", "Asset");
4896
5118
  const metadataCodec = builder.buildStorage("ForeignAssets", "Metadata");
4897
5119
  const [allAssetStorageKeys, allMetadataStorageKeys] = await Promise.all([
4898
5120
  connector.send(networkId, "state_getKeys", [
4899
- (0, import_scale14.getStorageKeyPrefix)("ForeignAssets", "Asset")
5121
+ (0, import_scale15.getStorageKeyPrefix)("ForeignAssets", "Asset")
4900
5122
  ]),
4901
5123
  connector.send(networkId, "state_getKeys", [
4902
- (0, import_scale14.getStorageKeyPrefix)("ForeignAssets", "Metadata")
5124
+ (0, import_scale15.getStorageKeyPrefix)("ForeignAssets", "Metadata")
4903
5125
  ])
4904
5126
  ]);
4905
5127
  const [assetStorageResults, metadataStorageResults] = await Promise.all([
@@ -4911,7 +5133,7 @@ var fetchTokens9 = async ({
4911
5133
  const assetByOnChainId = (0, import_lodash_es22.keyBy)(
4912
5134
  assetStorageEntries.map(([key, value]) => {
4913
5135
  const [decodedKey] = assetCodec.keys.dec(key);
4914
- const onChainId = (0, import_scale14.papiStringify)(decodedKey);
5136
+ const onChainId = (0, import_scale15.papiStringify)(decodedKey);
4915
5137
  const asset = assetCodec.value.dec(value);
4916
5138
  return { onChainId, existentialDeposit: asset.min_balance, isSufficient: asset.is_sufficient };
4917
5139
  }),
@@ -4920,7 +5142,7 @@ var fetchTokens9 = async ({
4920
5142
  const metadataByOnChainId = (0, import_lodash_es22.keyBy)(
4921
5143
  metadataStorageEntries.map(([key, value]) => {
4922
5144
  const [decodedKey] = metadataCodec.keys.dec(key);
4923
- const onChainId = (0, import_scale14.papiStringify)(decodedKey);
5145
+ const onChainId = (0, import_scale15.papiStringify)(decodedKey);
4924
5146
  const metadata = metadataCodec.value.dec(value);
4925
5147
  return {
4926
5148
  onChainId,
@@ -4965,7 +5187,7 @@ var fetchTokens9 = async ({
4965
5187
 
4966
5188
  // src/modules/substrate-foreignassets/getMiniMetadata.ts
4967
5189
  var import_chaindata_provider49 = require("@talismn/chaindata-provider");
4968
- var import_scale15 = require("@talismn/scale");
5190
+ var import_scale16 = require("@talismn/scale");
4969
5191
  var getMiniMetadata9 = ({
4970
5192
  networkId,
4971
5193
  specVersion,
@@ -4979,7 +5201,7 @@ var getMiniMetadata9 = ({
4979
5201
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
4980
5202
  );
4981
5203
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
4982
- const { unifiedMetadata } = (0, import_scale15.parseMetadataRpc)(metadataRpc);
5204
+ const { unifiedMetadata } = (0, import_scale16.parseMetadataRpc)(metadataRpc);
4983
5205
  if (unifiedMetadata.version < 14)
4984
5206
  throw new Error(
4985
5207
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -4995,17 +5217,17 @@ var getMiniMetadata9 = ({
4995
5217
  };
4996
5218
  };
4997
5219
  var getData3 = (metadataRpc) => {
4998
- const { metadata, unifiedMetadata } = (0, import_scale15.parseMetadataRpc)(metadataRpc);
5220
+ const { metadata, unifiedMetadata } = (0, import_scale16.parseMetadataRpc)(metadataRpc);
4999
5221
  if (!hasStorageItems(unifiedMetadata, "ForeignAssets", ["Account", "Asset", "Metadata"]))
5000
5222
  return null;
5001
- (0, import_scale15.compactMetadata)(metadata, [{ pallet: "ForeignAssets", items: ["Account", "Asset", "Metadata"] }]);
5002
- return (0, import_scale15.encodeMetadata)(metadata);
5223
+ (0, import_scale16.compactMetadata)(metadata, [{ pallet: "ForeignAssets", items: ["Account", "Asset", "Metadata"] }]);
5224
+ return (0, import_scale16.encodeMetadata)(metadata);
5003
5225
  };
5004
5226
 
5005
5227
  // src/modules/substrate-foreignassets/getTransferCallData.ts
5006
5228
  var import_utils5 = require("@polkadot-api/utils");
5007
5229
  var import_chaindata_provider50 = require("@talismn/chaindata-provider");
5008
- var import_scale16 = require("@talismn/scale");
5230
+ var import_scale17 = require("@talismn/scale");
5009
5231
  var import_polkadot_api3 = require("polkadot-api");
5010
5232
  var getTransferCallData9 = ({
5011
5233
  from: from2,
@@ -5017,7 +5239,7 @@ var getTransferCallData9 = ({
5017
5239
  }) => {
5018
5240
  if (!(0, import_chaindata_provider50.isTokenOfType)(token, MODULE_TYPE9))
5019
5241
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE9}.`);
5020
- const { builder } = (0, import_scale16.parseMetadataRpc)(metadataRpc);
5242
+ const { builder } = (0, import_scale17.parseMetadataRpc)(metadataRpc);
5021
5243
  const method = getTransferMethod2(type);
5022
5244
  const { codec, location } = builder.buildCall("ForeignAssets", method);
5023
5245
  const args = getEncodedArgs2(method, token.onChainId, to, value, codec);
@@ -5064,13 +5286,13 @@ var getEncodedValue2 = (codec, possibleValue) => {
5064
5286
  var getTransferEncodedArgs2 = (onChainId, to, value, codec) => {
5065
5287
  return getEncodedValue2(codec, [
5066
5288
  () => ({
5067
- id: (0, import_scale16.papiParse)(onChainId),
5289
+ id: (0, import_scale17.papiParse)(onChainId),
5068
5290
  // for most networks
5069
5291
  target: (0, import_polkadot_api3.Enum)("Id", to),
5070
5292
  amount: BigInt(value)
5071
5293
  }),
5072
5294
  () => ({
5073
- id: (0, import_scale16.papiParse)(onChainId),
5295
+ id: (0, import_scale17.papiParse)(onChainId),
5074
5296
  // for Neuroweb
5075
5297
  target: to,
5076
5298
  amount: BigInt(value)
@@ -5080,13 +5302,13 @@ var getTransferEncodedArgs2 = (onChainId, to, value, codec) => {
5080
5302
  var getTransferAllEncodedArgs2 = (onChainId, to, codec) => {
5081
5303
  return getEncodedValue2(codec, [
5082
5304
  () => ({
5083
- id: (0, import_scale16.papiParse)(onChainId),
5305
+ id: (0, import_scale17.papiParse)(onChainId),
5084
5306
  // for most networks
5085
5307
  dest: (0, import_polkadot_api3.Enum)("Id", to),
5086
5308
  keep_alive: false
5087
5309
  }),
5088
5310
  () => ({
5089
- id: (0, import_scale16.papiParse)(onChainId),
5311
+ id: (0, import_scale17.papiParse)(onChainId),
5090
5312
  // for Neuroweb
5091
5313
  dest: to,
5092
5314
  keep_alive: false
@@ -5253,7 +5475,7 @@ var fetchBalances10 = async ({
5253
5475
 
5254
5476
  // src/modules/substrate-hydration/fetchTokens.ts
5255
5477
  var import_chaindata_provider53 = require("@talismn/chaindata-provider");
5256
- var import_scale17 = require("@talismn/scale");
5478
+ var import_scale18 = require("@talismn/scale");
5257
5479
  var import_lodash_es24 = require("lodash-es");
5258
5480
  var fetchTokens10 = async ({
5259
5481
  networkId,
@@ -5263,10 +5485,10 @@ var fetchTokens10 = async ({
5263
5485
  }) => {
5264
5486
  const anyMiniMetadata = miniMetadata;
5265
5487
  if (!anyMiniMetadata?.data) return [];
5266
- const { builder } = (0, import_scale17.parseMetadataRpc)(anyMiniMetadata.data);
5488
+ const { builder } = (0, import_scale18.parseMetadataRpc)(anyMiniMetadata.data);
5267
5489
  const assetsCodec = builder.buildStorage("AssetRegistry", "Assets");
5268
5490
  const allAssetStorageKeys = await connector.send(networkId, "state_getKeys", [
5269
- (0, import_scale17.getStorageKeyPrefix)("AssetRegistry", "Assets")
5491
+ (0, import_scale18.getStorageKeyPrefix)("AssetRegistry", "Assets")
5270
5492
  ]);
5271
5493
  const assetStorageResults = await connector.send(
5272
5494
  networkId,
@@ -5317,7 +5539,7 @@ var fetchTokens10 = async ({
5317
5539
 
5318
5540
  // src/modules/substrate-hydration/getMiniMetadata.ts
5319
5541
  var import_chaindata_provider54 = require("@talismn/chaindata-provider");
5320
- var import_scale18 = require("@talismn/scale");
5542
+ var import_scale19 = require("@talismn/scale");
5321
5543
  var getMiniMetadata10 = ({
5322
5544
  networkId,
5323
5545
  specVersion,
@@ -5331,7 +5553,7 @@ var getMiniMetadata10 = ({
5331
5553
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
5332
5554
  );
5333
5555
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
5334
- const { unifiedMetadata } = (0, import_scale18.parseMetadataRpc)(metadataRpc);
5556
+ const { unifiedMetadata } = (0, import_scale19.parseMetadataRpc)(metadataRpc);
5335
5557
  if (unifiedMetadata.version < 14)
5336
5558
  throw new Error(
5337
5559
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -5347,10 +5569,10 @@ var getMiniMetadata10 = ({
5347
5569
  };
5348
5570
  };
5349
5571
  var getData4 = (metadataRpc) => {
5350
- const { metadata, unifiedMetadata } = (0, import_scale18.parseMetadataRpc)(metadataRpc);
5572
+ const { metadata, unifiedMetadata } = (0, import_scale19.parseMetadataRpc)(metadataRpc);
5351
5573
  if (!hasStorageItem(unifiedMetadata, "AssetRegistry", "Assets") || !hasStorageItem(unifiedMetadata, "Tokens", "Accounts") || !hasRuntimeApi(unifiedMetadata, "CurrenciesApi", "accounts"))
5352
5574
  return null;
5353
- (0, import_scale18.compactMetadata)(
5575
+ (0, import_scale19.compactMetadata)(
5354
5576
  metadata,
5355
5577
  [
5356
5578
  { pallet: "AssetRegistry", items: ["Assets"] },
@@ -5365,13 +5587,13 @@ var getData4 = (metadataRpc) => {
5365
5587
  }
5366
5588
  ]
5367
5589
  );
5368
- return (0, import_scale18.encodeMetadata)(metadata);
5590
+ return (0, import_scale19.encodeMetadata)(metadata);
5369
5591
  };
5370
5592
 
5371
5593
  // src/modules/substrate-hydration/getTransferCallData.ts
5372
5594
  var import_utils6 = require("@polkadot-api/utils");
5373
5595
  var import_chaindata_provider55 = require("@talismn/chaindata-provider");
5374
- var import_scale19 = require("@talismn/scale");
5596
+ var import_scale20 = require("@talismn/scale");
5375
5597
  var import_polkadot_api4 = require("polkadot-api");
5376
5598
  var getTransferCallData10 = ({
5377
5599
  from: from2,
@@ -5382,7 +5604,7 @@ var getTransferCallData10 = ({
5382
5604
  }) => {
5383
5605
  if (!(0, import_chaindata_provider55.isTokenOfType)(token, MODULE_TYPE10))
5384
5606
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE10}.`);
5385
- const { builder } = (0, import_scale19.parseMetadataRpc)(metadataRpc);
5607
+ const { builder } = (0, import_scale20.parseMetadataRpc)(metadataRpc);
5386
5608
  const { codec, location } = builder.buildCall("Currencies", "transfer");
5387
5609
  const args = {
5388
5610
  dest: to,
@@ -5464,8 +5686,8 @@ var MODULE_TYPE11 = import_chaindata_provider57.SubNativeTokenSchema.shape.type.
5464
5686
  var PLATFORM11 = import_chaindata_provider57.SubNativeTokenSchema.shape.platform.value;
5465
5687
 
5466
5688
  // src/modules/substrate-native/queries/buildBaseQueries.ts
5467
- var import_scale20 = require("@talismn/scale");
5468
- var import_util9 = require("@talismn/util");
5689
+ var import_scale21 = require("@talismn/scale");
5690
+ var import_util11 = require("@talismn/util");
5469
5691
 
5470
5692
  // src/modules/substrate-native/util/lockTypes.ts
5471
5693
  var import_upperFirst = __toESM(require("lodash-es/upperFirst"));
@@ -5626,10 +5848,10 @@ var buildBaseQueries = (networkId, balanceDefs, miniMetadata) => {
5626
5848
  return { balance, nomPoolMemberInfo };
5627
5849
  }
5628
5850
  };
5629
- }).filter(import_util9.isNotNil);
5851
+ }).filter(import_util11.isNotNil);
5630
5852
  };
5631
5853
  var decodeBaseResult = (coder, value, networkId) => {
5632
- const decoded = (0, import_scale20.decodeScale)(
5854
+ const decoded = (0, import_scale21.decodeScale)(
5633
5855
  coder,
5634
5856
  value,
5635
5857
  `Failed to decode base native balance on chain ${networkId}`
@@ -5649,7 +5871,7 @@ var decodeBaseResult = (coder, value, networkId) => {
5649
5871
  return newValues;
5650
5872
  };
5651
5873
  var decodeLocksResult = (coder, value, networkId) => {
5652
- const decoded = (0, import_scale20.decodeScale)(
5874
+ const decoded = (0, import_scale21.decodeScale)(
5653
5875
  coder,
5654
5876
  value,
5655
5877
  `Failed to decode lock on chain ${networkId}`
@@ -5664,7 +5886,7 @@ var decodeLocksResult = (coder, value, networkId) => {
5664
5886
  return locksQueryLocks;
5665
5887
  };
5666
5888
  var decodeFreezesResult = (coder, value, networkId) => {
5667
- const decoded = (0, import_scale20.decodeScale)(
5889
+ const decoded = (0, import_scale21.decodeScale)(
5668
5890
  coder,
5669
5891
  value,
5670
5892
  `Failed to decode freeze on chain ${networkId}`
@@ -5678,7 +5900,7 @@ var decodeFreezesResult = (coder, value, networkId) => {
5678
5900
  return freezesValues;
5679
5901
  };
5680
5902
  var decodeHoldsResult = (coder, value, networkId) => {
5681
- const decoded = (0, import_scale20.decodeScale)(
5903
+ const decoded = (0, import_scale21.decodeScale)(
5682
5904
  coder,
5683
5905
  value,
5684
5906
  `Failed to decode holds on chain ${networkId}`
@@ -5694,7 +5916,7 @@ var decodeHoldsResult = (coder, value, networkId) => {
5694
5916
  return holdsValues;
5695
5917
  };
5696
5918
  var decodeStakingLedgerResult = (coder, value, networkId) => {
5697
- const decoded = (0, import_scale20.decodeScale)(
5919
+ const decoded = (0, import_scale21.decodeScale)(
5698
5920
  coder,
5699
5921
  value,
5700
5922
  `Failed to decode unbonding query on chain ${networkId}`
@@ -5711,7 +5933,7 @@ var decodeStakingLedgerResult = (coder, value, networkId) => {
5711
5933
  return stakingLedgerResults;
5712
5934
  };
5713
5935
  var decodePoolMemberResult = (coder, value, networkId) => {
5714
- const decoded = (0, import_scale20.decodeScale)(
5936
+ const decoded = (0, import_scale21.decodeScale)(
5715
5937
  coder,
5716
5938
  value,
5717
5939
  `Failed to decode poolMembers on chain ${networkId}`
@@ -5733,7 +5955,7 @@ var decodePoolMemberResult = (coder, value, networkId) => {
5733
5955
  };
5734
5956
 
5735
5957
  // src/modules/substrate-native/queries/buildNomPoolQueries.ts
5736
- var import_scale21 = require("@talismn/scale");
5958
+ var import_scale22 = require("@talismn/scale");
5737
5959
 
5738
5960
  // src/modules/substrate-native/util/nompoolAccountId.ts
5739
5961
  var import_utils7 = require("@polkadot-api/utils");
@@ -5826,7 +6048,7 @@ var getNomPoolCoders = (networkId, miniMetadata) => {
5826
6048
  });
5827
6049
  };
5828
6050
  var decodePoolPoints = (coder, value, networkId) => {
5829
- const decoded = (0, import_scale21.decodeScale)(
6051
+ const decoded = (0, import_scale22.decodeScale)(
5830
6052
  coder,
5831
6053
  value,
5832
6054
  `Failed to decode bondedPools on chain ${networkId}`
@@ -5834,7 +6056,7 @@ var decodePoolPoints = (coder, value, networkId) => {
5834
6056
  return { poolPoints: decoded?.points.toString() };
5835
6057
  };
5836
6058
  var decodePoolStake = (coder, value, networkId) => {
5837
- const decoded = (0, import_scale21.decodeScale)(
6059
+ const decoded = (0, import_scale22.decodeScale)(
5838
6060
  coder,
5839
6061
  value,
5840
6062
  `Failed to decode ledger on chain ${networkId}`
@@ -5842,7 +6064,7 @@ var decodePoolStake = (coder, value, networkId) => {
5842
6064
  return { poolTotalActiveStake: decoded?.active.toString() };
5843
6065
  };
5844
6066
  var decodePoolMeta = (coder, value, networkId) => {
5845
- const decoded = (0, import_scale21.decodeScale)(
6067
+ const decoded = (0, import_scale22.decodeScale)(
5846
6068
  coder,
5847
6069
  value,
5848
6070
  `Failed to decode metadata on chain ${networkId}`
@@ -5961,7 +6183,7 @@ var getChainProperties = async (connector, networkId) => {
5961
6183
 
5962
6184
  // src/modules/substrate-native/getMiniMetadata.ts
5963
6185
  var import_chaindata_provider59 = require("@talismn/chaindata-provider");
5964
- var import_scale22 = require("@talismn/scale");
6186
+ var import_scale23 = require("@talismn/scale");
5965
6187
  var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
5966
6188
  const source = MODULE_TYPE11;
5967
6189
  const chainId = networkId;
@@ -5971,7 +6193,7 @@ var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
5971
6193
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
5972
6194
  );
5973
6195
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
5974
- const { metadata, unifiedMetadata } = (0, import_scale22.parseMetadataRpc)(metadataRpc);
6196
+ const { metadata, unifiedMetadata } = (0, import_scale23.parseMetadataRpc)(metadataRpc);
5975
6197
  if (unifiedMetadata.version < 14)
5976
6198
  throw new Error(
5977
6199
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -6000,7 +6222,7 @@ var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
6000
6222
  unifiedMetadata.pallets.find(({ name }) => name === "Balances")?.storage?.items.find(({ name }) => name === "Freezes")
6001
6223
  );
6002
6224
  const useLegacyTransferableCalculation = !hasFreezesItem;
6003
- (0, import_scale22.compactMetadata)(metadata, [
6225
+ (0, import_scale23.compactMetadata)(metadata, [
6004
6226
  { pallet: "System", constants: ["Version", "SS58Prefix"], items: ["Account"] },
6005
6227
  { pallet: "Balances", items: ["Reserves", "Holds", "Locks", "Freezes"] },
6006
6228
  { pallet: "NominationPools", items: ["PoolMembers", "BondedPools", "Metadata"] },
@@ -6012,7 +6234,7 @@ var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
6012
6234
  chainId,
6013
6235
  specVersion,
6014
6236
  version: import_chaindata_provider59.MINIMETADATA_VERSION,
6015
- data: (0, import_scale22.encodeMetadata)(metadata),
6237
+ data: (0, import_scale23.encodeMetadata)(metadata),
6016
6238
  extra: {
6017
6239
  useLegacyTransferableCalculation,
6018
6240
  existentialDeposit,
@@ -6024,7 +6246,7 @@ var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
6024
6246
  // src/modules/substrate-native/getTransferCallData.ts
6025
6247
  var import_utils8 = require("@polkadot-api/utils");
6026
6248
  var import_chaindata_provider60 = require("@talismn/chaindata-provider");
6027
- var import_scale23 = require("@talismn/scale");
6249
+ var import_scale24 = require("@talismn/scale");
6028
6250
  var import_polkadot_api6 = require("polkadot-api");
6029
6251
  var getTransferCallData11 = ({
6030
6252
  from: from2,
@@ -6036,7 +6258,7 @@ var getTransferCallData11 = ({
6036
6258
  }) => {
6037
6259
  if (!(0, import_chaindata_provider60.isTokenOfType)(token, MODULE_TYPE11))
6038
6260
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE11}.`);
6039
- const { unifiedMetadata, lookupFn, builder } = (0, import_scale23.parseMetadataRpc)(metadataRpc);
6261
+ const { unifiedMetadata, lookupFn, builder } = (0, import_scale24.parseMetadataRpc)(metadataRpc);
6040
6262
  const method = getTransferMethod3(type, unifiedMetadata, lookupFn);
6041
6263
  const { codec, location } = builder.buildCall("Balances", method);
6042
6264
  const args = getEncodedArgs3(method, to, value, codec);
@@ -7336,7 +7558,7 @@ var fetchTokens12 = async ({
7336
7558
 
7337
7559
  // src/modules/substrate-psp22/getMiniMetadata.ts
7338
7560
  var import_chaindata_provider63 = require("@talismn/chaindata-provider");
7339
- var import_scale24 = require("@talismn/scale");
7561
+ var import_scale25 = require("@talismn/scale");
7340
7562
  var getMiniMetadata12 = ({
7341
7563
  networkId,
7342
7564
  specVersion,
@@ -7350,7 +7572,7 @@ var getMiniMetadata12 = ({
7350
7572
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
7351
7573
  );
7352
7574
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
7353
- const { unifiedMetadata } = (0, import_scale24.parseMetadataRpc)(metadataRpc);
7575
+ const { unifiedMetadata } = (0, import_scale25.parseMetadataRpc)(metadataRpc);
7354
7576
  if (unifiedMetadata.version < 14)
7355
7577
  throw new Error(
7356
7578
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -7371,13 +7593,13 @@ var import_api_contract3 = require("@polkadot/api-contract");
7371
7593
  var import_types19 = require("@polkadot/types");
7372
7594
  var import_utils9 = require("@polkadot-api/utils");
7373
7595
  var import_chaindata_provider64 = require("@talismn/chaindata-provider");
7374
- var import_scale25 = require("@talismn/scale");
7596
+ var import_scale26 = require("@talismn/scale");
7375
7597
  var import_polkadot_api7 = require("polkadot-api");
7376
7598
  var getTransferCallData12 = async ({ from: from2, to, value, token, metadataRpc, connector }) => {
7377
7599
  if (!(0, import_chaindata_provider64.isTokenOfType)(token, MODULE_TYPE12))
7378
7600
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE12}.`);
7379
7601
  const networkId = (0, import_chaindata_provider64.parseTokenId)(token.id).networkId;
7380
- const { builder } = (0, import_scale25.parseMetadataRpc)(metadataRpc);
7602
+ const { builder } = (0, import_scale26.parseMetadataRpc)(metadataRpc);
7381
7603
  const { codec, location } = builder.buildCall("Contracts", "call");
7382
7604
  const Psp22Abi = new import_api_contract3.Abi(psp22_default);
7383
7605
  const registry = new import_types19.TypeRegistry();
@@ -7474,8 +7696,8 @@ var MODULE_TYPE13 = import_chaindata_provider66.SubTokensTokenSchema.shape.type.
7474
7696
  var PLATFORM13 = import_chaindata_provider66.SubTokensTokenSchema.shape.platform.value;
7475
7697
 
7476
7698
  // src/modules/substrate-tokens/buildQueries.ts
7477
- var import_scale26 = require("@talismn/scale");
7478
- var import_util13 = require("@talismn/util");
7699
+ var import_scale27 = require("@talismn/scale");
7700
+ var import_util15 = require("@talismn/util");
7479
7701
  var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
7480
7702
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
7481
7703
  storage: [miniMetadata.extra.palletId, "Accounts"]
@@ -7484,7 +7706,7 @@ var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
7484
7706
  const scaleCoder = networkStorageCoders?.storage;
7485
7707
  const getStateKey = (onChainId) => {
7486
7708
  try {
7487
- return scaleCoder.keys.enc(address, (0, import_scale26.papiParse)(onChainId));
7709
+ return scaleCoder.keys.enc(address, (0, import_scale27.papiParse)(onChainId));
7488
7710
  } catch {
7489
7711
  return null;
7490
7712
  }
@@ -7497,7 +7719,7 @@ var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
7497
7719
  return null;
7498
7720
  }
7499
7721
  const decodeResult = (changes) => {
7500
- const decoded = (0, import_scale26.decodeScale)(
7722
+ const decoded = (0, import_scale27.decodeScale)(
7501
7723
  scaleCoder,
7502
7724
  changes[0],
7503
7725
  `Failed to decode substrate-tokens balance on chain ${networkId}`
@@ -7523,7 +7745,7 @@ var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
7523
7745
  stateKeys: [stateKey],
7524
7746
  decodeResult
7525
7747
  };
7526
- }).filter(import_util13.isNotNil);
7748
+ }).filter(import_util15.isNotNil);
7527
7749
  };
7528
7750
 
7529
7751
  // src/modules/substrate-tokens/fetchBalances.ts
@@ -7621,7 +7843,7 @@ var fetchTokens13 = async ({
7621
7843
 
7622
7844
  // src/modules/substrate-tokens/getMiniMetadata.ts
7623
7845
  var import_chaindata_provider68 = require("@talismn/chaindata-provider");
7624
- var import_scale27 = require("@talismn/scale");
7846
+ var import_scale28 = require("@talismn/scale");
7625
7847
  var getMiniMetadata13 = ({ networkId, specVersion, metadataRpc, config }) => {
7626
7848
  const source = MODULE_TYPE13;
7627
7849
  const chainId = networkId;
@@ -7631,7 +7853,7 @@ var getMiniMetadata13 = ({ networkId, specVersion, metadataRpc, config }) => {
7631
7853
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
7632
7854
  );
7633
7855
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
7634
- const { unifiedMetadata } = (0, import_scale27.parseMetadataRpc)(metadataRpc);
7856
+ const { unifiedMetadata } = (0, import_scale28.parseMetadataRpc)(metadataRpc);
7635
7857
  if (unifiedMetadata.version < 14)
7636
7858
  throw new Error(
7637
7859
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -7648,21 +7870,21 @@ var getMiniMetadata13 = ({ networkId, specVersion, metadataRpc, config }) => {
7648
7870
  };
7649
7871
  };
7650
7872
  var getData5 = (metadataRpc, pallet) => {
7651
- const { metadata, unifiedMetadata } = (0, import_scale27.parseMetadataRpc)(metadataRpc);
7873
+ const { metadata, unifiedMetadata } = (0, import_scale28.parseMetadataRpc)(metadataRpc);
7652
7874
  if (!hasStorageItems(unifiedMetadata, pallet, ["Accounts"])) return null;
7653
- (0, import_scale27.compactMetadata)(metadata, [{ pallet, items: ["Accounts"] }]);
7654
- return (0, import_scale27.encodeMetadata)(metadata);
7875
+ (0, import_scale28.compactMetadata)(metadata, [{ pallet, items: ["Accounts"] }]);
7876
+ return (0, import_scale28.encodeMetadata)(metadata);
7655
7877
  };
7656
7878
 
7657
7879
  // src/modules/substrate-tokens/getTransferCallData.ts
7658
7880
  var import_utils10 = require("@polkadot-api/utils");
7659
7881
  var import_chaindata_provider69 = require("@talismn/chaindata-provider");
7660
- var import_scale28 = require("@talismn/scale");
7882
+ var import_scale29 = require("@talismn/scale");
7661
7883
  var import_polkadot_api8 = require("polkadot-api");
7662
7884
  var getTransferCallData13 = ({ from: from2, to, value, token, type, metadataRpc, config }) => {
7663
7885
  if (!(0, import_chaindata_provider69.isTokenOfType)(token, MODULE_TYPE13))
7664
7886
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE13}.`);
7665
- const { builder } = (0, import_scale28.parseMetadataRpc)(metadataRpc);
7887
+ const { builder } = (0, import_scale29.parseMetadataRpc)(metadataRpc);
7666
7888
  const options = getCallDataOptions(to, token, value, type, config);
7667
7889
  const callData = getCallDataFromOptions(builder, options);
7668
7890
  return {
@@ -7694,7 +7916,7 @@ var buildCallData = (builder, pallet, method, args) => {
7694
7916
  return import_polkadot_api8.Binary.fromBytes((0, import_utils10.mergeUint8)([new Uint8Array(location), codec.enc(args)]));
7695
7917
  };
7696
7918
  var getCallDataOptions = (to, token, value, type, config) => {
7697
- const onChainId = (0, import_scale28.papiParse)(token.onChainId);
7919
+ const onChainId = (0, import_scale29.papiParse)(token.onChainId);
7698
7920
  const method = getTransferMethod4(type);
7699
7921
  return [
7700
7922
  {
@@ -7835,7 +8057,7 @@ var BALANCE_MODULES = [
7835
8057
 
7836
8058
  // src/getMiniMetadatas/getMetadataRpc.ts
7837
8059
  var import_sapi = require("@talismn/sapi");
7838
- var import_util14 = require("@talismn/util");
8060
+ var import_util16 = require("@talismn/util");
7839
8061
  var CACHE = /* @__PURE__ */ new Map();
7840
8062
  var getMetadataRpc = async (chainConnector, networkId) => {
7841
8063
  if (CACHE.has(networkId)) return CACHE.get(networkId);
@@ -7849,7 +8071,7 @@ var getMetadataRpc = async (chainConnector, networkId) => {
7849
8071
  try {
7850
8072
  return await pResult;
7851
8073
  } catch (cause) {
7852
- if ((0, import_util14.isAbortError)(cause)) throw cause;
8074
+ if ((0, import_util16.isAbortError)(cause)) throw cause;
7853
8075
  throw new Error(`Failed to fetch metadataRpc for network ${networkId}`, { cause });
7854
8076
  } finally {
7855
8077
  CACHE.delete(networkId);
@@ -7938,16 +8160,16 @@ var BalancesProvider = class {
7938
8160
  this.#chaindataProvider = chaindataProvider;
7939
8161
  this.#chainConnectors = chainConnectors;
7940
8162
  this.#storage = new import_rxjs16.BehaviorSubject({
7941
- balances: (0, import_lodash_es30.keyBy)(storage.balances.filter(import_util15.isNotNil), (b) => getBalanceId(b)),
7942
- miniMetadatas: (0, import_lodash_es30.keyBy)(storage.miniMetadatas.filter(import_util15.isNotNil), (m) => m.id)
8163
+ balances: (0, import_lodash_es30.keyBy)(storage.balances.filter(import_util17.isNotNil), (b) => getBalanceId(b)),
8164
+ miniMetadatas: (0, import_lodash_es30.keyBy)(storage.miniMetadatas.filter(import_util17.isNotNil), (m) => m.id)
7943
8165
  });
7944
8166
  }
7945
8167
  get storage$() {
7946
8168
  return this.#storage.pipe(
7947
8169
  (0, import_rxjs16.map)(
7948
8170
  ({ balances, miniMetadatas }) => ({
7949
- balances: (0, import_lodash_es30.values)(balances).filter(import_util15.isNotNil).sort(sortByBalanceId),
7950
- miniMetadatas: (0, import_lodash_es30.values)(miniMetadatas).filter(import_util15.isNotNil).sort(sortByMiniMetadataId)
8171
+ balances: (0, import_lodash_es30.values)(balances).filter(import_util17.isNotNil).sort(sortByBalanceId),
8172
+ miniMetadatas: (0, import_lodash_es30.values)(miniMetadatas).filter(import_util17.isNotNil).sort(sortByMiniMetadataId)
7951
8173
  }),
7952
8174
  (0, import_rxjs16.shareReplay)(1)
7953
8175
  )
@@ -8048,7 +8270,7 @@ var BalancesProvider = class {
8048
8270
  }),
8049
8271
  (0, import_rxjs16.map)((results) => {
8050
8272
  const errorBalanceIds = results.flatMap((result) => result.failedBalanceIds);
8051
- const staleBalances = errorBalanceIds.map((balanceId) => this.#storage.value.balances[balanceId]).filter(import_util15.isNotNil).map((b) => ({ ...b, status: "stale" }));
8273
+ const staleBalances = errorBalanceIds.map((balanceId) => this.#storage.value.balances[balanceId]).filter(import_util17.isNotNil).map((b) => ({ ...b, status: "stale" }));
8052
8274
  return {
8053
8275
  status: results.some(({ status }) => status === "initialising") ? "initialising" : "live",
8054
8276
  balances: results.flatMap((result) => result.balances).concat(staleBalances).sort(sortByBalanceId),
@@ -8059,7 +8281,7 @@ var BalancesProvider = class {
8059
8281
  );
8060
8282
  }
8061
8283
  getPolkadotNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
8062
- return (0, import_util15.getSharedObservable)(
8284
+ return (0, import_util17.getSharedObservable)(
8063
8285
  `BalancesProvider.getPolkadotNetworkModuleBalances$`,
8064
8286
  { networkId, mod, tokensWithAddresses },
8065
8287
  () => {
@@ -8101,8 +8323,14 @@ var BalancesProvider = class {
8101
8323
  (0, import_rxjs16.map)(
8102
8324
  (results) => ({
8103
8325
  status: "live",
8104
- // exclude zero balances
8105
- balances: results.success.filter((b) => new Balance(b).total.planck > 0n),
8326
+ // exclude zero balances, but keep balances that only hold a lock
8327
+ // (eg dtao conviction locks, reported on the subnet's base token — including
8328
+ // zero-mass "ghost" locks with residual conviction, which still pin the hotkey
8329
+ // of future lock_stake calls)
8330
+ balances: results.success.filter((b) => {
8331
+ const balance = new Balance(b);
8332
+ return balance.total.planck > 0n || balance.locks.some((lock) => lock.amount.planck > 0n) || !!findDTaoConvictionLock(balance.locks);
8333
+ }),
8106
8334
  failedBalanceIds: results.errors.map(
8107
8335
  ({ tokenId, address }) => getBalanceId({ tokenId, address })
8108
8336
  )
@@ -8113,7 +8341,7 @@ var BalancesProvider = class {
8113
8341
  }),
8114
8342
  // shareReplay + keepAlive(0) keep the subscription alive while root observable is being unsubscribed+resubscribed, in case any input change
8115
8343
  (0, import_rxjs16.shareReplay)({ refCount: true, bufferSize: 1 }),
8116
- (0, import_util15.keepAlive)(0)
8344
+ (0, import_util17.keepAlive)(0)
8117
8345
  );
8118
8346
  return (0, import_rxjs16.defer)(
8119
8347
  () => moduleBalances$.pipe(
@@ -8128,7 +8356,7 @@ var BalancesProvider = class {
8128
8356
  );
8129
8357
  }
8130
8358
  getEthereumNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
8131
- return (0, import_util15.getSharedObservable)(
8359
+ return (0, import_util17.getSharedObservable)(
8132
8360
  `BalancesProvider.getEthereumNetworkModuleBalances$`,
8133
8361
  { networkId, mod, tokensWithAddresses },
8134
8362
  () => {
@@ -8172,7 +8400,7 @@ var BalancesProvider = class {
8172
8400
  }),
8173
8401
  // shareReplay + keepAlive(0) keep the subscription alive while root observable is being unsubscribed+resubscribed, in case any input change
8174
8402
  (0, import_rxjs16.shareReplay)({ refCount: true, bufferSize: 1 }),
8175
- (0, import_util15.keepAlive)(0)
8403
+ (0, import_util17.keepAlive)(0)
8176
8404
  );
8177
8405
  return (0, import_rxjs16.defer)(
8178
8406
  () => moduleBalances$.pipe(
@@ -8187,7 +8415,7 @@ var BalancesProvider = class {
8187
8415
  );
8188
8416
  }
8189
8417
  getSolanaNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
8190
- return (0, import_util15.getSharedObservable)(
8418
+ return (0, import_util17.getSharedObservable)(
8191
8419
  `BalancesProvider.getSolanaNetworkModuleBalances$`,
8192
8420
  { networkId, mod, tokensWithAddresses },
8193
8421
  () => {
@@ -8236,7 +8464,7 @@ var BalancesProvider = class {
8236
8464
  }),
8237
8465
  // shareReplay + keepAlive(0) keep the subscription alive while root observable is being unsubscribed+resubscribed, in case any input change
8238
8466
  (0, import_rxjs16.shareReplay)({ refCount: true, bufferSize: 1 }),
8239
- (0, import_util15.keepAlive)(0)
8467
+ (0, import_util17.keepAlive)(0)
8240
8468
  );
8241
8469
  return (0, import_rxjs16.defer)(
8242
8470
  () => moduleBalances$.pipe(
@@ -8274,7 +8502,7 @@ var BalancesProvider = class {
8274
8502
  this.#storage.next((0, import_lodash_es30.assign)({}, storage, { balances }));
8275
8503
  }
8276
8504
  getNetworkMiniMetadatas$(networkId) {
8277
- return (0, import_util15.getSharedObservable)(`BalancesProvider.getNetworkMiniMetadatas$`, { networkId }, () => {
8505
+ return (0, import_util17.getSharedObservable)(`BalancesProvider.getNetworkMiniMetadatas$`, { networkId }, () => {
8278
8506
  return this.#chaindataProvider.getNetworkById$(networkId).pipe(
8279
8507
  (0, import_rxjs16.switchMap)(
8280
8508
  (network) => (0, import_chaindata_provider71.isNetworkDot)(network) ? this.getNetworkSpecVersion$(networkId).pipe(
@@ -8368,7 +8596,7 @@ var BalancesProvider = class {
8368
8596
  return this.storedMiniMetadataMapById$.pipe(
8369
8597
  (0, import_rxjs16.map)((mapById) => {
8370
8598
  const miniMetadatas = miniMetadataIds.map((id) => mapById[id]);
8371
- return miniMetadatas.length && miniMetadatas.every(import_util15.isTruthy) ? miniMetadatas : null;
8599
+ return miniMetadatas.length && miniMetadatas.every(import_util17.isTruthy) ? miniMetadatas : null;
8372
8600
  }),
8373
8601
  // source changes very often
8374
8602
  (0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual)
@@ -8378,7 +8606,7 @@ var BalancesProvider = class {
8378
8606
  return this.#chaindataProvider.miniMetadatasMapById$.pipe(
8379
8607
  (0, import_rxjs16.map)((mapById) => {
8380
8608
  const miniMetadatas = miniMetadataIds.map((id) => mapById[id]);
8381
- return miniMetadatas.length && miniMetadatas.every(import_util15.isTruthy) ? miniMetadatas : null;
8609
+ return miniMetadatas.length && miniMetadatas.every(import_util17.isTruthy) ? miniMetadatas : null;
8382
8610
  })
8383
8611
  );
8384
8612
  }
@@ -8386,7 +8614,7 @@ var BalancesProvider = class {
8386
8614
  const balanceDefs = (0, import_lodash_es30.toPairs)(addressesByToken).flatMap(
8387
8615
  ([tokenId, addresses]) => addresses.map((address) => [tokenId, address])
8388
8616
  );
8389
- return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({ address, tokenId })]).filter(import_util15.isNotNil).sort(sortByBalanceId);
8617
+ return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({ address, tokenId })]).filter(import_util17.isNotNil).sort(sortByBalanceId);
8390
8618
  }
8391
8619
  cleanupAddressesByTokenId$(addressesByTokenId) {
8392
8620
  return this.#chaindataProvider.getNetworksMapById$().pipe(
@@ -8490,7 +8718,9 @@ var import_chaindata_provider72 = require("@talismn/chaindata-provider");
8490
8718
  excludeFromTransferableAmount,
8491
8719
  filterBaseLocks,
8492
8720
  filterMirrorTokens,
8721
+ findDTaoConvictionLock,
8493
8722
  getBalanceId,
8723
+ getConvictionLockLabel,
8494
8724
  getDTaoTokenRates,
8495
8725
  getLockTitle,
8496
8726
  getLockedType,
@@ -8498,6 +8728,7 @@ var import_chaindata_provider72 = require("@talismn/chaindata-provider");
8498
8728
  getValueId,
8499
8729
  includeInTotalExtraAmount,
8500
8730
  taoToAlpha,
8731
+ taoToAlphaCeil,
8501
8732
  uniswapV2PairAbi
8502
8733
  });
8503
8734
  //# sourceMappingURL=index.js.map