@1delta/margin-fetcher 5.0.19 → 5.0.20
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.d.ts +39 -1
- package/dist/index.js +705 -311
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -8010,9 +8010,9 @@ var getInitReservesDataConverter = (lender, chainId, prices, additionalYields, t
|
|
|
8010
8010
|
});
|
|
8011
8011
|
});
|
|
8012
8012
|
Object.entries(eModes).forEach(([modeId, modeData]) => {
|
|
8013
|
-
Object.entries(result).forEach(([
|
|
8014
|
-
if (!result[
|
|
8015
|
-
result[
|
|
8013
|
+
Object.entries(result).forEach(([key3, _3]) => {
|
|
8014
|
+
if (!result[key3].config[modeId]) {
|
|
8015
|
+
result[key3].config[modeId] = {
|
|
8016
8016
|
label: modeData.label,
|
|
8017
8017
|
category: modeData.category,
|
|
8018
8018
|
debtDisabled: true,
|
|
@@ -10084,8 +10084,8 @@ var brokerAbi = parseAbi([
|
|
|
10084
10084
|
var BROKER_CACHE = {};
|
|
10085
10085
|
var FIXED_TERMS_CACHE = {};
|
|
10086
10086
|
var BROKER_USER_CACHE = {};
|
|
10087
|
-
function toBytes32MarketId(
|
|
10088
|
-
const raw =
|
|
10087
|
+
function toBytes32MarketId(key3) {
|
|
10088
|
+
const raw = key3.startsWith("LISTA_DAO_") ? "0x" + key3.slice("LISTA_DAO_".length) : key3;
|
|
10089
10089
|
return raw.toLowerCase();
|
|
10090
10090
|
}
|
|
10091
10091
|
function ceilDiv(a, b) {
|
|
@@ -10120,8 +10120,8 @@ async function resolveListaBrokers(chainId, marketKeys, getClient = getEvmClient
|
|
|
10120
10120
|
if (!moolah || marketKeys.length === 0) return out;
|
|
10121
10121
|
const cache = BROKER_CACHE[chainId] ??= {};
|
|
10122
10122
|
const missing = [];
|
|
10123
|
-
for (const
|
|
10124
|
-
const id = toBytes32MarketId(
|
|
10123
|
+
for (const key3 of marketKeys) {
|
|
10124
|
+
const id = toBytes32MarketId(key3);
|
|
10125
10125
|
if (cache[id] === void 0) missing.push(id);
|
|
10126
10126
|
}
|
|
10127
10127
|
if (missing.length > 0) {
|
|
@@ -10144,8 +10144,8 @@ async function resolveListaBrokers(chainId, marketKeys, getClient = getEvmClient
|
|
|
10144
10144
|
} catch {
|
|
10145
10145
|
}
|
|
10146
10146
|
}
|
|
10147
|
-
for (const
|
|
10148
|
-
const id = toBytes32MarketId(
|
|
10147
|
+
for (const key3 of marketKeys) {
|
|
10148
|
+
const id = toBytes32MarketId(key3);
|
|
10149
10149
|
const broker = cache[id];
|
|
10150
10150
|
if (broker && broker !== zeroAddress) out[id] = broker;
|
|
10151
10151
|
}
|
|
@@ -10467,15 +10467,15 @@ function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, tota
|
|
|
10467
10467
|
oracleDebt += debtStableUSDOracle;
|
|
10468
10468
|
oracleDebt += debtUSDOracle;
|
|
10469
10469
|
(rewards ?? []).forEach((rewardData) => {
|
|
10470
|
-
const
|
|
10470
|
+
const key3 = rewardData.asset;
|
|
10471
10471
|
rewardDepositAccrual += rewardData.depositRate * depositsUSD;
|
|
10472
10472
|
rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtStableUSD;
|
|
10473
10473
|
const rewDepo = rewardData.depositRate * depositsUSD;
|
|
10474
10474
|
const rewDebt = rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * (debtStableUSD ?? 0);
|
|
10475
|
-
if (!rewardsPerAsset[
|
|
10476
|
-
rewardsPerAsset[
|
|
10477
|
-
if (rewDepo > 0) rewardsPerAsset[
|
|
10478
|
-
if (rewDebt > 0) rewardsPerAsset[
|
|
10475
|
+
if (!rewardsPerAsset[key3])
|
|
10476
|
+
rewardsPerAsset[key3] = { depositApr: 0, borrowApr: 0 };
|
|
10477
|
+
if (rewDepo > 0) rewardsPerAsset[key3].depositApr += rewDepo;
|
|
10478
|
+
if (rewDebt > 0) rewardsPerAsset[key3].borrowApr += rewDebt;
|
|
10479
10479
|
});
|
|
10480
10480
|
stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
|
|
10481
10481
|
stakingBorrowAccrual += (intrinsicYield ?? 0) * (debtStableUSD + debtUSD);
|
|
@@ -11201,15 +11201,15 @@ function createSumerUserState(payload, lenderData, totalDeposits24h = 0, totalDe
|
|
|
11201
11201
|
oracleDebt += debtStableUSDOracle;
|
|
11202
11202
|
oracleDebt += debtUSDOracle;
|
|
11203
11203
|
(rewards ?? []).forEach((rewardData) => {
|
|
11204
|
-
const
|
|
11204
|
+
const key3 = rewardData.asset;
|
|
11205
11205
|
rewardDepositAccrual += rewardData.depositRate * depositsUSD;
|
|
11206
11206
|
rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtStableUSD;
|
|
11207
11207
|
const rewDepo = rewardData.depositRate * depositsUSD;
|
|
11208
11208
|
const rewDebt = rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * (debtStableUSD ?? 0);
|
|
11209
|
-
if (!rewardsPerAsset[
|
|
11210
|
-
rewardsPerAsset[
|
|
11211
|
-
if (rewDepo > 0) rewardsPerAsset[
|
|
11212
|
-
if (rewDebt > 0) rewardsPerAsset[
|
|
11209
|
+
if (!rewardsPerAsset[key3])
|
|
11210
|
+
rewardsPerAsset[key3] = { depositApr: 0, borrowApr: 0 };
|
|
11211
|
+
if (rewDepo > 0) rewardsPerAsset[key3].depositApr += rewDepo;
|
|
11212
|
+
if (rewDebt > 0) rewardsPerAsset[key3].borrowApr += rewDebt;
|
|
11213
11213
|
});
|
|
11214
11214
|
stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
|
|
11215
11215
|
stakingBorrowAccrual += (intrinsicYield ?? 0) * (debtStableUSD + debtUSD);
|
|
@@ -15203,11 +15203,11 @@ function toAddress(value) {
|
|
|
15203
15203
|
return value.toString();
|
|
15204
15204
|
throw new Error(`Cannot convert value to address string: ${String(value)}`);
|
|
15205
15205
|
}
|
|
15206
|
-
function field(src,
|
|
15206
|
+
function field(src, key3, index) {
|
|
15207
15207
|
if (src == null) throw new Error("Source is null/undefined");
|
|
15208
|
-
if (
|
|
15208
|
+
if (key3 in src) return src[key3];
|
|
15209
15209
|
if (Array.isArray(src)) return src[index];
|
|
15210
|
-
return src[
|
|
15210
|
+
return src[key3];
|
|
15211
15211
|
}
|
|
15212
15212
|
function parseMarketIncentives(input) {
|
|
15213
15213
|
return {
|
|
@@ -15278,11 +15278,11 @@ function toBigInt2(value) {
|
|
|
15278
15278
|
}
|
|
15279
15279
|
throw new Error(`Cannot convert value to bigint: ${String(value)}`);
|
|
15280
15280
|
}
|
|
15281
|
-
function field2(src,
|
|
15281
|
+
function field2(src, key3, index) {
|
|
15282
15282
|
if (src == null) throw new Error("Source is null/undefined");
|
|
15283
|
-
if (
|
|
15283
|
+
if (key3 in src) return src[key3];
|
|
15284
15284
|
if (Array.isArray(src)) return src[index];
|
|
15285
|
-
return src[
|
|
15285
|
+
return src[key3];
|
|
15286
15286
|
}
|
|
15287
15287
|
function computeApy(rateRaw, timestampsPerYear) {
|
|
15288
15288
|
const rate = Number(formatEther(rateRaw));
|
|
@@ -15343,11 +15343,11 @@ function toBool3(value) {
|
|
|
15343
15343
|
if (typeof value === "number") return value !== 0;
|
|
15344
15344
|
return Boolean(value);
|
|
15345
15345
|
}
|
|
15346
|
-
function field3(src,
|
|
15346
|
+
function field3(src, key3, index) {
|
|
15347
15347
|
if (src == null) throw new Error("Source is null/undefined");
|
|
15348
|
-
if (
|
|
15348
|
+
if (key3 in src) return src[key3];
|
|
15349
15349
|
if (Array.isArray(src)) return src[index];
|
|
15350
|
-
return src[
|
|
15350
|
+
return src[key3];
|
|
15351
15351
|
}
|
|
15352
15352
|
function parseTectonicMarketData(input) {
|
|
15353
15353
|
return {
|
|
@@ -15415,11 +15415,11 @@ function toBool4(value) {
|
|
|
15415
15415
|
if (typeof value === "number") return value !== 0;
|
|
15416
15416
|
return Boolean(value);
|
|
15417
15417
|
}
|
|
15418
|
-
function field4(src,
|
|
15418
|
+
function field4(src, key3, index) {
|
|
15419
15419
|
if (src == null) throw new Error("Source is null/undefined");
|
|
15420
|
-
if (
|
|
15420
|
+
if (key3 in src) return src[key3];
|
|
15421
15421
|
if (Array.isArray(src)) return src[index];
|
|
15422
|
-
return src[
|
|
15422
|
+
return src[key3];
|
|
15423
15423
|
}
|
|
15424
15424
|
function parseKineticMarketMetadata(input) {
|
|
15425
15425
|
return {
|
|
@@ -15858,11 +15858,11 @@ function toBool5(value) {
|
|
|
15858
15858
|
if (typeof value === "number") return value !== 0;
|
|
15859
15859
|
return Boolean(value);
|
|
15860
15860
|
}
|
|
15861
|
-
function field5(src,
|
|
15861
|
+
function field5(src, key3, index) {
|
|
15862
15862
|
if (src == null) throw new Error("Source is null/undefined");
|
|
15863
|
-
if (
|
|
15863
|
+
if (key3 in src) return src[key3];
|
|
15864
15864
|
if (Array.isArray(src)) return src[index];
|
|
15865
|
-
return src[
|
|
15865
|
+
return src[key3];
|
|
15866
15866
|
}
|
|
15867
15867
|
function parseToken(raw) {
|
|
15868
15868
|
return {
|
|
@@ -16090,11 +16090,11 @@ function capRate(rate) {
|
|
|
16090
16090
|
if (!Number.isFinite(rate)) return MAX_RATE;
|
|
16091
16091
|
return Math.min(rate, MAX_RATE);
|
|
16092
16092
|
}
|
|
16093
|
-
function pick(meta,
|
|
16093
|
+
function pick(meta, key3, index) {
|
|
16094
16094
|
if (meta == null) return void 0;
|
|
16095
|
-
if (
|
|
16095
|
+
if (key3 in meta) return meta[key3];
|
|
16096
16096
|
if (Array.isArray(meta)) return meta[index];
|
|
16097
|
-
return meta[
|
|
16097
|
+
return meta[key3];
|
|
16098
16098
|
}
|
|
16099
16099
|
var DEFAULT_PAUSED_ACTIONS = {
|
|
16100
16100
|
[0 /* MINT */]: false,
|
|
@@ -17438,8 +17438,8 @@ function getActiveCollaterals(ltvInfo) {
|
|
|
17438
17438
|
return active;
|
|
17439
17439
|
}
|
|
17440
17440
|
function findVaultInfo(normalizedAddr, vaultData) {
|
|
17441
|
-
for (const [
|
|
17442
|
-
if (
|
|
17441
|
+
for (const [key3, value] of vaultData) {
|
|
17442
|
+
if (key3.toLowerCase() === normalizedAddr) return value;
|
|
17443
17443
|
}
|
|
17444
17444
|
return void 0;
|
|
17445
17445
|
}
|
|
@@ -17751,8 +17751,8 @@ function buildTokenEntry(info, config, collateralActive, borrowVaults, opts) {
|
|
|
17751
17751
|
};
|
|
17752
17752
|
}
|
|
17753
17753
|
function findInfo(addr2, vaultData) {
|
|
17754
|
-
for (const [
|
|
17755
|
-
if (
|
|
17754
|
+
for (const [key3, value] of vaultData) {
|
|
17755
|
+
if (key3.toLowerCase() === addr2) return value;
|
|
17756
17756
|
}
|
|
17757
17757
|
return void 0;
|
|
17758
17758
|
}
|
|
@@ -17954,11 +17954,11 @@ var buildAaveV4LenderReserveCall = (chainId, lender) => {
|
|
|
17954
17954
|
{ address: spokeAddr, name: "getReserveDebt", params: [rid] },
|
|
17955
17955
|
{ address: spokeAddr, name: "getReserveTotalDebt", params: [rid] }
|
|
17956
17956
|
);
|
|
17957
|
-
for (let
|
|
17957
|
+
for (let key3 = 0; key3 < dynConfigCount; key3++) {
|
|
17958
17958
|
calls.push({
|
|
17959
17959
|
address: spokeAddr,
|
|
17960
17960
|
name: "getDynamicReserveConfig",
|
|
17961
|
-
params: [rid,
|
|
17961
|
+
params: [rid, key3]
|
|
17962
17962
|
});
|
|
17963
17963
|
}
|
|
17964
17964
|
}
|
|
@@ -18283,11 +18283,11 @@ var getAaveV4ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
18283
18283
|
const rawTotalDebt = data[offset + 4];
|
|
18284
18284
|
offset += BASE_CALLS_PER_RESERVE;
|
|
18285
18285
|
const dynamicConfigs = {};
|
|
18286
|
-
for (let
|
|
18286
|
+
for (let key3 = 0; key3 < dynConfigCount; key3++) {
|
|
18287
18287
|
const rawDynConfig = data[offset];
|
|
18288
18288
|
offset += 1;
|
|
18289
18289
|
if (rawDynConfig && rawDynConfig !== "0x") {
|
|
18290
|
-
dynamicConfigs[
|
|
18290
|
+
dynamicConfigs[key3] = {
|
|
18291
18291
|
collateralFactor: Number(rawDynConfig?.collateralFactor ?? 0),
|
|
18292
18292
|
maxLiquidationBonus: Number(
|
|
18293
18293
|
rawDynConfig?.maxLiquidationBonus ?? 0
|
|
@@ -20144,7 +20144,7 @@ var MIDNIGHT_BOOK_LEVELS = 20;
|
|
|
20144
20144
|
var LKG_TTL_SEC = 30 * 60;
|
|
20145
20145
|
var lastGood = /* @__PURE__ */ new Map();
|
|
20146
20146
|
async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec9) {
|
|
20147
|
-
const
|
|
20147
|
+
const key3 = `${chainId}:${marketId}`;
|
|
20148
20148
|
let fresh = null;
|
|
20149
20149
|
if (source.getTopAndBook) {
|
|
20150
20150
|
fresh = await source.getTopAndBook(marketId, MIDNIGHT_BOOK_LEVELS).catch(() => null);
|
|
@@ -20153,10 +20153,10 @@ async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec9) {
|
|
|
20153
20153
|
if (top) fresh = { top, book: { bids: [], asks: [] } };
|
|
20154
20154
|
}
|
|
20155
20155
|
if (fresh) {
|
|
20156
|
-
lastGood.set(
|
|
20156
|
+
lastGood.set(key3, { top: fresh.top, book: fresh.book, at: nowSec9 });
|
|
20157
20157
|
return { top: fresh.top, book: fresh.book };
|
|
20158
20158
|
}
|
|
20159
|
-
const cached = lastGood.get(
|
|
20159
|
+
const cached = lastGood.get(key3);
|
|
20160
20160
|
if (cached && nowSec9 - cached.at <= LKG_TTL_SEC) {
|
|
20161
20161
|
return { top: cached.top, book: cached.book };
|
|
20162
20162
|
}
|
|
@@ -20757,7 +20757,7 @@ var TERM_BOOK_LEVELS = 20;
|
|
|
20757
20757
|
var LKG_TTL_SEC2 = 30 * 60;
|
|
20758
20758
|
var lastGood2 = /* @__PURE__ */ new Map();
|
|
20759
20759
|
async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec9) {
|
|
20760
|
-
const
|
|
20760
|
+
const key3 = `${chainId}:${config.termRepoId}`;
|
|
20761
20761
|
let fresh = null;
|
|
20762
20762
|
if (source.getTopAndBook) {
|
|
20763
20763
|
fresh = await source.getTopAndBook(config, TERM_BOOK_LEVELS).catch(() => null);
|
|
@@ -20766,7 +20766,7 @@ async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec9) {
|
|
|
20766
20766
|
if (top) fresh = { top, book: { bids: [], asks: [] }, auction: null };
|
|
20767
20767
|
}
|
|
20768
20768
|
if (fresh) {
|
|
20769
|
-
lastGood2.set(
|
|
20769
|
+
lastGood2.set(key3, {
|
|
20770
20770
|
top: fresh.top,
|
|
20771
20771
|
book: fresh.book,
|
|
20772
20772
|
auction: fresh.auction ?? null,
|
|
@@ -20774,7 +20774,7 @@ async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec9) {
|
|
|
20774
20774
|
});
|
|
20775
20775
|
return { top: fresh.top, book: fresh.book, auction: fresh.auction ?? null };
|
|
20776
20776
|
}
|
|
20777
|
-
const cached = lastGood2.get(
|
|
20777
|
+
const cached = lastGood2.get(key3);
|
|
20778
20778
|
if (cached && nowSec9 - cached.at <= LKG_TTL_SEC2) {
|
|
20779
20779
|
const stillOpen = cached.auction && cached.auction.endTime > nowSec9 ? cached.auction : null;
|
|
20780
20780
|
return { top: cached.top, book: cached.book, auction: stillOpen };
|
|
@@ -21365,10 +21365,10 @@ async function fetchLiquityMarkets(lender, chainId) {
|
|
|
21365
21365
|
function liquityLenderKey(lender, chainId, collIndex) {
|
|
21366
21366
|
return `${lender}_${chainId}_${collIndex}`;
|
|
21367
21367
|
}
|
|
21368
|
-
function liquityKeyParts(
|
|
21369
|
-
const base = LIQUITY_FAMILY_LENDERS.find((b) =>
|
|
21368
|
+
function liquityKeyParts(key3) {
|
|
21369
|
+
const base = LIQUITY_FAMILY_LENDERS.find((b) => key3.startsWith(b + "_"));
|
|
21370
21370
|
if (!base) return void 0;
|
|
21371
|
-
const suffix =
|
|
21371
|
+
const suffix = key3.slice(base.length + 1);
|
|
21372
21372
|
const m = suffix.match(/^(\d+)_(\d+)$/);
|
|
21373
21373
|
if (!m) return void 0;
|
|
21374
21374
|
return { lender: base, chainId: m[1], collIndex: Number(m[2]) };
|
|
@@ -21676,9 +21676,9 @@ async function fetchRiverMarkets(lender, chainId) {
|
|
|
21676
21676
|
function riverLenderKey(lender, chainId, index) {
|
|
21677
21677
|
return `${lender}_${chainId}_${index}`;
|
|
21678
21678
|
}
|
|
21679
|
-
function riverKeyParts(
|
|
21680
|
-
if (!
|
|
21681
|
-
const suffix =
|
|
21679
|
+
function riverKeyParts(key3) {
|
|
21680
|
+
if (!key3.startsWith("RIVER_")) return void 0;
|
|
21681
|
+
const suffix = key3.slice("RIVER_".length);
|
|
21682
21682
|
const m = suffix.match(/^(\d+)_(\d+)$/);
|
|
21683
21683
|
if (!m) return void 0;
|
|
21684
21684
|
return { lender: "RIVER", chainId: m[1], index: Number(m[2]) };
|
|
@@ -22229,8 +22229,8 @@ function getCachedTermMaxMarkets(chainId) {
|
|
|
22229
22229
|
const prefix = `${chainId}:`;
|
|
22230
22230
|
const now = Date.now();
|
|
22231
22231
|
const out = [];
|
|
22232
|
-
for (const [
|
|
22233
|
-
if (!
|
|
22232
|
+
for (const [key3, hit] of marketCache) {
|
|
22233
|
+
if (!key3.startsWith(prefix)) continue;
|
|
22234
22234
|
if (now - hit.at > MARKET_CACHE_TTL_MS) continue;
|
|
22235
22235
|
out.push(hit.config);
|
|
22236
22236
|
}
|
|
@@ -22296,8 +22296,8 @@ function fmtDuration2(sec) {
|
|
|
22296
22296
|
function priceFor(address, chainId, tokens, prices) {
|
|
22297
22297
|
const lower3 = address.toLowerCase();
|
|
22298
22298
|
const token = tokens[lower3];
|
|
22299
|
-
const
|
|
22300
|
-
return prices[
|
|
22299
|
+
const key3 = toOracleKey(token?.assetGroup) || toGenericPriceKey(lower3, chainId);
|
|
22300
|
+
return prices[key3] ?? 0;
|
|
22301
22301
|
}
|
|
22302
22302
|
function convertTellerMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
22303
22303
|
intrinsicYields: {},
|
|
@@ -22640,8 +22640,8 @@ function currencyFor7(address, decimals, tokens) {
|
|
|
22640
22640
|
}
|
|
22641
22641
|
function priceFor2(address, chainId, prices, tokens) {
|
|
22642
22642
|
const asset = tokens[address];
|
|
22643
|
-
const
|
|
22644
|
-
return prices[
|
|
22643
|
+
const key3 = toOracleKey(asset?.assetGroup) || toGenericPriceKey(address, chainId);
|
|
22644
|
+
return prices[key3] ?? 0;
|
|
22645
22645
|
}
|
|
22646
22646
|
function convertTermMaxMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
22647
22647
|
intrinsicYields: {},
|
|
@@ -23004,8 +23004,8 @@ async function fetchInverseMarkets(lender, chainId) {
|
|
|
23004
23004
|
return { ...empty, dbrPriceDola: await dbrPricePromise };
|
|
23005
23005
|
}
|
|
23006
23006
|
}
|
|
23007
|
-
function num(api,
|
|
23008
|
-
const v = api?.[
|
|
23007
|
+
function num(api, key3) {
|
|
23008
|
+
const v = api?.[key3];
|
|
23009
23009
|
return typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
23010
23010
|
}
|
|
23011
23011
|
var DEFAULT_BANDS = 10;
|
|
@@ -23258,6 +23258,19 @@ async function fetchLlamaLendMarkets(lender, chainId) {
|
|
|
23258
23258
|
return empty;
|
|
23259
23259
|
}
|
|
23260
23260
|
}
|
|
23261
|
+
|
|
23262
|
+
// src/prices/oracle-prices/fetchers/resupplyRoster.ts
|
|
23263
|
+
var rosterCache = /* @__PURE__ */ new Map();
|
|
23264
|
+
var key = (chainId, lender) => `${chainId}:${lender}`;
|
|
23265
|
+
function setResupplyPairRoster(chainId, lender, pairs) {
|
|
23266
|
+
if (pairs.length === 0) return;
|
|
23267
|
+
rosterCache.set(key(chainId, lender), pairs);
|
|
23268
|
+
}
|
|
23269
|
+
function getResupplyPairRoster(chainId, lender) {
|
|
23270
|
+
return rosterCache.get(key(chainId, lender)) ?? [];
|
|
23271
|
+
}
|
|
23272
|
+
|
|
23273
|
+
// src/lending/public-data/resupply/fetchPublic.ts
|
|
23261
23274
|
var VAULT_PRICE_ABI = [
|
|
23262
23275
|
{
|
|
23263
23276
|
name: "convertToAssets",
|
|
@@ -23523,6 +23536,14 @@ async function fetchResupplyMarkets(lender, chainId) {
|
|
|
23523
23536
|
};
|
|
23524
23537
|
});
|
|
23525
23538
|
await attachCollateralRewards(chainId, convexPoolUtil, pairs);
|
|
23539
|
+
setResupplyPairRoster(
|
|
23540
|
+
chainId,
|
|
23541
|
+
lender,
|
|
23542
|
+
pairs.map((p) => ({
|
|
23543
|
+
pair: p.identity.pair.toLowerCase(),
|
|
23544
|
+
underlying: p.identity.underlying.toLowerCase()
|
|
23545
|
+
}))
|
|
23546
|
+
);
|
|
23526
23547
|
return { lender, config, pairs, rsup };
|
|
23527
23548
|
}
|
|
23528
23549
|
async function readRewardContext(chainId, registry, utilities) {
|
|
@@ -23616,8 +23637,8 @@ async function attachCollateralRewards(chainId, convexPoolUtil, pairs) {
|
|
|
23616
23637
|
if (typeof t !== "string" || typeof rate !== "bigint" || rate === 0n) {
|
|
23617
23638
|
return;
|
|
23618
23639
|
}
|
|
23619
|
-
const
|
|
23620
|
-
byToken.set(
|
|
23640
|
+
const key3 = t.toLowerCase();
|
|
23641
|
+
byToken.set(key3, (byToken.get(key3) ?? 0n) + rate);
|
|
23621
23642
|
});
|
|
23622
23643
|
p.collateralRewards = [...byToken.entries()].map(
|
|
23623
23644
|
([token, ratePerSecPerShare]) => ({ token, ratePerSecPerShare })
|
|
@@ -23626,14 +23647,14 @@ async function attachCollateralRewards(chainId, convexPoolUtil, pairs) {
|
|
|
23626
23647
|
}
|
|
23627
23648
|
|
|
23628
23649
|
// src/prices/oracle-prices/fetchers/curvanceRoster.ts
|
|
23629
|
-
var
|
|
23630
|
-
var
|
|
23650
|
+
var rosterCache2 = /* @__PURE__ */ new Map();
|
|
23651
|
+
var key2 = (chainId, lender) => `${chainId}:${lender}`;
|
|
23631
23652
|
function setCurvanceAssetRoster(chainId, lender, markets) {
|
|
23632
23653
|
if (markets.length === 0) return;
|
|
23633
|
-
|
|
23654
|
+
rosterCache2.set(key2(chainId, lender), markets);
|
|
23634
23655
|
}
|
|
23635
23656
|
function getCurvanceAssetRoster(chainId, lender) {
|
|
23636
|
-
return
|
|
23657
|
+
return rosterCache2.get(key2(chainId, lender)) ?? [];
|
|
23637
23658
|
}
|
|
23638
23659
|
|
|
23639
23660
|
// src/lending/public-data/curvance/fetchPublic.ts
|
|
@@ -24012,9 +24033,9 @@ function allowlist(config) {
|
|
|
24012
24033
|
function inverseLenderKey(lender, market) {
|
|
24013
24034
|
return `${lender}_${market.replace(/^0x/i, "").toUpperCase()}`;
|
|
24014
24035
|
}
|
|
24015
|
-
function inverseKeyParts(
|
|
24016
|
-
if (!
|
|
24017
|
-
const suffix =
|
|
24036
|
+
function inverseKeyParts(key3) {
|
|
24037
|
+
if (!key3.startsWith("INVERSE_")) return void 0;
|
|
24038
|
+
const suffix = key3.slice("INVERSE_".length);
|
|
24018
24039
|
if (!/^[0-9A-F]{40}$/.test(suffix)) return void 0;
|
|
24019
24040
|
return { lender: "INVERSE", market: "0x" + suffix.toLowerCase() };
|
|
24020
24041
|
}
|
|
@@ -24202,9 +24223,9 @@ function convertInverseMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
24202
24223
|
function llamaLendLenderKey(lender, controller) {
|
|
24203
24224
|
return `${lender}_${controller.replace(/^0x/i, "").toUpperCase()}`;
|
|
24204
24225
|
}
|
|
24205
|
-
function llamaLendKeyParts(
|
|
24206
|
-
if (!
|
|
24207
|
-
const suffix =
|
|
24226
|
+
function llamaLendKeyParts(key3) {
|
|
24227
|
+
if (!key3.startsWith("LLAMALEND_")) return void 0;
|
|
24228
|
+
const suffix = key3.slice("LLAMALEND_".length);
|
|
24208
24229
|
if (!/^[0-9A-F]{40}$/.test(suffix)) return void 0;
|
|
24209
24230
|
return { lender: "LLAMALEND", controller: "0x" + suffix.toLowerCase() };
|
|
24210
24231
|
}
|
|
@@ -24529,9 +24550,9 @@ function resolveWrappedMarket(chainId, identity) {
|
|
|
24529
24550
|
function resupplyLenderKey(lender, chainId, pair) {
|
|
24530
24551
|
return `${lender}_${chainId}_${pair.replace(/^0x/i, "").toUpperCase()}`;
|
|
24531
24552
|
}
|
|
24532
|
-
function resupplyKeyParts(
|
|
24533
|
-
if (!
|
|
24534
|
-
const suffix =
|
|
24553
|
+
function resupplyKeyParts(key3) {
|
|
24554
|
+
if (!key3.startsWith("RESUPPLY_")) return void 0;
|
|
24555
|
+
const suffix = key3.slice("RESUPPLY_".length);
|
|
24535
24556
|
const m = suffix.match(/^(\d+)_([0-9A-Fa-f]{40})$/);
|
|
24536
24557
|
if (!m) return void 0;
|
|
24537
24558
|
return {
|
|
@@ -24555,8 +24576,8 @@ function buildRewardEntries(p, rsup, chainId, prices, tokens, collateralUsd, deb
|
|
|
24555
24576
|
const priceOf2 = (address) => {
|
|
24556
24577
|
const lower3 = address.toLowerCase();
|
|
24557
24578
|
const token = tokens[lower3];
|
|
24558
|
-
const
|
|
24559
|
-
return prices[
|
|
24579
|
+
const key3 = toOracleKey(token?.assetGroup) || toGenericPriceKey(lower3, chainId);
|
|
24580
|
+
return prices[key3] ?? 0;
|
|
24560
24581
|
};
|
|
24561
24582
|
const collateral = [];
|
|
24562
24583
|
if (collateralUsd > 0) {
|
|
@@ -25055,8 +25076,8 @@ function resolvePositionManagers(cfg, marketManager) {
|
|
|
25055
25076
|
const direct = map[marketManager];
|
|
25056
25077
|
if (direct) return { ...direct };
|
|
25057
25078
|
const target = marketManager.toLowerCase();
|
|
25058
|
-
for (const
|
|
25059
|
-
if (
|
|
25079
|
+
for (const key3 of Object.keys(map)) {
|
|
25080
|
+
if (key3.toLowerCase() === target) return { ...map[key3] };
|
|
25060
25081
|
}
|
|
25061
25082
|
return void 0;
|
|
25062
25083
|
}
|
|
@@ -25142,8 +25163,8 @@ var DSS_KEY_PREFIXES = ["USDD", "SKY"];
|
|
|
25142
25163
|
var DSS_KEY_RE = new RegExp(
|
|
25143
25164
|
`^(${DSS_KEY_PREFIXES.join("|")})_(\\d+)_([A-Z0-9][A-Z0-9_-]*)$`
|
|
25144
25165
|
);
|
|
25145
|
-
function dssKeyParts(
|
|
25146
|
-
const m =
|
|
25166
|
+
function dssKeyParts(key3) {
|
|
25167
|
+
const m = key3.match(DSS_KEY_RE);
|
|
25147
25168
|
if (!m) return void 0;
|
|
25148
25169
|
return { lender: m[1], chainId: m[2], ilk: keySegmentToIlk(m[3]) };
|
|
25149
25170
|
}
|
|
@@ -25429,9 +25450,9 @@ async function fetchFrankencoinMarkets(lender, chainId) {
|
|
|
25429
25450
|
function frankencoinLenderKey(lender, chainId, position) {
|
|
25430
25451
|
return `${lender}_${chainId}_${position.replace(/^0x/i, "").toUpperCase()}`;
|
|
25431
25452
|
}
|
|
25432
|
-
function frankencoinKeyParts(
|
|
25433
|
-
if (!
|
|
25434
|
-
const suffix =
|
|
25453
|
+
function frankencoinKeyParts(key3) {
|
|
25454
|
+
if (!key3.startsWith("FRANKENCOIN_")) return void 0;
|
|
25455
|
+
const suffix = key3.slice("FRANKENCOIN_".length);
|
|
25435
25456
|
const m = suffix.match(/^(\d+)_([0-9A-Fa-f]{40})$/);
|
|
25436
25457
|
if (!m) return void 0;
|
|
25437
25458
|
return {
|
|
@@ -27222,20 +27243,20 @@ var getCompoundV2UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
27222
27243
|
const asstsIn = assetsInRaw.map((a) => a.toLowerCase());
|
|
27223
27244
|
for (let i = 0; i < tokens.length; i++) {
|
|
27224
27245
|
const { cToken } = tokens[i];
|
|
27225
|
-
const
|
|
27246
|
+
const key3 = createMarketUid(chainId, lender, cToken);
|
|
27226
27247
|
const { dataForAsset, addedDebt, addedDeposits } = createCompoundV2Entry(
|
|
27227
27248
|
i,
|
|
27228
27249
|
data,
|
|
27229
|
-
|
|
27250
|
+
key3,
|
|
27230
27251
|
asstsIn,
|
|
27231
27252
|
cToken,
|
|
27232
|
-
metaMap[
|
|
27253
|
+
metaMap[key3],
|
|
27233
27254
|
0
|
|
27234
27255
|
);
|
|
27235
27256
|
if (!dataForAsset) continue;
|
|
27236
27257
|
totalDebt24h += addedDebt;
|
|
27237
27258
|
totalDeposits24h += addedDeposits;
|
|
27238
|
-
lendingPositions[
|
|
27259
|
+
lendingPositions[key3] = dataForAsset;
|
|
27239
27260
|
}
|
|
27240
27261
|
const payload = {
|
|
27241
27262
|
chainId,
|
|
@@ -27257,7 +27278,7 @@ var getCompoundV2UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
27257
27278
|
}
|
|
27258
27279
|
}
|
|
27259
27280
|
};
|
|
27260
|
-
function createCompoundV2Entry(i, data,
|
|
27281
|
+
function createCompoundV2Entry(i, data, key3, assetsIn, vToken, meta, claimableRewards) {
|
|
27261
27282
|
if (isFailedCall(data[3 * i]) || isFailedCall(data[3 * i + 1])) {
|
|
27262
27283
|
return {
|
|
27263
27284
|
dataForAsset: void 0,
|
|
@@ -27284,7 +27305,7 @@ function createCompoundV2Entry(i, data, key2, assetsIn, vToken, meta, claimableR
|
|
|
27284
27305
|
const oPrice = getOraclePrice(meta);
|
|
27285
27306
|
const priceHist = meta?.price?.priceUsd24h ?? price2;
|
|
27286
27307
|
const dataForAsset = {
|
|
27287
|
-
marketUid:
|
|
27308
|
+
marketUid: key3,
|
|
27288
27309
|
underlying: assetMeta.address,
|
|
27289
27310
|
deposits: currentATokenBalance,
|
|
27290
27311
|
debtStable: "0",
|
|
@@ -27385,14 +27406,14 @@ function indexesFromApiPositions(positions, owner) {
|
|
|
27385
27406
|
return [...set];
|
|
27386
27407
|
}
|
|
27387
27408
|
function fetchEulerActiveIndexesViaApi(chainId, owner) {
|
|
27388
|
-
const
|
|
27389
|
-
const cached = accountCache.get(
|
|
27409
|
+
const key3 = `${chainId}:${owner.toLowerCase()}`;
|
|
27410
|
+
const cached = accountCache.get(key3);
|
|
27390
27411
|
if (cached) return cached.promise;
|
|
27391
27412
|
const promise = fetchEulerPositionsFromApi(chainId, owner).then(
|
|
27392
27413
|
(positions) => positions === void 0 ? void 0 : indexesFromApiPositions(positions, owner)
|
|
27393
27414
|
).catch(() => void 0);
|
|
27394
|
-
const timer = setTimeout(() => accountCache.delete(
|
|
27395
|
-
accountCache.set(
|
|
27415
|
+
const timer = setTimeout(() => accountCache.delete(key3), ACCOUNT_CACHE_TTL_MS);
|
|
27416
|
+
accountCache.set(key3, { promise, timer });
|
|
27396
27417
|
return promise;
|
|
27397
27418
|
}
|
|
27398
27419
|
async function fetchEulerSubAccountIndexes(chainId, owner) {
|
|
@@ -27407,14 +27428,14 @@ function getResolvedEulerSubAccountIndexes(chainId, account) {
|
|
|
27407
27428
|
return resolvedIndexesStore.get(`${chainId}:${account.toLowerCase()}`)?.indexes;
|
|
27408
27429
|
}
|
|
27409
27430
|
function storeResolvedIndexes(chainId, account, indexes) {
|
|
27410
|
-
const
|
|
27411
|
-
const existing = resolvedIndexesStore.get(
|
|
27431
|
+
const key3 = `${chainId}:${account.toLowerCase()}`;
|
|
27432
|
+
const existing = resolvedIndexesStore.get(key3);
|
|
27412
27433
|
if (existing) clearTimeout(existing.timer);
|
|
27413
27434
|
const timer = setTimeout(
|
|
27414
|
-
() => resolvedIndexesStore.delete(
|
|
27435
|
+
() => resolvedIndexesStore.delete(key3),
|
|
27415
27436
|
RESOLVED_STORE_TTL_MS
|
|
27416
27437
|
);
|
|
27417
|
-
resolvedIndexesStore.set(
|
|
27438
|
+
resolvedIndexesStore.set(key3, { indexes, timer });
|
|
27418
27439
|
}
|
|
27419
27440
|
function getSubAccountAddress(owner, index) {
|
|
27420
27441
|
const prefix = owner.slice(0, 40);
|
|
@@ -27637,12 +27658,12 @@ var SUBGRAPH_CACHE_TTL_MS = 3e4;
|
|
|
27637
27658
|
var SUBGRAPH_TIMEOUT_MS2 = 1e4;
|
|
27638
27659
|
var subgraphCache = /* @__PURE__ */ new Map();
|
|
27639
27660
|
function fetchDolomiteAccountNumbers(chainId, owner) {
|
|
27640
|
-
const
|
|
27641
|
-
const cached = subgraphCache.get(
|
|
27661
|
+
const key3 = `${chainId}:${owner.toLowerCase()}`;
|
|
27662
|
+
const cached = subgraphCache.get(key3);
|
|
27642
27663
|
if (cached) return cached.promise;
|
|
27643
27664
|
const promise = fetchAccountNumbersFromSubgraph(chainId, owner).then((ns) => dedupeWithDefault(ns)).catch(() => ["0"]);
|
|
27644
|
-
const timer = setTimeout(() => subgraphCache.delete(
|
|
27645
|
-
subgraphCache.set(
|
|
27665
|
+
const timer = setTimeout(() => subgraphCache.delete(key3), SUBGRAPH_CACHE_TTL_MS);
|
|
27666
|
+
subgraphCache.set(key3, { promise, timer });
|
|
27646
27667
|
return promise;
|
|
27647
27668
|
}
|
|
27648
27669
|
function dedupeWithDefault(numbers) {
|
|
@@ -27685,14 +27706,14 @@ function getResolvedDolomiteAccountNumbers(chainId, account) {
|
|
|
27685
27706
|
return resolvedStore.get(`${chainId}:${account.toLowerCase()}`)?.numbers;
|
|
27686
27707
|
}
|
|
27687
27708
|
function storeResolvedNumbers(chainId, account, numbers) {
|
|
27688
|
-
const
|
|
27689
|
-
const existing = resolvedStore.get(
|
|
27709
|
+
const key3 = `${chainId}:${account.toLowerCase()}`;
|
|
27710
|
+
const existing = resolvedStore.get(key3);
|
|
27690
27711
|
if (existing) clearTimeout(existing.timer);
|
|
27691
27712
|
const timer = setTimeout(
|
|
27692
|
-
() => resolvedStore.delete(
|
|
27713
|
+
() => resolvedStore.delete(key3),
|
|
27693
27714
|
RESOLVED_STORE_TTL_MS2
|
|
27694
27715
|
);
|
|
27695
|
-
resolvedStore.set(
|
|
27716
|
+
resolvedStore.set(key3, { numbers, timer });
|
|
27696
27717
|
}
|
|
27697
27718
|
var buildDolomiteUserCall = async (chainId, _lender, account, accountNumbers) => {
|
|
27698
27719
|
const margin = dolomiteConfigs()?.[chainId]?.dolomiteMargin;
|
|
@@ -27992,13 +28013,13 @@ var ONE3 = 10n ** 18n;
|
|
|
27992
28013
|
var ROSTER_TTL_MS = 5 * 6e4;
|
|
27993
28014
|
var DISCOVERY_TTL_MS = 6e4;
|
|
27994
28015
|
var SNAPSHOT_CHUNK = 12;
|
|
27995
|
-
var
|
|
28016
|
+
var rosterCache3 = /* @__PURE__ */ new Map();
|
|
27996
28017
|
var discoveryCache2 = /* @__PURE__ */ new Map();
|
|
27997
28018
|
var rosterKey = (chainId, lender) => `${chainId}:${lender}`;
|
|
27998
28019
|
var discoveryKey = (chainId, lender, account) => `${chainId}:${lender}:${account.toLowerCase()}`;
|
|
27999
28020
|
var getCachedResupplyDiscovery = (chainId, lender, account) => discoveryCache2.get(discoveryKey(chainId, lender, account));
|
|
28000
28021
|
var fetchRoster = async (chainId, lender, registry, allowlist2) => {
|
|
28001
|
-
const cached =
|
|
28022
|
+
const cached = rosterCache3.get(rosterKey(chainId, lender));
|
|
28002
28023
|
if (cached && Date.now() - cached.at < ROSTER_TTL_MS) return cached;
|
|
28003
28024
|
let addresses = [];
|
|
28004
28025
|
const [raw] = await multicallRetryUniversal({
|
|
@@ -28018,7 +28039,7 @@ var fetchRoster = async (chainId, lender, registry, allowlist2) => {
|
|
|
28018
28039
|
}
|
|
28019
28040
|
if (addresses.length === 0) {
|
|
28020
28041
|
const empty = { pairs: [], at: Date.now() };
|
|
28021
|
-
|
|
28042
|
+
rosterCache3.set(rosterKey(chainId, lender), empty);
|
|
28022
28043
|
return empty;
|
|
28023
28044
|
}
|
|
28024
28045
|
const cols = await multicallRetryUniversal({
|
|
@@ -28035,7 +28056,7 @@ var fetchRoster = async (chainId, lender, registry, allowlist2) => {
|
|
|
28035
28056
|
(p) => typeof p.collateral === "string" && p.collateral.startsWith("0x")
|
|
28036
28057
|
);
|
|
28037
28058
|
const roster = { pairs, at: Date.now() };
|
|
28038
|
-
|
|
28059
|
+
rosterCache3.set(rosterKey(chainId, lender), roster);
|
|
28039
28060
|
return roster;
|
|
28040
28061
|
};
|
|
28041
28062
|
var discoverPositions = async (chainId, pairs, account) => {
|
|
@@ -28070,8 +28091,8 @@ var discoverPositions = async (chainId, pairs, account) => {
|
|
|
28070
28091
|
};
|
|
28071
28092
|
var buildResupplyUserCall = async (chainId, lender, account) => {
|
|
28072
28093
|
const cfg = resupplyConfigFor(lender, chainId);
|
|
28073
|
-
const
|
|
28074
|
-
const stash = (positions2) => discoveryCache2.set(
|
|
28094
|
+
const key3 = discoveryKey(chainId, lender, account);
|
|
28095
|
+
const stash = (positions2) => discoveryCache2.set(key3, { positions: positions2, at: Date.now() });
|
|
28075
28096
|
if (!cfg?.registry) {
|
|
28076
28097
|
stash([]);
|
|
28077
28098
|
return [];
|
|
@@ -28086,7 +28107,7 @@ var buildResupplyUserCall = async (chainId, lender, account) => {
|
|
|
28086
28107
|
stash([]);
|
|
28087
28108
|
return [];
|
|
28088
28109
|
}
|
|
28089
|
-
const cachedDiscovery = discoveryCache2.get(
|
|
28110
|
+
const cachedDiscovery = discoveryCache2.get(key3);
|
|
28090
28111
|
const positions = cachedDiscovery && Date.now() - cachedDiscovery.at < DISCOVERY_TTL_MS ? cachedDiscovery.positions : await discoverPositions(chainId, roster.pairs, account);
|
|
28091
28112
|
stash(positions);
|
|
28092
28113
|
if (positions.length === 0) return [];
|
|
@@ -28098,20 +28119,20 @@ var buildResupplyUserCall = async (chainId, lender, account) => {
|
|
|
28098
28119
|
]);
|
|
28099
28120
|
};
|
|
28100
28121
|
function __resetResupplyUserCaches() {
|
|
28101
|
-
|
|
28122
|
+
rosterCache3.clear();
|
|
28102
28123
|
discoveryCache2.clear();
|
|
28103
28124
|
}
|
|
28104
28125
|
var ROSTER_TTL_MS2 = 5 * 6e4;
|
|
28105
28126
|
var DISCOVERY_TTL_MS2 = 6e4;
|
|
28106
28127
|
var CURVANCE_MARKET_READS = 2;
|
|
28107
28128
|
var CURVANCE_READS_PER_TOKEN = 4;
|
|
28108
|
-
var
|
|
28129
|
+
var rosterCache4 = /* @__PURE__ */ new Map();
|
|
28109
28130
|
var discoveryCache3 = /* @__PURE__ */ new Map();
|
|
28110
28131
|
var rosterKey2 = (chainId, lender) => `${chainId}:${lender}`;
|
|
28111
28132
|
var discoveryKey2 = (chainId, lender, account) => `${chainId}:${lender}:${account.toLowerCase()}`;
|
|
28112
28133
|
var getCachedCurvanceDiscovery = (chainId, lender, account) => discoveryCache3.get(discoveryKey2(chainId, lender, account));
|
|
28113
28134
|
var fetchRoster2 = async (chainId, lender, centralRegistry, allowlist2) => {
|
|
28114
|
-
const cached =
|
|
28135
|
+
const cached = rosterCache4.get(rosterKey2(chainId, lender));
|
|
28115
28136
|
if (cached && Date.now() - cached.at < ROSTER_TTL_MS2) return cached;
|
|
28116
28137
|
let managers = [];
|
|
28117
28138
|
const [raw] = await multicallRetryUniversal({
|
|
@@ -28131,7 +28152,7 @@ var fetchRoster2 = async (chainId, lender, centralRegistry, allowlist2) => {
|
|
|
28131
28152
|
}
|
|
28132
28153
|
if (managers.length === 0) {
|
|
28133
28154
|
const empty = { markets: [], at: Date.now() };
|
|
28134
|
-
|
|
28155
|
+
rosterCache4.set(rosterKey2(chainId, lender), empty);
|
|
28135
28156
|
return empty;
|
|
28136
28157
|
}
|
|
28137
28158
|
const listed = await multicallRetryUniversal({
|
|
@@ -28183,7 +28204,7 @@ var fetchRoster2 = async (chainId, lender, centralRegistry, allowlist2) => {
|
|
|
28183
28204
|
})).filter((t) => t.asset !== "")
|
|
28184
28205
|
})).filter((m) => m.cTokens.length > 0);
|
|
28185
28206
|
const roster = { markets, at: Date.now() };
|
|
28186
|
-
|
|
28207
|
+
rosterCache4.set(rosterKey2(chainId, lender), roster);
|
|
28187
28208
|
return roster;
|
|
28188
28209
|
};
|
|
28189
28210
|
var discoverPositions2 = async (chainId, markets, account) => {
|
|
@@ -28223,8 +28244,8 @@ var discoverPositions2 = async (chainId, markets, account) => {
|
|
|
28223
28244
|
};
|
|
28224
28245
|
var buildCurvanceUserCall = async (chainId, lender, account) => {
|
|
28225
28246
|
const cfg = curvanceConfigFor(lender, chainId);
|
|
28226
|
-
const
|
|
28227
|
-
const stash = (positions2) => discoveryCache3.set(
|
|
28247
|
+
const key3 = discoveryKey2(chainId, lender, account);
|
|
28248
|
+
const stash = (positions2) => discoveryCache3.set(key3, { positions: positions2, at: Date.now() });
|
|
28228
28249
|
if (!cfg?.centralRegistry) {
|
|
28229
28250
|
stash([]);
|
|
28230
28251
|
return [];
|
|
@@ -28244,7 +28265,7 @@ var buildCurvanceUserCall = async (chainId, lender, account) => {
|
|
|
28244
28265
|
stash([]);
|
|
28245
28266
|
return [];
|
|
28246
28267
|
}
|
|
28247
|
-
const cached = discoveryCache3.get(
|
|
28268
|
+
const cached = discoveryCache3.get(key3);
|
|
28248
28269
|
const positions = cached && Date.now() - cached.at < DISCOVERY_TTL_MS2 ? cached.positions : await discoverPositions2(chainId, roster.markets, account);
|
|
28249
28270
|
stash(positions);
|
|
28250
28271
|
if (positions.length === 0) return [];
|
|
@@ -28802,13 +28823,13 @@ var getAaveV2UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
28802
28823
|
let totalDeposits24h = 0;
|
|
28803
28824
|
for (let i = 0; i < assetsToQuery.length; i++) {
|
|
28804
28825
|
const asset = assetsToQuery[i];
|
|
28805
|
-
const
|
|
28806
|
-
const metaEntity = metaMap?.[
|
|
28807
|
-
const { dataForAsset, addedDebt, addedDeposits } = createAaveV2Entry(i, data,
|
|
28826
|
+
const key3 = createMarketUid(chainId, lender, asset);
|
|
28827
|
+
const metaEntity = metaMap?.[key3];
|
|
28828
|
+
const { dataForAsset, addedDebt, addedDeposits } = createAaveV2Entry(i, data, key3, metaEntity, 0);
|
|
28808
28829
|
if (!dataForAsset) continue;
|
|
28809
28830
|
totalDebt24h += addedDebt;
|
|
28810
28831
|
totalDeposits24h += addedDeposits;
|
|
28811
|
-
lendingPositions[
|
|
28832
|
+
lendingPositions[key3] = dataForAsset;
|
|
28812
28833
|
}
|
|
28813
28834
|
const payload = {
|
|
28814
28835
|
chainId,
|
|
@@ -28829,7 +28850,7 @@ var getAaveV2UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
28829
28850
|
}
|
|
28830
28851
|
}
|
|
28831
28852
|
};
|
|
28832
|
-
function createAaveV2Entry(i, data,
|
|
28853
|
+
function createAaveV2Entry(i, data, key3, meta, claimableRewards) {
|
|
28833
28854
|
const reserveData = data[i];
|
|
28834
28855
|
if (isFailedCall(reserveData)) {
|
|
28835
28856
|
return { dataForAsset: void 0, addedDeposits: 0, addedDebt: 0 };
|
|
@@ -28853,7 +28874,7 @@ function createAaveV2Entry(i, data, key2, meta, claimableRewards) {
|
|
|
28853
28874
|
const oPrice = getOraclePrice(meta);
|
|
28854
28875
|
const priceHist = meta?.price?.priceUsd24h ?? price2;
|
|
28855
28876
|
const dataForAsset = {
|
|
28856
|
-
marketUid:
|
|
28877
|
+
marketUid: key3,
|
|
28857
28878
|
underlying: assetMeta.address,
|
|
28858
28879
|
deposits: currentATokenBalance,
|
|
28859
28880
|
debtStable: currentStableDebt,
|
|
@@ -28898,18 +28919,18 @@ var getAaveV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
28898
28919
|
let totalDeposits24h = 0;
|
|
28899
28920
|
for (let i = 0; i < assetsToQuery.length; i++) {
|
|
28900
28921
|
const asset = assetsToQuery[i];
|
|
28901
|
-
const
|
|
28902
|
-
const metaEntity = metaMap?.[
|
|
28922
|
+
const key3 = createMarketUid(chainId, lender, asset);
|
|
28923
|
+
const metaEntity = metaMap?.[key3];
|
|
28903
28924
|
const { dataForAsset, addedDebt, addedDeposits } = createAaveV3Entry(
|
|
28904
28925
|
i,
|
|
28905
28926
|
data,
|
|
28906
|
-
|
|
28927
|
+
key3,
|
|
28907
28928
|
metaEntity
|
|
28908
28929
|
);
|
|
28909
28930
|
if (!dataForAsset) continue;
|
|
28910
28931
|
totalDebt24h += addedDebt;
|
|
28911
28932
|
totalDeposits24h += addedDeposits;
|
|
28912
|
-
lendingPositions[
|
|
28933
|
+
lendingPositions[key3] = dataForAsset;
|
|
28913
28934
|
}
|
|
28914
28935
|
const payload = {
|
|
28915
28936
|
chainId,
|
|
@@ -28929,7 +28950,7 @@ var getAaveV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
28929
28950
|
expectedNumberOfCalls
|
|
28930
28951
|
];
|
|
28931
28952
|
};
|
|
28932
|
-
function createAaveV3Entry(i, data,
|
|
28953
|
+
function createAaveV3Entry(i, data, key3, meta) {
|
|
28933
28954
|
const reserveData = data[i];
|
|
28934
28955
|
if (isFailedCall(reserveData)) {
|
|
28935
28956
|
return { dataForAsset: void 0, addedDeposits: 0, addedDebt: 0 };
|
|
@@ -28953,7 +28974,7 @@ function createAaveV3Entry(i, data, key2, meta) {
|
|
|
28953
28974
|
const oPrice = getOraclePrice(meta);
|
|
28954
28975
|
const priceHist = meta?.price?.priceUsd24h ?? price2;
|
|
28955
28976
|
const dataForAsset = {
|
|
28956
|
-
marketUid:
|
|
28977
|
+
marketUid: key3,
|
|
28957
28978
|
underlying: assetMeta.address,
|
|
28958
28979
|
deposits: currentATokenBalance,
|
|
28959
28980
|
debtStable: currentStableDebt,
|
|
@@ -28997,8 +29018,8 @@ function parseSingleBrokerData(data, validOwner, brokerAddress, lender, chainId,
|
|
|
28997
29018
|
(c) => {
|
|
28998
29019
|
const pool = c.pool.toLowerCase();
|
|
28999
29020
|
allPools[pool] = c.underlying.toLowerCase();
|
|
29000
|
-
const
|
|
29001
|
-
const metaEntity = metaMap?.[
|
|
29021
|
+
const key3 = createMarketUid(chainId, lender, pool);
|
|
29022
|
+
const metaEntity = metaMap?.[key3];
|
|
29002
29023
|
const decimals = metaEntity.asset?.decimals ?? 18;
|
|
29003
29024
|
const depositsRaw = c.amount.toString();
|
|
29004
29025
|
return {
|
|
@@ -29014,8 +29035,8 @@ function parseSingleBrokerData(data, validOwner, brokerAddress, lender, chainId,
|
|
|
29014
29035
|
...data[2 /* debts */][index].map((c) => {
|
|
29015
29036
|
const pool = c.pool.toLowerCase();
|
|
29016
29037
|
allPools[pool] = c.underlying.toLowerCase();
|
|
29017
|
-
const
|
|
29018
|
-
const metaEntity = metaMap?.[
|
|
29038
|
+
const key3 = createMarketUid(chainId, lender, pool);
|
|
29039
|
+
const metaEntity = metaMap?.[key3];
|
|
29019
29040
|
const decimals = metaEntity.asset?.decimals ?? 18;
|
|
29020
29041
|
return {
|
|
29021
29042
|
[pool]: {
|
|
@@ -29029,8 +29050,8 @@ function parseSingleBrokerData(data, validOwner, brokerAddress, lender, chainId,
|
|
|
29029
29050
|
{},
|
|
29030
29051
|
...Object.entries(allPools).map(
|
|
29031
29052
|
([pool, underlying]) => {
|
|
29032
|
-
const
|
|
29033
|
-
const metaEntity = metaMap?.[
|
|
29053
|
+
const key3 = createMarketUid(chainId, lender, pool);
|
|
29054
|
+
const metaEntity = metaMap?.[key3];
|
|
29034
29055
|
const price2 = getDisplayPrice(metaEntity);
|
|
29035
29056
|
const oPrice = getOraclePrice(metaEntity);
|
|
29036
29057
|
const priceHist = metaEntity?.price?.priceUsd24h ?? price2;
|
|
@@ -29044,8 +29065,8 @@ function parseSingleBrokerData(data, validOwner, brokerAddress, lender, chainId,
|
|
|
29044
29065
|
histData[id].totalDebt24h += Number(debt) * priceHist;
|
|
29045
29066
|
histData[id].totalDeposits24h += Number(deposits) * priceHist;
|
|
29046
29067
|
return {
|
|
29047
|
-
[
|
|
29048
|
-
marketUid:
|
|
29068
|
+
[key3]: {
|
|
29069
|
+
marketUid: key3,
|
|
29049
29070
|
underlying,
|
|
29050
29071
|
deposits,
|
|
29051
29072
|
debt,
|
|
@@ -29132,8 +29153,8 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
29132
29153
|
let result = {};
|
|
29133
29154
|
for (let i = 0; i < assetsNoBase.length; i++) {
|
|
29134
29155
|
const asset = assetsNoBase[i];
|
|
29135
|
-
const
|
|
29136
|
-
const metaEntity2 = metaMap?.[
|
|
29156
|
+
const key4 = createMarketUid(chainId, lender, asset);
|
|
29157
|
+
const metaEntity2 = metaMap?.[key4];
|
|
29137
29158
|
const assetMeta = metaEntity2.asset;
|
|
29138
29159
|
const decimals = assetMeta?.decimals ?? 18;
|
|
29139
29160
|
if (isFailedCall(data[i])) continue;
|
|
@@ -29144,8 +29165,8 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
29144
29165
|
const oPrice2 = getOraclePrice(metaEntity2);
|
|
29145
29166
|
const priceHist2 = metaEntity2?.price?.priceUsd24h ?? price3;
|
|
29146
29167
|
totalDeposits24h += Number(deposits2) * priceHist2;
|
|
29147
|
-
result[
|
|
29148
|
-
marketUid:
|
|
29168
|
+
result[key4] = {
|
|
29169
|
+
marketUid: key4,
|
|
29149
29170
|
underlying: asset,
|
|
29150
29171
|
deposits: deposits2,
|
|
29151
29172
|
depositsUSD: Number(deposits2) * price3,
|
|
@@ -29162,8 +29183,8 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
29162
29183
|
const baseFailed = isFailedCall(data[assetsNoBase.length]) || isFailedCall(data[assetsNoBase.length + 1]);
|
|
29163
29184
|
const depositsRaw = data[assetsNoBase.length]?.toString();
|
|
29164
29185
|
const debtRaw = data[assetsNoBase.length + 1]?.toString();
|
|
29165
|
-
const
|
|
29166
|
-
const metaEntity = metaMap?.[
|
|
29186
|
+
const key3 = createMarketUid(chainId, lender, baseAsset);
|
|
29187
|
+
const metaEntity = metaMap?.[key3];
|
|
29167
29188
|
const baseMeta = metaEntity.asset;
|
|
29168
29189
|
const baseDecimals = baseMeta.decimals ?? 18;
|
|
29169
29190
|
const deposits = baseFailed ? "0" : parseRawAmount(depositsRaw, baseDecimals);
|
|
@@ -29174,8 +29195,8 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
29174
29195
|
totalDebt24h += Number(debt) * priceHist;
|
|
29175
29196
|
totalDeposits24h += Number(deposits) * priceHist;
|
|
29176
29197
|
const resultBase = baseFailed || depositsRaw === "0" && debtRaw === "0" ? {} : {
|
|
29177
|
-
[
|
|
29178
|
-
marketUid:
|
|
29198
|
+
[key3]: {
|
|
29199
|
+
marketUid: key3,
|
|
29179
29200
|
underlying: baseAsset,
|
|
29180
29201
|
deposits,
|
|
29181
29202
|
debt,
|
|
@@ -29234,18 +29255,18 @@ var getYldrUserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
29234
29255
|
let totalDeposits24h = 0;
|
|
29235
29256
|
for (let i = 0; i < assetsToQuery.length; i++) {
|
|
29236
29257
|
const asset = assetsToQuery[i];
|
|
29237
|
-
const
|
|
29238
|
-
const metaEntity = metaMap?.[
|
|
29258
|
+
const key3 = createMarketUid(chainId, lender, asset);
|
|
29259
|
+
const metaEntity = metaMap?.[key3];
|
|
29239
29260
|
const { dataForAsset, addedDebt, addedDeposits } = createAaveV3Entry2(
|
|
29240
29261
|
i,
|
|
29241
29262
|
data,
|
|
29242
|
-
|
|
29263
|
+
key3,
|
|
29243
29264
|
metaEntity
|
|
29244
29265
|
);
|
|
29245
29266
|
if (!dataForAsset) continue;
|
|
29246
29267
|
totalDebt24h += addedDebt;
|
|
29247
29268
|
totalDeposits24h += addedDeposits;
|
|
29248
|
-
lendingPositions[
|
|
29269
|
+
lendingPositions[key3] = dataForAsset;
|
|
29249
29270
|
}
|
|
29250
29271
|
const payload = {
|
|
29251
29272
|
chainId,
|
|
@@ -29265,7 +29286,7 @@ var getYldrUserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
29265
29286
|
expectedNumberOfCalls
|
|
29266
29287
|
];
|
|
29267
29288
|
};
|
|
29268
|
-
function createAaveV3Entry2(i, data,
|
|
29289
|
+
function createAaveV3Entry2(i, data, key3, meta) {
|
|
29269
29290
|
const reserveData = data[i];
|
|
29270
29291
|
if (isFailedCall(reserveData)) {
|
|
29271
29292
|
return { dataForAsset: void 0, addedDeposits: 0, addedDebt: 0 };
|
|
@@ -29287,7 +29308,7 @@ function createAaveV3Entry2(i, data, key2, meta) {
|
|
|
29287
29308
|
const oPrice = getOraclePrice(meta);
|
|
29288
29309
|
const priceHist = meta?.price?.priceUsd24h ?? price2;
|
|
29289
29310
|
const dataForAsset = {
|
|
29290
|
-
marketUid:
|
|
29311
|
+
marketUid: key3,
|
|
29291
29312
|
underlying: assetMeta.address,
|
|
29292
29313
|
deposits: currentATokenBalance,
|
|
29293
29314
|
debtStable: "0",
|
|
@@ -29664,8 +29685,8 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, metaMap, chainId, lend
|
|
|
29664
29685
|
const termPositions = {};
|
|
29665
29686
|
let aggregateDebtToken = borrowDec;
|
|
29666
29687
|
if (brokerData) {
|
|
29667
|
-
const mkTermPosition = (
|
|
29668
|
-
termPositions[
|
|
29688
|
+
const mkTermPosition = (key3, debtToken, term) => {
|
|
29689
|
+
termPositions[key3] = {
|
|
29669
29690
|
marketUid: loanMarketUid,
|
|
29670
29691
|
underlying: loanAddress,
|
|
29671
29692
|
loanId: term.loanId,
|
|
@@ -30094,15 +30115,15 @@ function createAaveV4UserState(payload, lenderData, totalDeposits24h = 0, totalD
|
|
|
30094
30115
|
debt += debtUSD + (debtStableUSD ?? 0);
|
|
30095
30116
|
oracleDebt += debtUSDOracle + (pos.debtStableUSDOracle ?? debtStableUSD ?? 0);
|
|
30096
30117
|
(rewards ?? []).forEach((rewardData) => {
|
|
30097
|
-
const
|
|
30118
|
+
const key3 = rewardData.asset;
|
|
30098
30119
|
rewardDepositAccrual += rewardData.depositRate * depositsUSD;
|
|
30099
30120
|
rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD;
|
|
30100
30121
|
const rewDepo = rewardData.depositRate * depositsUSD;
|
|
30101
30122
|
const rewDebt = rewardData.variableBorrowRate * debtUSD;
|
|
30102
|
-
if (!rewardsPerAsset[
|
|
30103
|
-
rewardsPerAsset[
|
|
30104
|
-
if (rewDepo > 0) rewardsPerAsset[
|
|
30105
|
-
if (rewDebt > 0) rewardsPerAsset[
|
|
30123
|
+
if (!rewardsPerAsset[key3])
|
|
30124
|
+
rewardsPerAsset[key3] = { depositApr: 0, borrowApr: 0 };
|
|
30125
|
+
if (rewDepo > 0) rewardsPerAsset[key3].depositApr += rewDepo;
|
|
30126
|
+
if (rewDebt > 0) rewardsPerAsset[key3].borrowApr += rewDebt;
|
|
30106
30127
|
});
|
|
30107
30128
|
stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
|
|
30108
30129
|
stakingBorrowAccrual += (intrinsicYield ?? 0) * debtUSD;
|
|
@@ -30260,8 +30281,8 @@ var getAaveV4UserDataConverter = (lender, chainId, account, meta) => {
|
|
|
30260
30281
|
const r = reserves[i];
|
|
30261
30282
|
const underlying = (r.underlying ?? "").toLowerCase();
|
|
30262
30283
|
if (!underlying) continue;
|
|
30263
|
-
const
|
|
30264
|
-
const metaEntity = flatMeta[
|
|
30284
|
+
const key3 = createMarketUid(chainId, lender, String(r.reserveId));
|
|
30285
|
+
const metaEntity = flatMeta[key3];
|
|
30265
30286
|
if (!metaEntity) continue;
|
|
30266
30287
|
const base = i * USER_CALLS_PER_RESERVE;
|
|
30267
30288
|
const userPositionResult = data[base + 3];
|
|
@@ -30271,7 +30292,7 @@ var getAaveV4UserDataConverter = (lender, chainId, account, meta) => {
|
|
|
30271
30292
|
const { dataForAsset, addedDebt, addedDeposits } = createAaveV4Entry(
|
|
30272
30293
|
base,
|
|
30273
30294
|
data,
|
|
30274
|
-
|
|
30295
|
+
key3,
|
|
30275
30296
|
metaEntity,
|
|
30276
30297
|
spokeAddrLc
|
|
30277
30298
|
);
|
|
@@ -30279,7 +30300,7 @@ var getAaveV4UserDataConverter = (lender, chainId, account, meta) => {
|
|
|
30279
30300
|
dataForAsset.userConfigKey = String(userDynConfigKey);
|
|
30280
30301
|
totalDebt24h += addedDebt;
|
|
30281
30302
|
totalDeposits24h += addedDeposits;
|
|
30282
|
-
lendingPositions[
|
|
30303
|
+
lendingPositions[key3] = dataForAsset;
|
|
30283
30304
|
}
|
|
30284
30305
|
const payload = {
|
|
30285
30306
|
chainId,
|
|
@@ -30304,7 +30325,7 @@ function getConfigOraclePrice(meta, spokeAddr) {
|
|
|
30304
30325
|
}
|
|
30305
30326
|
return getOraclePrice(meta);
|
|
30306
30327
|
}
|
|
30307
|
-
function createAaveV4Entry(base, data,
|
|
30328
|
+
function createAaveV4Entry(base, data, key3, meta, spokeAddr) {
|
|
30308
30329
|
const rawSupply = data[base];
|
|
30309
30330
|
const debtResult = data[base + 1];
|
|
30310
30331
|
const statusResult = data[base + 2];
|
|
@@ -30328,7 +30349,7 @@ function createAaveV4Entry(base, data, key2, meta, spokeAddr) {
|
|
|
30328
30349
|
const oPrice = getConfigOraclePrice(meta, spokeAddr);
|
|
30329
30350
|
const priceHist = meta?.price?.priceUsd24h ?? price2;
|
|
30330
30351
|
const dataForAsset = {
|
|
30331
|
-
marketUid:
|
|
30352
|
+
marketUid: key3,
|
|
30332
30353
|
underlying: assetMeta.address,
|
|
30333
30354
|
deposits: currentDeposits,
|
|
30334
30355
|
debtStable: "0",
|
|
@@ -30927,8 +30948,8 @@ var getDolomiteUserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
30927
30948
|
const wei = weis[k];
|
|
30928
30949
|
if (!wei) return;
|
|
30929
30950
|
const underlying = normalizeUnderlying3(token);
|
|
30930
|
-
const
|
|
30931
|
-
const meta = metaMap?.[
|
|
30951
|
+
const key3 = createMarketUid(chainId, lender, String(marketIds[k]));
|
|
30952
|
+
const meta = metaMap?.[key3];
|
|
30932
30953
|
if (!meta) return;
|
|
30933
30954
|
const decimals = meta.asset?.decimals ?? 18;
|
|
30934
30955
|
const amount = parseRawAmount(wei.value, decimals);
|
|
@@ -30941,8 +30962,8 @@ var getDolomiteUserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
30941
30962
|
const priceHist = meta?.price?.priceUsd24h ?? price2;
|
|
30942
30963
|
histData[id].totalDeposits24h += Number(deposits) * priceHist;
|
|
30943
30964
|
histData[id].totalDebt24h += Number(debt) * priceHist;
|
|
30944
|
-
lendingPositions[id][
|
|
30945
|
-
marketUid:
|
|
30965
|
+
lendingPositions[id][key3] = {
|
|
30966
|
+
marketUid: key3,
|
|
30946
30967
|
underlying,
|
|
30947
30968
|
deposits,
|
|
30948
30969
|
debt,
|
|
@@ -32334,9 +32355,9 @@ var getDssUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32334
32355
|
if (ink === 0n && debt === 0n) return;
|
|
32335
32356
|
const market = markets.find((m) => m.ilk === cdp.ilk);
|
|
32336
32357
|
if (!market) return;
|
|
32337
|
-
const
|
|
32338
|
-
if (!perMarket.has(
|
|
32339
|
-
perMarket.get(
|
|
32358
|
+
const key3 = dssLenderKey(lender, chainId, cdp.ilk);
|
|
32359
|
+
if (!perMarket.has(key3)) perMarket.set(key3, { market, positions: [] });
|
|
32360
|
+
perMarket.get(key3).positions.push({ cdp, ink, debt });
|
|
32340
32361
|
});
|
|
32341
32362
|
const out = {};
|
|
32342
32363
|
for (const [lenderKey, { market, positions }] of perMarket) {
|
|
@@ -32455,9 +32476,9 @@ var getFrankencoinUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32455
32476
|
if (minted === 0n && coll === 0n) return;
|
|
32456
32477
|
const market = marketByOriginal.get(p.original);
|
|
32457
32478
|
if (!market) return;
|
|
32458
|
-
const
|
|
32459
|
-
if (!perMarket.has(
|
|
32460
|
-
perMarket.get(
|
|
32479
|
+
const key3 = frankencoinLenderKey(lender, chainId, market.position);
|
|
32480
|
+
if (!perMarket.has(key3)) perMarket.set(key3, { market, rows: [] });
|
|
32481
|
+
perMarket.get(key3).rows.push({
|
|
32461
32482
|
info: {
|
|
32462
32483
|
position: p.position,
|
|
32463
32484
|
original: p.original,
|
|
@@ -33096,12 +33117,12 @@ var convertLenderUserDataResult = (chainId, queriesRaw, rawResults, lenderState,
|
|
|
33096
33117
|
}
|
|
33097
33118
|
if (!convertedData) continue;
|
|
33098
33119
|
const incomplete = retryableFailedCalls > 0;
|
|
33099
|
-
const publish = (
|
|
33120
|
+
const publish = (key3, entry) => {
|
|
33100
33121
|
if (!entry) return;
|
|
33101
33122
|
const { kept, violations, dropped } = validateUserData(entry, incomplete);
|
|
33102
33123
|
if (dropped.length > 0) {
|
|
33103
33124
|
options?.onIncomplete?.({
|
|
33104
|
-
lender:
|
|
33125
|
+
lender: key3,
|
|
33105
33126
|
failedCalls,
|
|
33106
33127
|
retryableFailedCalls,
|
|
33107
33128
|
totalCalls: data.length,
|
|
@@ -33112,9 +33133,9 @@ var convertLenderUserDataResult = (chainId, queriesRaw, rawResults, lenderState,
|
|
|
33112
33133
|
}
|
|
33113
33134
|
if (kept.length === 0) return;
|
|
33114
33135
|
entry.data = kept;
|
|
33115
|
-
entry.lender =
|
|
33136
|
+
entry.lender = key3;
|
|
33116
33137
|
if (incomplete) entry.incomplete = true;
|
|
33117
|
-
lenderData[
|
|
33138
|
+
lenderData[key3] = entry;
|
|
33118
33139
|
};
|
|
33119
33140
|
try {
|
|
33120
33141
|
if (isMultiMarket(query3.lender)) {
|
|
@@ -37668,9 +37689,9 @@ var getAbi2 = (lender) => {
|
|
|
37668
37689
|
};
|
|
37669
37690
|
|
|
37670
37691
|
// src/lending-pools/computeLendingPools.ts
|
|
37671
|
-
function resolvePrice(map,
|
|
37692
|
+
function resolvePrice(map, key3, fallbackKey) {
|
|
37672
37693
|
if (!map) return void 0;
|
|
37673
|
-
if (
|
|
37694
|
+
if (key3 != null && map[key3] != null) return map[key3];
|
|
37674
37695
|
if (fallbackKey != null && map[fallbackKey] != null) return map[fallbackKey];
|
|
37675
37696
|
return void 0;
|
|
37676
37697
|
}
|
|
@@ -37692,9 +37713,9 @@ var generateLendingPools = (lenderData, prices, histPrices) => {
|
|
|
37692
37713
|
}
|
|
37693
37714
|
const byMarket = /* @__PURE__ */ new Map();
|
|
37694
37715
|
for (const pool of flat) {
|
|
37695
|
-
const
|
|
37696
|
-
if (!byMarket.has(
|
|
37697
|
-
byMarket.get(
|
|
37716
|
+
const key3 = `${pool.chainId}:${pool.lender}`;
|
|
37717
|
+
if (!byMarket.has(key3)) byMarket.set(key3, []);
|
|
37718
|
+
byMarket.get(key3).push({
|
|
37698
37719
|
...pool,
|
|
37699
37720
|
apr: pool.depositRate + (pool.intrinsicYield ?? 0),
|
|
37700
37721
|
utilitzation: (Number(pool.totalDebt) + Number(pool.totalDebtStable ?? 0)) / Number(pool.totalDeposits),
|
|
@@ -37729,12 +37750,12 @@ var generateLendingPools = (lenderData, prices, histPrices) => {
|
|
|
37729
37750
|
}
|
|
37730
37751
|
for (const group of byMarket.values()) {
|
|
37731
37752
|
for (const pool of group) {
|
|
37732
|
-
const [assetGroup,
|
|
37753
|
+
const [assetGroup, key3] = getPriceKey(pool.asset) ?? [
|
|
37733
37754
|
void 0,
|
|
37734
37755
|
void 0
|
|
37735
37756
|
];
|
|
37736
|
-
pool.price = resolvePrice(prices,
|
|
37737
|
-
pool.histPrice = resolvePrice(histPrices,
|
|
37757
|
+
pool.price = resolvePrice(prices, key3, assetGroup);
|
|
37758
|
+
pool.histPrice = resolvePrice(histPrices, key3, assetGroup);
|
|
37738
37759
|
}
|
|
37739
37760
|
}
|
|
37740
37761
|
return Array.from(byMarket.values()).flat();
|
|
@@ -38147,8 +38168,8 @@ function needsLenderApproval(params) {
|
|
|
38147
38168
|
const { lender, lenderDebitData, tokenAddress, amount, chainId, cToken, isProtected } = params;
|
|
38148
38169
|
if (!lenderDebitData) return true;
|
|
38149
38170
|
if (isAaveV4Type(lender)) {
|
|
38150
|
-
const
|
|
38151
|
-
const entry2 = lenderDebitData[
|
|
38171
|
+
const key4 = (params.aaveV4Spoke ?? tokenAddress).toLowerCase();
|
|
38172
|
+
const entry2 = lenderDebitData[key4];
|
|
38152
38173
|
if (!entry2 || entry2.amount === void 0) return true;
|
|
38153
38174
|
return entry2.amount === 0n;
|
|
38154
38175
|
}
|
|
@@ -38157,8 +38178,8 @@ function needsLenderApproval(params) {
|
|
|
38157
38178
|
if (!entry2 || entry2.amount === void 0) return true;
|
|
38158
38179
|
return entry2.amount === 0n;
|
|
38159
38180
|
}
|
|
38160
|
-
const
|
|
38161
|
-
const entry = lenderDebitData[
|
|
38181
|
+
const key3 = resolveDebitDataKey(chainId, lender, tokenAddress, cToken, isProtected);
|
|
38182
|
+
const entry = lenderDebitData[key3];
|
|
38162
38183
|
if (!entry || entry.amount === void 0) return true;
|
|
38163
38184
|
if (isCompoundV2Type(lender) || isVenusType(lender)) {
|
|
38164
38185
|
const requiredShares = toCompoundV2Shares(entry, amount);
|
|
@@ -38278,21 +38299,21 @@ function cacheKey6(chainId, account) {
|
|
|
38278
38299
|
return `${chainId}:${account.toLowerCase()}`;
|
|
38279
38300
|
}
|
|
38280
38301
|
async function dedupedFetch(chainId, account, loader) {
|
|
38281
|
-
const
|
|
38302
|
+
const key3 = cacheKey6(chainId, account);
|
|
38282
38303
|
const now = Date.now();
|
|
38283
|
-
const cached = resolved.get(
|
|
38304
|
+
const cached = resolved.get(key3);
|
|
38284
38305
|
if (cached && cached.expiresAt > now) {
|
|
38285
38306
|
return cached.value;
|
|
38286
38307
|
}
|
|
38287
|
-
const existing = inflight.get(
|
|
38308
|
+
const existing = inflight.get(key3);
|
|
38288
38309
|
if (existing) return existing;
|
|
38289
38310
|
const promise = loader().then((value) => {
|
|
38290
|
-
resolved.set(
|
|
38311
|
+
resolved.set(key3, { value, expiresAt: Date.now() + CACHE_TTL_MS5 });
|
|
38291
38312
|
return value;
|
|
38292
38313
|
}).finally(() => {
|
|
38293
|
-
inflight.delete(
|
|
38314
|
+
inflight.delete(key3);
|
|
38294
38315
|
});
|
|
38295
|
-
inflight.set(
|
|
38316
|
+
inflight.set(key3, promise);
|
|
38296
38317
|
return promise;
|
|
38297
38318
|
}
|
|
38298
38319
|
function hasMorphoUserSubgraph(chainId) {
|
|
@@ -39121,14 +39142,14 @@ function getRewardYieldOpen(amountInUSD, amountOutUSD, irModeIn, cashFlowDeposit
|
|
|
39121
39142
|
const mapOut = rewardsToMap(yieldOut?.rewards);
|
|
39122
39143
|
if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
|
|
39123
39144
|
const data = {};
|
|
39124
|
-
for (const
|
|
39125
|
-
const _flowIn = amountInUSD * ((irModeIn === 1 ? mapIn[
|
|
39126
|
-
const _flowOut = amountOutUSD * (mapOut[
|
|
39145
|
+
for (const key3 of keysFromMaps(mapIn, mapOut)) {
|
|
39146
|
+
const _flowIn = amountInUSD * ((irModeIn === 1 ? mapIn[key3]?.stableBorrowRate : mapIn[key3]?.variableBorrowRate) ?? 0);
|
|
39147
|
+
const _flowOut = amountOutUSD * (mapOut[key3]?.depositRate ?? 0);
|
|
39127
39148
|
const totalCashFlowDebt = cashFlowDebt + _flowIn;
|
|
39128
39149
|
const totalCashFlowDeposits = cashFlowDeposits + _flowOut;
|
|
39129
39150
|
const newCollat = deposits + amountOutUSD;
|
|
39130
39151
|
const newDebt = debt + amountInUSD;
|
|
39131
|
-
data[
|
|
39152
|
+
data[key3] = {
|
|
39132
39153
|
borrowApr: totalCashFlowDebt / newDebt,
|
|
39133
39154
|
depositApr: totalCashFlowDeposits / newCollat,
|
|
39134
39155
|
apr: (cashFlowDeposits + cashFlowDebt + _flowIn + _flowOut) / (newCollat - newDebt)
|
|
@@ -39141,14 +39162,14 @@ function getRewardYieldClose(amountInUSD, amountOutUSD, irModeOut, cashFlowDepos
|
|
|
39141
39162
|
const mapOut = rewardsToMap(yieldOut?.rewards);
|
|
39142
39163
|
if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
|
|
39143
39164
|
const data = {};
|
|
39144
|
-
for (const
|
|
39145
|
-
const _flowIn = amountInUSD * (mapIn[
|
|
39146
|
-
const _flowOut = amountOutUSD * ((irModeOut === 1 ? mapOut[
|
|
39165
|
+
for (const key3 of keysFromMaps(mapIn, mapOut)) {
|
|
39166
|
+
const _flowIn = amountInUSD * (mapIn[key3]?.depositRate ?? 0);
|
|
39167
|
+
const _flowOut = amountOutUSD * ((irModeOut === 1 ? mapOut[key3]?.stableBorrowRate : mapOut[key3]?.variableBorrowRate) ?? 0);
|
|
39147
39168
|
const totalCashFlowDebt = cashFlowDebt - _flowOut;
|
|
39148
39169
|
const totalCashFlowDeposits = cashFlowDeposits - _flowIn;
|
|
39149
39170
|
const newCollat = deposits - amountInUSD;
|
|
39150
39171
|
const newDebt = debt - amountOutUSD;
|
|
39151
|
-
data[
|
|
39172
|
+
data[key3] = {
|
|
39152
39173
|
borrowApr: Math.abs(newDebt) < 0.01 ? 0 : totalCashFlowDebt / newDebt,
|
|
39153
39174
|
depositApr: totalCashFlowDeposits / newCollat,
|
|
39154
39175
|
apr: (cashFlowDeposits + cashFlowDebt - _flowIn - _flowOut) / (newCollat - newDebt)
|
|
@@ -39161,12 +39182,12 @@ function getRewardYieldDebtSwap(amountInUSD, amountOutUSD, irModeIn, irModeOut,
|
|
|
39161
39182
|
const mapOut = rewardsToMap(yieldOut?.rewards);
|
|
39162
39183
|
if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
|
|
39163
39184
|
const data = {};
|
|
39164
|
-
for (const
|
|
39165
|
-
const _flowIn = amountInUSD * ((irModeIn === 1 ? mapIn[
|
|
39166
|
-
const _flowOut = amountOutUSD * ((irModeOut === 1 ? mapOut[
|
|
39185
|
+
for (const key3 of keysFromMaps(mapIn, mapOut)) {
|
|
39186
|
+
const _flowIn = amountInUSD * ((irModeIn === 1 ? mapIn[key3]?.stableBorrowRate : mapIn[key3]?.variableBorrowRate) ?? 0);
|
|
39187
|
+
const _flowOut = amountOutUSD * ((irModeOut === 1 ? mapOut[key3]?.stableBorrowRate : mapOut[key3]?.variableBorrowRate) ?? 0);
|
|
39167
39188
|
const totalCashFlowDebt = cashFlowDebt + _flowIn - _flowOut;
|
|
39168
39189
|
const newDebt = debt - amountOutUSD + amountInUSD;
|
|
39169
|
-
data[
|
|
39190
|
+
data[key3] = {
|
|
39170
39191
|
borrowApr: Math.abs(newDebt) < 0.01 ? 0 : totalCashFlowDebt / newDebt,
|
|
39171
39192
|
depositApr: cashFlowDeposits / deposits,
|
|
39172
39193
|
apr: (cashFlowDeposits + totalCashFlowDebt) / (deposits - newDebt)
|
|
@@ -39179,12 +39200,12 @@ function getRewardYieldCollateralSwap(amountInUSD, amountOutUSD, cashFlowDeposit
|
|
|
39179
39200
|
const mapOut = rewardsToMap(yieldOut?.rewards);
|
|
39180
39201
|
if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
|
|
39181
39202
|
const data = {};
|
|
39182
|
-
for (const
|
|
39183
|
-
const _flowIn = amountInUSD * (mapIn[
|
|
39184
|
-
const _flowOut = amountOutUSD * (mapOut[
|
|
39203
|
+
for (const key3 of keysFromMaps(mapIn, mapOut)) {
|
|
39204
|
+
const _flowIn = amountInUSD * (mapIn[key3]?.depositRate ?? 0);
|
|
39205
|
+
const _flowOut = amountOutUSD * (mapOut[key3]?.depositRate ?? 0);
|
|
39185
39206
|
const totalCashFlowDeposits = cashFlowDeposits + _flowOut - _flowIn;
|
|
39186
39207
|
const newCollat = deposits + amountOutUSD - amountInUSD;
|
|
39187
|
-
data[
|
|
39208
|
+
data[key3] = {
|
|
39188
39209
|
borrowApr: Math.abs(debt) < 0.01 ? 0 : cashFlowDebt / debt,
|
|
39189
39210
|
depositApr: totalCashFlowDeposits / newCollat,
|
|
39190
39211
|
apr: (totalCashFlowDeposits + cashFlowDebt) / (newCollat - debt)
|
|
@@ -39981,9 +40002,9 @@ var yieldNestFetcher = {
|
|
|
39981
40002
|
}).then((r) => r.json());
|
|
39982
40003
|
const tokens = res?.data?.getLRTsData?.tokens ?? [];
|
|
39983
40004
|
const result = {};
|
|
39984
|
-
for (const { symbol, chainId, key:
|
|
40005
|
+
for (const { symbol, chainId, key: key3 } of YN_TOKENS) {
|
|
39985
40006
|
const apr = findApr(tokens, symbol, chainId);
|
|
39986
|
-
if (apr > 0) result[
|
|
40007
|
+
if (apr > 0) result[key3] = apr;
|
|
39987
40008
|
}
|
|
39988
40009
|
return result;
|
|
39989
40010
|
}
|
|
@@ -40403,10 +40424,10 @@ var ankrFetcher = {
|
|
|
40403
40424
|
const services = res?.services ?? [];
|
|
40404
40425
|
const result = {};
|
|
40405
40426
|
for (const service of services) {
|
|
40406
|
-
const
|
|
40407
|
-
if (!
|
|
40427
|
+
const key3 = ANKR_SERVICE_KEYS[service?.serviceName];
|
|
40428
|
+
if (!key3) continue;
|
|
40408
40429
|
const apr = Number(service?.apy);
|
|
40409
|
-
if (apr > 0) result[
|
|
40430
|
+
if (apr > 0) result[key3] = apr;
|
|
40410
40431
|
}
|
|
40411
40432
|
return result;
|
|
40412
40433
|
}
|
|
@@ -40500,7 +40521,7 @@ var lombardLbtcFetcher = {
|
|
|
40500
40521
|
}
|
|
40501
40522
|
};
|
|
40502
40523
|
var LOMBARD_VAULT_APY_URL = "https://mainnet.prod.lombard.finance/api/v1/analytics/vault/apy/history";
|
|
40503
|
-
var createLombardVaultFetcher = (wrapper,
|
|
40524
|
+
var createLombardVaultFetcher = (wrapper, key3) => ({
|
|
40504
40525
|
label: `LOMBARD_VAULT:${wrapper}`,
|
|
40505
40526
|
fetch: async () => {
|
|
40506
40527
|
const url = `${LOMBARD_VAULT_APY_URL}?vault_wrapper=${wrapper}&interval=APY_INTERVAL_1M`;
|
|
@@ -40509,7 +40530,7 @@ var createLombardVaultFetcher = (wrapper, key2) => ({
|
|
|
40509
40530
|
}).then((r) => r.json());
|
|
40510
40531
|
const latest = Array.isArray(res?.snapshots) ? res.snapshots[0] : void 0;
|
|
40511
40532
|
const frac = Number(latest?.total_apy);
|
|
40512
|
-
return { [
|
|
40533
|
+
return { [key3]: Number.isFinite(frac) ? frac * 100 : 0 };
|
|
40513
40534
|
}
|
|
40514
40535
|
});
|
|
40515
40536
|
var lombardLbtcvFetcher = createLombardVaultFetcher(
|
|
@@ -42818,7 +42839,7 @@ var rwaFundsFetcher = {
|
|
|
42818
42839
|
Object.entries(RWA_FUNDS).map(async ([label, fund]) => {
|
|
42819
42840
|
try {
|
|
42820
42841
|
const apr = apyToAprPercent(await fetchDefiLlamaApy(fund.pool));
|
|
42821
|
-
for (const
|
|
42842
|
+
for (const key3 of fund.keys) out[key3] = apr;
|
|
42822
42843
|
} catch {
|
|
42823
42844
|
}
|
|
42824
42845
|
})
|
|
@@ -43242,9 +43263,9 @@ var fetchApiAprs = async () => {
|
|
|
43242
43263
|
}).then((r) => r.json());
|
|
43243
43264
|
if (res?.code !== 0 || !res?.data) return {};
|
|
43244
43265
|
const out = {};
|
|
43245
|
-
for (const
|
|
43246
|
-
const apy = Number(res.data[
|
|
43247
|
-
if (Number.isFinite(apy) && apy > 0) out[
|
|
43266
|
+
for (const key3 of ["ethApy", "bscApy"]) {
|
|
43267
|
+
const apy = Number(res.data[key3]);
|
|
43268
|
+
if (Number.isFinite(apy) && apy > 0) out[key3] = apyToApr(apy) * 100;
|
|
43248
43269
|
}
|
|
43249
43270
|
return out;
|
|
43250
43271
|
};
|
|
@@ -43346,6 +43367,94 @@ var frankencoinSavingsFetcher = {
|
|
|
43346
43367
|
}
|
|
43347
43368
|
};
|
|
43348
43369
|
|
|
43370
|
+
// src/yields/intrinsic/fetchers/yieldBasis.ts
|
|
43371
|
+
var YB_API = "https://api.yieldbasis.com/v1/analytics";
|
|
43372
|
+
var TRADING_APY_URL = `${YB_API}/markets/trading-apy?chainId=1`;
|
|
43373
|
+
var SNAPSHOT_URL = (idx) => `${YB_API}/markets/snapshots/1/${idx}?window=all&timeframeSeconds=86400`;
|
|
43374
|
+
var TIMEOUT_MS3 = 8e3;
|
|
43375
|
+
var DAY = 86400;
|
|
43376
|
+
var YEAR_DAYS = 365;
|
|
43377
|
+
var YB_WBTC_KEY = "Yield Basis liquidity for WBTC::yb-WBTC";
|
|
43378
|
+
var YB_CBBTC_KEY = "Yield Basis liquidity for cbBTC::yb-cbBTC";
|
|
43379
|
+
var YB_TBTC_KEY = "Yield Basis liquidity for tBTC::yb-tBTC";
|
|
43380
|
+
var YB_WETH_KEY = "Yield Basis liquidity for WETH::yb-WETH";
|
|
43381
|
+
var YB_MARKETS = [
|
|
43382
|
+
{ idx: 7, key: YB_WBTC_KEY },
|
|
43383
|
+
{ idx: 8, key: YB_CBBTC_KEY },
|
|
43384
|
+
{ idx: 9, key: YB_TBTC_KEY },
|
|
43385
|
+
{ idx: 10, key: YB_WETH_KEY }
|
|
43386
|
+
];
|
|
43387
|
+
var getJson = async (url) => {
|
|
43388
|
+
const res = await fetch(url, {
|
|
43389
|
+
headers: { accept: "application/json" },
|
|
43390
|
+
signal: AbortSignal.timeout(TIMEOUT_MS3)
|
|
43391
|
+
});
|
|
43392
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
43393
|
+
return res.json();
|
|
43394
|
+
};
|
|
43395
|
+
var toPercent = (raw) => {
|
|
43396
|
+
const n = Number(raw);
|
|
43397
|
+
return Number.isFinite(n) ? n / 1e16 : void 0;
|
|
43398
|
+
};
|
|
43399
|
+
var fetchFromApyRoute = async () => {
|
|
43400
|
+
const rows = (await getJson(TRADING_APY_URL))?.data ?? [];
|
|
43401
|
+
if (rows.length === 0) throw new Error("yield-basis trading-apy empty");
|
|
43402
|
+
const latest = /* @__PURE__ */ new Map();
|
|
43403
|
+
for (const r of rows) {
|
|
43404
|
+
const idx = Number(r?.marketId);
|
|
43405
|
+
if (!Number.isFinite(idx)) continue;
|
|
43406
|
+
const prev = latest.get(idx);
|
|
43407
|
+
if (!prev || Number(r.bucketStart) > Number(prev.bucketStart)) {
|
|
43408
|
+
latest.set(idx, r);
|
|
43409
|
+
}
|
|
43410
|
+
}
|
|
43411
|
+
const out = {};
|
|
43412
|
+
for (const { idx } of YB_MARKETS) {
|
|
43413
|
+
const row = latest.get(idx);
|
|
43414
|
+
if (!row) continue;
|
|
43415
|
+
const v = toPercent(row.tradingApy) ?? toPercent(row.tradingApyAllTime);
|
|
43416
|
+
if (v !== void 0) out[idx] = v;
|
|
43417
|
+
}
|
|
43418
|
+
if (Object.keys(out).length === 0) {
|
|
43419
|
+
throw new Error("yield-basis trading-apy has no current markets");
|
|
43420
|
+
}
|
|
43421
|
+
return out;
|
|
43422
|
+
};
|
|
43423
|
+
var fetchFromSnapshots = async (idx) => {
|
|
43424
|
+
const rows = (await getJson(SNAPSHOT_URL(idx)))?.data ?? [];
|
|
43425
|
+
const series = rows.filter((r) => r?.ppsRaw && Number(r.ppsRaw) > 0).map((r) => ({ t: Number(r.bucketStart), pps: Number(r.ppsRaw) })).filter((r) => Number.isFinite(r.t) && Number.isFinite(r.pps)).sort((a, b) => a.t - b.t);
|
|
43426
|
+
if (series.length < 2) throw new Error(`yield-basis snapshots empty ${idx}`);
|
|
43427
|
+
const last = series[series.length - 1];
|
|
43428
|
+
const target = last.t - 30 * DAY;
|
|
43429
|
+
const start = series.find((r) => r.t >= target) ?? series[0];
|
|
43430
|
+
const days = (last.t - start.t) / DAY;
|
|
43431
|
+
if (days <= 0) throw new Error(`yield-basis snapshot span zero ${idx}`);
|
|
43432
|
+
return (last.pps / start.pps - 1) * (YEAR_DAYS / days) * 100;
|
|
43433
|
+
};
|
|
43434
|
+
var yieldBasisFetcher = {
|
|
43435
|
+
label: "YIELD_BASIS",
|
|
43436
|
+
fetch: async () => {
|
|
43437
|
+
const primary = await fetchFromApyRoute().catch(
|
|
43438
|
+
() => ({})
|
|
43439
|
+
);
|
|
43440
|
+
const missing = YB_MARKETS.filter((m) => primary[m.idx] === void 0);
|
|
43441
|
+
const derived = await Promise.all(
|
|
43442
|
+
missing.map(
|
|
43443
|
+
(m) => fetchFromSnapshots(m.idx).catch(() => void 0)
|
|
43444
|
+
)
|
|
43445
|
+
);
|
|
43446
|
+
missing.forEach((m, i) => {
|
|
43447
|
+
const v = derived[i];
|
|
43448
|
+
if (v !== void 0) primary[m.idx] = v;
|
|
43449
|
+
});
|
|
43450
|
+
const out = {};
|
|
43451
|
+
for (const { idx, key: key3 } of YB_MARKETS) {
|
|
43452
|
+
out[key3] = primary[idx] ?? 0;
|
|
43453
|
+
}
|
|
43454
|
+
return out;
|
|
43455
|
+
}
|
|
43456
|
+
};
|
|
43457
|
+
|
|
43349
43458
|
// src/yields/intrinsic/fetchers/nativeCreditPool.ts
|
|
43350
43459
|
var nativeCreditPoolYieldKey = (chainId, underlying) => `${chainId}:${underlying.toLowerCase()}`;
|
|
43351
43460
|
var POOL_IDS = {
|
|
@@ -44768,8 +44877,65 @@ var sparkV2Base = (symbol, decimals) => ({
|
|
|
44768
44877
|
yieldFetcher: sparkSavingsFetcher
|
|
44769
44878
|
});
|
|
44770
44879
|
var SPARK_V2_WITHDRAW_INTENTS = "0x592b7db9906e6f8924c4d74c2a0ab86ce44fdddf";
|
|
44880
|
+
var ybMarket = (symbol, underlying, underlyingDecimals, address, capacityContract, yieldKey) => ({
|
|
44881
|
+
reader: "yieldbasis-lt",
|
|
44882
|
+
address,
|
|
44883
|
+
underlying,
|
|
44884
|
+
capacityContract,
|
|
44885
|
+
symbol,
|
|
44886
|
+
brand: "Yield Basis",
|
|
44887
|
+
description: `${symbol.replace("yb-", "")} in a 2\xD7-leveraged Curve Cryptoswap LP funded by borrowed crvUSD, with impermanent loss cancelled \u2014 the share tracks the asset 1:1 (full downside included) and earns the pool's trading fees. Not a yield-accrual vault: the share price falls in asset terms whenever rebalancing cost outruns fees, so the rate is regularly negative. Exit is instant and permissionless at a live unwind price a few basis points off the oracle value (the protocol's Temporary Redemption Discount). Deposits are permissionless but protocol-capped \u2014 read the deposit capacity, which is often zero.`,
|
|
44888
|
+
// LT shares are always 18-decimal, independent of the underlying.
|
|
44889
|
+
decimals: 18,
|
|
44890
|
+
underlyingDecimals,
|
|
44891
|
+
isRebasing: false,
|
|
44892
|
+
isMintable: true,
|
|
44893
|
+
withdrawalMode: "instant",
|
|
44894
|
+
yieldFetcher: yieldBasisFetcher,
|
|
44895
|
+
yieldKey
|
|
44896
|
+
});
|
|
44897
|
+
var YIELD_BASIS_ENTRIES = [
|
|
44898
|
+
// idx 7 — the only market with meaningful headroom at integration
|
|
44899
|
+
// (~110 WBTC / $7.1M of $32.1M capacity free).
|
|
44900
|
+
ybMarket(
|
|
44901
|
+
"yb-WBTC",
|
|
44902
|
+
"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
|
|
44903
|
+
8,
|
|
44904
|
+
"0x651d4b8168488fa163d85304662e8278d4c55baa",
|
|
44905
|
+
"0x7b9817eb5c49a99875138a5d52bf64a8b2cffffe",
|
|
44906
|
+
YB_WBTC_KEY
|
|
44907
|
+
),
|
|
44908
|
+
// idx 8 — largest market ($42.2M) and 99.5 % full.
|
|
44909
|
+
ybMarket(
|
|
44910
|
+
"yb-cbBTC",
|
|
44911
|
+
"0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
|
|
44912
|
+
8,
|
|
44913
|
+
"0x722fc3640ba007c3e9867ccdb0dca59f2e2f29f9",
|
|
44914
|
+
"0x49f51d7e279252f3c9a09678fdc65b4dbd5cb196",
|
|
44915
|
+
YB_CBBTC_KEY
|
|
44916
|
+
),
|
|
44917
|
+
// idx 9
|
|
44918
|
+
ybMarket(
|
|
44919
|
+
"yb-tBTC",
|
|
44920
|
+
"0x18084fba666a33d37592fa2633fd49a74dd93a88",
|
|
44921
|
+
18,
|
|
44922
|
+
"0x771f7290428d830ecd41e980745c327e507823ec",
|
|
44923
|
+
"0x0e357af536592f275c6aa07b8ac2ca6eb3d0cf5a",
|
|
44924
|
+
YB_TBTC_KEY
|
|
44925
|
+
),
|
|
44926
|
+
// idx 10 — over cap at integration; `depositCapacity` reads 0.
|
|
44927
|
+
ybMarket(
|
|
44928
|
+
"yb-WETH",
|
|
44929
|
+
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
|
44930
|
+
18,
|
|
44931
|
+
"0x2b9c9f3bdceb5d8e36a4704f08a78fca53343cea",
|
|
44932
|
+
"0x5f8d24f33cc5a1d5d1bf012261e6a2214c92233c",
|
|
44933
|
+
YB_WETH_KEY
|
|
44934
|
+
)
|
|
44935
|
+
];
|
|
44771
44936
|
var SINGLE_CHAIN_ENTRIES = {
|
|
44772
44937
|
"1": [
|
|
44938
|
+
...YIELD_BASIS_ENTRIES,
|
|
44773
44939
|
{
|
|
44774
44940
|
address: "0x9d39a5de30e57443bff2a8307a4256c8797a3497",
|
|
44775
44941
|
underlying: "0x4c9edd5852cd905f086c759e8383e09bff1e68b3",
|
|
@@ -45851,7 +46017,7 @@ var getGmxApiHost = (chainId) => GMX_API_HOSTS[chainId];
|
|
|
45851
46017
|
|
|
45852
46018
|
// src/vaults/gmx/api.ts
|
|
45853
46019
|
var GMX_DEFAULT_APY_PERIOD = "1d";
|
|
45854
|
-
var
|
|
46020
|
+
var getJson2 = async (url) => {
|
|
45855
46021
|
const res = await fetch(url, {
|
|
45856
46022
|
method: "GET",
|
|
45857
46023
|
headers: { Accept: "application/json" }
|
|
@@ -45863,12 +46029,12 @@ var fetchGmxRawData = async (chainId, period, apiUrlOverride) => {
|
|
|
45863
46029
|
const host = apiUrlOverride ?? getGmxApiHost(chainId);
|
|
45864
46030
|
if (!host) throw new Error(`GMX not supported on chain ${chainId}`);
|
|
45865
46031
|
const [apy, marketsRes, glvsRes, tokensRes] = await Promise.all([
|
|
45866
|
-
|
|
45867
|
-
|
|
46032
|
+
getJson2(`${host}/apy?period=${encodeURIComponent(period)}`),
|
|
46033
|
+
getJson2(`${host}/markets`).catch(() => ({
|
|
45868
46034
|
markets: []
|
|
45869
46035
|
})),
|
|
45870
|
-
|
|
45871
|
-
|
|
46036
|
+
getJson2(`${host}/glvs`).catch(() => ({ glvs: [] })),
|
|
46037
|
+
getJson2(`${host}/tokens`).catch(() => ({
|
|
45872
46038
|
tokens: []
|
|
45873
46039
|
}))
|
|
45874
46040
|
]);
|
|
@@ -45942,9 +46108,9 @@ async function fetchPendlePricesForAllChain(lists = {}, assetType = ["YT", "PT"]
|
|
|
45942
46108
|
try {
|
|
45943
46109
|
const data = await fetchPendlePricesRaw(assetType);
|
|
45944
46110
|
let prices = {};
|
|
45945
|
-
Object.entries(data).forEach(([
|
|
45946
|
-
const [chainId, address] =
|
|
45947
|
-
const assetKey = lists[chainId]?.list?.[address.toLowerCase()]?.assetGroup ??
|
|
46111
|
+
Object.entries(data).forEach(([key3, val]) => {
|
|
46112
|
+
const [chainId, address] = key3.split("-");
|
|
46113
|
+
const assetKey = lists[chainId]?.list?.[address.toLowerCase()]?.assetGroup ?? key3;
|
|
45948
46114
|
prices[assetKey] = val;
|
|
45949
46115
|
});
|
|
45950
46116
|
return prices;
|
|
@@ -46164,7 +46330,7 @@ var midasFetcher = {
|
|
|
46164
46330
|
const apy = apys[apyKey];
|
|
46165
46331
|
if (typeof apy === "number" && apy > 0 && apy <= MAX_DECIMAL_APY) {
|
|
46166
46332
|
const apr = apyToAprPercent(apy * 100);
|
|
46167
|
-
for (const
|
|
46333
|
+
for (const key3 of keys) result[key3] = apr;
|
|
46168
46334
|
}
|
|
46169
46335
|
}
|
|
46170
46336
|
return result;
|
|
@@ -46589,9 +46755,9 @@ function emptyReward() {
|
|
|
46589
46755
|
}
|
|
46590
46756
|
function ensureReserveTokenReward(result, chainId, reserveToken) {
|
|
46591
46757
|
if (!result[chainId]) result[chainId] = {};
|
|
46592
|
-
const
|
|
46593
|
-
if (!result[chainId][
|
|
46594
|
-
return result[chainId][
|
|
46758
|
+
const key3 = reserveToken.toLowerCase();
|
|
46759
|
+
if (!result[chainId][key3]) result[chainId][key3] = emptyReward();
|
|
46760
|
+
return result[chainId][key3];
|
|
46595
46761
|
}
|
|
46596
46762
|
function ensureReward(result, chainId, lender, asset) {
|
|
46597
46763
|
if (!result[chainId]) result[chainId] = {};
|
|
@@ -48410,7 +48576,7 @@ function getLiquityCalls(chainId) {
|
|
|
48410
48576
|
}
|
|
48411
48577
|
function parseLiquityResults(data, meta, context) {
|
|
48412
48578
|
const { chainId } = context;
|
|
48413
|
-
const
|
|
48579
|
+
const key3 = liquityLenderKey(meta.lender, chainId, meta.collIndex);
|
|
48414
48580
|
const entries = [];
|
|
48415
48581
|
const raw = data?.[0];
|
|
48416
48582
|
const price2 = typeof raw === "bigint" ? raw : raw != null && raw !== "0x" ? BigInt(raw) : 0n;
|
|
@@ -48424,8 +48590,8 @@ function parseLiquityResults(data, meta, context) {
|
|
|
48424
48590
|
asset: meta.collToken,
|
|
48425
48591
|
price: collUSD,
|
|
48426
48592
|
priceUSD: collUSD,
|
|
48427
|
-
marketUid: createMarketUid(chainId,
|
|
48428
|
-
targetLender:
|
|
48593
|
+
marketUid: createMarketUid(chainId, key3, meta.collToken),
|
|
48594
|
+
targetLender: key3,
|
|
48429
48595
|
description: "Liquity branch PriceFeed (USD)"
|
|
48430
48596
|
});
|
|
48431
48597
|
}
|
|
@@ -48434,8 +48600,8 @@ function parseLiquityResults(data, meta, context) {
|
|
|
48434
48600
|
asset: meta.debtToken,
|
|
48435
48601
|
price: 1,
|
|
48436
48602
|
priceUSD: 1,
|
|
48437
|
-
marketUid: createMarketUid(chainId,
|
|
48438
|
-
targetLender:
|
|
48603
|
+
marketUid: createMarketUid(chainId, key3, meta.debtToken),
|
|
48604
|
+
targetLender: key3,
|
|
48439
48605
|
description: "Liquity stablecoin (par)",
|
|
48440
48606
|
staticBase: true,
|
|
48441
48607
|
baseAsset: meta.debtToken
|
|
@@ -48479,7 +48645,7 @@ function getRiverCalls(chainId) {
|
|
|
48479
48645
|
}
|
|
48480
48646
|
function parseRiverResults(data, meta, context) {
|
|
48481
48647
|
const { chainId } = context;
|
|
48482
|
-
const
|
|
48648
|
+
const key3 = riverLenderKey(meta.lender, chainId, meta.index);
|
|
48483
48649
|
const entries = [];
|
|
48484
48650
|
const raw = data?.[0];
|
|
48485
48651
|
const price2 = typeof raw === "bigint" ? raw : raw != null && raw !== "0x" ? BigInt(raw) : 0n;
|
|
@@ -48489,8 +48655,8 @@ function parseRiverResults(data, meta, context) {
|
|
|
48489
48655
|
asset: meta.collToken,
|
|
48490
48656
|
price: collUSD,
|
|
48491
48657
|
priceUSD: collUSD,
|
|
48492
|
-
marketUid: createMarketUid(chainId,
|
|
48493
|
-
targetLender:
|
|
48658
|
+
marketUid: createMarketUid(chainId, key3, meta.collToken),
|
|
48659
|
+
targetLender: key3,
|
|
48494
48660
|
description: "River TroveManager oracle (USD)"
|
|
48495
48661
|
});
|
|
48496
48662
|
}
|
|
@@ -48499,8 +48665,8 @@ function parseRiverResults(data, meta, context) {
|
|
|
48499
48665
|
asset: meta.debtToken,
|
|
48500
48666
|
price: 1,
|
|
48501
48667
|
priceUSD: 1,
|
|
48502
|
-
marketUid: createMarketUid(chainId,
|
|
48503
|
-
targetLender:
|
|
48668
|
+
marketUid: createMarketUid(chainId, key3, meta.debtToken),
|
|
48669
|
+
targetLender: key3,
|
|
48504
48670
|
description: "River satUSD (par)",
|
|
48505
48671
|
staticBase: true,
|
|
48506
48672
|
baseAsset: meta.debtToken
|
|
@@ -48567,7 +48733,7 @@ var field12 = (res, name, idx) => {
|
|
|
48567
48733
|
};
|
|
48568
48734
|
function parseDssResults(data, meta, context) {
|
|
48569
48735
|
const { chainId } = context;
|
|
48570
|
-
const
|
|
48736
|
+
const key3 = dssLenderKey(meta.lender, chainId, meta.ilk);
|
|
48571
48737
|
const entries = [];
|
|
48572
48738
|
const spot = field12(data?.[0], "spot", 2);
|
|
48573
48739
|
const mat = big13(meta.mat);
|
|
@@ -48578,8 +48744,8 @@ function parseDssResults(data, meta, context) {
|
|
|
48578
48744
|
asset: meta.collToken,
|
|
48579
48745
|
price: collUSD,
|
|
48580
48746
|
priceUSD: collUSD,
|
|
48581
|
-
marketUid: createMarketUid(chainId,
|
|
48582
|
-
targetLender:
|
|
48747
|
+
marketUid: createMarketUid(chainId, key3, meta.collToken),
|
|
48748
|
+
targetLender: key3,
|
|
48583
48749
|
description: "Maker OSM via Vat.spot \xD7 Spot.mat (USD, ~1h delayed)"
|
|
48584
48750
|
});
|
|
48585
48751
|
}
|
|
@@ -48589,8 +48755,8 @@ function parseDssResults(data, meta, context) {
|
|
|
48589
48755
|
asset: meta.debtToken,
|
|
48590
48756
|
price: 1,
|
|
48591
48757
|
priceUSD: 1,
|
|
48592
|
-
marketUid: createMarketUid(chainId,
|
|
48593
|
-
targetLender:
|
|
48758
|
+
marketUid: createMarketUid(chainId, key3, meta.debtToken),
|
|
48759
|
+
targetLender: key3,
|
|
48594
48760
|
description: "dss debt token (par)",
|
|
48595
48761
|
staticBase: true,
|
|
48596
48762
|
baseAsset: meta.debtToken
|
|
@@ -48644,7 +48810,7 @@ function getCurvanceCalls(chainId) {
|
|
|
48644
48810
|
}
|
|
48645
48811
|
function parseCurvanceResults(data, meta, context) {
|
|
48646
48812
|
const { chainId } = context;
|
|
48647
|
-
const
|
|
48813
|
+
const key3 = curvanceLenderKey(meta.lender, chainId, meta.marketManager);
|
|
48648
48814
|
const entries = [];
|
|
48649
48815
|
meta.assets.forEach((asset, i) => {
|
|
48650
48816
|
const lowerRes = data?.[i * READS_PER_ASSET];
|
|
@@ -48660,8 +48826,8 @@ function parseCurvanceResults(data, meta, context) {
|
|
|
48660
48826
|
asset,
|
|
48661
48827
|
price: priceUSD,
|
|
48662
48828
|
priceUSD,
|
|
48663
|
-
marketUid: createMarketUid(chainId,
|
|
48664
|
-
targetLender:
|
|
48829
|
+
marketUid: createMarketUid(chainId, key3, asset),
|
|
48830
|
+
targetLender: key3,
|
|
48665
48831
|
description: spreadBps ? `Curvance OracleManager (USD, pessimistic-low; dual feed +${spreadBps}bps)` : "Curvance OracleManager (USD)"
|
|
48666
48832
|
});
|
|
48667
48833
|
});
|
|
@@ -48683,6 +48849,62 @@ var curvanceFetcher = {
|
|
|
48683
48849
|
parse: parseCurvanceResults,
|
|
48684
48850
|
getAbi: getCurvanceAbi
|
|
48685
48851
|
};
|
|
48852
|
+
function getResupplyCalls(chainId) {
|
|
48853
|
+
const results = [];
|
|
48854
|
+
for (const lender of resupplyLendersByChain(chainId)) {
|
|
48855
|
+
const cfg = resupplyConfigFor(lender, chainId);
|
|
48856
|
+
if (!cfg?.reusdOracle || !cfg?.reusd) continue;
|
|
48857
|
+
const roster = getResupplyPairRoster(chainId, lender);
|
|
48858
|
+
if (roster.length === 0) continue;
|
|
48859
|
+
const reusd = cfg.reusd.toLowerCase();
|
|
48860
|
+
for (const entry of roster) {
|
|
48861
|
+
const calls = [
|
|
48862
|
+
{ address: cfg.reusdOracle, name: "price", params: [] }
|
|
48863
|
+
];
|
|
48864
|
+
results.push({
|
|
48865
|
+
calls,
|
|
48866
|
+
meta: { lender, chainId, pair: entry.pair.toLowerCase(), reusd },
|
|
48867
|
+
lender: resupplyLenderKey(lender, chainId, entry.pair)
|
|
48868
|
+
});
|
|
48869
|
+
}
|
|
48870
|
+
}
|
|
48871
|
+
return results;
|
|
48872
|
+
}
|
|
48873
|
+
function parseResupplyResults(data, meta, context) {
|
|
48874
|
+
const { chainId } = context;
|
|
48875
|
+
const key3 = resupplyLenderKey(meta.lender, chainId, meta.pair);
|
|
48876
|
+
const raw = data?.[0];
|
|
48877
|
+
const price2 = typeof raw === "bigint" ? raw : raw != null && raw !== "0x" ? BigInt(raw) : 0n;
|
|
48878
|
+
if (price2 === 0n) return [];
|
|
48879
|
+
const usd = Number(price2) / 1e18;
|
|
48880
|
+
if (!(usd > 0.5 && usd < 2)) return [];
|
|
48881
|
+
return [
|
|
48882
|
+
{
|
|
48883
|
+
asset: meta.reusd,
|
|
48884
|
+
price: usd,
|
|
48885
|
+
priceUSD: usd,
|
|
48886
|
+
marketUid: createMarketUid(chainId, key3, meta.reusd),
|
|
48887
|
+
targetLender: key3,
|
|
48888
|
+
description: "Resupply reUSD oracle (PriceWatcher feed, USD)"
|
|
48889
|
+
}
|
|
48890
|
+
];
|
|
48891
|
+
}
|
|
48892
|
+
function getResupplyAbi() {
|
|
48893
|
+
return [
|
|
48894
|
+
{
|
|
48895
|
+
name: "price",
|
|
48896
|
+
type: "function",
|
|
48897
|
+
stateMutability: "view",
|
|
48898
|
+
inputs: [],
|
|
48899
|
+
outputs: [{ type: "uint256" }]
|
|
48900
|
+
}
|
|
48901
|
+
];
|
|
48902
|
+
}
|
|
48903
|
+
var resupplyFetcher = {
|
|
48904
|
+
getCalls: getResupplyCalls,
|
|
48905
|
+
parse: parseResupplyResults,
|
|
48906
|
+
getAbi: getResupplyAbi
|
|
48907
|
+
};
|
|
48686
48908
|
function getInverseCalls(chainId) {
|
|
48687
48909
|
const results = [];
|
|
48688
48910
|
for (const lender of inverseLendersByChain(chainId)) {
|
|
@@ -48716,7 +48938,7 @@ function getInverseCalls(chainId) {
|
|
|
48716
48938
|
}
|
|
48717
48939
|
function parseInverseResults(data, meta, context) {
|
|
48718
48940
|
const { chainId } = context;
|
|
48719
|
-
const
|
|
48941
|
+
const key3 = inverseLenderKey(meta.lender, meta.market);
|
|
48720
48942
|
const entries = [];
|
|
48721
48943
|
const raw = data?.[0];
|
|
48722
48944
|
const price2 = typeof raw === "bigint" ? raw : raw != null && raw !== "0x" ? BigInt(raw) : 0n;
|
|
@@ -48726,8 +48948,8 @@ function parseInverseResults(data, meta, context) {
|
|
|
48726
48948
|
asset: meta.collToken,
|
|
48727
48949
|
price: collUSD,
|
|
48728
48950
|
priceUSD: collUSD,
|
|
48729
|
-
marketUid: createMarketUid(chainId,
|
|
48730
|
-
targetLender:
|
|
48951
|
+
marketUid: createMarketUid(chainId, key3, meta.collToken),
|
|
48952
|
+
targetLender: key3,
|
|
48731
48953
|
description: "Inverse FiRM pessimistic oracle (USD, ~2-day low)"
|
|
48732
48954
|
});
|
|
48733
48955
|
}
|
|
@@ -48736,8 +48958,8 @@ function parseInverseResults(data, meta, context) {
|
|
|
48736
48958
|
asset: meta.dola,
|
|
48737
48959
|
price: 1,
|
|
48738
48960
|
priceUSD: 1,
|
|
48739
|
-
marketUid: createMarketUid(chainId,
|
|
48740
|
-
targetLender:
|
|
48961
|
+
marketUid: createMarketUid(chainId, key3, meta.dola),
|
|
48962
|
+
targetLender: key3,
|
|
48741
48963
|
description: "Inverse DOLA (par)",
|
|
48742
48964
|
staticBase: true,
|
|
48743
48965
|
baseAsset: meta.dola
|
|
@@ -48788,8 +49010,8 @@ function parseTellerResults(data, meta, context) {
|
|
|
48788
49010
|
const collateral = meta.collateral;
|
|
48789
49011
|
const lenderKey = tellerLenderKey(meta.pool);
|
|
48790
49012
|
const usdOf = (addr2) => {
|
|
48791
|
-
const
|
|
48792
|
-
return usdPrices[
|
|
49013
|
+
const key3 = tokenList?.[addr2]?.assetGroup ?? `${chainId}-${addr2}`;
|
|
49014
|
+
return usdPrices[key3] ?? usdPrices[addr2];
|
|
48793
49015
|
};
|
|
48794
49016
|
const principalUSD = usdOf(principal);
|
|
48795
49017
|
const collateralUSD = usdOf(collateral);
|
|
@@ -49487,11 +49709,11 @@ function getAaveV4OracleGroups(chainId) {
|
|
|
49487
49709
|
for (const entry of oracleEntries) {
|
|
49488
49710
|
if (!entry?.oracle || entry.oracle === "0x") continue;
|
|
49489
49711
|
if (!entry.spoke) continue;
|
|
49490
|
-
const
|
|
49491
|
-
let group = byOracle.get(
|
|
49712
|
+
const key3 = entry.oracle.toLowerCase();
|
|
49713
|
+
let group = byOracle.get(key3);
|
|
49492
49714
|
if (!group) {
|
|
49493
49715
|
group = { decimals: entry.decimals ?? 8, entries: [] };
|
|
49494
|
-
byOracle.set(
|
|
49716
|
+
byOracle.set(key3, group);
|
|
49495
49717
|
}
|
|
49496
49718
|
group.entries.push({
|
|
49497
49719
|
underlying: entry.underlying.toLowerCase(),
|
|
@@ -49997,8 +50219,8 @@ function parseGearboxV3Results(data, _meta, context) {
|
|
|
49997
50219
|
const markets = data[0];
|
|
49998
50220
|
if (!Array.isArray(markets) || markets.length === 0) return entries;
|
|
49999
50221
|
const resolvePriceUSD = (token) => {
|
|
50000
|
-
const
|
|
50001
|
-
return usdPrices[
|
|
50222
|
+
const key3 = tokenList?.[token]?.assetGroup ?? `${chainId}-${token}`;
|
|
50223
|
+
return usdPrices[key3] ?? usdPrices[token];
|
|
50002
50224
|
};
|
|
50003
50225
|
for (const m of markets) {
|
|
50004
50226
|
try {
|
|
@@ -50684,6 +50906,12 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50684
50906
|
await fetchCurvanceMarkets(lender, chainId).catch(() => void 0);
|
|
50685
50907
|
}
|
|
50686
50908
|
}
|
|
50909
|
+
if (isActive("resupply")) {
|
|
50910
|
+
for (const lender of resupplyLendersByChain(chainId)) {
|
|
50911
|
+
if (getResupplyPairRoster(chainId, lender).length > 0) continue;
|
|
50912
|
+
await fetchResupplyMarkets(lender, chainId).catch(() => void 0);
|
|
50913
|
+
}
|
|
50914
|
+
}
|
|
50687
50915
|
const aaveResults = isActive("aave") ? safeGetCalls(
|
|
50688
50916
|
"aave",
|
|
50689
50917
|
() => aaveFetcher.getCalls(chainId),
|
|
@@ -50766,6 +50994,11 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50766
50994
|
() => curvanceFetcher.getCalls(chainId),
|
|
50767
50995
|
getCallsErrors
|
|
50768
50996
|
) : [];
|
|
50997
|
+
const resupplyResults = isActive("resupply") ? safeGetCalls(
|
|
50998
|
+
"resupply",
|
|
50999
|
+
() => resupplyFetcher.getCalls(chainId),
|
|
51000
|
+
getCallsErrors
|
|
51001
|
+
) : [];
|
|
50769
51002
|
const inverseResults = isActive("inverse") ? safeGetCalls(
|
|
50770
51003
|
"inverse",
|
|
50771
51004
|
() => inverseFetcher.getCalls(chainId),
|
|
@@ -50911,6 +51144,13 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50911
51144
|
curvanceFetcher.getAbi(),
|
|
50912
51145
|
"direct"
|
|
50913
51146
|
);
|
|
51147
|
+
const resupplyGroup = buildGroup(
|
|
51148
|
+
"resupply",
|
|
51149
|
+
resupplyResults,
|
|
51150
|
+
resupplyFetcher.parse,
|
|
51151
|
+
resupplyFetcher.getAbi(),
|
|
51152
|
+
"direct"
|
|
51153
|
+
);
|
|
50914
51154
|
const inverseGroup = buildGroup(
|
|
50915
51155
|
"inverse",
|
|
50916
51156
|
inverseResults,
|
|
@@ -50985,6 +51225,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50985
51225
|
riverGroup,
|
|
50986
51226
|
dssGroup,
|
|
50987
51227
|
curvanceGroup,
|
|
51228
|
+
resupplyGroup,
|
|
50988
51229
|
inverseGroup,
|
|
50989
51230
|
tellerGroup,
|
|
50990
51231
|
termMaxGroup,
|
|
@@ -51036,6 +51277,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
51036
51277
|
riverData,
|
|
51037
51278
|
dssData,
|
|
51038
51279
|
curvanceData,
|
|
51280
|
+
resupplyData,
|
|
51039
51281
|
inverseData,
|
|
51040
51282
|
tellerData,
|
|
51041
51283
|
termMaxData,
|
|
@@ -51179,6 +51421,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
51179
51421
|
allowFailure,
|
|
51180
51422
|
rpcOverrides
|
|
51181
51423
|
),
|
|
51424
|
+
executeGroup(
|
|
51425
|
+
resupplyGroup,
|
|
51426
|
+
chainId,
|
|
51427
|
+
chainBatchSize,
|
|
51428
|
+
retries,
|
|
51429
|
+
allowFailure,
|
|
51430
|
+
rpcOverrides
|
|
51431
|
+
),
|
|
51182
51432
|
executeGroup(
|
|
51183
51433
|
inverseGroup,
|
|
51184
51434
|
chainId,
|
|
@@ -51332,6 +51582,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
51332
51582
|
parseTrackers(riverGroup, riverData.results);
|
|
51333
51583
|
parseTrackers(dssGroup, dssData.results);
|
|
51334
51584
|
parseTrackers(curvanceGroup, curvanceData.results);
|
|
51585
|
+
parseTrackers(resupplyGroup, resupplyData.results);
|
|
51335
51586
|
parseTrackers(inverseGroup, inverseData.results);
|
|
51336
51587
|
if (siloV2GqlEntries != null) {
|
|
51337
51588
|
const diag2 = {
|
|
@@ -51392,8 +51643,8 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
51392
51643
|
let gqlPushed = 0;
|
|
51393
51644
|
for (const entry of morphoGqlEntries) {
|
|
51394
51645
|
const lender = entry.targetLender ?? "MORPHO_BLUE";
|
|
51395
|
-
const
|
|
51396
|
-
if (onChainKeys.has(
|
|
51646
|
+
const key3 = `${lender}|${entry.marketUid}|${entry.asset}`;
|
|
51647
|
+
if (onChainKeys.has(key3)) continue;
|
|
51397
51648
|
if (!chainResult[lender]) chainResult[lender] = [];
|
|
51398
51649
|
entry.derivation = resolveDerivation(entry, "derived");
|
|
51399
51650
|
chainResult[lender].push(entry);
|
|
@@ -51463,9 +51714,9 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
51463
51714
|
if (!entry.updatedAt || entry.updatedAt <= 0) continue;
|
|
51464
51715
|
const staleSeconds = nowSeconds - entry.updatedAt;
|
|
51465
51716
|
if (staleSeconds <= stalenessThresholdSeconds) continue;
|
|
51466
|
-
const
|
|
51467
|
-
if (reported.has(
|
|
51468
|
-
reported.add(
|
|
51717
|
+
const key3 = `${lender}|${entry.asset}|${entry.feedSource ?? ""}`;
|
|
51718
|
+
if (reported.has(key3)) continue;
|
|
51719
|
+
reported.add(key3);
|
|
51469
51720
|
staleFeeds.push({
|
|
51470
51721
|
asset: entry.asset,
|
|
51471
51722
|
lender,
|
|
@@ -51612,8 +51863,8 @@ function ewma(prev, sample) {
|
|
|
51612
51863
|
function updateFeedStats(prev, observations, nowSeconds = Math.floor(Date.now() / 1e3)) {
|
|
51613
51864
|
const next = { ...prev };
|
|
51614
51865
|
for (const obs of observations) {
|
|
51615
|
-
const
|
|
51616
|
-
const existing = next[
|
|
51866
|
+
const key3 = feedStatKey(obs.chainId, obs.feedKey);
|
|
51867
|
+
const existing = next[key3];
|
|
51617
51868
|
const stat = existing ? { ...existing } : {
|
|
51618
51869
|
chainId: obs.chainId,
|
|
51619
51870
|
feedKey: obs.feedKey,
|
|
@@ -51640,7 +51891,7 @@ function updateFeedStats(prev, observations, nowSeconds = Math.floor(Date.now()
|
|
|
51640
51891
|
stat.deviationSamples += 1;
|
|
51641
51892
|
}
|
|
51642
51893
|
stat.lastObservedAt = nowSeconds;
|
|
51643
|
-
next[
|
|
51894
|
+
next[key3] = stat;
|
|
51644
51895
|
}
|
|
51645
51896
|
return next;
|
|
51646
51897
|
}
|
|
@@ -51733,8 +51984,8 @@ function collectFeedObservations(structuredPrices, lists = {}, guard = DEFAULT_O
|
|
|
51733
51984
|
}
|
|
51734
51985
|
function pruneFeedStats(stats, maxAgeSeconds = 30 * 24 * 3600, nowSeconds = Math.floor(Date.now() / 1e3)) {
|
|
51735
51986
|
const out = {};
|
|
51736
|
-
for (const [
|
|
51737
|
-
if (nowSeconds - stat.lastObservedAt <= maxAgeSeconds) out[
|
|
51987
|
+
for (const [key3, stat] of Object.entries(stats)) {
|
|
51988
|
+
if (nowSeconds - stat.lastObservedAt <= maxAgeSeconds) out[key3] = stat;
|
|
51738
51989
|
}
|
|
51739
51990
|
return out;
|
|
51740
51991
|
}
|
|
@@ -54365,7 +54616,7 @@ function rescaleExchangeRate(exchangeRate, shareDecimals) {
|
|
|
54365
54616
|
const dec = Math.max(0, Math.round(Number(shareDecimals) || 0));
|
|
54366
54617
|
return (r * 10n ** BigInt(dec) / 10n ** 18n).toString();
|
|
54367
54618
|
}
|
|
54368
|
-
async function
|
|
54619
|
+
async function getJson3(url) {
|
|
54369
54620
|
const controller = new AbortController();
|
|
54370
54621
|
const timer = setTimeout(() => controller.abort(), API_TIMEOUT_MS);
|
|
54371
54622
|
try {
|
|
@@ -54454,7 +54705,7 @@ async function mapWithConcurrency(items, limit, fn) {
|
|
|
54454
54705
|
return out;
|
|
54455
54706
|
}
|
|
54456
54707
|
async function fetchEulerEarnVaultsFromApi(chainId, prices = {}, tokenList = {}, multicallRetry) {
|
|
54457
|
-
const list = await
|
|
54708
|
+
const list = await getJson3(
|
|
54458
54709
|
`${EULER_DATA_API_BASE2}/earn/vaults?chainId=${chainId}&limit=200`
|
|
54459
54710
|
);
|
|
54460
54711
|
if (!list) return void 0;
|
|
@@ -54463,7 +54714,7 @@ async function fetchEulerEarnVaultsFromApi(chainId, prices = {}, tokenList = {},
|
|
|
54463
54714
|
const details = await mapWithConcurrency(
|
|
54464
54715
|
rows,
|
|
54465
54716
|
DETAIL_CONCURRENCY,
|
|
54466
|
-
(row) =>
|
|
54717
|
+
(row) => getJson3(
|
|
54467
54718
|
`${EULER_DATA_API_BASE2}/earn/vaults/${chainId}/${row.address}?include=strategies`
|
|
54468
54719
|
).then((d) => d?.data)
|
|
54469
54720
|
);
|
|
@@ -60198,6 +60449,73 @@ var AvailableWithdrawLimitAbi = [
|
|
|
60198
60449
|
}
|
|
60199
60450
|
];
|
|
60200
60451
|
|
|
60452
|
+
// src/vaults/savings/abis/yieldBasis.ts
|
|
60453
|
+
var YieldBasisLtReadAbi = [
|
|
60454
|
+
{
|
|
60455
|
+
/**
|
|
60456
|
+
* Fundamental, oracle-anchored value of one share — **1e18-scaled in
|
|
60457
|
+
* ASSET units regardless of the asset's own decimals**. cbBTC and
|
|
60458
|
+
* WBTC are 8-decimal while this still answers in 1e18, so treating it
|
|
60459
|
+
* as raw underlying is a 1e10 error. Sandwich-resistant; excludes
|
|
60460
|
+
* TRD. Returns exactly `1e18` when `totalSupply == 0`.
|
|
60461
|
+
*/
|
|
60462
|
+
name: "pricePerShare",
|
|
60463
|
+
type: "function",
|
|
60464
|
+
stateMutability: "view",
|
|
60465
|
+
inputs: [],
|
|
60466
|
+
outputs: [{ type: "uint256" }]
|
|
60467
|
+
},
|
|
60468
|
+
{
|
|
60469
|
+
/**
|
|
60470
|
+
* Realistic redemption: what `withdraw(tokens, …)` would actually pay,
|
|
60471
|
+
* in **raw underlying units**, priced off a live Cryptoswap unwind
|
|
60472
|
+
* (`calc_withdraw_fixed_out`). Includes TRD, so it disagrees with
|
|
60473
|
+
* `pricePerShare` by the signed discount — usually a few basis points,
|
|
60474
|
+
* widening during volatility.
|
|
60475
|
+
*
|
|
60476
|
+
* `@view @nonreentrant` in Vyper: the lock is only read, never
|
|
60477
|
+
* written, so this is a normal `eth_call` and multicall-safe.
|
|
60478
|
+
*/
|
|
60479
|
+
name: "preview_withdraw",
|
|
60480
|
+
type: "function",
|
|
60481
|
+
stateMutability: "view",
|
|
60482
|
+
inputs: [{ type: "uint256", name: "tokens" }],
|
|
60483
|
+
outputs: [{ type: "uint256", name: "assets" }]
|
|
60484
|
+
}
|
|
60485
|
+
];
|
|
60486
|
+
var YieldBasisAmmReadAbi = [
|
|
60487
|
+
{
|
|
60488
|
+
/**
|
|
60489
|
+
* Ceiling on the market's crvUSD debt, set by the Factory's
|
|
60490
|
+
* allocation. The deposit assert is `max_debt() / 2 >= value`, so
|
|
60491
|
+
* `max_debt()/2` is the market's total equity capacity — there is no
|
|
60492
|
+
* `maxDeposit()` getter anywhere and a full market reverts
|
|
60493
|
+
* `"Debt too high"`.
|
|
60494
|
+
*/
|
|
60495
|
+
name: "max_debt",
|
|
60496
|
+
type: "function",
|
|
60497
|
+
stateMutability: "view",
|
|
60498
|
+
inputs: [],
|
|
60499
|
+
outputs: [{ type: "uint256" }]
|
|
60500
|
+
},
|
|
60501
|
+
{
|
|
60502
|
+
/**
|
|
60503
|
+
* `OraclizedValue{p_o, value}` flattened — see the file header.
|
|
60504
|
+
* `value` is the market's current **equity** in crvUSD (collateral
|
|
60505
|
+
* value minus debt, i.e. half the LP collateral at the L=2 target),
|
|
60506
|
+
* which is the quantity `max_debt()/2` is compared against.
|
|
60507
|
+
*/
|
|
60508
|
+
name: "value_oracle",
|
|
60509
|
+
type: "function",
|
|
60510
|
+
stateMutability: "view",
|
|
60511
|
+
inputs: [],
|
|
60512
|
+
outputs: [
|
|
60513
|
+
{ type: "uint256", name: "p_o" },
|
|
60514
|
+
{ type: "uint256", name: "value" }
|
|
60515
|
+
]
|
|
60516
|
+
}
|
|
60517
|
+
];
|
|
60518
|
+
|
|
60201
60519
|
// src/vaults/savings/readers/erc4626Idle.ts
|
|
60202
60520
|
var readerErc4626Idle = (entry) => {
|
|
60203
60521
|
const shareUnit = 10n ** BigInt(entry.decimals);
|
|
@@ -60395,6 +60713,54 @@ var readerNativeWnlp = (entry) => {
|
|
|
60395
60713
|
};
|
|
60396
60714
|
};
|
|
60397
60715
|
|
|
60716
|
+
// src/vaults/savings/readers/yieldBasisLt.ts
|
|
60717
|
+
var ONE_SHARE = ONE_E1811;
|
|
60718
|
+
var readerYieldBasisLt = (entry) => {
|
|
60719
|
+
const underlyingUnit = 10n ** BigInt(entry.underlyingDecimals ?? entry.decimals);
|
|
60720
|
+
const amm = entry.capacityContract ?? entry.address;
|
|
60721
|
+
return {
|
|
60722
|
+
calls: [
|
|
60723
|
+
{ address: entry.address, name: "totalSupply", params: [] },
|
|
60724
|
+
{ address: entry.address, name: "pricePerShare", params: [] },
|
|
60725
|
+
{ address: entry.address, name: "preview_withdraw", params: [ONE_SHARE] },
|
|
60726
|
+
{ address: amm, name: "max_debt", params: [] },
|
|
60727
|
+
{ address: amm, name: "value_oracle", params: [] }
|
|
60728
|
+
],
|
|
60729
|
+
abis: [
|
|
60730
|
+
TotalSupplyAbi2,
|
|
60731
|
+
YieldBasisLtReadAbi,
|
|
60732
|
+
YieldBasisLtReadAbi,
|
|
60733
|
+
YieldBasisAmmReadAbi,
|
|
60734
|
+
YieldBasisAmmReadAbi
|
|
60735
|
+
],
|
|
60736
|
+
parse: ([supply, pps, redeemPerShare, maxDebt, valueOracle]) => {
|
|
60737
|
+
const totalSupply = toBigInt15(supply);
|
|
60738
|
+
const fundamental = toBigInt15(pps);
|
|
60739
|
+
const redeemRaw = toBigInt15(redeemPerShare);
|
|
60740
|
+
if (totalSupply === void 0 || fundamental === void 0 || redeemRaw === void 0) {
|
|
60741
|
+
return void 0;
|
|
60742
|
+
}
|
|
60743
|
+
if (totalSupply === 0n || redeemRaw === 0n) return void 0;
|
|
60744
|
+
const totalAssets = totalSupply * redeemRaw / ONE_SHARE;
|
|
60745
|
+
const exchangeRate = redeemRaw * ONE_E1811 / underlyingUnit;
|
|
60746
|
+
const equity = Array.isArray(valueOracle) ? toBigInt15(valueOracle[1]) : toBigInt15(valueOracle?.value);
|
|
60747
|
+
const cap = toBigInt15(maxDebt);
|
|
60748
|
+
let depositCapacity;
|
|
60749
|
+
if (cap !== void 0 && equity !== void 0 && equity > 0n) {
|
|
60750
|
+
const headroom = cap / 2n - equity;
|
|
60751
|
+
depositCapacity = headroom > 0n ? totalAssets * headroom / equity : 0n;
|
|
60752
|
+
}
|
|
60753
|
+
return {
|
|
60754
|
+
totalAssets,
|
|
60755
|
+
totalSupply,
|
|
60756
|
+
exchangeRate,
|
|
60757
|
+
fundamentalExchangeRate: fundamental,
|
|
60758
|
+
depositCapacity
|
|
60759
|
+
};
|
|
60760
|
+
}
|
|
60761
|
+
};
|
|
60762
|
+
};
|
|
60763
|
+
|
|
60398
60764
|
// src/vaults/savings/readers/index.ts
|
|
60399
60765
|
var buildReader2 = (entry) => {
|
|
60400
60766
|
switch (entry.reader) {
|
|
@@ -60404,6 +60770,8 @@ var buildReader2 = (entry) => {
|
|
|
60404
60770
|
return readerNavOracle(entry);
|
|
60405
60771
|
case "frankencoin-savings":
|
|
60406
60772
|
return readerFrankencoinSavings(entry);
|
|
60773
|
+
case "yieldbasis-lt":
|
|
60774
|
+
return readerYieldBasisLt(entry);
|
|
60407
60775
|
case "erc4626-idle":
|
|
60408
60776
|
return readerErc4626Idle(entry);
|
|
60409
60777
|
case "erc4626-withdraw-limit":
|
|
@@ -60469,6 +60837,12 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
60469
60837
|
) : 1;
|
|
60470
60838
|
const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1812;
|
|
60471
60839
|
const convertToShares = state.exchangeRate > 0n ? ONE_E1812 * shareUnit / state.exchangeRate : 0n;
|
|
60840
|
+
const depositCapacity = state.depositCapacity?.toString();
|
|
60841
|
+
const depositCapacityFormatted = state.depositCapacity !== void 0 ? Number(state.depositCapacity) / 10 ** underlyingDec : void 0;
|
|
60842
|
+
const depositCapacityUsd = depositCapacityFormatted !== void 0 && priceUsd !== void 0 ? depositCapacityFormatted * priceUsd : void 0;
|
|
60843
|
+
const redemptionDiscountBps = state.fundamentalExchangeRate !== void 0 && state.fundamentalExchangeRate > 0n ? Number(
|
|
60844
|
+
state.exchangeRate * 100000000n / state.fundamentalExchangeRate - 100000000n
|
|
60845
|
+
) / 1e4 : void 0;
|
|
60472
60846
|
const displayName = composeVaultDisplayName(
|
|
60473
60847
|
entry.brand,
|
|
60474
60848
|
entry.brand,
|
|
@@ -60516,6 +60890,10 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
60516
60890
|
instantRedeemEnabled: state.instantRedeemEnabled,
|
|
60517
60891
|
inventoryContract: entry.inventoryContract?.toLowerCase(),
|
|
60518
60892
|
withdrawQueue: state.withdrawQueue ?? entry.withdrawQueue?.toLowerCase(),
|
|
60893
|
+
depositCapacity,
|
|
60894
|
+
depositCapacityFormatted,
|
|
60895
|
+
depositCapacityUsd,
|
|
60896
|
+
redemptionDiscountBps,
|
|
60519
60897
|
asset,
|
|
60520
60898
|
priceUsd,
|
|
60521
60899
|
totalAssetsFormatted,
|
|
@@ -61452,6 +61830,22 @@ var classifyRedemption = (provider, v) => {
|
|
|
61452
61830
|
};
|
|
61453
61831
|
var VOLATILE_VAULT_OVERRIDES = /* @__PURE__ */ new Set([
|
|
61454
61832
|
// '1-0x…', // <chain>-<address> of a known volatile strategy vault
|
|
61833
|
+
// Yield Basis yb-<ASSET> — 2×-leveraged Curve Cryptoswap LP positions
|
|
61834
|
+
// with impermanent loss cancelled, registered under the `savings`
|
|
61835
|
+
// provider. They live here because the share/asset ratio is NOT
|
|
61836
|
+
// monotonic: when rebalancing slippage outruns trading fees the share
|
|
61837
|
+
// price falls in asset terms, and three of these four printed a
|
|
61838
|
+
// negative trailing-30d rate at integration (2026-08-10), with the
|
|
61839
|
+
// protocol's earlier market generations negative on 23–45 % of all
|
|
61840
|
+
// days. Structurally the HLP case, inside a yield provider.
|
|
61841
|
+
"1-0x651d4b8168488fa163d85304662e8278d4c55baa",
|
|
61842
|
+
// yb-WBTC
|
|
61843
|
+
"1-0x722fc3640ba007c3e9867ccdb0dca59f2e2f29f9",
|
|
61844
|
+
// yb-cbBTC
|
|
61845
|
+
"1-0x771f7290428d830ecd41e980745c327e507823ec",
|
|
61846
|
+
// yb-tBTC
|
|
61847
|
+
"1-0x2b9c9f3bdceb5d8e36a4704f08a78fca53343cea"
|
|
61848
|
+
// yb-WETH
|
|
61455
61849
|
]);
|
|
61456
61850
|
var STABLECOIN_SYMBOLS = /* @__PURE__ */ new Set([
|
|
61457
61851
|
// USD majors
|
|
@@ -61544,8 +61938,8 @@ var isStablecoinSymbol = (symbol) => {
|
|
|
61544
61938
|
return s.includes("USD");
|
|
61545
61939
|
};
|
|
61546
61940
|
var classifyVault = (input) => {
|
|
61547
|
-
const
|
|
61548
|
-
const yieldProfile = VOLATILE_VAULT_OVERRIDES.has(
|
|
61941
|
+
const key3 = `${input.chainId}-${input.address.toLowerCase()}`;
|
|
61942
|
+
const yieldProfile = VOLATILE_VAULT_OVERRIDES.has(key3) || VOLATILE_PROVIDERS.has(input.provider) ? "volatile" : "yield-bearing";
|
|
61549
61943
|
const denomination = isStablecoinSymbol(input.underlyingSymbol) ? "stable" : "volatile";
|
|
61550
61944
|
return { yieldProfile, denomination };
|
|
61551
61945
|
};
|
|
@@ -62093,10 +62487,10 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
|
|
|
62093
62487
|
const market = m.marketToken;
|
|
62094
62488
|
const long = m.longToken;
|
|
62095
62489
|
const short = m.shortToken;
|
|
62096
|
-
const get = (
|
|
62490
|
+
const get = (key3) => ({
|
|
62097
62491
|
address: c.dataStore,
|
|
62098
62492
|
name: "getUint",
|
|
62099
|
-
params: [
|
|
62493
|
+
params: [key3]
|
|
62100
62494
|
});
|
|
62101
62495
|
return [
|
|
62102
62496
|
get(maxPoolAmountKey(market, long)),
|
|
@@ -62347,10 +62741,10 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
|
|
|
62347
62741
|
try {
|
|
62348
62742
|
res = await multicallRetry({
|
|
62349
62743
|
chain: chainId,
|
|
62350
|
-
calls: keys.map((
|
|
62744
|
+
calls: keys.map((key3) => ({
|
|
62351
62745
|
address: c.dataStore,
|
|
62352
62746
|
name: "getUint",
|
|
62353
|
-
params: [
|
|
62747
|
+
params: [key3]
|
|
62354
62748
|
})),
|
|
62355
62749
|
abi: GmxDataStoreUintAbi,
|
|
62356
62750
|
maxRetries: 3,
|
|
@@ -62422,28 +62816,28 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
62422
62816
|
};
|
|
62423
62817
|
for (const m of markets) {
|
|
62424
62818
|
if (!m.isListed) continue;
|
|
62425
|
-
const
|
|
62426
|
-
out[
|
|
62819
|
+
const key3 = m.marketToken.toLowerCase();
|
|
62820
|
+
out[key3] = build(
|
|
62427
62821
|
m.marketToken,
|
|
62428
62822
|
m.name,
|
|
62429
62823
|
"gm",
|
|
62430
62824
|
m.longToken,
|
|
62431
62825
|
m.shortToken,
|
|
62432
62826
|
m.indexToken,
|
|
62433
|
-
apy.markets?.[m.marketToken] ?? apy.markets?.[
|
|
62827
|
+
apy.markets?.[m.marketToken] ?? apy.markets?.[key3]
|
|
62434
62828
|
);
|
|
62435
62829
|
}
|
|
62436
62830
|
for (const g of glvs) {
|
|
62437
62831
|
if (!g.isListed) continue;
|
|
62438
|
-
const
|
|
62439
|
-
out[
|
|
62832
|
+
const key3 = g.glvToken.toLowerCase();
|
|
62833
|
+
out[key3] = build(
|
|
62440
62834
|
g.glvToken,
|
|
62441
62835
|
g.name,
|
|
62442
62836
|
"glv",
|
|
62443
62837
|
g.longToken,
|
|
62444
62838
|
g.shortToken,
|
|
62445
62839
|
void 0,
|
|
62446
|
-
apy.glvs?.[g.glvToken] ?? apy.glvs?.[
|
|
62840
|
+
apy.glvs?.[g.glvToken] ?? apy.glvs?.[key3]
|
|
62447
62841
|
);
|
|
62448
62842
|
}
|
|
62449
62843
|
if (multicallRetry) {
|
|
@@ -62618,15 +63012,15 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
62618
63012
|
const depositKeys = Array.isArray(keyRes[0]) ? keyRes[0] : [];
|
|
62619
63013
|
const withdrawalKeys = Array.isArray(keyRes[1]) ? keyRes[1] : [];
|
|
62620
63014
|
const readerCalls = [
|
|
62621
|
-
...depositKeys.map((
|
|
63015
|
+
...depositKeys.map((key3) => ({
|
|
62622
63016
|
address: c.reader,
|
|
62623
63017
|
name: "getDeposit",
|
|
62624
|
-
params: [c.dataStore,
|
|
63018
|
+
params: [c.dataStore, key3]
|
|
62625
63019
|
})),
|
|
62626
|
-
...withdrawalKeys.map((
|
|
63020
|
+
...withdrawalKeys.map((key3) => ({
|
|
62627
63021
|
address: c.reader,
|
|
62628
63022
|
name: "getWithdrawal",
|
|
62629
|
-
params: [c.dataStore,
|
|
63023
|
+
params: [c.dataStore, key3]
|
|
62630
63024
|
}))
|
|
62631
63025
|
];
|
|
62632
63026
|
const readerRes = readerCalls.length ? await safe(
|
|
@@ -62641,13 +63035,13 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
62641
63035
|
) : [];
|
|
62642
63036
|
const pendingDeposits = [];
|
|
62643
63037
|
const pendingWithdrawals = [];
|
|
62644
|
-
depositKeys.forEach((
|
|
63038
|
+
depositKeys.forEach((key3, i) => {
|
|
62645
63039
|
const d = readerRes[i];
|
|
62646
63040
|
const a = d?.addresses;
|
|
62647
63041
|
if (!a?.market) return;
|
|
62648
63042
|
const n = d.numbers;
|
|
62649
63043
|
pendingDeposits.push({
|
|
62650
|
-
key:
|
|
63044
|
+
key: key3,
|
|
62651
63045
|
kind: "gm",
|
|
62652
63046
|
account: a.account.toLowerCase(),
|
|
62653
63047
|
receiver: a.receiver.toLowerCase(),
|
|
@@ -62661,13 +63055,13 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
62661
63055
|
updatedAtTime: str3(n.updatedAtTime)
|
|
62662
63056
|
});
|
|
62663
63057
|
});
|
|
62664
|
-
withdrawalKeys.forEach((
|
|
63058
|
+
withdrawalKeys.forEach((key3, i) => {
|
|
62665
63059
|
const w = readerRes[depositKeys.length + i];
|
|
62666
63060
|
const a = w?.addresses;
|
|
62667
63061
|
if (!a?.market) return;
|
|
62668
63062
|
const n = w.numbers;
|
|
62669
63063
|
pendingWithdrawals.push({
|
|
62670
|
-
key:
|
|
63064
|
+
key: key3,
|
|
62671
63065
|
kind: "gm",
|
|
62672
63066
|
account: a.account.toLowerCase(),
|
|
62673
63067
|
receiver: a.receiver.toLowerCase(),
|
|
@@ -64802,12 +65196,12 @@ function buildModes(input) {
|
|
|
64802
65196
|
const keys = Object.keys(cfg);
|
|
64803
65197
|
if (keys.length <= 1) return void 0;
|
|
64804
65198
|
const out = [];
|
|
64805
|
-
for (const
|
|
64806
|
-
const c = cfg[
|
|
65199
|
+
for (const key3 of keys) {
|
|
65200
|
+
const c = cfg[key3];
|
|
64807
65201
|
if (!c) continue;
|
|
64808
|
-
const isDefault =
|
|
65202
|
+
const isDefault = key3 === "0";
|
|
64809
65203
|
out.push({
|
|
64810
|
-
modeId:
|
|
65204
|
+
modeId: key3,
|
|
64811
65205
|
label: c.label,
|
|
64812
65206
|
isDefault,
|
|
64813
65207
|
entry: isDefault ? void 0 : "user-selected",
|