@bananapus/nana-sdk-core 1.9.3 → 1.9.4

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.
@@ -4,6 +4,7 @@ import { applyJbDaoCashOutFee } from "../utils/fee.js";
4
4
  import { createHookMetadata, hookMetadataId } from "../utils/hook.js";
5
5
  import { NATIVE_TOKEN_CURRENCY_ID } from "./currency.js";
6
6
  import { v6Address } from "./types.js";
7
+ import { buildUniswapV4ExactInputSwapTx, quoteUniswapV4ExactInputSingle, uniswapV4SwapDirection, } from "./uniswapV4.js";
7
8
  /**
8
9
  * Build a `cashOutTokensOf(holder, projectId, cashOutCount, tokenToReclaim,
9
10
  * minTokensReclaimed, beneficiary, metadata)` transaction request for a v6 terminal.
@@ -210,6 +211,96 @@ export function buildBuybackCashOutMetadata({ hook, minimumSwapAmountOut, skip =
210
211
  const payload = encodeAbiParameters([{ type: "uint256" }, { type: "bool" }], [minimumSwapAmountOut, skip]);
211
212
  return createHookMetadata([hookMetadataId(hook, "cashOut")], [payload]);
212
213
  }
214
+ /**
215
+ * Pick the executable exit which guarantees the holder the most reclaim token.
216
+ *
217
+ * A direct pool sale can only spend claimed ERC-20s. Internal Juicebox credits
218
+ * stay on the terminal route until they are claimed. The direct route must beat
219
+ * the terminal's full expected output even after user slippage; an optimistic
220
+ * pool quote alone is never enough to displace a deterministic cash out.
221
+ */
222
+ export function chooseBestCashOutRoute({ cashOut, directSwapQuote, directSwapPoolKey, directSwapZeroForOne, spendableProjectTokenCount = 0n, cashOutCount, slippageBps = DEFAULT_CASH_OUT_SLIPPAGE_BPS, }) {
223
+ const cashOutCandidate = {
224
+ kind: "cash-out",
225
+ expectedReturn: cashOut.expectedReturn,
226
+ minimumReturn: cashOut.minimumReturn,
227
+ cashOut,
228
+ };
229
+ if (!directSwapQuote ||
230
+ directSwapQuote <= 0n ||
231
+ !directSwapPoolKey ||
232
+ directSwapZeroForOne === undefined ||
233
+ cashOutCount <= 0n ||
234
+ spendableProjectTokenCount < cashOutCount) {
235
+ return cashOutCandidate;
236
+ }
237
+ const minimumReturn = slippageFloor(directSwapQuote, slippageBps);
238
+ if (minimumReturn <= cashOut.expectedReturn)
239
+ return cashOutCandidate;
240
+ return {
241
+ kind: "direct-swap",
242
+ expectedReturn: directSwapQuote,
243
+ minimumReturn,
244
+ cashOut,
245
+ poolKey: directSwapPoolKey,
246
+ zeroForOne: directSwapZeroForOne,
247
+ };
248
+ }
249
+ /** Pool fee/impact already reflected by the buyback hook's executable quote. */
250
+ export function cashOutPoolBufferBps(route) {
251
+ const buyback = route?.route === "amm" ? route.buyback : null;
252
+ if (!buyback || buyback.rawSwapQuote <= 0n)
253
+ return null;
254
+ const executableQuote = buyback.minimumSwapAmountOut > buyback.rawSwapQuote
255
+ ? buyback.rawSwapQuote
256
+ : buyback.minimumSwapAmountOut;
257
+ return (((buyback.rawSwapQuote - executableQuote) * MAX_BPS +
258
+ buyback.rawSwapQuote -
259
+ 1n) /
260
+ buyback.rawSwapQuote);
261
+ }
262
+ const CASH_OUT_EXECUTION_ERRORS = [
263
+ {
264
+ code: "BUYBACK_SLIPPAGE_EXCEEDED",
265
+ selector: "0xe2d708a9",
266
+ matchers: ["0xe2d708a9", "jbbuybackhook_specifiedslippageexceeded"],
267
+ },
268
+ {
269
+ code: "TERMINAL_UNDER_MIN",
270
+ selector: "0x6b2bb382",
271
+ matchers: ["0x6b2bb382", "jbmultiterminal_undermin"],
272
+ },
273
+ ];
274
+ function collectCashOutErrorText(value, seen = new Set(), depth = 0) {
275
+ if (depth > 8 || value === null || value === undefined || seen.has(value)) {
276
+ return [];
277
+ }
278
+ if (typeof value === "string")
279
+ return [value];
280
+ if (typeof value !== "object")
281
+ return [];
282
+ seen.add(value);
283
+ const record = value;
284
+ return [
285
+ record.shortMessage,
286
+ record.message,
287
+ record.details,
288
+ record.errorName,
289
+ record.signature,
290
+ record.raw,
291
+ record.data,
292
+ record.cause,
293
+ record.error,
294
+ ].flatMap((item) => collectCashOutErrorText(item, seen, depth + 1));
295
+ }
296
+ /** Classify known cash-out errors through viem/wallet nested error shapes. */
297
+ export function classifyCashOutExecutionError(error) {
298
+ const text = collectCashOutErrorText(error).join(" | ").toLowerCase();
299
+ if (!text)
300
+ return null;
301
+ const matched = CASH_OUT_EXECUTION_ERRORS.find(({ matchers }) => matchers.some((matcher) => text.includes(matcher)));
302
+ return matched ? { code: matched.code, selector: matched.selector } : null;
303
+ }
213
304
  /**
214
305
  * Interpret a hook-aware `previewCashOutFrom` result and prepare a
215
306
  * slippage-protected route.
@@ -271,14 +362,20 @@ export function resolveCashOutRoute({ reclaimAmount, cashOutTaxRate, hookSpecifi
271
362
  };
272
363
  if (!specification || specification.noop || !buyback)
273
364
  return treasuryRoute;
274
- // The pool route won the preview. Re-previews with an explicit metadata
275
- // minimum report that already-protected floor and no raw quote — preserve
276
- // it instead of discounting a second time.
365
+ // The raw swap quote is an optimistic oracle quote used for display and
366
+ // route comparison. The hook's minimumSwapAmountOut is the executable pool
367
+ // quote after fee, liquidity, and price-impact constraints. User slippage
368
+ // must be applied to that executable value; applying it to rawSwapQuote can
369
+ // create a minimum the pool cannot satisfy.
277
370
  const quote = buyback.rawSwapQuote > 0n
278
371
  ? buyback.rawSwapQuote
279
372
  : buyback.minimumSwapAmountOut;
373
+ const executableQuote = buyback.rawSwapQuote > 0n &&
374
+ buyback.minimumSwapAmountOut > buyback.rawSwapQuote
375
+ ? buyback.rawSwapQuote
376
+ : buyback.minimumSwapAmountOut;
280
377
  const minimumReturn = buyback.rawSwapQuote > 0n && !buyback.hasUserSpecifiedMinimumSwapAmountOut
281
- ? slippageFloor(quote, slippageBps)
378
+ ? slippageFloor(executableQuote, slippageBps)
282
379
  : buyback.minimumSwapAmountOut;
283
380
  // An explicit metadata minimum at or below the direct net routes execution
284
381
  // back to the terminal path anyway; take the deterministic treasury route.
@@ -300,41 +397,22 @@ export function resolveCashOutRoute({ reclaimAmount, cashOutTaxRate, hookSpecifi
300
397
  buyback,
301
398
  };
302
399
  }
303
- /**
304
- * Quote a cash out through `JBMultiTerminal.previewCashOutFrom` — the
305
- * hook-aware simulation of the REAL cash-out path (data hook, buyback
306
- * routing, cross-chain terms) — and prepare a slippage-protected route.
307
- *
308
- * Prefer this over {@link getCashOutQuote} for building transactions:
309
- * `currentReclaimableSurplusOf` skips the data hook entirely, so its result
310
- * can diverge from what `cashOutTokensOf` pays and is unsafe to use as a
311
- * minimum.
312
- *
313
- * @param client A viem public client on the given chain.
314
- * @param args.chainId The chain to quote on.
315
- * @param args.projectId The project's id.
316
- * @param args.holder The address whose tokens would be cashed out.
317
- * @param args.cashOutCount The number of project tokens to cash out.
318
- * @param args.tokenToReclaim The terminal token to reclaim.
319
- * @param args.beneficiary The reclaim beneficiary. Defaults to the holder.
320
- * @param args.terminal The terminal to quote against. Defaults to the chain's
321
- * canonical `JBMultiTerminal`.
322
- * @param args.buybackHookAddress The buyback hook whose specification may win
323
- * the pool route. Defaults to the chain's canonical `JBBuybackHook`; pass it
324
- * explicitly for a project whose `JBBuybackHookRegistry` entry points at a
325
- * custom hook. On a chain with no `JBBuybackHook` deployment, specifications
326
- * are treated as non-buyback and the treasury route is returned.
327
- * @param args.beneficiaryIsFeeless Whether the beneficiary is feeless.
328
- * Defaults to false.
329
- * @param args.slippageBps Tolerance for quote-to-inclusion drift. Defaults to
330
- * {@link DEFAULT_CASH_OUT_SLIPPAGE_BPS}.
331
- * @returns The protected route (see {@link CashOutRoute}).
332
- */
333
- export async function getHookAwareCashOutQuote(client, { chainId, projectId, holder, cashOutCount, tokenToReclaim, beneficiary, terminal, buybackHookAddress, beneficiaryIsFeeless = false, slippageBps = DEFAULT_CASH_OUT_SLIPPAGE_BPS, }) {
334
- const terminalAddress = terminal ?? v6Address("JBMultiTerminal", chainId);
335
- const buybackHook = buybackHookAddress ?? optionalV6Address("JBBuybackHook", chainId);
336
- const [, reclaimAmount, cashOutTaxRate, hookSpecifications] = await client.readContract({
337
- address: terminalAddress,
400
+ function rulesetIdOf(ruleset) {
401
+ const id = ruleset && typeof ruleset === "object" && "id" in ruleset
402
+ ? ruleset.id
403
+ : Array.isArray(ruleset)
404
+ ? ruleset[0]
405
+ : null;
406
+ try {
407
+ return id === null || id === undefined ? null : BigInt(id);
408
+ }
409
+ catch {
410
+ return null;
411
+ }
412
+ }
413
+ async function readCashOutPreviewSnapshot(client, { terminal, holder, projectId, cashOutCount, tokenToReclaim, beneficiary, metadata, }) {
414
+ const [ruleset, reclaimAmount, cashOutTaxRate, hookSpecifications] = await client.readContract({
415
+ address: terminal,
338
416
  abi: jbMultiTerminalAbi,
339
417
  functionName: "previewCashOutFrom",
340
418
  args: [
@@ -342,29 +420,219 @@ export async function getHookAwareCashOutQuote(client, { chainId, projectId, hol
342
420
  projectId,
343
421
  cashOutCount,
344
422
  tokenToReclaim,
345
- beneficiary ?? holder,
346
- "0x",
423
+ beneficiary,
424
+ metadata,
347
425
  ],
348
426
  });
349
- // The fee-free surplus counter only matters on zero-tax rulesets.
350
- const feeFreeSurplus = cashOutTaxRate === 0n
427
+ return {
428
+ rulesetId: rulesetIdOf(ruleset),
429
+ reclaimAmount,
430
+ cashOutTaxRate,
431
+ hookSpecifications,
432
+ };
433
+ }
434
+ async function resolveCashOutPreviewSnapshot(client, preview, { terminal, projectId, tokenToReclaim, buybackHookAddress, beneficiaryIsFeeless, slippageBps, }) {
435
+ const feeFreeSurplus = preview.cashOutTaxRate === 0n
351
436
  ? await client.readContract({
352
- address: terminalAddress,
437
+ address: terminal,
353
438
  abi: jbMultiTerminalAbi,
354
439
  functionName: "feeFreeSurplusOf",
355
440
  args: [projectId, tokenToReclaim],
356
441
  })
357
442
  : 0n;
358
443
  return resolveCashOutRoute({
359
- reclaimAmount,
360
- cashOutTaxRate,
361
- hookSpecifications,
362
- buybackHookAddress: buybackHook,
444
+ reclaimAmount: preview.reclaimAmount,
445
+ cashOutTaxRate: preview.cashOutTaxRate,
446
+ hookSpecifications: preview.hookSpecifications,
447
+ buybackHookAddress,
363
448
  beneficiaryIsFeeless,
364
449
  feeFreeSurplus,
365
450
  slippageBps,
366
451
  });
367
452
  }
453
+ export async function getHookAwareCashOutQuote(client, { chainId, projectId, holder, cashOutCount, tokenToReclaim, beneficiary = holder, terminal, buybackHookAddress, beneficiaryIsFeeless = false, slippageBps = DEFAULT_CASH_OUT_SLIPPAGE_BPS, }) {
454
+ const terminalAddress = terminal ?? v6Address("JBMultiTerminal", chainId);
455
+ const buybackHook = buybackHookAddress ?? optionalV6Address("JBBuybackHook", chainId);
456
+ const preview = await readCashOutPreviewSnapshot(client, {
457
+ terminal: terminalAddress,
458
+ holder,
459
+ projectId,
460
+ cashOutCount,
461
+ tokenToReclaim,
462
+ beneficiary,
463
+ metadata: "0x",
464
+ });
465
+ return resolveCashOutPreviewSnapshot(client, preview, {
466
+ terminal: terminalAddress,
467
+ projectId,
468
+ tokenToReclaim,
469
+ buybackHookAddress: buybackHook,
470
+ beneficiaryIsFeeless,
471
+ slippageBps,
472
+ });
473
+ }
474
+ /**
475
+ * Quote the best user exit across the terminal and a directly spendable pool.
476
+ *
477
+ * `previewCashOutFrom` remains the source of truth for terminal and buyback-hook
478
+ * settlement. When a matching pool and sufficient claimed ERC-20 balance are
479
+ * supplied, the V4 Quoter is read as well and a direct swap wins only when its
480
+ * slippage-protected minimum exceeds the terminal route's full expected output.
481
+ */
482
+ export async function getBestCashOutRoute(client, args) {
483
+ const cashOut = await getHookAwareCashOutQuote(client, args);
484
+ const directSwap = args.directSwap;
485
+ if (!directSwap ||
486
+ directSwap.spendableProjectTokenCount < args.cashOutCount ||
487
+ args.cashOutCount <= 0n) {
488
+ return chooseBestCashOutRoute({
489
+ cashOut,
490
+ cashOutCount: args.cashOutCount,
491
+ slippageBps: args.slippageBps,
492
+ });
493
+ }
494
+ const zeroForOne = uniswapV4SwapDirection({
495
+ poolKey: directSwap.poolKey,
496
+ tokenIn: directSwap.projectToken,
497
+ tokenOut: args.tokenToReclaim,
498
+ });
499
+ if (zeroForOne === null) {
500
+ return chooseBestCashOutRoute({
501
+ cashOut,
502
+ cashOutCount: args.cashOutCount,
503
+ slippageBps: args.slippageBps,
504
+ });
505
+ }
506
+ let directSwapQuote;
507
+ try {
508
+ directSwapQuote = await quoteUniswapV4ExactInputSingle(client, {
509
+ chainId: args.chainId,
510
+ poolKey: directSwap.poolKey,
511
+ zeroForOne,
512
+ amountIn: args.cashOutCount,
513
+ });
514
+ }
515
+ catch {
516
+ // The direct pool is an optional optimization. A missing/reverting quoter
517
+ // must not make an otherwise valid terminal cash out unavailable.
518
+ return chooseBestCashOutRoute({
519
+ cashOut,
520
+ cashOutCount: args.cashOutCount,
521
+ slippageBps: args.slippageBps,
522
+ });
523
+ }
524
+ return chooseBestCashOutRoute({
525
+ cashOut,
526
+ directSwapQuote,
527
+ directSwapPoolKey: directSwap.poolKey,
528
+ directSwapZeroForOne: zeroForOne,
529
+ spendableProjectTokenCount: directSwap.spendableProjectTokenCount,
530
+ cashOutCount: args.cashOutCount,
531
+ slippageBps: args.slippageBps,
532
+ });
533
+ }
534
+ export class CashOutRouteChangedError extends Error {
535
+ constructor() {
536
+ super("The cash-out route changed while its executable minimum was being locked.");
537
+ this.code = "CASH_OUT_ROUTE_CHANGED";
538
+ this.name = "CashOutRouteChangedError";
539
+ }
540
+ }
541
+ /**
542
+ * Prepare the exact hook-aware cash-out request a wallet should submit.
543
+ *
544
+ * Pool routes are re-previewed with their slippage metadata before the request
545
+ * is returned. This proves the executable minimum still selects the same route
546
+ * and avoids clients independently composing a stale quote and transaction.
547
+ */
548
+ export async function prepareHookAwareCashOut(client, { chainId, projectId, holder, cashOutCount, tokenToReclaim, beneficiary = holder, terminal, buybackHookAddress, beneficiaryIsFeeless = false, slippageBps = DEFAULT_CASH_OUT_SLIPPAGE_BPS, }) {
549
+ const terminalAddress = terminal ?? v6Address("JBMultiTerminal", chainId);
550
+ const buybackHook = buybackHookAddress ?? optionalV6Address("JBBuybackHook", chainId);
551
+ const resolvePreview = (preview) => resolveCashOutPreviewSnapshot(client, preview, {
552
+ terminal: terminalAddress,
553
+ projectId,
554
+ tokenToReclaim,
555
+ buybackHookAddress: buybackHook,
556
+ beneficiaryIsFeeless,
557
+ slippageBps,
558
+ });
559
+ const preview = await readCashOutPreviewSnapshot(client, {
560
+ terminal: terminalAddress,
561
+ holder,
562
+ projectId,
563
+ cashOutCount,
564
+ tokenToReclaim,
565
+ beneficiary,
566
+ metadata: "0x",
567
+ });
568
+ const route = await resolvePreview(preview);
569
+ let lockedPreview = null;
570
+ if (route.route === "amm") {
571
+ lockedPreview = await readCashOutPreviewSnapshot(client, {
572
+ terminal: terminalAddress,
573
+ holder,
574
+ projectId,
575
+ cashOutCount,
576
+ tokenToReclaim,
577
+ beneficiary,
578
+ metadata: route.metadata,
579
+ });
580
+ const lockedRoute = await resolvePreview(lockedPreview);
581
+ if ((preview.rulesetId !== null &&
582
+ lockedPreview.rulesetId !== null &&
583
+ lockedPreview.rulesetId !== preview.rulesetId) ||
584
+ lockedRoute.route !== "amm" ||
585
+ lockedRoute.minimumReturn !== route.minimumReturn ||
586
+ lockedRoute.metadata.toLowerCase() !== route.metadata.toLowerCase()) {
587
+ throw new CashOutRouteChangedError();
588
+ }
589
+ }
590
+ return {
591
+ route,
592
+ transaction: buildCashOutTx({
593
+ chainId,
594
+ terminal: terminalAddress,
595
+ holder,
596
+ projectId,
597
+ cashOutCount,
598
+ tokenToReclaim,
599
+ minTokensReclaimed: route.terminalMinimum,
600
+ beneficiary,
601
+ metadata: route.metadata,
602
+ }),
603
+ preview,
604
+ lockedPreview,
605
+ };
606
+ }
607
+ /**
608
+ * Freshly prepare the best executable cash-out or direct-swap transaction.
609
+ *
610
+ * A direct swap is freshly quoted and slippage-floored in the same operation
611
+ * which builds its Universal Router request. If it cannot safely beat the
612
+ * terminal, the terminal path is re-previewed and locked instead.
613
+ */
614
+ export async function prepareBestCashOut(client, args) {
615
+ const best = await getBestCashOutRoute(client, args);
616
+ if (best.kind === "direct-swap") {
617
+ return {
618
+ kind: "direct-swap",
619
+ route: best,
620
+ transaction: buildUniswapV4ExactInputSwapTx({
621
+ chainId: args.chainId,
622
+ poolKey: best.poolKey,
623
+ zeroForOne: best.zeroForOne,
624
+ amountIn: args.cashOutCount,
625
+ minimumAmountOut: best.minimumReturn,
626
+ recipient: args.beneficiary ?? args.holder,
627
+ deadline: args.directSwapDeadline,
628
+ }),
629
+ };
630
+ }
631
+ return {
632
+ kind: "cash-out",
633
+ ...(await prepareHookAwareCashOut(client, args)),
634
+ };
635
+ }
368
636
  /**
369
637
  * `v6Address`, but returning undefined instead of throwing on a chain the
370
638
  * contract isn't deployed to.
@@ -1 +1 @@
1
- {"version":3,"file":"cashOut.js","sourceRoot":"","sources":["../../../src/v6/cashOut.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,MAAM,CAAC;AACd,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAcvC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,YAAY,EACZ,cAAc,EACd,kBAAkB,GAAG,EAAE,EACvB,WAAW,EACX,QAAQ,GAAG,IAAI,GAWhB;IACC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,kBAAkB;QACvB,YAAY,EAAE,iBAAiB;QAC/B,IAAI,EAAE;YACJ,MAAM;YACN,SAAS;YACT,YAAY;YACZ,cAAc;YACd,kBAAkB;YAClB,WAAW;YACX,QAAQ;SACT;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,uBAAuB,CAAC,EACtC,gBAAgB,EAChB,QAAQ,GAIT;IACC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzE,OAAO,kBAAkB,CACvB,CAAC,cAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,EAC7C,CAAC,OAAO,CAAC,CACH,CAAC;AACX,CAAC;AAmBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,EACE,OAAO,EACP,SAAS,EACT,YAAY,EACZ,QAAQ,GAAG,GAAG,EACd,QAAQ,GAAG,MAAM,CAAC,wBAAwB,CAAC,GAO5C;IAED,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;QAC9C,OAAO,EAAE,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC;QAC9C,GAAG,EAAE,kBAAkB;QACvB,YAAY,EAAE,6BAA6B;QAC3C,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC5D,CAAC,CAAC;IAEH,OAAO;QACL,aAAa;QACb,qBAAqB,EAAE,oBAAoB,CAAC,aAAa,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAElD,MAAM,OAAO,GAAG,MAAO,CAAC;AAExB,SAAS,UAAU,CAAC,WAAmB;IACrC,IAAI,WAAW,GAAG,EAAE,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,cAAsB,6BAA6B;IAEnD,UAAU,CAAC,WAAW,CAAC,CAAC;IACxB,IAAI,MAAM,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,OAAO,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC;IAC3D,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,aAAa,EACb,cAAc,EACd,oBAAoB,GAAG,KAAK,EAC5B,cAAc,GAAG,EAAE,GAMpB;IACC,IAAI,aAAa,IAAI,EAAE,IAAI,oBAAoB;QAAE,OAAO,EAAE,CAAC;IAC3D,IAAI,cAAc,GAAG,EAAE;QAAE,OAAO,aAAa,GAAG,GAAG,CAAC;IACpD,MAAM,OAAO,GACX,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC;IAClE,OAAO,OAAO,GAAG,GAAG,CAAC;AACvB,CAAC;AAmBD,MAAM,yBAAyB,GAAG;IAChC,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,SAAS,EAAE;IACjD,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,EAAE;IAC/C,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,SAAS,EAAE;IACnD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;IACnC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE;IAC1C,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IACnC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE;IACzC,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,MAAM,EAAE;CACtD,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAa;IACpD,MAAM,CACJ,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,QAAQ,EACR,aAAa,EACb,MAAM,EACN,YAAY,EACZ,oCAAoC,EACrC,GAAG,mBAAmB,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;IAC7D,OAAO;QACL,oBAAoB;QACpB,kBAAkB;QAClB,sBAAsB;QACtB,QAAQ;QACR,aAAa;QACb,MAAM;QACN,YAAY;QACZ,oCAAoC;KACrC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,2BAA2B,CAAC,EAC1C,IAAI,EACJ,oBAAoB,EACpB,IAAI,GAAG,KAAK,GAKb;IACC,IAAI,oBAAoB,GAAG,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,OAAO,GAAG,mBAAmB,CACjC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EACvC,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAC7B,CAAC;IACF,OAAO,kBAAkB,CACvB,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EACjC,CAAC,OAAO,CAAC,CACH,CAAC;AACX,CAAC;AAwCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GAAG,KAAK,EAC5B,cAAc,GAAG,EAAE,EACnB,WAAW,GAAG,6BAA6B,GAS5C;IACC,UAAU,CAAC,WAAW,CAAC,CAAC;IACxB,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;QAC7C,aAAa;QACb,cAAc;QACd,oBAAoB;QACpB,cAAc;KACf,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,aAAa,GAAG,mBAAmB,CAAC;IAExD,MAAM,WAAW,GAAG,kBAAkB,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC;IAC9D,MAAM,aAAa,GACjB,CAAC,WAAW;QACV,kBAAkB,CAAC,IAAI,CACrB,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CACpE,CAAC;QACJ,IAAI,CAAC;IACP,MAAM,OAAO,GAAG,aAAa;QAC3B,CAAC,CAAC;YACE,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,GAAG,wBAAwB,CAAC,aAAa,CAAC,QAAQ,CAAC;SACpD;QACH,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,aAAa,GAAiB;QAClC,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,WAAW;QAC3B,aAAa,EAAE,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC;QACtD,eAAe,EAAE,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC;QACxD,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,aAAa;QAC5B,mBAAmB;QACnB,WAAW;QACX,OAAO;KACR,CAAC;IAEF,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,aAAa,CAAC;IAE3E,wEAAwE;IACxE,0EAA0E;IAC1E,2CAA2C;IAC3C,MAAM,KAAK,GACT,OAAO,CAAC,YAAY,GAAG,EAAE;QACvB,CAAC,CAAC,OAAO,CAAC,YAAY;QACtB,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC;IACnC,MAAM,aAAa,GACjB,OAAO,CAAC,YAAY,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,oCAAoC;QACxE,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC;IAEnC,2EAA2E;IAC3E,2EAA2E;IAC3E,IAAI,KAAK,IAAI,EAAE,IAAI,aAAa,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACnE,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,cAAc,EAAE,KAAK;QACrB,aAAa;QACb,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,2BAA2B,CAAC;YACpC,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,oBAAoB,EAAE,aAAa;SACpC,CAAC;QACF,aAAa,EAAE,aAAa;QAC5B,mBAAmB;QACnB,WAAW;QACX,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAoB,EACpB,EACE,OAAO,EACP,SAAS,EACT,MAAM,EACN,YAAY,EACZ,cAAc,EACd,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,oBAAoB,GAAG,KAAK,EAC5B,WAAW,GAAG,6BAA6B,GAY5C;IAED,MAAM,eAAe,GAAG,QAAQ,IAAI,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC1E,MAAM,WAAW,GACf,kBAAkB,IAAI,iBAAiB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,CAAC,GACzD,MAAM,MAAM,CAAC,YAAY,CAAC;QACxB,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,kBAAkB;QACvB,YAAY,EAAE,oBAAoB;QAClC,IAAI,EAAE;YACJ,MAAM;YACN,SAAS;YACT,YAAY;YACZ,cAAc;YACd,WAAW,IAAI,MAAM;YACrB,IAAI;SACL;KACF,CAAC,CAAC;IAEL,kEAAkE;IAClE,MAAM,cAAc,GAClB,cAAc,KAAK,EAAE;QACnB,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,eAAe;YACxB,GAAG,EAAE,kBAAkB;YACvB,YAAY,EAAE,kBAAkB;YAChC,IAAI,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC;SAClC,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,mBAAmB,CAAC;QACzB,aAAa;QACb,cAAc;QACd,kBAAkB;QAClB,kBAAkB,EAAE,WAAW;QAC/B,oBAAoB;QACpB,cAAc;QACd,WAAW;KACZ,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CACxB,QAAyC,EACzC,OAAkB;IAElB,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cashOut.js","sourceRoot":"","sources":["../../../src/v6/cashOut.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,19 @@ export interface UniswapV4PoolKey {
32
32
  tickSpacing: number;
33
33
  hooks: Address;
34
34
  }
35
+ /**
36
+ * Resolve the exact swap direction for a token pair, normalizing Juicebox's
37
+ * native-token sentinel to Uniswap V4's zero-address currency.
38
+ *
39
+ * Returns `null` unless both input and output match opposite sides of the pool.
40
+ * Clients should fail closed on `null` instead of inferring the output token
41
+ * from the input side alone.
42
+ */
43
+ export declare function uniswapV4SwapDirection({ poolKey, tokenIn, tokenOut, }: {
44
+ poolKey: UniswapV4PoolKey;
45
+ tokenIn: Address;
46
+ tokenOut: Address;
47
+ }): boolean | null;
35
48
  declare const UNIVERSAL_ROUTER_ABI: readonly [{
36
49
  readonly type: "function";
37
50
  readonly name: "execute";
@@ -125,6 +138,20 @@ export declare function uniswapV4SqrtPriceX96FromSlot0(slot0: Hex): bigint;
125
138
  * Juicebox project tokens use 18 decimals.
126
139
  */
127
140
  export declare function uniswapV4PriceFromSqrtPriceX96(sqrtPriceX96: bigint, pairIsCurrency0: boolean, pairTokenDecimals: number): number | null;
141
+ /** Human pair-token price at a Uniswap V4 tick, in either currency ordering. */
142
+ export declare function uniswapV4PriceAtTick(tick: number, pairIsCurrency0: boolean, pairTokenDecimals: number): number | null;
143
+ /** Inverse of {@link uniswapV4PriceAtTick}; returns a fractional raw tick. */
144
+ export declare function uniswapV4TickAtPrice(price: number, pairIsCurrency0: boolean, pairTokenDecimals: number): number | null;
145
+ /** Map two ticks to an order-independent human-price range. */
146
+ export declare function uniswapV4PriceRangeFromTicks(tickA: number, tickB: number, pairIsCurrency0: boolean, pairTokenDecimals: number): {
147
+ min: number;
148
+ max: number;
149
+ } | null;
150
+ /** Map two human prices to an order-independent raw-tick range. */
151
+ export declare function uniswapV4TickRangeFromPrices(priceA: number, priceB: number, pairIsCurrency0: boolean, pairTokenDecimals: number): {
152
+ lower: number;
153
+ upper: number;
154
+ } | null;
128
155
  /** Exact integer port of Uniswap V4 TickMath.getSqrtPriceAtTick. */
129
156
  export declare function uniswapV4SqrtPriceX96AtTick(tick: number): bigint;
130
157
  /** Currency amounts represented by liquidity at a current sqrt price. */
@@ -1 +1 @@
1
- {"version":3,"file":"uniswapV4.d.ts","sourceRoot":"","sources":["../../../src/v6/uniswapV4.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uniswapV4.d.ts","sourceRoot":"","sources":["../../../src/v6/uniswapV4.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { decodeFunctionResult, encodeAbiParameters, encodeFunctionData, keccak256, toEventSelector, zeroAddress, } from "viem";
2
+ import { NATIVE_TOKEN } from "../constants.js";
2
3
  /**
3
4
  * Canonical Uniswap V4 PoolManager deployments used by Juicebox v6.
4
5
  * Optimism Sepolia is intentionally absent: deploy-all skips the Uniswap stack
@@ -60,6 +61,30 @@ export function uniswapV4Deployment(chainId) {
60
61
  }
61
62
  export const UNISWAP_V4_Q96 = 1n << 96n;
62
63
  export const UNISWAP_V4_MAX_TICK = 887_272;
64
+ function normalizeUniswapV4Currency(token) {
65
+ return token.toLowerCase() === NATIVE_TOKEN.toLowerCase()
66
+ ? zeroAddress
67
+ : token.toLowerCase();
68
+ }
69
+ /**
70
+ * Resolve the exact swap direction for a token pair, normalizing Juicebox's
71
+ * native-token sentinel to Uniswap V4's zero-address currency.
72
+ *
73
+ * Returns `null` unless both input and output match opposite sides of the pool.
74
+ * Clients should fail closed on `null` instead of inferring the output token
75
+ * from the input side alone.
76
+ */
77
+ export function uniswapV4SwapDirection({ poolKey, tokenIn, tokenOut, }) {
78
+ const input = normalizeUniswapV4Currency(tokenIn);
79
+ const output = normalizeUniswapV4Currency(tokenOut);
80
+ const currency0 = poolKey.currency0.toLowerCase();
81
+ const currency1 = poolKey.currency1.toLowerCase();
82
+ if (input === currency0 && output === currency1)
83
+ return true;
84
+ if (input === currency1 && output === currency0)
85
+ return false;
86
+ return null;
87
+ }
63
88
  const V4_QUOTER_ABI = [
64
89
  {
65
90
  type: "function",
@@ -281,6 +306,42 @@ export function uniswapV4PriceFromSqrtPriceX96(sqrtPriceX96, pairIsCurrency0, pa
281
306
  const price = rawRatio * 10 ** (18 - pairTokenDecimals);
282
307
  return Number.isFinite(price) && price > 0 ? price : null;
283
308
  }
309
+ /** Human pair-token price at a Uniswap V4 tick, in either currency ordering. */
310
+ export function uniswapV4PriceAtTick(tick, pairIsCurrency0, pairTokenDecimals) {
311
+ if (!Number.isInteger(tick))
312
+ return null;
313
+ return uniswapV4PriceFromSqrtPriceX96(uniswapV4SqrtPriceX96AtTick(tick), pairIsCurrency0, pairTokenDecimals);
314
+ }
315
+ /** Inverse of {@link uniswapV4PriceAtTick}; returns a fractional raw tick. */
316
+ export function uniswapV4TickAtPrice(price, pairIsCurrency0, pairTokenDecimals) {
317
+ if (!(price > 0) ||
318
+ !Number.isFinite(price) ||
319
+ !Number.isSafeInteger(pairTokenDecimals)) {
320
+ return null;
321
+ }
322
+ const decimalFactor = 10 ** (18 - pairTokenDecimals);
323
+ const rawRatio = pairIsCurrency0
324
+ ? decimalFactor / price
325
+ : price / decimalFactor;
326
+ const tick = Math.log(rawRatio) / Math.log(1.0001);
327
+ return Number.isFinite(tick) ? tick : null;
328
+ }
329
+ /** Map two ticks to an order-independent human-price range. */
330
+ export function uniswapV4PriceRangeFromTicks(tickA, tickB, pairIsCurrency0, pairTokenDecimals) {
331
+ const priceA = uniswapV4PriceAtTick(tickA, pairIsCurrency0, pairTokenDecimals);
332
+ const priceB = uniswapV4PriceAtTick(tickB, pairIsCurrency0, pairTokenDecimals);
333
+ return priceA === null || priceB === null
334
+ ? null
335
+ : { min: Math.min(priceA, priceB), max: Math.max(priceA, priceB) };
336
+ }
337
+ /** Map two human prices to an order-independent raw-tick range. */
338
+ export function uniswapV4TickRangeFromPrices(priceA, priceB, pairIsCurrency0, pairTokenDecimals) {
339
+ const tickA = uniswapV4TickAtPrice(priceA, pairIsCurrency0, pairTokenDecimals);
340
+ const tickB = uniswapV4TickAtPrice(priceB, pairIsCurrency0, pairTokenDecimals);
341
+ return tickA === null || tickB === null
342
+ ? null
343
+ : { lower: Math.min(tickA, tickB), upper: Math.max(tickA, tickB) };
344
+ }
284
345
  /** Exact integer port of Uniswap V4 TickMath.getSqrtPriceAtTick. */
285
346
  export function uniswapV4SqrtPriceX96AtTick(tick) {
286
347
  tick = Math.trunc(tick);