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
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
//#region rolldown:runtime
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
+
key = keys[i];
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
+
get: ((k) => from[k]).bind(null, key),
|
|
13
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
+
value: mod,
|
|
20
|
+
enumerable: true
|
|
21
|
+
}) : target, mod));
|
|
22
|
+
|
|
23
|
+
//#endregion
|
|
24
|
+
const require_optionsMarket = require('./optionsMarket-Br-bjuSA.cjs');
|
|
25
|
+
let viem = require("viem");
|
|
26
|
+
viem = __toESM(viem);
|
|
27
|
+
let viem_chains = require("viem/chains");
|
|
28
|
+
viem_chains = __toESM(viem_chains);
|
|
29
|
+
let __uniswap_v3_sdk = require("@uniswap/v3-sdk");
|
|
30
|
+
__uniswap_v3_sdk = __toESM(__uniswap_v3_sdk);
|
|
31
|
+
let big_js = require("big.js");
|
|
32
|
+
big_js = __toESM(big_js);
|
|
33
|
+
let jsbi = require("jsbi");
|
|
34
|
+
jsbi = __toESM(jsbi);
|
|
35
|
+
|
|
36
|
+
//#region src/lib/contracts.ts
|
|
37
|
+
const getErc20 = (address, client) => (0, viem.getContract)({
|
|
38
|
+
abi: require_optionsMarket.erc20Abi,
|
|
39
|
+
address,
|
|
40
|
+
client
|
|
41
|
+
});
|
|
42
|
+
const getTimelockMarket = (address, client) => {
|
|
43
|
+
return (0, viem.getContract)({
|
|
44
|
+
abi: require_optionsMarket.optionsMarketAbi,
|
|
45
|
+
address,
|
|
46
|
+
client
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
const getUniswapMathLens = (client) => (0, viem.getContract)({
|
|
50
|
+
abi: require_optionsMarket.uniswapMathLensAbi,
|
|
51
|
+
address: uniswapMathLenses[client.chain.id],
|
|
52
|
+
client
|
|
53
|
+
});
|
|
54
|
+
const getTimelockLens = (client) => (0, viem.getContract)({
|
|
55
|
+
abi: require_optionsMarket.lensAbi,
|
|
56
|
+
address: timelockLenses[client.chain.id],
|
|
57
|
+
client
|
|
58
|
+
});
|
|
59
|
+
const timelockLenses = { [viem_chains.monadTestnet.id]: "0xe9021c9130bE6651357E23b89EB1b69cbadB5Db7" };
|
|
60
|
+
const uniswapMathLenses = { [viem_chains.monadTestnet.id]: "0x4C8375D1F6D5F452e92e211C1D3E7a44F78dFc95" };
|
|
61
|
+
|
|
62
|
+
//#endregion
|
|
63
|
+
//#region src/lib/liquidityUtils.ts
|
|
64
|
+
const PRICE_PRECISION = BigInt(0xde0b6b3a7640000);
|
|
65
|
+
const getPriceAtTick = (tick) => {
|
|
66
|
+
const sqrtRatioX96 = BigInt(__uniswap_v3_sdk.TickMath.getSqrtRatioAtTick(tick).toString());
|
|
67
|
+
return sqrtRatioX96 * sqrtRatioX96 * PRICE_PRECISION / BigInt(2 ** 192);
|
|
68
|
+
};
|
|
69
|
+
const getTickAtPrice = (price) => {
|
|
70
|
+
const priceX192 = price * BigInt(2 ** 192) / PRICE_PRECISION;
|
|
71
|
+
const sqrtPriceX96 = jsbi.default.BigInt(new big_js.default(priceX192.toString()).sqrt().toFixed(0));
|
|
72
|
+
return __uniswap_v3_sdk.TickMath.getTickAtSqrtRatio(sqrtPriceX96);
|
|
73
|
+
};
|
|
74
|
+
const roundTickDown = (tick, spacing) => {
|
|
75
|
+
const rem = tick % spacing;
|
|
76
|
+
if (rem >= 0) return tick - rem;
|
|
77
|
+
return tick - rem - spacing;
|
|
78
|
+
};
|
|
79
|
+
const roundTickUp = (tick, spacing) => {
|
|
80
|
+
const rem = tick % spacing;
|
|
81
|
+
if (rem === 0) return tick;
|
|
82
|
+
if (rem > 0) return tick - rem + spacing;
|
|
83
|
+
return tick - rem;
|
|
84
|
+
};
|
|
85
|
+
const token0ToToken1 = (amount0, tick) => {
|
|
86
|
+
return amount0 * getPriceAtTick(tick) / PRICE_PRECISION;
|
|
87
|
+
};
|
|
88
|
+
const token1ToToken0 = (amount1, tick) => {
|
|
89
|
+
const price = getPriceAtTick(tick);
|
|
90
|
+
return amount1 * PRICE_PRECISION / price;
|
|
91
|
+
};
|
|
92
|
+
const liquiditiesToAmount0 = (liquidities, startTick, tickSpacing) => {
|
|
93
|
+
let amount0 = BigInt(0);
|
|
94
|
+
for (let i = 0; i < liquidities.length; i++) {
|
|
95
|
+
const liquidity = liquidities[i];
|
|
96
|
+
if (liquidity === BigInt(0)) continue;
|
|
97
|
+
const tickLower = startTick + tickSpacing * i;
|
|
98
|
+
const tickUpper = tickLower + tickSpacing;
|
|
99
|
+
const sqrtRatioAX96 = __uniswap_v3_sdk.TickMath.getSqrtRatioAtTick(tickLower);
|
|
100
|
+
const sqrtRatioBX96 = __uniswap_v3_sdk.TickMath.getSqrtRatioAtTick(tickUpper);
|
|
101
|
+
const liquidityJSBI = jsbi.default.BigInt(liquidity.toString());
|
|
102
|
+
const amount0Delta = __uniswap_v3_sdk.SqrtPriceMath.getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, liquidityJSBI, false);
|
|
103
|
+
amount0 += BigInt(amount0Delta.toString());
|
|
104
|
+
}
|
|
105
|
+
return amount0;
|
|
106
|
+
};
|
|
107
|
+
const liquiditiesToAmount1 = (liquidities, startTick, tickSpacing) => {
|
|
108
|
+
let amount1 = BigInt(0);
|
|
109
|
+
for (let i = 0; i < liquidities.length; i++) {
|
|
110
|
+
const liquidity = liquidities[i];
|
|
111
|
+
if (liquidity === BigInt(0)) continue;
|
|
112
|
+
const tickLower = startTick + tickSpacing * i;
|
|
113
|
+
const tickUpper = tickLower + tickSpacing;
|
|
114
|
+
const sqrtRatioAX96 = __uniswap_v3_sdk.TickMath.getSqrtRatioAtTick(tickLower);
|
|
115
|
+
const sqrtRatioBX96 = __uniswap_v3_sdk.TickMath.getSqrtRatioAtTick(tickUpper);
|
|
116
|
+
const liquidityJSBI = jsbi.default.BigInt(liquidity.toString());
|
|
117
|
+
const amount1Delta = __uniswap_v3_sdk.SqrtPriceMath.getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, liquidityJSBI, false);
|
|
118
|
+
amount1 += BigInt(amount1Delta.toString());
|
|
119
|
+
}
|
|
120
|
+
return amount1;
|
|
121
|
+
};
|
|
122
|
+
const liquiditiesToAmounts = (liquidities, startTick, currentTick, tickSpacing) => {
|
|
123
|
+
let amount0 = 0n;
|
|
124
|
+
let amount1 = 0n;
|
|
125
|
+
const sqrtRatioX96 = __uniswap_v3_sdk.TickMath.getSqrtRatioAtTick(currentTick);
|
|
126
|
+
for (let i = 0; i < liquidities.length; i++) {
|
|
127
|
+
const liquidity = liquidities[i];
|
|
128
|
+
if (liquidity === BigInt(0)) continue;
|
|
129
|
+
const tickLower = startTick + tickSpacing * i;
|
|
130
|
+
const tickUpper = tickLower + tickSpacing;
|
|
131
|
+
const sqrtRatioAX96 = __uniswap_v3_sdk.TickMath.getSqrtRatioAtTick(tickLower);
|
|
132
|
+
const sqrtRatioBX96 = __uniswap_v3_sdk.TickMath.getSqrtRatioAtTick(tickUpper);
|
|
133
|
+
const liquidityJSBI = jsbi.default.BigInt(liquidity.toString());
|
|
134
|
+
if (currentTick < tickLower) {
|
|
135
|
+
const delta0 = __uniswap_v3_sdk.SqrtPriceMath.getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, liquidityJSBI, false);
|
|
136
|
+
amount0 += BigInt(delta0.toString());
|
|
137
|
+
} else if (currentTick >= tickUpper) {
|
|
138
|
+
const delta1 = __uniswap_v3_sdk.SqrtPriceMath.getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, liquidityJSBI, false);
|
|
139
|
+
amount1 += BigInt(delta1.toString());
|
|
140
|
+
} else {
|
|
141
|
+
const delta0 = __uniswap_v3_sdk.SqrtPriceMath.getAmount0Delta(sqrtRatioX96, sqrtRatioBX96, liquidityJSBI, false);
|
|
142
|
+
const delta1 = __uniswap_v3_sdk.SqrtPriceMath.getAmount1Delta(sqrtRatioAX96, sqrtRatioX96, liquidityJSBI, false);
|
|
143
|
+
amount0 += BigInt(delta0.toString());
|
|
144
|
+
amount1 += BigInt(delta1.toString());
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return [amount0, amount1];
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
//#endregion
|
|
151
|
+
//#region src/lib/numberUtils.ts
|
|
152
|
+
const zero = {
|
|
153
|
+
scaled: 0n,
|
|
154
|
+
unscaled: (0, big_js.default)(0),
|
|
155
|
+
decimals: 18,
|
|
156
|
+
formatted: "0"
|
|
157
|
+
};
|
|
158
|
+
const wrapAmount = (scaled, decimals) => {
|
|
159
|
+
const unscaled = unscaleAmount(scaled, decimals);
|
|
160
|
+
return {
|
|
161
|
+
scaled,
|
|
162
|
+
unscaled,
|
|
163
|
+
decimals,
|
|
164
|
+
formatted: formatAmount(unscaled)
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
const wrapAmountUnscaled = (unscaled, decimals) => {
|
|
168
|
+
unscaled = (0, big_js.default)(unscaled);
|
|
169
|
+
const scaled = scaleAmount(unscaled, decimals);
|
|
170
|
+
const formatted = formatAmount(unscaled);
|
|
171
|
+
return {
|
|
172
|
+
scaled,
|
|
173
|
+
unscaled,
|
|
174
|
+
decimals,
|
|
175
|
+
formatted
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
const wrapPrice = (scaled, decimals0, decimals1) => {
|
|
179
|
+
const unscaled = unscalePrice(scaled, decimals0, decimals1);
|
|
180
|
+
const formatted = formatAmount(unscaled);
|
|
181
|
+
return {
|
|
182
|
+
scaled,
|
|
183
|
+
unscaled,
|
|
184
|
+
decimals: 36 + decimals1 - decimals0,
|
|
185
|
+
formatted
|
|
186
|
+
};
|
|
187
|
+
};
|
|
188
|
+
const wrapPriceUnscaled = (unscaled, decimals0, decimals1) => {
|
|
189
|
+
unscaled = (0, big_js.default)(unscaled);
|
|
190
|
+
const scaled = scalePrice(unscaled, decimals0, decimals1);
|
|
191
|
+
const formatted = formatAmount(unscaled);
|
|
192
|
+
return {
|
|
193
|
+
scaled,
|
|
194
|
+
unscaled,
|
|
195
|
+
decimals: 36 + decimals1 - decimals0,
|
|
196
|
+
formatted
|
|
197
|
+
};
|
|
198
|
+
};
|
|
199
|
+
const unscaleAmount = (scaled, decimals) => {
|
|
200
|
+
return new big_js.default(scaled.toString()).div(new big_js.default(10).pow(decimals));
|
|
201
|
+
};
|
|
202
|
+
const scaleAmount = (unscaled, decimals) => {
|
|
203
|
+
return BigInt((0, big_js.default)(unscaled).mul(new big_js.default(10).pow(decimals)).round().toFixed(0));
|
|
204
|
+
};
|
|
205
|
+
const unscalePrice = (scaled, decimals0, decimals1, precision = 18) => {
|
|
206
|
+
return new big_js.default(scaled.toString()).mul(new big_js.default(10).pow(decimals0)).div(new big_js.default(10).pow(decimals1)).div(new big_js.default(10).pow(precision));
|
|
207
|
+
};
|
|
208
|
+
const scalePrice = (unscaled, decimals0, decimals1, precision = 18) => {
|
|
209
|
+
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));
|
|
210
|
+
};
|
|
211
|
+
const formatAmount = (value) => {
|
|
212
|
+
if (value === void 0) return "-";
|
|
213
|
+
return formatCondensed((0, big_js.default)(value).toFixed(100));
|
|
214
|
+
};
|
|
215
|
+
const formatVagueAmount = (value) => {
|
|
216
|
+
value = Number(value);
|
|
217
|
+
if (value >= 0xe8d4a51000) return `${(value / 0xe8d4a51000).toFixed(2)}T`;
|
|
218
|
+
else if (value >= 1e9) return `${(value / 1e9).toFixed(2)}B`;
|
|
219
|
+
else if (value >= 1e6) return `${(value / 1e6).toFixed(2)}M`;
|
|
220
|
+
else if (value >= 1e3) return `${(value / 1e3).toFixed(2)}K`;
|
|
221
|
+
else if (value < 1) return value.toPrecision(2);
|
|
222
|
+
else return value.toFixed(2);
|
|
223
|
+
};
|
|
224
|
+
const formatCondensed = (input, decimals = 2) => {
|
|
225
|
+
const [whole, decimal] = (typeof input === "number" ? input.toFixed(20) : input).replace(/(\.\d*?)0+$/, "$1").replace(/\.$/, "").split(".");
|
|
226
|
+
const formattedWhole = whole.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
227
|
+
if (!decimal) return formattedWhole;
|
|
228
|
+
const leadingZeroMatch = decimal.match(/^(0{3,})/);
|
|
229
|
+
if (leadingZeroMatch) {
|
|
230
|
+
const zeroCount = leadingZeroMatch[1].length;
|
|
231
|
+
return `${formattedWhole}.0${toSubscript(zeroCount.toString())}${decimal.slice(zeroCount).slice(0, decimals)}`;
|
|
232
|
+
} else {
|
|
233
|
+
const nonZeroStart = decimal.search(/[1-9]/);
|
|
234
|
+
if (nonZeroStart === -1) return formattedWhole;
|
|
235
|
+
const twoDigits = decimal.slice(nonZeroStart).slice(0, decimals);
|
|
236
|
+
return `${formattedWhole}.${decimal.slice(0, nonZeroStart)}${twoDigits}`;
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
const toSubscript = (input) => {
|
|
240
|
+
return input.replace(/[0-9]/g, (m) => "₀₁₂₃₄₅₆₇₈₉"[+m]);
|
|
241
|
+
};
|
|
242
|
+
const formatUSD = (value) => {
|
|
243
|
+
return "$" + formatAmount(value);
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
//#endregion
|
|
247
|
+
Object.defineProperty(exports, 'PRICE_PRECISION', {
|
|
248
|
+
enumerable: true,
|
|
249
|
+
get: function () {
|
|
250
|
+
return PRICE_PRECISION;
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
Object.defineProperty(exports, '__toESM', {
|
|
254
|
+
enumerable: true,
|
|
255
|
+
get: function () {
|
|
256
|
+
return __toESM;
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
Object.defineProperty(exports, 'formatAmount', {
|
|
260
|
+
enumerable: true,
|
|
261
|
+
get: function () {
|
|
262
|
+
return formatAmount;
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
Object.defineProperty(exports, 'formatCondensed', {
|
|
266
|
+
enumerable: true,
|
|
267
|
+
get: function () {
|
|
268
|
+
return formatCondensed;
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
Object.defineProperty(exports, 'formatUSD', {
|
|
272
|
+
enumerable: true,
|
|
273
|
+
get: function () {
|
|
274
|
+
return formatUSD;
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
Object.defineProperty(exports, 'formatVagueAmount', {
|
|
278
|
+
enumerable: true,
|
|
279
|
+
get: function () {
|
|
280
|
+
return formatVagueAmount;
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
Object.defineProperty(exports, 'getErc20', {
|
|
284
|
+
enumerable: true,
|
|
285
|
+
get: function () {
|
|
286
|
+
return getErc20;
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
Object.defineProperty(exports, 'getPriceAtTick', {
|
|
290
|
+
enumerable: true,
|
|
291
|
+
get: function () {
|
|
292
|
+
return getPriceAtTick;
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
Object.defineProperty(exports, 'getTickAtPrice', {
|
|
296
|
+
enumerable: true,
|
|
297
|
+
get: function () {
|
|
298
|
+
return getTickAtPrice;
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
Object.defineProperty(exports, 'getTimelockLens', {
|
|
302
|
+
enumerable: true,
|
|
303
|
+
get: function () {
|
|
304
|
+
return getTimelockLens;
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
Object.defineProperty(exports, 'getTimelockMarket', {
|
|
308
|
+
enumerable: true,
|
|
309
|
+
get: function () {
|
|
310
|
+
return getTimelockMarket;
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
Object.defineProperty(exports, 'getUniswapMathLens', {
|
|
314
|
+
enumerable: true,
|
|
315
|
+
get: function () {
|
|
316
|
+
return getUniswapMathLens;
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
Object.defineProperty(exports, 'liquiditiesToAmount0', {
|
|
320
|
+
enumerable: true,
|
|
321
|
+
get: function () {
|
|
322
|
+
return liquiditiesToAmount0;
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
Object.defineProperty(exports, 'liquiditiesToAmount1', {
|
|
326
|
+
enumerable: true,
|
|
327
|
+
get: function () {
|
|
328
|
+
return liquiditiesToAmount1;
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
Object.defineProperty(exports, 'liquiditiesToAmounts', {
|
|
332
|
+
enumerable: true,
|
|
333
|
+
get: function () {
|
|
334
|
+
return liquiditiesToAmounts;
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
Object.defineProperty(exports, 'roundTickDown', {
|
|
338
|
+
enumerable: true,
|
|
339
|
+
get: function () {
|
|
340
|
+
return roundTickDown;
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
Object.defineProperty(exports, 'roundTickUp', {
|
|
344
|
+
enumerable: true,
|
|
345
|
+
get: function () {
|
|
346
|
+
return roundTickUp;
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
Object.defineProperty(exports, 'scaleAmount', {
|
|
350
|
+
enumerable: true,
|
|
351
|
+
get: function () {
|
|
352
|
+
return scaleAmount;
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
Object.defineProperty(exports, 'scalePrice', {
|
|
356
|
+
enumerable: true,
|
|
357
|
+
get: function () {
|
|
358
|
+
return scalePrice;
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
Object.defineProperty(exports, 'timelockLenses', {
|
|
362
|
+
enumerable: true,
|
|
363
|
+
get: function () {
|
|
364
|
+
return timelockLenses;
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
Object.defineProperty(exports, 'token0ToToken1', {
|
|
368
|
+
enumerable: true,
|
|
369
|
+
get: function () {
|
|
370
|
+
return token0ToToken1;
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
Object.defineProperty(exports, 'token1ToToken0', {
|
|
374
|
+
enumerable: true,
|
|
375
|
+
get: function () {
|
|
376
|
+
return token1ToToken0;
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
Object.defineProperty(exports, 'uniswapMathLenses', {
|
|
380
|
+
enumerable: true,
|
|
381
|
+
get: function () {
|
|
382
|
+
return uniswapMathLenses;
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
Object.defineProperty(exports, 'unscaleAmount', {
|
|
386
|
+
enumerable: true,
|
|
387
|
+
get: function () {
|
|
388
|
+
return unscaleAmount;
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
Object.defineProperty(exports, 'unscalePrice', {
|
|
392
|
+
enumerable: true,
|
|
393
|
+
get: function () {
|
|
394
|
+
return unscalePrice;
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
Object.defineProperty(exports, 'wrapAmount', {
|
|
398
|
+
enumerable: true,
|
|
399
|
+
get: function () {
|
|
400
|
+
return wrapAmount;
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
Object.defineProperty(exports, 'wrapAmountUnscaled', {
|
|
404
|
+
enumerable: true,
|
|
405
|
+
get: function () {
|
|
406
|
+
return wrapAmountUnscaled;
|
|
407
|
+
}
|
|
408
|
+
});
|
|
409
|
+
Object.defineProperty(exports, 'wrapPrice', {
|
|
410
|
+
enumerable: true,
|
|
411
|
+
get: function () {
|
|
412
|
+
return wrapPrice;
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
Object.defineProperty(exports, 'wrapPriceUnscaled', {
|
|
416
|
+
enumerable: true,
|
|
417
|
+
get: function () {
|
|
418
|
+
return wrapPriceUnscaled;
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
Object.defineProperty(exports, 'zero', {
|
|
422
|
+
enumerable: true,
|
|
423
|
+
get: function () {
|
|
424
|
+
return zero;
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
//# sourceMappingURL=numberUtils-DOUvJfQD.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numberUtils-DOUvJfQD.cjs","names":["erc20Abi","optionsMarketAbi","uniswapMathLensAbi","lensAbi","timelockLenses: Record<number, Address>","monadTestnet","uniswapMathLenses: Record<number, Address>","TickMath","JSBI","Big","SqrtPriceMath","zero: Amount","Big"],"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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"}
|