@1delta/margin-fetcher 0.0.308 → 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 +309 -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 +3 -3
package/dist/index.js
CHANGED
|
@@ -19580,7 +19580,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19580
19580
|
{ self: market.silo0, other: market.silo1 },
|
|
19581
19581
|
{ self: market.silo1, other: market.silo0 }
|
|
19582
19582
|
];
|
|
19583
|
-
const
|
|
19583
|
+
const toBigInt14 = (v) => {
|
|
19584
19584
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
19585
19585
|
if (typeof v === "bigint") return v;
|
|
19586
19586
|
try {
|
|
@@ -19592,8 +19592,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19592
19592
|
for (let s = 0; s < 2; s++) {
|
|
19593
19593
|
const { self, other } = sides[s];
|
|
19594
19594
|
const slot = s * SILO_V2_CALLS_PER_SIDE;
|
|
19595
|
-
const totalAssetsRaw =
|
|
19596
|
-
const debtAssetsRaw =
|
|
19595
|
+
const totalAssetsRaw = toBigInt14(data[slot]);
|
|
19596
|
+
const debtAssetsRaw = toBigInt14(data[slot + 1]);
|
|
19597
19597
|
const irmConfigRaw = data[slot + 2];
|
|
19598
19598
|
const decimals = self.decimals;
|
|
19599
19599
|
const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
|
|
@@ -19748,7 +19748,7 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19748
19748
|
{ self: market.silo0, other: market.silo1 },
|
|
19749
19749
|
{ self: market.silo1, other: market.silo0 }
|
|
19750
19750
|
];
|
|
19751
|
-
const
|
|
19751
|
+
const toBigInt14 = (v) => {
|
|
19752
19752
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
19753
19753
|
if (typeof v === "bigint") return v;
|
|
19754
19754
|
try {
|
|
@@ -19760,8 +19760,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19760
19760
|
for (let s = 0; s < 2; s++) {
|
|
19761
19761
|
const { self, other } = sides[s];
|
|
19762
19762
|
const slot = s * SILO_V3_CALLS_PER_SIDE;
|
|
19763
|
-
const totalAssetsRaw =
|
|
19764
|
-
const debtAssetsRaw =
|
|
19763
|
+
const totalAssetsRaw = toBigInt14(data[slot]);
|
|
19764
|
+
const debtAssetsRaw = toBigInt14(data[slot + 1]);
|
|
19765
19765
|
const irmConfigRaw = data[slot + 2];
|
|
19766
19766
|
const decimals = self.decimals;
|
|
19767
19767
|
const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
|
|
@@ -21534,6 +21534,7 @@ function lenderApiOnly(lender, chainId) {
|
|
|
21534
21534
|
if (chainId === Chain.TAC_MAINNET) return false;
|
|
21535
21535
|
if (chainId === Chain.FLARE_MAINNET) return false;
|
|
21536
21536
|
if (chainId === Chain.PLUME_MAINNET) return false;
|
|
21537
|
+
if (chainId === Chain.KAIA_MAINNET) return false;
|
|
21537
21538
|
if (chainId === "4114") return false;
|
|
21538
21539
|
return true;
|
|
21539
21540
|
}
|
|
@@ -45561,6 +45562,267 @@ var fetchLagoonVaults = async (chainId, prices = {}, tokenList = {}) => {
|
|
|
45561
45562
|
return out;
|
|
45562
45563
|
};
|
|
45563
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
|
+
|
|
45564
45826
|
// src/vaults/upshift/api.ts
|
|
45565
45827
|
var UPSHIFT_VAULTS_URL2 = "https://app.upshift.finance/api/proxy/vaults";
|
|
45566
45828
|
var UPSHIFT_CHAIN_IDS = /* @__PURE__ */ new Set([
|
|
@@ -45598,7 +45860,7 @@ async function fetchUpshiftApiVaults() {
|
|
|
45598
45860
|
}
|
|
45599
45861
|
|
|
45600
45862
|
// src/vaults/upshift/fetchPublic.ts
|
|
45601
|
-
var
|
|
45863
|
+
var num3 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
45602
45864
|
var isEvmAddress = (a) => /^0x[0-9a-fA-F]{40}$/.test(a);
|
|
45603
45865
|
var derivePricePerShare = (totalAssetsRaw, totalSupplyRaw, shareDecimals) => {
|
|
45604
45866
|
try {
|
|
@@ -45625,12 +45887,12 @@ function parseVault8(v, chainId, prices, tokenList) {
|
|
|
45625
45887
|
const totalAssetsFormatted = Number(
|
|
45626
45888
|
parseRawAmount(totalAssetsRaw, assetDecimals)
|
|
45627
45889
|
);
|
|
45628
|
-
const base =
|
|
45629
|
-
const campaign =
|
|
45890
|
+
const base = num3(v.apy?.apy) ?? 0;
|
|
45891
|
+
const campaign = num3(v.apy?.campaignApy);
|
|
45630
45892
|
const supplyRate = apyToAprPercent(base);
|
|
45631
45893
|
const rewardsRate = campaign != null ? apyToAprPercent(campaign) : 0;
|
|
45632
45894
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
45633
|
-
const apiTvlUsd =
|
|
45895
|
+
const apiTvlUsd = num3(v.latest_reported_tvl) ?? 0;
|
|
45634
45896
|
const impliedPriceUsd = totalAssetsFormatted > 0 ? apiTvlUsd / totalAssetsFormatted : 0;
|
|
45635
45897
|
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? impliedPriceUsd;
|
|
45636
45898
|
const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
|
|
@@ -45655,10 +45917,10 @@ function parseVault8(v, chainId, prices, tokenList) {
|
|
|
45655
45917
|
rewardsRate,
|
|
45656
45918
|
depositRate: supplyRate + rewardsRate,
|
|
45657
45919
|
apy: {
|
|
45658
|
-
base:
|
|
45920
|
+
base: num3(v.apy?.apy),
|
|
45659
45921
|
campaign,
|
|
45660
|
-
points:
|
|
45661
|
-
underlying:
|
|
45922
|
+
points: num3(v.apy?.pointsApy),
|
|
45923
|
+
underlying: num3(v.apy?.underlyingApy)
|
|
45662
45924
|
},
|
|
45663
45925
|
isDepositPaused: v.isDepositPaused ?? false,
|
|
45664
45926
|
isWithdrawalPaused: v.isWithdrawalPaused ?? false,
|
|
@@ -45702,11 +45964,11 @@ var YEARN_CHAIN_IDS = /* @__PURE__ */ new Set([
|
|
|
45702
45964
|
]);
|
|
45703
45965
|
var hasYearnVaults = (chainId) => YEARN_CHAIN_IDS.has(String(chainId));
|
|
45704
45966
|
var isYearnV3 = (v) => typeof v?.version === "string" && v.version.startsWith("3.");
|
|
45705
|
-
var
|
|
45967
|
+
var PAGE_SIZE4 = 500;
|
|
45706
45968
|
async function fetchYearnApiVaults(chainId) {
|
|
45707
45969
|
const out = [];
|
|
45708
45970
|
for (let page = 1; page <= 20; page++) {
|
|
45709
|
-
const url = `${YEARN_YDAEMON_BASE}/${chainId}/vaults/all?limit=${
|
|
45971
|
+
const url = `${YEARN_YDAEMON_BASE}/${chainId}/vaults/all?limit=${PAGE_SIZE4}&page=${page}`;
|
|
45710
45972
|
const response = await fetch(url);
|
|
45711
45973
|
if (!response.ok) {
|
|
45712
45974
|
throw new Error(
|
|
@@ -45718,13 +45980,13 @@ async function fetchYearnApiVaults(chainId) {
|
|
|
45718
45980
|
for (const v of items) {
|
|
45719
45981
|
if (isYearnV3(v) && v.endorsed) out.push(v);
|
|
45720
45982
|
}
|
|
45721
|
-
if (items.length <
|
|
45983
|
+
if (items.length < PAGE_SIZE4) break;
|
|
45722
45984
|
}
|
|
45723
45985
|
return out;
|
|
45724
45986
|
}
|
|
45725
45987
|
|
|
45726
45988
|
// src/vaults/yearn/fetchPublic.ts
|
|
45727
|
-
var
|
|
45989
|
+
var BRAND3 = "Yearn";
|
|
45728
45990
|
var ZERO_ADDR = "0x0000000000000000000000000000000000000000";
|
|
45729
45991
|
var YearnLiquidityAbi = [
|
|
45730
45992
|
{
|
|
@@ -45767,9 +46029,9 @@ var asBig = (v) => {
|
|
|
45767
46029
|
return null;
|
|
45768
46030
|
}
|
|
45769
46031
|
};
|
|
45770
|
-
var
|
|
46032
|
+
var num4 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
45771
46033
|
var toPct = (v) => {
|
|
45772
|
-
const n =
|
|
46034
|
+
const n = num4(v);
|
|
45773
46035
|
return n == null ? 0 : n * 100;
|
|
45774
46036
|
};
|
|
45775
46037
|
var deriveTotalSupply = (totalAssetsRaw, pricePerShareRaw, decimals) => {
|
|
@@ -45801,27 +46063,27 @@ function parseVault9(v, chainId, prices, tokenList) {
|
|
|
45801
46063
|
const totalAssetsFormatted = Number(
|
|
45802
46064
|
parseRawAmount(totalAssetsRaw, assetDecimals)
|
|
45803
46065
|
);
|
|
45804
|
-
const realized =
|
|
45805
|
-
const forward =
|
|
46066
|
+
const realized = num4(v.apr?.netAPR);
|
|
46067
|
+
const forward = num4(v.apr?.forwardAPR?.netAPR);
|
|
45806
46068
|
const isForwardApr = realized == null && forward != null;
|
|
45807
46069
|
const supplyRate = toPct(realized ?? forward);
|
|
45808
46070
|
const rewardsRate = toPct(v.apr?.extra?.stakingRewardsAPR);
|
|
45809
46071
|
const fee = toPct(v.apr?.fees?.performance);
|
|
45810
46072
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
45811
|
-
const apiPrice =
|
|
46073
|
+
const apiPrice = num4(v.tvl?.price) ?? 0;
|
|
45812
46074
|
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? apiPrice;
|
|
45813
|
-
const apiTvlUsd =
|
|
46075
|
+
const apiTvlUsd = num4(v.tvl?.tvl) ?? 0;
|
|
45814
46076
|
const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
|
|
45815
46077
|
const name = (v.name ?? "").trim();
|
|
45816
46078
|
const symbol = (v.symbol ?? "").trim();
|
|
45817
|
-
const displayName = composeVaultDisplayName(
|
|
46079
|
+
const displayName = composeVaultDisplayName(BRAND3, BRAND3, assetMeta, name);
|
|
45818
46080
|
return {
|
|
45819
46081
|
address,
|
|
45820
46082
|
underlying: assetAddr,
|
|
45821
46083
|
symbol,
|
|
45822
46084
|
name: name || symbol,
|
|
45823
46085
|
displayName,
|
|
45824
|
-
curatorName:
|
|
46086
|
+
curatorName: BRAND3,
|
|
45825
46087
|
decimals,
|
|
45826
46088
|
assetDecimals,
|
|
45827
46089
|
totalAssets: totalAssetsRaw,
|
|
@@ -46089,7 +46351,10 @@ var SYNC_REDEMPTION_PROVIDERS = /* @__PURE__ */ new Set([
|
|
|
46089
46351
|
"fluid",
|
|
46090
46352
|
"gearbox",
|
|
46091
46353
|
"silo",
|
|
46092
|
-
"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"
|
|
46093
46358
|
]);
|
|
46094
46359
|
var ASYNC_REDEMPTION_PROVIDERS = /* @__PURE__ */ new Set(["lagoon", "upshift"]);
|
|
46095
46360
|
var classifyRedemption = (provider, v) => {
|
|
@@ -46242,6 +46507,7 @@ var stampVaultClassification = (data, chainId, tokenList = {}) => {
|
|
|
46242
46507
|
stampBag(data.lst, "lst");
|
|
46243
46508
|
stampBag(data.savings, "savings");
|
|
46244
46509
|
stampBag(data.lagoon, "lagoon");
|
|
46510
|
+
stampBag(data["aave-earn"], "aave-earn");
|
|
46245
46511
|
stampBag(data.upshift, "upshift");
|
|
46246
46512
|
stampBag(data.yearn, "yearn");
|
|
46247
46513
|
stampBag(data.hypercore, "hypercore", false);
|
|
@@ -47063,7 +47329,7 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
|
|
|
47063
47329
|
// src/vaults/gmx/fetchPublic.ts
|
|
47064
47330
|
var GMX_TOKEN_DECIMALS = 18;
|
|
47065
47331
|
var DEFAULT_PERIOD = "90d";
|
|
47066
|
-
var
|
|
47332
|
+
var num5 = (n) => typeof n === "number" && Number.isFinite(n) ? n : 0;
|
|
47067
47333
|
var minDefined = (a, b) => a == null ? b : b == null ? a : Math.min(a, b);
|
|
47068
47334
|
var glvMarketRoomUsd = (cap, priceUsd) => {
|
|
47069
47335
|
const currentUsd = Number(cap.balanceAmount) / 1e18 * priceUsd;
|
|
@@ -47097,9 +47363,9 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
47097
47363
|
indexToken: indexToken ? indexToken.toLowerCase() : void 0,
|
|
47098
47364
|
longSymbol,
|
|
47099
47365
|
shortSymbol,
|
|
47100
|
-
apy:
|
|
47101
|
-
baseApy:
|
|
47102
|
-
bonusApr:
|
|
47366
|
+
apy: num5(entry?.apy),
|
|
47367
|
+
baseApy: num5(entry?.baseApy),
|
|
47368
|
+
bonusApr: num5(entry?.bonusApr),
|
|
47103
47369
|
yieldProfile: "volatile",
|
|
47104
47370
|
denomination: denominationFor(longSymbol, shortSymbol)
|
|
47105
47371
|
};
|
|
@@ -47523,6 +47789,7 @@ function buildVaultLookup(data) {
|
|
|
47523
47789
|
addEntries(data.lst, "lst");
|
|
47524
47790
|
addEntries(data.savings, "savings");
|
|
47525
47791
|
addEntries(data.lagoon, "lagoon");
|
|
47792
|
+
addEntries(data["aave-earn"], "aave-earn");
|
|
47526
47793
|
addEntries(data.upshift, "upshift");
|
|
47527
47794
|
addEntries(data.yearn, "yearn");
|
|
47528
47795
|
return map;
|
|
@@ -47646,6 +47913,18 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
47646
47913
|
})
|
|
47647
47914
|
);
|
|
47648
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
|
+
}
|
|
47649
47928
|
if (requested.has("upshift")) {
|
|
47650
47929
|
tasks.push(
|
|
47651
47930
|
fetchUpshiftVaults(chainId, prices, tokenList).then((res) => {
|