@steerprotocol/sdk 1.19.14 → 1.19.16

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 (119) hide show
  1. package/README.md +281 -11
  2. package/dist/cjs/base/VaultClient.js +95 -1
  3. package/dist/cjs/base/VaultClient.js.map +1 -1
  4. package/dist/cjs/base/vault/single-asset/calculateLimitPrice.js +231 -0
  5. package/dist/cjs/base/vault/single-asset/calculateLimitPrice.js.map +1 -0
  6. package/dist/cjs/base/vault/single-asset/calculateSwapAmount.js +68 -0
  7. package/dist/cjs/base/vault/single-asset/calculateSwapAmount.js.map +1 -0
  8. package/dist/cjs/base/vault/single-asset/estimateLpTokens.js +355 -0
  9. package/dist/cjs/base/vault/single-asset/estimateLpTokens.js.map +1 -0
  10. package/dist/cjs/base/vault/single-asset/index.js +109 -0
  11. package/dist/cjs/base/vault/single-asset/index.js.map +1 -0
  12. package/dist/cjs/base/vault/single-asset/simulateSwap.js +291 -0
  13. package/dist/cjs/base/vault/single-asset/simulateSwap.js.map +1 -0
  14. package/dist/cjs/base/vault/single-asset/singleAssetDeposit.js +324 -0
  15. package/dist/cjs/base/vault/single-asset/singleAssetDeposit.js.map +1 -0
  16. package/dist/cjs/base/vault/single-asset/types.js +15 -0
  17. package/dist/cjs/base/vault/single-asset/types.js.map +1 -0
  18. package/dist/cjs/base/vault/utils.js +229 -18
  19. package/dist/cjs/base/vault/utils.js.map +1 -1
  20. package/dist/cjs/const/abis/index.js +3 -0
  21. package/dist/cjs/const/abis/index.js.map +1 -1
  22. package/dist/cjs/const/abis/quoter.js +248 -0
  23. package/dist/cjs/const/abis/quoter.js.map +1 -0
  24. package/dist/cjs/const/abis/singleTokenDeposit.js +925 -0
  25. package/dist/cjs/const/abis/singleTokenDeposit.js.map +1 -0
  26. package/dist/cjs/const/amm/configs/protocols/quickswap-integral.js +3 -0
  27. package/dist/cjs/const/amm/configs/protocols/quickswap-integral.js.map +1 -1
  28. package/dist/cjs/const/amm/configs/protocols/uniswap.js +15 -0
  29. package/dist/cjs/const/amm/configs/protocols/uniswap.js.map +1 -1
  30. package/dist/cjs/const/deployments/abis.js +277 -0
  31. package/dist/cjs/const/deployments/abis.js.map +1 -1
  32. package/dist/cjs/const/deployments/polygon.js +8 -0
  33. package/dist/cjs/const/deployments/polygon.js.map +1 -1
  34. package/dist/cjs/const/index.js +6 -5
  35. package/dist/cjs/const/index.js.map +1 -1
  36. package/dist/cjs/const/network.js.map +1 -1
  37. package/dist/cjs/const/quoter.js +38 -0
  38. package/dist/cjs/const/quoter.js.map +1 -0
  39. package/dist/cjs/index.js +1 -0
  40. package/dist/cjs/index.js.map +1 -1
  41. package/dist/esm/base/VaultClient.js +81 -1
  42. package/dist/esm/base/VaultClient.js.map +1 -1
  43. package/dist/esm/base/vault/single-asset/calculateLimitPrice.js +224 -0
  44. package/dist/esm/base/vault/single-asset/calculateLimitPrice.js.map +1 -0
  45. package/dist/esm/base/vault/single-asset/calculateSwapAmount.js +65 -0
  46. package/dist/esm/base/vault/single-asset/calculateSwapAmount.js.map +1 -0
  47. package/dist/esm/base/vault/single-asset/estimateLpTokens.js +350 -0
  48. package/dist/esm/base/vault/single-asset/estimateLpTokens.js.map +1 -0
  49. package/dist/esm/base/vault/single-asset/index.js +83 -0
  50. package/dist/esm/base/vault/single-asset/index.js.map +1 -0
  51. package/dist/esm/base/vault/single-asset/simulateSwap.js +285 -0
  52. package/dist/esm/base/vault/single-asset/simulateSwap.js.map +1 -0
  53. package/dist/esm/base/vault/single-asset/singleAssetDeposit.js +320 -0
  54. package/dist/esm/base/vault/single-asset/singleAssetDeposit.js.map +1 -0
  55. package/dist/esm/base/vault/single-asset/types.js +12 -0
  56. package/dist/esm/base/vault/single-asset/types.js.map +1 -0
  57. package/dist/esm/base/vault/utils.js +226 -18
  58. package/dist/esm/base/vault/utils.js.map +1 -1
  59. package/dist/esm/const/abis/index.js +3 -0
  60. package/dist/esm/const/abis/index.js.map +1 -1
  61. package/dist/esm/const/abis/quoter.js +245 -0
  62. package/dist/esm/const/abis/quoter.js.map +1 -0
  63. package/dist/esm/const/abis/singleTokenDeposit.js +922 -0
  64. package/dist/esm/const/abis/singleTokenDeposit.js.map +1 -0
  65. package/dist/esm/const/amm/configs/protocols/quickswap-integral.js +3 -0
  66. package/dist/esm/const/amm/configs/protocols/quickswap-integral.js.map +1 -1
  67. package/dist/esm/const/amm/configs/protocols/uniswap.js +15 -0
  68. package/dist/esm/const/amm/configs/protocols/uniswap.js.map +1 -1
  69. package/dist/esm/const/deployments/abis.js +277 -0
  70. package/dist/esm/const/deployments/abis.js.map +1 -1
  71. package/dist/esm/const/deployments/polygon.js +8 -0
  72. package/dist/esm/const/deployments/polygon.js.map +1 -1
  73. package/dist/esm/const/index.js +6 -5
  74. package/dist/esm/const/index.js.map +1 -1
  75. package/dist/esm/const/network.js.map +1 -1
  76. package/dist/esm/const/quoter.js +34 -0
  77. package/dist/esm/const/quoter.js.map +1 -0
  78. package/dist/esm/index.js +1 -0
  79. package/dist/esm/index.js.map +1 -1
  80. package/dist/types/base/VaultClient.d.ts +136 -4
  81. package/dist/types/base/VaultClient.d.ts.map +1 -1
  82. package/dist/types/base/vault/single-asset/calculateLimitPrice.d.ts +59 -0
  83. package/dist/types/base/vault/single-asset/calculateLimitPrice.d.ts.map +1 -0
  84. package/dist/types/base/vault/single-asset/calculateSwapAmount.d.ts +30 -0
  85. package/dist/types/base/vault/single-asset/calculateSwapAmount.d.ts.map +1 -0
  86. package/dist/types/base/vault/single-asset/estimateLpTokens.d.ts +61 -0
  87. package/dist/types/base/vault/single-asset/estimateLpTokens.d.ts.map +1 -0
  88. package/dist/types/base/vault/single-asset/index.d.ts +80 -0
  89. package/dist/types/base/vault/single-asset/index.d.ts.map +1 -0
  90. package/dist/types/base/vault/single-asset/simulateSwap.d.ts +119 -0
  91. package/dist/types/base/vault/single-asset/simulateSwap.d.ts.map +1 -0
  92. package/dist/types/base/vault/single-asset/singleAssetDeposit.d.ts +141 -0
  93. package/dist/types/base/vault/single-asset/singleAssetDeposit.d.ts.map +1 -0
  94. package/dist/types/base/vault/single-asset/types.d.ts +167 -0
  95. package/dist/types/base/vault/single-asset/types.d.ts.map +1 -0
  96. package/dist/types/base/vault/utils.d.ts +95 -0
  97. package/dist/types/base/vault/utils.d.ts.map +1 -1
  98. package/dist/types/const/abis/index.d.ts +3 -0
  99. package/dist/types/const/abis/index.d.ts.map +1 -1
  100. package/dist/types/const/abis/quoter.d.ts +206 -0
  101. package/dist/types/const/abis/quoter.d.ts.map +1 -0
  102. package/dist/types/const/abis/singleTokenDeposit.d.ts +47 -0
  103. package/dist/types/const/abis/singleTokenDeposit.d.ts.map +1 -0
  104. package/dist/types/const/amm/configs/protocols/quickswap-integral.d.ts.map +1 -1
  105. package/dist/types/const/amm/configs/protocols/uniswap.d.ts.map +1 -1
  106. package/dist/types/const/deployments/abis.d.ts +215 -0
  107. package/dist/types/const/deployments/abis.d.ts.map +1 -1
  108. package/dist/types/const/deployments/polygon.d.ts.map +1 -1
  109. package/dist/types/const/index.d.ts +6 -5
  110. package/dist/types/const/index.d.ts.map +1 -1
  111. package/dist/types/const/network.d.ts +2 -0
  112. package/dist/types/const/network.d.ts.map +1 -1
  113. package/dist/types/const/quoter.d.ts +17 -0
  114. package/dist/types/const/quoter.d.ts.map +1 -0
  115. package/dist/types/index.d.ts +1 -0
  116. package/dist/types/index.d.ts.map +1 -1
  117. package/dist/types/types.d.ts +3 -0
  118. package/dist/types/types.d.ts.map +1 -1
  119. package/package.json +1 -1
