@1delta/margin-fetcher 0.0.274 → 0.0.275

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
@@ -35740,6 +35740,32 @@ function parseFTokens(fTokens, chainId, prices, tokenList) {
35740
35740
  }
35741
35741
  return out;
35742
35742
  }
35743
+
35744
+ // src/vaults/assetDecimals.ts
35745
+ var ERC20_DECIMALS_ABI = parseAbi([
35746
+ "function decimals() view returns (uint8)"
35747
+ ]);
35748
+ async function fetchAssetDecimals(chainId, underlyings, multicallRetry) {
35749
+ const map = /* @__PURE__ */ new Map();
35750
+ if (underlyings.length === 0) return map;
35751
+ const raw = await multicallRetry({
35752
+ chain: chainId,
35753
+ calls: underlyings.map((address) => ({
35754
+ address,
35755
+ name: "decimals",
35756
+ params: []
35757
+ })),
35758
+ abi: underlyings.map(() => ERC20_DECIMALS_ABI),
35759
+ allowFailure: true
35760
+ });
35761
+ underlyings.forEach((address, i) => {
35762
+ const d = Number(raw[i]);
35763
+ if (Number.isFinite(d) && d > 0 && d <= 36) map.set(address, d);
35764
+ });
35765
+ return map;
35766
+ }
35767
+
35768
+ // src/vaults/fluid/fetchPublic.ts
35743
35769
  var fetchFluidFTokens = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
35744
35770
  const calls = buildFluidFTokensCall(chainId);
35745
35771
  if (calls.length === 0) return {};
@@ -35750,6 +35776,25 @@ var fetchFluidFTokens = async (chainId, multicallRetry, prices = {}, tokenList =
35750
35776
  });
35751
35777
  const [converter] = getFluidFTokensConverter(chainId, prices, tokenList);
35752
35778
  const fTokens = converter(raw) ?? {};
35779
+ try {
35780
+ const underlyings = Object.values(fTokens).map((f) => f.underlying).filter((a) => !!a && a !== zeroAddress);
35781
+ const assetDec = await fetchAssetDecimals(
35782
+ chainId,
35783
+ [...new Set(underlyings)],
35784
+ multicallRetry
35785
+ );
35786
+ for (const f of Object.values(fTokens)) {
35787
+ const dec = assetDec.get(f.underlying);
35788
+ if (dec == null || dec === f.decimals) continue;
35789
+ const price2 = f.priceUsd ?? 0;
35790
+ f.decimals = dec;
35791
+ f.totalAssetsFormatted = Number(parseRawAmount(f.totalAssets, dec));
35792
+ f.totalAssetsUsd = f.totalAssetsFormatted * price2;
35793
+ f.liquidityFormatted = Number(parseRawAmount(f.liquidity, dec));
35794
+ f.liquidityUsd = f.liquidityFormatted * price2;
35795
+ }
35796
+ } catch {
35797
+ }
35753
35798
  try {
35754
35799
  const exposuresByUnderlying = await fetchFluidExposures(
35755
35800
  chainId,
@@ -36307,7 +36352,12 @@ var fetchMorphoVaultsFromChain = async (chainId, multicallRetry, prices = {}, to
36307
36352
  });
36308
36353
  const core = morphoPools()?.MORPHO_BLUE?.[chainId];
36309
36354
  const allMarketIds = [...new Set(marketIdsByVault.flat())];
36310
- const [rateMap, positionMap] = await Promise.all([
36355
+ const underlyings = [
36356
+ ...new Set(
36357
+ entries.map(({ entry }) => entry.underlying?.toLowerCase()).filter((a) => !!a)
36358
+ )
36359
+ ];
36360
+ const [rateMap, positionMap, assetDecimals] = await Promise.all([
36311
36361
  fetchMorphoMarketRates(chainId, core, allMarketIds, multicallRetry),
36312
36362
  fetchVaultSupplyShares(
36313
36363
  chainId,
@@ -36315,7 +36365,8 @@ var fetchMorphoVaultsFromChain = async (chainId, multicallRetry, prices = {}, to
36315
36365
  entries.map((e) => e.entry),
36316
36366
  marketIdsByVault,
36317
36367
  multicallRetry
36318
- )
36368
+ ),
36369
+ fetchAssetDecimals(chainId, underlyings, multicallRetry)
36319
36370
  ]);
36320
36371
  const out = {};
36321
36372
  for (let i = 0; i < entries.length; i++) {
@@ -36330,7 +36381,8 @@ var fetchMorphoVaultsFromChain = async (chainId, multicallRetry, prices = {}, to
36330
36381
  tokenList,
36331
36382
  marketIdsByVault[i],
36332
36383
  rateMap,
36333
- positionMap
36384
+ positionMap,
36385
+ assetDecimals
36334
36386
  );
36335
36387
  if (parsed) out[parsed.address] = parsed;
36336
36388
  }
@@ -36391,7 +36443,7 @@ async function fetchMorphoMarketRates(chainId, core, marketIds, multicallRetry)
36391
36443
  });
36392
36444
  return map;
36393
36445
  }
