timelock-sdk 0.0.19 → 0.0.21

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.
Files changed (35) hide show
  1. package/dist/abis.cjs +9 -1
  2. package/dist/abis.d.cts +3 -2
  3. package/dist/abis.d.ts +3 -2
  4. package/dist/abis.js +4 -1
  5. package/dist/client.cjs +695 -4
  6. package/dist/client.cjs.map +1 -0
  7. package/dist/client.d.cts +431 -53
  8. package/dist/client.d.ts +391 -13
  9. package/dist/client.js +667 -4
  10. package/dist/client.js.map +1 -0
  11. package/dist/{index-DyZhOGnP.d.ts → index-B7b3c8cu.d.cts} +151 -94
  12. package/dist/{index-CnaCnYLR.d.cts → index-CRhFaRiq.d.ts} +60 -3
  13. package/dist/numberUtils-CAMznXR5.js +220 -0
  14. package/dist/numberUtils-CAMznXR5.js.map +1 -0
  15. package/dist/numberUtils-DOUvJfQD.cjs +427 -0
  16. package/dist/numberUtils-DOUvJfQD.cjs.map +1 -0
  17. package/dist/optionsMarket-Br-bjuSA.cjs +2407 -0
  18. package/dist/optionsMarket-Br-bjuSA.cjs.map +1 -0
  19. package/dist/optionsMarket-DyBxHplR.js +2383 -0
  20. package/dist/optionsMarket-DyBxHplR.js.map +1 -0
  21. package/dist/package.cjs +32 -1
  22. package/dist/package.d.cts +2 -2
  23. package/dist/package.d.ts +2 -2
  24. package/dist/package.js +4 -1
  25. package/dist/{uniswapMathLens-SWLgAikn.d.ts → uniswapMathLens-B1MIL2yT.d.cts} +6 -1
  26. package/dist/{uniswapMathLens-CsZDhwII.d.cts → uniswapMathLens-MrB_VfJB.d.ts} +6 -1
  27. package/dist/uniswapV3Pool-Copswrde.js +1119 -1
  28. package/dist/uniswapV3Pool-Copswrde.js.map +1 -0
  29. package/dist/uniswapV3Pool-D9Vqrkmz.cjs +1131 -1
  30. package/dist/uniswapV3Pool-D9Vqrkmz.cjs.map +1 -0
  31. package/package.json +1 -1
  32. package/dist/numberUtils-B7BwWYfb.cjs +0 -1
  33. package/dist/numberUtils-DP-pDRRs.js +0 -1
  34. package/dist/optionsMarket-BsJTpwtl.js +0 -1
  35. package/dist/optionsMarket-BsK9z8z4.cjs +0 -1
@@ -1,4 +1,4 @@
1
- import { lensAbi, optionsMarketAbi, uniswapMathLensAbi } from "./uniswapMathLens-CsZDhwII.cjs";
1
+ import { lensAbi, optionsMarketAbi, uniswapMathLensAbi } from "./uniswapMathLens-MrB_VfJB.js";
2
2
  import * as viem0 from "viem";
3
3
  import { Address, Client, GetContractReturnType, PublicClient } from "viem";
4
4
  import Big from "big.js";
@@ -23219,6 +23219,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
23219
23219
  readonly name: "tvl1";
23220
23220
  readonly type: "uint256";
23221
23221
  readonly internalType: "uint256";
23222
+ }, {
23223
+ readonly name: "blocksCount";
23224
+ readonly type: "uint256";
23225
+ readonly internalType: "uint256";
23222
23226
  }];
23223
23227
  readonly stateMutability: "view";
23224
23228
  }], "batchGetRefTick", readonly [`0x${string}`, readonly number[]]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<readonly number[]>;
@@ -23921,6 +23925,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
23921
23925
  readonly name: "tvl1";
23922
23926
  readonly type: "uint256";
23923
23927
  readonly internalType: "uint256";
23928
+ }, {
23929
+ readonly name: "blocksCount";
23930
+ readonly type: "uint256";
23931
+ readonly internalType: "uint256";
23924
23932
  }];
23925
23933
  readonly stateMutability: "view";
