@haven-fi/solauto-sdk 1.0.730 → 1.0.731

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":"rebalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceTxBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAgCrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IACpC,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,wBAAwB,CAAC;IAVnC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,cAAc,CAAC,CAAwB;IAC/C,OAAO,CAAC,SAAS,CAAiC;gBAGxC,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,YAAA,EACpC,YAAY,CAAC,EAAE,OAAO,YAAA,EACtB,wBAAwB,CAAC,EAAE,MAAM,YAAA;IAG3C,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,oBAAoB;IAwC5B,OAAO,CAAC,iCAAiC;YAgC3B,qBAAqB;IA0CnC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,yBAAyB;YAqBnB,mBAAmB;YAyBnB,sBAAsB;YAyBtB,mBAAmB;IAsFpB,gBAAgB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAe9C"}
1
+ {"version":3,"file":"rebalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceTxBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAgCrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IACpC,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,wBAAwB,CAAC;IAVnC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,cAAc,CAAC,CAAwB;IAC/C,OAAO,CAAC,SAAS,CAAiC;gBAGxC,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,YAAA,EACpC,YAAY,CAAC,EAAE,OAAO,YAAA,EACtB,wBAAwB,CAAC,EAAE,MAAM,YAAA;IAG3C,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,oBAAoB;IAyC5B,OAAO,CAAC,iCAAiC;YAgC3B,qBAAqB;IA4CnC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,yBAAyB;YAqBnB,mBAAmB;YAyBnB,sBAAsB;YAyBtB,mBAAmB;IAsFpB,gBAAgB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAe9C"}
@@ -28,17 +28,18 @@ class RebalanceTxBuilder {
28
28
  getRebalanceValues() {
29
29
  return (0, rebalanceValues_1.getRebalanceValues)(this.client.pos, this.priceType, this.targetLiqUtilizationRateBps, solautoFees_1.SolautoFeesBps.create(this.client.isReferred, this.targetLiqUtilizationRateBps, this.client.pos.netWorthUsd(this.priceType)), this.flRequirements?.flFeeBps ?? 0, this.bpsDistanceFromRebalance);
30
30
  }
31
- getFlLiquiditySource(supplyLiquidityAvailable, debtLiquidityAvailable) {
31
+ getFlLiquiditySource(attemptNum, supplyLiquidityAvailable, debtLiquidityAvailable) {
32
32
  const debtAdjustmentUsd = Math.abs(this.values.debtAdjustmentUsd);
33
- const insufficientLiquidity = (amountNeededUsd, liquidityAvailable, tokenMint) => {
34
- const liquidityUsd = (0, utils_1.fromBaseUnit)(liquidityAvailable, (0, utils_1.tokenInfo)(tokenMint).decimals) *
35
- ((0, utils_1.safeGetPrice)(tokenMint) ?? 0);
36
- return amountNeededUsd > liquidityUsd * 0.95;
37
- };
38
- const insufficientSupplyLiquidity = insufficientLiquidity(debtAdjustmentUsd, supplyLiquidityAvailable, this.client.pos.supplyMint);
39
- const insufficientDebtLiquidity = insufficientLiquidity(debtAdjustmentUsd, debtLiquidityAvailable, this.client.pos.debtMint);
33
+ const calcLiquidityAvailable = (liquidityAvailable, tokenMint) => (0, utils_1.fromBaseUnit)(liquidityAvailable, (0, utils_1.tokenInfo)(tokenMint).decimals) *
34
+ ((0, utils_1.safeGetPrice)(tokenMint) ?? 0);
35
+ const supplyLiquidityUsdAvailable = calcLiquidityAvailable(supplyLiquidityAvailable, this.client.pos.supplyMint);
36
+ const insufficientSupplyLiquidity = debtAdjustmentUsd > supplyLiquidityUsdAvailable * 0.95;
37
+ const debtLiquidityUsdAvailable = calcLiquidityAvailable(debtLiquidityAvailable, this.client.pos.debtMint);
38
+ const insufficientDebtLiquidity = debtAdjustmentUsd > debtLiquidityUsdAvailable * 0.95;
40
39
  let useDebtLiquidity = this.values.rebalanceDirection === generated_1.RebalanceDirection.Boost ||
41
- insufficientSupplyLiquidity;
40
+ insufficientSupplyLiquidity ||
41
+ (attemptNum > 2 &&
42
+ debtLiquidityUsdAvailable > supplyLiquidityUsdAvailable * 5);
42
43
  if (useDebtLiquidity) {
43
44
  return !insufficientDebtLiquidity ? generated_1.TokenType.Debt : undefined;
44
45
  }
@@ -63,16 +64,16 @@ class RebalanceTxBuilder {
63
64
  });
64
65
  return intermediaryLiqUtilizationRateBps;
65
66
  }
66
- async flashLoanRequirements() {
67
+ async flashLoanRequirements(attemptNum) {
67
68
  const intermediaryLiqUtilizationRateBps = this.intermediaryLiqUtilizationRateBps();
68
69
  const maxLtvRateBps = (0, utils_1.getMaxLiqUtilizationRateBps)(this.client.pos.state.maxLtvBps, this.client.pos.state.liqThresholdBps, 0.015);
69
70
  if (intermediaryLiqUtilizationRateBps < maxLtvRateBps) {
70
71
  return undefined;
71
72
  }
72
- const stdFlLiquiditySource = this.getFlLiquiditySource(this.client.flProvider.liquidityAvailable(generated_1.TokenType.Supply), this.client.flProvider.liquidityAvailable(generated_1.TokenType.Debt));
73
+ const stdFlLiquiditySource = this.getFlLiquiditySource(attemptNum, this.client.flProvider.liquidityAvailable(generated_1.TokenType.Supply), this.client.flProvider.liquidityAvailable(generated_1.TokenType.Debt));
73
74
  if (stdFlLiquiditySource === undefined || this.optimizeSize) {
74
75
  const { supplyBalance, debtBalance } = await this.client.signerBalances();
75
- const signerFlLiquiditySource = this.getFlLiquiditySource(supplyBalance, debtBalance);
76
+ const signerFlLiquiditySource = this.getFlLiquiditySource(attemptNum, supplyBalance, debtBalance);
76
77
  if (signerFlLiquiditySource) {
77
78
  return {
78
79
  liquiditySource: signerFlLiquiditySource,
@@ -156,7 +157,7 @@ class RebalanceTxBuilder {
156
157
  return false;
157
158
  }
158
159
  this.values = rebalanceValues;
159
- this.flRequirements = await this.flashLoanRequirements();
160
+ this.flRequirements = await this.flashLoanRequirements(attemptNum);
160
161
  if (this.flRequirements?.flFeeBps) {
161
162
  this.values = this.getRebalanceValues();
162
163
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.730",
3
+ "version": "1.0.731",
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",
@@ -82,37 +82,38 @@ export class RebalanceTxBuilder {
82
82
  }
83
83
 
84
84
  private getFlLiquiditySource(
85
+ attemptNum: number,
85
86
  supplyLiquidityAvailable: bigint,
86
87
  debtLiquidityAvailable: bigint
87
88
  ): TokenType | undefined {
88
89
  const debtAdjustmentUsd = Math.abs(this.values.debtAdjustmentUsd);
89
90
 
90
- const insufficientLiquidity = (
91
- amountNeededUsd: number,
91
+ const calcLiquidityAvailable = (
92
92
  liquidityAvailable: bigint,
93
93
  tokenMint: PublicKey
94
- ) => {
95
- const liquidityUsd =
96
- fromBaseUnit(liquidityAvailable, tokenInfo(tokenMint).decimals) *
97
- (safeGetPrice(tokenMint) ?? 0);
98
- return amountNeededUsd > liquidityUsd * 0.95;
99
- };
94
+ ) =>
95
+ fromBaseUnit(liquidityAvailable, tokenInfo(tokenMint).decimals) *
96
+ (safeGetPrice(tokenMint) ?? 0);
100
97
 
101
- const insufficientSupplyLiquidity = insufficientLiquidity(
102
- debtAdjustmentUsd,
98
+ const supplyLiquidityUsdAvailable = calcLiquidityAvailable(
103
99
  supplyLiquidityAvailable,
104
100
  this.client.pos.supplyMint
105
101
  );
102
+ const insufficientSupplyLiquidity =
103
+ debtAdjustmentUsd > supplyLiquidityUsdAvailable * 0.95;
106
104
 
107
- const insufficientDebtLiquidity = insufficientLiquidity(
108
- debtAdjustmentUsd,
105
+ const debtLiquidityUsdAvailable = calcLiquidityAvailable(
109
106
  debtLiquidityAvailable,
110
107
  this.client.pos.debtMint
111
108
  );
109
+ const insufficientDebtLiquidity =
110
+ debtAdjustmentUsd > debtLiquidityUsdAvailable * 0.95;
112
111
 
113
112
  let useDebtLiquidity =
114
113
  this.values.rebalanceDirection === RebalanceDirection.Boost ||
115
- insufficientSupplyLiquidity;
114
+ insufficientSupplyLiquidity ||
115
+ (attemptNum > 2 &&
116
+ debtLiquidityUsdAvailable > supplyLiquidityUsdAvailable * 5);
116
117
 
117
118
  if (useDebtLiquidity) {
118
119
  return !insufficientDebtLiquidity ? TokenType.Debt : undefined;
@@ -153,9 +154,9 @@ export class RebalanceTxBuilder {
153
154
  return intermediaryLiqUtilizationRateBps;
154
155
  }
155
156
 
156
- private async flashLoanRequirements(): Promise<
157
- FlashLoanRequirements | undefined
158
- > {
157
+ private async flashLoanRequirements(
158
+ attemptNum: number
159
+ ): Promise<FlashLoanRequirements | undefined> {
159
160
  const intermediaryLiqUtilizationRateBps =
160
161
  this.intermediaryLiqUtilizationRateBps();
161
162
  const maxLtvRateBps = getMaxLiqUtilizationRateBps(
@@ -168,6 +169,7 @@ export class RebalanceTxBuilder {
168
169
  }
169
170
 
170
171
  const stdFlLiquiditySource = this.getFlLiquiditySource(
172
+ attemptNum,
171
173
  this.client.flProvider.liquidityAvailable(TokenType.Supply),
172
174
  this.client.flProvider.liquidityAvailable(TokenType.Debt)
173
175
  );
@@ -175,6 +177,7 @@ export class RebalanceTxBuilder {
175
177
  if (stdFlLiquiditySource === undefined || this.optimizeSize) {
176
178
  const { supplyBalance, debtBalance } = await this.client.signerBalances();
177
179
  const signerFlLiquiditySource = this.getFlLiquiditySource(
180
+ attemptNum,
178
181
  supplyBalance,
179
182
  debtBalance
180
183
  );
@@ -278,7 +281,7 @@ export class RebalanceTxBuilder {
278
281
  }
279
282
  this.values = rebalanceValues;
280
283
 
281
- this.flRequirements = await this.flashLoanRequirements();
284
+ this.flRequirements = await this.flashLoanRequirements(attemptNum);
282
285
  if (this.flRequirements?.flFeeBps) {
283
286
  this.values = this.getRebalanceValues()!;
284
287
  }