@andrewkimjoseph/celina-sdk 0.2.6 → 0.2.8

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.
@@ -0,0 +1,342 @@
1
+ /**
2
+ * Uniswap v4 swaps on Celo mainnet: quote, estimate, and prepare flows.
3
+ * Uses V4Quoter for pricing and Universal Router + Permit2 for execution calldata.
4
+ * Pool discovery prefers the v4 subgraph; falls back to on-chain hub probing when unavailable.
5
+ */
6
+ import { concat, encodeFunctionData, erc20Abi, formatUnits, maxUint256, } from "viem";
7
+ import { permit2Abi } from "../abis/permit2.js";
8
+ import { universalRouterAbi } from "../abis/universal-router.js";
9
+ import { Actions, CommandType, RoutePlanner, V4Planner, } from "../clients/uniswap-sdk.js";
10
+ import { CELINA_DATA_SUFFIX } from "../config/celina-tag.js";
11
+ import { UNISWAP_V4, uniswapInputTokenAddress, toUniswapRoutingCurrency, } from "../config/uniswap.js";
12
+ import { ALLOWANCE_MAPPING_SLOTS, erc20AllowanceStateOverride, isLikelyTransferFailed, } from "../utils/erc20-allowance-storage.js";
13
+ import { serializePreparedFlow, } from "../types/prepared.js";
14
+ import { findBestUniswapRoute, applySlippage } from "./uniswap-path-router.js";
15
+ import { TokenService } from "./token.service.js";
16
+ const DEFAULT_SLIPPAGE = 0.5;
17
+ const DEFAULT_DEADLINE_MINUTES = 5;
18
+ const PERMIT2_MAX_UINT160 = (1n << 160n) - 1n;
19
+ function taggedCalldata(data) {
20
+ return concat([data, CELINA_DATA_SUFFIX]);
21
+ }
22
+ function trimDisplayDecimals(value) {
23
+ const num = Number(value);
24
+ if (!Number.isFinite(num))
25
+ return value;
26
+ if (Math.abs(num) >= 1000) {
27
+ return num.toLocaleString(undefined, { maximumFractionDigits: 2 });
28
+ }
29
+ if (Math.abs(num) >= 1) {
30
+ return num.toLocaleString(undefined, { maximumFractionDigits: 4 });
31
+ }
32
+ return num.toLocaleString(undefined, { maximumSignificantDigits: 6 });
33
+ }
34
+ function swapOptions(params) {
35
+ const slippageTolerance = params?.slippageTolerance ?? DEFAULT_SLIPPAGE;
36
+ const deadlineMinutes = params?.deadlineMinutes ?? DEFAULT_DEADLINE_MINUTES;
37
+ const deadline = BigInt(Math.floor(Date.now() / 1000) + deadlineMinutes * 60);
38
+ return { slippageTolerance, deadlineMinutes, deadline };
39
+ }
40
+ function formatUniswapError(error, tokenIn, tokenOut) {
41
+ const message = error instanceof Error ? error.message : String(error);
42
+ if (/insufficient liquidity|amountOut.*0/i.test(message)) {
43
+ throw new Error(`Insufficient liquidity in Uniswap v4 pools for ${tokenIn} → ${tokenOut}.`);
44
+ }
45
+ throw error instanceof Error ? error : new Error(message);
46
+ }
47
+ /** Uniswap v4 quotes, gas estimates, and `prepareSwap` flows on Celo mainnet. */
48
+ export class UniswapService {
49
+ clientFactory;
50
+ tokenService;
51
+ constructor(clientFactory) {
52
+ this.clientFactory = clientFactory;
53
+ this.tokenService = new TokenService(clientFactory);
54
+ }
55
+ resolvePair(tokenIn, tokenOut) {
56
+ const resolvedIn = this.tokenService.resolveToken(tokenIn);
57
+ const resolvedOut = this.tokenService.resolveToken(tokenOut);
58
+ const routingIn = toUniswapRoutingCurrency(resolvedIn.address);
59
+ const routingOut = toUniswapRoutingCurrency(resolvedOut.address);
60
+ const inputToken = uniswapInputTokenAddress(resolvedIn.address);
61
+ return { resolvedIn, resolvedOut, routingIn, routingOut, inputToken };
62
+ }
63
+ baseQuoteFields(resolvedIn, resolvedOut, amount, expectedOutWei, routeHops, indexSource) {
64
+ return {
65
+ protocol: "uniswap_v4",
66
+ network: "mainnet",
67
+ tokenIn: resolvedIn.symbol,
68
+ tokenOut: resolvedOut.symbol,
69
+ amountIn: amount,
70
+ expectedOut: formatUnits(expectedOutWei, resolvedOut.decimals),
71
+ routeHops,
72
+ indexSource,
73
+ };
74
+ }
75
+ async buildSwapRoute(tokenIn, tokenOut, amount, params) {
76
+ const { public: client } = this.clientFactory.getClients();
77
+ const { resolvedIn, resolvedOut, routingIn, routingOut, inputToken } = this.resolvePair(tokenIn, tokenOut);
78
+ if (routingIn.toLowerCase() === routingOut.toLowerCase()) {
79
+ throw new Error("tokenIn and tokenOut must be different.");
80
+ }
81
+ const amountInWei = this.tokenService.parseAmount(amount, resolvedIn.decimals);
82
+ const quote = await findBestUniswapRoute(client, routingIn, routingOut, amountInWei);
83
+ if (!quote) {
84
+ throw new Error(`No Uniswap v4 route for ${resolvedIn.symbol} → ${resolvedOut.symbol}.`);
85
+ }
86
+ const { slippageTolerance, deadlineMinutes, deadline } = swapOptions(params);
87
+ const amountOutMin = applySlippage(quote.amountOut, slippageTolerance);
88
+ return {
89
+ client,
90
+ resolvedIn,
91
+ resolvedOut,
92
+ routingIn,
93
+ routingOut,
94
+ inputToken,
95
+ amountInWei,
96
+ route: quote.route,
97
+ expectedOutWei: quote.amountOut,
98
+ amountOutMin,
99
+ slippageTolerance,
100
+ deadlineMinutes,
101
+ deadline,
102
+ indexSource: quote.indexSource,
103
+ };
104
+ }
105
+ buildUniversalRouterCalldata(built, _recipient) {
106
+ const { route, amountInWei, amountOutMin, deadline, routingIn, routingOut, } = built;
107
+ const v4Planner = new V4Planner();
108
+ const routePlanner = new RoutePlanner();
109
+ const amountIn = amountInWei.toString();
110
+ const amountOutMinimum = amountOutMin.toString();
111
+ if (route.hops === 1) {
112
+ const poolKey = route.pools[0];
113
+ const zeroForOne = routingIn.toLowerCase() === poolKey.currency0.toLowerCase();
114
+ v4Planner.addAction(Actions.SWAP_EXACT_IN_SINGLE, [
115
+ {
116
+ poolKey,
117
+ zeroForOne,
118
+ amountIn,
119
+ amountOutMinimum,
120
+ hookData: "0x",
121
+ },
122
+ ]);
123
+ v4Planner.addAction(Actions.SETTLE_ALL, [routingIn, amountIn]);
124
+ v4Planner.addAction(Actions.TAKE_ALL, [routingOut, amountOutMinimum]);
125
+ }
126
+ else {
127
+ v4Planner.addAction(Actions.SWAP_EXACT_IN, [
128
+ {
129
+ currencyIn: routingIn,
130
+ path: route.pathKeys,
131
+ amountIn,
132
+ amountOutMinimum,
133
+ },
134
+ ]);
135
+ v4Planner.addAction(Actions.SETTLE_ALL, [routingIn, amountIn]);
136
+ v4Planner.addAction(Actions.TAKE_ALL, [routingOut, amountOutMinimum]);
137
+ }
138
+ routePlanner.addCommand(CommandType.V4_SWAP, [
139
+ v4Planner.actions,
140
+ v4Planner.params,
141
+ ]);
142
+ const data = encodeFunctionData({
143
+ abi: universalRouterAbi,
144
+ functionName: "execute",
145
+ args: [
146
+ routePlanner.commands,
147
+ [v4Planner.finalize()],
148
+ deadline,
149
+ ],
150
+ });
151
+ return {
152
+ to: UNISWAP_V4.universalRouter,
153
+ data,
154
+ value: 0n,
155
+ };
156
+ }
157
+ async getApprovalSteps(client, from, inputToken, tokenSymbol, amountInWei, deadline) {
158
+ if (inputToken === "native") {
159
+ return [];
160
+ }
161
+ const steps = [];
162
+ const token = inputToken;
163
+ const erc20Allowance = await client.readContract({
164
+ address: token,
165
+ abi: erc20Abi,
166
+ functionName: "allowance",
167
+ args: [from, UNISWAP_V4.permit2],
168
+ });
169
+ if (erc20Allowance < amountInWei) {
170
+ steps.push({
171
+ kind: "erc20",
172
+ to: token,
173
+ data: taggedCalldata(encodeFunctionData({
174
+ abi: erc20Abi,
175
+ functionName: "approve",
176
+ args: [UNISWAP_V4.permit2, maxUint256],
177
+ })),
178
+ value: "0",
179
+ description: `Approve ${tokenSymbol} for Uniswap Permit2`,
180
+ });
181
+ }
182
+ const permit2Allowance = await client.readContract({
183
+ address: UNISWAP_V4.permit2,
184
+ abi: permit2Abi,
185
+ functionName: "allowance",
186
+ args: [from, token, UNISWAP_V4.universalRouter],
187
+ });
188
+ const now = BigInt(Math.floor(Date.now() / 1000));
189
+ if (permit2Allowance[0] < amountInWei ||
190
+ BigInt(permit2Allowance[1]) <= now) {
191
+ steps.push({
192
+ kind: "contract",
193
+ to: UNISWAP_V4.permit2,
194
+ data: taggedCalldata(encodeFunctionData({
195
+ abi: permit2Abi,
196
+ functionName: "approve",
197
+ args: [
198
+ token,
199
+ UNISWAP_V4.universalRouter,
200
+ PERMIT2_MAX_UINT160,
201
+ Number(deadline),
202
+ ],
203
+ })),
204
+ value: "0",
205
+ description: `Permit2 approve ${tokenSymbol} for Uniswap Universal Router`,
206
+ });
207
+ }
208
+ return steps;
209
+ }
210
+ async estimateCallGas(client, from, to, data, value = 0n) {
211
+ const gas = await client.estimateGas({
212
+ account: from,
213
+ to,
214
+ data,
215
+ value,
216
+ });
217
+ return gas.toString();
218
+ }
219
+ async estimateSwapGasWithAllowance(client, from, to, data, token, amount) {
220
+ const request = { account: from, to, data, value: 0n };
221
+ for (const mappingSlot of ALLOWANCE_MAPPING_SLOTS) {
222
+ try {
223
+ const gas = await client.estimateGas({
224
+ ...request,
225
+ stateOverride: erc20AllowanceStateOverride(token, from, UNISWAP_V4.permit2, amount, mappingSlot),
226
+ });
227
+ return gas.toString();
228
+ }
229
+ catch (error) {
230
+ if (!isLikelyTransferFailed(error)) {
231
+ throw error;
232
+ }
233
+ }
234
+ }
235
+ throw new Error("Could not estimate Uniswap swap gas: failed to simulate ERC-20 allowance for this token.");
236
+ }
237
+ /**
238
+ * Expected Uniswap v4 output for a token pair — no wallet required.
239
+ * @param tokenIn - Input token symbol or address
240
+ * @param tokenOut - Output token symbol or address
241
+ * @param amount - Human-readable input amount
242
+ */
243
+ async getSwapQuote(tokenIn, tokenOut, amount) {
244
+ try {
245
+ const built = await this.buildSwapRoute(tokenIn, tokenOut, amount);
246
+ return {
247
+ ...this.baseQuoteFields(built.resolvedIn, built.resolvedOut, amount, built.expectedOutWei, built.route.hops, built.indexSource),
248
+ route: {
249
+ pools: built.route.pools,
250
+ },
251
+ };
252
+ }
253
+ catch (error) {
254
+ formatUniswapError(error, tokenIn, tokenOut);
255
+ }
256
+ }
257
+ /**
258
+ * Simulate gas for a Uniswap v4 swap from `from`, including Permit2 approvals when needed.
259
+ * @param from - Sender wallet address
260
+ * @param tokenIn - Input token symbol or address
261
+ * @param tokenOut - Output token symbol or address
262
+ * @param amount - Human-readable input amount
263
+ * @param params - Optional slippage, deadline, and recipient
264
+ */
265
+ async estimateSwap(from, tokenIn, tokenOut, amount, params) {
266
+ try {
267
+ const built = await this.buildSwapRoute(tokenIn, tokenOut, amount, params);
268
+ const recipient = params?.recipient ?? from;
269
+ const approvalSteps = await this.getApprovalSteps(built.client, from, built.inputToken, built.resolvedIn.symbol, built.amountInWei, built.deadline);
270
+ const swapTx = this.buildUniversalRouterCalldata(built, recipient);
271
+ const taggedSwapData = taggedCalldata(swapTx.data);
272
+ const approvalGasEntries = await Promise.all(approvalSteps.map(async (step) => this.estimateCallGas(built.client, from, step.to, step.data)));
273
+ let swapGas;
274
+ let swapGasEstimated = true;
275
+ try {
276
+ swapGas =
277
+ built.inputToken !== "native" && approvalSteps.length > 0
278
+ ? await this.estimateSwapGasWithAllowance(built.client, from, swapTx.to, taggedSwapData, built.inputToken, built.amountInWei)
279
+ : await this.estimateCallGas(built.client, from, swapTx.to, taggedSwapData);
280
+ }
281
+ catch {
282
+ swapGasEstimated = false;
283
+ }
284
+ return {
285
+ ...this.baseQuoteFields(built.resolvedIn, built.resolvedOut, amount, built.expectedOutWei, built.route.hops, built.indexSource),
286
+ from,
287
+ recipient,
288
+ amountOutMin: formatUnits(built.amountOutMin, built.resolvedOut.decimals),
289
+ approvalStepsNeeded: approvalSteps.length,
290
+ approvalGas: approvalGasEntries,
291
+ swapGas,
292
+ swapGasEstimated,
293
+ slippageTolerance: built.slippageTolerance,
294
+ deadline: built.deadline.toString(),
295
+ deadlineMinutes: built.deadlineMinutes,
296
+ };
297
+ }
298
+ catch (error) {
299
+ formatUniswapError(error, tokenIn, tokenOut);
300
+ }
301
+ }
302
+ /**
303
+ * Build unsigned Uniswap v4 steps (ERC-20 approve → Permit2 approve → swap when needed).
304
+ * @param from - Sender wallet address
305
+ * @param tokenIn - Input token symbol or address
306
+ * @param tokenOut - Output token symbol or address
307
+ * @param amount - Human-readable input amount
308
+ * @param params - Optional slippage, deadline, and recipient
309
+ * @returns 1–3 step `SerializedPreparedFlow` for sequential wallet signing
310
+ */
311
+ async prepareSwap(from, tokenIn, tokenOut, amount, params) {
312
+ try {
313
+ const built = await this.buildSwapRoute(tokenIn, tokenOut, amount, params);
314
+ const recipient = params?.recipient ?? from;
315
+ const displayIn = trimDisplayDecimals(amount);
316
+ const displayOut = trimDisplayDecimals(formatUnits(built.expectedOutWei, built.resolvedOut.decimals));
317
+ const approvalSteps = await this.getApprovalSteps(built.client, from, built.inputToken, built.resolvedIn.symbol, built.amountInWei, built.deadline);
318
+ const swapTx = this.buildUniversalRouterCalldata(built, recipient);
319
+ const steps = [
320
+ ...approvalSteps,
321
+ {
322
+ kind: "contract",
323
+ to: swapTx.to,
324
+ data: taggedCalldata(swapTx.data),
325
+ value: swapTx.value.toString(),
326
+ description: `Swap ${displayIn} ${built.resolvedIn.symbol} → ~${displayOut} ${built.resolvedOut.symbol} via Uniswap v4`,
327
+ },
328
+ ];
329
+ const flow = {
330
+ network: "mainnet",
331
+ from,
332
+ summary: `Uniswap v4: ${displayIn} ${built.resolvedIn.symbol} → ${displayOut} ${built.resolvedOut.symbol}${recipient !== from ? ` (recipient ${recipient})` : ""}`,
333
+ steps,
334
+ };
335
+ return serializePreparedFlow(flow);
336
+ }
337
+ catch (error) {
338
+ formatUniswapError(error, tokenIn, tokenOut);
339
+ }
340
+ }
341
+ }
342
+ //# sourceMappingURL=uniswap.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswap.service.js","sourceRoot":"","sources":["../../src/services/uniswap.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andrewkimjoseph/celina-sdk",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "Celina SDK — Celo mainnet reads and unsigned transaction preparation for frontend apps.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -45,6 +45,7 @@
45
45
  "viem",
46
46
  "mento",
47
47
  "aave",
48
+ "uniswap",
48
49
  "sdk"
49
50
  ],
50
51
  "author": "Andrew Kim Joseph",
@@ -59,6 +60,9 @@
59
60
  "homepage": "https://andrewkimjoseph.gitbook.io/celina-sdk",
60
61
  "dependencies": {
61
62
  "@mento-protocol/mento-sdk": "^3.2.8",
63
+ "@uniswap/sdk-core": "^7.16.1",
64
+ "@uniswap/universal-router-sdk": "^5.5.1",
65
+ "@uniswap/v4-sdk": "^2.2.1",
62
66
  "viem": "^2.39.3"
63
67
  },
64
68
  "devDependencies": {