@paraswap/dex-lib 5.1.15 → 5.1.16

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.
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ /* eslint-disable no-console */
40
+ /*
41
+
42
+ Compares MaverickV2 local pricing with on-chain results at one block, for
43
+ every pool the dex initializes on the given network:
44
+ - tick sqrt price / liquidity vs PoolLens.getTickSqrtPriceAndL
45
+ - estimateSwap (amountIn, amountOut) vs Quoter.calculateSwap, both
46
+ directions, exact-in and exact-out, using the same tickLimit as pricing
47
+
48
+ Usage: npx ts-node src/dex/maverick-v2/scripts/compare-onchain-quotes.ts [network=1]
49
+
50
+ */
51
+ const dotenv = __importStar(require("dotenv"));
52
+ dotenv.config();
53
+ const abi_1 = require("@ethersproject/abi");
54
+ const dex_helper_1 = require("../../../dex-helper");
55
+ const maverick_v2_1 = require("../maverick-v2");
56
+ const config_1 = require("../config");
57
+ const maverick_tick_math_1 = require("../maverick-math/maverick-tick-math");
58
+ const decoders_1 = require("../../../lib/decoders");
59
+ const MaverickV2Quoter_json_1 = __importDefault(require("../../../abi/maverick-v2/MaverickV2Quoter.json"));
60
+ const MaverickV2PoolLens_json_1 = __importDefault(require("../../../abi/maverick-v2/MaverickV2PoolLens.json"));
61
+ const MaverickV2Pool_json_1 = __importDefault(require("../../../abi/maverick-v2/MaverickV2Pool.json"));
62
+ const network = Number(process.argv[2] || 1);
63
+ const dexKey = 'MaverickV2';
64
+ const quoterIface = new abi_1.Interface(MaverickV2Quoter_json_1.default);
65
+ const lensIface = new abi_1.Interface(MaverickV2PoolLens_json_1.default);
66
+ const poolIface = new abi_1.Interface(MaverickV2Pool_json_1.default);
67
+ const MAX_UINT128 = (1n << 128n) - 1n;
68
+ const AMOUNT_MULTIPLIERS = [
69
+ [1n, 1000000n],
70
+ [1n, 1000n],
71
+ [1n, 7n],
72
+ [1n, 1n],
73
+ [3n, 1n],
74
+ [17n, 1n],
75
+ [123n, 1n],
76
+ [1000n, 1n],
77
+ [12345n, 1n],
78
+ [100000n, 1n],
79
+ ];
80
+ const RESERVE_FRACTIONS = [
81
+ [1n, 10n],
82
+ [1n, 2n],
83
+ [9n, 10n],
84
+ [999n, 1000n],
85
+ ];
86
+ const decodePair = (iface, fn, keys) => (result) => {
87
+ const [success, data] = (0, decoders_1.extractSuccessAndValue)(result);
88
+ if (!success || data === '0x')
89
+ return null;
90
+ const decoded = iface.decodeFunctionResult(fn, data);
91
+ return [
92
+ BigInt(decoded[keys[0]].toString()),
93
+ BigInt(decoded[keys[1]].toString()),
94
+ ];
95
+ };
96
+ const decodeQuote = decodePair(quoterIface, 'calculateSwap', [
97
+ 'amountIn',
98
+ 'amountOut',
99
+ ]);
100
+ const decodeTick = decodePair(lensIface, 'getTickSqrtPriceAndL', [
101
+ 'sqrtPrice',
102
+ 'liquidity',
103
+ ]);
104
+ (async () => {
105
+ const dexHelper = new dex_helper_1.DummyDexHelper(network);
106
+ const dex = new maverick_v2_1.MaverickV2(network, dexKey, dexHelper);
107
+ const blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
108
+ await dex.initializePricing(blockNumber);
109
+ const { quoterAddress, poolLensAddress } = config_1.MaverickV2Config[dexKey][network];
110
+ const pools = Object.values(dex.pools).filter(p => p.getState(blockNumber));
111
+ console.log(`network=${network} block=${blockNumber} pools=${pools.length}`);
112
+ // ticks
113
+ const tickCalls = [];
114
+ const tickExpected = [];
115
+ for (const pool of pools) {
116
+ const state = pool.getState(blockNumber);
117
+ for (const [tickKey, tick] of Object.entries(state.ticks)) {
118
+ const [lower, upper] = maverick_tick_math_1.MaverickTickMath.tickSqrtPrices(pool.tickSpacing, BigInt(tickKey));
119
+ tickExpected.push({
120
+ pool: pool.address,
121
+ tick: BigInt(tickKey),
122
+ local: maverick_tick_math_1.MaverickTickMath.getTickSqrtPriceAndL(tick.reserveA, tick.reserveB, lower, upper),
123
+ });
124
+ tickCalls.push({
125
+ target: poolLensAddress,
126
+ callData: lensIface.encodeFunctionData('getTickSqrtPriceAndL', [
127
+ pool.address,
128
+ tickKey,
129
+ ]),
130
+ decodeFunction: decodeTick,
131
+ });
132
+ }
133
+ }
134
+ const tickResults = await dexHelper.multiWrapper.tryAggregate(false, tickCalls, blockNumber, 200, false);
135
+ let tickMismatches = 0;
136
+ tickResults.forEach(({ returnData: onchain }, i) => {
137
+ const { pool, tick, local } = tickExpected[i];
138
+ if (!onchain || !local)
139
+ return;
140
+ if (onchain[0] !== local[0] || onchain[1] !== local[1]) {
141
+ tickMismatches++;
142
+ console.log(`TICK MISMATCH pool=${pool} tick=${tick} local=[${local}] onchain=[${onchain}]`);
143
+ }
144
+ });
145
+ const cases = [];
146
+ const quoteCalls = [];
147
+ for (const pool of pools) {
148
+ const state = pool.getState(blockNumber);
149
+ for (const tokenAIn of [true, false]) {
150
+ for (const exactOutput of [false, true]) {
151
+ const inToken = tokenAIn ? pool.tokenA : pool.tokenB;
152
+ const outToken = tokenAIn ? pool.tokenB : pool.tokenA;
153
+ const unit = 10n ** BigInt((exactOutput ? outToken : inToken).decimals);
154
+ const outReserve = tokenAIn ? state.reserveB : state.reserveA;
155
+ const amounts = new Set();
156
+ AMOUNT_MULTIPLIERS.forEach(([n, d]) => amounts.add((unit * n) / d));
157
+ RESERVE_FRACTIONS.forEach(([n, d]) => amounts.add((outReserve * n) / d));
158
+ const tickLimit = tokenAIn
159
+ ? state.activeTick + 100n
160
+ : state.activeTick - 100n;
161
+ for (const amount of amounts) {
162
+ if (amount === 0n || amount > MAX_UINT128)
163
+ continue;
164
+ let local;
165
+ try {
166
+ local = pool.poolMath.estimateSwap({ ...state, ticks: { ...state.ticks } }, amount, tokenAIn, exactOutput, tickLimit);
167
+ }
168
+ catch (e) {
169
+ local = `throws: ${e?.message || e}`;
170
+ }
171
+ cases.push({
172
+ pool: pool.address,
173
+ label: `${pool.tokenA.symbol}/${pool.tokenB.symbol}`,
174
+ tokenAIn,
175
+ exactOutput,
176
+ amount,
177
+ local,
178
+ });
179
+ quoteCalls.push({
180
+ target: quoterAddress,
181
+ callData: quoterIface.encodeFunctionData('calculateSwap', [
182
+ pool.address,
183
+ amount,
184
+ tokenAIn,
185
+ exactOutput,
186
+ tickLimit,
187
+ ]),
188
+ decodeFunction: decodeQuote,
189
+ });
190
+ }
191
+ }
192
+ }
193
+ }
194
+ // Quoter calls simulate a full swap, so keep multicall batches small and
195
+ // don't fire all of them at once
196
+ const QUOTES_PER_BATCH = 15;
197
+ const BATCHES_IN_FLIGHT = 20;
198
+ const quoteResults = [];
199
+ for (let start = 0; start < quoteCalls.length; start += QUOTES_PER_BATCH * BATCHES_IN_FLIGHT) {
200
+ quoteResults.push(...(await dexHelper.multiWrapper.tryAggregate(false, quoteCalls.slice(start, start + QUOTES_PER_BATCH * BATCHES_IN_FLIGHT), blockNumber, QUOTES_PER_BATCH, false)));
201
+ }
202
+ let matches = 0;
203
+ let mismatches = 0;
204
+ let onlyLocalThrows = 0;
205
+ let onlyOnchainFails = 0;
206
+ let unfillableBuys = 0;
207
+ const onchainFailures = new Map();
208
+ quoteResults.forEach(({ returnData: onchain }, i) => {
209
+ const c = cases[i];
210
+ const describe = `${c.label} pool=${c.pool} tokenAIn=${c.tokenAIn} exactOutput=${c.exactOutput} amount=${c.amount}`;
211
+ if (typeof c.local === 'string') {
212
+ if (!onchain)
213
+ return;
214
+ // estimateSwap rejects a BUY the pool can't fill, the Quoter returns
215
+ // the partial fill; swap() prices both as 0
216
+ if (c.exactOutput && onchain[1] < c.amount) {
217
+ unfillableBuys++;
218
+ return;
219
+ }
220
+ onlyLocalThrows++;
221
+ console.log(`LOCAL THROWS ${describe} local=${c.local} onchain=[${onchain}]`);
222
+ return;
223
+ }
224
+ if (!onchain) {
225
+ onlyOnchainFails++;
226
+ const failures = onchainFailures.get(c.pool) || {
227
+ count: 0,
228
+ callData: quoteCalls[i].callData,
229
+ };
230
+ failures.count++;
231
+ onchainFailures.set(c.pool, failures);
232
+ return;
233
+ }
234
+ if (c.local[0] !== onchain[0] || c.local[1] !== onchain[1]) {
235
+ mismatches++;
236
+ console.log(`QUOTE MISMATCH ${describe} local=[${c.local}] onchain=[${onchain}] dIn=${c.local[0] - onchain[0]} dOut=${c.local[1] - onchain[1]}`);
237
+ }
238
+ else {
239
+ matches++;
240
+ }
241
+ });
242
+ // The multicall drops revert data, so re-run one failing call per pool
243
+ // directly to get the reason
244
+ for (const [pool, { count, callData }] of onchainFailures) {
245
+ let reason = 'succeeds when called directly';
246
+ let revertData;
247
+ try {
248
+ // some nodes return the revert payload as the call result
249
+ const returned = await dexHelper.provider.call({ to: quoterAddress, data: callData }, blockNumber);
250
+ try {
251
+ quoterIface.decodeFunctionResult('calculateSwap', returned);
252
+ }
253
+ catch {
254
+ revertData = returned;
255
+ }
256
+ }
257
+ catch (e) {
258
+ revertData = [e, e?.error, e?.error?.error]
259
+ .map(err => err?.data)
260
+ .find(d => typeof d === 'string' && d.startsWith('0x'));
261
+ if (!revertData)
262
+ reason = e?.message || String(e);
263
+ }
264
+ if (revertData) {
265
+ reason = `revert data ${revertData.slice(0, 10)}`;
266
+ for (const iface of [poolIface, quoterIface]) {
267
+ try {
268
+ const parsed = iface.parseError(revertData);
269
+ reason = `${parsed.name}(${parsed.args.map(String).join(', ')})`;
270
+ break;
271
+ }
272
+ catch {
273
+ // not an error of this interface
274
+ }
275
+ }
276
+ }
277
+ console.log(`ONCHAIN FAILS pool=${pool} calls=${count} reason=${reason}`);
278
+ }
279
+ console.log(`RESULT network=${network} block=${blockNumber} ticks=${tickExpected.length} tickMismatches=${tickMismatches} quotes=${cases.length} matches=${matches} mismatches=${mismatches} unfillableBuys=${unfillableBuys} onlyLocalThrows=${onlyLocalThrows} onlyOnchainFails=${onlyOnchainFails}`);
280
+ process.exit(mismatches || tickMismatches ? 1 : 0);
281
+ })().catch(e => {
282
+ console.error(e);
283
+ process.exit(1);
284
+ });
285
+ //# sourceMappingURL=compare-onchain-quotes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-onchain-quotes.js","sourceRoot":"","sources":["../../../../src/dex/maverick-v2/scripts/compare-onchain-quotes.ts"],"names":[],"mappings":"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"}
@@ -63,6 +63,9 @@ export type PoolState = {
63
63
  lastTwaD8: bigint;
64
64
  lastLogPriceD8: bigint;
65
65
  lastTimestamp: bigint;
66
+ feeAIn: bigint;
67
+ feeBIn: bigint;
68
+ protocolFeeRatioD3: bigint;
66
69
  bins: {
67
70
  [id: string]: Bin;
68
71
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paraswap/dex-lib",
3
- "version": "5.1.15",
3
+ "version": "5.1.16",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "repository": "https://github.com/paraswap/paraswap-dex-lib",