timelock-sdk 0.0.241 → 0.0.242

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
@@ -1303,10 +1303,10 @@ const calculateDisplayPnl = (option, poolPrice, optionAssetIsToken0, payoutAsset
1303
1303
  return require_numberUtils.wrapAmount(option.optionType === "CALL" ? delta : -delta, payoutAssetDecimals);
1304
1304
  };
1305
1305
  const useOptionPnl = (option) => {
1306
- const client = (0, wagmi.usePublicClient)();
1307
- const { poolManager, poolKey, optionAssetIsToken0, payoutAssetDecimals } = useMarketData(option === null || option === void 0 ? void 0 : option.marketAddr);
1308
- const { currentPrice: poolPrice } = useCurrentPrice(poolManager, poolKey);
1309
- const { tickSpacing } = usePoolData(poolManager, poolKey);
1306
+ const chainId = (0, wagmi.useChainId)();
1307
+ const { timelockLens } = useLens();
1308
+ const { vault, poolManager, poolKey, optionAssetIsToken0, payoutAssetDecimals } = useMarketData(option === null || option === void 0 ? void 0 : option.marketAddr);
1309
+ const { currentPrice: poolPrice, sqrtPriceX96 } = useCurrentPrice(poolManager, poolKey);
1310
1310
  const displayPnl = (0, react.useMemo)(() => {
1311
1311
  if (!option || !poolPrice || !payoutAssetDecimals || optionAssetIsToken0 === void 0) return void 0;
1312
1312
  return calculateDisplayPnl(option, poolPrice.scaled, optionAssetIsToken0, payoutAssetDecimals);
@@ -1316,49 +1316,47 @@ const useOptionPnl = (option) => {
1316
1316
  poolPrice,
1317
1317
  payoutAssetDecimals
1318
1318
  ]);
1319
- const canQueryPayout = !!client && !!poolManager && !!poolKey && !!tickSpacing && !!poolPrice && !!payoutAssetDecimals && optionAssetIsToken0 !== void 0;
1320
- const { data: unrealizedPayout } = (0, _tanstack_react_query.useQuery)({
1321
- queryKey: [
1322
- "unrealizedPayout",
1323
- (option === null || option === void 0 ? void 0 : option.id) || "-",
1324
- (poolPrice === null || poolPrice === void 0 ? void 0 : poolPrice.scaled.toString()) || "-"
1325
- ],
1326
- queryFn: async () => {
1327
- if (!option || !poolPrice || !payoutAssetDecimals || !tickSpacing) return;
1328
- const { optionType, marketAddr } = option;
1329
- const entryPrice = optionAssetIsToken0 ? option.entryPrice : require_numberUtils.PRICE_PRECISION ** 2n / option.entryPrice;
1330
- const [borrowed0, borrowed1] = require_numberUtils.liquiditiesToAmounts(option.liquiditiesCurrent, option.startTick, entryPrice, tickSpacing);
1331
- const [repay0, repay1] = require_numberUtils.liquiditiesToAmounts(option.liquiditiesCurrent, option.startTick, poolPrice.scaled, tickSpacing);
1332
- const isLong0 = optionAssetIsToken0 && optionType === "CALL" || !optionAssetIsToken0 && optionType === "PUT";
1333
- const borrowedLong = isLong0 ? borrowed0 : borrowed1;
1334
- const repayLong = isLong0 ? repay0 : repay1;
1335
- const excessLong = borrowedLong > repayLong ? borrowedLong - repayLong : 0n;
1336
- const neededShort = isLong0 ? repay1 : repay0;
1337
- if (neededShort === 0n || excessLong === 0n) return require_numberUtils.wrapAmount(0n, payoutAssetDecimals);
1338
- const quoter = await require_numberUtils.getQuoter(client);
1339
- const output0 = !optionAssetIsToken0;
1340
- let payout;
1341
- const isExactOutput = isLong0 && output0 || !isLong0 && !output0;
1342
- const params = {
1343
- poolKey,
1344
- zeroForOne: isLong0,
1345
- exactAmount: isExactOutput ? neededShort : excessLong,
1346
- hookData: "0x"
1347
- };
1348
- if (isExactOutput) {
1349
- const { result: [swappedLong] } = await quoter.simulate.quoteExactOutputSingle([poolManager, params], { account: marketAddr });
1350
- payout = excessLong > swappedLong ? excessLong - swappedLong : 0n;
1351
- } else {
1352
- const { result: [receviedShort] } = await quoter.simulate.quoteExactInputSingle([poolManager, params], { account: marketAddr });
1353
- payout = receviedShort > neededShort ? receviedShort - neededShort : 0n;
1354
- }
1355
- return require_numberUtils.wrapAmount(payout, payoutAssetDecimals);
1356
- },
1357
- enabled: canQueryPayout,
1358
- staleTime: 1e4
1319
+ const swapperData = (0, react.useMemo)(() => {
1320
+ if (!sqrtPriceX96) return void 0;
1321
+ return (0, viem.encodeAbiParameters)([
1322
+ { type: "uint160" },
1323
+ { type: "uint160" },
1324
+ { type: "uint256" }
1325
+ ], [
1326
+ sqrtPriceX96 * 9n / 10n,
1327
+ sqrtPriceX96 * 11n / 10n,
1328
+ BigInt(Math.floor(Date.now() / 1e3) + 600)
1329
+ ]);
1330
+ }, [sqrtPriceX96]);
1331
+ const { data: refTick } = (0, wagmi.useSimulateContract)({
1332
+ address: timelockLens === null || timelockLens === void 0 ? void 0 : timelockLens.address,
1333
+ abi: timelockLens === null || timelockLens === void 0 ? void 0 : timelockLens.abi,
1334
+ functionName: "getRefTick",
1335
+ args: vault && (option === null || option === void 0 ? void 0 : option.startTick) ? [vault, option.startTick] : void 0,
1336
+ query: { enabled: !!vault && !!(option === null || option === void 0 ? void 0 : option.startTick) && !!timelockLens }
1337
+ });
1338
+ const { data: simulateResult } = (0, wagmi.useSimulateContract)({
1339
+ address: option === null || option === void 0 ? void 0 : option.marketAddr,
1340
+ abi: require_stateView.optionsMarketAbi,
1341
+ functionName: "exerciseOption",
1342
+ args: option && swapperData && (refTick === null || refTick === void 0 ? void 0 : refTick.result) ? [
1343
+ option.optionId,
1344
+ option.liquiditiesCurrent,
1345
+ 0n,
1346
+ require_numberUtils.swappers[chainId],
1347
+ swapperData,
1348
+ refTick.result
1349
+ ] : void 0,
1350
+ query: {
1351
+ enabled: !!option && !!swapperData && !!(refTick === null || refTick === void 0 ? void 0 : refTick.result) && !!option.marketAddr,
1352
+ staleTime: 1e4
1353
+ }
1359
1354
  });
1360
1355
  return {
1361
- unrealizedPayout,
1356
+ unrealizedPayout: (0, react.useMemo)(() => {
1357
+ if (!(simulateResult === null || simulateResult === void 0 ? void 0 : simulateResult.result) || !payoutAssetDecimals) return void 0;
1358
+ return require_numberUtils.wrapAmount(simulateResult.result, payoutAssetDecimals);
1359
+ }, [simulateResult === null || simulateResult === void 0 ? void 0 : simulateResult.result, payoutAssetDecimals]),
1362
1360
  displayPnl
1363
1361
  };
1364
1362
  };