@haven-fi/solauto-sdk 1.0.72 → 1.0.74

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.
@@ -1 +1 @@
1
- {"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EAGL,eAAe,EAYhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AASnE,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,WAAW,CAAkB;IAE9B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,sBAAsB,EAAG,qBAAqB,CAAC;IAC/C,oBAAoB,EAAG,qBAAqB,CAAC;IAE7C,iBAAiB,EAAG,SAAS,CAAC;IAC9B,eAAe,EAAG,SAAS,CAAC;IAG5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IAkD1C,8BAA8B;IA0CpC,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAU/B,yBAAyB,IAAI,kBAAkB;IAS/C,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA8C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,WAAW,EAAE,cAAc,EAC3B,aAAa,EAAE,wBAAwB,EACvC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB;IA2DrB,WAAW,CACT,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2BrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAgFlE,iCAAiC,IAAI,kBAAkB;IASjD,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAiBlE"}
1
+ {"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EAGL,eAAe,EAYhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAWnE,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,WAAW,CAAkB;IAE9B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,sBAAsB,EAAG,qBAAqB,CAAC;IAC/C,oBAAoB,EAAG,qBAAqB,CAAC;IAE7C,iBAAiB,EAAG,SAAS,CAAC;IAC9B,eAAe,EAAG,SAAS,CAAC;IAG5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IAkE1C,8BAA8B;IA0CpC,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAU/B,yBAAyB,IAAI,kBAAkB;IAS/C,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA8C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,WAAW,EAAE,cAAc,EAC3B,aAAa,EAAE,wBAAwB,EACvC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB;IA2DrB,WAAW,CACT,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2BrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAoFlE,iCAAiC,IAAI,kBAAkB;IASjD,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAiBlE"}
@@ -13,6 +13,7 @@ const marginfi_sdk_1 = require("../marginfi-sdk");
13
13
  const marginfiUtils_1 = require("../utils/marginfiUtils");
14
14
  const numberUtils_1 = require("../utils/numberUtils");
15
15
  const constants_1 = require("../constants");
16
+ const utils_1 = require("../utils");
16
17
  class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
