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.
- package/dist/abis.cjs +9 -1
- package/dist/abis.d.cts +3 -2
- package/dist/abis.d.ts +3 -2
- package/dist/abis.js +4 -1
- package/dist/client.cjs +695 -4
- package/dist/client.cjs.map +1 -0
- package/dist/client.d.cts +431 -53
- package/dist/client.d.ts +391 -13
- package/dist/client.js +667 -4
- package/dist/client.js.map +1 -0
- package/dist/{index-DyZhOGnP.d.ts → index-B7b3c8cu.d.cts} +151 -94
- package/dist/{index-CnaCnYLR.d.cts → index-CRhFaRiq.d.ts} +60 -3
- package/dist/numberUtils-CAMznXR5.js +220 -0
- package/dist/numberUtils-CAMznXR5.js.map +1 -0
- package/dist/numberUtils-DOUvJfQD.cjs +427 -0
- package/dist/numberUtils-DOUvJfQD.cjs.map +1 -0
- package/dist/optionsMarket-Br-bjuSA.cjs +2407 -0
- package/dist/optionsMarket-Br-bjuSA.cjs.map +1 -0
- package/dist/optionsMarket-DyBxHplR.js +2383 -0
- package/dist/optionsMarket-DyBxHplR.js.map +1 -0
- package/dist/package.cjs +32 -1
- package/dist/package.d.cts +2 -2
- package/dist/package.d.ts +2 -2
- package/dist/package.js +4 -1
- package/dist/{uniswapMathLens-SWLgAikn.d.ts → uniswapMathLens-B1MIL2yT.d.cts} +6 -1
- package/dist/{uniswapMathLens-CsZDhwII.d.cts → uniswapMathLens-MrB_VfJB.d.ts} +6 -1
- package/dist/uniswapV3Pool-Copswrde.js +1119 -1
- package/dist/uniswapV3Pool-Copswrde.js.map +1 -0
- package/dist/uniswapV3Pool-D9Vqrkmz.cjs +1131 -1
- package/dist/uniswapV3Pool-D9Vqrkmz.cjs.map +1 -0
- package/package.json +1 -1
- package/dist/numberUtils-B7BwWYfb.cjs +0 -1
- package/dist/numberUtils-DP-pDRRs.js +0 -1
- package/dist/optionsMarket-BsJTpwtl.js +0 -1
- package/dist/optionsMarket-BsK9z8z4.cjs +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { lensAbi, optionsMarketAbi, uniswapMathLensAbi } from "./uniswapMathLens-
|
|
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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"}
|