@1delta/margin-fetcher 0.0.400 → 0.0.402
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 +2101 -228
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
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';
|
|
@@ -11304,10 +11304,13 @@ var MORPHO_LENS = {
|
|
|
11304
11304
|
[Chain.ABSTRACT]: "0x8e24cfc19c6c00c524353cb8816f5f1c2f33c201",
|
|
11305
11305
|
[Chain.INK]: "0x0bd7473CbBf81d9dD936c61117eD230d95006CA2",
|
|
11306
11306
|
[Chain.KAIA_MAINNET]: "0x925716D57c842B50806884EDb295bA3E3A8EBdFE",
|
|
11307
|
-
// blue-api does not index these
|
|
11307
|
+
// blue-api does not index these three, so the lens is the ONLY way to read
|
|
11308
11308
|
// their Morpho markets — see `lenderApiOnly` in fetchLenderAll.ts.
|
|
11309
11309
|
[Chain.GNOSIS]: "0x98542B95B44a4732EffB1F4F01A696F1546236d3",
|
|
11310
|
-
[Chain.AVALANCHE_C_CHAIN]: "0x2eA75bBBc5615651efc9401FBc9Db4d03B055CA6"
|
|
11310
|
+
[Chain.AVALANCHE_C_CHAIN]: "0x2eA75bBBc5615651efc9401FBc9Db4d03B055CA6",
|
|
11311
|
+
// Same address as HyperEVM — same deployer + nonce, so CREATE lands
|
|
11312
|
+
// identically on both chains.
|
|
11313
|
+
[Chain.MEGAETH_MAINNET]: "0x6Bc6aCB905c1216B0119C87Bf9E178ce298310FA"
|
|
11311
11314
|
};
|
|
11312
11315
|
var buildMorphoUserCallWithLens = (chainId, account, lender, marketsToQuery) => {
|
|
11313
11316
|
const marketSlices = chunk(marketsToQuery, 100);
|
|
@@ -23962,6 +23965,7 @@ function lenderApiOnly(lender, chainId) {
|
|
|
23962
23965
|
if (chainId === "4114") return false;
|
|
23963
23966
|
if (chainId === Chain.GNOSIS) return false;
|
|
23964
23967
|
if (chainId === Chain.AVALANCHE_C_CHAIN) return false;
|
|
23968
|
+
if (chainId === Chain.MEGAETH_MAINNET) return false;
|
|
23965
23969
|
return true;
|
|
23966
23970
|
}
|
|
23967
23971
|
if (isMidnight(lender)) return true;
|
|
@@ -24246,14 +24250,14 @@ var { isArray } = lodash;
|
|
|
24246
24250
|
var maxRetries = 3;
|
|
24247
24251
|
var MULTICALL_FAILURE = "0x";
|
|
24248
24252
|
var isFailedCall = (value) => value === void 0 || value === null || value === MULTICALL_FAILURE;
|
|
24249
|
-
var retryFailedSlots = async (chainId, contracts, mapped,
|
|
24253
|
+
var retryFailedSlots = async (chainId, contracts, mapped, getEvmClient17, nextRpcId, batchSize, logs) => {
|
|
24250
24254
|
const failedIdx = [];
|
|
24251
24255
|
for (let i = 0; i < mapped.length; i++) {
|
|
24252
24256
|
if (isFailedCall(mapped[i])) failedIdx.push(i);
|
|
24253
24257
|
}
|
|
24254
24258
|
if (failedIdx.length === 0) return mapped;
|
|
24255
24259
|
try {
|
|
24256
|
-
const provider =
|
|
24260
|
+
const provider = getEvmClient17(chainId, nextRpcId);
|
|
24257
24261
|
const returnData = await provider.multicall({
|
|
24258
24262
|
allowFailure: true,
|
|
24259
24263
|
batchSize,
|
|
@@ -24267,9 +24271,9 @@ var retryFailedSlots = async (chainId, contracts, mapped, getEvmClient18, nextRp
|
|
|
24267
24271
|
}
|
|
24268
24272
|
return mapped;
|
|
24269
24273
|
};
|
|
24270
|
-
var multicallViemAbiArray = async (chainId, abi, calls,
|
|
24274
|
+
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
24275
|
try {
|
|
24272
|
-
const provider =
|
|
24276
|
+
const provider = getEvmClient17(chainId, providerId);
|
|
24273
24277
|
const abiIsArray = isArray(abi[0]);
|
|
24274
24278
|
const contracts = calls.map(({ address, name, params }, i) => ({
|
|
24275
24279
|
abi: abiIsArray ? abi?.[i] : abi,
|
|
@@ -24291,7 +24295,7 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient18, retry =
|
|
|
24291
24295
|
chainId,
|
|
24292
24296
|
contracts,
|
|
24293
24297
|
res,
|
|
24294
|
-
|
|
24298
|
+
getEvmClient17,
|
|
24295
24299
|
providerId + 1,
|
|
24296
24300
|
batchSize,
|
|
24297
24301
|
logs
|
|
@@ -24305,7 +24309,7 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient18, retry =
|
|
|
24305
24309
|
chainId,
|
|
24306
24310
|
abi,
|
|
24307
24311
|
calls,
|
|
24308
|
-
|
|
24312
|
+
getEvmClient17,
|
|
24309
24313
|
retry,
|
|
24310
24314
|
providerId,
|
|
24311
24315
|
retries,
|
|
@@ -24316,13 +24320,13 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient18, retry =
|
|
|
24316
24320
|
);
|
|
24317
24321
|
}
|
|
24318
24322
|
};
|
|
24319
|
-
var multicallShardedAbiArray = async (chainId, abi, calls,
|
|
24323
|
+
var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient17, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false) => {
|
|
24320
24324
|
if (poolSize <= 1) {
|
|
24321
24325
|
return multicallViemAbiArray(
|
|
24322
24326
|
chainId,
|
|
24323
24327
|
abi,
|
|
24324
24328
|
calls,
|
|
24325
|
-
|
|
24329
|
+
getEvmClient17,
|
|
24326
24330
|
true,
|
|
24327
24331
|
0,
|
|
24328
24332
|
retries,
|
|
@@ -24347,7 +24351,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient18, poolS
|
|
|
24347
24351
|
const results = new Array(contracts.length);
|
|
24348
24352
|
const runBatch = async (batch, rpcId, attemptsLeft, size) => {
|
|
24349
24353
|
try {
|
|
24350
|
-
const provider =
|
|
24354
|
+
const provider = getEvmClient17(chainId, rpcId);
|
|
24351
24355
|
const returnData = await provider.multicall({
|
|
24352
24356
|
allowFailure,
|
|
24353
24357
|
batchSize: size,
|
|
@@ -24361,7 +24365,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient18, poolS
|
|
|
24361
24365
|
chainId,
|
|
24362
24366
|
batch.items,
|
|
24363
24367
|
mapped,
|
|
24364
|
-
|
|
24368
|
+
getEvmClient17,
|
|
24365
24369
|
rpcId + 1,
|
|
24366
24370
|
size,
|
|
24367
24371
|
logs
|
|
@@ -33199,7 +33203,7 @@ function unflattenLenderData(pools) {
|
|
|
33199
33203
|
}
|
|
33200
33204
|
return result;
|
|
33201
33205
|
}
|
|
33202
|
-
var getLenderUserDataResult = async (chainId, queriesRaw,
|
|
33206
|
+
var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient17, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1) => {
|
|
33203
33207
|
const queries = organizeUserQueries(queriesRaw);
|
|
33204
33208
|
const builtCalls = await Promise.all(
|
|
33205
33209
|
queries.map(async (query3) => {
|
|
@@ -33209,7 +33213,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient18, allowF
|
|
|
33209
33213
|
query3.lender,
|
|
33210
33214
|
query3.account,
|
|
33211
33215
|
query3.params,
|
|
33212
|
-
|
|
33216
|
+
getEvmClient17
|
|
33213
33217
|
);
|
|
33214
33218
|
return callData.map((call) => ({ call, abi: call.abi ?? abi }));
|
|
33215
33219
|
})
|
|
@@ -33219,7 +33223,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient18, allowF
|
|
|
33219
33223
|
chainId,
|
|
33220
33224
|
calls.map((call) => call.abi),
|
|
33221
33225
|
calls.map((call) => call.call),
|
|
33222
|
-
|
|
33226
|
+
getEvmClient17,
|
|
33223
33227
|
concurrency,
|
|
33224
33228
|
retries,
|
|
33225
33229
|
allowFailure,
|
|
@@ -36151,6 +36155,166 @@ var monadLstFetcher = {
|
|
|
36151
36155
|
return out;
|
|
36152
36156
|
}
|
|
36153
36157
|
};
|
|
36158
|
+
var CHAIN_ID7 = Chain.ETHEREUM_MAINNET;
|
|
36159
|
+
var FRXETH_SUMMARY_URL = "https://api.frax.finance/v2/frxeth/summary/latest";
|
|
36160
|
+
var SFRXETH = "0xac3e018457b222d93114458476f3e3416abbe38f";
|
|
36161
|
+
var SFRXUSD = "0xcf62f905562626cfcdd2261162a51fd02fc9c5b6";
|
|
36162
|
+
var SFRAX = "0xa663b02cf0a4b149d2ad41910cb81e23e1c41c32";
|
|
36163
|
+
var YEAR_SECONDS3 = 31536000n;
|
|
36164
|
+
var ONE_E186 = 10n ** 18n;
|
|
36165
|
+
var SFRXETH_KEY = "SFRXETH";
|
|
36166
|
+
var SFRXUSD_KEY = "SFRXUSD";
|
|
36167
|
+
var SFRXUSD_GROUP_KEY = "Staked Frax USD::sfrxUSD";
|
|
36168
|
+
var SFRAX_KEY = "SFRAX";
|
|
36169
|
+
var SFRAX_GROUP_KEY = "Staked FRAX::SFRAX";
|
|
36170
|
+
var XERC4626_ABI = [
|
|
36171
|
+
{
|
|
36172
|
+
name: "rewardsCycleEnd",
|
|
36173
|
+
type: "function",
|
|
36174
|
+
stateMutability: "view",
|
|
36175
|
+
inputs: [],
|
|
36176
|
+
outputs: [{ type: "uint32" }]
|
|
36177
|
+
},
|
|
36178
|
+
{
|
|
36179
|
+
name: "lastSync",
|
|
36180
|
+
type: "function",
|
|
36181
|
+
stateMutability: "view",
|
|
36182
|
+
inputs: [],
|
|
36183
|
+
outputs: [{ type: "uint32" }]
|
|
36184
|
+
},
|
|
36185
|
+
{
|
|
36186
|
+
name: "lastRewardAmount",
|
|
36187
|
+
type: "function",
|
|
36188
|
+
stateMutability: "view",
|
|
36189
|
+
inputs: [],
|
|
36190
|
+
outputs: [{ type: "uint192" }]
|
|
36191
|
+
},
|
|
36192
|
+
{
|
|
36193
|
+
name: "totalAssets",
|
|
36194
|
+
type: "function",
|
|
36195
|
+
stateMutability: "view",
|
|
36196
|
+
inputs: [],
|
|
36197
|
+
outputs: [{ type: "uint256" }]
|
|
36198
|
+
}
|
|
36199
|
+
];
|
|
36200
|
+
var LINEAR_REWARDS_ABI = [
|
|
36201
|
+
{
|
|
36202
|
+
name: "rewardsCycleData",
|
|
36203
|
+
type: "function",
|
|
36204
|
+
stateMutability: "view",
|
|
36205
|
+
inputs: [],
|
|
36206
|
+
outputs: [
|
|
36207
|
+
{ type: "uint40", name: "cycleEnd" },
|
|
36208
|
+
{ type: "uint40", name: "lastSync" },
|
|
36209
|
+
{ type: "uint216", name: "rewardCycleAmount" }
|
|
36210
|
+
]
|
|
36211
|
+
},
|
|
36212
|
+
{
|
|
36213
|
+
name: "maxDistributionPerSecondPerAsset",
|
|
36214
|
+
type: "function",
|
|
36215
|
+
stateMutability: "view",
|
|
36216
|
+
inputs: [],
|
|
36217
|
+
outputs: [{ type: "uint256" }]
|
|
36218
|
+
},
|
|
36219
|
+
{
|
|
36220
|
+
name: "storedTotalAssets",
|
|
36221
|
+
type: "function",
|
|
36222
|
+
stateMutability: "view",
|
|
36223
|
+
inputs: [],
|
|
36224
|
+
outputs: [{ type: "uint256" }]
|
|
36225
|
+
}
|
|
36226
|
+
];
|
|
36227
|
+
var robustFetchJson2 = async (url, { timeoutMs = 5e3, attempts = 3 } = {}) => {
|
|
36228
|
+
let lastErr;
|
|
36229
|
+
for (let i = 0; i < attempts; i++) {
|
|
36230
|
+
try {
|
|
36231
|
+
const res = await fetch(url, {
|
|
36232
|
+
headers: {
|
|
36233
|
+
accept: "application/json",
|
|
36234
|
+
"user-agent": "1delta-margin-fetcher"
|
|
36235
|
+
},
|
|
36236
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
36237
|
+
});
|
|
36238
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
36239
|
+
return await res.json();
|
|
36240
|
+
} catch (e) {
|
|
36241
|
+
lastErr = e;
|
|
36242
|
+
if (i < attempts - 1)
|
|
36243
|
+
await new Promise((r) => setTimeout(r, 250 * (i + 1)));
|
|
36244
|
+
}
|
|
36245
|
+
}
|
|
36246
|
+
throw lastErr;
|
|
36247
|
+
};
|
|
36248
|
+
var fetchSfrxEthAprOnChain = async () => {
|
|
36249
|
+
const [cycleEnd, lastSync, lastRewardAmount, totalAssets] = await multicallRetryUniversal({
|
|
36250
|
+
chain: CHAIN_ID7,
|
|
36251
|
+
abi: XERC4626_ABI,
|
|
36252
|
+
calls: [
|
|
36253
|
+
{ address: SFRXETH, name: "rewardsCycleEnd", params: [] },
|
|
36254
|
+
{ address: SFRXETH, name: "lastSync", params: [] },
|
|
36255
|
+
{ address: SFRXETH, name: "lastRewardAmount", params: [] },
|
|
36256
|
+
{ address: SFRXETH, name: "totalAssets", params: [] }
|
|
36257
|
+
],
|
|
36258
|
+
allowFailure: false
|
|
36259
|
+
});
|
|
36260
|
+
const window = BigInt(cycleEnd) - BigInt(lastSync);
|
|
36261
|
+
if (window <= 0n || totalAssets === 0n) return 0;
|
|
36262
|
+
const perSecond = lastRewardAmount / window;
|
|
36263
|
+
return Number(perSecond * YEAR_SECONDS3 * ONE_E186 / totalAssets) / 1e16;
|
|
36264
|
+
};
|
|
36265
|
+
var fetchSfrxEthApr = async () => {
|
|
36266
|
+
try {
|
|
36267
|
+
const res = await robustFetchJson2(FRXETH_SUMMARY_URL);
|
|
36268
|
+
const apr = Number(res?.sfrxethApr);
|
|
36269
|
+
if (Number.isFinite(apr) && apr >= 0) return apr;
|
|
36270
|
+
throw new Error("sfrxethApr missing or non-numeric");
|
|
36271
|
+
} catch {
|
|
36272
|
+
return fetchSfrxEthAprOnChain();
|
|
36273
|
+
}
|
|
36274
|
+
};
|
|
36275
|
+
var fetchFraxSavingsAprs = async () => {
|
|
36276
|
+
const results = await multicallRetryUniversal({
|
|
36277
|
+
chain: CHAIN_ID7,
|
|
36278
|
+
abi: LINEAR_REWARDS_ABI,
|
|
36279
|
+
calls: [SFRXUSD, SFRAX].flatMap((address) => [
|
|
36280
|
+
{ address, name: "rewardsCycleData", params: [] },
|
|
36281
|
+
{ address, name: "maxDistributionPerSecondPerAsset", params: [] },
|
|
36282
|
+
{ address, name: "storedTotalAssets", params: [] }
|
|
36283
|
+
]),
|
|
36284
|
+
allowFailure: false
|
|
36285
|
+
});
|
|
36286
|
+
const aprAt = (offset) => {
|
|
36287
|
+
const [cycleEnd, lastSync, rewardCycleAmount] = results[offset];
|
|
36288
|
+
const maxPerSecondPerAsset = results[offset + 1];
|
|
36289
|
+
const storedTotalAssets = results[offset + 2];
|
|
36290
|
+
if (storedTotalAssets === 0n) return 0;
|
|
36291
|
+
const window = BigInt(cycleEnd) - BigInt(lastSync);
|
|
36292
|
+
const uncapped = window > 0n ? rewardCycleAmount / window : 0n;
|
|
36293
|
+
const cap = maxPerSecondPerAsset * storedTotalAssets / ONE_E186;
|
|
36294
|
+
const perSecond = uncapped < cap ? uncapped : cap;
|
|
36295
|
+
return Number(perSecond * YEAR_SECONDS3 * ONE_E186 / storedTotalAssets) / 1e16;
|
|
36296
|
+
};
|
|
36297
|
+
return { sfrxUsd: aprAt(0), sfrax: aprAt(3) };
|
|
36298
|
+
};
|
|
36299
|
+
var sfrxEthFetcher = {
|
|
36300
|
+
label: "SFRXETH",
|
|
36301
|
+
fetch: async () => {
|
|
36302
|
+
const apr = await fetchSfrxEthApr();
|
|
36303
|
+
return { [SFRXETH_KEY]: apr };
|
|
36304
|
+
}
|
|
36305
|
+
};
|
|
36306
|
+
var fraxSavingsFetcher = {
|
|
36307
|
+
label: "SFRXUSD_SFRAX",
|
|
36308
|
+
fetch: async () => {
|
|
36309
|
+
const { sfrxUsd, sfrax: sfrax2 } = await fetchFraxSavingsAprs();
|
|
36310
|
+
return {
|
|
36311
|
+
[SFRXUSD_KEY]: sfrxUsd,
|
|
36312
|
+
[SFRXUSD_GROUP_KEY]: sfrxUsd,
|
|
36313
|
+
[SFRAX_KEY]: sfrax2,
|
|
36314
|
+
[SFRAX_GROUP_KEY]: sfrax2
|
|
36315
|
+
};
|
|
36316
|
+
}
|
|
36317
|
+
};
|
|
36154
36318
|
|
|
36155
36319
|
// src/vaults/lst/registry.ts
|
|
36156
36320
|
var LST_REGISTRY = {
|
|
@@ -36257,6 +36421,39 @@ var LST_REGISTRY = {
|
|
|
36257
36421
|
yieldFetcher: wstethFetcher,
|
|
36258
36422
|
yieldKey: "WSTETH"
|
|
36259
36423
|
},
|
|
36424
|
+
{
|
|
36425
|
+
// Frax sfrxETH — a plain ERC-4626 over **frxETH**, not over ETH:
|
|
36426
|
+
// `asset()` is frxETH and `convertToAssets` is denominated in it,
|
|
36427
|
+
// so `underlying` is frxETH rather than the native sentinel.
|
|
36428
|
+
//
|
|
36429
|
+
// Two exits, and they behave differently. sfrxETH → frxETH is an
|
|
36430
|
+
// unconditional same-block `redeem` (the vault holds the whole
|
|
36431
|
+
// frxETH float), which is what `withdrawalMode` describes. frxETH
|
|
36432
|
+
// → ETH has **no protocol redemption at all** — the frxETHMinter
|
|
36433
|
+
// is one-way — so that leg is DEX-only (Curve frxETH/ETH). Modeled
|
|
36434
|
+
// as `instant-or-queued` because the *listed underlying* is always
|
|
36435
|
+
// instantly redeemable; see LST_DEPOSIT_INTERFACES.md.
|
|
36436
|
+
address: "0xac3e018457b222d93114458476f3e3416abbe38f",
|
|
36437
|
+
underlying: "0x5e8422345238f34275888049021821e8e08caa1f",
|
|
36438
|
+
// frxETH
|
|
36439
|
+
symbol: "sfrxETH",
|
|
36440
|
+
brand: "Frax",
|
|
36441
|
+
decimals: 18,
|
|
36442
|
+
reader: "erc4626",
|
|
36443
|
+
isErc4626: true,
|
|
36444
|
+
isRebasing: false,
|
|
36445
|
+
isMintable: true,
|
|
36446
|
+
// Native ETH mints in one call via `frxETHMinter.submitAndDeposit`
|
|
36447
|
+
// (ETH → frxETH → sfrxETH); the frxETH ERC-20 path is the plain
|
|
36448
|
+
// 4626 `deposit`. Both are declared in the calldata-sdk
|
|
36449
|
+
// `fraxSfrxEth` accept-set.
|
|
36450
|
+
isNativeUnderlying: true,
|
|
36451
|
+
mintContract: "0xac3e018457b222d93114458476f3e3416abbe38f",
|
|
36452
|
+
mintInputAsset: "0x5e8422345238f34275888049021821e8e08caa1f",
|
|
36453
|
+
withdrawalMode: "instant-or-queued",
|
|
36454
|
+
yieldFetcher: sfrxEthFetcher,
|
|
36455
|
+
yieldKey: "SFRXETH"
|
|
36456
|
+
},
|
|
36260
36457
|
{
|
|
36261
36458
|
address: "0xae78736cd615f374d3085123a210448e74fc6393",
|
|
36262
36459
|
underlying: "0x0000000000000000000000000000000000000000",
|
|
@@ -37723,65 +37920,1297 @@ var hastraPrimeFetcher = {
|
|
|
37723
37920
|
return { [HASTRA_PRIME_KEY]: Math.max(0, apr) };
|
|
37724
37921
|
}
|
|
37725
37922
|
};
|
|
37726
|
-
var CHAIN_ID7 = "4663";
|
|
37727
|
-
var VAULT2 = "0xde770c84fe66e063336b31737cfe9790f18c4087";
|
|
37728
|
-
var SPARK_SAVINGS_USDG_KEY = "SPUSDG";
|
|
37729
37923
|
var RAY3 = 10n ** 27n;
|
|
37730
|
-
var
|
|
37731
|
-
var
|
|
37732
|
-
var CHI_ABI = [
|
|
37924
|
+
var YEAR_SECONDS4 = 31536e3;
|
|
37925
|
+
var SPARK_VAULTS_V2 = [
|
|
37733
37926
|
{
|
|
37734
|
-
|
|
37927
|
+
chainId: Chain.ETHEREUM_MAINNET,
|
|
37928
|
+
address: "0x28b3a8fb53b741a8fd78c0fb9a6b2393d896a43d",
|
|
37929
|
+
symbol: "spUSDC",
|
|
37930
|
+
assetGroup: "Spark Savings USDC::SPUSDC"
|
|
37931
|
+
},
|
|
37932
|
+
{
|
|
37933
|
+
chainId: Chain.ETHEREUM_MAINNET,
|
|
37934
|
+
address: "0xe2e7a17dff93280dec073c995595155283e3c372",
|
|
37935
|
+
symbol: "spUSDT",
|
|
37936
|
+
assetGroup: "Spark Savings USDT::SPUSDT"
|
|
37937
|
+
},
|
|
37938
|
+
{
|
|
37939
|
+
chainId: Chain.ETHEREUM_MAINNET,
|
|
37940
|
+
address: "0xfe6eb3b609a7c8352a241f7f3a21cea4e9209b8f",
|
|
37941
|
+
symbol: "spETH",
|
|
37942
|
+
// NB: three unrelated tokens share the `SPETH` ticker in the list
|
|
37943
|
+
// (Spectrum ETH, Kroma Staked ETH) — only the full group is safe.
|
|
37944
|
+
assetGroup: "Spark Savings ETH::SPETH"
|
|
37945
|
+
},
|
|
37946
|
+
{
|
|
37947
|
+
chainId: Chain.ETHEREUM_MAINNET,
|
|
37948
|
+
address: "0x80128dbb9f07b93dde62a6daeadb69ed14a7d354",
|
|
37949
|
+
symbol: "spPYUSD"
|
|
37950
|
+
},
|
|
37951
|
+
{
|
|
37952
|
+
chainId: Chain.AVALANCHE_C_CHAIN,
|
|
37953
|
+
address: "0x28b3a8fb53b741a8fd78c0fb9a6b2393d896a43d",
|
|
37954
|
+
symbol: "spUSDC"
|
|
37955
|
+
},
|
|
37956
|
+
{
|
|
37957
|
+
chainId: Chain.ARBITRUM_ONE,
|
|
37958
|
+
address: "0x45d91340b3b7b96985a72b5c678f7d9e8d664b62",
|
|
37959
|
+
symbol: "spUSDT"
|
|
37960
|
+
},
|
|
37961
|
+
{
|
|
37962
|
+
chainId: Chain.X_LAYER_MAINNET,
|
|
37963
|
+
address: "0xc358c90d32375721cb3924320fdc2f8b694347ca",
|
|
37964
|
+
symbol: "spUSDT"
|
|
37965
|
+
},
|
|
37966
|
+
{
|
|
37967
|
+
chainId: Chain.ROBINHOOD_CHAIN,
|
|
37968
|
+
address: "0xde770c84fe66e063336b31737cfe9790f18c4087",
|
|
37969
|
+
symbol: "spUSDG"
|
|
37970
|
+
}
|
|
37971
|
+
];
|
|
37972
|
+
var sparkVaultV2Key = (chainId, symbol) => `SPARK_V2::${chainId}::${symbol}`;
|
|
37973
|
+
var SPARK_SAVINGS_USDG_KEY = sparkVaultV2Key(
|
|
37974
|
+
Chain.ROBINHOOD_CHAIN,
|
|
37975
|
+
"spUSDG"
|
|
37976
|
+
);
|
|
37977
|
+
var SPARK_SUSDC_KEY = "SPARK_V1::sUSDC";
|
|
37978
|
+
var SPARK_SUSDC_GROUP_KEY = "Spark USDC Vault::sUSDC";
|
|
37979
|
+
var SPARK_SUSDC_LEGACY_GROUP_KEY = "Spark USDC::SUSDC";
|
|
37980
|
+
var SKY_SSR_SOURCE = "0xa3931d71877c0e7a3148cb7eb4463524fec27fbd";
|
|
37981
|
+
var VSR_ABI = [
|
|
37982
|
+
{
|
|
37983
|
+
name: "vsr",
|
|
37735
37984
|
type: "function",
|
|
37736
37985
|
stateMutability: "view",
|
|
37737
37986
|
inputs: [],
|
|
37738
37987
|
outputs: [{ type: "uint256" }]
|
|
37739
37988
|
}
|
|
37740
37989
|
];
|
|
37741
|
-
var
|
|
37742
|
-
|
|
37743
|
-
|
|
37744
|
-
|
|
37745
|
-
|
|
37746
|
-
|
|
37747
|
-
|
|
37748
|
-
|
|
37749
|
-
|
|
37750
|
-
|
|
37751
|
-
|
|
37752
|
-
|
|
37753
|
-
|
|
37754
|
-
|
|
37755
|
-
|
|
37756
|
-
|
|
37757
|
-
|
|
37758
|
-
|
|
37759
|
-
|
|
37760
|
-
|
|
37761
|
-
|
|
37762
|
-
|
|
37763
|
-
|
|
37764
|
-
|
|
37765
|
-
|
|
37766
|
-
|
|
37767
|
-
|
|
37768
|
-
|
|
37769
|
-
|
|
37770
|
-
|
|
37771
|
-
|
|
37990
|
+
var SSR_ABI = [
|
|
37991
|
+
{
|
|
37992
|
+
name: "ssr",
|
|
37993
|
+
type: "function",
|
|
37994
|
+
stateMutability: "view",
|
|
37995
|
+
inputs: [],
|
|
37996
|
+
outputs: [{ type: "uint256" }]
|
|
37997
|
+
}
|
|
37998
|
+
];
|
|
37999
|
+
var aprFromVsr = (vsr) => {
|
|
38000
|
+
if (vsr <= RAY3) return 0;
|
|
38001
|
+
const perSecond = Number(vsr - RAY3) / 1e27;
|
|
38002
|
+
return perSecond * YEAR_SECONDS4 * 100;
|
|
38003
|
+
};
|
|
38004
|
+
var chainsOf = (vaults) => [
|
|
38005
|
+
...new Set(vaults.map((v) => v.chainId))
|
|
38006
|
+
];
|
|
38007
|
+
var fetchChain = async (chainId, vaults) => {
|
|
38008
|
+
const results = await multicallRetryUniversal({
|
|
38009
|
+
chain: chainId,
|
|
38010
|
+
abi: VSR_ABI,
|
|
38011
|
+
calls: vaults.map((v) => ({
|
|
38012
|
+
address: v.address,
|
|
38013
|
+
name: "vsr",
|
|
38014
|
+
params: []
|
|
38015
|
+
})),
|
|
38016
|
+
allowFailure: false
|
|
38017
|
+
});
|
|
38018
|
+
const out = {};
|
|
38019
|
+
vaults.forEach((v, i) => {
|
|
38020
|
+
const vsr = results[i];
|
|
38021
|
+
if (typeof vsr !== "bigint" || vsr < RAY3) return;
|
|
38022
|
+
const apr = aprFromVsr(vsr);
|
|
38023
|
+
out[sparkVaultV2Key(v.chainId, v.symbol)] = apr;
|
|
38024
|
+
if (v.assetGroup) out[v.assetGroup] = apr;
|
|
38025
|
+
});
|
|
38026
|
+
return out;
|
|
38027
|
+
};
|
|
38028
|
+
var fetchSusdcApr = async () => {
|
|
38029
|
+
const [ssr] = await multicallRetryUniversal({
|
|
38030
|
+
chain: Chain.ETHEREUM_MAINNET,
|
|
38031
|
+
abi: SSR_ABI,
|
|
38032
|
+
calls: [{ address: SKY_SSR_SOURCE, name: "ssr", params: [] }],
|
|
38033
|
+
allowFailure: false
|
|
38034
|
+
});
|
|
38035
|
+
if (typeof ssr !== "bigint" || ssr < RAY3) {
|
|
38036
|
+
throw new Error("Spark sUSDC: unreadable ssr()");
|
|
38037
|
+
}
|
|
38038
|
+
const apr = aprFromVsr(ssr);
|
|
38039
|
+
return {
|
|
38040
|
+
[SPARK_SUSDC_KEY]: apr,
|
|
38041
|
+
[SPARK_SUSDC_GROUP_KEY]: apr,
|
|
38042
|
+
[SPARK_SUSDC_LEGACY_GROUP_KEY]: apr
|
|
38043
|
+
};
|
|
38044
|
+
};
|
|
38045
|
+
var sparkSavingsFetcher = {
|
|
38046
|
+
label: "SPARK_SAVINGS",
|
|
38047
|
+
fetch: async () => {
|
|
38048
|
+
const settled = await Promise.allSettled([
|
|
38049
|
+
...chainsOf(SPARK_VAULTS_V2).map(
|
|
38050
|
+
(chainId) => fetchChain(
|
|
38051
|
+
chainId,
|
|
38052
|
+
SPARK_VAULTS_V2.filter((v) => v.chainId === chainId)
|
|
38053
|
+
)
|
|
38054
|
+
),
|
|
38055
|
+
fetchSusdcApr()
|
|
38056
|
+
]);
|
|
38057
|
+
const out = {};
|
|
38058
|
+
for (const r of settled) {
|
|
38059
|
+
if (r.status === "fulfilled") Object.assign(out, r.value);
|
|
38060
|
+
}
|
|
38061
|
+
if (Object.keys(out).length === 0) {
|
|
38062
|
+
throw new Error("Spark: no chain returned a readable rate");
|
|
38063
|
+
}
|
|
38064
|
+
return out;
|
|
38065
|
+
}
|
|
38066
|
+
};
|
|
38067
|
+
|
|
38068
|
+
// src/yields/intrinsic/fetchers/reProtocol.ts
|
|
38069
|
+
var REUSD_KEY = "RE::reUSD";
|
|
38070
|
+
var REUSDE_KEY = "RE::reUSDe";
|
|
38071
|
+
var REUSD_GROUP_KEY = "Re Protocol reUSD::REUSD";
|
|
38072
|
+
var REUSDE_GROUP_KEY = "Re Protocol reUSDe::REUSDE";
|
|
38073
|
+
var REUSD_POOL = "1c312830-ee96-40c9-b55f-b0f209ca6ebd";
|
|
38074
|
+
var REUSDE_POOL = "145810df-dc01-43e7-8033-e0aa5dceb767";
|
|
38075
|
+
var reProtocolFetcher = {
|
|
38076
|
+
label: "RE_PROTOCOL",
|
|
38077
|
+
fetch: async () => {
|
|
38078
|
+
const [reusd, reusde] = await Promise.allSettled([
|
|
38079
|
+
fetchDefiLlamaApy(REUSD_POOL),
|
|
38080
|
+
fetchDefiLlamaApy(REUSDE_POOL)
|
|
38081
|
+
]);
|
|
38082
|
+
const out = {};
|
|
38083
|
+
if (reusd.status === "fulfilled") {
|
|
38084
|
+
const apr = apyToAprPercent(reusd.value);
|
|
38085
|
+
out[REUSD_KEY] = apr;
|
|
38086
|
+
out[REUSD_GROUP_KEY] = apr;
|
|
38087
|
+
}
|
|
38088
|
+
if (reusde.status === "fulfilled") {
|
|
38089
|
+
const apr = apyToAprPercent(reusde.value);
|
|
38090
|
+
out[REUSDE_KEY] = apr;
|
|
38091
|
+
out[REUSDE_GROUP_KEY] = apr;
|
|
38092
|
+
}
|
|
38093
|
+
if (Object.keys(out).length === 0) {
|
|
38094
|
+
throw new Error("Re Protocol: DefiLlama returned no apy for either pool");
|
|
37772
38095
|
}
|
|
38096
|
+
return out;
|
|
38097
|
+
}
|
|
38098
|
+
};
|
|
38099
|
+
|
|
38100
|
+
// src/yields/intrinsic/fetchers/nativeCreditPool.ts
|
|
38101
|
+
var nativeCreditPoolYieldKey = (chainId, underlying) => `${chainId}:${underlying.toLowerCase()}`;
|
|
38102
|
+
var POOL_IDS = {
|
|
38103
|
+
// Ethereum
|
|
38104
|
+
"1": {
|
|
38105
|
+
// wNLP-USDT — 2.92 % APY at pinning (2026-07-30)
|
|
38106
|
+
"0xdac17f958d2ee523a2206206994597c13d831ec7": "ea6b472d-82a2-47fa-9c55-78907deebe13",
|
|
38107
|
+
// wNLP-USDC — 2.58 %
|
|
38108
|
+
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": "8e92a8ea-0dbd-463e-bb0b-a7f419b20db5",
|
|
38109
|
+
// wNLP-WETH — 2.21 %
|
|
38110
|
+
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": "76aa8b2e-c5cd-4ae5-8182-c74ee969d71d",
|
|
38111
|
+
// wNLP-WBTC — 0.43 %
|
|
38112
|
+
"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": "8c603090-cda6-4a17-975a-69a08a7dcf5e",
|
|
38113
|
+
// wNLP-tGLD — 0 %
|
|
38114
|
+
"0x6a547b25534234bb79ce6961a23db13de154b6f4": "eb208601-24b8-5291-8c13-1327208ef2e9",
|
|
38115
|
+
// wNLP-STONEUSD — 0 %
|
|
38116
|
+
"0x6a6e3a4396993a4ec98a6f4a654cc0819538721e": "09f09cf1-915a-4b71-82eb-5f6c54f0cc68"
|
|
38117
|
+
},
|
|
38118
|
+
// BNB Chain
|
|
38119
|
+
"56": {
|
|
38120
|
+
// wNLP-Q3B (QQQB) — 36.42 % on a $4.2 M tokenized-equity pool
|
|
38121
|
+
"0x205812cdbed920aff76c6580abd681a46d11efc7": "a5bd33df-4410-5631-a44b-bab8214b1dc2",
|
|
38122
|
+
// wNLP-USDT — 3.40 %
|
|
38123
|
+
"0x55d398326f99059ff775485246999027b3197955": "14ca42f2-1d51-4093-b5c8-74effe4c5cf3",
|
|
38124
|
+
// wNLP-WBNB — 1.17 %
|
|
38125
|
+
"0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c": "cd637956-e278-4462-a030-8d0d26a63a5c",
|
|
38126
|
+
// wNLP-P4B (PLTRB) — 0 %
|
|
38127
|
+
"0x0ca5d51d0277bd006fd9607d3e560785ebad8222": "a36f61e0-31d4-5bce-85c1-b7cfd57b2c21",
|
|
38128
|
+
// wNLP-S4B (SNDKB) — 0 %
|
|
38129
|
+
"0x3ee4df61bd4f867e349beae8bfe07bc31b4850fb": "06081a23-0157-4141-951b-eae858070214",
|
|
38130
|
+
// wNLP-T4B (TSLAB) — 0 %
|
|
38131
|
+
"0x5b1910eaad6450e50f816082aa078c41f10c292f": "44b167ce-b22c-4294-8877-4f71042bdd13",
|
|
38132
|
+
// wNLP-L4B (LITEB) — 0 %
|
|
38133
|
+
"0x64748bea17b6d19e242adf20425de2440c656142": "aa632ad9-f1e1-5b35-a76a-33006320aa1e",
|
|
38134
|
+
// wNLP-M5B (METAB) — 0 %
|
|
38135
|
+
"0x7425889fe94f9d693e8daefe88bcced6acfef4c0": "75edd0e5-82b9-5ff8-beba-4d9f07322990",
|
|
38136
|
+
// wNLP-M6B (MSFTB) — 0 %
|
|
38137
|
+
"0x80106cb3ead06659a5ad19df39d9b4733863b9b0": "8d6849a9-6bcb-550d-b916-38a0e792a097",
|
|
38138
|
+
// wNLP-C4B (CRCLB) — 0 %
|
|
38139
|
+
"0x80f3d493ebce97e343c53d29a137942416b4ffc0": "a1e52090-7faf-46e9-9e1e-174982f4cad9",
|
|
38140
|
+
// wNLP-USDC — 0 %
|
|
38141
|
+
"0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d": "0f76c834-6f24-4187-b7d5-6f3d641c3123",
|
|
38142
|
+
// wNLP-USD1 — 0 %
|
|
38143
|
+
"0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d": "28211a21-46c4-4a0d-807a-f010b304c3d0",
|
|
38144
|
+
// wNLP-M2B (MUB) — 0 %
|
|
38145
|
+
"0xcdf2f3e0fa43c47a6662a91c9e4a7c5f69762699": "1687633e-61ff-49d4-9256-5734ba06e595"
|
|
38146
|
+
},
|
|
38147
|
+
// Arbitrum
|
|
38148
|
+
"42161": {
|
|
38149
|
+
// wNLP-USDT (USD₮0) — 2.57 %
|
|
38150
|
+
"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9": "a6dc5af9-ff47-44f4-ad38-a0c6fc62278e",
|
|
38151
|
+
// wNLP-WETH — 0.88 %
|
|
38152
|
+
"0x82af49447d8a07e3bd95bd0d56f35241523fbab1": "1b7193de-1ddf-48b7-81d2-13f082a8cf3a"
|
|
38153
|
+
},
|
|
38154
|
+
// Base
|
|
38155
|
+
"8453": {
|
|
38156
|
+
// wNLP-USDC — 3.52 %
|
|
38157
|
+
"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913": "a057d9d8-99d4-4017-bb59-b96f67366178",
|
|
38158
|
+
// wNLP-WETH — 1.98 %
|
|
38159
|
+
"0x4200000000000000000000000000000000000006": "9f1d3455-050c-482c-93e0-e1271d240cec"
|
|
37773
38160
|
}
|
|
37774
|
-
throw new Error(
|
|
37775
|
-
`spUSDG APR: no Robinhood RPC returned valid historical chi (${String(lastErr)})`
|
|
37776
|
-
);
|
|
37777
38161
|
};
|
|
37778
|
-
var
|
|
37779
|
-
label:
|
|
38162
|
+
var buildChainFetcher = (chainId, pools) => ({
|
|
38163
|
+
label: `NATIVE_CREDIT_POOL_${chainId}`,
|
|
37780
38164
|
fetch: async () => {
|
|
37781
|
-
const
|
|
37782
|
-
|
|
38165
|
+
const rows = Object.entries(pools);
|
|
38166
|
+
const settled = await Promise.allSettled(
|
|
38167
|
+
rows.map(([, poolId]) => fetchDefiLlamaApy(poolId))
|
|
38168
|
+
);
|
|
38169
|
+
const out = {};
|
|
38170
|
+
settled.forEach((res, i) => {
|
|
38171
|
+
if (res.status !== "fulfilled") return;
|
|
38172
|
+
if (!Number.isFinite(res.value)) return;
|
|
38173
|
+
out[nativeCreditPoolYieldKey(chainId, rows[i][0])] = apyToAprPercent(
|
|
38174
|
+
res.value
|
|
38175
|
+
);
|
|
38176
|
+
});
|
|
38177
|
+
return out;
|
|
37783
38178
|
}
|
|
38179
|
+
});
|
|
38180
|
+
var FETCHERS = Object.fromEntries(
|
|
38181
|
+
Object.entries(POOL_IDS).map(([chainId, pools]) => [
|
|
38182
|
+
chainId,
|
|
38183
|
+
buildChainFetcher(chainId, pools)
|
|
38184
|
+
])
|
|
38185
|
+
);
|
|
38186
|
+
var nativeCreditPoolFetcher = (chainId) => FETCHERS[chainId];
|
|
38187
|
+
|
|
38188
|
+
// src/vaults/savings/registryNative.ts
|
|
38189
|
+
var NATIVE_CREDIT_VAULT = {
|
|
38190
|
+
"1": "0xe3d41d19564922c9952f692c5dd0563030f5f2ef",
|
|
38191
|
+
// Ethereum
|
|
38192
|
+
"56": "0xba8db0caf781cac69b6acf6c848ac148264cc05d",
|
|
38193
|
+
// BNB Chain
|
|
38194
|
+
"42161": "0xba1cf8a63227b46575af823beb4d83d1025eff09",
|
|
38195
|
+
// Arbitrum
|
|
38196
|
+
"8453": "0x74a4cd023e5afb88369e3f22b02440f2614a1367",
|
|
38197
|
+
// Base
|
|
38198
|
+
"143": "0xcd1d2d602c3e7394515daae96e4ffe16de71e5b4",
|
|
38199
|
+
// Monad
|
|
38200
|
+
"196": "0x4df7557734b382eb542bea6c74786d398df4cc19",
|
|
38201
|
+
// X Layer
|
|
38202
|
+
"4663": "0x57b8f68ef57af2db70bc9aac891836661ca4cb51",
|
|
38203
|
+
// Robinhood Chain
|
|
38204
|
+
"2818": "0x4df7557734b382eb542bea6c74786d398df4cc19"
|
|
38205
|
+
// Morph
|
|
38206
|
+
};
|
|
38207
|
+
var NATIVE_WNLP_ROWS = {
|
|
38208
|
+
// Ethereum — 24 pools, 7 funded, 6 with a DefiLlama APR.
|
|
38209
|
+
"1": [
|
|
38210
|
+
[
|
|
38211
|
+
"wNLP-WETH",
|
|
38212
|
+
"0x50ecabe78ae99bb1adc292a94e535feb0ed29853",
|
|
38213
|
+
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
|
38214
|
+
"0x79dcfeb6f52977ef899d92bece132e95c3d08b66",
|
|
38215
|
+
18,
|
|
38216
|
+
259200
|
|
38217
|
+
],
|
|
38218
|
+
[
|
|
38219
|
+
"wNLP-WBTC",
|
|
38220
|
+
"0x9441f31ab75f466a8afdc67a0fa65241f7600f5a",
|
|
38221
|
+
"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
|
|
38222
|
+
"0x0a1a4d7cb85b231cc9223730d2ae0582ddad228a",
|
|
38223
|
+
8,
|
|
38224
|
+
259200
|
|
38225
|
+
],
|
|
38226
|
+
[
|
|
38227
|
+
"wNLP-USDT",
|
|
38228
|
+
"0xc31daeeb822790e9ca730e7e34a9ef497fffc959",
|
|
38229
|
+
"0xdac17f958d2ee523a2206206994597c13d831ec7",
|
|
38230
|
+
"0xd1f2d929881abb26e5780d202d3c550df264791c",
|
|
38231
|
+
6,
|
|
38232
|
+
259200
|
|
38233
|
+
],
|
|
38234
|
+
[
|
|
38235
|
+
"wNLP-USDC",
|
|
38236
|
+
"0x3c339289baa2eab3802c1f0c10e025b29bdbea1a",
|
|
38237
|
+
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
38238
|
+
"0x231c3946b3a4ea1163744f236a184f796a8e18a1",
|
|
38239
|
+
6,
|
|
38240
|
+
259200
|
|
38241
|
+
],
|
|
38242
|
+
[
|
|
38243
|
+
"wNLP-STONEUSD",
|
|
38244
|
+
"0xb88791ef86d10037f7481b4e3fcbca5bb4162bfa",
|
|
38245
|
+
"0x6a6e3a4396993a4ec98a6f4a654cc0819538721e",
|
|
38246
|
+
"0x65dd5953ac28018207da0a309d0304cd53e5b734",
|
|
38247
|
+
18,
|
|
38248
|
+
28800
|
|
38249
|
+
],
|
|
38250
|
+
// 8h queue, 0bips instant fee
|
|
38251
|
+
[
|
|
38252
|
+
"wNLP-CRCLon",
|
|
38253
|
+
"0xaeb7c9122d897a224180d2ca25bc86a16d12ae92",
|
|
38254
|
+
"0x3632dea96a953c11dac2f00b4a05a32cd1063fae",
|
|
38255
|
+
"0x5b2bc2d8ad715391aff2ffa0f3f19d3a4c6686ed",
|
|
38256
|
+
18,
|
|
38257
|
+
259200
|
|
38258
|
+
],
|
|
38259
|
+
// unfunded, no APR feed
|
|
38260
|
+
[
|
|
38261
|
+
"wNLP-GOOGLon",
|
|
38262
|
+
"0x66924f881bd0cbfabded19838c5f5443867359d9",
|
|
38263
|
+
"0xba47214edd2bb43099611b208f75e4b42fdcfedc",
|
|
38264
|
+
"0x6285d06426eef9beef33ee92eab7f491f736da57",
|
|
38265
|
+
18,
|
|
38266
|
+
259200
|
|
38267
|
+
],
|
|
38268
|
+
// unfunded, no APR feed
|
|
38269
|
+
[
|
|
38270
|
+
"wNLP-INTCon",
|
|
38271
|
+
"0xb5cebfa986dd20a674be725bacebabec458abc84",
|
|
38272
|
+
"0xfda09936dbd717368de0835ba441d9e62069d36f",
|
|
38273
|
+
"0x97c156ec88085e8a057955908d056e55fc0ac589",
|
|
38274
|
+
18,
|
|
38275
|
+
259200
|
|
38276
|
+
],
|
|
38277
|
+
// unfunded, no APR feed
|
|
38278
|
+
[
|
|
38279
|
+
"wNLP-MRVLon",
|
|
38280
|
+
"0x3b1dbe5ca2d39fac168e3575d707b714a7eaa7e7",
|
|
38281
|
+
"0xf404e5f887dbd5508e16a1198fcdd5de1a4296b8",
|
|
38282
|
+
"0x7f24d9dc37483a50fcbabdb2274cf8748ae0907a",
|
|
38283
|
+
18,
|
|
38284
|
+
259200
|
|
38285
|
+
],
|
|
38286
|
+
// unfunded, no APR feed
|
|
38287
|
+
[
|
|
38288
|
+
"wNLP-MUon",
|
|
38289
|
+
"0x1e42d39df3e927c0765f258a8b7f75726350f41b",
|
|
38290
|
+
"0x050362ab1072cb2ce74d74770e22a3203ad04ee5",
|
|
38291
|
+
"0x3ee49a51a5efa599ff544fd37f197bbf15536e04",
|
|
38292
|
+
18,
|
|
38293
|
+
259200
|
|
38294
|
+
],
|
|
38295
|
+
// unfunded, no APR feed
|
|
38296
|
+
[
|
|
38297
|
+
"wNLP-NVDAon",
|
|
38298
|
+
"0xe74ee33a50a9eab6f62cb22f44b1e72e5579894c",
|
|
38299
|
+
"0x2d1f7226bd1f780af6b9a49dcc0ae00e8df4bdee",
|
|
38300
|
+
"0x3f527be145afa0e808c41ec9060513dbb82afe0c",
|
|
38301
|
+
18,
|
|
38302
|
+
259200
|
|
38303
|
+
],
|
|
38304
|
+
// unfunded, no APR feed
|
|
38305
|
+
[
|
|
38306
|
+
"wNLP-QQQon",
|
|
38307
|
+
"0xe05f1635756b6f5046e53f8e911a14794a73a4e7",
|
|
38308
|
+
"0x0e397938c1aa0680954093495b70a9f5e2249aba",
|
|
38309
|
+
"0x9d2f7e285557c65416fb2bbb268d509e9e2eb2b3",
|
|
38310
|
+
18,
|
|
38311
|
+
259200
|
|
38312
|
+
],
|
|
38313
|
+
// unfunded, no APR feed
|
|
38314
|
+
[
|
|
38315
|
+
"wNLP-SPCXon",
|
|
38316
|
+
"0xbffaaa25d2b8fe6e3e8c2c790673fa0c28c64bd4",
|
|
38317
|
+
"0xc9eef266834730340a55b6cc24621b31baf55581",
|
|
38318
|
+
"0xe66430ce224b1e65100d1b9a15381aa59e17e4b4",
|
|
38319
|
+
18,
|
|
38320
|
+
259200
|
|
38321
|
+
],
|
|
38322
|
+
// unfunded, no APR feed
|
|
38323
|
+
[
|
|
38324
|
+
"wNLP-TSLAon",
|
|
38325
|
+
"0x0183d055c77310af03dcb397efaa7e9cfb6db59b",
|
|
38326
|
+
"0xf6b1117ec07684d3958cad8beb1b302bfd21103f",
|
|
38327
|
+
"0x0cb46d89ed4ae005160b3270fafe453c43bba664",
|
|
38328
|
+
18,
|
|
38329
|
+
259200
|
|
38330
|
+
],
|
|
38331
|
+
// no APR feed
|
|
38332
|
+
[
|
|
38333
|
+
"wNLP-CRCLx",
|
|
38334
|
+
"0x2ba837484e8969da87d237effedea7badd294dd9",
|
|
38335
|
+
"0xfebded1b0986a8ee107f5ab1a1c5a813491deceb",
|
|
38336
|
+
"0x149d45c599203e06d727b7d10bb00f7035023932",
|
|
38337
|
+
18,
|
|
38338
|
+
259200
|
|
38339
|
+
],
|
|
38340
|
+
// unfunded, no APR feed
|
|
38341
|
+
[
|
|
38342
|
+
"wNLP-GOOGLx",
|
|
38343
|
+
"0x8425b76b81008d6b8f0ed468d72a2098fc13b2d2",
|
|
38344
|
+
"0xe92f673ca36c5e2efd2de7628f815f84807e803f",
|
|
38345
|
+
"0x8cbbace186e3411b61d57b897c916b912a36991a",
|
|
38346
|
+
18,
|
|
38347
|
+
259200
|
|
38348
|
+
],
|
|
38349
|
+
// unfunded, no APR feed
|
|
38350
|
+
[
|
|
38351
|
+
"wNLP-NVDAx",
|
|
38352
|
+
"0x2014e669ab74e114aa155c6b9c162bb26a5b9972",
|
|
38353
|
+
"0xc845b2894dbddd03858fd2d643b4ef725fe0849d",
|
|
38354
|
+
"0x6540c6b85ade3601f9bdf5b2d8712615dbd7730b",
|
|
38355
|
+
18,
|
|
38356
|
+
259200
|
|
38357
|
+
],
|
|
38358
|
+
// unfunded, no APR feed
|
|
38359
|
+
[
|
|
38360
|
+
"wNLP-QQQx",
|
|
38361
|
+
"0x12a81e5b0721e62d907ae5527031fb29f9eef323",
|
|
38362
|
+
"0xa753a7395cae905cd615da0b82a53e0560f250af",
|
|
38363
|
+
"0xe004a1ff7633a53530e697eec8e9de952d792abb",
|
|
38364
|
+
18,
|
|
38365
|
+
259200
|
|
38366
|
+
],
|
|
38367
|
+
// unfunded, no APR feed
|
|
38368
|
+
[
|
|
38369
|
+
"wNLP-SPCXx",
|
|
38370
|
+
"0x405a559b5c0fcb207ddd60dd2b87e9f6b5798564",
|
|
38371
|
+
"0x68fa48b1c2fe52b3d776e1953e0e782b5044ce28",
|
|
38372
|
+
"0x17beb26401a50d139e167d80e22494e17df040cd",
|
|
38373
|
+
18,
|
|
38374
|
+
259200
|
|
38375
|
+
],
|
|
38376
|
+
// unfunded, no APR feed
|
|
38377
|
+
[
|
|
38378
|
+
"wNLP-TSLAx",
|
|
38379
|
+
"0x95603e6d7753833b1ad9feba5f4e7213ba5b1d8a",
|
|
38380
|
+
"0x8ad3c73f833d3f9a523ab01476625f269aeb7cf0",
|
|
38381
|
+
"0x8f8ce39752ef02916a13422568aea6a4cc178d16",
|
|
38382
|
+
18,
|
|
38383
|
+
259200
|
|
38384
|
+
],
|
|
38385
|
+
// unfunded, no APR feed
|
|
38386
|
+
[
|
|
38387
|
+
"wNLP-PAXG",
|
|
38388
|
+
"0xa15100ee8c648dd9d01271424bface4891aa2e8f",
|
|
38389
|
+
"0x45804880de22913dafe09f4980848ece6ecbaf78",
|
|
38390
|
+
"0xc6e39e6ffc712708d229685fa7ca1abca4309377",
|
|
38391
|
+
18,
|
|
38392
|
+
259200
|
|
38393
|
+
],
|
|
38394
|
+
// unfunded, no APR feed
|
|
38395
|
+
[
|
|
38396
|
+
"wNLP-XAUt",
|
|
38397
|
+
"0x894e71b1cdf9fb8775d54dd911d60d5bd2a0e256",
|
|
38398
|
+
"0x68749665ff8d2d112fa859aa293f07a622782f38",
|
|
38399
|
+
"0x63b102f73c19e6fb0cb3545182d97371dbab62fc",
|
|
38400
|
+
6,
|
|
38401
|
+
259200
|
|
38402
|
+
],
|
|
38403
|
+
// unfunded, no APR feed
|
|
38404
|
+
[
|
|
38405
|
+
"wNLP-tGLD",
|
|
38406
|
+
"0x72bc5907f4bd6963a145cad7fe6538927062bec4",
|
|
38407
|
+
"0x6a547b25534234bb79ce6961a23db13de154b6f4",
|
|
38408
|
+
"0xecff722c6a57c097b12d5e6a77bd8ad15bae4f0f",
|
|
38409
|
+
18,
|
|
38410
|
+
259200
|
|
38411
|
+
],
|
|
38412
|
+
[
|
|
38413
|
+
"wNLP-DRAMon",
|
|
38414
|
+
"0x4aa3d1cca957ee0c21333b7465fc94feab45037a",
|
|
38415
|
+
"0xdb5a8f5b4c17f2ee2e7192a150687e48eb3c415d",
|
|
38416
|
+
"0x6b5ce3319e47f3c59a27564b5f49ae1926322633",
|
|
38417
|
+
18,
|
|
38418
|
+
259200
|
|
38419
|
+
]
|
|
38420
|
+
// unfunded, no APR feed
|
|
38421
|
+
],
|
|
38422
|
+
// BNB Chain — 49 pools, 19 funded, 13 with a DefiLlama APR.
|
|
38423
|
+
"56": [
|
|
38424
|
+
[
|
|
38425
|
+
"wNLP-WBNB",
|
|
38426
|
+
"0x85f08a266758ea0c98b15deae71ca6ee84392afa",
|
|
38427
|
+
"0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
|
|
38428
|
+
"0x9e0de0b11cd3b50370ddabf3926553c4fc3cb956",
|
|
38429
|
+
18,
|
|
38430
|
+
259200
|
|
38431
|
+
],
|
|
38432
|
+
[
|
|
38433
|
+
"wNLP-ETH",
|
|
38434
|
+
"0xfafae0cdec65cdd601ffc39f472dd4f5c7bd0721",
|
|
38435
|
+
"0x2170ed0880ac9a755fd29b2688956bd959f933f8",
|
|
38436
|
+
"0x3906f7078b25b3d4a568438da7be5c0abbe481a8",
|
|
38437
|
+
18,
|
|
38438
|
+
259200
|
|
38439
|
+
],
|
|
38440
|
+
// unfunded, no APR feed
|
|
38441
|
+
[
|
|
38442
|
+
"wNLP-USDT",
|
|
38443
|
+
"0xea5ff211ef700dccc521a1e6501c9fe1b95d8ee7",
|
|
38444
|
+
"0x55d398326f99059ff775485246999027b3197955",
|
|
38445
|
+
"0xb88791ef86d10037f7481b4e3fcbca5bb4162bfa",
|
|
38446
|
+
18,
|
|
38447
|
+
259200
|
|
38448
|
+
],
|
|
38449
|
+
[
|
|
38450
|
+
"wNLP-USDC",
|
|
38451
|
+
"0x8592ffff658310150befd83c3c5de326e9bf6f0d",
|
|
38452
|
+
"0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
|
|
38453
|
+
"0x38eda6dd1def97aaa07d5fa781395221305bc3f1",
|
|
38454
|
+
18,
|
|
38455
|
+
259200
|
|
38456
|
+
],
|
|
38457
|
+
[
|
|
38458
|
+
"wNLP-USD1",
|
|
38459
|
+
"0x2f6f303924f0fdc559c57a14cb73dd9a4d611bd8",
|
|
38460
|
+
"0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d",
|
|
38461
|
+
"0x92903262eff424cae02d6f7b7b0a486e4c7ef24b",
|
|
38462
|
+
18,
|
|
38463
|
+
28800
|
|
38464
|
+
],
|
|
38465
|
+
// 8h queue, 0bips instant fee
|
|
38466
|
+
[
|
|
38467
|
+
"wNLP-STONEUSD",
|
|
38468
|
+
"0xa1cc671f9b975d0a548c436175b99891db961934",
|
|
38469
|
+
"0x8b4e28607bdcacbf937f81f29e3dafe7bc1d7c0b",
|
|
38470
|
+
"0x5b8382383c7d5bb5341cc3dc97cb09d5b5a5e798",
|
|
38471
|
+
18,
|
|
38472
|
+
28800
|
|
38473
|
+
],
|
|
38474
|
+
// unfunded, no APR feed, 8h queue, 0bips instant fee
|
|
38475
|
+
[
|
|
38476
|
+
"wNLP-CRCLon",
|
|
38477
|
+
"0x50fbc992085b065a404fb007e344d49c558047b2",
|
|
38478
|
+
"0x992879cd8ce0c312d98648875b5a8d6d042cbf34",
|
|
38479
|
+
"0x8a3d397caddd88e725e012af97bb1af3fee3f250",
|
|
38480
|
+
18,
|
|
38481
|
+
259200
|
|
38482
|
+
],
|
|
38483
|
+
// no APR feed
|
|
38484
|
+
[
|
|
38485
|
+
"wNLP-GOOGLon",
|
|
38486
|
+
"0x14e13011121fa293d20a4d9a7037814f3c932860",
|
|
38487
|
+
"0x091fc7778e6932d4009b087b191d1ee3bac5729a",
|
|
38488
|
+
"0x0335ab1c86aaea2c442d10fec9e54261a4e0cc90",
|
|
38489
|
+
18,
|
|
38490
|
+
259200
|
|
38491
|
+
],
|
|
38492
|
+
// unfunded, no APR feed
|
|
38493
|
+
[
|
|
38494
|
+
"wNLP-INTCon",
|
|
38495
|
+
"0x6b3de4f43d20c7b29bca9850dfbf6bf94824e67e",
|
|
38496
|
+
"0xa528caaa2f96090e379d43f90834c75df54d6e74",
|
|
38497
|
+
"0x7facfe33b3a0de1ef8cdf15d8717439e9f60cc24",
|
|
38498
|
+
18,
|
|
38499
|
+
259200
|
|
38500
|
+
],
|
|
38501
|
+
// unfunded, no APR feed
|
|
38502
|
+
[
|
|
38503
|
+
"wNLP-MRVLon",
|
|
38504
|
+
"0x0d8de51813ef9b8634d3b91086884d3045a5f3e8",
|
|
38505
|
+
"0x1501ec83ffef405b4331cc4f73277a40fb0c627d",
|
|
38506
|
+
"0x2ac5c050b88a00e395a12b0d724f38a1f32050ad",
|
|
38507
|
+
18,
|
|
38508
|
+
259200
|
|
38509
|
+
],
|
|
38510
|
+
// unfunded, no APR feed
|
|
38511
|
+
[
|
|
38512
|
+
"wNLP-MUon",
|
|
38513
|
+
"0x3a18cde8a81060bdc7cace60ecbc2f01765f6008",
|
|
38514
|
+
"0x8b6acf6041a81567f012ff6a4c6d96d5818d74bf",
|
|
38515
|
+
"0x542c912b0e20895eeba104503d221683e1ceddc9",
|
|
38516
|
+
18,
|
|
38517
|
+
259200
|
|
38518
|
+
],
|
|
38519
|
+
// unfunded, no APR feed
|
|
38520
|
+
[
|
|
38521
|
+
"wNLP-NVDAon",
|
|
38522
|
+
"0x493fb39c8e37726539d3fb074c333a1eab58e36b",
|
|
38523
|
+
"0xa9ee28c80f960b889dfbd1902055218cba016f75",
|
|
38524
|
+
"0x912ce4b093fc7ce0de3cc64e9cd626706da838b7",
|
|
38525
|
+
18,
|
|
38526
|
+
259200
|
|
38527
|
+
],
|
|
38528
|
+
// unfunded, no APR feed
|
|
38529
|
+
[
|
|
38530
|
+
"wNLP-QQQon",
|
|
38531
|
+
"0x03e7dce34eed4adc4b228d00a28deba2b7941266",
|
|
38532
|
+
"0x0cde6936d305d5b34667fc46425e852efd73559a",
|
|
38533
|
+
"0x83ae22182fab9e75f7b85745693fc55100d18ca0",
|
|
38534
|
+
18,
|
|
38535
|
+
259200
|
|
38536
|
+
],
|
|
38537
|
+
// unfunded, no APR feed
|
|
38538
|
+
[
|
|
38539
|
+
"wNLP-SPCXon",
|
|
38540
|
+
"0xb810dc8f7ffc2318931b4af211592eac5e1d0190",
|
|
38541
|
+
"0xd0a58bc9d88d3ff48c0294cb7e45937d0e41a928",
|
|
38542
|
+
"0xcbd0d2627cb03da58dd8ee5bc62c964cb61d4734",
|
|
38543
|
+
18,
|
|
38544
|
+
259200
|
|
38545
|
+
],
|
|
38546
|
+
// unfunded, no APR feed
|
|
38547
|
+
[
|
|
38548
|
+
"wNLP-TSLAon",
|
|
38549
|
+
"0x73be73e7570fbcbd3d83de1e32ae5594c3963fe1",
|
|
38550
|
+
"0x2494b603319d4d9f9715c9f4496d9e0364b59d93",
|
|
38551
|
+
"0xbf9640dd79e916f386e2c89566654b6fe16b0f65",
|
|
38552
|
+
18,
|
|
38553
|
+
259200
|
|
38554
|
+
],
|
|
38555
|
+
// unfunded, no APR feed
|
|
38556
|
+
[
|
|
38557
|
+
"wNLP-DRAMon",
|
|
38558
|
+
"0x90cc94befe6c6437de7c6ded32a4dc25ebbee3d2",
|
|
38559
|
+
"0x087b5761b161429013d41ea54cd2fb6022a21564",
|
|
38560
|
+
"0x8ccb472112d0fe00ba7f8b8b9fc407e68d78f62b",
|
|
38561
|
+
18,
|
|
38562
|
+
259200
|
|
38563
|
+
],
|
|
38564
|
+
// unfunded, no APR feed
|
|
38565
|
+
[
|
|
38566
|
+
"wNLP-CRCLx",
|
|
38567
|
+
"0xddfe8d98a0b459a2a2906e02ab3dd5a5bbc303c8",
|
|
38568
|
+
"0xfebded1b0986a8ee107f5ab1a1c5a813491deceb",
|
|
38569
|
+
"0x4d722dc923510a9ec4cfb3c41c414b15cbce4df0",
|
|
38570
|
+
18,
|
|
38571
|
+
259200
|
|
38572
|
+
],
|
|
38573
|
+
// unfunded, no APR feed
|
|
38574
|
+
[
|
|
38575
|
+
"wNLP-GOOGLx",
|
|
38576
|
+
"0xa8d9eb043d4bc05e4b0dac89cd5837cf40fb3bc5",
|
|
38577
|
+
"0xe92f673ca36c5e2efd2de7628f815f84807e803f",
|
|
38578
|
+
"0x2db1571c7c7954e546c8f0870cfa16b244b7f6ff",
|
|
38579
|
+
18,
|
|
38580
|
+
259200
|
|
38581
|
+
],
|
|
38582
|
+
// unfunded, no APR feed
|
|
38583
|
+
[
|
|
38584
|
+
"wNLP-NVDAx",
|
|
38585
|
+
"0x358100ed7ecdd6c608d9d5e642e34b1a2ba152b7",
|
|
38586
|
+
"0xc845b2894dbddd03858fd2d643b4ef725fe0849d",
|
|
38587
|
+
"0xef435b99c2108d0309211d0cc05b70d202c0b5df",
|
|
38588
|
+
18,
|
|
38589
|
+
259200
|
|
38590
|
+
],
|
|
38591
|
+
// unfunded, no APR feed
|
|
38592
|
+
[
|
|
38593
|
+
"wNLP-QQQx",
|
|
38594
|
+
"0x427fb58709c47fb8794771bd2e17784c0cda845a",
|
|
38595
|
+
"0xa753a7395cae905cd615da0b82a53e0560f250af",
|
|
38596
|
+
"0x7768aa6322ab912bee159191ec3380df13f6db37",
|
|
38597
|
+
18,
|
|
38598
|
+
259200
|
|
38599
|
+
],
|
|
38600
|
+
// unfunded, no APR feed
|
|
38601
|
+
[
|
|
38602
|
+
"wNLP-SPCXx",
|
|
38603
|
+
"0x335d144f211c3f4dedb3ef1fe003cbc7dd9c24a9",
|
|
38604
|
+
"0x68fa48b1c2fe52b3d776e1953e0e782b5044ce28",
|
|
38605
|
+
"0xee880bf2050a23bb84dd4734dd7413d9d9793500",
|
|
38606
|
+
18,
|
|
38607
|
+
259200
|
|
38608
|
+
],
|
|
38609
|
+
// unfunded, no APR feed
|
|
38610
|
+
[
|
|
38611
|
+
"wNLP-TSLAx",
|
|
38612
|
+
"0xbcac5180fc867d741d06e1aafde15d65ca16d3f3",
|
|
38613
|
+
"0x8ad3c73f833d3f9a523ab01476625f269aeb7cf0",
|
|
38614
|
+
"0x826d54e624c59a01fe2917cda2429d3058880099",
|
|
38615
|
+
18,
|
|
38616
|
+
259200
|
|
38617
|
+
],
|
|
38618
|
+
// unfunded, no APR feed
|
|
38619
|
+
[
|
|
38620
|
+
"wNLP-A4B",
|
|
38621
|
+
"0xd8a25f5e864534bb2324f2eff6f5c3dd58693b8b",
|
|
38622
|
+
"0x75fd4cf6f8392e41e70391d60c90c0d5211603a1",
|
|
38623
|
+
"0xf4166b08dc7eea43101066ef8f52fb95d994d62c",
|
|
38624
|
+
18,
|
|
38625
|
+
259200
|
|
38626
|
+
],
|
|
38627
|
+
// no APR feed
|
|
38628
|
+
[
|
|
38629
|
+
"wNLP-COINB",
|
|
38630
|
+
"0x16ccbca076c24d1c174cddc8ce30389097bf8982",
|
|
38631
|
+
"0x585bde7c54abb5ccd7791f923d6c2187635f3952",
|
|
38632
|
+
"0xe7290a875d32f676b715283e1eafdfcece97110b",
|
|
38633
|
+
18,
|
|
38634
|
+
259200
|
|
38635
|
+
],
|
|
38636
|
+
// unfunded, no APR feed
|
|
38637
|
+
[
|
|
38638
|
+
"wNLP-C4B",
|
|
38639
|
+
"0xe05f1635756b6f5046e53f8e911a14794a73a4e7",
|
|
38640
|
+
"0x80f3d493ebce97e343c53d29a137942416b4ffc0",
|
|
38641
|
+
"0x9d2f7e285557c65416fb2bbb268d509e9e2eb2b3",
|
|
38642
|
+
18,
|
|
38643
|
+
259200
|
|
38644
|
+
],
|
|
38645
|
+
[
|
|
38646
|
+
"wNLP-DRAMB",
|
|
38647
|
+
"0x52207f4c347631abb40484e30c71fa66660581a7",
|
|
38648
|
+
"0x93862d63fd9fd488b1328e9b47717d75e994a84b",
|
|
38649
|
+
"0xd805265e8e1c003c65d7e2565149289459b2911f",
|
|
38650
|
+
18,
|
|
38651
|
+
259200
|
|
38652
|
+
],
|
|
38653
|
+
// unfunded, no APR feed
|
|
38654
|
+
[
|
|
38655
|
+
"wNLP-E3B",
|
|
38656
|
+
"0x3dac466a0190ce1dd7a062290ce48310206b4bca",
|
|
38657
|
+
"0xbe82f76637dba2c114c41df856c2c51e522e2cb8",
|
|
38658
|
+
"0x50b91e72b7a4a5eaf926931e4a6b3357c26235b2",
|
|
38659
|
+
18,
|
|
38660
|
+
259200
|
|
38661
|
+
],
|
|
38662
|
+
// no APR feed
|
|
38663
|
+
[
|
|
38664
|
+
"wNLP-GLWB",
|
|
38665
|
+
"0xfc6fdde35860a327be88f54bf35993f72de91a87",
|
|
38666
|
+
"0x740e075cbbea22a082b9d6679e65e82767875b6a",
|
|
38667
|
+
"0xbe38df1755e942e11241c2a39e029f9359a483e3",
|
|
38668
|
+
18,
|
|
38669
|
+
259200
|
|
38670
|
+
],
|
|
38671
|
+
// unfunded, no APR feed
|
|
38672
|
+
[
|
|
38673
|
+
"wNLP-GOOGLB",
|
|
38674
|
+
"0x38982f1604d2459f317ca9ff03808b17d4d9754b",
|
|
38675
|
+
"0x3f53de71c126bdabae20f9cd64848d317f6c3238",
|
|
38676
|
+
"0x7de2d4edc91dbef780f0c4f59828e752a9f43bac",
|
|
38677
|
+
18,
|
|
38678
|
+
259200
|
|
38679
|
+
],
|
|
38680
|
+
// unfunded, no APR feed
|
|
38681
|
+
[
|
|
38682
|
+
"wNLP-I4B",
|
|
38683
|
+
"0x737b83b17156348b84157d528e02bd9acec4163a",
|
|
38684
|
+
"0xe614e2fc6c787035ff51f452e8e826bfd32d5283",
|
|
38685
|
+
"0xe31013938457f086958c32a921a6ec17f468902d",
|
|
38686
|
+
18,
|
|
38687
|
+
259200
|
|
38688
|
+
],
|
|
38689
|
+
// no APR feed
|
|
38690
|
+
[
|
|
38691
|
+
"wNLP-L4B",
|
|
38692
|
+
"0xcf76092d538e4df7a1e8dc3eb8c21be1d462a5da",
|
|
38693
|
+
"0x64748bea17b6d19e242adf20425de2440c656142",
|
|
38694
|
+
"0xa97aea8e9d81771d4566cd1a636b58b600a1e3e8",
|
|
38695
|
+
18,
|
|
38696
|
+
259200
|
|
38697
|
+
],
|
|
38698
|
+
[
|
|
38699
|
+
"wNLP-M5B",
|
|
38700
|
+
"0x25fe9180e6c95da24b7a3fcff8bf2dbca1fb171a",
|
|
38701
|
+
"0x7425889fe94f9d693e8daefe88bcced6acfef4c0",
|
|
38702
|
+
"0x4c234c7575f762066b59670d52478c12a1d2c0ff",
|
|
38703
|
+
18,
|
|
38704
|
+
259200
|
|
38705
|
+
],
|
|
38706
|
+
[
|
|
38707
|
+
"wNLP-M6B",
|
|
38708
|
+
"0x19bbae8f804b0ea4c7c4351f722fd39efe37c2b2",
|
|
38709
|
+
"0x80106cb3ead06659a5ad19df39d9b4733863b9b0",
|
|
38710
|
+
"0x94cd73e04503537da2aa129832a0e3580d8f76a3",
|
|
38711
|
+
18,
|
|
38712
|
+
259200
|
|
38713
|
+
],
|
|
38714
|
+
[
|
|
38715
|
+
"wNLP-M4B",
|
|
38716
|
+
"0xafcd64ebfc83d57ddf5716f3814019f5543d7c46",
|
|
38717
|
+
"0xe87afb3076aeb0f9b14e368de8145ae6a2826a14",
|
|
38718
|
+
"0x8729f978393fe4a71a819c392822f80a0600f260",
|
|
38719
|
+
18,
|
|
38720
|
+
259200
|
|
38721
|
+
],
|
|
38722
|
+
// no APR feed
|
|
38723
|
+
[
|
|
38724
|
+
"wNLP-M2B",
|
|
38725
|
+
"0x66924f881bd0cbfabded19838c5f5443867359d9",
|
|
38726
|
+
"0xcdf2f3e0fa43c47a6662a91c9e4a7c5f69762699",
|
|
38727
|
+
"0x6285d06426eef9beef33ee92eab7f491f736da57",
|
|
38728
|
+
18,
|
|
38729
|
+
259200
|
|
38730
|
+
],
|
|
38731
|
+
[
|
|
38732
|
+
"wNLP-NBISB",
|
|
38733
|
+
"0x4d45a527b03551821c8d7d8974b939ed6a2824ec",
|
|
38734
|
+
"0xe256bc2a4f5297f8ba6f043f180a46300ecbcbb1",
|
|
38735
|
+
"0x1bbdd8da349ba112b51e644f10bab6598db4330b",
|
|
38736
|
+
18,
|
|
38737
|
+
259200
|
|
38738
|
+
],
|
|
38739
|
+
// unfunded, no APR feed
|
|
38740
|
+
[
|
|
38741
|
+
"wNLP-N4B",
|
|
38742
|
+
"0x2ba837484e8969da87d237effedea7badd294dd9",
|
|
38743
|
+
"0x02fca66c1d1afb4e2a7884261eb00f63598a7436",
|
|
38744
|
+
"0x149d45c599203e06d727b7d10bb00f7035023932",
|
|
38745
|
+
18,
|
|
38746
|
+
259200
|
|
38747
|
+
],
|
|
38748
|
+
// unfunded, no APR feed
|
|
38749
|
+
[
|
|
38750
|
+
"wNLP-P4B",
|
|
38751
|
+
"0x93da79355ae801a673e4d3b656a4152330646ee4",
|
|
38752
|
+
"0x0ca5d51d0277bd006fd9607d3e560785ebad8222",
|
|
38753
|
+
"0xe5ed3ae9fca303126526d4084481fd0b9f589a97",
|
|
38754
|
+
18,
|
|
38755
|
+
259200
|
|
38756
|
+
],
|
|
38757
|
+
[
|
|
38758
|
+
"wNLP-QCOMB",
|
|
38759
|
+
"0xdfa34465d1c6c044304b798fa4a147eac579b66b",
|
|
38760
|
+
"0x5f7a56e877b9130608bf8be962621011182fefe1",
|
|
38761
|
+
"0x8618171d00f972b6b40a7c20dd9f9b3d6efdb673",
|
|
38762
|
+
18,
|
|
38763
|
+
259200
|
|
38764
|
+
],
|
|
38765
|
+
// unfunded, no APR feed
|
|
38766
|
+
[
|
|
38767
|
+
"wNLP-Q3B",
|
|
38768
|
+
"0x564d609b363b902148af559c18aa1bc84bf29a5b",
|
|
38769
|
+
"0x205812cdbed920aff76c6580abd681a46d11efc7",
|
|
38770
|
+
"0xbb389a0ae36d5dc04967b1866c8f9835eca9f895",
|
|
38771
|
+
18,
|
|
38772
|
+
259200
|
|
38773
|
+
],
|
|
38774
|
+
[
|
|
38775
|
+
"wNLP-S4B",
|
|
38776
|
+
"0x2014e669ab74e114aa155c6b9c162bb26a5b9972",
|
|
38777
|
+
"0x3ee4df61bd4f867e349beae8bfe07bc31b4850fb",
|
|
38778
|
+
"0x6540c6b85ade3601f9bdf5b2d8712615dbd7730b",
|
|
38779
|
+
18,
|
|
38780
|
+
259200
|
|
38781
|
+
],
|
|
38782
|
+
[
|
|
38783
|
+
"wNLP-SOXLB",
|
|
38784
|
+
"0xcd1c23eaec3bbdef5f945f2b352b188c8a3b14d3",
|
|
38785
|
+
"0xd97d097a89113fa59b76c572e5b2eb647e8eefaf",
|
|
38786
|
+
"0x7ee63c39be8f868991830f47b167c21c0c1bf23c",
|
|
38787
|
+
18,
|
|
38788
|
+
259200
|
|
38789
|
+
],
|
|
38790
|
+
// unfunded, no APR feed
|
|
38791
|
+
[
|
|
38792
|
+
"wNLP-S5B",
|
|
38793
|
+
"0xf27760f7b431ad8caee0f4e3062e6140b14e0ebc",
|
|
38794
|
+
"0xbe9d156892e55e7154bcd3cb0fea677f9d3103e1",
|
|
38795
|
+
"0x8386c857577fced92537aea6e5112f38da46212a",
|
|
38796
|
+
18,
|
|
38797
|
+
259200
|
|
38798
|
+
],
|
|
38799
|
+
// no APR feed
|
|
38800
|
+
[
|
|
38801
|
+
"wNLP-SPYB",
|
|
38802
|
+
"0x5c53355123a51bd800934e0fa1f8eb8c9f3a848b",
|
|
38803
|
+
"0x7138b48df7d98d7e3cc221bfe7192d0a178182d8",
|
|
38804
|
+
"0x1535fa32cd0bcf66309da5209dbfca4f4c466ce1",
|
|
38805
|
+
18,
|
|
38806
|
+
259200
|
|
38807
|
+
],
|
|
38808
|
+
// unfunded, no APR feed
|
|
38809
|
+
[
|
|
38810
|
+
"wNLP-T4B",
|
|
38811
|
+
"0xaeb7c9122d897a224180d2ca25bc86a16d12ae92",
|
|
38812
|
+
"0x5b1910eaad6450e50f816082aa078c41f10c292f",
|
|
38813
|
+
"0x5b2bc2d8ad715391aff2ffa0f3f19d3a4c6686ed",
|
|
38814
|
+
18,
|
|
38815
|
+
259200
|
|
38816
|
+
],
|
|
38817
|
+
[
|
|
38818
|
+
"wNLP-WDCB",
|
|
38819
|
+
"0x3bdd26cf07bd97baa5f2a588cb6a67b83c7a60a5",
|
|
38820
|
+
"0xebe29695f8047c13d36e7a790ca8c1b239ffad1c",
|
|
38821
|
+
"0x22e87beb7307dcac4ab20b4a23080a3b7a078ff5",
|
|
38822
|
+
18,
|
|
38823
|
+
259200
|
|
38824
|
+
],
|
|
38825
|
+
// unfunded, no APR feed
|
|
38826
|
+
[
|
|
38827
|
+
"wNLP-CANP",
|
|
38828
|
+
"0x63689d5fe0d8f766fc11296c694634cd6f14ee6e",
|
|
38829
|
+
"0xdc22f0a9a60eee3697e925414bdb4580d1c35f91",
|
|
38830
|
+
"0xed2f65b5889f9889ad45b97108cc1d449ddef6ff",
|
|
38831
|
+
6,
|
|
38832
|
+
259200
|
|
38833
|
+
],
|
|
38834
|
+
// unfunded, no APR feed
|
|
38835
|
+
[
|
|
38836
|
+
"wNLP-CBRSB",
|
|
38837
|
+
"0x01246b4a5e22bba113108606451db0817a7d20f1",
|
|
38838
|
+
"0xe81c6bb0266cd68b4f17278531dd03ea1f12da4e",
|
|
38839
|
+
"0xb25861953cc45c6a0a572f892eb671e00198cfc7",
|
|
38840
|
+
18,
|
|
38841
|
+
259200
|
|
38842
|
+
],
|
|
38843
|
+
// unfunded, no APR feed
|
|
38844
|
+
[
|
|
38845
|
+
"wNLP-SK4B",
|
|
38846
|
+
"0x31ac519953055b7c356228658e6836d1c7b4fa36",
|
|
38847
|
+
"0xca750ef65f295bbecd685abf54e82caf297bdb61",
|
|
38848
|
+
"0x5e043dc607c23b94b964c8553722932b9eaf54cb",
|
|
38849
|
+
18,
|
|
38850
|
+
259200
|
|
38851
|
+
]
|
|
38852
|
+
// unfunded, no APR feed
|
|
38853
|
+
],
|
|
38854
|
+
// Arbitrum — 4 pools, 3 funded, 2 with a DefiLlama APR.
|
|
38855
|
+
"42161": [
|
|
38856
|
+
[
|
|
38857
|
+
"wNLP-WETH",
|
|
38858
|
+
"0x9db777ca39e1f1144d564cb5f593d629d2debe46",
|
|
38859
|
+
"0x82af49447d8a07e3bd95bd0d56f35241523fbab1",
|
|
38860
|
+
"0x7f1bcc60ed3c80da906fd91a2ec63ec71442430a",
|
|
38861
|
+
18,
|
|
38862
|
+
259200
|
|
38863
|
+
],
|
|
38864
|
+
[
|
|
38865
|
+
"wNLP-USDT",
|
|
38866
|
+
"0xe83ce032108f539c5a5b1c6029a89ff412d9e27f",
|
|
38867
|
+
"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",
|
|
38868
|
+
"0xa6734c9588c458f4f6bd450a62245d76303fb9a3",
|
|
38869
|
+
6,
|
|
38870
|
+
259200
|
|
38871
|
+
],
|
|
38872
|
+
[
|
|
38873
|
+
"wNLP-USDC",
|
|
38874
|
+
"0xb873363be6e4c99c1f4e6ffd6526c7c03a7a07ad",
|
|
38875
|
+
"0xaf88d065e77c8cc2239327c5edb3a432268e5831",
|
|
38876
|
+
"0x73a8df5258fb736eb1aeb198b72b73d6eb457bf8",
|
|
38877
|
+
6,
|
|
38878
|
+
259200
|
|
38879
|
+
],
|
|
38880
|
+
// no APR feed
|
|
38881
|
+
[
|
|
38882
|
+
"wNLP-WBTC",
|
|
38883
|
+
"0xd8865923465463002bc2ccc522e5a21f8d06adfa",
|
|
38884
|
+
"0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",
|
|
38885
|
+
"0xb043e07edf8cf2ddc2fa22bb087697a721af1058",
|
|
38886
|
+
8,
|
|
38887
|
+
259200
|
|
38888
|
+
]
|
|
38889
|
+
// unfunded, no APR feed
|
|
38890
|
+
],
|
|
38891
|
+
// Base — 4 pools, 3 funded, 2 with a DefiLlama APR.
|
|
38892
|
+
"8453": [
|
|
38893
|
+
[
|
|
38894
|
+
"wNLP-WETH",
|
|
38895
|
+
"0xc750fe788a828dc960cd08e8bbe1ddd3bffc03bf",
|
|
38896
|
+
"0x4200000000000000000000000000000000000006",
|
|
38897
|
+
"0x9af2f3c0cd35283e13f7087e2b34b1444b57a44c",
|
|
38898
|
+
18,
|
|
38899
|
+
259200
|
|
38900
|
+
],
|
|
38901
|
+
[
|
|
38902
|
+
"wNLP-USDC",
|
|
38903
|
+
"0xe745b0565cecb4612a41eae78319bf3ca8063e6f",
|
|
38904
|
+
"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
|
|
38905
|
+
"0xe7d6b7689bd2cea0af533dd3ad79df6968acb53e",
|
|
38906
|
+
6,
|
|
38907
|
+
259200
|
|
38908
|
+
],
|
|
38909
|
+
[
|
|
38910
|
+
"wNLP-USDT",
|
|
38911
|
+
"0x0872c63c9b1f55ea4166752ba3b890a444b59e9e",
|
|
38912
|
+
"0xfde4c96c8593536e31f229ea8f37b2ada2699bb2",
|
|
38913
|
+
"0x337ec533b568957af458e10cbfbcbf3d59c935b1",
|
|
38914
|
+
6,
|
|
38915
|
+
259200
|
|
38916
|
+
],
|
|
38917
|
+
// no APR feed
|
|
38918
|
+
[
|
|
38919
|
+
"wNLP-cbBTC",
|
|
38920
|
+
"0x90256c018d2acadda2da0b4fd61449e956fd59b6",
|
|
38921
|
+
"0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
|
|
38922
|
+
"0xa2efe8e37f247cb51c2a48692301335292ccb630",
|
|
38923
|
+
8,
|
|
38924
|
+
259200
|
|
38925
|
+
]
|
|
38926
|
+
// unfunded, no APR feed
|
|
38927
|
+
],
|
|
38928
|
+
// Monad — 6 pools, 4 funded, 0 with a DefiLlama APR.
|
|
38929
|
+
"143": [
|
|
38930
|
+
[
|
|
38931
|
+
"wNLP-WMON",
|
|
38932
|
+
"0x0166f153e26f572dfac570ccc351ba84ac7a2a72",
|
|
38933
|
+
"0x3bd359c1119da7da1d913d1c4d2b7c461115433a",
|
|
38934
|
+
"0x277ad957898ce34fd959cbfd28ab5962de613b85",
|
|
38935
|
+
18,
|
|
38936
|
+
259200
|
|
38937
|
+
],
|
|
38938
|
+
// no APR feed
|
|
38939
|
+
[
|
|
38940
|
+
"wNLP-USDC",
|
|
38941
|
+
"0xf3d44492f11a2dc234acba80a9e377ab5732b09d",
|
|
38942
|
+
"0x754704bc059f8c67012fed69bc8a327a5aafb603",
|
|
38943
|
+
"0xefadd9a8342bd4ae4d55aed2d748dc006149186a",
|
|
38944
|
+
6,
|
|
38945
|
+
259200
|
|
38946
|
+
],
|
|
38947
|
+
// no APR feed
|
|
38948
|
+
[
|
|
38949
|
+
"wNLP-USDT0",
|
|
38950
|
+
"0x3b1dbe5ca2d39fac168e3575d707b714a7eaa7e7",
|
|
38951
|
+
"0xe7cd86e13ac4309349f30b3435a9d337750fc82d",
|
|
38952
|
+
"0x4cbf9530d653d862a8ece9ed46af6c2f136e2e80",
|
|
38953
|
+
6,
|
|
38954
|
+
259200
|
|
38955
|
+
],
|
|
38956
|
+
// unfunded, no APR feed
|
|
38957
|
+
[
|
|
38958
|
+
"wNLP-WETH",
|
|
38959
|
+
"0x01135c821a87154de3f338f1978811f2648e9570",
|
|
38960
|
+
"0xee8c0e9f1bffb4eb878d8f15f368a02a35481242",
|
|
38961
|
+
"0x92e6d5cdf9c01473adf7089cc416bb934f702cfd",
|
|
38962
|
+
18,
|
|
38963
|
+
259200
|
|
38964
|
+
],
|
|
38965
|
+
// no APR feed
|
|
38966
|
+
[
|
|
38967
|
+
"wNLP-cbBTC",
|
|
38968
|
+
"0x72c486886d199984bdbcf278ba68358365b0f8b7",
|
|
38969
|
+
"0xd18b7ec58cdf4876f6afebd3ed1730e4ce10414b",
|
|
38970
|
+
"0x339808a8be84f74bdcd570c546e2efbd0e780296",
|
|
38971
|
+
8,
|
|
38972
|
+
259200
|
|
38973
|
+
],
|
|
38974
|
+
// no APR feed
|
|
38975
|
+
[
|
|
38976
|
+
"wNLP-AUSD",
|
|
38977
|
+
"0x70dd4db19f75dfea083ce50e77f9b53b55d8558a",
|
|
38978
|
+
"0x00000000efe302beaa2b3e6e1b18d08d69a9012a",
|
|
38979
|
+
"0x4ee1c93eb1ca08f566211fb18a8dc5c1c6d04939",
|
|
38980
|
+
6,
|
|
38981
|
+
28800
|
|
38982
|
+
]
|
|
38983
|
+
// unfunded, no APR feed, 8h queue
|
|
38984
|
+
],
|
|
38985
|
+
// X Layer — 9 pools, 2 funded, 0 with a DefiLlama APR.
|
|
38986
|
+
"196": [
|
|
38987
|
+
[
|
|
38988
|
+
"wNLP-WETH",
|
|
38989
|
+
"0xde540eabdb4ee3a2680394a4346dbfd76bb78e83",
|
|
38990
|
+
"0x5a77f1443d16ee5761d310e38b62f77f726bc71c",
|
|
38991
|
+
"0x79292d171531673ff97035315fda568189c3c8a5",
|
|
38992
|
+
18,
|
|
38993
|
+
259200
|
|
38994
|
+
],
|
|
38995
|
+
// no APR feed
|
|
38996
|
+
[
|
|
38997
|
+
"wNLP-USD\u20AE0",
|
|
38998
|
+
"0x0b28888e8f0755809c679e01f67591d1ed5ae9b9",
|
|
38999
|
+
"0x779ded0c9e1022225f8e0630b35a9b54be713736",
|
|
39000
|
+
"0x4af9206a885e4708ad3be482611d224239efe173",
|
|
39001
|
+
6,
|
|
39002
|
+
259200
|
|
39003
|
+
],
|
|
39004
|
+
// unfunded, no APR feed
|
|
39005
|
+
[
|
|
39006
|
+
"wNLP-USDG",
|
|
39007
|
+
"0x6285d06426eef9beef33ee92eab7f491f736da57",
|
|
39008
|
+
"0x4ae46a509f6b1d9056937ba4500cb143933d2dc8",
|
|
39009
|
+
"0x92e6d5cdf9c01473adf7089cc416bb934f702cfd",
|
|
39010
|
+
6,
|
|
39011
|
+
259200
|
|
39012
|
+
],
|
|
39013
|
+
// no APR feed
|
|
39014
|
+
[
|
|
39015
|
+
"wNLP-NVDAx",
|
|
39016
|
+
"0x7fde95f8ca333f87677e89e42d09cb4b156f8921",
|
|
39017
|
+
"0xc845b2894dbddd03858fd2d643b4ef725fe0849d",
|
|
39018
|
+
"0x06ab0323c1e3759fe3df946068825fe572db1254",
|
|
39019
|
+
18,
|
|
39020
|
+
259200
|
|
39021
|
+
],
|
|
39022
|
+
// unfunded, no APR feed
|
|
39023
|
+
[
|
|
39024
|
+
"wNLP-TSLAx",
|
|
39025
|
+
"0x78901dd5e09434c6d8c4caa651c012280324af59",
|
|
39026
|
+
"0x8ad3c73f833d3f9a523ab01476625f269aeb7cf0",
|
|
39027
|
+
"0x9dc27e2b3cc52533c159567a9e45243014ef3c0d",
|
|
39028
|
+
18,
|
|
39029
|
+
259200
|
|
39030
|
+
],
|
|
39031
|
+
// unfunded, no APR feed
|
|
39032
|
+
[
|
|
39033
|
+
"wNLP-CRCLx",
|
|
39034
|
+
"0xe1e4bcb64121fff9cfa4d4f5bc31759f035992ad",
|
|
39035
|
+
"0xfebded1b0986a8ee107f5ab1a1c5a813491deceb",
|
|
39036
|
+
"0xf3d44492f11a2dc234acba80a9e377ab5732b09d",
|
|
39037
|
+
18,
|
|
39038
|
+
259200
|
|
39039
|
+
],
|
|
39040
|
+
// unfunded, no APR feed
|
|
39041
|
+
[
|
|
39042
|
+
"wNLP-GOOGLx",
|
|
39043
|
+
"0x1d2831785db72d0809d493a4cfcc90fee47927ad",
|
|
39044
|
+
"0xe92f673ca36c5e2efd2de7628f815f84807e803f",
|
|
39045
|
+
"0xc9be6db8797f44455e578cac759cd209a1fd126d",
|
|
39046
|
+
18,
|
|
39047
|
+
259200
|
|
39048
|
+
],
|
|
39049
|
+
// unfunded, no APR feed
|
|
39050
|
+
[
|
|
39051
|
+
"wNLP-QQQx",
|
|
39052
|
+
"0x4fb706eb3e3784da4fc5aa824886f6129a65fb2e",
|
|
39053
|
+
"0xa753a7395cae905cd615da0b82a53e0560f250af",
|
|
39054
|
+
"0x4f53c62a940748dd572d5ac790d3628e9b39ca8e",
|
|
39055
|
+
18,
|
|
39056
|
+
259200
|
|
39057
|
+
],
|
|
39058
|
+
// unfunded, no APR feed
|
|
39059
|
+
[
|
|
39060
|
+
"wNLP-SPCXx",
|
|
39061
|
+
"0x6540c6b85ade3601f9bdf5b2d8712615dbd7730b",
|
|
39062
|
+
"0x68fa48b1c2fe52b3d776e1953e0e782b5044ce28",
|
|
39063
|
+
"0x277ac2538df35713f196d75058e6a661a058cd6f",
|
|
39064
|
+
18,
|
|
39065
|
+
259200
|
|
39066
|
+
]
|
|
39067
|
+
// unfunded, no APR feed
|
|
39068
|
+
],
|
|
39069
|
+
// Robinhood Chain — 10 pools, 2 funded, 0 with a DefiLlama APR.
|
|
39070
|
+
"4663": [
|
|
39071
|
+
[
|
|
39072
|
+
"wNLP-WETH",
|
|
39073
|
+
"0x7ce2c710c132f68a74dbb186644ec1eb86dfaf4e",
|
|
39074
|
+
"0x0bd7d308f8e1639fab988df18a8011f41eacad73",
|
|
39075
|
+
"0x70f167a4fed2c68d68760a4b0b6e93d919cfa935",
|
|
39076
|
+
18,
|
|
39077
|
+
259200
|
|
39078
|
+
],
|
|
39079
|
+
// no APR feed
|
|
39080
|
+
[
|
|
39081
|
+
"wNLP-USDG",
|
|
39082
|
+
"0xbb761ba477de2e887968d6c01073a477a9f9815b",
|
|
39083
|
+
"0x5fc5360d0400a0fd4f2af552add042d716f1d168",
|
|
39084
|
+
"0x855a737dbaf7143574cfe869b0849f929d8ba222",
|
|
39085
|
+
6,
|
|
39086
|
+
259200
|
|
39087
|
+
],
|
|
39088
|
+
// no APR feed
|
|
39089
|
+
[
|
|
39090
|
+
"wNLP-AMD",
|
|
39091
|
+
"0x1eda0a1353c57113ff41c32f38ca4b8d0cfec562",
|
|
39092
|
+
"0x86923f96303d656e4aa86d9d42d1e57ad2023fdc",
|
|
39093
|
+
"0x24417d45dfe01841b5f28c05c1d44abf4c321ae6",
|
|
39094
|
+
18,
|
|
39095
|
+
259200
|
|
39096
|
+
],
|
|
39097
|
+
// unfunded, no APR feed
|
|
39098
|
+
[
|
|
39099
|
+
"wNLP-CRCL",
|
|
39100
|
+
"0x965cfe674859cb223ffdc0f72722ad5619f7d90f",
|
|
39101
|
+
"0xdf0992e440dd0be65bd8439b609d6d4366bf1cb5",
|
|
39102
|
+
"0x3581a66d36e307b41b11402cf858f3f83e31d859",
|
|
39103
|
+
18,
|
|
39104
|
+
259200
|
|
39105
|
+
],
|
|
39106
|
+
// unfunded, no APR feed
|
|
39107
|
+
[
|
|
39108
|
+
"wNLP-MSFT",
|
|
39109
|
+
"0xa43ab4c0539ad04b41203fc0544d859540088613",
|
|
39110
|
+
"0xe93237c50d904957cf27e7b1133b510c669c2e74",
|
|
39111
|
+
"0xa81bfbe0994e0b49d66f2273c52d5d447ea71038",
|
|
39112
|
+
18,
|
|
39113
|
+
259200
|
|
39114
|
+
],
|
|
39115
|
+
// unfunded, no APR feed
|
|
39116
|
+
[
|
|
39117
|
+
"wNLP-MU",
|
|
39118
|
+
"0xb05b806fc5bdce389b734dce50400fa27ae54942",
|
|
39119
|
+
"0xff080c8ce2e5feadaca0da81314ae59d232d4afd",
|
|
39120
|
+
"0x48cf773961339cea5284f62bcc9a4a342be42adc",
|
|
39121
|
+
18,
|
|
39122
|
+
259200
|
|
39123
|
+
],
|
|
39124
|
+
// unfunded, no APR feed
|
|
39125
|
+
[
|
|
39126
|
+
"wNLP-NVDA",
|
|
39127
|
+
"0x001660ed89e93c7c9b348e247934fa1ebc3a2625",
|
|
39128
|
+
"0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec",
|
|
39129
|
+
"0x6422b1130526d842f74a9340a0d244c289534dd9",
|
|
39130
|
+
18,
|
|
39131
|
+
259200
|
|
39132
|
+
],
|
|
39133
|
+
// unfunded, no APR feed
|
|
39134
|
+
[
|
|
39135
|
+
"wNLP-SNDK",
|
|
39136
|
+
"0xbd254986706115081d84b7a71f3aa1f07d748a5b",
|
|
39137
|
+
"0xb90a19ff0af67f7779aff50a882a9cff42446400",
|
|
39138
|
+
"0x45ee33d6c6d399aa6fa14e25c5462bfd7f0ffea9",
|
|
39139
|
+
18,
|
|
39140
|
+
259200
|
|
39141
|
+
],
|
|
39142
|
+
// unfunded, no APR feed
|
|
39143
|
+
[
|
|
39144
|
+
"wNLP-SPCX",
|
|
39145
|
+
"0x68722297b35760ff16b873c4c89187f4e1d5dbe6",
|
|
39146
|
+
"0x4a0e65a3eccec6dbe60ae065f2e7bb85fae35eea",
|
|
39147
|
+
"0x2933c9c18ba62fe494b4ac75d32060594c9c28bc",
|
|
39148
|
+
18,
|
|
39149
|
+
259200
|
|
39150
|
+
],
|
|
39151
|
+
// unfunded, no APR feed
|
|
39152
|
+
[
|
|
39153
|
+
"wNLP-TSLA",
|
|
39154
|
+
"0xf54b421461d41203e4babdc59d1259d7de886a73",
|
|
39155
|
+
"0x322f0929c4625ed5bad873c95208d54e1c003b2d",
|
|
39156
|
+
"0x0945712145b562ec6ba6631293fb917feb6b262a",
|
|
39157
|
+
18,
|
|
39158
|
+
259200
|
|
39159
|
+
]
|
|
39160
|
+
// unfunded, no APR feed
|
|
39161
|
+
],
|
|
39162
|
+
// Morph — 2 pools, 2 funded, 0 with a DefiLlama APR.
|
|
39163
|
+
"2818": [
|
|
39164
|
+
[
|
|
39165
|
+
"wNLP-USDC",
|
|
39166
|
+
"0xcf7b55c544b579a09b54f5a4da3e1ba476c04364",
|
|
39167
|
+
"0xcfb1186f4e93d60e60a8bdd997427d1f33bc372b",
|
|
39168
|
+
"0x26ff7df6d9e1feead7786a6ba82618aafd7c8ea7",
|
|
39169
|
+
6,
|
|
39170
|
+
259200
|
|
39171
|
+
],
|
|
39172
|
+
// no APR feed
|
|
39173
|
+
[
|
|
39174
|
+
"wNLP-BGBTC",
|
|
39175
|
+
"0xca0f3fb46eb413abefa10d91aa2a6fd49eab60eb",
|
|
39176
|
+
"0x31011317764e097b28d159a8145b92bfa453f606",
|
|
39177
|
+
"0x0d8de51813ef9b8634d3b91086884d3045a5f3e8",
|
|
39178
|
+
8,
|
|
39179
|
+
259200
|
|
39180
|
+
]
|
|
39181
|
+
// no APR feed
|
|
39182
|
+
]
|
|
37784
39183
|
};
|
|
39184
|
+
var NATIVE_WNLP_ENTRIES = Object.fromEntries(
|
|
39185
|
+
Object.entries(NATIVE_WNLP_ROWS).map(([chainId, rows]) => [
|
|
39186
|
+
chainId,
|
|
39187
|
+
rows.map(
|
|
39188
|
+
([
|
|
39189
|
+
symbol,
|
|
39190
|
+
address,
|
|
39191
|
+
underlying,
|
|
39192
|
+
withdrawQueue,
|
|
39193
|
+
decimals,
|
|
39194
|
+
withdrawalWindowSeconds
|
|
39195
|
+
]) => ({
|
|
39196
|
+
address,
|
|
39197
|
+
underlying,
|
|
39198
|
+
symbol,
|
|
39199
|
+
brand: "Native",
|
|
39200
|
+
decimals,
|
|
39201
|
+
isRebasing: false,
|
|
39202
|
+
isMintable: true,
|
|
39203
|
+
withdrawalMode: "fee-or-queued",
|
|
39204
|
+
withdrawalCooldownSeconds: withdrawalWindowSeconds,
|
|
39205
|
+
reader: "native-wnlp",
|
|
39206
|
+
withdrawQueue,
|
|
39207
|
+
inventoryContract: NATIVE_CREDIT_VAULT[chainId],
|
|
39208
|
+
yieldFetcher: nativeCreditPoolFetcher(chainId),
|
|
39209
|
+
yieldKey: nativeCreditPoolYieldKey(chainId, underlying)
|
|
39210
|
+
})
|
|
39211
|
+
)
|
|
39212
|
+
])
|
|
39213
|
+
);
|
|
37785
39214
|
|
|
37786
39215
|
// src/vaults/savings/registry.ts
|
|
37787
39216
|
var stUsdGroup = {
|
|
@@ -37877,11 +39306,121 @@ var yUsdGroup = {
|
|
|
37877
39306
|
// confirmed on Basescan.
|
|
37878
39307
|
}
|
|
37879
39308
|
};
|
|
39309
|
+
var sUsdcGroup = {
|
|
39310
|
+
base: {
|
|
39311
|
+
reader: "erc4626-idle",
|
|
39312
|
+
symbol: "sUSDC",
|
|
39313
|
+
brand: "Spark",
|
|
39314
|
+
decimals: 18,
|
|
39315
|
+
underlyingDecimals: 6,
|
|
39316
|
+
isRebasing: false,
|
|
39317
|
+
isMintable: true,
|
|
39318
|
+
withdrawalMode: "instant-capped",
|
|
39319
|
+
yieldFetcher: sparkSavingsFetcher,
|
|
39320
|
+
yieldKey: SPARK_SUSDC_KEY
|
|
39321
|
+
},
|
|
39322
|
+
chains: {
|
|
39323
|
+
"1": {
|
|
39324
|
+
address: "0xbc65ad17c5c0a2a4d159fa5a503f4992c7b545fe",
|
|
39325
|
+
underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
39326
|
+
// Mainnet PSM keeps a dedicated pocket contract.
|
|
39327
|
+
inventoryContract: "0x37305b1cd40574e4c5ce33f8e8306be057fd7341"
|
|
39328
|
+
},
|
|
39329
|
+
"8453": {
|
|
39330
|
+
address: "0x3128a0f7f0ea68e7b7c9b00afa7e41045828e858",
|
|
39331
|
+
underlying: "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
|
|
39332
|
+
// L2 PSM3s custody the pocket themselves (`pocket() == psm`).
|
|
39333
|
+
inventoryContract: "0x1601843c5e9bc251a3272907010afa41fa18347e"
|
|
39334
|
+
},
|
|
39335
|
+
"42161": {
|
|
39336
|
+
address: "0x940098b108fb7d0a7e374f6eded7760787464609",
|
|
39337
|
+
underlying: "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
|
|
39338
|
+
inventoryContract: "0x2b05f8e1cacc6974fd79a673a341fe1f58d27266"
|
|
39339
|
+
},
|
|
39340
|
+
"10": {
|
|
39341
|
+
address: "0xcf9326e24ebffbef22ce1050007a43a3c0b6db55",
|
|
39342
|
+
underlying: "0x0b2c639c533813f4aa9d7837caf62653d097ff85",
|
|
39343
|
+
inventoryContract: "0xe0f9978b907853f354d79188a3defbd41978af62"
|
|
39344
|
+
},
|
|
39345
|
+
"130": {
|
|
39346
|
+
address: "0x14d9143becc348920b68d123687045db49a016c6",
|
|
39347
|
+
underlying: "0x078d782b760474a361dda0af3839290b0ef57ad6",
|
|
39348
|
+
inventoryContract: "0x7b42ed932f26509465f7ce3faf76ffce1275312f"
|
|
39349
|
+
}
|
|
39350
|
+
}
|
|
39351
|
+
};
|
|
39352
|
+
var reUsdGroup = {
|
|
39353
|
+
base: {
|
|
39354
|
+
reader: "nav-oracle",
|
|
39355
|
+
symbol: "reUSD",
|
|
39356
|
+
brand: "Re Protocol",
|
|
39357
|
+
decimals: 18,
|
|
39358
|
+
underlyingDecimals: 6,
|
|
39359
|
+
isRebasing: false,
|
|
39360
|
+
isMintable: false,
|
|
39361
|
+
withdrawalMode: "request-based",
|
|
39362
|
+
// Quarterly queue — the documented worst case, and the live case
|
|
39363
|
+
// wherever the buffer sits under 1 % of supply.
|
|
39364
|
+
withdrawalCooldownSeconds: 90 * 86400,
|
|
39365
|
+
yieldFetcher: reProtocolFetcher,
|
|
39366
|
+
yieldKey: REUSD_KEY
|
|
39367
|
+
},
|
|
39368
|
+
chains: {
|
|
39369
|
+
"1": {
|
|
39370
|
+
address: "0x5086bf358635b81d8c47c66d1c8b9e567db70c72",
|
|
39371
|
+
underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
39372
|
+
// USDC
|
|
39373
|
+
priceOracle: "0x72b5760cfbe437dd01409f44055fdfb8f8121b46",
|
|
39374
|
+
mintContract: "0x4691c475be804fa85f91c2d6d0adf03114de3093",
|
|
39375
|
+
// ICL
|
|
39376
|
+
withdrawQueue: "0x5c454f5526e41fbe917b63475cd8ca7e4631b147"
|
|
39377
|
+
},
|
|
39378
|
+
"8453": {
|
|
39379
|
+
address: "0x7d214438d0f27afccc23b3d1e1a53906ace5cfea",
|
|
39380
|
+
underlying: "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
|
|
39381
|
+
priceOracle: "0x67a3226e69a1a8316ef1807a44f077af80071926",
|
|
39382
|
+
// On Base the ICL is the token itself.
|
|
39383
|
+
mintContract: "0x7d214438d0f27afccc23b3d1e1a53906ace5cfea",
|
|
39384
|
+
withdrawQueue: "0x9ab62aebabe738ab233c447eedce88d1d0a61fe3"
|
|
39385
|
+
},
|
|
39386
|
+
"42161": {
|
|
39387
|
+
address: "0x76ce01f0ef25aa66cc5f1e546a005e4a63b25609",
|
|
39388
|
+
underlying: "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
|
|
39389
|
+
priceOracle: "0x48abcc5a711ac23d3730bf627415dc898cbc5967",
|
|
39390
|
+
mintContract: "0x802edbb1ec20548a4388abc337e4011718eb0291",
|
|
39391
|
+
withdrawQueue: "0xfd4016ea13ca8acc04a11a99702df076a4d3b852"
|
|
39392
|
+
},
|
|
39393
|
+
"43114": {
|
|
39394
|
+
address: "0x180af87b47bf272b2df59dccf2d76a6eafa625bf",
|
|
39395
|
+
underlying: "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
|
|
39396
|
+
priceOracle: "0x4c558694f16484e5c7a4a52bd210d471860ce7bc",
|
|
39397
|
+
mintContract: "0xb22a8533e6cd81598f82514a42f0b3161745fbe1",
|
|
39398
|
+
withdrawQueue: "0xe13292f97e38da0c64398de5e0bfc95180de9d23"
|
|
39399
|
+
}
|
|
39400
|
+
// NB: our token list also carries reUSD on BNB (0xba9425ec…) and Ink
|
|
39401
|
+
// (0x5bcf6b00…), but Re publishes no NAV oracle for either, so there
|
|
39402
|
+
// is no price source and they are deliberately NOT registered.
|
|
39403
|
+
}
|
|
39404
|
+
};
|
|
37880
39405
|
var MULTI_CHAIN_GROUPS = [
|
|
37881
39406
|
stUsdGroup,
|
|
37882
39407
|
stEurGroup,
|
|
37883
|
-
yUsdGroup
|
|
39408
|
+
yUsdGroup,
|
|
39409
|
+
sUsdcGroup,
|
|
39410
|
+
reUsdGroup
|
|
37884
39411
|
];
|
|
39412
|
+
var sparkV2Base = (symbol, decimals) => ({
|
|
39413
|
+
reader: "erc4626-idle",
|
|
39414
|
+
symbol,
|
|
39415
|
+
brand: "Spark",
|
|
39416
|
+
decimals,
|
|
39417
|
+
underlyingDecimals: decimals,
|
|
39418
|
+
isRebasing: false,
|
|
39419
|
+
isMintable: true,
|
|
39420
|
+
withdrawalMode: "instant-capped",
|
|
39421
|
+
yieldFetcher: sparkSavingsFetcher
|
|
39422
|
+
});
|
|
39423
|
+
var SPARK_V2_WITHDRAW_INTENTS = "0x592b7db9906e6f8924c4d74c2a0ab86ce44fdddf";
|
|
37885
39424
|
var SINGLE_CHAIN_ENTRIES = {
|
|
37886
39425
|
"1": [
|
|
37887
39426
|
{
|
|
@@ -37940,6 +39479,40 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
37940
39479
|
yieldFetcher: susdsFetcher,
|
|
37941
39480
|
yieldKey: "Staked USDS::stUSDS"
|
|
37942
39481
|
},
|
|
39482
|
+
{
|
|
39483
|
+
// Frax sfrxUSD — `LinearRewardsErc4626` over frxUSD. Plain
|
|
39484
|
+
// instant 4626 exit; the rate is set by the vault's
|
|
39485
|
+
// `maxDistributionPerSecondPerAsset` cap rather than by
|
|
39486
|
+
// utilisation (see the frax fetcher for the exact maths).
|
|
39487
|
+
address: "0xcf62f905562626cfcdd2261162a51fd02fc9c5b6",
|
|
39488
|
+
underlying: "0xcacd6fd266af91b8aed52accc382b4e165586e29",
|
|
39489
|
+
// frxUSD
|
|
39490
|
+
symbol: "sfrxUSD",
|
|
39491
|
+
brand: "Frax",
|
|
39492
|
+
decimals: 18,
|
|
39493
|
+
isRebasing: false,
|
|
39494
|
+
isMintable: true,
|
|
39495
|
+
withdrawalMode: "instant",
|
|
39496
|
+
yieldFetcher: fraxSavingsFetcher,
|
|
39497
|
+
yieldKey: "SFRXUSD"
|
|
39498
|
+
},
|
|
39499
|
+
{
|
|
39500
|
+
// Frax sFRAX — the pre-rename sibling of sfrxUSD, over legacy
|
|
39501
|
+
// FRAX. Still live and roughly 2x sfrxUSD's size, so it stays a
|
|
39502
|
+
// first-class row rather than an alias. Same contract family, so
|
|
39503
|
+
// it shares `fraxSavingsFetcher` (one multicall covers both).
|
|
39504
|
+
address: "0xa663b02cf0a4b149d2ad41910cb81e23e1c41c32",
|
|
39505
|
+
underlying: "0x853d955acef822db058eb8505911ed77f175b99e",
|
|
39506
|
+
// FRAX
|
|
39507
|
+
symbol: "sFRAX",
|
|
39508
|
+
brand: "Frax",
|
|
39509
|
+
decimals: 18,
|
|
39510
|
+
isRebasing: false,
|
|
39511
|
+
isMintable: true,
|
|
39512
|
+
withdrawalMode: "instant",
|
|
39513
|
+
yieldFetcher: fraxSavingsFetcher,
|
|
39514
|
+
yieldKey: "SFRAX"
|
|
39515
|
+
},
|
|
37943
39516
|
{
|
|
37944
39517
|
address: "0x83f20f44975d03b1b09e64809b757c47f942beea",
|
|
37945
39518
|
underlying: "0x6b175474e89094c44da98b954eedeac495271d0f",
|
|
@@ -38064,6 +39637,91 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
38064
39637
|
withdrawalMode: "request-based",
|
|
38065
39638
|
yieldFetcher: hastraPrimeFetcher,
|
|
38066
39639
|
yieldKey: "Hastra PRIME::PRIME"
|
|
39640
|
+
},
|
|
39641
|
+
{
|
|
39642
|
+
// Spark Vaults V2 — the mainnet book, and by far the largest of
|
|
39643
|
+
// the family. Only the Ethereum rows carry the intents contract as
|
|
39644
|
+
// `withdrawQueue`; the other chains have no deployment of it.
|
|
39645
|
+
...sparkV2Base("spUSDC", 6),
|
|
39646
|
+
address: "0x28b3a8fb53b741a8fd78c0fb9a6b2393d896a43d",
|
|
39647
|
+
underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
39648
|
+
// USDC
|
|
39649
|
+
withdrawQueue: SPARK_V2_WITHDRAW_INTENTS,
|
|
39650
|
+
yieldKey: sparkVaultV2Key("1", "spUSDC")
|
|
39651
|
+
},
|
|
39652
|
+
{
|
|
39653
|
+
...sparkV2Base("spUSDT", 6),
|
|
39654
|
+
address: "0xe2e7a17dff93280dec073c995595155283e3c372",
|
|
39655
|
+
underlying: "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
|
39656
|
+
// USDT
|
|
39657
|
+
withdrawQueue: SPARK_V2_WITHDRAW_INTENTS,
|
|
39658
|
+
yieldKey: sparkVaultV2Key("1", "spUSDT")
|
|
39659
|
+
},
|
|
39660
|
+
{
|
|
39661
|
+
// The only non-stable in the family — underlying is WETH, so
|
|
39662
|
+
// share and underlying are both 18-decimal.
|
|
39663
|
+
...sparkV2Base("spETH", 18),
|
|
39664
|
+
address: "0xfe6eb3b609a7c8352a241f7f3a21cea4e9209b8f",
|
|
39665
|
+
underlying: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
|
39666
|
+
// WETH
|
|
39667
|
+
withdrawQueue: SPARK_V2_WITHDRAW_INTENTS,
|
|
39668
|
+
yieldKey: sparkVaultV2Key("1", "spETH")
|
|
39669
|
+
},
|
|
39670
|
+
{
|
|
39671
|
+
// Seeded but live (~$30k) — real contract, real `vsr`, so it is
|
|
39672
|
+
// carried rather than special-cased. Expect it to grow.
|
|
39673
|
+
...sparkV2Base("spPYUSD", 6),
|
|
39674
|
+
address: "0x80128dbb9f07b93dde62a6daeadb69ed14a7d354",
|
|
39675
|
+
underlying: "0x6c3ea9036406852006290770bedfcaba0e23a0e8",
|
|
39676
|
+
// PYUSD
|
|
39677
|
+
withdrawQueue: SPARK_V2_WITHDRAW_INTENTS,
|
|
39678
|
+
yieldKey: sparkVaultV2Key("1", "spPYUSD")
|
|
39679
|
+
},
|
|
39680
|
+
{
|
|
39681
|
+
// Re Protocol reUSDe — the JUNIOR tranche of the same reinsurance
|
|
39682
|
+
// capital stack as reUSD (see `reUsdGroup` for the model, the
|
|
39683
|
+
// liquidity caveat and why `isMintable` is false). Ethereum only,
|
|
39684
|
+
// ~$18.8M, and it earns roughly double reUSD's rate precisely
|
|
39685
|
+
// because it absorbs losses first. Underlying is USDe, so unlike
|
|
39686
|
+
// reUSD the share and underlying decimals align at 18.
|
|
39687
|
+
reader: "nav-oracle",
|
|
39688
|
+
address: "0xddc0f880ff6e4e22e4b74632fbb43ce4df6ccc5a",
|
|
39689
|
+
underlying: "0x4c9edd5852cd905f086c759e8383e09bff1e68b3",
|
|
39690
|
+
// USDe
|
|
39691
|
+
priceOracle: "0x7844441f13c61cbd3d297f5d2d7fcabf17f0b843",
|
|
39692
|
+
mintContract: "0xe1886be2ba8b2496c2044a77516f63a734193082",
|
|
39693
|
+
// ICL
|
|
39694
|
+
symbol: "reUSDe",
|
|
39695
|
+
brand: "Re Protocol",
|
|
39696
|
+
decimals: 18,
|
|
39697
|
+
underlyingDecimals: 18,
|
|
39698
|
+
isRebasing: false,
|
|
39699
|
+
isMintable: false,
|
|
39700
|
+
withdrawalMode: "request-based",
|
|
39701
|
+
withdrawalCooldownSeconds: 90 * 86400,
|
|
39702
|
+
yieldFetcher: reProtocolFetcher,
|
|
39703
|
+
yieldKey: REUSDE_KEY
|
|
39704
|
+
}
|
|
39705
|
+
],
|
|
39706
|
+
"42161": [
|
|
39707
|
+
{
|
|
39708
|
+
// Same CREATE2 family as mainnet spUSDT but an independent vault
|
|
39709
|
+
// with its own `vsr`. Seeded (~$1k) at time of writing.
|
|
39710
|
+
...sparkV2Base("spUSDT", 6),
|
|
39711
|
+
address: "0x45d91340b3b7b96985a72b5c678f7d9e8d664b62",
|
|
39712
|
+
underlying: "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",
|
|
39713
|
+
// USDT
|
|
39714
|
+
yieldKey: sparkVaultV2Key("42161", "spUSDT")
|
|
39715
|
+
}
|
|
39716
|
+
],
|
|
39717
|
+
"196": [
|
|
39718
|
+
{
|
|
39719
|
+
// X Layer spUSDT — seeded only. Underlying is the bridged USDT
|
|
39720
|
+
// (`USDT0`-style) deployment, not mainnet USDT.
|
|
39721
|
+
...sparkV2Base("spUSDT", 6),
|
|
39722
|
+
address: "0xc358c90d32375721cb3924320fdc2f8b694347ca",
|
|
39723
|
+
underlying: "0x779ded0c9e1022225f8e0630b35a9b54be713736",
|
|
39724
|
+
yieldKey: sparkVaultV2Key("196", "spUSDT")
|
|
38067
39725
|
}
|
|
38068
39726
|
],
|
|
38069
39727
|
"8453": [
|
|
@@ -38108,24 +39766,28 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
38108
39766
|
withdrawalCooldownSeconds: 86400,
|
|
38109
39767
|
yieldFetcher: savbtcFetcher,
|
|
38110
39768
|
yieldKey: "Staked avBTC::savBTC"
|
|
39769
|
+
},
|
|
39770
|
+
{
|
|
39771
|
+
// Spark Vaults V2 spUSDC on Avalanche — same CREATE2 address as
|
|
39772
|
+
// the mainnet vault, independent deployment and `vsr`.
|
|
39773
|
+
...sparkV2Base("spUSDC", 6),
|
|
39774
|
+
address: "0x28b3a8fb53b741a8fd78c0fb9a6b2393d896a43d",
|
|
39775
|
+
underlying: "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
|
|
39776
|
+
// USDC
|
|
39777
|
+
yieldKey: sparkVaultV2Key("43114", "spUSDC")
|
|
38111
39778
|
}
|
|
38112
39779
|
],
|
|
38113
39780
|
"4663": [
|
|
38114
39781
|
{
|
|
38115
|
-
// Spark
|
|
38116
|
-
//
|
|
38117
|
-
//
|
|
38118
|
-
//
|
|
39782
|
+
// Spark Vaults V2 spUSDG on Robinhood Chain — the first V2 vault
|
|
39783
|
+
// we carried. Its APR now comes from `vsr()` like every other V2
|
|
39784
|
+
// vault (the old chi-delta fetcher assumed no readable rate; the
|
|
39785
|
+
// getter is `vsr`, not `ssr`), and its exit is idle-capped like
|
|
39786
|
+
// the rest of the family rather than unconditionally instant.
|
|
39787
|
+
...sparkV2Base("spUSDG", 6),
|
|
38119
39788
|
address: "0xde770c84fe66e063336b31737cfe9790f18c4087",
|
|
38120
39789
|
underlying: "0x5fc5360d0400a0fd4f2af552add042d716f1d168",
|
|
38121
39790
|
// USDG
|
|
38122
|
-
symbol: "spUSDG",
|
|
38123
|
-
brand: "Spark",
|
|
38124
|
-
decimals: 6,
|
|
38125
|
-
isRebasing: false,
|
|
38126
|
-
isMintable: true,
|
|
38127
|
-
withdrawalMode: "instant",
|
|
38128
|
-
yieldFetcher: sparkSavingsUsdgFetcher,
|
|
38129
39791
|
yieldKey: SPARK_SAVINGS_USDG_KEY
|
|
38130
39792
|
}
|
|
38131
39793
|
]
|
|
@@ -38141,6 +39803,10 @@ var SAVINGS_REGISTRY = (() => {
|
|
|
38141
39803
|
out[chainId].push({ ...group.base, ...addrs });
|
|
38142
39804
|
}
|
|
38143
39805
|
}
|
|
39806
|
+
for (const [chainId, entries] of Object.entries(NATIVE_WNLP_ENTRIES)) {
|
|
39807
|
+
if (!out[chainId]) out[chainId] = [];
|
|
39808
|
+
out[chainId].push(...entries);
|
|
39809
|
+
}
|
|
38144
39810
|
return out;
|
|
38145
39811
|
})();
|
|
38146
39812
|
var getSavingsRegistry = (chainId) => SAVINGS_REGISTRY[chainId] ?? [];
|
|
@@ -38954,13 +40620,14 @@ async function fetchMerklOpportunities(protocolId, chainId) {
|
|
|
38954
40620
|
while (true) {
|
|
38955
40621
|
const params = new URLSearchParams({
|
|
38956
40622
|
mainProtocolId: protocolId,
|
|
38957
|
-
chainId,
|
|
38958
40623
|
status: "LIVE",
|
|
38959
40624
|
items: "100",
|
|
38960
40625
|
page: String(page)
|
|
38961
40626
|
});
|
|
40627
|
+
if (chainId) params.set("chainId", chainId);
|
|
38962
40628
|
const res = await fetch(`${MERKL_API_BASE}/opportunities?${params}`);
|
|
38963
|
-
if (!res.ok)
|
|
40629
|
+
if (!res.ok)
|
|
40630
|
+
throw new Error(`Merkl API ${res.status} for chain ${chainId ?? "all"}`);
|
|
38964
40631
|
const batch = await res.json();
|
|
38965
40632
|
all.push(...batch);
|
|
38966
40633
|
if (batch.length < 100) break;
|
|
@@ -39024,37 +40691,40 @@ function createMerklRewardFetcher(config) {
|
|
|
39024
40691
|
label: `MERKL_${config.merklProtocolId.toUpperCase()}`,
|
|
39025
40692
|
fetch: async () => {
|
|
39026
40693
|
const result = {};
|
|
39027
|
-
const chainResults = await Promise.all(
|
|
40694
|
+
const chainResults = config.chainIds ? await Promise.all(
|
|
39028
40695
|
config.chainIds.map(async (chainId) => {
|
|
39029
40696
|
try {
|
|
39030
|
-
|
|
40697
|
+
return await fetchMerklOpportunities(
|
|
39031
40698
|
config.merklProtocolId,
|
|
39032
40699
|
chainId
|
|
39033
40700
|
);
|
|
39034
|
-
return { chainId, opps };
|
|
39035
40701
|
} catch (e) {
|
|
39036
40702
|
console.error(`Merkl: failed to fetch chain ${chainId}:`, e);
|
|
39037
|
-
return
|
|
40703
|
+
return [];
|
|
39038
40704
|
}
|
|
39039
40705
|
})
|
|
39040
|
-
);
|
|
39041
|
-
for (const
|
|
40706
|
+
) : [await fetchMerklOpportunities(config.merklProtocolId)];
|
|
40707
|
+
for (const opps of chainResults) {
|
|
39042
40708
|
for (const opp of opps) {
|
|
39043
40709
|
if (!opp.apr || opp.apr <= 0) continue;
|
|
39044
|
-
const
|
|
39045
|
-
|
|
39046
|
-
|
|
39047
|
-
|
|
39048
|
-
const
|
|
39049
|
-
|
|
39050
|
-
|
|
39051
|
-
|
|
39052
|
-
|
|
39053
|
-
|
|
39054
|
-
reward.
|
|
39055
|
-
|
|
39056
|
-
|
|
39057
|
-
|
|
40710
|
+
const chainId = String(opp.chainId);
|
|
40711
|
+
const resolvedRaw = resolve(opp);
|
|
40712
|
+
if (!resolvedRaw) continue;
|
|
40713
|
+
const resolutions = (Array.isArray(resolvedRaw) ? resolvedRaw : [resolvedRaw]).filter((r) => Boolean(r?.asset));
|
|
40714
|
+
for (const resolved2 of resolutions) {
|
|
40715
|
+
const bucket = resolved2.bucket ?? (opp.action === "LEND" ? "deposit" : opp.action === "BORROW" ? "borrow" : void 0);
|
|
40716
|
+
if (!bucket) continue;
|
|
40717
|
+
const lender = resolved2.lender ?? config.lenderKey;
|
|
40718
|
+
const reward = ensureReward(result, chainId, lender, resolved2.asset);
|
|
40719
|
+
const breakdowns = extractRewardBreakdowns(opp);
|
|
40720
|
+
reward.link = getMerkleUrl(opp);
|
|
40721
|
+
if (bucket === "deposit") {
|
|
40722
|
+
reward.deposit += opp.apr;
|
|
40723
|
+
reward.additionalDepositData.push(...breakdowns);
|
|
40724
|
+
} else {
|
|
40725
|
+
reward.borrow += opp.apr;
|
|
40726
|
+
reward.additionalBorrowData.push(...breakdowns);
|
|
40727
|
+
}
|
|
39058
40728
|
}
|
|
39059
40729
|
}
|
|
39060
40730
|
}
|
|
@@ -39062,81 +40732,39 @@ function createMerklRewardFetcher(config) {
|
|
|
39062
40732
|
}
|
|
39063
40733
|
};
|
|
39064
40734
|
}
|
|
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
40735
|
var aaveMerklRewardFetcher = createMerklRewardFetcher({
|
|
39092
40736
|
merklProtocolId: "aave",
|
|
39093
|
-
lenderKey: "AAVE_V3"
|
|
39094
|
-
chainIds: AAVE_V3_MERKL_CHAINS
|
|
40737
|
+
lenderKey: "AAVE_V3"
|
|
39095
40738
|
});
|
|
39096
|
-
|
|
39097
|
-
|
|
39098
|
-
|
|
39099
|
-
|
|
39100
|
-
|
|
39101
|
-
|
|
39102
|
-
|
|
39103
|
-
|
|
39104
|
-
|
|
39105
|
-
|
|
39106
|
-
|
|
39107
|
-
|
|
39108
|
-
|
|
39109
|
-
|
|
39110
|
-
|
|
39111
|
-
|
|
39112
|
-
|
|
39113
|
-
"80094"
|
|
39114
|
-
// Berachain
|
|
39115
|
-
];
|
|
40739
|
+
function parseEulerVaultFromUrl(depositUrl) {
|
|
40740
|
+
if (!depositUrl) return void 0;
|
|
40741
|
+
try {
|
|
40742
|
+
const url = new URL(depositUrl);
|
|
40743
|
+
const search = url.searchParams.get("search");
|
|
40744
|
+
if (search && /^0x[0-9a-fA-F]{40}$/.test(search))
|
|
40745
|
+
return search.toLowerCase();
|
|
40746
|
+
const positions = url.pathname.match(
|
|
40747
|
+
/\/positions\/0x[0-9a-fA-F]{40}\/(0x[0-9a-fA-F]{40})/
|
|
40748
|
+
);
|
|
40749
|
+
if (positions) return positions[1].toLowerCase();
|
|
40750
|
+
const vault = url.pathname.match(/\/vault\/(0x[0-9a-fA-F]{40})/);
|
|
40751
|
+
if (vault) return vault[1].toLowerCase();
|
|
40752
|
+
} catch {
|
|
40753
|
+
}
|
|
40754
|
+
return void 0;
|
|
40755
|
+
}
|
|
39116
40756
|
var eulerMerklRewardFetcher = createMerklRewardFetcher({
|
|
39117
40757
|
merklProtocolId: "euler",
|
|
39118
40758
|
lenderKey: "EULER_V2",
|
|
39119
|
-
chainIds: EULER_MERKL_CHAINS,
|
|
39120
40759
|
resolveAsset: (opp) => {
|
|
39121
|
-
|
|
40760
|
+
if (opp.type === "MULTILENDBORROW") {
|
|
40761
|
+
return (opp.tokens ?? []).filter((t) => !t.symbol?.endsWith("-DEBT")).map((t) => ({ asset: t.address.toLowerCase() }));
|
|
40762
|
+
}
|
|
40763
|
+
const vault = (opp.action === "BORROW" ? parseEulerVaultFromUrl(opp.depositUrl) : void 0) ?? opp.explorerAddress?.toLowerCase();
|
|
39122
40764
|
if (!vault) return void 0;
|
|
39123
40765
|
return { asset: vault };
|
|
39124
40766
|
}
|
|
39125
40767
|
});
|
|
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
40768
|
function parseMorphoUniqueKey(depositUrl) {
|
|
39141
40769
|
if (!depositUrl) return void 0;
|
|
39142
40770
|
const m = depositUrl.match(/\/market\/(0x[0-9a-fA-F]{64})/);
|
|
@@ -39145,7 +40773,6 @@ function parseMorphoUniqueKey(depositUrl) {
|
|
|
39145
40773
|
var morphoCollateralMerklRewardFetcher = createMerklRewardFetcher({
|
|
39146
40774
|
merklProtocolId: "morpho",
|
|
39147
40775
|
lenderKey: "MORPHO_BLUE",
|
|
39148
|
-
chainIds: MORPHO_MERKL_CHAINS,
|
|
39149
40776
|
resolveAsset: (opp) => {
|
|
39150
40777
|
if (opp.type !== "MORPHOCOLLATERAL") return void 0;
|
|
39151
40778
|
const uniqueKey = parseMorphoUniqueKey(opp.depositUrl);
|
|
@@ -45566,7 +47193,7 @@ var Erc4626PreviewRedeemAbi = [
|
|
|
45566
47193
|
];
|
|
45567
47194
|
|
|
45568
47195
|
// src/vaults/lst/readers/shared.ts
|
|
45569
|
-
var
|
|
47196
|
+
var ONE_E187 = 10n ** 18n;
|
|
45570
47197
|
var rescaleDecimals = (v, fromDec, toDec) => toDec >= fromDec ? v * 10n ** BigInt(toDec - fromDec) : v / 10n ** BigInt(fromDec - toDec);
|
|
45571
47198
|
var MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
45572
47199
|
var Multicall3BalanceAbi = [
|
|
@@ -45609,7 +47236,7 @@ var readerBeetsStS = (entry) => ({
|
|
|
45609
47236
|
}
|
|
45610
47237
|
const liquidity = toBigInt12(pool);
|
|
45611
47238
|
return {
|
|
45612
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47239
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
45613
47240
|
totalSupply,
|
|
45614
47241
|
exchangeRate,
|
|
45615
47242
|
liquidity
|
|
@@ -45642,7 +47269,7 @@ var readerBenqiSavax = (entry) => ({
|
|
|
45642
47269
|
{
|
|
45643
47270
|
address: entry.address,
|
|
45644
47271
|
name: "getPooledAvaxByShares",
|
|
45645
|
-
params: [
|
|
47272
|
+
params: [ONE_E187]
|
|
45646
47273
|
},
|
|
45647
47274
|
{ address: entry.address, name: "totalPooledAvax", params: [] }
|
|
45648
47275
|
],
|
|
@@ -45653,7 +47280,7 @@ var readerBenqiSavax = (entry) => ({
|
|
|
45653
47280
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
45654
47281
|
return void 0;
|
|
45655
47282
|
}
|
|
45656
|
-
const totalAssets = toBigInt12(totalPooled) ?? totalSupply * exchangeRate /
|
|
47283
|
+
const totalAssets = toBigInt12(totalPooled) ?? totalSupply * exchangeRate / ONE_E187;
|
|
45657
47284
|
return {
|
|
45658
47285
|
totalAssets,
|
|
45659
47286
|
totalSupply,
|
|
@@ -45672,7 +47299,7 @@ var readerBgtWrapper1to1 = (entry) => ({
|
|
|
45672
47299
|
return {
|
|
45673
47300
|
totalAssets: totalSupply,
|
|
45674
47301
|
totalSupply,
|
|
45675
|
-
exchangeRate:
|
|
47302
|
+
exchangeRate: ONE_E187
|
|
45676
47303
|
};
|
|
45677
47304
|
}
|
|
45678
47305
|
});
|
|
@@ -45702,7 +47329,7 @@ var readerDineroBeraEth = (entry) => ({
|
|
|
45702
47329
|
return void 0;
|
|
45703
47330
|
}
|
|
45704
47331
|
return {
|
|
45705
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47332
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
45706
47333
|
totalSupply,
|
|
45707
47334
|
exchangeRate
|
|
45708
47335
|
};
|
|
@@ -45714,7 +47341,7 @@ var readerErc4626 = (entry) => ({
|
|
|
45714
47341
|
calls: [
|
|
45715
47342
|
{ address: entry.address, name: "totalAssets", params: [] },
|
|
45716
47343
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
45717
|
-
{ address: entry.address, name: "convertToAssets", params: [
|
|
47344
|
+
{ address: entry.address, name: "convertToAssets", params: [ONE_E187] }
|
|
45718
47345
|
],
|
|
45719
47346
|
abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
|
|
45720
47347
|
parse: ([assets, supply, rate]) => {
|
|
@@ -45731,7 +47358,7 @@ var readerErc4626PreviewRedeem = (entry) => ({
|
|
|
45731
47358
|
calls: [
|
|
45732
47359
|
{ address: entry.address, name: "totalAssets", params: [] },
|
|
45733
47360
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
45734
|
-
{ address: entry.address, name: "previewRedeem", params: [
|
|
47361
|
+
{ address: entry.address, name: "previewRedeem", params: [ONE_E187] }
|
|
45735
47362
|
],
|
|
45736
47363
|
abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
|
|
45737
47364
|
parse: ([assets, supply, rate]) => {
|
|
@@ -45811,7 +47438,7 @@ var readerEtherFiWeEth = (entry) => {
|
|
|
45811
47438
|
}
|
|
45812
47439
|
}
|
|
45813
47440
|
return {
|
|
45814
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47441
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
45815
47442
|
totalSupply,
|
|
45816
47443
|
exchangeRate,
|
|
45817
47444
|
liquidity
|
|
@@ -45844,7 +47471,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
45844
47471
|
return {
|
|
45845
47472
|
totalAssets: totalSupply,
|
|
45846
47473
|
totalSupply,
|
|
45847
|
-
exchangeRate:
|
|
47474
|
+
exchangeRate: ONE_E187
|
|
45848
47475
|
};
|
|
45849
47476
|
}
|
|
45850
47477
|
};
|
|
@@ -45852,7 +47479,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
45852
47479
|
return {
|
|
45853
47480
|
calls: [
|
|
45854
47481
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
45855
|
-
{ address: stakingCore, name: "BeHYPEToHYPE", params: [
|
|
47482
|
+
{ address: stakingCore, name: "BeHYPEToHYPE", params: [ONE_E187] }
|
|
45856
47483
|
],
|
|
45857
47484
|
abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
|
|
45858
47485
|
parse: ([supply, rate]) => {
|
|
@@ -45862,7 +47489,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
45862
47489
|
return void 0;
|
|
45863
47490
|
}
|
|
45864
47491
|
return {
|
|
45865
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47492
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
45866
47493
|
totalSupply,
|
|
45867
47494
|
exchangeRate
|
|
45868
47495
|
};
|
|
@@ -45894,7 +47521,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
45894
47521
|
return {
|
|
45895
47522
|
totalAssets: totalSupply,
|
|
45896
47523
|
totalSupply,
|
|
45897
|
-
exchangeRate:
|
|
47524
|
+
exchangeRate: ONE_E187
|
|
45898
47525
|
};
|
|
45899
47526
|
}
|
|
45900
47527
|
};
|
|
@@ -45912,7 +47539,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
45912
47539
|
return void 0;
|
|
45913
47540
|
}
|
|
45914
47541
|
return {
|
|
45915
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47542
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
45916
47543
|
totalSupply,
|
|
45917
47544
|
exchangeRate
|
|
45918
47545
|
};
|
|
@@ -45944,7 +47571,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
45944
47571
|
return {
|
|
45945
47572
|
totalAssets: totalSupply,
|
|
45946
47573
|
totalSupply,
|
|
45947
|
-
exchangeRate:
|
|
47574
|
+
exchangeRate: ONE_E187
|
|
45948
47575
|
};
|
|
45949
47576
|
}
|
|
45950
47577
|
};
|
|
@@ -45952,7 +47579,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
45952
47579
|
return {
|
|
45953
47580
|
calls: [
|
|
45954
47581
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
45955
|
-
{ address: accountant, name: "kHYPEToHYPE", params: [
|
|
47582
|
+
{ address: accountant, name: "kHYPEToHYPE", params: [ONE_E187] }
|
|
45956
47583
|
],
|
|
45957
47584
|
abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
|
|
45958
47585
|
parse: ([supply, rate]) => {
|
|
@@ -45962,7 +47589,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
45962
47589
|
return void 0;
|
|
45963
47590
|
}
|
|
45964
47591
|
return {
|
|
45965
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47592
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
45966
47593
|
totalSupply,
|
|
45967
47594
|
exchangeRate
|
|
45968
47595
|
};
|
|
@@ -46002,7 +47629,7 @@ var readerLairStKaia = (entry) => ({
|
|
|
46002
47629
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
46003
47630
|
return void 0;
|
|
46004
47631
|
}
|
|
46005
|
-
const totalAssets = toBigInt12(totalStaking) ?? totalSupply * exchangeRate /
|
|
47632
|
+
const totalAssets = toBigInt12(totalStaking) ?? totalSupply * exchangeRate / ONE_E187;
|
|
46006
47633
|
return {
|
|
46007
47634
|
totalAssets,
|
|
46008
47635
|
totalSupply,
|
|
@@ -46036,7 +47663,7 @@ var readerLidoWstEth = (entry) => ({
|
|
|
46036
47663
|
return void 0;
|
|
46037
47664
|
}
|
|
46038
47665
|
return {
|
|
46039
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47666
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46040
47667
|
totalSupply,
|
|
46041
47668
|
exchangeRate
|
|
46042
47669
|
};
|
|
@@ -46074,7 +47701,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
46074
47701
|
return {
|
|
46075
47702
|
totalAssets: totalSupply,
|
|
46076
47703
|
totalSupply,
|
|
46077
|
-
exchangeRate:
|
|
47704
|
+
exchangeRate: ONE_E187
|
|
46078
47705
|
};
|
|
46079
47706
|
}
|
|
46080
47707
|
};
|
|
@@ -46082,7 +47709,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
46082
47709
|
return {
|
|
46083
47710
|
calls: [
|
|
46084
47711
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
46085
|
-
{ address: manager, name: "convertSnBnbToBnb", params: [
|
|
47712
|
+
{ address: manager, name: "convertSnBnbToBnb", params: [ONE_E187] },
|
|
46086
47713
|
{ address: manager, name: "getTotalPooledBnb", params: [] }
|
|
46087
47714
|
],
|
|
46088
47715
|
abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
|
|
@@ -46093,7 +47720,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
46093
47720
|
return void 0;
|
|
46094
47721
|
}
|
|
46095
47722
|
const pooledBnb = toBigInt12(pooled);
|
|
46096
|
-
const totalAssets = pooledBnb ?? totalSupply * exchangeRate /
|
|
47723
|
+
const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E187;
|
|
46097
47724
|
return { totalAssets, totalSupply, exchangeRate };
|
|
46098
47725
|
}
|
|
46099
47726
|
};
|
|
@@ -46123,7 +47750,7 @@ var readerMantleMEth = (entry) => {
|
|
|
46123
47750
|
return {
|
|
46124
47751
|
totalAssets: totalSupply,
|
|
46125
47752
|
totalSupply,
|
|
46126
|
-
exchangeRate:
|
|
47753
|
+
exchangeRate: ONE_E187
|
|
46127
47754
|
};
|
|
46128
47755
|
}
|
|
46129
47756
|
};
|
|
@@ -46131,7 +47758,7 @@ var readerMantleMEth = (entry) => {
|
|
|
46131
47758
|
return {
|
|
46132
47759
|
calls: [
|
|
46133
47760
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
46134
|
-
{ address: staking, name: "mETHToETH", params: [
|
|
47761
|
+
{ address: staking, name: "mETHToETH", params: [ONE_E187] }
|
|
46135
47762
|
],
|
|
46136
47763
|
abis: [TotalSupplyAbi, MantleStakingAbi],
|
|
46137
47764
|
parse: ([supply, rate]) => {
|
|
@@ -46141,7 +47768,7 @@ var readerMantleMEth = (entry) => {
|
|
|
46141
47768
|
return void 0;
|
|
46142
47769
|
}
|
|
46143
47770
|
return {
|
|
46144
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47771
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46145
47772
|
totalSupply,
|
|
46146
47773
|
exchangeRate
|
|
46147
47774
|
};
|
|
@@ -46162,7 +47789,7 @@ var readerOffChain = (entry) => {
|
|
|
46162
47789
|
return {
|
|
46163
47790
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
46164
47791
|
totalSupply,
|
|
46165
|
-
exchangeRate:
|
|
47792
|
+
exchangeRate: ONE_E187
|
|
46166
47793
|
};
|
|
46167
47794
|
}
|
|
46168
47795
|
};
|
|
@@ -46196,7 +47823,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
46196
47823
|
return {
|
|
46197
47824
|
totalAssets: totalSupply,
|
|
46198
47825
|
totalSupply,
|
|
46199
|
-
exchangeRate:
|
|
47826
|
+
exchangeRate: ONE_E187
|
|
46200
47827
|
};
|
|
46201
47828
|
}
|
|
46202
47829
|
};
|
|
@@ -46215,7 +47842,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
46215
47842
|
return {
|
|
46216
47843
|
totalAssets: totalTvl,
|
|
46217
47844
|
totalSupply,
|
|
46218
|
-
exchangeRate: totalTvl *
|
|
47845
|
+
exchangeRate: totalTvl * ONE_E187 / totalSupply
|
|
46219
47846
|
};
|
|
46220
47847
|
}
|
|
46221
47848
|
};
|
|
@@ -46271,7 +47898,7 @@ var readerRocketReth = (entry) => {
|
|
|
46271
47898
|
}
|
|
46272
47899
|
const liquidity = depositPool ? toBigInt12(slice[2]) : void 0;
|
|
46273
47900
|
return {
|
|
46274
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47901
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46275
47902
|
totalSupply,
|
|
46276
47903
|
exchangeRate,
|
|
46277
47904
|
liquidity
|
|
@@ -46313,7 +47940,7 @@ var readerStaderEthx = (entry) => {
|
|
|
46313
47940
|
return {
|
|
46314
47941
|
totalAssets: totalSupply,
|
|
46315
47942
|
totalSupply,
|
|
46316
|
-
exchangeRate:
|
|
47943
|
+
exchangeRate: ONE_E187
|
|
46317
47944
|
};
|
|
46318
47945
|
}
|
|
46319
47946
|
};
|
|
@@ -46331,7 +47958,7 @@ var readerStaderEthx = (entry) => {
|
|
|
46331
47958
|
return void 0;
|
|
46332
47959
|
}
|
|
46333
47960
|
return {
|
|
46334
|
-
totalAssets: totalSupply * exchangeRate /
|
|
47961
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46335
47962
|
totalSupply,
|
|
46336
47963
|
exchangeRate
|
|
46337
47964
|
};
|
|
@@ -46348,7 +47975,7 @@ var readerStaderMaticX = (entry) => {
|
|
|
46348
47975
|
{
|
|
46349
47976
|
address: rateAddress,
|
|
46350
47977
|
name: "convertMaticXToMatic",
|
|
46351
|
-
params: [
|
|
47978
|
+
params: [ONE_E187],
|
|
46352
47979
|
chainId: homeChainId
|
|
46353
47980
|
}
|
|
46354
47981
|
],
|
|
@@ -46363,7 +47990,7 @@ var readerStaderMaticX = (entry) => {
|
|
|
46363
47990
|
}
|
|
46364
47991
|
const isCrossChain = homeContract !== void 0;
|
|
46365
47992
|
return {
|
|
46366
|
-
totalAssets: isCrossChain ? totalSupply * amountInMatic /
|
|
47993
|
+
totalAssets: isCrossChain ? totalSupply * amountInMatic / ONE_E187 : totalPooledMatic ?? totalSupply * amountInMatic / ONE_E187,
|
|
46367
47994
|
totalSupply,
|
|
46368
47995
|
exchangeRate: amountInMatic
|
|
46369
47996
|
};
|
|
@@ -46395,7 +48022,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
46395
48022
|
return {
|
|
46396
48023
|
totalAssets: totalSupply,
|
|
46397
48024
|
totalSupply,
|
|
46398
|
-
exchangeRate:
|
|
48025
|
+
exchangeRate: ONE_E187
|
|
46399
48026
|
};
|
|
46400
48027
|
}
|
|
46401
48028
|
};
|
|
@@ -46403,7 +48030,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
46403
48030
|
return {
|
|
46404
48031
|
calls: [
|
|
46405
48032
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
46406
|
-
{ address: controller, name: "convertToAssets", params: [
|
|
48033
|
+
{ address: controller, name: "convertToAssets", params: [ONE_E187] }
|
|
46407
48034
|
],
|
|
46408
48035
|
abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
|
|
46409
48036
|
parse: ([supply, rate]) => {
|
|
@@ -46413,7 +48040,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
46413
48040
|
return void 0;
|
|
46414
48041
|
}
|
|
46415
48042
|
return {
|
|
46416
|
-
totalAssets: totalSupply * exchangeRate /
|
|
48043
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46417
48044
|
totalSupply,
|
|
46418
48045
|
exchangeRate
|
|
46419
48046
|
};
|
|
@@ -46445,7 +48072,7 @@ var readerStCelo = (entry) => {
|
|
|
46445
48072
|
return {
|
|
46446
48073
|
totalAssets: totalSupply,
|
|
46447
48074
|
totalSupply,
|
|
46448
|
-
exchangeRate:
|
|
48075
|
+
exchangeRate: ONE_E187
|
|
46449
48076
|
};
|
|
46450
48077
|
}
|
|
46451
48078
|
};
|
|
@@ -46453,7 +48080,7 @@ var readerStCelo = (entry) => {
|
|
|
46453
48080
|
return {
|
|
46454
48081
|
calls: [
|
|
46455
48082
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
46456
|
-
{ address: manager, name: "toCelo", params: [
|
|
48083
|
+
{ address: manager, name: "toCelo", params: [ONE_E187] }
|
|
46457
48084
|
],
|
|
46458
48085
|
abis: [TotalSupplyAbi, StCeloManagerAbi],
|
|
46459
48086
|
parse: ([supply, rate]) => {
|
|
@@ -46463,7 +48090,7 @@ var readerStCelo = (entry) => {
|
|
|
46463
48090
|
return void 0;
|
|
46464
48091
|
}
|
|
46465
48092
|
return {
|
|
46466
|
-
totalAssets: totalSupply * exchangeRate /
|
|
48093
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46467
48094
|
totalSupply,
|
|
46468
48095
|
exchangeRate
|
|
46469
48096
|
};
|
|
@@ -46496,7 +48123,7 @@ var readerSwellGetRate = (entry) => ({
|
|
|
46496
48123
|
return void 0;
|
|
46497
48124
|
}
|
|
46498
48125
|
return {
|
|
46499
|
-
totalAssets: totalSupply * exchangeRate /
|
|
48126
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46500
48127
|
totalSupply,
|
|
46501
48128
|
exchangeRate
|
|
46502
48129
|
};
|
|
@@ -46527,7 +48154,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
46527
48154
|
return {
|
|
46528
48155
|
totalAssets: totalSupply,
|
|
46529
48156
|
totalSupply,
|
|
46530
|
-
exchangeRate:
|
|
48157
|
+
exchangeRate: ONE_E187
|
|
46531
48158
|
};
|
|
46532
48159
|
}
|
|
46533
48160
|
};
|
|
@@ -46545,7 +48172,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
46545
48172
|
return void 0;
|
|
46546
48173
|
}
|
|
46547
48174
|
return {
|
|
46548
|
-
totalAssets: totalSupply * exchangeRate /
|
|
48175
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
46549
48176
|
totalSupply,
|
|
46550
48177
|
exchangeRate
|
|
46551
48178
|
};
|
|
@@ -46579,7 +48206,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
46579
48206
|
return {
|
|
46580
48207
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
46581
48208
|
totalSupply,
|
|
46582
|
-
exchangeRate:
|
|
48209
|
+
exchangeRate: ONE_E187
|
|
46583
48210
|
};
|
|
46584
48211
|
}
|
|
46585
48212
|
};
|
|
@@ -46598,7 +48225,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
46598
48225
|
const exchangeRate = rawRate * scale;
|
|
46599
48226
|
return {
|
|
46600
48227
|
totalAssets: rescaleDecimals(
|
|
46601
|
-
totalSupply * exchangeRate /
|
|
48228
|
+
totalSupply * exchangeRate / ONE_E187,
|
|
46602
48229
|
shareDec,
|
|
46603
48230
|
underlyingDec
|
|
46604
48231
|
),
|
|
@@ -46634,9 +48261,9 @@ var readerAnkrRatio = (entry) => ({
|
|
|
46634
48261
|
return void 0;
|
|
46635
48262
|
}
|
|
46636
48263
|
return {
|
|
46637
|
-
totalAssets: totalSupply *
|
|
48264
|
+
totalAssets: totalSupply * ONE_E187 / r,
|
|
46638
48265
|
totalSupply,
|
|
46639
|
-
exchangeRate:
|
|
48266
|
+
exchangeRate: ONE_E187 * ONE_E187 / r
|
|
46640
48267
|
};
|
|
46641
48268
|
}
|
|
46642
48269
|
});
|
|
@@ -46680,7 +48307,7 @@ var readerCoreEarnRate = (entry) => {
|
|
|
46680
48307
|
return {
|
|
46681
48308
|
totalAssets: totalSupply * r / CORE_RATE_DENOM,
|
|
46682
48309
|
totalSupply,
|
|
46683
|
-
exchangeRate: r *
|
|
48310
|
+
exchangeRate: r * ONE_E187 / CORE_RATE_DENOM
|
|
46684
48311
|
};
|
|
46685
48312
|
}
|
|
46686
48313
|
};
|
|
@@ -46702,7 +48329,7 @@ var readerCoreStakedRatio = (entry) => {
|
|
|
46702
48329
|
return {
|
|
46703
48330
|
totalAssets: totalStaked,
|
|
46704
48331
|
totalSupply,
|
|
46705
|
-
exchangeRate: totalStaked *
|
|
48332
|
+
exchangeRate: totalStaked * ONE_E187 / totalSupply
|
|
46706
48333
|
};
|
|
46707
48334
|
}
|
|
46708
48335
|
};
|
|
@@ -46733,7 +48360,7 @@ var readerStellaStDot = (entry) => ({
|
|
|
46733
48360
|
{
|
|
46734
48361
|
address: entry.address,
|
|
46735
48362
|
name: "getPooledTokenByShares",
|
|
46736
|
-
params: [
|
|
48363
|
+
params: [ONE_E187]
|
|
46737
48364
|
},
|
|
46738
48365
|
{ address: entry.address, name: "getTotalPooledToken", params: [] }
|
|
46739
48366
|
],
|
|
@@ -46744,7 +48371,7 @@ var readerStellaStDot = (entry) => ({
|
|
|
46744
48371
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
46745
48372
|
return void 0;
|
|
46746
48373
|
}
|
|
46747
|
-
const totalAssets = toBigInt12(pooled) ?? totalSupply * exchangeRate /
|
|
48374
|
+
const totalAssets = toBigInt12(pooled) ?? totalSupply * exchangeRate / ONE_E187;
|
|
46748
48375
|
return {
|
|
46749
48376
|
totalAssets,
|
|
46750
48377
|
totalSupply,
|
|
@@ -46782,7 +48409,7 @@ var readerKintsuSMon = (entry) => ({
|
|
|
46782
48409
|
const totalAssets = toBigInt12(pooled);
|
|
46783
48410
|
const totalSupply = toBigInt12(shares);
|
|
46784
48411
|
if (totalAssets === void 0 || totalSupply === void 0) return void 0;
|
|
46785
|
-
const exchangeRate = totalSupply > 0n ? totalAssets *
|
|
48412
|
+
const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E187 / totalSupply : ONE_E187;
|
|
46786
48413
|
return { totalAssets, totalSupply, exchangeRate };
|
|
46787
48414
|
}
|
|
46788
48415
|
});
|
|
@@ -47218,7 +48845,7 @@ var getLstValidators = async (chainId, shareToken) => {
|
|
|
47218
48845
|
};
|
|
47219
48846
|
|
|
47220
48847
|
// src/vaults/lst/fetchPublic.ts
|
|
47221
|
-
var
|
|
48848
|
+
var ONE_E188 = 10n ** 18n;
|
|
47222
48849
|
var ERC20_BALANCE_ABI = parseAbi([
|
|
47223
48850
|
"function balanceOf(address) view returns (uint256)"
|
|
47224
48851
|
]);
|
|
@@ -47333,8 +48960,8 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
47333
48960
|
const underlyingUnit = 10n ** BigInt(underlyingDec);
|
|
47334
48961
|
const totalAssetsFormatted = Number(state.totalAssets) / 10 ** underlyingDec;
|
|
47335
48962
|
const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
|
|
47336
|
-
const convertToAssets = state.exchangeRate * underlyingUnit /
|
|
47337
|
-
const convertToShares = state.exchangeRate > 0n ?
|
|
48963
|
+
const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E188;
|
|
48964
|
+
const convertToShares = state.exchangeRate > 0n ? ONE_E188 * shareUnit / state.exchangeRate : 0n;
|
|
47338
48965
|
let liquidityRaw;
|
|
47339
48966
|
if (state.liquidity !== void 0) {
|
|
47340
48967
|
liquidityRaw = state.liquidity;
|
|
@@ -50349,6 +51976,15 @@ var TotalSupplyAbi2 = [
|
|
|
50349
51976
|
outputs: [{ type: "uint256" }]
|
|
50350
51977
|
}
|
|
50351
51978
|
];
|
|
51979
|
+
var BalanceOfAbi = [
|
|
51980
|
+
{
|
|
51981
|
+
name: "balanceOf",
|
|
51982
|
+
type: "function",
|
|
51983
|
+
stateMutability: "view",
|
|
51984
|
+
inputs: [{ type: "address", name: "account" }],
|
|
51985
|
+
outputs: [{ type: "uint256" }]
|
|
51986
|
+
}
|
|
51987
|
+
];
|
|
50352
51988
|
var Erc4626ReadAbi2 = [
|
|
50353
51989
|
{
|
|
50354
51990
|
name: "totalAssets",
|
|
@@ -50365,9 +52001,24 @@ var Erc4626ReadAbi2 = [
|
|
|
50365
52001
|
outputs: [{ type: "uint256", name: "assets" }]
|
|
50366
52002
|
}
|
|
50367
52003
|
];
|
|
52004
|
+
var NavOracleReadAbi = [
|
|
52005
|
+
{
|
|
52006
|
+
name: "latestRoundData",
|
|
52007
|
+
type: "function",
|
|
52008
|
+
stateMutability: "view",
|
|
52009
|
+
inputs: [],
|
|
52010
|
+
outputs: [
|
|
52011
|
+
{ name: "roundId", type: "uint80" },
|
|
52012
|
+
{ name: "answer", type: "int256" },
|
|
52013
|
+
{ name: "startedAt", type: "uint256" },
|
|
52014
|
+
{ name: "updatedAt", type: "uint256" },
|
|
52015
|
+
{ name: "answeredInRound", type: "uint80" }
|
|
52016
|
+
]
|
|
52017
|
+
}
|
|
52018
|
+
];
|
|
50368
52019
|
|
|
50369
52020
|
// src/vaults/savings/readers/shared.ts
|
|
50370
|
-
var
|
|
52021
|
+
var ONE_E189 = 10n ** 18n;
|
|
50371
52022
|
var toBigInt14 = (v) => {
|
|
50372
52023
|
if (v === void 0 || v === null) return void 0;
|
|
50373
52024
|
if (typeof v === "bigint") return v;
|
|
@@ -50408,20 +52059,221 @@ var readerErc46262 = (entry) => {
|
|
|
50408
52059
|
return {
|
|
50409
52060
|
totalAssets,
|
|
50410
52061
|
totalSupply,
|
|
50411
|
-
exchangeRate: convertToAssetsRaw *
|
|
52062
|
+
exchangeRate: convertToAssetsRaw * ONE_E189 / underlyingUnit
|
|
52063
|
+
};
|
|
52064
|
+
}
|
|
52065
|
+
};
|
|
52066
|
+
};
|
|
52067
|
+
|
|
52068
|
+
// src/vaults/savings/abis/native.ts
|
|
52069
|
+
var NativeWnlpReadAbi = [
|
|
52070
|
+
{
|
|
52071
|
+
// 1e18-scaled underlying-per-share, independent of token decimals:
|
|
52072
|
+
// `getNlpByWnlp(1e18) / 1e18` is the exchange rate (per Native docs).
|
|
52073
|
+
name: "getNlpByWnlp",
|
|
52074
|
+
type: "function",
|
|
52075
|
+
stateMutability: "view",
|
|
52076
|
+
inputs: [{ type: "uint256", name: "wnlpAmount" }],
|
|
52077
|
+
outputs: [{ type: "uint256" }]
|
|
52078
|
+
},
|
|
52079
|
+
{
|
|
52080
|
+
/** Instant-redeem haircut in basis points (0.1 %–2 %, default 1 %). */
|
|
52081
|
+
name: "instantRedeemFeeBips",
|
|
52082
|
+
type: "function",
|
|
52083
|
+
stateMutability: "view",
|
|
52084
|
+
inputs: [],
|
|
52085
|
+
outputs: [{ type: "uint256" }]
|
|
52086
|
+
},
|
|
52087
|
+
{
|
|
52088
|
+
/** Some assets disable the instant leg entirely — queue only. */
|
|
52089
|
+
name: "instantRedeemEnabled",
|
|
52090
|
+
type: "function",
|
|
52091
|
+
stateMutability: "view",
|
|
52092
|
+
inputs: [],
|
|
52093
|
+
outputs: [{ type: "bool" }]
|
|
52094
|
+
},
|
|
52095
|
+
{
|
|
52096
|
+
/** Per-wNLP WithdrawQueue contract (the delayed-redeem leg). */
|
|
52097
|
+
name: "withdrawQueue",
|
|
52098
|
+
type: "function",
|
|
52099
|
+
stateMutability: "view",
|
|
52100
|
+
inputs: [],
|
|
52101
|
+
outputs: [{ type: "address" }]
|
|
52102
|
+
},
|
|
52103
|
+
{
|
|
52104
|
+
/** The rebasing NTLP pool share this wNLP wraps. */
|
|
52105
|
+
name: "nlp",
|
|
52106
|
+
type: "function",
|
|
52107
|
+
stateMutability: "view",
|
|
52108
|
+
inputs: [],
|
|
52109
|
+
outputs: [{ type: "address" }]
|
|
52110
|
+
},
|
|
52111
|
+
{
|
|
52112
|
+
name: "underlying",
|
|
52113
|
+
type: "function",
|
|
52114
|
+
stateMutability: "view",
|
|
52115
|
+
inputs: [],
|
|
52116
|
+
outputs: [{ type: "address" }]
|
|
52117
|
+
}
|
|
52118
|
+
];
|
|
52119
|
+
var NativeWithdrawQueueReadAbi = [
|
|
52120
|
+
{
|
|
52121
|
+
/** Seconds between `requestWithdrawal` and `claimWithdrawal`
|
|
52122
|
+
* (1–8 days depending on the asset; 3 days is the common value). */
|
|
52123
|
+
name: "withdrawalWindow",
|
|
52124
|
+
type: "function",
|
|
52125
|
+
stateMutability: "view",
|
|
52126
|
+
inputs: [],
|
|
52127
|
+
outputs: [{ type: "uint256" }]
|
|
52128
|
+
}
|
|
52129
|
+
];
|
|
52130
|
+
|
|
52131
|
+
// src/vaults/savings/readers/erc4626Idle.ts
|
|
52132
|
+
var readerErc4626Idle = (entry) => {
|
|
52133
|
+
const shareUnit = 10n ** BigInt(entry.decimals);
|
|
52134
|
+
const underlyingUnit = 10n ** BigInt(entry.underlyingDecimals ?? entry.decimals);
|
|
52135
|
+
const inventory = entry.inventoryContract ?? entry.address;
|
|
52136
|
+
return {
|
|
52137
|
+
calls: [
|
|
52138
|
+
{ address: entry.address, name: "totalAssets", params: [] },
|
|
52139
|
+
{ address: entry.address, name: "totalSupply", params: [] },
|
|
52140
|
+
{
|
|
52141
|
+
address: entry.address,
|
|
52142
|
+
name: "convertToAssets",
|
|
52143
|
+
params: [shareUnit]
|
|
52144
|
+
},
|
|
52145
|
+
{ address: entry.underlying, name: "balanceOf", params: [inventory] }
|
|
52146
|
+
],
|
|
52147
|
+
abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2, BalanceOfAbi],
|
|
52148
|
+
parse: ([assets, supply, rate, inventoryBalance]) => {
|
|
52149
|
+
const totalAssets = toBigInt14(assets);
|
|
52150
|
+
const totalSupply = toBigInt14(supply);
|
|
52151
|
+
const convertToAssetsRaw = toBigInt14(rate);
|
|
52152
|
+
if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
|
|
52153
|
+
return void 0;
|
|
52154
|
+
}
|
|
52155
|
+
const capacity = toBigInt14(inventoryBalance);
|
|
52156
|
+
return {
|
|
52157
|
+
totalAssets,
|
|
52158
|
+
totalSupply,
|
|
52159
|
+
exchangeRate: convertToAssetsRaw * ONE_E189 / underlyingUnit,
|
|
52160
|
+
...capacity !== void 0 ? {
|
|
52161
|
+
instantRedeemCapacity: capacity,
|
|
52162
|
+
instantRedeemEnabled: true,
|
|
52163
|
+
withdrawFeeBps: 0
|
|
52164
|
+
} : {},
|
|
52165
|
+
...entry.withdrawQueue ? { withdrawQueue: entry.withdrawQueue } : {}
|
|
52166
|
+
};
|
|
52167
|
+
}
|
|
52168
|
+
};
|
|
52169
|
+
};
|
|
52170
|
+
|
|
52171
|
+
// src/vaults/savings/readers/navOracle.ts
|
|
52172
|
+
var readerNavOracle = (entry) => {
|
|
52173
|
+
const shareUnit = 10n ** BigInt(entry.decimals);
|
|
52174
|
+
const underlyingUnit = 10n ** BigInt(entry.underlyingDecimals ?? entry.decimals);
|
|
52175
|
+
return {
|
|
52176
|
+
calls: [
|
|
52177
|
+
{ address: entry.address, name: "totalSupply", params: [] },
|
|
52178
|
+
{
|
|
52179
|
+
address: entry.priceOracle ?? entry.address,
|
|
52180
|
+
name: "latestRoundData",
|
|
52181
|
+
params: []
|
|
52182
|
+
}
|
|
52183
|
+
],
|
|
52184
|
+
abis: [TotalSupplyAbi2, NavOracleReadAbi],
|
|
52185
|
+
parse: ([supply, round]) => {
|
|
52186
|
+
const totalSupply = toBigInt14(supply);
|
|
52187
|
+
if (totalSupply === void 0) return void 0;
|
|
52188
|
+
const raw = Array.isArray(round) ? round[1] : round?.answer;
|
|
52189
|
+
const exchangeRate = toBigInt14(raw);
|
|
52190
|
+
if (exchangeRate === void 0 || exchangeRate <= 0n) return void 0;
|
|
52191
|
+
return {
|
|
52192
|
+
totalAssets: totalSupply * exchangeRate * underlyingUnit / (ONE_E189 * shareUnit),
|
|
52193
|
+
totalSupply,
|
|
52194
|
+
exchangeRate
|
|
52195
|
+
};
|
|
52196
|
+
}
|
|
52197
|
+
};
|
|
52198
|
+
};
|
|
52199
|
+
|
|
52200
|
+
// src/vaults/savings/readers/nativeWnlp.ts
|
|
52201
|
+
var readerNativeWnlp = (entry) => {
|
|
52202
|
+
const { address, underlying, inventoryContract, withdrawQueue } = entry;
|
|
52203
|
+
return {
|
|
52204
|
+
calls: [
|
|
52205
|
+
{ address, name: "totalSupply", params: [] },
|
|
52206
|
+
{ address, name: "getNlpByWnlp", params: [ONE_E189] },
|
|
52207
|
+
{ address, name: "instantRedeemFeeBips", params: [] },
|
|
52208
|
+
{ address, name: "instantRedeemEnabled", params: [] },
|
|
52209
|
+
// Falls back to the vault itself when no CreditVault is pinned —
|
|
52210
|
+
// yields a 0 capacity rather than a malformed call.
|
|
52211
|
+
{
|
|
52212
|
+
address: underlying,
|
|
52213
|
+
name: "balanceOf",
|
|
52214
|
+
params: [inventoryContract ?? address]
|
|
52215
|
+
},
|
|
52216
|
+
{
|
|
52217
|
+
address: withdrawQueue ?? address,
|
|
52218
|
+
name: "withdrawalWindow",
|
|
52219
|
+
params: []
|
|
52220
|
+
}
|
|
52221
|
+
],
|
|
52222
|
+
abis: [
|
|
52223
|
+
TotalSupplyAbi2,
|
|
52224
|
+
NativeWnlpReadAbi,
|
|
52225
|
+
NativeWnlpReadAbi,
|
|
52226
|
+
NativeWnlpReadAbi,
|
|
52227
|
+
BalanceOfAbi,
|
|
52228
|
+
NativeWithdrawQueueReadAbi
|
|
52229
|
+
],
|
|
52230
|
+
parse: ([supply, rate, feeBips, instantEnabled, inventory, window]) => {
|
|
52231
|
+
const totalSupply = toBigInt14(supply);
|
|
52232
|
+
const exchangeRate = toBigInt14(rate);
|
|
52233
|
+
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
52234
|
+
return void 0;
|
|
52235
|
+
}
|
|
52236
|
+
const capacity = toBigInt14(inventory);
|
|
52237
|
+
const windowSeconds = toBigInt14(window);
|
|
52238
|
+
const bips = toBigInt14(feeBips);
|
|
52239
|
+
return {
|
|
52240
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
52241
|
+
totalSupply,
|
|
52242
|
+
exchangeRate,
|
|
52243
|
+
// `instantRedeemFeeBips` on-chain is already basis points, so it
|
|
52244
|
+
// maps 1:1 onto the cross-provider `withdrawFeeBps`.
|
|
52245
|
+
withdrawFeeBps: bips !== void 0 ? Number(bips) : void 0,
|
|
52246
|
+
// `instantRedeemEnabled` is a bool; a reverted call reads as
|
|
52247
|
+
// undefined, which we treat as "unknown" rather than "disabled".
|
|
52248
|
+
instantRedeemEnabled: typeof instantEnabled === "boolean" ? instantEnabled : void 0,
|
|
52249
|
+
instantRedeemCapacity: capacity,
|
|
52250
|
+
withdrawalCooldownSeconds: windowSeconds !== void 0 ? Number(windowSeconds) : void 0,
|
|
52251
|
+
withdrawQueue: withdrawQueue?.toLowerCase()
|
|
50412
52252
|
};
|
|
50413
52253
|
}
|
|
50414
52254
|
};
|
|
50415
52255
|
};
|
|
50416
52256
|
|
|
50417
52257
|
// src/vaults/savings/readers/index.ts
|
|
50418
|
-
var buildReader2 = (entry) =>
|
|
52258
|
+
var buildReader2 = (entry) => {
|
|
52259
|
+
switch (entry.reader) {
|
|
52260
|
+
case "native-wnlp":
|
|
52261
|
+
return readerNativeWnlp(entry);
|
|
52262
|
+
case "nav-oracle":
|
|
52263
|
+
return readerNavOracle(entry);
|
|
52264
|
+
case "erc4626-idle":
|
|
52265
|
+
return readerErc4626Idle(entry);
|
|
52266
|
+
case "erc4626":
|
|
52267
|
+
case void 0:
|
|
52268
|
+
return readerErc46262(entry);
|
|
52269
|
+
}
|
|
52270
|
+
};
|
|
50419
52271
|
|
|
50420
52272
|
// src/vaults/savings/yieldBinding.ts
|
|
50421
52273
|
var resolveYieldApr2 = async (entries) => (await resolveEntryApr(entries)).apr;
|
|
50422
52274
|
|
|
50423
52275
|
// src/vaults/savings/fetchPublic.ts
|
|
50424
|
-
var
|
|
52276
|
+
var ONE_E1810 = 10n ** 18n;
|
|
50425
52277
|
var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
50426
52278
|
const entries = getSavingsRegistry(chainId);
|
|
50427
52279
|
if (entries.length === 0) return {};
|
|
@@ -50459,11 +52311,19 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
50459
52311
|
const totalAssetsFormatted = Number(state.totalAssets) / 10 ** underlyingDec;
|
|
50460
52312
|
const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
|
|
50461
52313
|
const isInstant = entry.withdrawalMode === "instant";
|
|
50462
|
-
|
|
50463
|
-
|
|
50464
|
-
|
|
50465
|
-
|
|
50466
|
-
const
|
|
52314
|
+
let liquidityAmount = isInstant ? state.totalAssets : 0n;
|
|
52315
|
+
if (!isInstant && state.instantRedeemCapacity !== void 0) {
|
|
52316
|
+
liquidityAmount = state.instantRedeemEnabled === false ? 0n : state.instantRedeemCapacity < state.totalAssets ? state.instantRedeemCapacity : state.totalAssets;
|
|
52317
|
+
}
|
|
52318
|
+
const liquidityRaw = liquidityAmount.toString();
|
|
52319
|
+
const liquidityFormatted = Number(liquidityAmount) / 10 ** underlyingDec;
|
|
52320
|
+
const liquidityUsd = priceUsd !== void 0 ? liquidityFormatted * priceUsd : 0;
|
|
52321
|
+
const instantLiquidityRatio = state.totalAssets > 0n ? Math.min(
|
|
52322
|
+
1,
|
|
52323
|
+
Number(liquidityAmount * 1000000n / state.totalAssets) / 1e6
|
|
52324
|
+
) : 1;
|
|
52325
|
+
const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1810;
|
|
52326
|
+
const convertToShares = state.exchangeRate > 0n ? ONE_E1810 * shareUnit / state.exchangeRate : 0n;
|
|
50467
52327
|
const displayName = composeVaultDisplayName(
|
|
50468
52328
|
entry.brand,
|
|
50469
52329
|
entry.brand,
|
|
@@ -50491,19 +52351,32 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
50491
52351
|
supplyRate,
|
|
50492
52352
|
rewardsRate,
|
|
50493
52353
|
depositRate,
|
|
50494
|
-
|
|
52354
|
+
// Opt-IN, not opt-out: a new bespoke reader exists precisely
|
|
52355
|
+
// because its token is not a conforming vault, so the default for
|
|
52356
|
+
// an unlisted reader must be `false`. `erc4626-idle` is the plain
|
|
52357
|
+
// 4626 surface plus an inventory read, so it counts; Native's wNLP
|
|
52358
|
+
// and Re's NAV-oracle tokens revert on `asset()`/`totalAssets()`/
|
|
52359
|
+
// `convertToAssets()` and do not.
|
|
52360
|
+
isErc4626: entry.reader === void 0 || entry.reader === "erc4626" || entry.reader === "erc4626-idle",
|
|
50495
52361
|
isRebasing: entry.isRebasing,
|
|
50496
52362
|
isMintable: entry.isMintable,
|
|
50497
52363
|
mintContract: entry.mintContract?.toLowerCase() ?? addressLc,
|
|
50498
52364
|
withdrawalMode: entry.withdrawalMode,
|
|
50499
|
-
|
|
52365
|
+
// On-chain wins over the registry's pinned fallback — Native's
|
|
52366
|
+
// queue window is per-asset and governance-mutable.
|
|
52367
|
+
withdrawalCooldownSeconds: state.withdrawalCooldownSeconds ?? entry.withdrawalCooldownSeconds,
|
|
52368
|
+
withdrawFeeBps: state.withdrawFeeBps,
|
|
52369
|
+
instantRedeemEnabled: state.instantRedeemEnabled,
|
|
52370
|
+
inventoryContract: entry.inventoryContract?.toLowerCase(),
|
|
52371
|
+
withdrawQueue: state.withdrawQueue ?? entry.withdrawQueue?.toLowerCase(),
|
|
50500
52372
|
asset,
|
|
50501
52373
|
priceUsd,
|
|
50502
52374
|
totalAssetsFormatted,
|
|
50503
52375
|
totalAssetsUsd,
|
|
50504
52376
|
liquidity: liquidityRaw,
|
|
50505
52377
|
liquidityFormatted,
|
|
50506
|
-
liquidityUsd
|
|
52378
|
+
liquidityUsd,
|
|
52379
|
+
instantLiquidityRatio
|
|
50507
52380
|
};
|
|
50508
52381
|
out[addressLc] = vault;
|
|
50509
52382
|
}
|
|
@@ -52780,7 +54653,7 @@ var readVaultSharePrices = async (chainId, addresses, multicallRetry) => {
|
|
|
52780
54653
|
};
|
|
52781
54654
|
|
|
52782
54655
|
// src/vaults/yield/annualize.ts
|
|
52783
|
-
var
|
|
54656
|
+
var YEAR_SECONDS5 = 365 * 24 * 60 * 60;
|
|
52784
54657
|
var SCALE = 10n ** 18n;
|
|
52785
54658
|
var appendSnapshot = (points, snap, options) => {
|
|
52786
54659
|
const maxPoints = options?.maxPoints ?? 90;
|
|
@@ -52809,7 +54682,7 @@ var computeVaultApr = (points, options) => {
|
|
|
52809
54682
|
if (pThen === 0n) return void 0;
|
|
52810
54683
|
const ratioScaled = BigInt(now.p) * SCALE / pThen;
|
|
52811
54684
|
const ratio = Number(ratioScaled) / 1e18;
|
|
52812
|
-
const apr = (ratio - 1) * (
|
|
54685
|
+
const apr = (ratio - 1) * (YEAR_SECONDS5 / windowSeconds);
|
|
52813
54686
|
return {
|
|
52814
54687
|
apr,
|
|
52815
54688
|
sharePriceNow: now.p,
|