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

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) {
@@ -77860,6 +77893,7 @@ function computeMaxWithdrawForBank(params) {
77860
77893
  oraclePricesByBank,
77861
77894
  assetShareValueMultiplierByBank,
77862
77895
  groupRateLimiter,
77896
+ venueStates,
77863
77897
  ignoreBankLimits
77864
77898
  } = params;
77865
77899
  const bank = banksMap.get(bankAddress.toBase58());
@@ -77874,7 +77908,10 @@ function computeMaxWithdrawForBank(params) {
77874
77908
  assetShareValueMultiplier
77875
77909
  );
77876
77910
  const rateLimitRemaining = computeOutflowRateLimitRemaining(bank, oraclePrice, groupRateLimiter);
77877
- return BigNumber3__default.default.max(0, BigNumber3__default.default.min(healthMaxWithdraw, availableLiquidity, rateLimitRemaining));
77911
+ const clamps = [healthMaxWithdraw, availableLiquidity, rateLimitRemaining];
77912
+ const venueLiquidity = computeVenueAvailableLiquidity(bank, venueStates);
77913
+ if (venueLiquidity !== void 0) clamps.push(venueLiquidity);
77914
+ return BigNumber3__default.default.max(0, BigNumber3__default.default.min(...clamps));
77878
77915
  }
77879
77916
  function computeHealthMaxWithdrawForBank(params) {
77880
77917
  const {
@@ -79942,6 +79979,51 @@ function computeGroupRateLimitRemainingUsd(rateLimiter, nowSeconds = Date.now()
79942
79979
  if (remaining === null) return null;
79943
79980
  return BigNumber3__default.default.max(0, remaining);
79944
79981
  }
79982
+ var VENUE_AVAILABLE_LIQUIDITY_BUFFER = 0.995;
79983
+ function computeVenueAvailableLiquidity(bank, venueStates) {
79984
+ const decimals = bank.mintDecimals;
79985
+ switch (bank.config.assetTag) {
79986
+ case 3 /* KAMINO */: {
79987
+ const reserveState = venueStates?.kaminoStates?.reserveState;
79988
+ if (!reserveState) return void 0;
79989
+ return new BigNumber3__default.default(
79990
+ nativeToUi(reserveState.liquidity.availableAmount.toString(), decimals)
79991
+ ).times(VENUE_AVAILABLE_LIQUIDITY_BUFFER);
79992
+ }
79993
+ case 4 /* DRIFT */: {
79994
+ const spotMarketState = venueStates?.driftStates?.spotMarketState;
79995
+ if (!spotMarketState) return void 0;
79996
+ const deposits = getDriftTokenAmount(
79997
+ spotMarketState.depositBalance,
79998
+ spotMarketState,
79999
+ "deposit" /* DEPOSIT */
80000
+ );
80001
+ const borrows = getDriftTokenAmount(
80002
+ spotMarketState.borrowBalance,
80003
+ spotMarketState,
80004
+ "borrow" /* BORROW */
80005
+ );
80006
+ const idle = deposits.sub(borrows);
80007
+ return new BigNumber3__default.default(nativeToUi(idle.isNeg() ? "0" : idle.toString(), decimals)).times(
80008
+ VENUE_AVAILABLE_LIQUIDITY_BUFFER
80009
+ );
80010
+ }
80011
+ case 6 /* JUPLEND */: {
80012
+ const reserveState = venueStates?.jupLendStates?.jupTokenReserveState;
80013
+ if (!reserveState) return void 0;
80014
+ const supplyWithInterestNative = reserveState.totalSupplyWithInterest.mul(reserveState.supplyExchangePrice).div(JUP_EXCHANGE_PRICES_PRECISION);
80015
+ const borrowWithInterestNative = reserveState.totalBorrowWithInterest.mul(reserveState.borrowExchangePrice).div(JUP_EXCHANGE_PRICES_PRECISION);
80016
+ const totalSupply = supplyWithInterestNative.add(reserveState.totalSupplyInterestFree);
80017
+ const totalBorrow = borrowWithInterestNative.add(reserveState.totalBorrowInterestFree);
80018
+ const idle = totalSupply.sub(totalBorrow);
80019
+ return new BigNumber3__default.default(nativeToUi(idle.isNeg() ? "0" : idle.toString(), decimals)).times(
80020
+ VENUE_AVAILABLE_LIQUIDITY_BUFFER
80021
+ );
80022
+ }
80023
+ default:
80024
+ return void 0;
80025
+ }
80026
+ }
79945
80027
 
79946
80028
  // src/services/bank/bank.service.ts
79947
80029
  async function freezeBankConfigIx(program, bankAddress, bankConfigOpt) {
@@ -82788,6 +82870,7 @@ var MarginfiAccountWrapper = class {
82788
82870
  activePair,
82789
82871
  volatilityFactor: opts?.volatilityFactor,
82790
82872
  groupRateLimiter: this.client.group.rateLimiter,
82873
+ venueStates: this.client.bankIntegrationMap[bankAddress.toBase58()],
82791
82874
  ignoreBankLimits: opts?.ignoreBankLimits
82792
82875
  });
82793
82876
  }
@@ -83309,6 +83392,7 @@ exports.U64_MAX = U64_MAX;
83309
83392
  exports.USDC_DECIMALS = USDC_DECIMALS;
83310
83393
  exports.USDC_MINT = USDC_MINT;
83311
83394
  exports.USDT_MINT = USDT_MINT;
83395
+ exports.VENUE_AVAILABLE_LIQUIDITY_BUFFER = VENUE_AVAILABLE_LIQUIDITY_BUFFER;
83312
83396
  exports.WSOL_MINT = WSOL_MINT;
83313
83397
  exports.ZERO_ORACLE_KEY = ZERO_ORACLE_KEY;
83314
83398
  exports.accountConflictsWithBridgeBank = accountConflictsWithBridgeBank;
@@ -83402,6 +83486,7 @@ exports.computeTvl = computeTvl;
83402
83486
  exports.computeUsdValue = computeUsdValue;
83403
83487
  exports.computeUtilizationRate = computeUtilizationRate;
83404
83488
  exports.computeV0TxSize = computeV0TxSize;
83489
+ exports.computeVenueAvailableLiquidity = computeVenueAvailableLiquidity;
83405
83490
  exports.convertVoteAccCoeffsToBankCoeffs = convertVoteAccCoeffsToBankCoeffs;
83406
83491
  exports.createActiveEmodePairFromPairs = createActiveEmodePairFromPairs;
83407
83492
  exports.createEmptyBalance = createEmptyBalance;