@0dotxyz/p0-ts-sdk 2.8.0-alpha.4 → 2.8.0-alpha.5

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
@@ -21837,7 +21837,11 @@ async function makeLendingPoolConfigureBankOracleIx(mfProgram, accounts, args, r
21837
21837
  }
21838
21838
  async function makeLendingPoolConfigureBankOracleScopeIx(mfProgram, accounts, args) {
21839
21839
  const { bank, ...optionalAccounts } = accounts;
21840
- return mfProgram.methods.lendingPoolConfigureBankOracleScope(args.oracle, args.entryIndex).accounts({ bank }).accountsPartial(optionalAccounts).instruction();
21840
+ return mfProgram.methods.lendingPoolConfigureBankOracleScope(args.oracle, args.entryIndex).accounts({ bank }).accountsPartial(optionalAccounts).remainingAccounts([{ pubkey: args.oracle, isSigner: false, isWritable: false }]).instruction();
21841
+ }
21842
+ async function makeLendingPoolSetOraclePriceIx(mfProgram, accounts, args, remainingAccounts = []) {
21843
+ const { bank, ...optionalAccounts } = accounts;
21844
+ return mfProgram.methods.lendingPoolSetOraclePrice(args.price, args.setup).accounts({ bank }).accountsPartial(optionalAccounts).remainingAccounts(remainingAccounts).instruction();
21841
21845
  }
