@1delta/margin-fetcher 0.0.400 → 0.0.403
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +101 -16
- package/dist/index.js +2390 -258
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { Lender, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket
|
|
|
5
5
|
export { isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
|
|
6
6
|
import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, termConfig, termMarketsByChain, exactlyConfig, liquityLendersByChain, riverLendersByChain, tellerConfigByChain, tellerPoolsByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, resolveTermApiBase, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles } from '@1delta/data-sdk';
|
|
7
7
|
import lodash from 'lodash';
|
|
8
|
-
import {
|
|
8
|
+
import { multicallRetryUniversal, getEvmClient, getEvmChain, getEvmClientUniversal } from '@1delta/providers';
|
|
9
9
|
import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, LenderCommitmentGroupAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, GearboxCreditAccountCompressorV310Abi, TermPriceConsumerAbi } from '@1delta/abis';
|
|
10
10
|
export { MorphoLensAbi } from '@1delta/abis';
|
|
11
11
|
import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, InitMarginAddresses, getLstAcceptedInputs } from '@1delta/calldata-sdk';
|
|
@@ -11288,8 +11288,10 @@ var MORPHO_LENS = {
|
|
|
11288
11288
|
[Chain.ETHEREUM_MAINNET]: "0xFc107f469A92c0de7B3105B802584CD6c7D710C2",
|
|
11289
11289
|
[Chain.PLASMA_MAINNET]: "0xcB6Eb8df68153cebF60E1872273Ef52075a5C297",
|
|
11290
11290
|
[Chain.BERACHAIN]: "0x7a59ddbB76521E8982Fa3A08598C9a83b14A6C07",
|
|
11291
|
-
|
|
11292
|
-
//
|
|
11291
|
+
// Serves BOTH Morpho Blue and Lista on 56 — one lens exposes
|
|
11292
|
+
// `get{,Lista,Moolah}{Market,User}DataCompact`. Byte-identical to the
|
|
11293
|
+
// previous entry 0x79f4061B… (same keccak), so Lista is unaffected.
|
|
11294
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: "0x7812227c90D55Cc1620C425980141e60b7635824",
|
|
11293
11295
|
[Chain.UNICHAIN]: "0xA453ba397c61B0c292EA3959A858821145B2707F",
|
|
11294
11296
|
[Chain.SEI_NETWORK]: "0xcB6Eb8df68153cebF60E1872273Ef52075a5C297",
|
|
11295
11297
|
[Chain.MONAD_MAINNET]: "0x0bd7473CbBf81d9dD936c61117eD230d95006CA2",
|
|
@@ -11304,10 +11306,24 @@ var MORPHO_LENS = {
|
|
|
11304
11306
|
[Chain.ABSTRACT]: "0x8e24cfc19c6c00c524353cb8816f5f1c2f33c201",
|
|
11305
11307
|
[Chain.INK]: "0x0bd7473CbBf81d9dD936c61117eD230d95006CA2",
|
|
11306
11308
|
[Chain.KAIA_MAINNET]: "0x925716D57c842B50806884EDb295bA3E3A8EBdFE",
|
|
11307
|
-
// blue-api does not index these
|
|
11309
|
+
// blue-api does not index these four, so the lens is the ONLY way to read
|
|
11308
11310
|
// their Morpho markets — see `lenderApiOnly` in fetchLenderAll.ts.
|
|
11309
11311
|
[Chain.GNOSIS]: "0x98542B95B44a4732EffB1F4F01A696F1546236d3",
|
|
11310
|
-
|
|
11312
|
+
// Same address as Gnosis — same deployer + nonce.
|
|
11313
|
+
[Chain.XDC_NETWORK]: "0x98542B95B44a4732EffB1F4F01A696F1546236d3",
|
|
11314
|
+
[Chain.AVALANCHE_C_CHAIN]: "0x2eA75bBBc5615651efc9401FBc9Db4d03B055CA6",
|
|
11315
|
+
// Same address as HyperEVM — same deployer + nonce, so CREATE lands
|
|
11316
|
+
// identically on both chains.
|
|
11317
|
+
[Chain.MEGAETH_MAINNET]: "0x6Bc6aCB905c1216B0119C87Bf9E178ce298310FA",
|
|
11318
|
+
// Deployed 2026-08-03. Same reason as the block above — blue-api indexes
|
|
11319
|
+
// none of these, so the lens is the only read path. Sonic and Morph already
|
|
11320
|
+
// had markets in the registry (9 and 1) that were silently unreadable.
|
|
11321
|
+
[Chain.SONIC_MAINNET]: "0xd184c5315B728c1C990f59dDD275c8155f8e255c",
|
|
11322
|
+
[Chain.CRONOS_MAINNET]: "0x79f4061BF049c5c6CAC6bfe2415c2460815F4ac7",
|
|
11323
|
+
[Chain.MORPH]: "0x79f4061BF049c5c6CAC6bfe2415c2460815F4ac7",
|
|
11324
|
+
[Chain.MODE]: "0x2eA75bBBc5615651efc9401FBc9Db4d03B055CA6",
|
|
11325
|
+
[Chain.LINEA]: "0x2eA75bBBc5615651efc9401FBc9Db4d03B055CA6",
|
|
11326
|
+
[Chain.SCROLL]: "0x4aEA1CE479BF7E036bBB6826A2bF084bce6560a0"
|
|
11311
11327
|
};
|
|
11312
11328
|
var buildMorphoUserCallWithLens = (chainId, account, lender, marketsToQuery) => {
|
|
11313
11329
|
const marketSlices = chunk(marketsToQuery, 100);
|
|
@@ -11323,7 +11339,13 @@ var buildMorphoUserCallWithLens = (chainId, account, lender, marketsToQuery) =>
|
|
|
11323
11339
|
}));
|
|
11324
11340
|
};
|
|
11325
11341
|
var buildMorphoTypeUserCallWithLens = (chainId, account, lender, marketsToQuery, getClient) => {
|
|
11326
|
-
return lender === Lender.MORPHO_BLUE ? buildMorphoUserCallWithLens(chainId, account, lender, marketsToQuery) : buildListaUserCallWithLens(
|
|
11342
|
+
return lender === Lender.MORPHO_BLUE ? buildMorphoUserCallWithLens(chainId, account, lender, marketsToQuery) : buildListaUserCallWithLens(
|
|
11343
|
+
chainId,
|
|
11344
|
+
account,
|
|
11345
|
+
lender,
|
|
11346
|
+
marketsToQuery,
|
|
11347
|
+
getClient
|
|
11348
|
+
);
|
|
11327
11349
|
};
|
|
11328
11350
|
var buildListaUserCallWithLens = async (chainId, account, lender, marketsToQuery, getClient) => {
|
|
11329
11351
|
await fetchListaBrokerUserData(
|
|
@@ -23962,6 +23984,14 @@ function lenderApiOnly(lender, chainId) {
|
|
|
23962
23984
|
if (chainId === "4114") return false;
|
|
23963
23985
|
if (chainId === Chain.GNOSIS) return false;
|
|
23964
23986
|
if (chainId === Chain.AVALANCHE_C_CHAIN) return false;
|
|
23987
|
+
if (chainId === Chain.MEGAETH_MAINNET) return false;
|
|
23988
|
+
if (chainId === Chain.XDC_NETWORK) return false;
|
|
23989
|
+
if (chainId === Chain.SONIC_MAINNET) return false;
|
|
23990
|
+
if (chainId === Chain.CRONOS_MAINNET) return false;
|
|
23991
|
+
if (chainId === Chain.MORPH) return false;
|
|
23992
|
+
if (chainId === Chain.MODE) return false;
|
|
23993
|
+
if (chainId === Chain.LINEA) return false;
|
|
23994
|
+
if (chainId === Chain.SCROLL) return false;
|
|
23965
23995
|
return true;
|
|
23966
23996
|
}
|
|
23967
23997
|
if (isMidnight(lender)) return true;
|
|
@@ -24246,14 +24276,14 @@ var { isArray } = lodash;
|
|
|
24246
24276
|
var maxRetries = 3;
|
|
24247
24277
|
var MULTICALL_FAILURE = "0x";
|
|
24248
24278
|
var isFailedCall = (value) => value === void 0 || value === null || value === MULTICALL_FAILURE;
|
|
24249
|
-
var retryFailedSlots = async (chainId, contracts, mapped,
|
|
24279
|
+
var retryFailedSlots = async (chainId, contracts, mapped, getEvmClient17, nextRpcId, batchSize, logs) => {
|
|
24250
24280
|
const failedIdx = [];
|
|
24251
24281
|
for (let i = 0; i < mapped.length; i++) {
|
|
24252
24282
|
if (isFailedCall(mapped[i])) failedIdx.push(i);
|
|
24253
24283
|
}
|
|
24254
24284
|
if (failedIdx.length === 0) return mapped;
|
|
24255
24285
|
try {
|
|
24256
|
-
const provider =
|
|
24286
|
+
const provider = getEvmClient17(chainId, nextRpcId);
|
|
24257
24287
|
const returnData = await provider.multicall({
|
|
24258
24288
|
allowFailure: true,
|
|
24259
24289
|
batchSize,
|
|
@@ -24267,9 +24297,9 @@ var retryFailedSlots = async (chainId, contracts, mapped, getEvmClient18, nextRp
|
|
|
24267
24297
|
}
|
|
24268
24298
|
return mapped;
|
|
24269
24299
|
};
|
|
24270
|
-
var multicallViemAbiArray = async (chainId, abi, calls,
|
|
24300
|
+
var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient17, retry = true, providerId = 0, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false) => {
|
|
24271
24301
|
try {
|
|
24272
|
-
const provider =
|
|
24302
|
+
const provider = getEvmClient17(chainId, providerId);
|
|
24273
24303
|
const abiIsArray = isArray(abi[0]);
|
|
24274
24304
|
const contracts = calls.map(({ address, name, params }, i) => ({
|
|
24275
24305
|
abi: abiIsArray ? abi?.[i] : abi,
|
|
@@ -24291,7 +24321,7 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient18, retry =
|
|
|
24291
24321
|
chainId,
|
|
24292
24322
|
contracts,
|
|
24293
24323
|
res,
|
|
24294
|
-
|
|
24324
|
+
getEvmClient17,
|
|
24295
24325
|
providerId + 1,
|
|
24296
24326
|
batchSize,
|
|
24297
24327
|
logs
|
|
@@ -24305,7 +24335,7 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient18, retry =
|
|
|
24305
24335
|
chainId,
|
|
24306
24336
|
abi,
|
|
24307
24337
|
calls,
|
|
24308
|
-
|
|
24338
|
+
getEvmClient17,
|
|
24309
24339
|
retry,
|
|
24310
24340
|
providerId,
|
|
24311
24341
|
retries,
|
|
@@ -24316,13 +24346,13 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient18, retry =
|
|
|
24316
24346
|
);
|
|
24317
24347
|
}
|
|
24318
24348
|
};
|
|
24319
|
-
var multicallShardedAbiArray = async (chainId, abi, calls,
|
|
24349
|
+
var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient17, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false) => {
|
|
24320
24350
|
if (poolSize <= 1) {
|
|
24321
24351
|
return multicallViemAbiArray(
|
|
24322
24352
|
chainId,
|
|
24323
24353
|
abi,
|
|
24324
24354
|
calls,
|
|
24325
|
-
|
|
24355
|
+
getEvmClient17,
|
|
24326
24356
|
true,
|
|
24327
24357
|
0,
|
|
24328
24358
|
retries,
|
|
@@ -24347,7 +24377,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient18, poolS
|
|
|
24347
24377
|
const results = new Array(contracts.length);
|
|
24348
24378
|
const runBatch = async (batch, rpcId, attemptsLeft, size) => {
|
|
24349
24379
|
try {
|
|
24350
|
-
const provider =
|
|
24380
|
+
const provider = getEvmClient17(chainId, rpcId);
|
|
24351
24381
|
const returnData = await provider.multicall({
|
|
24352
24382
|
allowFailure,
|
|
24353
24383
|
batchSize: size,
|
|
@@ -24361,7 +24391,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient18, poolS
|
|
|
24361
24391
|
chainId,
|
|
24362
24392
|
batch.items,
|
|
24363
24393
|
mapped,
|
|
24364
|
-
|
|
24394
|
+
getEvmClient17,
|
|
24365
24395
|
rpcId + 1,
|
|
24366
24396
|
size,
|
|
24367
24397
|
logs
|
|
@@ -33199,7 +33229,7 @@ function unflattenLenderData(pools) {
|
|
|
33199
33229
|
}
|
|
33200
33230
|
return result;
|
|
33201
33231
|
}
|
|
33202
|
-
var getLenderUserDataResult = async (chainId, queriesRaw,
|
|
33232
|
+
var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient17, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1) => {
|
|
33203
33233
|
const queries = organizeUserQueries(queriesRaw);
|
|
33204
33234
|
const builtCalls = await Promise.all(
|
|
33205
33235
|
queries.map(async (query3) => {
|
|
@@ -33209,7 +33239,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient18, allowF
|
|
|
33209
33239
|
query3.lender,
|
|
33210
33240
|
query3.account,
|
|
33211
33241
|
query3.params,
|
|
33212
|
-
|
|
33242
|
+
getEvmClient17
|
|
33213
33243
|
);
|
|
33214
33244
|
return callData.map((call) => ({ call, abi: call.abi ?? abi }));
|
|
33215
33245
|
})
|
|
@@ -33219,7 +33249,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient18, allowF
|
|
|
33219
33249
|
chainId,
|
|
33220
33250
|
calls.map((call) => call.abi),
|
|
33221
33251
|
calls.map((call) => call.call),
|
|
33222
|
-
|
|
33252
|
+
getEvmClient17,
|
|
33223
33253
|
concurrency,
|
|
33224
33254
|
retries,
|
|
33225
33255
|
allowFailure,
|
|
@@ -36151,6 +36181,166 @@ var monadLstFetcher = {
|
|
|
36151
36181
|
return out;
|
|
36152
36182
|
}
|
|
36153
36183
|
};
|
|
36184
|
+
var CHAIN_ID7 = Chain.ETHEREUM_MAINNET;
|
|
36185
|
+
var FRXETH_SUMMARY_URL = "https://api.frax.finance/v2/frxeth/summary/latest";
|
|
36186
|
+
var SFRXETH = "0xac3e018457b222d93114458476f3e3416abbe38f";
|
|
36187
|
+
var SFRXUSD = "0xcf62f905562626cfcdd2261162a51fd02fc9c5b6";
|
|
36188
|
+
var SFRAX = "0xa663b02cf0a4b149d2ad41910cb81e23e1c41c32";
|
|
36189
|
+
var YEAR_SECONDS3 = 31536000n;
|
|
36190
|
+
var ONE_E186 = 10n ** 18n;
|
|
36191
|
+
var SFRXETH_KEY = "SFRXETH";
|
|
36192
|
+
var SFRXUSD_KEY = "SFRXUSD";
|
|
36193
|
+
var SFRXUSD_GROUP_KEY = "Staked Frax USD::sfrxUSD";
|
|
36194
|
+
var SFRAX_KEY = "SFRAX";
|
|
36195
|
+
var SFRAX_GROUP_KEY = "Staked FRAX::SFRAX";
|
|
36196
|
+
var XERC4626_ABI = [
|
|
36197
|
+
{
|
|
36198
|
+
name: "rewardsCycleEnd",
|
|
36199
|
+
type: "function",
|
|
36200
|
+
stateMutability: "view",
|
|
36201
|
+
inputs: [],
|
|
36202
|
+
outputs: [{ type: "uint32" }]
|
|
36203
|
+
},
|
|
36204
|
+
{
|
|
36205
|
+
name: "lastSync",
|
|
36206
|
+
type: "function",
|
|
36207
|
+
stateMutability: "view",
|
|
36208
|
+
inputs: [],
|
|
36209
|
+
outputs: [{ type: "uint32" }]
|
|
36210
|
+
},
|
|
36211
|
+
{
|
|
36212
|
+
name: "lastRewardAmount",
|
|
36213
|
+
type: "function",
|
|
36214
|
+
stateMutability: "view",
|
|
36215
|
+
inputs: [],
|
|
36216
|
+
outputs: [{ type: "uint192" }]
|
|
36217
|
+
},
|
|
36218
|
+
{
|
|
36219
|
+
name: "totalAssets",
|
|
36220
|
+
type: "function",
|
|
36221
|
+
stateMutability: "view",
|
|
36222
|
+
inputs: [],
|
|
36223
|
+
outputs: [{ type: "uint256" }]
|
|
36224
|
+
}
|
|
36225
|
+
];
|
|
36226
|
+
var LINEAR_REWARDS_ABI = [
|
|
36227
|
+
{
|
|
36228
|
+
name: "rewardsCycleData",
|
|
36229
|
+
type: "function",
|
|
36230
|
+
stateMutability: "view",
|
|
36231
|
+
inputs: [],
|
|
36232
|
+
outputs: [
|
|
36233
|
+
{ type: "uint40", name: "cycleEnd" },
|
|
36234
|
+
{ type: "uint40", name: "lastSync" },
|
|
36235
|
+
{ type: "uint216", name: "rewardCycleAmount" }
|
|
36236
|
+
]
|
|
36237
|
+
},
|
|
36238
|
+
{
|
|
36239
|
+
name: "maxDistributionPerSecondPerAsset",
|
|
36240
|
+
type: "function",
|
|
36241
|
+
stateMutability: "view",
|
|
36242
|
+
inputs: [],
|
|
36243
|
+
outputs: [{ type: "uint256" }]
|
|
36244
|
+
},
|
|
36245
|
+
{
|
|
36246
|
+
name: "storedTotalAssets",
|
|
36247
|
+
type: "function",
|
|
36248
|
+
stateMutability: "view",
|
|
36249
|
+
inputs: [],
|
|
36250
|
+
outputs: [{ type: "uint256" }]
|
|
36251
|
+
}
|
|
36252
|
+
];
|
|
36253
|
+
var robustFetchJson2 = async (url, { timeoutMs = 5e3, attempts = 3 } = {}) => {
|
|
36254
|
+
let lastErr;
|
|
36255
|
+
for (let i = 0; i < attempts; i++) {
|
|
36256
|
+
try {
|
|
36257
|
+
const res = await fetch(url, {
|
|
36258
|
+
headers: {
|
|
36259
|
+
accept: "application/json",
|
|
36260
|
+
"user-agent": "1delta-margin-fetcher"
|
|
36261
|
+
},
|
|
36262
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
36263
|
+
});
|
|
36264
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
36265
|
+
return await res.json();
|
|
36266
|
+
} catch (e) {
|
|
36267
|
+
lastErr = e;
|
|
36268
|
+
if (i < attempts - 1)
|
|
36269
|
+
await new Promise((r) => setTimeout(r, 250 * (i + 1)));
|
|
36270
|
+
}
|
|
36271
|
+
}
|
|
36272
|
+
throw lastErr;
|
|
36273
|
+
};
|
|
36274
|
+
var fetchSfrxEthAprOnChain = async () => {
|
|
36275
|
+
const [cycleEnd, lastSync, lastRewardAmount, totalAssets] = await multicallRetryUniversal({
|
|
36276
|
+
chain: CHAIN_ID7,
|
|
36277
|
+
abi: XERC4626_ABI,
|
|
36278
|
+
calls: [
|
|
36279
|
+
{ address: SFRXETH, name: "rewardsCycleEnd", params: [] },
|
|
36280
|
+
{ address: SFRXETH, name: "lastSync", params: [] },
|
|
36281
|
+
{ address: SFRXETH, name: "lastRewardAmount", params: [] },
|
|
36282
|
+
{ address: SFRXETH, name: "totalAssets", params: [] }
|
|
36283
|
+
],
|
|
36284
|
+
allowFailure: false
|
|
36285
|
+
});
|
|
36286
|
+
const window = BigInt(cycleEnd) - BigInt(lastSync);
|
|
36287
|
+
if (window <= 0n || totalAssets === 0n) return 0;
|
|
36288
|
+
const perSecond = lastRewardAmount / window;
|
|
36289
|
+
return Number(perSecond * YEAR_SECONDS3 * ONE_E186 / totalAssets) / 1e16;
|
|
36290
|
+
};
|
|
36291
|
+
var fetchSfrxEthApr = async () => {
|
|
36292
|
+
try {
|
|
36293
|
+
const res = await robustFetchJson2(FRXETH_SUMMARY_URL);
|
|
36294
|
+
const apr = Number(res?.sfrxethApr);
|
|
36295
|
+
if (Number.isFinite(apr) && apr >= 0) return apr;
|
|
36296
|
+
throw new Error("sfrxethApr missing or non-numeric");
|
|
36297
|
+
} catch {
|
|
36298
|
+
return fetchSfrxEthAprOnChain();
|
|
36299
|
+
}
|
|
36300
|
+
};
|
|
36301
|
+
var fetchFraxSavingsAprs = async () => {
|
|
36302
|
+
const results = await multicallRetryUniversal({
|
|
36303
|
+
chain: CHAIN_ID7,
|
|
36304
|
+
abi: LINEAR_REWARDS_ABI,
|
|
36305
|
+
calls: [SFRXUSD, SFRAX].flatMap((address) => [
|
|
36306
|
+
{ address, name: "rewardsCycleData", params: [] },
|
|
36307
|
+
{ address, name: "maxDistributionPerSecondPerAsset", params: [] },
|
|
36308
|
+
{ address, name: "storedTotalAssets", params: [] }
|
|
36309
|
+
]),
|
|
36310
|
+
allowFailure: false
|
|
36311
|
+
});
|
|
36312
|
+
const aprAt = (offset) => {
|
|
36313
|
+
const [cycleEnd, lastSync, rewardCycleAmount] = results[offset];
|
|
36314
|
+
const maxPerSecondPerAsset = results[offset + 1];
|
|
36315
|
+
const storedTotalAssets = results[offset + 2];
|
|
36316
|
+
if (storedTotalAssets === 0n) return 0;
|
|
36317
|
+
const window = BigInt(cycleEnd) - BigInt(lastSync);
|
|
36318
|
+
const uncapped = window > 0n ? rewardCycleAmount / window : 0n;
|
|
36319
|
+
const cap = maxPerSecondPerAsset * storedTotalAssets / ONE_E186;
|
|
36320
|
+
const perSecond = uncapped < cap ? uncapped : cap;
|
|
36321
|
+
return Number(perSecond * YEAR_SECONDS3 * ONE_E186 / storedTotalAssets) / 1e16;
|
|
36322
|
+
};
|
|
36323
|
+
return { sfrxUsd: aprAt(0), sfrax: aprAt(3) };
|
|
36324
|
+
};
|
|
36325
|
+
var sfrxEthFetcher = {
|
|
36326
|
+
label: "SFRXETH",
|
|
36327
|
+
fetch: async () => {
|
|
36328
|
+
const apr = await fetchSfrxEthApr();
|
|
36329
|
+
return { [SFRXETH_KEY]: apr };
|
|
36330
|
+
}
|
|
36331
|
+
};
|
|
36332
|
+
var fraxSavingsFetcher = {
|
|
36333
|
+
label: "SFRXUSD_SFRAX",
|
|
36334
|
+
fetch: async () => {
|
|
36335
|
+
const { sfrxUsd, sfrax: sfrax2 } = await fetchFraxSavingsAprs();
|
|
36336
|
+
return {
|
|
36337
|
+
[SFRXUSD_KEY]: sfrxUsd,
|
|
36338
|
+
[SFRXUSD_GROUP_KEY]: sfrxUsd,
|
|
36339
|
+
[SFRAX_KEY]: sfrax2,
|
|
36340
|
+
[SFRAX_GROUP_KEY]: sfrax2
|
|
36341
|
+
};
|
|
36342
|
+
}
|
|
36343
|
+
};
|
|
36154
36344
|
|
|
36155
36345
|
// src/vaults/lst/registry.ts
|
|
36156
36346
|
var LST_REGISTRY = {
|
|
@@ -36257,6 +36447,39 @@ var LST_REGISTRY = {
|
|
|
36257
36447
|
yieldFetcher: wstethFetcher,
|
|
36258
36448
|
yieldKey: "WSTETH"
|
|
36259
36449
|
},
|
|
36450
|
+
{
|
|
36451
|
+
// Frax sfrxETH — a plain ERC-4626 over **frxETH**, not over ETH:
|
|
36452
|
+
// `asset()` is frxETH and `convertToAssets` is denominated in it,
|
|
36453
|
+
// so `underlying` is frxETH rather than the native sentinel.
|
|
36454
|
+
//
|
|
36455
|
+
// Two exits, and they behave differently. sfrxETH → frxETH is an
|
|
36456
|
+
// unconditional same-block `redeem` (the vault holds the whole
|
|
36457
|
+
// frxETH float), which is what `withdrawalMode` describes. frxETH
|
|
36458
|
+
// → ETH has **no protocol redemption at all** — the frxETHMinter
|
|
36459
|
+
// is one-way — so that leg is DEX-only (Curve frxETH/ETH). Modeled
|
|
36460
|
+
// as `instant-or-queued` because the *listed underlying* is always
|
|
36461
|
+
// instantly redeemable; see LST_DEPOSIT_INTERFACES.md.
|
|
36462
|
+
address: "0xac3e018457b222d93114458476f3e3416abbe38f",
|
|
36463
|
+
underlying: "0x5e8422345238f34275888049021821e8e08caa1f",
|
|
36464
|
+
// frxETH
|
|
36465
|
+
symbol: "sfrxETH",
|
|
36466
|
+
brand: "Frax",
|
|
36467
|
+
decimals: 18,
|
|
36468
|
+
reader: "erc4626",
|
|
36469
|
+
isErc4626: true,
|
|
36470
|
+
isRebasing: false,
|
|
36471
|
+
isMintable: true,
|
|
36472
|
+
// Native ETH mints in one call via `frxETHMinter.submitAndDeposit`
|
|
36473
|
+
// (ETH → frxETH → sfrxETH); the frxETH ERC-20 path is the plain
|
|
36474
|
+
// 4626 `deposit`. Both are declared in the calldata-sdk
|
|
36475
|
+
// `fraxSfrxEth` accept-set.
|
|
36476
|
+
isNativeUnderlying: true,
|
|
36477
|
+
mintContract: "0xac3e018457b222d93114458476f3e3416abbe38f",
|
|
36478
|
+
mintInputAsset: "0x5e8422345238f34275888049021821e8e08caa1f",
|
|
36479
|
+
withdrawalMode: "instant-or-queued",
|
|
36480
|
+
yieldFetcher: sfrxEthFetcher,
|
|
36481
|
+
yieldKey: "SFRXETH"
|
|
36482
|
+
},
|
|
36260
36483
|
{
|
|
36261
36484
|
address: "0xae78736cd615f374d3085123a210448e74fc6393",
|
|
36262
36485
|
underlying: "0x0000000000000000000000000000000000000000",
|
|
@@ -37723,65 +37946,1418 @@ var hastraPrimeFetcher = {
|
|
|
37723
37946
|
return { [HASTRA_PRIME_KEY]: Math.max(0, apr) };
|
|
37724
37947
|
}
|
|
37725
37948
|
};
|
|
37726
|
-
var CHAIN_ID7 = "4663";
|
|
37727
|
-
var VAULT2 = "0xde770c84fe66e063336b31737cfe9790f18c4087";
|
|
37728
|
-
var SPARK_SAVINGS_USDG_KEY = "SPUSDG";
|
|
37729
37949
|
var RAY3 = 10n ** 27n;
|
|
37730
|
-
var
|
|
37731
|
-
var
|
|
37732
|
-
|
|
37950
|
+
var YEAR_SECONDS4 = 31536e3;
|
|
37951
|
+
var SPARK_VAULTS_V2 = [
|
|
37952
|
+
{
|
|
37953
|
+
chainId: Chain.ETHEREUM_MAINNET,
|
|
37954
|
+
address: "0x28b3a8fb53b741a8fd78c0fb9a6b2393d896a43d",
|
|
37955
|
+
symbol: "spUSDC",
|
|
37956
|
+
assetGroup: "Spark Savings USDC::SPUSDC"
|
|
37957
|
+
},
|
|
37958
|
+
{
|
|
37959
|
+
chainId: Chain.ETHEREUM_MAINNET,
|
|
37960
|
+
address: "0xe2e7a17dff93280dec073c995595155283e3c372",
|
|
37961
|
+
symbol: "spUSDT",
|
|
37962
|
+
assetGroup: "Spark Savings USDT::SPUSDT"
|
|
37963
|
+
},
|
|
37964
|
+
{
|
|
37965
|
+
chainId: Chain.ETHEREUM_MAINNET,
|
|
37966
|
+
address: "0xfe6eb3b609a7c8352a241f7f3a21cea4e9209b8f",
|
|
37967
|
+
symbol: "spETH",
|
|
37968
|
+
// NB: three unrelated tokens share the `SPETH` ticker in the list
|
|
37969
|
+
// (Spectrum ETH, Kroma Staked ETH) — only the full group is safe.
|
|
37970
|
+
assetGroup: "Spark Savings ETH::SPETH"
|
|
37971
|
+
},
|
|
37733
37972
|
{
|
|
37734
|
-
|
|
37973
|
+
chainId: Chain.ETHEREUM_MAINNET,
|
|
37974
|
+
address: "0x80128dbb9f07b93dde62a6daeadb69ed14a7d354",
|
|
37975
|
+
symbol: "spPYUSD"
|
|
37976
|
+
},
|
|
37977
|
+
{
|
|
37978
|
+
chainId: Chain.AVALANCHE_C_CHAIN,
|
|
37979
|
+
address: "0x28b3a8fb53b741a8fd78c0fb9a6b2393d896a43d",
|
|
37980
|
+
symbol: "spUSDC"
|
|
37981
|
+
},
|
|
37982
|
+
{
|
|
37983
|
+
chainId: Chain.ARBITRUM_ONE,
|
|
37984
|
+
address: "0x45d91340b3b7b96985a72b5c678f7d9e8d664b62",
|
|
37985
|
+
symbol: "spUSDT"
|
|
37986
|
+
},
|
|
37987
|
+
{
|
|
37988
|
+
chainId: Chain.X_LAYER_MAINNET,
|
|
37989
|
+
address: "0xc358c90d32375721cb3924320fdc2f8b694347ca",
|
|
37990
|
+
symbol: "spUSDT"
|
|
37991
|
+
},
|
|
37992
|
+
{
|
|
37993
|
+
chainId: Chain.ROBINHOOD_CHAIN,
|
|
37994
|
+
address: "0xde770c84fe66e063336b31737cfe9790f18c4087",
|
|
37995
|
+
symbol: "spUSDG"
|
|
37996
|
+
}
|
|
37997
|
+
];
|
|
37998
|
+
var sparkVaultV2Key = (chainId, symbol) => `SPARK_V2::${chainId}::${symbol}`;
|
|
37999
|
+
var SPARK_SAVINGS_USDG_KEY = sparkVaultV2Key(
|
|
38000
|
+
Chain.ROBINHOOD_CHAIN,
|
|
38001
|
+
"spUSDG"
|
|
38002
|
+
);
|
|
38003
|
+
var SPARK_SUSDC_KEY = "SPARK_V1::sUSDC";
|
|
38004
|
+
var SPARK_SUSDC_GROUP_KEY = "Spark USDC Vault::sUSDC";
|
|
38005
|
+
var SPARK_SUSDC_LEGACY_GROUP_KEY = "Spark USDC::SUSDC";
|
|
38006
|
+
var SKY_SSR_SOURCE = "0xa3931d71877c0e7a3148cb7eb4463524fec27fbd";
|
|
38007
|
+
var VSR_ABI = [
|
|
38008
|
+
{
|
|
38009
|
+
name: "vsr",
|
|
37735
38010
|
type: "function",
|
|
37736
38011
|
stateMutability: "view",
|
|
37737
38012
|
inputs: [],
|
|
37738
38013
|
outputs: [{ type: "uint256" }]
|
|
37739
38014
|
}
|
|
37740
38015
|
];
|
|
37741
|
-
var
|
|
37742
|
-
|
|
37743
|
-
|
|
37744
|
-
|
|
37745
|
-
|
|
37746
|
-
|
|
37747
|
-
|
|
37748
|
-
|
|
37749
|
-
|
|
37750
|
-
|
|
37751
|
-
|
|
37752
|
-
|
|
37753
|
-
|
|
37754
|
-
|
|
37755
|
-
|
|
37756
|
-
|
|
37757
|
-
|
|
37758
|
-
|
|
37759
|
-
|
|
37760
|
-
|
|
37761
|
-
|
|
37762
|
-
|
|
37763
|
-
|
|
38016
|
+
var SSR_ABI = [
|
|
38017
|
+
{
|
|
38018
|
+
name: "ssr",
|
|
38019
|
+
type: "function",
|
|
38020
|
+
stateMutability: "view",
|
|
38021
|
+
inputs: [],
|
|
38022
|
+
outputs: [{ type: "uint256" }]
|
|
38023
|
+
}
|
|
38024
|
+
];
|
|
38025
|
+
var aprFromVsr = (vsr) => {
|
|
38026
|
+
if (vsr <= RAY3) return 0;
|
|
38027
|
+
const perSecond = Number(vsr - RAY3) / 1e27;
|
|
38028
|
+
return perSecond * YEAR_SECONDS4 * 100;
|
|
38029
|
+
};
|
|
38030
|
+
var chainsOf = (vaults) => [
|
|
38031
|
+
...new Set(vaults.map((v) => v.chainId))
|
|
38032
|
+
];
|
|
38033
|
+
var fetchChain = async (chainId, vaults) => {
|
|
38034
|
+
const results = await multicallRetryUniversal({
|
|
38035
|
+
chain: chainId,
|
|
38036
|
+
abi: VSR_ABI,
|
|
38037
|
+
calls: vaults.map((v) => ({
|
|
38038
|
+
address: v.address,
|
|
38039
|
+
name: "vsr",
|
|
38040
|
+
params: []
|
|
38041
|
+
})),
|
|
38042
|
+
allowFailure: false
|
|
38043
|
+
});
|
|
38044
|
+
const out = {};
|
|
38045
|
+
vaults.forEach((v, i) => {
|
|
38046
|
+
const vsr = results[i];
|
|
38047
|
+
if (typeof vsr !== "bigint" || vsr < RAY3) return;
|
|
38048
|
+
const apr = aprFromVsr(vsr);
|
|
38049
|
+
out[sparkVaultV2Key(v.chainId, v.symbol)] = apr;
|
|
38050
|
+
if (v.assetGroup) out[v.assetGroup] = apr;
|
|
38051
|
+
});
|
|
38052
|
+
return out;
|
|
38053
|
+
};
|
|
38054
|
+
var fetchSusdcApr = async () => {
|
|
38055
|
+
const [ssr] = await multicallRetryUniversal({
|
|
38056
|
+
chain: Chain.ETHEREUM_MAINNET,
|
|
38057
|
+
abi: SSR_ABI,
|
|
38058
|
+
calls: [{ address: SKY_SSR_SOURCE, name: "ssr", params: [] }],
|
|
38059
|
+
allowFailure: false
|
|
38060
|
+
});
|
|
38061
|
+
if (typeof ssr !== "bigint" || ssr < RAY3) {
|
|
38062
|
+
throw new Error("Spark sUSDC: unreadable ssr()");
|
|
38063
|
+
}
|
|
38064
|
+
const apr = aprFromVsr(ssr);
|
|
38065
|
+
return {
|
|
38066
|
+
[SPARK_SUSDC_KEY]: apr,
|
|
38067
|
+
[SPARK_SUSDC_GROUP_KEY]: apr,
|
|
38068
|
+
[SPARK_SUSDC_LEGACY_GROUP_KEY]: apr
|
|
38069
|
+
};
|
|
38070
|
+
};
|
|
38071
|
+
var sparkSavingsFetcher = {
|
|
38072
|
+
label: "SPARK_SAVINGS",
|
|
38073
|
+
fetch: async () => {
|
|
38074
|
+
const settled = await Promise.allSettled([
|
|
38075
|
+
...chainsOf(SPARK_VAULTS_V2).map(
|
|
38076
|
+
(chainId) => fetchChain(
|
|
38077
|
+
chainId,
|
|
38078
|
+
SPARK_VAULTS_V2.filter((v) => v.chainId === chainId)
|
|
38079
|
+
)
|
|
38080
|
+
),
|
|
38081
|
+
fetchSusdcApr()
|
|
38082
|
+
]);
|
|
38083
|
+
const out = {};
|
|
38084
|
+
for (const r of settled) {
|
|
38085
|
+
if (r.status === "fulfilled") Object.assign(out, r.value);
|
|
38086
|
+
}
|
|
38087
|
+
if (Object.keys(out).length === 0) {
|
|
38088
|
+
throw new Error("Spark: no chain returned a readable rate");
|
|
38089
|
+
}
|
|
38090
|
+
return out;
|
|
38091
|
+
}
|
|
38092
|
+
};
|
|
38093
|
+
var RATE_ABI = [
|
|
38094
|
+
{
|
|
38095
|
+
name: "rate",
|
|
38096
|
+
type: "function",
|
|
38097
|
+
stateMutability: "view",
|
|
38098
|
+
inputs: [],
|
|
38099
|
+
outputs: [{ type: "uint256" }]
|
|
38100
|
+
}
|
|
38101
|
+
];
|
|
38102
|
+
var SUSDP_VAULTS = [
|
|
38103
|
+
{
|
|
38104
|
+
chain: Chain.AVALANCHE_C_CHAIN,
|
|
38105
|
+
address: "0x9d92c21205383651610f90722131655a5b8ed3e0"
|
|
38106
|
+
},
|
|
38107
|
+
{
|
|
38108
|
+
chain: Chain.HYPEREVM,
|
|
38109
|
+
address: "0x9b3a8f7cec208e247d97dee13313690977e24459"
|
|
38110
|
+
},
|
|
38111
|
+
{
|
|
38112
|
+
chain: Chain.ETHEREUM_MAINNET,
|
|
38113
|
+
address: "0x0d45b129dc868963025db79a9074ea9c9e32cae4"
|
|
38114
|
+
},
|
|
38115
|
+
{
|
|
38116
|
+
chain: Chain.BASE,
|
|
38117
|
+
address: "0x472ed57b376fe400259fb28e5c46eb53f0e3e7e7"
|
|
38118
|
+
}
|
|
38119
|
+
];
|
|
38120
|
+
var YEAR_SECONDS5 = 31536e3;
|
|
38121
|
+
var BASE_27 = 1e27;
|
|
38122
|
+
var aprFromRate = (rate) => Number(rate) / BASE_27 * YEAR_SECONDS5 * 100;
|
|
38123
|
+
var SUSDP_KEY = "SUSDP";
|
|
38124
|
+
var SUSDP_GROUP_KEY = "Staked USDp::sUSDp";
|
|
38125
|
+
var parallelFetcher = {
|
|
38126
|
+
label: "PARALLEL_SUSDP",
|
|
38127
|
+
fetch: async () => {
|
|
38128
|
+
let apr = 0;
|
|
38129
|
+
for (const { chain, address } of SUSDP_VAULTS) {
|
|
38130
|
+
try {
|
|
38131
|
+
const [rate] = await multicallRetryUniversal({
|
|
38132
|
+
chain,
|
|
38133
|
+
abi: RATE_ABI,
|
|
38134
|
+
calls: [{ address, name: "rate", params: [] }],
|
|
38135
|
+
allowFailure: false
|
|
38136
|
+
});
|
|
38137
|
+
apr = aprFromRate(rate);
|
|
38138
|
+
break;
|
|
38139
|
+
} catch {
|
|
37764
38140
|
}
|
|
37765
|
-
const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
|
|
37766
|
-
if (elapsed <= 0) throw new Error("non-positive elapsed window");
|
|
37767
|
-
const apr = annualizeRateDeltaPercent(chiNow, chiThen, elapsed);
|
|
37768
|
-
if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
|
|
37769
|
-
return apr;
|
|
37770
|
-
} catch (e) {
|
|
37771
|
-
lastErr = e;
|
|
37772
38141
|
}
|
|
38142
|
+
return { [SUSDP_KEY]: apr, [SUSDP_GROUP_KEY]: apr };
|
|
38143
|
+
}
|
|
38144
|
+
};
|
|
38145
|
+
|
|
38146
|
+
// src/yields/intrinsic/fetchers/rwaFunds.ts
|
|
38147
|
+
var RWA_FUNDS = {
|
|
38148
|
+
// Circle (ex-Hashnote) USYC — $3.0B, the largest tokenized MMF.
|
|
38149
|
+
// Base's `US Yield Coin::USYC` (0xeee7af83…) is unverified → skipped.
|
|
38150
|
+
USYC: {
|
|
38151
|
+
pool: "7c0a89c7-70cf-460c-b62e-cb278bf97e8f",
|
|
38152
|
+
keys: ["Hashnote USYC::USYC", "Circle USYC::USYC"]
|
|
38153
|
+
},
|
|
38154
|
+
// BlackRock BUIDL — $2.0B. Rebasing (NAV $1, monthly dividend
|
|
38155
|
+
// distributions); the percent is still the holder's carry. Chain-1
|
|
38156
|
+
// group is the truncated variant.
|
|
38157
|
+
BUIDL: {
|
|
38158
|
+
pool: "b663ca59-c7e6-4435-ae4a-28d339ce6a15",
|
|
38159
|
+
keys: [
|
|
38160
|
+
"BlackRock USD Institutional Digital Liquidity Fund::BUIDL",
|
|
38161
|
+
"BlackRock USD Institutional Digital Liq::BUIDL"
|
|
38162
|
+
]
|
|
38163
|
+
},
|
|
38164
|
+
// Superstate USTB — $740M short-duration govt securities.
|
|
38165
|
+
USTB: {
|
|
38166
|
+
pool: "1910847a-f8b5-40ce-a1ab-1dafdded5fbb",
|
|
38167
|
+
keys: ["Superstate Short Duration US Government Securities Fund::USTB"]
|
|
38168
|
+
},
|
|
38169
|
+
// Superstate USCC — crypto-carry fund (basis, not T-bills).
|
|
38170
|
+
USCC: {
|
|
38171
|
+
pool: "aff74ce8-4fe3-462b-af11-542cc16d24b2",
|
|
38172
|
+
keys: ["Superstate USCC::USCC", "Superstate Crypto Carry Fund::USCC"]
|
|
38173
|
+
},
|
|
38174
|
+
// VanEck VBILL (via Securitize) — $179M.
|
|
38175
|
+
VBILL: {
|
|
38176
|
+
pool: "5663e2ef-7e9c-4755-9701-9b59b90dbba3",
|
|
38177
|
+
keys: ["VanEck Treasury Fund::VBILL"]
|
|
38178
|
+
},
|
|
38179
|
+
// OpenEden TBILL — bare group on 1/42161. (THBILL is Theo's fund —
|
|
38180
|
+
// a different asset with its own fetcher.)
|
|
38181
|
+
TBILL: {
|
|
38182
|
+
pool: "e140f3b2-0327-46ea-93f5-88b17b0a0a16",
|
|
38183
|
+
keys: ["TBILL"]
|
|
38184
|
+
},
|
|
38185
|
+
// OpenEden cUSDO — compounding ERC-4626 wrapper over USDO; accrues
|
|
38186
|
+
// USDO's T-bill yield. The sweep's one full-vault graduate: it also
|
|
38187
|
+
// has savings-registry rows on 1/56/8453 (permissionless wrap —
|
|
38188
|
+
// `maxDeposit = uint256.max` verified) binding these same keys.
|
|
38189
|
+
CUSDO: {
|
|
38190
|
+
pool: "f083596e-032d-4d6b-a7a8-1836d3f99bcd",
|
|
38191
|
+
keys: [
|
|
38192
|
+
"Compounding Open Dollar::CUSDO",
|
|
38193
|
+
"Compounding Open Dollar::cUSDO",
|
|
38194
|
+
"Compounding OpenDollar::CUSDO"
|
|
38195
|
+
]
|
|
38196
|
+
}
|
|
38197
|
+
};
|
|
38198
|
+
var rwaFundsFetcher = {
|
|
38199
|
+
label: "RWA_FUNDS",
|
|
38200
|
+
fetch: async () => {
|
|
38201
|
+
const out = {};
|
|
38202
|
+
await Promise.all(
|
|
38203
|
+
Object.entries(RWA_FUNDS).map(async ([label, fund]) => {
|
|
38204
|
+
try {
|
|
38205
|
+
const apr = apyToAprPercent(await fetchDefiLlamaApy(fund.pool));
|
|
38206
|
+
for (const key of fund.keys) out[key] = apr;
|
|
38207
|
+
} catch {
|
|
38208
|
+
}
|
|
38209
|
+
})
|
|
38210
|
+
);
|
|
38211
|
+
return out;
|
|
37773
38212
|
}
|
|
37774
|
-
throw new Error(
|
|
37775
|
-
`spUSDG APR: no Robinhood RPC returned valid historical chi (${String(lastErr)})`
|
|
37776
|
-
);
|
|
37777
38213
|
};
|
|
37778
|
-
|
|
37779
|
-
|
|
38214
|
+
|
|
38215
|
+
// src/yields/intrinsic/fetchers/reProtocol.ts
|
|
38216
|
+
var REUSD_KEY = "RE::reUSD";
|
|
38217
|
+
var REUSDE_KEY = "RE::reUSDe";
|
|
38218
|
+
var REUSD_GROUP_KEY = "Re Protocol reUSD::REUSD";
|
|
38219
|
+
var REUSDE_GROUP_KEY = "Re Protocol reUSDe::REUSDE";
|
|
38220
|
+
var REUSD_POOL = "1c312830-ee96-40c9-b55f-b0f209ca6ebd";
|
|
38221
|
+
var REUSDE_POOL = "145810df-dc01-43e7-8033-e0aa5dceb767";
|
|
38222
|
+
var reProtocolFetcher = {
|
|
38223
|
+
label: "RE_PROTOCOL",
|
|
37780
38224
|
fetch: async () => {
|
|
37781
|
-
const
|
|
37782
|
-
|
|
38225
|
+
const [reusd, reusde] = await Promise.allSettled([
|
|
38226
|
+
fetchDefiLlamaApy(REUSD_POOL),
|
|
38227
|
+
fetchDefiLlamaApy(REUSDE_POOL)
|
|
38228
|
+
]);
|
|
38229
|
+
const out = {};
|
|
38230
|
+
if (reusd.status === "fulfilled") {
|
|
38231
|
+
const apr = apyToAprPercent(reusd.value);
|
|
38232
|
+
out[REUSD_KEY] = apr;
|
|
38233
|
+
out[REUSD_GROUP_KEY] = apr;
|
|
38234
|
+
}
|
|
38235
|
+
if (reusde.status === "fulfilled") {
|
|
38236
|
+
const apr = apyToAprPercent(reusde.value);
|
|
38237
|
+
out[REUSDE_KEY] = apr;
|
|
38238
|
+
out[REUSDE_GROUP_KEY] = apr;
|
|
38239
|
+
}
|
|
38240
|
+
if (Object.keys(out).length === 0) {
|
|
38241
|
+
throw new Error("Re Protocol: DefiLlama returned no apy for either pool");
|
|
38242
|
+
}
|
|
38243
|
+
return out;
|
|
38244
|
+
}
|
|
38245
|
+
};
|
|
38246
|
+
|
|
38247
|
+
// src/yields/intrinsic/fetchers/nativeCreditPool.ts
|
|
38248
|
+
var nativeCreditPoolYieldKey = (chainId, underlying) => `${chainId}:${underlying.toLowerCase()}`;
|
|
38249
|
+
var POOL_IDS = {
|
|
38250
|
+
// Ethereum
|
|
38251
|
+
"1": {
|
|
38252
|
+
// wNLP-USDT — 2.92 % APY at pinning (2026-07-30)
|
|
38253
|
+
"0xdac17f958d2ee523a2206206994597c13d831ec7": "ea6b472d-82a2-47fa-9c55-78907deebe13",
|
|
38254
|
+
// wNLP-USDC — 2.58 %
|
|
38255
|
+
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": "8e92a8ea-0dbd-463e-bb0b-a7f419b20db5",
|
|
38256
|
+
// wNLP-WETH — 2.21 %
|
|
38257
|
+
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": "76aa8b2e-c5cd-4ae5-8182-c74ee969d71d",
|
|
38258
|
+
// wNLP-WBTC — 0.43 %
|
|
38259
|
+
"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": "8c603090-cda6-4a17-975a-69a08a7dcf5e",
|
|
38260
|
+
// wNLP-tGLD — 0 %
|
|
38261
|
+
"0x6a547b25534234bb79ce6961a23db13de154b6f4": "eb208601-24b8-5291-8c13-1327208ef2e9",
|
|
38262
|
+
// wNLP-STONEUSD — 0 %
|
|
38263
|
+
"0x6a6e3a4396993a4ec98a6f4a654cc0819538721e": "09f09cf1-915a-4b71-82eb-5f6c54f0cc68"
|
|
38264
|
+
},
|
|
38265
|
+
// BNB Chain
|
|
38266
|
+
"56": {
|
|
38267
|
+
// wNLP-Q3B (QQQB) — 36.42 % on a $4.2 M tokenized-equity pool
|
|
38268
|
+
"0x205812cdbed920aff76c6580abd681a46d11efc7": "a5bd33df-4410-5631-a44b-bab8214b1dc2",
|
|
38269
|
+
// wNLP-USDT — 3.40 %
|
|
38270
|
+
"0x55d398326f99059ff775485246999027b3197955": "14ca42f2-1d51-4093-b5c8-74effe4c5cf3",
|
|
38271
|
+
// wNLP-WBNB — 1.17 %
|
|
38272
|
+
"0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c": "cd637956-e278-4462-a030-8d0d26a63a5c",
|
|
38273
|
+
// wNLP-P4B (PLTRB) — 0 %
|
|
38274
|
+
"0x0ca5d51d0277bd006fd9607d3e560785ebad8222": "a36f61e0-31d4-5bce-85c1-b7cfd57b2c21",
|
|
38275
|
+
// wNLP-S4B (SNDKB) — 0 %
|
|
38276
|
+
"0x3ee4df61bd4f867e349beae8bfe07bc31b4850fb": "06081a23-0157-4141-951b-eae858070214",
|
|
38277
|
+
// wNLP-T4B (TSLAB) — 0 %
|
|
38278
|
+
"0x5b1910eaad6450e50f816082aa078c41f10c292f": "44b167ce-b22c-4294-8877-4f71042bdd13",
|
|
38279
|
+
// wNLP-L4B (LITEB) — 0 %
|
|
38280
|
+
"0x64748bea17b6d19e242adf20425de2440c656142": "aa632ad9-f1e1-5b35-a76a-33006320aa1e",
|
|
38281
|
+
// wNLP-M5B (METAB) — 0 %
|
|
38282
|
+
"0x7425889fe94f9d693e8daefe88bcced6acfef4c0": "75edd0e5-82b9-5ff8-beba-4d9f07322990",
|
|
38283
|
+
// wNLP-M6B (MSFTB) — 0 %
|
|
38284
|
+
"0x80106cb3ead06659a5ad19df39d9b4733863b9b0": "8d6849a9-6bcb-550d-b916-38a0e792a097",
|
|
38285
|
+
// wNLP-C4B (CRCLB) — 0 %
|
|
38286
|
+
"0x80f3d493ebce97e343c53d29a137942416b4ffc0": "a1e52090-7faf-46e9-9e1e-174982f4cad9",
|
|
38287
|
+
// wNLP-USDC — 0 %
|
|
38288
|
+
"0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d": "0f76c834-6f24-4187-b7d5-6f3d641c3123",
|
|
38289
|
+
// wNLP-USD1 — 0 %
|
|
38290
|
+
"0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d": "28211a21-46c4-4a0d-807a-f010b304c3d0",
|
|
38291
|
+
// wNLP-M2B (MUB) — 0 %
|
|
38292
|
+
"0xcdf2f3e0fa43c47a6662a91c9e4a7c5f69762699": "1687633e-61ff-49d4-9256-5734ba06e595"
|
|
38293
|
+
},
|
|
38294
|
+
// Arbitrum
|
|
38295
|
+
"42161": {
|
|
38296
|
+
// wNLP-USDT (USD₮0) — 2.57 %
|
|
38297
|
+
"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9": "a6dc5af9-ff47-44f4-ad38-a0c6fc62278e",
|
|
38298
|
+
// wNLP-WETH — 0.88 %
|
|
38299
|
+
"0x82af49447d8a07e3bd95bd0d56f35241523fbab1": "1b7193de-1ddf-48b7-81d2-13f082a8cf3a"
|
|
38300
|
+
},
|
|
38301
|
+
// Base
|
|
38302
|
+
"8453": {
|
|
38303
|
+
// wNLP-USDC — 3.52 %
|
|
38304
|
+
"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913": "a057d9d8-99d4-4017-bb59-b96f67366178",
|
|
38305
|
+
// wNLP-WETH — 1.98 %
|
|
38306
|
+
"0x4200000000000000000000000000000000000006": "9f1d3455-050c-482c-93e0-e1271d240cec"
|
|
37783
38307
|
}
|
|
37784
38308
|
};
|
|
38309
|
+
var buildChainFetcher = (chainId, pools) => ({
|
|
38310
|
+
label: `NATIVE_CREDIT_POOL_${chainId}`,
|
|
38311
|
+
fetch: async () => {
|
|
38312
|
+
const rows = Object.entries(pools);
|
|
38313
|
+
const settled = await Promise.allSettled(
|
|
38314
|
+
rows.map(([, poolId]) => fetchDefiLlamaApy(poolId))
|
|
38315
|
+
);
|
|
38316
|
+
const out = {};
|
|
38317
|
+
settled.forEach((res, i) => {
|
|
38318
|
+
if (res.status !== "fulfilled") return;
|
|
38319
|
+
if (!Number.isFinite(res.value)) return;
|
|
38320
|
+
out[nativeCreditPoolYieldKey(chainId, rows[i][0])] = apyToAprPercent(
|
|
38321
|
+
res.value
|
|
38322
|
+
);
|
|
38323
|
+
});
|
|
38324
|
+
return out;
|
|
38325
|
+
}
|
|
38326
|
+
});
|
|
38327
|
+
var FETCHERS = Object.fromEntries(
|
|
38328
|
+
Object.entries(POOL_IDS).map(([chainId, pools]) => [
|
|
38329
|
+
chainId,
|
|
38330
|
+
buildChainFetcher(chainId, pools)
|
|
38331
|
+
])
|
|
38332
|
+
);
|
|
38333
|
+
var nativeCreditPoolFetcher = (chainId) => FETCHERS[chainId];
|
|
38334
|
+
|
|
38335
|
+
// src/vaults/savings/registryNative.ts
|
|
38336
|
+
var NATIVE_CREDIT_VAULT = {
|
|
38337
|
+
"1": "0xe3d41d19564922c9952f692c5dd0563030f5f2ef",
|
|
38338
|
+
// Ethereum
|
|
38339
|
+
"56": "0xba8db0caf781cac69b6acf6c848ac148264cc05d",
|
|
38340
|
+
// BNB Chain
|
|
38341
|
+
"42161": "0xba1cf8a63227b46575af823beb4d83d1025eff09",
|
|
38342
|
+
// Arbitrum
|
|
38343
|
+
"8453": "0x74a4cd023e5afb88369e3f22b02440f2614a1367",
|
|
38344
|
+
// Base
|
|
38345
|
+
"143": "0xcd1d2d602c3e7394515daae96e4ffe16de71e5b4",
|
|
38346
|
+
// Monad
|
|
38347
|
+
"196": "0x4df7557734b382eb542bea6c74786d398df4cc19",
|
|
38348
|
+
// X Layer
|
|
38349
|
+
"4663": "0x57b8f68ef57af2db70bc9aac891836661ca4cb51",
|
|
38350
|
+
// Robinhood Chain
|
|
38351
|
+
"2818": "0x4df7557734b382eb542bea6c74786d398df4cc19"
|
|
38352
|
+
// Morph
|
|
38353
|
+
};
|
|
38354
|
+
var NATIVE_WNLP_ROWS = {
|
|
38355
|
+
// Ethereum — 24 pools, 7 funded, 6 with a DefiLlama APR.
|
|
38356
|
+
"1": [
|
|
38357
|
+
[
|
|
38358
|
+
"wNLP-WETH",
|
|
38359
|
+
"0x50ecabe78ae99bb1adc292a94e535feb0ed29853",
|
|
38360
|
+
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
|
38361
|
+
"0x79dcfeb6f52977ef899d92bece132e95c3d08b66",
|
|
38362
|
+
18,
|
|
38363
|
+
259200
|
|
38364
|
+
],
|
|
38365
|
+
[
|
|
38366
|
+
"wNLP-WBTC",
|
|
38367
|
+
"0x9441f31ab75f466a8afdc67a0fa65241f7600f5a",
|
|
38368
|
+
"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
|
|
38369
|
+
"0x0a1a4d7cb85b231cc9223730d2ae0582ddad228a",
|
|
38370
|
+
8,
|
|
38371
|
+
259200
|
|
38372
|
+
],
|
|
38373
|
+
[
|
|
38374
|
+
"wNLP-USDT",
|
|
38375
|
+
"0xc31daeeb822790e9ca730e7e34a9ef497fffc959",
|
|
38376
|
+
"0xdac17f958d2ee523a2206206994597c13d831ec7",
|
|
38377
|
+
"0xd1f2d929881abb26e5780d202d3c550df264791c",
|
|
38378
|
+
6,
|
|
38379
|
+
259200
|
|
38380
|
+
],
|
|
38381
|
+
[
|
|
38382
|
+
"wNLP-USDC",
|
|
38383
|
+
"0x3c339289baa2eab3802c1f0c10e025b29bdbea1a",
|
|
38384
|
+
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
38385
|
+
"0x231c3946b3a4ea1163744f236a184f796a8e18a1",
|
|
38386
|
+
6,
|
|
38387
|
+
259200
|
|
38388
|
+
],
|
|
38389
|
+
[
|
|
38390
|
+
"wNLP-STONEUSD",
|
|
38391
|
+
"0xb88791ef86d10037f7481b4e3fcbca5bb4162bfa",
|
|
38392
|
+
"0x6a6e3a4396993a4ec98a6f4a654cc0819538721e",
|
|
38393
|
+
"0x65dd5953ac28018207da0a309d0304cd53e5b734",
|
|
38394
|
+
18,
|
|
38395
|
+
28800
|
|
38396
|
+
],
|
|
38397
|
+
// 8h queue, 0bips instant fee
|
|
38398
|
+
[
|
|
38399
|
+
"wNLP-CRCLon",
|
|
38400
|
+
"0xaeb7c9122d897a224180d2ca25bc86a16d12ae92",
|
|
38401
|
+
"0x3632dea96a953c11dac2f00b4a05a32cd1063fae",
|
|
38402
|
+
"0x5b2bc2d8ad715391aff2ffa0f3f19d3a4c6686ed",
|
|
38403
|
+
18,
|
|
38404
|
+
259200
|
|
38405
|
+
],
|
|
38406
|
+
// unfunded, no APR feed
|
|
38407
|
+
[
|
|
38408
|
+
"wNLP-GOOGLon",
|
|
38409
|
+
"0x66924f881bd0cbfabded19838c5f5443867359d9",
|
|
38410
|
+
"0xba47214edd2bb43099611b208f75e4b42fdcfedc",
|
|
38411
|
+
"0x6285d06426eef9beef33ee92eab7f491f736da57",
|
|
38412
|
+
18,
|
|
38413
|
+
259200
|
|
38414
|
+
],
|
|
38415
|
+
// unfunded, no APR feed
|
|
38416
|
+
[
|
|
38417
|
+
"wNLP-INTCon",
|
|
38418
|
+
"0xb5cebfa986dd20a674be725bacebabec458abc84",
|
|
38419
|
+
"0xfda09936dbd717368de0835ba441d9e62069d36f",
|
|
38420
|
+
"0x97c156ec88085e8a057955908d056e55fc0ac589",
|
|
38421
|
+
18,
|
|
38422
|
+
259200
|
|
38423
|
+
],
|
|
38424
|
+
// unfunded, no APR feed
|
|
38425
|
+
[
|
|
38426
|
+
"wNLP-MRVLon",
|
|
38427
|
+
"0x3b1dbe5ca2d39fac168e3575d707b714a7eaa7e7",
|
|
38428
|
+
"0xf404e5f887dbd5508e16a1198fcdd5de1a4296b8",
|
|
38429
|
+
"0x7f24d9dc37483a50fcbabdb2274cf8748ae0907a",
|
|
38430
|
+
18,
|
|
38431
|
+
259200
|
|
38432
|
+
],
|
|
38433
|
+
// unfunded, no APR feed
|
|
38434
|
+
[
|
|
38435
|
+
"wNLP-MUon",
|
|
38436
|
+
"0x1e42d39df3e927c0765f258a8b7f75726350f41b",
|
|
38437
|
+
"0x050362ab1072cb2ce74d74770e22a3203ad04ee5",
|
|
38438
|
+
"0x3ee49a51a5efa599ff544fd37f197bbf15536e04",
|
|
38439
|
+
18,
|
|
38440
|
+
259200
|
|
38441
|
+
],
|
|
38442
|
+
// unfunded, no APR feed
|
|
38443
|
+
[
|
|
38444
|
+
"wNLP-NVDAon",
|
|
38445
|
+
"0xe74ee33a50a9eab6f62cb22f44b1e72e5579894c",
|
|
38446
|
+
"0x2d1f7226bd1f780af6b9a49dcc0ae00e8df4bdee",
|
|
38447
|
+
"0x3f527be145afa0e808c41ec9060513dbb82afe0c",
|
|
38448
|
+
18,
|
|
38449
|
+
259200
|
|
38450
|
+
],
|
|
38451
|
+
// unfunded, no APR feed
|
|
38452
|
+
[
|
|
38453
|
+
"wNLP-QQQon",
|
|
38454
|
+
"0xe05f1635756b6f5046e53f8e911a14794a73a4e7",
|
|
38455
|
+
"0x0e397938c1aa0680954093495b70a9f5e2249aba",
|
|
38456
|
+
"0x9d2f7e285557c65416fb2bbb268d509e9e2eb2b3",
|
|
38457
|
+
18,
|
|
38458
|
+
259200
|
|
38459
|
+
],
|
|
38460
|
+
// unfunded, no APR feed
|
|
38461
|
+
[
|
|
38462
|
+
"wNLP-SPCXon",
|
|
38463
|
+
"0xbffaaa25d2b8fe6e3e8c2c790673fa0c28c64bd4",
|
|
38464
|
+
"0xc9eef266834730340a55b6cc24621b31baf55581",
|
|
38465
|
+
"0xe66430ce224b1e65100d1b9a15381aa59e17e4b4",
|
|
38466
|
+
18,
|
|
38467
|
+
259200
|
|
38468
|
+
],
|
|
38469
|
+
// unfunded, no APR feed
|
|
38470
|
+
[
|
|
38471
|
+
"wNLP-TSLAon",
|
|
38472
|
+
"0x0183d055c77310af03dcb397efaa7e9cfb6db59b",
|
|
38473
|
+
"0xf6b1117ec07684d3958cad8beb1b302bfd21103f",
|
|
38474
|
+
"0x0cb46d89ed4ae005160b3270fafe453c43bba664",
|
|
38475
|
+
18,
|
|
38476
|
+
259200
|
|
38477
|
+
],
|
|
38478
|
+
// no APR feed
|
|
38479
|
+
[
|
|
38480
|
+
"wNLP-CRCLx",
|
|
38481
|
+
"0x2ba837484e8969da87d237effedea7badd294dd9",
|
|
38482
|
+
"0xfebded1b0986a8ee107f5ab1a1c5a813491deceb",
|
|
38483
|
+
"0x149d45c599203e06d727b7d10bb00f7035023932",
|
|
38484
|
+
18,
|
|
38485
|
+
259200
|
|
38486
|
+
],
|
|
38487
|
+
// unfunded, no APR feed
|
|
38488
|
+
[
|
|
38489
|
+
"wNLP-GOOGLx",
|
|
38490
|
+
"0x8425b76b81008d6b8f0ed468d72a2098fc13b2d2",
|
|
38491
|
+
"0xe92f673ca36c5e2efd2de7628f815f84807e803f",
|
|
38492
|
+
"0x8cbbace186e3411b61d57b897c916b912a36991a",
|
|
38493
|
+
18,
|
|
38494
|
+
259200
|
|
38495
|
+
],
|
|
38496
|
+
// unfunded, no APR feed
|
|
38497
|
+
[
|
|
38498
|
+
"wNLP-NVDAx",
|
|
38499
|
+
"0x2014e669ab74e114aa155c6b9c162bb26a5b9972",
|
|
38500
|
+
"0xc845b2894dbddd03858fd2d643b4ef725fe0849d",
|
|
38501
|
+
"0x6540c6b85ade3601f9bdf5b2d8712615dbd7730b",
|
|
38502
|
+
18,
|
|
38503
|
+
259200
|
|
38504
|
+
],
|
|
38505
|
+
// unfunded, no APR feed
|
|
38506
|
+
[
|
|
38507
|
+
"wNLP-QQQx",
|
|
38508
|
+
"0x12a81e5b0721e62d907ae5527031fb29f9eef323",
|
|
38509
|
+
"0xa753a7395cae905cd615da0b82a53e0560f250af",
|
|
38510
|
+
"0xe004a1ff7633a53530e697eec8e9de952d792abb",
|
|
38511
|
+
18,
|
|
38512
|
+
259200
|
|
38513
|
+
],
|
|
38514
|
+
// unfunded, no APR feed
|
|
38515
|
+
[
|
|
38516
|
+
"wNLP-SPCXx",
|
|
38517
|
+
"0x405a559b5c0fcb207ddd60dd2b87e9f6b5798564",
|
|
38518
|
+
"0x68fa48b1c2fe52b3d776e1953e0e782b5044ce28",
|
|
38519
|
+
"0x17beb26401a50d139e167d80e22494e17df040cd",
|
|
38520
|
+
18,
|
|
38521
|
+
259200
|
|
38522
|
+
],
|
|
38523
|
+
// unfunded, no APR feed
|
|
38524
|
+
[
|
|
38525
|
+
"wNLP-TSLAx",
|
|
38526
|
+
"0x95603e6d7753833b1ad9feba5f4e7213ba5b1d8a",
|
|
38527
|
+
"0x8ad3c73f833d3f9a523ab01476625f269aeb7cf0",
|
|
38528
|
+
"0x8f8ce39752ef02916a13422568aea6a4cc178d16",
|
|
38529
|
+
18,
|
|
38530
|
+
259200
|
|
38531
|
+
],
|
|
38532
|
+
// unfunded, no APR feed
|
|
38533
|
+
[
|
|
38534
|
+
"wNLP-PAXG",
|
|
38535
|
+
"0xa15100ee8c648dd9d01271424bface4891aa2e8f",
|
|
38536
|
+
"0x45804880de22913dafe09f4980848ece6ecbaf78",
|
|
38537
|
+
"0xc6e39e6ffc712708d229685fa7ca1abca4309377",
|
|
38538
|
+
18,
|
|
38539
|
+
259200
|
|
38540
|
+
],
|
|
38541
|
+
// unfunded, no APR feed
|
|
38542
|
+
[
|
|
38543
|
+
"wNLP-XAUt",
|
|
38544
|
+
"0x894e71b1cdf9fb8775d54dd911d60d5bd2a0e256",
|
|
38545
|
+
"0x68749665ff8d2d112fa859aa293f07a622782f38",
|
|
38546
|
+
"0x63b102f73c19e6fb0cb3545182d97371dbab62fc",
|
|
38547
|
+
6,
|
|
38548
|
+
259200
|
|
38549
|
+
],
|
|
38550
|
+
// unfunded, no APR feed
|
|
38551
|
+
[
|
|
38552
|
+
"wNLP-tGLD",
|
|
38553
|
+
"0x72bc5907f4bd6963a145cad7fe6538927062bec4",
|
|
38554
|
+
"0x6a547b25534234bb79ce6961a23db13de154b6f4",
|
|
38555
|
+
"0xecff722c6a57c097b12d5e6a77bd8ad15bae4f0f",
|
|
38556
|
+
18,
|
|
38557
|
+
259200
|
|
38558
|
+
],
|
|
38559
|
+
[
|
|
38560
|
+
"wNLP-DRAMon",
|
|
38561
|
+
"0x4aa3d1cca957ee0c21333b7465fc94feab45037a",
|
|
38562
|
+
"0xdb5a8f5b4c17f2ee2e7192a150687e48eb3c415d",
|
|
38563
|
+
"0x6b5ce3319e47f3c59a27564b5f49ae1926322633",
|
|
38564
|
+
18,
|
|
38565
|
+
259200
|
|
38566
|
+
]
|
|
38567
|
+
// unfunded, no APR feed
|
|
38568
|
+
],
|
|
38569
|
+
// BNB Chain — 49 pools, 19 funded, 13 with a DefiLlama APR.
|
|
38570
|
+
"56": [
|
|
38571
|
+
[
|
|
38572
|
+
"wNLP-WBNB",
|
|
38573
|
+
"0x85f08a266758ea0c98b15deae71ca6ee84392afa",
|
|
38574
|
+
"0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
|
|
38575
|
+
"0x9e0de0b11cd3b50370ddabf3926553c4fc3cb956",
|
|
38576
|
+
18,
|
|
38577
|
+
259200
|
|
38578
|
+
],
|
|
38579
|
+
[
|
|
38580
|
+
"wNLP-ETH",
|
|
38581
|
+
"0xfafae0cdec65cdd601ffc39f472dd4f5c7bd0721",
|
|
38582
|
+
"0x2170ed0880ac9a755fd29b2688956bd959f933f8",
|
|
38583
|
+
"0x3906f7078b25b3d4a568438da7be5c0abbe481a8",
|
|
38584
|
+
18,
|
|
38585
|
+
259200
|
|
38586
|
+
],
|
|
38587
|
+
// unfunded, no APR feed
|
|
38588
|
+
[
|
|
38589
|
+
"wNLP-USDT",
|
|
38590
|
+
"0xea5ff211ef700dccc521a1e6501c9fe1b95d8ee7",
|
|
38591
|
+
"0x55d398326f99059ff775485246999027b3197955",
|
|
38592
|
+
"0xb88791ef86d10037f7481b4e3fcbca5bb4162bfa",
|
|
38593
|
+
18,
|
|
38594
|
+
259200
|
|
38595
|
+
],
|
|
38596
|
+
[
|
|
38597
|
+
"wNLP-USDC",
|
|
38598
|
+
"0x8592ffff658310150befd83c3c5de326e9bf6f0d",
|
|
38599
|
+
"0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
|
|
38600
|
+
"0x38eda6dd1def97aaa07d5fa781395221305bc3f1",
|
|
38601
|
+
18,
|
|
38602
|
+
259200
|
|
38603
|
+
],
|
|
38604
|
+
[
|
|
38605
|
+
"wNLP-USD1",
|
|
38606
|
+
"0x2f6f303924f0fdc559c57a14cb73dd9a4d611bd8",
|
|
38607
|
+
"0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d",
|
|
38608
|
+
"0x92903262eff424cae02d6f7b7b0a486e4c7ef24b",
|
|
38609
|
+
18,
|
|
38610
|
+
28800
|
|
38611
|
+
],
|
|
38612
|
+
// 8h queue, 0bips instant fee
|
|
38613
|
+
[
|
|
38614
|
+
"wNLP-STONEUSD",
|
|
38615
|
+
"0xa1cc671f9b975d0a548c436175b99891db961934",
|
|
38616
|
+
"0x8b4e28607bdcacbf937f81f29e3dafe7bc1d7c0b",
|
|
38617
|
+
"0x5b8382383c7d5bb5341cc3dc97cb09d5b5a5e798",
|
|
38618
|
+
18,
|
|
38619
|
+
28800
|
|
38620
|
+
],
|
|
38621
|
+
// unfunded, no APR feed, 8h queue, 0bips instant fee
|
|
38622
|
+
[
|
|
38623
|
+
"wNLP-CRCLon",
|
|
38624
|
+
"0x50fbc992085b065a404fb007e344d49c558047b2",
|
|
38625
|
+
"0x992879cd8ce0c312d98648875b5a8d6d042cbf34",
|
|
38626
|
+
"0x8a3d397caddd88e725e012af97bb1af3fee3f250",
|
|
38627
|
+
18,
|
|
38628
|
+
259200
|
|
38629
|
+
],
|
|
38630
|
+
// no APR feed
|
|
38631
|
+
[
|
|
38632
|
+
"wNLP-GOOGLon",
|
|
38633
|
+
"0x14e13011121fa293d20a4d9a7037814f3c932860",
|
|
38634
|
+
"0x091fc7778e6932d4009b087b191d1ee3bac5729a",
|
|
38635
|
+
"0x0335ab1c86aaea2c442d10fec9e54261a4e0cc90",
|
|
38636
|
+
18,
|
|
38637
|
+
259200
|
|
38638
|
+
],
|
|
38639
|
+
// unfunded, no APR feed
|
|
38640
|
+
[
|
|
38641
|
+
"wNLP-INTCon",
|
|
38642
|
+
"0x6b3de4f43d20c7b29bca9850dfbf6bf94824e67e",
|
|
38643
|
+
"0xa528caaa2f96090e379d43f90834c75df54d6e74",
|
|
38644
|
+
"0x7facfe33b3a0de1ef8cdf15d8717439e9f60cc24",
|
|
38645
|
+
18,
|
|
38646
|
+
259200
|
|
38647
|
+
],
|
|
38648
|
+
// unfunded, no APR feed
|
|
38649
|
+
[
|
|
38650
|
+
"wNLP-MRVLon",
|
|
38651
|
+
"0x0d8de51813ef9b8634d3b91086884d3045a5f3e8",
|
|
38652
|
+
"0x1501ec83ffef405b4331cc4f73277a40fb0c627d",
|
|
38653
|
+
"0x2ac5c050b88a00e395a12b0d724f38a1f32050ad",
|
|
38654
|
+
18,
|
|
38655
|
+
259200
|
|
38656
|
+
],
|
|
38657
|
+
// unfunded, no APR feed
|
|
38658
|
+
[
|
|
38659
|
+
"wNLP-MUon",
|
|
38660
|
+
"0x3a18cde8a81060bdc7cace60ecbc2f01765f6008",
|
|
38661
|
+
"0x8b6acf6041a81567f012ff6a4c6d96d5818d74bf",
|
|
38662
|
+
"0x542c912b0e20895eeba104503d221683e1ceddc9",
|
|
38663
|
+
18,
|
|
38664
|
+
259200
|
|
38665
|
+
],
|
|
38666
|
+
// unfunded, no APR feed
|
|
38667
|
+
[
|
|
38668
|
+
"wNLP-NVDAon",
|
|
38669
|
+
"0x493fb39c8e37726539d3fb074c333a1eab58e36b",
|
|
38670
|
+
"0xa9ee28c80f960b889dfbd1902055218cba016f75",
|
|
38671
|
+
"0x912ce4b093fc7ce0de3cc64e9cd626706da838b7",
|
|
38672
|
+
18,
|
|
38673
|
+
259200
|
|
38674
|
+
],
|
|
38675
|
+
// unfunded, no APR feed
|
|
38676
|
+
[
|
|
38677
|
+
"wNLP-QQQon",
|
|
38678
|
+
"0x03e7dce34eed4adc4b228d00a28deba2b7941266",
|
|
38679
|
+
"0x0cde6936d305d5b34667fc46425e852efd73559a",
|
|
38680
|
+
"0x83ae22182fab9e75f7b85745693fc55100d18ca0",
|
|
38681
|
+
18,
|
|
38682
|
+
259200
|
|
38683
|
+
],
|
|
38684
|
+
// unfunded, no APR feed
|
|
38685
|
+
[
|
|
38686
|
+
"wNLP-SPCXon",
|
|
38687
|
+
"0xb810dc8f7ffc2318931b4af211592eac5e1d0190",
|
|
38688
|
+
"0xd0a58bc9d88d3ff48c0294cb7e45937d0e41a928",
|
|
38689
|
+
"0xcbd0d2627cb03da58dd8ee5bc62c964cb61d4734",
|
|
38690
|
+
18,
|
|
38691
|
+
259200
|
|
38692
|
+
],
|
|
38693
|
+
// unfunded, no APR feed
|
|
38694
|
+
[
|
|
38695
|
+
"wNLP-TSLAon",
|
|
38696
|
+
"0x73be73e7570fbcbd3d83de1e32ae5594c3963fe1",
|
|
38697
|
+
"0x2494b603319d4d9f9715c9f4496d9e0364b59d93",
|
|
38698
|
+
"0xbf9640dd79e916f386e2c89566654b6fe16b0f65",
|
|
38699
|
+
18,
|
|
38700
|
+
259200
|
|
38701
|
+
],
|
|
38702
|
+
// unfunded, no APR feed
|
|
38703
|
+
[
|
|
38704
|
+
"wNLP-DRAMon",
|
|
38705
|
+
"0x90cc94befe6c6437de7c6ded32a4dc25ebbee3d2",
|
|
38706
|
+
"0x087b5761b161429013d41ea54cd2fb6022a21564",
|
|
38707
|
+
"0x8ccb472112d0fe00ba7f8b8b9fc407e68d78f62b",
|
|
38708
|
+
18,
|
|
38709
|
+
259200
|
|
38710
|
+
],
|
|
38711
|
+
// unfunded, no APR feed
|
|
38712
|
+
[
|
|
38713
|
+
"wNLP-CRCLx",
|
|
38714
|
+
"0xddfe8d98a0b459a2a2906e02ab3dd5a5bbc303c8",
|
|
38715
|
+
"0xfebded1b0986a8ee107f5ab1a1c5a813491deceb",
|
|
38716
|
+
"0x4d722dc923510a9ec4cfb3c41c414b15cbce4df0",
|
|
38717
|
+
18,
|
|
38718
|
+
259200
|
|
38719
|
+
],
|
|
38720
|
+
// unfunded, no APR feed
|
|
38721
|
+
[
|
|
38722
|
+
"wNLP-GOOGLx",
|
|
38723
|
+
"0xa8d9eb043d4bc05e4b0dac89cd5837cf40fb3bc5",
|
|
38724
|
+
"0xe92f673ca36c5e2efd2de7628f815f84807e803f",
|
|
38725
|
+
"0x2db1571c7c7954e546c8f0870cfa16b244b7f6ff",
|
|
38726
|
+
18,
|
|
38727
|
+
259200
|
|
38728
|
+
],
|
|
38729
|
+
// unfunded, no APR feed
|
|
38730
|
+
[
|
|
38731
|
+
"wNLP-NVDAx",
|
|
38732
|
+
"0x358100ed7ecdd6c608d9d5e642e34b1a2ba152b7",
|
|
38733
|
+
"0xc845b2894dbddd03858fd2d643b4ef725fe0849d",
|
|
38734
|
+
"0xef435b99c2108d0309211d0cc05b70d202c0b5df",
|
|
38735
|
+
18,
|
|
38736
|
+
259200
|
|
38737
|
+
],
|
|
38738
|
+
// unfunded, no APR feed
|
|
38739
|
+
[
|
|
38740
|
+
"wNLP-QQQx",
|
|
38741
|
+
"0x427fb58709c47fb8794771bd2e17784c0cda845a",
|
|
38742
|
+
"0xa753a7395cae905cd615da0b82a53e0560f250af",
|
|
38743
|
+
"0x7768aa6322ab912bee159191ec3380df13f6db37",
|
|
38744
|
+
18,
|
|
38745
|
+
259200
|
|
38746
|
+
],
|
|
38747
|
+
// unfunded, no APR feed
|
|
38748
|
+
[
|
|
38749
|
+
"wNLP-SPCXx",
|
|
38750
|
+
"0x335d144f211c3f4dedb3ef1fe003cbc7dd9c24a9",
|
|
38751
|
+
"0x68fa48b1c2fe52b3d776e1953e0e782b5044ce28",
|
|
38752
|
+
"0xee880bf2050a23bb84dd4734dd7413d9d9793500",
|
|
38753
|
+
18,
|
|
38754
|
+
259200
|
|
38755
|
+
],
|
|
38756
|
+
// unfunded, no APR feed
|
|
38757
|
+
[
|
|
38758
|
+
"wNLP-TSLAx",
|
|
38759
|
+
"0xbcac5180fc867d741d06e1aafde15d65ca16d3f3",
|
|
38760
|
+
"0x8ad3c73f833d3f9a523ab01476625f269aeb7cf0",
|
|
38761
|
+
"0x826d54e624c59a01fe2917cda2429d3058880099",
|
|
38762
|
+
18,
|
|
38763
|
+
259200
|
|
38764
|
+
],
|
|
38765
|
+
// unfunded, no APR feed
|
|
38766
|
+
[
|
|
38767
|
+
"wNLP-A4B",
|
|
38768
|
+
"0xd8a25f5e864534bb2324f2eff6f5c3dd58693b8b",
|
|
38769
|
+
"0x75fd4cf6f8392e41e70391d60c90c0d5211603a1",
|
|
38770
|
+
"0xf4166b08dc7eea43101066ef8f52fb95d994d62c",
|
|
38771
|
+
18,
|
|
38772
|
+
259200
|
|
38773
|
+
],
|
|
38774
|
+
// no APR feed
|
|
38775
|
+
[
|
|
38776
|
+
"wNLP-COINB",
|
|
38777
|
+
"0x16ccbca076c24d1c174cddc8ce30389097bf8982",
|
|
38778
|
+
"0x585bde7c54abb5ccd7791f923d6c2187635f3952",
|
|
38779
|
+
"0xe7290a875d32f676b715283e1eafdfcece97110b",
|
|
38780
|
+
18,
|
|
38781
|
+
259200
|
|
38782
|
+
],
|
|
38783
|
+
// unfunded, no APR feed
|
|
38784
|
+
[
|
|
38785
|
+
"wNLP-C4B",
|
|
38786
|
+
"0xe05f1635756b6f5046e53f8e911a14794a73a4e7",
|
|
38787
|
+
"0x80f3d493ebce97e343c53d29a137942416b4ffc0",
|
|
38788
|
+
"0x9d2f7e285557c65416fb2bbb268d509e9e2eb2b3",
|
|
38789
|
+
18,
|
|
38790
|
+
259200
|
|
38791
|
+
],
|
|
38792
|
+
[
|
|
38793
|
+
"wNLP-DRAMB",
|
|
38794
|
+
"0x52207f4c347631abb40484e30c71fa66660581a7",
|
|
38795
|
+
"0x93862d63fd9fd488b1328e9b47717d75e994a84b",
|
|
38796
|
+
"0xd805265e8e1c003c65d7e2565149289459b2911f",
|
|
38797
|
+
18,
|
|
38798
|
+
259200
|
|
38799
|
+
],
|
|
38800
|
+
// unfunded, no APR feed
|
|
38801
|
+
[
|
|
38802
|
+
"wNLP-E3B",
|
|
38803
|
+
"0x3dac466a0190ce1dd7a062290ce48310206b4bca",
|
|
38804
|
+
"0xbe82f76637dba2c114c41df856c2c51e522e2cb8",
|
|
38805
|
+
"0x50b91e72b7a4a5eaf926931e4a6b3357c26235b2",
|
|
38806
|
+
18,
|
|
38807
|
+
259200
|
|
38808
|
+
],
|
|
38809
|
+
// no APR feed
|
|
38810
|
+
[
|
|
38811
|
+
"wNLP-GLWB",
|
|
38812
|
+
"0xfc6fdde35860a327be88f54bf35993f72de91a87",
|
|
38813
|
+
"0x740e075cbbea22a082b9d6679e65e82767875b6a",
|
|
38814
|
+
"0xbe38df1755e942e11241c2a39e029f9359a483e3",
|
|
38815
|
+
18,
|
|
38816
|
+
259200
|
|
38817
|
+
],
|
|
38818
|
+
// unfunded, no APR feed
|
|
38819
|
+
[
|
|
38820
|
+
"wNLP-GOOGLB",
|
|
38821
|
+
"0x38982f1604d2459f317ca9ff03808b17d4d9754b",
|
|
38822
|
+
"0x3f53de71c126bdabae20f9cd64848d317f6c3238",
|
|
38823
|
+
"0x7de2d4edc91dbef780f0c4f59828e752a9f43bac",
|
|
38824
|
+
18,
|
|
38825
|
+
259200
|
|
38826
|
+
],
|
|
38827
|
+
// unfunded, no APR feed
|
|
38828
|
+
[
|
|
38829
|
+
"wNLP-I4B",
|
|
38830
|
+
"0x737b83b17156348b84157d528e02bd9acec4163a",
|
|
38831
|
+
"0xe614e2fc6c787035ff51f452e8e826bfd32d5283",
|
|
38832
|
+
"0xe31013938457f086958c32a921a6ec17f468902d",
|
|
38833
|
+
18,
|
|
38834
|
+
259200
|
|
38835
|
+
],
|
|
38836
|
+
// no APR feed
|
|
38837
|
+
[
|
|
38838
|
+
"wNLP-L4B",
|
|
38839
|
+
"0xcf76092d538e4df7a1e8dc3eb8c21be1d462a5da",
|
|
38840
|
+
"0x64748bea17b6d19e242adf20425de2440c656142",
|
|
38841
|
+
"0xa97aea8e9d81771d4566cd1a636b58b600a1e3e8",
|
|
38842
|
+
18,
|
|
38843
|
+
259200
|
|
38844
|
+
],
|
|
38845
|
+
[
|
|
38846
|
+
"wNLP-M5B",
|
|
38847
|
+
"0x25fe9180e6c95da24b7a3fcff8bf2dbca1fb171a",
|
|
38848
|
+
"0x7425889fe94f9d693e8daefe88bcced6acfef4c0",
|
|
38849
|
+
"0x4c234c7575f762066b59670d52478c12a1d2c0ff",
|
|
38850
|
+
18,
|
|
38851
|
+
259200
|
|
38852
|
+
],
|
|
38853
|
+
[
|
|
38854
|
+
"wNLP-M6B",
|
|
38855
|
+
"0x19bbae8f804b0ea4c7c4351f722fd39efe37c2b2",
|
|
38856
|
+
"0x80106cb3ead06659a5ad19df39d9b4733863b9b0",
|
|
38857
|
+
"0x94cd73e04503537da2aa129832a0e3580d8f76a3",
|
|
38858
|
+
18,
|
|
38859
|
+
259200
|
|
38860
|
+
],
|
|
38861
|
+
[
|
|
38862
|
+
"wNLP-M4B",
|
|
38863
|
+
"0xafcd64ebfc83d57ddf5716f3814019f5543d7c46",
|
|
38864
|
+
"0xe87afb3076aeb0f9b14e368de8145ae6a2826a14",
|
|
38865
|
+
"0x8729f978393fe4a71a819c392822f80a0600f260",
|
|
38866
|
+
18,
|
|
38867
|
+
259200
|
|
38868
|
+
],
|
|
38869
|
+
// no APR feed
|
|
38870
|
+
[
|
|
38871
|
+
"wNLP-M2B",
|
|
38872
|
+
"0x66924f881bd0cbfabded19838c5f5443867359d9",
|
|
38873
|
+
"0xcdf2f3e0fa43c47a6662a91c9e4a7c5f69762699",
|
|
38874
|
+
"0x6285d06426eef9beef33ee92eab7f491f736da57",
|
|
38875
|
+
18,
|
|
38876
|
+
259200
|
|
38877
|
+
],
|
|
38878
|
+
[
|
|
38879
|
+
"wNLP-NBISB",
|
|
38880
|
+
"0x4d45a527b03551821c8d7d8974b939ed6a2824ec",
|
|
38881
|
+
"0xe256bc2a4f5297f8ba6f043f180a46300ecbcbb1",
|
|
38882
|
+
"0x1bbdd8da349ba112b51e644f10bab6598db4330b",
|
|
38883
|
+
18,
|
|
38884
|
+
259200
|
|
38885
|
+
],
|
|
38886
|
+
// unfunded, no APR feed
|
|
38887
|
+
[
|
|
38888
|
+
"wNLP-N4B",
|
|
38889
|
+
"0x2ba837484e8969da87d237effedea7badd294dd9",
|
|
38890
|
+
"0x02fca66c1d1afb4e2a7884261eb00f63598a7436",
|
|
38891
|
+
"0x149d45c599203e06d727b7d10bb00f7035023932",
|
|
38892
|
+
18,
|
|
38893
|
+
259200
|
|
38894
|
+
],
|
|
38895
|
+
// unfunded, no APR feed
|
|
38896
|
+
[
|
|
38897
|
+
"wNLP-P4B",
|
|
38898
|
+
"0x93da79355ae801a673e4d3b656a4152330646ee4",
|
|
38899
|
+
"0x0ca5d51d0277bd006fd9607d3e560785ebad8222",
|
|
38900
|
+
"0xe5ed3ae9fca303126526d4084481fd0b9f589a97",
|
|
38901
|
+
18,
|
|
38902
|
+
259200
|
|
38903
|
+
],
|
|
38904
|
+
[
|
|
38905
|
+
"wNLP-QCOMB",
|
|
38906
|
+
"0xdfa34465d1c6c044304b798fa4a147eac579b66b",
|
|
38907
|
+
"0x5f7a56e877b9130608bf8be962621011182fefe1",
|
|
38908
|
+
"0x8618171d00f972b6b40a7c20dd9f9b3d6efdb673",
|
|
38909
|
+
18,
|
|
38910
|
+
259200
|
|
38911
|
+
],
|
|
38912
|
+
// unfunded, no APR feed
|
|
38913
|
+
[
|
|
38914
|
+
"wNLP-Q3B",
|
|
38915
|
+
"0x564d609b363b902148af559c18aa1bc84bf29a5b",
|
|
38916
|
+
"0x205812cdbed920aff76c6580abd681a46d11efc7",
|
|
38917
|
+
"0xbb389a0ae36d5dc04967b1866c8f9835eca9f895",
|
|
38918
|
+
18,
|
|
38919
|
+
259200
|
|
38920
|
+
],
|
|
38921
|
+
[
|
|
38922
|
+
"wNLP-S4B",
|
|
38923
|
+
"0x2014e669ab74e114aa155c6b9c162bb26a5b9972",
|
|
38924
|
+
"0x3ee4df61bd4f867e349beae8bfe07bc31b4850fb",
|
|
38925
|
+
"0x6540c6b85ade3601f9bdf5b2d8712615dbd7730b",
|
|
38926
|
+
18,
|
|
38927
|
+
259200
|
|
38928
|
+
],
|
|
38929
|
+
[
|
|
38930
|
+
"wNLP-SOXLB",
|
|
38931
|
+
"0xcd1c23eaec3bbdef5f945f2b352b188c8a3b14d3",
|
|
38932
|
+
"0xd97d097a89113fa59b76c572e5b2eb647e8eefaf",
|
|
38933
|
+
"0x7ee63c39be8f868991830f47b167c21c0c1bf23c",
|
|
38934
|
+
18,
|
|
38935
|
+
259200
|
|
38936
|
+
],
|
|
38937
|
+
// unfunded, no APR feed
|
|
38938
|
+
[
|
|
38939
|
+
"wNLP-S5B",
|
|
38940
|
+
"0xf27760f7b431ad8caee0f4e3062e6140b14e0ebc",
|
|
38941
|
+
"0xbe9d156892e55e7154bcd3cb0fea677f9d3103e1",
|
|
38942
|
+
"0x8386c857577fced92537aea6e5112f38da46212a",
|
|
38943
|
+
18,
|
|
38944
|
+
259200
|
|
38945
|
+
],
|
|
38946
|
+
// no APR feed
|
|
38947
|
+
[
|
|
38948
|
+
"wNLP-SPYB",
|
|
38949
|
+
"0x5c53355123a51bd800934e0fa1f8eb8c9f3a848b",
|
|
38950
|
+
"0x7138b48df7d98d7e3cc221bfe7192d0a178182d8",
|
|
38951
|
+
"0x1535fa32cd0bcf66309da5209dbfca4f4c466ce1",
|
|
38952
|
+
18,
|
|
38953
|
+
259200
|
|
38954
|
+
],
|
|
38955
|
+
// unfunded, no APR feed
|
|
38956
|
+
[
|
|
38957
|
+
"wNLP-T4B",
|
|
38958
|
+
"0xaeb7c9122d897a224180d2ca25bc86a16d12ae92",
|
|
38959
|
+
"0x5b1910eaad6450e50f816082aa078c41f10c292f",
|
|
38960
|
+
"0x5b2bc2d8ad715391aff2ffa0f3f19d3a4c6686ed",
|
|
38961
|
+
18,
|
|
38962
|
+
259200
|
|
38963
|
+
],
|
|
38964
|
+
[
|
|
38965
|
+
"wNLP-WDCB",
|
|
38966
|
+
"0x3bdd26cf07bd97baa5f2a588cb6a67b83c7a60a5",
|
|
38967
|
+
"0xebe29695f8047c13d36e7a790ca8c1b239ffad1c",
|
|
38968
|
+
"0x22e87beb7307dcac4ab20b4a23080a3b7a078ff5",
|
|
38969
|
+
18,
|
|
38970
|
+
259200
|
|
38971
|
+
],
|
|
38972
|
+
// unfunded, no APR feed
|
|
38973
|
+
[
|
|
38974
|
+
"wNLP-CANP",
|
|
38975
|
+
"0x63689d5fe0d8f766fc11296c694634cd6f14ee6e",
|
|
38976
|
+
"0xdc22f0a9a60eee3697e925414bdb4580d1c35f91",
|
|
38977
|
+
"0xed2f65b5889f9889ad45b97108cc1d449ddef6ff",
|
|
38978
|
+
6,
|
|
38979
|
+
259200
|
|
38980
|
+
],
|
|
38981
|
+
// unfunded, no APR feed
|
|
38982
|
+
[
|
|
38983
|
+
"wNLP-CBRSB",
|
|
38984
|
+
"0x01246b4a5e22bba113108606451db0817a7d20f1",
|
|
38985
|
+
"0xe81c6bb0266cd68b4f17278531dd03ea1f12da4e",
|
|
38986
|
+
"0xb25861953cc45c6a0a572f892eb671e00198cfc7",
|
|
38987
|
+
18,
|
|
38988
|
+
259200
|
|
38989
|
+
],
|
|
38990
|
+
// unfunded, no APR feed
|
|
38991
|
+
[
|
|
38992
|
+
"wNLP-SK4B",
|
|
38993
|
+
"0x31ac519953055b7c356228658e6836d1c7b4fa36",
|
|
38994
|
+
"0xca750ef65f295bbecd685abf54e82caf297bdb61",
|
|
38995
|
+
"0x5e043dc607c23b94b964c8553722932b9eaf54cb",
|
|
38996
|
+
18,
|
|
38997
|
+
259200
|
|
38998
|
+
]
|
|
38999
|
+
// unfunded, no APR feed
|
|
39000
|
+
],
|
|
39001
|
+
// Arbitrum — 4 pools, 3 funded, 2 with a DefiLlama APR.
|
|
39002
|
+
"42161": [
|
|
39003
|
+
[
|
|
39004
|
+
"wNLP-WETH",
|
|
39005
|
+
"0x9db777ca39e1f1144d564cb5f593d629d2debe46",
|
|
39006
|
+
"0x82af49447d8a07e3bd95bd0d56f35241523fbab1",
|
|
39007
|
+
"0x7f1bcc60ed3c80da906fd91a2ec63ec71442430a",
|
|
39008
|
+
18,
|
|
39009
|
+
259200
|
|
39010
|
+
],
|
|
39011
|
+
[
|
|
39012
|
+
"wNLP-USDT",
|
|
39013
|
+
"0xe83ce032108f539c5a5b1c6029a89ff412d9e27f",
|
|
39014
|
+
"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",
|
|
39015
|
+
"0xa6734c9588c458f4f6bd450a62245d76303fb9a3",
|
|
39016
|
+
6,
|
|
39017
|
+
259200
|
|
39018
|
+
],
|
|
39019
|
+
[
|
|
39020
|
+
"wNLP-USDC",
|
|
39021
|
+
"0xb873363be6e4c99c1f4e6ffd6526c7c03a7a07ad",
|
|
39022
|
+
"0xaf88d065e77c8cc2239327c5edb3a432268e5831",
|
|
39023
|
+
"0x73a8df5258fb736eb1aeb198b72b73d6eb457bf8",
|
|
39024
|
+
6,
|
|
39025
|
+
259200
|
|
39026
|
+
],
|
|
39027
|
+
// no APR feed
|
|
39028
|
+
[
|
|
39029
|
+
"wNLP-WBTC",
|
|
39030
|
+
"0xd8865923465463002bc2ccc522e5a21f8d06adfa",
|
|
39031
|
+
"0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",
|
|
39032
|
+
"0xb043e07edf8cf2ddc2fa22bb087697a721af1058",
|
|
39033
|
+
8,
|
|
39034
|
+
259200
|
|
39035
|
+
]
|
|
39036
|
+
// unfunded, no APR feed
|
|
39037
|
+
],
|
|
39038
|
+
// Base — 4 pools, 3 funded, 2 with a DefiLlama APR.
|
|
39039
|
+
"8453": [
|
|
39040
|
+
[
|
|
39041
|
+
"wNLP-WETH",
|
|
39042
|
+
"0xc750fe788a828dc960cd08e8bbe1ddd3bffc03bf",
|
|
39043
|
+
"0x4200000000000000000000000000000000000006",
|
|
39044
|
+
"0x9af2f3c0cd35283e13f7087e2b34b1444b57a44c",
|
|
39045
|
+
18,
|
|
39046
|
+
259200
|
|
39047
|
+
],
|
|
39048
|
+
[
|
|
39049
|
+
"wNLP-USDC",
|
|
39050
|
+
"0xe745b0565cecb4612a41eae78319bf3ca8063e6f",
|
|
39051
|
+
"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
|
|
39052
|
+
"0xe7d6b7689bd2cea0af533dd3ad79df6968acb53e",
|
|
39053
|
+
6,
|
|
39054
|
+
259200
|
|
39055
|
+
],
|
|
39056
|
+
[
|
|
39057
|
+
"wNLP-USDT",
|
|
39058
|
+
"0x0872c63c9b1f55ea4166752ba3b890a444b59e9e",
|
|
39059
|
+
"0xfde4c96c8593536e31f229ea8f37b2ada2699bb2",
|
|
39060
|
+
"0x337ec533b568957af458e10cbfbcbf3d59c935b1",
|
|
39061
|
+
6,
|
|
39062
|
+
259200
|
|
39063
|
+
],
|
|
39064
|
+
// no APR feed
|
|
39065
|
+
[
|
|
39066
|
+
"wNLP-cbBTC",
|
|
39067
|
+
"0x90256c018d2acadda2da0b4fd61449e956fd59b6",
|
|
39068
|
+
"0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
|
|
39069
|
+
"0xa2efe8e37f247cb51c2a48692301335292ccb630",
|
|
39070
|
+
8,
|
|
39071
|
+
259200
|
|
39072
|
+
]
|
|
39073
|
+
// unfunded, no APR feed
|
|
39074
|
+
],
|
|
39075
|
+
// Monad — 6 pools, 4 funded, 0 with a DefiLlama APR.
|
|
39076
|
+
"143": [
|
|
39077
|
+
[
|
|
39078
|
+
"wNLP-WMON",
|
|
39079
|
+
"0x0166f153e26f572dfac570ccc351ba84ac7a2a72",
|
|
39080
|
+
"0x3bd359c1119da7da1d913d1c4d2b7c461115433a",
|
|
39081
|
+
"0x277ad957898ce34fd959cbfd28ab5962de613b85",
|
|
39082
|
+
18,
|
|
39083
|
+
259200
|
|
39084
|
+
],
|
|
39085
|
+
// no APR feed
|
|
39086
|
+
[
|
|
39087
|
+
"wNLP-USDC",
|
|
39088
|
+
"0xf3d44492f11a2dc234acba80a9e377ab5732b09d",
|
|
39089
|
+
"0x754704bc059f8c67012fed69bc8a327a5aafb603",
|
|
39090
|
+
"0xefadd9a8342bd4ae4d55aed2d748dc006149186a",
|
|
39091
|
+
6,
|
|
39092
|
+
259200
|
|
39093
|
+
],
|
|
39094
|
+
// no APR feed
|
|
39095
|
+
[
|
|
39096
|
+
"wNLP-USDT0",
|
|
39097
|
+
"0x3b1dbe5ca2d39fac168e3575d707b714a7eaa7e7",
|
|
39098
|
+
"0xe7cd86e13ac4309349f30b3435a9d337750fc82d",
|
|
39099
|
+
"0x4cbf9530d653d862a8ece9ed46af6c2f136e2e80",
|
|
39100
|
+
6,
|
|
39101
|
+
259200
|
|
39102
|
+
],
|
|
39103
|
+
// unfunded, no APR feed
|
|
39104
|
+
[
|
|
39105
|
+
"wNLP-WETH",
|
|
39106
|
+
"0x01135c821a87154de3f338f1978811f2648e9570",
|
|
39107
|
+
"0xee8c0e9f1bffb4eb878d8f15f368a02a35481242",
|
|
39108
|
+
"0x92e6d5cdf9c01473adf7089cc416bb934f702cfd",
|
|
39109
|
+
18,
|
|
39110
|
+
259200
|
|
39111
|
+
],
|
|
39112
|
+
// no APR feed
|
|
39113
|
+
[
|
|
39114
|
+
"wNLP-cbBTC",
|
|
39115
|
+
"0x72c486886d199984bdbcf278ba68358365b0f8b7",
|
|
39116
|
+
"0xd18b7ec58cdf4876f6afebd3ed1730e4ce10414b",
|
|
39117
|
+
"0x339808a8be84f74bdcd570c546e2efbd0e780296",
|
|
39118
|
+
8,
|
|
39119
|
+
259200
|
|
39120
|
+
],
|
|
39121
|
+
// no APR feed
|
|
39122
|
+
[
|
|
39123
|
+
"wNLP-AUSD",
|
|
39124
|
+
"0x70dd4db19f75dfea083ce50e77f9b53b55d8558a",
|
|
39125
|
+
"0x00000000efe302beaa2b3e6e1b18d08d69a9012a",
|
|
39126
|
+
"0x4ee1c93eb1ca08f566211fb18a8dc5c1c6d04939",
|
|
39127
|
+
6,
|
|
39128
|
+
28800
|
|
39129
|
+
]
|
|
39130
|
+
// unfunded, no APR feed, 8h queue
|
|
39131
|
+
],
|
|
39132
|
+
// X Layer — 9 pools, 2 funded, 0 with a DefiLlama APR.
|
|
39133
|
+
"196": [
|
|
39134
|
+
[
|
|
39135
|
+
"wNLP-WETH",
|
|
39136
|
+
"0xde540eabdb4ee3a2680394a4346dbfd76bb78e83",
|
|
39137
|
+
"0x5a77f1443d16ee5761d310e38b62f77f726bc71c",
|
|
39138
|
+
"0x79292d171531673ff97035315fda568189c3c8a5",
|
|
39139
|
+
18,
|
|
39140
|
+
259200
|
|
39141
|
+
],
|
|
39142
|
+
// no APR feed
|
|
39143
|
+
[
|
|
39144
|
+
"wNLP-USD\u20AE0",
|
|
39145
|
+
"0x0b28888e8f0755809c679e01f67591d1ed5ae9b9",
|
|
39146
|
+
"0x779ded0c9e1022225f8e0630b35a9b54be713736",
|
|
39147
|
+
"0x4af9206a885e4708ad3be482611d224239efe173",
|
|
39148
|
+
6,
|
|
39149
|
+
259200
|
|
39150
|
+
],
|
|
39151
|
+
// unfunded, no APR feed
|
|
39152
|
+
[
|
|
39153
|
+
"wNLP-USDG",
|
|
39154
|
+
"0x6285d06426eef9beef33ee92eab7f491f736da57",
|
|
39155
|
+
"0x4ae46a509f6b1d9056937ba4500cb143933d2dc8",
|
|
39156
|
+
"0x92e6d5cdf9c01473adf7089cc416bb934f702cfd",
|
|
39157
|
+
6,
|
|
39158
|
+
259200
|
|
39159
|
+
],
|
|
39160
|
+
// no APR feed
|
|
39161
|
+
[
|
|
39162
|
+
"wNLP-NVDAx",
|
|
39163
|
+
"0x7fde95f8ca333f87677e89e42d09cb4b156f8921",
|
|
39164
|
+
"0xc845b2894dbddd03858fd2d643b4ef725fe0849d",
|
|
39165
|
+
"0x06ab0323c1e3759fe3df946068825fe572db1254",
|
|
39166
|
+
18,
|
|
39167
|
+
259200
|
|
39168
|
+
],
|
|
39169
|
+
// unfunded, no APR feed
|
|
39170
|
+
[
|
|
39171
|
+
"wNLP-TSLAx",
|
|
39172
|
+
"0x78901dd5e09434c6d8c4caa651c012280324af59",
|
|
39173
|
+
"0x8ad3c73f833d3f9a523ab01476625f269aeb7cf0",
|
|
39174
|
+
"0x9dc27e2b3cc52533c159567a9e45243014ef3c0d",
|
|
39175
|
+
18,
|
|
39176
|
+
259200
|
|
39177
|
+
],
|
|
39178
|
+
// unfunded, no APR feed
|
|
39179
|
+
[
|
|
39180
|
+
"wNLP-CRCLx",
|
|
39181
|
+
"0xe1e4bcb64121fff9cfa4d4f5bc31759f035992ad",
|
|
39182
|
+
"0xfebded1b0986a8ee107f5ab1a1c5a813491deceb",
|
|
39183
|
+
"0xf3d44492f11a2dc234acba80a9e377ab5732b09d",
|
|
39184
|
+
18,
|
|
39185
|
+
259200
|
|
39186
|
+
],
|
|
39187
|
+
// unfunded, no APR feed
|
|
39188
|
+
[
|
|
39189
|
+
"wNLP-GOOGLx",
|
|
39190
|
+
"0x1d2831785db72d0809d493a4cfcc90fee47927ad",
|
|
39191
|
+
"0xe92f673ca36c5e2efd2de7628f815f84807e803f",
|
|
39192
|
+
"0xc9be6db8797f44455e578cac759cd209a1fd126d",
|
|
39193
|
+
18,
|
|
39194
|
+
259200
|
|
39195
|
+
],
|
|
39196
|
+
// unfunded, no APR feed
|
|
39197
|
+
[
|
|
39198
|
+
"wNLP-QQQx",
|
|
39199
|
+
"0x4fb706eb3e3784da4fc5aa824886f6129a65fb2e",
|
|
39200
|
+
"0xa753a7395cae905cd615da0b82a53e0560f250af",
|
|
39201
|
+
"0x4f53c62a940748dd572d5ac790d3628e9b39ca8e",
|
|
39202
|
+
18,
|
|
39203
|
+
259200
|
|
39204
|
+
],
|
|
39205
|
+
// unfunded, no APR feed
|
|
39206
|
+
[
|
|
39207
|
+
"wNLP-SPCXx",
|
|
39208
|
+
"0x6540c6b85ade3601f9bdf5b2d8712615dbd7730b",
|
|
39209
|
+
"0x68fa48b1c2fe52b3d776e1953e0e782b5044ce28",
|
|
39210
|
+
"0x277ac2538df35713f196d75058e6a661a058cd6f",
|
|
39211
|
+
18,
|
|
39212
|
+
259200
|
|
39213
|
+
]
|
|
39214
|
+
// unfunded, no APR feed
|
|
39215
|
+
],
|
|
39216
|
+
// Robinhood Chain — 10 pools, 2 funded, 0 with a DefiLlama APR.
|
|
39217
|
+
"4663": [
|
|
39218
|
+
[
|
|
39219
|
+
"wNLP-WETH",
|
|
39220
|
+
"0x7ce2c710c132f68a74dbb186644ec1eb86dfaf4e",
|
|
39221
|
+
"0x0bd7d308f8e1639fab988df18a8011f41eacad73",
|
|
39222
|
+
"0x70f167a4fed2c68d68760a4b0b6e93d919cfa935",
|
|
39223
|
+
18,
|
|
39224
|
+
259200
|
|
39225
|
+
],
|
|
39226
|
+
// no APR feed
|
|
39227
|
+
[
|
|
39228
|
+
"wNLP-USDG",
|
|
39229
|
+
"0xbb761ba477de2e887968d6c01073a477a9f9815b",
|
|
39230
|
+
"0x5fc5360d0400a0fd4f2af552add042d716f1d168",
|
|
39231
|
+
"0x855a737dbaf7143574cfe869b0849f929d8ba222",
|
|
39232
|
+
6,
|
|
39233
|
+
259200
|
|
39234
|
+
],
|
|
39235
|
+
// no APR feed
|
|
39236
|
+
[
|
|
39237
|
+
"wNLP-AMD",
|
|
39238
|
+
"0x1eda0a1353c57113ff41c32f38ca4b8d0cfec562",
|
|
39239
|
+
"0x86923f96303d656e4aa86d9d42d1e57ad2023fdc",
|
|
39240
|
+
"0x24417d45dfe01841b5f28c05c1d44abf4c321ae6",
|
|
39241
|
+
18,
|
|
39242
|
+
259200
|
|
39243
|
+
],
|
|
39244
|
+
// unfunded, no APR feed
|
|
39245
|
+
[
|
|
39246
|
+
"wNLP-CRCL",
|
|
39247
|
+
"0x965cfe674859cb223ffdc0f72722ad5619f7d90f",
|
|
39248
|
+
"0xdf0992e440dd0be65bd8439b609d6d4366bf1cb5",
|
|
39249
|
+
"0x3581a66d36e307b41b11402cf858f3f83e31d859",
|
|
39250
|
+
18,
|
|
39251
|
+
259200
|
|
39252
|
+
],
|
|
39253
|
+
// unfunded, no APR feed
|
|
39254
|
+
[
|
|
39255
|
+
"wNLP-MSFT",
|
|
39256
|
+
"0xa43ab4c0539ad04b41203fc0544d859540088613",
|
|
39257
|
+
"0xe93237c50d904957cf27e7b1133b510c669c2e74",
|
|
39258
|
+
"0xa81bfbe0994e0b49d66f2273c52d5d447ea71038",
|
|
39259
|
+
18,
|
|
39260
|
+
259200
|
|
39261
|
+
],
|
|
39262
|
+
// unfunded, no APR feed
|
|
39263
|
+
[
|
|
39264
|
+
"wNLP-MU",
|
|
39265
|
+
"0xb05b806fc5bdce389b734dce50400fa27ae54942",
|
|
39266
|
+
"0xff080c8ce2e5feadaca0da81314ae59d232d4afd",
|
|
39267
|
+
"0x48cf773961339cea5284f62bcc9a4a342be42adc",
|
|
39268
|
+
18,
|
|
39269
|
+
259200
|
|
39270
|
+
],
|
|
39271
|
+
// unfunded, no APR feed
|
|
39272
|
+
[
|
|
39273
|
+
"wNLP-NVDA",
|
|
39274
|
+
"0x001660ed89e93c7c9b348e247934fa1ebc3a2625",
|
|
39275
|
+
"0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec",
|
|
39276
|
+
"0x6422b1130526d842f74a9340a0d244c289534dd9",
|
|
39277
|
+
18,
|
|
39278
|
+
259200
|
|
39279
|
+
],
|
|
39280
|
+
// unfunded, no APR feed
|
|
39281
|
+
[
|
|
39282
|
+
"wNLP-SNDK",
|
|
39283
|
+
"0xbd254986706115081d84b7a71f3aa1f07d748a5b",
|
|
39284
|
+
"0xb90a19ff0af67f7779aff50a882a9cff42446400",
|
|
39285
|
+
"0x45ee33d6c6d399aa6fa14e25c5462bfd7f0ffea9",
|
|
39286
|
+
18,
|
|
39287
|
+
259200
|
|
39288
|
+
],
|
|
39289
|
+
// unfunded, no APR feed
|
|
39290
|
+
[
|
|
39291
|
+
"wNLP-SPCX",
|
|
39292
|
+
"0x68722297b35760ff16b873c4c89187f4e1d5dbe6",
|
|
39293
|
+
"0x4a0e65a3eccec6dbe60ae065f2e7bb85fae35eea",
|
|
39294
|
+
"0x2933c9c18ba62fe494b4ac75d32060594c9c28bc",
|
|
39295
|
+
18,
|
|
39296
|
+
259200
|
|
39297
|
+
],
|
|
39298
|
+
// unfunded, no APR feed
|
|
39299
|
+
[
|
|
39300
|
+
"wNLP-TSLA",
|
|
39301
|
+
"0xf54b421461d41203e4babdc59d1259d7de886a73",
|
|
39302
|
+
"0x322f0929c4625ed5bad873c95208d54e1c003b2d",
|
|
39303
|
+
"0x0945712145b562ec6ba6631293fb917feb6b262a",
|
|
39304
|
+
18,
|
|
39305
|
+
259200
|
|
39306
|
+
]
|
|
39307
|
+
// unfunded, no APR feed
|
|
39308
|
+
],
|
|
39309
|
+
// Morph — 2 pools, 2 funded, 0 with a DefiLlama APR.
|
|
39310
|
+
"2818": [
|
|
39311
|
+
[
|
|
39312
|
+
"wNLP-USDC",
|
|
39313
|
+
"0xcf7b55c544b579a09b54f5a4da3e1ba476c04364",
|
|
39314
|
+
"0xcfb1186f4e93d60e60a8bdd997427d1f33bc372b",
|
|
39315
|
+
"0x26ff7df6d9e1feead7786a6ba82618aafd7c8ea7",
|
|
39316
|
+
6,
|
|
39317
|
+
259200
|
|
39318
|
+
],
|
|
39319
|
+
// no APR feed
|
|
39320
|
+
[
|
|
39321
|
+
"wNLP-BGBTC",
|
|
39322
|
+
"0xca0f3fb46eb413abefa10d91aa2a6fd49eab60eb",
|
|
39323
|
+
"0x31011317764e097b28d159a8145b92bfa453f606",
|
|
39324
|
+
"0x0d8de51813ef9b8634d3b91086884d3045a5f3e8",
|
|
39325
|
+
8,
|
|
39326
|
+
259200
|
|
39327
|
+
]
|
|
39328
|
+
// no APR feed
|
|
39329
|
+
]
|
|
39330
|
+
};
|
|
39331
|
+
var NATIVE_WNLP_ENTRIES = Object.fromEntries(
|
|
39332
|
+
Object.entries(NATIVE_WNLP_ROWS).map(([chainId, rows]) => [
|
|
39333
|
+
chainId,
|
|
39334
|
+
rows.map(
|
|
39335
|
+
([
|
|
39336
|
+
symbol,
|
|
39337
|
+
address,
|
|
39338
|
+
underlying,
|
|
39339
|
+
withdrawQueue,
|
|
39340
|
+
decimals,
|
|
39341
|
+
withdrawalWindowSeconds
|
|
39342
|
+
]) => ({
|
|
39343
|
+
address,
|
|
39344
|
+
underlying,
|
|
39345
|
+
symbol,
|
|
39346
|
+
brand: "Native",
|
|
39347
|
+
decimals,
|
|
39348
|
+
isRebasing: false,
|
|
39349
|
+
isMintable: true,
|
|
39350
|
+
withdrawalMode: "fee-or-queued",
|
|
39351
|
+
withdrawalCooldownSeconds: withdrawalWindowSeconds,
|
|
39352
|
+
reader: "native-wnlp",
|
|
39353
|
+
withdrawQueue,
|
|
39354
|
+
inventoryContract: NATIVE_CREDIT_VAULT[chainId],
|
|
39355
|
+
yieldFetcher: nativeCreditPoolFetcher(chainId),
|
|
39356
|
+
yieldKey: nativeCreditPoolYieldKey(chainId, underlying)
|
|
39357
|
+
})
|
|
39358
|
+
)
|
|
39359
|
+
])
|
|
39360
|
+
);
|
|
37785
39361
|
|
|
37786
39362
|
// src/vaults/savings/registry.ts
|
|
37787
39363
|
var stUsdGroup = {
|
|
@@ -37877,11 +39453,183 @@ var yUsdGroup = {
|
|
|
37877
39453
|
// confirmed on Basescan.
|
|
37878
39454
|
}
|
|
37879
39455
|
};
|
|
39456
|
+
var sUsdcGroup = {
|
|
39457
|
+
base: {
|
|
39458
|
+
reader: "erc4626-idle",
|
|
39459
|
+
symbol: "sUSDC",
|
|
39460
|
+
brand: "Spark",
|
|
39461
|
+
decimals: 18,
|
|
39462
|
+
underlyingDecimals: 6,
|
|
39463
|
+
isRebasing: false,
|
|
39464
|
+
isMintable: true,
|
|
39465
|
+
withdrawalMode: "instant-capped",
|
|
39466
|
+
yieldFetcher: sparkSavingsFetcher,
|
|
39467
|
+
yieldKey: SPARK_SUSDC_KEY
|
|
39468
|
+
},
|
|
39469
|
+
chains: {
|
|
39470
|
+
"1": {
|
|
39471
|
+
address: "0xbc65ad17c5c0a2a4d159fa5a503f4992c7b545fe",
|
|
39472
|
+
underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
39473
|
+
// Mainnet PSM keeps a dedicated pocket contract.
|
|
39474
|
+
inventoryContract: "0x37305b1cd40574e4c5ce33f8e8306be057fd7341"
|
|
39475
|
+
},
|
|
39476
|
+
"8453": {
|
|
39477
|
+
address: "0x3128a0f7f0ea68e7b7c9b00afa7e41045828e858",
|
|
39478
|
+
underlying: "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
|
|
39479
|
+
// L2 PSM3s custody the pocket themselves (`pocket() == psm`).
|
|
39480
|
+
inventoryContract: "0x1601843c5e9bc251a3272907010afa41fa18347e"
|
|
39481
|
+
},
|
|
39482
|
+
"42161": {
|
|
39483
|
+
address: "0x940098b108fb7d0a7e374f6eded7760787464609",
|
|
39484
|
+
underlying: "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
|
|
39485
|
+
inventoryContract: "0x2b05f8e1cacc6974fd79a673a341fe1f58d27266"
|
|
39486
|
+
},
|
|
39487
|
+
"10": {
|
|
39488
|
+
address: "0xcf9326e24ebffbef22ce1050007a43a3c0b6db55",
|
|
39489
|
+
underlying: "0x0b2c639c533813f4aa9d7837caf62653d097ff85",
|
|
39490
|
+
inventoryContract: "0xe0f9978b907853f354d79188a3defbd41978af62"
|
|
39491
|
+
},
|
|
39492
|
+
"130": {
|
|
39493
|
+
address: "0x14d9143becc348920b68d123687045db49a016c6",
|
|
39494
|
+
underlying: "0x078d782b760474a361dda0af3839290b0ef57ad6",
|
|
39495
|
+
inventoryContract: "0x7b42ed932f26509465f7ce3faf76ffce1275312f"
|
|
39496
|
+
}
|
|
39497
|
+
}
|
|
39498
|
+
};
|
|
39499
|
+
var reUsdGroup = {
|
|
39500
|
+
base: {
|
|
39501
|
+
reader: "nav-oracle",
|
|
39502
|
+
symbol: "reUSD",
|
|
39503
|
+
brand: "Re Protocol",
|
|
39504
|
+
decimals: 18,
|
|
39505
|
+
underlyingDecimals: 6,
|
|
39506
|
+
isRebasing: false,
|
|
39507
|
+
isMintable: false,
|
|
39508
|
+
withdrawalMode: "request-based",
|
|
39509
|
+
// Quarterly queue — the documented worst case, and the live case
|
|
39510
|
+
// wherever the buffer sits under 1 % of supply.
|
|
39511
|
+
withdrawalCooldownSeconds: 90 * 86400,
|
|
39512
|
+
yieldFetcher: reProtocolFetcher,
|
|
39513
|
+
yieldKey: REUSD_KEY
|
|
39514
|
+
},
|
|
39515
|
+
chains: {
|
|
39516
|
+
"1": {
|
|
39517
|
+
address: "0x5086bf358635b81d8c47c66d1c8b9e567db70c72",
|
|
39518
|
+
underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
39519
|
+
// USDC
|
|
39520
|
+
priceOracle: "0x72b5760cfbe437dd01409f44055fdfb8f8121b46",
|
|
39521
|
+
mintContract: "0x4691c475be804fa85f91c2d6d0adf03114de3093",
|
|
39522
|
+
// ICL
|
|
39523
|
+
withdrawQueue: "0x5c454f5526e41fbe917b63475cd8ca7e4631b147"
|
|
39524
|
+
},
|
|
39525
|
+
"8453": {
|
|
39526
|
+
address: "0x7d214438d0f27afccc23b3d1e1a53906ace5cfea",
|
|
39527
|
+
underlying: "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
|
|
39528
|
+
priceOracle: "0x67a3226e69a1a8316ef1807a44f077af80071926",
|
|
39529
|
+
// On Base the ICL is the token itself.
|
|
39530
|
+
mintContract: "0x7d214438d0f27afccc23b3d1e1a53906ace5cfea",
|
|
39531
|
+
withdrawQueue: "0x9ab62aebabe738ab233c447eedce88d1d0a61fe3"
|
|
39532
|
+
},
|
|
39533
|
+
"42161": {
|
|
39534
|
+
address: "0x76ce01f0ef25aa66cc5f1e546a005e4a63b25609",
|
|
39535
|
+
underlying: "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
|
|
39536
|
+
priceOracle: "0x48abcc5a711ac23d3730bf627415dc898cbc5967",
|
|
39537
|
+
mintContract: "0x802edbb1ec20548a4388abc337e4011718eb0291",
|
|
39538
|
+
withdrawQueue: "0xfd4016ea13ca8acc04a11a99702df076a4d3b852"
|
|
39539
|
+
},
|
|
39540
|
+
"43114": {
|
|
39541
|
+
address: "0x180af87b47bf272b2df59dccf2d76a6eafa625bf",
|
|
39542
|
+
underlying: "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
|
|
39543
|
+
priceOracle: "0x4c558694f16484e5c7a4a52bd210d471860ce7bc",
|
|
39544
|
+
mintContract: "0xb22a8533e6cd81598f82514a42f0b3161745fbe1",
|
|
39545
|
+
withdrawQueue: "0xe13292f97e38da0c64398de5e0bfc95180de9d23"
|
|
39546
|
+
}
|
|
39547
|
+
// NB: our token list also carries reUSD on BNB (0xba9425ec…) and Ink
|
|
39548
|
+
// (0x5bcf6b00…), but Re publishes no NAV oracle for either, so there
|
|
39549
|
+
// is no price source and they are deliberately NOT registered.
|
|
39550
|
+
}
|
|
39551
|
+
};
|
|
39552
|
+
var sUsdpGroup = {
|
|
39553
|
+
base: {
|
|
39554
|
+
symbol: "sUSDp",
|
|
39555
|
+
brand: "Parallel",
|
|
39556
|
+
decimals: 18,
|
|
39557
|
+
isRebasing: false,
|
|
39558
|
+
isMintable: true,
|
|
39559
|
+
withdrawalMode: "instant",
|
|
39560
|
+
yieldFetcher: parallelFetcher,
|
|
39561
|
+
yieldKey: SUSDP_KEY
|
|
39562
|
+
},
|
|
39563
|
+
chains: {
|
|
39564
|
+
"43114": {
|
|
39565
|
+
address: "0x9d92c21205383651610f90722131655a5b8ed3e0",
|
|
39566
|
+
underlying: "0x9ee1963f05553ef838604dd39403be21cef26aa4"
|
|
39567
|
+
// USDp
|
|
39568
|
+
},
|
|
39569
|
+
"999": {
|
|
39570
|
+
address: "0x9b3a8f7cec208e247d97dee13313690977e24459",
|
|
39571
|
+
underlying: "0xbe65f0f410a72bec163dc65d46c83699e957d588"
|
|
39572
|
+
},
|
|
39573
|
+
"1": {
|
|
39574
|
+
address: "0x0d45b129dc868963025db79a9074ea9c9e32cae4",
|
|
39575
|
+
// Yes, the HyperEVM sUSDp address — see the address-reuse trap
|
|
39576
|
+
// in the group comment.
|
|
39577
|
+
underlying: "0x9b3a8f7cec208e247d97dee13313690977e24459"
|
|
39578
|
+
},
|
|
39579
|
+
"8453": {
|
|
39580
|
+
address: "0x472ed57b376fe400259fb28e5c46eb53f0e3e7e7",
|
|
39581
|
+
underlying: "0x76a9a0062ec6712b99b4f63bd2b4270185759dd5"
|
|
39582
|
+
}
|
|
39583
|
+
}
|
|
39584
|
+
};
|
|
39585
|
+
var cUsdoGroup = {
|
|
39586
|
+
base: {
|
|
39587
|
+
symbol: "cUSDO",
|
|
39588
|
+
brand: "OpenEden",
|
|
39589
|
+
decimals: 18,
|
|
39590
|
+
isRebasing: false,
|
|
39591
|
+
isMintable: true,
|
|
39592
|
+
withdrawalMode: "instant",
|
|
39593
|
+
yieldFetcher: rwaFundsFetcher,
|
|
39594
|
+
yieldKey: "Compounding Open Dollar::CUSDO"
|
|
39595
|
+
},
|
|
39596
|
+
chains: {
|
|
39597
|
+
"1": {
|
|
39598
|
+
address: "0xad55aebc9b8c03fc43cd9f62260391c13c23e7c0",
|
|
39599
|
+
underlying: "0x8238884ec9668ef77b90c6dff4d1a9f4f4823bfe"
|
|
39600
|
+
// USDO
|
|
39601
|
+
},
|
|
39602
|
+
"56": {
|
|
39603
|
+
address: "0x64748ea3e31d0b7916f0ff91b017b9f404ded8ef",
|
|
39604
|
+
underlying: "0x302e52aff9815b9d1682473dbfb9c74f9b750aa8"
|
|
39605
|
+
},
|
|
39606
|
+
"8453": {
|
|
39607
|
+
address: "0x83db73ef5192de4b6a4c92bd0141ba1a0dc87c65",
|
|
39608
|
+
underlying: "0xad55aebc9b8c03fc43cd9f62260391c13c23e7c0"
|
|
39609
|
+
}
|
|
39610
|
+
}
|
|
39611
|
+
};
|
|
37880
39612
|
var MULTI_CHAIN_GROUPS = [
|
|
37881
39613
|
stUsdGroup,
|
|
37882
39614
|
stEurGroup,
|
|
37883
|
-
yUsdGroup
|
|
39615
|
+
yUsdGroup,
|
|
39616
|
+
sUsdcGroup,
|
|
39617
|
+
reUsdGroup,
|
|
39618
|
+
sUsdpGroup,
|
|
39619
|
+
cUsdoGroup
|
|
37884
39620
|
];
|
|
39621
|
+
var sparkV2Base = (symbol, decimals) => ({
|
|
39622
|
+
reader: "erc4626-idle",
|
|
39623
|
+
symbol,
|
|
39624
|
+
brand: "Spark",
|
|
39625
|
+
decimals,
|
|
39626
|
+
underlyingDecimals: decimals,
|
|
39627
|
+
isRebasing: false,
|
|
39628
|
+
isMintable: true,
|
|
39629
|
+
withdrawalMode: "instant-capped",
|
|
39630
|
+
yieldFetcher: sparkSavingsFetcher
|
|
39631
|
+
});
|
|
39632
|
+
var SPARK_V2_WITHDRAW_INTENTS = "0x592b7db9906e6f8924c4d74c2a0ab86ce44fdddf";
|
|
37885
39633
|
var SINGLE_CHAIN_ENTRIES = {
|
|
37886
39634
|
"1": [
|
|
37887
39635
|
{
|
|
@@ -37940,6 +39688,40 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
37940
39688
|
yieldFetcher: susdsFetcher,
|
|
37941
39689
|
yieldKey: "Staked USDS::stUSDS"
|
|
37942
39690
|
},
|
|
39691
|
+
{
|
|
39692
|
+
// Frax sfrxUSD — `LinearRewardsErc4626` over frxUSD. Plain
|
|
39693
|
+
// instant 4626 exit; the rate is set by the vault's
|
|
39694
|
+
// `maxDistributionPerSecondPerAsset` cap rather than by
|
|
39695
|
+
// utilisation (see the frax fetcher for the exact maths).
|
|
39696
|
+
address: "0xcf62f905562626cfcdd2261162a51fd02fc9c5b6",
|
|
39697
|
+
underlying: "0xcacd6fd266af91b8aed52accc382b4e165586e29",
|
|
39698
|
+
// frxUSD
|
|
39699
|
+
symbol: "sfrxUSD",
|
|
39700
|
+
brand: "Frax",
|
|
39701
|
+
decimals: 18,
|
|
39702
|
+
isRebasing: false,
|
|
39703
|
+
isMintable: true,
|
|
39704
|
+
withdrawalMode: "instant",
|
|
39705
|
+
yieldFetcher: fraxSavingsFetcher,
|
|
39706
|
+
yieldKey: "SFRXUSD"
|
|
39707
|
+
},
|
|
39708
|
+
{
|
|
39709
|
+
// Frax sFRAX — the pre-rename sibling of sfrxUSD, over legacy
|
|
39710
|
+
// FRAX. Still live and roughly 2x sfrxUSD's size, so it stays a
|
|
39711
|
+
// first-class row rather than an alias. Same contract family, so
|
|
39712
|
+
// it shares `fraxSavingsFetcher` (one multicall covers both).
|
|
39713
|
+
address: "0xa663b02cf0a4b149d2ad41910cb81e23e1c41c32",
|
|
39714
|
+
underlying: "0x853d955acef822db058eb8505911ed77f175b99e",
|
|
39715
|
+
// FRAX
|
|
39716
|
+
symbol: "sFRAX",
|
|
39717
|
+
brand: "Frax",
|
|
39718
|
+
decimals: 18,
|
|
39719
|
+
isRebasing: false,
|
|
39720
|
+
isMintable: true,
|
|
39721
|
+
withdrawalMode: "instant",
|
|
39722
|
+
yieldFetcher: fraxSavingsFetcher,
|
|
39723
|
+
yieldKey: "SFRAX"
|
|
39724
|
+
},
|
|
37943
39725
|
{
|
|
37944
39726
|
address: "0x83f20f44975d03b1b09e64809b757c47f942beea",
|
|
37945
39727
|
underlying: "0x6b175474e89094c44da98b954eedeac495271d0f",
|
|
@@ -38064,6 +39846,91 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
38064
39846
|
withdrawalMode: "request-based",
|
|
38065
39847
|
yieldFetcher: hastraPrimeFetcher,
|
|
38066
39848
|
yieldKey: "Hastra PRIME::PRIME"
|
|
39849
|
+
},
|
|
39850
|
+
{
|
|
39851
|
+
// Spark Vaults V2 — the mainnet book, and by far the largest of
|
|
39852
|
+
// the family. Only the Ethereum rows carry the intents contract as
|
|
39853
|
+
// `withdrawQueue`; the other chains have no deployment of it.
|
|
39854
|
+
...sparkV2Base("spUSDC", 6),
|
|
39855
|
+
address: "0x28b3a8fb53b741a8fd78c0fb9a6b2393d896a43d",
|
|
39856
|
+
underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
39857
|
+
// USDC
|
|
39858
|
+
withdrawQueue: SPARK_V2_WITHDRAW_INTENTS,
|
|
39859
|
+
yieldKey: sparkVaultV2Key("1", "spUSDC")
|
|
39860
|
+
},
|
|
39861
|
+
{
|
|
39862
|
+
...sparkV2Base("spUSDT", 6),
|
|
39863
|
+
address: "0xe2e7a17dff93280dec073c995595155283e3c372",
|
|
39864
|
+
underlying: "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
|
39865
|
+
// USDT
|
|
39866
|
+
withdrawQueue: SPARK_V2_WITHDRAW_INTENTS,
|
|
39867
|
+
yieldKey: sparkVaultV2Key("1", "spUSDT")
|
|
39868
|
+
},
|
|
39869
|
+
{
|
|
39870
|
+
// The only non-stable in the family — underlying is WETH, so
|
|
39871
|
+
// share and underlying are both 18-decimal.
|
|
39872
|
+
...sparkV2Base("spETH", 18),
|
|
39873
|
+
address: "0xfe6eb3b609a7c8352a241f7f3a21cea4e9209b8f",
|
|
39874
|
+
underlying: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
|
39875
|
+
// WETH
|
|
39876
|
+
withdrawQueue: SPARK_V2_WITHDRAW_INTENTS,
|
|
39877
|
+
yieldKey: sparkVaultV2Key("1", "spETH")
|
|
39878
|
+
},
|
|
39879
|
+
{
|
|
39880
|
+
// Seeded but live (~$30k) — real contract, real `vsr`, so it is
|
|
39881
|
+
// carried rather than special-cased. Expect it to grow.
|
|
39882
|
+
...sparkV2Base("spPYUSD", 6),
|
|
39883
|
+
address: "0x80128dbb9f07b93dde62a6daeadb69ed14a7d354",
|
|
39884
|
+
underlying: "0x6c3ea9036406852006290770bedfcaba0e23a0e8",
|
|
39885
|
+
// PYUSD
|
|
39886
|
+
withdrawQueue: SPARK_V2_WITHDRAW_INTENTS,
|
|
39887
|
+
yieldKey: sparkVaultV2Key("1", "spPYUSD")
|
|
39888
|
+
},
|
|
39889
|
+
{
|
|
39890
|
+
// Re Protocol reUSDe — the JUNIOR tranche of the same reinsurance
|
|
39891
|
+
// capital stack as reUSD (see `reUsdGroup` for the model, the
|
|
39892
|
+
// liquidity caveat and why `isMintable` is false). Ethereum only,
|
|
39893
|
+
// ~$18.8M, and it earns roughly double reUSD's rate precisely
|
|
39894
|
+
// because it absorbs losses first. Underlying is USDe, so unlike
|
|
39895
|
+
// reUSD the share and underlying decimals align at 18.
|
|
39896
|
+
reader: "nav-oracle",
|
|
39897
|
+
address: "0xddc0f880ff6e4e22e4b74632fbb43ce4df6ccc5a",
|
|
39898
|
+
underlying: "0x4c9edd5852cd905f086c759e8383e09bff1e68b3",
|
|
39899
|
+
// USDe
|
|
39900
|
+
priceOracle: "0x7844441f13c61cbd3d297f5d2d7fcabf17f0b843",
|
|
39901
|
+
mintContract: "0xe1886be2ba8b2496c2044a77516f63a734193082",
|
|
39902
|
+
// ICL
|
|
39903
|
+
symbol: "reUSDe",
|
|
39904
|
+
brand: "Re Protocol",
|
|
39905
|
+
decimals: 18,
|
|
39906
|
+
underlyingDecimals: 18,
|
|
39907
|
+
isRebasing: false,
|
|
39908
|
+
isMintable: false,
|
|
39909
|
+
withdrawalMode: "request-based",
|
|
39910
|
+
withdrawalCooldownSeconds: 90 * 86400,
|
|
39911
|
+
yieldFetcher: reProtocolFetcher,
|
|
39912
|
+
yieldKey: REUSDE_KEY
|
|
39913
|
+
}
|
|
39914
|
+
],
|
|
39915
|
+
"42161": [
|
|
39916
|
+
{
|
|
39917
|
+
// Same CREATE2 family as mainnet spUSDT but an independent vault
|
|
39918
|
+
// with its own `vsr`. Seeded (~$1k) at time of writing.
|
|
39919
|
+
...sparkV2Base("spUSDT", 6),
|
|
39920
|
+
address: "0x45d91340b3b7b96985a72b5c678f7d9e8d664b62",
|
|
39921
|
+
underlying: "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",
|
|
39922
|
+
// USDT
|
|
39923
|
+
yieldKey: sparkVaultV2Key("42161", "spUSDT")
|
|
39924
|
+
}
|
|
39925
|
+
],
|
|
39926
|
+
"196": [
|
|
39927
|
+
{
|
|
39928
|
+
// X Layer spUSDT — seeded only. Underlying is the bridged USDT
|
|
39929
|
+
// (`USDT0`-style) deployment, not mainnet USDT.
|
|
39930
|
+
...sparkV2Base("spUSDT", 6),
|
|
39931
|
+
address: "0xc358c90d32375721cb3924320fdc2f8b694347ca",
|
|
39932
|
+
underlying: "0x779ded0c9e1022225f8e0630b35a9b54be713736",
|
|
39933
|
+
yieldKey: sparkVaultV2Key("196", "spUSDT")
|
|
38067
39934
|
}
|
|
38068
39935
|
],
|
|
38069
39936
|
"8453": [
|
|
@@ -38108,24 +39975,28 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
38108
39975
|
withdrawalCooldownSeconds: 86400,
|
|
38109
39976
|
yieldFetcher: savbtcFetcher,
|
|
38110
39977
|
yieldKey: "Staked avBTC::savBTC"
|
|
39978
|
+
},
|
|
39979
|
+
{
|
|
39980
|
+
// Spark Vaults V2 spUSDC on Avalanche — same CREATE2 address as
|
|
39981
|
+
// the mainnet vault, independent deployment and `vsr`.
|
|
39982
|
+
...sparkV2Base("spUSDC", 6),
|
|
39983
|
+
address: "0x28b3a8fb53b741a8fd78c0fb9a6b2393d896a43d",
|
|
39984
|
+
underlying: "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
|
|
39985
|
+
// USDC
|
|
39986
|
+
yieldKey: sparkVaultV2Key("43114", "spUSDC")
|
|
38111
39987
|
}
|
|
38112
39988
|
],
|
|
38113
39989
|
"4663": [
|
|
38114
39990
|
{
|
|
38115
|
-
// Spark
|
|
38116
|
-
//
|
|
38117
|
-
//
|
|
38118
|
-
//
|
|
39991
|
+
// Spark Vaults V2 spUSDG on Robinhood Chain — the first V2 vault
|
|
39992
|
+
// we carried. Its APR now comes from `vsr()` like every other V2
|
|
39993
|
+
// vault (the old chi-delta fetcher assumed no readable rate; the
|
|
39994
|
+
// getter is `vsr`, not `ssr`), and its exit is idle-capped like
|
|
39995
|
+
// the rest of the family rather than unconditionally instant.
|
|
39996
|
+
...sparkV2Base("spUSDG", 6),
|
|
38119
39997
|
address: "0xde770c84fe66e063336b31737cfe9790f18c4087",
|
|
38120
39998
|
underlying: "0x5fc5360d0400a0fd4f2af552add042d716f1d168",
|
|
38121
39999
|
// USDG
|
|
38122
|
-
symbol: "spUSDG",
|
|
38123
|
-
brand: "Spark",
|
|
38124
|
-
decimals: 6,
|
|
38125
|
-
isRebasing: false,
|
|
38126
|
-
isMintable: true,
|
|
38127
|
-
withdrawalMode: "instant",
|
|
38128
|
-
yieldFetcher: sparkSavingsUsdgFetcher,
|
|
38129
40000
|
yieldKey: SPARK_SAVINGS_USDG_KEY
|
|
38130
40001
|
}
|
|
38131
40002
|
]
|
|
@@ -38141,6 +40012,10 @@ var SAVINGS_REGISTRY = (() => {
|
|
|
38141
40012
|
out[chainId].push({ ...group.base, ...addrs });
|
|
38142
40013
|
}
|
|
38143
40014
|
}
|
|
40015
|
+
for (const [chainId, entries] of Object.entries(NATIVE_WNLP_ENTRIES)) {
|
|
40016
|
+
if (!out[chainId]) out[chainId] = [];
|
|
40017
|
+
out[chainId].push(...entries);
|
|
40018
|
+
}
|
|
38144
40019
|
return out;
|
|
38145
40020
|
})();
|
|
38146
40021
|
var getSavingsRegistry = (chainId) => SAVINGS_REGISTRY[chainId] ?? [];
|
|
@@ -38543,6 +40418,10 @@ var usdaiFetcher = {
|
|
|
38543
40418
|
|
|
38544
40419
|
// src/yields/intrinsic/fetchers/ondo.ts
|
|
38545
40420
|
var ONDO_BASE_URL = "https://app.ondo.finance/api/v2/assets";
|
|
40421
|
+
var OUSG_KEY = "OUSG";
|
|
40422
|
+
var OUSG_GROUP_KEY = "Ondo Short-Term US Government Treasuries::OUSG";
|
|
40423
|
+
var USDY_KEY = "USDY";
|
|
40424
|
+
var USDY_GROUP_KEY = "Ondo US Dollar Yield::USDY";
|
|
38546
40425
|
var ondoFetcher = {
|
|
38547
40426
|
label: "ONDO",
|
|
38548
40427
|
fetch: async () => {
|
|
@@ -38550,9 +40429,13 @@ var ondoFetcher = {
|
|
|
38550
40429
|
fetch(`${ONDO_BASE_URL}/ousg/info`).then((r) => r.json()),
|
|
38551
40430
|
fetch(`${ONDO_BASE_URL}/usdy/info`).then((r) => r.json())
|
|
38552
40431
|
]);
|
|
40432
|
+
const ousg = apyToAprPercent(Number(ousgRes?.primaryMarket?.apy ?? 0));
|
|
40433
|
+
const usdy = apyToAprPercent(Number(usdyRes?.primaryMarket?.apy ?? 0));
|
|
38553
40434
|
return {
|
|
38554
|
-
|
|
38555
|
-
|
|
40435
|
+
[OUSG_KEY]: ousg,
|
|
40436
|
+
[OUSG_GROUP_KEY]: ousg,
|
|
40437
|
+
[USDY_KEY]: usdy,
|
|
40438
|
+
[USDY_GROUP_KEY]: usdy
|
|
38556
40439
|
};
|
|
38557
40440
|
}
|
|
38558
40441
|
};
|
|
@@ -38571,38 +40454,78 @@ var syzusdFetcher = {
|
|
|
38571
40454
|
// src/yields/intrinsic/fetchers/midas.ts
|
|
38572
40455
|
var MIDAS_APY_URL = "https://api-prod.midas.app/api/data/apys";
|
|
38573
40456
|
var MIDAS_TOKENS = [
|
|
38574
|
-
{ apyKey: "mtbill",
|
|
38575
|
-
{
|
|
38576
|
-
|
|
38577
|
-
|
|
38578
|
-
|
|
38579
|
-
{
|
|
38580
|
-
|
|
38581
|
-
|
|
38582
|
-
|
|
38583
|
-
{ apyKey: "
|
|
38584
|
-
{
|
|
38585
|
-
|
|
38586
|
-
|
|
38587
|
-
|
|
38588
|
-
{ apyKey: "
|
|
38589
|
-
{ apyKey: "
|
|
38590
|
-
{ apyKey: "
|
|
38591
|
-
{ apyKey: "
|
|
38592
|
-
{
|
|
38593
|
-
|
|
40457
|
+
{ apyKey: "mtbill", keys: ["Midas mTBILL::MTBILL"] },
|
|
40458
|
+
{
|
|
40459
|
+
apyKey: "mbasis",
|
|
40460
|
+
keys: ["Midas mBASIS::MBASIS", "Midas mBASIS::mBASIS"]
|
|
40461
|
+
},
|
|
40462
|
+
{
|
|
40463
|
+
apyKey: "mbtc",
|
|
40464
|
+
keys: ["Midas mBTC::MBTC", "Midas BTC Yield Token::mBTC"]
|
|
40465
|
+
},
|
|
40466
|
+
{ apyKey: "medge", keys: ["Midas mEDGE::MEDGE", "Midas mEDGE::mEDGE"] },
|
|
40467
|
+
{
|
|
40468
|
+
apyKey: "mre7",
|
|
40469
|
+
keys: ["Midas mRe7YIELD::MRE7YIELD", "Midas Re7 Yield::mRe7YIELD"]
|
|
40470
|
+
},
|
|
40471
|
+
{ apyKey: "mre7sol", keys: ["Midas mRe7SOL::MRE7SOL"] },
|
|
40472
|
+
{ apyKey: "mre7eth", keys: ["Midas Re7 Ethereum::mRe7ETH"] },
|
|
40473
|
+
{ apyKey: "mmev", keys: ["Midas mMEV::MMEV"] },
|
|
40474
|
+
{ apyKey: "mfone", keys: ["Midas Fasanara ONE::mF-ONE"] },
|
|
40475
|
+
{
|
|
40476
|
+
apyKey: "mhyper",
|
|
40477
|
+
keys: ["Midas Hyperithm::mHYPER", "mHYPER::Midas Hyperithm"]
|
|
40478
|
+
},
|
|
40479
|
+
{ apyKey: "mapollo", keys: ["Midas mAPOLLO::MAPOLLO"] },
|
|
40480
|
+
// NB Avalanche carries a `MEV BTC::mevBTC` row (0x1f8e769b…) that MAY be
|
|
40481
|
+
// this asset, but the issuer is unverifiable (Midas's docs/API are
|
|
40482
|
+
// Cloudflare-walled) — deliberately not keyed, same rule as bondusd.
|
|
40483
|
+
{ apyKey: "mevbtc", keys: ["Midas mevBTC::MEVBTC"] },
|
|
40484
|
+
{ apyKey: "mfarm", keys: ["Midas mFARM::MFARM"] },
|
|
40485
|
+
{ apyKey: "msyrupusd", keys: ["Midas msyrupUSD::MSYRUPUSD"] },
|
|
40486
|
+
{ apyKey: "msyrupusdp", keys: ["Midas msyrupUSDp::MSYRUPUSDP"] },
|
|
40487
|
+
{ apyKey: "mre7btc", keys: ["Midas mRe7BTC::MRE7BTC"] },
|
|
40488
|
+
{ apyKey: "mxrp", keys: ["Midas XRP::mXRP"] },
|
|
40489
|
+
{ apyKey: "mevusd", keys: ["Midas Everstake USD::MEVUSD"] },
|
|
40490
|
+
{ apyKey: "mhypereth", keys: ["Midas Hyperithm ETH::mHyperETH"] },
|
|
40491
|
+
{
|
|
40492
|
+
apyKey: "mhyperbtc",
|
|
40493
|
+
keys: ["Midas Hyperithm BTC::mHyperBTC", "Midas Hyperithm BTC::MHYPERBTC"]
|
|
40494
|
+
},
|
|
40495
|
+
{ apyKey: "mm1usd", keys: ["Midas M1 USD Market Neutral::mM1-USD"] },
|
|
40496
|
+
// 2026-08 sweep additions
|
|
40497
|
+
{ apyKey: "mrox", keys: ["Midas Rockaway Market Neutral::MROX"] },
|
|
40498
|
+
{ apyKey: "mglobal", keys: ["Midas Fasanara Global::MGLOBAL"] },
|
|
40499
|
+
{ apyKey: "mglo", keys: ["Midas Fasanara Global Open::MGLO"] },
|
|
40500
|
+
{ apyKey: "weeur", keys: ["Liquid Euro::weEUR"] },
|
|
40501
|
+
{ apyKey: "plusd", keys: ["Plasma USD::plUSD"] },
|
|
40502
|
+
{ apyKey: "splusd", keys: ["Staked Plasma USD::splUSD"] }
|
|
38594
40503
|
];
|
|
40504
|
+
var MAX_DECIMAL_APY = 5;
|
|
38595
40505
|
var midasFetcher = {
|
|
38596
40506
|
label: "MIDAS",
|
|
38597
40507
|
fetch: async () => {
|
|
38598
|
-
const
|
|
38599
|
-
|
|
38600
|
-
|
|
40508
|
+
const res = await fetch(MIDAS_APY_URL, {
|
|
40509
|
+
headers: {
|
|
40510
|
+
accept: "application/json",
|
|
40511
|
+
// WAF: bare fetches get 403 + `{}` — see header note.
|
|
40512
|
+
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36",
|
|
40513
|
+
origin: "https://midas.app",
|
|
40514
|
+
referer: "https://midas.app/"
|
|
40515
|
+
},
|
|
40516
|
+
signal: AbortSignal.timeout(8e3)
|
|
40517
|
+
});
|
|
40518
|
+
if (!res.ok) throw new Error(`Midas APY HTTP ${res.status}`);
|
|
40519
|
+
const apys = await res.json();
|
|
40520
|
+
if (!apys || Object.keys(apys).length === 0) {
|
|
40521
|
+
throw new Error("Midas APY payload empty (WAF block?)");
|
|
40522
|
+
}
|
|
38601
40523
|
const result = {};
|
|
38602
|
-
for (const { apyKey,
|
|
40524
|
+
for (const { apyKey, keys } of MIDAS_TOKENS) {
|
|
38603
40525
|
const apy = apys[apyKey];
|
|
38604
|
-
if (apy && apy > 0) {
|
|
38605
|
-
|
|
40526
|
+
if (typeof apy === "number" && apy > 0 && apy <= MAX_DECIMAL_APY) {
|
|
40527
|
+
const apr = apyToAprPercent(apy * 100);
|
|
40528
|
+
for (const key of keys) result[key] = apr;
|
|
38606
40529
|
}
|
|
38607
40530
|
}
|
|
38608
40531
|
return result;
|
|
@@ -38897,6 +40820,8 @@ var LENDING_ONLY_FETCHERS = [
|
|
|
38897
40820
|
pendleFetcher,
|
|
38898
40821
|
usdaiFetcher,
|
|
38899
40822
|
ondoFetcher,
|
|
40823
|
+
// rwaFundsFetcher is NOT here: cUSDO's savings rows vault-wire it, so
|
|
40824
|
+
// it reaches the global map via `collectVaultFetchers` (disjointness rule).
|
|
38900
40825
|
syzusdFetcher,
|
|
38901
40826
|
midasFetcher,
|
|
38902
40827
|
capFetcher,
|
|
@@ -38954,13 +40879,14 @@ async function fetchMerklOpportunities(protocolId, chainId) {
|
|
|
38954
40879
|
while (true) {
|
|
38955
40880
|
const params = new URLSearchParams({
|
|
38956
40881
|
mainProtocolId: protocolId,
|
|
38957
|
-
chainId,
|
|
38958
40882
|
status: "LIVE",
|
|
38959
40883
|
items: "100",
|
|
38960
40884
|
page: String(page)
|
|
38961
40885
|
});
|
|
40886
|
+
if (chainId) params.set("chainId", chainId);
|
|
38962
40887
|
const res = await fetch(`${MERKL_API_BASE}/opportunities?${params}`);
|
|
38963
|
-
if (!res.ok)
|
|
40888
|
+
if (!res.ok)
|
|
40889
|
+
throw new Error(`Merkl API ${res.status} for chain ${chainId ?? "all"}`);
|
|
38964
40890
|
const batch = await res.json();
|
|
38965
40891
|
all.push(...batch);
|
|
38966
40892
|
if (batch.length < 100) break;
|
|
@@ -39024,37 +40950,40 @@ function createMerklRewardFetcher(config) {
|
|
|
39024
40950
|
label: `MERKL_${config.merklProtocolId.toUpperCase()}`,
|
|
39025
40951
|
fetch: async () => {
|
|
39026
40952
|
const result = {};
|
|
39027
|
-
const chainResults = await Promise.all(
|
|
40953
|
+
const chainResults = config.chainIds ? await Promise.all(
|
|
39028
40954
|
config.chainIds.map(async (chainId) => {
|
|
39029
40955
|
try {
|
|
39030
|
-
|
|
40956
|
+
return await fetchMerklOpportunities(
|
|
39031
40957
|
config.merklProtocolId,
|
|
39032
40958
|
chainId
|
|
39033
40959
|
);
|
|
39034
|
-
return { chainId, opps };
|
|
39035
40960
|
} catch (e) {
|
|
39036
40961
|
console.error(`Merkl: failed to fetch chain ${chainId}:`, e);
|
|
39037
|
-
return
|
|
40962
|
+
return [];
|
|
39038
40963
|
}
|
|
39039
40964
|
})
|
|
39040
|
-
);
|
|
39041
|
-
for (const
|
|
40965
|
+
) : [await fetchMerklOpportunities(config.merklProtocolId)];
|
|
40966
|
+
for (const opps of chainResults) {
|
|
39042
40967
|
for (const opp of opps) {
|
|
39043
40968
|
if (!opp.apr || opp.apr <= 0) continue;
|
|
39044
|
-
const
|
|
39045
|
-
|
|
39046
|
-
|
|
39047
|
-
|
|
39048
|
-
const
|
|
39049
|
-
|
|
39050
|
-
|
|
39051
|
-
|
|
39052
|
-
|
|
39053
|
-
|
|
39054
|
-
reward.
|
|
39055
|
-
|
|
39056
|
-
|
|
39057
|
-
|
|
40969
|
+
const chainId = String(opp.chainId);
|
|
40970
|
+
const resolvedRaw = resolve(opp);
|
|
40971
|
+
if (!resolvedRaw) continue;
|
|
40972
|
+
const resolutions = (Array.isArray(resolvedRaw) ? resolvedRaw : [resolvedRaw]).filter((r) => Boolean(r?.asset));
|
|
40973
|
+
for (const resolved2 of resolutions) {
|
|
40974
|
+
const bucket = resolved2.bucket ?? (opp.action === "LEND" ? "deposit" : opp.action === "BORROW" ? "borrow" : void 0);
|
|
40975
|
+
if (!bucket) continue;
|
|
40976
|
+
const lender = resolved2.lender ?? config.lenderKey;
|
|
40977
|
+
const reward = ensureReward(result, chainId, lender, resolved2.asset);
|
|
40978
|
+
const breakdowns = extractRewardBreakdowns(opp);
|
|
40979
|
+
reward.link = getMerkleUrl(opp);
|
|
40980
|
+
if (bucket === "deposit") {
|
|
40981
|
+
reward.deposit += opp.apr;
|
|
40982
|
+
reward.additionalDepositData.push(...breakdowns);
|
|
40983
|
+
} else {
|
|
40984
|
+
reward.borrow += opp.apr;
|
|
40985
|
+
reward.additionalBorrowData.push(...breakdowns);
|
|
40986
|
+
}
|
|
39058
40987
|
}
|
|
39059
40988
|
}
|
|
39060
40989
|
}
|
|
@@ -39062,81 +40991,39 @@ function createMerklRewardFetcher(config) {
|
|
|
39062
40991
|
}
|
|
39063
40992
|
};
|
|
39064
40993
|
}
|
|
39065
|
-
var AAVE_V3_MERKL_CHAINS = [
|
|
39066
|
-
"1",
|
|
39067
|
-
// Ethereum
|
|
39068
|
-
"10",
|
|
39069
|
-
// Optimism
|
|
39070
|
-
"56",
|
|
39071
|
-
// BSC
|
|
39072
|
-
"100",
|
|
39073
|
-
// Gnosis
|
|
39074
|
-
"137",
|
|
39075
|
-
// Polygon
|
|
39076
|
-
"5000",
|
|
39077
|
-
// Mantle
|
|
39078
|
-
"8453",
|
|
39079
|
-
// Base
|
|
39080
|
-
"42161",
|
|
39081
|
-
// Arbitrum
|
|
39082
|
-
"42220",
|
|
39083
|
-
// Celo
|
|
39084
|
-
"43114",
|
|
39085
|
-
// Avalanche
|
|
39086
|
-
"59144",
|
|
39087
|
-
// Linea
|
|
39088
|
-
"534352"
|
|
39089
|
-
// Scroll
|
|
39090
|
-
];
|
|
39091
40994
|
var aaveMerklRewardFetcher = createMerklRewardFetcher({
|
|
39092
40995
|
merklProtocolId: "aave",
|
|
39093
|
-
lenderKey: "AAVE_V3"
|
|
39094
|
-
chainIds: AAVE_V3_MERKL_CHAINS
|
|
40996
|
+
lenderKey: "AAVE_V3"
|
|
39095
40997
|
});
|
|
39096
|
-
|
|
39097
|
-
|
|
39098
|
-
|
|
39099
|
-
|
|
39100
|
-
|
|
39101
|
-
|
|
39102
|
-
|
|
39103
|
-
|
|
39104
|
-
|
|
39105
|
-
|
|
39106
|
-
|
|
39107
|
-
|
|
39108
|
-
|
|
39109
|
-
|
|
39110
|
-
|
|
39111
|
-
|
|
39112
|
-
|
|
39113
|
-
"80094"
|
|
39114
|
-
// Berachain
|
|
39115
|
-
];
|
|
40998
|
+
function parseEulerVaultFromUrl(depositUrl) {
|
|
40999
|
+
if (!depositUrl) return void 0;
|
|
41000
|
+
try {
|
|
41001
|
+
const url = new URL(depositUrl);
|
|
41002
|
+
const search = url.searchParams.get("search");
|
|
41003
|
+
if (search && /^0x[0-9a-fA-F]{40}$/.test(search))
|
|
41004
|
+
return search.toLowerCase();
|
|
41005
|
+
const positions = url.pathname.match(
|
|
41006
|
+
/\/positions\/0x[0-9a-fA-F]{40}\/(0x[0-9a-fA-F]{40})/
|
|
41007
|
+
);
|
|
41008
|
+
if (positions) return positions[1].toLowerCase();
|
|
41009
|
+
const vault = url.pathname.match(/\/vault\/(0x[0-9a-fA-F]{40})/);
|
|
41010
|
+
if (vault) return vault[1].toLowerCase();
|
|
41011
|
+
} catch {
|
|
41012
|
+
}
|
|
41013
|
+
return void 0;
|
|
41014
|
+
}
|
|
39116
41015
|
var eulerMerklRewardFetcher = createMerklRewardFetcher({
|
|
39117
41016
|
merklProtocolId: "euler",
|
|
39118
41017
|
lenderKey: "EULER_V2",
|
|
39119
|
-
chainIds: EULER_MERKL_CHAINS,
|
|
39120
41018
|
resolveAsset: (opp) => {
|
|
39121
|
-
|
|
41019
|
+
if (opp.type === "MULTILENDBORROW") {
|
|
41020
|
+
return (opp.tokens ?? []).filter((t) => !t.symbol?.endsWith("-DEBT")).map((t) => ({ asset: t.address.toLowerCase() }));
|
|
41021
|
+
}
|
|
41022
|
+
const vault = (opp.action === "BORROW" ? parseEulerVaultFromUrl(opp.depositUrl) : void 0) ?? opp.explorerAddress?.toLowerCase();
|
|
39122
41023
|
if (!vault) return void 0;
|
|
39123
41024
|
return { asset: vault };
|
|
39124
41025
|
}
|
|
39125
41026
|
});
|
|
39126
|
-
var MORPHO_MERKL_CHAINS = [
|
|
39127
|
-
"1",
|
|
39128
|
-
// Ethereum
|
|
39129
|
-
"130",
|
|
39130
|
-
// Unichain
|
|
39131
|
-
"137",
|
|
39132
|
-
// Polygon
|
|
39133
|
-
"8453",
|
|
39134
|
-
// Base
|
|
39135
|
-
"42161",
|
|
39136
|
-
// Arbitrum
|
|
39137
|
-
"4663"
|
|
39138
|
-
// Robinhood chain
|
|
39139
|
-
];
|
|
39140
41027
|
function parseMorphoUniqueKey(depositUrl) {
|
|
39141
41028
|
if (!depositUrl) return void 0;
|
|
39142
41029
|
const m = depositUrl.match(/\/market\/(0x[0-9a-fA-F]{64})/);
|
|
@@ -39145,7 +41032,6 @@ function parseMorphoUniqueKey(depositUrl) {
|
|
|
39145
41032
|
var morphoCollateralMerklRewardFetcher = createMerklRewardFetcher({
|
|
39146
41033
|
merklProtocolId: "morpho",
|
|
39147
41034
|
lenderKey: "MORPHO_BLUE",
|
|
39148
|
-
chainIds: MORPHO_MERKL_CHAINS,
|
|
39149
41035
|
resolveAsset: (opp) => {
|
|
39150
41036
|
if (opp.type !== "MORPHOCOLLATERAL") return void 0;
|
|
39151
41037
|
const uniqueKey = parseMorphoUniqueKey(opp.depositUrl);
|
|
@@ -45566,7 +47452,7 @@ var Erc4626PreviewRedeemAbi = [
|
|
|
45566
47452
|
];
|
|
45567
47453
|
|
|
45568
47454
|
// src/vaults/lst/readers/shared.ts
|
|
45569
|
-
var
|
|
47455
|
+
var ONE_E187 = 10n ** 18n;
|
|
45570
47456
|
var rescaleDecimals = (v, fromDec, toDec) => toDec >= fromDec ? v * 10n ** BigInt(toDec - fromDec) : v / 10n ** BigInt(fromDec - toDec);
|
|
45571
47457
|
var MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
45572
47458
|
var Multicall3BalanceAbi = [
|
|
@@ -45609,7 +47495,7 @@ var readerBeetsStS = (entry) => ({
|
|
|
45609
47495
|
}
|
|
45610
47496
|
const liquidity = toBigInt12(pool);
|
|
45611
47497
|
return {
|
|
45612
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47498
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
45613
47499
|
totalSupply,
|
|
45614
47500
|
exchangeRate,
|
|
45615
47501
|
liquidity
|
|
@@ -45642,7 +47528,7 @@ var readerBenqiSavax = (entry) => ({
|
|
|
45642
47528
|
{
|
|
45643
47529
|
address: entry.address,
|
|
45644
47530
|
name: "getPooledAvaxByShares",
|
|
45645
|
-
params: [
|
|
47531
|
+
params: [ONE_E187]
|
|
45646
47532
|
},
|
|
45647
47533
|
{ address: entry.address, name: "totalPooledAvax", params: [] }
|
|
45648
47534
|
],
|
|
@@ -45653,7 +47539,7 @@ var readerBenqiSavax = (entry) => ({
|
|
|
45653
47539
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
45654
47540
|
return void 0;
|
|
45655
47541
|
}
|
|
45656
|
-
const totalAssets = toBigInt12(totalPooled) ?? totalSupply * exchangeRate /
|
|
47542
|
+
const totalAssets = toBigInt12(totalPooled) ?? totalSupply * exchangeRate / ONE_E187;
|
|
45657
47543
|
return {
|
|
45658
47544
|
totalAssets,
|
|
45659
47545
|
totalSupply,
|
|
@@ -45672,7 +47558,7 @@ var readerBgtWrapper1to1 = (entry) => ({
|
|
|
45672
47558
|
return {
|
|
45673
47559
|
totalAssets: totalSupply,
|
|
45674
47560
|
totalSupply,
|
|
45675
|
-
exchangeRate:
|
|
47561
|
+
exchangeRate: ONE_E187
|
|
45676
47562
|
};
|
|
45677
47563
|
}
|
|
45678
47564
|
});
|
|
@@ -45702,7 +47588,7 @@ var readerDineroBeraEth = (entry) => ({
|
|
|
45702
47588
|
return void 0;
|
|
45703
47589
|
}
|
|
45704
47590
|
return {
|
|
45705
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47591
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
45706
47592
|
totalSupply,
|
|
45707
47593
|
exchangeRate
|
|
45708
47594
|
};
|
|
@@ -45714,7 +47600,7 @@ var readerErc4626 = (entry) => ({
|
|
|
45714
47600
|
calls: [
|
|
45715
47601
|
{ address: entry.address, name: "totalAssets", params: [] },
|
|
45716
47602
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
45717
|
-
{ address: entry.address, name: "convertToAssets", params: [
|
|
47603
|
+
{ address: entry.address, name: "convertToAssets", params: [ONE_E187] }
|
|
45718
47604
|
],
|
|
45719
47605
|
abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
|
|
45720
47606
|
parse: ([assets, supply, rate]) => {
|
|
@@ -45731,7 +47617,7 @@ var readerErc4626PreviewRedeem = (entry) => ({
|
|
|
45731
47617
|
calls: [
|
|
45732
47618
|
{ address: entry.address, name: "totalAssets", params: [] },
|
|
45733
47619
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
45734
|
-
{ address: entry.address, name: "previewRedeem", params: [
|
|
47620
|
+
{ address: entry.address, name: "previewRedeem", params: [ONE_E187] }
|
|
45735
47621
|
],
|
|
45736
47622
|
abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
|
|
45737
47623
|
parse: ([assets, supply, rate]) => {
|
|
@@ -45811,7 +47697,7 @@ var readerEtherFiWeEth = (entry) => {
|
|
|
45811
47697
|
}
|
|
45812
47698
|
}
|
|
45813
47699
|
return {
|
|
45814
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47700
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
45815
47701
|
totalSupply,
|
|
45816
47702
|
exchangeRate,
|
|
45817
47703
|
liquidity
|
|
@@ -45844,7 +47730,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
45844
47730
|
return {
|
|
45845
47731
|
totalAssets: totalSupply,
|
|
45846
47732
|
totalSupply,
|
|
45847
|
-
exchangeRate:
|
|
47733
|
+
exchangeRate: ONE_E187
|
|
45848
47734
|
};
|
|
45849
47735
|
}
|
|
45850
47736
|
};
|
|
@@ -45852,7 +47738,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
45852
47738
|
return {
|
|
45853
47739
|
calls: [
|
|
45854
47740
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
45855
|
-
{ address: stakingCore, name: "BeHYPEToHYPE", params: [
|
|
47741
|
+
{ address: stakingCore, name: "BeHYPEToHYPE", params: [ONE_E187] }
|
|
45856
47742
|
],
|
|
45857
47743
|
abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
|
|
45858
47744
|
parse: ([supply, rate]) => {
|
|
@@ -45862,7 +47748,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
45862
47748
|
return void 0;
|
|
45863
47749
|
}
|
|
45864
47750
|
return {
|
|
45865
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47751
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
45866
47752
|
totalSupply,
|
|
45867
47753
|
exchangeRate
|
|
45868
47754
|
};
|
|
@@ -45894,7 +47780,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
45894
47780
|
return {
|
|
45895
47781
|
totalAssets: totalSupply,
|
|
45896
47782
|
totalSupply,
|
|
45897
|
-
exchangeRate:
|
|
47783
|
+
exchangeRate: ONE_E187
|
|
45898
47784
|
};
|
|
45899
47785
|
}
|
|
45900
47786
|
};
|
|
@@ -45912,7 +47798,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
45912
47798
|
return void 0;
|
|
45913
47799
|
}
|
|
45914
47800
|
return {
|
|
45915
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47801
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
45916
47802
|
totalSupply,
|
|
45917
47803
|
exchangeRate
|
|
45918
47804
|
};
|
|
@@ -45944,7 +47830,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
45944
47830
|
return {
|
|
45945
47831
|
totalAssets: totalSupply,
|
|
45946
47832
|
totalSupply,
|
|
45947
|
-
exchangeRate:
|
|
47833
|
+
exchangeRate: ONE_E187
|
|
45948
47834
|
};
|
|
45949
47835
|
}
|
|
45950
47836
|
};
|
|
@@ -45952,7 +47838,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
45952
47838
|
return {
|
|
45953
47839
|
calls: [
|
|
45954
47840
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
45955
|
-
{ address: accountant, name: "kHYPEToHYPE", params: [
|
|
47841
|
+
{ address: accountant, name: "kHYPEToHYPE", params: [ONE_E187] }
|
|
45956
47842
|
],
|
|
45957
47843
|
abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
|
|
45958
47844
|
parse: ([supply, rate]) => {
|
|
@@ -45962,7 +47848,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
45962
47848
|
return void 0;
|
|
45963
47849
|
}
|
|
45964
47850
|
return {
|
|
45965
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47851
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
45966
47852
|
totalSupply,
|
|
45967
47853
|
exchangeRate
|
|
45968
47854
|
};
|
|
@@ -46002,7 +47888,7 @@ var readerLairStKaia = (entry) => ({
|
|
|
46002
47888
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
46003
47889
|
return void 0;
|
|
46004
47890
|
}
|
|
46005
|
-
const totalAssets = toBigInt12(totalStaking) ?? totalSupply * exchangeRate /
|
|
47891
|
+
const totalAssets = toBigInt12(totalStaking) ?? totalSupply * exchangeRate / ONE_E187;
|
|
46006
47892
|
return {
|
|
46007
47893
|
totalAssets,
|
|
46008
47894
|
totalSupply,
|
|
@@ -46036,7 +47922,7 @@ var readerLidoWstEth = (entry) => ({
|
|
|
46036
47922
|
return void 0;
|
|
46037
47923
|
}
|
|
46038
47924
|
return {
|
|
46039
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47925
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46040
47926
|
totalSupply,
|
|
46041
47927
|
exchangeRate
|
|
46042
47928
|
};
|
|
@@ -46074,7 +47960,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
46074
47960
|
return {
|
|
46075
47961
|
totalAssets: totalSupply,
|
|
46076
47962
|
totalSupply,
|
|
46077
|
-
exchangeRate:
|
|
47963
|
+
exchangeRate: ONE_E187
|
|
46078
47964
|
};
|
|
46079
47965
|
}
|
|
46080
47966
|
};
|
|
@@ -46082,7 +47968,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
46082
47968
|
return {
|
|
46083
47969
|
calls: [
|
|
46084
47970
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
46085
|
-
{ address: manager, name: "convertSnBnbToBnb", params: [
|
|
47971
|
+
{ address: manager, name: "convertSnBnbToBnb", params: [ONE_E187] },
|
|
46086
47972
|
{ address: manager, name: "getTotalPooledBnb", params: [] }
|
|
46087
47973
|
],
|
|
46088
47974
|
abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
|
|
@@ -46093,7 +47979,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
46093
47979
|
return void 0;
|
|
46094
47980
|
}
|
|
46095
47981
|
const pooledBnb = toBigInt12(pooled);
|
|
46096
|
-
const totalAssets = pooledBnb ?? totalSupply * exchangeRate /
|
|
47982
|
+
const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E187;
|
|
46097
47983
|
return { totalAssets, totalSupply, exchangeRate };
|
|
46098
47984
|
}
|
|
46099
47985
|
};
|
|
@@ -46123,7 +48009,7 @@ var readerMantleMEth = (entry) => {
|
|
|
46123
48009
|
return {
|
|
46124
48010
|
totalAssets: totalSupply,
|
|
46125
48011
|
totalSupply,
|
|
46126
|
-
exchangeRate:
|
|
48012
|
+
exchangeRate: ONE_E187
|
|
46127
48013
|
};
|
|
46128
48014
|
}
|
|
46129
48015
|
};
|
|
@@ -46131,7 +48017,7 @@ var readerMantleMEth = (entry) => {
|
|
|
46131
48017
|
return {
|
|
46132
48018
|
calls: [
|
|
46133
48019
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
46134
|
-
{ address: staking, name: "mETHToETH", params: [
|
|
48020
|
+
{ address: staking, name: "mETHToETH", params: [ONE_E187] }
|
|
46135
48021
|
],
|
|
46136
48022
|
abis: [TotalSupplyAbi, MantleStakingAbi],
|
|
46137
48023
|
parse: ([supply, rate]) => {
|
|
@@ -46141,7 +48027,7 @@ var readerMantleMEth = (entry) => {
|
|
|
46141
48027
|
return void 0;
|
|
46142
48028
|
}
|
|
46143
48029
|
return {
|
|
46144
|
-
totalAssets: totalSupply * exchangeRate /
|
|
48030
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46145
48031
|
totalSupply,
|
|
46146
48032
|
exchangeRate
|
|
46147
48033
|
};
|
|
@@ -46162,7 +48048,7 @@ var readerOffChain = (entry) => {
|
|
|
46162
48048
|
return {
|
|
46163
48049
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
46164
48050
|
totalSupply,
|
|
46165
|
-
exchangeRate:
|
|
48051
|
+
exchangeRate: ONE_E187
|
|
46166
48052
|
};
|
|
46167
48053
|
}
|
|
46168
48054
|
};
|
|
@@ -46196,7 +48082,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
46196
48082
|
return {
|
|
46197
48083
|
totalAssets: totalSupply,
|
|
46198
48084
|
totalSupply,
|
|
46199
|
-
exchangeRate:
|
|
48085
|
+
exchangeRate: ONE_E187
|
|
46200
48086
|
};
|
|
46201
48087
|
}
|
|
46202
48088
|
};
|
|
@@ -46215,7 +48101,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
46215
48101
|
return {
|
|
46216
48102
|
totalAssets: totalTvl,
|
|
46217
48103
|
totalSupply,
|
|
46218
|
-
exchangeRate: totalTvl *
|
|
48104
|
+
exchangeRate: totalTvl * ONE_E187 / totalSupply
|
|
46219
48105
|
};
|
|
46220
48106
|
}
|
|
46221
48107
|
};
|
|
@@ -46271,7 +48157,7 @@ var readerRocketReth = (entry) => {
|
|
|
46271
48157
|
}
|
|
46272
48158
|
const liquidity = depositPool ? toBigInt12(slice[2]) : void 0;
|
|
46273
48159
|
return {
|
|
46274
|
-
totalAssets: totalSupply * exchangeRate /
|
|
48160
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46275
48161
|
totalSupply,
|
|
46276
48162
|
exchangeRate,
|
|
46277
48163
|
liquidity
|
|
@@ -46313,7 +48199,7 @@ var readerStaderEthx = (entry) => {
|
|
|
46313
48199
|
return {
|
|
46314
48200
|
totalAssets: totalSupply,
|
|
46315
48201
|
totalSupply,
|
|
46316
|
-
exchangeRate:
|
|
48202
|
+
exchangeRate: ONE_E187
|
|
46317
48203
|
};
|
|
46318
48204
|
}
|
|
46319
48205
|
};
|
|
@@ -46331,7 +48217,7 @@ var readerStaderEthx = (entry) => {
|
|
|
46331
48217
|
return void 0;
|
|
46332
48218
|
}
|
|
46333
48219
|
return {
|
|
46334
|
-
totalAssets: totalSupply * exchangeRate /
|
|
48220
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46335
48221
|
totalSupply,
|
|
46336
48222
|
exchangeRate
|
|
46337
48223
|
};
|
|
@@ -46348,7 +48234,7 @@ var readerStaderMaticX = (entry) => {
|
|
|
46348
48234
|
{
|
|
46349
48235
|
address: rateAddress,
|
|
46350
48236
|
name: "convertMaticXToMatic",
|
|
46351
|
-
params: [
|
|
48237
|
+
params: [ONE_E187],
|
|
46352
48238
|
chainId: homeChainId
|
|
46353
48239
|
}
|
|
46354
48240
|
],
|
|
@@ -46363,7 +48249,7 @@ var readerStaderMaticX = (entry) => {
|
|
|
46363
48249
|
}
|
|
46364
48250
|
const isCrossChain = homeContract !== void 0;
|
|
46365
48251
|
return {
|
|
46366
|
-
totalAssets: isCrossChain ? totalSupply * amountInMatic /
|
|
48252
|
+
totalAssets: isCrossChain ? totalSupply * amountInMatic / ONE_E187 : totalPooledMatic ?? totalSupply * amountInMatic / ONE_E187,
|
|
46367
48253
|
totalSupply,
|
|
46368
48254
|
exchangeRate: amountInMatic
|
|
46369
48255
|
};
|
|
@@ -46395,7 +48281,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
46395
48281
|
return {
|
|
46396
48282
|
totalAssets: totalSupply,
|
|
46397
48283
|
totalSupply,
|
|
46398
|
-
exchangeRate:
|
|
48284
|
+
exchangeRate: ONE_E187
|
|
46399
48285
|
};
|
|
46400
48286
|
}
|
|
46401
48287
|
};
|
|
@@ -46403,7 +48289,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
46403
48289
|
return {
|
|
46404
48290
|
calls: [
|
|
46405
48291
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
46406
|
-
{ address: controller, name: "convertToAssets", params: [
|
|
48292
|
+
{ address: controller, name: "convertToAssets", params: [ONE_E187] }
|
|
46407
48293
|
],
|
|
46408
48294
|
abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
|
|
46409
48295
|
parse: ([supply, rate]) => {
|
|
@@ -46413,7 +48299,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
46413
48299
|
return void 0;
|
|
46414
48300
|
}
|
|
46415
48301
|
return {
|
|
46416
|
-
totalAssets: totalSupply * exchangeRate /
|
|
48302
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46417
48303
|
totalSupply,
|
|
46418
48304
|
exchangeRate
|
|
46419
48305
|
};
|
|
@@ -46445,7 +48331,7 @@ var readerStCelo = (entry) => {
|
|
|
46445
48331
|
return {
|
|
46446
48332
|
totalAssets: totalSupply,
|
|
46447
48333
|
totalSupply,
|
|
46448
|
-
exchangeRate:
|
|
48334
|
+
exchangeRate: ONE_E187
|
|
46449
48335
|
};
|
|
46450
48336
|
}
|
|
46451
48337
|
};
|
|
@@ -46453,7 +48339,7 @@ var readerStCelo = (entry) => {
|
|
|
46453
48339
|
return {
|
|
46454
48340
|
calls: [
|
|
46455
48341
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
46456
|
-
{ address: manager, name: "toCelo", params: [
|
|
48342
|
+
{ address: manager, name: "toCelo", params: [ONE_E187] }
|
|
46457
48343
|
],
|
|
46458
48344
|
abis: [TotalSupplyAbi, StCeloManagerAbi],
|
|
46459
48345
|
parse: ([supply, rate]) => {
|
|
@@ -46463,7 +48349,7 @@ var readerStCelo = (entry) => {
|
|
|
46463
48349
|
return void 0;
|
|
46464
48350
|
}
|
|
46465
48351
|
return {
|
|
46466
|
-
totalAssets: totalSupply * exchangeRate /
|
|
48352
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46467
48353
|
totalSupply,
|
|
46468
48354
|
exchangeRate
|
|
46469
48355
|
};
|
|
@@ -46496,7 +48382,7 @@ var readerSwellGetRate = (entry) => ({
|
|
|
46496
48382
|
return void 0;
|
|
46497
48383
|
}
|
|
46498
48384
|
return {
|
|
46499
|
-
totalAssets: totalSupply * exchangeRate /
|
|
48385
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46500
48386
|
totalSupply,
|
|
46501
48387
|
exchangeRate
|
|
46502
48388
|
};
|
|
@@ -46527,7 +48413,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
46527
48413
|
return {
|
|
46528
48414
|
totalAssets: totalSupply,
|
|
46529
48415
|
totalSupply,
|
|
46530
|
-
exchangeRate:
|
|
48416
|
+
exchangeRate: ONE_E187
|
|
46531
48417
|
};
|
|
46532
48418
|
}
|
|
46533
48419
|
};
|
|
@@ -46545,7 +48431,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
46545
48431
|
return void 0;
|
|
46546
48432
|
}
|
|
46547
48433
|
return {
|
|
46548
|
-
totalAssets: totalSupply * exchangeRate /
|
|
48434
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46549
48435
|
totalSupply,
|
|
46550
48436
|
exchangeRate
|
|
46551
48437
|
};
|
|
@@ -46579,7 +48465,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
46579
48465
|
return {
|
|
46580
48466
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
46581
48467
|
totalSupply,
|
|
46582
|
-
exchangeRate:
|
|
48468
|
+
exchangeRate: ONE_E187
|
|
46583
48469
|
};
|
|
46584
48470
|
}
|
|
46585
48471
|
};
|
|
@@ -46598,7 +48484,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
46598
48484
|
const exchangeRate = rawRate * scale;
|
|
46599
48485
|
return {
|
|
46600
48486
|
totalAssets: rescaleDecimals(
|
|
46601
|
-
totalSupply * exchangeRate /
|
|
48487
|
+
totalSupply * exchangeRate / ONE_E187,
|
|
46602
48488
|
shareDec,
|
|
46603
48489
|
underlyingDec
|
|
46604
48490
|
),
|
|
@@ -46634,9 +48520,9 @@ var readerAnkrRatio = (entry) => ({
|
|
|
46634
48520
|
return void 0;
|
|
46635
48521
|
}
|
|
46636
48522
|
return {
|
|
46637
|
-
totalAssets: totalSupply *
|
|
48523
|
+
totalAssets: totalSupply * ONE_E187 / r,
|
|
46638
48524
|
totalSupply,
|
|
46639
|
-
exchangeRate:
|
|
48525
|
+
exchangeRate: ONE_E187 * ONE_E187 / r
|
|
46640
48526
|
};
|
|
46641
48527
|
}
|
|
46642
48528
|
});
|
|
@@ -46680,7 +48566,7 @@ var readerCoreEarnRate = (entry) => {
|
|
|
46680
48566
|
return {
|
|
46681
48567
|
totalAssets: totalSupply * r / CORE_RATE_DENOM,
|
|
46682
48568
|
totalSupply,
|
|
46683
|
-
exchangeRate: r *
|
|
48569
|
+
exchangeRate: r * ONE_E187 / CORE_RATE_DENOM
|
|
46684
48570
|
};
|
|
46685
48571
|
}
|
|
46686
48572
|
};
|
|
@@ -46702,7 +48588,7 @@ var readerCoreStakedRatio = (entry) => {
|
|
|
46702
48588
|
return {
|
|
46703
48589
|
totalAssets: totalStaked,
|
|
46704
48590
|
totalSupply,
|
|
46705
|
-
exchangeRate: totalStaked *
|
|
48591
|
+
exchangeRate: totalStaked * ONE_E187 / totalSupply
|
|
46706
48592
|
};
|
|
46707
48593
|
}
|
|
46708
48594
|
};
|
|
@@ -46733,7 +48619,7 @@ var readerStellaStDot = (entry) => ({
|
|
|
46733
48619
|
{
|
|
46734
48620
|
address: entry.address,
|
|
46735
48621
|
name: "getPooledTokenByShares",
|
|
46736
|
-
params: [
|
|
48622
|
+
params: [ONE_E187]
|
|
46737
48623
|
},
|
|
46738
48624
|
{ address: entry.address, name: "getTotalPooledToken", params: [] }
|
|
46739
48625
|
],
|
|
@@ -46744,7 +48630,7 @@ var readerStellaStDot = (entry) => ({
|
|
|
46744
48630
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
46745
48631
|
return void 0;
|
|
46746
48632
|
}
|
|
46747
|
-
const totalAssets = toBigInt12(pooled) ?? totalSupply * exchangeRate /
|
|
48633
|
+
const totalAssets = toBigInt12(pooled) ?? totalSupply * exchangeRate / ONE_E187;
|
|
46748
48634
|
return {
|
|
46749
48635
|
totalAssets,
|
|
46750
48636
|
totalSupply,
|
|
@@ -46782,7 +48668,7 @@ var readerKintsuSMon = (entry) => ({
|
|
|
46782
48668
|
const totalAssets = toBigInt12(pooled);
|
|
46783
48669
|
const totalSupply = toBigInt12(shares);
|
|
46784
48670
|
if (totalAssets === void 0 || totalSupply === void 0) return void 0;
|
|
46785
|
-
const exchangeRate = totalSupply > 0n ? totalAssets *
|
|
48671
|
+
const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E187 / totalSupply : ONE_E187;
|
|
46786
48672
|
return { totalAssets, totalSupply, exchangeRate };
|
|
46787
48673
|
}
|
|
46788
48674
|
});
|
|
@@ -47218,7 +49104,7 @@ var getLstValidators = async (chainId, shareToken) => {
|
|
|
47218
49104
|
};
|
|
47219
49105
|
|
|
47220
49106
|
// src/vaults/lst/fetchPublic.ts
|
|
47221
|
-
var
|
|
49107
|
+
var ONE_E188 = 10n ** 18n;
|
|
47222
49108
|
var ERC20_BALANCE_ABI = parseAbi([
|
|
47223
49109
|
"function balanceOf(address) view returns (uint256)"
|
|
47224
49110
|
]);
|
|
@@ -47333,8 +49219,8 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
47333
49219
|
const underlyingUnit = 10n ** BigInt(underlyingDec);
|
|
47334
49220
|
const totalAssetsFormatted = Number(state.totalAssets) / 10 ** underlyingDec;
|
|
47335
49221
|
const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
|
|
47336
|
-
const convertToAssets = state.exchangeRate * underlyingUnit /
|
|
47337
|
-
const convertToShares = state.exchangeRate > 0n ?
|
|
49222
|
+
const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E188;
|
|
49223
|
+
const convertToShares = state.exchangeRate > 0n ? ONE_E188 * shareUnit / state.exchangeRate : 0n;
|
|
47338
49224
|
let liquidityRaw;
|
|
47339
49225
|
if (state.liquidity !== void 0) {
|
|
47340
49226
|
liquidityRaw = state.liquidity;
|
|
@@ -50349,6 +52235,15 @@ var TotalSupplyAbi2 = [
|
|
|
50349
52235
|
outputs: [{ type: "uint256" }]
|
|
50350
52236
|
}
|
|
50351
52237
|
];
|
|
52238
|
+
var BalanceOfAbi = [
|
|
52239
|
+
{
|
|
52240
|
+
name: "balanceOf",
|
|
52241
|
+
type: "function",
|
|
52242
|
+
stateMutability: "view",
|
|
52243
|
+
inputs: [{ type: "address", name: "account" }],
|
|
52244
|
+
outputs: [{ type: "uint256" }]
|
|
52245
|
+
}
|
|
52246
|
+
];
|
|
50352
52247
|
var Erc4626ReadAbi2 = [
|
|
50353
52248
|
{
|
|
50354
52249
|
name: "totalAssets",
|
|
@@ -50365,9 +52260,24 @@ var Erc4626ReadAbi2 = [
|
|
|
50365
52260
|
outputs: [{ type: "uint256", name: "assets" }]
|
|
50366
52261
|
}
|
|
50367
52262
|
];
|
|
52263
|
+
var NavOracleReadAbi = [
|
|
52264
|
+
{
|
|
52265
|
+
name: "latestRoundData",
|
|
52266
|
+
type: "function",
|
|
52267
|
+
stateMutability: "view",
|
|
52268
|
+
inputs: [],
|
|
52269
|
+
outputs: [
|
|
52270
|
+
{ name: "roundId", type: "uint80" },
|
|
52271
|
+
{ name: "answer", type: "int256" },
|
|
52272
|
+
{ name: "startedAt", type: "uint256" },
|
|
52273
|
+
{ name: "updatedAt", type: "uint256" },
|
|
52274
|
+
{ name: "answeredInRound", type: "uint80" }
|
|
52275
|
+
]
|
|
52276
|
+
}
|
|
52277
|
+
];
|
|
50368
52278
|
|
|
50369
52279
|
// src/vaults/savings/readers/shared.ts
|
|
50370
|
-
var
|
|
52280
|
+
var ONE_E189 = 10n ** 18n;
|
|
50371
52281
|
var toBigInt14 = (v) => {
|
|
50372
52282
|
if (v === void 0 || v === null) return void 0;
|
|
50373
52283
|
if (typeof v === "bigint") return v;
|
|
@@ -50408,20 +52318,221 @@ var readerErc46262 = (entry) => {
|
|
|
50408
52318
|
return {
|
|
50409
52319
|
totalAssets,
|
|
50410
52320
|
totalSupply,
|
|
50411
|
-
exchangeRate: convertToAssetsRaw *
|
|
52321
|
+
exchangeRate: convertToAssetsRaw * ONE_E189 / underlyingUnit
|
|
52322
|
+
};
|
|
52323
|
+
}
|
|
52324
|
+
};
|
|
52325
|
+
};
|
|
52326
|
+
|
|
52327
|
+
// src/vaults/savings/abis/native.ts
|
|
52328
|
+
var NativeWnlpReadAbi = [
|
|
52329
|
+
{
|
|
52330
|
+
// 1e18-scaled underlying-per-share, independent of token decimals:
|
|
52331
|
+
// `getNlpByWnlp(1e18) / 1e18` is the exchange rate (per Native docs).
|
|
52332
|
+
name: "getNlpByWnlp",
|
|
52333
|
+
type: "function",
|
|
52334
|
+
stateMutability: "view",
|
|
52335
|
+
inputs: [{ type: "uint256", name: "wnlpAmount" }],
|
|
52336
|
+
outputs: [{ type: "uint256" }]
|
|
52337
|
+
},
|
|
52338
|
+
{
|
|
52339
|
+
/** Instant-redeem haircut in basis points (0.1 %–2 %, default 1 %). */
|
|
52340
|
+
name: "instantRedeemFeeBips",
|
|
52341
|
+
type: "function",
|
|
52342
|
+
stateMutability: "view",
|
|
52343
|
+
inputs: [],
|
|
52344
|
+
outputs: [{ type: "uint256" }]
|
|
52345
|
+
},
|
|
52346
|
+
{
|
|
52347
|
+
/** Some assets disable the instant leg entirely — queue only. */
|
|
52348
|
+
name: "instantRedeemEnabled",
|
|
52349
|
+
type: "function",
|
|
52350
|
+
stateMutability: "view",
|
|
52351
|
+
inputs: [],
|
|
52352
|
+
outputs: [{ type: "bool" }]
|
|
52353
|
+
},
|
|
52354
|
+
{
|
|
52355
|
+
/** Per-wNLP WithdrawQueue contract (the delayed-redeem leg). */
|
|
52356
|
+
name: "withdrawQueue",
|
|
52357
|
+
type: "function",
|
|
52358
|
+
stateMutability: "view",
|
|
52359
|
+
inputs: [],
|
|
52360
|
+
outputs: [{ type: "address" }]
|
|
52361
|
+
},
|
|
52362
|
+
{
|
|
52363
|
+
/** The rebasing NTLP pool share this wNLP wraps. */
|
|
52364
|
+
name: "nlp",
|
|
52365
|
+
type: "function",
|
|
52366
|
+
stateMutability: "view",
|
|
52367
|
+
inputs: [],
|
|
52368
|
+
outputs: [{ type: "address" }]
|
|
52369
|
+
},
|
|
52370
|
+
{
|
|
52371
|
+
name: "underlying",
|
|
52372
|
+
type: "function",
|
|
52373
|
+
stateMutability: "view",
|
|
52374
|
+
inputs: [],
|
|
52375
|
+
outputs: [{ type: "address" }]
|
|
52376
|
+
}
|
|
52377
|
+
];
|
|
52378
|
+
var NativeWithdrawQueueReadAbi = [
|
|
52379
|
+
{
|
|
52380
|
+
/** Seconds between `requestWithdrawal` and `claimWithdrawal`
|
|
52381
|
+
* (1–8 days depending on the asset; 3 days is the common value). */
|
|
52382
|
+
name: "withdrawalWindow",
|
|
52383
|
+
type: "function",
|
|
52384
|
+
stateMutability: "view",
|
|
52385
|
+
inputs: [],
|
|
52386
|
+
outputs: [{ type: "uint256" }]
|
|
52387
|
+
}
|
|
52388
|
+
];
|
|
52389
|
+
|
|
52390
|
+
// src/vaults/savings/readers/erc4626Idle.ts
|
|
52391
|
+
var readerErc4626Idle = (entry) => {
|
|
52392
|
+
const shareUnit = 10n ** BigInt(entry.decimals);
|
|
52393
|
+
const underlyingUnit = 10n ** BigInt(entry.underlyingDecimals ?? entry.decimals);
|
|
52394
|
+
const inventory = entry.inventoryContract ?? entry.address;
|
|
52395
|
+
return {
|
|
52396
|
+
calls: [
|
|
52397
|
+
{ address: entry.address, name: "totalAssets", params: [] },
|
|
52398
|
+
{ address: entry.address, name: "totalSupply", params: [] },
|
|
52399
|
+
{
|
|
52400
|
+
address: entry.address,
|
|
52401
|
+
name: "convertToAssets",
|
|
52402
|
+
params: [shareUnit]
|
|
52403
|
+
},
|
|
52404
|
+
{ address: entry.underlying, name: "balanceOf", params: [inventory] }
|
|
52405
|
+
],
|
|
52406
|
+
abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2, BalanceOfAbi],
|
|
52407
|
+
parse: ([assets, supply, rate, inventoryBalance]) => {
|
|
52408
|
+
const totalAssets = toBigInt14(assets);
|
|
52409
|
+
const totalSupply = toBigInt14(supply);
|
|
52410
|
+
const convertToAssetsRaw = toBigInt14(rate);
|
|
52411
|
+
if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
|
|
52412
|
+
return void 0;
|
|
52413
|
+
}
|
|
52414
|
+
const capacity = toBigInt14(inventoryBalance);
|
|
52415
|
+
return {
|
|
52416
|
+
totalAssets,
|
|
52417
|
+
totalSupply,
|
|
52418
|
+
exchangeRate: convertToAssetsRaw * ONE_E189 / underlyingUnit,
|
|
52419
|
+
...capacity !== void 0 ? {
|
|
52420
|
+
instantRedeemCapacity: capacity,
|
|
52421
|
+
instantRedeemEnabled: true,
|
|
52422
|
+
withdrawFeeBps: 0
|
|
52423
|
+
} : {},
|
|
52424
|
+
...entry.withdrawQueue ? { withdrawQueue: entry.withdrawQueue } : {}
|
|
52425
|
+
};
|
|
52426
|
+
}
|
|
52427
|
+
};
|
|
52428
|
+
};
|
|
52429
|
+
|
|
52430
|
+
// src/vaults/savings/readers/navOracle.ts
|
|
52431
|
+
var readerNavOracle = (entry) => {
|
|
52432
|
+
const shareUnit = 10n ** BigInt(entry.decimals);
|
|
52433
|
+
const underlyingUnit = 10n ** BigInt(entry.underlyingDecimals ?? entry.decimals);
|
|
52434
|
+
return {
|
|
52435
|
+
calls: [
|
|
52436
|
+
{ address: entry.address, name: "totalSupply", params: [] },
|
|
52437
|
+
{
|
|
52438
|
+
address: entry.priceOracle ?? entry.address,
|
|
52439
|
+
name: "latestRoundData",
|
|
52440
|
+
params: []
|
|
52441
|
+
}
|
|
52442
|
+
],
|
|
52443
|
+
abis: [TotalSupplyAbi2, NavOracleReadAbi],
|
|
52444
|
+
parse: ([supply, round]) => {
|
|
52445
|
+
const totalSupply = toBigInt14(supply);
|
|
52446
|
+
if (totalSupply === void 0) return void 0;
|
|
52447
|
+
const raw = Array.isArray(round) ? round[1] : round?.answer;
|
|
52448
|
+
const exchangeRate = toBigInt14(raw);
|
|
52449
|
+
if (exchangeRate === void 0 || exchangeRate <= 0n) return void 0;
|
|
52450
|
+
return {
|
|
52451
|
+
totalAssets: totalSupply * exchangeRate * underlyingUnit / (ONE_E189 * shareUnit),
|
|
52452
|
+
totalSupply,
|
|
52453
|
+
exchangeRate
|
|
52454
|
+
};
|
|
52455
|
+
}
|
|
52456
|
+
};
|
|
52457
|
+
};
|
|
52458
|
+
|
|
52459
|
+
// src/vaults/savings/readers/nativeWnlp.ts
|
|
52460
|
+
var readerNativeWnlp = (entry) => {
|
|
52461
|
+
const { address, underlying, inventoryContract, withdrawQueue } = entry;
|
|
52462
|
+
return {
|
|
52463
|
+
calls: [
|
|
52464
|
+
{ address, name: "totalSupply", params: [] },
|
|
52465
|
+
{ address, name: "getNlpByWnlp", params: [ONE_E189] },
|
|
52466
|
+
{ address, name: "instantRedeemFeeBips", params: [] },
|
|
52467
|
+
{ address, name: "instantRedeemEnabled", params: [] },
|
|
52468
|
+
// Falls back to the vault itself when no CreditVault is pinned —
|
|
52469
|
+
// yields a 0 capacity rather than a malformed call.
|
|
52470
|
+
{
|
|
52471
|
+
address: underlying,
|
|
52472
|
+
name: "balanceOf",
|
|
52473
|
+
params: [inventoryContract ?? address]
|
|
52474
|
+
},
|
|
52475
|
+
{
|
|
52476
|
+
address: withdrawQueue ?? address,
|
|
52477
|
+
name: "withdrawalWindow",
|
|
52478
|
+
params: []
|
|
52479
|
+
}
|
|
52480
|
+
],
|
|
52481
|
+
abis: [
|
|
52482
|
+
TotalSupplyAbi2,
|
|
52483
|
+
NativeWnlpReadAbi,
|
|
52484
|
+
NativeWnlpReadAbi,
|
|
52485
|
+
NativeWnlpReadAbi,
|
|
52486
|
+
BalanceOfAbi,
|
|
52487
|
+
NativeWithdrawQueueReadAbi
|
|
52488
|
+
],
|
|
52489
|
+
parse: ([supply, rate, feeBips, instantEnabled, inventory, window]) => {
|
|
52490
|
+
const totalSupply = toBigInt14(supply);
|
|
52491
|
+
const exchangeRate = toBigInt14(rate);
|
|
52492
|
+
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
52493
|
+
return void 0;
|
|
52494
|
+
}
|
|
52495
|
+
const capacity = toBigInt14(inventory);
|
|
52496
|
+
const windowSeconds = toBigInt14(window);
|
|
52497
|
+
const bips = toBigInt14(feeBips);
|
|
52498
|
+
return {
|
|
52499
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
52500
|
+
totalSupply,
|
|
52501
|
+
exchangeRate,
|
|
52502
|
+
// `instantRedeemFeeBips` on-chain is already basis points, so it
|
|
52503
|
+
// maps 1:1 onto the cross-provider `withdrawFeeBps`.
|
|
52504
|
+
withdrawFeeBps: bips !== void 0 ? Number(bips) : void 0,
|
|
52505
|
+
// `instantRedeemEnabled` is a bool; a reverted call reads as
|
|
52506
|
+
// undefined, which we treat as "unknown" rather than "disabled".
|
|
52507
|
+
instantRedeemEnabled: typeof instantEnabled === "boolean" ? instantEnabled : void 0,
|
|
52508
|
+
instantRedeemCapacity: capacity,
|
|
52509
|
+
withdrawalCooldownSeconds: windowSeconds !== void 0 ? Number(windowSeconds) : void 0,
|
|
52510
|
+
withdrawQueue: withdrawQueue?.toLowerCase()
|
|
50412
52511
|
};
|
|
50413
52512
|
}
|
|
50414
52513
|
};
|
|
50415
52514
|
};
|
|
50416
52515
|
|
|
50417
52516
|
// src/vaults/savings/readers/index.ts
|
|
50418
|
-
var buildReader2 = (entry) =>
|
|
52517
|
+
var buildReader2 = (entry) => {
|
|
52518
|
+
switch (entry.reader) {
|
|
52519
|
+
case "native-wnlp":
|
|
52520
|
+
return readerNativeWnlp(entry);
|
|
52521
|
+
case "nav-oracle":
|
|
52522
|
+
return readerNavOracle(entry);
|
|
52523
|
+
case "erc4626-idle":
|
|
52524
|
+
return readerErc4626Idle(entry);
|
|
52525
|
+
case "erc4626":
|
|
52526
|
+
case void 0:
|
|
52527
|
+
return readerErc46262(entry);
|
|
52528
|
+
}
|
|
52529
|
+
};
|
|
50419
52530
|
|
|
50420
52531
|
// src/vaults/savings/yieldBinding.ts
|
|
50421
52532
|
var resolveYieldApr2 = async (entries) => (await resolveEntryApr(entries)).apr;
|
|
50422
52533
|
|
|
50423
52534
|
// src/vaults/savings/fetchPublic.ts
|
|
50424
|
-
var
|
|
52535
|
+
var ONE_E1810 = 10n ** 18n;
|
|
50425
52536
|
var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
50426
52537
|
const entries = getSavingsRegistry(chainId);
|
|
50427
52538
|
if (entries.length === 0) return {};
|
|
@@ -50459,11 +52570,19 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
50459
52570
|
const totalAssetsFormatted = Number(state.totalAssets) / 10 ** underlyingDec;
|
|
50460
52571
|
const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
|
|
50461
52572
|
const isInstant = entry.withdrawalMode === "instant";
|
|
50462
|
-
|
|
50463
|
-
|
|
50464
|
-
|
|
50465
|
-
|
|
50466
|
-
const
|
|
52573
|
+
let liquidityAmount = isInstant ? state.totalAssets : 0n;
|
|
52574
|
+
if (!isInstant && state.instantRedeemCapacity !== void 0) {
|
|
52575
|
+
liquidityAmount = state.instantRedeemEnabled === false ? 0n : state.instantRedeemCapacity < state.totalAssets ? state.instantRedeemCapacity : state.totalAssets;
|
|
52576
|
+
}
|
|
52577
|
+
const liquidityRaw = liquidityAmount.toString();
|
|
52578
|
+
const liquidityFormatted = Number(liquidityAmount) / 10 ** underlyingDec;
|
|
52579
|
+
const liquidityUsd = priceUsd !== void 0 ? liquidityFormatted * priceUsd : 0;
|
|
52580
|
+
const instantLiquidityRatio = state.totalAssets > 0n ? Math.min(
|
|
52581
|
+
1,
|
|
52582
|
+
Number(liquidityAmount * 1000000n / state.totalAssets) / 1e6
|
|
52583
|
+
) : 1;
|
|
52584
|
+
const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1810;
|
|
52585
|
+
const convertToShares = state.exchangeRate > 0n ? ONE_E1810 * shareUnit / state.exchangeRate : 0n;
|
|
50467
52586
|
const displayName = composeVaultDisplayName(
|
|
50468
52587
|
entry.brand,
|
|
50469
52588
|
entry.brand,
|
|
@@ -50491,19 +52610,32 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
50491
52610
|
supplyRate,
|
|
50492
52611
|
rewardsRate,
|
|
50493
52612
|
depositRate,
|
|
50494
|
-
|
|
52613
|
+
// Opt-IN, not opt-out: a new bespoke reader exists precisely
|
|
52614
|
+
// because its token is not a conforming vault, so the default for
|
|
52615
|
+
// an unlisted reader must be `false`. `erc4626-idle` is the plain
|
|
52616
|
+
// 4626 surface plus an inventory read, so it counts; Native's wNLP
|
|
52617
|
+
// and Re's NAV-oracle tokens revert on `asset()`/`totalAssets()`/
|
|
52618
|
+
// `convertToAssets()` and do not.
|
|
52619
|
+
isErc4626: entry.reader === void 0 || entry.reader === "erc4626" || entry.reader === "erc4626-idle",
|
|
50495
52620
|
isRebasing: entry.isRebasing,
|
|
50496
52621
|
isMintable: entry.isMintable,
|
|
50497
52622
|
mintContract: entry.mintContract?.toLowerCase() ?? addressLc,
|
|
50498
52623
|
withdrawalMode: entry.withdrawalMode,
|
|
50499
|
-
|
|
52624
|
+
// On-chain wins over the registry's pinned fallback — Native's
|
|
52625
|
+
// queue window is per-asset and governance-mutable.
|
|
52626
|
+
withdrawalCooldownSeconds: state.withdrawalCooldownSeconds ?? entry.withdrawalCooldownSeconds,
|
|
52627
|
+
withdrawFeeBps: state.withdrawFeeBps,
|
|
52628
|
+
instantRedeemEnabled: state.instantRedeemEnabled,
|
|
52629
|
+
inventoryContract: entry.inventoryContract?.toLowerCase(),
|
|
52630
|
+
withdrawQueue: state.withdrawQueue ?? entry.withdrawQueue?.toLowerCase(),
|
|
50500
52631
|
asset,
|
|
50501
52632
|
priceUsd,
|
|
50502
52633
|
totalAssetsFormatted,
|
|
50503
52634
|
totalAssetsUsd,
|
|
50504
52635
|
liquidity: liquidityRaw,
|
|
50505
52636
|
liquidityFormatted,
|
|
50506
|
-
liquidityUsd
|
|
52637
|
+
liquidityUsd,
|
|
52638
|
+
instantLiquidityRatio
|
|
50507
52639
|
};
|
|
50508
52640
|
out[addressLc] = vault;
|
|
50509
52641
|
}
|
|
@@ -52780,7 +54912,7 @@ var readVaultSharePrices = async (chainId, addresses, multicallRetry) => {
|
|
|
52780
54912
|
};
|
|
52781
54913
|
|
|
52782
54914
|
// src/vaults/yield/annualize.ts
|
|
52783
|
-
var
|
|
54915
|
+
var YEAR_SECONDS6 = 365 * 24 * 60 * 60;
|
|
52784
54916
|
var SCALE = 10n ** 18n;
|
|
52785
54917
|
var appendSnapshot = (points, snap, options) => {
|
|
52786
54918
|
const maxPoints = options?.maxPoints ?? 90;
|
|
@@ -52809,7 +54941,7 @@ var computeVaultApr = (points, options) => {
|
|
|
52809
54941
|
if (pThen === 0n) return void 0;
|
|
52810
54942
|
const ratioScaled = BigInt(now.p) * SCALE / pThen;
|
|
52811
54943
|
const ratio = Number(ratioScaled) / 1e18;
|
|
52812
|
-
const apr = (ratio - 1) * (
|
|
54944
|
+
const apr = (ratio - 1) * (YEAR_SECONDS6 / windowSeconds);
|
|
52813
54945
|
return {
|
|
52814
54946
|
apr,
|
|
52815
54947
|
sharePriceNow: now.p,
|