23926
23934
  }], "getAllBlocks", readonly [`0x${string}`]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<readonly {
@@ -24633,6 +24641,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
24633
24641
  readonly name: "tvl1";
24634
24642
  readonly type: "uint256";
24635
24643
  readonly internalType: "uint256";
24644
+ }, {
24645
+ readonly name: "blocksCount";
24646
+ readonly type: "uint256";
24647
+ readonly internalType: "uint256";
24636
24648
  }];
24637
24649
  readonly stateMutability: "view";
24638
24650
  }], "getExpiredOptions", readonly [`0x${string}`, bigint, bigint]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<readonly [readonly {
@@ -25354,6 +25366,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
25354
25366
  readonly name: "tvl1";
25355
25367
  readonly type: "uint256";
25356
25368
  readonly internalType: "uint256";
25369
+ }, {
25370
+ readonly name: "blocksCount";
25371
+ readonly type: "uint256";
25372
+ readonly internalType: "uint256";
25357
25373
  }];
25358
25374
  readonly stateMutability: "view";
25359
25375
  }], "getLiquidityAtTick", readonly [`0x${string}`, number]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<readonly [bigint, bigint]>;
@@ -26056,6 +26072,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
26056
26072
  readonly name: "tvl1";
26057
26073
  readonly type: "uint256";
26058
26074
  readonly internalType: "uint256";
26075
+ }, {
26076
+ readonly name: "blocksCount";
26077
+ readonly type: "uint256";
26078
+ readonly internalType: "uint256";
26059
26079
  }];
26060
26080
  readonly stateMutability: "view";
26061
26081
  }], "getMarketData", readonly [`0x${string}`]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<{
@@ -26771,6 +26791,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
26771
26791
  readonly name: "tvl1";
26772
26792
  readonly type: "uint256";
26773
26793
  readonly internalType: "uint256";
26794
+ }, {
26795
+ readonly name: "blocksCount";
26796
+ readonly type: "uint256";
26797
+ readonly internalType: "uint256";
26774
26798
  }];
26775
26799
  readonly stateMutability: "view";
26776
26800
  }], "getMaxPositionSize", readonly [`0x${string}`, number, number]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<readonly [bigint, bigint]>;
@@ -27473,6 +27497,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
27473
27497
  readonly name: "tvl1";
27474
27498
  readonly type: "uint256";
27475
27499
  readonly internalType: "uint256";
27500
+ }, {
27501
+ readonly name: "blocksCount";
27502
+ readonly type: "uint256";
27503
+ readonly internalType: "uint256";
27476
27504
  }];
27477
27505
  readonly stateMutability: "view";
27478
27506
  }], "getMaxPositionSizeAtCurrentTick", readonly [`0x${string}`, number]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<readonly [bigint, bigint]>;
@@ -28175,6 +28203,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
28175
28203
  readonly name: "tvl1";
28176
28204
  readonly type: "uint256";
28177
28205
  readonly internalType: "uint256";
28206
+ }, {
28207
+ readonly name: "blocksCount";
28208
+ readonly type: "uint256";
28209
+ readonly internalType: "uint256";
28178
28210
  }];
28179
28211
  readonly stateMutability: "view";
28180
28212
  }], "getOptionData", readonly [`0x${string}`, bigint]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<{
@@ -28896,6 +28928,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
28896
28928
  readonly name: "tvl1";
28897
28929
  readonly type: "uint256";
28898
28930
  readonly internalType: "uint256";
28931
+ }, {
28932
+ readonly name: "blocksCount";
28933
+ readonly type: "uint256";
28934
+ readonly internalType: "uint256";
28899
28935
  }];
28900
28936
  readonly stateMutability: "view";
28901
28937
  }], "getOptionsData", readonly [`0x${string}`, readonly bigint[]]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<readonly {
@@ -29617,6 +29653,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
29617
29653
  readonly name: "tvl1";
29618
29654
  readonly type: "uint256";
29619
29655
  readonly internalType: "uint256";
29656
+ }, {
29657
+ readonly name: "blocksCount";
29658
+ readonly type: "uint256";
29659
+ readonly internalType: "uint256";
29620
29660
  }];
29621
29661
  readonly stateMutability: "view";
