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