@1delta/margin-fetcher 0.0.190 → 0.0.191

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 CHANGED
@@ -10870,10 +10870,10 @@ var MORPHO_LENS = {
10870
10870
  [Chain.KATANA]: "0xCe434378adacC51d54312c872113D687Ac19B516",
10871
10871
  [Chain.HYPEREVM]: "0x6Bc6aCB905c1216B0119C87Bf9E178ce298310FA",
10872
10872
  [Chain.SONEIUM]: "0x4b5458BB47dCBC1a41B31b41e1a8773dE312BE9d",
10873
- [Chain.ETHEREUM_MAINNET]: "0x5c4f2eacbdc1eb38f839bddd7620e250a36819d4",
10873
+ [Chain.ETHEREUM_MAINNET]: "0xFc107f469A92c0de7B3105B802584CD6c7D710C2",
10874
10874
  [Chain.PLASMA_MAINNET]: "0xcB6Eb8df68153cebF60E1872273Ef52075a5C297",
10875
10875
  [Chain.BERACHAIN]: "0x7a59ddbB76521E8982Fa3A08598C9a83b14A6C07",
10876
- [Chain.BNB_SMART_CHAIN_MAINNET]: "0x3375B2EF9C4D2c6434d39BBE5234c5101218500d",
10876
+ [Chain.BNB_SMART_CHAIN_MAINNET]: "0x79f4061BF049c5c6CAC6bfe2415c2460815F4ac7",
10877
10877
  // lista lens
10878
10878
  [Chain.UNICHAIN]: "0xA453ba397c61B0c292EA3959A858821145B2707F",
10879
10879
  [Chain.SEI_NETWORK]: "0xcB6Eb8df68153cebF60E1872273Ef52075a5C297",
@@ -12341,7 +12341,7 @@ var MORPHO_RECORD_SIZE = 4 * FIELD_SIZES.addr + // loanToken, collateralToken, o
12341
12341
  5 * FIELD_SIZES.u128 + // totals (4) + lastUpdate
12342
12342
  1 * FIELD_SIZES.u128;
12343
12343
  var LISTA_RECORD_SIZE = 7 * FIELD_SIZES.addr + // loanToken, collateralToken, oracle, irm, loanProvider, collateralProvider, broker
12344
- 8 * FIELD_SIZES.u128 + // lltv, minLoan, totals (4), lastUpdate, fee
12344
+ 10 * FIELD_SIZES.u128 + // lltv, minLoan, totals (4), lastUpdate, fee, rateCap, rateFloor
12345
12345
  3 * FIELD_SIZES.u256 + // priceLoanToken, priceCollateralToken, rateAtTarget
12346
12346
  1;
12347
12347
  function decodeMarkets(input) {
@@ -12410,11 +12410,13 @@ function decodeMorphoMarkets(bytes) {
12410
12410
  return markets;
12411
12411
  }
12412
12412
  function decodeListaMarkets(bytes) {
12413
+ console.log("bytes", bytes);
12413
12414
  if (bytes.length % LISTA_RECORD_SIZE !== 0) {
12414
12415
  throw new Error(
12415
12416
  `Invalid data length ${bytes.length}; not a multiple of ${LISTA_RECORD_SIZE} bytes per record`
12416
12417
  );
12417
12418
  }
12419
+ console.log("bytes", bytes);
12418
12420
  const markets = [];
12419
12421
  for (let i = 0; i < bytes.length; i += LISTA_RECORD_SIZE) {
12420
12422
  let o = i;
@@ -12448,6 +12450,10 @@ function decodeListaMarkets(bytes) {
12448
12450
  o += FIELD_SIZES.u128;
12449
12451
  const fee = readUintBE(bytes, o, FIELD_SIZES.u128);
12450
12452
  o += FIELD_SIZES.u128;
12453
+ const rateCap = readUintBE(bytes, o, FIELD_SIZES.u128);
12454
+ o += FIELD_SIZES.u128;
12455
+ const rateFloor = readUintBE(bytes, o, FIELD_SIZES.u128);
12456
+ o += FIELD_SIZES.u128;
12451
12457
  const hasWhitelist = bytes[o] === 1;
12452
12458
  o += 1;
12453
12459
  const loanProvider = readAddress(bytes, o, FIELD_SIZES.addr);
@@ -12467,6 +12473,8 @@ function decodeListaMarkets(bytes) {
12467
12473
  loanTokenPrice,
12468
12474
  collateralTokenPrice,
12469
12475
  minLoan,
12476
+ rateCap,
12477
+ rateFloor,
12470
12478
  hasWhitelist,
12471
12479
  loanProvider,
12472
12480
  collateralProvider,
@@ -12664,6 +12672,56 @@ var MathLib;
12664
12672
  return borrowRate ? rateToApy(borrowRate) : 0n;
12665
12673
  }
12666
12674
  MathLib2.getBorrowApy = getBorrowApy;
12675
+ function getListaBorrowApy(rateAtTarget, utilization, _timestamp = Math.floor(Date.now() / 1e3), _lastUpdate, rateCap, rateFloor) {
12676
+ if (rateAtTarget == null || rateAtTarget === 0n) return 0n;
12677
+ const elapsed = BigInt(_timestamp) - BigInt(_lastUpdate);
12678
+ if (elapsed < 0n) return 0n;
12679
+ const { endBorrowRate } = _getListaBorrowRate(
12680
+ utilization,
12681
+ rateAtTarget,
12682
+ elapsed,
12683
+ rateCap,
12684
+ rateFloor
12685
+ );
12686
+ return rateToApy(endBorrowRate);
12687
+ }
12688
+ MathLib2.getListaBorrowApy = getListaBorrowApy;
12689
+ function _getListaBorrowRate(startUtilization, startRateAtTarget, elapsed, rateCap, rateFloor) {
12690
+ const errNormFactor = startUtilization > TARGET_UTILIZATION ? MathLib2.WAD - TARGET_UTILIZATION : TARGET_UTILIZATION;
12691
+ const err = MathLib2.wDivDown(
12692
+ startUtilization - TARGET_UTILIZATION,
12693
+ errNormFactor
12694
+ );
12695
+ let endRateAtTarget;
12696
+ if (startRateAtTarget === 0n) {
12697
+ endRateAtTarget = INITIAL_RATE_AT_TARGET;
12698
+ } else {
12699
+ const speed = MathLib2.wMulDown(ADJUSTMENT_SPEED, err);
12700
+ const linearAdaptation = speed * elapsed;
12701
+ if (linearAdaptation === 0n) {
12702
+ endRateAtTarget = startRateAtTarget;
12703
+ } else {
12704
+ const _newRateAtTarget = (la) => MathLib2.min(
12705
+ MathLib2.max(
12706
+ MathLib2.wMulDown(startRateAtTarget, wExp(la)),
12707
+ MIN_RATE_AT_TARGET
12708
+ ),
12709
+ MAX_RATE_AT_TARGET
12710
+ );
12711
+ endRateAtTarget = _newRateAtTarget(linearAdaptation);
12712
+ }
12713
+ }
12714
+ const cap = rateCap && rateCap > 0n ? rateCap : DEFAULT_RATE_CAP;
12715
+ if (endRateAtTarget > cap / 4n) endRateAtTarget = cap / 4n;
12716
+ const coeff = err < 0n ? MathLib2.WAD - MathLib2.wDivDown(MathLib2.WAD, CURVE_STEEPNESS) : CURVE_STEEPNESS - MathLib2.WAD;
12717
+ const _curve = (rat) => MathLib2.wMulDown(MathLib2.wMulDown(coeff, err) + MathLib2.WAD, rat);
12718
+ let endBorrowRate = _curve(endRateAtTarget);
12719
+ if (endBorrowRate > cap) endBorrowRate = cap;
12720
+ if (rateFloor && rateFloor > 0n && endBorrowRate < rateFloor)
12721
+ endBorrowRate = rateFloor;
12722
+ return { endBorrowRate, endRateAtTarget };
12723
+ }
12724
+ const DEFAULT_RATE_CAP = 634195839675291n;
12667
12725
  const CURVE_STEEPNESS = 4000000000000000000n;
12668
12726
  const TARGET_UTILIZATION = 900000000000000000n;
12669
12727
  const INITIAL_RATE_AT_TARGET = 40000000000000000n / SECONDS_PER_YEAR3;
@@ -12753,6 +12811,8 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
12753
12811
  loanToken,
12754
12812
  collateralToken,
12755
12813
  minLoan,
12814
+ rateCap,
12815
+ rateFloor,
12756
12816
  broker,
12757
12817
  loanProvider,
12758
12818
  collateralProvider,
@@ -12793,11 +12853,13 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
12793
12853
  let borrowApy = 0n;
12794
12854
  let supplyApy = 0n;
12795
12855
  try {
12796
- borrowApy = MathLib.getBorrowApy(
12856
+ borrowApy = MathLib.getListaBorrowApy(
12797
12857
  state.rateAtTarget,
12798
12858
  utilization,
12799
12859
  void 0,
12800
- Number(state.lastUpdate)
12860
+ Number(state.lastUpdate),
12861
+ rateCap,
12862
+ rateFloor
12801
12863
  );
12802
12864
  supplyApy = MathLib.getSupplyApy(borrowApy, utilization, state.fee);
12803
12865
  } catch {
@@ -12898,7 +12960,9 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
12898
12960
  collateralProvider,
12899
12961
  hasWhitelist,
12900
12962
  fee: state.fee.toString(),
12901
- rateAtTarget: state.rateAtTarget.toString()
12963
+ rateAtTarget: state.rateAtTarget.toString(),
12964
+ rateCap: rateCap?.toString() ?? "0",
12965
+ rateFloor: rateFloor?.toString() ?? "0"
12902
12966
  }
12903
12967
  };
12904
12968
  data[m].chainId = chainId;