@drift-labs/sdk 2.43.0-beta.4 → 2.43.0-beta.6

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/VERSION CHANGED
@@ -1 +1 @@
1
- 2.43.0-beta.4
1
+ 2.43.0-beta.6
package/bun.lockb CHANGED
Binary file
@@ -92,7 +92,14 @@ function getVammL2Generator({ marketAccount, oraclePriceData, numOrders, now, to
92
92
  (0, assert_1.assert)(topOfBookQuoteAmounts.length < numOrders);
93
93
  }
94
94
  const updatedAmm = (0, __1.calculateUpdatedAMM)(marketAccount.amm, oraclePriceData);
95
- const [openBids, openAsks] = (0, __1.calculateMarketOpenBidAsk)(updatedAmm.baseAssetReserve, updatedAmm.minBaseAssetReserve, updatedAmm.maxBaseAssetReserve, updatedAmm.orderStepSize);
95
+ let [openBids, openAsks] = (0, __1.calculateMarketOpenBidAsk)(updatedAmm.baseAssetReserve, updatedAmm.minBaseAssetReserve, updatedAmm.maxBaseAssetReserve, updatedAmm.orderStepSize);
96
+ const minOrderSize = marketAccount.amm.orderStepSize;
97
+ if (openBids.lt(minOrderSize.muln(2))) {
98
+ openBids = __1.ZERO;
99
+ }
100
+ if (openAsks.abs().lt(minOrderSize.muln(2))) {
101
+ openAsks = __1.ZERO;
102
+ }
96
103
  now = now !== null && now !== void 0 ? now : new __1.BN(Date.now() / 1000);
97
104
  const [bidReserves, askReserves] = (0, __1.calculateSpreadReserves)(updatedAmm, oraclePriceData, now);
98
105
  let numBids = 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drift-labs/sdk",
3
- "version": "2.43.0-beta.4",
3
+ "version": "2.43.0-beta.6",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "author": "crispheaney",
@@ -52,6 +52,7 @@
52
52
  "@typescript-eslint/eslint-plugin": "^4.28.0",
53
53
  "@typescript-eslint/parser": "^4.28.0",
54
54
  "chai": "^4.3.6",
55
+ "encoding": "^0.1.13",
55
56
  "eslint": "^7.29.0",
56
57
  "eslint-config-prettier": "^8.3.0",
57
58
  "eslint-plugin-prettier": "^3.4.0",
@@ -164,13 +164,22 @@ export function getVammL2Generator({
164
164
 
165
165
  const updatedAmm = calculateUpdatedAMM(marketAccount.amm, oraclePriceData);
166
166
 
167
- const [openBids, openAsks] = calculateMarketOpenBidAsk(
167
+ let [openBids, openAsks] = calculateMarketOpenBidAsk(
168
168
  updatedAmm.baseAssetReserve,
169
169
  updatedAmm.minBaseAssetReserve,
170
170
  updatedAmm.maxBaseAssetReserve,
171
171
  updatedAmm.orderStepSize
172
172
  );
173
173
 
174
+ const minOrderSize = marketAccount.amm.orderStepSize;
175
+ if (openBids.lt(minOrderSize.muln(2))) {
176
+ openBids = ZERO;
177
+ }
178
+
179
+ if (openAsks.abs().lt(minOrderSize.muln(2))) {
180
+ openAsks = ZERO;
181
+ }
182
+
174
183
  now = now ?? new BN(Date.now() / 1000);
175
184
  const [bidReserves, askReserves] = calculateSpreadReserves(
176
185
  updatedAmm,
package/tests/amm/test.ts CHANGED
@@ -956,4 +956,82 @@ describe('AMM Tests', () => {
956
956
  );
957
957
  assert(totalAskSize.sub(openAsks.abs()).lte(new BN(5))); // only tiny rounding errors
958
958
  });
959
+
960
+ it('orderbook L2 gen (no topOfBookQuoteAmounts, 10 numOrders, no liquidity)', async () => {
961
+ const myMockPerpMarkets = _.cloneDeep(mockPerpMarkets);
962
+
963
+ const mockMarket1: PerpMarketAccount = myMockPerpMarkets[0];
964
+ const cc = 38104569;
965
+ mockMarket1.amm.baseAssetReserve = new BN(cc).mul(BASE_PRECISION);
966
+ mockMarket1.amm.minOrderSize = new BN(5);
967
+ mockMarket1.amm.maxBaseAssetReserve = mockMarket1.amm.baseAssetReserve.add(
968
+ new BN(9)
969
+ );
970
+ mockMarket1.amm.minBaseAssetReserve =
971
+ mockMarket1.amm.baseAssetReserve.sub(new BN(9));
972
+ mockMarket1.amm.quoteAssetReserve = new BN(cc).mul(BASE_PRECISION);
973
+ mockMarket1.amm.pegMultiplier = new BN(18.32 * PEG_PRECISION.toNumber());
974
+ mockMarket1.amm.sqrtK = new BN(cc).mul(BASE_PRECISION);
975
+
976
+ const now = new BN(1688881915);
977
+
978
+ const oraclePriceData: OraclePriceData = {
979
+ price: new BN(18.624 * PRICE_PRECISION.toNumber()),
980
+ slot: new BN(0),
981
+ confidence: new BN(1),
982
+ hasSufficientNumberOfDataPoints: true,
983
+ };
984
+ mockMarket1.amm.historicalOracleData.lastOraclePrice = new BN(
985
+ 18.5535 * PRICE_PRECISION.toNumber()
986
+ );
987
+
988
+ const updatedAmm = calculateUpdatedAMM(mockMarket1.amm, oraclePriceData);
989
+
990
+ const [openBids, openAsks] = calculateMarketOpenBidAsk(
991
+ updatedAmm.baseAssetReserve,
992
+ updatedAmm.minBaseAssetReserve,
993
+ updatedAmm.maxBaseAssetReserve,
994
+ updatedAmm.orderStepSize
995
+ );
996
+
997
+ const generator = getVammL2Generator({
998
+ marketAccount: mockMarket1,
999
+ oraclePriceData,
1000
+ numOrders: 10,
1001
+ now,
1002
+ topOfBookQuoteAmounts: [],
1003
+ });
1004
+
1005
+ const bids = Array.from(generator.getL2Bids());
1006
+ // console.log(bids);
1007
+
1008
+ const totalBidSize = bids.reduce((total: BN, order: L2Level) => {
1009
+ return total.add(order.size);
1010
+ }, ZERO);
1011
+
1012
+ console.log(
1013
+ 'totalBidSize:',
1014
+ totalBidSize.toString(),
1015
+ 'openBids:',
1016
+ openBids.toString()
1017
+ );
1018
+ assert(openBids.eq(new BN(9)));
1019
+ assert(totalBidSize.eq(ZERO));
1020
+
1021
+ const asks = Array.from(generator.getL2Asks());
1022
+ // console.log(asks);
1023
+
1024
+ const totalAskSize = asks.reduce((total: BN, order: L2Level) => {
1025
+ return total.add(order.size);
1026
+ }, ZERO);
1027
+ console.log(
1028
+ 'totalAskSize:',
1029
+ totalAskSize.toString(),
1030
+ 'openAsks:',
1031
+ openAsks.toString()
1032
+ );
1033
+
1034
+ assert(openAsks.eq(new BN(-9)));
1035
+ assert(totalAskSize.eq(ZERO));
1036
+ });
959
1037
  });