@1delta/margin-fetcher 0.0.190 → 0.0.192

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) {
@@ -12448,6 +12448,10 @@ function decodeListaMarkets(bytes) {
12448
12448
  o += FIELD_SIZES.u128;
12449
12449
  const fee = readUintBE(bytes, o, FIELD_SIZES.u128);
12450
12450
  o += FIELD_SIZES.u128;
12451
+ const rateCap = readUintBE(bytes, o, FIELD_SIZES.u128);
12452
+ o += FIELD_SIZES.u128;
12453
+ const rateFloor = readUintBE(bytes, o, FIELD_SIZES.u128);
12454
+ o += FIELD_SIZES.u128;
12451
12455
  const hasWhitelist = bytes[o] === 1;
12452
12456
  o += 1;
12453
12457
  const loanProvider = readAddress(bytes, o, FIELD_SIZES.addr);
@@ -12467,6 +12471,8 @@ function decodeListaMarkets(bytes) {
12467
12471
  loanTokenPrice,
12468
12472
  collateralTokenPrice,
12469
12473
  minLoan,
12474
+ rateCap,
12475
+ rateFloor,
12470
12476
  hasWhitelist,
12471
12477
  loanProvider,
12472
12478
  collateralProvider,
@@ -12664,6 +12670,56 @@ var MathLib;
12664
12670
  return borrowRate ? rateToApy(borrowRate) : 0n;
12665
12671
  }
12666
12672
  MathLib2.getBorrowApy = getBorrowApy;
12673
+ function getListaBorrowApy(rateAtTarget, utilization, _timestamp = Math.floor(Date.now() / 1e3), _lastUpdate, rateCap, rateFloor) {
12674
+ if (rateAtTarget == null || rateAtTarget === 0n) return 0n;
12675
+ const elapsed = BigInt(_timestamp) - BigInt(_lastUpdate);
12676
+ if (elapsed < 0n) return 0n;
12677
+ const { endBorrowRate } = _getListaBorrowRate(
12678
+ utilization,
12679
+ rateAtTarget,
12680
+ elapsed,
12681
+ rateCap,
12682
+ rateFloor
12683
+ );
12684
+ return rateToApy(endBorrowRate);
12685
+ }
12686
+ MathLib2.getListaBorrowApy = getListaBorrowApy;
12687
+ function _getListaBorrowRate(startUtilization, startRateAtTarget, elapsed, rateCap, rateFloor) {
12688
+ const errNormFactor = startUtilization > TARGET_UTILIZATION ? MathLib2.WAD - TARGET_UTILIZATION : TARGET_UTILIZATION;
12689
+ const err = MathLib2.wDivDown(
12690
+ startUtilization - TARGET_UTILIZATION,
12691
+ errNormFactor
12692
+ );
12693
+ let endRateAtTarget;
12694
+ if (startRateAtTarget === 0n) {
12695
+ endRateAtTarget = INITIAL_RATE_AT_TARGET;
12696
+ } else {
12697
+ const speed = MathLib2.wMulDown(ADJUSTMENT_SPEED, err);
12698
+ const linearAdaptation = speed * elapsed;
12699
+ if (linearAdaptation === 0n) {
12700
+ endRateAtTarget = startRateAtTarget;
12701
+ } else {
12702
+ const _newRateAtTarget = (la) => MathLib2.min(
12703
+ MathLib2.max(
12704
+ MathLib2.wMulDown(startRateAtTarget, wExp(la)),
12705
+ MIN_RATE_AT_TARGET
12706
+ ),
12707
+ MAX_RATE_AT_TARGET
12708
+ );
12709
+ endRateAtTarget = _newRateAtTarget(linearAdaptation);
12710
+ }
12711
+ }
12712
+ const cap = rateCap && rateCap > 0n ? rateCap : DEFAULT_RATE_CAP;
12713
+ if (endRateAtTarget > cap / 4n) endRateAtTarget = cap / 4n;
12714
+ const coeff = err < 0n ? MathLib2.WAD - MathLib2.wDivDown(MathLib2.WAD, CURVE_STEEPNESS) : CURVE_STEEPNESS - MathLib2.WAD;
12715
+ const _curve = (rat) => MathLib2.wMulDown(MathLib2.wMulDown(coeff, err) + MathLib2.WAD, rat);
12716
+ let endBorrowRate = _curve(endRateAtTarget);
12717
+ if (endBorrowRate > cap) endBorrowRate = cap;
12718
+ if (rateFloor && rateFloor > 0n && endBorrowRate < rateFloor)
12719
+ endBorrowRate = rateFloor;
12720
+ return { endBorrowRate, endRateAtTarget };
12721
+ }
12722
+ const DEFAULT_RATE_CAP = 634195839675291n;
12667
12723
  const CURVE_STEEPNESS = 4000000000000000000n;
12668
12724
  const TARGET_UTILIZATION = 900000000000000000n;
12669
12725
  const INITIAL_RATE_AT_TARGET = 40000000000000000n / SECONDS_PER_YEAR3;
@@ -12753,6 +12809,8 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
12753
12809
  loanToken,
12754
12810
  collateralToken,
12755
12811
  minLoan,
12812
+ rateCap,
12813
+ rateFloor,
12756
12814
  broker,
12757
12815
  loanProvider,
12758
12816
  collateralProvider,
@@ -12793,11 +12851,13 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
12793
12851
  let borrowApy = 0n;
12794
12852
  let supplyApy = 0n;
12795
12853
  try {
12796
- borrowApy = MathLib.getBorrowApy(
12854
+ borrowApy = MathLib.getListaBorrowApy(
12797
12855
  state.rateAtTarget,
12798
12856
  utilization,
12799
12857
  void 0,
12800
- Number(state.lastUpdate)
12858
+ Number(state.lastUpdate),
12859
+ rateCap,
12860
+ rateFloor
12801
12861
  );
12802
12862
  supplyApy = MathLib.getSupplyApy(borrowApy, utilization, state.fee);
12803
12863
  } catch {
@@ -12898,7 +12958,9 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
12898
12958
  collateralProvider,
12899
12959
  hasWhitelist,
12900
12960
  fee: state.fee.toString(),
12901
- rateAtTarget: state.rateAtTarget.toString()
12961
+ rateAtTarget: state.rateAtTarget.toString(),
12962
+ rateCap: rateCap?.toString() ?? "0",
12963
+ rateFloor: rateFloor?.toString() ?? "0"
12902
12964
  }
12903
12965
  };
12904
12966
  data[m].chainId = chainId;