@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.mjs CHANGED
@@ -1,3 +1,8 @@
1
+ // src/configureBigNumber.ts
2
+ import BigNumber from "bignumber.js";
3
+ BigNumber.set({ STRICT: false });
4
+ var configureBigNumber_default = BigNumber;
5
+
1
6
  // src/BalancesProvider.ts
2
7
  import {
3
8
  isNetworkDot,
@@ -38,7 +43,7 @@ import anylogger from "anylogger";
38
43
  // package.json
39
44
  var package_default = {
40
45
  name: "@talismn/balances",
41
- version: "1.4.0",
46
+ version: "1.5.0",
42
47
  author: "Talisman",
43
48
  homepage: "https://talisman.xyz",
44
49
  license: "GPL-3.0-or-later",
@@ -66,9 +71,9 @@ var package_default = {
66
71
  },
67
72
  dependencies: {
68
73
  "@metaplex-foundation/mpl-token-metadata": "^3.4.0",
69
- "@metaplex-foundation/umi": "^1.2.0",
74
+ "@metaplex-foundation/umi": "^1.5.1",
70
75
  "@polkadot-api/utils": "0.2.0",
71
- "@solana/spl-token": "^0.4.13",
76
+ "@solana/spl-token": "^0.4.14",
72
77
  "@solana/web3.js": "^1.98.2",
73
78
  "@talismn/chain-connectors": "workspace:*",
74
79
  "@talismn/chaindata-provider": "workspace:*",
@@ -78,21 +83,22 @@ var package_default = {
78
83
  "@talismn/token-rates": "workspace:*",
79
84
  "@talismn/util": "workspace:*",
80
85
  anylogger: "^1.0.11",
81
- "bignumber.js": "^9.1.2",
82
- "lodash-es": "4.17.21",
86
+ "bignumber.js": "^11.1.3",
87
+ "lodash-es": "4.18.1",
83
88
  "p-queue": "8.1.0",
84
89
  "polkadot-api": "1.23.3",
85
- rxjs: "^7.8.1",
90
+ rxjs: "^7.8.2",
86
91
  "scale-ts": "^1.6.1",
87
- viem: "^2.27.3",
88
- zod: "^3.25.76"
92
+ viem: "2.52.2",
93
+ zod: "^4.4.3"
89
94
  },
90
95
  devDependencies: {
91
96
  "@polkadot/api-contract": "16.1.2",
92
97
  "@polkadot/types": "16.1.2",
93
98
  "@talismn/tsconfig": "workspace:*",
94
99
  "@types/lodash-es": "4.17.12",
95
- typescript: "^5.6.3"
100
+ "@types/node": "^24.5.1",
101
+ typescript: "^6.0.3"
96
102
  },
97
103
  peerDependencies: {
98
104
  "@polkadot/api-contract": "*",
@@ -1019,13 +1025,8 @@ import { assign, omit } from "lodash-es";
1019
1025
  import z from "zod/v4";
1020
1026
 
1021
1027
  // src/modules/evm-erc20/utils.ts
1022
- import {
1023
- ContractFunctionExecutionError,
1024
- erc20Abi as erc20Abi2,
1025
- erc20Abi_bytes32,
1026
- getContract,
1027
- hexToString
1028
- } from "viem";
1028
+ import { isErrorOfName } from "@talismn/util";
1029
+ import { erc20Abi as erc20Abi2, erc20Abi_bytes32, getContract, hexToString } from "viem";
1029
1030
  var getErc20ContractData = async (client, contractAddress) => {
1030
1031
  try {
1031
1032
  const contract = getTypedContract(client, erc20Abi2, contractAddress);
@@ -1035,7 +1036,7 @@ var getErc20ContractData = async (client, contractAddress) => {
1035
1036
  contract.read.name()
1036
1037
  ]);
1037
1038
  } catch (e) {
1038
- if (e instanceof ContractFunctionExecutionError) {
1039
+ if (isErrorOfName(e, "ContractFunctionExecutionError")) {
1039
1040
  const contract = getTypedContract(client, erc20Abi_bytes32, contractAddress);
1040
1041
  var [bytesSymbol, decimals, nameSymbol] = await Promise.all([
1041
1042
  contract.read.symbol(),
@@ -1252,21 +1253,30 @@ var fetchBalances2 = async ({
1252
1253
  }
1253
1254
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
1254
1255
  if (client.chain?.contracts?.multicall3 && balanceDefs.length > 1) {
1255
- const multicall3 = client.chain.contracts.multicall3;
1256
- return fetchWithMulticall(client, balanceDefs, multicall3.address);
1256
+ try {
1257
+ return await fetchWithMulticall(
1258
+ client,
1259
+ balanceDefs,
1260
+ client.chain.contracts.multicall3.address
1261
+ );
1262
+ } catch {
1263
+ }
1257
1264
  }
1258
- return fetchWithoutMulticall(client, balanceDefs);
1265
+ return fetchWithGetBalance(client, balanceDefs);
1259
1266
  };
1260
- var fetchWithoutMulticall = async (client, balanceDefs) => {
1267
+ var fetchWithGetBalance = async (client, balanceDefs) => {
1261
1268
  if (balanceDefs.length === 0) return { success: [], errors: [] };
1262
1269
  const results = await Promise.allSettled(
1263
1270
  balanceDefs.map(async ({ token, address }) => {
1264
1271
  try {
1265
- const result = await client.getBalance({ address });
1272
+ const result = await client.request({
1273
+ method: "eth_getBalance",
1274
+ params: [address, "latest"]
1275
+ });
1266
1276
  const balance = {
1267
1277
  address,
1268
1278
  tokenId: token.id,
1269
- value: result.toString(),
1279
+ value: BigInt(result).toString(),
1270
1280
  source: MODULE_TYPE2,
1271
1281
  networkId: parseTokenId2(token.id).networkId,
1272
1282
  status: "live"
@@ -1300,55 +1310,28 @@ var fetchWithoutMulticall = async (client, balanceDefs) => {
1300
1310
  };
1301
1311
  var fetchWithMulticall = async (client, balanceDefs, multicall3Address) => {
1302
1312
  if (balanceDefs.length === 0) return { success: [], errors: [] };
1303
- try {
1304
- const callResults = await client.multicall({
1305
- contracts: balanceDefs.map(({ address }) => ({
1306
- address: multicall3Address,
1307
- abi: abiMulticall,
1308
- functionName: "getEthBalance",
1309
- args: [address]
1310
- }))
1311
- });
1312
- return callResults.reduce(
1313
- (acc, result, index) => {
1314
- if (result.status === "success") {
1315
- acc.success.push({
1316
- address: balanceDefs[index].address,
1317
- tokenId: balanceDefs[index].token.id,
1318
- value: result.result.toString(),
1319
- source: MODULE_TYPE2,
1320
- networkId: parseTokenId2(balanceDefs[index].token.id).networkId,
1321
- status: "live"
1322
- });
1323
- }
1324
- if (result.status === "failure") {
1325
- acc.errors.push({
1326
- tokenId: balanceDefs[index].token.id,
1327
- address: balanceDefs[index].address,
1328
- error: new BalanceFetchError(
1329
- `Failed to get balance for token ${balanceDefs[index].token.id} and address ${balanceDefs[index].address} on chain ${client.chain?.id}`,
1330
- balanceDefs[index].token.id,
1331
- balanceDefs[index].address,
1332
- result.error
1333
- )
1334
- });
1335
- }
1336
- return acc;
1337
- },
1338
- { success: [], errors: [] }
1339
- );
1340
- } catch (err) {
1341
- const errors = balanceDefs.map((balanceDef) => ({
1342
- tokenId: balanceDef.token.id,
1343
- address: balanceDef.address,
1344
- error: new BalanceFetchNetworkError(
1345
- `Failed to get balances for evm-erc20 tokens on chain ${client.chain?.id}`,
1346
- String(client.chain?.id),
1347
- err
1348
- )
1349
- }));
1350
- return { success: [], errors };
1351
- }
1313
+ const results = await client.multicall({
1314
+ allowFailure: false,
1315
+ contracts: balanceDefs.map(({ address }) => ({
1316
+ address: multicall3Address,
1317
+ abi: abiMulticall,
1318
+ functionName: "getEthBalance",
1319
+ args: [address]
1320
+ }))
1321
+ });
1322
+ return {
1323
+ success: results.map(
1324
+ (value, index) => ({
1325
+ address: balanceDefs[index].address,
1326
+ tokenId: balanceDefs[index].token.id,
1327
+ value: String(value),
1328
+ source: MODULE_TYPE2,
1329
+ networkId: parseTokenId2(balanceDefs[index].token.id).networkId,
1330
+ status: "live"
1331
+ })
1332
+ ),
1333
+ errors: []
1334
+ };
1352
1335
  };
1353
1336
 
1354
1337
  // src/modules/evm-native/fetchTokens.ts
@@ -1469,7 +1452,6 @@ var PLATFORM3 = EvmUniswapV2TokenSchema.shape.platform.value;
1469
1452
  // src/modules/evm-uniswapv2/fetchBalances.ts
1470
1453
  import { parseTokenId as parseTokenId3 } from "@talismn/chaindata-provider";
1471
1454
  import { isEthereumAddress as isEthereumAddress5 } from "@talismn/crypto";
1472
- import BigNumber from "bignumber.js";
1473
1455
  import { keyBy, uniq } from "lodash-es";
1474
1456
  import { getContract as getContract2 } from "viem";
1475
1457
  var fetchBalances3 = async ({
@@ -1561,7 +1543,7 @@ var fetchPoolBalances = async (client, balanceDefs) => {
1561
1543
  label,
1562
1544
  amount
1563
1545
  });
1564
- const ratio = BigNumber(String(balance)).div(totalSupply === 0n ? "1" : String(totalSupply));
1546
+ const ratio = configureBigNumber_default(String(balance)).div(totalSupply === 0n ? "1" : String(totalSupply));
1565
1547
  acc.success.push({
1566
1548
  address,
1567
1549
  tokenId: token.id,
@@ -1593,13 +1575,8 @@ import { assign as assign3, omit as omit2 } from "lodash-es";
1593
1575
  import z4 from "zod/v4";
1594
1576
 
1595
1577
  // src/modules/evm-uniswapv2/utils.ts
1596
- import {
1597
- ContractFunctionExecutionError as ContractFunctionExecutionError2,
1598
- erc20Abi as erc20Abi4,
1599
- erc20Abi_bytes32 as erc20Abi_bytes322,
1600
- getContract as getContract3,
1601
- hexToString as hexToString2
1602
- } from "viem";
1578
+ import { isErrorOfName as isErrorOfName2 } from "@talismn/util";
1579
+ import { erc20Abi as erc20Abi4, erc20Abi_bytes32 as erc20Abi_bytes322, getContract as getContract3, hexToString as hexToString2 } from "viem";
1603
1580
  var getErc20ContractData2 = async (client, contractAddress) => {
1604
1581
  try {
1605
1582
  const contract = getTypedContract2(client, erc20Abi4, contractAddress);
@@ -1609,7 +1586,7 @@ var getErc20ContractData2 = async (client, contractAddress) => {
1609
1586
  contract.read.name()
1610
1587
  ]);
1611
1588
  } catch (e) {
1612
- if (e instanceof ContractFunctionExecutionError2) {
1589
+ if (isErrorOfName2(e, "ContractFunctionExecutionError")) {
1613
1590
  const contract = getTypedContract2(client, erc20Abi_bytes322, contractAddress);
1614
1591
  var [bytesSymbol, decimals, nameSymbol] = await Promise.all([
1615
1592
  contract.read.symbol(),
@@ -2051,9 +2028,9 @@ var buildNetworkStorageCoders = (chainId, miniMetadata, coders) => {
2051
2028
 
2052
2029
  // src/modules/shared/fetchRuntimeCallResult.ts
2053
2030
  import { parseMetadataRpc, toHex } from "@talismn/scale";
2054
- var fetchRuntimeCallResult = async (connector, networkId, metadataRpc, apiName, method, args) => {
2031
+ var fetchRuntimeCallResult = async (connector, networkId, metadataRpcOrBuilder, apiName, method, args) => {
2055
2032
  try {
2056
- const { builder } = parseMetadataRpc(metadataRpc);
2033
+ const builder = typeof metadataRpcOrBuilder === "string" ? parseMetadataRpc(metadataRpcOrBuilder).builder : metadataRpcOrBuilder;
2057
2034
  const call = builder.buildRuntimeCall(apiName, method);
2058
2035
  const hex = await connector.send(networkId, "state_call", [
2059
2036
  `${apiName}_${method}`,
@@ -2124,17 +2101,17 @@ var decodeRpcQueryPack = (queries, result) => {
2124
2101
  import { parseMetadataRpc as parseMetadataRpc2 } from "@talismn/scale";
2125
2102
  var hasStorageItem = (metadata, palletName, itemName) => {
2126
2103
  const pallet = metadata.pallets.find((p) => p.name === palletName);
2127
- if (!pallet || !pallet.storage) return false;
2104
+ if (!pallet?.storage) return false;
2128
2105
  return pallet.storage.items.some((item) => item.name === itemName);
2129
2106
  };
2130
2107
  var hasStorageItems = (metadata, palletName, itemNames) => {
2131
2108
  const pallet = metadata.pallets.find((p) => p.name === palletName);
2132
- if (!pallet || !pallet.storage) return false;
2109
+ if (!pallet?.storage) return false;
2133
2110
  return itemNames.every((itemName) => pallet.storage?.items.some((item) => item.name === itemName));
2134
2111
  };
2135
2112
  var hasRuntimeApi = (metadata, apiName, method) => {
2136
2113
  const api = metadata.apis.find((api2) => api2.name === apiName);
2137
- if (!api || !api.methods) return false;
2114
+ if (!api?.methods) return false;
2138
2115
  return api.methods.some((m) => m.name === method);
2139
2116
  };
2140
2117
  var getConstantValue = (metadataRpc, pallet, constant) => {
@@ -2300,7 +2277,7 @@ var fetchBalances5 = async ({
2300
2277
  cached = fetched;
2301
2278
  }
2302
2279
  }
2303
- if (!cached || !cached.isValid) return;
2280
+ if (!cached?.isValid) return;
2304
2281
  const token = {
2305
2282
  id: tokenId,
2306
2283
  type: MODULE_TYPE5,
@@ -2691,7 +2668,7 @@ var fetchBalances6 = async ({
2691
2668
  cached = fetched;
2692
2669
  }
2693
2670
  }
2694
- if (!cached || !cached.isValid) return;
2671
+ if (!cached?.isValid) return;
2695
2672
  const token = {
2696
2673
  id: tokenId,
2697
2674
  type: MODULE_TYPE6,
@@ -3202,7 +3179,7 @@ var fetchTokens7 = async ({
3202
3179
 
3203
3180
  // src/modules/substrate-assets/getMiniMetadata.ts
3204
3181
  import { MINIMETADATA_VERSION as MINIMETADATA_VERSION3 } from "@talismn/chaindata-provider";
3205
- import { compactMetadata as compactMetadata2, encodeMetadata as encodeMetadata2, parseMetadataRpc as parseMetadataRpc8 } from "@talismn/scale";
3182
+ import { compactMetadata as compactMetadata2, encodeMetadata as encodeMetadata2, parseMetadataRpc as parseMetadataRpc9 } from "@talismn/scale";
3206
3183
 
3207
3184
  // src/types/balances.ts
3208
3185
  import { evmErc20TokenId as evmErc20TokenId2 } from "@talismn/chaindata-provider";
@@ -3215,7 +3192,6 @@ import {
3215
3192
  isBigInt,
3216
3193
  planckToTokens
3217
3194
  } from "@talismn/util";
3218
- import BigNumber2 from "bignumber.js";
3219
3195
 
3220
3196
  // src/modules/substrate-dtao/alphaPrice.ts
3221
3197
  var TAO_DECIMALS = 9n;
@@ -3232,6 +3208,179 @@ var taoToAlpha = (tao, scaledAlphaPrice) => {
3232
3208
  if (!tao || !scaledAlphaPrice) return 0n;
3233
3209
  return tao * ALPHA_PRICE_SCALE / scaledAlphaPrice;
3234
3210
  };
3211
+ var taoToAlphaCeil = (tao, scaledAlphaPrice) => {
3212
+ if (!tao || !scaledAlphaPrice) return 0n;
3213
+ return (tao * ALPHA_PRICE_SCALE + scaledAlphaPrice - 1n) / scaledAlphaPrice;
3214
+ };
3215
+
3216
+ // src/modules/substrate-dtao/convictionLocks.ts
3217
+ import {
3218
+ decodeScale as decodeScale2,
3219
+ parseMetadataRpc as parseMetadataRpc4
3220
+ } from "@talismn/scale";
3221
+ var convictionLockKey = (address, netuid) => `${address}:${netuid}`;
3222
+ var getConvictionLockLabel = (lockType) => lockType === "perpetual" ? "Perpetual Conviction Lock" : "Decaying Conviction Lock";
3223
+ var findDTaoConvictionLock = (locks) => {
3224
+ for (const lock of locks ?? []) {
3225
+ const meta = lock.meta;
3226
+ if (meta?.convictionLock?.type !== "conviction-lock") continue;
3227
+ const lockType = meta.convictionLock.lockType;
3228
+ return {
3229
+ amount: lock.amount.planck,
3230
+ hotkey: meta.convictionLock.hotkey,
3231
+ lockType,
3232
+ label: getConvictionLockLabel(lockType)
3233
+ };
3234
+ }
3235
+ return null;
3236
+ };
3237
+ var toBigIntValue = (value) => {
3238
+ if (typeof value === "bigint") return value;
3239
+ if (value && typeof value === "object" && "bits" in value) {
3240
+ const bits = value.bits;
3241
+ if (typeof bits === "bigint") return bits;
3242
+ }
3243
+ return 0n;
3244
+ };
3245
+ var fetchConvictionLocks = async (connector, networkId, metadataRpc, addresses) => {
3246
+ if (!addresses.length) return [];
3247
+ const { unifiedMetadata, builder } = parseMetadataRpc4(metadataRpc);
3248
+ if (!hasRuntimeApi(unifiedMetadata, "StakeInfoRuntimeApi", "get_coldkey_lock") || !hasStorageItems(unifiedMetadata, "SubtensorModule", ["Lock", "DecayingLock"])) {
3249
+ return [];
3250
+ }
3251
+ try {
3252
+ const lockStorageCoder = builder.buildStorage("SubtensorModule", "Lock");
3253
+ const decayingLockStorageCoder = builder.buildStorage("SubtensorModule", "DecayingLock");
3254
+ const lockStorageKeys = await fetchConvictionLockStorageKeys(
3255
+ connector,
3256
+ networkId,
3257
+ addresses,
3258
+ lockStorageCoder
3259
+ );
3260
+ if (!lockStorageKeys.length) return [];
3261
+ const hotkeyByPair = new Map(
3262
+ lockStorageKeys.map(({ address, netuid, hotkey }) => [
3263
+ convictionLockKey(address, netuid),
3264
+ hotkey
3265
+ ])
3266
+ );
3267
+ const [lockModesByPair, lockStates] = await Promise.all([
3268
+ fetchConvictionLockModes(connector, networkId, lockStorageKeys, decayingLockStorageCoder),
3269
+ fetchColdkeyLockStates(connector, networkId, builder, lockStorageKeys)
3270
+ ]);
3271
+ return lockStates.flatMap(({ address, netuid, lockState }) => {
3272
+ const amount = lockState?.locked_mass ?? 0n;
3273
+ const convictionRaw = toBigIntValue(lockState?.conviction);
3274
+ if (amount <= 0n && convictionRaw <= 0n) return [];
3275
+ const hotkey = hotkeyByPair.get(convictionLockKey(address, netuid));
3276
+ if (!hotkey) return [];
3277
+ return [
3278
+ {
3279
+ address,
3280
+ netuid,
3281
+ lock: {
3282
+ amount,
3283
+ hotkey,
3284
+ lockType: lockModesByPair.get(convictionLockKey(address, netuid)) ?? "decaying",
3285
+ convictionRaw: convictionRaw.toString()
3286
+ }
3287
+ }
3288
+ ];
3289
+ });
3290
+ } catch (cause) {
3291
+ log_default.warn(`Failed to fetch Bittensor conviction locks on ${networkId}`, { cause });
3292
+ return [];
3293
+ }
3294
+ };
3295
+ var fetchConvictionLockStorageKeys = async (connector, networkId, addresses, storageCoder) => {
3296
+ const keysPerAddress = await Promise.all(
3297
+ addresses.map(async (address) => {
3298
+ let keyPrefix;
3299
+ try {
3300
+ keyPrefix = storageCoder.keys.enc(address);
3301
+ } catch (cause) {
3302
+ log_default.warn(
3303
+ `Failed to encode conviction Lock key prefix (address=${address}) on ${networkId}`,
3304
+ { cause }
3305
+ );
3306
+ return [];
3307
+ }
3308
+ try {
3309
+ const stateKeys = await connector.send(networkId, "state_getKeys", [
3310
+ keyPrefix
3311
+ ]);
3312
+ return stateKeys.flatMap((stateKey) => {
3313
+ try {
3314
+ const [, netuid, hotkey] = storageCoder.keys.dec(stateKey);
3315
+ return [{ address, netuid, hotkey }];
3316
+ } catch (cause) {
3317
+ log_default.warn(`Failed to decode conviction Lock key ${stateKey} on ${networkId}`, { cause });
3318
+ return [];
3319
+ }
3320
+ });
3321
+ } catch (cause) {
3322
+ log_default.warn(`Failed to fetch conviction Lock keys (address=${address}) on ${networkId}`, {
3323
+ cause
3324
+ });
3325
+ return [];
3326
+ }
3327
+ })
3328
+ );
3329
+ return keysPerAddress.flat();
3330
+ };
3331
+ var fetchConvictionLockModes = async (connector, networkId, pairs, storageCoder) => {
3332
+ const queries = pairs.map(
3333
+ ({ address, netuid }) => {
3334
+ let stateKey = null;
3335
+ try {
3336
+ stateKey = storageCoder.keys.enc(address, netuid);
3337
+ } catch (cause) {
3338
+ log_default.warn(
3339
+ `Failed to encode conviction DecayingLock key (netuid=${netuid}, address=${address}) on ${networkId}`,
3340
+ { cause }
3341
+ );
3342
+ }
3343
+ const key = convictionLockKey(address, netuid);
3344
+ return {
3345
+ stateKeys: [stateKey],
3346
+ decodeResult: (changes) => {
3347
+ const hexValue = changes[0];
3348
+ if (!hexValue) return [key, "decaying"];
3349
+ const decoded = decodeScale2(
3350
+ storageCoder,
3351
+ hexValue,
3352
+ `Failed to decode DecayingLock for (netuid=${netuid}, address=${address}) on ${networkId}`
3353
+ );
3354
+ return [key, decoded === false ? "perpetual" : "decaying"];
3355
+ }
3356
+ };
3357
+ }
3358
+ );
3359
+ return new Map(await fetchRpcQueryPack(connector, networkId, queries));
3360
+ };
3361
+ var fetchColdkeyLockStates = async (connector, networkId, builder, pairs) => {
3362
+ return Promise.all(
3363
+ pairs.map(async ({ address, netuid }) => {
3364
+ try {
3365
+ const lockState = await fetchRuntimeCallResult(
3366
+ connector,
3367
+ networkId,
3368
+ builder,
3369
+ "StakeInfoRuntimeApi",
3370
+ "get_coldkey_lock",
3371
+ [address, netuid]
3372
+ );
3373
+ return { address, netuid, lockState };
3374
+ } catch (cause) {
3375
+ log_default.warn(
3376
+ `Failed to fetch get_coldkey_lock for (netuid=${netuid}, address=${address}) on ${networkId}`,
3377
+ { cause }
3378
+ );
3379
+ return { address, netuid, lockState: null };
3380
+ }
3381
+ })
3382
+ );
3383
+ };
3235
3384
 
3236
3385
  // src/modules/substrate-dtao/getDtaoTokenRates.ts
3237
3386
  import { subNativeTokenId } from "@talismn/chaindata-provider";
@@ -3239,7 +3388,14 @@ import {
3239
3388
  newTokenRates
3240
3389
  } from "@talismn/token-rates";
3241
3390
  var ONE_ALPHA = 10n ** TAO_DECIMALS;
3242
- var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice) => {
3391
+ var getAlphaChange24h = (currency, taoChange24h, alphaPriceChange24h) => {
3392
+ if (typeof alphaPriceChange24h !== "number" || !Number.isFinite(alphaPriceChange24h))
3393
+ return void 0;
3394
+ if (currency === "tao") return alphaPriceChange24h;
3395
+ if (typeof taoChange24h !== "number" || !Number.isFinite(taoChange24h)) return void 0;
3396
+ return ((1 + alphaPriceChange24h / 100) * (1 + taoChange24h / 100) - 1) * 100;
3397
+ };
3398
+ var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice, alphaPriceChange24h) => {
3243
3399
  try {
3244
3400
  const taoTokenId = subNativeTokenId(token.networkId);
3245
3401
  const taoTokenRates = tokenRates[taoTokenId];
@@ -3255,8 +3411,7 @@ var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice) => {
3255
3411
  alphaRates[currency] = {
3256
3412
  price: taoRate.price * priceRatio,
3257
3413
  marketCap: taoRate.marketCap ? taoRate.marketCap * priceRatio : void 0,
3258
- change24h: void 0
3259
- // cannot be determined from TAO rates alone
3414
+ change24h: getAlphaChange24h(currency, taoRate.change24h, alphaPriceChange24h)
3260
3415
  };
3261
3416
  }
3262
3417
  }
@@ -3278,7 +3433,7 @@ import {
3278
3433
  subDTaoTokenId as subDTaoTokenId2,
3279
3434
  TokenSchema
3280
3435
  } from "@talismn/chaindata-provider";
3281
- import { decodeScale as decodeScale2, parseMetadataRpc as parseMetadataRpc4 } from "@talismn/scale";
3436
+ import { decodeScale as decodeScale3, parseMetadataRpc as parseMetadataRpc5 } from "@talismn/scale";
3282
3437
  import { isNotNil as isNotNil5 } from "@talismn/util";
3283
3438
  import { keyBy as keyBy5, uniq as uniq4 } from "lodash-es";
3284
3439
 
@@ -3384,6 +3539,7 @@ var fetchBalances8 = async ({
3384
3539
  []
3385
3540
  )
3386
3541
  ]);
3542
+ const dynamicInfoByNetuid = keyBy5(dynamicInfos.filter(isNotNil5), (info) => info.netuid);
3387
3543
  const rootHotkeys = uniq4(
3388
3544
  stakeInfos.flatMap(
3389
3545
  ([, stakes]) => stakes.filter((stake) => stake.netuid === ROOT_NETUID).map((stake) => stake.hotkey)
@@ -3403,13 +3559,10 @@ var fetchBalances8 = async ({
3403
3559
  }
3404
3560
  }
3405
3561
  }
3406
- const rootClaimedAmounts = addressHotkeyNetuidPairs.length && miniMetadata.data ? await fetchRootClaimedAmounts(
3407
- connector,
3408
- networkId,
3409
- miniMetadata.data,
3410
- addressHotkeyNetuidPairs
3411
- ) : /* @__PURE__ */ new Map();
3412
- const dynamicInfoByNetuid = keyBy5(dynamicInfos.filter(isNotNil5), (info) => info.netuid);
3562
+ const [rootClaimedAmounts, convictionLocks] = await Promise.all([
3563
+ addressHotkeyNetuidPairs.length && miniMetadata.data ? fetchRootClaimedAmounts(connector, networkId, miniMetadata.data, addressHotkeyNetuidPairs) : Promise.resolve(/* @__PURE__ */ new Map()),
3564
+ miniMetadata.data ? fetchConvictionLocks(connector, networkId, miniMetadata.data, addresses) : Promise.resolve([])
3565
+ ]);
3413
3566
  const upsertBalance = (acc, address, tokenId, balance) => {
3414
3567
  const key = `${address}:${tokenId}`;
3415
3568
  const recordedBalance = acc[key];
@@ -3420,6 +3573,9 @@ var fetchBalances8 = async ({
3420
3573
  // If the new balance has pendingRootClaim, use it (it's calculated from current state)
3421
3574
  ...balance.pendingRootClaim !== void 0 && {
3422
3575
  pendingRootClaim: balance.pendingRootClaim
3576
+ },
3577
+ ...balance.convictionLock !== void 0 && {
3578
+ convictionLock: balance.convictionLock
3423
3579
  }
3424
3580
  };
3425
3581
  } else {
@@ -3462,6 +3618,21 @@ var fetchBalances8 = async ({
3462
3618
  },
3463
3619
  {}
3464
3620
  );
3621
+ for (const { address, netuid, lock } of convictionLocks) {
3622
+ const dynamicInfo = dynamicInfoByNetuid[netuid];
3623
+ const scaledAlphaPrice = dynamicInfo ? getScaledAlphaPrice(dynamicInfo.alpha_in, dynamicInfo.tao_in) : 0n;
3624
+ const balance = {
3625
+ address,
3626
+ tokenId: subDTaoTokenId2(networkId, netuid),
3627
+ baseTokenId: subDTaoTokenId2(networkId, netuid),
3628
+ stake: 0n,
3629
+ hotkey: lock.hotkey,
3630
+ netuid,
3631
+ scaledAlphaPrice,
3632
+ convictionLock: lock
3633
+ };
3634
+ upsertBalance(balancesRaw, address, balance.tokenId, balance);
3635
+ }
3465
3636
  const balances = Object.values(balancesRaw);
3466
3637
  const tokensById = keyBy5(
3467
3638
  tokensWithAddresses.map(([token]) => token),
@@ -3469,6 +3640,7 @@ var fetchBalances8 = async ({
3469
3640
  );
3470
3641
  const dynamicTokens = [];
3471
3642
  for (const bal of balances) {
3643
+ if (bal.tokenId === bal.baseTokenId) continue;
3472
3644
  if (!balanceDefs.some((def) => def.token.id === bal.tokenId)) {
3473
3645
  const baseToken = tokensById[bal.baseTokenId];
3474
3646
  if (baseToken) {
@@ -3489,6 +3661,8 @@ var fetchBalances8 = async ({
3489
3661
  };
3490
3662
  const stakeAmount = BigInt(stake?.stake?.toString() ?? "0");
3491
3663
  const pendingRootClaimAmount = BigInt(stake?.pendingRootClaim?.toString() ?? "0");
3664
+ const convictionLockAmount = BigInt(stake?.convictionLock?.amount?.toString() ?? "0");
3665
+ const convictionLockConviction = BigInt(stake?.convictionLock?.convictionRaw ?? "0");
3492
3666
  const hasZeroStake = stakeAmount === 0n;
3493
3667
  const hasPendingRootClaim = pendingRootClaimAmount > 0n;
3494
3668
  const balanceValue = {
@@ -3501,9 +3675,30 @@ var fetchBalances8 = async ({
3501
3675
  type: "locked",
3502
3676
  label: "Pending root claim",
3503
3677
  amount: pendingRootClaimAmount.toString(),
3678
+ // The pending claim is not part of the stake (free amount): on-chain it only becomes
3679
+ // stake once claimed (root_claim_on_subnet). Since it was never included in `free`,
3680
+ // it must not be subtracted from it either: flag it so it does not reduce the staked
3681
+ // position's transferable amount.
3682
+ includeInTransferable: true,
3504
3683
  meta
3505
3684
  };
3506
3685
  const values3 = [balanceValue, pendingRootClaimValue];
3686
+ if (stake?.convictionLock && (convictionLockAmount > 0n || convictionLockConviction > 0n)) {
3687
+ const convictionLockMeta = {
3688
+ ...meta,
3689
+ convictionLock: {
3690
+ type: "conviction-lock",
3691
+ hotkey: stake.convictionLock.hotkey,
3692
+ lockType: stake.convictionLock.lockType
3693
+ }
3694
+ };
3695
+ values3.push({
3696
+ type: "locked",
3697
+ label: getConvictionLockLabel(stake.convictionLock.lockType),
3698
+ amount: convictionLockAmount.toString(),
3699
+ meta: convictionLockMeta
3700
+ });
3701
+ }
3507
3702
  if (hasZeroStake && hasPendingRootClaim) {
3508
3703
  values3.push({
3509
3704
  type: "extra",
@@ -3541,7 +3736,7 @@ var fetchBalances8 = async ({
3541
3736
  }
3542
3737
  };
3543
3738
  var buildStorageCoder = (metadataRpc, pallet, entry) => {
3544
- const { builder } = parseMetadataRpc4(metadataRpc);
3739
+ const { builder } = parseMetadataRpc5(metadataRpc);
3545
3740
  return builder.buildStorage(pallet, entry);
3546
3741
  };
3547
3742
  var buildRootClaimableStorageCoder = async (_connector, networkId, metadataRpc) => {
@@ -3585,7 +3780,7 @@ var buildRootClaimableQueries = (networkId, hotkeys, storageCoder) => {
3585
3780
  if (!hexValue) {
3586
3781
  return [hotkey, /* @__PURE__ */ new Map()];
3587
3782
  }
3588
- const decoded = decodeScale2(
3783
+ const decoded = decodeScale3(
3589
3784
  storageCoder,
3590
3785
  hexValue,
3591
3786
  `Failed to decode RootClaimable for hotkey ${hotkey} on ${networkId}`
@@ -3629,7 +3824,7 @@ var buildRootClaimedQueries = (networkId, addressHotkeyNetuidPairs, storageCoder
3629
3824
  if (!hexValue) {
3630
3825
  return [address, hotkey, netuid, 0n];
3631
3826
  }
3632
- const decoded = decodeScale2(
3827
+ const decoded = decodeScale3(
3633
3828
  storageCoder,
3634
3829
  hexValue,
3635
3830
  `Failed to decode RootClaimed for (netuid=${netuid}, hotkey=${hotkey}, address=${address}) on ${networkId}`
@@ -3688,7 +3883,7 @@ import {
3688
3883
  SubDTaoTokenSchema as SubDTaoTokenSchema2,
3689
3884
  subDTaoTokenId as subDTaoTokenId3
3690
3885
  } from "@talismn/chaindata-provider";
3691
- import { getStorageKeyPrefix as getStorageKeyPrefix2, parseMetadataRpc as parseMetadataRpc5 } from "@talismn/scale";
3886
+ import { getStorageKeyPrefix as getStorageKeyPrefix2, parseMetadataRpc as parseMetadataRpc6 } from "@talismn/scale";
3692
3887
  import { isNotNil as isNotNil6 } from "@talismn/util";
3693
3888
  import { fromPairs } from "lodash-es";
3694
3889
  var NATIVE_TOKEN_SYMBOLS = {
@@ -3742,7 +3937,7 @@ var fetchTokens8 = async ({
3742
3937
  });
3743
3938
  };
3744
3939
  var fetchTransferableTokensMap = async (connector, metadata, networkId) => {
3745
- const { builder } = parseMetadataRpc5(metadata);
3940
+ const { builder } = parseMetadataRpc6(metadata);
3746
3941
  const transferToggleCodec = builder.buildStorage("SubtensorModule", "TransferToggle");
3747
3942
  const transferToggleKeys = await connector.send(networkId, "state_getKeys", [
3748
3943
  getStorageKeyPrefix2("SubtensorModule", "TransferToggle")
@@ -3764,7 +3959,7 @@ var fetchTransferableTokensMap = async (connector, metadata, networkId) => {
3764
3959
 
3765
3960
  // src/modules/substrate-dtao/getMiniMetadata.ts
3766
3961
  import { MINIMETADATA_VERSION } from "@talismn/chaindata-provider";
3767
- import { compactMetadata, encodeMetadata, parseMetadataRpc as parseMetadataRpc6 } from "@talismn/scale";
3962
+ import { compactMetadata, encodeMetadata, parseMetadataRpc as parseMetadataRpc7 } from "@talismn/scale";
3768
3963
  var getMiniMetadata7 = ({
3769
3964
  networkId,
3770
3965
  specVersion,
@@ -3778,7 +3973,7 @@ var getMiniMetadata7 = ({
3778
3973
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
3779
3974
  );
3780
3975
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
3781
- const { unifiedMetadata } = parseMetadataRpc6(metadataRpc);
3976
+ const { unifiedMetadata } = parseMetadataRpc7(metadataRpc);
3782
3977
  if (unifiedMetadata.version < 14)
3783
3978
  throw new Error(
3784
3979
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -3794,16 +3989,21 @@ var getMiniMetadata7 = ({
3794
3989
  };
3795
3990
  };
3796
3991
  var getData = (metadataRpc) => {
3797
- const { metadata, unifiedMetadata } = parseMetadataRpc6(metadataRpc);
3992
+ const { metadata, unifiedMetadata } = parseMetadataRpc7(metadataRpc);
3798
3993
  const isBittensor = unifiedMetadata.pallets.some(({ name }) => name === "SubtensorModule");
3799
3994
  if (!isBittensor) return null;
3800
3995
  compactMetadata(
3801
3996
  metadata,
3802
- [{ pallet: "SubtensorModule", items: ["TransferToggle", "RootClaimable", "RootClaimed"] }],
3997
+ [
3998
+ {
3999
+ pallet: "SubtensorModule",
4000
+ items: ["TransferToggle", "RootClaimable", "RootClaimed", "Lock", "DecayingLock"]
4001
+ }
4002
+ ],
3803
4003
  [
3804
4004
  {
3805
4005
  runtimeApi: "StakeInfoRuntimeApi",
3806
- methods: ["get_stake_info_for_coldkeys"]
4006
+ methods: ["get_stake_info_for_coldkeys", "get_coldkey_lock"]
3807
4007
  },
3808
4008
  {
3809
4009
  runtimeApi: "SubnetInfoRuntimeApi",
@@ -3817,7 +4017,7 @@ var getData = (metadataRpc) => {
3817
4017
  // src/modules/substrate-dtao/getTransferCallData.ts
3818
4018
  import { mergeUint8 } from "@polkadot-api/utils";
3819
4019
  import { isTokenOfType as isTokenOfType7, parseSubDTaoTokenId } from "@talismn/chaindata-provider";
3820
- import { parseMetadataRpc as parseMetadataRpc7 } from "@talismn/scale";
4020
+ import { parseMetadataRpc as parseMetadataRpc8 } from "@talismn/scale";
3821
4021
  import { Binary } from "polkadot-api";
3822
4022
  var getTransferCallData7 = ({
3823
4023
  from: from2,
@@ -3830,7 +4030,7 @@ var getTransferCallData7 = ({
3830
4030
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE8}.`);
3831
4031
  const { netuid: subnetId, hotkey } = parseSubDTaoTokenId(token.id);
3832
4032
  if (!hotkey) throw new Error(`Missing hotkey`);
3833
- const { builder } = parseMetadataRpc7(metadataRpc);
4033
+ const { builder } = parseMetadataRpc8(metadataRpc);
3834
4034
  const { codec, location } = builder.buildCall("SubtensorModule", "transfer_stake");
3835
4035
  const args = codec.enc({
3836
4036
  origin_netuid: subnetId,
@@ -3857,6 +4057,7 @@ var subscribeBalances7 = ({
3857
4057
  miniMetadata
3858
4058
  }) => {
3859
4059
  if (!tokensWithAddresses.length) return of8({ success: [], errors: [] });
4060
+ const balanceDefs = getBalanceDefs(tokensWithAddresses);
3860
4061
  return new Observable8((subscriber) => {
3861
4062
  const abortController = new AbortController();
3862
4063
  const poll = async () => {
@@ -3870,8 +4071,8 @@ var subscribeBalances7 = ({
3870
4071
  });
3871
4072
  if (abortController.signal.aborted) return;
3872
4073
  subscriber.next(balances);
3873
- setTimeout(poll, SUBSCRIPTION_INTERVAL7);
3874
4074
  } catch (error) {
4075
+ if (abortController.signal.aborted) return;
3875
4076
  log_default.error("Error", {
3876
4077
  module: MODULE_TYPE8,
3877
4078
  networkId,
@@ -3879,8 +4080,17 @@ var subscribeBalances7 = ({
3879
4080
  addressesByToken: tokensWithAddresses,
3880
4081
  error
3881
4082
  });
3882
- subscriber.error(error);
4083
+ const fetchError = error instanceof Error ? error : new Error(String(error));
4084
+ subscriber.next({
4085
+ success: [],
4086
+ errors: balanceDefs.map((def) => ({
4087
+ tokenId: def.token.id,
4088
+ address: def.address,
4089
+ error: fetchError
4090
+ }))
4091
+ });
3883
4092
  }
4093
+ if (!abortController.signal.aborted) setTimeout(poll, SUBSCRIPTION_INTERVAL7);
3884
4094
  };
3885
4095
  poll();
3886
4096
  return () => {
@@ -4183,9 +4393,9 @@ var Balance = class {
4183
4393
  const totalSupply = extras.find((extra2) => extra2.label === "totalSupply")?.amount ?? "0";
4184
4394
  const reserve0 = extras.find((extra2) => extra2.label === "reserve0")?.amount ?? "0";
4185
4395
  const reserve1 = extras.find((extra2) => extra2.label === "reserve1")?.amount ?? "0";
4186
- const totalSupplyTokens = BigNumber2(totalSupply).times(10 ** (-1 * decimals));
4187
- const reserve0Tokens = BigNumber2(reserve0).times(10 ** (-1 * decimals0));
4188
- const reserve1Tokens = BigNumber2(reserve1).times(10 ** (-1 * decimals1));
4396
+ const totalSupplyTokens = configureBigNumber_default(totalSupply).times(10 ** (-1 * decimals));
4397
+ const reserve0Tokens = configureBigNumber_default(reserve0).times(10 ** (-1 * decimals0));
4398
+ const reserve1Tokens = configureBigNumber_default(reserve1).times(10 ** (-1 * decimals1));
4189
4399
  const rates0Currencies = new Set(Object.keys(rates0));
4190
4400
  const rates1Currencies = new Set(Object.keys(rates1));
4191
4401
  const currencies = [...rates0Currencies].filter((c) => rates1Currencies.has(c));
@@ -4193,7 +4403,7 @@ var Balance = class {
4193
4403
  (currency) => [
4194
4404
  currency,
4195
4405
  // tvl (in a given currency) == reserve0*currencyRate0 + reserve1*currencyRate1
4196
- BigNumber2.sum(
4406
+ configureBigNumber_default.sum(
4197
4407
  reserve0Tokens.times(rates0[currency]?.price ?? 0),
4198
4408
  reserve1Tokens.times(rates1[currency]?.price ?? 0)
4199
4409
  )
@@ -4584,7 +4794,7 @@ var getMiniMetadata8 = ({
4584
4794
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
4585
4795
  );
4586
4796
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
4587
- const { unifiedMetadata } = parseMetadataRpc8(metadataRpc);
4797
+ const { unifiedMetadata } = parseMetadataRpc9(metadataRpc);
4588
4798
  if (unifiedMetadata.version < 14)
4589
4799
  throw new Error(
4590
4800
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -4600,7 +4810,7 @@ var getMiniMetadata8 = ({
4600
4810
  };
4601
4811
  };
4602
4812
  var getData2 = (metadataRpc) => {
4603
- const { metadata, unifiedMetadata } = parseMetadataRpc8(metadataRpc);
4813
+ const { metadata, unifiedMetadata } = parseMetadataRpc9(metadataRpc);
4604
4814
  if (!hasStorageItems(unifiedMetadata, "Assets", ["Account", "Asset", "Metadata"])) return null;
4605
4815
  compactMetadata2(metadata, [{ pallet: "Assets", items: ["Account", "Asset", "Metadata"] }]);
4606
4816
  return encodeMetadata2(metadata);
@@ -4609,7 +4819,7 @@ var getData2 = (metadataRpc) => {
4609
4819
  // src/modules/substrate-assets/getTransferCallData.ts
4610
4820
  import { mergeUint8 as mergeUint82 } from "@polkadot-api/utils";
4611
4821
  import { isTokenOfType as isTokenOfType8 } from "@talismn/chaindata-provider";
4612
- import { parseMetadataRpc as parseMetadataRpc9 } from "@talismn/scale";
4822
+ import { parseMetadataRpc as parseMetadataRpc10 } from "@talismn/scale";
4613
4823
  import { Binary as Binary2, Enum } from "polkadot-api";
4614
4824
  var getTransferCallData8 = ({
4615
4825
  from: from2,
@@ -4621,7 +4831,7 @@ var getTransferCallData8 = ({
4621
4831
  }) => {
4622
4832
  if (!isTokenOfType8(token, MODULE_TYPE7))
4623
4833
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE7}.`);
4624
- const { builder } = parseMetadataRpc9(metadataRpc);
4834
+ const { builder } = parseMetadataRpc10(metadataRpc);
4625
4835
  const method = getTransferMethod(type);
4626
4836
  const { codec, location } = builder.buildCall("Assets", method);
4627
4837
  const args = getEncodedArgs(method, token.assetId, to, value, codec);
@@ -4752,7 +4962,7 @@ var MODULE_TYPE9 = SubForeignAssetsTokenSchema.shape.type.value;
4752
4962
  var PLATFORM9 = SubForeignAssetsTokenSchema.shape.platform.value;
4753
4963
 
4754
4964
  // src/modules/substrate-foreignassets/buildQueries.ts
4755
- import { decodeScale as decodeScale3, papiParse } from "@talismn/scale";
4965
+ import { decodeScale as decodeScale4, papiParse } from "@talismn/scale";
4756
4966
  import { isNotNil as isNotNil7 } from "@talismn/util";
4757
4967
  var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
4758
4968
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
@@ -4775,7 +4985,7 @@ var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
4775
4985
  return null;
4776
4986
  }
4777
4987
  const decodeResult = (changes) => {
4778
- const decoded = decodeScale3(
4988
+ const decoded = decodeScale4(
4779
4989
  scaleCoder,
4780
4990
  changes[0],
4781
4991
  `Failed to decode substrate-assets balance on chain ${networkId}`
@@ -4886,7 +5096,7 @@ import {
4886
5096
  SubForeignAssetsTokenSchema as SubForeignAssetsTokenSchema2,
4887
5097
  subForeignAssetTokenId
4888
5098
  } from "@talismn/chaindata-provider";
4889
- import { getStorageKeyPrefix as getStorageKeyPrefix3, papiStringify, parseMetadataRpc as parseMetadataRpc10 } from "@talismn/scale";
5099
+ import { getStorageKeyPrefix as getStorageKeyPrefix3, papiStringify, parseMetadataRpc as parseMetadataRpc11 } from "@talismn/scale";
4890
5100
  import { assign as assign8, keyBy as keyBy6, keys as keys2 } from "lodash-es";
4891
5101
  var fetchTokens9 = async ({
4892
5102
  networkId,
@@ -4896,7 +5106,7 @@ var fetchTokens9 = async ({
4896
5106
  }) => {
4897
5107
  const anyMiniMetadata = miniMetadata;
4898
5108
  if (!anyMiniMetadata?.data) return [];
4899
- const { builder } = parseMetadataRpc10(anyMiniMetadata.data);
5109
+ const { builder } = parseMetadataRpc11(anyMiniMetadata.data);
4900
5110
  const assetCodec = builder.buildStorage("ForeignAssets", "Asset");
4901
5111
  const metadataCodec = builder.buildStorage("ForeignAssets", "Metadata");
4902
5112
  const [allAssetStorageKeys, allMetadataStorageKeys] = await Promise.all([
@@ -4970,7 +5180,7 @@ var fetchTokens9 = async ({
4970
5180
 
4971
5181
  // src/modules/substrate-foreignassets/getMiniMetadata.ts
4972
5182
  import { MINIMETADATA_VERSION as MINIMETADATA_VERSION4 } from "@talismn/chaindata-provider";
4973
- import { compactMetadata as compactMetadata3, encodeMetadata as encodeMetadata3, parseMetadataRpc as parseMetadataRpc11 } from "@talismn/scale";
5183
+ import { compactMetadata as compactMetadata3, encodeMetadata as encodeMetadata3, parseMetadataRpc as parseMetadataRpc12 } from "@talismn/scale";
4974
5184
  var getMiniMetadata9 = ({
4975
5185
  networkId,
4976
5186
  specVersion,
@@ -4984,7 +5194,7 @@ var getMiniMetadata9 = ({
4984
5194
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
4985
5195
  );
4986
5196
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
4987
- const { unifiedMetadata } = parseMetadataRpc11(metadataRpc);
5197
+ const { unifiedMetadata } = parseMetadataRpc12(metadataRpc);
4988
5198
  if (unifiedMetadata.version < 14)
4989
5199
  throw new Error(
4990
5200
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -5000,7 +5210,7 @@ var getMiniMetadata9 = ({
5000
5210
  };
5001
5211
  };
5002
5212
  var getData3 = (metadataRpc) => {
5003
- const { metadata, unifiedMetadata } = parseMetadataRpc11(metadataRpc);
5213
+ const { metadata, unifiedMetadata } = parseMetadataRpc12(metadataRpc);
5004
5214
  if (!hasStorageItems(unifiedMetadata, "ForeignAssets", ["Account", "Asset", "Metadata"]))
5005
5215
  return null;
5006
5216
  compactMetadata3(metadata, [{ pallet: "ForeignAssets", items: ["Account", "Asset", "Metadata"] }]);
@@ -5010,7 +5220,7 @@ var getData3 = (metadataRpc) => {
5010
5220
  // src/modules/substrate-foreignassets/getTransferCallData.ts
5011
5221
  import { mergeUint8 as mergeUint83 } from "@polkadot-api/utils";
5012
5222
  import { isTokenOfType as isTokenOfType9 } from "@talismn/chaindata-provider";
5013
- import { papiParse as papiParse2, parseMetadataRpc as parseMetadataRpc12 } from "@talismn/scale";
5223
+ import { papiParse as papiParse2, parseMetadataRpc as parseMetadataRpc13 } from "@talismn/scale";
5014
5224
  import { Binary as Binary3, Enum as Enum2 } from "polkadot-api";
5015
5225
  var getTransferCallData9 = ({
5016
5226
  from: from2,
@@ -5022,7 +5232,7 @@ var getTransferCallData9 = ({
5022
5232
  }) => {
5023
5233
  if (!isTokenOfType9(token, MODULE_TYPE9))
5024
5234
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE9}.`);
5025
- const { builder } = parseMetadataRpc12(metadataRpc);
5235
+ const { builder } = parseMetadataRpc13(metadataRpc);
5026
5236
  const method = getTransferMethod2(type);
5027
5237
  const { codec, location } = builder.buildCall("ForeignAssets", method);
5028
5238
  const args = getEncodedArgs2(method, token.onChainId, to, value, codec);
@@ -5261,7 +5471,7 @@ import {
5261
5471
  SubHydrationTokenSchema as SubHydrationTokenSchema2,
5262
5472
  subHydrationTokenId
5263
5473
  } from "@talismn/chaindata-provider";
5264
- import { getStorageKeyPrefix as getStorageKeyPrefix4, parseMetadataRpc as parseMetadataRpc13 } from "@talismn/scale";
5474
+ import { getStorageKeyPrefix as getStorageKeyPrefix4, parseMetadataRpc as parseMetadataRpc14 } from "@talismn/scale";
5265
5475
  import { assign as assign9, keyBy as keyBy8 } from "lodash-es";
5266
5476
  var fetchTokens10 = async ({
5267
5477
  networkId,
@@ -5271,7 +5481,7 @@ var fetchTokens10 = async ({
5271
5481
  }) => {
5272
5482
  const anyMiniMetadata = miniMetadata;
5273
5483
  if (!anyMiniMetadata?.data) return [];
5274
- const { builder } = parseMetadataRpc13(anyMiniMetadata.data);
5484
+ const { builder } = parseMetadataRpc14(anyMiniMetadata.data);
5275
5485
  const assetsCodec = builder.buildStorage("AssetRegistry", "Assets");
5276
5486
  const allAssetStorageKeys = await connector.send(networkId, "state_getKeys", [
5277
5487
  getStorageKeyPrefix4("AssetRegistry", "Assets")
@@ -5325,7 +5535,7 @@ var fetchTokens10 = async ({
5325
5535
 
5326
5536
  // src/modules/substrate-hydration/getMiniMetadata.ts
5327
5537
  import { MINIMETADATA_VERSION as MINIMETADATA_VERSION5 } from "@talismn/chaindata-provider";
5328
- import { compactMetadata as compactMetadata4, encodeMetadata as encodeMetadata4, parseMetadataRpc as parseMetadataRpc14 } from "@talismn/scale";
5538
+ import { compactMetadata as compactMetadata4, encodeMetadata as encodeMetadata4, parseMetadataRpc as parseMetadataRpc15 } from "@talismn/scale";
5329
5539
  var getMiniMetadata10 = ({
5330
5540
  networkId,
5331
5541
  specVersion,
@@ -5339,7 +5549,7 @@ var getMiniMetadata10 = ({
5339
5549
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
5340
5550
  );
5341
5551
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
5342
- const { unifiedMetadata } = parseMetadataRpc14(metadataRpc);
5552
+ const { unifiedMetadata } = parseMetadataRpc15(metadataRpc);
5343
5553
  if (unifiedMetadata.version < 14)
5344
5554
  throw new Error(
5345
5555
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -5355,7 +5565,7 @@ var getMiniMetadata10 = ({
5355
5565
  };
5356
5566
  };
5357
5567
  var getData4 = (metadataRpc) => {
5358
- const { metadata, unifiedMetadata } = parseMetadataRpc14(metadataRpc);
5568
+ const { metadata, unifiedMetadata } = parseMetadataRpc15(metadataRpc);
5359
5569
  if (!hasStorageItem(unifiedMetadata, "AssetRegistry", "Assets") || !hasStorageItem(unifiedMetadata, "Tokens", "Accounts") || !hasRuntimeApi(unifiedMetadata, "CurrenciesApi", "accounts"))
5360
5570
  return null;
5361
5571
  compactMetadata4(
@@ -5379,7 +5589,7 @@ var getData4 = (metadataRpc) => {
5379
5589
  // src/modules/substrate-hydration/getTransferCallData.ts
5380
5590
  import { mergeUint8 as mergeUint84 } from "@polkadot-api/utils";
5381
5591
  import { isTokenOfType as isTokenOfType10 } from "@talismn/chaindata-provider";
5382
- import { parseMetadataRpc as parseMetadataRpc15 } from "@talismn/scale";
5592
+ import { parseMetadataRpc as parseMetadataRpc16 } from "@talismn/scale";
5383
5593
  import { Binary as Binary4 } from "polkadot-api";
5384
5594
  var getTransferCallData10 = ({
5385
5595
  from: from2,
@@ -5390,7 +5600,7 @@ var getTransferCallData10 = ({
5390
5600
  }) => {
5391
5601
  if (!isTokenOfType10(token, MODULE_TYPE10))
5392
5602
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE10}.`);
5393
- const { builder } = parseMetadataRpc15(metadataRpc);
5603
+ const { builder } = parseMetadataRpc16(metadataRpc);
5394
5604
  const { codec, location } = builder.buildCall("Currencies", "transfer");
5395
5605
  const args = {
5396
5606
  dest: to,
@@ -5472,7 +5682,7 @@ var MODULE_TYPE11 = SubNativeTokenSchema.shape.type.value;
5472
5682
  var PLATFORM11 = SubNativeTokenSchema.shape.platform.value;
5473
5683
 
5474
5684
  // src/modules/substrate-native/queries/buildBaseQueries.ts
5475
- import { decodeScale as decodeScale4 } from "@talismn/scale";
5685
+ import { decodeScale as decodeScale5 } from "@talismn/scale";
5476
5686
  import { isNotNil as isNotNil8 } from "@talismn/util";
5477
5687
 
5478
5688
  // src/modules/substrate-native/util/lockTypes.ts
@@ -5637,7 +5847,7 @@ var buildBaseQueries = (networkId, balanceDefs, miniMetadata) => {
5637
5847
  }).filter(isNotNil8);
5638
5848
  };
5639
5849
  var decodeBaseResult = (coder, value, networkId) => {
5640
- const decoded = decodeScale4(
5850
+ const decoded = decodeScale5(
5641
5851
  coder,
5642
5852
  value,
5643
5853
  `Failed to decode base native balance on chain ${networkId}`
@@ -5657,7 +5867,7 @@ var decodeBaseResult = (coder, value, networkId) => {
5657
5867
  return newValues;
5658
5868
  };
5659
5869
  var decodeLocksResult = (coder, value, networkId) => {
5660
- const decoded = decodeScale4(
5870
+ const decoded = decodeScale5(
5661
5871
  coder,
5662
5872
  value,
5663
5873
  `Failed to decode lock on chain ${networkId}`
@@ -5672,7 +5882,7 @@ var decodeLocksResult = (coder, value, networkId) => {
5672
5882
  return locksQueryLocks;
5673
5883
  };
5674
5884
  var decodeFreezesResult = (coder, value, networkId) => {
5675
- const decoded = decodeScale4(
5885
+ const decoded = decodeScale5(
5676
5886
  coder,
5677
5887
  value,
5678
5888
  `Failed to decode freeze on chain ${networkId}`
@@ -5686,7 +5896,7 @@ var decodeFreezesResult = (coder, value, networkId) => {
5686
5896
  return freezesValues;
5687
5897
  };
5688
5898
  var decodeHoldsResult = (coder, value, networkId) => {
5689
- const decoded = decodeScale4(
5899
+ const decoded = decodeScale5(
5690
5900
  coder,
5691
5901
  value,
5692
5902
  `Failed to decode holds on chain ${networkId}`
@@ -5702,7 +5912,7 @@ var decodeHoldsResult = (coder, value, networkId) => {
5702
5912
  return holdsValues;
5703
5913
  };
5704
5914
  var decodeStakingLedgerResult = (coder, value, networkId) => {
5705
- const decoded = decodeScale4(
5915
+ const decoded = decodeScale5(
5706
5916
  coder,
5707
5917
  value,
5708
5918
  `Failed to decode unbonding query on chain ${networkId}`
@@ -5719,7 +5929,7 @@ var decodeStakingLedgerResult = (coder, value, networkId) => {
5719
5929
  return stakingLedgerResults;
5720
5930
  };
5721
5931
  var decodePoolMemberResult = (coder, value, networkId) => {
5722
- const decoded = decodeScale4(
5932
+ const decoded = decodeScale5(
5723
5933
  coder,
5724
5934
  value,
5725
5935
  `Failed to decode poolMembers on chain ${networkId}`
@@ -5741,7 +5951,7 @@ var decodePoolMemberResult = (coder, value, networkId) => {
5741
5951
  };
5742
5952
 
5743
5953
  // src/modules/substrate-native/queries/buildNomPoolQueries.ts
5744
- import { decodeScale as decodeScale5 } from "@talismn/scale";
5954
+ import { decodeScale as decodeScale6 } from "@talismn/scale";
5745
5955
 
5746
5956
  // src/modules/substrate-native/util/nompoolAccountId.ts
5747
5957
  import { mergeUint8 as mergeUint85 } from "@polkadot-api/utils";
@@ -5834,7 +6044,7 @@ var getNomPoolCoders = (networkId, miniMetadata) => {
5834
6044
  });
5835
6045
  };
5836
6046
  var decodePoolPoints = (coder, value, networkId) => {
5837
- const decoded = decodeScale5(
6047
+ const decoded = decodeScale6(
5838
6048
  coder,
5839
6049
  value,
5840
6050
  `Failed to decode bondedPools on chain ${networkId}`
@@ -5842,7 +6052,7 @@ var decodePoolPoints = (coder, value, networkId) => {
5842
6052
  return { poolPoints: decoded?.points.toString() };
5843
6053
  };
5844
6054
  var decodePoolStake = (coder, value, networkId) => {
5845
- const decoded = decodeScale5(
6055
+ const decoded = decodeScale6(
5846
6056
  coder,
5847
6057
  value,
5848
6058
  `Failed to decode ledger on chain ${networkId}`
@@ -5850,7 +6060,7 @@ var decodePoolStake = (coder, value, networkId) => {
5850
6060
  return { poolTotalActiveStake: decoded?.active.toString() };
5851
6061
  };
5852
6062
  var decodePoolMeta = (coder, value, networkId) => {
5853
- const decoded = decodeScale5(
6063
+ const decoded = decodeScale6(
5854
6064
  coder,
5855
6065
  value,
5856
6066
  `Failed to decode metadata on chain ${networkId}`
@@ -5972,7 +6182,7 @@ var getChainProperties = async (connector, networkId) => {
5972
6182
 
5973
6183
  // src/modules/substrate-native/getMiniMetadata.ts
5974
6184
  import { MINIMETADATA_VERSION as MINIMETADATA_VERSION6 } from "@talismn/chaindata-provider";
5975
- import { compactMetadata as compactMetadata5, encodeMetadata as encodeMetadata5, parseMetadataRpc as parseMetadataRpc16 } from "@talismn/scale";
6185
+ import { compactMetadata as compactMetadata5, encodeMetadata as encodeMetadata5, parseMetadataRpc as parseMetadataRpc17 } from "@talismn/scale";
5976
6186
  var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
5977
6187
  const source = MODULE_TYPE11;
5978
6188
  const chainId = networkId;
@@ -5982,7 +6192,7 @@ var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
5982
6192
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
5983
6193
  );
5984
6194
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
5985
- const { metadata, unifiedMetadata } = parseMetadataRpc16(metadataRpc);
6195
+ const { metadata, unifiedMetadata } = parseMetadataRpc17(metadataRpc);
5986
6196
  if (unifiedMetadata.version < 14)
5987
6197
  throw new Error(
5988
6198
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -6036,7 +6246,7 @@ var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
6036
6246
  import { mergeUint8 as mergeUint86 } from "@polkadot-api/utils";
6037
6247
  import { isTokenOfType as isTokenOfType11 } from "@talismn/chaindata-provider";
6038
6248
  import {
6039
- parseMetadataRpc as parseMetadataRpc17
6249
+ parseMetadataRpc as parseMetadataRpc18
6040
6250
  } from "@talismn/scale";
6041
6251
  import { Binary as Binary5, Enum as Enum3 } from "polkadot-api";
6042
6252
  var getTransferCallData11 = ({
@@ -6049,7 +6259,7 @@ var getTransferCallData11 = ({
6049
6259
  }) => {
6050
6260
  if (!isTokenOfType11(token, MODULE_TYPE11))
6051
6261
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE11}.`);
6052
- const { unifiedMetadata, lookupFn, builder } = parseMetadataRpc17(metadataRpc);
6262
+ const { unifiedMetadata, lookupFn, builder } = parseMetadataRpc18(metadataRpc);
6053
6263
  const method = getTransferMethod3(type, unifiedMetadata, lookupFn);
6054
6264
  const { codec, location } = builder.buildCall("Balances", method);
6055
6265
  const args = getEncodedArgs3(method, to, value, codec);
@@ -7352,7 +7562,7 @@ var fetchTokens12 = async ({
7352
7562
 
7353
7563
  // src/modules/substrate-psp22/getMiniMetadata.ts
7354
7564
  import { MINIMETADATA_VERSION as MINIMETADATA_VERSION7 } from "@talismn/chaindata-provider";
7355
- import { parseMetadataRpc as parseMetadataRpc18 } from "@talismn/scale";
7565
+ import { parseMetadataRpc as parseMetadataRpc19 } from "@talismn/scale";
7356
7566
  var getMiniMetadata12 = ({
7357
7567
  networkId,
7358
7568
  specVersion,
@@ -7366,7 +7576,7 @@ var getMiniMetadata12 = ({
7366
7576
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
7367
7577
  );
7368
7578
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
7369
- const { unifiedMetadata } = parseMetadataRpc18(metadataRpc);
7579
+ const { unifiedMetadata } = parseMetadataRpc19(metadataRpc);
7370
7580
  if (unifiedMetadata.version < 14)
7371
7581
  throw new Error(
7372
7582
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -7387,13 +7597,13 @@ import { Abi as Abi3 } from "@polkadot/api-contract";
7387
7597
  import { TypeRegistry as TypeRegistry3 } from "@polkadot/types";
7388
7598
  import { mergeUint8 as mergeUint87 } from "@polkadot-api/utils";
7389
7599
  import { isTokenOfType as isTokenOfType12, parseTokenId as parseTokenId5 } from "@talismn/chaindata-provider";
7390
- import { parseMetadataRpc as parseMetadataRpc19 } from "@talismn/scale";
7600
+ import { parseMetadataRpc as parseMetadataRpc20 } from "@talismn/scale";
7391
7601
  import { Binary as Binary6, Enum as Enum4 } from "polkadot-api";
7392
7602
  var getTransferCallData12 = async ({ from: from2, to, value, token, metadataRpc, connector }) => {
7393
7603
  if (!isTokenOfType12(token, MODULE_TYPE12))
7394
7604
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE12}.`);
7395
7605
  const networkId = parseTokenId5(token.id).networkId;
7396
- const { builder } = parseMetadataRpc19(metadataRpc);
7606
+ const { builder } = parseMetadataRpc20(metadataRpc);
7397
7607
  const { codec, location } = builder.buildCall("Contracts", "call");
7398
7608
  const Psp22Abi = new Abi3(psp22_default);
7399
7609
  const registry = new TypeRegistry3();
@@ -7490,7 +7700,7 @@ var MODULE_TYPE13 = SubTokensTokenSchema.shape.type.value;
7490
7700
  var PLATFORM13 = SubTokensTokenSchema.shape.platform.value;
7491
7701
 
7492
7702
  // src/modules/substrate-tokens/buildQueries.ts
7493
- import { decodeScale as decodeScale6, papiParse as papiParse3 } from "@talismn/scale";
7703
+ import { decodeScale as decodeScale7, papiParse as papiParse3 } from "@talismn/scale";
7494
7704
  import { isNotNil as isNotNil9 } from "@talismn/util";
7495
7705
  var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
7496
7706
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
@@ -7513,7 +7723,7 @@ var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
7513
7723
  return null;
7514
7724
  }
7515
7725
  const decodeResult = (changes) => {
7516
- const decoded = decodeScale6(
7726
+ const decoded = decodeScale7(
7517
7727
  scaleCoder,
7518
7728
  changes[0],
7519
7729
  `Failed to decode substrate-tokens balance on chain ${networkId}`
@@ -7637,7 +7847,7 @@ var fetchTokens13 = async ({
7637
7847
 
7638
7848
  // src/modules/substrate-tokens/getMiniMetadata.ts
7639
7849
  import { MINIMETADATA_VERSION as MINIMETADATA_VERSION8 } from "@talismn/chaindata-provider";
7640
- import { compactMetadata as compactMetadata6, encodeMetadata as encodeMetadata6, parseMetadataRpc as parseMetadataRpc20 } from "@talismn/scale";
7850
+ import { compactMetadata as compactMetadata6, encodeMetadata as encodeMetadata6, parseMetadataRpc as parseMetadataRpc21 } from "@talismn/scale";
7641
7851
  var getMiniMetadata13 = ({ networkId, specVersion, metadataRpc, config }) => {
7642
7852
  const source = MODULE_TYPE13;
7643
7853
  const chainId = networkId;
@@ -7647,7 +7857,7 @@ var getMiniMetadata13 = ({ networkId, specVersion, metadataRpc, config }) => {
7647
7857
  `specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
7648
7858
  );
7649
7859
  const id = deriveMiniMetadataId({ source, chainId, specVersion });
7650
- const { unifiedMetadata } = parseMetadataRpc20(metadataRpc);
7860
+ const { unifiedMetadata } = parseMetadataRpc21(metadataRpc);
7651
7861
  if (unifiedMetadata.version < 14)
7652
7862
  throw new Error(
7653
7863
  `Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
@@ -7664,7 +7874,7 @@ var getMiniMetadata13 = ({ networkId, specVersion, metadataRpc, config }) => {
7664
7874
  };
7665
7875
  };
7666
7876
  var getData5 = (metadataRpc, pallet) => {
7667
- const { metadata, unifiedMetadata } = parseMetadataRpc20(metadataRpc);
7877
+ const { metadata, unifiedMetadata } = parseMetadataRpc21(metadataRpc);
7668
7878
  if (!hasStorageItems(unifiedMetadata, pallet, ["Accounts"])) return null;
7669
7879
  compactMetadata6(metadata, [{ pallet, items: ["Accounts"] }]);
7670
7880
  return encodeMetadata6(metadata);
@@ -7673,12 +7883,12 @@ var getData5 = (metadataRpc, pallet) => {
7673
7883
  // src/modules/substrate-tokens/getTransferCallData.ts
7674
7884
  import { mergeUint8 as mergeUint88 } from "@polkadot-api/utils";
7675
7885
  import { isTokenOfType as isTokenOfType13 } from "@talismn/chaindata-provider";
7676
- import { papiParse as papiParse4, parseMetadataRpc as parseMetadataRpc21 } from "@talismn/scale";
7886
+ import { papiParse as papiParse4, parseMetadataRpc as parseMetadataRpc22 } from "@talismn/scale";
7677
7887
  import { Binary as Binary7, Enum as Enum5 } from "polkadot-api";
7678
7888
  var getTransferCallData13 = ({ from: from2, to, value, token, type, metadataRpc, config }) => {
7679
7889
  if (!isTokenOfType13(token, MODULE_TYPE13))
7680
7890
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE13}.`);
7681
- const { builder } = parseMetadataRpc21(metadataRpc);
7891
+ const { builder } = parseMetadataRpc22(metadataRpc);
7682
7892
  const options = getCallDataOptions(to, token, value, type, config);
7683
7893
  const callData = getCallDataFromOptions(builder, options);
7684
7894
  return {
@@ -8117,8 +8327,14 @@ var BalancesProvider = class {
8117
8327
  map6(
8118
8328
  (results) => ({
8119
8329
  status: "live",
8120
- // exclude zero balances
8121
- balances: results.success.filter((b) => new Balance(b).total.planck > 0n),
8330
+ // exclude zero balances, but keep balances that only hold a lock
8331
+ // (eg dtao conviction locks, reported on the subnet's base token — including
8332
+ // zero-mass "ghost" locks with residual conviction, which still pin the hotkey
8333
+ // of future lock_stake calls)
8334
+ balances: results.success.filter((b) => {
8335
+ const balance = new Balance(b);
8336
+ return balance.total.planck > 0n || balance.locks.some((lock) => lock.amount.planck > 0n) || !!findDTaoConvictionLock(balance.locks);
8337
+ }),
8122
8338
  failedBalanceIds: results.errors.map(
8123
8339
  ({ tokenId, address }) => getBalanceId({ tokenId, address })
8124
8340
  )
@@ -8505,7 +8721,9 @@ export {
8505
8721
  excludeFromTransferableAmount,
8506
8722
  filterBaseLocks,
8507
8723
  filterMirrorTokens,
8724
+ findDTaoConvictionLock,
8508
8725
  getBalanceId,
8726
+ getConvictionLockLabel,
8509
8727
  getDTaoTokenRates,
8510
8728
  getLockTitle,
8511
8729
  getLockedType,
@@ -8513,6 +8731,7 @@ export {
8513
8731
  getValueId,
8514
8732
  includeInTotalExtraAmount,
8515
8733
  taoToAlpha,
8734
+ taoToAlphaCeil,
8516
8735
  uniswapV2PairAbi
8517
8736
  };
8518
8737
  //# sourceMappingURL=index.mjs.map