@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.
- package/dist/constants/tokenConstants.d.ts +1 -0
- package/dist/constants/tokenConstants.d.ts.map +1 -1
- package/dist/constants/tokenConstants.js +17 -0
- package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceTxBuilder.js +14 -13
- package/package.json +1 -1
- package/src/constants/tokenConstants.ts +18 -0
- package/src/services/rebalance/rebalanceTxBuilder.ts +20 -17
@@ -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;
|
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;
|
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
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
const
|
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
@@ -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
|
91
|
-
amountNeededUsd: number,
|
91
|
+
const calcLiquidityAvailable = (
|
92
92
|
liquidityAvailable: bigint,
|
93
93
|
tokenMint: PublicKey
|
94
|
-
) =>
|
95
|
-
|
96
|
-
|
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
|
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
|
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(
|
157
|
-
|
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
|
}
|