timelock-sdk 0.0.196 → 0.0.197

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/client.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- const require_optionUtils = require('./optionUtils-DerSn_Ua.cjs');
3
+ const require_optionUtils = require('./optionUtils-CWVu69fU.cjs');
4
4
  const require_statelessStateView = require('./statelessStateView-WNW62g3Q.cjs');
5
5
  const require_factory = require('./factory-BieDxxUI.cjs');
6
6
  let viem = require("viem");
package/dist/client.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as useCurrentPrice, Bt as useMarketState, C as useLiquidityBlocks, Ct as useMintOption, D as usePriceAtSqrtPriceX96, E as usePriceHistory, Ht as TimelockProvider, M as UniswapPoolData, N as usePoolData, O as usePriceAtTick, S as LiquidityBlockData, St as useClosedUserOptions, T as useMarketPriceHistory, Ut as useCurrentMarket, Vt as useMarketData, Wt as useTimelockConfig, _ as useTokenData, _t as useOptionPremium, a as OptionPricingParams, at as useActiveUserPerps, b as batchGetAmountsFromLiquidity, bt as OptionData, c as usePricingParams, ct as usePerpsOperator, d as usePauseMarketTrading, dt as ExerciseOptionEvent, f as usePauseGlobalTrading, ft as ExtendEvent, g as TokenData, gt as useExtendOption, h as useTokenBalance, ht as useOptionTimeline, i as useOptionPricingParams, it as useOperatorPerms, j as PoolKey, k as useCurrentTick, l as useUpdateMarketFees, lt as useClosePerp, m as useApproval, mt as OptionEvent, n as useUpdateMarketPricing, nt as useSetOperatorPerms, o as PricingParams, ot as useClosedUserPerps, p as useGuardianGlobalState, pt as MintOptionEvent, r as useStaticPricingParams, rt as useUserOperators, s as StaticPricingParams, st as useUserPerps, t as useLens, u as useFeeRates, ut as useMintPerp, v as useVaultTVL, vt as useOptionPnl, w as useBurnLiquidity, wt as useMaxPositionSize, x as useMintLiquidity, xt as useActiveUserOptions, y as useVaultData, yt as useExerciseOption, zt as useMarketVolume } from "./client-BLs46E49.cjs";
1
+ import { A as useCurrentPrice, Bt as useTimelockConfig, C as useLiquidityBlocks, Ct as useMintOption, D as usePriceAtSqrtPriceX96, E as usePriceHistory, Ft as useMarketVolume, It as useMarketState, Lt as useMarketData, M as UniswapPoolData, N as usePoolData, O as usePriceAtTick, Rt as TimelockProvider, S as LiquidityBlockData, St as useClosedUserOptions, T as useMarketPriceHistory, _ as useTokenData, _t as useOptionPremium, a as OptionPricingParams, at as useActiveUserPerps, b as batchGetAmountsFromLiquidity, bt as OptionData, c as usePricingParams, ct as usePerpsOperator, d as usePauseMarketTrading, dt as ExerciseOptionEvent, f as usePauseGlobalTrading, ft as ExtendEvent, g as TokenData, gt as useExtendOption, h as useTokenBalance, ht as useOptionTimeline, i as useOptionPricingParams, it as useOperatorPerms, j as PoolKey, k as useCurrentTick, l as useUpdateMarketFees, lt as useClosePerp, m as useApproval, mt as OptionEvent, n as useUpdateMarketPricing, nt as useSetOperatorPerms, o as PricingParams, ot as useClosedUserPerps, p as useGuardianGlobalState, pt as MintOptionEvent, r as useStaticPricingParams, rt as useUserOperators, s as StaticPricingParams, st as useUserPerps, t as useLens, u as useFeeRates, ut as useMintPerp, v as useVaultTVL, vt as useOptionPnl, w as useBurnLiquidity, wt as useMaxPositionSize, x as useMintLiquidity, xt as useActiveUserOptions, y as useVaultData, yt as useExerciseOption, zt as useCurrentMarket } from "./client-BgYs-sEY.cjs";
2
2
  export { ExerciseOptionEvent, ExtendEvent, LiquidityBlockData, MintOptionEvent, OptionData, OptionEvent, OptionPricingParams, PoolKey, PricingParams, StaticPricingParams, TimelockProvider, TokenData, UniswapPoolData, batchGetAmountsFromLiquidity, useActiveUserOptions, useActiveUserPerps, useApproval, useBurnLiquidity, useClosePerp, useClosedUserOptions, useClosedUserPerps, useCurrentMarket, useCurrentPrice, useCurrentTick, useExerciseOption, useExtendOption, useFeeRates, useGuardianGlobalState, useLens, useLiquidityBlocks, useMarketData, useMarketPriceHistory, useMarketState, useMarketVolume, useMaxPositionSize, useMintLiquidity, useMintOption, useMintPerp, useOperatorPerms, useOptionPnl, useOptionPremium, useOptionPricingParams, useOptionTimeline, usePauseGlobalTrading, usePauseMarketTrading, usePerpsOperator, usePoolData, usePriceAtSqrtPriceX96, usePriceAtTick, usePriceHistory, usePricingParams, useSetOperatorPerms, useStaticPricingParams, useTimelockConfig, useTokenBalance, useTokenData, useUpdateMarketFees, useUpdateMarketPricing, useUserOperators, useUserPerps, useVaultData, useVaultTVL };
package/dist/client.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as useCurrentPrice, Bt as useMarketState, C as useLiquidityBlocks, Ct as useMintOption, D as usePriceAtSqrtPriceX96, E as usePriceHistory, Ht as TimelockProvider, M as UniswapPoolData, N as usePoolData, O as usePriceAtTick, S as LiquidityBlockData, St as useClosedUserOptions, T as useMarketPriceHistory, Ut as useCurrentMarket, Vt as useMarketData, Wt as useTimelockConfig, _ as useTokenData, _t as useOptionPremium, a as OptionPricingParams, at as useActiveUserPerps, b as batchGetAmountsFromLiquidity, bt as OptionData, c as usePricingParams, ct as usePerpsOperator, d as usePauseMarketTrading, dt as ExerciseOptionEvent, f as usePauseGlobalTrading, ft as ExtendEvent, g as TokenData, gt as useExtendOption, h as useTokenBalance, ht as useOptionTimeline, i as useOptionPricingParams, it as useOperatorPerms, j as PoolKey, k as useCurrentTick, l as useUpdateMarketFees, lt as useClosePerp, m as useApproval, mt as OptionEvent, n as useUpdateMarketPricing, nt as useSetOperatorPerms, o as PricingParams, ot as useClosedUserPerps, p as useGuardianGlobalState, pt as MintOptionEvent, r as useStaticPricingParams, rt as useUserOperators, s as StaticPricingParams, st as useUserPerps, t as useLens, u as useFeeRates, ut as useMintPerp, v as useVaultTVL, vt as useOptionPnl, w as useBurnLiquidity, wt as useMaxPositionSize, x as useMintLiquidity, xt as useActiveUserOptions, y as useVaultData, yt as useExerciseOption, zt as useMarketVolume } from "./client-3oF5mDiF.js";
1
+ import { A as useCurrentPrice, Bt as useTimelockConfig, C as useLiquidityBlocks, Ct as useMintOption, D as usePriceAtSqrtPriceX96, E as usePriceHistory, Ft as useMarketVolume, It as useMarketState, Lt as useMarketData, M as UniswapPoolData, N as usePoolData, O as usePriceAtTick, Rt as TimelockProvider, S as LiquidityBlockData, St as useClosedUserOptions, T as useMarketPriceHistory, _ as useTokenData, _t as useOptionPremium, a as OptionPricingParams, at as useActiveUserPerps, b as batchGetAmountsFromLiquidity, bt as OptionData, c as usePricingParams, ct as usePerpsOperator, d as usePauseMarketTrading, dt as ExerciseOptionEvent, f as usePauseGlobalTrading, ft as ExtendEvent, g as TokenData, gt as useExtendOption, h as useTokenBalance, ht as useOptionTimeline, i as useOptionPricingParams, it as useOperatorPerms, j as PoolKey, k as useCurrentTick, l as useUpdateMarketFees, lt as useClosePerp, m as useApproval, mt as OptionEvent, n as useUpdateMarketPricing, nt as useSetOperatorPerms, o as PricingParams, ot as useClosedUserPerps, p as useGuardianGlobalState, pt as MintOptionEvent, r as useStaticPricingParams, rt as useUserOperators, s as StaticPricingParams, st as useUserPerps, t as useLens, u as useFeeRates, ut as useMintPerp, v as useVaultTVL, vt as useOptionPnl, w as useBurnLiquidity, wt as useMaxPositionSize, x as useMintLiquidity, xt as useActiveUserOptions, y as useVaultData, yt as useExerciseOption, zt as useCurrentMarket } from "./client-BZ7ORxpg.js";
2
2
  export { ExerciseOptionEvent, ExtendEvent, LiquidityBlockData, MintOptionEvent, OptionData, OptionEvent, OptionPricingParams, PoolKey, PricingParams, StaticPricingParams, TimelockProvider, TokenData, UniswapPoolData, batchGetAmountsFromLiquidity, useActiveUserOptions, useActiveUserPerps, useApproval, useBurnLiquidity, useClosePerp, useClosedUserOptions, useClosedUserPerps, useCurrentMarket, useCurrentPrice, useCurrentTick, useExerciseOption, useExtendOption, useFeeRates, useGuardianGlobalState, useLens, useLiquidityBlocks, useMarketData, useMarketPriceHistory, useMarketState, useMarketVolume, useMaxPositionSize, useMintLiquidity, useMintOption, useMintPerp, useOperatorPerms, useOptionPnl, useOptionPremium, useOptionPricingParams, useOptionTimeline, usePauseGlobalTrading, usePauseMarketTrading, usePerpsOperator, usePoolData, usePriceAtSqrtPriceX96, usePriceAtTick, usePriceHistory, usePricingParams, useSetOperatorPerms, useStaticPricingParams, useTimelockConfig, useTokenBalance, useTokenData, useUpdateMarketFees, useUpdateMarketPricing, useUserOperators, useUserPerps, useVaultData, useVaultTVL };
package/dist/client.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { i as erc20Abi$1, n as optionsMarketAbi, r as lensAbi, t as statelessStateViewAbi } from "./statelessStateView-DW9FOpWt.js";
4
- import { A as token1ToToken0AtTick, B as timelockFactories, D as token0ToToken1, E as roundTick, F as getTimelockLens, I as getTimelockMarket, M as getPriceHistory, N as getErc20, O as token0ToToken1AtTick, P as getStateView, _ as getAmountsFromLiquidity, b as getPriceAtTick, d as wrapAmount, k as token1ToToken0, p as wrapPrice, t as getPayoutAtPrice, v as getNearestValidStrikeTick, y as getPriceAtSqrtPriceX96, z as swappers } from "./optionUtils-CR8qGvTh.js";
4
+ import { A as getStateView, C as token0ToToken1, E as token1ToToken0AtTick, F as swappers, I as timelockFactories, M as getTimelockMarket, O as getPriceHistory, S as roundTick, T as token1ToToken0, g as getPriceAtTick, h as getPriceAtSqrtPriceX96, j as getTimelockLens, k as getErc20, l as wrapPrice, m as getNearestValidStrikeTick, p as getAmountsFromLiquidity, s as wrapAmount, t as getPayoutAtPrice, w as token0ToToken1AtTick } from "./optionUtils-CiNqlq4K.js";
5
5
  import { n as guardianAbi, r as singleOwnerVaultAbi, t as factoryAbi } from "./factory-DvHmRBSB.js";
6
6
  import { decodeAbiParameters, decodeEventLog, encodeAbiParameters, encodeFunctionData, erc20Abi, maxInt256, maxUint256, minInt256, zeroAddress } from "viem";
7
7
  import React, { createContext, useContext, useEffect, useMemo } from "react";
@@ -197,8 +197,7 @@ const getPriceAtTick = (tick) => {
197
197
  return sqrtRatioX96 * sqrtRatioX96 * PRICE_PRECISION / BigInt(2 ** 192);
198
198
  };
199
199
  const getTickAtPrice = (price) => {
200
- const priceX192 = price * BigInt(2 ** 192) / PRICE_PRECISION;
201
- const sqrtPriceX96 = jsbi.default.BigInt(new big_js.default(priceX192.toString()).sqrt().toFixed(0));
200
+ const sqrtPriceX96 = getSqrtPriceX96AtPrice(price);
202
201
  return __uniswap_v3_sdk.TickMath.getTickAtSqrtRatio(sqrtPriceX96);
203
202
  };
