@1delta/data-sdk 0.0.37 → 0.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +247 -0
- package/dist/index.mjs +219 -1
- package/dist/lending.d.ts +486 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -82,6 +82,12 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
|
|
|
82
82
|
inverseMarkets: {},
|
|
83
83
|
usddConfig: {},
|
|
84
84
|
usddMarkets: {},
|
|
85
|
+
frankencoinConfig: {},
|
|
86
|
+
frankencoinMarkets: {},
|
|
87
|
+
llamaLendConfig: {},
|
|
88
|
+
llamaLendMarkets: {},
|
|
89
|
+
resupplyConfig: {},
|
|
90
|
+
curvanceConfig: {},
|
|
85
91
|
compoundV3Bulker: {},
|
|
86
92
|
eulerConfigs: {},
|
|
87
93
|
eulerVaults: {},
|
|
@@ -147,6 +153,12 @@ function initializeLenderData({
|
|
|
147
153
|
inverseMarketsOverride,
|
|
148
154
|
usddConfigOverride,
|
|
149
155
|
usddMarketsOverride,
|
|
156
|
+
frankencoinConfigOverride,
|
|
157
|
+
frankencoinMarketsOverride,
|
|
158
|
+
llamaLendConfigOverride,
|
|
159
|
+
llamaLendMarketsOverride,
|
|
160
|
+
resupplyConfigOverride,
|
|
161
|
+
curvanceConfigOverride,
|
|
150
162
|
compoundV3BulkerOverride,
|
|
151
163
|
eulerConfigsOverride,
|
|
152
164
|
eulerVaultsOverride,
|
|
@@ -205,6 +217,12 @@ function initializeLenderData({
|
|
|
205
217
|
if (inverseMarketsOverride) data.inverseMarkets = inverseMarketsOverride;
|
|
206
218
|
if (usddConfigOverride) data.usddConfig = usddConfigOverride;
|
|
207
219
|
if (usddMarketsOverride) data.usddMarkets = usddMarketsOverride;
|
|
220
|
+
if (frankencoinConfigOverride) data.frankencoinConfig = frankencoinConfigOverride;
|
|
221
|
+
if (frankencoinMarketsOverride) data.frankencoinMarkets = frankencoinMarketsOverride;
|
|
222
|
+
if (llamaLendConfigOverride) data.llamaLendConfig = llamaLendConfigOverride;
|
|
223
|
+
if (llamaLendMarketsOverride) data.llamaLendMarkets = llamaLendMarketsOverride;
|
|
224
|
+
if (resupplyConfigOverride) data.resupplyConfig = resupplyConfigOverride;
|
|
225
|
+
if (curvanceConfigOverride) data.curvanceConfig = curvanceConfigOverride;
|
|
208
226
|
if (compoundV3BulkerOverride) data.compoundV3Bulker = compoundV3BulkerOverride;
|
|
209
227
|
if (eulerConfigsOverride) data.eulerConfigs = eulerConfigsOverride;
|
|
210
228
|
if (eulerVaultsOverride) data.eulerVaults = eulerVaultsOverride;
|
|
@@ -341,6 +359,41 @@ var inverseLendersByChain = (chainId) => {
|
|
|
341
359
|
const chain = String(chainId);
|
|
342
360
|
return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.dola);
|
|
343
361
|
};
|
|
362
|
+
var llamaLendConfig = () => getGlobalData2()?.llamaLendConfig;
|
|
363
|
+
var llamaLendConfigFor = (lender, chainId) => getGlobalData2()?.llamaLendConfig?.[lender]?.[String(chainId)];
|
|
364
|
+
var llamaLendMarkets = () => getGlobalData2()?.llamaLendMarkets;
|
|
365
|
+
var llamaLendChainData = (lender, chainId) => getGlobalData2()?.llamaLendMarkets?.[lender]?.[String(chainId)];
|
|
366
|
+
var llamaLendMarketByController = (lender, chainId, controller) => {
|
|
367
|
+
const lower = controller.toLowerCase();
|
|
368
|
+
return llamaLendChainData(lender, chainId)?.markets?.find((m) => m.controller.toLowerCase() === lower);
|
|
369
|
+
};
|
|
370
|
+
var llamaLendMarketByVault = (lender, chainId, vault) => {
|
|
371
|
+
const lower = vault.toLowerCase();
|
|
372
|
+
return llamaLendChainData(lender, chainId)?.markets?.find((m) => m.vault.toLowerCase() === lower);
|
|
373
|
+
};
|
|
374
|
+
var llamaLendLendersByChain = (chainId) => {
|
|
375
|
+
const cfg = getGlobalData2()?.llamaLendConfig ?? {};
|
|
376
|
+
const chain = String(chainId);
|
|
377
|
+
return Object.keys(cfg).filter(
|
|
378
|
+
(lender) => !!(cfg[lender]?.[chain]?.oneWayFactory || cfg[lender]?.[chain]?.lendFactory)
|
|
379
|
+
);
|
|
380
|
+
};
|
|
381
|
+
var llamaLendSupportsDelegation = (lender, chainId, controller) => llamaLendMarketByController(lender, chainId, controller)?.supportsDelegation === true;
|
|
382
|
+
var llamaLendLeverageZap = (lender, chainId, aggregator) => {
|
|
383
|
+
const cfg = llamaLendConfigFor(lender, chainId);
|
|
384
|
+
if (!cfg) return void 0;
|
|
385
|
+
const zap = aggregator === "odos" ? cfg.leverageZapOdos : cfg.leverageZap1inch;
|
|
386
|
+
const router = aggregator === "odos" ? cfg.leverageZapOdosRouter : cfg.leverageZap1inchRouter;
|
|
387
|
+
if (!zap || !router) return void 0;
|
|
388
|
+
return { zap, router };
|
|
389
|
+
};
|
|
390
|
+
var llamaLendSupportsLeverage = (lender, chainId, controller) => {
|
|
391
|
+
const m = llamaLendMarketByController(lender, chainId, controller);
|
|
392
|
+
if (!m?.supportsLeverage) return false;
|
|
393
|
+
const cfg = llamaLendConfigFor(lender, chainId);
|
|
394
|
+
return Boolean(cfg?.leverageZapOdos || cfg?.leverageZap1inch);
|
|
395
|
+
};
|
|
396
|
+
var llamaLendApiBaseUrl = (lender, chainId) => llamaLendConfigFor(lender, chainId)?.apiBaseUrl || "https://api.curve.finance";
|
|
344
397
|
var usddConfig = () => getGlobalData2()?.usddConfig;
|
|
345
398
|
var usddConfigFor = (lender, chainId) => getGlobalData2()?.usddConfig?.[lender]?.[String(chainId)];
|
|
346
399
|
var usddMarkets = () => getGlobalData2()?.usddMarkets;
|
|
@@ -351,6 +404,160 @@ var usddLendersByChain = (chainId) => {
|
|
|
351
404
|
const chain = String(chainId);
|
|
352
405
|
return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.vat);
|
|
353
406
|
};
|
|
407
|
+
var frankencoinConfig = () => getGlobalData2()?.frankencoinConfig;
|
|
408
|
+
var frankencoinConfigFor = (lender, chainId) => getGlobalData2()?.frankencoinConfig?.[lender]?.[String(chainId)];
|
|
409
|
+
var frankencoinMarkets = () => getGlobalData2()?.frankencoinMarkets;
|
|
410
|
+
var frankencoinChainData = (lender, chainId) => getGlobalData2()?.frankencoinMarkets?.[lender]?.[String(chainId)];
|
|
411
|
+
var frankencoinMarketByPosition = (lender, chainId, position) => {
|
|
412
|
+
const lower = position.toLowerCase();
|
|
413
|
+
return frankencoinChainData(lender, chainId)?.markets?.find((m) => m.position.toLowerCase() === lower);
|
|
414
|
+
};
|
|
415
|
+
var frankencoinLendersByChain = (chainId) => {
|
|
416
|
+
const cfg = getGlobalData2()?.frankencoinConfig ?? {};
|
|
417
|
+
const chain = String(chainId);
|
|
418
|
+
return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.mintingHub);
|
|
419
|
+
};
|
|
420
|
+
var RESUPPLY_ETHEREUM_CONFIG = {
|
|
421
|
+
registry: "0x10101010E0C3171D894B71B3400668aF311e7D94",
|
|
422
|
+
reusd: "0x57aB1E0003F623289CD798B1824Be09a793e4Bec",
|
|
423
|
+
utilities: "0x5f896C250DA6b462873813ceEc47F3e4D8CBA464",
|
|
424
|
+
curveSwapper: "0x042f48346be16Be381190a7397A80808243f3b2e",
|
|
425
|
+
ensoSwapper: "0x181c98113ce60BA75A0f72d8901Eb17e5065043D",
|
|
426
|
+
lifiSwapper: "0x597Db76794c75E588D3a70534FB34B7780941fCe",
|
|
427
|
+
redemptionHandler: "0x5eeB063d0abefBBc78F576E28d762a16b637A025",
|
|
428
|
+
liquidationHandler: "0x88888888c227c36401493Ed9F3e3Dcc3800B2634",
|
|
429
|
+
insurancePool: "0x00000000efe883b3304aFf71eaCf72Dbc3e1b577",
|
|
430
|
+
sreusd: "0x557AB1e003951A73c12D16F0fEA8490E39C33C35",
|
|
431
|
+
priceWatcher: "0xAaaa0013e2ec451F76816d1e0a02ABA596dd9251",
|
|
432
|
+
debtDecimals: 18
|
|
433
|
+
};
|
|
434
|
+
var RESUPPLY_BUILTIN = {
|
|
435
|
+
RESUPPLY: { "1": RESUPPLY_ETHEREUM_CONFIG }
|
|
436
|
+
};
|
|
437
|
+
var resupplyConfig = () => getGlobalData2()?.resupplyConfig;
|
|
438
|
+
var resupplyConfigFor = (lender, chainId) => {
|
|
439
|
+
const published = getGlobalData2()?.resupplyConfig?.[lender]?.[String(chainId)];
|
|
440
|
+
if (published?.registry) return published;
|
|
441
|
+
return RESUPPLY_BUILTIN[lender]?.[String(chainId)];
|
|
442
|
+
};
|
|
443
|
+
var resupplyLendersByChain = (chainId) => {
|
|
444
|
+
const chain = String(chainId);
|
|
445
|
+
const cfg = getGlobalData2()?.resupplyConfig ?? {};
|
|
446
|
+
const keys = /* @__PURE__ */ new Set();
|
|
447
|
+
for (const lender of Object.keys(cfg)) {
|
|
448
|
+
if (cfg[lender]?.[chain]?.registry) keys.add(lender);
|
|
449
|
+
}
|
|
450
|
+
for (const lender of Object.keys(RESUPPLY_BUILTIN)) {
|
|
451
|
+
if (RESUPPLY_BUILTIN[lender]?.[chain]?.registry) keys.add(lender);
|
|
452
|
+
}
|
|
453
|
+
return [...keys];
|
|
454
|
+
};
|
|
455
|
+
var CURVANCE_MONAD_CONFIG = {
|
|
456
|
+
centralRegistry: "0x1310f352f1389969Ece6741671c4B919523912fF",
|
|
457
|
+
oracleManager: "0x65ADF8aE8420A58278De066593E6fF1713A137c5",
|
|
458
|
+
protocolReader: "0xC5E6DD26095Cc1fa2369f7885dF263e150228D8b",
|
|
459
|
+
optimizerReader: "0x821a4a2Be28888917106B3A628c8edaffEbF2e2F",
|
|
460
|
+
optimizers: {
|
|
461
|
+
// `hyAUSD` — 6-dec shares over AUSD; itself collateral in 2 markets.
|
|
462
|
+
hyAUSD: "0xaD663aC84052b52BE4ed1b27BA416505e84a00Bf"
|
|
463
|
+
},
|
|
464
|
+
// Only KyberSwap's MetaAggregationRouterV2 has a registered checker on Monad
|
|
465
|
+
// (2026-08). 1inch / Odos / OogaBooga all return the zero address even
|
|
466
|
+
// though checker contracts for them exist in the Curvance repo — registering
|
|
467
|
+
// OogaBooga is a single DAO call. Probe live before relying on any of this.
|
|
468
|
+
swapTargets: {
|
|
469
|
+
kyberswap: "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5"
|
|
470
|
+
},
|
|
471
|
+
positionManagers: {
|
|
472
|
+
// muBOND | AUSD
|
|
473
|
+
"0x830D40CDFdc494BC1A2729a7381bfCe44326c944": { simplePositionManager: "0xA3d212D4705caf42C35d6EaE0C85E94c4cd329E4" },
|
|
474
|
+
// loAZND | AUSD
|
|
475
|
+
"0x7C822B093A116654F824Ec2A35CD23a3749E4f90": { simplePositionManager: "0x9e4638fd67bE15360bfebC5e07AECfF33dfda917" },
|
|
476
|
+
// ezETH | WETH
|
|
477
|
+
"0x83840d837E7A3E00bBb0B8501E60E989A8987c37": { simplePositionManager: "0xd8d3E46E52C3AB8FD98D04143984C763B4Bbc584" },
|
|
478
|
+
// shMON | WMON
|
|
479
|
+
"0xE1C24B2E93230FBe33d32Ba38ECA3218284143e2": {
|
|
480
|
+
nativeVaultPositionManager: "0x2fAA792502aC5a329DcCc1580C5308fCc0a772fe",
|
|
481
|
+
simplePositionManager: "0x7E8705a164DA7Cc5a4119C750b1F79837AD89D5E"
|
|
482
|
+
},
|
|
483
|
+
// aprMON | WMON
|
|
484
|
+
"0x5EA0a1Cf3501C954b64902c5e92100b8A2CaB1Ac": {
|
|
485
|
+
nativeVaultPositionManager: "0x82f88A810E86a730699231F5fBF5686c643467C8",
|
|
486
|
+
simplePositionManager: "0x669786FF3da7544c98FE74eE1006D787118d1770"
|
|
487
|
+
},
|
|
488
|
+
// sMON | WMON
|
|
489
|
+
"0xe5970cDB1916B2cCF6185C86C174EEE2d330D05B": { simplePositionManager: "0x3d6ba6C90E1738cb01C46E72F284C7Bd57eB11EC" },
|
|
490
|
+
// sAUSD | AUSD
|
|
491
|
+
"0xBBE7A3c45aDBb16F6490767b663428c34aA341Eb": {
|
|
492
|
+
simplePositionManager: "0x491e8712885E4e0b98864F13393ced8c1a61FD57",
|
|
493
|
+
vaultPositionManager: "0xe94AC990873C3B59A417d25C1ec1398807FB41A1"
|
|
494
|
+
},
|
|
495
|
+
// earnAUSD | AUSD
|
|
496
|
+
"0xd6365555f6a697C7C295bA741100AA644cE28545": { simplePositionManager: "0xd807efC94376618B4d9CE6eAaf89607006d3B881" },
|
|
497
|
+
// WMON | AUSD
|
|
498
|
+
"0x05e70717fA8BD0F21a9F826d093d99f6Da4f1554": { simplePositionManager: "0x2619BB5Acfe51317c4C36a63578FD56148e68C74" },
|
|
499
|
+
// WMON | USDC
|
|
500
|
+
"0xa6A2A92F126b79Ee0804845ee6B52899b4491093": { simplePositionManager: "0x960c49E523e6A87282D2bC5032d0AeCb35Dc20ef" },
|
|
501
|
+
// WBTC | USDC
|
|
502
|
+
"0x01C4a0d396EFE982B1B103BE9910321d34e1aEA9": { simplePositionManager: "0x8cA51d155C07e91B206Cf11C8D52d5aB082657F6" },
|
|
503
|
+
// WETH | USDC
|
|
504
|
+
"0xb3E9E0134354cc91b7FB9F9d6C3ab0dE7854BB49": { simplePositionManager: "0x3A1B2Dc11a81Fe106eC667BaB4056fC72498ff73" },
|
|
505
|
+
// gMON | WMON
|
|
506
|
+
"0xb00aFF53a4Df2b4E2f97a3d9ffaDb55564C8E42F": { simplePositionManager: "0x77B90040E6dFE8A62293Cd91CAeE35296EC266Ee" },
|
|
507
|
+
// syzUSD | AUSD
|
|
508
|
+
"0x90fc1A4abC4ee5f8a9560dE069067D9606d2909C": { simplePositionManager: "0x9352318f75e8Cb7C47C5B086D56d3e6D761b7419" },
|
|
509
|
+
// wsrUSD | AUSD
|
|
510
|
+
"0x627a15859d09C1550e2934991AA95aFc6896e3Ef": { simplePositionManager: "0xF8613b7b4e8bFb5E7155fb4D3bc9f9B93d895C31" },
|
|
511
|
+
// YZM | AUSD
|
|
512
|
+
"0x4409e2161B6f9A25ACbC471a37390654Ed272249": { simplePositionManager: "0xb85dEf309F7eEEb8f581909c7afB623dDf59AdD9" },
|
|
513
|
+
// vUSD | AUSD
|
|
514
|
+
"0x2DB9AB1bB00d7000b21A2EbcE7D1a9b91F351E72": { simplePositionManager: "0xCb1709fAF66A73b4f6026b531Bef9AF971368f50" },
|
|
515
|
+
// eBTC | WBTC
|
|
516
|
+
"0xBc4cd7bbd8d38027A88838B88BA04561FA778C35": { simplePositionManager: "0x5e339724818c4b46E1Bc6966FeB4ea2924Ca17D9" },
|
|
517
|
+
// savUSD | USDC
|
|
518
|
+
"0x38104e87Eb96ce5ef1C23a06878dB0D657B4a699": { simplePositionManager: "0x7B918FF5EDc44B29ced4d3dc52Fb8b859025325c" },
|
|
519
|
+
// savUSD | AUSD
|
|
520
|
+
"0x4B0a39eCC3e5A5dA3ce6D492D4D255cD1F0209F7": { simplePositionManager: "0xb8F6f480E645dBa96Df9eD3948D900725bA9e9Ec" }
|
|
521
|
+
}
|
|
522
|
+
};
|
|
523
|
+
var CURVANCE_BUILTIN = {
|
|
524
|
+
CURVANCE: { "143": CURVANCE_MONAD_CONFIG }
|
|
525
|
+
};
|
|
526
|
+
var curvanceConfig = () => getGlobalData2()?.curvanceConfig;
|
|
527
|
+
var curvanceConfigFor = (lender, chainId) => {
|
|
528
|
+
const published = getGlobalData2()?.curvanceConfig?.[lender]?.[String(chainId)];
|
|
529
|
+
if (published?.centralRegistry) return published;
|
|
530
|
+
return CURVANCE_BUILTIN[lender]?.[String(chainId)];
|
|
531
|
+
};
|
|
532
|
+
var curvanceLendersByChain = (chainId) => {
|
|
533
|
+
const chain = String(chainId);
|
|
534
|
+
const cfg = getGlobalData2()?.curvanceConfig ?? {};
|
|
535
|
+
const keys = /* @__PURE__ */ new Set();
|
|
536
|
+
for (const lender of Object.keys(cfg)) {
|
|
537
|
+
if (cfg[lender]?.[chain]?.centralRegistry) keys.add(lender);
|
|
538
|
+
}
|
|
539
|
+
for (const lender of Object.keys(CURVANCE_BUILTIN)) {
|
|
540
|
+
if (CURVANCE_BUILTIN[lender]?.[chain]?.centralRegistry) keys.add(lender);
|
|
541
|
+
}
|
|
542
|
+
return [...keys];
|
|
543
|
+
};
|
|
544
|
+
var curvancePositionManagersFor = (lender, chainId, marketManager) => {
|
|
545
|
+
const map = curvanceConfigFor(lender, chainId)?.positionManagers;
|
|
546
|
+
if (!map || !marketManager) return void 0;
|
|
547
|
+
const direct = map[marketManager];
|
|
548
|
+
if (direct) return direct;
|
|
549
|
+
const target = marketManager.toLowerCase();
|
|
550
|
+
for (const key of Object.keys(map)) {
|
|
551
|
+
if (key.toLowerCase() === target) return map[key];
|
|
552
|
+
}
|
|
553
|
+
return void 0;
|
|
554
|
+
};
|
|
555
|
+
var curvancePositionManager = (lender, chainId, marketManager, kind) => {
|
|
556
|
+
const pms = curvancePositionManagersFor(lender, chainId, marketManager);
|
|
557
|
+
if (!pms) return void 0;
|
|
558
|
+
if (kind) return pms[kind];
|
|
559
|
+
return pms.simplePositionManager ?? pms.vaultPositionManager ?? pms.nativeVaultPositionManager ?? pms.pendlePtPositionManager;
|
|
560
|
+
};
|
|
354
561
|
var compoundV3Bulker = () => getGlobalData2()?.compoundV3Bulker;
|
|
355
562
|
var eulerConfigs = () => getGlobalData2()?.eulerConfigs;
|
|
356
563
|
var eulerVaults = () => getGlobalData2()?.eulerVaults;
|
|
@@ -492,6 +699,17 @@ function parseTermMaxLenderKey(lenderKey) {
|
|
|
492
699
|
if (!match) return void 0;
|
|
493
700
|
return { marketAddrLower: "0x" + match[1].toLowerCase() };
|
|
494
701
|
}
|
|
702
|
+
function llamaLendLenderKey(controller) {
|
|
703
|
+
if (!controller || !controller.startsWith("0x") || controller.length !== 42) {
|
|
704
|
+
throw new Error(`llamaLendLenderKey: invalid controller address ${controller}`);
|
|
705
|
+
}
|
|
706
|
+
return `LLAMALEND_${controller.slice(2).toUpperCase()}`;
|
|
707
|
+
}
|
|
708
|
+
function parseLlamaLendLenderKey(lenderKey) {
|
|
709
|
+
const match = lenderKey.match(/^LLAMALEND_([0-9A-Fa-f]{40})$/);
|
|
710
|
+
if (!match) return void 0;
|
|
711
|
+
return { controllerAddrLower: "0x" + match[1].toLowerCase() };
|
|
712
|
+
}
|
|
495
713
|
|
|
496
714
|
// src/tokens.ts
|
|
497
715
|
var getListUrl = (chainId) => `https://raw.githubusercontent.com/1delta-DAO/token-lists/main/${chainId}.json`;
|
|
@@ -524,7 +742,9 @@ async function fetchMainTokensMap() {
|
|
|
524
742
|
return await data.json();
|
|
525
743
|
}
|
|
526
744
|
|
|
745
|
+
exports.CURVANCE_MONAD_CONFIG = CURVANCE_MONAD_CONFIG;
|
|
527
746
|
exports.GEARBOX_ACCOUNT_COMPRESSOR_V310 = GEARBOX_ACCOUNT_COMPRESSOR_V310;
|
|
747
|
+
exports.RESUPPLY_ETHEREUM_CONFIG = RESUPPLY_ETHEREUM_CONFIG;
|
|
528
748
|
exports.aaveOracles = aaveOracles;
|
|
529
749
|
exports.aaveOraclesConfig = aaveOraclesConfig;
|
|
530
750
|
exports.aavePools = aavePools;
|
|
@@ -548,6 +768,11 @@ exports.compoundV3Bulker = compoundV3Bulker;
|
|
|
548
768
|
exports.compoundV3OraclesData = compoundV3OraclesData;
|
|
549
769
|
exports.compoundV3Pools = compoundV3Pools;
|
|
550
770
|
exports.compoundV3Reserves = compoundV3Reserves;
|
|
771
|
+
exports.curvanceConfig = curvanceConfig;
|
|
772
|
+
exports.curvanceConfigFor = curvanceConfigFor;
|
|
773
|
+
exports.curvanceLendersByChain = curvanceLendersByChain;
|
|
774
|
+
exports.curvancePositionManager = curvancePositionManager;
|
|
775
|
+
exports.curvancePositionManagersFor = curvancePositionManagersFor;
|
|
551
776
|
exports.dolomiteChains = dolomiteChains;
|
|
552
777
|
exports.dolomiteConfigs = dolomiteConfigs;
|
|
553
778
|
exports.dolomiteEmode = dolomiteEmode;
|
|
@@ -568,6 +793,12 @@ exports.fluidChains = fluidChains;
|
|
|
568
793
|
exports.fluidResolvers = fluidResolvers;
|
|
569
794
|
exports.fluidVaultEntries = fluidVaultEntries;
|
|
570
795
|
exports.fluidVaults = fluidVaults;
|
|
796
|
+
exports.frankencoinChainData = frankencoinChainData;
|
|
797
|
+
exports.frankencoinConfig = frankencoinConfig;
|
|
798
|
+
exports.frankencoinConfigFor = frankencoinConfigFor;
|
|
799
|
+
exports.frankencoinLendersByChain = frankencoinLendersByChain;
|
|
800
|
+
exports.frankencoinMarketByPosition = frankencoinMarketByPosition;
|
|
801
|
+
exports.frankencoinMarkets = frankencoinMarkets;
|
|
571
802
|
exports.gearboxAccountCompressor = gearboxAccountCompressor;
|
|
572
803
|
exports.gearboxAddressProviderV310 = gearboxAddressProviderV310;
|
|
573
804
|
exports.gearboxBotListV3 = gearboxBotListV3;
|
|
@@ -600,6 +831,18 @@ exports.liquityConfigFor = liquityConfigFor;
|
|
|
600
831
|
exports.liquityLendersByChain = liquityLendersByChain;
|
|
601
832
|
exports.liquityMarkets = liquityMarkets;
|
|
602
833
|
exports.listaNativeProvider = listaNativeProvider;
|
|
834
|
+
exports.llamaLendApiBaseUrl = llamaLendApiBaseUrl;
|
|
835
|
+
exports.llamaLendChainData = llamaLendChainData;
|
|
836
|
+
exports.llamaLendConfig = llamaLendConfig;
|
|
837
|
+
exports.llamaLendConfigFor = llamaLendConfigFor;
|
|
838
|
+
exports.llamaLendLenderKey = llamaLendLenderKey;
|
|
839
|
+
exports.llamaLendLendersByChain = llamaLendLendersByChain;
|
|
840
|
+
exports.llamaLendLeverageZap = llamaLendLeverageZap;
|
|
841
|
+
exports.llamaLendMarketByController = llamaLendMarketByController;
|
|
842
|
+
exports.llamaLendMarketByVault = llamaLendMarketByVault;
|
|
843
|
+
exports.llamaLendMarkets = llamaLendMarkets;
|
|
844
|
+
exports.llamaLendSupportsDelegation = llamaLendSupportsDelegation;
|
|
845
|
+
exports.llamaLendSupportsLeverage = llamaLendSupportsLeverage;
|
|
603
846
|
exports.midnightApiBaseOverride = midnightApiBaseOverride;
|
|
604
847
|
exports.midnightConfig = midnightConfig;
|
|
605
848
|
exports.midnightMarketById = midnightMarketById;
|
|
@@ -613,11 +856,15 @@ exports.morphoTypeOracles = morphoTypeOracles;
|
|
|
613
856
|
exports.morphoTypeVaults = morphoTypeVaults;
|
|
614
857
|
exports.parseAaveV4SpokeLenderKey = parseAaveV4SpokeLenderKey;
|
|
615
858
|
exports.parseGearboxV3LenderKey = parseGearboxV3LenderKey;
|
|
859
|
+
exports.parseLlamaLendLenderKey = parseLlamaLendLenderKey;
|
|
616
860
|
exports.parseSiloV2LenderKey = parseSiloV2LenderKey;
|
|
617
861
|
exports.parseSiloV3LenderKey = parseSiloV3LenderKey;
|
|
618
862
|
exports.parseTermMaxLenderKey = parseTermMaxLenderKey;
|
|
619
863
|
exports.resolveMidnightApiBase = resolveMidnightApiBase;
|
|
620
864
|
exports.resolveTermApiBase = resolveTermApiBase;
|
|
865
|
+
exports.resupplyConfig = resupplyConfig;
|
|
866
|
+
exports.resupplyConfigFor = resupplyConfigFor;
|
|
867
|
+
exports.resupplyLendersByChain = resupplyLendersByChain;
|
|
621
868
|
exports.riverChainData = riverChainData;
|
|
622
869
|
exports.riverConfig = riverConfig;
|
|
623
870
|
exports.riverConfigFor = riverConfigFor;
|
package/dist/index.mjs
CHANGED
|
@@ -80,6 +80,12 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
|
|
|
80
80
|
inverseMarkets: {},
|
|
81
81
|
usddConfig: {},
|
|
82
82
|
usddMarkets: {},
|
|
83
|
+
frankencoinConfig: {},
|
|
84
|
+
frankencoinMarkets: {},
|
|
85
|
+
llamaLendConfig: {},
|
|
86
|
+
llamaLendMarkets: {},
|
|
87
|
+
resupplyConfig: {},
|
|
88
|
+
curvanceConfig: {},
|
|
83
89
|
compoundV3Bulker: {},
|
|
84
90
|
eulerConfigs: {},
|
|
85
91
|
eulerVaults: {},
|
|
@@ -145,6 +151,12 @@ function initializeLenderData({
|
|
|
145
151
|
inverseMarketsOverride,
|
|
146
152
|
usddConfigOverride,
|
|
147
153
|
usddMarketsOverride,
|
|
154
|
+
frankencoinConfigOverride,
|
|
155
|
+
frankencoinMarketsOverride,
|
|
156
|
+
llamaLendConfigOverride,
|
|
157
|
+
llamaLendMarketsOverride,
|
|
158
|
+
resupplyConfigOverride,
|
|
159
|
+
curvanceConfigOverride,
|
|
148
160
|
compoundV3BulkerOverride,
|
|
149
161
|
eulerConfigsOverride,
|
|
150
162
|
eulerVaultsOverride,
|
|
@@ -203,6 +215,12 @@ function initializeLenderData({
|
|
|
203
215
|
if (inverseMarketsOverride) data.inverseMarkets = inverseMarketsOverride;
|
|
204
216
|
if (usddConfigOverride) data.usddConfig = usddConfigOverride;
|
|
205
217
|
if (usddMarketsOverride) data.usddMarkets = usddMarketsOverride;
|
|
218
|
+
if (frankencoinConfigOverride) data.frankencoinConfig = frankencoinConfigOverride;
|
|
219
|
+
if (frankencoinMarketsOverride) data.frankencoinMarkets = frankencoinMarketsOverride;
|
|
220
|
+
if (llamaLendConfigOverride) data.llamaLendConfig = llamaLendConfigOverride;
|
|
221
|
+
if (llamaLendMarketsOverride) data.llamaLendMarkets = llamaLendMarketsOverride;
|
|
222
|
+
if (resupplyConfigOverride) data.resupplyConfig = resupplyConfigOverride;
|
|
223
|
+
if (curvanceConfigOverride) data.curvanceConfig = curvanceConfigOverride;
|
|
206
224
|
if (compoundV3BulkerOverride) data.compoundV3Bulker = compoundV3BulkerOverride;
|
|
207
225
|
if (eulerConfigsOverride) data.eulerConfigs = eulerConfigsOverride;
|
|
208
226
|
if (eulerVaultsOverride) data.eulerVaults = eulerVaultsOverride;
|
|
@@ -339,6 +357,41 @@ var inverseLendersByChain = (chainId) => {
|
|
|
339
357
|
const chain = String(chainId);
|
|
340
358
|
return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.dola);
|
|
341
359
|
};
|
|
360
|
+
var llamaLendConfig = () => getGlobalData2()?.llamaLendConfig;
|
|
361
|
+
var llamaLendConfigFor = (lender, chainId) => getGlobalData2()?.llamaLendConfig?.[lender]?.[String(chainId)];
|
|
362
|
+
var llamaLendMarkets = () => getGlobalData2()?.llamaLendMarkets;
|
|
363
|
+
var llamaLendChainData = (lender, chainId) => getGlobalData2()?.llamaLendMarkets?.[lender]?.[String(chainId)];
|
|
364
|
+
var llamaLendMarketByController = (lender, chainId, controller) => {
|
|
365
|
+
const lower = controller.toLowerCase();
|
|
366
|
+
return llamaLendChainData(lender, chainId)?.markets?.find((m) => m.controller.toLowerCase() === lower);
|
|
367
|
+
};
|
|
368
|
+
var llamaLendMarketByVault = (lender, chainId, vault) => {
|
|
369
|
+
const lower = vault.toLowerCase();
|
|
370
|
+
return llamaLendChainData(lender, chainId)?.markets?.find((m) => m.vault.toLowerCase() === lower);
|
|
371
|
+
};
|
|
372
|
+
var llamaLendLendersByChain = (chainId) => {
|
|
373
|
+
const cfg = getGlobalData2()?.llamaLendConfig ?? {};
|
|
374
|
+
const chain = String(chainId);
|
|
375
|
+
return Object.keys(cfg).filter(
|
|
376
|
+
(lender) => !!(cfg[lender]?.[chain]?.oneWayFactory || cfg[lender]?.[chain]?.lendFactory)
|
|
377
|
+
);
|
|
378
|
+
};
|
|
379
|
+
var llamaLendSupportsDelegation = (lender, chainId, controller) => llamaLendMarketByController(lender, chainId, controller)?.supportsDelegation === true;
|
|
380
|
+
var llamaLendLeverageZap = (lender, chainId, aggregator) => {
|
|
381
|
+
const cfg = llamaLendConfigFor(lender, chainId);
|
|
382
|
+
if (!cfg) return void 0;
|
|
383
|
+
const zap = aggregator === "odos" ? cfg.leverageZapOdos : cfg.leverageZap1inch;
|
|
384
|
+
const router = aggregator === "odos" ? cfg.leverageZapOdosRouter : cfg.leverageZap1inchRouter;
|
|
385
|
+
if (!zap || !router) return void 0;
|
|
386
|
+
return { zap, router };
|
|
387
|
+
};
|
|
388
|
+
var llamaLendSupportsLeverage = (lender, chainId, controller) => {
|
|
389
|
+
const m = llamaLendMarketByController(lender, chainId, controller);
|
|
390
|
+
if (!m?.supportsLeverage) return false;
|
|
391
|
+
const cfg = llamaLendConfigFor(lender, chainId);
|
|
392
|
+
return Boolean(cfg?.leverageZapOdos || cfg?.leverageZap1inch);
|
|
393
|
+
};
|
|
394
|
+
var llamaLendApiBaseUrl = (lender, chainId) => llamaLendConfigFor(lender, chainId)?.apiBaseUrl || "https://api.curve.finance";
|
|
342
395
|
var usddConfig = () => getGlobalData2()?.usddConfig;
|
|
343
396
|
var usddConfigFor = (lender, chainId) => getGlobalData2()?.usddConfig?.[lender]?.[String(chainId)];
|
|
344
397
|
var usddMarkets = () => getGlobalData2()?.usddMarkets;
|
|
@@ -349,6 +402,160 @@ var usddLendersByChain = (chainId) => {
|
|
|
349
402
|
const chain = String(chainId);
|
|
350
403
|
return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.vat);
|
|
351
404
|
};
|
|
405
|
+
var frankencoinConfig = () => getGlobalData2()?.frankencoinConfig;
|
|
406
|
+
var frankencoinConfigFor = (lender, chainId) => getGlobalData2()?.frankencoinConfig?.[lender]?.[String(chainId)];
|
|
407
|
+
var frankencoinMarkets = () => getGlobalData2()?.frankencoinMarkets;
|
|
408
|
+
var frankencoinChainData = (lender, chainId) => getGlobalData2()?.frankencoinMarkets?.[lender]?.[String(chainId)];
|
|
409
|
+
var frankencoinMarketByPosition = (lender, chainId, position) => {
|
|
410
|
+
const lower = position.toLowerCase();
|
|
411
|
+
return frankencoinChainData(lender, chainId)?.markets?.find((m) => m.position.toLowerCase() === lower);
|
|
412
|
+
};
|
|
413
|
+
var frankencoinLendersByChain = (chainId) => {
|
|
414
|
+
const cfg = getGlobalData2()?.frankencoinConfig ?? {};
|
|
415
|
+
const chain = String(chainId);
|
|
416
|
+
return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.mintingHub);
|
|
417
|
+
};
|
|
418
|
+
var RESUPPLY_ETHEREUM_CONFIG = {
|
|
419
|
+
registry: "0x10101010E0C3171D894B71B3400668aF311e7D94",
|
|
420
|
+
reusd: "0x57aB1E0003F623289CD798B1824Be09a793e4Bec",
|
|
421
|
+
utilities: "0x5f896C250DA6b462873813ceEc47F3e4D8CBA464",
|
|
422
|
+
curveSwapper: "0x042f48346be16Be381190a7397A80808243f3b2e",
|
|
423
|
+
ensoSwapper: "0x181c98113ce60BA75A0f72d8901Eb17e5065043D",
|
|
424
|
+
lifiSwapper: "0x597Db76794c75E588D3a70534FB34B7780941fCe",
|
|
425
|
+
redemptionHandler: "0x5eeB063d0abefBBc78F576E28d762a16b637A025",
|
|
426
|
+
liquidationHandler: "0x88888888c227c36401493Ed9F3e3Dcc3800B2634",
|
|
427
|
+
insurancePool: "0x00000000efe883b3304aFf71eaCf72Dbc3e1b577",
|
|
428
|
+
sreusd: "0x557AB1e003951A73c12D16F0fEA8490E39C33C35",
|
|
429
|
+
priceWatcher: "0xAaaa0013e2ec451F76816d1e0a02ABA596dd9251",
|
|
430
|
+
debtDecimals: 18
|
|
431
|
+
};
|
|
432
|
+
var RESUPPLY_BUILTIN = {
|
|
433
|
+
RESUPPLY: { "1": RESUPPLY_ETHEREUM_CONFIG }
|
|
434
|
+
};
|
|
435
|
+
var resupplyConfig = () => getGlobalData2()?.resupplyConfig;
|
|
436
|
+
var resupplyConfigFor = (lender, chainId) => {
|
|
437
|
+
const published = getGlobalData2()?.resupplyConfig?.[lender]?.[String(chainId)];
|
|
438
|
+
if (published?.registry) return published;
|
|
439
|
+
return RESUPPLY_BUILTIN[lender]?.[String(chainId)];
|
|
440
|
+
};
|
|
441
|
+
var resupplyLendersByChain = (chainId) => {
|
|
442
|
+
const chain = String(chainId);
|
|
443
|
+
const cfg = getGlobalData2()?.resupplyConfig ?? {};
|
|
444
|
+
const keys = /* @__PURE__ */ new Set();
|
|
445
|
+
for (const lender of Object.keys(cfg)) {
|
|
446
|
+
if (cfg[lender]?.[chain]?.registry) keys.add(lender);
|
|
447
|
+
}
|
|
448
|
+
for (const lender of Object.keys(RESUPPLY_BUILTIN)) {
|
|
449
|
+
if (RESUPPLY_BUILTIN[lender]?.[chain]?.registry) keys.add(lender);
|
|
450
|
+
}
|
|
451
|
+
return [...keys];
|
|
452
|
+
};
|
|
453
|
+
var CURVANCE_MONAD_CONFIG = {
|
|
454
|
+
centralRegistry: "0x1310f352f1389969Ece6741671c4B919523912fF",
|
|
455
|
+
oracleManager: "0x65ADF8aE8420A58278De066593E6fF1713A137c5",
|
|
456
|
+
protocolReader: "0xC5E6DD26095Cc1fa2369f7885dF263e150228D8b",
|
|
457
|
+
optimizerReader: "0x821a4a2Be28888917106B3A628c8edaffEbF2e2F",
|
|
458
|
+
optimizers: {
|
|
459
|
+
// `hyAUSD` — 6-dec shares over AUSD; itself collateral in 2 markets.
|
|
460
|
+
hyAUSD: "0xaD663aC84052b52BE4ed1b27BA416505e84a00Bf"
|
|
461
|
+
},
|
|
462
|
+
// Only KyberSwap's MetaAggregationRouterV2 has a registered checker on Monad
|
|
463
|
+
// (2026-08). 1inch / Odos / OogaBooga all return the zero address even
|
|
464
|
+
// though checker contracts for them exist in the Curvance repo — registering
|
|
465
|
+
// OogaBooga is a single DAO call. Probe live before relying on any of this.
|
|
466
|
+
swapTargets: {
|
|
467
|
+
kyberswap: "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5"
|
|
468
|
+
},
|
|
469
|
+
positionManagers: {
|
|
470
|
+
// muBOND | AUSD
|
|
471
|
+
"0x830D40CDFdc494BC1A2729a7381bfCe44326c944": { simplePositionManager: "0xA3d212D4705caf42C35d6EaE0C85E94c4cd329E4" },
|
|
472
|
+
// loAZND | AUSD
|
|
473
|
+
"0x7C822B093A116654F824Ec2A35CD23a3749E4f90": { simplePositionManager: "0x9e4638fd67bE15360bfebC5e07AECfF33dfda917" },
|
|
474
|
+
// ezETH | WETH
|
|
475
|
+
"0x83840d837E7A3E00bBb0B8501E60E989A8987c37": { simplePositionManager: "0xd8d3E46E52C3AB8FD98D04143984C763B4Bbc584" },
|
|
476
|
+
// shMON | WMON
|
|
477
|
+
"0xE1C24B2E93230FBe33d32Ba38ECA3218284143e2": {
|
|
478
|
+
nativeVaultPositionManager: "0x2fAA792502aC5a329DcCc1580C5308fCc0a772fe",
|
|
479
|
+
simplePositionManager: "0x7E8705a164DA7Cc5a4119C750b1F79837AD89D5E"
|
|
480
|
+
},
|
|
481
|
+
// aprMON | WMON
|
|
482
|
+
"0x5EA0a1Cf3501C954b64902c5e92100b8A2CaB1Ac": {
|
|
483
|
+
nativeVaultPositionManager: "0x82f88A810E86a730699231F5fBF5686c643467C8",
|
|
484
|
+
simplePositionManager: "0x669786FF3da7544c98FE74eE1006D787118d1770"
|
|
485
|
+
},
|
|
486
|
+
// sMON | WMON
|
|
487
|
+
"0xe5970cDB1916B2cCF6185C86C174EEE2d330D05B": { simplePositionManager: "0x3d6ba6C90E1738cb01C46E72F284C7Bd57eB11EC" },
|
|
488
|
+
// sAUSD | AUSD
|
|
489
|
+
"0xBBE7A3c45aDBb16F6490767b663428c34aA341Eb": {
|
|
490
|
+
simplePositionManager: "0x491e8712885E4e0b98864F13393ced8c1a61FD57",
|
|
491
|
+
vaultPositionManager: "0xe94AC990873C3B59A417d25C1ec1398807FB41A1"
|
|
492
|
+
},
|
|
493
|
+
// earnAUSD | AUSD
|
|
494
|
+
"0xd6365555f6a697C7C295bA741100AA644cE28545": { simplePositionManager: "0xd807efC94376618B4d9CE6eAaf89607006d3B881" },
|
|
495
|
+
// WMON | AUSD
|
|
496
|
+
"0x05e70717fA8BD0F21a9F826d093d99f6Da4f1554": { simplePositionManager: "0x2619BB5Acfe51317c4C36a63578FD56148e68C74" },
|
|
497
|
+
// WMON | USDC
|
|
498
|
+
"0xa6A2A92F126b79Ee0804845ee6B52899b4491093": { simplePositionManager: "0x960c49E523e6A87282D2bC5032d0AeCb35Dc20ef" },
|
|
499
|
+
// WBTC | USDC
|
|
500
|
+
"0x01C4a0d396EFE982B1B103BE9910321d34e1aEA9": { simplePositionManager: "0x8cA51d155C07e91B206Cf11C8D52d5aB082657F6" },
|
|
501
|
+
// WETH | USDC
|
|
502
|
+
"0xb3E9E0134354cc91b7FB9F9d6C3ab0dE7854BB49": { simplePositionManager: "0x3A1B2Dc11a81Fe106eC667BaB4056fC72498ff73" },
|
|
503
|
+
// gMON | WMON
|
|
504
|
+
"0xb00aFF53a4Df2b4E2f97a3d9ffaDb55564C8E42F": { simplePositionManager: "0x77B90040E6dFE8A62293Cd91CAeE35296EC266Ee" },
|
|
505
|
+
// syzUSD | AUSD
|
|
506
|
+
"0x90fc1A4abC4ee5f8a9560dE069067D9606d2909C": { simplePositionManager: "0x9352318f75e8Cb7C47C5B086D56d3e6D761b7419" },
|
|
507
|
+
// wsrUSD | AUSD
|
|
508
|
+
"0x627a15859d09C1550e2934991AA95aFc6896e3Ef": { simplePositionManager: "0xF8613b7b4e8bFb5E7155fb4D3bc9f9B93d895C31" },
|
|
509
|
+
// YZM | AUSD
|
|
510
|
+
"0x4409e2161B6f9A25ACbC471a37390654Ed272249": { simplePositionManager: "0xb85dEf309F7eEEb8f581909c7afB623dDf59AdD9" },
|
|
511
|
+
// vUSD | AUSD
|
|
512
|
+
"0x2DB9AB1bB00d7000b21A2EbcE7D1a9b91F351E72": { simplePositionManager: "0xCb1709fAF66A73b4f6026b531Bef9AF971368f50" },
|
|
513
|
+
// eBTC | WBTC
|
|
514
|
+
"0xBc4cd7bbd8d38027A88838B88BA04561FA778C35": { simplePositionManager: "0x5e339724818c4b46E1Bc6966FeB4ea2924Ca17D9" },
|
|
515
|
+
// savUSD | USDC
|
|
516
|
+
"0x38104e87Eb96ce5ef1C23a06878dB0D657B4a699": { simplePositionManager: "0x7B918FF5EDc44B29ced4d3dc52Fb8b859025325c" },
|
|
517
|
+
// savUSD | AUSD
|
|
518
|
+
"0x4B0a39eCC3e5A5dA3ce6D492D4D255cD1F0209F7": { simplePositionManager: "0xb8F6f480E645dBa96Df9eD3948D900725bA9e9Ec" }
|
|
519
|
+
}
|
|
520
|
+
};
|
|
521
|
+
var CURVANCE_BUILTIN = {
|
|
522
|
+
CURVANCE: { "143": CURVANCE_MONAD_CONFIG }
|
|
523
|
+
};
|
|
524
|
+
var curvanceConfig = () => getGlobalData2()?.curvanceConfig;
|
|
525
|
+
var curvanceConfigFor = (lender, chainId) => {
|
|
526
|
+
const published = getGlobalData2()?.curvanceConfig?.[lender]?.[String(chainId)];
|
|
527
|
+
if (published?.centralRegistry) return published;
|
|
528
|
+
return CURVANCE_BUILTIN[lender]?.[String(chainId)];
|
|
529
|
+
};
|
|
530
|
+
var curvanceLendersByChain = (chainId) => {
|
|
531
|
+
const chain = String(chainId);
|
|
532
|
+
const cfg = getGlobalData2()?.curvanceConfig ?? {};
|
|
533
|
+
const keys = /* @__PURE__ */ new Set();
|
|
534
|
+
for (const lender of Object.keys(cfg)) {
|
|
535
|
+
if (cfg[lender]?.[chain]?.centralRegistry) keys.add(lender);
|
|
536
|
+
}
|
|
537
|
+
for (const lender of Object.keys(CURVANCE_BUILTIN)) {
|
|
538
|
+
if (CURVANCE_BUILTIN[lender]?.[chain]?.centralRegistry) keys.add(lender);
|
|
539
|
+
}
|
|
540
|
+
return [...keys];
|
|
541
|
+
};
|
|
542
|
+
var curvancePositionManagersFor = (lender, chainId, marketManager) => {
|
|
543
|
+
const map = curvanceConfigFor(lender, chainId)?.positionManagers;
|
|
544
|
+
if (!map || !marketManager) return void 0;
|
|
545
|
+
const direct = map[marketManager];
|
|
546
|
+
if (direct) return direct;
|
|
547
|
+
const target = marketManager.toLowerCase();
|
|
548
|
+
for (const key of Object.keys(map)) {
|
|
549
|
+
if (key.toLowerCase() === target) return map[key];
|
|
550
|
+
}
|
|
551
|
+
return void 0;
|
|
552
|
+
};
|
|
553
|
+
var curvancePositionManager = (lender, chainId, marketManager, kind) => {
|
|
554
|
+
const pms = curvancePositionManagersFor(lender, chainId, marketManager);
|
|
555
|
+
if (!pms) return void 0;
|
|
556
|
+
if (kind) return pms[kind];
|
|
557
|
+
return pms.simplePositionManager ?? pms.vaultPositionManager ?? pms.nativeVaultPositionManager ?? pms.pendlePtPositionManager;
|
|
558
|
+
};
|
|
352
559
|
var compoundV3Bulker = () => getGlobalData2()?.compoundV3Bulker;
|
|
353
560
|
var eulerConfigs = () => getGlobalData2()?.eulerConfigs;
|
|
354
561
|
var eulerVaults = () => getGlobalData2()?.eulerVaults;
|
|
@@ -490,6 +697,17 @@ function parseTermMaxLenderKey(lenderKey) {
|
|
|
490
697
|
if (!match) return void 0;
|
|
491
698
|
return { marketAddrLower: "0x" + match[1].toLowerCase() };
|
|
492
699
|
}
|
|
700
|
+
function llamaLendLenderKey(controller) {
|
|
701
|
+
if (!controller || !controller.startsWith("0x") || controller.length !== 42) {
|
|
702
|
+
throw new Error(`llamaLendLenderKey: invalid controller address ${controller}`);
|
|
703
|
+
}
|
|
704
|
+
return `LLAMALEND_${controller.slice(2).toUpperCase()}`;
|
|
705
|
+
}
|
|
706
|
+
function parseLlamaLendLenderKey(lenderKey) {
|
|
707
|
+
const match = lenderKey.match(/^LLAMALEND_([0-9A-Fa-f]{40})$/);
|
|
708
|
+
if (!match) return void 0;
|
|
709
|
+
return { controllerAddrLower: "0x" + match[1].toLowerCase() };
|
|
710
|
+
}
|
|
493
711
|
|
|
494
712
|
// src/tokens.ts
|
|
495
713
|
var getListUrl = (chainId) => `https://raw.githubusercontent.com/1delta-DAO/token-lists/main/${chainId}.json`;
|
|
@@ -522,4 +740,4 @@ async function fetchMainTokensMap() {
|
|
|
522
740
|
return await data.json();
|
|
523
741
|
}
|
|
524
742
|
|
|
525
|
-
export { GEARBOX_ACCOUNT_COMPRESSOR_V310, aaveOracles, aaveOraclesConfig, aavePools, aaveReserves, aaveTokens, aaveV4Oracles, aaveV4Peripherals, aaveV4SpokeLenderKey, aaveV4Spokes, aaveWethGateway, chainLogoURI, chains, compoundV2Oracles, compoundV2OraclesConfig, compoundV2Pools, compoundV2Reserves, compoundV2TokenArray, compoundV2Tokens, compoundV3BaseData, compoundV3Bulker, compoundV3OraclesData, compoundV3Pools, compoundV3Reserves, dolomiteChains, dolomiteConfigs, dolomiteEmode, dolomiteMarketIdByToken, eulerConfigs, eulerVaults, exactlyConfig, exactlyMarketByAddress, exactlyMarketByAsset, exactlyMarkets, exactlyMarketsByChain, fetchMainTokensMap, fetchTokenList, fetchTokenListFile, fetchTokenLists, findAaveV4PositionManager, fluidChains, fluidResolvers, fluidVaultEntries, fluidVaults, gearboxAccountCompressor, gearboxAddressProviderV310, gearboxBotListV3, gearboxChains, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxResolvers, gearboxV3LenderKey, getAaveV4GatewayAddresses, getAaveV4PositionManagers, getAaveV4SpokeEntry, getAaveV4SpokePeripherals, getChainEntries, getSiloV2MarketEntry, getSiloV3MarketEntry, initConfig, initializeChainData, initializeLenderData, inverseChainData, inverseConfig, inverseConfigFor, inverseLendersByChain, inverseMarketByAddress, inverseMarkets, liquityBranchByIndex, liquityBranchByTroveManager, liquityBranchesByChain, liquityConfig, liquityConfigFor, liquityLendersByChain, liquityMarkets, listaNativeProvider, midnightApiBaseOverride, midnightConfig, midnightMarketById, midnightMarkets, midnightMarketsByChain, morphoBundler3, morphoOracles, morphoPools, morphoTypeMarkets, morphoTypeOracles, morphoTypeVaults, parseAaveV4SpokeLenderKey, parseGearboxV3LenderKey, parseSiloV2LenderKey, parseSiloV3LenderKey, parseTermMaxLenderKey, resolveMidnightApiBase, resolveTermApiBase, riverChainData, riverConfig, riverConfigFor, riverLendersByChain, riverMarketByIndex, riverMarkets, setMidnightApiBase, setTermApiBase, siloMarkets, siloMarketsV3, siloPeripherals, siloPeripheralsV3, siloV2LenderKey, siloV3LenderKey, tellerConfig, tellerConfigByChain, tellerPoolByAddress, tellerPools, tellerPoolsByChain, termApiBaseOverride, termConfig, termMarketById, termMarkets, termMarketsByChain, termMaxApiBaseUrl, termMaxChainIds, termMaxConfig, termMaxConfigByChain, termMaxLenderKey, usddChainData, usddConfig, usddConfigFor, usddLendersByChain, usddMarketByIlk, usddMarkets };
|
|
743
|
+
export { CURVANCE_MONAD_CONFIG, GEARBOX_ACCOUNT_COMPRESSOR_V310, RESUPPLY_ETHEREUM_CONFIG, aaveOracles, aaveOraclesConfig, aavePools, aaveReserves, aaveTokens, aaveV4Oracles, aaveV4Peripherals, aaveV4SpokeLenderKey, aaveV4Spokes, aaveWethGateway, chainLogoURI, chains, compoundV2Oracles, compoundV2OraclesConfig, compoundV2Pools, compoundV2Reserves, compoundV2TokenArray, compoundV2Tokens, compoundV3BaseData, compoundV3Bulker, compoundV3OraclesData, compoundV3Pools, compoundV3Reserves, curvanceConfig, curvanceConfigFor, curvanceLendersByChain, curvancePositionManager, curvancePositionManagersFor, dolomiteChains, dolomiteConfigs, dolomiteEmode, dolomiteMarketIdByToken, eulerConfigs, eulerVaults, exactlyConfig, exactlyMarketByAddress, exactlyMarketByAsset, exactlyMarkets, exactlyMarketsByChain, fetchMainTokensMap, fetchTokenList, fetchTokenListFile, fetchTokenLists, findAaveV4PositionManager, fluidChains, fluidResolvers, fluidVaultEntries, fluidVaults, frankencoinChainData, frankencoinConfig, frankencoinConfigFor, frankencoinLendersByChain, frankencoinMarketByPosition, frankencoinMarkets, gearboxAccountCompressor, gearboxAddressProviderV310, gearboxBotListV3, gearboxChains, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxResolvers, gearboxV3LenderKey, getAaveV4GatewayAddresses, getAaveV4PositionManagers, getAaveV4SpokeEntry, getAaveV4SpokePeripherals, getChainEntries, getSiloV2MarketEntry, getSiloV3MarketEntry, initConfig, initializeChainData, initializeLenderData, inverseChainData, inverseConfig, inverseConfigFor, inverseLendersByChain, inverseMarketByAddress, inverseMarkets, liquityBranchByIndex, liquityBranchByTroveManager, liquityBranchesByChain, liquityConfig, liquityConfigFor, liquityLendersByChain, liquityMarkets, listaNativeProvider, llamaLendApiBaseUrl, llamaLendChainData, llamaLendConfig, llamaLendConfigFor, llamaLendLenderKey, llamaLendLendersByChain, llamaLendLeverageZap, llamaLendMarketByController, llamaLendMarketByVault, llamaLendMarkets, llamaLendSupportsDelegation, llamaLendSupportsLeverage, midnightApiBaseOverride, midnightConfig, midnightMarketById, midnightMarkets, midnightMarketsByChain, morphoBundler3, morphoOracles, morphoPools, morphoTypeMarkets, morphoTypeOracles, morphoTypeVaults, parseAaveV4SpokeLenderKey, parseGearboxV3LenderKey, parseLlamaLendLenderKey, parseSiloV2LenderKey, parseSiloV3LenderKey, parseTermMaxLenderKey, resolveMidnightApiBase, resolveTermApiBase, resupplyConfig, resupplyConfigFor, resupplyLendersByChain, riverChainData, riverConfig, riverConfigFor, riverLendersByChain, riverMarketByIndex, riverMarkets, setMidnightApiBase, setTermApiBase, siloMarkets, siloMarketsV3, siloPeripherals, siloPeripheralsV3, siloV2LenderKey, siloV3LenderKey, tellerConfig, tellerConfigByChain, tellerPoolByAddress, tellerPools, tellerPoolsByChain, termApiBaseOverride, termConfig, termMarketById, termMarkets, termMarketsByChain, termMaxApiBaseUrl, termMaxChainIds, termMaxConfig, termMaxConfigByChain, termMaxLenderKey, usddChainData, usddConfig, usddConfigFor, usddLendersByChain, usddMarketByIlk, usddMarkets };
|
package/dist/lending.d.ts
CHANGED
|
@@ -208,7 +208,10 @@ export type ExactlyConfigChain = {
|
|
|
208
208
|
marketETHRouter?: string | null;
|
|
209
209
|
/** The WETH Market the ETH router wraps (optional convenience). */
|
|
210
210
|
wethMarket?: string | null;
|
|
211
|
-
/**
|
|
211
|
+
/** Debt-rollover periphery — Optimism `DebtManager` (all three roll
|
|
212
|
+
* directions + leverage), Base `DebtRoller` (`rollFixed` ONLY). Same
|
|
213
|
+
* field, different deployment name per chain; consumed by the Exactly
|
|
214
|
+
* rollover builder. */
|
|
212
215
|
debtManager?: string | null;
|
|
213
216
|
/** RewardsController — EXA/OP rewards (optional, not used yet). */
|
|
214
217
|
rewardsController?: string | null;
|
|
@@ -519,6 +522,10 @@ export type InverseMarketConfig = {
|
|
|
519
522
|
collateralFactorBps: string;
|
|
520
523
|
liquidationIncentiveBps: string;
|
|
521
524
|
liquidationFactorBps: string;
|
|
525
|
+
/** Replenisher's cut of a force-replenish (1000 = 10%). Optional: older
|
|
526
|
+
* metadata snapshots predate it, and it is bot-side economics — the
|
|
527
|
+
* borrower always pays the full `DBR.replenishmentPriceBps`. */
|
|
528
|
+
replenishmentIncentiveBps?: string;
|
|
522
529
|
/** Smaller borrows revert (DOLA units, human number as string). */
|
|
523
530
|
minDebt: string;
|
|
524
531
|
/** Per-market daily borrow cap (DOLA, human number as string). */
|
|
@@ -535,6 +542,308 @@ export type InverseMarketsType = {
|
|
|
535
542
|
[chainId: string]: InverseChainData;
|
|
536
543
|
};
|
|
537
544
|
};
|
|
545
|
+
/** Per-chain Frankencoin deployment seed (hand-maintained). */
|
|
546
|
+
export type FrankencoinConfigChain = {
|
|
547
|
+
/** ZCHF — the only debt asset. */
|
|
548
|
+
zchf: string;
|
|
549
|
+
/** MintingHub V2 — clone/challenge entry point. */
|
|
550
|
+
mintingHub: string;
|
|
551
|
+
/** Equity (FPS) — first-loss tranche holding the withheld reserve. */
|
|
552
|
+
equity: string;
|
|
553
|
+
/** PositionRoller (carries a protocol-native ZCHF flash loan). */
|
|
554
|
+
roller?: string;
|
|
555
|
+
/** Leadrate module — the protocol-wide base rate. */
|
|
556
|
+
leadrate?: string;
|
|
557
|
+
/** Savings module (the savings vault leg lives in SAVINGS_REGISTRY;
|
|
558
|
+
* carried here for completeness). */
|
|
559
|
+
savings?: string;
|
|
560
|
+
/** Chainlink-shaped CHF/USD feed — required for USD normalisation. */
|
|
561
|
+
chfUsdFeed?: string;
|
|
562
|
+
/** Debt decimals (18). */
|
|
563
|
+
debtDecimals?: number;
|
|
564
|
+
/** Legacy MintingHub V1 — dead but deployed; positions carrying this hub
|
|
565
|
+
* must never reach the V2 builders. */
|
|
566
|
+
mintingHubV1?: string;
|
|
567
|
+
};
|
|
568
|
+
export type FrankencoinConfigType = {
|
|
569
|
+
[lender: string]: {
|
|
570
|
+
[chainId: string]: FrankencoinConfigChain;
|
|
571
|
+
};
|
|
572
|
+
};
|
|
573
|
+
/** One Frankencoin market (= one ORIGINAL position). */
|
|
574
|
+
export type FrankencoinMarketConfig = {
|
|
575
|
+
/** The original position contract — also the per-market key suffix
|
|
576
|
+
* (`FRANKENCOIN_<chainId>_<ADDR>`). */
|
|
577
|
+
position: string;
|
|
578
|
+
collToken: string;
|
|
579
|
+
collDecimals: number;
|
|
580
|
+
collSymbol?: string;
|
|
581
|
+
/** Owner-declared liquidation price, 36-dec scaled against the
|
|
582
|
+
* collateral's decimals. NOT an oracle quote. */
|
|
583
|
+
price: string;
|
|
584
|
+
/** ppm — risk premium on top of the hub lead rate. */
|
|
585
|
+
riskPremiumPPM: string;
|
|
586
|
+
/** ppm — withheld into the equity reserve at mint (10-40% observed). */
|
|
587
|
+
reserveContribution: string;
|
|
588
|
+
/** Minimum collateral for a clone (raw collateral units). */
|
|
589
|
+
minimumCollateral: string;
|
|
590
|
+
/** Total ZCHF this original + its clones may mint. */
|
|
591
|
+
limitForClones?: string;
|
|
592
|
+
/** Unix seconds — positions EXPIRE (forced sale after). */
|
|
593
|
+
expiration: string;
|
|
594
|
+
start?: string;
|
|
595
|
+
challengePeriod?: string;
|
|
596
|
+
/** Position version — only 2 is supported; V1 is dead. */
|
|
597
|
+
version?: number;
|
|
598
|
+
name?: string;
|
|
599
|
+
};
|
|
600
|
+
/** Generated per-chain data: the curated original-position roster. */
|
|
601
|
+
export type FrankencoinChainData = {
|
|
602
|
+
markets: FrankencoinMarketConfig[];
|
|
603
|
+
};
|
|
604
|
+
export type FrankencoinMarketsType = {
|
|
605
|
+
[lender: string]: {
|
|
606
|
+
[chainId: string]: FrankencoinChainData;
|
|
607
|
+
};
|
|
608
|
+
};
|
|
609
|
+
/** Per-chain, protocol-level (evergreen) Resupply addresses. */
|
|
610
|
+
export type ResupplyConfigChain = {
|
|
611
|
+
/** ResupplyRegistry — `getAllPairAddresses()` IS the market discovery, and
|
|
612
|
+
* `getAddress(key)` resolves every other singleton. */
|
|
613
|
+
registry: string;
|
|
614
|
+
/** reUSD — the only debt asset. */
|
|
615
|
+
reusd: string;
|
|
616
|
+
/** Utilities lens — `getPairInterestRate`, `getUnderlyingSupplyRate`,
|
|
617
|
+
* `getSwapRouteAmountOut`, `isSolventAfterLeverage`. Optional, but every
|
|
618
|
+
* rate and every leverage pre-flight is far cheaper with it. */
|
|
619
|
+
utilities?: string | null;
|
|
620
|
+
/** The built-in Curve `Swapper` — every leg for every pair is already
|
|
621
|
+
* registered on it, so a leverage route needs no aggregator at all. This
|
|
622
|
+
* is THE DEFAULT leverage swapper. */
|
|
623
|
+
curveSwapper?: string | null;
|
|
624
|
+
/** `RouterSwapper` wrapping the Enso router. Whitelisted on every pair, and
|
|
625
|
+
* it executes ARBITRARY router calldata packed into the `address[] path` —
|
|
626
|
+
* which is what makes aggregator-quoted looping possible at all. */
|
|
627
|
+
ensoSwapper?: string | null;
|
|
628
|
+
/** Same, wrapping the LI.FI Diamond. No LI.FI fetcher on our side yet. */
|
|
629
|
+
lifiSwapper?: string | null;
|
|
630
|
+
/** RedemptionHandler — the (communal) peg mechanism. Read-only for us. */
|
|
631
|
+
redemptionHandler?: string | null;
|
|
632
|
+
/** LiquidationHandler — liquidations are insurance-pool-funded, whole-position. */
|
|
633
|
+
liquidationHandler?: string | null;
|
|
634
|
+
/** InsurancePool — reUSD staked as first-loss capital. */
|
|
635
|
+
insurancePool?: string | null;
|
|
636
|
+
/** sreUSD — the savings leg (belongs to SAVINGS_REGISTRY; carried here for
|
|
637
|
+
* completeness so one config row describes the whole protocol). */
|
|
638
|
+
sreusd?: string | null;
|
|
639
|
+
/** PriceWatcher — supplies the off-peg weight the borrow rate is scaled by. */
|
|
640
|
+
priceWatcher?: string | null;
|
|
641
|
+
/** reUSD decimals (18). */
|
|
642
|
+
debtDecimals?: number;
|
|
643
|
+
/** Optional allowlist of pair addresses. When set, on-chain discovery is
|
|
644
|
+
* INTERSECTED with it; when absent (the default) every registered pair
|
|
645
|
+
* with a non-zero `borrowLimit` is published. */
|
|
646
|
+
pairAllowlist?: string[] | null;
|
|
647
|
+
};
|
|
648
|
+
export type ResupplyConfigType = {
|
|
649
|
+
[lender: string]: {
|
|
650
|
+
[chainId: string]: ResupplyConfigChain;
|
|
651
|
+
};
|
|
652
|
+
};
|
|
653
|
+
/** The Position Manager variants Curvance deploys, keyed as the app keys them. */
|
|
654
|
+
export type CurvancePositionManagers = {
|
|
655
|
+
/** Generic non-native ERC-20 legs. The common case (20 of 20 PM'd markets). */
|
|
656
|
+
simplePositionManager?: string;
|
|
657
|
+
/** ERC-4626-style collateral that is entered on leverage. */
|
|
658
|
+
vaultPositionManager?: string;
|
|
659
|
+
/** Wrapped-native collateral — unwraps / swaps into native before depositing. */
|
|
660
|
+
nativeVaultPositionManager?: string;
|
|
661
|
+
/** Pendle principal-token collateral. */
|
|
662
|
+
pendlePtPositionManager?: string;
|
|
663
|
+
};
|
|
664
|
+
/** Per-chain, protocol-level (evergreen) Curvance addresses. */
|
|
665
|
+
export type CurvanceConfigChain = {
|
|
666
|
+
/** `CentralRegistry` — `marketManagers()` IS the market discovery, and every
|
|
667
|
+
* other singleton hangs off it. The one address the provider bootstraps
|
|
668
|
+
* from. */
|
|
669
|
+
centralRegistry: string;
|
|
670
|
+
/** `OracleManager` — `getPrice(asset, inUSD, getLower)`. Prices are WAD USD
|
|
671
|
+
* and carry an `errorCode` that GATES actions (see the abis header). */
|
|
672
|
+
oracleManager?: string;
|
|
673
|
+
/** `ProtocolReader` — `getStaticMarketData()` + `getAllDynamicState(account)`
|
|
674
|
+
* return the entire public book and one account's whole portfolio in two
|
|
675
|
+
* calls. Optional: the fetchers fall back to a plain multicall over the
|
|
676
|
+
* MarketManagers when it is absent. */
|
|
677
|
+
protocolReader?: string;
|
|
678
|
+
/** `OptimizerReader` — lens for the LendingOptimizer ("Vaults") surface. */
|
|
679
|
+
optimizerReader?: string;
|
|
680
|
+
/**
|
|
681
|
+
* Native-leverage Position Managers, keyed by MARKET MANAGER address
|
|
682
|
+
* (lowercase-insensitive on read). A market absent here has no native
|
|
683
|
+
* leverage — which is a real state, not a gap: 5 of 25 markets on Monad
|
|
684
|
+
* have none registered.
|
|
685
|
+
*/
|
|
686
|
+
positionManagers?: {
|
|
687
|
+
[marketManager: string]: CurvancePositionManagers;
|
|
688
|
+
};
|
|
689
|
+
/**
|
|
690
|
+
* `LendingOptimizer` vaults by symbol. Their shares are collateralisable
|
|
691
|
+
* through `LendingOptimizerShareCToken`, which is why `hyAUSD` appears as
|
|
692
|
+
* collateral in two markets.
|
|
693
|
+
*/
|
|
694
|
+
optimizers?: {
|
|
695
|
+
[symbol: string]: string;
|
|
696
|
+
};
|
|
697
|
+
/**
|
|
698
|
+
* Swap targets with a registered `externalCalldataChecker`, i.e. the ONLY
|
|
699
|
+
* routers the native leverage path will accept. Cached here as a hint; the
|
|
700
|
+
* mapping is DAO-mutable in both directions, so a builder must still probe
|
|
701
|
+
* `externalCalldataChecker(target)` live and fail closed.
|
|
702
|
+
*/
|
|
703
|
+
swapTargets?: {
|
|
704
|
+
[aggregator: string]: string;
|
|
705
|
+
};
|
|
706
|
+
/** Optional allowlist of MarketManager addresses. When set, on-chain
|
|
707
|
+
* discovery is INTERSECTED with it; absent (the default) publishes every
|
|
708
|
+
* listed market. */
|
|
709
|
+
marketAllowlist?: string[] | null;
|
|
710
|
+
};
|
|
711
|
+
export type CurvanceConfigType = {
|
|
712
|
+
[lender: string]: {
|
|
713
|
+
[chainId: string]: CurvanceConfigChain;
|
|
714
|
+
};
|
|
715
|
+
};
|
|
716
|
+
/** Per-chain LlamaLend deployment seed (hand-maintained). */
|
|
717
|
+
export type LlamaLendConfigChain = {
|
|
718
|
+
/** v1 `OneWayLendingFactory` — parallel index getters. Absent on chains
|
|
719
|
+
* that only ever got v2. */
|
|
720
|
+
oneWayFactory?: string;
|
|
721
|
+
/** v2 `LendFactory` — struct-returning `markets(i)`; `version()` = `2.0.0`. */
|
|
722
|
+
lendFactory?: string;
|
|
723
|
+
/** v2 LendConfigurator (admin surface; carried for completeness). */
|
|
724
|
+
configurator?: string;
|
|
725
|
+
/**
|
|
726
|
+
* Curve's deployed v1 LeverageZap for this chain, and the aggregator router
|
|
727
|
+
* it is hard-wired to. THIS is how leverage works here — we do not deploy a
|
|
728
|
+
* callbacker.
|
|
729
|
+
*
|
|
730
|
+
* The zap's router is an IMMUTABLE with no allowlist, and `callback_bytes`
|
|
731
|
+
* is forwarded to it verbatim, so arbitrary aggregator calldata is already
|
|
732
|
+
* permitted. Two are deployed per chain (Odos and 1inch); pick whichever
|
|
733
|
+
* aggregator is quoting, and ALWAYS check the quote's target against
|
|
734
|
+
* `*Router` before encoding — the zap forwards mismatched calldata to the
|
|
735
|
+
* wrong contract rather than rejecting it.
|
|
736
|
+
*/
|
|
737
|
+
leverageZapOdos?: string;
|
|
738
|
+
leverageZapOdosRouter?: string;
|
|
739
|
+
leverageZap1inch?: string;
|
|
740
|
+
leverageZap1inchRouter?: string;
|
|
741
|
+
/**
|
|
742
|
+
* Lowest `factoryIndex` the zaps accept — markets below it were deployed
|
|
743
|
+
* from a blueprint the zap does not recognise. 9 on Ethereum and Arbitrum,
|
|
744
|
+
* 0 on Optimism. This is a WIDER gate than delegation: 84.9% of borrows
|
|
745
|
+
* qualify, including markets that are not delegation-capable, because
|
|
746
|
+
* leverage is EOA-direct and needs no grant.
|
|
747
|
+
*/
|
|
748
|
+
leverageStartId?: number;
|
|
749
|
+
/**
|
|
750
|
+
* The crvUSD mint (CDP) factory, when the chain's zap indexes it as
|
|
751
|
+
* `factoryId = 1`. Present on Ethereum only. Recorded because the SAME zap
|
|
752
|
+
* serves those markets — see LLAMALEND_PLAN.md.
|
|
753
|
+
*/
|
|
754
|
+
crvUsdFactory?: string;
|
|
755
|
+
/** Curve data API base. Overridable so a self-hosted indexer can be
|
|
756
|
+
* swapped in; the default serves every chain and both generations from
|
|
757
|
+
* one call. */
|
|
758
|
+
apiBaseUrl?: string | null;
|
|
759
|
+
/** The chain's slug in the Curve API's `blockchainId` field
|
|
760
|
+
* (`ethereum` / `optimism` / `arbitrum` / `fraxtal` / `sonic`). */
|
|
761
|
+
apiChainSlug?: string;
|
|
762
|
+
};
|
|
763
|
+
export type LlamaLendConfigType = {
|
|
764
|
+
[lender: string]: {
|
|
765
|
+
[chainId: string]: LlamaLendConfigChain;
|
|
766
|
+
};
|
|
767
|
+
};
|
|
768
|
+
/** One LlamaLend market (= one Controller). */
|
|
769
|
+
export type LlamaLendMarketConfig = {
|
|
770
|
+
/** Controller contract — also the per-market key suffix
|
|
771
|
+
* (`LLAMALEND_<CONTROLLER_ADDR>`). */
|
|
772
|
+
controller: string;
|
|
773
|
+
/** ERC-4626 vault — the lender side. TRAP: shares run ~1000x the asset
|
|
774
|
+
* scale (`DEAD_SHARES`), so never assume 1:1. */
|
|
775
|
+
vault: string;
|
|
776
|
+
/** LLAMMA. MUST be excluded from any leverage swap route — the Controller
|
|
777
|
+
* asserts the AMM's band state is unchanged across a callback. */
|
|
778
|
+
amm: string;
|
|
779
|
+
collateralToken: string;
|
|
780
|
+
collateralDecimals: number;
|
|
781
|
+
collateralSymbol?: string;
|
|
782
|
+
borrowedToken: string;
|
|
783
|
+
borrowedDecimals: number;
|
|
784
|
+
borrowedSymbol?: string;
|
|
785
|
+
monetaryPolicy: string;
|
|
786
|
+
priceOracle?: string;
|
|
787
|
+
/** 1 = `oneway` (v1, `*_extended` leverage), 2 = `oneway-v2` (v2, callbacker
|
|
788
|
+
* folded into the base functions). Branch every encoder on this. */
|
|
789
|
+
version: 1 | 2;
|
|
790
|
+
/**
|
|
791
|
+
* Whether this Controller carries the boolean delegation grant
|
|
792
|
+
* (`approve(spender, allow)` + `_for` on the writes).
|
|
793
|
+
*
|
|
794
|
+
* PER-MARKET, not per-protocol: only newer-blueprint controllers have it
|
|
795
|
+
* (48 of 98 markets at 2026-08, and 0 of 22 on Arbitrum). Derived by the
|
|
796
|
+
* metadata generator from a runtime-bytecode selector scan, because an
|
|
797
|
+
* `eth_call` probe cannot distinguish "no such method" from a node hiccup
|
|
798
|
+
* on most public RPCs. FAIL CLOSED — treat `undefined` as `false`.
|
|
799
|
+
*/
|
|
800
|
+
supportsDelegation: boolean;
|
|
801
|
+
/** Band-geometry parameter `A` from the AMM. With `loanDiscount` and the
|
|
802
|
+
* chosen `N` this fixes the effective collateral factor. */
|
|
803
|
+
ammA: string;
|
|
804
|
+
/** WAD haircut used when sizing a loan. */
|
|
805
|
+
loanDiscount: string;
|
|
806
|
+
/** WAD hard-liquidation bonus (applies only BELOW the whole band range —
|
|
807
|
+
* inside it the position soft-liquidates with no penalty). */
|
|
808
|
+
liquidationDiscount: string;
|
|
809
|
+
/**
|
|
810
|
+
* The market's index in its factory — `controllers(i)`. Doubles as the
|
|
811
|
+
* `controller_id` the leverage zap's `callback_args` requires, so it is
|
|
812
|
+
* mandatory for any leveraged encode. The Curve API exposes it as the
|
|
813
|
+
* numeric suffix of `id` (`oneway-41`).
|
|
814
|
+
*/
|
|
815
|
+
factoryIndex: number;
|
|
816
|
+
/**
|
|
817
|
+
* Whether Curve's v1 leverage zap accepts this market
|
|
818
|
+
* (`factoryIndex >= leverageStartId`, and v1 only — v2 markets live in a
|
|
819
|
+
* factory the zap does not index). Independent of `supportsDelegation`.
|
|
820
|
+
*/
|
|
821
|
+
supportsLeverage: boolean;
|
|
822
|
+
/** Band count offered by default in the UI (Curve's own default is 10).
|
|
823
|
+
* There is no single LTV — the collateral factor is a function of N — so
|
|
824
|
+
* public data reports `collateralFactor` at this N and exposes the rest
|
|
825
|
+
* of the curve alongside. */
|
|
826
|
+
defaultBands?: number;
|
|
827
|
+
/** Monetary-policy family: `semilog` (v1) or `hyperbolic` (v2). The
|
|
828
|
+
* `hyperbolic-dynamic` variant pulls its target rate from an external
|
|
829
|
+
* rate calculator tracking a yield-bearing asset, so its curve moves
|
|
830
|
+
* under a cache — never serve it from stale params. */
|
|
831
|
+
rateModel?: 'semilog' | 'hyperbolic' | 'hyperbolic-dynamic';
|
|
832
|
+
/** Gauge (CRV emissions on the vault side), v1 only. */
|
|
833
|
+
gauge?: string | null;
|
|
834
|
+
/** v2 only: 0 DISABLES borrowing. A fresh v2 market looks live but is not. */
|
|
835
|
+
borrowCap?: string;
|
|
836
|
+
name?: string;
|
|
837
|
+
};
|
|
838
|
+
/** Generated per-chain data: the curated market roster. */
|
|
839
|
+
export type LlamaLendChainData = {
|
|
840
|
+
markets: LlamaLendMarketConfig[];
|
|
841
|
+
};
|
|
842
|
+
export type LlamaLendMarketsType = {
|
|
843
|
+
[lender: string]: {
|
|
844
|
+
[chainId: string]: LlamaLendChainData;
|
|
845
|
+
};
|
|
846
|
+
};
|
|
538
847
|
/** One USDD PSM (1:1 stable swap module; NOT a lending market). */
|
|
539
848
|
export type UsddPsmConfig = {
|
|
540
849
|
ilk: string;
|
|
@@ -1032,7 +1341,7 @@ export type AaveV4PeripheralsType = {
|
|
|
1032
1341
|
[chainId: string]: AaveV4ChainPeripherals;
|
|
1033
1342
|
};
|
|
1034
1343
|
/** Override datas used in the SDK - works across all module instances */
|
|
1035
|
-
export declare function initializeLenderData({ aaveTokensOverride, aavePoolsOverride, aaveOraclesOverride, compoundV2OraclesOverride, compoundV3OraclesDataOverride, compoundV3PoolsOverride, compoundV3BaseDataOverride, morphoPoolsOverride, compoundV2TokensOverride, compoundV2TokenArrayOverride, compoundV2PoolsOverride, initConfigOverride, aaveReservesOverride, compoundV3ReservesOverride, compoundV2ReservesOverride, morphoOraclesOverride, morphoTypeOraclesOverride, morphoTypeMarketsOverride, morphoTypeVaultsOverride, aaveOraclesConfigOverride, compoundV2OraclesConfigOverride, aaveWethGatewayOverride, morphoBundler3Override, listaNativeProviderOverride, midnightConfigOverride, midnightMarketsOverride, termConfigOverride, termMarketsOverride, exactlyConfigOverride, exactlyMarketsOverride, tellerConfigOverride, tellerPoolsOverride, liquityConfigOverride, liquityMarketsOverride, riverConfigOverride, riverMarketsOverride, inverseConfigOverride, termMaxConfigOverride, inverseMarketsOverride, usddConfigOverride, usddMarketsOverride, compoundV3BulkerOverride, eulerConfigsOverride, eulerVaultsOverride, dolomiteConfigsOverride, dolomiteEmodeOverride, aaveV4SpokesOverride, aaveV4OraclesOverride, aaveV4PeripheralsOverride, siloMarketsOverride, siloPeripheralsOverride, siloMarketsV3Override, siloPeripheralsV3Override, fluidResolversOverride, fluidVaultsOverride, gearboxResolversOverride, }: {
|
|
1344
|
+
export declare function initializeLenderData({ aaveTokensOverride, aavePoolsOverride, aaveOraclesOverride, compoundV2OraclesOverride, compoundV3OraclesDataOverride, compoundV3PoolsOverride, compoundV3BaseDataOverride, morphoPoolsOverride, compoundV2TokensOverride, compoundV2TokenArrayOverride, compoundV2PoolsOverride, initConfigOverride, aaveReservesOverride, compoundV3ReservesOverride, compoundV2ReservesOverride, morphoOraclesOverride, morphoTypeOraclesOverride, morphoTypeMarketsOverride, morphoTypeVaultsOverride, aaveOraclesConfigOverride, compoundV2OraclesConfigOverride, aaveWethGatewayOverride, morphoBundler3Override, listaNativeProviderOverride, midnightConfigOverride, midnightMarketsOverride, termConfigOverride, termMarketsOverride, exactlyConfigOverride, exactlyMarketsOverride, tellerConfigOverride, tellerPoolsOverride, liquityConfigOverride, liquityMarketsOverride, riverConfigOverride, riverMarketsOverride, inverseConfigOverride, termMaxConfigOverride, inverseMarketsOverride, usddConfigOverride, usddMarketsOverride, frankencoinConfigOverride, frankencoinMarketsOverride, llamaLendConfigOverride, llamaLendMarketsOverride, resupplyConfigOverride, curvanceConfigOverride, compoundV3BulkerOverride, eulerConfigsOverride, eulerVaultsOverride, dolomiteConfigsOverride, dolomiteEmodeOverride, aaveV4SpokesOverride, aaveV4OraclesOverride, aaveV4PeripheralsOverride, siloMarketsOverride, siloPeripheralsOverride, siloMarketsV3Override, siloPeripheralsV3Override, fluidResolversOverride, fluidVaultsOverride, gearboxResolversOverride, }: {
|
|
1036
1345
|
aaveTokensOverride?: AaveTokensType;
|
|
1037
1346
|
aavePoolsOverride?: AavePoolsType;
|
|
1038
1347
|
aaveOraclesOverride?: OracleMap;
|
|
@@ -1074,6 +1383,12 @@ export declare function initializeLenderData({ aaveTokensOverride, aavePoolsOver
|
|
|
1074
1383
|
inverseMarketsOverride?: InverseMarketsType;
|
|
1075
1384
|
usddConfigOverride?: UsddConfigType;
|
|
1076
1385
|
usddMarketsOverride?: UsddMarketsType;
|
|
1386
|
+
frankencoinConfigOverride?: FrankencoinConfigType;
|
|
1387
|
+
frankencoinMarketsOverride?: FrankencoinMarketsType;
|
|
1388
|
+
llamaLendConfigOverride?: LlamaLendConfigType;
|
|
1389
|
+
llamaLendMarketsOverride?: LlamaLendMarketsType;
|
|
1390
|
+
resupplyConfigOverride?: ResupplyConfigType;
|
|
1391
|
+
curvanceConfigOverride?: CurvanceConfigType;
|
|
1077
1392
|
compoundV3BulkerOverride?: CompoundV3BulkerType;
|
|
1078
1393
|
eulerConfigsOverride?: EulerConfigsType;
|
|
1079
1394
|
eulerVaultsOverride?: EulerVaultsType;
|
|
@@ -1198,6 +1513,59 @@ export declare const riverMarketByIndex: (lender: string, chainId: string | numb
|
|
|
1198
1513
|
export declare const riverLendersByChain: (chainId: string | number) => string[];
|
|
1199
1514
|
/** All Inverse lender keys with config on a chain (drives getLendersForChain). */
|
|
1200
1515
|
export declare const inverseLendersByChain: (chainId: string | number) => string[];
|
|
1516
|
+
export declare const llamaLendConfig: () => LlamaLendConfigType;
|
|
1517
|
+
/** Deployment seed for one LlamaLend lender on a chain (undefined if unloaded). */
|
|
1518
|
+
export declare const llamaLendConfigFor: (lender: string, chainId: string | number) => LlamaLendConfigChain | undefined;
|
|
1519
|
+
export declare const llamaLendMarkets: () => LlamaLendMarketsType;
|
|
1520
|
+
/** Generated chain data (curated market roster; undefined if unloaded). */
|
|
1521
|
+
export declare const llamaLendChainData: (lender: string, chainId: string | number) => LlamaLendChainData | undefined;
|
|
1522
|
+
/** Find one LlamaLend market by its Controller address. */
|
|
1523
|
+
export declare const llamaLendMarketByController: (lender: string, chainId: string | number, controller: string) => LlamaLendMarketConfig | undefined;
|
|
1524
|
+
/**
|
|
1525
|
+
* Find one LlamaLend market by its ERC-4626 VAULT address (the lender side).
|
|
1526
|
+
*
|
|
1527
|
+
* The roster is keyed on the Controller because that is the borrow surface,
|
|
1528
|
+
* but other protocols reference LlamaLend by its vault — Resupply, for
|
|
1529
|
+
* instance, custodies the vault SHARE as collateral, so the vault is the only
|
|
1530
|
+
* handle it exposes. This is the join for "which LlamaLend market does that
|
|
1531
|
+
* wrapper actually sit on top of".
|
|
1532
|
+
*/
|
|
1533
|
+
export declare const llamaLendMarketByVault: (lender: string, chainId: string | number, vault: string) => LlamaLendMarketConfig | undefined;
|
|
1534
|
+
/**
|
|
1535
|
+
* All LlamaLend lender keys with config on a chain (drives getLendersForChain).
|
|
1536
|
+
* Gated on a factory being present — a chain entry with neither factory is a
|
|
1537
|
+
* placeholder, not a live deployment.
|
|
1538
|
+
*/
|
|
1539
|
+
export declare const llamaLendLendersByChain: (chainId: string | number) => string[];
|
|
1540
|
+
/**
|
|
1541
|
+
* Whether a LlamaLend market accepts on-behalf calls (`_for` + the boolean
|
|
1542
|
+
* `approve` grant). FAILS CLOSED: an unknown market, an unloaded roster or an
|
|
1543
|
+
* explicit `false` all return `false`, because calling `approve` on an older
|
|
1544
|
+
* controller reverts with no usable reason string.
|
|
1545
|
+
*/
|
|
1546
|
+
export declare const llamaLendSupportsDelegation: (lender: string, chainId: string | number, controller: string) => boolean;
|
|
1547
|
+
/**
|
|
1548
|
+
* Resolve the leverage zap + its hard-wired router for a chain and aggregator.
|
|
1549
|
+
* `undefined` means leverage is unavailable there for that aggregator, which
|
|
1550
|
+
* callers must report rather than silently falling back — there is no Composer
|
|
1551
|
+
* route that can be funded.
|
|
1552
|
+
*/
|
|
1553
|
+
export declare const llamaLendLeverageZap: (lender: string, chainId: string | number, aggregator: "odos" | "1inch") => {
|
|
1554
|
+
zap: string;
|
|
1555
|
+
router: string;
|
|
1556
|
+
} | undefined;
|
|
1557
|
+
/**
|
|
1558
|
+
* Whether a market can be leveraged at all: it must be v1, at or above the
|
|
1559
|
+
* chain's `leverageStartId`, and the chain must have a zap deployed. Fails
|
|
1560
|
+
* closed on an unknown market.
|
|
1561
|
+
*/
|
|
1562
|
+
export declare const llamaLendSupportsLeverage: (lender: string, chainId: string | number, controller: string) => boolean;
|
|
1563
|
+
/**
|
|
1564
|
+
* Curve data API base. Read through the getter (not a module constant) for the
|
|
1565
|
+
* same reason as TermMax/Midnight: the per-request metadata re-init rewrites
|
|
1566
|
+
* `llamaLendConfig`, so a captured value goes stale.
|
|
1567
|
+
*/
|
|
1568
|
+
export declare const llamaLendApiBaseUrl: (lender: string, chainId: string | number) => string;
|
|
1201
1569
|
export declare const usddConfig: () => UsddConfigType;
|
|
1202
1570
|
/** Deployment seed for one USDD lender on a chain (undefined if unloaded). */
|
|
1203
1571
|
export declare const usddConfigFor: (lender: string, chainId: string | number) => UsddConfigChain | undefined;
|
|
@@ -1211,6 +1579,98 @@ export declare const usddMarketByIlk: (lender: string, chainId: string | number,
|
|
|
1211
1579
|
* the (empty-roster) provider still runs and reports zero markets rather
|
|
1212
1580
|
* than being invisible; the per-ilk keys only exist once metadata fills. */
|
|
1213
1581
|
export declare const usddLendersByChain: (chainId: string | number) => string[];
|
|
1582
|
+
export declare const frankencoinConfig: () => FrankencoinConfigType;
|
|
1583
|
+
/** Deployment seed for one Frankencoin lender on a chain. */
|
|
1584
|
+
export declare const frankencoinConfigFor: (lender: string, chainId: string | number) => FrankencoinConfigChain | undefined;
|
|
1585
|
+
export declare const frankencoinMarkets: () => FrankencoinMarketsType;
|
|
1586
|
+
/** Generated chain data (curated original-position roster). */
|
|
1587
|
+
export declare const frankencoinChainData: (lender: string, chainId: string | number) => FrankencoinChainData | undefined;
|
|
1588
|
+
/** Look up one market by its ORIGINAL position address (the key suffix). */
|
|
1589
|
+
export declare const frankencoinMarketByPosition: (lender: string, chainId: string | number, position: string) => FrankencoinMarketConfig | undefined;
|
|
1590
|
+
/** All Frankencoin lender keys with config on a chain (drives
|
|
1591
|
+
* getLendersForChain). Gated on the MintingHub, the one address every
|
|
1592
|
+
* flow needs. */
|
|
1593
|
+
export declare const frankencoinLendersByChain: (chainId: string | number) => string[];
|
|
1594
|
+
/**
|
|
1595
|
+
* Built-in Ethereum deployment seed for Resupply.
|
|
1596
|
+
*
|
|
1597
|
+
* Every other lender's config comes exclusively from `lender-metadata`, and a
|
|
1598
|
+
* published `config/resupply.json` still WINS over this (see
|
|
1599
|
+
* `resupplyConfigFor`). The fallback exists because these are immutable
|
|
1600
|
+
* protocol singletons — `RouterSwapper` even hardcodes the registry address in
|
|
1601
|
+
* its own bytecode — and because the whole market roster is discovered from
|
|
1602
|
+
* `registry` at runtime. So the integration is live with nothing to publish,
|
|
1603
|
+
* and publishing later is a pure override.
|
|
1604
|
+
*
|
|
1605
|
+
* Verified on-chain 2026-08-04 (block ~25,683,400). Deliberately NOT taken
|
|
1606
|
+
* from the docs' `faq/contract-addresses` page or the repo's
|
|
1607
|
+
* `deployment/contracts.json`: both are stale and list a REVOKED Odos swapper.
|
|
1608
|
+
* Resolved via `Registry.getAddress(key)` over `getAllKeys()`.
|
|
1609
|
+
*/
|
|
1610
|
+
export declare const RESUPPLY_ETHEREUM_CONFIG: ResupplyConfigChain;
|
|
1611
|
+
export declare const resupplyConfig: () => ResupplyConfigType;
|
|
1612
|
+
/**
|
|
1613
|
+
* Deployment seed for one Resupply lender on a chain. Published metadata wins;
|
|
1614
|
+
* the built-in Ethereum row is the fallback so the provider works before
|
|
1615
|
+
* `config/resupply.json` exists.
|
|
1616
|
+
*/
|
|
1617
|
+
export declare const resupplyConfigFor: (lender: string, chainId: string | number) => ResupplyConfigChain | undefined;
|
|
1618
|
+
/**
|
|
1619
|
+
* All Resupply lender keys with config on a chain (drives getLendersForChain).
|
|
1620
|
+
* Gated on the REGISTRY — the one address the whole provider is bootstrapped
|
|
1621
|
+
* from. Union of published metadata and the built-in row, so the fan-out
|
|
1622
|
+
* happens with or without a publish.
|
|
1623
|
+
*/
|
|
1624
|
+
export declare const resupplyLendersByChain: (chainId: string | number) => string[];
|
|
1625
|
+
/**
|
|
1626
|
+
* Built-in Monad deployment seed for Curvance.
|
|
1627
|
+
*
|
|
1628
|
+
* Same arrangement as Resupply: a published `config/curvance.json` still WINS
|
|
1629
|
+
* (see `curvanceConfigFor`), but the provider is live with nothing to publish
|
|
1630
|
+
* because `centralRegistry` is an immutable protocol singleton and the whole
|
|
1631
|
+
* market roster is discovered from it at runtime.
|
|
1632
|
+
*
|
|
1633
|
+
* The `positionManagers` map is the exception and the reason this seed carries
|
|
1634
|
+
* more than one address: PM registration is an un-enumerable mapping, and Monad
|
|
1635
|
+
* public RPCs cap `eth_getLogs` at 100 blocks so `PositionManagerUpdated`
|
|
1636
|
+
* cannot be scanned. Every entry below was verified on-chain 2026-08-07 —
|
|
1637
|
+
* 23/23 answered `isPositionManager == true` on their market AND reported that
|
|
1638
|
+
* same market back from `marketManager()`.
|
|
1639
|
+
*
|
|
1640
|
+
* FIVE live markets have NO Position Manager and therefore no native leverage:
|
|
1641
|
+
* `PT-AUSD-8OCT2026 | AUSD` (the largest market at ~$45M), `PT-earnAUSD | AUSD`,
|
|
1642
|
+
* both `High Yield AUSD Vault` markets, and `aguaUSDCgc | USDC`. Their absence
|
|
1643
|
+
* here is the truth, not a gap to fill in.
|
|
1644
|
+
*/
|
|
1645
|
+
export declare const CURVANCE_MONAD_CONFIG: CurvanceConfigChain;
|
|
1646
|
+
export declare const curvanceConfig: () => CurvanceConfigType;
|
|
1647
|
+
/**
|
|
1648
|
+
* Deployment seed for one Curvance lender on a chain. Published metadata wins;
|
|
1649
|
+
* the built-in Monad row is the fallback so the provider works before
|
|
1650
|
+
* `config/curvance.json` exists.
|
|
1651
|
+
*/
|
|
1652
|
+
export declare const curvanceConfigFor: (lender: string, chainId: string | number) => CurvanceConfigChain | undefined;
|
|
1653
|
+
/**
|
|
1654
|
+
* All Curvance lender keys with config on a chain (drives getLendersForChain).
|
|
1655
|
+
* Gated on the CENTRAL REGISTRY — the one address the provider bootstraps from.
|
|
1656
|
+
*/
|
|
1657
|
+
export declare const curvanceLendersByChain: (chainId: string | number) => string[];
|
|
1658
|
+
/**
|
|
1659
|
+
* Position Managers registered for one Curvance market. Returns `undefined`
|
|
1660
|
+
* when the market has none — a real state (5 of 25 on Monad, including the
|
|
1661
|
+
* largest market), and the signal that native leverage is unavailable there.
|
|
1662
|
+
*
|
|
1663
|
+
* Lookup is case-insensitive because market-manager addresses arrive from
|
|
1664
|
+
* `queryTokensListed`/config in mixed checksum forms.
|
|
1665
|
+
*/
|
|
1666
|
+
export declare const curvancePositionManagersFor: (lender: string, chainId: string | number, marketManager: string) => CurvancePositionManagers | undefined;
|
|
1667
|
+
/**
|
|
1668
|
+
* The Position Manager to drive for a market, preferring an explicit `kind` and
|
|
1669
|
+
* otherwise falling back to `simplePositionManager` — which is the right default
|
|
1670
|
+
* because every PM'd market has one, and the vault/native variants exist only as
|
|
1671
|
+
* ALTERNATIVES for legs whose collateral needs an extra wrap step.
|
|
1672
|
+
*/
|
|
1673
|
+
export declare const curvancePositionManager: (lender: string, chainId: string | number, marketManager: string, kind?: keyof CurvancePositionManagers) => string | undefined;
|
|
1214
1674
|
export declare const compoundV3Bulker: () => CompoundV3BulkerType;
|
|
1215
1675
|
export declare const eulerConfigs: () => EulerConfigsType;
|
|
1216
1676
|
export declare const eulerVaults: () => EulerVaultsType;
|
|
@@ -1446,4 +1906,28 @@ export declare function termMaxLenderKey(market: string): string;
|
|
|
1446
1906
|
export declare function parseTermMaxLenderKey(lenderKey: string): {
|
|
1447
1907
|
marketAddrLower: string;
|
|
1448
1908
|
} | undefined;
|
|
1909
|
+
/**
|
|
1910
|
+
* Per-market lender key for one LlamaLend market, keyed by its CONTROLLER (the
|
|
1911
|
+
* borrow-side contract), not the vault — the Controller is what every write
|
|
1912
|
+
* and every user read targets.
|
|
1913
|
+
*
|
|
1914
|
+
* Format: `LLAMALEND_${controllerAddr.slice(2).toUpperCase()}`
|
|
1915
|
+
*
|
|
1916
|
+
* Both generations share this key space deliberately: they are one brand to the
|
|
1917
|
+
* user, and the Curve API returns them in one list. The `version` field on the
|
|
1918
|
+
* market row is what encoders branch on. chainId is intentionally NOT in the
|
|
1919
|
+
* token (chain scoping happens at the marketUid level), matching every other
|
|
1920
|
+
* per-market key in this file.
|
|
1921
|
+
*
|
|
1922
|
+
* `isLlamaLend()` works on this because it matches `startsWith('LLAMALEND')`.
|
|
1923
|
+
*/
|
|
1924
|
+
export declare function llamaLendLenderKey(controller: string): string;
|
|
1925
|
+
/**
|
|
1926
|
+
* Inverse of `llamaLendLenderKey`: given a per-market lender key, return
|
|
1927
|
+
* `{ controllerAddrLower }`. Returns `undefined` if the key isn't a per-market
|
|
1928
|
+
* LlamaLend key (e.g. someone passed the bare prefix `LLAMALEND`).
|
|
1929
|
+
*/
|
|
1930
|
+
export declare function parseLlamaLendLenderKey(lenderKey: string): {
|
|
1931
|
+
controllerAddrLower: string;
|
|
1932
|
+
} | undefined;
|
|
1449
1933
|
export {};
|