Skip to content

Commit 6f1c887

Browse files
committed
use proper quoteAmount with baseSwap for top of book orders
1 parent 5d10627 commit 6f1c887

File tree

1 file changed

+57
-32
lines changed

1 file changed

+57
-32
lines changed

sdk/src/dlob/orderBookLevels.ts

Lines changed: 57 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import {
1818
standardizeBaseAssetAmount,
1919
SwapDirection,
2020
ZERO,
21+
PRICE_PRECISION,
22+
AMM_TO_QUOTE_PRECISION_RATIO,
2123
} from '..';
2224
import { PublicKey } from '@solana/web3.js';
2325
import { assert } from '../assert/assert';
@@ -195,7 +197,6 @@ export function getVammL2Generator({
195197
);
196198

197199
const minOrderSize = marketAccount.amm.minOrderSize;
198-
const orderTickSize = marketAccount.amm.orderTickSize;
199200
if (openBids.lt(minOrderSize.muln(2))) {
200201
openBids = ZERO;
201202
}
@@ -231,22 +232,32 @@ export function getVammL2Generator({
231232

232233
if (topOfBookQuoteAmounts && numBids < topOfBookQuoteAmounts?.length) {
233234
const remainingBaseLiquidity = openBids.sub(topOfBookBidSize);
234-
quoteSwapped = topOfBookQuoteAmounts[numBids];
235-
[afterSwapQuoteReserves, afterSwapBaseReserves] =
236-
calculateAmmReservesAfterSwap(
237-
bidAmm,
238-
'quote',
239-
quoteSwapped,
240-
SwapDirection.REMOVE
241-
);
242235

243236
baseSwapped = standardizeBaseAssetAmount(
244-
bidAmm.baseAssetReserve.sub(afterSwapBaseReserves).abs(),
237+
topOfBookQuoteAmounts[numBids]
238+
.mul(AMM_TO_QUOTE_PRECISION_RATIO)
239+
.mul(PRICE_PRECISION)
240+
.div(oraclePriceData.price),
245241
marketAccount.amm.orderStepSize
246242
);
243+
247244
if (baseSwapped.eq(ZERO)) {
248245
return;
249246
}
247+
248+
[afterSwapQuoteReserves, afterSwapBaseReserves] =
249+
calculateAmmReservesAfterSwap(
250+
bidAmm,
251+
'base',
252+
baseSwapped,
253+
SwapDirection.ADD
254+
);
255+
256+
quoteSwapped = calculateQuoteAssetAmountSwapped(
257+
bidAmm.quoteAssetReserve.sub(afterSwapQuoteReserves).abs(),
258+
bidAmm.pegMultiplier,
259+
SwapDirection.ADD
260+
);
250261
if (remainingBaseLiquidity.lt(baseSwapped)) {
251262
baseSwapped = remainingBaseLiquidity;
252263
[afterSwapQuoteReserves, afterSwapBaseReserves] =
@@ -285,11 +296,10 @@ export function getVammL2Generator({
285296
);
286297
}
287298

288-
const price = standardizePrice(
289-
quoteSwapped.mul(BASE_PRECISION).div(baseSwapped),
290-
orderTickSize,
291-
PositionDirection.LONG
292-
);
299+
const price = quoteSwapped.mul(BASE_PRECISION).div(baseSwapped);
300+
// orderTickSize,
301+
// PositionDirection.LONG
302+
// );
293303

294304
bidAmm.baseAssetReserve = afterSwapBaseReserves;
295305
bidAmm.quoteAssetReserve = afterSwapQuoteReserves;
@@ -321,25 +331,36 @@ export function getVammL2Generator({
321331
let [afterSwapQuoteReserves, afterSwapBaseReserves] = [ZERO, ZERO];
322332

323333
if (topOfBookQuoteAmounts && numAsks < topOfBookQuoteAmounts?.length) {
324-
const remainingBaseLiquidity = openAsks
325-
.mul(new BN(-1))
326-
.sub(topOfBookAskSize);
327-
quoteSwapped = topOfBookQuoteAmounts[numAsks];
328-
[afterSwapQuoteReserves, afterSwapBaseReserves] =
329-
calculateAmmReservesAfterSwap(
330-
askAmm,
331-
'quote',
332-
quoteSwapped,
333-
SwapDirection.ADD
334-
);
334+
const remainingBaseLiquidity = standardizeBaseAssetAmount(
335+
openAsks.mul(new BN(-1)).sub(topOfBookAskSize),
336+
marketAccount.amm.orderStepSize
337+
);
335338

336339
baseSwapped = standardizeBaseAssetAmount(
337-
askAmm.baseAssetReserve.sub(afterSwapBaseReserves).abs(),
340+
topOfBookQuoteAmounts[numAsks]
341+
.mul(AMM_TO_QUOTE_PRECISION_RATIO)
342+
.mul(PRICE_PRECISION)
343+
.div(oraclePriceData.price),
338344
marketAccount.amm.orderStepSize
339345
);
346+
340347
if (baseSwapped.eq(ZERO)) {
341348
return;
342349
}
350+
351+
[afterSwapQuoteReserves, afterSwapBaseReserves] =
352+
calculateAmmReservesAfterSwap(
353+
askAmm,
354+
'base',
355+
baseSwapped,
356+
SwapDirection.REMOVE
357+
);
358+
quoteSwapped = calculateQuoteAssetAmountSwapped(
359+
askAmm.quoteAssetReserve.sub(afterSwapQuoteReserves).abs(),
360+
askAmm.pegMultiplier,
361+
SwapDirection.ADD
362+
);
363+
343364
if (remainingBaseLiquidity.lt(baseSwapped)) {
344365
baseSwapped = remainingBaseLiquidity;
345366
[afterSwapQuoteReserves, afterSwapBaseReserves] =
@@ -357,6 +378,13 @@ export function getVammL2Generator({
357378
);
358379
}
359380
topOfBookAskSize = topOfBookAskSize.add(baseSwapped);
381+
console.log(
382+
'topOfBookAskSize:',
383+
topOfBookAskSize.toNumber(),
384+
'baseSwapped:',
385+
baseSwapped.toNumber()
386+
);
387+
360388
askSize = openAsks
361389
.abs()
362390
.sub(topOfBookAskSize)
@@ -381,11 +409,8 @@ export function getVammL2Generator({
381409
);
382410
}
383411

384-
const price = standardizePrice(
385-
quoteSwapped.mul(BASE_PRECISION).div(baseSwapped),
386-
orderTickSize,
387-
PositionDirection.SHORT
388-
);
412+
const price = quoteSwapped.mul(BASE_PRECISION).div(baseSwapped);
413+
389414
askAmm.baseAssetReserve = afterSwapBaseReserves;
390415
askAmm.quoteAssetReserve = afterSwapQuoteReserves;
391416

0 commit comments

Comments
 (0)