36394
- function parseVault3(entry, results, chainId, prices, tokenList, marketIds, rateMap, positionMap) {
36446
+ function parseVault3(entry, results, chainId, prices, tokenList, marketIds, rateMap, positionMap, assetDecimals) {
36395
36447
  const address = entry?.vault?.toLowerCase();
36396
36448
  const underlying = entry?.underlying?.toLowerCase();
36397
36449
  if (!address || !underlying) return null;
@@ -36408,7 +36460,7 @@ function parseVault3(entry, results, chainId, prices, tokenList, marketIds, rate
36408
36460
  guardianRaw
36409
36461
  ] = results;
36410
36462
  const assetMeta = tokenList[underlying];
36411
- const decimals = Number(decimalsRaw ?? assetMeta?.decimals ?? 18);
36463
+ const decimals = assetDecimals.get(underlying) ?? assetMeta?.decimals ?? Number(decimalsRaw ?? 18);
36412
36464
  const totalAssets = toStringSafe(totalAssetsRaw, "0");
36413
36465
  const totalSupply = toStringSafe(totalSupplyRaw, "0");
36414
36466
  const totalAssetsFormatted = Number(parseRawAmount(totalAssets, decimals));
@@ -36679,7 +36731,12 @@ var fetchListaVaultsFromChain = async (chainId, multicallRetry, prices = {}, tok
36679
36731
  });
36680
36732
  const moolah = morphoPools()?.[LISTA_PROTOCOL]?.[chainId];
36681
36733
  const allMarketIds = [...new Set(marketIdsByVault.flat())];
36682
- const [rateMap, positionMap] = await Promise.all([
36734
+ const underlyings = [
36735
+ ...new Set(
36736
+ entries.map((entry) => entry.underlying?.toLowerCase()).filter((a) => !!a)
36737
+ )
36738
+ ];
36739
+ const [rateMap, positionMap, assetDecimals] = await Promise.all([
36683
36740
  fetchListaMarketRates(chainId, moolah, allMarketIds, multicallRetry),
36684
36741
  fetchVaultSupplyShares(
36685
36742
  chainId,
@@ -36687,7 +36744,8 @@ var fetchListaVaultsFromChain = async (chainId, multicallRetry, prices = {}, tok
36687
36744
  entries,
36688
36745
  marketIdsByVault,
36689
36746
  multicallRetry
36690
- )
36747
+ ),
36748
+ fetchAssetDecimals(chainId, underlyings, multicallRetry)
36691
36749
  ]);
36692
36750
  const out = {};
36693
36751
  for (let i = 0; i < entries.length; i++) {
@@ -36702,7 +36760,8 @@ var fetchListaVaultsFromChain = async (chainId, multicallRetry, prices = {}, tok
36702
36760
  tokenList,
36703
36761
  marketIdsByVault[i],
36704
36762
  rateMap,
36705
- positionMap
36763
+ positionMap,
36764
+ assetDecimals
36706
36765
  );
36707
36766
  if (parsed) out[parsed.address] = parsed;
36708
36767
  }
@@ -36765,7 +36824,7 @@ async function fetchListaMarketRates(chainId, moolah, marketIds, multicallRetry)
36765
36824
  });
36766
36825
  return map;
36767
36826
  }
