@1delta/margin-fetcher 0.0.240 → 0.0.244
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/{_esm-2UAQOYNJ.js → _esm-QP3LOJYU.js} +35 -35
- package/dist/_esm-QP3LOJYU.js.map +1 -0
- package/dist/ccip-SQXTDOS7.js +5 -0
- package/dist/{ccip-G7HDSZ4N.js.map → ccip-SQXTDOS7.js.map} +1 -1
- package/dist/{chunk-ZVIJSUIM.js → chunk-KQ6K6D2V.js} +75 -75
- package/dist/chunk-KQ6K6D2V.js.map +1 -0
- package/dist/index.js +572 -28
- package/dist/index.js.map +1 -1
- package/dist/lending/public-data/fetchLender.d.ts.map +1 -1
- package/dist/lending/public-data/gearbox/index.d.ts +3 -0
- package/dist/lending/public-data/gearbox/index.d.ts.map +1 -0
- package/dist/lending/public-data/gearbox/publicCallBuild.d.ts +17 -0
- package/dist/lending/public-data/gearbox/publicCallBuild.d.ts.map +1 -0
- package/dist/lending/public-data/gearbox/publicCallParse.d.ts +27 -0
- package/dist/lending/public-data/gearbox/publicCallParse.d.ts.map +1 -0
- package/dist/lending/public-data/silo-v2/convertPublic.d.ts.map +1 -1
- package/dist/lending/public-data/silo-v2/fetchPublic.d.ts +3 -0
- package/dist/lending/public-data/silo-v2/fetchPublic.d.ts.map +1 -1
- package/dist/lending/public-data/silo-v3/convertPublic.d.ts.map +1 -1
- package/dist/lending/user-data/abis.d.ts.map +1 -1
- package/dist/lending/user-data/fetch-balances/parse.d.ts.map +1 -1
- package/dist/lending/user-data/fetch-balances/prepare.d.ts.map +1 -1
- package/dist/lending/user-data/gearbox/index.d.ts +3 -0
- package/dist/lending/user-data/gearbox/index.d.ts.map +1 -0
- package/dist/lending/user-data/gearbox/userCallBuild.d.ts +19 -0
- package/dist/lending/user-data/gearbox/userCallBuild.d.ts.map +1 -0
- package/dist/lending/user-data/gearbox/userCallParse.d.ts +25 -0
- package/dist/lending/user-data/gearbox/userCallParse.d.ts.map +1 -0
- package/dist/prices/oracle-prices/fetchOraclePrices.d.ts.map +1 -1
- package/dist/prices/oracle-prices/fetchers/gearbox.d.ts +601 -0
- package/dist/prices/oracle-prices/fetchers/gearbox.d.ts.map +1 -0
- package/dist/prices/oracle-prices/fetchers/index.d.ts +1 -0
- package/dist/prices/oracle-prices/fetchers/index.d.ts.map +1 -1
- package/dist/prices/oracle-prices/fetchers/morpho.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/marketName.d.ts.map +1 -1
- package/dist/vaults/gearbox/fetchPublic.d.ts +23 -0
- package/dist/vaults/gearbox/fetchPublic.d.ts.map +1 -0
- package/dist/vaults/gearbox/index.d.ts +5 -0
- package/dist/vaults/gearbox/index.d.ts.map +1 -0
- package/dist/vaults/gearbox/publicCallBuild.d.ts +14 -0
- package/dist/vaults/gearbox/publicCallBuild.d.ts.map +1 -0
- package/dist/vaults/gearbox/publicCallParse.d.ts +13 -0
- package/dist/vaults/gearbox/publicCallParse.d.ts.map +1 -0
- package/dist/vaults/gearbox/types.d.ts +61 -0
- package/dist/vaults/gearbox/types.d.ts.map +1 -0
- package/dist/vaults/index.d.ts +1 -0
- package/dist/vaults/index.d.ts.map +1 -1
- package/dist/yields/intrinsic/fetchers/stS.d.ts +3 -0
- package/dist/yields/intrinsic/fetchers/stS.d.ts.map +1 -0
- package/dist/yields/intrinsic/index.d.ts.map +1 -1
- package/package.json +6 -6
- package/dist/_esm-2UAQOYNJ.js.map +0 -1
- package/dist/ccip-G7HDSZ4N.js +0 -5
- package/dist/chunk-ZVIJSUIM.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { parseAbi, formatEther, BaseError, encodeFunctionData, formatUnits, decodeFunctionResult, decodeAbiParameters, AbiEncodingLengthMismatchError, concatHex, isAddress, InvalidAddressError, pad, stringToHex, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-
|
|
1
|
+
import { parseAbi, formatEther, BaseError, encodeFunctionData, formatUnits, decodeFunctionResult, decodeAbiParameters, AbiEncodingLengthMismatchError, concatHex, isAddress, InvalidAddressError, pad, stringToHex, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-KQ6K6D2V.js';
|
|
2
2
|
import './chunk-BYTNVMX7.js';
|
|
3
3
|
import './chunk-PR4QN5HX.js';
|
|
4
|
-
import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isEulerType, isFluid, isYLDR, isCompoundV3Type, isLista, isTectonicType, isBenqiType } from '@1delta/lender-registry';
|
|
4
|
+
import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isEulerType, isFluid, isGearboxV3, isYLDR, isCompoundV3Type, isLista, isTectonicType, isBenqiType } from '@1delta/lender-registry';
|
|
5
5
|
export { isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
|
|
6
6
|
import lodash from 'lodash';
|
|
7
7
|
import { getEvmChain, getEvmClient, getEvmClientUniversal, multicallRetryUniversal } from '@1delta/providers';
|
|
8
|
-
import { FluidLendingResolverAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, FluidVaultResolverAbi, MorphoBlueAbi } from '@1delta/abis';
|
|
8
|
+
import { FluidLendingResolverAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, FluidVaultResolverAbi, GearboxDataCompressorV3Abi, MorphoBlueAbi } from '@1delta/abis';
|
|
9
9
|
export { MorphoLensAbi } from '@1delta/abis';
|
|
10
10
|
import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, InitMarginAddresses } from '@1delta/calldata-sdk';
|
|
11
11
|
import { BALANCER_V2_FORKS, BALANCER_V3_FORKS, UNISWAP_V4_FORKS, isFlashLoanSourceExcluded, FLASH_LOAN_IDS } from '@1delta/dex-registry';
|
|
@@ -6283,7 +6283,8 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
|
|
|
6283
6283
|
siloMarketsV3: {},
|
|
6284
6284
|
siloPeripheralsV3: {},
|
|
6285
6285
|
fluidResolvers: {},
|
|
6286
|
-
fluidVaults: {}
|
|
6286
|
+
fluidVaults: {},
|
|
6287
|
+
gearboxResolvers: {}
|
|
6287
6288
|
};
|
|
6288
6289
|
function getGlobalData2() {
|
|
6289
6290
|
return globalThis[GLOBAL_LENDER_DATA_KEY];
|
|
@@ -6312,6 +6313,7 @@ var aaveV4Oracles = () => getGlobalData2()?.aaveV4Oracles;
|
|
|
6312
6313
|
var siloMarkets = () => getGlobalData2()?.siloMarkets;
|
|
6313
6314
|
var siloMarketsV3 = () => getGlobalData2()?.siloMarketsV3;
|
|
6314
6315
|
var fluidResolvers = () => getGlobalData2()?.fluidResolvers;
|
|
6316
|
+
var gearboxResolvers = () => getGlobalData2()?.gearboxResolvers;
|
|
6315
6317
|
function aaveV4SpokeLenderKey(spoke) {
|
|
6316
6318
|
if (!spoke || !spoke.startsWith("0x") || spoke.length !== 42) {
|
|
6317
6319
|
throw new Error(`aaveV4SpokeLenderKey: invalid spoke address ${spoke}`);
|
|
@@ -6363,6 +6365,14 @@ function getSiloV3MarketEntry(chainId, lenderKey) {
|
|
|
6363
6365
|
(m) => m.siloConfig.toLowerCase() === parsed.siloConfigAddrLower
|
|
6364
6366
|
);
|
|
6365
6367
|
}
|
|
6368
|
+
function gearboxV3LenderKey(creditManager) {
|
|
6369
|
+
if (!creditManager || !creditManager.startsWith("0x") || creditManager.length !== 42) {
|
|
6370
|
+
throw new Error(
|
|
6371
|
+
`gearboxV3LenderKey: invalid creditManager address ${creditManager}`
|
|
6372
|
+
);
|
|
6373
|
+
}
|
|
6374
|
+
return `GEARBOX_V3_${creditManager.slice(2).toUpperCase()}`;
|
|
6375
|
+
}
|
|
6366
6376
|
var getListUrl = (chainId) => `https://raw.githubusercontent.com/1delta-DAO/token-lists/main/${chainId}.json`;
|
|
6367
6377
|
async function fetchTokenList(chainId) {
|
|
6368
6378
|
const data = await fetch(getListUrl(chainId));
|
|
@@ -6407,6 +6417,7 @@ var LENDER_SHORT_NAMES = {
|
|
|
6407
6417
|
[Lender.EULER_V2]: "Euler V2",
|
|
6408
6418
|
[Lender.FLUID]: "Fluid",
|
|
6409
6419
|
[Lender.FLUX_FINANCE]: "Flux",
|
|
6420
|
+
[Lender.GEARBOX_V3]: "Gearbox V3",
|
|
6410
6421
|
[Lender.GRANARY]: "Granary",
|
|
6411
6422
|
[Lender.HANA]: "Hana",
|
|
6412
6423
|
[Lender.INIT]: "Init",
|
|
@@ -6416,7 +6427,7 @@ var LENDER_SHORT_NAMES = {
|
|
|
6416
6427
|
[Lender.MERIDIAN]: "Meridian"
|
|
6417
6428
|
};
|
|
6418
6429
|
function formatUnderscoreString(input) {
|
|
6419
|
-
const _in = input.replace("MORPHO_BLUE", "MB").replace(/^FLUID_/, "Fluid ");
|
|
6430
|
+
const _in = input.replace("MORPHO_BLUE", "MB").replace(/^FLUID_/, "Fluid ").replace(/^GEARBOX_V3_/, "Gearbox V3 ");
|
|
6420
6431
|
return _in.split("_").map((word, index) => {
|
|
6421
6432
|
if (index === 0) {
|
|
6422
6433
|
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
|
@@ -6426,6 +6437,7 @@ function formatUnderscoreString(input) {
|
|
|
6426
6437
|
}
|
|
6427
6438
|
function lenderShortName(lender) {
|
|
6428
6439
|
if (lender?.startsWith("FLUID")) return "Fluid";
|
|
6440
|
+
if (lender?.startsWith("GEARBOX_V3")) return "Gearbox V3";
|
|
6429
6441
|
return LENDER_SHORT_NAMES[lender] ?? formatUnderscoreString(lender);
|
|
6430
6442
|
}
|
|
6431
6443
|
|
|
@@ -7610,6 +7622,9 @@ var getLendersForChain = (c) => {
|
|
|
7610
7622
|
if (fluidResolvers()?.[c]) {
|
|
7611
7623
|
lenders.push(Lender.FLUID);
|
|
7612
7624
|
}
|
|
7625
|
+
if (gearboxResolvers()?.[c]) {
|
|
7626
|
+
lenders.push(Lender.GEARBOX_V3);
|
|
7627
|
+
}
|
|
7613
7628
|
return lenders;
|
|
7614
7629
|
};
|
|
7615
7630
|
var filterLendersByProtocol = (allLenders, protocolList) => {
|
|
@@ -7619,8 +7634,9 @@ var filterLendersByProtocol = (allLenders, protocolList) => {
|
|
|
7619
7634
|
const hasMorpho = protocolList.includes(Lender.MORPHO_BLUE);
|
|
7620
7635
|
const hasMoolah = protocolList.includes(Lender.LISTA_DAO);
|
|
7621
7636
|
const hasFluid = protocolList.includes(Lender.FLUID);
|
|
7637
|
+
const hasGearboxV3 = protocolList.includes(Lender.GEARBOX_V3);
|
|
7622
7638
|
return allLenders.filter(
|
|
7623
|
-
(lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID")
|
|
7639
|
+
(lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID") || hasGearboxV3 && lender?.startsWith("GEARBOX_V3")
|
|
7624
7640
|
);
|
|
7625
7641
|
};
|
|
7626
7642
|
var getAavesForChain = () => {
|
|
@@ -7997,7 +8013,7 @@ var buildCompoundV3StyleLenderReserveCall = (chainId, lender) => {
|
|
|
7997
8013
|
return calls;
|
|
7998
8014
|
};
|
|
7999
8015
|
|
|
8000
|
-
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@
|
|
8016
|
+
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/utils/abi/encodePacked.js
|
|
8001
8017
|
function encodePacked(types, values) {
|
|
8002
8018
|
if (types.length !== values.length)
|
|
8003
8019
|
throw new AbiEncodingLengthMismatchError({
|
|
@@ -8060,7 +8076,7 @@ function encode(type, value, isArray2 = false) {
|
|
|
8060
8076
|
throw new UnsupportedPackedAbiType(type);
|
|
8061
8077
|
}
|
|
8062
8078
|
|
|
8063
|
-
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@
|
|
8079
|
+
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/errors/unit.js
|
|
8064
8080
|
var InvalidDecimalNumberError = class extends BaseError {
|
|
8065
8081
|
constructor({ value }) {
|
|
8066
8082
|
super(`Number \`${value}\` is not a valid decimal number.`, {
|
|
@@ -8069,7 +8085,7 @@ var InvalidDecimalNumberError = class extends BaseError {
|
|
|
8069
8085
|
}
|
|
8070
8086
|
};
|
|
8071
8087
|
|
|
8072
|
-
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@
|
|
8088
|
+
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/utils/unit/parseUnits.js
|
|
8073
8089
|
function parseUnits(value, decimals) {
|
|
8074
8090
|
if (!/^(-?)([0-9]*)\.?([0-9]*)$/.test(value))
|
|
8075
8091
|
throw new InvalidDecimalNumberError({ value });
|
|
@@ -8104,7 +8120,7 @@ function parseUnits(value, decimals) {
|
|
|
8104
8120
|
return BigInt(`${negative ? "-" : ""}${integer}${fraction}`);
|
|
8105
8121
|
}
|
|
8106
8122
|
|
|
8107
|
-
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@
|
|
8123
|
+
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/constants/address.js
|
|
8108
8124
|
var zeroAddress = "0x0000000000000000000000000000000000000000";
|
|
8109
8125
|
|
|
8110
8126
|
// src/utils/parsing.ts
|
|
@@ -18867,7 +18883,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
18867
18883
|
{ self: market.silo0, other: market.silo1 },
|
|
18868
18884
|
{ self: market.silo1, other: market.silo0 }
|
|
18869
18885
|
];
|
|
18870
|
-
const
|
|
18886
|
+
const toBigInt9 = (v) => {
|
|
18871
18887
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
18872
18888
|
if (typeof v === "bigint") return v;
|
|
18873
18889
|
try {
|
|
@@ -18879,8 +18895,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
18879
18895
|
for (let s = 0; s < 2; s++) {
|
|
18880
18896
|
const { self, other } = sides[s];
|
|
18881
18897
|
const slot = s * SILO_V2_CALLS_PER_SIDE;
|
|
18882
|
-
const totalAssetsRaw =
|
|
18883
|
-
const debtAssetsRaw =
|
|
18898
|
+
const totalAssetsRaw = toBigInt9(data[slot]);
|
|
18899
|
+
const debtAssetsRaw = toBigInt9(data[slot + 1]);
|
|
18884
18900
|
const irmConfigRaw = data[slot + 2];
|
|
18885
18901
|
const decimals = self.decimals;
|
|
18886
18902
|
const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
|
|
@@ -19035,7 +19051,7 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19035
19051
|
{ self: market.silo0, other: market.silo1 },
|
|
19036
19052
|
{ self: market.silo1, other: market.silo0 }
|
|
19037
19053
|
];
|
|
19038
|
-
const
|
|
19054
|
+
const toBigInt9 = (v) => {
|
|
19039
19055
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
19040
19056
|
if (typeof v === "bigint") return v;
|
|
19041
19057
|
try {
|
|
@@ -19047,8 +19063,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19047
19063
|
for (let s = 0; s < 2; s++) {
|
|
19048
19064
|
const { self, other } = sides[s];
|
|
19049
19065
|
const slot = s * SILO_V3_CALLS_PER_SIDE;
|
|
19050
|
-
const totalAssetsRaw =
|
|
19051
|
-
const debtAssetsRaw =
|
|
19066
|
+
const totalAssetsRaw = toBigInt9(data[slot]);
|
|
19067
|
+
const debtAssetsRaw = toBigInt9(data[slot + 1]);
|
|
19052
19068
|
const irmConfigRaw = data[slot + 2];
|
|
19053
19069
|
const decimals = self.decimals;
|
|
19054
19070
|
const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
|
|
@@ -19354,6 +19370,203 @@ function parseVault(vault, chainId, prices, additionalYields, tokenList) {
|
|
|
19354
19370
|
}
|
|
19355
19371
|
};
|
|
19356
19372
|
}
|
|
19373
|
+
|
|
19374
|
+
// src/lending/public-data/gearbox/publicCallBuild.ts
|
|
19375
|
+
var buildGearboxCall = (chainId, _lender) => {
|
|
19376
|
+
const resolvers = gearboxResolvers()?.[chainId];
|
|
19377
|
+
if (!resolvers?.dataCompressor) return [];
|
|
19378
|
+
return [
|
|
19379
|
+
{
|
|
19380
|
+
address: resolvers.dataCompressor,
|
|
19381
|
+
name: "getPoolsV3List",
|
|
19382
|
+
params: []
|
|
19383
|
+
},
|
|
19384
|
+
{
|
|
19385
|
+
address: resolvers.dataCompressor,
|
|
19386
|
+
name: "getCreditManagersV3List",
|
|
19387
|
+
params: []
|
|
19388
|
+
}
|
|
19389
|
+
];
|
|
19390
|
+
};
|
|
19391
|
+
|
|
19392
|
+
// src/lending/public-data/gearbox/publicCallParse.ts
|
|
19393
|
+
var RAY_TO_PERCENT = 1e25;
|
|
19394
|
+
var scaleGearboxRate = (raw) => {
|
|
19395
|
+
if (raw === void 0 || raw === null) return 0;
|
|
19396
|
+
return Number(raw) / RAY_TO_PERCENT;
|
|
19397
|
+
};
|
|
19398
|
+
var getGearboxV3PublicDataConverter = (_lender, chainId, prices, additionalYields, tokenList = {}) => {
|
|
19399
|
+
const expectedNumberOfCalls = 2;
|
|
19400
|
+
return [
|
|
19401
|
+
(data) => {
|
|
19402
|
+
if (data.length !== expectedNumberOfCalls) return void 0;
|
|
19403
|
+
const [poolsData, cmsData] = data;
|
|
19404
|
+
const out = {};
|
|
19405
|
+
const poolByAddr = {};
|
|
19406
|
+
for (const pool of poolsData ?? []) {
|
|
19407
|
+
const addr = (pool.addr ?? "").toString().toLowerCase();
|
|
19408
|
+
if (!addr) continue;
|
|
19409
|
+
poolByAddr[addr] = pool;
|
|
19410
|
+
}
|
|
19411
|
+
for (const cm of cmsData ?? []) {
|
|
19412
|
+
const cmAddr = (cm.addr ?? "").toString().toLowerCase();
|
|
19413
|
+
if (!cmAddr) continue;
|
|
19414
|
+
const poolAddr = (cm.pool ?? "").toString().toLowerCase();
|
|
19415
|
+
const pool = poolByAddr[poolAddr];
|
|
19416
|
+
if (!pool) continue;
|
|
19417
|
+
if (pool.isPaused) continue;
|
|
19418
|
+
const rawPoolUnderlying = (cm.underlying ?? pool.underlying ?? "").toString().toLowerCase();
|
|
19419
|
+
if (!rawPoolUnderlying) continue;
|
|
19420
|
+
const underlying = rawPoolUnderlying;
|
|
19421
|
+
const underlyingMeta = tokenList[underlying];
|
|
19422
|
+
const underlyingDecimals = Number(underlyingMeta?.decimals ?? 18);
|
|
19423
|
+
const supplyRate = scaleGearboxRate(pool.supplyRate);
|
|
19424
|
+
const borrowRate = scaleGearboxRate(
|
|
19425
|
+
cm.baseBorrowRate ?? pool.baseInterestRate
|
|
19426
|
+
);
|
|
19427
|
+
const underlyingPriceKey = toOracleKey(underlyingMeta?.assetGroup) ?? toGenericPriceKey(underlying, chainId);
|
|
19428
|
+
const underlyingPrice = prices[underlyingPriceKey] ?? 0;
|
|
19429
|
+
let lender;
|
|
19430
|
+
try {
|
|
19431
|
+
lender = gearboxV3LenderKey(cmAddr);
|
|
19432
|
+
} catch {
|
|
19433
|
+
continue;
|
|
19434
|
+
}
|
|
19435
|
+
const availableToBorrow = Number(
|
|
19436
|
+
parseRawAmount(
|
|
19437
|
+
cm.availableToBorrow?.toString(),
|
|
19438
|
+
underlyingDecimals
|
|
19439
|
+
)
|
|
19440
|
+
);
|
|
19441
|
+
const totalDebtCm = Number(
|
|
19442
|
+
parseRawAmount(cm.totalDebt?.toString(), underlyingDecimals)
|
|
19443
|
+
);
|
|
19444
|
+
const data2 = {};
|
|
19445
|
+
const loanMarketUid = createMarketUid(chainId, lender, underlying);
|
|
19446
|
+
data2[loanMarketUid] = {
|
|
19447
|
+
marketUid: loanMarketUid,
|
|
19448
|
+
name: "Loan " + (underlyingMeta?.symbol ?? pool.symbol ?? ""),
|
|
19449
|
+
poolId: underlying,
|
|
19450
|
+
underlying,
|
|
19451
|
+
asset: underlyingMeta,
|
|
19452
|
+
totalDeposits: 0,
|
|
19453
|
+
totalDebtStable: 0,
|
|
19454
|
+
totalDebt: totalDebtCm,
|
|
19455
|
+
totalLiquidity: availableToBorrow,
|
|
19456
|
+
borrowLiquidity: availableToBorrow,
|
|
19457
|
+
totalDepositsUSD: 0,
|
|
19458
|
+
totalDebtStableUSD: 0,
|
|
19459
|
+
totalDebtUSD: totalDebtCm * underlyingPrice,
|
|
19460
|
+
totalLiquidityUSD: availableToBorrow * underlyingPrice,
|
|
19461
|
+
borrowLiquidityUSD: availableToBorrow * underlyingPrice,
|
|
19462
|
+
utilization: 0,
|
|
19463
|
+
depositRate: supplyRate,
|
|
19464
|
+
variableBorrowRate: borrowRate,
|
|
19465
|
+
stableBorrowRate: 0,
|
|
19466
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[underlyingPriceKey] ?? 0,
|
|
19467
|
+
rewards: [],
|
|
19468
|
+
decimals: underlyingDecimals,
|
|
19469
|
+
config: {
|
|
19470
|
+
"0": {
|
|
19471
|
+
category: 0,
|
|
19472
|
+
borrowCollateralFactor: 0,
|
|
19473
|
+
collateralFactor: 0,
|
|
19474
|
+
borrowFactor: 1,
|
|
19475
|
+
collateralDisabled: true,
|
|
19476
|
+
debtDisabled: false
|
|
19477
|
+
}
|
|
19478
|
+
},
|
|
19479
|
+
liquidationBonus: 0,
|
|
19480
|
+
collateralActive: false,
|
|
19481
|
+
borrowingEnabled: true,
|
|
19482
|
+
depositsEnabled: false,
|
|
19483
|
+
hasStable: false,
|
|
19484
|
+
isActive: true,
|
|
19485
|
+
isFrozen: false
|
|
19486
|
+
};
|
|
19487
|
+
const collateralTokens = Array.isArray(cm.collateralTokens) ? cm.collateralTokens : [];
|
|
19488
|
+
const liquidationThresholds = Array.isArray(
|
|
19489
|
+
cm.liquidationThresholds
|
|
19490
|
+
) ? cm.liquidationThresholds : [];
|
|
19491
|
+
for (let i = 0; i < collateralTokens.length; i++) {
|
|
19492
|
+
const rawToken = (collateralTokens[i] ?? "").toString().toLowerCase();
|
|
19493
|
+
if (!rawToken) continue;
|
|
19494
|
+
const token = rawToken;
|
|
19495
|
+
const ltRaw = Number(liquidationThresholds[i] ?? 0);
|
|
19496
|
+
const lt = ltRaw / BPS;
|
|
19497
|
+
if (lt <= 0) continue;
|
|
19498
|
+
const ctMeta = tokenList[token];
|
|
19499
|
+
const ctDecimals = Number(ctMeta?.decimals ?? 18);
|
|
19500
|
+
const ctPriceKey = toOracleKey(ctMeta?.assetGroup) ?? toGenericPriceKey(token, chainId);
|
|
19501
|
+
const colMarketUid = createMarketUid(chainId, lender, token);
|
|
19502
|
+
if (colMarketUid === loanMarketUid) continue;
|
|
19503
|
+
data2[colMarketUid] = {
|
|
19504
|
+
marketUid: colMarketUid,
|
|
19505
|
+
name: "Collateral " + (ctMeta?.symbol ?? ""),
|
|
19506
|
+
poolId: token,
|
|
19507
|
+
underlying: token,
|
|
19508
|
+
asset: ctMeta,
|
|
19509
|
+
totalDeposits: 0,
|
|
19510
|
+
totalDebtStable: 0,
|
|
19511
|
+
totalDebt: 0,
|
|
19512
|
+
totalLiquidity: 0,
|
|
19513
|
+
borrowLiquidity: 0,
|
|
19514
|
+
totalDepositsUSD: 0,
|
|
19515
|
+
totalDebtStableUSD: 0,
|
|
19516
|
+
totalDebtUSD: 0,
|
|
19517
|
+
totalLiquidityUSD: 0,
|
|
19518
|
+
borrowLiquidityUSD: 0,
|
|
19519
|
+
utilization: 0,
|
|
19520
|
+
depositRate: 0,
|
|
19521
|
+
variableBorrowRate: 0,
|
|
19522
|
+
stableBorrowRate: 0,
|
|
19523
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[ctPriceKey] ?? 0,
|
|
19524
|
+
rewards: [],
|
|
19525
|
+
decimals: ctDecimals,
|
|
19526
|
+
config: {
|
|
19527
|
+
"0": {
|
|
19528
|
+
category: 0,
|
|
19529
|
+
borrowCollateralFactor: lt,
|
|
19530
|
+
collateralFactor: lt,
|
|
19531
|
+
borrowFactor: 1,
|
|
19532
|
+
collateralDisabled: false,
|
|
19533
|
+
debtDisabled: true
|
|
19534
|
+
}
|
|
19535
|
+
},
|
|
19536
|
+
liquidationBonus: 0,
|
|
19537
|
+
collateralActive: true,
|
|
19538
|
+
borrowingEnabled: false,
|
|
19539
|
+
depositsEnabled: false,
|
|
19540
|
+
hasStable: false,
|
|
19541
|
+
isActive: true,
|
|
19542
|
+
isFrozen: false
|
|
19543
|
+
};
|
|
19544
|
+
}
|
|
19545
|
+
out[lender] = {
|
|
19546
|
+
data: data2,
|
|
19547
|
+
params: {
|
|
19548
|
+
creditManager: {
|
|
19549
|
+
lender,
|
|
19550
|
+
creditManager: cmAddr,
|
|
19551
|
+
creditFacade: (cm.creditFacade ?? "").toString().toLowerCase(),
|
|
19552
|
+
pool: poolAddr,
|
|
19553
|
+
underlying,
|
|
19554
|
+
underlyingDecimals,
|
|
19555
|
+
minDebt: cm.minDebt?.toString() ?? "0",
|
|
19556
|
+
maxDebt: cm.maxDebt?.toString() ?? "0",
|
|
19557
|
+
degenNFT: (cm.degenNFT ?? zeroAddress).toString().toLowerCase(),
|
|
19558
|
+
forbiddenTokenMask: cm.forbiddenTokenMask?.toString() ?? "0",
|
|
19559
|
+
isDegenMode: !!cm.isDegenMode
|
|
19560
|
+
}
|
|
19561
|
+
},
|
|
19562
|
+
chainId
|
|
19563
|
+
};
|
|
19564
|
+
}
|
|
19565
|
+
return out;
|
|
19566
|
+
},
|
|
19567
|
+
expectedNumberOfCalls
|
|
19568
|
+
];
|
|
19569
|
+
};
|
|
19357
19570
|
function getMorphoTypeMarketConverter(lender, chainId, prices, additionalYields, tokenList = {}, marketsOverride) {
|
|
19358
19571
|
if (lender.startsWith("LISTA_DAO"))
|
|
19359
19572
|
return getListaMarketDataConverter(
|
|
@@ -19391,6 +19604,7 @@ function buildLenderCall(chainId, lender) {
|
|
|
19391
19604
|
if (isSiloV2Type(lender)) return buildSiloV2LenderReserveCall(chainId, lender);
|
|
19392
19605
|
if (isSiloV3Type(lender)) return buildSiloV3LenderReserveCall(chainId, lender);
|
|
19393
19606
|
if (isFluid(lender)) return buildFluidCall(chainId);
|
|
19607
|
+
if (isGearboxV3(lender)) return buildGearboxCall(chainId);
|
|
19394
19608
|
return [];
|
|
19395
19609
|
}
|
|
19396
19610
|
function getLenderDataConverter(lender, chainId, prices, additionalYields, tokenList = {}) {
|
|
@@ -19483,6 +19697,14 @@ function getLenderDataConverter(lender, chainId, prices, additionalYields, token
|
|
|
19483
19697
|
additionalYields,
|
|
19484
19698
|
tokenList
|
|
19485
19699
|
);
|
|
19700
|
+
if (isGearboxV3(lender))
|
|
19701
|
+
return getGearboxV3PublicDataConverter(
|
|
19702
|
+
lender,
|
|
19703
|
+
chainId,
|
|
19704
|
+
prices,
|
|
19705
|
+
additionalYields,
|
|
19706
|
+
tokenList
|
|
19707
|
+
);
|
|
19486
19708
|
return [() => null, 0];
|
|
19487
19709
|
}
|
|
19488
19710
|
var getAbi = (lender) => {
|
|
@@ -19509,6 +19731,8 @@ var getAbi = (lender) => {
|
|
|
19509
19731
|
return [...SiloAbi, ...SiloLensAbi, ...InterestRateModelV2Abi];
|
|
19510
19732
|
if (isFluid(lender))
|
|
19511
19733
|
return [...FluidVaultResolverAbi];
|
|
19734
|
+
if (isGearboxV3(lender))
|
|
19735
|
+
return [...GearboxDataCompressorV3Abi];
|
|
19512
19736
|
if (isSumerType(lender)) return [...SumerLensAbi, ...SumerComptrollerAbi];
|
|
19513
19737
|
if (lender === Lender.TAKARA) return [...TakaraMarketStateAbi];
|
|
19514
19738
|
if (isCompoundV2Type(lender)) return VenusLensAbi;
|
|
@@ -19613,6 +19837,9 @@ query GetSilos {
|
|
|
19613
19837
|
borrowedUsd
|
|
19614
19838
|
liquidityUsd
|
|
19615
19839
|
utilization
|
|
19840
|
+
collateralAssetsSupply
|
|
19841
|
+
collateralAssetsSupplyUsd
|
|
19842
|
+
liquidity
|
|
19616
19843
|
solvencyOracleAddress
|
|
19617
19844
|
maxLtvOracleAddress
|
|
19618
19845
|
interestRateModelId
|
|
@@ -19651,6 +19878,9 @@ query GetSilos {
|
|
|
19651
19878
|
borrowedUsd
|
|
19652
19879
|
liquidityUsd
|
|
19653
19880
|
utilization
|
|
19881
|
+
collateralAssetsSupply
|
|
19882
|
+
collateralAssetsSupplyUsd
|
|
19883
|
+
liquidity
|
|
19654
19884
|
solvencyOracleAddress
|
|
19655
19885
|
maxLtvOracleAddress
|
|
19656
19886
|
interestRateModelId
|
|
@@ -19781,18 +20011,18 @@ function convertSiloMarketsToPublicResponse(apiItems, chainId, prices, additiona
|
|
|
19781
20011
|
for (const { api, self, other } of sides) {
|
|
19782
20012
|
const decimals = api.inputToken?.decimals ?? self.decimals;
|
|
19783
20013
|
const tokenAddrLc = (api.inputTokenId ?? self.token).toLowerCase();
|
|
19784
|
-
const totalDeposits = safeNumber(api.supply);
|
|
20014
|
+
const totalDeposits = api.collateralAssetsSupply != null ? safeNumber(api.collateralAssetsSupply) : safeNumber(api.supply);
|
|
19785
20015
|
const totalDebt = safeNumber(api.borrowed);
|
|
19786
|
-
const totalLiquidity = totalDeposits - totalDebt;
|
|
19787
|
-
const utilization = totalDeposits > 0 ? totalDebt / totalDeposits :
|
|
20016
|
+
const totalLiquidity = api.liquidity != null ? safeNumber(api.liquidity) : Math.max(totalDeposits - totalDebt, 0);
|
|
20017
|
+
const utilization = api.utilization != null ? safeNumber(api.utilization) : totalDeposits > 0 ? totalDebt / totalDeposits : 0;
|
|
19788
20018
|
const variableBorrowRatePct = safeNumber(api.borrowRate);
|
|
19789
20019
|
const depositRatePct = safeNumber(api.depositRate);
|
|
19790
20020
|
const assetMeta = tokenList[tokenAddrLc];
|
|
19791
20021
|
const oracleKey = toOracleKey(assetMeta?.assetGroup ?? null) || toGenericPriceKey(tokenAddrLc, chainId);
|
|
19792
20022
|
const fallbackPrice = prices[oracleKey] ?? 0;
|
|
19793
|
-
const totalDepositsUSD = api.supplyUsd != null && api.supplyUsd > 0 ? api.supplyUsd : totalDeposits * fallbackPrice;
|
|
20023
|
+
const totalDepositsUSD = api.collateralAssetsSupplyUsd != null && api.collateralAssetsSupplyUsd > 0 ? api.collateralAssetsSupplyUsd : api.supplyUsd != null && api.supplyUsd > 0 ? api.supplyUsd : totalDeposits * fallbackPrice;
|
|
19794
20024
|
const totalDebtUSD = api.borrowedUsd != null && api.borrowedUsd > 0 ? api.borrowedUsd : totalDebt * fallbackPrice;
|
|
19795
|
-
const totalLiquidityUSD = Math.max(totalDepositsUSD - totalDebtUSD, 0);
|
|
20025
|
+
const totalLiquidityUSD = api.liquidityUsd != null && api.liquidityUsd > 0 ? api.liquidityUsd : Math.max(totalDepositsUSD - totalDebtUSD, 0);
|
|
19796
20026
|
const otherApi = sides[0].api === api ? apiSide1 : apiSide0;
|
|
19797
20027
|
const selfLt = bigintToLtv(api.lt ?? self.lt);
|
|
19798
20028
|
const selfMaxLtv = bigintToLtv(api.maxLtv ?? self.maxLtv);
|
|
@@ -19917,18 +20147,18 @@ function convertSiloV3MarketsToPublicResponse(apiItems, chainId, prices, additio
|
|
|
19917
20147
|
for (const { api, self, other } of sides) {
|
|
19918
20148
|
const decimals = api.inputToken?.decimals ?? self.decimals;
|
|
19919
20149
|
const tokenAddrLc = (api.inputTokenId ?? self.token).toLowerCase();
|
|
19920
|
-
const totalDeposits = safeNumber2(api.supply);
|
|
20150
|
+
const totalDeposits = api.collateralAssetsSupply != null ? safeNumber2(api.collateralAssetsSupply) : safeNumber2(api.supply);
|
|
19921
20151
|
const totalDebt = safeNumber2(api.borrowed);
|
|
19922
|
-
const totalLiquidity = totalDeposits - totalDebt;
|
|
19923
|
-
const utilization = totalDeposits > 0 ? totalDebt / totalDeposits :
|
|
20152
|
+
const totalLiquidity = api.liquidity != null ? safeNumber2(api.liquidity) : Math.max(totalDeposits - totalDebt, 0);
|
|
20153
|
+
const utilization = api.utilization != null ? safeNumber2(api.utilization) : totalDeposits > 0 ? totalDebt / totalDeposits : 0;
|
|
19924
20154
|
const variableBorrowRatePct = safeNumber2(api.borrowRate);
|
|
19925
20155
|
const depositRatePct = safeNumber2(api.depositRate);
|
|
19926
20156
|
const assetMeta = tokenList[tokenAddrLc];
|
|
19927
20157
|
const oracleKey = toOracleKey(assetMeta?.assetGroup ?? null) || toGenericPriceKey(tokenAddrLc, chainId);
|
|
19928
20158
|
const fallbackPrice = prices[oracleKey] ?? 0;
|
|
19929
|
-
const totalDepositsUSD = api.supplyUsd != null && api.supplyUsd > 0 ? api.supplyUsd : totalDeposits * fallbackPrice;
|
|
20159
|
+
const totalDepositsUSD = api.collateralAssetsSupplyUsd != null && api.collateralAssetsSupplyUsd > 0 ? api.collateralAssetsSupplyUsd : api.supplyUsd != null && api.supplyUsd > 0 ? api.supplyUsd : totalDeposits * fallbackPrice;
|
|
19930
20160
|
const totalDebtUSD = api.borrowedUsd != null && api.borrowedUsd > 0 ? api.borrowedUsd : totalDebt * fallbackPrice;
|
|
19931
|
-
const totalLiquidityUSD = Math.max(totalDepositsUSD - totalDebtUSD, 0);
|
|
20161
|
+
const totalLiquidityUSD = api.liquidityUsd != null && api.liquidityUsd > 0 ? api.liquidityUsd : Math.max(totalDepositsUSD - totalDebtUSD, 0);
|
|
19932
20162
|
const otherApi = sides[0].api === api ? apiSide1 : apiSide0;
|
|
19933
20163
|
const selfLt = bigintToLtv2(api.lt ?? self.lt);
|
|
19934
20164
|
const selfMaxLtv = bigintToLtv2(api.maxLtv ?? self.maxLtv);
|
|
@@ -20735,6 +20965,22 @@ var buildFluidUserCall = (chainId, _lender, account) => {
|
|
|
20735
20965
|
];
|
|
20736
20966
|
};
|
|
20737
20967
|
|
|
20968
|
+
// src/lending/user-data/gearbox/userCallBuild.ts
|
|
20969
|
+
var GEARBOX_V3_USER_CALL_COUNT = 1;
|
|
20970
|
+
var buildGearboxV3UserCall = (chainId, _lender, account) => {
|
|
20971
|
+
const resolvers = gearboxResolvers()?.[chainId];
|
|
20972
|
+
if (!resolvers?.dataCompressor) return [];
|
|
20973
|
+
return [
|
|
20974
|
+
{
|
|
20975
|
+
address: resolvers.dataCompressor,
|
|
20976
|
+
name: "getCreditAccountsByBorrower",
|
|
20977
|
+
// Second arg is `PriceOnDemand[] priceUpdates` — empty means
|
|
20978
|
+
// "use the current on-chain feed quotes for healthFactor".
|
|
20979
|
+
params: [account, []]
|
|
20980
|
+
}
|
|
20981
|
+
];
|
|
20982
|
+
};
|
|
20983
|
+
|
|
20738
20984
|
// src/lending/user-data/fetch-balances/prepare.ts
|
|
20739
20985
|
async function buildUserCall(chainId, lender, account, params) {
|
|
20740
20986
|
if (isAaveV4Type(lender)) return buildAaveV4UserCall(chainId, lender, account);
|
|
@@ -20755,6 +21001,8 @@ async function buildUserCall(chainId, lender, account, params) {
|
|
|
20755
21001
|
return buildCompoundV2UserCall(chainId, lender, account);
|
|
20756
21002
|
if (isFluid(lender))
|
|
20757
21003
|
return buildFluidUserCall(chainId, lender, account);
|
|
21004
|
+
if (isGearboxV3(lender))
|
|
21005
|
+
return buildGearboxV3UserCall(chainId, lender, account);
|
|
20758
21006
|
return [];
|
|
20759
21007
|
}
|
|
20760
21008
|
function organizeUserQueries(queries) {
|
|
@@ -22618,6 +22866,169 @@ var getFluidUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
22618
22866
|
];
|
|
22619
22867
|
};
|
|
22620
22868
|
|
|
22869
|
+
// src/lending/user-data/gearbox/userCallParse.ts
|
|
22870
|
+
function toBigInt8(v) {
|
|
22871
|
+
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
22872
|
+
if (typeof v === "bigint") return v;
|
|
22873
|
+
try {
|
|
22874
|
+
return BigInt(v);
|
|
22875
|
+
} catch {
|
|
22876
|
+
return 0n;
|
|
22877
|
+
}
|
|
22878
|
+
}
|
|
22879
|
+
var getGearboxV3UserDataConverter = (_lender, chainId, account, meta) => {
|
|
22880
|
+
return [
|
|
22881
|
+
(data) => {
|
|
22882
|
+
if (!data || data.length !== GEARBOX_V3_USER_CALL_COUNT) return void 0;
|
|
22883
|
+
const creditAccounts = data[0];
|
|
22884
|
+
if (!Array.isArray(creditAccounts) || creditAccounts.length === 0)
|
|
22885
|
+
return void 0;
|
|
22886
|
+
const perCM = /* @__PURE__ */ new Map();
|
|
22887
|
+
for (const ca of creditAccounts) {
|
|
22888
|
+
if (!ca?.isSuccessful) continue;
|
|
22889
|
+
const cm = (ca.creditManager ?? "").toString().toLowerCase();
|
|
22890
|
+
if (!cm) continue;
|
|
22891
|
+
if (!perCM.has(cm)) perCM.set(cm, []);
|
|
22892
|
+
perCM.get(cm).push(ca);
|
|
22893
|
+
}
|
|
22894
|
+
if (perCM.size === 0) return void 0;
|
|
22895
|
+
const out = {};
|
|
22896
|
+
for (const [cmAddr, accounts] of perCM) {
|
|
22897
|
+
let lenderKey;
|
|
22898
|
+
try {
|
|
22899
|
+
lenderKey = gearboxV3LenderKey(cmAddr);
|
|
22900
|
+
} catch {
|
|
22901
|
+
continue;
|
|
22902
|
+
}
|
|
22903
|
+
const metaMap = meta?.[lenderKey];
|
|
22904
|
+
if (!metaMap) continue;
|
|
22905
|
+
const firstCa = accounts[0];
|
|
22906
|
+
const rawUnderlying = (firstCa.underlying ?? "").toString().toLowerCase();
|
|
22907
|
+
const underlying = rawUnderlying;
|
|
22908
|
+
const loanMarketUid = createMarketUid(chainId, lenderKey, underlying);
|
|
22909
|
+
const loanMeta = metaMap[loanMarketUid];
|
|
22910
|
+
const loanDec = loanMeta?.asset?.decimals ?? 18;
|
|
22911
|
+
const loanDisplayPrice = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
22912
|
+
const loanOraclePrice = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
22913
|
+
const loanPriceHist = loanMeta?.price?.priceUsd24h ?? loanDisplayPrice;
|
|
22914
|
+
const lendingPositions = {};
|
|
22915
|
+
const modes = {};
|
|
22916
|
+
const histData = {};
|
|
22917
|
+
for (const ca of accounts) {
|
|
22918
|
+
const caAddress = (ca.addr ?? "").toString().toLowerCase();
|
|
22919
|
+
if (!caAddress) continue;
|
|
22920
|
+
const debtRaw = toBigInt8(ca.debt);
|
|
22921
|
+
const balances = Array.isArray(ca.balances) ? ca.balances : [];
|
|
22922
|
+
const hasAnyBalance = balances.some(
|
|
22923
|
+
(b) => toBigInt8(b?.balance) > 0n
|
|
22924
|
+
);
|
|
22925
|
+
if (debtRaw === 0n && !hasAnyBalance) continue;
|
|
22926
|
+
modes[caAddress] = 0;
|
|
22927
|
+
const posData = {};
|
|
22928
|
+
let totalDepositsUSD = 0;
|
|
22929
|
+
for (const bal of balances) {
|
|
22930
|
+
const rawToken = (bal?.token ?? "").toString().toLowerCase();
|
|
22931
|
+
if (!rawToken) continue;
|
|
22932
|
+
const token = rawToken;
|
|
22933
|
+
const balRaw = toBigInt8(bal.balance);
|
|
22934
|
+
if (balRaw === 0n) continue;
|
|
22935
|
+
const colMarketUid = createMarketUid(chainId, lenderKey, token);
|
|
22936
|
+
const colMeta = metaMap[colMarketUid];
|
|
22937
|
+
const colDec = colMeta?.asset?.decimals ?? 18;
|
|
22938
|
+
const colDisplayPrice = colMeta ? getDisplayPrice(colMeta) : 0;
|
|
22939
|
+
const colOraclePrice = colMeta ? getOraclePrice(colMeta) : 0;
|
|
22940
|
+
const depositsStr = parseRawAmount(balRaw.toString(), colDec);
|
|
22941
|
+
const depositsNum = Number(depositsStr);
|
|
22942
|
+
const depositsUSD = depositsNum * colDisplayPrice;
|
|
22943
|
+
const depositsUSDOracle = depositsNum * colOraclePrice;
|
|
22944
|
+
totalDepositsUSD += depositsUSD;
|
|
22945
|
+
if (posData[colMarketUid]) {
|
|
22946
|
+
const existing = posData[colMarketUid];
|
|
22947
|
+
const prevDepositsNum = Number(existing.deposits ?? 0);
|
|
22948
|
+
const combinedDeposits = (prevDepositsNum + depositsNum).toString();
|
|
22949
|
+
posData[colMarketUid] = {
|
|
22950
|
+
...existing,
|
|
22951
|
+
deposits: combinedDeposits,
|
|
22952
|
+
depositsUSD: existing.depositsUSD + depositsUSD,
|
|
22953
|
+
depositsUSDOracle: existing.depositsUSDOracle + depositsUSDOracle,
|
|
22954
|
+
collateralEnabled: existing.collateralEnabled || !!bal?.isQuoted
|
|
22955
|
+
};
|
|
22956
|
+
} else {
|
|
22957
|
+
posData[colMarketUid] = {
|
|
22958
|
+
marketUid: colMarketUid,
|
|
22959
|
+
underlying: token,
|
|
22960
|
+
deposits: depositsStr,
|
|
22961
|
+
debt: "0",
|
|
22962
|
+
debtStable: "0",
|
|
22963
|
+
depositsUSD,
|
|
22964
|
+
debtUSD: 0,
|
|
22965
|
+
debtStableUSD: 0,
|
|
22966
|
+
depositsUSDOracle,
|
|
22967
|
+
debtUSDOracle: 0,
|
|
22968
|
+
debtStableUSDOracle: 0,
|
|
22969
|
+
stableBorrowRate: "0",
|
|
22970
|
+
collateralEnabled: !!bal?.isQuoted,
|
|
22971
|
+
claimableRewards: 0
|
|
22972
|
+
};
|
|
22973
|
+
}
|
|
22974
|
+
}
|
|
22975
|
+
const debtStr = parseRawAmount(debtRaw.toString(), loanDec);
|
|
22976
|
+
const debtNum = Number(debtStr);
|
|
22977
|
+
const debtUSD = debtNum * loanDisplayPrice;
|
|
22978
|
+
const debtUSDOracle = debtNum * loanOraclePrice;
|
|
22979
|
+
if (posData[loanMarketUid]) {
|
|
22980
|
+
const existing = posData[loanMarketUid];
|
|
22981
|
+
posData[loanMarketUid] = {
|
|
22982
|
+
...existing,
|
|
22983
|
+
debt: debtStr,
|
|
22984
|
+
debtUSD,
|
|
22985
|
+
debtUSDOracle
|
|
22986
|
+
};
|
|
22987
|
+
} else {
|
|
22988
|
+
posData[loanMarketUid] = {
|
|
22989
|
+
marketUid: loanMarketUid,
|
|
22990
|
+
underlying,
|
|
22991
|
+
deposits: "0",
|
|
22992
|
+
debt: debtStr,
|
|
22993
|
+
debtStable: "0",
|
|
22994
|
+
depositsUSD: 0,
|
|
22995
|
+
debtUSD,
|
|
22996
|
+
debtStableUSD: 0,
|
|
22997
|
+
depositsUSDOracle: 0,
|
|
22998
|
+
debtUSDOracle,
|
|
22999
|
+
debtStableUSDOracle: 0,
|
|
23000
|
+
stableBorrowRate: "0",
|
|
23001
|
+
collateralEnabled: false,
|
|
23002
|
+
claimableRewards: 0
|
|
23003
|
+
};
|
|
23004
|
+
}
|
|
23005
|
+
histData[caAddress] = {
|
|
23006
|
+
totalDeposits24h: totalDepositsUSD,
|
|
23007
|
+
totalDebt24h: debtNum * loanPriceHist
|
|
23008
|
+
};
|
|
23009
|
+
lendingPositions[caAddress] = posData;
|
|
23010
|
+
}
|
|
23011
|
+
if (Object.keys(lendingPositions).length === 0) continue;
|
|
23012
|
+
const userData = createMultiAccountTypeUserState(
|
|
23013
|
+
{
|
|
23014
|
+
chainId,
|
|
23015
|
+
account,
|
|
23016
|
+
lendingPositions,
|
|
23017
|
+
modes
|
|
23018
|
+
},
|
|
23019
|
+
metaMap,
|
|
23020
|
+
histData
|
|
23021
|
+
);
|
|
23022
|
+
if (userData && userData.data.length > 0) {
|
|
23023
|
+
out[lenderKey] = userData;
|
|
23024
|
+
}
|
|
23025
|
+
}
|
|
23026
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
23027
|
+
},
|
|
23028
|
+
GEARBOX_V3_USER_CALL_COUNT
|
|
23029
|
+
];
|
|
23030
|
+
};
|
|
23031
|
+
|
|
22621
23032
|
// src/lending/user-data/fetch-balances/parse.ts
|
|
22622
23033
|
function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
22623
23034
|
if (isAaveV4Type(lender))
|
|
@@ -22658,6 +23069,8 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
22658
23069
|
return getSiloV3UserDataConverter(lender, chainId, account, meta?.[lender]);
|
|
22659
23070
|
if (isFluid(lender))
|
|
22660
23071
|
return getFluidUserDataConverter(lender, chainId, account, meta);
|
|
23072
|
+
if (isGearboxV3(lender))
|
|
23073
|
+
return getGearboxV3UserDataConverter(lender, chainId, account, meta);
|
|
22661
23074
|
return getCompoundV2UserDataConverter(
|
|
22662
23075
|
lender,
|
|
22663
23076
|
chainId,
|
|
@@ -27340,6 +27753,8 @@ var getAbi2 = (lender) => {
|
|
|
27340
27753
|
if (isSiloV2Type(lender) || isSiloV3Type(lender))
|
|
27341
27754
|
return [...SiloAbi];
|
|
27342
27755
|
if (isFluid(lender)) return [...FluidVaultResolverAbi];
|
|
27756
|
+
if (isGearboxV3(lender))
|
|
27757
|
+
return [...GearboxDataCompressorV3Abi];
|
|
27343
27758
|
return [];
|
|
27344
27759
|
};
|
|
27345
27760
|
|
|
@@ -30028,6 +30443,28 @@ var savbtcFetcher = {
|
|
|
30028
30443
|
fetch: async () => ({ [sAVBTC]: await fetchAvantApr("savbtc") })
|
|
30029
30444
|
};
|
|
30030
30445
|
|
|
30446
|
+
// src/yields/intrinsic/fetchers/stS.ts
|
|
30447
|
+
var BEETS_URL = "https://backend-v3.beets-ftm-node.com/";
|
|
30448
|
+
var stS = "Beets Staked Sonic::STS";
|
|
30449
|
+
var stsFetcher = {
|
|
30450
|
+
label: "STS",
|
|
30451
|
+
fetch: async () => {
|
|
30452
|
+
const res = await fetch(BEETS_URL, {
|
|
30453
|
+
method: "POST",
|
|
30454
|
+
headers: {
|
|
30455
|
+
Accept: "application/json",
|
|
30456
|
+
"Content-Type": "application/json"
|
|
30457
|
+
},
|
|
30458
|
+
body: JSON.stringify({
|
|
30459
|
+
operationName: "GetStakedSonicData",
|
|
30460
|
+
query: "query GetStakedSonicData { stsGetGqlStakedSonicData { stakingApr } }"
|
|
30461
|
+
})
|
|
30462
|
+
}).then((r) => r.json());
|
|
30463
|
+
const apr = Number(res.data?.stsGetGqlStakedSonicData?.stakingApr) * 100;
|
|
30464
|
+
return { [stS]: apr };
|
|
30465
|
+
}
|
|
30466
|
+
};
|
|
30467
|
+
|
|
30031
30468
|
// src/yields/intrinsic/index.ts
|
|
30032
30469
|
async function fetchIntrinsicYields() {
|
|
30033
30470
|
const wstethPromise = safeFetch(wstethFetcher.label, wstethFetcher.fetch);
|
|
@@ -30083,7 +30520,8 @@ async function fetchIntrinsicYields() {
|
|
|
30083
30520
|
infinifiFetcher,
|
|
30084
30521
|
savusdFetcher,
|
|
30085
30522
|
savethFetcher,
|
|
30086
|
-
savbtcFetcher
|
|
30523
|
+
savbtcFetcher,
|
|
30524
|
+
stsFetcher
|
|
30087
30525
|
];
|
|
30088
30526
|
const results = await Promise.all([
|
|
30089
30527
|
wstethPromise,
|
|
@@ -30514,6 +30952,7 @@ function morphoApiAvailable(chainId) {
|
|
|
30514
30952
|
if (chainId === Chain.HEMI_NETWORK) return false;
|
|
30515
30953
|
if (chainId === Chain.BERACHAIN) return false;
|
|
30516
30954
|
if (chainId === Chain.SEI_NETWORK) return false;
|
|
30955
|
+
if (chainId === Chain.CELO_MAINNET) return false;
|
|
30517
30956
|
return true;
|
|
30518
30957
|
}
|
|
30519
30958
|
function generateMarketId(oracle, loanAsset, collateralAsset) {
|
|
@@ -31727,6 +32166,88 @@ var fluidFetcher = {
|
|
|
31727
32166
|
parse: parseFluidResults,
|
|
31728
32167
|
getAbi: getFluidAbi
|
|
31729
32168
|
};
|
|
32169
|
+
function getGearboxV3Calls(chainId) {
|
|
32170
|
+
const resolvers = gearboxResolvers()?.[chainId];
|
|
32171
|
+
if (!resolvers?.dataCompressor) return [];
|
|
32172
|
+
const call = {
|
|
32173
|
+
address: resolvers.dataCompressor,
|
|
32174
|
+
name: "getPoolsV3List",
|
|
32175
|
+
params: []
|
|
32176
|
+
};
|
|
32177
|
+
return [
|
|
32178
|
+
{
|
|
32179
|
+
calls: [call],
|
|
32180
|
+
meta: { _: [] },
|
|
32181
|
+
lender: Lender.GEARBOX_V3
|
|
32182
|
+
}
|
|
32183
|
+
];
|
|
32184
|
+
}
|
|
32185
|
+
function parseGearboxV3Results(data, _meta, context) {
|
|
32186
|
+
const { chainId, usdPrices, tokenList } = context;
|
|
32187
|
+
const entries = [];
|
|
32188
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
32189
|
+
const pools = data[0];
|
|
32190
|
+
if (!Array.isArray(pools) || pools.length === 0) return entries;
|
|
32191
|
+
const resolvePriceUSD = (token) => {
|
|
32192
|
+
const key = tokenList?.[token]?.assetGroup ?? `${chainId}-${token}`;
|
|
32193
|
+
return usdPrices[key] ?? usdPrices[token];
|
|
32194
|
+
};
|
|
32195
|
+
for (const pool of pools) {
|
|
32196
|
+
try {
|
|
32197
|
+
const underlying = (pool.underlying ?? "").toString().toLowerCase();
|
|
32198
|
+
if (!underlying) continue;
|
|
32199
|
+
const underlyingUSD = resolvePriceUSD(underlying);
|
|
32200
|
+
if (!underlyingUSD) continue;
|
|
32201
|
+
for (const cm of pool.creditManagers ?? []) {
|
|
32202
|
+
const cmAddr = (cm.addr ?? "").toString().toLowerCase();
|
|
32203
|
+
if (!cmAddr) continue;
|
|
32204
|
+
const expirationDate = Number(cm.expirationDate ?? 0);
|
|
32205
|
+
if (expirationDate > 0 && expirationDate < now) continue;
|
|
32206
|
+
let lenderKey;
|
|
32207
|
+
try {
|
|
32208
|
+
lenderKey = gearboxV3LenderKey(cmAddr);
|
|
32209
|
+
} catch {
|
|
32210
|
+
continue;
|
|
32211
|
+
}
|
|
32212
|
+
entries.push({
|
|
32213
|
+
asset: underlying,
|
|
32214
|
+
price: 1,
|
|
32215
|
+
priceUSD: underlyingUSD,
|
|
32216
|
+
marketUid: createMarketUid(chainId, lenderKey, underlying),
|
|
32217
|
+
targetLender: lenderKey,
|
|
32218
|
+
description: `Gearbox V3 loan (${pool.symbol ?? ""})`,
|
|
32219
|
+
staticBase: true,
|
|
32220
|
+
baseAsset: underlying
|
|
32221
|
+
});
|
|
32222
|
+
for (const ct of cm.collateralTokens ?? []) {
|
|
32223
|
+
const token = (ct.token ?? "").toString().toLowerCase();
|
|
32224
|
+
if (!token) continue;
|
|
32225
|
+
if (token === underlying) continue;
|
|
32226
|
+
const tokenUSD = resolvePriceUSD(token);
|
|
32227
|
+
if (!tokenUSD) continue;
|
|
32228
|
+
entries.push({
|
|
32229
|
+
asset: token,
|
|
32230
|
+
price: tokenUSD / underlyingUSD,
|
|
32231
|
+
priceUSD: tokenUSD,
|
|
32232
|
+
marketUid: createMarketUid(chainId, lenderKey, token),
|
|
32233
|
+
targetLender: lenderKey,
|
|
32234
|
+
baseAsset: underlying
|
|
32235
|
+
});
|
|
32236
|
+
}
|
|
32237
|
+
}
|
|
32238
|
+
} catch {
|
|
32239
|
+
}
|
|
32240
|
+
}
|
|
32241
|
+
return entries;
|
|
32242
|
+
}
|
|
32243
|
+
function getGearboxV3Abi() {
|
|
32244
|
+
return GearboxDataCompressorV3Abi;
|
|
32245
|
+
}
|
|
32246
|
+
var gearboxV3Fetcher = {
|
|
32247
|
+
getCalls: getGearboxV3Calls,
|
|
32248
|
+
parse: parseGearboxV3Results,
|
|
32249
|
+
getAbi: getGearboxV3Abi
|
|
32250
|
+
};
|
|
31730
32251
|
|
|
31731
32252
|
// src/prices/oracle-prices/fetchers/siloV2Graphql.ts
|
|
31732
32253
|
async function fetchSiloV2GraphQLMarkets(chainId) {
|
|
@@ -32181,6 +32702,11 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
32181
32702
|
() => fluidFetcher.getCalls(chainId),
|
|
32182
32703
|
getCallsErrors
|
|
32183
32704
|
) : [];
|
|
32705
|
+
const gearboxV3Results = isActive("gearboxV3") ? safeGetCalls(
|
|
32706
|
+
"gearboxV3",
|
|
32707
|
+
() => gearboxV3Fetcher.getCalls(chainId),
|
|
32708
|
+
getCallsErrors
|
|
32709
|
+
) : [];
|
|
32184
32710
|
const aaveGroup = buildGroup(
|
|
32185
32711
|
"aave",
|
|
32186
32712
|
aaveResults,
|
|
@@ -32241,6 +32767,12 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
32241
32767
|
fluidFetcher.parse,
|
|
32242
32768
|
getFluidAbi()
|
|
32243
32769
|
);
|
|
32770
|
+
const gearboxV3Group = buildGroup(
|
|
32771
|
+
"gearboxV3",
|
|
32772
|
+
gearboxV3Results,
|
|
32773
|
+
gearboxV3Fetcher.parse,
|
|
32774
|
+
getGearboxV3Abi()
|
|
32775
|
+
);
|
|
32244
32776
|
const allGroups = [
|
|
32245
32777
|
aaveGroup,
|
|
32246
32778
|
compoundV2Group,
|
|
@@ -32251,7 +32783,8 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
32251
32783
|
morphoGroup,
|
|
32252
32784
|
siloV2Group,
|
|
32253
32785
|
siloV3Group,
|
|
32254
|
-
fluidGroup
|
|
32786
|
+
fluidGroup,
|
|
32787
|
+
gearboxV3Group
|
|
32255
32788
|
];
|
|
32256
32789
|
const totalCalls = allGroups.reduce((s, g) => s + g.calls.length, 0);
|
|
32257
32790
|
if (totalCalls === 0 && !isActive("morpho")) {
|
|
@@ -32280,6 +32813,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
32280
32813
|
eulerData,
|
|
32281
32814
|
aaveV4Data,
|
|
32282
32815
|
fluidData,
|
|
32816
|
+
gearboxV3Data,
|
|
32283
32817
|
morphoGqlEntries,
|
|
32284
32818
|
siloV2GqlEntries,
|
|
32285
32819
|
siloV3GqlEntries
|
|
@@ -32340,6 +32874,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
32340
32874
|
allowFailure,
|
|
32341
32875
|
rpcOverrides
|
|
32342
32876
|
),
|
|
32877
|
+
executeGroup(
|
|
32878
|
+
gearboxV3Group,
|
|
32879
|
+
chainId,
|
|
32880
|
+
chainBatchSize,
|
|
32881
|
+
retries,
|
|
32882
|
+
allowFailure,
|
|
32883
|
+
rpcOverrides
|
|
32884
|
+
),
|
|
32343
32885
|
morphoGqlPromise,
|
|
32344
32886
|
siloV2GqlPromise,
|
|
32345
32887
|
siloV3GqlPromise
|
|
@@ -32392,6 +32934,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
32392
32934
|
{ group: eulerGroup, data: eulerData },
|
|
32393
32935
|
{ group: aaveV4Group, data: aaveV4Data },
|
|
32394
32936
|
{ group: fluidGroup, data: fluidData },
|
|
32937
|
+
{ group: gearboxV3Group, data: gearboxV3Data },
|
|
32395
32938
|
...siloV2GqlEntries != null ? [] : [{ group: siloV2Group, data: siloV2Data }],
|
|
32396
32939
|
...siloV3GqlEntries != null ? [] : [{ group: siloV3Group, data: siloV3Data }],
|
|
32397
32940
|
...useMorphoGql ? [] : [{ group: morphoGroup, data: morphoData }]
|
|
@@ -32479,6 +33022,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
32479
33022
|
(t) => !!t.meta.baseAssetSource
|
|
32480
33023
|
);
|
|
32481
33024
|
parseTrackers(fluidGroup, fluidData.results, false);
|
|
33025
|
+
parseTrackers(gearboxV3Group, gearboxV3Data.results, false);
|
|
32482
33026
|
if (siloV2GqlEntries != null) {
|
|
32483
33027
|
const diag2 = {
|
|
32484
33028
|
lender: "SILO_V2 (GraphQL)",
|