@drift-labs/sdk 2.0.16 → 2.0.18

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.
@@ -22,12 +22,9 @@ import {
22
22
  ZERO,
23
23
  } from '../../src';
24
24
 
25
- import {
26
- mockPerpMarkets,
27
- mockSpotMarkets,
28
- mockStateAccount,
29
- MockUserMap,
30
- } from './helpers';
25
+ import { mockPerpMarkets, mockSpotMarkets, mockStateAccount } from './helpers';
26
+ import { isVariant } from '../../lib';
27
+ import { DLOBOrdersCoder } from '../../src/dlob/DLOBOrders';
31
28
 
32
29
  function insertOrderToDLOB(
33
30
  dlob: DLOB,
@@ -234,15 +231,7 @@ function printCrossedNodes(n: NodeToFill, slot: number) {
234
231
 
235
232
  describe('DLOB Tests', () => {
236
233
  it('Fresh DLOB is empty', () => {
237
- const mockUserMap = new MockUserMap();
238
-
239
- const dlob = new DLOB(
240
- mockPerpMarkets,
241
- mockSpotMarkets,
242
- mockStateAccount,
243
- mockUserMap,
244
- false
245
- );
234
+ const dlob = new DLOB();
246
235
  const vAsk = new BN(11);
247
236
  const vBid = new BN(10);
248
237
  const slot = 12;
@@ -311,30 +300,11 @@ describe('DLOB Tests', () => {
311
300
  const vAsk = new BN(15);
312
301
  const vBid = new BN(10);
313
302
 
314
- const mockUserMap = new MockUserMap();
315
303
  const user0 = Keypair.generate();
316
- const user0Auth = Keypair.generate();
317
304
  const user1 = Keypair.generate();
318
- const user1Auth = Keypair.generate();
319
305
  const user2 = Keypair.generate();
320
- const user2Auth = Keypair.generate();
321
- const user3 = Keypair.generate();
322
- const user3Auth = Keypair.generate();
323
- const user4 = Keypair.generate();
324
- const user4Auth = Keypair.generate();
325
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
326
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
327
- mockUserMap.addUserAccountAuthority(user2.publicKey, user2Auth.publicKey);
328
- mockUserMap.addUserAccountAuthority(user3.publicKey, user3Auth.publicKey);
329
- mockUserMap.addUserAccountAuthority(user4.publicKey, user4Auth.publicKey);
330
-
331
- const dlob = new DLOB(
332
- mockPerpMarkets,
333
- mockSpotMarkets,
334
- mockStateAccount,
335
- mockUserMap,
336
- false
337
- );
306
+
307
+ const dlob = new DLOB();
338
308
  const marketIndex = 0;
339
309
 
340
310
  const slot = 12;
@@ -408,20 +378,177 @@ describe('DLOB Tests', () => {
408
378
  }
409
379
  expect(thrown, 'should throw after clearing').to.equal(true);
410
380
  });
381
+
382
+ it('DLOB orders', () => {
383
+ const vAsk = new BN(15);
384
+ const vBid = new BN(10);
385
+
386
+ const user0 = Keypair.generate();
387
+ const user1 = Keypair.generate();
388
+ const user2 = Keypair.generate();
389
+ const user3 = Keypair.generate();
390
+ const user4 = Keypair.generate();
391
+
392
+ const dlob = new DLOB();
393
+ const marketIndex = 0;
394
+
395
+ insertOrderToDLOB(
396
+ dlob,
397
+ user0.publicKey,
398
+ OrderType.LIMIT,
399
+ MarketType.PERP,
400
+ 1, // orderId
401
+ marketIndex,
402
+ new BN(11), // price
403
+ BASE_PRECISION, // quantity
404
+ PositionDirection.LONG,
405
+ vBid,
406
+ vAsk
407
+ );
408
+ insertOrderToDLOB(
409
+ dlob,
410
+ user1.publicKey,
411
+ OrderType.LIMIT,
412
+ MarketType.PERP,
413
+ 2, // orderId
414
+ marketIndex,
415
+ new BN(12), // price
416
+ BASE_PRECISION, // quantity
417
+ PositionDirection.LONG,
418
+ vBid,
419
+ vAsk
420
+ );
421
+ insertOrderToDLOB(
422
+ dlob,
423
+ user2.publicKey,
424
+ OrderType.LIMIT,
425
+ MarketType.PERP,
426
+ 3, // orderId
427
+ marketIndex,
428
+ new BN(13), // price
429
+ BASE_PRECISION, // quantity
430
+ PositionDirection.LONG,
431
+ vBid,
432
+ vAsk
433
+ );
434
+
435
+ insertOrderToDLOB(
436
+ dlob,
437
+ user3.publicKey,
438
+ OrderType.MARKET,
439
+ MarketType.PERP,
440
+ 4, // orderId
441
+ marketIndex,
442
+ new BN(12), // price
443
+ new BN(1).mul(BASE_PRECISION), // quantity
444
+ PositionDirection.SHORT,
445
+ vBid,
446
+ vAsk
447
+ );
448
+ insertOrderToDLOB(
449
+ dlob,
450
+ user4.publicKey,
451
+ OrderType.MARKET,
452
+ MarketType.PERP,
453
+ 5, // orderId
454
+ marketIndex,
455
+ new BN(12), // price
456
+ new BN(1).mul(BASE_PRECISION), // quantity
457
+ PositionDirection.SHORT,
458
+ vBid,
459
+ vAsk
460
+ );
461
+ // insert some limit buys above vamm bid, below ask
462
+ insertOrderToDLOB(
463
+ dlob,
464
+ user0.publicKey,
465
+ OrderType.LIMIT,
466
+ MarketType.SPOT,
467
+ 6, // orderId
468
+ marketIndex,
469
+ new BN(11), // price
470
+ BASE_PRECISION, // quantity
471
+ PositionDirection.LONG,
472
+ vBid,
473
+ vAsk
474
+ );
475
+ insertOrderToDLOB(
476
+ dlob,
477
+ user1.publicKey,
478
+ OrderType.LIMIT,
479
+ MarketType.SPOT,
480
+ 7, // orderId
481
+ marketIndex,
482
+ new BN(12), // price
483
+ BASE_PRECISION, // quantity
484
+ PositionDirection.LONG,
485
+ vBid,
486
+ vAsk
487
+ );
488
+ insertOrderToDLOB(
489
+ dlob,
490
+ user2.publicKey,
491
+ OrderType.LIMIT,
492
+ MarketType.SPOT,
493
+ 8, // orderId
494
+ marketIndex,
495
+ new BN(13), // price
496
+ BASE_PRECISION, // quantity
497
+ PositionDirection.LONG,
498
+ vBid,
499
+ vAsk
500
+ );
501
+
502
+ insertOrderToDLOB(
503
+ dlob,
504
+ user3.publicKey,
505
+ OrderType.MARKET,
506
+ MarketType.SPOT,
507
+ 9, // orderId
508
+ marketIndex,
509
+ new BN(12), // price
510
+ new BN(1).mul(BASE_PRECISION), // quantity
511
+ PositionDirection.SHORT,
512
+ vBid,
513
+ vAsk
514
+ );
515
+ insertOrderToDLOB(
516
+ dlob,
517
+ user4.publicKey,
518
+ OrderType.MARKET,
519
+ MarketType.SPOT,
520
+ 10, // orderId
521
+ marketIndex,
522
+ new BN(12), // price
523
+ new BN(1).mul(BASE_PRECISION), // quantity
524
+ PositionDirection.SHORT,
525
+ vBid,
526
+ vAsk
527
+ );
528
+
529
+ const dlobOrders = dlob.getDLOBOrders();
530
+ expect(dlobOrders.length).to.equal(10);
531
+ expect(isVariant(dlobOrders[0].order.marketType, 'perp')).to.equal(true);
532
+ expect(isVariant(dlobOrders[5].order.marketType, 'spot')).to.equal(true);
533
+
534
+ const coder = DLOBOrdersCoder.create();
535
+ const encodedOrders = coder.encode(dlobOrders);
536
+ const decodedDLOBOrders = coder.decode(encodedOrders);
537
+ expect(decodedDLOBOrders.length).to.equal(10);
538
+ expect(isVariant(decodedDLOBOrders[0].order.marketType, 'perp')).to.equal(
539
+ true
540
+ );
541
+ expect(isVariant(decodedDLOBOrders[5].order.marketType, 'spot')).to.equal(
542
+ true
543
+ );
544
+ });
411
545
  });
412
546
 
413
547
  describe('DLOB Perp Tests', () => {
414
548
  it('Test proper bids', () => {
415
549
  const vAsk = new BN(15);
416
550
  const vBid = new BN(10);
417
- const mockUserMap = new MockUserMap();
418
- const dlob = new DLOB(
419
- mockPerpMarkets,
420
- mockSpotMarkets,
421
- mockStateAccount,
422
- mockUserMap,
423
- false
424
- );
551
+ const dlob = new DLOB();
425
552
  const marketIndex = 0;
426
553
 
427
554
  const slot = 12;
@@ -504,8 +631,6 @@ describe('DLOB Perp Tests', () => {
504
631
  }
505
632
 
506
633
  const user = Keypair.generate();
507
- const userAuth = Keypair.generate();
508
- mockUserMap.addUserAccountAuthority(user.publicKey, userAuth.publicKey);
509
634
 
510
635
  insertOrderToDLOB(
511
636
  dlob,
@@ -612,14 +737,7 @@ describe('DLOB Perp Tests', () => {
612
737
  it('Test proper bids on multiple markets', () => {
613
738
  const vAsk = new BN(15);
614
739
  const vBid = new BN(10);
615
- const mockUserMap = new MockUserMap();
616
- const dlob = new DLOB(
617
- mockPerpMarkets,
618
- mockSpotMarkets,
619
- mockStateAccount,
620
- mockUserMap,
621
- false
622
- );
740
+ const dlob = new DLOB();
623
741
  const marketIndex0 = 0;
624
742
  const marketIndex1 = 1;
625
743
 
@@ -702,8 +820,6 @@ describe('DLOB Perp Tests', () => {
702
820
  }
703
821
 
704
822
  const user = Keypair.generate();
705
- const userAuth = Keypair.generate();
706
- mockUserMap.addUserAccountAuthority(user.publicKey, userAuth.publicKey);
707
823
 
708
824
  insertOrderToDLOB(
709
825
  dlob,
@@ -767,14 +883,7 @@ describe('DLOB Perp Tests', () => {
767
883
  it('Test proper asks', () => {
768
884
  const vAsk = new BN(15);
769
885
  const vBid = new BN(10);
770
- const mockUserMap = new MockUserMap();
771
- const dlob = new DLOB(
772
- mockPerpMarkets,
773
- mockSpotMarkets,
774
- mockStateAccount,
775
- mockUserMap,
776
- false
777
- );
886
+ const dlob = new DLOB();
778
887
  const marketIndex = 0;
779
888
 
780
889
  const slot = 12;
@@ -857,8 +966,6 @@ describe('DLOB Perp Tests', () => {
857
966
  }
858
967
 
859
968
  const user = Keypair.generate();
860
- const userAuth = Keypair.generate();
861
- mockUserMap.addUserAccountAuthority(user.publicKey, userAuth.publicKey);
862
969
 
863
970
  insertOrderToDLOB(
864
971
  dlob,
@@ -954,14 +1061,7 @@ describe('DLOB Perp Tests', () => {
954
1061
  it('Test insert market orders', () => {
955
1062
  const vAsk = new BN(11);
956
1063
  const vBid = new BN(10);
957
- const mockUserMap = new MockUserMap();
958
- const dlob = new DLOB(
959
- mockPerpMarkets,
960
- mockSpotMarkets,
961
- mockStateAccount,
962
- mockUserMap,
963
- false
964
- );
1064
+ const dlob = new DLOB();
965
1065
  const marketIndex = 0;
966
1066
  const oracle = {
967
1067
  price: vBid.add(vAsk).div(new BN(2)),
@@ -973,8 +1073,6 @@ describe('DLOB Perp Tests', () => {
973
1073
  // 3 mkt buys
974
1074
  for (let i = 0; i < 3; i++) {
975
1075
  const user = Keypair.generate();
976
- const userAuth = Keypair.generate();
977
- mockUserMap.addUserAccountAuthority(user.publicKey, userAuth.publicKey);
978
1076
 
979
1077
  insertOrderToDLOB(
980
1078
  dlob,
@@ -994,8 +1092,6 @@ describe('DLOB Perp Tests', () => {
994
1092
  // 3 mkt sells
995
1093
  for (let i = 0; i < 3; i++) {
996
1094
  const user = Keypair.generate();
997
- const userAuth = Keypair.generate();
998
- mockUserMap.addUserAccountAuthority(user.publicKey, userAuth.publicKey);
999
1095
 
1000
1096
  insertOrderToDLOB(
1001
1097
  dlob,
@@ -1066,34 +1162,14 @@ describe('DLOB Perp Tests', () => {
1066
1162
  hasSufficientNumberOfDataPoints: true,
1067
1163
  };
1068
1164
 
1069
- const mockUserMap = new MockUserMap();
1070
1165
  const user0 = Keypair.generate();
1071
- const userAuth0 = Keypair.generate();
1072
1166
  const user1 = Keypair.generate();
1073
- const userAuth1 = Keypair.generate();
1074
1167
  const user2 = Keypair.generate();
1075
- const userAuth2 = Keypair.generate();
1076
1168
  const user3 = Keypair.generate();
1077
- const userAuth3 = Keypair.generate();
1078
1169
  const user4 = Keypair.generate();
1079
- const userAuth4 = Keypair.generate();
1080
1170
  const user5 = Keypair.generate();
1081
- const userAuth5 = Keypair.generate();
1082
-
1083
- mockUserMap.addUserAccountAuthority(user0.publicKey, userAuth0.publicKey);
1084
- mockUserMap.addUserAccountAuthority(user1.publicKey, userAuth1.publicKey);
1085
- mockUserMap.addUserAccountAuthority(user2.publicKey, userAuth2.publicKey);
1086
- mockUserMap.addUserAccountAuthority(user3.publicKey, userAuth3.publicKey);
1087
- mockUserMap.addUserAccountAuthority(user4.publicKey, userAuth4.publicKey);
1088
- mockUserMap.addUserAccountAuthority(user5.publicKey, userAuth5.publicKey);
1089
-
1090
- const dlob = new DLOB(
1091
- mockPerpMarkets,
1092
- mockSpotMarkets,
1093
- mockStateAccount,
1094
- mockUserMap,
1095
- false
1096
- );
1171
+
1172
+ const dlob = new DLOB();
1097
1173
  const marketIndex = 0;
1098
1174
  insertOrderToDLOB(
1099
1175
  dlob,
@@ -1238,34 +1314,14 @@ describe('DLOB Perp Tests', () => {
1238
1314
  hasSufficientNumberOfDataPoints: true,
1239
1315
  };
1240
1316
 
1241
- const mockUserMap = new MockUserMap();
1242
1317
  const user0 = Keypair.generate();
1243
- const userAuth0 = Keypair.generate();
1244
1318
  const user1 = Keypair.generate();
1245
- const userAuth1 = Keypair.generate();
1246
1319
  const user2 = Keypair.generate();
1247
- const userAuth2 = Keypair.generate();
1248
1320
  const user3 = Keypair.generate();
1249
- const userAuth3 = Keypair.generate();
1250
1321
  const user4 = Keypair.generate();
1251
- const userAuth4 = Keypair.generate();
1252
1322
  const user5 = Keypair.generate();
1253
- const userAuth5 = Keypair.generate();
1254
-
1255
- mockUserMap.addUserAccountAuthority(user0.publicKey, userAuth0.publicKey);
1256
- mockUserMap.addUserAccountAuthority(user1.publicKey, userAuth1.publicKey);
1257
- mockUserMap.addUserAccountAuthority(user2.publicKey, userAuth2.publicKey);
1258
- mockUserMap.addUserAccountAuthority(user3.publicKey, userAuth3.publicKey);
1259
- mockUserMap.addUserAccountAuthority(user4.publicKey, userAuth4.publicKey);
1260
- mockUserMap.addUserAccountAuthority(user5.publicKey, userAuth5.publicKey);
1261
-
1262
- const dlob = new DLOB(
1263
- mockPerpMarkets,
1264
- mockSpotMarkets,
1265
- mockStateAccount,
1266
- mockUserMap,
1267
- false
1268
- );
1323
+
1324
+ const dlob = new DLOB();
1269
1325
  const marketIndex = 0;
1270
1326
 
1271
1327
  // insert floating bids
@@ -1430,30 +1486,13 @@ describe('DLOB Perp Tests', () => {
1430
1486
  const vAsk = new BN(15);
1431
1487
  const vBid = new BN(10);
1432
1488
 
1433
- const mockUserMap = new MockUserMap();
1434
1489
  const user0 = Keypair.generate();
1435
- const user0Auth = Keypair.generate();
1436
1490
  const user1 = Keypair.generate();
1437
- const user1Auth = Keypair.generate();
1438
1491
  const user2 = Keypair.generate();
1439
- const user2Auth = Keypair.generate();
1440
1492
  const user3 = Keypair.generate();
1441
- const user3Auth = Keypair.generate();
1442
1493
  const user4 = Keypair.generate();
1443
- const user4Auth = Keypair.generate();
1444
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
1445
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
1446
- mockUserMap.addUserAccountAuthority(user2.publicKey, user2Auth.publicKey);
1447
- mockUserMap.addUserAccountAuthority(user3.publicKey, user3Auth.publicKey);
1448
- mockUserMap.addUserAccountAuthority(user4.publicKey, user4Auth.publicKey);
1449
-
1450
- const dlob = new DLOB(
1451
- mockPerpMarkets,
1452
- mockSpotMarkets,
1453
- mockStateAccount,
1454
- mockUserMap,
1455
- false
1456
- );
1494
+
1495
+ const dlob = new DLOB();
1457
1496
  const marketIndex = 0;
1458
1497
 
1459
1498
  // insert some limit buys above vamm bid, below ask
@@ -1554,7 +1593,9 @@ describe('DLOB Perp Tests', () => {
1554
1593
  slot: new BN(12),
1555
1594
  confidence: new BN(1),
1556
1595
  hasSufficientNumberOfDataPoints: true,
1557
- }
1596
+ },
1597
+ mockStateAccount,
1598
+ mockPerpMarkets[marketIndex]
1558
1599
  );
1559
1600
  console.log(`Filled nodes: ${nodesToFillAfter.length}`);
1560
1601
  for (const n of nodesToFillAfter) {
@@ -1575,27 +1616,12 @@ describe('DLOB Perp Tests', () => {
1575
1616
  const vAsk = new BN(15);
1576
1617
  const vBid = new BN(10);
1577
1618
 
1578
- const mockUserMap = new MockUserMap();
1579
1619
  const user0 = Keypair.generate();
1580
- const user0Auth = Keypair.generate();
1581
1620
  const user1 = Keypair.generate();
1582
- const user1Auth = Keypair.generate();
1583
1621
  const user2 = Keypair.generate();
1584
- const user2Auth = Keypair.generate();
1585
1622
  const user3 = Keypair.generate();
1586
- const user3Auth = Keypair.generate();
1587
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
1588
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
1589
- mockUserMap.addUserAccountAuthority(user2.publicKey, user2Auth.publicKey);
1590
- mockUserMap.addUserAccountAuthority(user3.publicKey, user3Auth.publicKey);
1591
-
1592
- const dlob = new DLOB(
1593
- mockPerpMarkets,
1594
- mockSpotMarkets,
1595
- mockStateAccount,
1596
- mockUserMap,
1597
- false
1598
- );
1623
+
1624
+ const dlob = new DLOB();
1599
1625
  const marketIndex = 0;
1600
1626
 
1601
1627
  // insert some limit sells below vAMM ask, above bid
@@ -1686,7 +1712,9 @@ describe('DLOB Perp Tests', () => {
1686
1712
  slot: new BN(endSlot),
1687
1713
  confidence: new BN(1),
1688
1714
  hasSufficientNumberOfDataPoints: true,
1689
- }
1715
+ },
1716
+ mockStateAccount,
1717
+ mockPerpMarkets[marketIndex]
1690
1718
  );
1691
1719
  console.log(`Filled nodes: ${nodesToFillAfter.length}`);
1692
1720
  for (const n of nodesToFillAfter) {
@@ -1719,30 +1747,13 @@ describe('DLOB Perp Tests', () => {
1719
1747
  const vAsk = new BN(15);
1720
1748
  const vBid = new BN(8);
1721
1749
 
1722
- const mockUserMap = new MockUserMap();
1723
1750
  const user0 = Keypair.generate();
1724
- const user0Auth = Keypair.generate();
1725
1751
  const user1 = Keypair.generate();
1726
- const user1Auth = Keypair.generate();
1727
1752
  const user2 = Keypair.generate();
1728
- const user2Auth = Keypair.generate();
1729
1753
  const user3 = Keypair.generate();
1730
- const user3Auth = Keypair.generate();
1731
1754
  const user4 = Keypair.generate();
1732
- const user4Auth = Keypair.generate();
1733
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
1734
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
1735
- mockUserMap.addUserAccountAuthority(user2.publicKey, user2Auth.publicKey);
1736
- mockUserMap.addUserAccountAuthority(user3.publicKey, user3Auth.publicKey);
1737
- mockUserMap.addUserAccountAuthority(user4.publicKey, user4Auth.publicKey);
1738
-
1739
- const dlob = new DLOB(
1740
- mockPerpMarkets,
1741
- mockSpotMarkets,
1742
- mockStateAccount,
1743
- mockUserMap,
1744
- false
1745
- );
1755
+
1756
+ const dlob = new DLOB();
1746
1757
  const marketIndex = 0;
1747
1758
 
1748
1759
  const slot = 12;
@@ -1801,7 +1812,9 @@ describe('DLOB Perp Tests', () => {
1801
1812
  slot, // auction over
1802
1813
  Date.now(),
1803
1814
  MarketType.PERP,
1804
- oracle
1815
+ oracle,
1816
+ mockStateAccount,
1817
+ mockPerpMarkets[marketIndex]
1805
1818
  );
1806
1819
  expect(nodesToFillBefore.length).to.equal(0);
1807
1820
 
@@ -1840,7 +1853,9 @@ describe('DLOB Perp Tests', () => {
1840
1853
  slot, // auction over
1841
1854
  Date.now(),
1842
1855
  MarketType.PERP,
1843
- oracle
1856
+ oracle,
1857
+ mockStateAccount,
1858
+ mockPerpMarkets[marketIndex]
1844
1859
  );
1845
1860
  const mktNodes = dlob.findExpiredNodesToFill(
1846
1861
  marketIndex,
@@ -1870,51 +1885,20 @@ describe('DLOB Perp Tests', () => {
1870
1885
  const vAsk = new BN(15);
1871
1886
  const vBid = new BN(8);
1872
1887
 
1873
- const mockUserMap = new MockUserMap();
1874
1888
  const user0 = Keypair.generate();
1875
- const user0Auth = Keypair.generate();
1876
1889
  const user1 = Keypair.generate();
1877
- const user1Auth = Keypair.generate();
1878
1890
  const user2 = Keypair.generate();
1879
- const user2Auth = Keypair.generate();
1880
1891
  const user3 = Keypair.generate();
1881
- const user3Auth = Keypair.generate();
1882
1892
  const user4 = Keypair.generate();
1883
- const user4Auth = Keypair.generate();
1884
1893
  const user5 = Keypair.generate();
1885
- const user5Auth = Keypair.generate();
1886
1894
  const user6 = Keypair.generate();
1887
- const user6Auth = Keypair.generate();
1888
1895
  const user7 = Keypair.generate();
1889
- const user7Auth = Keypair.generate();
1890
1896
  const user8 = Keypair.generate();
1891
- const user8Auth = Keypair.generate();
1892
1897
  const user9 = Keypair.generate();
1893
- const user9Auth = Keypair.generate();
1894
1898
  const user10 = Keypair.generate();
1895
- const user10Auth = Keypair.generate();
1896
1899
  const user11 = Keypair.generate();
1897
- const user11Auth = Keypair.generate();
1898
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
1899
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
1900
- mockUserMap.addUserAccountAuthority(user2.publicKey, user2Auth.publicKey);
1901
- mockUserMap.addUserAccountAuthority(user3.publicKey, user3Auth.publicKey);
1902
- mockUserMap.addUserAccountAuthority(user4.publicKey, user4Auth.publicKey);
1903
- mockUserMap.addUserAccountAuthority(user5.publicKey, user5Auth.publicKey);
1904
- mockUserMap.addUserAccountAuthority(user6.publicKey, user6Auth.publicKey);
1905
- mockUserMap.addUserAccountAuthority(user7.publicKey, user7Auth.publicKey);
1906
- mockUserMap.addUserAccountAuthority(user8.publicKey, user8Auth.publicKey);
1907
- mockUserMap.addUserAccountAuthority(user9.publicKey, user9Auth.publicKey);
1908
- mockUserMap.addUserAccountAuthority(user10.publicKey, user10Auth.publicKey);
1909
- mockUserMap.addUserAccountAuthority(user11.publicKey, user11Auth.publicKey);
1910
-
1911
- const dlob = new DLOB(
1912
- mockPerpMarkets,
1913
- mockSpotMarkets,
1914
- mockStateAccount,
1915
- mockUserMap,
1916
- false
1917
- );
1900
+
1901
+ const dlob = new DLOB();
1918
1902
  const marketIndex = 0;
1919
1903
 
1920
1904
  const slot = 20;
@@ -2126,7 +2110,8 @@ describe('DLOB Perp Tests', () => {
2126
2110
  marketIndex,
2127
2111
  slot,
2128
2112
  oracle.price,
2129
- MarketType.PERP
2113
+ MarketType.PERP,
2114
+ mockStateAccount
2130
2115
  );
2131
2116
  console.log(`nodesToTriggeR: ${nodesToTrigger.length}`);
2132
2117
  for (const [idx, n] of nodesToTrigger.entries()) {
@@ -2138,21 +2123,10 @@ describe('DLOB Perp Tests', () => {
2138
2123
  const vAsk = new BN(15);
2139
2124
  const vBid = new BN(8);
2140
2125
 
2141
- const mockUserMap = new MockUserMap();
2142
2126
  const user0 = Keypair.generate();
2143
- const user0Auth = Keypair.generate();
2144
2127
  const user1 = Keypair.generate();
2145
- const user1Auth = Keypair.generate();
2146
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
2147
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
2148
2128
 
2149
- const dlob = new DLOB(
2150
- mockPerpMarkets,
2151
- mockSpotMarkets,
2152
- mockStateAccount,
2153
- mockUserMap,
2154
- false
2155
- );
2129
+ const dlob = new DLOB();
2156
2130
  const marketIndex = 0;
2157
2131
 
2158
2132
  const slot = 20;
@@ -2206,7 +2180,9 @@ describe('DLOB Perp Tests', () => {
2206
2180
  slot: new BN(slot0),
2207
2181
  confidence: new BN(1),
2208
2182
  hasSufficientNumberOfDataPoints: true,
2209
- }
2183
+ },
2184
+ mockStateAccount,
2185
+ mockPerpMarkets[marketIndex]
2210
2186
  );
2211
2187
  expect(nodesToFillBefore.length).to.equal(0);
2212
2188
 
@@ -2225,7 +2201,9 @@ describe('DLOB Perp Tests', () => {
2225
2201
  slot: new BN(slot1),
2226
2202
  confidence: new BN(1),
2227
2203
  hasSufficientNumberOfDataPoints: true,
2228
- }
2204
+ },
2205
+ mockStateAccount,
2206
+ mockPerpMarkets[marketIndex]
2229
2207
  );
2230
2208
  console.log(`Filled nodes: ${nodesToFillAfter.length}`);
2231
2209
  for (const n of nodesToFillAfter) {
@@ -2242,30 +2220,13 @@ describe('DLOB Perp Tests', () => {
2242
2220
  const vAsk = new BN(15).mul(PRICE_PRECISION);
2243
2221
  const vBid = new BN(8).mul(PRICE_PRECISION);
2244
2222
 
2245
- const mockUserMap = new MockUserMap();
2246
2223
  const user0 = Keypair.generate();
2247
- const user0Auth = Keypair.generate();
2248
2224
  const user1 = Keypair.generate();
2249
- const user1Auth = Keypair.generate();
2250
2225
  const user2 = Keypair.generate();
2251
- const user2Auth = Keypair.generate();
2252
2226
  const user3 = Keypair.generate();
2253
- const user3Auth = Keypair.generate();
2254
2227
  const user4 = Keypair.generate();
2255
- const user4Auth = Keypair.generate();
2256
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
2257
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
2258
- mockUserMap.addUserAccountAuthority(user2.publicKey, user2Auth.publicKey);
2259
- mockUserMap.addUserAccountAuthority(user3.publicKey, user3Auth.publicKey);
2260
- mockUserMap.addUserAccountAuthority(user4.publicKey, user4Auth.publicKey);
2261
-
2262
- const dlob = new DLOB(
2263
- mockPerpMarkets,
2264
- mockSpotMarkets,
2265
- mockStateAccount,
2266
- mockUserMap,
2267
- false
2268
- );
2228
+
2229
+ const dlob = new DLOB();
2269
2230
  const marketIndex = 0;
2270
2231
 
2271
2232
  const slot = 12;
@@ -2340,7 +2301,9 @@ describe('DLOB Perp Tests', () => {
2340
2301
  slot: new BN(slot),
2341
2302
  confidence: new BN(1),
2342
2303
  hasSufficientNumberOfDataPoints: true,
2343
- }
2304
+ },
2305
+ mockStateAccount,
2306
+ mockPerpMarkets[marketIndex]
2344
2307
  );
2345
2308
  expect(nodesToFillBefore.length).to.equal(0);
2346
2309
 
@@ -2384,7 +2347,9 @@ describe('DLOB Perp Tests', () => {
2384
2347
  slot: new BN(slot),
2385
2348
  confidence: new BN(1),
2386
2349
  hasSufficientNumberOfDataPoints: true,
2387
- }
2350
+ },
2351
+ mockStateAccount,
2352
+ mockPerpMarkets[marketIndex]
2388
2353
  );
2389
2354
  const mktNodes = dlob.findExpiredNodesToFill(
2390
2355
  marketIndex,
@@ -2418,30 +2383,13 @@ describe('DLOB Perp Tests', () => {
2418
2383
  const vAsk = new BN(15).mul(PRICE_PRECISION);
2419
2384
  const vBid = new BN(8).mul(PRICE_PRECISION);
2420
2385
 
2421
- const mockUserMap = new MockUserMap();
2422
2386
  const user0 = Keypair.generate();
2423
- const user0Auth = Keypair.generate();
2424
2387
  const user1 = Keypair.generate();
2425
- const user1Auth = Keypair.generate();
2426
2388
  const user2 = Keypair.generate();
2427
- const user2Auth = Keypair.generate();
2428
2389
  const user3 = Keypair.generate();
2429
- const user3Auth = Keypair.generate();
2430
2390
  const user4 = Keypair.generate();
2431
- const user4Auth = Keypair.generate();
2432
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
2433
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
2434
- mockUserMap.addUserAccountAuthority(user2.publicKey, user2Auth.publicKey);
2435
- mockUserMap.addUserAccountAuthority(user3.publicKey, user3Auth.publicKey);
2436
- mockUserMap.addUserAccountAuthority(user4.publicKey, user4Auth.publicKey);
2437
-
2438
- const dlob = new DLOB(
2439
- mockPerpMarkets,
2440
- mockSpotMarkets,
2441
- mockStateAccount,
2442
- mockUserMap,
2443
- false
2444
- );
2391
+
2392
+ const dlob = new DLOB();
2445
2393
  const marketIndex = 0;
2446
2394
 
2447
2395
  const slot = 12;
@@ -2556,7 +2504,9 @@ describe('DLOB Perp Tests', () => {
2556
2504
  auctionOverTs, // auction in progress
2557
2505
  ts,
2558
2506
  MarketType.PERP,
2559
- oracle
2507
+ oracle,
2508
+ mockStateAccount,
2509
+ mockPerpMarkets[marketIndex]
2560
2510
  );
2561
2511
 
2562
2512
  console.log(`Filled nodes: ${nodesToFillAfter.length}`);
@@ -2578,30 +2528,13 @@ describe('DLOB Perp Tests', () => {
2578
2528
  const vAsk = new BN(15).mul(PRICE_PRECISION);
2579
2529
  const vBid = new BN(8).mul(PRICE_PRECISION);
2580
2530
 
2581
- const mockUserMap = new MockUserMap();
2582
2531
  const user0 = Keypair.generate();
2583
- const user0Auth = Keypair.generate();
2584
2532
  const user1 = Keypair.generate();
2585
- const user1Auth = Keypair.generate();
2586
2533
  const user2 = Keypair.generate();
2587
- const user2Auth = Keypair.generate();
2588
2534
  const user3 = Keypair.generate();
2589
- const user3Auth = Keypair.generate();
2590
2535
  const user4 = Keypair.generate();
2591
- const user4Auth = Keypair.generate();
2592
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
2593
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
2594
- mockUserMap.addUserAccountAuthority(user2.publicKey, user2Auth.publicKey);
2595
- mockUserMap.addUserAccountAuthority(user3.publicKey, user3Auth.publicKey);
2596
- mockUserMap.addUserAccountAuthority(user4.publicKey, user4Auth.publicKey);
2597
-
2598
- const dlob = new DLOB(
2599
- mockPerpMarkets,
2600
- mockSpotMarkets,
2601
- mockStateAccount,
2602
- mockUserMap,
2603
- false
2604
- );
2536
+
2537
+ const dlob = new DLOB();
2605
2538
  const marketIndex = 0;
2606
2539
 
2607
2540
  const slot = 12;
@@ -2670,7 +2603,9 @@ describe('DLOB Perp Tests', () => {
2670
2603
  slot,
2671
2604
  Date.now(),
2672
2605
  MarketType.PERP,
2673
- oracle
2606
+ oracle,
2607
+ mockStateAccount,
2608
+ mockPerpMarkets[marketIndex]
2674
2609
  );
2675
2610
  expect(nodesToFillBefore.length).to.equal(0);
2676
2611
 
@@ -2709,7 +2644,9 @@ describe('DLOB Perp Tests', () => {
2709
2644
  slot, // auction in progress
2710
2645
  Date.now(),
2711
2646
  MarketType.PERP,
2712
- oracle
2647
+ oracle,
2648
+ mockStateAccount,
2649
+ mockPerpMarkets[marketIndex]
2713
2650
  );
2714
2651
  const mktNodes = dlob.findExpiredNodesToFill(
2715
2652
  marketIndex,
@@ -2761,30 +2698,13 @@ describe('DLOB Perp Tests', () => {
2761
2698
  const vAsk = new BN(15).mul(PRICE_PRECISION);
2762
2699
  const vBid = new BN(8).mul(PRICE_PRECISION);
2763
2700
 
2764
- const mockUserMap = new MockUserMap();
2765
2701
  const user0 = Keypair.generate();
2766
- const user0Auth = Keypair.generate();
2767
2702
  const user1 = Keypair.generate();
2768
- const user1Auth = Keypair.generate();
2769
2703
  const user2 = Keypair.generate();
2770
- const user2Auth = Keypair.generate();
2771
2704
  const user3 = Keypair.generate();
2772
- const user3Auth = Keypair.generate();
2773
2705
  const user4 = Keypair.generate();
2774
- const user4Auth = Keypair.generate();
2775
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
2776
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
2777
- mockUserMap.addUserAccountAuthority(user2.publicKey, user2Auth.publicKey);
2778
- mockUserMap.addUserAccountAuthority(user3.publicKey, user3Auth.publicKey);
2779
- mockUserMap.addUserAccountAuthority(user4.publicKey, user4Auth.publicKey);
2780
-
2781
- const dlob = new DLOB(
2782
- mockPerpMarkets,
2783
- mockSpotMarkets,
2784
- mockStateAccount,
2785
- mockUserMap,
2786
- false
2787
- );
2706
+
2707
+ const dlob = new DLOB();
2788
2708
  const marketIndex = 0;
2789
2709
 
2790
2710
  const slot = 12;
@@ -2856,7 +2776,9 @@ describe('DLOB Perp Tests', () => {
2856
2776
  slot,
2857
2777
  ts,
2858
2778
  MarketType.PERP,
2859
- oracle
2779
+ oracle,
2780
+ mockStateAccount,
2781
+ mockPerpMarkets[marketIndex]
2860
2782
  );
2861
2783
  expect(nodesToFillBefore.length).to.equal(0);
2862
2784
 
@@ -2903,7 +2825,9 @@ describe('DLOB Perp Tests', () => {
2903
2825
  afterAuctionSlot,
2904
2826
  afterAuctionTs,
2905
2827
  MarketType.PERP,
2906
- oracle
2828
+ oracle,
2829
+ mockStateAccount,
2830
+ mockPerpMarkets[marketIndex]
2907
2831
  );
2908
2832
 
2909
2833
  console.log(`Filled nodes: ${nodesToFillAfter.length}`);
@@ -2938,24 +2862,11 @@ describe('DLOB Perp Tests', () => {
2938
2862
  const vAsk = new BN(15).mul(PRICE_PRECISION);
2939
2863
  const vBid = new BN(8).mul(PRICE_PRECISION);
2940
2864
 
2941
- const mockUserMap = new MockUserMap();
2942
2865
  const user0 = Keypair.generate();
2943
- const user0Auth = Keypair.generate();
2944
2866
  const user1 = Keypair.generate();
2945
- const user1Auth = Keypair.generate();
2946
2867
  const user2 = Keypair.generate();
2947
- const user2Auth = Keypair.generate();
2948
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
2949
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
2950
- mockUserMap.addUserAccountAuthority(user2.publicKey, user2Auth.publicKey);
2951
-
2952
- const dlob = new DLOB(
2953
- mockPerpMarkets,
2954
- mockSpotMarkets,
2955
- mockStateAccount,
2956
- mockUserMap,
2957
- false
2958
- );
2868
+
2869
+ const dlob = new DLOB();
2959
2870
  const marketIndex = 0;
2960
2871
 
2961
2872
  const slot = 12;
@@ -3023,7 +2934,9 @@ describe('DLOB Perp Tests', () => {
3023
2934
  slot,
3024
2935
  ts,
3025
2936
  MarketType.PERP,
3026
- oracle
2937
+ oracle,
2938
+ mockStateAccount,
2939
+ mockPerpMarkets[marketIndex]
3027
2940
  );
3028
2941
  expect(nodesToFillBefore.length).to.equal(0);
3029
2942
 
@@ -3038,7 +2951,9 @@ describe('DLOB Perp Tests', () => {
3038
2951
  afterAuctionSlot,
3039
2952
  afterAuctionTs,
3040
2953
  MarketType.PERP,
3041
- oracle
2954
+ oracle,
2955
+ mockStateAccount,
2956
+ mockPerpMarkets[marketIndex]
3042
2957
  );
3043
2958
 
3044
2959
  console.log(`Book state after fill:`);
@@ -3076,21 +2991,10 @@ describe('DLOB Perp Tests', () => {
3076
2991
  const vAsk = new BN(20).mul(PRICE_PRECISION);
3077
2992
  const vBid = new BN(5).mul(PRICE_PRECISION);
3078
2993
 
3079
- const mockUserMap = new MockUserMap();
3080
2994
  const user0 = Keypair.generate();
3081
- const user0Auth = Keypair.generate();
3082
2995
  const user1 = Keypair.generate();
3083
- const user1Auth = Keypair.generate();
3084
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
3085
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
3086
2996
 
3087
- const dlob = new DLOB(
3088
- mockPerpMarkets,
3089
- mockSpotMarkets,
3090
- mockStateAccount,
3091
- mockUserMap,
3092
- false
3093
- );
2997
+ const dlob = new DLOB();
3094
2998
  const marketIndex = 0;
3095
2999
 
3096
3000
  const slot = 12;
@@ -3145,7 +3049,9 @@ describe('DLOB Perp Tests', () => {
3145
3049
  slot,
3146
3050
  ts,
3147
3051
  MarketType.PERP,
3148
- oracle
3052
+ oracle,
3053
+ mockStateAccount,
3054
+ mockPerpMarkets[marketIndex]
3149
3055
  );
3150
3056
  console.log(`Filled nodes: ${nodesToFillBefore.length}`);
3151
3057
  for (const n of nodesToFillBefore) {
@@ -3164,107 +3070,14 @@ describe('DLOB Perp Tests', () => {
3164
3070
  ).to.equal(3);
3165
3071
  });
3166
3072
 
3167
- it('Test will not fill two limit orders by same authority', () => {
3168
- const vAsk = new BN(20).mul(PRICE_PRECISION);
3169
- const vBid = new BN(5).mul(PRICE_PRECISION);
3170
-
3171
- const mockUserMap = new MockUserMap();
3172
- const user0 = Keypair.generate();
3173
- const user0Auth = Keypair.generate();
3174
- const user1 = Keypair.generate();
3175
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
3176
- mockUserMap.addUserAccountAuthority(user1.publicKey, user0Auth.publicKey);
3177
-
3178
- const dlob = new DLOB(
3179
- mockPerpMarkets,
3180
- mockSpotMarkets,
3181
- mockStateAccount,
3182
- mockUserMap,
3183
- false
3184
- );
3185
- const marketIndex = 0;
3186
-
3187
- const slot = 12;
3188
- const ts = 12;
3189
- const oracle = {
3190
- price: vBid.add(vAsk).div(new BN(2)), // 11.5
3191
- slot: new BN(slot),
3192
- confidence: new BN(1),
3193
- hasSufficientNumberOfDataPoints: true,
3194
- };
3195
-
3196
- // insert a sell below the bid, but above vBid
3197
- insertOrderToDLOB(
3198
- dlob,
3199
- user0.publicKey,
3200
- OrderType.LIMIT,
3201
- MarketType.PERP,
3202
- 3, // orderId
3203
- marketIndex,
3204
- new BN(10).mul(PRICE_PRECISION), // price; crosses bid
3205
- new BN(1).mul(BASE_PRECISION), // quantity
3206
- PositionDirection.SHORT,
3207
- vAsk,
3208
- vBid,
3209
- new BN(slot),
3210
- new BN(200)
3211
- );
3212
- // insert a buy above the vBid
3213
- insertOrderToDLOB(
3214
- dlob,
3215
- user1.publicKey,
3216
- OrderType.LIMIT,
3217
- MarketType.PERP,
3218
- 2, // orderId
3219
- marketIndex,
3220
- new BN(15).mul(PRICE_PRECISION), // price,
3221
- new BN(8768).mul(BASE_PRECISION).div(new BN(10000)), // quantity
3222
- PositionDirection.LONG,
3223
- vBid,
3224
- vAsk,
3225
- new BN(slot),
3226
- new BN(200)
3227
- );
3228
-
3229
- console.log(`Book state before fill:`);
3230
- printBookState(dlob, marketIndex, vBid, vAsk, slot, oracle);
3231
-
3232
- const nodesToFillBefore = dlob.findNodesToFill(
3233
- marketIndex,
3234
- vBid,
3235
- vAsk,
3236
- slot,
3237
- ts,
3238
- MarketType.PERP,
3239
- oracle
3240
- );
3241
- console.log(`Filled nodes: ${nodesToFillBefore.length}`);
3242
- for (const n of nodesToFillBefore) {
3243
- printCrossedNodes(n, slot);
3244
- }
3245
-
3246
- expect(nodesToFillBefore.length).to.equal(0);
3247
- });
3248
-
3249
3073
  it('Test fills 0 price market order with limit orders better than vAMM', () => {
3250
3074
  const vAsk = new BN(20).mul(PRICE_PRECISION);
3251
3075
  const vBid = new BN(5).mul(PRICE_PRECISION);
3252
3076
 
3253
- const mockUserMap = new MockUserMap();
3254
3077
  const user0 = Keypair.generate();
3255
- const user0Auth = Keypair.generate();
3256
3078
  const user1 = Keypair.generate();
3257
- const user1Auth = Keypair.generate();
3258
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
3259
- mockUserMap.addUserAccountAuthority(user1.publicKey, user1Auth.publicKey);
3260
3079
 
3261
- const dlob = new DLOB(
3262
- mockPerpMarkets,
3263
- mockSpotMarkets,
3264
- mockStateAccount,
3265
- mockUserMap,
3266
- false
3267
- );
3080
+ const dlob = new DLOB();
3268
3081
  const marketIndex = 0;
3269
3082
 
3270
3083
  const slot = 12;
@@ -3325,7 +3138,9 @@ describe('DLOB Perp Tests', () => {
3325
3138
  auctionEndSlot, // auction ends
3326
3139
  ts,
3327
3140
  MarketType.PERP,
3328
- oracle
3141
+ oracle,
3142
+ mockStateAccount,
3143
+ mockPerpMarkets[marketIndex]
3329
3144
  );
3330
3145
  console.log(`Nodes to fill: ${nodesToFillBefore.length}`);
3331
3146
  for (const n of nodesToFillBefore) {
@@ -3349,14 +3164,7 @@ describe('DLOB Spot Tests', () => {
3349
3164
  it('Test proper bids', () => {
3350
3165
  const vAsk = new BN(115);
3351
3166
  const vBid = new BN(100);
3352
- const mockUserMap = new MockUserMap();
3353
- const dlob = new DLOB(
3354
- mockPerpMarkets,
3355
- mockSpotMarkets,
3356
- mockStateAccount,
3357
- mockUserMap,
3358
- false
3359
- );
3167
+ const dlob = new DLOB();
3360
3168
  const marketIndex = 0;
3361
3169
 
3362
3170
  const slot = 12;
@@ -3420,8 +3228,6 @@ describe('DLOB Spot Tests', () => {
3420
3228
 
3421
3229
  for (const t of testCases) {
3422
3230
  const user0 = Keypair.generate();
3423
- const user0Auth = Keypair.generate();
3424
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
3425
3231
 
3426
3232
  insertOrderToDLOB(
3427
3233
  dlob,
@@ -3474,14 +3280,7 @@ describe('DLOB Spot Tests', () => {
3474
3280
  it('Test proper bids on multiple markets', () => {
3475
3281
  const vAsk = new BN(15);
3476
3282
  const vBid = new BN(10);
3477
- const mockUserMap = new MockUserMap();
3478
- const dlob = new DLOB(
3479
- mockPerpMarkets,
3480
- mockSpotMarkets,
3481
- mockStateAccount,
3482
- mockUserMap,
3483
- false
3484
- );
3283
+ const dlob = new DLOB();
3485
3284
  const marketIndex0 = 0;
3486
3285
  const marketIndex1 = 1;
3487
3286
 
@@ -3553,8 +3352,6 @@ describe('DLOB Spot Tests', () => {
3553
3352
 
3554
3353
  for (const t of testCases) {
3555
3354
  const user0 = Keypair.generate();
3556
- const user0Auth = Keypair.generate();
3557
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
3558
3355
 
3559
3356
  insertOrderToDLOB(
3560
3357
  dlob,
@@ -3618,14 +3415,7 @@ describe('DLOB Spot Tests', () => {
3618
3415
  it('Test proper asks', () => {
3619
3416
  const vAsk = new BN(15);
3620
3417
  const vBid = new BN(10);
3621
- const mockUserMap = new MockUserMap();
3622
- const dlob = new DLOB(
3623
- mockPerpMarkets,
3624
- mockSpotMarkets,
3625
- mockStateAccount,
3626
- mockUserMap,
3627
- false
3628
- );
3418
+ const dlob = new DLOB();
3629
3419
  const marketIndex = 0;
3630
3420
 
3631
3421
  const slot = 12;
@@ -3689,8 +3479,6 @@ describe('DLOB Spot Tests', () => {
3689
3479
 
3690
3480
  for (const t of testCases) {
3691
3481
  const user0 = Keypair.generate();
3692
- const user0Auth = Keypair.generate();
3693
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
3694
3482
 
3695
3483
  insertOrderToDLOB(
3696
3484
  dlob,
@@ -3751,21 +3539,12 @@ describe('DLOB Spot Tests', () => {
3751
3539
  confidence: new BN(1),
3752
3540
  hasSufficientNumberOfDataPoints: true,
3753
3541
  };
3754
- const mockUserMap = new MockUserMap();
3755
- const dlob = new DLOB(
3756
- mockPerpMarkets,
3757
- mockSpotMarkets,
3758
- mockStateAccount,
3759
- mockUserMap,
3760
- false
3761
- );
3542
+ const dlob = new DLOB();
3762
3543
  const marketIndex = 0;
3763
3544
 
3764
3545
  // 3 mkt buys
3765
3546
  for (let i = 0; i < 3; i++) {
3766
3547
  const user0 = Keypair.generate();
3767
- const user0Auth = Keypair.generate();
3768
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
3769
3548
 
3770
3549
  insertOrderToDLOB(
3771
3550
  dlob,
@@ -3785,8 +3564,6 @@ describe('DLOB Spot Tests', () => {
3785
3564
  // 3 mkt sells
3786
3565
  for (let i = 0; i < 3; i++) {
3787
3566
  const user0 = Keypair.generate();
3788
- const user0Auth = Keypair.generate();
3789
- mockUserMap.addUserAccountAuthority(user0.publicKey, user0Auth.publicKey);
3790
3567
 
3791
3568
  insertOrderToDLOB(
3792
3569
  dlob,
@@ -3853,34 +3630,14 @@ describe('DLOB Spot Tests', () => {
3853
3630
  hasSufficientNumberOfDataPoints: true,
3854
3631
  };
3855
3632
 
3856
- const mockUserMap = new MockUserMap();
3857
3633
  const user0 = Keypair.generate();
3858
- const userAuth0 = Keypair.generate();
3859
3634
  const user1 = Keypair.generate();
3860
- const userAuth1 = Keypair.generate();
3861
3635
  const user2 = Keypair.generate();
3862
- const userAuth2 = Keypair.generate();
3863
3636
  const user3 = Keypair.generate();
3864
- const userAuth3 = Keypair.generate();
3865
3637
  const user4 = Keypair.generate();
3866
- const userAuth4 = Keypair.generate();
3867
3638
  const user5 = Keypair.generate();
3868
- const userAuth5 = Keypair.generate();
3869
-
3870
- mockUserMap.addUserAccountAuthority(user0.publicKey, userAuth0.publicKey);
3871
- mockUserMap.addUserAccountAuthority(user1.publicKey, userAuth1.publicKey);
3872
- mockUserMap.addUserAccountAuthority(user2.publicKey, userAuth2.publicKey);
3873
- mockUserMap.addUserAccountAuthority(user3.publicKey, userAuth3.publicKey);
3874
- mockUserMap.addUserAccountAuthority(user4.publicKey, userAuth4.publicKey);
3875
- mockUserMap.addUserAccountAuthority(user5.publicKey, userAuth5.publicKey);
3876
-
3877
- const dlob = new DLOB(
3878
- mockPerpMarkets,
3879
- mockSpotMarkets,
3880
- mockStateAccount,
3881
- mockUserMap,
3882
- false
3883
- );
3639
+
3640
+ const dlob = new DLOB();
3884
3641
  const marketIndex = 0;
3885
3642
  insertOrderToDLOB(
3886
3643
  dlob,
@@ -4017,34 +3774,13 @@ describe('DLOB Spot Tests', () => {
4017
3774
  const vAsk = new BN(15);
4018
3775
  const vBid = new BN(10);
4019
3776
 
4020
- const mockUserMap = new MockUserMap();
4021
3777
  const user0 = Keypair.generate();
4022
- const userAuth0 = Keypair.generate();
4023
3778
  const user1 = Keypair.generate();
4024
- const userAuth1 = Keypair.generate();
4025
3779
  const user2 = Keypair.generate();
4026
- const userAuth2 = Keypair.generate();
4027
- const user3 = Keypair.generate();
4028
- const userAuth3 = Keypair.generate();
4029
3780
  const user4 = Keypair.generate();
4030
- const userAuth4 = Keypair.generate();
4031
3781
  const user5 = Keypair.generate();
4032
- const userAuth5 = Keypair.generate();
4033
-
4034
- mockUserMap.addUserAccountAuthority(user0.publicKey, userAuth0.publicKey);
4035
- mockUserMap.addUserAccountAuthority(user1.publicKey, userAuth1.publicKey);
4036
- mockUserMap.addUserAccountAuthority(user2.publicKey, userAuth2.publicKey);
4037
- mockUserMap.addUserAccountAuthority(user3.publicKey, userAuth3.publicKey);
4038
- mockUserMap.addUserAccountAuthority(user4.publicKey, userAuth4.publicKey);
4039
- mockUserMap.addUserAccountAuthority(user5.publicKey, userAuth5.publicKey);
4040
-
4041
- const dlob = new DLOB(
4042
- mockPerpMarkets,
4043
- mockSpotMarkets,
4044
- mockStateAccount,
4045
- mockUserMap,
4046
- false
4047
- );
3782
+
3783
+ const dlob = new DLOB();
4048
3784
  const marketIndex = 0;
4049
3785
 
4050
3786
  // insert some limit buys above vamm bid, below ask
@@ -4101,7 +3837,9 @@ describe('DLOB Spot Tests', () => {
4101
3837
  slot: new BN(12),
4102
3838
  confidence: new BN(1),
4103
3839
  hasSufficientNumberOfDataPoints: true,
4104
- }
3840
+ },
3841
+ mockStateAccount,
3842
+ mockSpotMarkets[marketIndex]
4105
3843
  );
4106
3844
  expect(nodesToFillBefore.length).to.equal(0);
4107
3845
 
@@ -4145,7 +3883,9 @@ describe('DLOB Spot Tests', () => {
4145
3883
  slot: new BN(12),
4146
3884
  confidence: new BN(1),
4147
3885
  hasSufficientNumberOfDataPoints: true,
4148
- }
3886
+ },
3887
+ mockStateAccount,
3888
+ mockSpotMarkets[marketIndex]
4149
3889
  );
4150
3890
  for (const n of nodesToFillAfter) {
4151
3891
  console.log(
@@ -4167,28 +3907,12 @@ describe('DLOB Spot Tests', () => {
4167
3907
  const vAsk = new BN(15);
4168
3908
  const vBid = new BN(10);
4169
3909
 
4170
- const mockUserMap = new MockUserMap();
4171
3910
  const user0 = Keypair.generate();
4172
- const userAuth0 = Keypair.generate();
4173
3911
  const user1 = Keypair.generate();
4174
- const userAuth1 = Keypair.generate();
4175
3912
  const user2 = Keypair.generate();
4176
- const userAuth2 = Keypair.generate();
4177
3913
  const user3 = Keypair.generate();
4178
- const userAuth3 = Keypair.generate();
4179
3914
 
4180
- mockUserMap.addUserAccountAuthority(user0.publicKey, userAuth0.publicKey);
4181
- mockUserMap.addUserAccountAuthority(user1.publicKey, userAuth1.publicKey);
4182
- mockUserMap.addUserAccountAuthority(user2.publicKey, userAuth2.publicKey);
4183
- mockUserMap.addUserAccountAuthority(user3.publicKey, userAuth3.publicKey);
4184
-
4185
- const dlob = new DLOB(
4186
- mockPerpMarkets,
4187
- mockSpotMarkets,
4188
- mockStateAccount,
4189
- mockUserMap,
4190
- false
4191
- );
3915
+ const dlob = new DLOB();
4192
3916
  const marketIndex = 0;
4193
3917
 
4194
3918
  // insert some limit sells below vAMM ask, above bid
@@ -4245,7 +3969,9 @@ describe('DLOB Spot Tests', () => {
4245
3969
  slot: new BN(12),
4246
3970
  confidence: new BN(1),
4247
3971
  hasSufficientNumberOfDataPoints: true,
4248
- }
3972
+ },
3973
+ mockStateAccount,
3974
+ mockSpotMarkets[marketIndex]
4249
3975
  );
4250
3976
  expect(nodesToFillBefore.length).to.equal(0);
4251
3977
 
@@ -4276,7 +4002,9 @@ describe('DLOB Spot Tests', () => {
4276
4002
  slot: new BN(12),
4277
4003
  confidence: new BN(1),
4278
4004
  hasSufficientNumberOfDataPoints: true,
4279
- }
4005
+ },
4006
+ mockStateAccount,
4007
+ mockSpotMarkets[marketIndex]
4280
4008
  );
4281
4009
  for (const n of nodesToFillAfter) {
4282
4010
  console.log(
@@ -4298,31 +4026,13 @@ describe('DLOB Spot Tests', () => {
4298
4026
  const vAsk = new BN(15);
4299
4027
  const vBid = new BN(8);
4300
4028
 
4301
- const mockUserMap = new MockUserMap();
4302
4029
  const user0 = Keypair.generate();
4303
- const userAuth0 = Keypair.generate();
4304
4030
  const user1 = Keypair.generate();
4305
- const userAuth1 = Keypair.generate();
4306
4031
  const user2 = Keypair.generate();
4307
- const userAuth2 = Keypair.generate();
4308
4032
  const user3 = Keypair.generate();
4309
- const userAuth3 = Keypair.generate();
4310
4033
  const user4 = Keypair.generate();
4311
- const userAuth4 = Keypair.generate();
4312
-
4313
- mockUserMap.addUserAccountAuthority(user0.publicKey, userAuth0.publicKey);
4314
- mockUserMap.addUserAccountAuthority(user1.publicKey, userAuth1.publicKey);
4315
- mockUserMap.addUserAccountAuthority(user2.publicKey, userAuth2.publicKey);
4316
- mockUserMap.addUserAccountAuthority(user3.publicKey, userAuth3.publicKey);
4317
- mockUserMap.addUserAccountAuthority(user4.publicKey, userAuth4.publicKey);
4318
4034
 
4319
- const dlob = new DLOB(
4320
- mockPerpMarkets,
4321
- mockSpotMarkets,
4322
- mockStateAccount,
4323
- mockUserMap,
4324
- false
4325
- );
4035
+ const dlob = new DLOB();
4326
4036
  const marketIndex = 0;
4327
4037
 
4328
4038
  const slot = 12;
@@ -4382,7 +4092,9 @@ describe('DLOB Spot Tests', () => {
4382
4092
  12, // auction over
4383
4093
  Date.now(),
4384
4094
  MarketType.SPOT,
4385
- oracle
4095
+ oracle,
4096
+ mockStateAccount,
4097
+ mockSpotMarkets[marketIndex]
4386
4098
  );
4387
4099
  expect(nodesToFillBefore.length).to.equal(0);
4388
4100
 
@@ -4421,7 +4133,9 @@ describe('DLOB Spot Tests', () => {
4421
4133
  slot, // auction over
4422
4134
  Date.now(),
4423
4135
  MarketType.SPOT,
4424
- oracle
4136
+ oracle,
4137
+ mockStateAccount,
4138
+ mockSpotMarkets[marketIndex]
4425
4139
  );
4426
4140
  const mktNodes = dlob.findExpiredNodesToFill(
4427
4141
  marketIndex,
@@ -4452,22 +4166,10 @@ describe('DLOB Spot Tests', () => {
4452
4166
  const vAsk = new BN(15);
4453
4167
  const vBid = new BN(8);
4454
4168
 
4455
- const mockUserMap = new MockUserMap();
4456
4169
  const user0 = Keypair.generate();
4457
- const userAuth0 = Keypair.generate();
4458
4170
  const user1 = Keypair.generate();
4459
- const userAuth1 = Keypair.generate();
4460
-
4461
- mockUserMap.addUserAccountAuthority(user0.publicKey, userAuth0.publicKey);
4462
- mockUserMap.addUserAccountAuthority(user1.publicKey, userAuth1.publicKey);
4463
4171
 
4464
- const dlob = new DLOB(
4465
- mockPerpMarkets,
4466
- mockSpotMarkets,
4467
- mockStateAccount,
4468
- mockUserMap,
4469
- false
4470
- );
4172
+ const dlob = new DLOB();
4471
4173
  const marketIndex = 0;
4472
4174
 
4473
4175
  const slot = 12;
@@ -4514,7 +4216,9 @@ describe('DLOB Spot Tests', () => {
4514
4216
  12, // auction over
4515
4217
  Date.now(),
4516
4218
  MarketType.PERP,
4517
- oracle
4219
+ oracle,
4220
+ mockStateAccount,
4221
+ mockPerpMarkets[marketIndex]
4518
4222
  );
4519
4223
  expect(nodesToFillBefore.length).to.equal(0);
4520
4224
 
@@ -4553,7 +4257,9 @@ describe('DLOB Spot Tests', () => {
4553
4257
  slot, // auction over
4554
4258
  Date.now(),
4555
4259
  MarketType.PERP,
4556
- oracle
4260
+ oracle,
4261
+ mockStateAccount,
4262
+ mockPerpMarkets[marketIndex]
4557
4263
  );
4558
4264
 
4559
4265
  printBookState(dlob, marketIndex, vBid, vAsk, slot, oracle);
@@ -4578,22 +4284,10 @@ describe('DLOB Spot Tests', () => {
4578
4284
  const vAsk = new BN(15);
4579
4285
  const vBid = new BN(8);
4580
4286
 
4581
- const mockUserMap = new MockUserMap();
4582
4287
  const user0 = Keypair.generate();
4583
- const userAuth0 = Keypair.generate();
4584
4288
  const user1 = Keypair.generate();
4585
- const userAuth1 = Keypair.generate();
4586
-
4587
- mockUserMap.addUserAccountAuthority(user0.publicKey, userAuth0.publicKey);
4588
- mockUserMap.addUserAccountAuthority(user1.publicKey, userAuth1.publicKey);
4589
4289
 
4590
- const dlob = new DLOB(
4591
- mockPerpMarkets,
4592
- mockSpotMarkets,
4593
- mockStateAccount,
4594
- mockUserMap,
4595
- false
4596
- );
4290
+ const dlob = new DLOB();
4597
4291
  const marketIndex = 0;
4598
4292
 
4599
4293
  const slot = 12;
@@ -4640,7 +4334,9 @@ describe('DLOB Spot Tests', () => {
4640
4334
  12, // auction over
4641
4335
  Date.now(),
4642
4336
  MarketType.PERP,
4643
- oracle
4337
+ oracle,
4338
+ mockStateAccount,
4339
+ mockPerpMarkets[marketIndex]
4644
4340
  );
4645
4341
  expect(nodesToFillBefore.length).to.equal(0);
4646
4342
 
@@ -4679,7 +4375,9 @@ describe('DLOB Spot Tests', () => {
4679
4375
  slot, // auction over
4680
4376
  Date.now(),
4681
4377
  MarketType.PERP,
4682
- oracle
4378
+ oracle,
4379
+ mockStateAccount,
4380
+ mockPerpMarkets[marketIndex]
4683
4381
  );
4684
4382
 
4685
4383
  printBookState(dlob, marketIndex, vBid, vAsk, slot, oracle);
@@ -4704,52 +4402,20 @@ describe('DLOB Spot Tests', () => {
4704
4402
  const vAsk = new BN(15);
4705
4403
  const vBid = new BN(8);
4706
4404
 
4707
- const mockUserMap = new MockUserMap();
4708
4405
  const user0 = Keypair.generate();
4709
- const userAuth0 = Keypair.generate();
4710
4406
  const user1 = Keypair.generate();
4711
- const userAuth1 = Keypair.generate();
4712
4407
  const user2 = Keypair.generate();
4713
- const userAuth2 = Keypair.generate();
4714
4408
  const user3 = Keypair.generate();
4715
- const userAuth3 = Keypair.generate();
4716
4409
  const user4 = Keypair.generate();
4717
- const userAuth4 = Keypair.generate();
4718
4410
  const user5 = Keypair.generate();
4719
- const userAuth5 = Keypair.generate();
4720
4411
  const user6 = Keypair.generate();
4721
- const userAuth6 = Keypair.generate();
4722
4412
  const user7 = Keypair.generate();
4723
- const userAuth7 = Keypair.generate();
4724
4413
  const user8 = Keypair.generate();
4725
- const userAuth8 = Keypair.generate();
4726
4414
  const user9 = Keypair.generate();
4727
- const userAuth9 = Keypair.generate();
4728
4415
  const user10 = Keypair.generate();
4729
- const userAuth10 = Keypair.generate();
4730
4416
  const user11 = Keypair.generate();
4731
- const userAuth11 = Keypair.generate();
4732
-
4733
- mockUserMap.addUserAccountAuthority(user0.publicKey, userAuth0.publicKey);
4734
- mockUserMap.addUserAccountAuthority(user1.publicKey, userAuth1.publicKey);
4735
- mockUserMap.addUserAccountAuthority(user2.publicKey, userAuth2.publicKey);
4736
- mockUserMap.addUserAccountAuthority(user3.publicKey, userAuth3.publicKey);
4737
- mockUserMap.addUserAccountAuthority(user4.publicKey, userAuth4.publicKey);
4738
- mockUserMap.addUserAccountAuthority(user5.publicKey, userAuth5.publicKey);
4739
- mockUserMap.addUserAccountAuthority(user6.publicKey, userAuth6.publicKey);
4740
- mockUserMap.addUserAccountAuthority(user7.publicKey, userAuth7.publicKey);
4741
- mockUserMap.addUserAccountAuthority(user8.publicKey, userAuth8.publicKey);
4742
- mockUserMap.addUserAccountAuthority(user9.publicKey, userAuth9.publicKey);
4743
- mockUserMap.addUserAccountAuthority(user10.publicKey, userAuth10.publicKey);
4744
- mockUserMap.addUserAccountAuthority(user11.publicKey, userAuth11.publicKey);
4745
-
4746
- const dlob = new DLOB(
4747
- mockPerpMarkets,
4748
- mockSpotMarkets,
4749
- mockStateAccount,
4750
- mockUserMap,
4751
- false
4752
- );
4417
+
4418
+ const dlob = new DLOB();
4753
4419
  const marketIndex = 0;
4754
4420
 
4755
4421
  const slot = 20;
@@ -4961,7 +4627,8 @@ describe('DLOB Spot Tests', () => {
4961
4627
  marketIndex,
4962
4628
  slot,
4963
4629
  oracle.price,
4964
- MarketType.SPOT
4630
+ MarketType.SPOT,
4631
+ mockStateAccount
4965
4632
  );
4966
4633
  for (const [idx, n] of nodesToTrigger.entries()) {
4967
4634
  expect(n.node.order?.orderId).to.equal(orderIdsToTrigger[idx]);
@@ -4972,21 +4639,10 @@ describe('DLOB Spot Tests', () => {
4972
4639
  const vAsk = new BN(15);
4973
4640
  const vBid = new BN(8);
4974
4641
 
4975
- const mockUserMap = new MockUserMap();
4976
4642
  const user0 = Keypair.generate();
4977
- const userAuth0 = Keypair.generate();
4978
4643
  const user1 = Keypair.generate();
4979
- const userAuth1 = Keypair.generate();
4980
- mockUserMap.addUserAccountAuthority(user0.publicKey, userAuth0.publicKey);
4981
- mockUserMap.addUserAccountAuthority(user1.publicKey, userAuth1.publicKey);
4982
4644
 
4983
- const dlob = new DLOB(
4984
- mockPerpMarkets,
4985
- mockSpotMarkets,
4986
- mockStateAccount,
4987
- mockUserMap,
4988
- false
4989
- );
4645
+ const dlob = new DLOB();
4990
4646
  const marketIndex = 0;
4991
4647
 
4992
4648
  const slot = 20;
@@ -5040,7 +4696,9 @@ describe('DLOB Spot Tests', () => {
5040
4696
  slot: new BN(slot0),
5041
4697
  confidence: new BN(1),
5042
4698
  hasSufficientNumberOfDataPoints: true,
5043
- }
4699
+ },
4700
+ mockStateAccount,
4701
+ mockSpotMarkets[marketIndex]
5044
4702
  );
5045
4703
  expect(nodesToFillBefore.length).to.equal(0);
5046
4704
 
@@ -5059,7 +4717,9 @@ describe('DLOB Spot Tests', () => {
5059
4717
  slot: new BN(slot1),
5060
4718
  confidence: new BN(1),
5061
4719
  hasSufficientNumberOfDataPoints: true,
5062
- }
4720
+ },
4721
+ mockStateAccount,
4722
+ mockSpotMarkets[marketIndex]
5063
4723
  );
5064
4724
  expect(nodesToFillAfter.length).to.equal(2);
5065
4725