@hawksightco/hawk-sdk 1.3.169 → 1.3.171

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.
Files changed (37) hide show
  1. package/dist/src/addresses.d.ts +1 -0
  2. package/dist/src/addresses.d.ts.map +1 -1
  3. package/dist/src/addresses.js +2 -1
  4. package/dist/src/classes/Transactions.d.ts +72 -1
  5. package/dist/src/classes/Transactions.d.ts.map +1 -1
  6. package/dist/src/classes/Transactions.js +560 -0
  7. package/dist/src/classes/TxGenerator.d.ts +72 -1
  8. package/dist/src/classes/TxGenerator.d.ts.map +1 -1
  9. package/dist/src/classes/TxGenerator.js +332 -0
  10. package/dist/src/functions.d.ts +18 -1
  11. package/dist/src/functions.d.ts.map +1 -1
  12. package/dist/src/functions.js +148 -0
  13. package/dist/src/idl/jupiter-idl.d.ts +36 -0
  14. package/dist/src/idl/jupiter-idl.d.ts.map +1 -1
  15. package/dist/src/idl/jupiter-idl.js +36 -0
  16. package/dist/src/ixGenerator/IyfMainIxGenerator.d.ts +6 -0
  17. package/dist/src/ixGenerator/IyfMainIxGenerator.d.ts.map +1 -1
  18. package/dist/src/ixGenerator/IyfMainIxGenerator.js +22 -0
  19. package/dist/src/ixGenerator/MeteoraDlmmIxGenerator.d.ts +167 -1
  20. package/dist/src/ixGenerator/MeteoraDlmmIxGenerator.d.ts.map +1 -1
  21. package/dist/src/ixGenerator/MeteoraDlmmIxGenerator.js +517 -0
  22. package/dist/src/meteora/index.d.ts +2 -0
  23. package/dist/src/meteora/index.d.ts.map +1 -0
  24. package/dist/src/meteora/index.js +17 -0
  25. package/dist/src/meteora/liquidityStrategy.d.ts +268 -0
  26. package/dist/src/meteora/liquidityStrategy.d.ts.map +1 -0
  27. package/dist/src/meteora/liquidityStrategy.js +1069 -0
  28. package/dist/src/meteora.d.ts +1 -0
  29. package/dist/src/meteora.d.ts.map +1 -1
  30. package/dist/src/meteora.js +6 -2
  31. package/dist/src/types.d.ts +139 -0
  32. package/dist/src/types.d.ts.map +1 -1
  33. package/dist/src/types.js +16 -1
  34. package/package.json +7 -3
  35. package/test/artifacts/temp/.gitignore +2 -0
  36. package/test/artifacts/temp/accounts/.gitignore +2 -0
  37. package/test/visualization/output/.gitignore +2 -0