@@ -0,0 +1,324 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SingleAssetDepositClient = void 0;
4
+ const const_1 = require("../../../const");
5
+ const singleTokenDeposit_1 = require("../../../const/abis/singleTokenDeposit");
6
+ const UniswapPool_1 = require("../../../const/abis/UniswapPool");
7
+ const calculateLimitPrice_1 = require("./calculateLimitPrice");
8
+ const calculateSwapAmount_1 = require("./calculateSwapAmount");
9
+ const estimateLpTokens_1 = require("./estimateLpTokens");
10
+ const simulateSwap_1 = require("./simulateSwap");
11
+ const types_1 = require("./types");
12
+ /**
13
+ * Main single-asset deposit client that orchestrates all the steps
14
+ */
15
+ class SingleAssetDepositClient {
16
+ constructor(publicClient, walletClient) {
17
+ this.publicClient = publicClient;
18
+ this.walletClient = walletClient;
19
+ }
20
+ /**
21
+ * Previews a single-asset deposit by running all simulation steps
22
+ * This allows users to see the expected outcome before executing the transaction
23
+ *
24
+ * @param params - Single-asset deposit parameters
25
+ * @param poolAddress - Address of the pool (must be provided separately)
26
+ * @returns Promise resolving to the complete deposit preview
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const preview = await client.previewDeposit({
31
+ * assets: parseEther('100'),
32
+ * receiver: userAddress,
33
+ * vault: vaultAddress,
34
+ * isToken0: true,
35
+ * depositSlippagePercent: 5n,
36
+ * swapSlippageBP: 500,
37
+ * ammType: AMMType.UniswapV3,
38
+ * singleAssetDepositContract: contractAddress
39
+ * }, poolAddress);
40
+ *
41
+ * if (preview.success) {
42
+ * console.log('Expected LP tokens:', preview.data.lpEstimation.lpTokens);
43
+ * console.log('Swap amount:', preview.data.swapAmount);
44
+ * }
45
+ * ```
46
+ */
47
+ async previewDeposit(params, poolAddress) {
48
+ try {
49
+ const chainId = await this.publicClient.getChainId();
50
+ const singleAssentDeposit = params.singleAssetDepositContract || (0, const_1.getContractAddressByChainIdAndContractName)(chainId, 'SingleAssetDeposit');
51
+ // Step 1: Calculate swap amount
52
+ const swapAmountParams = {
53
+ depositAmount: params.assets,
54
+ isToken0: params.isToken0,
55
+ vault: params.vault,
56
+ pool: poolAddress,
57
+ ammType: params.ammType,
58
+ singleAssetDepositContract: singleAssentDeposit
59
+ };
60
+ const swapAmountResult = await (0, calculateSwapAmount_1.calculateSwapAmount)(this.publicClient, swapAmountParams);
61
+ if (!swapAmountResult.success || !swapAmountResult.data) {
62
+ return {
63
+ data: null,
64
+ status: swapAmountResult.status,
65
+ success: false,
66
+ error: swapAmountResult.error || 'Failed to calculate swap amount'
67
+ };
68
+ }
69
+ const { swapAmount, sqrtPrice } = swapAmountResult.data;
70
+ const zeroForOne = (0, simulateSwap_1.determineSwapDirection)(params.isToken0);
71
+ // Get token addresses from the pool contract
72
+ const [token0, token1] = await Promise.all([
73
+ this.publicClient.readContract({
74
+ address: poolAddress,
75
+ abi: UniswapPool_1.UniswapV3PoolABI,
76
+ functionName: 'token0'
77
+ }),
78
+ this.publicClient.readContract({
79
+ address: poolAddress,
80
+ abi: UniswapPool_1.UniswapV3PoolABI,
81
+ functionName: 'token1'
82
+ })
83
+ ]);
84
+ // Step 2: Calculate limit price
85
+ const limitPriceParams = {
86
+ pool: poolAddress,
87
+ slippageBP: params.swapSlippageBP,
88
+ zeroForOne,
89
+ ammType: params.ammType,
90
+ token0,
91
+ token1
92
+ };
93
+ const limitPriceResult = await (0, calculateLimitPrice_1.calculateLimitPrice)(this.publicClient, limitPriceParams);
94
+ if (!limitPriceResult.success || limitPriceResult.data === null) {
95
+ return {
96
+ data: null,
97
+ status: limitPriceResult.status,
98
+ success: false,
99
+ error: limitPriceResult.error || 'Failed to calculate limit price'
100
+ };
101
+ }
102
+ const sqrtPriceLimitX96 = limitPriceResult.data;
103
+ // Get pool fee from the contract
104
+ const fee = await this.publicClient.readContract({
105
+ address: poolAddress,
106
+ abi: UniswapPool_1.UniswapV3PoolABI,
107
+ functionName: 'fee'
108
+ });
109
+ // Step 3: Simulate swap
110
+ const simulateSwapParams = {
111
+ poolAddress: poolAddress,
112
+ recipient: params.receiver, // For simulation, use receiver address
113
+ zeroForOne,
114
+ amountSpecified: swapAmount,
115
+ sqrtPriceLimitX96,
116
+ ammType: params.ammType,
117
+ tokenIn: zeroForOne ? token0 : token1,
118
+ tokenOut: zeroForOne ? token1 : token0,
119
+ fee
120
+ };
121
+ const swapSimulationResult = await (0, simulateSwap_1.simulateSwapWithSlippage)(this.publicClient, simulateSwapParams, this.publicClient.chain?.id || 1 // Use chain ID from public client, fallback to mainnet
122
+ );
123
+ if (!swapSimulationResult.success || !swapSimulationResult.data) {
124
+ return {
125
+ data: null,
126
+ status: swapSimulationResult.status,
127
+ success: false,
128
+ error: swapSimulationResult.error || 'Failed to simulate swap'
129
+ };
130
+ }
131
+ const swapSimulation = swapSimulationResult.data;
132
+ // Step 4: Estimate LP tokens
133
+ const lpEstimationResult = await (0, estimateLpTokens_1.estimateLpTokens)(this.publicClient, {
134
+ vault: params.vault,
135
+ originalAssets: params.assets,
136
+ swapAmount,
137
+ swapResult: swapSimulation.swapSimulation,
138
+ isToken0: params.isToken0
139
+ });
140
+ if (!lpEstimationResult.success || !lpEstimationResult.data) {
141
+ return {
142
+ data: null,
143
+ status: lpEstimationResult.status,
144
+ success: false,
145
+ error: lpEstimationResult.error || 'Failed to estimate LP tokens'
146
+ };
147
+ }
148
+ const lpEstimation = lpEstimationResult.data;
149
+ return {
150
+ data: {
151
+ swapAmount,
152
+ currentSqrtPrice: sqrtPrice,
153
+ sqrtPriceLimitX96,
154
+ swapSimulation,
155
+ lpEstimation,
156
+ zeroForOne
157
+ },
158
+ status: 200,
159
+ success: true
160
+ };
161
+ }
162
+ catch (error) {
163
+ return {
164
+ data: null,
165
+ status: 500,
166
+ success: false,
167
+ error: error instanceof Error ? error.message : 'Failed to preview single-asset deposit'
168
+ };
169
+ }
170
+ }
171
+ /**
172
+ * Executes a single-asset deposit transaction
173
+ *
174
+ * @param params - Single-asset deposit parameters
175
+ * @returns Promise resolving to the transaction hash
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * const result = await client.deposit({
180
+ * assets: parseEther('100'),
181
+ * receiver: userAddress,
182
+ * vault: vaultAddress,
183
+ * isToken0: true,
184
+ * depositSlippagePercent: 5n,
185
+ * swapSlippageBP: 500,
186
+ * ammType: AMMType.UniswapV3,
187
+ * singleAssetDepositContract: contractAddress
188
+ * });
189
+ *
190
+ * if (result.success) {
191
+ * console.log('Transaction hash:', result.data);
192
+ * }
193
+ * ```
194
+ */
195
+ async deposit(params) {
196
+ try {
197
+ const account = await this.walletClient.getAddresses();
198
+ if (!account[0]) {
199
+ throw new Error('No account found');
200
+ }
201
+ const singleAssentDeposit = params.singleAssetDepositContract || (0, const_1.getContractAddressByChainIdAndContractName)(this.publicClient.chain?.id || 1, 'SingleAssetDeposit');
202
+ // Prepare the transaction
203
+ const { request } = await this.publicClient.simulateContract({
204
+ address: singleAssentDeposit,
205
+ abi: singleTokenDeposit_1.singleTokenDepositAbi,
206
+ functionName: 'deposit',
207
+ args: [
208
+ params.assets,
209
+ params.receiver,
210
+ params.vault,
211
+ params.isToken0,
212
+ params.depositSlippagePercent,
213
+ params.swapSlippageBP,
214
+ params.ammType
215
+ ],
216
+ account: account[0]
217
+ });
218
+ // Execute the transaction
219
+ const hash = await this.walletClient.writeContract(request);
220
+ return {
221
+ data: hash,
222
+ status: 200,
223
+ success: true
224
+ };
225
+ }
226
+ catch (error) {
227
+ return {
228
+ data: null,
229
+ status: 500,
230
+ success: false,
231
+ error: error instanceof Error ? error.message : 'Failed to execute single-asset deposit'
232
+ };
233
+ }
234
+ }
235
+ /**
236
+ * Prepares a single-asset deposit transaction without executing it
237
+ * Useful for batching transactions or custom execution logic
238
+ *
239
+ * @param params - Single-asset deposit parameters
240
+ * @returns Promise resolving to the prepared transaction data
241
+ */
242
+ async prepareDepositTx(params) {
243
+ try {
244
+ const account = await this.walletClient.getAddresses();
245
+ if (!account[0]) {
246
+ throw new Error('No account found');
247
+ }
248
+ const chainId = await this.publicClient.getChainId();
249
+ const singleAssentDeposit = params.singleAssetDepositContract || (0, const_1.getContractAddressByChainIdAndContractName)(chainId, 'SingleAssetDeposit');
250
+ await this.publicClient.simulateContract({
251
+ address: singleAssentDeposit,
252
+ abi: singleTokenDeposit_1.singleTokenDepositAbi,
253
+ functionName: 'deposit',
254
+ args: [
255
+ params.assets,
256
+ params.receiver,
257
+ params.vault,
258
+ params.isToken0,
259
+ params.depositSlippagePercent,
260
+ params.swapSlippageBP,
261
+ params.ammType
262
+ ],
263
+ account: account[0]
264
+ });
265
+ return {
266
+ data: {
267
+ address: params.singleAssetDepositContract,
268
+ abi: singleTokenDeposit_1.singleTokenDepositAbi,
269
+ functionName: 'deposit',
270
+ args: [
271
+ params.assets,
272
+ params.receiver,
273
+ params.vault,
274
+ params.isToken0,
275
+ params.depositSlippagePercent,
276
+ params.swapSlippageBP,
277
+ params.ammType
278
+ ]
279
+ },
280
+ status: 200,
281
+ success: true
282
+ };
283
+ }
284
+ catch (error) {
285
+ return {
286
+ data: null,
287
+ status: 500,
288
+ success: false,
289
+ error: error instanceof Error ? error.message : 'Failed to prepare single-asset deposit transaction'
290
+ };
291
+ }
292
+ }
293
+ /**
294
+ * Validates single-asset deposit parameters
295
+ *
296
+ * @param params - Parameters to validate
297
+ * @throws Error if parameters are invalid
298
+ */
299
+ validateDepositParams(params) {
300
+ if (params.assets <= 0n) {
301
+ throw new Error('Assets amount must be greater than 0');
302
+ }
303
+ if (!params.vault || params.vault === '0x0000000000000000000000000000000000000000') {
304
+ throw new Error('Invalid vault address');
305
+ }
306
+ if (!params.receiver || params.receiver === '0x0000000000000000000000000000000000000000') {
307
+ throw new Error('Invalid receiver address');
308
+ }
309
+ if (!params.singleAssetDepositContract || params.singleAssetDepositContract === '0x0000000000000000000000000000000000000000') {
310
+ throw new Error('Invalid single-asset deposit contract address');
311
+ }
312
+ if (params.depositSlippagePercent > 100n) {
313
+ throw new Error('Deposit slippage percent cannot exceed 100%');
314
+ }
315
+ if (params.swapSlippageBP > 10000) {
316
+ throw new Error('Swap slippage BP cannot exceed 10000 (100%)');
317
+ }
318
+ if (!Object.values(types_1.AMMType).includes(params.ammType)) {
319
+ throw new Error('Invalid AMM type');
320
+ }
321
+ }
322
+ }
323
+ exports.SingleAssetDepositClient = SingleAssetDepositClient;
324
+ //# sourceMappingURL=singleAssetDeposit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singleAssetDeposit.js","sourceRoot":"","sources":["../../../../../src/base/vault/single-asset/singleAssetDeposit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AMMType = void 0;
4
+ /**
5
+ * AMM Types supported by single-asset deposits
6
+ */
7
+ var AMMType;
8
+ (function (AMMType) {
9
+ AMMType[AMMType["UniswapV3"] = 0] = "UniswapV3";
10
+ AMMType[AMMType["Algebra"] = 1] = "Algebra";
11
+ AMMType[AMMType["AlgebraDirectional"] = 2] = "AlgebraDirectional";
12
+ AMMType[AMMType["AlgebraVE33"] = 3] = "AlgebraVE33";
13
+ AMMType[AMMType["AlgebraIntegral"] = 4] = "AlgebraIntegral";
14
+ })(AMMType || (exports.AMMType = AMMType = {}));
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/base/vault/single-asset/types.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,IAAY,OAMX;AAND,WAAY,OAAO;IACjB,+CAAa,CAAA;IACb,2CAAW,CAAA;IACX,iEAAsB,CAAA;IACtB,mDAAe,CAAA;IACf,2DAAmB,CAAA;AACrB,CAAC,EANW,OAAO,uBAAP,OAAO,QAMlB"}
@@ -4,23 +4,26 @@ exports.getSlot0 = getSlot0;
4
4
  exports.getGlobalState = getGlobalState;