36768
- function parseVault4(entry, results, curatorAddrRaw, chainId, prices, tokenList, marketIds, rateMap, positionMap) {
36827
+ function parseVault4(entry, results, curatorAddrRaw, chainId, prices, tokenList, marketIds, rateMap, positionMap, assetDecimals) {
36769
36828
  const address = entry?.vault?.toLowerCase();
36770
36829
  const underlying = entry?.underlying?.toLowerCase();
36771
36830
  if (!address || !underlying) return null;
@@ -36782,7 +36841,7 @@ function parseVault4(entry, results, curatorAddrRaw, chainId, prices, tokenList,
36782
36841
  ,
36783
36842
  ] = results;
36784
36843
  const assetMeta = tokenList[underlying];
36785
- const decimals = Number(decimalsRaw ?? assetMeta?.decimals ?? 18);
36844
+ const decimals = assetDecimals.get(underlying) ?? assetMeta?.decimals ?? Number(decimalsRaw ?? 18);
36786
36845
  const totalAssets = toStringSafe2(totalAssetsRaw, "0");
36787
36846
  const totalSupply = toStringSafe2(totalSupplyRaw, "0");
36788
36847
  const totalAssetsFormatted = Number(parseRawAmount(totalAssets, decimals));
@@ -38822,6 +38881,16 @@ var Erc4626PreviewRedeemAbi = [
38822
38881
 
38823
38882
  // src/vaults/lst/readers/shared.ts
38824
38883
  var ONE_E187 = 10n ** 18n;
38884
+ var MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
38885
+ var Multicall3BalanceAbi = [
38886
+ {
38887
+ name: "getEthBalance",
38888
+ type: "function",
38889
+ stateMutability: "view",
38890
+ inputs: [{ name: "addr", type: "address" }],
38891
+ outputs: [{ type: "uint256" }]
38892
+ }
38893
+ ];
38825
38894
  var toBigInt10 = (v) => {
38826
38895
  if (v === void 0 || v === null) return void 0;
38827
38896
  if (typeof v === "bigint") return v;
@@ -39006,6 +39075,13 @@ var EtherFiLiquidityPoolAbi = [
39006
39075
  stateMutability: "view",
39007
39076
  inputs: [],
39008
39077
  outputs: [{ type: "uint256" }]
39078
+ },
39079
+ {
39080
+ name: "ethAmountLockedForWithdrawal",
39081
+ type: "function",
39082
+ stateMutability: "view",
39083
+ inputs: [],
39084
+ outputs: [{ type: "uint256" }]
39009
39085
  }
39010
39086
  ];
39011
39087
 
@@ -39018,8 +39094,17 @@ var readerEtherFiWeEth = (entry) => {
39018
39094
  ];
39019
39095
  const abis = [TotalSupplyAbi, EtherFiWeEthAbi];
39020
39096
  if (lp) {
39021
- calls.push({ address: lp, name: "getTotalPooledEther", params: [] });
39022
- abis.push(EtherFiLiquidityPoolAbi);
39097
+ calls.push({
39098
+ address: MULTICALL3_ADDRESS,
39099
+ name: "getEthBalance",
39100
+ params: [lp]
39101
+ });
39102
+ calls.push({
39103
+ address: lp,
39104
+ name: "ethAmountLockedForWithdrawal",
39105
+ params: []
39106
+ });
39107
+ abis.push(Multicall3BalanceAbi, EtherFiLiquidityPoolAbi);
39023
39108
  }
39024
39109
  return {
39025
39110
  calls,
@@ -39030,7 +39115,14 @@ var readerEtherFiWeEth = (entry) => {
39030
39115
  if (totalSupply === void 0 || exchangeRate === void 0) {
39031
39116
  return void 0;
39032
39117
  }
39033
- const liquidity = lp ? toBigInt10(slice[2]) : void 0;
39118
+ let liquidity;
39119
+ if (lp) {
39120
+ const lpBalance = toBigInt10(slice[2]);
39121
+ const locked = toBigInt10(slice[3]);
39122
+ if (lpBalance !== void 0 && locked !== void 0) {
39123
+ liquidity = lpBalance > locked ? lpBalance - locked : 0n;
39124
+ }
39125
+ }
39034
39126
  return {
39035
39127
  totalAssets: totalSupply * exchangeRate / ONE_E187,
39036
39128
  totalSupply,
@@ -40062,6 +40154,11 @@ var resolveYieldApr = async (entries) => {
40062
40154
 
40063
40155
  // src/vaults/lst/fetchPublic.ts
40064
40156
  var ONE_E188 = 10n ** 18n;
40157
+ var ERC20_BALANCE_ABI = parseAbi([
40158
+ "function balanceOf(address) view returns (uint256)"
40159
+ ]);
40160
+ var INSTANT_MODES = /* @__PURE__ */ new Set(["instant-or-queued", "fee-or-queued"]);
40161
+ var IDLE_READER_KINDS = /* @__PURE__ */ new Set(["erc4626", "erc4626PreviewRedeem"]);
40065
40162
  var resolveAcceptedInputs = (chainId, shareToken, entry) => {
40066
40163
  const enriched = getLstAcceptedInputs(chainId, shareToken);
40067
40164
  if (enriched) return enriched;
@@ -40079,6 +40176,20 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
40079
40176
  const readers = entries.map(buildReader);
40080
40177
  const allCalls = readers.flatMap((r) => r.calls);
40081
40178
  const allAbis = readers.flatMap((r) => r.abis);
40179
+ const idleEntries = entries.filter(
40180
+ (e) => INSTANT_MODES.has(e.withdrawalMode) && IDLE_READER_KINDS.has(e.reader)
40181
+ );
40182
+ const idleIsNative = (e) => e.underlying.toLowerCase() === zeroAddress;
40183
+ const idleCalls = idleEntries.map(
40184
+ (e) => idleIsNative(e) ? {
40185
+ address: MULTICALL3_ADDRESS,
40186
+ name: "getEthBalance",
40187
+ params: [e.address]
40188
+ } : { address: e.underlying, name: "balanceOf", params: [e.address] }
40189
+ );
40190
+ const idleAbis = idleEntries.map(
40191
+ (e) => idleIsNative(e) ? Multicall3BalanceAbi : ERC20_BALANCE_ABI
40192
+ );
40082
40193
  const groups = {};
40083
40194
  for (let i = 0; i < allCalls.length; i++) {
40084
40195
  const target = allCalls[i].chainId ?? chainId;
@@ -40088,7 +40199,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
40088
40199
  g.positions.push(i);
40089
40200
  }
40090
40201
  const chainEntries = Object.entries(groups);
40091
- const [perChainResults, aprByAddress] = await Promise.all([
40202
+ const [perChainResults, aprByAddress, idleResults] = await Promise.all([
40092
40203
  chainEntries.length > 0 ? Promise.all(
40093
40204
  chainEntries.map(async ([chain, { calls, abis }]) => ({
40094
40205
  chain,
@@ -40099,8 +40210,19 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
40099
40210
  })
40100
40211
  }))
40101
40212
  ) : Promise.resolve([]),
40102
- resolveYieldApr(entries)
40213
+ resolveYieldApr(entries),
40214
+ idleEntries.length > 0 ? multicallRetry({
40215
+ chain: chainId,
40216
+ calls: idleCalls,
40217
+ abi: idleAbis,
40218
+ allowFailure: true
40219
+ }) : Promise.resolve([])
40103
40220
  ]);
40221
+ const idleByAddress = /* @__PURE__ */ new Map();
40222
+ idleEntries.forEach((e, i) => {
40223
+ const bal = toBigInt10(idleResults[i]);
40224
+ if (bal !== void 0) idleByAddress.set(e.address.toLowerCase(), bal);
40225
+ });
40104
40226
  const rawResults = new Array(allCalls.length);
40105
40227
  for (const { chain, results } of perChainResults) {
40106
40228
  const positions = groups[chain].positions;
@@ -40129,9 +40251,15 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
40129
40251
  const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
40130
40252
  const convertToAssets = state.exchangeRate;
40131
40253
  const convertToShares = state.exchangeRate > 0n ? ONE_E188 * ONE_E188 / state.exchangeRate : 0n;
40132
- const liquidity = state.liquidity;
40133
- const liquidityFormatted = liquidity !== void 0 ? Number(liquidity) / decimalsFactor : void 0;
40134
- const liquidityUsd = liquidityFormatted !== void 0 && priceUsd !== void 0 ? liquidityFormatted * priceUsd : liquidityFormatted !== void 0 ? 0 : void 0;
40254
+ let liquidityRaw;
40255
+ if (state.liquidity !== void 0) {
40256
+ liquidityRaw = state.liquidity;
40257
+ } else {
40258
+ const idle = idleByAddress.get(addressLc);
40259
+ liquidityRaw = idle !== void 0 ? idle > state.totalAssets ? state.totalAssets : idle : 0n;
40260
+ }
40261
+ const liquidityFormatted = Number(liquidityRaw) / decimalsFactor;
40262
+ const liquidityUsd = priceUsd !== void 0 ? liquidityFormatted * priceUsd : 0;
40135
40263
  const displayName = composeVaultDisplayName(
40136
40264
  entry.brand,
40137
40265
  entry.brand,
@@ -40171,7 +40299,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
40171
40299
  priceUsd,
40172
40300
  totalAssetsFormatted,
40173
40301
  totalAssetsUsd,
40174
- liquidity: liquidity?.toString(),
40302
+ liquidity: liquidityRaw.toString(),
40175
40303
  liquidityFormatted,
40176
40304
  liquidityUsd
40177
40305
  };
@@ -42585,6 +42713,71 @@ var buildWithdrawalReader = (entry) => {
42585
42713
  // src/vaults/lst/withdrawals/registry.ts
42586
42714
  var LST_WITHDRAWAL_REGISTRY = {
42587
42715
  "1": [
42716
+ // Ankr ankrETH — Ankr unstake queue; reader not yet implemented.
42717
+ {
42718
+ lst: "0xe95a203b1a91a908f9b9ce46459d101078c2c3cb",
42719
+ brand: "Ankr",
42720
+ symbol: "ankrETH",
42721
+ reader: "unverified"
42722
+ },
42723
+ // BTC LSTs — exits via issuer/DEX or a protocol queue; per-protocol
42724
+ // readers not yet implemented. Listed as `unverified` placeholders so the
42725
+ // orchestrator surfaces the asset (returns [] requests) instead of
42726
+ // silently omitting it.
42727
+ {
42728
+ lst: "0x8db2350d78abc13f5673a411d4700bcf87864dde",
42729
+ brand: "Swell",
42730
+ symbol: "swBTC",
42731
+ reader: "unverified"
42732
+ },
42733
+ {
42734
+ lst: "0x8236a87084f8b84306f72007f36f2618a5634494",
42735
+ brand: "Lombard",
42736
+ symbol: "LBTC",
42737
+ reader: "unverified"
42738
+ },
42739
+ {
42740
+ lst: "0x657e8c867d8b37dcc18fa4caead9c45eb088c642",
42741
+ brand: "ether.fi",
42742
+ symbol: "eBTC",
42743
+ reader: "unverified"
42744
+ },
42745
+ {
42746
+ lst: "0x004e9c3ef86bc1ca1f0bb5c7662861ee93350568",
42747
+ brand: "Bedrock",
42748
+ symbol: "uniBTC",
42749
+ reader: "unverified"
42750
+ },
42751
+ {
42752
+ lst: "0x2ec37d45fcae65d9787ecf71dc85a444968f6646",
42753
+ brand: "Bedrock",
42754
+ symbol: "brBTC",
42755
+ reader: "unverified"
42756
+ },
42757
+ {
42758
+ lst: "0xf469fbd2abcd6b9de8e169d128226c0fc90a012e",
42759
+ brand: "PumpBTC",
42760
+ symbol: "pumpBTC",
42761
+ reader: "unverified"
42762
+ },
42763
+ {
42764
+ lst: "0x7a56e1c57c7475ccf742a1832b028f0456652f97",
42765
+ brand: "Solv",
42766
+ symbol: "SolvBTC",
42767
+ reader: "unverified"
42768
+ },
42769
+ {
42770
+ lst: "0xd9d920aa40f578ab794426f5c90f6c731d159def",
42771
+ brand: "Solv",
42772
+ symbol: "xSolvBTC",
42773
+ reader: "unverified"
42774
+ },
42775
+ {
42776
+ lst: "0xcea2daf93617b97504e05affc5bcf9b3922d3034",
42777
+ brand: "Solv",
42778
+ symbol: "BTC+",
42779
+ reader: "unverified"
42780
+ },
42588
42781
  {
42589
42782
  lst: "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",
42590
42783
  brand: "Lido",
@@ -42748,6 +42941,13 @@ var LST_WITHDRAWAL_REGISTRY = {
42748
42941
  }
42749
42942
  ],
42750
42943
  "56": [
42944
+ // Ankr ankrBNB — Ankr unstake queue; reader not yet implemented.
42945
+ {
42946
+ lst: "0x52f24a5e03aee338da5fd9df68d2b6fae1178827",
42947
+ brand: "Ankr",
42948
+ symbol: "ankrBNB",
42949
+ reader: "unverified"
42950
+ },
42751
42951
  {
42752
42952
  // slisBNB — ListaStakeManager withdrawal queue. Per-user
42753
42953
  // requests via getUserWithdrawalRequests; claimability + BNB
@@ -42776,6 +42976,13 @@ var LST_WITHDRAWAL_REGISTRY = {
42776
42976
  }
42777
42977
  ],
42778
42978
  "137": [
42979
+ // Ankr ankrMATIC — bridged, non-mintable on Polygon; exit via DEX only.
42980
+ {
42981
+ lst: "0x0e9b89007eee9c958c0eda24ef70723c2c93dd58",
42982
+ brand: "Ankr",
42983
+ symbol: "ankrMATIC",
42984
+ reader: "noQueue"
42985
+ },
42779
42986
  {
42780
42987
  // Polygon-side MaticX is a bridged ERC-20 — users bridge to
42781
42988
  // Ethereum and claim from the L1 home contract.
@@ -42786,6 +42993,13 @@ var LST_WITHDRAWAL_REGISTRY = {
42786
42993
  }
42787
42994
  ],
42788
42995
  "43114": [
42996
+ // Ankr ankrAVAX — Ankr unstake queue; reader not yet implemented.
42997
+ {
42998
+ lst: "0xc3344870d52688874b06d844e0c36cc39fc727f6",
42999
+ brand: "Ankr",
43000
+ symbol: "ankrAVAX",
43001
+ reader: "unverified"
43002
+ },
42789
43003
  {
42790
43004
  lst: "0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be",
42791
43005
  brand: "BENQI",
@@ -42969,6 +43183,35 @@ var LST_WITHDRAWAL_REGISTRY = {
42969
43183
  reader: "stellaUnbondQueue",
42970
43184
  withdrawalContract: "0xbc7e02c4178a7df7d3e564323a5c359dc96c4db4"
42971
43185
  }
43186
+ ],
43187
+ "1116": [
43188
+ // Core DAO LSTs — CoreDAO stakers unbond via the Earn / staking
43189
+ // contracts; per-protocol queue readers not yet implemented.
43190
+ {
43191
+ lst: "0xb3a8f0f0da9ffc65318aa39e55079796093029ad",
43192
+ brand: "Core",
43193
+ symbol: "stCORE",
43194
+ reader: "unverified"
43195
+ },
43196
+ {
43197
+ lst: "0xc5555ea27e63cd89f8b227dece2a3916800c0f4f",
43198
+ brand: "b14g",
43199
+ symbol: "dualCORE",
43200
+ reader: "unverified"
43201
+ },
43202
+ {
43203
+ lst: "0xa20b3b97df3a02f9185175760300a06b4e0a2c05",
43204
+ brand: "StakedCore",
43205
+ symbol: "SCORE",
43206
+ reader: "unverified"
43207
+ },
43208
+ // pumpBTC on Core — bridged, non-mintable; exit via DEX only.
43209
+ {
43210
+ lst: "0x5a2aa871954ebdf89b1547e75d032598356caad5",
43211
+ brand: "PumpBTC",
43212
+ symbol: "pumpBTC",
43213
+ reader: "noQueue"
43214
+ }
42972
43215
  ]
42973
43216
  };
42974
43217
  var getLstWithdrawalRegistry = (chainId, extraEntries) => {