@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/cjs/v6/cashOut.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_CASH_OUT_SLIPPAGE_BPS = void 0;
|
|
3
|
+
exports.CashOutRouteChangedError = exports.DEFAULT_CASH_OUT_SLIPPAGE_BPS = void 0;
|
|
4
4
|
exports.buildCashOutTx = buildCashOutTx;
|
|
5
5
|
exports.build721CashOutMetadata = build721CashOutMetadata;
|
|
6
6
|
exports.getCashOutQuote = getCashOutQuote;
|
|
@@ -8,14 +8,21 @@ exports.slippageFloor = slippageFloor;
|
|
|
8
8
|
exports.cashOutProtocolFee = cashOutProtocolFee;
|
|
9
9
|
exports.decodeBuybackCashOutSpec = decodeBuybackCashOutSpec;
|
|
10
10
|
exports.buildBuybackCashOutMetadata = buildBuybackCashOutMetadata;
|
|
11
|
+
exports.chooseBestCashOutRoute = chooseBestCashOutRoute;
|
|
12
|
+
exports.cashOutPoolBufferBps = cashOutPoolBufferBps;
|
|
13
|
+
exports.classifyCashOutExecutionError = classifyCashOutExecutionError;
|
|
11
14
|
exports.resolveCashOutRoute = resolveCashOutRoute;
|
|
12
15
|
exports.getHookAwareCashOutQuote = getHookAwareCashOutQuote;
|
|
16
|
+
exports.getBestCashOutRoute = getBestCashOutRoute;
|
|
17
|
+
exports.prepareHookAwareCashOut = prepareHookAwareCashOut;
|
|
18
|
+
exports.prepareBestCashOut = prepareBestCashOut;
|
|
13
19
|
const viem_1 = require("viem");
|
|
14
20
|
const juicebox_js_1 = require("../generated/juicebox.js");
|
|
15
21
|
const fee_js_1 = require("../utils/fee.js");
|
|
16
22
|
const hook_js_1 = require("../utils/hook.js");
|
|
17
23
|
const currency_js_1 = require("./currency.js");
|
|
18
24
|
const types_js_1 = require("./types.js");
|
|
25
|
+
const uniswapV4_js_1 = require("./uniswapV4.js");
|
|
19
26
|
/**
|
|
20
27
|
* Build a `cashOutTokensOf(holder, projectId, cashOutCount, tokenToReclaim,
|
|
21
28
|
* minTokensReclaimed, beneficiary, metadata)` transaction request for a v6 terminal.
|
|
@@ -222,6 +229,96 @@ function buildBuybackCashOutMetadata({ hook, minimumSwapAmountOut, skip = false,
|
|
|
222
229
|
const payload = (0, viem_1.encodeAbiParameters)([{ type: "uint256" }, { type: "bool" }], [minimumSwapAmountOut, skip]);
|
|
223
230
|
return (0, hook_js_1.createHookMetadata)([(0, hook_js_1.hookMetadataId)(hook, "cashOut")], [payload]);
|
|
224
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* Pick the executable exit which guarantees the holder the most reclaim token.
|
|
234
|
+
*
|
|
235
|
+
* A direct pool sale can only spend claimed ERC-20s. Internal Juicebox credits
|
|
236
|
+
* stay on the terminal route until they are claimed. The direct route must beat
|
|
237
|
+
* the terminal's full expected output even after user slippage; an optimistic
|
|
238
|
+
* pool quote alone is never enough to displace a deterministic cash out.
|
|
239
|
+
*/
|
|
240
|
+
function chooseBestCashOutRoute({ cashOut, directSwapQuote, directSwapPoolKey, directSwapZeroForOne, spendableProjectTokenCount = 0n, cashOutCount, slippageBps = exports.DEFAULT_CASH_OUT_SLIPPAGE_BPS, }) {
|
|
241
|
+
const cashOutCandidate = {
|
|
242
|
+
kind: "cash-out",
|
|
243
|
+
expectedReturn: cashOut.expectedReturn,
|
|
244
|
+
minimumReturn: cashOut.minimumReturn,
|
|
245
|
+
cashOut,
|
|
246
|
+
};
|
|
247
|
+
if (!directSwapQuote ||
|
|
248
|
+
directSwapQuote <= 0n ||
|
|
249
|
+
!directSwapPoolKey ||
|
|
250
|
+
directSwapZeroForOne === undefined ||
|
|
251
|
+
cashOutCount <= 0n ||
|
|
252
|
+
spendableProjectTokenCount < cashOutCount) {
|
|
253
|
+
return cashOutCandidate;
|
|
254
|
+
}
|
|
255
|
+
const minimumReturn = slippageFloor(directSwapQuote, slippageBps);
|
|
256
|
+
if (minimumReturn <= cashOut.expectedReturn)
|
|
257
|
+
return cashOutCandidate;
|
|
258
|
+
return {
|
|
259
|
+
kind: "direct-swap",
|
|
260
|
+
expectedReturn: directSwapQuote,
|
|
261
|
+
minimumReturn,
|
|
262
|
+
cashOut,
|
|
263
|
+
poolKey: directSwapPoolKey,
|
|
264
|
+
zeroForOne: directSwapZeroForOne,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/** Pool fee/impact already reflected by the buyback hook's executable quote. */
|
|
268
|
+
function cashOutPoolBufferBps(route) {
|
|
269
|
+
const buyback = route?.route === "amm" ? route.buyback : null;
|
|
270
|
+
if (!buyback || buyback.rawSwapQuote <= 0n)
|
|
271
|
+
return null;
|
|
272
|
+
const executableQuote = buyback.minimumSwapAmountOut > buyback.rawSwapQuote
|
|
273
|
+
? buyback.rawSwapQuote
|
|
274
|
+
: buyback.minimumSwapAmountOut;
|
|
275
|
+
return (((buyback.rawSwapQuote - executableQuote) * MAX_BPS +
|
|
276
|
+
buyback.rawSwapQuote -
|
|
277
|
+
1n) /
|
|
278
|
+
buyback.rawSwapQuote);
|
|
279
|
+
}
|
|
280
|
+
const CASH_OUT_EXECUTION_ERRORS = [
|
|
281
|
+
{
|
|
282
|
+
code: "BUYBACK_SLIPPAGE_EXCEEDED",
|
|
283
|
+
selector: "0xe2d708a9",
|
|
284
|
+
matchers: ["0xe2d708a9", "jbbuybackhook_specifiedslippageexceeded"],
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
code: "TERMINAL_UNDER_MIN",
|
|
288
|
+
selector: "0x6b2bb382",
|
|
289
|
+
matchers: ["0x6b2bb382", "jbmultiterminal_undermin"],
|
|
290
|
+
},
|
|
291
|
+
];
|
|
292
|
+
function collectCashOutErrorText(value, seen = new Set(), depth = 0) {
|
|
293
|
+
if (depth > 8 || value === null || value === undefined || seen.has(value)) {
|
|
294
|
+
return [];
|
|
295
|
+
}
|
|
296
|
+
if (typeof value === "string")
|
|
297
|
+
return [value];
|
|
298
|
+
if (typeof value !== "object")
|
|
299
|
+
return [];
|
|
300
|
+
seen.add(value);
|
|
301
|
+
const record = value;
|
|
302
|
+
return [
|
|
303
|
+
record.shortMessage,
|
|
304
|
+
record.message,
|
|
305
|
+
record.details,
|
|
306
|
+
record.errorName,
|
|
307
|
+
record.signature,
|
|
308
|
+
record.raw,
|
|
309
|
+
record.data,
|
|
310
|
+
record.cause,
|
|
311
|
+
record.error,
|
|
312
|
+
].flatMap((item) => collectCashOutErrorText(item, seen, depth + 1));
|
|
313
|
+
}
|
|
314
|
+
/** Classify known cash-out errors through viem/wallet nested error shapes. */
|
|
315
|
+
function classifyCashOutExecutionError(error) {
|
|
316
|
+
const text = collectCashOutErrorText(error).join(" | ").toLowerCase();
|
|
317
|
+
if (!text)
|
|
318
|
+
return null;
|
|
319
|
+
const matched = CASH_OUT_EXECUTION_ERRORS.find(({ matchers }) => matchers.some((matcher) => text.includes(matcher)));
|
|
320
|
+
return matched ? { code: matched.code, selector: matched.selector } : null;
|
|
321
|
+
}
|
|
225
322
|
/**
|
|
226
323
|
* Interpret a hook-aware `previewCashOutFrom` result and prepare a
|
|
227
324
|
* slippage-protected route.
|
|
@@ -283,14 +380,20 @@ function resolveCashOutRoute({ reclaimAmount, cashOutTaxRate, hookSpecifications
|
|
|
283
380
|
};
|
|
284
381
|
if (!specification || specification.noop || !buyback)
|
|
285
382
|
return treasuryRoute;
|
|
286
|
-
// The
|
|
287
|
-
//
|
|
288
|
-
//
|
|
383
|
+
// The raw swap quote is an optimistic oracle quote used for display and
|
|
384
|
+
// route comparison. The hook's minimumSwapAmountOut is the executable pool
|
|
385
|
+
// quote after fee, liquidity, and price-impact constraints. User slippage
|
|
386
|
+
// must be applied to that executable value; applying it to rawSwapQuote can
|
|
387
|
+
// create a minimum the pool cannot satisfy.
|
|
289
388
|
const quote = buyback.rawSwapQuote > 0n
|
|
290
389
|
? buyback.rawSwapQuote
|
|
291
390
|
: buyback.minimumSwapAmountOut;
|
|
391
|
+
const executableQuote = buyback.rawSwapQuote > 0n &&
|
|
392
|
+
buyback.minimumSwapAmountOut > buyback.rawSwapQuote
|
|
393
|
+
? buyback.rawSwapQuote
|
|
394
|
+
: buyback.minimumSwapAmountOut;
|
|
292
395
|
const minimumReturn = buyback.rawSwapQuote > 0n && !buyback.hasUserSpecifiedMinimumSwapAmountOut
|
|
293
|
-
? slippageFloor(
|
|
396
|
+
? slippageFloor(executableQuote, slippageBps)
|
|
294
397
|
: buyback.minimumSwapAmountOut;
|
|
295
398
|
// An explicit metadata minimum at or below the direct net routes execution
|
|
296
399
|
// back to the terminal path anyway; take the deterministic treasury route.
|
|
@@ -312,41 +415,22 @@ function resolveCashOutRoute({ reclaimAmount, cashOutTaxRate, hookSpecifications
|
|
|
312
415
|
buyback,
|
|
313
416
|
};
|
|
314
417
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
* @param args.beneficiary The reclaim beneficiary. Defaults to the holder.
|
|
332
|
-
* @param args.terminal The terminal to quote against. Defaults to the chain's
|
|
333
|
-
* canonical `JBMultiTerminal`.
|
|
334
|
-
* @param args.buybackHookAddress The buyback hook whose specification may win
|
|
335
|
-
* the pool route. Defaults to the chain's canonical `JBBuybackHook`; pass it
|
|
336
|
-
* explicitly for a project whose `JBBuybackHookRegistry` entry points at a
|
|
337
|
-
* custom hook. On a chain with no `JBBuybackHook` deployment, specifications
|
|
338
|
-
* are treated as non-buyback and the treasury route is returned.
|
|
339
|
-
* @param args.beneficiaryIsFeeless Whether the beneficiary is feeless.
|
|
340
|
-
* Defaults to false.
|
|
341
|
-
* @param args.slippageBps Tolerance for quote-to-inclusion drift. Defaults to
|
|
342
|
-
* {@link DEFAULT_CASH_OUT_SLIPPAGE_BPS}.
|
|
343
|
-
* @returns The protected route (see {@link CashOutRoute}).
|
|
344
|
-
*/
|
|
345
|
-
async function getHookAwareCashOutQuote(client, { chainId, projectId, holder, cashOutCount, tokenToReclaim, beneficiary, terminal, buybackHookAddress, beneficiaryIsFeeless = false, slippageBps = exports.DEFAULT_CASH_OUT_SLIPPAGE_BPS, }) {
|
|
346
|
-
const terminalAddress = terminal ?? (0, types_js_1.v6Address)("JBMultiTerminal", chainId);
|
|
347
|
-
const buybackHook = buybackHookAddress ?? optionalV6Address("JBBuybackHook", chainId);
|
|
348
|
-
const [, reclaimAmount, cashOutTaxRate, hookSpecifications] = await client.readContract({
|
|
349
|
-
address: terminalAddress,
|
|
418
|
+
function rulesetIdOf(ruleset) {
|
|
419
|
+
const id = ruleset && typeof ruleset === "object" && "id" in ruleset
|
|
420
|
+
? ruleset.id
|
|
421
|
+
: Array.isArray(ruleset)
|
|
422
|
+
? ruleset[0]
|
|
423
|
+
: null;
|
|
424
|
+
try {
|
|
425
|
+
return id === null || id === undefined ? null : BigInt(id);
|
|
426
|
+
}
|
|
427
|
+
catch {
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
async function readCashOutPreviewSnapshot(client, { terminal, holder, projectId, cashOutCount, tokenToReclaim, beneficiary, metadata, }) {
|
|
432
|
+
const [ruleset, reclaimAmount, cashOutTaxRate, hookSpecifications] = await client.readContract({
|
|
433
|
+
address: terminal,
|
|
350
434
|
abi: juicebox_js_1.jbMultiTerminalAbi,
|
|
351
435
|
functionName: "previewCashOutFrom",
|
|
352
436
|
args: [
|
|
@@ -354,29 +438,220 @@ async function getHookAwareCashOutQuote(client, { chainId, projectId, holder, ca
|
|
|
354
438
|
projectId,
|
|
355
439
|
cashOutCount,
|
|
356
440
|
tokenToReclaim,
|
|
357
|
-
beneficiary
|
|
358
|
-
|
|
441
|
+
beneficiary,
|
|
442
|
+
metadata,
|
|
359
443
|
],
|
|
360
444
|
});
|
|
361
|
-
|
|
362
|
-
|
|
445
|
+
return {
|
|
446
|
+
rulesetId: rulesetIdOf(ruleset),
|
|
447
|
+
reclaimAmount,
|
|
448
|
+
cashOutTaxRate,
|
|
449
|
+
hookSpecifications,
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
async function resolveCashOutPreviewSnapshot(client, preview, { terminal, projectId, tokenToReclaim, buybackHookAddress, beneficiaryIsFeeless, slippageBps, }) {
|
|
453
|
+
const feeFreeSurplus = preview.cashOutTaxRate === 0n
|
|
363
454
|
? await client.readContract({
|
|
364
|
-
address:
|
|
455
|
+
address: terminal,
|
|
365
456
|
abi: juicebox_js_1.jbMultiTerminalAbi,
|
|
366
457
|
functionName: "feeFreeSurplusOf",
|
|
367
458
|
args: [projectId, tokenToReclaim],
|
|
368
459
|
})
|
|
369
460
|
: 0n;
|
|
370
461
|
return resolveCashOutRoute({
|
|
371
|
-
reclaimAmount,
|
|
372
|
-
cashOutTaxRate,
|
|
373
|
-
hookSpecifications,
|
|
374
|
-
buybackHookAddress
|
|
462
|
+
reclaimAmount: preview.reclaimAmount,
|
|
463
|
+
cashOutTaxRate: preview.cashOutTaxRate,
|
|
464
|
+
hookSpecifications: preview.hookSpecifications,
|
|
465
|
+
buybackHookAddress,
|
|
375
466
|
beneficiaryIsFeeless,
|
|
376
467
|
feeFreeSurplus,
|
|
377
468
|
slippageBps,
|
|
378
469
|
});
|
|
379
470
|
}
|
|
471
|
+
async function getHookAwareCashOutQuote(client, { chainId, projectId, holder, cashOutCount, tokenToReclaim, beneficiary = holder, terminal, buybackHookAddress, beneficiaryIsFeeless = false, slippageBps = exports.DEFAULT_CASH_OUT_SLIPPAGE_BPS, }) {
|
|
472
|
+
const terminalAddress = terminal ?? (0, types_js_1.v6Address)("JBMultiTerminal", chainId);
|
|
473
|
+
const buybackHook = buybackHookAddress ?? optionalV6Address("JBBuybackHook", chainId);
|
|
474
|
+
const preview = await readCashOutPreviewSnapshot(client, {
|
|
475
|
+
terminal: terminalAddress,
|
|
476
|
+
holder,
|
|
477
|
+
projectId,
|
|
478
|
+
cashOutCount,
|
|
479
|
+
tokenToReclaim,
|
|
480
|
+
beneficiary,
|
|
481
|
+
metadata: "0x",
|
|
482
|
+
});
|
|
483
|
+
return resolveCashOutPreviewSnapshot(client, preview, {
|
|
484
|
+
terminal: terminalAddress,
|
|
485
|
+
projectId,
|
|
486
|
+
tokenToReclaim,
|
|
487
|
+
buybackHookAddress: buybackHook,
|
|
488
|
+
beneficiaryIsFeeless,
|
|
489
|
+
slippageBps,
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Quote the best user exit across the terminal and a directly spendable pool.
|
|
494
|
+
*
|
|
495
|
+
* `previewCashOutFrom` remains the source of truth for terminal and buyback-hook
|
|
496
|
+
* settlement. When a matching pool and sufficient claimed ERC-20 balance are
|
|
497
|
+
* supplied, the V4 Quoter is read as well and a direct swap wins only when its
|
|
498
|
+
* slippage-protected minimum exceeds the terminal route's full expected output.
|
|
499
|
+
*/
|
|
500
|
+
async function getBestCashOutRoute(client, args) {
|
|
501
|
+
const cashOut = await getHookAwareCashOutQuote(client, args);
|
|
502
|
+
const directSwap = args.directSwap;
|
|
503
|
+
if (!directSwap ||
|
|
504
|
+
directSwap.spendableProjectTokenCount < args.cashOutCount ||
|
|
505
|
+
args.cashOutCount <= 0n) {
|
|
506
|
+
return chooseBestCashOutRoute({
|
|
507
|
+
cashOut,
|
|
508
|
+
cashOutCount: args.cashOutCount,
|
|
509
|
+
slippageBps: args.slippageBps,
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
const zeroForOne = (0, uniswapV4_js_1.uniswapV4SwapDirection)({
|
|
513
|
+
poolKey: directSwap.poolKey,
|
|
514
|
+
tokenIn: directSwap.projectToken,
|
|
515
|
+
tokenOut: args.tokenToReclaim,
|
|
516
|
+
});
|
|
517
|
+
if (zeroForOne === null) {
|
|
518
|
+
return chooseBestCashOutRoute({
|
|
519
|
+
cashOut,
|
|
520
|
+
cashOutCount: args.cashOutCount,
|
|
521
|
+
slippageBps: args.slippageBps,
|
|
522
|
+
});
|
|
523
|
+
}
|
|
524
|
+
let directSwapQuote;
|
|
525
|
+
try {
|
|
526
|
+
directSwapQuote = await (0, uniswapV4_js_1.quoteUniswapV4ExactInputSingle)(client, {
|
|
527
|
+
chainId: args.chainId,
|
|
528
|
+
poolKey: directSwap.poolKey,
|
|
529
|
+
zeroForOne,
|
|
530
|
+
amountIn: args.cashOutCount,
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
catch {
|
|
534
|
+
// The direct pool is an optional optimization. A missing/reverting quoter
|
|
535
|
+
// must not make an otherwise valid terminal cash out unavailable.
|
|
536
|
+
return chooseBestCashOutRoute({
|
|
537
|
+
cashOut,
|
|
538
|
+
cashOutCount: args.cashOutCount,
|
|
539
|
+
slippageBps: args.slippageBps,
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
return chooseBestCashOutRoute({
|
|
543
|
+
cashOut,
|
|
544
|
+
directSwapQuote,
|
|
545
|
+
directSwapPoolKey: directSwap.poolKey,
|
|
546
|
+
directSwapZeroForOne: zeroForOne,
|
|
547
|
+
spendableProjectTokenCount: directSwap.spendableProjectTokenCount,
|
|
548
|
+
cashOutCount: args.cashOutCount,
|
|
549
|
+
slippageBps: args.slippageBps,
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
class CashOutRouteChangedError extends Error {
|
|
553
|
+
constructor() {
|
|
554
|
+
super("The cash-out route changed while its executable minimum was being locked.");
|
|
555
|
+
this.code = "CASH_OUT_ROUTE_CHANGED";
|
|
556
|
+
this.name = "CashOutRouteChangedError";
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
exports.CashOutRouteChangedError = CashOutRouteChangedError;
|
|
560
|
+
/**
|
|
561
|
+
* Prepare the exact hook-aware cash-out request a wallet should submit.
|
|
562
|
+
*
|
|
563
|
+
* Pool routes are re-previewed with their slippage metadata before the request
|
|
564
|
+
* is returned. This proves the executable minimum still selects the same route
|
|
565
|
+
* and avoids clients independently composing a stale quote and transaction.
|
|
566
|
+
*/
|
|
567
|
+
async function prepareHookAwareCashOut(client, { chainId, projectId, holder, cashOutCount, tokenToReclaim, beneficiary = holder, terminal, buybackHookAddress, beneficiaryIsFeeless = false, slippageBps = exports.DEFAULT_CASH_OUT_SLIPPAGE_BPS, }) {
|
|
568
|
+
const terminalAddress = terminal ?? (0, types_js_1.v6Address)("JBMultiTerminal", chainId);
|
|
569
|
+
const buybackHook = buybackHookAddress ?? optionalV6Address("JBBuybackHook", chainId);
|
|
570
|
+
const resolvePreview = (preview) => resolveCashOutPreviewSnapshot(client, preview, {
|
|
571
|
+
terminal: terminalAddress,
|
|
572
|
+
projectId,
|
|
573
|
+
tokenToReclaim,
|
|
574
|
+
buybackHookAddress: buybackHook,
|
|
575
|
+
beneficiaryIsFeeless,
|
|
576
|
+
slippageBps,
|
|
577
|
+
});
|
|
578
|
+
const preview = await readCashOutPreviewSnapshot(client, {
|
|
579
|
+
terminal: terminalAddress,
|
|
580
|
+
holder,
|
|
581
|
+
projectId,
|
|
582
|
+
cashOutCount,
|
|
583
|
+
tokenToReclaim,
|
|
584
|
+
beneficiary,
|
|
585
|
+
metadata: "0x",
|
|
586
|
+
});
|
|
587
|
+
const route = await resolvePreview(preview);
|
|
588
|
+
let lockedPreview = null;
|
|
589
|
+
if (route.route === "amm") {
|
|
590
|
+
lockedPreview = await readCashOutPreviewSnapshot(client, {
|
|
591
|
+
terminal: terminalAddress,
|
|
592
|
+
holder,
|
|
593
|
+
projectId,
|
|
594
|
+
cashOutCount,
|
|
595
|
+
tokenToReclaim,
|
|
596
|
+
beneficiary,
|
|
597
|
+
metadata: route.metadata,
|
|
598
|
+
});
|
|
599
|
+
const lockedRoute = await resolvePreview(lockedPreview);
|
|
600
|
+
if ((preview.rulesetId !== null &&
|
|
601
|
+
lockedPreview.rulesetId !== null &&
|
|
602
|
+
lockedPreview.rulesetId !== preview.rulesetId) ||
|
|
603
|
+
lockedRoute.route !== "amm" ||
|
|
604
|
+
lockedRoute.minimumReturn !== route.minimumReturn ||
|
|
605
|
+
lockedRoute.metadata.toLowerCase() !== route.metadata.toLowerCase()) {
|
|
606
|
+
throw new CashOutRouteChangedError();
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
return {
|
|
610
|
+
route,
|
|
611
|
+
transaction: buildCashOutTx({
|
|
612
|
+
chainId,
|
|
613
|
+
terminal: terminalAddress,
|
|
614
|
+
holder,
|
|
615
|
+
projectId,
|
|
616
|
+
cashOutCount,
|
|
617
|
+
tokenToReclaim,
|
|
618
|
+
minTokensReclaimed: route.terminalMinimum,
|
|
619
|
+
beneficiary,
|
|
620
|
+
metadata: route.metadata,
|
|
621
|
+
}),
|
|
622
|
+
preview,
|
|
623
|
+
lockedPreview,
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
/**
|
|
627
|
+
* Freshly prepare the best executable cash-out or direct-swap transaction.
|
|
628
|
+
*
|
|
629
|
+
* A direct swap is freshly quoted and slippage-floored in the same operation
|
|
630
|
+
* which builds its Universal Router request. If it cannot safely beat the
|
|
631
|
+
* terminal, the terminal path is re-previewed and locked instead.
|
|
632
|
+
*/
|
|
633
|
+
async function prepareBestCashOut(client, args) {
|
|
634
|
+
const best = await getBestCashOutRoute(client, args);
|
|
635
|
+
if (best.kind === "direct-swap") {
|
|
636
|
+
return {
|
|
637
|
+
kind: "direct-swap",
|
|
638
|
+
route: best,
|
|
639
|
+
transaction: (0, uniswapV4_js_1.buildUniswapV4ExactInputSwapTx)({
|
|
640
|
+
chainId: args.chainId,
|
|
641
|
+
poolKey: best.poolKey,
|
|
642
|
+
zeroForOne: best.zeroForOne,
|
|
643
|
+
amountIn: args.cashOutCount,
|
|
644
|
+
minimumAmountOut: best.minimumReturn,
|
|
645
|
+
recipient: args.beneficiary ?? args.holder,
|
|
646
|
+
deadline: args.directSwapDeadline,
|
|
647
|
+
}),
|
|
648
|
+
};
|
|
649
|
+
}
|
|
650
|
+
return {
|
|
651
|
+
kind: "cash-out",
|
|
652
|
+
...(await prepareHookAwareCashOut(client, args)),
|
|
653
|
+
};
|
|
654
|
+
}
|
|
380
655
|
/**
|
|
381
656
|
* `v6Address`, but returning undefined instead of throwing on a chain the
|
|
382
657
|
* 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/cjs/v6/uniswapV4.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UNISWAP_V4_MODIFY_LIQUIDITY_TOPIC = exports.UNISWAP_V4_INITIALIZE_TOPIC = exports.UNISWAP_V4_MAX_TICK = exports.UNISWAP_V4_Q96 = exports.UNISWAP_PERMIT2_ADDRESS = exports.UNISWAP_V4_UNIVERSAL_ROUTER_ADDRESSES = exports.UNISWAP_V4_QUOTER_ADDRESSES = exports.UNISWAP_V4_POSITION_MANAGER_ADDRESSES = exports.UNISWAP_V4_POOL_MANAGER_ADDRESSES = void 0;
|
|
4
4
|
exports.uniswapV4Deployment = uniswapV4Deployment;
|
|
5
|
+
exports.uniswapV4SwapDirection = uniswapV4SwapDirection;
|
|
5
6
|
exports.quoteUniswapV4ExactInputSingle = quoteUniswapV4ExactInputSingle;
|
|
6
7
|
exports.buildUniswapV4ExactInputSwapTx = buildUniswapV4ExactInputSwapTx;
|
|
7
8
|
exports.buildPermit2ApproveTx = buildPermit2ApproveTx;
|
|
@@ -9,6 +10,10 @@ exports.uniswapV4PoolId = uniswapV4PoolId;
|
|
|
9
10
|
exports.uniswapV4PoolStateSlot = uniswapV4PoolStateSlot;
|
|
10
11
|
exports.uniswapV4SqrtPriceX96FromSlot0 = uniswapV4SqrtPriceX96FromSlot0;
|
|
11
12
|
exports.uniswapV4PriceFromSqrtPriceX96 = uniswapV4PriceFromSqrtPriceX96;
|
|
13
|
+
exports.uniswapV4PriceAtTick = uniswapV4PriceAtTick;
|
|
14
|
+
exports.uniswapV4TickAtPrice = uniswapV4TickAtPrice;
|
|
15
|
+
exports.uniswapV4PriceRangeFromTicks = uniswapV4PriceRangeFromTicks;
|
|
16
|
+
exports.uniswapV4TickRangeFromPrices = uniswapV4TickRangeFromPrices;
|
|
12
17
|
exports.uniswapV4SqrtPriceX96AtTick = uniswapV4SqrtPriceX96AtTick;
|
|
13
18
|
exports.uniswapV4AmountsForLiquidity = uniswapV4AmountsForLiquidity;
|
|
14
19
|
exports.uniswapV4LiquidityForAmounts = uniswapV4LiquidityForAmounts;
|
|
@@ -20,6 +25,7 @@ exports.uniswapV4DefaultPriceRange = uniswapV4DefaultPriceRange;
|
|
|
20
25
|
exports.uniswapV4PositionTokenIdFromLog = uniswapV4PositionTokenIdFromLog;
|
|
21
26
|
exports.isUniswapV4PoolManager = isUniswapV4PoolManager;
|
|
22
27
|
const viem_1 = require("viem");
|
|
28
|
+
const constants_js_1 = require("../constants.js");
|
|
23
29
|
/**
|
|
24
30
|
* Canonical Uniswap V4 PoolManager deployments used by Juicebox v6.
|
|
25
31
|
* Optimism Sepolia is intentionally absent: deploy-all skips the Uniswap stack
|
|
@@ -81,6 +87,30 @@ function uniswapV4Deployment(chainId) {
|
|
|
81
87
|
}
|
|
82
88
|
exports.UNISWAP_V4_Q96 = 1n << 96n;
|
|
83
89
|
exports.UNISWAP_V4_MAX_TICK = 887_272;
|
|
90
|
+
function normalizeUniswapV4Currency(token) {
|
|
91
|
+
return token.toLowerCase() === constants_js_1.NATIVE_TOKEN.toLowerCase()
|
|
92
|
+
? viem_1.zeroAddress
|
|
93
|
+
: token.toLowerCase();
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Resolve the exact swap direction for a token pair, normalizing Juicebox's
|
|
97
|
+
* native-token sentinel to Uniswap V4's zero-address currency.
|
|
98
|
+
*
|
|
99
|
+
* Returns `null` unless both input and output match opposite sides of the pool.
|
|
100
|
+
* Clients should fail closed on `null` instead of inferring the output token
|
|
101
|
+
* from the input side alone.
|
|
102
|
+
*/
|
|
103
|
+
function uniswapV4SwapDirection({ poolKey, tokenIn, tokenOut, }) {
|
|
104
|
+
const input = normalizeUniswapV4Currency(tokenIn);
|
|
105
|
+
const output = normalizeUniswapV4Currency(tokenOut);
|
|
106
|
+
const currency0 = poolKey.currency0.toLowerCase();
|
|
107
|
+
const currency1 = poolKey.currency1.toLowerCase();
|
|
108
|
+
if (input === currency0 && output === currency1)
|
|
109
|
+
return true;
|
|
110
|
+
if (input === currency1 && output === currency0)
|
|
111
|
+
return false;
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
84
114
|
const V4_QUOTER_ABI = [
|
|
85
115
|
{
|
|
86
116
|
type: "function",
|
|
@@ -302,6 +332,42 @@ function uniswapV4PriceFromSqrtPriceX96(sqrtPriceX96, pairIsCurrency0, pairToken
|
|
|
302
332
|
const price = rawRatio * 10 ** (18 - pairTokenDecimals);
|
|
303
333
|
return Number.isFinite(price) && price > 0 ? price : null;
|
|
304
334
|
}
|
|
335
|
+
/** Human pair-token price at a Uniswap V4 tick, in either currency ordering. */
|
|
336
|
+
function uniswapV4PriceAtTick(tick, pairIsCurrency0, pairTokenDecimals) {
|
|
337
|
+
if (!Number.isInteger(tick))
|
|
338
|
+
return null;
|
|
339
|
+
return uniswapV4PriceFromSqrtPriceX96(uniswapV4SqrtPriceX96AtTick(tick), pairIsCurrency0, pairTokenDecimals);
|
|
340
|
+
}
|
|
341
|
+
/** Inverse of {@link uniswapV4PriceAtTick}; returns a fractional raw tick. */
|
|
342
|
+
function uniswapV4TickAtPrice(price, pairIsCurrency0, pairTokenDecimals) {
|
|
343
|
+
if (!(price > 0) ||
|
|
344
|
+
!Number.isFinite(price) ||
|
|
345
|
+
!Number.isSafeInteger(pairTokenDecimals)) {
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
const decimalFactor = 10 ** (18 - pairTokenDecimals);
|
|
349
|
+
const rawRatio = pairIsCurrency0
|
|
350
|
+
? decimalFactor / price
|
|
351
|
+
: price / decimalFactor;
|
|
352
|
+
const tick = Math.log(rawRatio) / Math.log(1.0001);
|
|
353
|
+
return Number.isFinite(tick) ? tick : null;
|
|
354
|
+
}
|
|
355
|
+
/** Map two ticks to an order-independent human-price range. */
|
|
356
|
+
function uniswapV4PriceRangeFromTicks(tickA, tickB, pairIsCurrency0, pairTokenDecimals) {
|
|
357
|
+
const priceA = uniswapV4PriceAtTick(tickA, pairIsCurrency0, pairTokenDecimals);
|
|
358
|
+
const priceB = uniswapV4PriceAtTick(tickB, pairIsCurrency0, pairTokenDecimals);
|
|
359
|
+
return priceA === null || priceB === null
|
|
360
|
+
? null
|
|
361
|
+
: { min: Math.min(priceA, priceB), max: Math.max(priceA, priceB) };
|
|
362
|
+
}
|
|
363
|
+
/** Map two human prices to an order-independent raw-tick range. */
|
|
364
|
+
function uniswapV4TickRangeFromPrices(priceA, priceB, pairIsCurrency0, pairTokenDecimals) {
|
|
365
|
+
const tickA = uniswapV4TickAtPrice(priceA, pairIsCurrency0, pairTokenDecimals);
|
|
366
|
+
const tickB = uniswapV4TickAtPrice(priceB, pairIsCurrency0, pairTokenDecimals);
|
|
367
|
+
return tickA === null || tickB === null
|
|
368
|
+
? null
|
|
369
|
+
: { lower: Math.min(tickA, tickB), upper: Math.max(tickA, tickB) };
|
|
370
|
+
}
|
|
305
371
|
/** Exact integer port of Uniswap V4 TickMath.getSqrtPriceAtTick. */
|
|
306
372
|
function uniswapV4SqrtPriceX96AtTick(tick) {
|
|
307
373
|
tick = Math.trunc(tick);
|