@0dotxyz/p0-ts-sdk 2.7.1-alpha.0 → 2.7.1-alpha.2

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.cjs CHANGED
@@ -27746,6 +27746,11 @@ var klendInstructions = {
27746
27746
  };
27747
27747
  var instructions_default2 = klendInstructions;
27748
27748
 
27749
+ // src/vendor/drift/types/drift-spot-market/drift-spot-market.types.ts
27750
+ function isSpotBalanceTypeVariant(value, variant) {
27751
+ return value === variant;
27752
+ }
27753
+
27749
27754
  // src/vendor/drift/idl/drift.json
27750
27755
  var drift_default = {
27751
27756
  address: "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH",
@@ -42111,6 +42116,34 @@ function deriveDriftSpotMarketVault(marketIndex, programId = DRIFT_PROGRAM_ID) {
42111
42116
  programId
42112
42117
  );
42113
42118
  }
42119
+ var ZERO = new BN9__default.default(0);
42120
+ var ONE = new BN9__default.default(1);
42121
+ var TEN = new BN9__default.default(10);
42122
+ var PERCENTAGE_PRECISION_EXP = new BN9__default.default(6);
42123
+ new BN9__default.default(10).pow(PERCENTAGE_PRECISION_EXP);
42124
+ var SPOT_MARKET_RATE_PRECISION_EXP = new BN9__default.default(6);
42125
+ new BN9__default.default(10).pow(SPOT_MARKET_RATE_PRECISION_EXP);
42126
+ var SPOT_MARKET_UTILIZATION_PRECISION_EXP = new BN9__default.default(6);
42127
+ new BN9__default.default(10).pow(
42128
+ SPOT_MARKET_UTILIZATION_PRECISION_EXP
42129
+ );
42130
+ new BN9__default.default(31536e3);
42131
+ function divCeil(a, b) {
42132
+ const quotient = a.div(b);
42133
+ const remainder = a.mod(b);
42134
+ if (remainder.gt(ZERO)) {
42135
+ return quotient.add(ONE);
42136
+ }
42137
+ return quotient;
42138
+ }
42139
+ function getDriftTokenAmount(balanceAmount, spotMarket, balanceType) {
42140
+ const precisionDecrease = TEN.pow(new BN9__default.default(19 - spotMarket.decimals));
42141
+ if (isSpotBalanceTypeVariant(balanceType, "deposit")) {
42142
+ return balanceAmount.mul(spotMarket.cumulativeDepositInterest).div(precisionDecrease);
42143
+ } else {
42144
+ return divCeil(balanceAmount.mul(spotMarket.cumulativeBorrowInterest), precisionDecrease);
42145
+ }
42146
+ }
42114
42147
 
42115
42148
  // src/vendor/drift/utils/rewards.utils.ts
42116
42149
  async function getDriftRewards(spotMarkets, userStates, connection) {
@@ -77835,17 +77868,28 @@ function computeMaxBorrowForBank(params) {
77835
77868
  bank,
77836
77869
  assetShareValueMultiplier
77837
77870
  ).div(originationFeeFactor);
77838
- const rateLimitRemaining = computeOutflowRateLimitRemaining(bank, oraclePrice, groupRateLimiter);
77871
+ const rateLimitRemaining = computeOutflowRateLimitRemaining(
77872
+ bank,
77873
+ oraclePrice,
77874
+ groupRateLimiter,
77875
+ assetShareValueMultiplier
77876
+ );
77839
77877
  return BigNumber3__default.default.max(
77840
77878
  0,
77841
77879
  BigNumber3__default.default.min(healthMaxBorrow, borrowCapRemaining, availableLiquidity, rateLimitRemaining)
77842
77880
  );
77843
77881
  }
