@grimoirelabs/venues 0.1.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 (62) hide show
  1. package/README.md +45 -0
  2. package/dist/aave-v3.d.ts +16 -0
  3. package/dist/aave-v3.d.ts.map +1 -0
  4. package/dist/aave-v3.js +272 -0
  5. package/dist/aave-v3.js.map +1 -0
  6. package/dist/across.d.ts +12 -0
  7. package/dist/across.d.ts.map +1 -0
  8. package/dist/across.js +154 -0
  9. package/dist/across.js.map +1 -0
  10. package/dist/cli/aave.d.ts +3 -0
  11. package/dist/cli/aave.d.ts.map +1 -0
  12. package/dist/cli/aave.js +81 -0
  13. package/dist/cli/aave.js.map +1 -0
  14. package/dist/cli/hyperliquid.d.ts +3 -0
  15. package/dist/cli/hyperliquid.d.ts.map +1 -0
  16. package/dist/cli/hyperliquid.js +72 -0
  17. package/dist/cli/hyperliquid.js.map +1 -0
  18. package/dist/cli/morpho-blue.d.ts +3 -0
  19. package/dist/cli/morpho-blue.d.ts.map +1 -0
  20. package/dist/cli/morpho-blue.js +34 -0
  21. package/dist/cli/morpho-blue.js.map +1 -0
  22. package/dist/cli/uniswap.d.ts +3 -0
  23. package/dist/cli/uniswap.d.ts.map +1 -0
  24. package/dist/cli/uniswap.js +37 -0
  25. package/dist/cli/uniswap.js.map +1 -0
  26. package/dist/cli/utils.d.ts +10 -0
  27. package/dist/cli/utils.d.ts.map +1 -0
  28. package/dist/cli/utils.js +85 -0
  29. package/dist/cli/utils.js.map +1 -0
  30. package/dist/compound-v3.d.ts +3 -0
  31. package/dist/compound-v3.d.ts.map +1 -0
  32. package/dist/compound-v3.js +12 -0
  33. package/dist/compound-v3.js.map +1 -0
  34. package/dist/erc20.d.ts +12 -0
  35. package/dist/erc20.d.ts.map +1 -0
  36. package/dist/erc20.js +49 -0
  37. package/dist/erc20.js.map +1 -0
  38. package/dist/hyperliquid.d.ts +11 -0
  39. package/dist/hyperliquid.d.ts.map +1 -0
  40. package/dist/hyperliquid.js +118 -0
  41. package/dist/hyperliquid.js.map +1 -0
  42. package/dist/index.d.ts +10 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +16 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/morpho-blue.d.ts +15 -0
  47. package/dist/morpho-blue.d.ts.map +1 -0
  48. package/dist/morpho-blue.js +176 -0
  49. package/dist/morpho-blue.js.map +1 -0
  50. package/dist/types.d.ts +2 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +2 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/uniswap-v3.d.ts +16 -0
  55. package/dist/uniswap-v3.d.ts.map +1 -0
  56. package/dist/uniswap-v3.js +287 -0
  57. package/dist/uniswap-v3.js.map +1 -0
  58. package/dist/uniswap-v4.d.ts +15 -0
  59. package/dist/uniswap-v4.d.ts.map +1 -0
  60. package/dist/uniswap-v4.js +535 -0
  61. package/dist/uniswap-v4.js.map +1 -0
  62. package/package.json +34 -0