@@ -0,0 +1,268 @@
1
+ import BN from 'bn.js';
2
+ /**
3
+ * Liquidity strategy types matching Meteora DLMM SDK.
4
+ */
5
+ export declare enum StrategyType {
6
+ /** Uniform distribution - equal value per bin (adjusted for price) */
7
+ SPOT = 0,
8
+ /** Curve distribution - decreasing amounts away from active bin */
9
+ CURVE = 1,
10
+ /** Bid-Ask distribution - increasing amounts away from active bin */
11
+ BID_ASK = 2
12
+ }
13
+ /**
14
+ * Liquidity strategy parameters for rebalanceLiquidity instruction.
15
+ * These parameters define how liquidity is distributed across bins.
16
+ *
17
+ * For SPOT strategy: deltaX = 0, deltaY = 0 (uniform distribution)
18
+ * For CURVE strategy: deltaX < 0, deltaY < 0 (decreasing away from active)
19
+ * For BID_ASK strategy: deltaX > 0, deltaY > 0 (increasing away from active)
20
+ *
21
+ * Amount per bin is calculated as:
22
+ * - Ask side (X): amountX = (x0 + deltaX * deltaId) * price_weight
23
+ * - Bid side (Y): amountY = y0 + deltaY * distance_from_active
24
+ */
25
+ export interface LiquidityStrategyParameters {
26
+ /** Base amount for X token (ask side) */
27
+ x0: BN;
28
+ /** Base amount for Y token (bid side) */
29
+ y0: BN;
30
+ /** Delta change per bin for X (0 for SPOT, negative for CURVE, positive for BID_ASK) */
31
+ deltaX: BN;
32
+ /** Delta change per bin for Y (0 for SPOT, negative for CURVE, positive for BID_ASK) */
33
+ deltaY: BN;
34
+ }
35
+ /**
36
+ * Calculates the Q-price from a bin ID.
37
+ * Price = (1 + binStep/10000)^binId in Q64.64 format.
38
+ *
39
+ * Uses binary exponentiation matching Meteora SDK for precision.
40
+ *
41
+ * @param binId - The bin ID (can be negative)
42
+ * @param binStep - The bin step in basis points
43
+ * @returns Price in Q64.64 fixed-point format
44
+ */
45
+ export declare function getQPriceFromId(binId: BN, binStep: BN): BN;
46
+ /**
47
+ * Builds liquidity strategy parameters for SPOT (uniform) distribution.
48
+ *
49
+ * This function calculates x0 and y0 values that will distribute the given amounts
50
+ * uniformly across the specified bin range when used with the rebalanceLiquidity instruction.
51
+ *
52
+ * The function handles three cases:
53
+ * 1. Position entirely below active bin (bid side only) → only Y deposited
54
+ * 2. Position entirely above active bin (ask side only) → only X deposited
55
+ * 3. Position spans active bin → both X and Y deposited
56
+ *
57
+ * @param amountX - Total X amount to deposit
58
+ * @param amountY - Total Y amount to deposit
59
+ * @param minDeltaId - Minimum delta ID (lowerBinId - activeId)
60
+ * @param maxDeltaId - Maximum delta ID (upperBinId - activeId)
61
+ * @param binStep - The bin step in basis points
62
+ * @param activeId - The active bin ID
63
+ * @param favorXInActiveId - Whether X is favored in the active bin (affects bid/ask boundary)
64
+ * @returns Strategy parameters { x0, y0, deltaX, deltaY }
65
+ */
66
+ export declare function buildSpotStrategyParameters(amountX: BN, amountY: BN, minDeltaId: BN, maxDeltaId: BN, binStep: BN, activeId: BN, favorXInActiveId?: boolean): LiquidityStrategyParameters;
67
+ /**
68
+ * Resets strategy parameters for a chunk that may not span the full position range.
69
+ *
70
+ * When splitting a position into chunks, each chunk may only cover part of the range:
71
+ * - If chunk is entirely on bid side → zero out X parameters
72
+ * - If chunk is entirely on ask side → zero out Y parameters
73
+ * - If chunk spans active bin → keep both X and Y parameters
74
+ *
75
+ * @param minDeltaId - Chunk's minimum delta ID
76
+ * @param maxDeltaId - Chunk's maximum delta ID
77
+ * @param favorXInActiveId - Whether X is favored in the active bin
78
+ * @param params - Original strategy parameters from buildSpotStrategyParameters
79
+ * @returns Adjusted parameters for the chunk
80
+ */
81
+ export declare function resetUninvolvedLiquidityParams(minDeltaId: BN, maxDeltaId: BN, favorXInActiveId: boolean, params: LiquidityStrategyParameters): LiquidityStrategyParameters;
82
+ /**
83
+ * Calculates the actual X amount that will be deposited into a bin on the ask side.
84
+ *
85
+ * For SPOT strategy: amountX = x0 * price_weight
86
+ * where price_weight = (1 + binStep/10000)^(-(activeId + deltaId))
87
+ *
88
+ * @param x0 - Base X amount from strategy parameters
89
+ * @param deltaId - Delta ID relative to active bin
90
+ * @param binStep - The bin step in basis points
91
+ * @param activeId - The active bin ID
92
+ * @returns Amount of X for this bin
93
+ */
94
+ export declare function getAmountXForBin(x0: BN, deltaId: BN, binStep: BN, activeId: BN): BN;
95
+ /**
96
+ * Calculates the actual Y amount that will be deposited into a bin on the bid side.
97
+ *
98
+ * For SPOT strategy: amountY = y0 (constant per bin)
99
+ *
100
+ * @param y0 - Base Y amount from strategy parameters
101
+ * @returns Amount of Y for this bin
102
+ */
103
+ export declare function getAmountYForBin(y0: BN): BN;
104
+ /**
105
+ * Calculates total X and Y amounts for a chunk based on strategy parameters.
106
+ *
107
+ * This iterates through each bin in the chunk and sums up the amounts.
108
+ *
109
+ * @param activeId - The active bin ID
110
+ * @param minDeltaId - Chunk's minimum delta ID
111
+ * @param maxDeltaId - Chunk's maximum delta ID
112
+ * @param params - Strategy parameters (after resetUninvolvedLiquidityParams)
113
+ * @param binStep - The bin step in basis points
114
+ * @param favorXInActiveId - Whether X is favored in the active bin
115
+ * @returns Total X and Y amounts for the chunk
116
+ */
117
+ export declare function calculateChunkAmounts(activeId: BN, minDeltaId: BN, maxDeltaId: BN, params: LiquidityStrategyParameters, binStep: BN, favorXInActiveId: boolean): {
118
+ totalXAmount: BN;
119
+ totalYAmount: BN;
120
+ };
121
+ /**
122
+ * Builds liquidity strategy parameters for CURVE distribution.
123
+ *
124
+ * CURVE strategy concentrates liquidity near the active bin with amounts
125
+ * decreasing as you move away. This is achieved with negative deltaX/deltaY.
126
+ *
127
+ * @param amountX - Total X amount to deposit
128
+ * @param amountY - Total Y amount to deposit
129
+ * @param minDeltaId - Minimum delta ID (lowerBinId - activeId)
130
+ * @param maxDeltaId - Maximum delta ID (upperBinId - activeId)
131
+ * @param binStep - The bin step in basis points
132
+ * @param activeId - The active bin ID
133
+ * @param favorXInActiveId - Whether X is favored in the active bin
134
+ * @returns Strategy parameters { x0, y0, deltaX, deltaY }
135
+ */
136
+ export declare function buildCurveStrategyParameters(amountX: BN, amountY: BN, minDeltaId: BN, maxDeltaId: BN, binStep: BN, activeId: BN, favorXInActiveId?: boolean): LiquidityStrategyParameters;
137
+ /**
138
+ * Builds liquidity strategy parameters for BID_ASK distribution.
139
+ *
140
+ * BID_ASK strategy has liquidity increasing away from the active bin.
141
+ * This is achieved with positive deltaX/deltaY values.
142
+ *
143
+ * @param amountX - Total X amount to deposit
144
+ * @param amountY - Total Y amount to deposit
145
+ * @param minDeltaId - Minimum delta ID (lowerBinId - activeId)
146
+ * @param maxDeltaId - Maximum delta ID (upperBinId - activeId)
147
+ * @param binStep - The bin step in basis points
148
+ * @param activeId - The active bin ID
149
+ * @param favorXInActiveId - Whether X is favored in the active bin
150
+ * @returns Strategy parameters { x0, y0, deltaX, deltaY }
151
+ */
152
+ export declare function buildBidAskStrategyParameters(amountX: BN, amountY: BN, minDeltaId: BN, maxDeltaId: BN, binStep: BN, activeId: BN, favorXInActiveId?: boolean): LiquidityStrategyParameters;
153
+ /**
154
+ * Builds liquidity strategy parameters for the specified strategy type.
155
+ *
156
+ * This is the main entry point that dispatches to the appropriate strategy builder.
157
+ *
158
+ * @param strategyType - The type of strategy (SPOT, CURVE, or BID_ASK)
159
+ * @param amountX - Total X amount to deposit
160
+ * @param amountY - Total Y amount to deposit
161
+ * @param minDeltaId - Minimum delta ID (lowerBinId - activeId)
162
+ * @param maxDeltaId - Maximum delta ID (upperBinId - activeId)
163
+ * @param binStep - The bin step in basis points
164
+ * @param activeId - The active bin ID
165
+ * @param favorXInActiveId - Whether X is favored in the active bin
166
+ * @returns Strategy parameters { x0, y0, deltaX, deltaY }
167
+ */
168
+ export declare function buildStrategyParameters(strategyType: StrategyType, amountX: BN, amountY: BN, minDeltaId: BN, maxDeltaId: BN, binStep: BN, activeId: BN, favorXInActiveId?: boolean): LiquidityStrategyParameters;
169
+ /**
170
+ * Represents a bin range chunk with its calculated deposit amounts.
171
+ */
172
+ export interface ChunkedDepositParameters {
173
+ /** Lower bin ID of this chunk (absolute bin ID) */
174
+ lowerBinId: number;
175
+ /** Upper bin ID of this chunk (absolute bin ID) */
176
+ upperBinId: number;
177
+ /** Minimum delta ID relative to active bin */
178
+ minDeltaId: BN;
179
+ /** Maximum delta ID relative to active bin */
180
+ maxDeltaId: BN;
181
+ /** Strategy parameters adjusted for this chunk */
182
+ params: LiquidityStrategyParameters;
183
+ /** Maximum X amount to deposit in this chunk */
184
+ maxAmountX: BN;
185
+ /** Maximum Y amount to deposit in this chunk */
186
+ maxAmountY: BN;
187
+ }
188
+ /**
189
+ * Divides a bin range into chunks of specified size.
190
+ *
191
+ * This is similar to Meteora's `chunkBinRange` but with a configurable chunk size
192
+ * instead of a fixed 70-bin limit.
193
+ *
194
+ * @param minBinId - The starting bin ID of the range (absolute bin ID)
195
+ * @param maxBinId - The ending bin ID of the range (absolute bin ID)
196
+ * @param chunkSize - Maximum number of bins per chunk
197
+ * @returns Array of bin range chunks
198
+ */
199
+ export declare function chunkBinRange(minBinId: number, maxBinId: number, chunkSize: number): {
200
+ lowerBinId: number;
201
+ upperBinId: number;
202
+ }[];
203
+ /**
204
+ * Converts strategy parameters to on-chain format with bit flag for negative values.
205
+ *
206
+ * The Solana program uses unsigned integers, so negative values are stored as
207
+ * positive with a bit flag indicating the sign.
208
+ *
209
+ * Bit flags:
210
+ * - Bit 0 (0b0001): x0 is negative
211
+ * - Bit 1 (0b0010): y0 is negative
212
+ * - Bit 2 (0b0100): deltaX is negative
213
+ * - Bit 3 (0b1000): deltaY is negative
214
+ *
215
+ * @param x0 - Base X amount (may be negative)
216
+ * @param y0 - Base Y amount (may be negative)
217
+ * @param deltaX - Delta X per bin (may be negative)
218
+ * @param deltaY - Delta Y per bin (may be negative)
219
+ * @returns Parameters with absolute values and bit flag
220
+ */
221
+ export declare function buildBitFlagAndNegateStrategyParameters(x0: BN, y0: BN, deltaX: BN, deltaY: BN): {
222
+ bitFlag: number;
223
+ x0: BN;
224
+ y0: BN;
225
+ deltaX: BN;
226
+ deltaY: BN;
227
+ };
228
+ /**
229
+ * Calculates amounts for each bin in a range.
230
+ *
231
+ * This function iterates through all bins and calculates the X/Y amount
232
+ * for each bin based on the strategy parameters.
233
+ *
234
+ * @param activeId - The active bin ID
235
+ * @param minDeltaId - Minimum delta ID relative to active bin
236
+ * @param maxDeltaId - Maximum delta ID relative to active bin
237
+ * @param deltaX - Delta X per bin
238
+ * @param deltaY - Delta Y per bin
239
+ * @param x0 - Base X amount
240
+ * @param y0 - Base Y amount
241
+ * @param binStep - Bin step in basis points
242
+ * @param favorXInActiveBin - Whether X is favored in active bin
243
+ * @returns Array of { binId, amountX, amountY } for each bin
244
+ */
245
+ export declare function toAmountIntoBins(activeId: BN, minDeltaId: BN, maxDeltaId: BN, deltaX: BN, deltaY: BN, x0: BN, y0: BN, binStep: BN, favorXInActiveBin: boolean): {
246
+ binId: number;
247
+ amountX: BN;
248
+ amountY: BN;
249
+ }[];
250
+ /**
251
+ * Chunks a deposit into multiple transactions based on bin range.
252
+ *
253
+ * This function:
254
+ * 1. Takes pre-built strategy parameters for the entire position
255
+ * 2. Chunks the bin range into smaller ranges
256
+ * 3. For each chunk, adjusts params and calculates amounts
257
+ *
258
+ * @param params - Strategy parameters from buildStrategyParameters (for entire position)
259
+ * @param minDeltaId - Minimum delta ID (lowerBinId - activeId)
260
+ * @param maxDeltaId - Maximum delta ID (upperBinId - activeId)
261
+ * @param activeId - Current active bin ID
262
+ * @param binStep - Bin step in basis points
263
+ * @param chunkSize - Maximum bins per chunk
264
+ * @param favorXInActiveBin - Whether X is favored in active bin
265
+ * @returns Array of chunked deposit parameters
266
+ */
267
+ export declare function chunkDepositParameters(params: LiquidityStrategyParameters, minDeltaId: BN, maxDeltaId: BN, activeId: BN, binStep: BN, chunkSize: number, favorXInActiveBin?: boolean): ChunkedDepositParameters[];
268
+ //# sourceMappingURL=liquidityStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidityStrategy.d.ts","sourceRoot":"","sources":["../../../src/meteora/liquidityStrategy.ts"],"names":[],"mappings":"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"}