29622
29662
  }], "getPoolData", readonly [`0x${string}`]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<{
@@ -30330,6 +30370,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
30330
30370
  readonly name: "tvl1";
30331
30371
  readonly type: "uint256";
30332
30372
  readonly internalType: "uint256";
30373
+ }, {
30374
+ readonly name: "blocksCount";
30375
+ readonly type: "uint256";
30376
+ readonly internalType: "uint256";
30333
30377
  }];
30334
30378
  readonly stateMutability: "view";
30335
30379
  }], "getRefTick", readonly [`0x${string}`, number]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<number>;
@@ -31032,6 +31076,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
31032
31076
  readonly name: "tvl1";
31033
31077
  readonly type: "uint256";
31034
31078
  readonly internalType: "uint256";
31079
+ }, {
31080
+ readonly name: "blocksCount";
31081
+ readonly type: "uint256";
31082
+ readonly internalType: "uint256";
31035
31083
  }];
31036
31084
  readonly stateMutability: "view";
31037
31085
  }], "getUserOptions", readonly [`0x${string}`, `0x${string}`, bigint, bigint]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<readonly [readonly {
@@ -31753,9 +31801,13 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
31753
31801
  readonly name: "tvl1";
31754
31802
  readonly type: "uint256";
31755
31803
  readonly internalType: "uint256";
31804
+ }, {
31805
+ readonly name: "blocksCount";
31806
+ readonly type: "uint256";
31807
+ readonly internalType: "uint256";
31756
31808
  }];
31757
31809
  readonly stateMutability: "view";
31758
- }], "getVaultTVL", readonly [`0x${string}`]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<readonly [bigint, bigint, bigint, bigint, bigint, bigint]>;
31810
+ }], "getVaultTVL", readonly [`0x${string}`]>, "address" | "abi" | "args" | "functionName">> | undefined) => Promise<readonly [bigint, bigint, bigint, bigint, bigint, bigint, bigint]>;
31759
31811
  };
31760
31812
  address: `0x${string}`;
31761
31813
  abi: readonly [{
@@ -32457,6 +32509,10 @@ declare const getTimelockLens: (client: Client | PublicClient) => {
32457
32509
  readonly name: "tvl1";
32458
32510
  readonly type: "uint256";
32459
32511
  readonly internalType: "uint256";
32512
+ }, {
32513
+ readonly name: "blocksCount";
32514
+ readonly type: "uint256";
32515
+ readonly internalType: "uint256";
32460
32516
  }];
32461
32517
  readonly stateMutability: "view";
32462
32518
  }];