@@ -0,0 +1,535 @@
1
+ import { createRequire } from "node:module";
2
+ import { encodeAbiParameters, encodeFunctionData, parseAbi } from "viem";
3
+ // ─── Constants ────────────────────────────────────────────────────────────────
4
+ const NATIVE_ETH = "0x0000000000000000000000000000000000000000";
5
+ const ZERO_HOOKS = "0x0000000000000000000000000000000000000000";
6
+ /** Universal Router maps this to msg.sender */
7
+ const MSG_SENDER = "0x0000000000000000000000000000000000000001";
8
+ const MAX_UINT160 = (1n << 160n) - 1n;
9
+ const MAX_UINT256 = (1n << 256n) - 1n;
10
+ /** Universal Router v2 addresses (V4-capable) */
11
+ export const DEFAULT_ROUTERS = {
12
+ 1: "0x66a9893cc07d91d95644aedd05d03f95e1dba8af",
13
+ 10: "0x851116d9223fabed8e56c0e6b8ad0c31d98b3507",
14
+ 137: "0x1095692a6237d83c6a72f3f5efedb9a670c49223",
15
+ 8453: "0x6ff5693b99212da76ad316178a184ab56d299b43",
16
+ 42161: "0xa51afafe0263b40edaef0df8781ea9aa03e381a3",
17
+ };
18
+ /** V4 Quoter addresses */
19
+ const DEFAULT_QUOTERS = {
20
+ 1: "0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203",
21
+ 8453: "0x0d5e0f971ed27fbff6c2837bf31316121532048d",
22
+ };
23
+ /** Permit2 (canonical across all chains) */
24
+ const PERMIT2 = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
25
+ // ─── Universal Router Commands ────────────────────────────────────────────────
26
+ const Commands = {
27
+ V4_SWAP: 0x10,
28
+ SWEEP: 0x04,
29
+ };
30
+ /** V4 Action byte values */
31
+ const Actions = {
32
+ SWAP_EXACT_IN_SINGLE: 0x06,
33
+ SWAP_EXACT_OUT_SINGLE: 0x08,
34
+ SETTLE_ALL: 0x0c,
35
+ TAKE_ALL: 0x0f,
36
+ };
37
+ // ─── ABIs ─────────────────────────────────────────────────────────────────────
38
+ const UNIVERSAL_ROUTER_ABI = parseAbi([
39
+ "function execute(bytes commands, bytes[] inputs, uint256 deadline) payable",
40
+ ]);
41
+ const ERC20_ABI = parseAbi([
42
+ "function approve(address spender, uint256 amount) returns (bool)",
43
+ "function allowance(address owner, address spender) view returns (uint256)",
44
+ ]);
45
+ const PERMIT2_ABI = parseAbi([
46
+ "function approve(address token, address spender, uint160 amount, uint48 expiration)",
47
+ "function allowance(address owner, address token, address spender) view returns (uint160 amount, uint48 expiration, uint48 nonce)",
48
+ ]);
49
+ const require = createRequire(import.meta.url);
50
+ const tokenList = require("@uniswap/default-token-list");
51
+ /** JSON ABI for Quoter (nested struct requires explicit tuple definitions) */
52
+ const QUOTER_ABI = [
53
+ {
54
+ type: "function",
55
+ name: "quoteExactInputSingle",
56
+ inputs: [
57
+ {
58
+ type: "tuple",
59
+ name: "params",
60
+ components: [
61
+ {
62
+ type: "tuple",
63
+ name: "poolKey",
64
+ components: [
65
+ { type: "address", name: "currency0" },
66
+ { type: "address", name: "currency1" },
67
+ { type: "uint24", name: "fee" },
68
+ { type: "int24", name: "tickSpacing" },
69
+ { type: "address", name: "hooks" },
70
+ ],
71
+ },
72
+ { type: "bool", name: "zeroForOne" },
73
+ { type: "uint128", name: "exactAmount" },
74
+ { type: "bytes", name: "hookData" },
75
+ ],
76
+ },
77
+ ],
78
+ outputs: [
79
+ { type: "uint256", name: "amountOut" },
80
+ { type: "uint256", name: "gasEstimate" },
81
+ ],
82
+ stateMutability: "nonpayable",
83
+ },
84
+ {
85
+ type: "function",
86
+ name: "quoteExactOutputSingle",
87
+ inputs: [
88
+ {
89
+ type: "tuple",
90
+ name: "params",
91
+ components: [
92
+ {
93
+ type: "tuple",
94
+ name: "poolKey",
95
+ components: [
96
+ { type: "address", name: "currency0" },
97
+ { type: "address", name: "currency1" },
98
+ { type: "uint24", name: "fee" },
99
+ { type: "int24", name: "tickSpacing" },
100
+ { type: "address", name: "hooks" },
101
+ ],
102
+ },
103
+ { type: "bool", name: "zeroForOne" },
104
+ { type: "uint128", name: "exactAmount" },
105
+ { type: "bytes", name: "hookData" },
106
+ ],
107
+ },
108
+ ],
109
+ outputs: [
110
+ { type: "uint256", name: "amountIn" },
111
+ { type: "uint256", name: "gasEstimate" },
112
+ ],
113
+ stateMutability: "nonpayable",
114
+ },
115
+ ];
116
+ // ─── ABI Encoding Types ──────────────────────────────────────────────────────
117
+ const POOL_KEY_COMPONENTS = [
118
+ { type: "address", name: "currency0" },
119
+ { type: "address", name: "currency1" },
120
+ { type: "uint24", name: "fee" },
121
+ { type: "int24", name: "tickSpacing" },
122
+ { type: "address", name: "hooks" },
123
+ ];
124
+ const EXACT_INPUT_SINGLE_TYPE = [
125
+ {
126
+ type: "tuple",
127
+ components: [
128
+ { type: "tuple", name: "poolKey", components: POOL_KEY_COMPONENTS },
129
+ { type: "bool", name: "zeroForOne" },
130
+ { type: "uint128", name: "amountIn" },
131
+ { type: "uint128", name: "amountOutMinimum" },
132
+ { type: "bytes", name: "hookData" },
133
+ ],
134
+ },
135
+ ];
136
+ const EXACT_OUTPUT_SINGLE_TYPE = [
137
+ {
138
+ type: "tuple",
139
+ components: [
140
+ { type: "tuple", name: "poolKey", components: POOL_KEY_COMPONENTS },
141
+ { type: "bool", name: "zeroForOne" },
142
+ { type: "uint128", name: "amountOut" },
143
+ { type: "uint128", name: "amountInMaximum" },
144
+ { type: "bytes", name: "hookData" },
145
+ ],
146
+ },
147
+ ];
148
+ export function createUniswapV4Adapter(config = {}) {
149
+ const routers = config.routers ?? DEFAULT_ROUTERS;
150
+ const quoters = config.quoters ?? DEFAULT_QUOTERS;
151
+ return {
152
+ meta: {
153
+ name: "uniswap_v4",
154
+ supportedChains: Object.keys(routers).map((id) => Number.parseInt(id, 10)),
155
+ actions: ["swap"],
156
+ description: "Uniswap V4 swap adapter (Universal Router v2)",
157
+ },
158
+ async buildAction(action, ctx) {
159
+ if (action.type !== "swap") {
160
+ throw new Error(`Uniswap V4 adapter only supports swap actions (got ${action.type})`);
161
+ }
162
+ const router = routers[ctx.chainId];
163
+ if (!router) {
164
+ throw new Error(`No Universal Router configured for chain ${ctx.chainId}`);
165
+ }
166
+ const isNativeEthIn = action.assetIn?.toUpperCase() === "ETH";
167
+ const isNativeEthOut = action.assetOut?.toUpperCase() === "ETH";
168
+ // Resolve currency addresses (ETH = address(0) in V4)
169
+ const currencyIn = isNativeEthIn
170
+ ? NATIVE_ETH
171
+ : resolveTokenAddress(action.assetIn, ctx.chainId);
172
+ const currencyOut = isNativeEthOut
173
+ ? NATIVE_ETH
174
+ : resolveTokenAddress(action.assetOut, ctx.chainId);
175
+ // Build PoolKey (currencies must be numerically sorted)
176
+ const fee = config.defaultFee ?? 3000;
177
+ const tickSpacing = config.defaultTickSpacing ?? 60;
178
+ const [currency0, currency1] = sortCurrencies(currencyIn, currencyOut);
179
+ const zeroForOne = currency0.toLowerCase() === currencyIn.toLowerCase();
180
+ const poolKey = {
181
+ currency0,
182
+ currency1,
183
+ fee,
184
+ tickSpacing,
185
+ hooks: ZERO_HOOKS,
186
+ };
187
+ const amount = toBigInt(action.amount);
188
+ const isExactOut = action.mode === "exact_out";
189
+ const defaultSlippageBps = action.constraints?.maxSlippageBps ?? config.slippageBps ?? 50;
190
+ // Quote expected output/input via on-chain Quoter
191
+ const quoter = quoters[ctx.chainId];
192
+ let expectedAmount = amount; // fallback if no quoter
193
+ let hasQuote = false;
194
+ if (quoter) {
195
+ try {
196
+ const quoteParams = {
197
+ poolKey,
198
+ zeroForOne,
199
+ exactAmount: amount,
200
+ hookData: "0x",
201
+ };
202
+ if (isExactOut) {
203
+ const result = await ctx.provider.readContract({
204
+ address: quoter,
205
+ abi: QUOTER_ABI,
206
+ functionName: "quoteExactOutputSingle",
207
+ args: [quoteParams],
208
+ });
209
+ expectedAmount = result[0]; // amountIn needed
210
+ }
211
+ else {
212
+ const result = await ctx.provider.readContract({
213
+ address: quoter,
214
+ abi: QUOTER_ABI,
215
+ functionName: "quoteExactInputSingle",
216
+ args: [quoteParams],
217
+ });
218
+ expectedAmount = result[0]; // amountOut expected
219
+ }
220
+ hasQuote = true;
221
+ }
222
+ catch (err) {
223
+ const msg = err instanceof Error ? err.message : String(err);
224
+ throw new Error(`Failed to quote ${action.assetIn}/${action.assetOut} on V4 ` +
225
+ `(fee=${fee}, tickSpacing=${tickSpacing}): ${msg}`);
226
+ }
227
+ }
228
+ const explicitMinOut = action.constraints?.minOutput;
229
+ const explicitMaxIn = action.constraints?.maxInput;
230
+ let slippageBps = defaultSlippageBps;
231
+ if (!isExactOut && explicitMinOut !== undefined && hasQuote) {
232
+ slippageBps = computeSlippageBpsFromMinOut(expectedAmount, explicitMinOut);
233
+ }
234
+ else if (isExactOut && explicitMaxIn !== undefined && hasQuote) {
235
+ slippageBps = computeSlippageBpsFromMaxIn(expectedAmount, explicitMaxIn);
236
+ }
237
+ // Calculate amounts with slippage
238
+ let amountOutMinimum;
239
+ let settleAmount;
240
+ if (isExactOut) {
241
+ amountOutMinimum = amount;
242
+ if (explicitMaxIn !== undefined) {
243
+ if (hasQuote && explicitMaxIn < expectedAmount) {
244
+ throw new Error("max_input is below expected input");
245
+ }
246
+ settleAmount = explicitMaxIn;
247
+ }
248
+ else {
249
+ settleAmount = expectedAmount + (expectedAmount * BigInt(slippageBps)) / 10000n;
250
+ }
251
+ }
252
+ else {
253
+ if (explicitMinOut !== undefined) {
254
+ if (hasQuote && explicitMinOut > expectedAmount) {
255
+ throw new Error("min_output exceeds expected output");
256
+ }
257
+ amountOutMinimum = explicitMinOut;
258
+ }
259
+ else {
260
+ amountOutMinimum = expectedAmount - (expectedAmount * BigInt(slippageBps)) / 10000n;
261
+ }
262
+ settleAmount = amount;
263
+ }
264
+ // Build the V4_SWAP encoded actions
265
+ const v4Input = encodeV4SwapInput({
266
+ poolKey,
267
+ zeroForOne,
268
+ amount,
269
+ amountOutMinimum,
270
+ settleAmount,
271
+ isExactOut,
272
+ currencyIn,
273
+ currencyOut,
274
+ });
275
+ // Build Universal Router commands + inputs
276
+ const deadline = Math.floor(Date.now() / 1000) + (config.deadlineSeconds ?? 1200);
277
+ let commands;
278
+ let inputs;
279
+ let txValue;
280
+ if (isExactOut && isNativeEthIn) {
281
+ // exact_out with native ETH: add SWEEP to refund excess
282
+ commands =
283
+ `0x${Commands.V4_SWAP.toString(16).padStart(2, "0")}${Commands.SWEEP.toString(16).padStart(2, "0")}`;
284
+ const sweepInput = encodeAbiParameters([{ type: "address" }, { type: "address" }, { type: "uint256" }], [NATIVE_ETH, MSG_SENDER, 0n]);
285
+ inputs = [v4Input, sweepInput];
286
+ txValue = settleAmount;
287
+ }
288
+ else {
289
+ // Single V4_SWAP command
290
+ commands = `0x${Commands.V4_SWAP.toString(16).padStart(2, "0")}`;
291
+ inputs = [v4Input];
292
+ txValue = isNativeEthIn ? settleAmount : 0n;
293
+ }
294
+ const calldata = encodeFunctionData({
295
+ abi: UNIVERSAL_ROUTER_ABI,
296
+ functionName: "execute",
297
+ args: [commands, inputs, BigInt(deadline)],
298
+ });
299
+ // Build pre-swap transactions (Permit2 approvals for ERC20 input)
300
+ const preTxs = [];
301
+ if (!isNativeEthIn) {
302
+ const approvalTxs = await buildPermit2Approvals({
303
+ ctx,
304
+ token: currencyIn,
305
+ router,
306
+ amount: settleAmount,
307
+ action,
308
+ });
309
+ preTxs.push(...approvalTxs);
310
+ }
311
+ // Build description
312
+ const shortAddr = (a) => `${a.slice(0, 6)}...${a.slice(-4)}`;
313
+ const descLines = [
314
+ `Uniswap V4 swap ${action.assetIn} → ${action.assetOut}`,
315
+ ` currencyIn: ${action.assetIn} (${shortAddr(currencyIn)})`,
316
+ ` currencyOut: ${action.assetOut} (${shortAddr(currencyOut)})`,
317
+ ` amount: ${amount.toString()} wei`,
318
+ ` expected: ~${expectedAmount.toString()} wei`,
319
+ ` min output: ${amountOutMinimum.toString()} wei (${slippageBps / 100}% slippage)`,
320
+ ...(isExactOut && explicitMaxIn !== undefined
321
+ ? [` max input: ${explicitMaxIn.toString()} wei`]
322
+ : []),
323
+ ` fee tier: ${fee / 10_000}%`,
324
+ ` tickSpacing: ${tickSpacing}`,
325
+ ` router: ${shortAddr(router)}`,
326
+ ].join("\n");
327
+ return [
328
+ ...preTxs,
329
+ {
330
+ tx: {
331
+ to: router,
332
+ data: calldata,
333
+ value: txValue,
334
+ },
335
+ description: descLines,
336
+ action,
337
+ },
338
+ ];
339
+ },
340
+ };
341
+ }
342
+ export const uniswapV4Adapter = createUniswapV4Adapter();
343
+ // ─── V4 Swap Encoding ────────────────────────────────────────────────────────
344
+ function computeSlippageBpsFromMinOut(expectedOut, minOut) {
345
+ if (expectedOut <= 0n) {
346
+ throw new Error("Cannot compute slippage from zero expected output");
347
+ }
348
+ if (minOut > expectedOut) {
349
+ throw new Error("min_output exceeds expected output");
350
+ }
351
+ const diff = expectedOut - minOut;
352
+ const bps = (diff * 10000n) / expectedOut;
353
+ return Number(bps);
354
+ }
355
+ function computeSlippageBpsFromMaxIn(expectedIn, maxIn) {
356
+ if (expectedIn <= 0n) {
357
+ throw new Error("Cannot compute slippage from zero expected input");
358
+ }
359
+ if (maxIn < expectedIn) {
360
+ throw new Error("max_input is below expected input");
361
+ }
362
+ const diff = maxIn - expectedIn;
363
+ const bps = (diff * 10000n) / expectedIn;
364
+ return Number(bps);
365
+ }
366
+ function encodeV4SwapInput(params) {
367
+ let actions;
368
+ let swapParams;
369
+ if (params.isExactOut) {
370
+ // SWAP_EXACT_OUT_SINGLE (0x08) + SETTLE_ALL (0x0c) + TAKE_ALL (0x0f)
371
+ actions =
372
+ `0x${Actions.SWAP_EXACT_OUT_SINGLE.toString(16).padStart(2, "0")}${Actions.SETTLE_ALL.toString(16).padStart(2, "0")}${Actions.TAKE_ALL.toString(16).padStart(2, "0")}`;
373
+ swapParams = encodeAbiParameters(EXACT_OUTPUT_SINGLE_TYPE, [
374
+ {
375
+ poolKey: params.poolKey,
376
+ zeroForOne: params.zeroForOne,
377
+ amountOut: params.amount,
378
+ amountInMaximum: params.settleAmount,
379
+ hookData: "0x",
380
+ },
381
+ ]);
382
+ }
383
+ else {
384
+ // SWAP_EXACT_IN_SINGLE (0x06) + SETTLE_ALL (0x0c) + TAKE_ALL (0x0f)
385
+ actions =
386
+ `0x${Actions.SWAP_EXACT_IN_SINGLE.toString(16).padStart(2, "0")}${Actions.SETTLE_ALL.toString(16).padStart(2, "0")}${Actions.TAKE_ALL.toString(16).padStart(2, "0")}`;
387
+ swapParams = encodeAbiParameters(EXACT_INPUT_SINGLE_TYPE, [
388
+ {
389
+ poolKey: params.poolKey,
390
+ zeroForOne: params.zeroForOne,
391
+ amountIn: params.amount,
392
+ amountOutMinimum: params.amountOutMinimum,
393
+ hookData: "0x",
394
+ },
395
+ ]);
396
+ }
397
+ // SETTLE_ALL: (currency, maxAmount) — pays what is owed for input
398
+ const settleParams = encodeAbiParameters([{ type: "address" }, { type: "uint256" }], [params.currencyIn, params.settleAmount]);
399
+ // TAKE_ALL: (currency, minAmount) — receives output tokens
400
+ const takeParams = encodeAbiParameters([{ type: "address" }, { type: "uint256" }], [params.currencyOut, params.amountOutMinimum]);
401
+ // V4_SWAP input: abi.encode(bytes actions, bytes[] params)
402
+ return encodeAbiParameters([{ type: "bytes" }, { type: "bytes[]" }], [actions, [swapParams, settleParams, takeParams]]);
403
+ }
404
+ // ─── Permit2 Approval Flow ──────────────────────────────────────────────────
405
+ async function buildPermit2Approvals(params) {
406
+ const txs = [];
407
+ const { ctx, token, router, amount, action } = params;
408
+ const client = ctx.provider.getClient?.();
409
+ const assetLabel = action.type === "swap" ? action.assetIn : "token";
410
+ // Step 1: ERC20 approve → Permit2
411
+ let needsErc20Approval = true;
412
+ if (client?.readContract) {
413
+ try {
414
+ const allowance = (await client.readContract({
415
+ address: token,
416
+ abi: ERC20_ABI,
417
+ functionName: "allowance",
418
+ args: [ctx.walletAddress, PERMIT2],
419
+ }));
420
+ needsErc20Approval = allowance < amount;
421
+ }
422
+ catch {
423
+ /* can't check — assume needed */
424
+ }
425
+ }
426
+ if (needsErc20Approval) {
427
+ txs.push({
428
+ tx: {
429
+ to: token,
430
+ data: encodeFunctionData({
431
+ abi: ERC20_ABI,
432
+ functionName: "approve",
433
+ args: [PERMIT2, MAX_UINT256],
434
+ }),
435
+ value: 0n,
436
+ },
437
+ description: `Approve ${assetLabel} for Permit2`,
438
+ action,
439
+ });
440
+ }
441
+ // Step 2: Permit2 approve → Universal Router
442
+ let needsPermit2Approval = true;
443
+ if (client?.readContract) {
444
+ try {
445
+ const result = (await client.readContract({
446
+ address: PERMIT2,
447
+ abi: PERMIT2_ABI,
448
+ functionName: "allowance",
449
+ args: [ctx.walletAddress, token, router],
450
+ })); // [amount, expiration, nonce]
451
+ const permit2Amount = result[0];
452
+ const expiration = Number(result[1]);
453
+ const now = Math.floor(Date.now() / 1000);
454
+ needsPermit2Approval = permit2Amount < amount || expiration <= now;
455
+ }
456
+ catch {
457
+ /* can't check — assume needed */
458
+ }
459
+ }
460
+ if (needsPermit2Approval) {
461
+ const futureExpiration = Math.floor(Date.now() / 1000) + 86400 * 30; // 30 days
462
+ txs.push({
463
+ tx: {
464
+ to: PERMIT2,
465
+ data: encodeFunctionData({
466
+ abi: PERMIT2_ABI,
467
+ functionName: "approve",
468
+ args: [token, router, MAX_UINT160, futureExpiration],
469
+ }),
470
+ value: 0n,
471
+ },
472
+ description: `Approve Universal Router on Permit2 for ${assetLabel}`,
473
+ action,
474
+ });
475
+ }
476
+ return txs;
477
+ }
478
+ // ─── Token Resolution ─────────────────────────────────────────────────────────
479
+ /** WETH addresses per chain */
480
+ const WETH_BY_CHAIN = {
481
+ 1: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
482
+ 10: "0x4200000000000000000000000000000000000006",
483
+ 137: "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619",
484
+ 8453: "0x4200000000000000000000000000000000000006",
485
+ 42161: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
486
+ };
487
+ /** Build a symbol+chain index from the Uniswap default token list */
488
+ const tokenIndex = new Map();
489
+ for (const t of tokenList.tokens) {
490
+ tokenIndex.set(`${t.symbol.toUpperCase()}:${t.chainId}`, {
491
+ address: t.address,
492
+ decimals: t.decimals,
493
+ });
494
+ }
495
+ function resolveTokenAddress(asset, chainId) {
496
+ if (asset.startsWith("0x") && asset.length === 42) {
497
+ return asset;
498
+ }
499
+ const symbol = asset.toUpperCase();
500
+ // WETH → ERC20 wrapped ether (not native ETH)
501
+ if (symbol === "WETH") {
502
+ const weth = WETH_BY_CHAIN[chainId];
503
+ if (!weth)
504
+ throw new Error(`No WETH address for chain ${chainId}`);
505
+ return weth;
506
+ }
507
+ const entry = tokenIndex.get(`${symbol}:${chainId}`);
508
+ if (entry)
509
+ return entry.address;
510
+ throw new Error(`Unknown asset: ${asset} on chain ${chainId}. Provide address directly.`);
511
+ }
512
+ function sortCurrencies(a, b) {
513
+ const aNum = BigInt(a);
514
+ const bNum = BigInt(b);
515
+ return aNum < bNum ? [a, b] : [b, a];
516
+ }
517
+ function toBigInt(amount) {
518
+ if (typeof amount === "bigint")
519
+ return amount;
520
+ if (typeof amount === "number")
521
+ return BigInt(Math.floor(amount));
522
+ if (typeof amount === "string")
523
+ return BigInt(amount);
524
+ if (isLiteralAmount(amount))
525
+ return BigInt(amount.value);
526
+ throw new Error("Unsupported amount type for swap");
527
+ }
528
+ function isLiteralAmount(value) {
529
+ return (typeof value === "object" &&
530
+ value !== null &&
531
+ "kind" in value &&
532
+ value.kind === "literal" &&
533
+ "value" in value);
534
+ }
535
+ //# sourceMappingURL=uniswap-v4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswap-v4.js","sourceRoot":"","sources":["../src/uniswap-v4.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@grimoirelabs/venues",
3
+ "version": "0.1.0",
4
+ "description": "Official Grimoire venue adapters",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": "./dist/index.js"
10
+ },
11
+ "bin": {
12
+ "grimoire-aave": "./dist/cli/aave.js",
13
+ "grimoire-uniswap": "./dist/cli/uniswap.js",
14
+ "grimoire-morpho-blue": "./dist/cli/morpho-blue.js",
15
+ "grimoire-hyperliquid": "./dist/cli/hyperliquid.js"
16
+ },
17
+ "scripts": {
18
+ "build": "tsc -p tsconfig.build.json"
19
+ },
20
+ "dependencies": {
21
+ "@aave/client": "^0.7.0",
22
+ "@across-protocol/app-sdk": "^0.4.4",
23
+ "@grimoirelabs/core": "0.1.0",
24
+ "@morpho-org/blue-sdk": "^2.0.0",
25
+ "@morpho-org/blue-sdk-viem": "^2.0.0",
26
+ "@nktkas/hyperliquid": "^0.30.3",
27
+ "@uniswap/default-token-list": "^16.11.0",
28
+ "@uniswap/sdk-core": "^4.0.10",
29
+ "@uniswap/v3-sdk": "^3.27.0",
30
+ "polymarket-us": "^0.1.1",
31
+ "viem": "^2.21.55"
32
+ },
33
+ "files": ["dist"]
34
+ }