17
18
  constructor() {
18
19
  super(...arguments);
@@ -52,6 +53,10 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
52
53
  // this.debtPriceOracle = toWeb3JsPublicKey(debtBank.config.oracleKeys[0]);
53
54
  this.supplyPriceOracle = new web3_js_1.PublicKey(this.marginfiSupplyAccounts.priceOracle);
54
55
  this.debtPriceOracle = new web3_js_1.PublicKey(this.marginfiDebtAccounts.priceOracle);
56
+ if (!this.solautoPositionState) {
57
+ const [maxLtv, liqThreshold] = await (0, marginfiUtils_1.getMaxLtvAndLiqThreshold)(this.umi, { mint: this.supplyMint }, { mint: this.debtMint });
58
+ this.solautoPositionState = (0, utils_1.createFakePositionState)({ mint: this.supplyMint }, { mint: this.debtMint }, (0, numberUtils_1.toBps)(maxLtv), (0, numberUtils_1.toBps)(liqThreshold));
59
+ }
55
60
  if (!this.initialized) {
56
61
  await this.setIntermediaryMarginfiDetails();
57
62
  }
@@ -1,7 +1,8 @@
1
- export declare const DEFAULT_RISK_AVERSION_BPS = 1500;
1
+ export declare const BASIS_POINTS = 10000;
2
2
  export declare const DEFAULT_LIMIT_GAP_BPS = 1000;
3
3
  export declare const MIN_POSITION_STATE_FRESHNESS_SECS = 5;
4
- export declare const MAX_REPAY_GAP_BPS = 100;
4
+ export declare const MIN_REPAY_GAP_BPS = 100;
5
+ export declare const MIN_BOOST_GAP_BPS = 50;
5
6
  export declare const PRICES: {
6
7
  [key: string]: {
7
8
  price: number;
@@ -1 +1 @@
1
- {"version":3,"file":"solautoConstants.d.ts","sourceRoot":"","sources":["../../src/constants/solautoConstants.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAQrC,eAAO,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAA;CAAO,CAAC;AAE9E,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAE1E,eAAO,MAAM,kBAAkB,gDAAgD,CAAC;AAEhF,eAAO,MAAM,qBAAqB,UAWjC,CAAC"}
1
+ {"version":3,"file":"solautoConstants.d.ts","sourceRoot":"","sources":["../../src/constants/solautoConstants.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,YAAY,QAAQ,CAAC;AAElC,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAQpC,eAAO,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAA;CAAO,CAAC;AAE9E,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAE1E,eAAO,MAAM,kBAAkB,gDAAgD,CAAC;AAEhF,eAAO,MAAM,qBAAqB,UAWjC,CAAC"}
@@ -1,15 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.STANDARD_LUT_ACCOUNTS = exports.JUPITER_PROGRAM_ID = exports.SOLAUTO_LUT = exports.PRICES = exports.MAX_REPAY_GAP_BPS = exports.MIN_POSITION_STATE_FRESHNESS_SECS = exports.DEFAULT_LIMIT_GAP_BPS = exports.DEFAULT_RISK_AVERSION_BPS = void 0;
3
+ exports.STANDARD_LUT_ACCOUNTS = exports.JUPITER_PROGRAM_ID = exports.SOLAUTO_LUT = exports.PRICES = exports.MIN_BOOST_GAP_BPS = exports.MIN_REPAY_GAP_BPS = exports.MIN_POSITION_STATE_FRESHNESS_SECS = exports.DEFAULT_LIMIT_GAP_BPS = exports.BASIS_POINTS = void 0;
4
4
  const web3_js_1 = require("@solana/web3.js");
5
5
  const spl_token_1 = require("@solana/spl-token");
6
6
  // import { JitoRpcConnection } from "jito-ts";
7
7
  const generated_1 = require("../generated");
8
8
  const generalAccounts_1 = require("./generalAccounts");
9
- exports.DEFAULT_RISK_AVERSION_BPS = 1500;
9
+ exports.BASIS_POINTS = 10000;
10
10
  exports.DEFAULT_LIMIT_GAP_BPS = 1000;
11
11
  exports.MIN_POSITION_STATE_FRESHNESS_SECS = 5;
12
- exports.MAX_REPAY_GAP_BPS = 100;
12
+ exports.MIN_REPAY_GAP_BPS = 100;
13
+ exports.MIN_BOOST_GAP_BPS = 50;
13
14
  // export const JITO_BLOCK_ENGINE = "ny.mainnet.block-engine.jito.wtf";
14
15
  // export const JITO_CONNECTION = new JitoRpcConnection(
15
16
  // `https://${JITO_BLOCK_ENGINE}`,
@@ -1 +1 @@
1
- {"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAKL,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,qBAAqB,CAU3E;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,GAAG,EACR,MAAM,EAAE;IACN,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,IAAI,EAAE;IACJ,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA2D3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CACR;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,EAAE,CAC/E,CA6CA;AAgED,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,iBAAiB,EAAE,SAAS,EAC5B,UAAU,CAAC,EAAE,SAAS,EACtB,QAAQ,CAAC,EAAE,SAAS,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA+IpC;AA+DD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0B3B"}
1
+ {"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAKL,MAAM,iBAAiB,CAAC;AAWzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,qBAAqB,CAU3E;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,GAAG,EACR,MAAM,EAAE;IACN,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,IAAI,EAAE;IACJ,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA2D3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CACR;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,EAAE,CAC/E,CA6CA;AAgED,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,iBAAiB,EAAE,SAAS,EAC5B,UAAU,CAAC,EAAE,SAAS,EACtB,QAAQ,CAAC,EAAE,SAAS,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA+IpC;AA+DD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0B3B"}
@@ -189,15 +189,15 @@ async function getMarginfiAccountPositionState(umi, marginfiAccountPk, supplyMin
189
189
  const supplyUsd = (0, numberUtils_1.fromBaseUnit)(supplyUsage.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
190
190
  const debtUsd = (0, numberUtils_1.fromBaseUnit)(debtUsage?.amountUsed?.baseAmountUsdValue ?? BigInt(0), generalAccounts_1.USD_DECIMALS);
191
191
  return {
192
- liqUtilizationRateBps: (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, Math.round(liqThreshold * 10000)),
192
+ liqUtilizationRateBps: (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, (0, numberUtils_1.toBps)(liqThreshold)),
193
193
  netWorth: {
194
194
  baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd - debtUsd, generalAccounts_1.USD_DECIMALS),
195
195
  baseUnit: (0, numberUtils_1.toBaseUnit)((supplyUsd - debtUsd) / supplyPrice, supplyUsage.decimals),
196
196
  },
197
197
  supply: supplyUsage,
198
198
  debt: debtUsage,
199
- maxLtvBps: Math.round(maxLtv * 10000),
200
- liqThresholdBps: Math.round(liqThreshold * 10000),
199
+ maxLtvBps: (0, numberUtils_1.toBps)(maxLtv),
200
+ liqThresholdBps: (0, numberUtils_1.toBps)(liqThreshold),
201
201
  lastUpdated: BigInt((0, generalUtils_1.currentUnixSeconds)()),
202
202
  padding1: [],
203
203
  padding2: [],
@@ -28,10 +28,10 @@ function fromBaseUnit(value, decimals) {
28
28
  return Number(value) / Math.pow(10, decimals);
29
29
  }
30
30
  function fromBps(value) {
31
- return value / 10000;
31
+ return value / constants_1.BASIS_POINTS;
32
32
  }
33
33
  function toBps(value) {
34
- return Math.round(value * 10000);
34
+ return Math.round(value * constants_1.BASIS_POINTS);
35
35
  }
36
36
  function bytesToI80F48(bytes) {
37
37
  if (bytes.length !== 16) {
@@ -107,5 +107,5 @@ function maxRepayFromBps(maxLtvBps, liqThresholdBps) {
107
107
  return Math.min(9000, getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps - 1000, 0.005));
108
108
  }
109
109
  function maxRepayToBps(maxLtvBps, liqThresholdBps) {
110
- return Math.min(maxRepayFromBps(maxLtvBps, liqThresholdBps) - constants_1.MAX_REPAY_GAP_BPS, getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, 0.005));
110
+ return Math.min(maxRepayFromBps(maxLtvBps, liqThresholdBps) - constants_1.MIN_REPAY_GAP_BPS, getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, 0.005));
111
111
  }
@@ -15,8 +15,8 @@ export declare function getAllPositionsByAuthority(umi: Umi, user: PublicKey): P
15
15
  export declare function positionStateWithLatestPrices(state: PositionState, supplyPrice?: number, debtPrice?: number): Promise<PositionState>;
16
16
  interface AssetProps {
17
17
  mint: PublicKey;
18
- price: number;
19
- amountUsed: number;
18
+ price?: number;
19
+ amountUsed?: number;
20
20
  }
21
21
  export declare function createFakePositionState(supply: AssetProps, debt: AssetProps, maxLtvBps: number, liqThresholdBps: number): PositionState;
22
22
  type PositionAdjustment = {
@@ -1 +1 @@
1
- {"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"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"}
@@ -237,20 +237,20 @@ async function positionStateWithLatestPrices(state, supplyPrice, debtPrice) {
237
237
  function createFakePositionState(supply, debt, maxLtvBps, liqThresholdBps) {
238
238
  const supplyDecimals = constants_1.TOKEN_INFO[supply.mint.toString()].decimals;
239
239
  const debtDecimals = constants_1.TOKEN_INFO[debt.mint.toString()].decimals;
240
- const supplyUsd = supply.amountUsed * supply.price;
241
- const debtUsd = debt.amountUsed * debt.price;
240
+ const supplyUsd = (supply.amountUsed ?? 0) * (supply.price ?? 0);
241
+ const debtUsd = (debt.amountUsed ?? 0) * (debt.price ?? 0);
242
242
  return {
243
243
  liqUtilizationRateBps: (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, liqThresholdBps),
244
244
  supply: {
245
245
  amountUsed: {
246
- baseUnit: (0, numberUtils_1.toBaseUnit)(supply.amountUsed, supplyDecimals),
246
+ baseUnit: (0, numberUtils_1.toBaseUnit)(supply.amountUsed ?? 0, supplyDecimals),
247
247
  baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd, constants_1.USD_DECIMALS),
248
248
  },
249
249
  amountCanBeUsed: {
250
250
  baseUnit: (0, numberUtils_1.toBaseUnit)(1000000, supplyDecimals),
251
- baseAmountUsdValue: BigInt(Math.round(1000000 * supply.price)),
251
+ baseAmountUsdValue: BigInt(Math.round(1000000 * (supply.price ?? 0))),
252
252
  },
253
- baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(supply.price, constants_1.USD_DECIMALS),
253
+ baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(supply.price ?? 0, constants_1.USD_DECIMALS),
254
254
  borrowFeeBps: 0,
255
255
  decimals: supplyDecimals,
256
256
  flashLoanFeeBps: 0,
@@ -261,14 +261,14 @@ function createFakePositionState(supply, debt, maxLtvBps, liqThresholdBps) {
261
261
  },
262
262
  debt: {
263
263
  amountUsed: {
264
- baseUnit: (0, numberUtils_1.toBaseUnit)(debt.amountUsed, debtDecimals),
264
+ baseUnit: (0, numberUtils_1.toBaseUnit)(debt.amountUsed ?? 0, debtDecimals),
265
265
  baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(debtUsd, constants_1.USD_DECIMALS),
266
266
  },
267
267
  amountCanBeUsed: {
268
268
  baseUnit: (0, numberUtils_1.toBaseUnit)(1000000, debtDecimals),
269
- baseAmountUsdValue: BigInt(Math.round(1000000 * debt.price)),
269
+ baseAmountUsdValue: BigInt(Math.round(1000000 * (debt.price ?? 0))),
270
270
  },
271
- baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(debt.price, constants_1.USD_DECIMALS),
271
+ baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(debt.price ?? 0, constants_1.USD_DECIMALS),
272
272
  borrowFeeBps: 0,
273
273
  decimals: debtDecimals,
274
274
  flashLoanFeeBps: 0,
@@ -278,7 +278,9 @@ function createFakePositionState(supply, debt, maxLtvBps, liqThresholdBps) {
278
278
  padding: new Uint8Array([]),
279
279
  },
280
280
  netWorth: {
281
- baseUnit: (0, numberUtils_1.toBaseUnit)((supplyUsd - debtUsd) / supply.price, supplyDecimals),
281
+ baseUnit: supply.price
282
+ ? (0, numberUtils_1.toBaseUnit)((supplyUsd - debtUsd) / supply.price, supplyDecimals)
283
+ : BigInt(0),
282
284
  baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd - debtUsd, constants_1.USD_DECIMALS),
283
285
  },
284
286
  maxLtvBps,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.72",
3
+ "version": "1.0.74",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "description": "Typescript SDK for the Solauto program on the Solana blockchain",
@@ -55,9 +55,11 @@ import {
55
55
  findMarginfiAccounts,
56
56
  getAllMarginfiAccountsByAuthority,
57
57
  getMarginfiAccountPositionState,
58
+ getMaxLtvAndLiqThreshold,
58
59
  } from "../utils/marginfiUtils";
59
- import { bytesToI80F48 } from "../utils/numberUtils";
60
+ import { bytesToI80F48, toBps } from "../utils/numberUtils";
60
61
  import { SOLAUTO_MANAGER } from "../constants";
62
+ import { createFakePositionState } from "../utils";
61
63
 
62
64
  export interface SolautoMarginfiClientArgs extends SolautoClientArgs {
63
65
  marginfiAccount?: PublicKey | Signer;
@@ -127,9 +129,25 @@ export class SolautoMarginfiClient extends SolautoClient {
127
129
  // this.supplyPriceOracle = toWeb3JsPublicKey(supplyBank.config.oracleKeys[0]);
128
130
  // this.debtPriceOracle = toWeb3JsPublicKey(debtBank.config.oracleKeys[0]);
129
131
 
130
- this.supplyPriceOracle = new PublicKey(this.marginfiSupplyAccounts.priceOracle);
132
+ this.supplyPriceOracle = new PublicKey(
133
+ this.marginfiSupplyAccounts.priceOracle
134
+ );
131
135
  this.debtPriceOracle = new PublicKey(this.marginfiDebtAccounts.priceOracle);
132
136
 
137
+ if (!this.solautoPositionState) {
138
+ const [maxLtv, liqThreshold] = await getMaxLtvAndLiqThreshold(
139
+ this.umi,
140
+ { mint: this.supplyMint },
141
+ { mint: this.debtMint }
142
+ );
143
+ this.solautoPositionState = createFakePositionState(
144
+ { mint: this.supplyMint },
145
+ { mint: this.debtMint },
146
+ toBps(maxLtv),
147
+ toBps(liqThreshold)
148
+ );
149
+ }
150
+
133
151
  if (!this.initialized) {
134
152
  await this.setIntermediaryMarginfiDetails();
135
153
  }
@@ -510,33 +528,37 @@ export class SolautoMarginfiClient extends SolautoClient {
510
528
  let includedFlashLoanToken = false;
511
529
 
512
530
  if (this.intermediaryMarginfiAccount) {
513
- this.intermediaryMarginfiAccount.lendingAccount.balances.forEach(async (x) => {
514
- if (x.active) {
515
- if (x.bankPk === accounts.data.bank) {
516
- includedFlashLoanToken = true;
531
+ this.intermediaryMarginfiAccount.lendingAccount.balances.forEach(
532
+ async (x) => {
533
+ if (x.active) {
534
+ if (x.bankPk === accounts.data.bank) {
535
+ includedFlashLoanToken = true;
536
+ }
537
+
538
+ // TODO: Don't dynamically pull from bank until Marginfi sorts out their price oracle issues.
539
+ // const bankData = await safeFetchBank(this.umi, publicKey(accounts.data.bank));
540
+ // const priceOracle = bankData!.config.oracleKeys[0];
541
+ const priceOracle = publicKey(
542
+ findMarginfiAccounts(toWeb3JsPublicKey(x.bankPk)).priceOracle
543
+ );
544
+
545
+ remainingAccounts.push(
546
+ ...[
547
+ {
548
+ pubkey: x.bankPk,
549
+ isSigner: false,
550
+ isWritable: false,
551
+ },
552
+ {
553
+ pubkey: priceOracle,
554
+ isSigner: false,
555
+ isWritable: false,
556
+ },
557
+ ]
558
+ );
517
559
  }
518
-
519
- // TODO: Don't dynamically pull from bank until Marginfi sorts out their price oracle issues.
520
- // const bankData = await safeFetchBank(this.umi, publicKey(accounts.data.bank));
521
- // const priceOracle = bankData!.config.oracleKeys[0];
522
- const priceOracle = publicKey(findMarginfiAccounts(toWeb3JsPublicKey(x.bankPk)).priceOracle);
523
-
524
- remainingAccounts.push(
525
- ...[
526
- {
527
- pubkey: x.bankPk,
528
- isSigner: false,
529
- isWritable: false,
530
- },
531
- {
532
- pubkey: priceOracle,
533
- isSigner: false,
534
- isWritable: false,
535
- },
536
- ]
537
- );
538
560
  }
539
- });
561
+ );
540
562
  }
541
563
  if (!this.intermediaryMarginfiAccount || !includedFlashLoanToken) {
542
564
  remainingAccounts.push(
@@ -13,10 +13,12 @@ import {
13
13
  import { SOLAUTO_PROGRAM_ID } from "../generated";
14
14
  import { SOLAUTO_MANAGER } from "./generalAccounts";
15
15
 
16
- export const DEFAULT_RISK_AVERSION_BPS = 1500;
16
+ export const BASIS_POINTS = 10000;
17
+
17
18
  export const DEFAULT_LIMIT_GAP_BPS = 1000;
18
19
  export const MIN_POSITION_STATE_FRESHNESS_SECS = 5;
19
- export const MAX_REPAY_GAP_BPS = 100;
20
+ export const MIN_REPAY_GAP_BPS = 100;
21
+ export const MIN_BOOST_GAP_BPS = 50;
20
22
 
21
23
  // export const JITO_BLOCK_ENGINE = "ny.mainnet.block-engine.jito.wtf";
22
24
  // export const JITO_CONNECTION = new JitoRpcConnection(
@@ -14,6 +14,7 @@ import {
14
14
  fromBaseUnit,
15
15
  getLiqUtilzationRateBps,
16
16
  toBaseUnit,
17
+ toBps,
17
18
  } from "./numberUtils";
18
19
  import { PRICES } from "../constants/solautoConstants";
19
20
  import { MARGINFI_ACCOUNTS } from "../constants/marginfiAccounts";
@@ -353,7 +354,7 @@ export async function getMarginfiAccountPositionState(
353
354
  liqUtilizationRateBps: getLiqUtilzationRateBps(
354
355
  supplyUsd,
355
356
  debtUsd,
356
- Math.round(liqThreshold * 10000)
357
+ toBps(liqThreshold)
357
358
  ),
358
359
  netWorth: {
359
360
  baseAmountUsdValue: toBaseUnit(supplyUsd - debtUsd, USD_DECIMALS),
@@ -364,8 +365,8 @@ export async function getMarginfiAccountPositionState(
364
365
  },
365
366
  supply: supplyUsage!,
366
367
  debt: debtUsage!,
367
- maxLtvBps: Math.round(maxLtv * 10000),
368
- liqThresholdBps: Math.round(liqThreshold * 10000),
368
+ maxLtvBps: toBps(maxLtv),
369
+ liqThresholdBps: toBps(liqThreshold),
369
370
  lastUpdated: BigInt(currentUnixSeconds()),
370
371
  padding1: [],
371
372
  padding2: [],
@@ -1,4 +1,4 @@
1
- import { MAX_REPAY_GAP_BPS } from "../constants";
1
+ import { BASIS_POINTS, MIN_REPAY_GAP_BPS } from "../constants";
2
2
  import { FeeType } from "../generated";
3
3
 
4
4
  export function getLiqUtilzationRateBps(
@@ -22,11 +22,11 @@ export function fromBaseUnit(value: bigint, decimals: number): number {
22
22
  }
23
23
 
24
24
  export function fromBps(value: number): number {
25
- return value / 10000;
25
+ return value / BASIS_POINTS;
26
26
  }
27
27
 
28
28
  export function toBps(value: number): number {
29
- return Math.round(value * 10000);
29
+ return Math.round(value * BASIS_POINTS);
30
30
  }
31
31
 
32
32
  export function bytesToI80F48(bytes: number[]): number {
@@ -148,7 +148,7 @@ export function maxRepayFromBps(maxLtvBps: number, liqThresholdBps: number) {
148
148
 
149
149
  export function maxRepayToBps(maxLtvBps: number, liqThresholdBps: number) {
150
150
  return Math.min(
151
- maxRepayFromBps(maxLtvBps, liqThresholdBps) - MAX_REPAY_GAP_BPS,
151
+ maxRepayFromBps(maxLtvBps, liqThresholdBps) - MIN_REPAY_GAP_BPS,
152
152
  getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, 0.005)
153
153
  );
154
154
  }
@@ -26,9 +26,7 @@ import {
26
26
  TOKEN_INFO,
27
27
  USD_DECIMALS,
28
28
  } from "../../constants";
29
- import {
30
- getAllMarginfiAccountsByAuthority,
31
- } from "../marginfiUtils";
29
+ import { getAllMarginfiAccountsByAuthority } from "../marginfiUtils";
32
30
  import { RebalanceAction, SolautoPositionDetails } from "../../types/solauto";
33
31
 
34
32
  function newPeriodsPassed(
@@ -358,8 +356,8 @@ export async function positionStateWithLatestPrices(
358
356
 
359
357
  interface AssetProps {
360
358
  mint: PublicKey;
361
- price: number;
362
- amountUsed: number;
359
+ price?: number;
360
+ amountUsed?: number;
363
361
  }
364
362
 
365
363
  export function createFakePositionState(
@@ -371,8 +369,8 @@ export function createFakePositionState(
371
369
  const supplyDecimals = TOKEN_INFO[supply.mint.toString()].decimals;
372
370
  const debtDecimals = TOKEN_INFO[debt.mint.toString()].decimals;
373
371
 
374
- const supplyUsd = supply.amountUsed * supply.price;
375
- const debtUsd = debt.amountUsed * debt.price;
372
+ const supplyUsd = (supply.amountUsed ?? 0) * (supply.price ?? 0);
373
+ const debtUsd = (debt.amountUsed ?? 0) * (debt.price ?? 0);
376
374
 
377
375
  return {
378
376
  liqUtilizationRateBps: getLiqUtilzationRateBps(
@@ -382,14 +380,14 @@ export function createFakePositionState(
382
380
  ),
383
381
  supply: {
384
382
  amountUsed: {
385
- baseUnit: toBaseUnit(supply.amountUsed, supplyDecimals),
383
+ baseUnit: toBaseUnit(supply.amountUsed ?? 0, supplyDecimals),
386
384
  baseAmountUsdValue: toBaseUnit(supplyUsd, USD_DECIMALS),
387
385
  },
388
386
  amountCanBeUsed: {
389
387
  baseUnit: toBaseUnit(1000000, supplyDecimals),
390
- baseAmountUsdValue: BigInt(Math.round(1000000 * supply.price)),
388
+ baseAmountUsdValue: BigInt(Math.round(1000000 * (supply.price ?? 0))),
391
389
  },
392
- baseAmountMarketPriceUsd: toBaseUnit(supply.price, USD_DECIMALS),
390
+ baseAmountMarketPriceUsd: toBaseUnit(supply.price ?? 0, USD_DECIMALS),
393
391
  borrowFeeBps: 0,
394
392
  decimals: supplyDecimals,
395
393
  flashLoanFeeBps: 0,
@@ -400,14 +398,14 @@ export function createFakePositionState(
400
398
  },
401
399
  debt: {
402
400
  amountUsed: {
403
- baseUnit: toBaseUnit(debt.amountUsed, debtDecimals),
401
+ baseUnit: toBaseUnit(debt.amountUsed ?? 0, debtDecimals),
404
402
  baseAmountUsdValue: toBaseUnit(debtUsd, USD_DECIMALS),
405
403
  },
406
404
  amountCanBeUsed: {
407
405
  baseUnit: toBaseUnit(1000000, debtDecimals),
408
- baseAmountUsdValue: BigInt(Math.round(1000000 * debt.price)),
406
+ baseAmountUsdValue: BigInt(Math.round(1000000 * (debt.price ?? 0))),
409
407
  },
410
- baseAmountMarketPriceUsd: toBaseUnit(debt.price, USD_DECIMALS),
408
+ baseAmountMarketPriceUsd: toBaseUnit(debt.price ?? 0, USD_DECIMALS),
411
409
  borrowFeeBps: 0,
412
410
  decimals: debtDecimals,
413
411
  flashLoanFeeBps: 0,
@@ -417,10 +415,9 @@ export function createFakePositionState(
417
415
  padding: new Uint8Array([]),
418
416
  },
419
417
  netWorth: {
420
- baseUnit: toBaseUnit(
421
- (supplyUsd - debtUsd) / supply.price,
422
- supplyDecimals
423
- ),
418
+ baseUnit: supply.price
419
+ ? toBaseUnit((supplyUsd - debtUsd) / supply.price, supplyDecimals)
420
+ : BigInt(0),
424
421
  baseAmountUsdValue: toBaseUnit(supplyUsd - debtUsd, USD_DECIMALS),
425
422
  },
426
423
  maxLtvBps,