@haven-fi/solauto-sdk 1.0.729 → 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.
@@ -23,6 +23,7 @@ export declare const HMTR = "7JhmUcZrrfhyt5nTSu3AfsrUq2L9992a7AhwdSDxdoL2";
23
23
  export declare const ALL_SUPPORTED_TOKENS: string[];
24
24
  export interface TokenInfo {
25
25
  ticker: string;
26
+ name?: string;
26
27
  decimals: number;
27
28
  isStableCoin?: boolean;
28
29
  isLST?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"tokenConstants.d.ts","sourceRoot":"","sources":["../../src/constants/tokenConstants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,KAAK,gDAAgD,CAAC;AACnE,eAAO,MAAM,QAAQ,iDAAiD,CAAC;AACvE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AACjE,eAAO,MAAM,KAAK,gDAAgD,CAAC;AACnE,eAAO,MAAM,GAAG,iDAAiD,CAAC;AAClE,eAAO,MAAM,KAAK,gDAAgD,CAAC;AACnE,eAAO,MAAM,OAAO,gDAAgD,CAAC;AACrE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AACjE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AACjE,eAAO,MAAM,GAAG,iDAAiD,CAAC;AAClE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AACjE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,GAAG,iDAAiD,CAAC;AAClE,eAAO,MAAM,MAAM,iDAAiD,CAAC;AACrE,eAAO,MAAM,QAAQ,iDAAiD,CAAC;AACvE,eAAO,MAAM,KAAK,iDAAiD,CAAC;AACpE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AAEnE,eAAO,MAAM,oBAAoB,UAwBhC,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,UAAU,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAmHlD,CAAC;AAEF,eAAO,MAAM,WAAW;;;;CAIvB,CAAC"}
1
+ {"version":3,"file":"tokenConstants.d.ts","sourceRoot":"","sources":["../../src/constants/tokenConstants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,KAAK,gDAAgD,CAAC;AACnE,eAAO,MAAM,QAAQ,iDAAiD,CAAC;AACvE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AACjE,eAAO,MAAM,KAAK,gDAAgD,CAAC;AACnE,eAAO,MAAM,GAAG,iDAAiD,CAAC;AAClE,eAAO,MAAM,KAAK,gDAAgD,CAAC;AACnE,eAAO,MAAM,OAAO,gDAAgD,CAAC;AACrE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AACjE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AACjE,eAAO,MAAM,GAAG,iDAAiD,CAAC;AAClE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AACjE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,GAAG,iDAAiD,CAAC;AAClE,eAAO,MAAM,MAAM,iDAAiD,CAAC;AACrE,eAAO,MAAM,QAAQ,iDAAiD,CAAC;AACvE,eAAO,MAAM,KAAK,iDAAiD,CAAC;AACpE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AAEnE,eAAO,MAAM,oBAAoB,UAwBhC,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,UAAU,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAoIlD,CAAC;AAEF,eAAO,MAAM,WAAW;;;;CAIvB,CAAC"}
@@ -58,21 +58,25 @@ exports.TOKEN_INFO = {
58
58
  },
59
59
  [spl_token_1.NATIVE_MINT.toString()]: {
60
60
  ticker: "SOL",
61
+ name: "Solana",
61
62
  decimals: 9,
62
63
  isMajor: true,
63
64
  },
64
65
  [exports.B_SOL]: {
65
66
  ticker: "bSOL",
67
+ name: "Blaze SOL",
66
68
  decimals: 9,
67
69
  isLST: true,
68
70
  },
69
71
  [exports.M_SOL]: {
70
72
  ticker: "mSOL",
73
+ name: "Marinade SOL",
71
74
  decimals: 9,
72
75
  isLST: true,
73
76
  },
74
77
  [exports.JITO_SOL]: {
75
78
  ticker: "JitoSOL",
79
+ name: "JITO SOL",
76
80
  decimals: 9,
77
81
  isLST: true,
78
82
  },
@@ -83,43 +87,52 @@ exports.TOKEN_INFO = {
83
87
  },
84
88
  [exports.INF]: {
85
89
  ticker: "INF",
90
+ name: "Infinity",
86
91
  decimals: 9,
87
92
  isLST: true,
88
93
  },
89
94
  [exports.H_SOL]: {
90
95
  ticker: "hSOL",
96
+ name: "Helius SOL",
91
97
  decimals: 9,
92
98
  isLST: true,
93
99
  },
94
100
  [exports.JUP_SOL]: {
95
101
  ticker: "JupSOL",
102
+ name: "Jupiter SOL",
96
103
  decimals: 9,
97
104
  isLST: true,
98
105
  },
99
106
  [exports.JUP]: {
100
107
  ticker: "JUP",
108
+ name: "Jupiter",
101
109
  decimals: 6,
102
110
  },
103
111
  [exports.JTO]: {
104
112
  ticker: "JTO",
113
+ name: "Jito",
105
114
  decimals: 9,
106
115
  },
107
116
  [exports.JLP]: {
108
117
  ticker: "JLP",
118
+ name: "Jupiter Liquidity Provider",
109
119
  decimals: 6,
110
120
  },
111
121
  [exports.WBTC]: {
112
122
  ticker: "WBTC",
123
+ name: "Wrapped Bitcoin",
113
124
  decimals: 8,
114
125
  isMajor: true,
115
126
  },
116
127
  [exports.WETH]: {
117
128
  ticker: "WETH",
129
+ name: "Wrapped Ethereum",
118
130
  decimals: 8,
119
131
  isMajor: true,
120
132
  },
121
133
  [exports.HNT]: {
122
134
  ticker: "HNT",
135
+ name: "Helium Network Token",
123
136
  decimals: 8,
124
137
  },
125
138
  [exports.PYTH]: {
@@ -128,11 +141,13 @@ exports.TOKEN_INFO = {
128
141
  },
129
142
  [exports.USDC]: {
130
143
  ticker: "USDC",
144
+ name: "USD Circle",
131
145
  decimals: 6,
132
146
  isStableCoin: true,
133
147
  },
134
148
  [exports.USDT]: {
135
149
  ticker: "USDT",
150
+ name: "USD Tether",
136
151
  decimals: 6,
137
152
  isStableCoin: true,
138
153
  },
@@ -143,6 +158,7 @@ exports.TOKEN_INFO = {
143
158
  },
144
159
  [exports.WIF]: {
145
160
  ticker: "WIF",
161
+ name: "Dog Wif Hat",
146
162
  decimals: 6,
147
163
  isMeme: true,
148
164
  },
@@ -163,6 +179,7 @@ exports.TOKEN_INFO = {
163
179
  },
164
180
  [exports.HMTR]: {
165
181
  ticker: "HMTR",
182
+ name: "Hampter",
166
183
  decimals: 0,
167
184
  isMeme: true,
168
185
  },
@@ -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.729",
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",
@@ -53,6 +53,7 @@ export const ALL_SUPPORTED_TOKENS = [
53
53
 
54
54
  export interface TokenInfo {
55
55
  ticker: string;
56
+ name?: string;
56
57
  decimals: number;
57
58
  isStableCoin?: boolean;
58
59
  isLST?: boolean;
@@ -67,21 +68,25 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = {
67
68
  },
68
69
  [NATIVE_MINT.toString()]: {
69
70
  ticker: "SOL",
71
+ name: "Solana",
70
72
  decimals: 9,
71
73
  isMajor: true,
72
74
  },
73
75
  [B_SOL]: {
74
76
  ticker: "bSOL",
77
+ name: "Blaze SOL",
75
78
  decimals: 9,
76
79
  isLST: true,
77
80
  },
78
81
  [M_SOL]: {
79
82
  ticker: "mSOL",
83
+ name: "Marinade SOL",
80
84
  decimals: 9,
81
85
  isLST: true,
82
86
  },
83
87
  [JITO_SOL]: {
84
88
  ticker: "JitoSOL",
89
+ name: "JITO SOL",
85
90
  decimals: 9,
86
91
  isLST: true,
87
92
  },
@@ -92,43 +97,52 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = {
92
97
  },
93
98
  [INF]: {
94
99
  ticker: "INF",
100
+ name: "Infinity",
95
101
  decimals: 9,
96
102
  isLST: true,
97
103
  },
98
104
  [H_SOL]: {
99
105
  ticker: "hSOL",
106
+ name: "Helius SOL",
100
107
  decimals: 9,
101
108
  isLST: true,
102
109
  },
103
110
  [JUP_SOL]: {
104
111
  ticker: "JupSOL",
112
+ name: "Jupiter SOL",
105
113
  decimals: 9,
106
114
  isLST: true,
107
115
  },
108
116
  [JUP]: {
109
117
  ticker: "JUP",
118
+ name: "Jupiter",
110
119
  decimals: 6,
111
120
  },
112
121
  [JTO]: {
113
122
  ticker: "JTO",
123
+ name: "Jito",
114
124
  decimals: 9,
115
125
  },
116
126
  [JLP]: {
117
127
  ticker: "JLP",
128
+ name: "Jupiter Liquidity Provider",
118
129
  decimals: 6,
119
130
  },
120
131
  [WBTC]: {
121
132
  ticker: "WBTC",
133
+ name: "Wrapped Bitcoin",
122
134
  decimals: 8,
123
135
  isMajor: true,
124
136
  },
125
137
  [WETH]: {
126
138
  ticker: "WETH",
139
+ name: "Wrapped Ethereum",
127
140
  decimals: 8,
128
141
  isMajor: true,
129
142
  },
130
143
  [HNT]: {
131
144
  ticker: "HNT",
145
+ name: "Helium Network Token",
132
146
  decimals: 8,
133
147
  },
134
148
  [PYTH]: {
@@ -137,11 +151,13 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = {
137
151
  },
138
152
  [USDC]: {
139
153
  ticker: "USDC",
154
+ name: "USD Circle",
140
155
  decimals: 6,
141
156
  isStableCoin: true,
142
157
  },
143
158
  [USDT]: {
144
159
  ticker: "USDT",
160
+ name: "USD Tether",
145
161
  decimals: 6,
146
162
  isStableCoin: true,
147
163
  },
@@ -152,6 +168,7 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = {
152
168
  },
153
169
  [WIF]: {
154
170
  ticker: "WIF",
171
+ name: "Dog Wif Hat",
155
172
  decimals: 6,
156
173
  isMeme: true,
157
174
  },
@@ -172,6 +189,7 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = {
172
189
  },
173
190
  [HMTR]: {
174
191
  ticker: "HMTR",
192
+ name: "Hampter",
175
193
  decimals: 0,
176
194
  isMeme: true,
177
195
  },
@@ -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
  }