@clawnch/clawncher-sdk 0.1.3 → 0.3.0

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 (63) hide show
  1. package/README.md +190 -0
  2. package/dist/analytics.d.ts +157 -0
  3. package/dist/analytics.d.ts.map +1 -0
  4. package/dist/analytics.js +468 -0
  5. package/dist/analytics.js.map +1 -0
  6. package/dist/api-deployer.d.ts.map +1 -1
  7. package/dist/api-deployer.js +38 -35
  8. package/dist/api-deployer.js.map +1 -1
  9. package/dist/claimer.d.ts.map +1 -1
  10. package/dist/claimer.js +9 -7
  11. package/dist/claimer.js.map +1 -1
  12. package/dist/errors.d.ts +13 -0
  13. package/dist/errors.d.ts.map +1 -1
  14. package/dist/errors.js +50 -0
  15. package/dist/errors.js.map +1 -1
  16. package/dist/index.d.ts +8 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +16 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/liquidity.d.ts +13 -7
  21. package/dist/liquidity.d.ts.map +1 -1
  22. package/dist/liquidity.js +143 -46
  23. package/dist/liquidity.js.map +1 -1
  24. package/dist/orders.d.ts +338 -0
  25. package/dist/orders.d.ts.map +1 -0
  26. package/dist/orders.js +611 -0
  27. package/dist/orders.js.map +1 -0
  28. package/dist/permit2.d.ts +258 -0
  29. package/dist/permit2.d.ts.map +1 -0
  30. package/dist/permit2.js +520 -0
  31. package/dist/permit2.js.map +1 -0
  32. package/dist/price.d.ts +95 -0
  33. package/dist/price.d.ts.map +1 -0
  34. package/dist/price.js +207 -0
  35. package/dist/price.js.map +1 -0
  36. package/dist/swap.d.ts.map +1 -1
  37. package/dist/swap.js +21 -19
  38. package/dist/swap.js.map +1 -1
  39. package/dist/trader.d.ts +188 -0
  40. package/dist/trader.d.ts.map +1 -0
  41. package/dist/trader.js +277 -0
  42. package/dist/trader.js.map +1 -0
  43. package/dist/uniswap-abis.d.ts +525 -0
  44. package/dist/uniswap-abis.d.ts.map +1 -1
  45. package/dist/uniswap-abis.js +432 -1
  46. package/dist/uniswap-abis.js.map +1 -1
  47. package/dist/uniswap-chains.d.ts +77 -0
  48. package/dist/uniswap-chains.d.ts.map +1 -0
  49. package/dist/uniswap-chains.js +362 -0
  50. package/dist/uniswap-chains.js.map +1 -0
  51. package/dist/uniswap-quoter.d.ts +178 -0
  52. package/dist/uniswap-quoter.d.ts.map +1 -0
  53. package/dist/uniswap-quoter.js +432 -0
  54. package/dist/uniswap-quoter.js.map +1 -0
  55. package/dist/uniswap-trading.d.ts +203 -0
  56. package/dist/uniswap-trading.d.ts.map +1 -0
  57. package/dist/uniswap-trading.js +380 -0
  58. package/dist/uniswap-trading.js.map +1 -0
  59. package/dist/watcher.d.ts +117 -2
  60. package/dist/watcher.d.ts.map +1 -1
  61. package/dist/watcher.js +147 -2
  62. package/dist/watcher.js.map +1 -1
  63. package/package.json +3 -1
