@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.
- package/README.md +190 -0
- package/dist/analytics.d.ts +157 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +468 -0
- package/dist/analytics.js.map +1 -0
- package/dist/api-deployer.d.ts.map +1 -1
- package/dist/api-deployer.js +38 -35
- package/dist/api-deployer.js.map +1 -1
- package/dist/claimer.d.ts.map +1 -1
- package/dist/claimer.js +9 -7
- package/dist/claimer.js.map +1 -1
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +50 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/liquidity.d.ts +13 -7
- package/dist/liquidity.d.ts.map +1 -1
- package/dist/liquidity.js +143 -46
- package/dist/liquidity.js.map +1 -1
- package/dist/orders.d.ts +338 -0
- package/dist/orders.d.ts.map +1 -0
- package/dist/orders.js +611 -0
- package/dist/orders.js.map +1 -0
- package/dist/permit2.d.ts +258 -0
- package/dist/permit2.d.ts.map +1 -0
- package/dist/permit2.js +520 -0
- package/dist/permit2.js.map +1 -0
- package/dist/price.d.ts +95 -0
- package/dist/price.d.ts.map +1 -0
- package/dist/price.js +207 -0
- package/dist/price.js.map +1 -0
- package/dist/swap.d.ts.map +1 -1
- package/dist/swap.js +21 -19
- package/dist/swap.js.map +1 -1
- package/dist/trader.d.ts +188 -0
- package/dist/trader.d.ts.map +1 -0
- package/dist/trader.js +277 -0
- package/dist/trader.js.map +1 -0
- package/dist/uniswap-abis.d.ts +525 -0
- package/dist/uniswap-abis.d.ts.map +1 -1
- package/dist/uniswap-abis.js +432 -1
- package/dist/uniswap-abis.js.map +1 -1
- package/dist/uniswap-chains.d.ts +77 -0
- package/dist/uniswap-chains.d.ts.map +1 -0
- package/dist/uniswap-chains.js +362 -0
- package/dist/uniswap-chains.js.map +1 -0
- package/dist/uniswap-quoter.d.ts +178 -0
- package/dist/uniswap-quoter.d.ts.map +1 -0
- package/dist/uniswap-quoter.js +432 -0
- package/dist/uniswap-quoter.js.map +1 -0
- package/dist/uniswap-trading.d.ts +203 -0
- package/dist/uniswap-trading.d.ts.map +1 -0
- package/dist/uniswap-trading.js +380 -0
- package/dist/uniswap-trading.js.map +1 -0
- package/dist/watcher.d.ts +117 -2
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +147 -2
- package/dist/watcher.js.map +1 -1
- 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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"}
|