@1delta/margin-fetcher 0.0.308 → 0.0.310
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +311 -30
- package/dist/index.js.map +1 -1
- package/dist/lending/public-data/fetchLenderAll.d.ts.map +1 -1
- package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -1
- package/dist/vaults/aave-earn/abis/index.d.ts +2 -0
- package/dist/vaults/aave-earn/abis/index.d.ts.map +1 -0
- package/dist/vaults/aave-earn/abis/shared.d.ts +38 -0
- package/dist/vaults/aave-earn/abis/shared.d.ts.map +1 -0
- package/dist/vaults/aave-earn/api.d.ts +88 -0
- package/dist/vaults/aave-earn/api.d.ts.map +1 -0
- package/dist/vaults/aave-earn/fetchPublic.d.ts +21 -0
- package/dist/vaults/aave-earn/fetchPublic.d.ts.map +1 -0
- package/dist/vaults/aave-earn/index.d.ts +5 -0
- package/dist/vaults/aave-earn/index.d.ts.map +1 -0
- package/dist/vaults/aave-earn/registry.d.ts +48 -0
- package/dist/vaults/aave-earn/registry.d.ts.map +1 -0
- package/dist/vaults/aave-earn/types.d.ts +84 -0
- package/dist/vaults/aave-earn/types.d.ts.map +1 -0
- package/dist/vaults/classification.d.ts.map +1 -1
- package/dist/vaults/fetchVaultsAll.d.ts +7 -1
- package/dist/vaults/fetchVaultsAll.d.ts.map +1 -1
- package/dist/vaults/index.d.ts +1 -0
- package/dist/vaults/index.d.ts.map +1 -1
- package/dist/vaults/lookup.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -11275,6 +11275,7 @@ var MORPHO_LENS = {
|
|
|
11275
11275
|
[Chain.CELO_MAINNET]: "0x4b5458BB47dCBC1a41B31b41e1a8773dE312BE9d",
|
|
11276
11276
|
[Chain.PLUME_MAINNET]: "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201",
|
|
11277
11277
|
[Chain.FLARE_MAINNET]: "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201",
|
|
11278
|
+
[Chain.PHAROS_MAINNET]: "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201",
|
|
11278
11279
|
[Chain.STABLE_MAINNET]: "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201",
|
|
11279
11280
|
[Chain.CORN]: "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201",
|
|
11280
11281
|
[Chain.LISK]: "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201",
|
|
@@ -19580,7 +19581,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19580
19581
|
{ self: market.silo0, other: market.silo1 },
|
|
19581
19582
|
{ self: market.silo1, other: market.silo0 }
|
|
19582
19583
|
];
|
|
19583
|
-
const
|
|
19584
|
+
const toBigInt14 = (v) => {
|
|
19584
19585
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
19585
19586
|
if (typeof v === "bigint") return v;
|
|
19586
19587
|
try {
|
|
@@ -19592,8 +19593,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19592
19593
|
for (let s = 0; s < 2; s++) {
|
|
19593
19594
|
const { self, other } = sides[s];
|
|
19594
19595
|
const slot = s * SILO_V2_CALLS_PER_SIDE;
|
|
19595
|
-
const totalAssetsRaw =
|
|
19596
|
-
const debtAssetsRaw =
|
|
19596
|
+
const totalAssetsRaw = toBigInt14(data[slot]);
|
|
19597
|
+
const debtAssetsRaw = toBigInt14(data[slot + 1]);
|
|
19597
19598
|
const irmConfigRaw = data[slot + 2];
|
|
19598
19599
|
const decimals = self.decimals;
|
|
19599
19600
|
const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
|
|
@@ -19748,7 +19749,7 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19748
19749
|
{ self: market.silo0, other: market.silo1 },
|
|
19749
19750
|
{ self: market.silo1, other: market.silo0 }
|
|
19750
19751
|
];
|
|
19751
|
-
const
|
|
19752
|
+
const toBigInt14 = (v) => {
|
|
19752
19753
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
19753
19754
|
if (typeof v === "bigint") return v;
|
|
19754
19755
|
try {
|
|
@@ -19760,8 +19761,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19760
19761
|
for (let s = 0; s < 2; s++) {
|
|
19761
19762
|
const { self, other } = sides[s];
|
|
19762
19763
|
const slot = s * SILO_V3_CALLS_PER_SIDE;
|
|
19763
|
-
const totalAssetsRaw =
|
|
19764
|
-
const debtAssetsRaw =
|
|
19764
|
+
const totalAssetsRaw = toBigInt14(data[slot]);
|
|
19765
|
+
const debtAssetsRaw = toBigInt14(data[slot + 1]);
|
|
19765
19766
|
const irmConfigRaw = data[slot + 2];
|
|
19766
19767
|
const decimals = self.decimals;
|
|
19767
19768
|
const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
|
|
@@ -21534,6 +21535,8 @@ function lenderApiOnly(lender, chainId) {
|
|
|
21534
21535
|
if (chainId === Chain.TAC_MAINNET) return false;
|
|
21535
21536
|
if (chainId === Chain.FLARE_MAINNET) return false;
|
|
21536
21537
|
if (chainId === Chain.PLUME_MAINNET) return false;
|
|
21538
|
+
if (chainId === Chain.KAIA_MAINNET) return false;
|
|
21539
|
+
if (chainId === Chain.PHAROS_MAINNET) return false;
|
|
21537
21540
|
if (chainId === "4114") return false;
|
|
21538
21541
|
return true;
|
|
21539
21542
|
}
|
|
@@ -45561,6 +45564,267 @@ var fetchLagoonVaults = async (chainId, prices = {}, tokenList = {}) => {
|
|
|
45561
45564
|
return out;
|
|
45562
45565
|
};
|
|
45563
45566
|
|
|
45567
|
+
// src/vaults/aave-earn/abis/shared.ts
|
|
45568
|
+
var Erc20MetaAbi = [
|
|
45569
|
+
{
|
|
45570
|
+
name: "decimals",
|
|
45571
|
+
type: "function",
|
|
45572
|
+
stateMutability: "view",
|
|
45573
|
+
inputs: [],
|
|
45574
|
+
outputs: [{ type: "uint8" }]
|
|
45575
|
+
},
|
|
45576
|
+
{
|
|
45577
|
+
name: "totalSupply",
|
|
45578
|
+
type: "function",
|
|
45579
|
+
stateMutability: "view",
|
|
45580
|
+
inputs: [],
|
|
45581
|
+
outputs: [{ type: "uint256" }]
|
|
45582
|
+
}
|
|
45583
|
+
];
|
|
45584
|
+
var Erc4626ConvertAbi = [
|
|
45585
|
+
{
|
|
45586
|
+
name: "convertToAssets",
|
|
45587
|
+
type: "function",
|
|
45588
|
+
stateMutability: "view",
|
|
45589
|
+
inputs: [{ type: "uint256", name: "shares" }],
|
|
45590
|
+
outputs: [{ type: "uint256", name: "assets" }]
|
|
45591
|
+
}
|
|
45592
|
+
];
|
|
45593
|
+
|
|
45594
|
+
// src/vaults/aave-earn/api.ts
|
|
45595
|
+
var AAVE_EARN_API_URL = "https://api.v3.aave.com/graphql";
|
|
45596
|
+
var PAGE_SIZE3 = "FIFTY";
|
|
45597
|
+
var VAULT_FIELDS = `
|
|
45598
|
+
address
|
|
45599
|
+
shareName
|
|
45600
|
+
shareSymbol
|
|
45601
|
+
owner
|
|
45602
|
+
chainId
|
|
45603
|
+
vaultApr { value formatted }
|
|
45604
|
+
fee { value formatted }
|
|
45605
|
+
balance { amount { raw decimals value } usd usdPerToken }
|
|
45606
|
+
usedReserve {
|
|
45607
|
+
underlyingToken { address symbol name decimals imageUrl }
|
|
45608
|
+
}`;
|
|
45609
|
+
var OWNED_VAULTS_QUERY = `
|
|
45610
|
+
query AaveEarnOwnedVaults($request: VaultsRequest!) {
|
|
45611
|
+
vaults(request: $request) {
|
|
45612
|
+
items {${VAULT_FIELDS}
|
|
45613
|
+
}
|
|
45614
|
+
pageInfo { next }
|
|
45615
|
+
}
|
|
45616
|
+
}`;
|
|
45617
|
+
var SINGLE_VAULT_QUERY = `
|
|
45618
|
+
query AaveEarnVault($request: VaultRequest!) {
|
|
45619
|
+
vault(request: $request) {${VAULT_FIELDS}
|
|
45620
|
+
}
|
|
45621
|
+
}`;
|
|
45622
|
+
async function postGraphql(query3, variables) {
|
|
45623
|
+
const response = await fetch(AAVE_EARN_API_URL, {
|
|
45624
|
+
method: "POST",
|
|
45625
|
+
headers: { "Content-Type": "application/json" },
|
|
45626
|
+
body: JSON.stringify({ query: query3, variables })
|
|
45627
|
+
});
|
|
45628
|
+
if (!response.ok) {
|
|
45629
|
+
throw new Error(
|
|
45630
|
+
`Aave Earn vaults API failed: ${response.status} - ${response.statusText}`
|
|
45631
|
+
);
|
|
45632
|
+
}
|
|
45633
|
+
const json = await response.json();
|
|
45634
|
+
if (json?.errors?.length) {
|
|
45635
|
+
throw new Error(
|
|
45636
|
+
`Aave Earn vaults API error: ${json.errors[0]?.message ?? "unknown"}`
|
|
45637
|
+
);
|
|
45638
|
+
}
|
|
45639
|
+
return json?.data;
|
|
45640
|
+
}
|
|
45641
|
+
async function fetchAaveEarnApiVaults(chainId, targets) {
|
|
45642
|
+
const target = Number(chainId);
|
|
45643
|
+
const byAddress = /* @__PURE__ */ new Map();
|
|
45644
|
+
const keep = (it) => {
|
|
45645
|
+
const addr = it?.address?.toLowerCase();
|
|
45646
|
+
if (!addr || Number(it.chainId) !== target) return;
|
|
45647
|
+
if (!byAddress.has(addr)) byAddress.set(addr, it);
|
|
45648
|
+
};
|
|
45649
|
+
for (const owner of targets.owners) {
|
|
45650
|
+
let cursor = null;
|
|
45651
|
+
for (let page = 0; page < 20; page++) {
|
|
45652
|
+
const request = {
|
|
45653
|
+
criteria: { ownedBy: [owner] },
|
|
45654
|
+
pageSize: PAGE_SIZE3
|
|
45655
|
+
};
|
|
45656
|
+
if (cursor) request.cursor = cursor;
|
|
45657
|
+
const data = await postGraphql(OWNED_VAULTS_QUERY, { request });
|
|
45658
|
+
for (const it of data?.vaults?.items ?? []) keep(it);
|
|
45659
|
+
cursor = data?.vaults?.pageInfo?.next ?? null;
|
|
45660
|
+
if (!cursor) break;
|
|
45661
|
+
}
|
|
45662
|
+
}
|
|
45663
|
+
for (const address of targets.vaults) {
|
|
45664
|
+
const data = await postGraphql(SINGLE_VAULT_QUERY, {
|
|
45665
|
+
request: { by: { address }, chainId: target }
|
|
45666
|
+
});
|
|
45667
|
+
keep(data?.vault);
|
|
45668
|
+
}
|
|
45669
|
+
return [...byAddress.values()];
|
|
45670
|
+
}
|
|
45671
|
+
|
|
45672
|
+
// src/vaults/aave-earn/registry.ts
|
|
45673
|
+
var EMPTY = { curators: [], vaults: [] };
|
|
45674
|
+
var AAVE_EARN_REGISTRY = {
|
|
45675
|
+
// Ethereum. Owners run vaults across multiple chains (CREATE3 factory
|
|
45676
|
+
// `0xa35995bb2fFC5F2b33379C2e95d00C20FbF71E70`), so the same owner is
|
|
45677
|
+
// listed on every chain it deploys to; the fetcher filters `ownedBy`
|
|
45678
|
+
// results down to the queried chain.
|
|
45679
|
+
"1": {
|
|
45680
|
+
curators: [
|
|
45681
|
+
// avWETH / avUSDC and 6 more across chains 1/56/42161.
|
|
45682
|
+
{ owner: "0xfe9BCB07604842cC2F8780B75586F4EF18811668" },
|
|
45683
|
+
// avUSDC (Aave USDC Vault Shares).
|
|
45684
|
+
{ owner: "0x4a7cCbB601d08B0450663b27408e6351727175A4" },
|
|
45685
|
+
// Limassol Vault (EURC).
|
|
45686
|
+
{ owner: "0x888aD9A82a80f0865D872c210191B623edFc5649" }
|
|
45687
|
+
],
|
|
45688
|
+
vaults: []
|
|
45689
|
+
},
|
|
45690
|
+
// BSC
|
|
45691
|
+
"56": {
|
|
45692
|
+
curators: [{ owner: "0xfe9BCB07604842cC2F8780B75586F4EF18811668" }],
|
|
45693
|
+
vaults: []
|
|
45694
|
+
},
|
|
45695
|
+
// Arbitrum
|
|
45696
|
+
"42161": {
|
|
45697
|
+
curators: [{ owner: "0xfe9BCB07604842cC2F8780B75586F4EF18811668" }],
|
|
45698
|
+
vaults: []
|
|
45699
|
+
}
|
|
45700
|
+
};
|
|
45701
|
+
var getAaveEarnRegistry = (chainId) => AAVE_EARN_REGISTRY[String(chainId)] ?? EMPTY;
|
|
45702
|
+
var hasAaveEarnVaults = (chainId) => {
|
|
45703
|
+
const reg = getAaveEarnRegistry(chainId);
|
|
45704
|
+
return reg.curators.length > 0 || reg.vaults.length > 0;
|
|
45705
|
+
};
|
|
45706
|
+
var resolveAaveEarnCuratorName = (chainId, owner) => {
|
|
45707
|
+
if (!owner) return void 0;
|
|
45708
|
+
const target = owner.toLowerCase();
|
|
45709
|
+
return getAaveEarnRegistry(chainId).curators.find(
|
|
45710
|
+
(c) => c.owner.toLowerCase() === target
|
|
45711
|
+
)?.name;
|
|
45712
|
+
};
|
|
45713
|
+
|
|
45714
|
+
// src/vaults/aave-earn/fetchPublic.ts
|
|
45715
|
+
var BRAND2 = "Aave";
|
|
45716
|
+
var toBigInt13 = (v) => {
|
|
45717
|
+
if (v === void 0 || v === null) return void 0;
|
|
45718
|
+
if (typeof v === "bigint") return v;
|
|
45719
|
+
if (typeof v === "number") return BigInt(v);
|
|
45720
|
+
if (typeof v === "string") {
|
|
45721
|
+
if (v === "" || v === "0x" || v === "0X") return void 0;
|
|
45722
|
+
try {
|
|
45723
|
+
return BigInt(v);
|
|
45724
|
+
} catch {
|
|
45725
|
+
return void 0;
|
|
45726
|
+
}
|
|
45727
|
+
}
|
|
45728
|
+
return void 0;
|
|
45729
|
+
};
|
|
45730
|
+
var num2 = (v) => {
|
|
45731
|
+
const n = Number(v);
|
|
45732
|
+
return Number.isFinite(n) ? n : 0;
|
|
45733
|
+
};
|
|
45734
|
+
var fetchAaveEarnVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
45735
|
+
if (!hasAaveEarnVaults(chainId)) return {};
|
|
45736
|
+
const reg = getAaveEarnRegistry(chainId);
|
|
45737
|
+
const items = await fetchAaveEarnApiVaults(chainId, {
|
|
45738
|
+
owners: reg.curators.map((c) => c.owner),
|
|
45739
|
+
vaults: reg.vaults
|
|
45740
|
+
});
|
|
45741
|
+
const usable = items.filter(
|
|
45742
|
+
(v) => !!v?.address && !!v?.usedReserve?.underlyingToken?.address && v.usedReserve.underlyingToken.decimals != null
|
|
45743
|
+
);
|
|
45744
|
+
if (usable.length === 0) return {};
|
|
45745
|
+
const calls = usable.flatMap((v) => {
|
|
45746
|
+
const underlyingDec = v.usedReserve.underlyingToken.decimals;
|
|
45747
|
+
const shareUnit = 10n ** BigInt(underlyingDec);
|
|
45748
|
+
return [
|
|
45749
|
+
{ address: v.address, name: "decimals", params: [] },
|
|
45750
|
+
{ address: v.address, name: "totalSupply", params: [] },
|
|
45751
|
+
{ address: v.address, name: "convertToAssets", params: [shareUnit] }
|
|
45752
|
+
];
|
|
45753
|
+
});
|
|
45754
|
+
const abis = usable.flatMap(() => [
|
|
45755
|
+
Erc20MetaAbi,
|
|
45756
|
+
Erc20MetaAbi,
|
|
45757
|
+
Erc4626ConvertAbi
|
|
45758
|
+
]);
|
|
45759
|
+
const rawResults = calls.length > 0 ? await multicallRetry({
|
|
45760
|
+
chain: chainId,
|
|
45761
|
+
calls,
|
|
45762
|
+
abi: abis
|
|
45763
|
+
}) : [];
|
|
45764
|
+
const out = {};
|
|
45765
|
+
for (let i = 0; i < usable.length; i++) {
|
|
45766
|
+
const v = usable[i];
|
|
45767
|
+
const slice = rawResults.slice(i * 3, i * 3 + 3);
|
|
45768
|
+
const addressLc = v.address.toLowerCase();
|
|
45769
|
+
const token = v.usedReserve.underlyingToken;
|
|
45770
|
+
const underlyingLc = token.address.toLowerCase();
|
|
45771
|
+
const assetDecimals = token.decimals;
|
|
45772
|
+
const shareDecOnChain = toBigInt13(slice[0]);
|
|
45773
|
+
const decimals = shareDecOnChain !== void 0 ? Number(shareDecOnChain) : assetDecimals;
|
|
45774
|
+
const totalSupply = toBigInt13(slice[1]);
|
|
45775
|
+
if (totalSupply === void 0) continue;
|
|
45776
|
+
const shareUnit = 10n ** BigInt(decimals);
|
|
45777
|
+
const underlyingUnit = 10n ** BigInt(assetDecimals);
|
|
45778
|
+
const convertToAssets = toBigInt13(slice[2]) ?? 0n;
|
|
45779
|
+
const convertToShares = convertToAssets > 0n ? shareUnit * underlyingUnit / convertToAssets : 0n;
|
|
45780
|
+
const totalAssetsRaw = v.balance?.amount?.raw ?? "0";
|
|
45781
|
+
const totalAssets = toBigInt13(totalAssetsRaw) ?? 0n;
|
|
45782
|
+
const totalAssetsFormatted = Number(totalAssets) / 10 ** assetDecimals;
|
|
45783
|
+
const asset = tokenList[underlyingLc];
|
|
45784
|
+
const priceUsd = prices[underlyingLc] ?? (v.balance?.usdPerToken != null ? num2(v.balance.usdPerToken) : void 0);
|
|
45785
|
+
const totalAssetsUsd = v.balance?.usd != null ? num2(v.balance.usd) : priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
|
|
45786
|
+
const supplyRate = num2(v.vaultApr?.formatted);
|
|
45787
|
+
const rewardsRate = 0;
|
|
45788
|
+
const depositRate = supplyRate + rewardsRate;
|
|
45789
|
+
const fee = num2(v.fee?.value);
|
|
45790
|
+
const symbol = (v.shareSymbol ?? "").trim();
|
|
45791
|
+
const name = (v.shareName ?? "").trim() || symbol;
|
|
45792
|
+
const curatorName = resolveAaveEarnCuratorName(chainId, v.owner);
|
|
45793
|
+
const displayName = composeVaultDisplayName(
|
|
45794
|
+
BRAND2,
|
|
45795
|
+
curatorName,
|
|
45796
|
+
asset ?? (token.symbol ? {
|
|
45797
|
+
symbol: token.symbol} : void 0),
|
|
45798
|
+
name
|
|
45799
|
+
);
|
|
45800
|
+
out[addressLc] = {
|
|
45801
|
+
address: addressLc,
|
|
45802
|
+
underlying: underlyingLc,
|
|
45803
|
+
symbol,
|
|
45804
|
+
name,
|
|
45805
|
+
displayName,
|
|
45806
|
+
...curatorName ? { curatorName } : {},
|
|
45807
|
+
owner: (v.owner ?? "").toLowerCase(),
|
|
45808
|
+
decimals,
|
|
45809
|
+
assetDecimals,
|
|
45810
|
+
totalAssets: totalAssets.toString(),
|
|
45811
|
+
totalSupply: totalSupply.toString(),
|
|
45812
|
+
convertToAssets: convertToAssets.toString(),
|
|
45813
|
+
convertToShares: convertToShares.toString(),
|
|
45814
|
+
supplyRate,
|
|
45815
|
+
rewardsRate,
|
|
45816
|
+
depositRate,
|
|
45817
|
+
fee,
|
|
45818
|
+
isErc4626: true,
|
|
45819
|
+
asset,
|
|
45820
|
+
priceUsd,
|
|
45821
|
+
totalAssetsFormatted,
|
|
45822
|
+
totalAssetsUsd
|
|
45823
|
+
};
|
|
45824
|
+
}
|
|
45825
|
+
return out;
|
|
45826
|
+
};
|
|
45827
|
+
|
|
45564
45828
|
// src/vaults/upshift/api.ts
|
|
45565
45829
|
var UPSHIFT_VAULTS_URL2 = "https://app.upshift.finance/api/proxy/vaults";
|
|
45566
45830
|
var UPSHIFT_CHAIN_IDS = /* @__PURE__ */ new Set([
|
|
@@ -45598,7 +45862,7 @@ async function fetchUpshiftApiVaults() {
|
|
|
45598
45862
|
}
|
|
45599
45863
|
|
|
45600
45864
|
// src/vaults/upshift/fetchPublic.ts
|
|
45601
|
-
var
|
|
45865
|
+
var num3 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
45602
45866
|
var isEvmAddress = (a) => /^0x[0-9a-fA-F]{40}$/.test(a);
|
|
45603
45867
|
var derivePricePerShare = (totalAssetsRaw, totalSupplyRaw, shareDecimals) => {
|
|
45604
45868
|
try {
|
|
@@ -45625,12 +45889,12 @@ function parseVault8(v, chainId, prices, tokenList) {
|
|
|
45625
45889
|
const totalAssetsFormatted = Number(
|
|
45626
45890
|
parseRawAmount(totalAssetsRaw, assetDecimals)
|
|
45627
45891
|
);
|
|
45628
|
-
const base =
|
|
45629
|
-
const campaign =
|
|
45892
|
+
const base = num3(v.apy?.apy) ?? 0;
|
|
45893
|
+
const campaign = num3(v.apy?.campaignApy);
|
|
45630
45894
|
const supplyRate = apyToAprPercent(base);
|
|
45631
45895
|
const rewardsRate = campaign != null ? apyToAprPercent(campaign) : 0;
|
|
45632
45896
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
45633
|
-
const apiTvlUsd =
|
|
45897
|
+
const apiTvlUsd = num3(v.latest_reported_tvl) ?? 0;
|
|
45634
45898
|
const impliedPriceUsd = totalAssetsFormatted > 0 ? apiTvlUsd / totalAssetsFormatted : 0;
|
|
45635
45899
|
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? impliedPriceUsd;
|
|
45636
45900
|
const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
|
|
@@ -45655,10 +45919,10 @@ function parseVault8(v, chainId, prices, tokenList) {
|
|
|
45655
45919
|
rewardsRate,
|
|
45656
45920
|
depositRate: supplyRate + rewardsRate,
|
|
45657
45921
|
apy: {
|
|
45658
|
-
base:
|
|
45922
|
+
base: num3(v.apy?.apy),
|
|
45659
45923
|
campaign,
|
|
45660
|
-
points:
|
|
45661
|
-
underlying:
|
|
45924
|
+
points: num3(v.apy?.pointsApy),
|
|
45925
|
+
underlying: num3(v.apy?.underlyingApy)
|
|
45662
45926
|
},
|
|
45663
45927
|
isDepositPaused: v.isDepositPaused ?? false,
|
|
45664
45928
|
isWithdrawalPaused: v.isWithdrawalPaused ?? false,
|
|
@@ -45702,11 +45966,11 @@ var YEARN_CHAIN_IDS = /* @__PURE__ */ new Set([
|
|
|
45702
45966
|
]);
|
|
45703
45967
|
var hasYearnVaults = (chainId) => YEARN_CHAIN_IDS.has(String(chainId));
|
|
45704
45968
|
var isYearnV3 = (v) => typeof v?.version === "string" && v.version.startsWith("3.");
|
|
45705
|
-
var
|
|
45969
|
+
var PAGE_SIZE4 = 500;
|
|
45706
45970
|
async function fetchYearnApiVaults(chainId) {
|
|
45707
45971
|
const out = [];
|
|
45708
45972
|
for (let page = 1; page <= 20; page++) {
|
|
45709
|
-
const url = `${YEARN_YDAEMON_BASE}/${chainId}/vaults/all?limit=${
|
|
45973
|
+
const url = `${YEARN_YDAEMON_BASE}/${chainId}/vaults/all?limit=${PAGE_SIZE4}&page=${page}`;
|
|
45710
45974
|
const response = await fetch(url);
|
|
45711
45975
|
if (!response.ok) {
|
|
45712
45976
|
throw new Error(
|
|
@@ -45718,13 +45982,13 @@ async function fetchYearnApiVaults(chainId) {
|
|
|
45718
45982
|
for (const v of items) {
|
|
45719
45983
|
if (isYearnV3(v) && v.endorsed) out.push(v);
|
|
45720
45984
|
}
|
|
45721
|
-
if (items.length <
|
|
45985
|
+
if (items.length < PAGE_SIZE4) break;
|
|
45722
45986
|
}
|
|
45723
45987
|
return out;
|
|
45724
45988
|
}
|
|
45725
45989
|
|
|
45726
45990
|
// src/vaults/yearn/fetchPublic.ts
|
|
45727
|
-
var
|
|
45991
|
+
var BRAND3 = "Yearn";
|
|
45728
45992
|
var ZERO_ADDR = "0x0000000000000000000000000000000000000000";
|
|
45729
45993
|
var YearnLiquidityAbi = [
|
|
45730
45994
|
{
|
|
@@ -45767,9 +46031,9 @@ var asBig = (v) => {
|
|
|
45767
46031
|
return null;
|
|
45768
46032
|
}
|
|
45769
46033
|
};
|
|
45770
|
-
var
|
|
46034
|
+
var num4 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
45771
46035
|
var toPct = (v) => {
|
|
45772
|
-
const n =
|
|
46036
|
+
const n = num4(v);
|
|
45773
46037
|
return n == null ? 0 : n * 100;
|
|
45774
46038
|
};
|
|
45775
46039
|
var deriveTotalSupply = (totalAssetsRaw, pricePerShareRaw, decimals) => {
|
|
@@ -45801,27 +46065,27 @@ function parseVault9(v, chainId, prices, tokenList) {
|
|
|
45801
46065
|
const totalAssetsFormatted = Number(
|
|
45802
46066
|
parseRawAmount(totalAssetsRaw, assetDecimals)
|
|
45803
46067
|
);
|
|
45804
|
-
const realized =
|
|
45805
|
-
const forward =
|
|
46068
|
+
const realized = num4(v.apr?.netAPR);
|
|
46069
|
+
const forward = num4(v.apr?.forwardAPR?.netAPR);
|
|
45806
46070
|
const isForwardApr = realized == null && forward != null;
|
|
45807
46071
|
const supplyRate = toPct(realized ?? forward);
|
|
45808
46072
|
const rewardsRate = toPct(v.apr?.extra?.stakingRewardsAPR);
|
|
45809
46073
|
const fee = toPct(v.apr?.fees?.performance);
|
|
45810
46074
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
45811
|
-
const apiPrice =
|
|
46075
|
+
const apiPrice = num4(v.tvl?.price) ?? 0;
|
|
45812
46076
|
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? apiPrice;
|
|
45813
|
-
const apiTvlUsd =
|
|
46077
|
+
const apiTvlUsd = num4(v.tvl?.tvl) ?? 0;
|
|
45814
46078
|
const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
|
|
45815
46079
|
const name = (v.name ?? "").trim();
|
|
45816
46080
|
const symbol = (v.symbol ?? "").trim();
|
|
45817
|
-
const displayName = composeVaultDisplayName(
|
|
46081
|
+
const displayName = composeVaultDisplayName(BRAND3, BRAND3, assetMeta, name);
|
|
45818
46082
|
return {
|
|
45819
46083
|
address,
|
|
45820
46084
|
underlying: assetAddr,
|
|
45821
46085
|
symbol,
|
|
45822
46086
|
name: name || symbol,
|
|
45823
46087
|
displayName,
|
|
45824
|
-
curatorName:
|
|
46088
|
+
curatorName: BRAND3,
|
|
45825
46089
|
decimals,
|
|
45826
46090
|
assetDecimals,
|
|
45827
46091
|
totalAssets: totalAssetsRaw,
|
|
@@ -46089,7 +46353,10 @@ var SYNC_REDEMPTION_PROVIDERS = /* @__PURE__ */ new Set([
|
|
|
46089
46353
|
"fluid",
|
|
46090
46354
|
"gearbox",
|
|
46091
46355
|
"silo",
|
|
46092
|
-
"yearn"
|
|
46356
|
+
"yearn",
|
|
46357
|
+
// Aave Earn vaults are standard synchronous ERC-4626 wrappers over an
|
|
46358
|
+
// Aave v3 supply position — withdraw up to available reserve liquidity.
|
|
46359
|
+
"aave-earn"
|
|
46093
46360
|
]);
|
|
46094
46361
|
var ASYNC_REDEMPTION_PROVIDERS = /* @__PURE__ */ new Set(["lagoon", "upshift"]);
|
|
46095
46362
|
var classifyRedemption = (provider, v) => {
|
|
@@ -46242,6 +46509,7 @@ var stampVaultClassification = (data, chainId, tokenList = {}) => {
|
|
|
46242
46509
|
stampBag(data.lst, "lst");
|
|
46243
46510
|
stampBag(data.savings, "savings");
|
|
46244
46511
|
stampBag(data.lagoon, "lagoon");
|
|
46512
|
+
stampBag(data["aave-earn"], "aave-earn");
|
|
46245
46513
|
stampBag(data.upshift, "upshift");
|
|
46246
46514
|
stampBag(data.yearn, "yearn");
|
|
46247
46515
|
stampBag(data.hypercore, "hypercore", false);
|
|
@@ -47063,7 +47331,7 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
|
|
|
47063
47331
|
// src/vaults/gmx/fetchPublic.ts
|
|
47064
47332
|
var GMX_TOKEN_DECIMALS = 18;
|
|
47065
47333
|
var DEFAULT_PERIOD = "90d";
|
|
47066
|
-
var
|
|
47334
|
+
var num5 = (n) => typeof n === "number" && Number.isFinite(n) ? n : 0;
|
|
47067
47335
|
var minDefined = (a, b) => a == null ? b : b == null ? a : Math.min(a, b);
|
|
47068
47336
|
var glvMarketRoomUsd = (cap, priceUsd) => {
|
|
47069
47337
|
const currentUsd = Number(cap.balanceAmount) / 1e18 * priceUsd;
|
|
@@ -47097,9 +47365,9 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
47097
47365
|
indexToken: indexToken ? indexToken.toLowerCase() : void 0,
|
|
47098
47366
|
longSymbol,
|
|
47099
47367
|
shortSymbol,
|
|
47100
|
-
apy:
|
|
47101
|
-
baseApy:
|
|
47102
|
-
bonusApr:
|
|
47368
|
+
apy: num5(entry?.apy),
|
|
47369
|
+
baseApy: num5(entry?.baseApy),
|
|
47370
|
+
bonusApr: num5(entry?.bonusApr),
|
|
47103
47371
|
yieldProfile: "volatile",
|
|
47104
47372
|
denomination: denominationFor(longSymbol, shortSymbol)
|
|
47105
47373
|
};
|
|
@@ -47523,6 +47791,7 @@ function buildVaultLookup(data) {
|
|
|
47523
47791
|
addEntries(data.lst, "lst");
|
|
47524
47792
|
addEntries(data.savings, "savings");
|
|
47525
47793
|
addEntries(data.lagoon, "lagoon");
|
|
47794
|
+
addEntries(data["aave-earn"], "aave-earn");
|
|
47526
47795
|
addEntries(data.upshift, "upshift");
|
|
47527
47796
|
addEntries(data.yearn, "yearn");
|
|
47528
47797
|
return map;
|
|
@@ -47646,6 +47915,18 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
47646
47915
|
})
|
|
47647
47916
|
);
|
|
47648
47917
|
}
|
|
47918
|
+
if (requested.has("aave-earn")) {
|
|
47919
|
+
tasks.push(
|
|
47920
|
+
fetchAaveEarnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
47921
|
+
out["aave-earn"] = res;
|
|
47922
|
+
}).catch((e) => {
|
|
47923
|
+
warn4(
|
|
47924
|
+
`[vaults] aave-earn fetch failed for chain ${chainId}:`,
|
|
47925
|
+
e?.message ?? e
|
|
47926
|
+
);
|
|
47927
|
+
})
|
|
47928
|
+
);
|
|
47929
|
+
}
|
|
47649
47930
|
if (requested.has("upshift")) {
|
|
47650
47931
|
tasks.push(
|
|
47651
47932
|
fetchUpshiftVaults(chainId, prices, tokenList).then((res) => {
|