@haven-fi/solauto-sdk 1.0.73 → 1.0.75

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
  }
@@ -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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"}
@@ -198,7 +198,15 @@ async function getAllPositionsByAuthority(umi, user) {
198
198
  debtMint: x.debtMint,
199
199
  })));
200
200
  // TODO support other platforms
201
- return allPositions;
201
+ return allPositions.sort((a, b) => {
202
+ if (a.positionId === 0 && b.positionId !== 0) {
203
+ return 1;
204
+ }
205
+ if (b.positionId === 0 && a.positionId !== 0) {
206
+ return -1;
207
+ }
208
+ return a.positionId - b.positionId;
209
+ });
202
210
  }
203
211
  async function positionStateWithLatestPrices(state, supplyPrice, debtPrice) {
204
212
  if (!supplyPrice || !debtPrice) {
@@ -237,20 +245,20 @@ async function positionStateWithLatestPrices(state, supplyPrice, debtPrice) {
237
245
  function createFakePositionState(supply, debt, maxLtvBps, liqThresholdBps) {
238
246
  const supplyDecimals = constants_1.TOKEN_INFO[supply.mint.toString()].decimals;
239
247
  const debtDecimals = constants_1.TOKEN_INFO[debt.mint.toString()].decimals;
240
- const supplyUsd = supply.amountUsed * supply.price;
241
- const debtUsd = debt.amountUsed * debt.price;
248
+ const supplyUsd = (supply.amountUsed ?? 0) * (supply.price ?? 0);
249
+ const debtUsd = (debt.amountUsed ?? 0) * (debt.price ?? 0);
242
250
  return {
243
251
  liqUtilizationRateBps: (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, liqThresholdBps),
244
252
  supply: {
245
253
  amountUsed: {
246
- baseUnit: (0, numberUtils_1.toBaseUnit)(supply.amountUsed, supplyDecimals),
254
+ baseUnit: (0, numberUtils_1.toBaseUnit)(supply.amountUsed ?? 0, supplyDecimals),
247
255
  baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd, constants_1.USD_DECIMALS),
248
256
  },
249
257
  amountCanBeUsed: {
250
258
  baseUnit: (0, numberUtils_1.toBaseUnit)(1000000, supplyDecimals),
251
- baseAmountUsdValue: BigInt(Math.round(1000000 * supply.price)),
259
+ baseAmountUsdValue: BigInt(Math.round(1000000 * (supply.price ?? 0))),
252
260
  },
253
- baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(supply.price, constants_1.USD_DECIMALS),
261
+ baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(supply.price ?? 0, constants_1.USD_DECIMALS),
254
262
  borrowFeeBps: 0,
255
263
  decimals: supplyDecimals,
256
264
  flashLoanFeeBps: 0,
@@ -261,14 +269,14 @@ function createFakePositionState(supply, debt, maxLtvBps, liqThresholdBps) {
261
269
  },
262
270
  debt: {
263
271
  amountUsed: {
264
- baseUnit: (0, numberUtils_1.toBaseUnit)(debt.amountUsed, debtDecimals),
272
+ baseUnit: (0, numberUtils_1.toBaseUnit)(debt.amountUsed ?? 0, debtDecimals),
265
273
  baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(debtUsd, constants_1.USD_DECIMALS),
266
274
  },
267
275
  amountCanBeUsed: {
268
276
  baseUnit: (0, numberUtils_1.toBaseUnit)(1000000, debtDecimals),
269
- baseAmountUsdValue: BigInt(Math.round(1000000 * debt.price)),
277
+ baseAmountUsdValue: BigInt(Math.round(1000000 * (debt.price ?? 0))),
270
278
  },
271
- baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(debt.price, constants_1.USD_DECIMALS),
279
+ baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(debt.price ?? 0, constants_1.USD_DECIMALS),
272
280
  borrowFeeBps: 0,
273
281
  decimals: debtDecimals,
274
282
  flashLoanFeeBps: 0,
@@ -278,7 +286,9 @@ function createFakePositionState(supply, debt, maxLtvBps, liqThresholdBps) {
278
286
  padding: new Uint8Array([]),
279
287
  },
280
288
  netWorth: {
281
- baseUnit: (0, numberUtils_1.toBaseUnit)((supplyUsd - debtUsd) / supply.price, supplyDecimals),
289
+ baseUnit: supply.price
290
+ ? (0, numberUtils_1.toBaseUnit)((supplyUsd - debtUsd) / supply.price, supplyDecimals)
291
+ : BigInt(0),
282
292
  baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd - debtUsd, constants_1.USD_DECIMALS),
283
293
  },
284
294
  maxLtvBps,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.73",
3
+ "version": "1.0.75",
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(
@@ -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(
@@ -304,7 +302,15 @@ export async function getAllPositionsByAuthority(
304
302
 
305
303
  // TODO support other platforms
306
304
 
307
- return allPositions;
305
+ return allPositions.sort((a, b) => {
306
+ if (a.positionId === 0 && b.positionId !== 0) {
307
+ return 1;
308
+ }
309
+ if (b.positionId === 0 && a.positionId !== 0) {
310
+ return -1;
311
+ }
312
+ return a.positionId - b.positionId;
313
+ });
308
314
  }
309
315
 
310
316
  export async function positionStateWithLatestPrices(
@@ -358,8 +364,8 @@ export async function positionStateWithLatestPrices(
358
364
 
359
365
  interface AssetProps {
360
366
  mint: PublicKey;
361
- price: number;
362
- amountUsed: number;
367
+ price?: number;
368
+ amountUsed?: number;
363
369
  }
364
370
 
365
371
  export function createFakePositionState(
@@ -371,8 +377,8 @@ export function createFakePositionState(
371
377
  const supplyDecimals = TOKEN_INFO[supply.mint.toString()].decimals;
372
378
  const debtDecimals = TOKEN_INFO[debt.mint.toString()].decimals;
373
379
 
374
- const supplyUsd = supply.amountUsed * supply.price;
375
- const debtUsd = debt.amountUsed * debt.price;
380
+ const supplyUsd = (supply.amountUsed ?? 0) * (supply.price ?? 0);
381
+ const debtUsd = (debt.amountUsed ?? 0) * (debt.price ?? 0);
376
382
 
377
383
  return {
378
384
  liqUtilizationRateBps: getLiqUtilzationRateBps(
@@ -382,14 +388,14 @@ export function createFakePositionState(
382
388
  ),
383
389
  supply: {
384
390
  amountUsed: {
385
- baseUnit: toBaseUnit(supply.amountUsed, supplyDecimals),
391
+ baseUnit: toBaseUnit(supply.amountUsed ?? 0, supplyDecimals),
386
392
  baseAmountUsdValue: toBaseUnit(supplyUsd, USD_DECIMALS),
387
393
  },
388
394
  amountCanBeUsed: {
389
395
  baseUnit: toBaseUnit(1000000, supplyDecimals),
390
- baseAmountUsdValue: BigInt(Math.round(1000000 * supply.price)),
396
+ baseAmountUsdValue: BigInt(Math.round(1000000 * (supply.price ?? 0))),
391
397
  },
392
- baseAmountMarketPriceUsd: toBaseUnit(supply.price, USD_DECIMALS),
398
+ baseAmountMarketPriceUsd: toBaseUnit(supply.price ?? 0, USD_DECIMALS),
393
399
  borrowFeeBps: 0,
394
400
  decimals: supplyDecimals,
395
401
  flashLoanFeeBps: 0,
@@ -400,14 +406,14 @@ export function createFakePositionState(
400
406
  },
401
407
  debt: {
402
408
  amountUsed: {
403
- baseUnit: toBaseUnit(debt.amountUsed, debtDecimals),
409
+ baseUnit: toBaseUnit(debt.amountUsed ?? 0, debtDecimals),
404
410
  baseAmountUsdValue: toBaseUnit(debtUsd, USD_DECIMALS),
405
411
  },
406
412
  amountCanBeUsed: {
407
413
  baseUnit: toBaseUnit(1000000, debtDecimals),
408
- baseAmountUsdValue: BigInt(Math.round(1000000 * debt.price)),
414
+ baseAmountUsdValue: BigInt(Math.round(1000000 * (debt.price ?? 0))),
409
415
  },
410
- baseAmountMarketPriceUsd: toBaseUnit(debt.price, USD_DECIMALS),
416
+ baseAmountMarketPriceUsd: toBaseUnit(debt.price ?? 0, USD_DECIMALS),
411
417
  borrowFeeBps: 0,
412
418
  decimals: debtDecimals,
413
419
  flashLoanFeeBps: 0,
@@ -417,10 +423,9 @@ export function createFakePositionState(
417
423
  padding: new Uint8Array([]),
418
424
  },
419
425
  netWorth: {
420
- baseUnit: toBaseUnit(
421
- (supplyUsd - debtUsd) / supply.price,
422
- supplyDecimals
423
- ),
426
+ baseUnit: supply.price
427
+ ? toBaseUnit((supplyUsd - debtUsd) / supply.price, supplyDecimals)
428
+ : BigInt(0),
424
429
  baseAmountUsdValue: toBaseUnit(supplyUsd - debtUsd, USD_DECIMALS),
425
430
  },
426
431
  maxLtvBps,