@bananapus/nana-sdk-core 1.9.2 → 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.
- package/dist/cjs/actions/dataHook.d.ts +2 -2
- package/dist/cjs/actions/dataHook.d.ts.map +1 -1
- package/dist/cjs/actions/dataHook.js +6 -3
- package/dist/cjs/actions/dataHook.js.map +1 -1
- package/dist/cjs/utils/contracts.d.ts +2 -1
- package/dist/cjs/utils/contracts.d.ts.map +1 -1
- package/dist/cjs/utils/contracts.js +6 -1
- package/dist/cjs/utils/contracts.js.map +1 -1
- package/dist/cjs/v6/cashOut.d.ts +109 -2
- package/dist/cjs/v6/cashOut.d.ts.map +1 -1
- package/dist/cjs/v6/cashOut.js +324 -49
- package/dist/cjs/v6/cashOut.js.map +1 -1
- package/dist/cjs/v6/uniswapV4.d.ts +27 -0
- package/dist/cjs/v6/uniswapV4.d.ts.map +1 -1
- package/dist/cjs/v6/uniswapV4.js +66 -0
- package/dist/cjs/v6/uniswapV4.js.map +1 -1
- package/dist/esm/actions/dataHook.d.ts +2 -2
- package/dist/esm/actions/dataHook.d.ts.map +1 -1
- package/dist/esm/actions/dataHook.js +8 -5
- package/dist/esm/actions/dataHook.js.map +1 -1
- package/dist/esm/utils/contracts.d.ts +2 -1
- package/dist/esm/utils/contracts.d.ts.map +1 -1
- package/dist/esm/utils/contracts.js +7 -2
- package/dist/esm/utils/contracts.js.map +1 -1
- package/dist/esm/v6/cashOut.d.ts +109 -2
- package/dist/esm/v6/cashOut.d.ts.map +1 -1
- package/dist/esm/v6/cashOut.js +316 -48
- package/dist/esm/v6/cashOut.js.map +1 -1
- package/dist/esm/v6/uniswapV4.d.ts +27 -0
- package/dist/esm/v6/uniswapV4.d.ts.map +1 -1
- package/dist/esm/v6/uniswapV4.js +61 -0
- package/dist/esm/v6/uniswapV4.js.map +1 -1
- package/package.json +1 -1
package/dist/esm/v6/cashOut.js
CHANGED
|
@@ -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
|
|
275
|
-
//
|
|
276
|
-
//
|
|
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(
|
|
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
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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
|
|
346
|
-
|
|
423
|
+
beneficiary,
|
|
424
|
+
metadata,
|
|
347
425
|
],
|
|
348
426
|
});
|
|
349
|
-
|
|
350
|
-
|
|
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:
|
|
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
|
|
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":"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"}
|
|
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":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"uniswapV4.d.ts","sourceRoot":"","sources":["../../../src/v6/uniswapV4.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/v6/uniswapV4.js
CHANGED
|
@@ -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);
|