@@ -0,0 +1,362 @@
1
+ /**
2
+ * Multi-chain Uniswap contract address registry.
3
+ *
4
+ * Covers all chains supported by Uniswap V4, V3, and the Trading API.
5
+ * Derived from Uniswap AI's uniswap-driver chain references and
6
+ * swap-integration Universal Router deployment addresses.
7
+ *
8
+ * @see https://github.com/Uniswap/uniswap-ai
9
+ * @see https://docs.uniswap.org/contracts/v4/deployments
10
+ */
11
+ import { getUniswapV4Addresses, getCommonAddresses } from './uniswap-addresses.js';
12
+ // ============================================================================
13
+ // Permit2 — same on all chains
14
+ // ============================================================================
15
+ const PERMIT2 = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
16
+ const ZERO = '0x0000000000000000000000000000000000000000';
17
+ // ============================================================================
18
+ // Chain Configs
19
+ // ============================================================================
20
+ const CHAINS = {
21
+ // Ethereum
22
+ 1: {
23
+ chainId: 1,
24
+ name: 'Ethereum',
25
+ slug: 'ethereum',
26
+ v4: true, v3: true, v2: true,
27
+ tradingApi: true,
28
+ blockTimeSeconds: 12,
29
+ explorer: 'https://etherscan.io',
30
+ dexScreenerId: 'ethereum',
31
+ weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
32
+ usdc: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
33
+ permit2: PERMIT2,
34
+ v4UniversalRouter: '0x66a9893cc07d91d95644aedd05d03f95e1dba8af',
35
+ v4PoolManager: '0x000000000004444c5dc75cB358380D2e3dE08A90',
36
+ v4StateView: ZERO, // TODO: add when available
37
+ v4Quoter: ZERO,
38
+ v4PositionManager: ZERO,
39
+ },
40
+ // Base — canonical addresses from uniswap-addresses.ts (single source of truth)
41
+ 8453: (() => {
42
+ const v4 = getUniswapV4Addresses('mainnet');
43
+ const common = getCommonAddresses('mainnet');
44
+ return {
45
+ chainId: 8453,
46
+ name: 'Base',
47
+ slug: 'base',
48
+ v4: true, v3: true, v2: false,
49
+ tradingApi: true,
50
+ blockTimeSeconds: 2,
51
+ explorer: 'https://basescan.org',
52
+ dexScreenerId: 'base',
53
+ weth: common.weth,
54
+ usdc: common.usdc,
55
+ permit2: PERMIT2,
56
+ v4UniversalRouter: v4.universalRouter,
57
+ v4PoolManager: v4.poolManager,
58
+ v4StateView: v4.stateView,
59
+ v4Quoter: v4.quoter,
60
+ v4PositionManager: v4.positionManager,
61
+ };
62
+ })(),
63
+ // Arbitrum
64
+ 42161: {
65
+ chainId: 42161,
66
+ name: 'Arbitrum',
67
+ slug: 'arbitrum',
68
+ v4: true, v3: true, v2: true,
69
+ tradingApi: true,
70
+ blockTimeSeconds: 0.25,
71
+ explorer: 'https://arbiscan.io',
72
+ dexScreenerId: 'arbitrum',
73
+ weth: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',
74
+ usdc: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
75
+ permit2: PERMIT2,
76
+ v4UniversalRouter: '0xa51afafe0263b40edaef0df8781ea9aa03e381a3',
77
+ v4PoolManager: ZERO,
78
+ v4StateView: ZERO,
79
+ v4Quoter: ZERO,
80
+ v4PositionManager: ZERO,
81
+ },
82
+ // Optimism
83
+ 10: {
84
+ chainId: 10,
85
+ name: 'Optimism',
86
+ slug: 'optimism',
87
+ v4: true, v3: true, v2: false,
88
+ tradingApi: true,
89
+ blockTimeSeconds: 2,
90
+ explorer: 'https://optimistic.etherscan.io',
91
+ dexScreenerId: 'optimism',
92
+ weth: '0x4200000000000000000000000000000000000006',
93
+ usdc: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
94
+ permit2: PERMIT2,
95
+ v4UniversalRouter: '0x851116d9223fabed8e56c0e6b8ad0c31d98b3507',
96
+ v4PoolManager: ZERO,
97
+ v4StateView: ZERO,
98
+ v4Quoter: ZERO,
99
+ v4PositionManager: ZERO,
100
+ },
101
+ // Polygon
102
+ 137: {
103
+ chainId: 137,
104
+ name: 'Polygon',
105
+ slug: 'polygon',
106
+ v4: false, v3: true, v2: true,
107
+ tradingApi: true,
108
+ blockTimeSeconds: 2,
109
+ explorer: 'https://polygonscan.com',
110
+ dexScreenerId: 'polygon',
111
+ weth: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', // WMATIC
112
+ usdc: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',
113
+ permit2: PERMIT2,
114
+ v4UniversalRouter: '0x1095692a6237d83c6a72f3f5efedb9a670c49223',
115
+ v4PoolManager: ZERO,
116
+ v4StateView: ZERO,
117
+ v4Quoter: ZERO,
118
+ v4PositionManager: ZERO,
119
+ },
120
+ // BNB Chain
121
+ 56: {
122
+ chainId: 56,
123
+ name: 'BNB Chain',
124
+ slug: 'bnb',
125
+ v4: true, v3: true, v2: false,
126
+ tradingApi: true,
127
+ blockTimeSeconds: 3,
128
+ explorer: 'https://bscscan.com',
129
+ dexScreenerId: 'bsc',
130
+ weth: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB
131
+ usdc: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',
132
+ permit2: PERMIT2,
133
+ v4UniversalRouter: '0x1906c1d672b88cd1b9ac7593301ca990f94eae07',
134
+ v4PoolManager: ZERO,
135
+ v4StateView: ZERO,
136
+ v4Quoter: ZERO,
137
+ v4PositionManager: ZERO,
138
+ },
139
+ // Unichain
140
+ 130: {
141
+ chainId: 130,
142
+ name: 'Unichain',
143
+ slug: 'unichain',
144
+ v4: true, v3: true, v2: false,
145
+ tradingApi: true,
146
+ blockTimeSeconds: 1,
147
+ explorer: 'https://unichain.blockscout.com',
148
+ dexScreenerId: 'unichain',
149
+ weth: '0x4200000000000000000000000000000000000006',
150
+ usdc: '0x078D782b760474a361dDA0AF3839290b0EF57AD6',
151
+ permit2: PERMIT2,
152
+ v4UniversalRouter: '0xef740bf23acae26f6492b10de645d6b98dc8eaf3',
153
+ v4PoolManager: ZERO,
154
+ v4StateView: ZERO,
155
+ v4Quoter: ZERO,
156
+ v4PositionManager: ZERO,
157
+ },
158
+ // Avalanche
159
+ 43114: {
160
+ chainId: 43114,
161
+ name: 'Avalanche',
162
+ slug: 'avalanche',
163
+ v4: true, v3: true, v2: false,
164
+ tradingApi: true,
165
+ blockTimeSeconds: 2,
166
+ explorer: 'https://snowtrace.io',
167
+ dexScreenerId: 'avalanche',
168
+ weth: '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7', // WAVAX
169
+ usdc: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',
170
+ permit2: PERMIT2,
171
+ v4UniversalRouter: '0x94b75331ae8d42c1b61065089b7d48fe14aa73b7',
172
+ v4PoolManager: ZERO,
173
+ v4StateView: ZERO,
174
+ v4Quoter: ZERO,
175
+ v4PositionManager: ZERO,
176
+ },
177
+ // Celo
178
+ 42220: {
179
+ chainId: 42220,
180
+ name: 'Celo',
181
+ slug: 'celo',
182
+ v4: true, v3: true, v2: false,
183
+ tradingApi: true,
184
+ blockTimeSeconds: 5,
185
+ explorer: 'https://celoscan.io',
186
+ dexScreenerId: 'celo',
187
+ weth: '0x471EcE3750Da237f93B8E339c536989b8978a438', // CELO
188
+ usdc: '0xcebA9300f2b948710d2653dD7B07f33A8B32118C',
189
+ permit2: PERMIT2,
190
+ v4UniversalRouter: '0xcb695bc5d3aa22cad1e6df07801b061a05a0233a',
191
+ v4PoolManager: ZERO,
192
+ v4StateView: ZERO,
193
+ v4Quoter: ZERO,
194
+ v4PositionManager: ZERO,
195
+ },
196
+ // Blast
197
+ 81457: {
198
+ chainId: 81457,
199
+ name: 'Blast',
200
+ slug: 'blast',
201
+ v4: true, v3: true, v2: false,
202
+ tradingApi: true,
203
+ blockTimeSeconds: 2,
204
+ explorer: 'https://blastscan.io',
205
+ dexScreenerId: 'blast',
206
+ weth: '0x4300000000000000000000000000000000000004',
207
+ usdc: ZERO,
208
+ permit2: PERMIT2,
209
+ v4UniversalRouter: '0xeabbcb3e8e415306207ef514f660a3f820025be3',
210
+ v4PoolManager: ZERO,
211
+ v4StateView: ZERO,
212
+ v4Quoter: ZERO,
213
+ v4PositionManager: ZERO,
214
+ },
215
+ // Zora
216
+ 7777777: {
217
+ chainId: 7777777,
218
+ name: 'Zora',
219
+ slug: 'zora',
220
+ v4: true, v3: true, v2: false,
221
+ tradingApi: true,
222
+ blockTimeSeconds: 2,
223
+ explorer: 'https://explorer.zora.energy',
224
+ dexScreenerId: 'zora',
225
+ weth: '0x4200000000000000000000000000000000000006',
226
+ usdc: ZERO,
227
+ permit2: PERMIT2,
228
+ v4UniversalRouter: '0x3315ef7ca28db74abadc6c44570efdf06b04b020',
229
+ v4PoolManager: ZERO,
230
+ v4StateView: ZERO,
231
+ v4Quoter: ZERO,
232
+ v4PositionManager: ZERO,
233
+ },
234
+ // World Chain
235
+ 480: {
236
+ chainId: 480,
237
+ name: 'World Chain',
238
+ slug: 'worldchain',
239
+ v4: true, v3: true, v2: false,
240
+ tradingApi: true,
241
+ blockTimeSeconds: 2,
242
+ explorer: 'https://worldchain-mainnet.explorer.alchemy.com',
243
+ dexScreenerId: 'worldchain',
244
+ weth: '0x4200000000000000000000000000000000000006',
245
+ usdc: ZERO,
246
+ permit2: PERMIT2,
247
+ v4UniversalRouter: '0x8ac7bee993bb44dab564ea4bc9ea67bf9eb5e743',
248
+ v4PoolManager: ZERO,
249
+ v4StateView: ZERO,
250
+ v4Quoter: ZERO,
251
+ v4PositionManager: ZERO,
252
+ },
253
+ // Soneium
254
+ 1868: {
255
+ chainId: 1868,
256
+ name: 'Soneium',
257
+ slug: 'soneium',
258
+ v4: true, v3: false, v2: false,
259
+ tradingApi: true,
260
+ blockTimeSeconds: 2,
261
+ explorer: 'https://soneium.blockscout.com',
262
+ dexScreenerId: 'soneium',
263
+ weth: '0x4200000000000000000000000000000000000006',
264
+ usdc: ZERO,
265
+ permit2: PERMIT2,
266
+ v4UniversalRouter: '0x4cded7edf52c8aa5259a54ec6a3ce7c6d2a455df',
267
+ v4PoolManager: ZERO,
268
+ v4StateView: ZERO,
269
+ v4Quoter: ZERO,
270
+ v4PositionManager: ZERO,
271
+ },
272
+ // zkSync
273
+ 324: {
274
+ chainId: 324,
275
+ name: 'zkSync Era',
276
+ slug: 'zksync',
277
+ v4: false, v3: true, v2: false,
278
+ tradingApi: true,
279
+ blockTimeSeconds: 1,
280
+ explorer: 'https://explorer.zksync.io',
281
+ dexScreenerId: 'zksync',
282
+ weth: '0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91',
283
+ usdc: '0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4',
284
+ permit2: PERMIT2,
285
+ v4UniversalRouter: ZERO,
286
+ v4PoolManager: ZERO,
287
+ v4StateView: ZERO,
288
+ v4Quoter: ZERO,
289
+ v4PositionManager: ZERO,
290
+ },
291
+ // Monad
292
+ 143: {
293
+ chainId: 143,
294
+ name: 'Monad',
295
+ slug: 'monad',
296
+ v4: true, v3: false, v2: false,
297
+ tradingApi: true,
298
+ blockTimeSeconds: 1,
299
+ explorer: 'https://monad.blockscout.com',
300
+ dexScreenerId: 'monad',
301
+ weth: ZERO,
302
+ usdc: ZERO,
303
+ permit2: PERMIT2,
304
+ v4UniversalRouter: '0x0d97dc33264bfc1c226207428a79b26757fb9dc3',
305
+ v4PoolManager: ZERO,
306
+ v4StateView: ZERO,
307
+ v4Quoter: ZERO,
308
+ v4PositionManager: ZERO,
309
+ },
310
+ };
311
+ // ============================================================================
312
+ // Getters
313
+ // ============================================================================
314
+ /** Get config for a specific chain ID. Returns undefined if not supported. */
315
+ export function getUniswapChain(chainId) {
316
+ return CHAINS[chainId];
317
+ }
318
+ /** Get all supported chain configs. */
319
+ export function getAllUniswapChains() {
320
+ return Object.values(CHAINS);
321
+ }
322
+ /** Get chains that support the Uniswap Trading API. */
323
+ export function getTradingApiChains() {
324
+ return Object.values(CHAINS).filter(c => c.tradingApi);
325
+ }
326
+ /** Get chains that have V4 deployed. */
327
+ export function getV4Chains() {
328
+ return Object.values(CHAINS).filter(c => c.v4);
329
+ }
330
+ /** Get chains that have V3 deployed. */
331
+ export function getV3Chains() {
332
+ return Object.values(CHAINS).filter(c => c.v3);
333
+ }
334
+ /** Get chain ID from a slug (e.g. 'base' -> 8453). */
335
+ export function chainIdFromSlug(slug) {
336
+ const chain = Object.values(CHAINS).find(c => c.slug === slug);
337
+ return chain?.chainId;
338
+ }
339
+ /** Get chain slug from a chain ID (e.g. 8453 -> 'base'). */
340
+ export function chainSlugFromId(chainId) {
341
+ return CHAINS[chainId]?.slug;
342
+ }
343
+ /** All supported chain IDs. */
344
+ export const SUPPORTED_CHAIN_IDS = Object.keys(CHAINS).map(Number);
345
+ /** Uniswap deep link base URL. */
346
+ export const UNISWAP_APP_URL = 'https://app.uniswap.org';
347
+ export const FEE_TIERS = [
348
+ { fee: 100, tickSpacing: 1, label: '0.01%', description: 'Stablecoins (USDC/USDT)' },
349
+ { fee: 500, tickSpacing: 10, label: '0.05%', description: 'Correlated pairs (ETH/stETH)' },
350
+ { fee: 3000, tickSpacing: 60, label: '0.30%', description: 'Most pairs (default)' },
351
+ { fee: 10000, tickSpacing: 200, label: '1.00%', description: 'Exotic / volatile pairs' },
352
+ ];
353
+ /** Get the default fee tier for a given pair type. */
354
+ export function getDefaultFeeTier(pairType = 'major') {
355
+ switch (pairType) {
356
+ case 'stable': return FEE_TIERS[0];
357
+ case 'correlated': return FEE_TIERS[1];
358
+ case 'major': return FEE_TIERS[2];
359
+ case 'volatile': return FEE_TIERS[3];
360
+ }
361
+ }
362
+ //# sourceMappingURL=uniswap-chains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswap-chains.js","sourceRoot":"","sources":["../src/uniswap-chains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * UniswapQuoter — On-chain V4 quote simulation + price impact estimation.
3
+ *
4
+ * Uses the deployed V4 Quoter contract to simulate swaps without executing
5
+ * them. This works even without a Trading API key — it's purely on-chain.
6
+ *
7
+ * Supports:
8
+ * - Single-pool exact input/output quotes
9
+ * - Price impact calculation
10
+ * - Pool discovery for Clawncher tokens
11
+ * - Multi-chain via uniswap-chains registry
12
+ *
13
+ * @see https://docs.uniswap.org/contracts/v4/reference/periphery/interfaces/IQuoter
14
+ */
15
+ import { type Address, type PublicClient } from 'viem';
16
+ import type { NetworkName } from './addresses.js';
17
+ import { type TokenRewardInfo } from './reader.js';
18
+ export interface QuoterConfig {
19
+ /** Public client for the target chain */
20
+ publicClient: PublicClient;
21
+ /** Chain ID (default: 8453 = Base) */
22
+ chainId?: number;
23
+ /** Network name for Base-specific address lookups (default: 'mainnet') */
24
+ network?: NetworkName;
25
+ }
26
+ export interface PoolKey {
27
+ currency0: Address;
28
+ currency1: Address;
29
+ fee: number;
30
+ tickSpacing: number;
31
+ hooks: Address;
32
+ }
33
+ export interface QuoteParams {
34
+ /** Pool key to quote through */
35
+ poolKey: PoolKey;
36
+ /** Whether selling currency0 for currency1 (true) or vice versa (false) */
37
+ zeroForOne: boolean;
38
+ /** Amount to swap (raw units) */
39
+ amount: bigint;
40
+ /** Optional sqrt price limit (default: 0 = no limit) */
41
+ sqrtPriceLimitX96?: bigint;
42
+ /** Hook data (default: '0x') */
43
+ hookData?: `0x${string}`;
44
+ }
45
+ export interface QuoteResult {
46
+ /** Quoted output amount (for exact input) or input amount (for exact output) */
47
+ quotedAmount: bigint;
48
+ /** Estimated gas for the swap */
49
+ gasEstimate: bigint;
50
+ /** Computed price impact (requires pool state read) */
51
+ priceImpact: number | null;
52
+ /** Current pool price (token1/token0 ratio) before the swap */
53
+ currentPrice: number | null;
54
+ /** Estimated price after the swap */
55
+ priceAfterSwap: number | null;
56
+ }
57
+ export interface PoolState {
58
+ sqrtPriceX96: bigint;
59
+ tick: number;
60
+ liquidity: bigint;
61
+ protocolFee: number;
62
+ lpFee: number;
63
+ }
64
+ export declare class UniswapQuoter {
65
+ private readonly publicClient;
66
+ private readonly chainId;
67
+ private readonly network;
68
+ private readonly chainConfig;
69
+ constructor(config: QuoterConfig);
70
+ /** Get the V4 Quoter address for the current chain */
71
+ private getQuoterAddress;
72
+ /** Get the StateView address for the current chain */
73
+ private getStateViewAddress;
74
+ /**
75
+ * Read current pool state from StateView.
76
+ */
77
+ getPoolState(poolKey: PoolKey): Promise<PoolState>;
78
+ /**
79
+ * Compute pool ID from pool key (keccak256 of abi-encoded key).
80
+ */
81
+ computePoolId(poolKey: PoolKey): Promise<`0x${string}`>;
82
+ /**
83
+ * Quote an exact input swap (sell a fixed amount, get variable output).
84
+ *
85
+ * Uses the V4 Quoter's `quoteExactInputSingle` via `eth_call` simulation.
86
+ * The Quoter intentionally reverts with the result — viem handles this
87
+ * via `simulateContract` or we catch the revert.
88
+ */
89
+ quoteExactInput(params: QuoteParams): Promise<QuoteResult>;
90
+ /**
91
+ * Quote an exact output swap (buy a fixed amount, pay variable input).
92
+ */
93
+ quoteExactOutput(params: QuoteParams): Promise<QuoteResult>;
94
+ /**
95
+ * Calculate price impact for a swap.
96
+ *
97
+ * Price impact = (executionPrice - marketPrice) / marketPrice
98
+ *
99
+ * For exact input: executionPrice = amountOut / amountIn
100
+ * Market price comes from current pool sqrtPriceX96.
101
+ */
102
+ private calculatePriceImpact;
103
+ /**
104
+ * Get estimated price impact without executing a full quote.
105
+ *
106
+ * Uses the simplified formula:
107
+ * impact ≈ amountIn / (2 * liquidityInPool)
108
+ *
109
+ * This is a rough estimate — use quoteExactInput for precision.
110
+ */
111
+ estimatePriceImpact(poolKey: PoolKey, amountIn: bigint): Promise<number>;
112
+ /** Convert sqrtPriceX96 to a float price (token1/token0) */
113
+ sqrtPriceX96ToPrice(sqrtPriceX96: bigint): number;
114
+ /** Convert a float price to sqrtPriceX96 */
115
+ priceToSqrtPriceX96(price: number): bigint;
116
+ /**
117
+ * Check if a pool exists and has liquidity.
118
+ */
119
+ isPoolActive(poolKey: PoolKey): Promise<boolean>;
120
+ /**
121
+ * Get the WETH address for the current chain.
122
+ */
123
+ getWethAddress(): Address;
124
+ /**
125
+ * Build a pool key for a token paired with WETH.
126
+ *
127
+ * Automatically sorts currency0/currency1 (lower address first).
128
+ */
129
+ buildWethPoolKey(token: Address, fee?: number, tickSpacing?: number, hooks?: Address): PoolKey;
130
+ /**
131
+ * Determine if selling token for WETH requires zeroForOne or oneForZero.
132
+ */
133
+ isTokenCurrency0(token: Address): boolean;
134
+ /**
135
+ * Build a pool key for a Clawnch token by reading its deployment data
136
+ * from the LP locker contract.
137
+ *
138
+ * This is the SDK's killer feature — Clawnch tokens have their pool key
139
+ * (including the correct hook address) stored on-chain in the LP locker.
140
+ * No manual configuration needed. This works for ANY token deployed
141
+ * through Clawnch, including tokens with MEV hooks, custom fee tiers,
142
+ * and non-standard tick spacings.
143
+ *
144
+ * Falls back to `buildWethPoolKey()` (zero hook, 3000 fee) if the token
145
+ * is not a Clawnch token.
146
+ *
147
+ * @param token - Token address (must be on Base)
148
+ * @returns Pool key with correct hook, fee, and tick spacing
149
+ */
150
+ buildPoolKeyFromToken(token: Address): Promise<PoolKey>;
151
+ /**
152
+ * Get the full token reward info from the Clawnch LP locker.
153
+ *
154
+ * Returns null if the token wasn't deployed through Clawnch.
155
+ */
156
+ getTokenRewards(token: Address): Promise<TokenRewardInfo | null>;
157
+ /**
158
+ * One-call quote for any Clawnch token: auto-discovers pool key,
159
+ * determines swap direction, and returns the quote.
160
+ *
161
+ * This replaces the 3-step manual flow of:
162
+ * 1. Get pool key from LP locker
163
+ * 2. Determine zeroForOne from WETH position
164
+ * 3. Call quoteExactInput
165
+ *
166
+ * @param token - Clawnch token address
167
+ * @param ethAmount - ETH amount to swap (raw units)
168
+ * @param direction - 'buy' (ETH→Token) or 'sell' (Token→ETH)
169
+ */
170
+ quoteClawnchToken(token: Address, ethAmount: bigint, direction?: 'buy' | 'sell'): Promise<QuoteResult & {
171
+ poolKey: PoolKey;
172
+ }>;
173
+ /**
174
+ * Try to parse a quoter revert (the V4 quoter reverts with encoded results).
175
+ */
176
+ private parseQuoterRevert;
177
+ }
178
+ //# sourceMappingURL=uniswap-quoter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswap-quoter.d.ts","sourceRoot":"","sources":["../src/uniswap-quoter.ts"],"names":[],"mappings":"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"}