5
5
  exports.getGlobalStatePoolShark = getGlobalStatePoolShark;
6
6
  exports.getGlobalStateAlgebraIntegral = getGlobalStateAlgebraIntegral;
7
- const SLOT0_ABI = [
8
- {
9
- inputs: [],
10
- name: 'slot0',
11
- outputs: [
12
- { internalType: 'uint160', name: 'sqrtPriceX96', type: 'uint160' },
13
- { internalType: 'int24', name: 'tick', type: 'int24' },
14
- { internalType: 'uint16', name: 'observationIndex', type: 'uint16' },
15
- { internalType: 'uint16', name: 'observationCardinality', type: 'uint16' },
16
- { internalType: 'uint16', name: 'observationCardinalityNext', type: 'uint16' },
17
- { internalType: 'uint8', name: 'feeProtocol', type: 'uint8' },
18
- { internalType: 'bool', name: 'unlocked', type: 'bool' },
19
- ],
20
- stateMutability: 'view',
21
- type: 'function',
22
- },
23
- ];
7
+ exports.getPoolState = getPoolState;
8
+ exports.getPoolPrice = getPoolPrice;
9
+ exports.getPoolStateWithPrice = getPoolStateWithPrice;
10
+ // const SLOT0_ABI: any = [
11
+ // {
12
+ // inputs: [],
13
+ // name: 'slot0',
14
+ // outputs: [
15
+ // { internalType: 'uint160', name: 'sqrtPriceX96', type: 'uint160' },
16
+ // { internalType: 'int24', name: 'tick', type: 'int24' },
17
+ // { internalType: 'uint16', name: 'observationIndex', type: 'uint16' },
18
+ // { internalType: 'uint16', name: 'observationCardinality', type: 'uint16' },
19
+ // { internalType: 'uint16', name: 'observationCardinalityNext', type: 'uint16' },
20
+ // { internalType: 'uint8', name: 'feeProtocol', type: 'uint8' },
21
+ // { internalType: 'bool', name: 'unlocked', type: 'bool' },
22
+ // ],
23
+ // stateMutability: 'view',
24
+ // type: 'function',
25
+ // },
26
+ // ] as const;
24
27
  const GLOBAL_STATE_ABI = [
25
28
  {
26
29
  inputs: [],
@@ -128,7 +131,23 @@ async function getSlot0(publicClient, poolAddress) {
128
131
  try {
129
132
  const slot0 = await publicClient.readContract({
130
133
  address: poolAddress,
131
- abi: SLOT0_ABI,
134
+ abi: [
135
+ {
136
+ inputs: [],
137
+ name: 'slot0',
138
+ outputs: [
139
+ { internalType: 'uint160', name: 'sqrtPriceX96', type: 'uint160' },
140
+ { internalType: 'int24', name: 'tick', type: 'int24' },
141
+ { internalType: 'uint16', name: 'observationIndex', type: 'uint16' },
142
+ { internalType: 'uint16', name: 'observationCardinality', type: 'uint16' },
143
+ { internalType: 'uint16', name: 'observationCardinalityNext', type: 'uint16' },
144
+ { internalType: 'uint8', name: 'feeProtocol', type: 'uint8' },
145
+ { internalType: 'bool', name: 'unlocked', type: 'bool' },
146
+ ],
147
+ stateMutability: 'view',
148
+ type: 'function',
149
+ },
150
+ ],
132
151
  functionName: 'slot0',
133
152
  });
134
153
  return {
@@ -285,4 +304,196 @@ async function getGlobalStateAlgebraIntegral(publicClient, poolAddress, isDirect
285
304
  };
286
305
  }
287
306
  }
307
+ /**
308
+ * Unified method to get pool state across different AMM types
309
+ * Automatically calls the correct function based on pool type parameters
310
+ *
311
+ * @param publicClient - The public client for blockchain reads
312
+ * @param params - Parameters specifying the pool and its type
313
+ * @returns Promise resolving to standardized pool state data
314
+ *
315
+ * @example
316
+ * ```typescript
317
+ * // For Uniswap V3 pool
318
+ * const uniV3State = await getPoolState(publicClient, {
319
+ * poolAddress: '0x...',
320
+ * });
321
+ *
322
+ * // For Algebra pool
323
+ * const algebraState = await getPoolState(publicClient, {
324
+ * poolAddress: '0x...',
325
+ * isAlgebraPool: true,
326
+ * isAlgebraDirectionPool: false
327
+ * });
328
+ *
329
+ * // For PoolShark pool
330
+ * const poolSharkState = await getPoolState(publicClient, {
331
+ * poolAddress: '0x...',
332
+ * isPoolSharkPool: true
333
+ * });
334
+ * ```
335
+ */
336
+ async function getPoolState(publicClient, params) {
337
+ try {
338
+ let stateResponse;
339
+ // Handle different protocol types following the same logic as getPoolInstance
340
+ if (params.isAlgebraIntegralPool) {
341
+ // For Algebra Integral pools
342
+ stateResponse = await getGlobalStateAlgebraIntegral(publicClient, params.poolAddress, params.isAlgebraDirectionPool || false);
343
+ }
344
+ else if (params.isPoolSharkPool) {
345
+ // For PoolShark pools - convert to standardized format
346
+ const poolSharkResponse = await getGlobalStatePoolShark(publicClient, params.poolAddress);
347
+ if (poolSharkResponse.success && poolSharkResponse.data) {
348
+ stateResponse = {
349
+ success: true,
350
+ status: 200,
351
+ data: {
352
+ sqrtPriceX96: poolSharkResponse.data.pool.price,
353
+ tick: poolSharkResponse.data.pool.tickAtPrice,
354
+ observationIndex: 0,
355
+ observationCardinality: 0,
356
+ observationCardinalityNext: 0,
357
+ feeProtocol: 0,
358
+ unlocked: poolSharkResponse.data.unlocked === 1,
359
+ }
360
+ };
361
+ }
362
+ else {
363
+ stateResponse = {
364
+ data: null,
365
+ status: poolSharkResponse.status,
366
+ success: false,
367
+ error: poolSharkResponse.error
368
+ };
369
+ }
370
+ }
371
+ else if (params.isAlgebraPool) {
372
+ // For Algebra pools
373
+ stateResponse = await getGlobalState(publicClient, params.poolAddress, params.isAlgebraDirectionPool || false);
374
+ }
375
+ else {
376
+ // For standard Uniswap V3 pools
377
+ stateResponse = await getSlot0(publicClient, params.poolAddress);
378
+ }
379
+ if (!stateResponse.success || !stateResponse.data) {
380
+ throw new Error(stateResponse.error || 'Failed to read pool state');
381
+ }
382
+ return {
383
+ data: stateResponse.data,
384
+ status: 200,
385
+ success: true
386
+ };
387
+ }
388
+ catch (error) {
389
+ return {
390
+ data: null,
391
+ status: 500,
392
+ success: false,
393
+ error: error instanceof Error ? error.message : 'Failed to get pool state'
394
+ };
395
+ }
396
+ }
397
+ /**
398
+ * Extracts the appropriate price value from pool state based on AMM type
399
+ * Different AMM protocols store price information in different fields
400
+ *
401
+ * @param poolStateData - The pool state data returned from getPoolState
402
+ * @param params - Pool type parameters to determine which price field to use
403
+ * @returns The price as bigint, or null if price cannot be extracted
404
+ *
405
+ * @example
406
+ * ```typescript
407
+ * const stateResponse = await getPoolState(publicClient, {
408
+ * poolAddress: '0x...',
409
+ * isAlgebraPool: true
410
+ * });
411
+ *
412
+ * if (stateResponse.success && stateResponse.data) {
413
+ * const price = getPoolPrice(stateResponse.data, {
414
+ * isAlgebraPool: true,
415
+ * isAlgebraDirectionPool: false
416
+ * });
417
+ * console.log('Pool price:', price);
418
+ * }
419
+ * ```
420
+ */
421
+ function getPoolPrice(poolStateData, params) {
422
+ try {
423
+ let price;
424
+ // Extract price based on AMM type - following the same logic as getPoolInstance
425
+ if (params.isAlgebraPool && !params.isAlgebraIntegralPool) {
426
+ // For Algebra pools (non-integral)
427
+ price = (poolStateData)?.price;
428
+ }
429
+ else if (params.isAlgebraIntegralPool) {
430
+ // For Algebra Integral pools
431
+ price = (poolStateData)?.price;
432
+ }
433
+ else if (params.isPoolSharkPool) {
434
+ // For PoolShark pools - price is stored in a nested structure
435
+ price = poolStateData.tick?.price;
436
+ }
437
+ else {
438
+ // For standard Uniswap V3 pools
439
+ price = poolStateData.sqrtPriceX96;
440
+ }
441
+ return price || null;
442
+ }
443
+ catch (error) {
444
+ console.error('Error extracting pool price:', error);
445
+ return null;
446
+ }
447
+ }
448
+ /**
449
+ * Combined method to get both pool state and extract price in one call
450
+ * Convenience method that combines getPoolState and getPoolPrice
451
+ *
452
+ * @param publicClient - The public client for blockchain reads
453
+ * @param params - Parameters specifying the pool and its type
454
+ * @returns Promise resolving to object containing both state and price
455
+ *
456
+ * @example
457
+ * ```typescript
458
+ * const result = await getPoolStateWithPrice(publicClient, {
459
+ * poolAddress: '0x...',
460
+ * isAlgebraPool: true
461
+ * });
462
+ *
463
+ * if (result.success && result.data) {
464
+ * console.log('Pool state:', result.data.state);
465
+ * console.log('Pool price:', result.data.price);
466
+ * }
467
+ * ```
468
+ */
469
+ async function getPoolStateWithPrice(publicClient, params) {
470
+ try {
471
+ const stateResponse = await getPoolState(publicClient, params);
472
+ if (!stateResponse.success || !stateResponse.data) {
473
+ return {
474
+ data: null,
475
+ status: stateResponse.status,
476
+ success: false,
477
+ error: stateResponse.error || 'Failed to get pool state'
478
+ };
479
+ }
480
+ const price = getPoolPrice(stateResponse.data, params);
481
+ return {
482
+ data: {
483
+ state: stateResponse.data,
484
+ price
485
+ },
486
+ status: 200,
487
+ success: true
488
+ };
489
+ }
490
+ catch (error) {
491
+ return {
492
+ data: null,
493
+ status: 500,
494
+ success: false,
495
+ error: error instanceof Error ? error.message : 'Failed to get pool state with price'
496
+ };
497
+ }
498
+ }
288
499
  //# sourceMappingURL=utils.js.map