@@ -32497,4 +32553,5 @@ declare const liquiditiesToAmount0: (liquidities: bigint[], startTick: number, t
32497
32553
  declare const liquiditiesToAmount1: (liquidities: bigint[], startTick: number, tickSpacing: number) => bigint;
32498
32554
  declare const liquiditiesToAmounts: (liquidities: bigint[], startTick: number, currentTick: number, tickSpacing: number) => bigint[];
32499
32555
  //#endregion
32500
- export { Amount, PRICE_PRECISION, TimelockLens, TimelockMarket, TimelockMarketData, UniswapMathLens, formatAmount, formatCondensed, formatUSD, formatVagueAmount, getErc20, getPriceAtTick, getTickAtPrice, getTimelockLens, getTimelockMarket, getUniswapMathLens, liquiditiesToAmount0, liquiditiesToAmount1, liquiditiesToAmounts, roundTickDown, roundTickUp, scaleAmount, scalePrice, timelockLenses, token0ToToken1, token1ToToken0, uniswapMathLenses, unscaleAmount, unscalePrice, wrapAmount, wrapAmountUnscaled, wrapPrice, wrapPriceUnscaled, zero };
32556
+ export { Amount, PRICE_PRECISION, TimelockLens, TimelockMarket, TimelockMarketData, UniswapMathLens, formatAmount, formatCondensed, formatUSD, formatVagueAmount, getErc20, getPriceAtTick, getTickAtPrice, getTimelockLens, getTimelockMarket, getUniswapMathLens, liquiditiesToAmount0, liquiditiesToAmount1, liquiditiesToAmounts, roundTickDown, roundTickUp, scaleAmount, scalePrice, timelockLenses, token0ToToken1, token1ToToken0, uniswapMathLenses, unscaleAmount, unscalePrice, wrapAmount, wrapAmountUnscaled, wrapPrice, wrapPriceUnscaled, zero };
32557
+ //# sourceMappingURL=index-CRhFaRiq.d.ts.map
@@ -0,0 +1,220 @@
1
+ import { erc20Abi as erc20Abi$1, lensAbi, optionsMarketAbi, uniswapMathLensAbi } from "./optionsMarket-DyBxHplR.js";
2
+ import { getContract } from "viem";
3
+ import { monadTestnet } from "viem/chains";
4
+ import { SqrtPriceMath, TickMath } from "@uniswap/v3-sdk";
5
+ import Big from "big.js";
6
+ import JSBI from "jsbi";
7
+
8
+ //#region src/lib/contracts.ts
9
+ const getErc20 = (address, client) => getContract({
10
+ abi: erc20Abi$1,
11
+ address,
12
+ client
13
+ });
14
+ const getTimelockMarket = (address, client) => {
15
+ return getContract({
16
+ abi: optionsMarketAbi,
17
+ address,
18
+ client
19
+ });
20
+ };
21
+ const getUniswapMathLens = (client) => getContract({
22
+ abi: uniswapMathLensAbi,
23
+ address: uniswapMathLenses[client.chain.id],
24
+ client
25
+ });
26
+ const getTimelockLens = (client) => getContract({
27
+ abi: lensAbi,
28
+ address: timelockLenses[client.chain.id],
29
+ client
30
+ });
31
+ const timelockLenses = { [monadTestnet.id]: "0xe9021c9130bE6651357E23b89EB1b69cbadB5Db7" };
32
+ const uniswapMathLenses = { [monadTestnet.id]: "0x4C8375D1F6D5F452e92e211C1D3E7a44F78dFc95" };
33
+
34
+ //#endregion
35
+ //#region src/lib/liquidityUtils.ts
36
+ const PRICE_PRECISION = BigInt(0xde0b6b3a7640000);
37
+ const getPriceAtTick = (tick) => {
38
+ const sqrtRatioX96 = BigInt(TickMath.getSqrtRatioAtTick(tick).toString());
39
+ return sqrtRatioX96 * sqrtRatioX96 * PRICE_PRECISION / BigInt(2 ** 192);
40
+ };
41
+ const getTickAtPrice = (price) => {
42
+ const priceX192 = price * BigInt(2 ** 192) / PRICE_PRECISION;
43
+ const sqrtPriceX96 = JSBI.BigInt(new Big(priceX192.toString()).sqrt().toFixed(0));
44
+ return TickMath.getTickAtSqrtRatio(sqrtPriceX96);
45
+ };
46
+ const roundTickDown = (tick, spacing) => {
47
+ const rem = tick % spacing;
48
+ if (rem >= 0) return tick - rem;
49
+ return tick - rem - spacing;
50
+ };
51
+ const roundTickUp = (tick, spacing) => {
52
+ const rem = tick % spacing;
53
+ if (rem === 0) return tick;
54
+ if (rem > 0) return tick - rem + spacing;
55
+ return tick - rem;
56
+ };
57
+ const token0ToToken1 = (amount0, tick) => {
58
+ return amount0 * getPriceAtTick(tick) / PRICE_PRECISION;
59
+ };
60
+ const token1ToToken0 = (amount1, tick) => {
61
+ const price = getPriceAtTick(tick);
62
+ return amount1 * PRICE_PRECISION / price;
63
+ };
64
+ const liquiditiesToAmount0 = (liquidities, startTick, tickSpacing) => {
65
+ let amount0 = BigInt(0);
66
+ for (let i = 0; i < liquidities.length; i++) {
67
+ const liquidity = liquidities[i];
68
+ if (liquidity === BigInt(0)) continue;
69
+ const tickLower = startTick + tickSpacing * i;
70
+ const tickUpper = tickLower + tickSpacing;
71
+ const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);
72
+ const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);
73
+ const liquidityJSBI = JSBI.BigInt(liquidity.toString());
74
+ const amount0Delta = SqrtPriceMath.getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, liquidityJSBI, false);
75
+ amount0 += BigInt(amount0Delta.toString());
76
+ }
77
+ return amount0;
78
+ };
79
+ const liquiditiesToAmount1 = (liquidities, startTick, tickSpacing) => {
80
+ let amount1 = BigInt(0);
81
+ for (let i = 0; i < liquidities.length; i++) {
82
+ const liquidity = liquidities[i];
83
+ if (liquidity === BigInt(0)) continue;
84
+ const tickLower = startTick + tickSpacing * i;
85
+ const tickUpper = tickLower + tickSpacing;
86
+ const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);
87
+ const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);
88
+ const liquidityJSBI = JSBI.BigInt(liquidity.toString());
89
+ const amount1Delta = SqrtPriceMath.getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, liquidityJSBI, false);
90
+ amount1 += BigInt(amount1Delta.toString());
91
+ }
92
+ return amount1;
93
+ };
94
+ const liquiditiesToAmounts = (liquidities, startTick, currentTick, tickSpacing) => {
95
+ let amount0 = 0n;
96
+ let amount1 = 0n;
97
+ const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(currentTick);
98
+ for (let i = 0; i < liquidities.length; i++) {
99
+ const liquidity = liquidities[i];
100
+ if (liquidity === BigInt(0)) continue;
101
+ const tickLower = startTick + tickSpacing * i;
102
+ const tickUpper = tickLower + tickSpacing;
103
+ const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);
104
+ const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);
105
+ const liquidityJSBI = JSBI.BigInt(liquidity.toString());
106
+ if (currentTick < tickLower) {
107
+ const delta0 = SqrtPriceMath.getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, liquidityJSBI, false);
108
+ amount0 += BigInt(delta0.toString());
109
+ } else if (currentTick >= tickUpper) {
110
+ const delta1 = SqrtPriceMath.getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, liquidityJSBI, false);
111
+ amount1 += BigInt(delta1.toString());
112
+ } else {
113
+ const delta0 = SqrtPriceMath.getAmount0Delta(sqrtRatioX96, sqrtRatioBX96, liquidityJSBI, false);
114
+ const delta1 = SqrtPriceMath.getAmount1Delta(sqrtRatioAX96, sqrtRatioX96, liquidityJSBI, false);
115
+ amount0 += BigInt(delta0.toString());
116
+ amount1 += BigInt(delta1.toString());
117
+ }
118
+ }
119
+ return [amount0, amount1];
120
+ };
121
+
122
+ //#endregion
123
+ //#region src/lib/numberUtils.ts
124
+ const zero = {
125
+ scaled: 0n,
126
+ unscaled: Big(0),
127
+ decimals: 18,
128
+ formatted: "0"
129
+ };
130
+ const wrapAmount = (scaled, decimals) => {
131
+ const unscaled = unscaleAmount(scaled, decimals);
132
+ return {
133
+ scaled,
134
+ unscaled,
135
+ decimals,
136
+ formatted: formatAmount(unscaled)
137
+ };
138
+ };
139
+ const wrapAmountUnscaled = (unscaled, decimals) => {
140
+ unscaled = Big(unscaled);
141
+ const scaled = scaleAmount(unscaled, decimals);
142
+ const formatted = formatAmount(unscaled);
143
+ return {
144
+ scaled,
145
+ unscaled,
146
+ decimals,
147
+ formatted
148
+ };
149
+ };
150
+ const wrapPrice = (scaled, decimals0, decimals1) => {
151
+ const unscaled = unscalePrice(scaled, decimals0, decimals1);
152
+ const formatted = formatAmount(unscaled);
153
+ return {
154
+ scaled,
155
+ unscaled,
156
+ decimals: 36 + decimals1 - decimals0,
157
+ formatted
158
+ };
159
+ };
160
+ const wrapPriceUnscaled = (unscaled, decimals0, decimals1) => {
161
+ unscaled = Big(unscaled);
162
+ const scaled = scalePrice(unscaled, decimals0, decimals1);
163
+ const formatted = formatAmount(unscaled);
164
+ return {
165
+ scaled,
166
+ unscaled,
167
+ decimals: 36 + decimals1 - decimals0,
168
+ formatted
169
+ };
170
+ };
171
+ const unscaleAmount = (scaled, decimals) => {
172
+ return new Big(scaled.toString()).div(new Big(10).pow(decimals));
173
+ };
174
+ const scaleAmount = (unscaled, decimals) => {
175
+ return BigInt(Big(unscaled).mul(new Big(10).pow(decimals)).round().toFixed(0));
176
+ };
177
+ const unscalePrice = (scaled, decimals0, decimals1, precision = 18) => {
178
+ return new Big(scaled.toString()).mul(new Big(10).pow(decimals0)).div(new Big(10).pow(decimals1)).div(new Big(10).pow(precision));
179
+ };
180
+ const scalePrice = (unscaled, decimals0, decimals1, precision = 18) => {
181
+ 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));
182
+ };
183
+ const formatAmount = (value) => {
184
+ if (value === void 0) return "-";
185
+ return formatCondensed(Big(value).toFixed(100));
186
+ };
187
+ const formatVagueAmount = (value) => {
188
+ value = Number(value);
189
+ if (value >= 0xe8d4a51000) return `${(value / 0xe8d4a51000).toFixed(2)}T`;
190
+ else if (value >= 1e9) return `${(value / 1e9).toFixed(2)}B`;
191
+ else if (value >= 1e6) return `${(value / 1e6).toFixed(2)}M`;
192
+ else if (value >= 1e3) return `${(value / 1e3).toFixed(2)}K`;
193
+ else if (value < 1) return value.toPrecision(2);
194
+ else return value.toFixed(2);
195
+ };
196
+ const formatCondensed = (input, decimals = 2) => {
197
+ const [whole, decimal] = (typeof input === "number" ? input.toFixed(20) : input).replace(/(\.\d*?)0+$/, "$1").replace(/\.$/, "").split(".");
198
+ const formattedWhole = whole.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
199
+ if (!decimal) return formattedWhole;
200
+ const leadingZeroMatch = decimal.match(/^(0{3,})/);
201
+ if (leadingZeroMatch) {
202
+ const zeroCount = leadingZeroMatch[1].length;
203
+ return `${formattedWhole}.0${toSubscript(zeroCount.toString())}${decimal.slice(zeroCount).slice(0, decimals)}`;
204
+ } else {
205
+ const nonZeroStart = decimal.search(/[1-9]/);
206
+ if (nonZeroStart === -1) return formattedWhole;
207
+ const twoDigits = decimal.slice(nonZeroStart).slice(0, decimals);
208
+ return `${formattedWhole}.${decimal.slice(0, nonZeroStart)}${twoDigits}`;
209
+ }
210
+ };
211
+ const toSubscript = (input) => {
212
+ return input.replace(/[0-9]/g, (m) => "₀₁₂₃₄₅₆₇₈₉"[+m]);
213
+ };
214
+ const formatUSD = (value) => {
215
+ return "$" + formatAmount(value);
216
+ };
217
+
218
+ //#endregion
219
+ export { PRICE_PRECISION, formatAmount, formatCondensed, formatUSD, formatVagueAmount, getErc20, getPriceAtTick, getTickAtPrice, getTimelockLens, getTimelockMarket, getUniswapMathLens, liquiditiesToAmount0, liquiditiesToAmount1, liquiditiesToAmounts, roundTickDown, roundTickUp, scaleAmount, scalePrice, timelockLenses, token0ToToken1, token1ToToken0, uniswapMathLenses, unscaleAmount, unscalePrice, wrapAmount, wrapAmountUnscaled, wrapPrice, wrapPriceUnscaled, zero };
220
+ //# sourceMappingURL=numberUtils-CAMznXR5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numberUtils-CAMznXR5.js","names":["erc20Abi","timelockLenses: Record<number, Address>","uniswapMathLenses: Record<number, Address>","zero: Amount"],"sources":["../src/lib/contracts.ts","../src/lib/liquidityUtils.ts","../src/lib/numberUtils.ts"],"sourcesContent":["import type {Address, Client, PublicClient, GetContractReturnType} from 'viem';\nimport {getContract} from 'viem';\nimport {monadTestnet} from 'viem/chains';\n\nimport {erc20Abi} from '~/abis/erc20';\nimport {lensAbi} from '~/abis/lens';\nimport {uniswapMathLensAbi} from '~/abis/uniswapMathLens';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\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>;\nexport type UniswapMathLens = GetContractReturnType<\n typeof uniswapMathLensAbi,\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 getUniswapMathLens = (client: Client | PublicClient) =>\n getContract({\n abi: uniswapMathLensAbi,\n address: uniswapMathLenses[client.chain!.id],\n client,\n });\n\nexport const getTimelockLens = (client: Client | PublicClient) =>\n getContract({\n abi: lensAbi,\n address: timelockLenses[client.chain!.id],\n client,\n });\n\nexport const timelockLenses: Record<number, Address> = {\n [monadTestnet.id]: '0xe9021c9130bE6651357E23b89EB1b69cbadB5Db7',\n};\nexport const uniswapMathLenses: Record<number, Address> = {\n [monadTestnet.id]: '0x4C8375D1F6D5F452e92e211C1D3E7a44F78dFc95',\n};\n","import {SqrtPriceMath, TickMath} from '@uniswap/v3-sdk';\nimport Big from 'big.js';\nimport JSBI from 'jsbi';\n\nexport const PRICE_PRECISION = BigInt(1e18);\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 roundTickDown = (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 roundTickUp = (tick: number, spacing: number) => {\n const rem = tick % spacing;\n if (rem === 0) return tick;\n if (rem > 0) return tick - rem + spacing;\n return tick - rem;\n};\n\nexport const token0ToToken1 = (amount0: bigint, tick: number) => {\n const price = getPriceAtTick(tick);\n return (amount0 * price) / PRICE_PRECISION;\n};\n\nexport const token1ToToken0 = (amount1: bigint, tick: number) => {\n const price = getPriceAtTick(tick);\n return (amount1 * PRICE_PRECISION) / price;\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 currentTick: number,\n tickSpacing: number,\n) => {\n let amount0 = 0n;\n let amount1 = 0n;\n\n const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(currentTick);\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 (currentTick < tickLower) {\n const delta0 = SqrtPriceMath.getAmount0Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount0 += BigInt(delta0.toString());\n } else if (currentTick >= tickUpper) {\n const delta1 = SqrtPriceMath.getAmount1Delta(\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityJSBI,\n false,\n );\n amount1 += BigInt(delta1.toString());\n } else {\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 }\n }\n return [amount0, amount1];\n};\n","import Big from 'big.js';\n\nexport type Amount = {\n scaled: bigint;\n unscaled: Big;\n decimals: number;\n formatted: string;\n};\n\nexport const zero: Amount = {\n scaled: 0n,\n unscaled: Big(0),\n decimals: 18,\n formatted: '0',\n};\n\nexport const wrapAmount = (scaled: bigint, decimals: number): Amount => {\n const unscaled = unscaleAmount(scaled, decimals);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, decimals, formatted};\n};\n\nexport const wrapAmountUnscaled = (\n unscaled: Big | number | string,\n decimals: number,\n): Amount => {\n unscaled = Big(unscaled);\n const scaled = scaleAmount(unscaled, decimals);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, decimals, formatted};\n};\n\nexport const wrapPrice = (\n scaled: bigint,\n decimals0: number,\n decimals1: number,\n): Amount => {\n const unscaled = unscalePrice(scaled, decimals0, decimals1);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, decimals: 36 + decimals1 - decimals0, 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 scaled = scalePrice(unscaled, decimals0, decimals1);\n const formatted = formatAmount(unscaled);\n return {scaled, unscaled, decimals: 36 + decimals1 - decimals0, 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 precision = 18,\n) => {\n return new Big(scaled.toString())\n .mul(new Big(10).pow(decimals0))\n .div(new Big(10).pow(decimals1))\n .div(new Big(10).pow(precision));\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 === undefined) return '-';\n // return value < 1 ? value.toPrecision(2) : value.toFixed(2);\n return formatCondensed(Big(value).toFixed(100));\n};\n\nexport const formatVagueAmount = (value: number | bigint) => {\n value = Number(value);\n\n if (value >= 1e12) {\n return `${(value / 1e12).toFixed(2)}T`;\n } else if (value >= 1e9) {\n return `${(value / 1e9).toFixed(2)}B`;\n } else if (value >= 1e6) {\n return `${(value / 1e6).toFixed(2)}M`;\n } else if (value >= 1000) {\n return `${(value / 1000).toFixed(2)}K`;\n } else if (value < 1) {\n return value.toPrecision(2);\n } else {\n return value.toFixed(2);\n }\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"],"mappings":"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"}