@@ -18,6 +18,8 @@ import {
1818 standardizeBaseAssetAmount ,
1919 SwapDirection ,
2020 ZERO ,
21+ PRICE_PRECISION ,
22+ AMM_TO_QUOTE_PRECISION_RATIO ,
2123} from '..' ;
2224import { PublicKey } from '@solana/web3.js' ;
2325import { 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