204
203
  const getNearestValidStrikeTick = (optionType, optionAssetIsToken0, tickSpacing, currentTick, strikeTick) => {
@@ -304,12 +303,18 @@ const liquiditiesToAmounts = (liquidities, startTick, price, tickSpacing) => {
304
303
  const zero = {
305
304
  scaled: 0n,
306
305
  unscaled: (0, big_js.default)(0),
307
- scalingFactor: BigInt(0xde0b6b3a7640000),
306
+ scalingFactor: (0, big_js.default)(0xde0b6b3a7640000),
308
307
  formatted: "0"
309
308
  };
309
+ const scale = (amount, scalingFactor) => {
310
+ return BigInt((0, big_js.default)(amount).mul(scalingFactor).toFixed(0));
311
+ };
312
+ const unscale = (amount, scalingFactor) => {
313
+ return (0, big_js.default)(amount.toString()).div(scalingFactor);
314
+ };
310
315
  const wrapAmount = (scaled, decimals) => {
311
- const scalingFactor = BigInt((0, big_js.default)(10).pow(decimals).toFixed(0));
312
- const unscaled = unscaleAmount(scaled, decimals);
316
+ const scalingFactor = (0, big_js.default)(10).pow(decimals);
317
+ const unscaled = unscale(scaled, scalingFactor);
313
318
  return {
314
319
  scaled,
315
320
  unscaled,
@@ -319,8 +324,8 @@ const wrapAmount = (scaled, decimals) => {
319
324
  };
320
325
  const wrapAmountUnscaled = (unscaled, decimals) => {
321
326
  unscaled = (0, big_js.default)(unscaled);
322
- const scalingFactor = BigInt((0, big_js.default)(10).pow(decimals).toFixed(0));
323
- const scaled = scaleAmount(unscaled, decimals);
327
+ const scalingFactor = (0, big_js.default)(10).pow(decimals);
328
+ const scaled = scale(unscaled, scalingFactor);
324
329
  const formatted = formatAmount(unscaled);
325
330
  return {
326
331
  scaled,
@@ -330,8 +335,8 @@ const wrapAmountUnscaled = (unscaled, decimals) => {
330
335
  };
331
336
  };
332
337
  const wrapPrice = (scaled, decimals0, decimals1) => {
333
- const scalingFactor = BigInt((0, big_js.default)(PRICE_PRECISION.toString()).pow(2).mul((0, big_js.default)(10).pow(decimals1)).div((0, big_js.default)(10).pow(decimals0)).toFixed(0));
334
- const unscaled = unscalePrice(scaled, decimals0, decimals1);
338
+ const scalingFactor = (0, big_js.default)(PRICE_PRECISION.toString()).mul((0, big_js.default)(10).pow(decimals1)).div((0, big_js.default)(10).pow(decimals0));
339
+ const unscaled = unscale(scaled, scalingFactor);
335
340
  return {
336
341
  scaled,
337
342
  unscaled,
@@ -341,8 +346,8 @@ const wrapPrice = (scaled, decimals0, decimals1) => {
341
346
  };
342
347
  const wrapPriceUnscaled = (unscaled, decimals0, decimals1) => {
343
348
  unscaled = (0, big_js.default)(unscaled);
344
- const scalingFactor = BigInt((0, big_js.default)(PRICE_PRECISION.toString()).pow(2).mul((0, big_js.default)(10).pow(decimals1)).div((0, big_js.default)(10).pow(decimals0)).toFixed(0));
345
- const scaled = scalePrice(unscaled, decimals0, decimals1);
349
+ const scalingFactor = (0, big_js.default)(PRICE_PRECISION.toString()).mul((0, big_js.default)(10).pow(decimals1)).div((0, big_js.default)(10).pow(decimals0));
350
+ const scaled = scale(unscaled, scalingFactor);
346
351
  const formatted = formatAmount(unscaled);
347
352
  return {
348
353
  scaled,
@@ -351,18 +356,6 @@ const wrapPriceUnscaled = (unscaled, decimals0, decimals1) => {
351
356
  formatted
352
357
  };
353
358
  };
354
- const unscaleAmount = (scaled, decimals) => {
355
- return new big_js.default(scaled.toString()).div(new big_js.default(10).pow(decimals));
356
- };
357
- const scaleAmount = (unscaled, decimals) => {
358
- return BigInt((0, big_js.default)(unscaled).mul(new big_js.default(10).pow(decimals)).round().toFixed(0));
359
- };
360
- const unscalePrice = (scaled, decimals0, decimals1) => {
361
- return new big_js.default(scaled.toString()).mul(new big_js.default(10).pow(decimals0)).div(new big_js.default(10).pow(decimals1)).div(PRICE_PRECISION.toString());
362
- };
363
- const scalePrice = (unscaled, decimals0, decimals1, precision = 18) => {
364
- return BigInt((0, big_js.default)(unscaled).mul(new big_js.default(10).pow(precision)).mul(new big_js.default(10).pow(decimals1)).div(new big_js.default(10).pow(decimals0)).round().toFixed(0));
365
- };
366
359
  const formatAmount = (value) => {
367
360
  if (!value) return "-";
368
361
  value = new big_js.default(value);
@@ -553,18 +546,6 @@ Object.defineProperty(exports, 'roundTick', {
553
546
  return roundTick;
554
547
  }
555
548
  });
556
- Object.defineProperty(exports, 'scaleAmount', {
557
- enumerable: true,
558
- get: function () {
559
- return scaleAmount;
560
- }
561
- });
562
- Object.defineProperty(exports, 'scalePrice', {
563
- enumerable: true,
564
- get: function () {
565
- return scalePrice;
566
- }
567
- });
568
549
  Object.defineProperty(exports, 'stateViews', {
569
550
  enumerable: true,
570
551
  get: function () {
@@ -619,18 +600,6 @@ Object.defineProperty(exports, 'token1ToToken0AtTick', {
619
600
  return token1ToToken0AtTick;
620
601
  }
621
602
  });
622
- Object.defineProperty(exports, 'unscaleAmount', {
623
- enumerable: true,
624
- get: function () {
625
- return unscaleAmount;
626
- }
627
- });
628
- Object.defineProperty(exports, 'unscalePrice', {
629
- enumerable: true,
630
- get: function () {
631
- return unscalePrice;
632
- }
633
- });
634
603
  Object.defineProperty(exports, 'wrapAmount', {
635
604
  enumerable: true,
636
605
  get: function () {
@@ -661,4 +630,4 @@ Object.defineProperty(exports, 'zero', {
661
630
  return zero;
662
631
  }
663
632
  });
664
- //# sourceMappingURL=optionUtils-DerSn_Ua.cjs.map
633
+ //# sourceMappingURL=optionUtils-CWVu69fU.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionUtils-CWVu69fU.cjs","names":["erc20Abi","optionsMarketAbi","statelessStateViewAbi","lensAbi","swappers: Record<number, Address>","baseSepolia","timelockLenses: Record<number, Address>","timelockFactories: Record<number, Address>","swapRouters: Record<number, Address>","stateViews: Record<number, Address>","filled: PriceDataPoint[]","lastKnownPrice: PriceDataPoint | null","Big","JSBI","TickMath","SqrtPriceMath","zero: Amount","Big"],"sources":["../src/lib/contracts.ts","../src/lib/price.ts","../src/lib/liquidityUtils.ts","../src/lib/numberUtils.ts","../src/lib/optionUtils.ts"],"sourcesContent":["import type {Address, Client, PublicClient, GetContractReturnType} from 'viem';\nimport {getContract} from 'viem';\nimport {baseSepolia} from 'viem/chains';\n\nimport {erc20Abi} from '~/abis/erc20';\nimport {lensAbi} from '~/abis/lens';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\nimport {statelessStateViewAbi} from '~/abis/statelessStateView';\n\nexport type TimelockMarket = GetContractReturnType<\n typeof optionsMarketAbi,\n Client,\n Address\n>;\nexport type TimelockLens = GetContractReturnType<\n typeof lensAbi,\n Client,\n Address\n>;\n\nexport type TimelockMarketData = Awaited<\n ReturnType<TimelockLens['read']['getMarketData']>\n> & {address: Address};\n\nexport const getErc20 = (address: Address, client: Client) =>\n getContract({abi: erc20Abi, address, client});\n\nexport const getTimelockMarket = (\n address: Address,\n client: Client,\n): TimelockMarket => {\n return getContract({abi: optionsMarketAbi, address, client});\n};\n\nexport const getStateView = async (client: PublicClient, address?: Address) => {\n if (!address) {\n const chainId = await client.getChainId();\n address = stateViews[chainId];\n if (!address) throw new Error(`No state view found for ${chainId}`);\n }\n return getContract({abi: statelessStateViewAbi, address, client});\n};\n\nexport const getTimelockLens = async (\n client: PublicClient,\n address?: Address,\n) => {\n if (!address) {\n const chainId = await client.getChainId();\n address = timelockLenses[chainId];\n if (!address) throw new Error(`No timelock lens found for ${chainId}`);\n }\n return getContract({abi: lensAbi, address, client});\n};\n\nexport const swappers: Record<number, Address> = {\n [baseSepolia.id]: '0xA16412db5c1Fc7e81574077913f5760d6c368Bd9',\n};\nexport const timelockLenses: Record<number, Address> = {\n [baseSepolia.id]: '0x3B8edE9d261505134A5D8D8C853e158066D13e6d',\n};\nexport const timelockFactories: Record<number, Address> = {\n [baseSepolia.id]: '0xea78d1869f78e301A18ab064b4287563974ab977',\n};\nexport const swapRouters: Record<number, Address> = {\n [baseSepolia.id]: '0x1a005FE3C05F076983F0d66a5F80CB9C61561a5b',\n};\nexport const stateViews: Record<number, Address> = {\n [baseSepolia.id]: '0x06AF24d39b8cb2100958EAAF279707Bec11160C8',\n};\n","import type {Address} from 'viem';\n\nexport interface PriceData {\n currentPrice: number;\n percentChange: number;\n poolAddr: string;\n timestamp: number;\n}\n\nexport interface PriceDataPoint {\n timestamp: Date;\n price: number;\n}\n\nexport type PriceResolution = '1m' | '5m' | '15m' | '1h' | '4h' | '1d';\n\nconst getResolutionConfig = (resolution: PriceResolution) => {\n const resolutionMap = {\n '1m': {timeframe: 'minute', aggregate: '1', seconds: 60},\n '5m': {timeframe: 'minute', aggregate: '5', seconds: 300},\n '15m': {timeframe: 'minute', aggregate: '15', seconds: 900},\n '1h': {timeframe: 'hour', aggregate: '1', seconds: 3600},\n '4h': {timeframe: 'hour', aggregate: '4', seconds: 14400},\n '1d': {timeframe: 'day', aggregate: '1', seconds: 86400},\n };\n return resolutionMap[resolution];\n};\n\nconst fillGaps = (\n prices: PriceDataPoint[],\n start: Date,\n end: Date,\n intervalMs: number,\n): PriceDataPoint[] => {\n if (prices.length === 0) return [];\n\n const priceMap = new Map<number, PriceDataPoint>();\n\n for (const point of prices) {\n const alignedTime =\n Math.floor(point.timestamp.getTime() / intervalMs) * intervalMs;\n priceMap.set(alignedTime, point);\n }\n const filled: PriceDataPoint[] = [];\n\n const actualStart =\n Math.floor(prices[0].timestamp.getTime() / intervalMs) * intervalMs;\n\n let currentTime = actualStart;\n let lastKnownPrice: PriceDataPoint | null = null;\n\n while (currentTime <= end.getTime()) {\n const existing = priceMap.get(currentTime);\n\n if (existing) {\n filled.push(existing);\n lastKnownPrice = existing;\n } else if (lastKnownPrice) {\n filled.push({\n timestamp: new Date(currentTime),\n price: lastKnownPrice.price,\n });\n }\n currentTime += intervalMs;\n }\n return filled;\n};\n\nexport const getPriceHistory = async (\n pool: Address,\n token: 0 | 1,\n resolution: PriceResolution,\n start: Date,\n end: Date,\n): Promise<PriceDataPoint[]> => {\n const network = 'monad-testnet';\n const {timeframe, aggregate, seconds} = getResolutionConfig(resolution);\n\n if (end.getTime() > Date.now()) {\n end = new Date(Date.now());\n }\n const startSecs = Math.floor(start.getTime() / 1000);\n const endSecs = Math.floor(end.getTime() / 1000);\n const diffSeconds = endSecs - startSecs;\n\n const limit = Math.min(Math.ceil(diffSeconds / seconds), 1000);\n\n const url =\n `https://api.geckoterminal.com/api/v2/networks/${network}/pools/${pool}/ohlcv/${timeframe}` +\n `?aggregate=${aggregate}` +\n `&limit=${limit}` +\n `&token=${token === 0 ? 'base' : 'quote'}` +\n '&currency=usd' +\n `&before_timestamp=${endSecs}`;\n\n const res = await fetch(url, {headers: {Accept: 'application/json'}});\n\n if (!res.ok) {\n throw new Error(`Failed to fetch price history: ${res.statusText}`);\n }\n const data = (await res.json()) as {\n data: {\n attributes: {\n ohlcv_list: [number, number, number, number, number, number][];\n };\n };\n };\n const prices: PriceDataPoint[] = data.data.attributes.ohlcv_list\n .map(([timestamp, , , , close]) => ({\n timestamp: new Date(timestamp * 1000),\n price: close,\n }))\n .sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());\n\n return fillGaps(prices, start, end, seconds * 1000).filter(\n point =>\n point.timestamp.getTime() / 1000 >= startSecs &&\n point.timestamp.getTime() / 1000 <= endSecs,\n );\n};\n\nexport const getCurrentPrice = async (\n poolAddr: Address,\n tokenAddr: Address,\n): Promise<PriceData> => {\n const network = 'monad-testnet';\n const geckoUrl = `https://api.geckoterminal.com/api/v2/networks/${network}/pools/${poolAddr.toLowerCase()}`;\n\n const response = await fetch(geckoUrl, {\n method: 'GET',\n headers: {Accept: 'application/json', 'User-Agent': 'TimelockTrade/1.0'},\n cache: 'no-store', // Keep no-store for real-time data\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch price data for pool ${poolAddr}`);\n }\n const data = (await response.json()) as {\n data: {\n attributes: {\n base_token_price_quote_token: string;\n quote_token_price_base_token: string;\n price_change_percentage: {h24: string};\n };\n relationships: {\n base_token: {data: {id: string; type: string}};\n quote_token: {data: {id: string; type: string}};\n };\n };\n };\n const pool = data.data.attributes;\n const relationships = data.data.relationships;\n\n const baseTokenAddr = relationships.base_token.data.id\n .split('_')[1]\n .toLowerCase();\n const quoteTokenAddr = relationships.quote_token.data.id\n .split('_')[1]\n .toLowerCase();\n\n const isBaseToken = tokenAddr.toLowerCase() === baseTokenAddr.toLowerCase();\n const isQuoteToken = tokenAddr.toLowerCase() === quoteTokenAddr.toLowerCase();\n\n if (!isBaseToken && !isQuoteToken) {\n throw new Error(`Token ${tokenAddr} is not part of pool ${poolAddr}`);\n }\n const price = isBaseToken\n ? pool.base_token_price_quote_token\n : pool.quote_token_price_base_token;\n const priceChange = pool.price_change_percentage?.h24;\n\n return {\n currentPrice: parseFloat(price || '0'),\n percentChange: parseFloat(priceChange || '0'),\n poolAddr: poolAddr,\n timestamp: Date.now(),\n };\n};\n","import {SqrtPriceMath, TickMath} from '@uniswap/v3-sdk';\nimport Big from 'big.js';\nimport JSBI from 'jsbi';\nimport type {Amount} from './numberUtils';\n\n// Set Big.js precision to handle 512-bit arithmetic\n// 155 decimal places provides ~515 bits of precision (log2(10^155) ≈ 515)\nBig.DP = 155; // Decimal places for division and sqrt operations\nBig.RM = Big.roundDown; // Round down to match Solidity's integer division behavior\n\nexport const PRICE_PRECISION = BigInt(2) ** BigInt(128);\n\nexport const getPriceAtSqrtPriceX96 = (sqrtPriceX96: bigint) => {\n const priceX192 = sqrtPriceX96 * sqrtPriceX96;\n const price = (priceX192 * PRICE_PRECISION) / BigInt(2 ** 192);\n\n return price;\n};\n\nexport const getSqrtPriceX96AtPrice = (price: bigint) => {\n const sqrtPriceX96 = JSBI.BigInt(\n new Big(price.toString())\n .mul(2 ** 192)\n .div(PRICE_PRECISION.toString())\n .sqrt()\n .toFixed(0),\n );\n return sqrtPriceX96;\n};\n\nexport const getPriceAtTick = (tick: number) => {\n const sqrtRatioX96 = BigInt(TickMath.getSqrtRatioAtTick(tick).toString());\n\n const priceX192 = sqrtRatioX96 * sqrtRatioX96;\n const price = (priceX192 * PRICE_PRECISION) / BigInt(2 ** 192);\n\n return price;\n};\n\nexport const getTickAtPrice = (price: bigint) => {\n const sqrtPriceX96 = getSqrtPriceX96AtPrice(price);\n return TickMath.getTickAtSqrtRatio(sqrtPriceX96);\n};\n\nexport const getNearestValidStrikeTick = (\n optionType: 'CALL' | 'PUT',\n optionAssetIsToken0: boolean,\n tickSpacing: number,\n currentTick: number,\n strikeTick?: number,\n) => {\n strikeTick = roundTick(strikeTick ?? currentTick, tickSpacing);\n\n if (\n (optionType === 'CALL' && optionAssetIsToken0) ||\n (optionType === 'PUT' && !optionAssetIsToken0)\n ) {\n strikeTick += tickSpacing;\n }\n return strikeTick;\n};\n\nexport const roundTick = (tick: number, spacing: number) => {\n const rem = tick % spacing;\n if (rem >= 0) return tick - rem;\n return tick - rem - spacing;\n};\n\nexport const token0ToToken1 = (amount0: bigint, price: bigint | Amount) => {\n price = typeof price === 'bigint' ? price : price.scaled;\n return (amount0 * price) / PRICE_PRECISION;\n};\nexport const token1ToToken0 = (amount1: bigint, price: bigint | Amount) => {\n price = typeof price === 'bigint' ? price : price.scaled;\n return (amount1 * PRICE_PRECISION) / price;\n};\n\nexport const token0ToToken1AtTick = (amount0: bigint, tick: number) => {\n const price = getPriceAtTick(tick);\n return (amount0 * price) / PRICE_PRECISION;\n};\nexport const token1ToToken0AtTick = (amount1: bigint, tick: number) => {\n const price = getPriceAtTick(tick);\n return (amount1 * PRICE_PRECISION) / price;\n};\n\nexport const getAmountsFromLiquidity = (\n tickLower: number,\n tickUpper: number,\n liquidity: bigint,\n currentTick: number,\n): [bigint, bigint] => {\n const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(currentTick);\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n const liquidityJSBI = JSBI.BigInt(liquidity.toString());\n\n let delta0 = JSBI.BigInt(0);\n let delta1 = JSBI.BigInt(0);\n\n if (currentTick < tickLower) {\n delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n } else if (currentTick >= tickUpper) {\n delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n } else {\n delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioX96,\n liquidityJSBI,\n false,\n );\n }\n return [BigInt(delta0.toString()), BigInt(delta1.toString())];\n};\n\nexport const liquiditiesToAmount0 = (\n liquidities: bigint[],\n startTick: number,\n tickSpacing: number,\n) => {\n let amount0 = BigInt(0);\n\n for (let i = 0; i < liquidities.length; i++) {\n const liquidity = liquidities[i];\n if (liquidity === BigInt(0)) continue;\n\n const tickLower = startTick + tickSpacing * i;\n const tickUpper = tickLower + tickSpacing;\n\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n const liquidityJSBI = JSBI.BigInt(liquidity.toString());\n\n const amount0Delta = SqrtPriceMath.getAmount0Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount0 += BigInt(amount0Delta.toString());\n }\n return amount0;\n};\n\nexport const liquiditiesToAmount1 = (\n liquidities: bigint[],\n startTick: number,\n tickSpacing: number,\n) => {\n let amount1 = BigInt(0);\n\n for (let i = 0; i < liquidities.length; i++) {\n const liquidity = liquidities[i];\n if (liquidity === BigInt(0)) continue;\n\n const tickLower = startTick + tickSpacing * i;\n const tickUpper = tickLower + tickSpacing;\n\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n const liquidityJSBI = JSBI.BigInt(liquidity.toString());\n\n const amount1Delta = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount1 += BigInt(amount1Delta.toString());\n }\n return amount1;\n};\n\nexport const liquiditiesToAmounts = (\n liquidities: bigint[],\n startTick: number,\n price: bigint,\n tickSpacing: number,\n) => {\n let amount0 = 0n;\n let amount1 = 0n;\n\n const sqrtRatioX96 = getSqrtPriceX96AtPrice(price);\n\n for (let i = 0; i < liquidities.length; i++) {\n const liquidity = liquidities[i];\n if (liquidity === BigInt(0)) continue;\n\n const tickLower = startTick + tickSpacing * i;\n const tickUpper = tickLower + tickSpacing;\n\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n const liquidityJSBI = JSBI.BigInt(liquidity.toString());\n\n if (JSBI.lessThanOrEqual(sqrtRatioX96, sqrtRatioAX96)) {\n const delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount0 += BigInt(delta0.toString());\n } else if (JSBI.lessThan(sqrtRatioX96, sqrtRatioBX96)) {\n const delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n const delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioX96,\n liquidityJSBI,\n false,\n );\n amount0 += BigInt(delta0.toString());\n amount1 += BigInt(delta1.toString());\n } else {\n const delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount1 += BigInt(delta1.toString());\n }\n }\n return [amount0, amount1];\n};\n","import Big from 'big.js';\nimport {PRICE_PRECISION} from './liquidityUtils';\n\nexport type Amount = {\n scaled: bigint;\n unscaled: Big;\n scalingFactor: Big;\n formatted: string;\n};\n\nexport const zero: Amount = {\n scaled: 0n,\n unscaled: Big(0),\n scalingFactor: Big(1e18),\n formatted: '0',\n};\n\nconst scale = (amount: Big | number | string, scalingFactor: Big): bigint => {\n return BigInt(Big(amount).mul(scalingFactor).toFixed(0));\n};\nconst unscale = (amount: bigint, scalingFactor: Big): Big => {\n return Big(amount.toString()).div(scalingFactor);\n};\n\nexport const wrapAmount = (scaled: bigint, decimals: number): Amount => {\n const scalingFactor = Big(10).pow(decimals);\n const unscaled = unscale(scaled, scalingFactor);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, scalingFactor, formatted};\n};\n\nexport const wrapAmountUnscaled = (\n unscaled: Big | number | string,\n decimals: number,\n): Amount => {\n unscaled = Big(unscaled);\n const scalingFactor = Big(10).pow(decimals);\n const scaled = scale(unscaled, scalingFactor);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, scalingFactor, formatted};\n};\n\nexport const wrapPrice = (\n scaled: bigint,\n decimals0: number,\n decimals1: number,\n): Amount => {\n const scalingFactor = Big(PRICE_PRECISION.toString())\n .mul(Big(10).pow(decimals1))\n .div(Big(10).pow(decimals0));\n\n const unscaled = unscale(scaled, scalingFactor);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, scalingFactor, formatted};\n};\n\nexport const wrapPriceUnscaled = (\n unscaled: Big | number | string,\n decimals0: number,\n decimals1: number,\n): Amount => {\n unscaled = Big(unscaled);\n\n const scalingFactor = Big(PRICE_PRECISION.toString())\n .mul(Big(10).pow(decimals1))\n .div(Big(10).pow(decimals0));\n\n const scaled = scale(unscaled, scalingFactor);\n const formatted = formatAmount(unscaled);\n\n return {scaled, unscaled, scalingFactor, formatted};\n};\n\nexport const formatAmount = (value?: Big | number | string) => {\n if (!value) return '-';\n value = new Big(value);\n\n if (value.gte(1e8)) return formatVagueAmount(value, 2);\n return formatCondensed(Big(value).toFixed(100));\n};\n\nexport const formatVagueAmount = (\n value: Big | number | bigint | string,\n fractionDigits = 2,\n) => {\n value = Number(value);\n if (value === 0) return '0';\n\n const formatted = value.toExponential(fractionDigits);\n return formatted.replace(/\\.?0+e/, 'e').replace(/e\\+/, 'e');\n};\n\nexport const formatCondensed = (\n input: string | number,\n decimals = 2,\n): string => {\n const str = (typeof input === 'number' ? input.toFixed(20) : input)\n .replace(/(\\.\\d*?)0+$/, '$1')\n .replace(/\\.$/, '');\n\n const [whole, decimal] = str.split('.');\n\n const formattedWhole = whole.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n if (!decimal) return formattedWhole;\n\n const leadingZeroMatch = decimal.match(/^(0{3,})/);\n\n if (leadingZeroMatch) {\n const zeroCount = leadingZeroMatch[1].length;\n const subscript = toSubscript(zeroCount.toString());\n const remaining = decimal.slice(zeroCount);\n\n const twoDigits = remaining.slice(0, decimals);\n return `${formattedWhole}.0${subscript}${twoDigits}`;\n } else {\n // No subscript needed, find first 2 significant digits\n const nonZeroStart = decimal.search(/[1-9]/); // Find first non-zero digit\n\n if (nonZeroStart === -1) {\n return formattedWhole; // All zeros\n }\n const significantPart = decimal.slice(nonZeroStart);\n const twoDigits = significantPart.slice(0, decimals);\n const leadingZeros = decimal.slice(0, nonZeroStart);\n\n return `${formattedWhole}.${leadingZeros}${twoDigits}`;\n }\n};\n\nconst toSubscript = (input: string) => {\n return input.replace(/[0-9]/g, m => '₀₁₂₃₄₅₆₇₈₉'[+m]);\n};\n\nexport const formatUSD = (value: Big | string | number): string => {\n return '$' + formatAmount(value);\n};\n","import type {OptionData} from '~/package/client';\nimport {\n getPriceAtTick,\n liquiditiesToAmounts,\n token0ToToken1,\n token1ToToken0,\n} from './liquidityUtils';\n\nexport const getPayoutAtTick = (\n option: OptionData,\n liquidities: bigint[],\n tick: number,\n tickSpacing: number,\n optionAssetIsToken0: boolean,\n) => {\n return getPayoutAtPrice(\n option,\n liquidities,\n getPriceAtTick(tick),\n tickSpacing,\n optionAssetIsToken0,\n );\n};\n\nexport const getPayoutAtPrice = (\n option: OptionData,\n liquidities: bigint[],\n price: bigint,\n tickSpacing: number,\n optionAssetIsToken0: boolean,\n) => {\n const [borrowedAmount0, borrowedAmount1] = liquiditiesToAmounts(\n liquidities,\n option.startTick,\n option.entryPrice,\n tickSpacing,\n );\n const [repayAmount0, repayAmount1] = liquiditiesToAmounts(\n liquidities,\n option.startTick,\n price,\n tickSpacing,\n );\n const totalAmount = optionAssetIsToken0\n ? borrowedAmount1 + token0ToToken1(borrowedAmount0, price)\n : borrowedAmount0 + token1ToToken0(borrowedAmount1, price);\n\n const repayAmount = optionAssetIsToken0\n ? repayAmount1 + token0ToToken1(repayAmount0, price)\n : repayAmount0 + token1ToToken0(repayAmount1, price);\n\n const delta = totalAmount - repayAmount;\n const payout = delta < 0n ? 0n : delta;\n\n return payout;\n};\n"],"mappings":"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"}
@@ -168,8 +168,7 @@ const getPriceAtTick = (tick) => {
168
168
  return sqrtRatioX96 * sqrtRatioX96 * PRICE_PRECISION / BigInt(2 ** 192);
169
169
  };
170
170
  const getTickAtPrice = (price) => {
171
- const priceX192 = price * BigInt(2 ** 192) / PRICE_PRECISION;
172
- const sqrtPriceX96 = JSBI.BigInt(new Big(priceX192.toString()).sqrt().toFixed(0));
171
+ const sqrtPriceX96 = getSqrtPriceX96AtPrice(price);
173
172
  return TickMath.getTickAtSqrtRatio(sqrtPriceX96);
174
173
  };
175
174
  const getNearestValidStrikeTick = (optionType, optionAssetIsToken0, tickSpacing, currentTick, strikeTick) => {
@@ -275,12 +274,18 @@ const liquiditiesToAmounts = (liquidities, startTick, price, tickSpacing) => {
275
274
  const zero = {
276
275
  scaled: 0n,
277
276
  unscaled: Big(0),
278
- scalingFactor: BigInt(0xde0b6b3a7640000),
277
+ scalingFactor: Big(0xde0b6b3a7640000),
279
278
  formatted: "0"
280
279
  };
280
+ const scale = (amount, scalingFactor) => {
281
+ return BigInt(Big(amount).mul(scalingFactor).toFixed(0));
282
+ };
283
+ const unscale = (amount, scalingFactor) => {
284
+ return Big(amount.toString()).div(scalingFactor);
285
+ };
281
286
  const wrapAmount = (scaled, decimals) => {
282
- const scalingFactor = BigInt(Big(10).pow(decimals).toFixed(0));
283
- const unscaled = unscaleAmount(scaled, decimals);
287
+ const scalingFactor = Big(10).pow(decimals);
288
+ const unscaled = unscale(scaled, scalingFactor);
284
289
  return {
285
290
  scaled,
286
291
  unscaled,
@@ -290,8 +295,8 @@ const wrapAmount = (scaled, decimals) => {
290
295
  };
291
296
  const wrapAmountUnscaled = (unscaled, decimals) => {
292
297
  unscaled = Big(unscaled);
293
- const scalingFactor = BigInt(Big(10).pow(decimals).toFixed(0));
294
- const scaled = scaleAmount(unscaled, decimals);
298
+ const scalingFactor = Big(10).pow(decimals);
299
+ const scaled = scale(unscaled, scalingFactor);
295
300
  const formatted = formatAmount(unscaled);
296
301
  return {
297
302
  scaled,
@@ -301,8 +306,8 @@ const wrapAmountUnscaled = (unscaled, decimals) => {
301
306
  };
302
307
  };
303
308
  const wrapPrice = (scaled, decimals0, decimals1) => {
304
- const scalingFactor = BigInt(Big(PRICE_PRECISION.toString()).pow(2).mul(Big(10).pow(decimals1)).div(Big(10).pow(decimals0)).toFixed(0));
305
- const unscaled = unscalePrice(scaled, decimals0, decimals1);
309
+ const scalingFactor = Big(PRICE_PRECISION.toString()).mul(Big(10).pow(decimals1)).div(Big(10).pow(decimals0));
310
+ const unscaled = unscale(scaled, scalingFactor);
306
311
  return {
307
312
  scaled,
308
313
  unscaled,
@@ -312,8 +317,8 @@ const wrapPrice = (scaled, decimals0, decimals1) => {
312
317
  };
313
318
  const wrapPriceUnscaled = (unscaled, decimals0, decimals1) => {
314
319
  unscaled = Big(unscaled);
315
- const scalingFactor = BigInt(Big(PRICE_PRECISION.toString()).pow(2).mul(Big(10).pow(decimals1)).div(Big(10).pow(decimals0)).toFixed(0));
316
- const scaled = scalePrice(unscaled, decimals0, decimals1);
320
+ const scalingFactor = Big(PRICE_PRECISION.toString()).mul(Big(10).pow(decimals1)).div(Big(10).pow(decimals0));
321
+ const scaled = scale(unscaled, scalingFactor);
317
322
  const formatted = formatAmount(unscaled);
318
323
  return {
319
324
  scaled,
@@ -322,18 +327,6 @@ const wrapPriceUnscaled = (unscaled, decimals0, decimals1) => {
322
327
  formatted
323
328
  };
324
329
  };
325
- const unscaleAmount = (scaled, decimals) => {
326
- return new Big(scaled.toString()).div(new Big(10).pow(decimals));
327
- };
328
- const scaleAmount = (unscaled, decimals) => {
329
- return BigInt(Big(unscaled).mul(new Big(10).pow(decimals)).round().toFixed(0));
330
- };
331
- const unscalePrice = (scaled, decimals0, decimals1) => {
332
- return new Big(scaled.toString()).mul(new Big(10).pow(decimals0)).div(new Big(10).pow(decimals1)).div(PRICE_PRECISION.toString());
333
- };
334
- const scalePrice = (unscaled, decimals0, decimals1, precision = 18) => {
335
- return BigInt(Big(unscaled).mul(new Big(10).pow(precision)).mul(new Big(10).pow(decimals1)).div(new Big(10).pow(decimals0)).round().toFixed(0));
336
- };
337
330
  const formatAmount = (value) => {
338
331
  if (!value) return "-";
339
332
  value = new Big(value);
@@ -380,5 +373,5 @@ const getPayoutAtPrice = (option, liquidities, price, tickSpacing, optionAssetIs
380
373
  };
381
374
 
382
375
  //#endregion
383
- export { token1ToToken0AtTick as A, timelockFactories as B, liquiditiesToAmount0 as C, token0ToToken1 as D, roundTick as E, getTimelockLens as F, getTimelockMarket as I, stateViews as L, getPriceHistory as M, getErc20 as N, token0ToToken1AtTick as O, getStateView as P, swapRouters as R, getTickAtPrice as S, liquiditiesToAmounts as T, timelockLenses as V, getAmountsFromLiquidity as _, formatUSD as a, getPriceAtTick as b, scalePrice as c, wrapAmount as d, wrapAmountUnscaled as f, PRICE_PRECISION as g, zero as h, formatCondensed as i, getCurrentPrice as j, token1ToToken0 as k, unscaleAmount as l, wrapPriceUnscaled as m, getPayoutAtTick as n, formatVagueAmount as o, wrapPrice as p, formatAmount as r, scaleAmount as s, getPayoutAtPrice as t, unscalePrice as u, getNearestValidStrikeTick as v, liquiditiesToAmount1 as w, getSqrtPriceX96AtPrice as x, getPriceAtSqrtPriceX96 as y, swappers as z };
384
- //# sourceMappingURL=optionUtils-CR8qGvTh.js.map
376
+ export { getStateView as A, token0ToToken1 as C, getCurrentPrice as D, token1ToToken0AtTick as E, swappers as F, timelockFactories as I, timelockLenses as L, getTimelockMarket as M, stateViews as N, getPriceHistory as O, swapRouters as P, roundTick as S, token1ToToken0 as T, getSqrtPriceX96AtPrice as _, formatUSD as a, liquiditiesToAmount1 as b, wrapAmountUnscaled as c, zero as d, PRICE_PRECISION as f, getPriceAtTick as g, getPriceAtSqrtPriceX96 as h, formatCondensed as i, getTimelockLens as j, getErc20 as k, wrapPrice as l, getNearestValidStrikeTick as m, getPayoutAtTick as n, formatVagueAmount as o, getAmountsFromLiquidity as p, formatAmount as r, wrapAmount as s, getPayoutAtPrice as t, wrapPriceUnscaled as u, getTickAtPrice as v, token0ToToken1AtTick as w, liquiditiesToAmounts as x, liquiditiesToAmount0 as y };
377
+ //# sourceMappingURL=optionUtils-CiNqlq4K.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionUtils-CiNqlq4K.js","names":["erc20Abi","swappers: Record<number, Address>","timelockLenses: Record<number, Address>","timelockFactories: Record<number, Address>","swapRouters: Record<number, Address>","stateViews: Record<number, Address>","filled: PriceDataPoint[]","lastKnownPrice: PriceDataPoint | null","zero: Amount"],"sources":["../src/lib/contracts.ts","../src/lib/price.ts","../src/lib/liquidityUtils.ts","../src/lib/numberUtils.ts","../src/lib/optionUtils.ts"],"sourcesContent":["import type {Address, Client, PublicClient, GetContractReturnType} from 'viem';\nimport {getContract} from 'viem';\nimport {baseSepolia} from 'viem/chains';\n\nimport {erc20Abi} from '~/abis/erc20';\nimport {lensAbi} from '~/abis/lens';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\nimport {statelessStateViewAbi} from '~/abis/statelessStateView';\n\nexport type TimelockMarket = GetContractReturnType<\n typeof optionsMarketAbi,\n Client,\n Address\n>;\nexport type TimelockLens = GetContractReturnType<\n typeof lensAbi,\n Client,\n Address\n>;\n\nexport type TimelockMarketData = Awaited<\n ReturnType<TimelockLens['read']['getMarketData']>\n> & {address: Address};\n\nexport const getErc20 = (address: Address, client: Client) =>\n getContract({abi: erc20Abi, address, client});\n\nexport const getTimelockMarket = (\n address: Address,\n client: Client,\n): TimelockMarket => {\n return getContract({abi: optionsMarketAbi, address, client});\n};\n\nexport const getStateView = async (client: PublicClient, address?: Address) => {\n if (!address) {\n const chainId = await client.getChainId();\n address = stateViews[chainId];\n if (!address) throw new Error(`No state view found for ${chainId}`);\n }\n return getContract({abi: statelessStateViewAbi, address, client});\n};\n\nexport const getTimelockLens = async (\n client: PublicClient,\n address?: Address,\n) => {\n if (!address) {\n const chainId = await client.getChainId();\n address = timelockLenses[chainId];\n if (!address) throw new Error(`No timelock lens found for ${chainId}`);\n }\n return getContract({abi: lensAbi, address, client});\n};\n\nexport const swappers: Record<number, Address> = {\n [baseSepolia.id]: '0xA16412db5c1Fc7e81574077913f5760d6c368Bd9',\n};\nexport const timelockLenses: Record<number, Address> = {\n [baseSepolia.id]: '0x3B8edE9d261505134A5D8D8C853e158066D13e6d',\n};\nexport const timelockFactories: Record<number, Address> = {\n [baseSepolia.id]: '0xea78d1869f78e301A18ab064b4287563974ab977',\n};\nexport const swapRouters: Record<number, Address> = {\n [baseSepolia.id]: '0x1a005FE3C05F076983F0d66a5F80CB9C61561a5b',\n};\nexport const stateViews: Record<number, Address> = {\n [baseSepolia.id]: '0x06AF24d39b8cb2100958EAAF279707Bec11160C8',\n};\n","import type {Address} from 'viem';\n\nexport interface PriceData {\n currentPrice: number;\n percentChange: number;\n poolAddr: string;\n timestamp: number;\n}\n\nexport interface PriceDataPoint {\n timestamp: Date;\n price: number;\n}\n\nexport type PriceResolution = '1m' | '5m' | '15m' | '1h' | '4h' | '1d';\n\nconst getResolutionConfig = (resolution: PriceResolution) => {\n const resolutionMap = {\n '1m': {timeframe: 'minute', aggregate: '1', seconds: 60},\n '5m': {timeframe: 'minute', aggregate: '5', seconds: 300},\n '15m': {timeframe: 'minute', aggregate: '15', seconds: 900},\n '1h': {timeframe: 'hour', aggregate: '1', seconds: 3600},\n '4h': {timeframe: 'hour', aggregate: '4', seconds: 14400},\n '1d': {timeframe: 'day', aggregate: '1', seconds: 86400},\n };\n return resolutionMap[resolution];\n};\n\nconst fillGaps = (\n prices: PriceDataPoint[],\n start: Date,\n end: Date,\n intervalMs: number,\n): PriceDataPoint[] => {\n if (prices.length === 0) return [];\n\n const priceMap = new Map<number, PriceDataPoint>();\n\n for (const point of prices) {\n const alignedTime =\n Math.floor(point.timestamp.getTime() / intervalMs) * intervalMs;\n priceMap.set(alignedTime, point);\n }\n const filled: PriceDataPoint[] = [];\n\n const actualStart =\n Math.floor(prices[0].timestamp.getTime() / intervalMs) * intervalMs;\n\n let currentTime = actualStart;\n let lastKnownPrice: PriceDataPoint | null = null;\n\n while (currentTime <= end.getTime()) {\n const existing = priceMap.get(currentTime);\n\n if (existing) {\n filled.push(existing);\n lastKnownPrice = existing;\n } else if (lastKnownPrice) {\n filled.push({\n timestamp: new Date(currentTime),\n price: lastKnownPrice.price,\n });\n }\n currentTime += intervalMs;\n }\n return filled;\n};\n\nexport const getPriceHistory = async (\n pool: Address,\n token: 0 | 1,\n resolution: PriceResolution,\n start: Date,\n end: Date,\n): Promise<PriceDataPoint[]> => {\n const network = 'monad-testnet';\n const {timeframe, aggregate, seconds} = getResolutionConfig(resolution);\n\n if (end.getTime() > Date.now()) {\n end = new Date(Date.now());\n }\n const startSecs = Math.floor(start.getTime() / 1000);\n const endSecs = Math.floor(end.getTime() / 1000);\n const diffSeconds = endSecs - startSecs;\n\n const limit = Math.min(Math.ceil(diffSeconds / seconds), 1000);\n\n const url =\n `https://api.geckoterminal.com/api/v2/networks/${network}/pools/${pool}/ohlcv/${timeframe}` +\n `?aggregate=${aggregate}` +\n `&limit=${limit}` +\n `&token=${token === 0 ? 'base' : 'quote'}` +\n '&currency=usd' +\n `&before_timestamp=${endSecs}`;\n\n const res = await fetch(url, {headers: {Accept: 'application/json'}});\n\n if (!res.ok) {\n throw new Error(`Failed to fetch price history: ${res.statusText}`);\n }\n const data = (await res.json()) as {\n data: {\n attributes: {\n ohlcv_list: [number, number, number, number, number, number][];\n };\n };\n };\n const prices: PriceDataPoint[] = data.data.attributes.ohlcv_list\n .map(([timestamp, , , , close]) => ({\n timestamp: new Date(timestamp * 1000),\n price: close,\n }))\n .sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());\n\n return fillGaps(prices, start, end, seconds * 1000).filter(\n point =>\n point.timestamp.getTime() / 1000 >= startSecs &&\n point.timestamp.getTime() / 1000 <= endSecs,\n );\n};\n\nexport const getCurrentPrice = async (\n poolAddr: Address,\n tokenAddr: Address,\n): Promise<PriceData> => {\n const network = 'monad-testnet';\n const geckoUrl = `https://api.geckoterminal.com/api/v2/networks/${network}/pools/${poolAddr.toLowerCase()}`;\n\n const response = await fetch(geckoUrl, {\n method: 'GET',\n headers: {Accept: 'application/json', 'User-Agent': 'TimelockTrade/1.0'},\n cache: 'no-store', // Keep no-store for real-time data\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch price data for pool ${poolAddr}`);\n }\n const data = (await response.json()) as {\n data: {\n attributes: {\n base_token_price_quote_token: string;\n quote_token_price_base_token: string;\n price_change_percentage: {h24: string};\n };\n relationships: {\n base_token: {data: {id: string; type: string}};\n quote_token: {data: {id: string; type: string}};\n };\n };\n };\n const pool = data.data.attributes;\n const relationships = data.data.relationships;\n\n const baseTokenAddr = relationships.base_token.data.id\n .split('_')[1]\n .toLowerCase();\n const quoteTokenAddr = relationships.quote_token.data.id\n .split('_')[1]\n .toLowerCase();\n\n const isBaseToken = tokenAddr.toLowerCase() === baseTokenAddr.toLowerCase();\n const isQuoteToken = tokenAddr.toLowerCase() === quoteTokenAddr.toLowerCase();\n\n if (!isBaseToken && !isQuoteToken) {\n throw new Error(`Token ${tokenAddr} is not part of pool ${poolAddr}`);\n }\n const price = isBaseToken\n ? pool.base_token_price_quote_token\n : pool.quote_token_price_base_token;\n const priceChange = pool.price_change_percentage?.h24;\n\n return {\n currentPrice: parseFloat(price || '0'),\n percentChange: parseFloat(priceChange || '0'),\n poolAddr: poolAddr,\n timestamp: Date.now(),\n };\n};\n","import {SqrtPriceMath, TickMath} from '@uniswap/v3-sdk';\nimport Big from 'big.js';\nimport JSBI from 'jsbi';\nimport type {Amount} from './numberUtils';\n\n// Set Big.js precision to handle 512-bit arithmetic\n// 155 decimal places provides ~515 bits of precision (log2(10^155) ≈ 515)\nBig.DP = 155; // Decimal places for division and sqrt operations\nBig.RM = Big.roundDown; // Round down to match Solidity's integer division behavior\n\nexport const PRICE_PRECISION = BigInt(2) ** BigInt(128);\n\nexport const getPriceAtSqrtPriceX96 = (sqrtPriceX96: bigint) => {\n const priceX192 = sqrtPriceX96 * sqrtPriceX96;\n const price = (priceX192 * PRICE_PRECISION) / BigInt(2 ** 192);\n\n return price;\n};\n\nexport const getSqrtPriceX96AtPrice = (price: bigint) => {\n const sqrtPriceX96 = JSBI.BigInt(\n new Big(price.toString())\n .mul(2 ** 192)\n .div(PRICE_PRECISION.toString())\n .sqrt()\n .toFixed(0),\n );\n return sqrtPriceX96;\n};\n\nexport const getPriceAtTick = (tick: number) => {\n const sqrtRatioX96 = BigInt(TickMath.getSqrtRatioAtTick(tick).toString());\n\n const priceX192 = sqrtRatioX96 * sqrtRatioX96;\n const price = (priceX192 * PRICE_PRECISION) / BigInt(2 ** 192);\n\n return price;\n};\n\nexport const getTickAtPrice = (price: bigint) => {\n const sqrtPriceX96 = getSqrtPriceX96AtPrice(price);\n return TickMath.getTickAtSqrtRatio(sqrtPriceX96);\n};\n\nexport const getNearestValidStrikeTick = (\n optionType: 'CALL' | 'PUT',\n optionAssetIsToken0: boolean,\n tickSpacing: number,\n currentTick: number,\n strikeTick?: number,\n) => {\n strikeTick = roundTick(strikeTick ?? currentTick, tickSpacing);\n\n if (\n (optionType === 'CALL' && optionAssetIsToken0) ||\n (optionType === 'PUT' && !optionAssetIsToken0)\n ) {\n strikeTick += tickSpacing;\n }\n return strikeTick;\n};\n\nexport const roundTick = (tick: number, spacing: number) => {\n const rem = tick % spacing;\n if (rem >= 0) return tick - rem;\n return tick - rem - spacing;\n};\n\nexport const token0ToToken1 = (amount0: bigint, price: bigint | Amount) => {\n price = typeof price === 'bigint' ? price : price.scaled;\n return (amount0 * price) / PRICE_PRECISION;\n};\nexport const token1ToToken0 = (amount1: bigint, price: bigint | Amount) => {\n price = typeof price === 'bigint' ? price : price.scaled;\n return (amount1 * PRICE_PRECISION) / price;\n};\n\nexport const token0ToToken1AtTick = (amount0: bigint, tick: number) => {\n const price = getPriceAtTick(tick);\n return (amount0 * price) / PRICE_PRECISION;\n};\nexport const token1ToToken0AtTick = (amount1: bigint, tick: number) => {\n const price = getPriceAtTick(tick);\n return (amount1 * PRICE_PRECISION) / price;\n};\n\nexport const getAmountsFromLiquidity = (\n tickLower: number,\n tickUpper: number,\n liquidity: bigint,\n currentTick: number,\n): [bigint, bigint] => {\n const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(currentTick);\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n const liquidityJSBI = JSBI.BigInt(liquidity.toString());\n\n let delta0 = JSBI.BigInt(0);\n let delta1 = JSBI.BigInt(0);\n\n if (currentTick < tickLower) {\n delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n } else if (currentTick >= tickUpper) {\n delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n } else {\n delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioX96,\n liquidityJSBI,\n false,\n );\n }\n return [BigInt(delta0.toString()), BigInt(delta1.toString())];\n};\n\nexport const liquiditiesToAmount0 = (\n liquidities: bigint[],\n startTick: number,\n tickSpacing: number,\n) => {\n let amount0 = BigInt(0);\n\n for (let i = 0; i < liquidities.length; i++) {\n const liquidity = liquidities[i];\n if (liquidity === BigInt(0)) continue;\n\n const tickLower = startTick + tickSpacing * i;\n const tickUpper = tickLower + tickSpacing;\n\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n const liquidityJSBI = JSBI.BigInt(liquidity.toString());\n\n const amount0Delta = SqrtPriceMath.getAmount0Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount0 += BigInt(amount0Delta.toString());\n }\n return amount0;\n};\n\nexport const liquiditiesToAmount1 = (\n liquidities: bigint[],\n startTick: number,\n tickSpacing: number,\n) => {\n let amount1 = BigInt(0);\n\n for (let i = 0; i < liquidities.length; i++) {\n const liquidity = liquidities[i];\n if (liquidity === BigInt(0)) continue;\n\n const tickLower = startTick + tickSpacing * i;\n const tickUpper = tickLower + tickSpacing;\n\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n const liquidityJSBI = JSBI.BigInt(liquidity.toString());\n\n const amount1Delta = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount1 += BigInt(amount1Delta.toString());\n }\n return amount1;\n};\n\nexport const liquiditiesToAmounts = (\n liquidities: bigint[],\n startTick: number,\n price: bigint,\n tickSpacing: number,\n) => {\n let amount0 = 0n;\n let amount1 = 0n;\n\n const sqrtRatioX96 = getSqrtPriceX96AtPrice(price);\n\n for (let i = 0; i < liquidities.length; i++) {\n const liquidity = liquidities[i];\n if (liquidity === BigInt(0)) continue;\n\n const tickLower = startTick + tickSpacing * i;\n const tickUpper = tickLower + tickSpacing;\n\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n const liquidityJSBI = JSBI.BigInt(liquidity.toString());\n\n if (JSBI.lessThanOrEqual(sqrtRatioX96, sqrtRatioAX96)) {\n const delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount0 += BigInt(delta0.toString());\n } else if (JSBI.lessThan(sqrtRatioX96, sqrtRatioBX96)) {\n const delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n const delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioX96,\n liquidityJSBI,\n false,\n );\n amount0 += BigInt(delta0.toString());\n amount1 += BigInt(delta1.toString());\n } else {\n const delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount1 += BigInt(delta1.toString());\n }\n }\n return [amount0, amount1];\n};\n","import Big from 'big.js';\nimport {PRICE_PRECISION} from './liquidityUtils';\n\nexport type Amount = {\n scaled: bigint;\n unscaled: Big;\n scalingFactor: Big;\n formatted: string;\n};\n\nexport const zero: Amount = {\n scaled: 0n,\n unscaled: Big(0),\n scalingFactor: Big(1e18),\n formatted: '0',\n};\n\nconst scale = (amount: Big | number | string, scalingFactor: Big): bigint => {\n return BigInt(Big(amount).mul(scalingFactor).toFixed(0));\n};\nconst unscale = (amount: bigint, scalingFactor: Big): Big => {\n return Big(amount.toString()).div(scalingFactor);\n};\n\nexport const wrapAmount = (scaled: bigint, decimals: number): Amount => {\n const scalingFactor = Big(10).pow(decimals);\n const unscaled = unscale(scaled, scalingFactor);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, scalingFactor, formatted};\n};\n\nexport const wrapAmountUnscaled = (\n unscaled: Big | number | string,\n decimals: number,\n): Amount => {\n unscaled = Big(unscaled);\n const scalingFactor = Big(10).pow(decimals);\n const scaled = scale(unscaled, scalingFactor);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, scalingFactor, formatted};\n};\n\nexport const wrapPrice = (\n scaled: bigint,\n decimals0: number,\n decimals1: number,\n): Amount => {\n const scalingFactor = Big(PRICE_PRECISION.toString())\n .mul(Big(10).pow(decimals1))\n .div(Big(10).pow(decimals0));\n\n const unscaled = unscale(scaled, scalingFactor);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, scalingFactor, formatted};\n};\n\nexport const wrapPriceUnscaled = (\n unscaled: Big | number | string,\n decimals0: number,\n decimals1: number,\n): Amount => {\n unscaled = Big(unscaled);\n\n const scalingFactor = Big(PRICE_PRECISION.toString())\n .mul(Big(10).pow(decimals1))\n .div(Big(10).pow(decimals0));\n\n const scaled = scale(unscaled, scalingFactor);\n const formatted = formatAmount(unscaled);\n\n return {scaled, unscaled, scalingFactor, formatted};\n};\n\nexport const formatAmount = (value?: Big | number | string) => {\n if (!value) return '-';\n value = new Big(value);\n\n if (value.gte(1e8)) return formatVagueAmount(value, 2);\n return formatCondensed(Big(value).toFixed(100));\n};\n\nexport const formatVagueAmount = (\n value: Big | number | bigint | string,\n fractionDigits = 2,\n) => {\n value = Number(value);\n if (value === 0) return '0';\n\n const formatted = value.toExponential(fractionDigits);\n return formatted.replace(/\\.?0+e/, 'e').replace(/e\\+/, 'e');\n};\n\nexport const formatCondensed = (\n input: string | number,\n decimals = 2,\n): string => {\n const str = (typeof input === 'number' ? input.toFixed(20) : input)\n .replace(/(\\.\\d*?)0+$/, '$1')\n .replace(/\\.$/, '');\n\n const [whole, decimal] = str.split('.');\n\n const formattedWhole = whole.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n if (!decimal) return formattedWhole;\n\n const leadingZeroMatch = decimal.match(/^(0{3,})/);\n\n if (leadingZeroMatch) {\n const zeroCount = leadingZeroMatch[1].length;\n const subscript = toSubscript(zeroCount.toString());\n const remaining = decimal.slice(zeroCount);\n\n const twoDigits = remaining.slice(0, decimals);\n return `${formattedWhole}.0${subscript}${twoDigits}`;\n } else {\n // No subscript needed, find first 2 significant digits\n const nonZeroStart = decimal.search(/[1-9]/); // Find first non-zero digit\n\n if (nonZeroStart === -1) {\n return formattedWhole; // All zeros\n }\n const significantPart = decimal.slice(nonZeroStart);\n const twoDigits = significantPart.slice(0, decimals);\n const leadingZeros = decimal.slice(0, nonZeroStart);\n\n return `${formattedWhole}.${leadingZeros}${twoDigits}`;\n }\n};\n\nconst toSubscript = (input: string) => {\n return input.replace(/[0-9]/g, m => '₀₁₂₃₄₅₆₇₈₉'[+m]);\n};\n\nexport const formatUSD = (value: Big | string | number): string => {\n return '$' + formatAmount(value);\n};\n","import type {OptionData} from '~/package/client';\nimport {\n getPriceAtTick,\n liquiditiesToAmounts,\n token0ToToken1,\n token1ToToken0,\n} from './liquidityUtils';\n\nexport const getPayoutAtTick = (\n option: OptionData,\n liquidities: bigint[],\n tick: number,\n tickSpacing: number,\n optionAssetIsToken0: boolean,\n) => {\n return getPayoutAtPrice(\n option,\n liquidities,\n getPriceAtTick(tick),\n tickSpacing,\n optionAssetIsToken0,\n );\n};\n\nexport const getPayoutAtPrice = (\n option: OptionData,\n liquidities: bigint[],\n price: bigint,\n tickSpacing: number,\n optionAssetIsToken0: boolean,\n) => {\n const [borrowedAmount0, borrowedAmount1] = liquiditiesToAmounts(\n liquidities,\n option.startTick,\n option.entryPrice,\n tickSpacing,\n );\n const [repayAmount0, repayAmount1] = liquiditiesToAmounts(\n liquidities,\n option.startTick,\n price,\n tickSpacing,\n );\n const totalAmount = optionAssetIsToken0\n ? borrowedAmount1 + token0ToToken1(borrowedAmount0, price)\n : borrowedAmount0 + token1ToToken0(borrowedAmount1, price);\n\n const repayAmount = optionAssetIsToken0\n ? repayAmount1 + token0ToToken1(repayAmount0, price)\n : repayAmount0 + token1ToToken0(repayAmount1, price);\n\n const delta = totalAmount - repayAmount;\n const payout = delta < 0n ? 0n : delta;\n\n return payout;\n};\n"],"mappings":"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"}
package/dist/package.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_optionUtils = require('./optionUtils-DerSn_Ua.cjs');
1
+ const require_optionUtils = require('./optionUtils-CWVu69fU.cjs');
2
2
 
3
3
  exports.PRICE_PRECISION = require_optionUtils.PRICE_PRECISION;
4
4
  exports.formatAmount = require_optionUtils.formatAmount;
@@ -23,8 +23,6 @@ exports.liquiditiesToAmount0 = require_optionUtils.liquiditiesToAmount0;
23
23
  exports.liquiditiesToAmount1 = require_optionUtils.liquiditiesToAmount1;
24
24
  exports.liquiditiesToAmounts = require_optionUtils.liquiditiesToAmounts;
25
25
  exports.roundTick = require_optionUtils.roundTick;
26
- exports.scaleAmount = require_optionUtils.scaleAmount;
27
- exports.scalePrice = require_optionUtils.scalePrice;
28
26
  exports.stateViews = require_optionUtils.stateViews;
29
27
  exports.swapRouters = require_optionUtils.swapRouters;
30
28
  exports.swappers = require_optionUtils.swappers;
@@ -34,8 +32,6 @@ exports.token0ToToken1 = require_optionUtils.token0ToToken1;
34
32
  exports.token0ToToken1AtTick = require_optionUtils.token0ToToken1AtTick;
35
33
  exports.token1ToToken0 = require_optionUtils.token1ToToken0;
36
34
  exports.token1ToToken0AtTick = require_optionUtils.token1ToToken0AtTick;
37
- exports.unscaleAmount = require_optionUtils.unscaleAmount;
38
- exports.unscalePrice = require_optionUtils.unscalePrice;
39
35
  exports.wrapAmount = require_optionUtils.wrapAmount;
40
36
  exports.wrapAmountUnscaled = require_optionUtils.wrapAmountUnscaled;
41
37
  exports.wrapPrice = require_optionUtils.wrapPrice;
@@ -1,2 +1,2 @@
1
- import { $ as PriceResolution, $t as swapRouters, At as scaleAmount, B as getPriceAtTick, Dt as formatCondensed, Et as formatAmount, F as getPayoutAtTick, Ft as wrapAmountUnscaled, G as liquiditiesToAmounts, Gt as TimelockLens, H as getTickAtPrice, I as PRICE_PRECISION, It as wrapPrice, J as token0ToToken1AtTick, Jt as getErc20, K as roundTick, Kt as TimelockMarket, L as getAmountsFromLiquidity, Lt as wrapPriceUnscaled, Mt as unscaleAmount, Nt as unscalePrice, Ot as formatUSD, P as getPayoutAtPrice, Pt as wrapAmount, Q as PriceDataPoint, Qt as stateViews, R as getNearestValidStrikeTick, Rt as zero, Tt as Amount, U as liquiditiesToAmount0, V as getSqrtPriceX96AtPrice, W as liquiditiesToAmount1, X as token1ToToken0AtTick, Xt as getTimelockLens, Y as token1ToToken0, Yt as getStateView, Z as PriceData, Zt as getTimelockMarket, en as swappers, et as getCurrentPrice, jt as scalePrice, kt as formatVagueAmount, nn as timelockLenses, q as token0ToToken1, qt as TimelockMarketData, tn as timelockFactories, tt as getPriceHistory, z as getPriceAtSqrtPriceX96 } from "./client-BLs46E49.cjs";
2
- export { Amount, PRICE_PRECISION, PriceData, PriceDataPoint, PriceResolution, TimelockLens, TimelockMarket, TimelockMarketData, formatAmount, formatCondensed, formatUSD, formatVagueAmount, getAmountsFromLiquidity, getCurrentPrice, getErc20, getNearestValidStrikeTick, getPayoutAtPrice, getPayoutAtTick, getPriceAtSqrtPriceX96, getPriceAtTick, getPriceHistory, getSqrtPriceX96AtPrice, getStateView, getTickAtPrice, getTimelockLens, getTimelockMarket, liquiditiesToAmount0, liquiditiesToAmount1, liquiditiesToAmounts, roundTick, scaleAmount, scalePrice, stateViews, swapRouters, swappers, timelockFactories, timelockLenses, token0ToToken1, token0ToToken1AtTick, token1ToToken0, token1ToToken0AtTick, unscaleAmount, unscalePrice, wrapAmount, wrapAmountUnscaled, wrapPrice, wrapPriceUnscaled, zero };
1
+ import { $ as PriceResolution, At as wrapAmount, B as getPriceAtTick, Dt as formatCondensed, Et as formatAmount, F as getPayoutAtTick, G as liquiditiesToAmounts, Gt as getStateView, H as getTickAtPrice, Ht as TimelockMarket, I as PRICE_PRECISION, J as token0ToToken1AtTick, Jt as stateViews, K as roundTick, Kt as getTimelockLens, L as getAmountsFromLiquidity, Mt as wrapPrice, Nt as wrapPriceUnscaled, Ot as formatUSD, P as getPayoutAtPrice, Pt as zero, Q as PriceDataPoint, Qt as timelockLenses, R as getNearestValidStrikeTick, Tt as Amount, U as liquiditiesToAmount0, Ut as TimelockMarketData, V as getSqrtPriceX96AtPrice, Vt as TimelockLens, W as liquiditiesToAmount1, Wt as getErc20, X as token1ToToken0AtTick, Xt as swappers, Y as token1ToToken0, Yt as swapRouters, Z as PriceData, Zt as timelockFactories, et as getCurrentPrice, jt as wrapAmountUnscaled, kt as formatVagueAmount, q as token0ToToken1, qt as getTimelockMarket, tt as getPriceHistory, z as getPriceAtSqrtPriceX96 } from "./client-BgYs-sEY.cjs";
2
+ export { Amount, PRICE_PRECISION, PriceData, PriceDataPoint, PriceResolution, TimelockLens, TimelockMarket, TimelockMarketData, formatAmount, formatCondensed, formatUSD, formatVagueAmount, getAmountsFromLiquidity, getCurrentPrice, getErc20, getNearestValidStrikeTick, getPayoutAtPrice, getPayoutAtTick, getPriceAtSqrtPriceX96, getPriceAtTick, getPriceHistory, getSqrtPriceX96AtPrice, getStateView, getTickAtPrice, getTimelockLens, getTimelockMarket, liquiditiesToAmount0, liquiditiesToAmount1, liquiditiesToAmounts, roundTick, stateViews, swapRouters, swappers, timelockFactories, timelockLenses, token0ToToken1, token0ToToken1AtTick, token1ToToken0, token1ToToken0AtTick, wrapAmount, wrapAmountUnscaled, wrapPrice, wrapPriceUnscaled, zero };
package/dist/package.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { $ as PriceResolution, $t as swapRouters, At as scaleAmount, B as getPriceAtTick, Dt as formatCondensed, Et as formatAmount, F as getPayoutAtTick, Ft as wrapAmountUnscaled, G as liquiditiesToAmounts, Gt as TimelockLens, H as getTickAtPrice, I as PRICE_PRECISION, It as wrapPrice, J as token0ToToken1AtTick, Jt as getErc20, K as roundTick, Kt as TimelockMarket, L as getAmountsFromLiquidity, Lt as wrapPriceUnscaled, Mt as unscaleAmount, Nt as unscalePrice, Ot as formatUSD, P as getPayoutAtPrice, Pt as wrapAmount, Q as PriceDataPoint, Qt as stateViews, R as getNearestValidStrikeTick, Rt as zero, Tt as Amount, U as liquiditiesToAmount0, V as getSqrtPriceX96AtPrice, W as liquiditiesToAmount1, X as token1ToToken0AtTick, Xt as getTimelockLens, Y as token1ToToken0, Yt as getStateView, Z as PriceData, Zt as getTimelockMarket, en as swappers, et as getCurrentPrice, jt as scalePrice, kt as formatVagueAmount, nn as timelockLenses, q as token0ToToken1, qt as TimelockMarketData, tn as timelockFactories, tt as getPriceHistory, z as getPriceAtSqrtPriceX96 } from "./client-3oF5mDiF.js";
2
- export { Amount, PRICE_PRECISION, PriceData, PriceDataPoint, PriceResolution, TimelockLens, TimelockMarket, TimelockMarketData, formatAmount, formatCondensed, formatUSD, formatVagueAmount, getAmountsFromLiquidity, getCurrentPrice, getErc20, getNearestValidStrikeTick, getPayoutAtPrice, getPayoutAtTick, getPriceAtSqrtPriceX96, getPriceAtTick, getPriceHistory, getSqrtPriceX96AtPrice, getStateView, getTickAtPrice, getTimelockLens, getTimelockMarket, liquiditiesToAmount0, liquiditiesToAmount1, liquiditiesToAmounts, roundTick, scaleAmount, scalePrice, stateViews, swapRouters, swappers, timelockFactories, timelockLenses, token0ToToken1, token0ToToken1AtTick, token1ToToken0, token1ToToken0AtTick, unscaleAmount, unscalePrice, wrapAmount, wrapAmountUnscaled, wrapPrice, wrapPriceUnscaled, zero };
1
+ import { $ as PriceResolution, At as wrapAmount, B as getPriceAtTick, Dt as formatCondensed, Et as formatAmount, F as getPayoutAtTick, G as liquiditiesToAmounts, Gt as getStateView, H as getTickAtPrice, Ht as TimelockMarket, I as PRICE_PRECISION, J as token0ToToken1AtTick, Jt as stateViews, K as roundTick, Kt as getTimelockLens, L as getAmountsFromLiquidity, Mt as wrapPrice, Nt as wrapPriceUnscaled, Ot as formatUSD, P as getPayoutAtPrice, Pt as zero, Q as PriceDataPoint, Qt as timelockLenses, R as getNearestValidStrikeTick, Tt as Amount, U as liquiditiesToAmount0, Ut as TimelockMarketData, V as getSqrtPriceX96AtPrice, Vt as TimelockLens, W as liquiditiesToAmount1, Wt as getErc20, X as token1ToToken0AtTick, Xt as swappers, Y as token1ToToken0, Yt as swapRouters, Z as PriceData, Zt as timelockFactories, et as getCurrentPrice, jt as wrapAmountUnscaled, kt as formatVagueAmount, q as token0ToToken1, qt as getTimelockMarket, tt as getPriceHistory, z as getPriceAtSqrtPriceX96 } from "./client-BZ7ORxpg.js";
2
+ export { Amount, PRICE_PRECISION, PriceData, PriceDataPoint, PriceResolution, TimelockLens, TimelockMarket, TimelockMarketData, formatAmount, formatCondensed, formatUSD, formatVagueAmount, getAmountsFromLiquidity, getCurrentPrice, getErc20, getNearestValidStrikeTick, getPayoutAtPrice, getPayoutAtTick, getPriceAtSqrtPriceX96, getPriceAtTick, getPriceHistory, getSqrtPriceX96AtPrice, getStateView, getTickAtPrice, getTimelockLens, getTimelockMarket, liquiditiesToAmount0, liquiditiesToAmount1, liquiditiesToAmounts, roundTick, stateViews, swapRouters, swappers, timelockFactories, timelockLenses, token0ToToken1, token0ToToken1AtTick, token1ToToken0, token1ToToken0AtTick, wrapAmount, wrapAmountUnscaled, wrapPrice, wrapPriceUnscaled, zero };
package/dist/package.js CHANGED
@@ -1,3 +1,3 @@
1
- import { A as token1ToToken0AtTick, B as timelockFactories, C as liquiditiesToAmount0, D as token0ToToken1, E as roundTick, F as getTimelockLens, I as getTimelockMarket, L as stateViews, M as getPriceHistory, N as getErc20, O as token0ToToken1AtTick, P as getStateView, R as swapRouters, S as getTickAtPrice, T as liquiditiesToAmounts, V as timelockLenses, _ as getAmountsFromLiquidity, a as formatUSD, b as getPriceAtTick, c as scalePrice, d as wrapAmount, f as wrapAmountUnscaled, g as PRICE_PRECISION, h as zero, i as formatCondensed, j as getCurrentPrice, k as token1ToToken0, l as unscaleAmount, m as wrapPriceUnscaled, n as getPayoutAtTick, o as formatVagueAmount, p as wrapPrice, r as formatAmount, s as scaleAmount, t as getPayoutAtPrice, u as unscalePrice, v as getNearestValidStrikeTick, w as liquiditiesToAmount1, x as getSqrtPriceX96AtPrice, y as getPriceAtSqrtPriceX96, z as swappers } from "./optionUtils-CR8qGvTh.js";
1
+ import { A as getStateView, C as token0ToToken1, D as getCurrentPrice, E as token1ToToken0AtTick, F as swappers, I as timelockFactories, L as timelockLenses, M as getTimelockMarket, N as stateViews, O as getPriceHistory, P as swapRouters, S as roundTick, T as token1ToToken0, _ as getSqrtPriceX96AtPrice, a as formatUSD, b as liquiditiesToAmount1, c as wrapAmountUnscaled, d as zero, f as PRICE_PRECISION, g as getPriceAtTick, h as getPriceAtSqrtPriceX96, i as formatCondensed, j as getTimelockLens, k as getErc20, l as wrapPrice, m as getNearestValidStrikeTick, n as getPayoutAtTick, o as formatVagueAmount, p as getAmountsFromLiquidity, r as formatAmount, s as wrapAmount, t as getPayoutAtPrice, u as wrapPriceUnscaled, v as getTickAtPrice, w as token0ToToken1AtTick, x as liquiditiesToAmounts, y as liquiditiesToAmount0 } from "./optionUtils-CiNqlq4K.js";
2
2
 
3
- export { PRICE_PRECISION, formatAmount, formatCondensed, formatUSD, formatVagueAmount, getAmountsFromLiquidity, getCurrentPrice, getErc20, getNearestValidStrikeTick, getPayoutAtPrice, getPayoutAtTick, getPriceAtSqrtPriceX96, getPriceAtTick, getPriceHistory, getSqrtPriceX96AtPrice, getStateView, getTickAtPrice, getTimelockLens, getTimelockMarket, liquiditiesToAmount0, liquiditiesToAmount1, liquiditiesToAmounts, roundTick, scaleAmount, scalePrice, stateViews, swapRouters, swappers, timelockFactories, timelockLenses, token0ToToken1, token0ToToken1AtTick, token1ToToken0, token1ToToken0AtTick, unscaleAmount, unscalePrice, wrapAmount, wrapAmountUnscaled, wrapPrice, wrapPriceUnscaled, zero };
3
+ export { PRICE_PRECISION, formatAmount, formatCondensed, formatUSD, formatVagueAmount, getAmountsFromLiquidity, getCurrentPrice, getErc20, getNearestValidStrikeTick, getPayoutAtPrice, getPayoutAtTick, getPriceAtSqrtPriceX96, getPriceAtTick, getPriceHistory, getSqrtPriceX96AtPrice, getStateView, getTickAtPrice, getTimelockLens, getTimelockMarket, liquiditiesToAmount0, liquiditiesToAmount1, liquiditiesToAmounts, roundTick, stateViews, swapRouters, swappers, timelockFactories, timelockLenses, token0ToToken1, token0ToToken1AtTick, token1ToToken0, token1ToToken0AtTick, wrapAmount, wrapAmountUnscaled, wrapPrice, wrapPriceUnscaled, zero };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "timelock-sdk",
3
- "version": "0.0.196",
3
+ "version": "0.0.197",
4
4
  "author": "",
5
5
  "main": "./dist/package.cjs",
6
6
  "module": "./dist/package.js",
@@ -1 +0,0 @@
1
- {"version":3,"file":"optionUtils-CR8qGvTh.js","names":["erc20Abi","swappers: Record<number, Address>","timelockLenses: Record<number, Address>","timelockFactories: Record<number, Address>","swapRouters: Record<number, Address>","stateViews: Record<number, Address>","filled: PriceDataPoint[]","lastKnownPrice: PriceDataPoint | null","zero: Amount"],"sources":["../src/lib/contracts.ts","../src/lib/price.ts","../src/lib/liquidityUtils.ts","../src/lib/numberUtils.ts","../src/lib/optionUtils.ts"],"sourcesContent":["import type {Address, Client, PublicClient, GetContractReturnType} from 'viem';\nimport {getContract} from 'viem';\nimport {baseSepolia} from 'viem/chains';\n\nimport {erc20Abi} from '~/abis/erc20';\nimport {lensAbi} from '~/abis/lens';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\nimport {statelessStateViewAbi} from '~/abis/statelessStateView';\n\nexport type TimelockMarket = GetContractReturnType<\n typeof optionsMarketAbi,\n Client,\n Address\n>;\nexport type TimelockLens = GetContractReturnType<\n typeof lensAbi,\n Client,\n Address\n>;\n\nexport type TimelockMarketData = Awaited<\n ReturnType<TimelockLens['read']['getMarketData']>\n> & {address: Address};\n\nexport const getErc20 = (address: Address, client: Client) =>\n getContract({abi: erc20Abi, address, client});\n\nexport const getTimelockMarket = (\n address: Address,\n client: Client,\n): TimelockMarket => {\n return getContract({abi: optionsMarketAbi, address, client});\n};\n\nexport const getStateView = async (client: PublicClient, address?: Address) => {\n if (!address) {\n const chainId = await client.getChainId();\n address = stateViews[chainId];\n if (!address) throw new Error(`No state view found for ${chainId}`);\n }\n return getContract({abi: statelessStateViewAbi, address, client});\n};\n\nexport const getTimelockLens = async (\n client: PublicClient,\n address?: Address,\n) => {\n if (!address) {\n const chainId = await client.getChainId();\n address = timelockLenses[chainId];\n if (!address) throw new Error(`No timelock lens found for ${chainId}`);\n }\n return getContract({abi: lensAbi, address, client});\n};\n\nexport const swappers: Record<number, Address> = {\n [baseSepolia.id]: '0xA16412db5c1Fc7e81574077913f5760d6c368Bd9',\n};\nexport const timelockLenses: Record<number, Address> = {\n [baseSepolia.id]: '0x3B8edE9d261505134A5D8D8C853e158066D13e6d',\n};\nexport const timelockFactories: Record<number, Address> = {\n [baseSepolia.id]: '0xea78d1869f78e301A18ab064b4287563974ab977',\n};\nexport const swapRouters: Record<number, Address> = {\n [baseSepolia.id]: '0x1a005FE3C05F076983F0d66a5F80CB9C61561a5b',\n};\nexport const stateViews: Record<number, Address> = {\n [baseSepolia.id]: '0x06AF24d39b8cb2100958EAAF279707Bec11160C8',\n};\n","import type {Address} from 'viem';\n\nexport interface PriceData {\n currentPrice: number;\n percentChange: number;\n poolAddr: string;\n timestamp: number;\n}\n\nexport interface PriceDataPoint {\n timestamp: Date;\n price: number;\n}\n\nexport type PriceResolution = '1m' | '5m' | '15m' | '1h' | '4h' | '1d';\n\nconst getResolutionConfig = (resolution: PriceResolution) => {\n const resolutionMap = {\n '1m': {timeframe: 'minute', aggregate: '1', seconds: 60},\n '5m': {timeframe: 'minute', aggregate: '5', seconds: 300},\n '15m': {timeframe: 'minute', aggregate: '15', seconds: 900},\n '1h': {timeframe: 'hour', aggregate: '1', seconds: 3600},\n '4h': {timeframe: 'hour', aggregate: '4', seconds: 14400},\n '1d': {timeframe: 'day', aggregate: '1', seconds: 86400},\n };\n return resolutionMap[resolution];\n};\n\nconst fillGaps = (\n prices: PriceDataPoint[],\n start: Date,\n end: Date,\n intervalMs: number,\n): PriceDataPoint[] => {\n if (prices.length === 0) return [];\n\n const priceMap = new Map<number, PriceDataPoint>();\n\n for (const point of prices) {\n const alignedTime =\n Math.floor(point.timestamp.getTime() / intervalMs) * intervalMs;\n priceMap.set(alignedTime, point);\n }\n const filled: PriceDataPoint[] = [];\n\n const actualStart =\n Math.floor(prices[0].timestamp.getTime() / intervalMs) * intervalMs;\n\n let currentTime = actualStart;\n let lastKnownPrice: PriceDataPoint | null = null;\n\n while (currentTime <= end.getTime()) {\n const existing = priceMap.get(currentTime);\n\n if (existing) {\n filled.push(existing);\n lastKnownPrice = existing;\n } else if (lastKnownPrice) {\n filled.push({\n timestamp: new Date(currentTime),\n price: lastKnownPrice.price,\n });\n }\n currentTime += intervalMs;\n }\n return filled;\n};\n\nexport const getPriceHistory = async (\n pool: Address,\n token: 0 | 1,\n resolution: PriceResolution,\n start: Date,\n end: Date,\n): Promise<PriceDataPoint[]> => {\n const network = 'monad-testnet';\n const {timeframe, aggregate, seconds} = getResolutionConfig(resolution);\n\n if (end.getTime() > Date.now()) {\n end = new Date(Date.now());\n }\n const startSecs = Math.floor(start.getTime() / 1000);\n const endSecs = Math.floor(end.getTime() / 1000);\n const diffSeconds = endSecs - startSecs;\n\n const limit = Math.min(Math.ceil(diffSeconds / seconds), 1000);\n\n const url =\n `https://api.geckoterminal.com/api/v2/networks/${network}/pools/${pool}/ohlcv/${timeframe}` +\n `?aggregate=${aggregate}` +\n `&limit=${limit}` +\n `&token=${token === 0 ? 'base' : 'quote'}` +\n '&currency=usd' +\n `&before_timestamp=${endSecs}`;\n\n const res = await fetch(url, {headers: {Accept: 'application/json'}});\n\n if (!res.ok) {\n throw new Error(`Failed to fetch price history: ${res.statusText}`);\n }\n const data = (await res.json()) as {\n data: {\n attributes: {\n ohlcv_list: [number, number, number, number, number, number][];\n };\n };\n };\n const prices: PriceDataPoint[] = data.data.attributes.ohlcv_list\n .map(([timestamp, , , , close]) => ({\n timestamp: new Date(timestamp * 1000),\n price: close,\n }))\n .sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());\n\n return fillGaps(prices, start, end, seconds * 1000).filter(\n point =>\n point.timestamp.getTime() / 1000 >= startSecs &&\n point.timestamp.getTime() / 1000 <= endSecs,\n );\n};\n\nexport const getCurrentPrice = async (\n poolAddr: Address,\n tokenAddr: Address,\n): Promise<PriceData> => {\n const network = 'monad-testnet';\n const geckoUrl = `https://api.geckoterminal.com/api/v2/networks/${network}/pools/${poolAddr.toLowerCase()}`;\n\n const response = await fetch(geckoUrl, {\n method: 'GET',\n headers: {Accept: 'application/json', 'User-Agent': 'TimelockTrade/1.0'},\n cache: 'no-store', // Keep no-store for real-time data\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch price data for pool ${poolAddr}`);\n }\n const data = (await response.json()) as {\n data: {\n attributes: {\n base_token_price_quote_token: string;\n quote_token_price_base_token: string;\n price_change_percentage: {h24: string};\n };\n relationships: {\n base_token: {data: {id: string; type: string}};\n quote_token: {data: {id: string; type: string}};\n };\n };\n };\n const pool = data.data.attributes;\n const relationships = data.data.relationships;\n\n const baseTokenAddr = relationships.base_token.data.id\n .split('_')[1]\n .toLowerCase();\n const quoteTokenAddr = relationships.quote_token.data.id\n .split('_')[1]\n .toLowerCase();\n\n const isBaseToken = tokenAddr.toLowerCase() === baseTokenAddr.toLowerCase();\n const isQuoteToken = tokenAddr.toLowerCase() === quoteTokenAddr.toLowerCase();\n\n if (!isBaseToken && !isQuoteToken) {\n throw new Error(`Token ${tokenAddr} is not part of pool ${poolAddr}`);\n }\n const price = isBaseToken\n ? pool.base_token_price_quote_token\n : pool.quote_token_price_base_token;\n const priceChange = pool.price_change_percentage?.h24;\n\n return {\n currentPrice: parseFloat(price || '0'),\n percentChange: parseFloat(priceChange || '0'),\n poolAddr: poolAddr,\n timestamp: Date.now(),\n };\n};\n","import {SqrtPriceMath, TickMath} from '@uniswap/v3-sdk';\nimport Big from 'big.js';\nimport JSBI from 'jsbi';\nimport type {Amount} from './numberUtils';\n\n// Set Big.js precision to handle 512-bit arithmetic\n// 155 decimal places provides ~515 bits of precision (log2(10^155) ≈ 515)\nBig.DP = 155; // Decimal places for division and sqrt operations\nBig.RM = Big.roundDown; // Round down to match Solidity's integer division behavior\n\nexport const PRICE_PRECISION = BigInt(2) ** BigInt(128);\n\nexport const getPriceAtSqrtPriceX96 = (sqrtPriceX96: bigint) => {\n const priceX192 = sqrtPriceX96 * sqrtPriceX96;\n const price = (priceX192 * PRICE_PRECISION) / BigInt(2 ** 192);\n\n return price;\n};\n\nexport const getSqrtPriceX96AtPrice = (price: bigint) => {\n const sqrtPriceX96 = JSBI.BigInt(\n new Big(price.toString())\n .mul(2 ** 192)\n .div(PRICE_PRECISION.toString())\n .sqrt()\n .toFixed(0),\n );\n return sqrtPriceX96;\n};\n\nexport const getPriceAtTick = (tick: number) => {\n const sqrtRatioX96 = BigInt(TickMath.getSqrtRatioAtTick(tick).toString());\n\n const priceX192 = sqrtRatioX96 * sqrtRatioX96;\n const price = (priceX192 * PRICE_PRECISION) / BigInt(2 ** 192);\n\n return price;\n};\n\nexport const getTickAtPrice = (price: bigint) => {\n const priceX192 = (price * BigInt(2 ** 192)) / PRICE_PRECISION;\n const sqrtPriceX96 = JSBI.BigInt(\n new Big(priceX192.toString()).sqrt().toFixed(0),\n );\n return TickMath.getTickAtSqrtRatio(sqrtPriceX96);\n};\n\nexport const getNearestValidStrikeTick = (\n optionType: 'CALL' | 'PUT',\n optionAssetIsToken0: boolean,\n tickSpacing: number,\n currentTick: number,\n strikeTick?: number,\n) => {\n strikeTick = roundTick(strikeTick ?? currentTick, tickSpacing);\n\n if (\n (optionType === 'CALL' && optionAssetIsToken0) ||\n (optionType === 'PUT' && !optionAssetIsToken0)\n ) {\n strikeTick += tickSpacing;\n }\n return strikeTick;\n};\n\nexport const roundTick = (tick: number, spacing: number) => {\n const rem = tick % spacing;\n if (rem >= 0) return tick - rem;\n return tick - rem - spacing;\n};\n\nexport const token0ToToken1 = (amount0: bigint, price: bigint | Amount) => {\n price = typeof price === 'bigint' ? price : price.scaled;\n return (amount0 * price) / PRICE_PRECISION;\n};\nexport const token1ToToken0 = (amount1: bigint, price: bigint | Amount) => {\n price = typeof price === 'bigint' ? price : price.scaled;\n return (amount1 * PRICE_PRECISION) / price;\n};\n\nexport const token0ToToken1AtTick = (amount0: bigint, tick: number) => {\n const price = getPriceAtTick(tick);\n return (amount0 * price) / PRICE_PRECISION;\n};\nexport const token1ToToken0AtTick = (amount1: bigint, tick: number) => {\n const price = getPriceAtTick(tick);\n return (amount1 * PRICE_PRECISION) / price;\n};\n\nexport const getAmountsFromLiquidity = (\n tickLower: number,\n tickUpper: number,\n liquidity: bigint,\n currentTick: number,\n): [bigint, bigint] => {\n const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(currentTick);\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n const liquidityJSBI = JSBI.BigInt(liquidity.toString());\n\n let delta0 = JSBI.BigInt(0);\n let delta1 = JSBI.BigInt(0);\n\n if (currentTick < tickLower) {\n delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n } else if (currentTick >= tickUpper) {\n delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n } else {\n delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioX96,\n liquidityJSBI,\n false,\n );\n }\n return [BigInt(delta0.toString()), BigInt(delta1.toString())];\n};\n\nexport const liquiditiesToAmount0 = (\n liquidities: bigint[],\n startTick: number,\n tickSpacing: number,\n) => {\n let amount0 = BigInt(0);\n\n for (let i = 0; i < liquidities.length; i++) {\n const liquidity = liquidities[i];\n if (liquidity === BigInt(0)) continue;\n\n const tickLower = startTick + tickSpacing * i;\n const tickUpper = tickLower + tickSpacing;\n\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n const liquidityJSBI = JSBI.BigInt(liquidity.toString());\n\n const amount0Delta = SqrtPriceMath.getAmount0Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount0 += BigInt(amount0Delta.toString());\n }\n return amount0;\n};\n\nexport const liquiditiesToAmount1 = (\n liquidities: bigint[],\n startTick: number,\n tickSpacing: number,\n) => {\n let amount1 = BigInt(0);\n\n for (let i = 0; i < liquidities.length; i++) {\n const liquidity = liquidities[i];\n if (liquidity === BigInt(0)) continue;\n\n const tickLower = startTick + tickSpacing * i;\n const tickUpper = tickLower + tickSpacing;\n\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n const liquidityJSBI = JSBI.BigInt(liquidity.toString());\n\n const amount1Delta = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount1 += BigInt(amount1Delta.toString());\n }\n return amount1;\n};\n\nexport const liquiditiesToAmounts = (\n liquidities: bigint[],\n startTick: number,\n price: bigint,\n tickSpacing: number,\n) => {\n let amount0 = 0n;\n let amount1 = 0n;\n\n const sqrtRatioX96 = getSqrtPriceX96AtPrice(price);\n\n for (let i = 0; i < liquidities.length; i++) {\n const liquidity = liquidities[i];\n if (liquidity === BigInt(0)) continue;\n\n const tickLower = startTick + tickSpacing * i;\n const tickUpper = tickLower + tickSpacing;\n\n const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);\n const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);\n const liquidityJSBI = JSBI.BigInt(liquidity.toString());\n\n if (JSBI.lessThanOrEqual(sqrtRatioX96, sqrtRatioAX96)) {\n const delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount0 += BigInt(delta0.toString());\n } else if (JSBI.lessThan(sqrtRatioX96, sqrtRatioBX96)) {\n const delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n const delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioX96,\n liquidityJSBI,\n false,\n );\n amount0 += BigInt(delta0.toString());\n amount1 += BigInt(delta1.toString());\n } else {\n const delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount1 += BigInt(delta1.toString());\n }\n }\n return [amount0, amount1];\n};\n","import Big from 'big.js';\nimport {PRICE_PRECISION} from './liquidityUtils';\n\nexport type Amount = {\n scaled: bigint;\n unscaled: Big;\n scalingFactor: bigint;\n formatted: string;\n};\n\nexport const zero: Amount = {\n scaled: 0n,\n unscaled: Big(0),\n scalingFactor: BigInt(1e18),\n formatted: '0',\n};\n\nexport const wrapAmount = (scaled: bigint, decimals: number): Amount => {\n const scalingFactor = BigInt(Big(10).pow(decimals).toFixed(0));\n const unscaled = unscaleAmount(scaled, decimals);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, scalingFactor, formatted};\n};\n\nexport const wrapAmountUnscaled = (\n unscaled: Big | number | string,\n decimals: number,\n): Amount => {\n unscaled = Big(unscaled);\n const scalingFactor = BigInt(Big(10).pow(decimals).toFixed(0));\n const scaled = scaleAmount(unscaled, decimals);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, scalingFactor, formatted};\n};\n\nexport const wrapPrice = (\n scaled: bigint,\n decimals0: number,\n decimals1: number,\n): Amount => {\n const scalingFactor = BigInt(\n Big(PRICE_PRECISION.toString())\n .pow(2)\n .mul(Big(10).pow(decimals1))\n .div(Big(10).pow(decimals0))\n .toFixed(0),\n );\n const unscaled = unscalePrice(scaled, decimals0, decimals1);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, scalingFactor, formatted};\n};\n\nexport const wrapPriceUnscaled = (\n unscaled: Big | number | string,\n decimals0: number,\n decimals1: number,\n): Amount => {\n unscaled = Big(unscaled);\n const scalingFactor = BigInt(\n Big(PRICE_PRECISION.toString())\n .pow(2)\n .mul(Big(10).pow(decimals1))\n .div(Big(10).pow(decimals0))\n .toFixed(0),\n );\n const scaled = scalePrice(unscaled, decimals0, decimals1);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, scalingFactor, formatted};\n};\n\nexport const unscaleAmount = (scaled: bigint, decimals: number) => {\n return new Big(scaled.toString()).div(new Big(10).pow(decimals));\n};\n\nexport const scaleAmount = (\n unscaled: Big | number | string,\n decimals: number,\n) => {\n return BigInt(\n Big(unscaled).mul(new Big(10).pow(decimals)).round().toFixed(0),\n );\n};\n\nexport const unscalePrice = (\n scaled: bigint,\n decimals0: number,\n decimals1: number,\n) => {\n return new Big(scaled.toString())\n .mul(new Big(10).pow(decimals0))\n .div(new Big(10).pow(decimals1))\n .div(PRICE_PRECISION.toString());\n};\n\nexport const scalePrice = (\n unscaled: Big | number | string,\n decimals0: number,\n decimals1: number,\n precision = 18,\n) => {\n return BigInt(\n Big(unscaled)\n .mul(new Big(10).pow(precision))\n .mul(new Big(10).pow(decimals1))\n .div(new Big(10).pow(decimals0))\n .round()\n .toFixed(0),\n );\n};\n\nexport const formatAmount = (value?: Big | number | string) => {\n if (!value) return '-';\n value = new Big(value);\n\n if (value.gte(1e8)) return formatVagueAmount(value, 2);\n return formatCondensed(Big(value).toFixed(100));\n};\n\nexport const formatVagueAmount = (\n value: Big | number | bigint | string,\n fractionDigits = 2,\n) => {\n value = Number(value);\n if (value === 0) return '0';\n\n const formatted = value.toExponential(fractionDigits);\n return formatted.replace(/\\.?0+e/, 'e').replace(/e\\+/, 'e');\n};\n\nexport const formatCondensed = (\n input: string | number,\n decimals = 2,\n): string => {\n const str = (typeof input === 'number' ? input.toFixed(20) : input)\n .replace(/(\\.\\d*?)0+$/, '$1')\n .replace(/\\.$/, '');\n\n const [whole, decimal] = str.split('.');\n\n const formattedWhole = whole.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n if (!decimal) return formattedWhole;\n\n const leadingZeroMatch = decimal.match(/^(0{3,})/);\n\n if (leadingZeroMatch) {\n const zeroCount = leadingZeroMatch[1].length;\n const subscript = toSubscript(zeroCount.toString());\n const remaining = decimal.slice(zeroCount);\n\n const twoDigits = remaining.slice(0, decimals);\n return `${formattedWhole}.0${subscript}${twoDigits}`;\n } else {\n // No subscript needed, find first 2 significant digits\n const nonZeroStart = decimal.search(/[1-9]/); // Find first non-zero digit\n\n if (nonZeroStart === -1) {\n return formattedWhole; // All zeros\n }\n const significantPart = decimal.slice(nonZeroStart);\n const twoDigits = significantPart.slice(0, decimals);\n const leadingZeros = decimal.slice(0, nonZeroStart);\n\n return `${formattedWhole}.${leadingZeros}${twoDigits}`;\n }\n};\n\nconst toSubscript = (input: string) => {\n return input.replace(/[0-9]/g, m => '₀₁₂₃₄₅₆₇₈₉'[+m]);\n};\n\nexport const formatUSD = (value: Big | string | number): string => {\n return '$' + formatAmount(value);\n};\n","import type {OptionData} from '~/package/client';\nimport {\n getPriceAtTick,\n liquiditiesToAmounts,\n token0ToToken1,\n token1ToToken0,\n} from './liquidityUtils';\n\nexport const getPayoutAtTick = (\n option: OptionData,\n liquidities: bigint[],\n tick: number,\n tickSpacing: number,\n optionAssetIsToken0: boolean,\n) => {\n return getPayoutAtPrice(\n option,\n liquidities,\n getPriceAtTick(tick),\n tickSpacing,\n optionAssetIsToken0,\n );\n};\n\nexport const getPayoutAtPrice = (\n option: OptionData,\n liquidities: bigint[],\n price: bigint,\n tickSpacing: number,\n optionAssetIsToken0: boolean,\n) => {\n const [borrowedAmount0, borrowedAmount1] = liquiditiesToAmounts(\n liquidities,\n option.startTick,\n option.entryPrice,\n tickSpacing,\n );\n const [repayAmount0, repayAmount1] = liquiditiesToAmounts(\n liquidities,\n option.startTick,\n price,\n tickSpacing,\n );\n const totalAmount = optionAssetIsToken0\n ? borrowedAmount1 + token0ToToken1(borrowedAmount0, price)\n : borrowedAmount0 + token1ToToken0(borrowedAmount1, price);\n\n const repayAmount = optionAssetIsToken0\n ? repayAmount1 + token0ToToken1(repayAmount0, price)\n : repayAmount0 + token1ToToken0(repayAmount1, price);\n\n const delta = totalAmount - repayAmount;\n const payout = delta < 0n ? 0n : delta;\n\n return payout;\n};\n"],"mappings":"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"}