21842
21846
  async function makePoolAddPermissionlessStakedBankIx(mfProgram, accounts, remainingAccounts = [], args) {
21843
21847
  const {
@@ -21912,6 +21916,7 @@ var instructions = {
21912
21916
  makePoolAddPermissionlessStakedBankIx,
21913
21917
  makeLendingPoolConfigureBankOracleIx,
21914
21918
  makeLendingPoolConfigureBankOracleScopeIx,
21919
+ makeLendingPoolSetOraclePriceIx,
21915
21920
  makePulseHealthIx
21916
21921
  };
21917
21922
  var instructions_default = instructions;
@@ -52611,7 +52616,8 @@ function makeLendingPoolConfigureBankOracleScopeIx2(programId, accounts, args) {
52611
52616
  const keys = [
52612
52617
  { pubkey: accounts.group, isSigner: false, isWritable: false },
52613
52618
  { pubkey: accounts.admin, isSigner: true, isWritable: false },
52614
- { pubkey: accounts.bank, isSigner: false, isWritable: true }
52619
+ { pubkey: accounts.bank, isSigner: false, isWritable: true },
52620
+ { pubkey: args.oracle, isSigner: false, isWritable: false }
52615
52621
  ];
52616
52622
  const data = Buffer.concat([
52617
52623
  DISCRIMINATORS.LENDING_POOL_CONFIGURE_BANK_ORACLE_SCOPE,
@@ -75371,10 +75377,15 @@ function decodeScopePriceAtIndex(data, entryIndex) {
75371
75377
  }
75372
75378
  new web3_js.PublicKey("MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD");
75373
75379
  var MARINADE_STATE_DISCRIMINATOR = Buffer.from([216, 146, 107, 94, 104, 75, 182, 177]);
75374
- var MARINADE_STATE_MIN_SIZE = 520;
75375
- var MSOL_PRICE_OFFSET = 512;
75376
- var MSOL_PRICE_PRECISION = new BigNumber3__default.default(2).pow(32);
75377
- var MAX_MSOL_SOL_RATE = 200;
75380
+ var DELAYED_UNSTAKE_COOLING_DOWN_OFFSET = 226;
75381
+ var TOTAL_ACTIVE_BALANCE_OFFSET = 376;
75382
+ var AVAILABLE_RESERVE_BALANCE_OFFSET = 496;
75383
+ var MSOL_SUPPLY_OFFSET = 504;
75384
+ var CIRCULATING_TICKET_BALANCE_OFFSET = 528;
75385
+ var EMERGENCY_COOLING_DOWN_OFFSET = 568;
75386
+ var MARINADE_STATE_MIN_SIZE = EMERGENCY_COOLING_DOWN_OFFSET + 8;
75387
+ var U64_MAX = (1n << 64n) - 1n;
75388
+ var MAX_MSOL_SOL_RATE = 3;
75378
75389
  function decodeMarinadeState(data) {
75379
75390
  if (data.length < MARINADE_STATE_MIN_SIZE) {
75380
75391
  throw new Error(`Invalid Marinade State account size: ${data.length}`);
@@ -75382,8 +75393,21 @@ function decodeMarinadeState(data) {
75382
75393
  if (!data.subarray(0, 8).equals(MARINADE_STATE_DISCRIMINATOR)) {
75383
75394
  throw new Error("Invalid Marinade State discriminator");
75384
75395
  }
75385
- const msolPriceRaw = data.readBigUInt64LE(MSOL_PRICE_OFFSET);
75386
- const msolPrice = new BigNumber3__default.default(msolPriceRaw.toString()).div(MSOL_PRICE_PRECISION);
75396
+ const delayedUnstakeCoolingDown = data.readBigUInt64LE(DELAYED_UNSTAKE_COOLING_DOWN_OFFSET);
75397
+ const totalActiveBalance = data.readBigUInt64LE(TOTAL_ACTIVE_BALANCE_OFFSET);
75398
+ const availableReserveBalance = data.readBigUInt64LE(AVAILABLE_RESERVE_BALANCE_OFFSET);
75399
+ const msolSupply = data.readBigUInt64LE(MSOL_SUPPLY_OFFSET);
75400
+ const circulatingTicketBalance = data.readBigUInt64LE(CIRCULATING_TICKET_BALANCE_OFFSET);
75401
+ const emergencyCoolingDown = data.readBigUInt64LE(EMERGENCY_COOLING_DOWN_OFFSET);
75402
+ if (msolSupply === 0n) {
75403
+ throw new Error("Marinade State has zero mSOL supply");
75404
+ }
75405
+ const underControl = totalActiveBalance + delayedUnstakeCoolingDown + emergencyCoolingDown + availableReserveBalance;
75406
+ if (underControl > U64_MAX) {
75407
+ throw new Error("Marinade virtual staked balance overflow");
75408
+ }
75409
+ const totalVirtualStakedLamports = underControl > circulatingTicketBalance ? underControl - circulatingTicketBalance : 0n;
75410
+ const msolPrice = new BigNumber3__default.default(totalVirtualStakedLamports.toString()).div(msolSupply.toString());
75387
75411
  if (!msolPrice.gt(0) || msolPrice.gte(MAX_MSOL_SOL_RATE)) {
75388
75412
  throw new Error(`Marinade mSOL/SOL rate out of bounds: ${msolPrice.toString()}`);
75389
75413
  }
@@ -75402,7 +75426,7 @@ var ACCOUNT_TYPE_STAKE_POOL = 1;
75402
75426
  var TOTAL_LAMPORTS_OFFSET = 258;
75403
75427
  var POOL_TOKEN_SUPPLY_OFFSET = 266;
75404
75428
  var LAST_UPDATE_EPOCH_OFFSET = 274;
75405
- var MAX_LST_SOL_RATE = 200;
75429
+ var MAX_LST_SOL_RATE = 3;
75406
75430
  function decodeStakePool(data) {
75407
75431
  if (data.length < LAST_UPDATE_EPOCH_OFFSET + 8) {
75408
75432
  throw new Error(`Invalid StakePool account size: ${data.length}`);
@@ -82040,13 +82064,13 @@ var fetchMultipleBanks = async (program, opts) => {
82040
82064
  }
82041
82065
  return bankDatas;
82042
82066
  };
82043
- var U64_MAX = new BigNumber3__default.default("18446744073709551615");
82067
+ var U64_MAX2 = new BigNumber3__default.default("18446744073709551615");
82044
82068
  var DRIFT_SCALED_BALANCE_DECIMALS = 9;
82045
82069
  function isDepositLimitActive(bank) {
82046
- return !bank.config.depositLimit.eq(U64_MAX);
82070
+ return !bank.config.depositLimit.eq(U64_MAX2);
82047
82071
  }
82048
82072
  function isBorrowLimitActive(bank) {
82049
- return !bank.config.borrowLimit.eq(U64_MAX);
82073
+ return !bank.config.borrowLimit.eq(U64_MAX2);
82050
82074
  }
82051
82075
  function getEffectiveDepositLimit(bank) {
82052
82076
  const limit = bank.config.depositLimit;
@@ -82160,12 +82184,12 @@ function computeRemainingCapacity(bank) {
82160
82184
  const remainingCapacity = isDepositLimitActive(bank) ? BigNumber3__default.default.max(
82161
82185
  0,
82162
82186
  getEffectiveDepositLimit(bank).minus(totalDeposits).minus(1).integerValue(BigNumber3__default.default.ROUND_FLOOR)
82163
- ) : U64_MAX;
82187
+ ) : U64_MAX2;
82164
82188
  const totalBorrows = getTotalLiabilityQuantity(bank);
82165
82189
  const remainingBorrowCapacity = isBorrowLimitActive(bank) ? BigNumber3__default.default.max(
82166
82190
  0,
82167
82191
  bank.config.borrowLimit.minus(totalBorrows).minus(1).integerValue(BigNumber3__default.default.ROUND_FLOOR)
82168
- ) : U64_MAX;
82192
+ ) : U64_MAX2;
82169
82193
  const projectionSeconds = computeAccrualProjectionSeconds(bank);
82170
82194
  const { lendingRate, borrowingRate } = computeInterestRates(bank);
82171
82195
  const projectedLendingInterest = lendingRate.times(projectionSeconds).dividedBy(SECONDS_PER_YEAR).times(totalDeposits);
@@ -82414,10 +82438,21 @@ async function addOracleToBanksIx({
82414
82438
  bankAddress,
82415
82439
  feedId,
82416
82440
  oracleKey,
82441
+ oracleAccounts,
82417
82442
  setup,
82418
82443
  groupAddress,
82419
82444
  adminAddress
82420
82445
  }) {
82446
+ if (setup === "Scope" /* Scope */ || setup === "PTPyth" /* PTPyth */ || setup === "PTFixed" /* PTFixed */) {
82447
+ throw new Error(
82448
+ `${setup} must be configured with ${setup === "Scope" /* Scope */ ? "configureScopeOracleIx" : "setOraclePriceIx"}`
82449
+ );
82450
+ }
82451
+ const resolvedOracleAccounts = oracleAccounts ?? (oracleKey ? [oracleKey] : []);
82452
+ const expectedAccountCount = setup === "PythMSOL" /* PythMSOL */ || setup === "PythLST" /* PythLST */ ? 2 : setup === "KaminoMSOL" /* KaminoMSOL */ || setup === "JuplendMSOL" /* JuplendMSOL */ || setup === "KaminoLST" /* KaminoLST */ || setup === "JuplendLST" /* JuplendLST */ ? 3 : void 0;
82453
+ if (expectedAccountCount !== void 0 && resolvedOracleAccounts.length !== expectedAccountCount) {
82454
+ throw new Error(`${setup} requires ${expectedAccountCount} ordered oracle accounts`);
82455
+ }
82421
82456
  const ix = await instructions_default.makeLendingPoolConfigureBankOracleIx(
82422
82457
  program,
82423
82458
  {
@@ -82429,7 +82464,42 @@ async function addOracleToBanksIx({
82429
82464
  setup: serializeOracleSetupToIndex(setup),
82430
82465
  feedId
82431
82466
  },
82432
- oracleKey ? [{ isSigner: false, isWritable: false, pubkey: oracleKey }] : []
82467
+ resolvedOracleAccounts.map((pubkey) => ({
82468
+ isSigner: false,
82469
+ isWritable: false,
82470
+ pubkey
82471
+ }))
82472
+ );
82473
+ return {
82474
+ instructions: [ix],
82475
+ keys: []
82476
+ };
82477
+ }
82478
+ async function setOraclePriceIx({
82479
+ program,
82480
+ bankAddress,
82481
+ price,
82482
+ setup,
82483
+ oracleAccounts = [],
82484
+ groupAddress,
82485
+ adminAddress
82486
+ }) {
82487
+ const expectedAccountCount = setup === "PTPyth" /* PTPyth */ ? 2 : setup === "PTFixed" /* PTFixed */ ? 1 : void 0;
82488
+ if (expectedAccountCount !== void 0 && oracleAccounts.length !== expectedAccountCount) {
82489
+ throw new Error(`${setup} requires ${expectedAccountCount} ordered oracle accounts`);
82490
+ }
82491
+ const ix = await instructions_default.makeLendingPoolSetOraclePriceIx(
82492
+ program,
82493
+ {
82494
+ bank: bankAddress,
82495
+ group: groupAddress,
82496
+ admin: adminAddress
82497
+ },
82498
+ {
82499
+ price: bigNumberToWrappedI80F48(price),
82500
+ setup: serializeOracleSetupToIndex(setup)
82501
+ },
82502
+ oracleAccounts.map((pubkey) => ({ isSigner: false, isWritable: false, pubkey }))
82433
82503
  );
82434
82504
  return {
82435
82505
  instructions: [ix],
@@ -85778,7 +85848,7 @@ exports.TransactionBuildingError = TransactionBuildingError;
85778
85848
  exports.TransactionBuildingErrorCode = TransactionBuildingErrorCode;
85779
85849
  exports.TransactionConfigMap = TransactionConfigMap;
85780
85850
  exports.TransactionType = TransactionType;
85781
- exports.U64_MAX = U64_MAX;
85851
+ exports.U64_MAX = U64_MAX2;
85782
85852
  exports.USDC_DECIMALS = USDC_DECIMALS;
85783
85853
  exports.USDC_MINT = USDC_MINT;
85784
85854
  exports.USDT_MINT = USDT_MINT;
@@ -86142,6 +86212,7 @@ exports.serializeOracleSetupToIndex = serializeOracleSetupToIndex;
86142
86212
  exports.serializeRiskTier = serializeRiskTier;
86143
86213
  exports.serializeSwapEngineRequest = serializeSwapEngineRequest;
86144
86214
  exports.serializeSwapEngineResult = serializeSwapEngineResult;
86215
+ exports.setOraclePriceIx = setOraclePriceIx;
86145
86216
  exports.sharedBridgeLegContext = sharedBridgeLegContext;
86146
86217
  exports.shortenAddress = shortenAddress;
86147
86218
  exports.simulateAccountHealthCache = simulateAccountHealthCache;