77844
- function computeOutflowRateLimitRemaining(bank, oraclePrice, groupRateLimiter) {
77882
+ function computeOutflowRateLimitRemaining(bank, oraclePrice, groupRateLimiter, assetShareValueMultiplier) {
77845
77883
  const nowSeconds = Date.now() / 1e3;
77846
77884
  let remaining = new BigNumber3__default.default(Infinity);
77847
- const bankRemaining = computeBankRateLimitRemaining(bank, nowSeconds);
77848
- if (bankRemaining !== null) remaining = BigNumber3__default.default.min(remaining, bankRemaining);
77885
+ let bankRemaining = computeBankRateLimitRemaining(bank, nowSeconds);
77886
+ if (bankRemaining !== null) {
77887
+ const limiterInBankMintUnits = bank.config.assetTag === 3 /* KAMINO */ || bank.config.assetTag === 2 /* STAKED */;
77888
+ if (limiterInBankMintUnits && assetShareValueMultiplier?.gt(0)) {
77889
+ bankRemaining = bankRemaining.times(assetShareValueMultiplier);
77890
+ }
77891
+ remaining = BigNumber3__default.default.min(remaining, bankRemaining);
77892
+ }
77849
77893
  const groupRemainingUsd = computeGroupRateLimitRemainingUsd(groupRateLimiter, nowSeconds);
77850
77894
  if (groupRemainingUsd !== null) {
77851
77895
  const price = getPrice(oraclePrice, 1 /* None */, false);
@@ -77860,6 +77904,7 @@ function computeMaxWithdrawForBank(params) {
77860
77904
  oraclePricesByBank,
77861
77905
  assetShareValueMultiplierByBank,
77862
77906
  groupRateLimiter,
77907
+ venueStates,
77863
77908
  ignoreBankLimits
77864
77909
  } = params;
77865
77910
  const bank = banksMap.get(bankAddress.toBase58());
@@ -77873,8 +77918,16 @@ function computeMaxWithdrawForBank(params) {
77873
77918
  bank,
77874
77919
  assetShareValueMultiplier
77875
77920
  );
77876
- const rateLimitRemaining = computeOutflowRateLimitRemaining(bank, oraclePrice, groupRateLimiter);
77877
- return BigNumber3__default.default.max(0, BigNumber3__default.default.min(healthMaxWithdraw, availableLiquidity, rateLimitRemaining));
77921
+ const rateLimitRemaining = computeOutflowRateLimitRemaining(
77922
+ bank,
77923
+ oraclePrice,
77924
+ groupRateLimiter,
77925
+ assetShareValueMultiplier
77926
+ );
77927
+ const clamps = [healthMaxWithdraw, availableLiquidity, rateLimitRemaining];
77928
+ const venueLiquidity = computeVenueAvailableLiquidity(bank, venueStates);
77929
+ if (venueLiquidity !== void 0) clamps.push(venueLiquidity);
77930
+ return BigNumber3__default.default.max(0, BigNumber3__default.default.min(...clamps));
77878
77931
  }
77879
77932
  function computeHealthMaxWithdrawForBank(params) {
77880
77933
  const {
@@ -79942,6 +79995,51 @@ function computeGroupRateLimitRemainingUsd(rateLimiter, nowSeconds = Date.now()
79942
79995
  if (remaining === null) return null;
79943
79996
  return BigNumber3__default.default.max(0, remaining);
79944
79997
  }
79998
+ var VENUE_AVAILABLE_LIQUIDITY_BUFFER = 0.995;
79999
+ function computeVenueAvailableLiquidity(bank, venueStates) {
80000
+ const decimals = bank.mintDecimals;
80001
+ switch (bank.config.assetTag) {
80002
+ case 3 /* KAMINO */: {
80003
+ const reserveState = venueStates?.kaminoStates?.reserveState;
80004
+ if (!reserveState) return void 0;
80005
+ return new BigNumber3__default.default(
80006
+ nativeToUi(reserveState.liquidity.availableAmount.toString(), decimals)
80007
+ ).times(VENUE_AVAILABLE_LIQUIDITY_BUFFER);
80008
+ }
80009
+ case 4 /* DRIFT */: {
80010
+ const spotMarketState = venueStates?.driftStates?.spotMarketState;
80011
+ if (!spotMarketState) return void 0;
80012
+ const deposits = getDriftTokenAmount(
80013
+ spotMarketState.depositBalance,
80014
+ spotMarketState,
80015
+ "deposit" /* DEPOSIT */
80016
+ );
80017
+ const borrows = getDriftTokenAmount(
80018
+ spotMarketState.borrowBalance,
80019
+ spotMarketState,
80020
+ "borrow" /* BORROW */
80021
+ );
80022
+ const idle = deposits.sub(borrows);
80023
+ return new BigNumber3__default.default(nativeToUi(idle.isNeg() ? "0" : idle.toString(), decimals)).times(
80024
+ VENUE_AVAILABLE_LIQUIDITY_BUFFER
80025
+ );
80026
+ }
80027
+ case 6 /* JUPLEND */: {
80028
+ const reserveState = venueStates?.jupLendStates?.jupTokenReserveState;
80029
+ if (!reserveState) return void 0;
80030
+ const supplyWithInterestNative = reserveState.totalSupplyWithInterest.mul(reserveState.supplyExchangePrice).div(JUP_EXCHANGE_PRICES_PRECISION);
80031
+ const borrowWithInterestNative = reserveState.totalBorrowWithInterest.mul(reserveState.borrowExchangePrice).div(JUP_EXCHANGE_PRICES_PRECISION);
80032
+ const totalSupply = supplyWithInterestNative.add(reserveState.totalSupplyInterestFree);
80033
+ const totalBorrow = borrowWithInterestNative.add(reserveState.totalBorrowInterestFree);
80034
+ const idle = totalSupply.sub(totalBorrow);
80035
+ return new BigNumber3__default.default(nativeToUi(idle.isNeg() ? "0" : idle.toString(), decimals)).times(
80036
+ VENUE_AVAILABLE_LIQUIDITY_BUFFER
80037
+ );
80038
+ }
80039
+ default:
80040
+ return void 0;
80041
+ }
80042
+ }
79945
80043
 
79946
80044
  // src/services/bank/bank.service.ts
79947
80045
  async function freezeBankConfigIx(program, bankAddress, bankConfigOpt) {
@@ -82788,6 +82886,7 @@ var MarginfiAccountWrapper = class {
82788
82886
  activePair,
82789
82887
  volatilityFactor: opts?.volatilityFactor,
82790
82888
  groupRateLimiter: this.client.group.rateLimiter,
82889
+ venueStates: this.client.bankIntegrationMap[bankAddress.toBase58()],
82791
82890
  ignoreBankLimits: opts?.ignoreBankLimits
82792
82891
  });
82793
82892
  }
@@ -83309,6 +83408,7 @@ exports.U64_MAX = U64_MAX;
83309
83408
  exports.USDC_DECIMALS = USDC_DECIMALS;
83310
83409
  exports.USDC_MINT = USDC_MINT;
83311
83410
  exports.USDT_MINT = USDT_MINT;
83411
+ exports.VENUE_AVAILABLE_LIQUIDITY_BUFFER = VENUE_AVAILABLE_LIQUIDITY_BUFFER;
83312
83412
  exports.WSOL_MINT = WSOL_MINT;
83313
83413
  exports.ZERO_ORACLE_KEY = ZERO_ORACLE_KEY;
83314
83414
  exports.accountConflictsWithBridgeBank = accountConflictsWithBridgeBank;
@@ -83402,6 +83502,7 @@ exports.computeTvl = computeTvl;
83402
83502
  exports.computeUsdValue = computeUsdValue;
83403
83503
  exports.computeUtilizationRate = computeUtilizationRate;
83404
83504
  exports.computeV0TxSize = computeV0TxSize;
83505
+ exports.computeVenueAvailableLiquidity = computeVenueAvailableLiquidity;
83405
83506
  exports.convertVoteAccCoeffsToBankCoeffs = convertVoteAccCoeffsToBankCoeffs;
83406
83507
  exports.createActiveEmodePairFromPairs = createActiveEmodePairFromPairs;
83407
83508
  exports.createEmptyBalance = createEmptyBalance;