@drift-labs/sdk 2.49.0-beta.3 → 2.49.0-beta.5
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 +1 -1
- package/lib/dlob/DLOB.d.ts +6 -2
- package/lib/dlob/DLOB.js +37 -12
- package/lib/driftClient.d.ts +66 -66
- package/lib/driftClient.js +198 -192
- package/lib/types.d.ts +0 -2
- package/package.json +1 -1
- package/src/dlob/DLOB.ts +55 -15
- package/src/driftClient.ts +418 -270
- package/src/types.ts +0 -2
- package/tests/dlob/helpers.ts +2 -6
- package/tests/dlob/test.ts +190 -0
package/src/types.ts
CHANGED
|
@@ -1000,8 +1000,6 @@ export interface IVersionedWallet {
|
|
|
1000
1000
|
|
|
1001
1001
|
export type FeeStructure = {
|
|
1002
1002
|
feeTiers: FeeTier[];
|
|
1003
|
-
makerRebateNumerator: BN;
|
|
1004
|
-
makerRebateDenominator: BN;
|
|
1005
1003
|
fillerRewardStructure: OrderFillerRewardStructure;
|
|
1006
1004
|
flatFillerFee: BN;
|
|
1007
1005
|
referrerRewardEpochUpperBound: BN;
|
package/tests/dlob/helpers.ts
CHANGED
|
@@ -539,15 +539,13 @@ export const mockStateAccount: StateAccount = {
|
|
|
539
539
|
feeNumerator: 0,
|
|
540
540
|
feeDenominator: 0,
|
|
541
541
|
makerRebateNumerator: 0,
|
|
542
|
-
makerRebateDenominator:
|
|
542
|
+
makerRebateDenominator: 1,
|
|
543
543
|
referrerRewardNumerator: 0,
|
|
544
544
|
referrerRewardDenominator: 0,
|
|
545
545
|
refereeFeeNumerator: 0,
|
|
546
546
|
refereeFeeDenominator: 0,
|
|
547
547
|
},
|
|
548
548
|
],
|
|
549
|
-
makerRebateNumerator: new BN(0),
|
|
550
|
-
makerRebateDenominator: new BN(0),
|
|
551
549
|
fillerRewardStructure: {
|
|
552
550
|
rewardNumerator: new BN(0),
|
|
553
551
|
rewardDenominator: new BN(0),
|
|
@@ -565,15 +563,13 @@ export const mockStateAccount: StateAccount = {
|
|
|
565
563
|
feeNumerator: 0,
|
|
566
564
|
feeDenominator: 0,
|
|
567
565
|
makerRebateNumerator: 0,
|
|
568
|
-
makerRebateDenominator:
|
|
566
|
+
makerRebateDenominator: 1,
|
|
569
567
|
referrerRewardNumerator: 0,
|
|
570
568
|
referrerRewardDenominator: 0,
|
|
571
569
|
refereeFeeNumerator: 0,
|
|
572
570
|
refereeFeeDenominator: 0,
|
|
573
571
|
},
|
|
574
572
|
],
|
|
575
|
-
makerRebateNumerator: new BN(0),
|
|
576
|
-
makerRebateDenominator: new BN(0),
|
|
577
573
|
fillerRewardStructure: {
|
|
578
574
|
rewardNumerator: new BN(0),
|
|
579
575
|
rewardDenominator: new BN(0),
|
package/tests/dlob/test.ts
CHANGED
|
@@ -1914,6 +1914,8 @@ describe('DLOB Perp Tests', () => {
|
|
|
1914
1914
|
},
|
|
1915
1915
|
false,
|
|
1916
1916
|
10,
|
|
1917
|
+
0,
|
|
1918
|
+
1,
|
|
1917
1919
|
undefined,
|
|
1918
1920
|
undefined
|
|
1919
1921
|
);
|
|
@@ -2059,6 +2061,8 @@ describe('DLOB Perp Tests', () => {
|
|
|
2059
2061
|
},
|
|
2060
2062
|
false,
|
|
2061
2063
|
10,
|
|
2064
|
+
0,
|
|
2065
|
+
1,
|
|
2062
2066
|
undefined,
|
|
2063
2067
|
undefined
|
|
2064
2068
|
);
|
|
@@ -2267,6 +2271,190 @@ describe('DLOB Perp Tests', () => {
|
|
|
2267
2271
|
expect(nodesToFillAfter[1].makerNodes[0]?.order?.orderId).to.equal(3);
|
|
2268
2272
|
});
|
|
2269
2273
|
|
|
2274
|
+
it('Test post only bid fills against fallback', async () => {
|
|
2275
|
+
const vAsk = new BN(150);
|
|
2276
|
+
const vBid = new BN(100);
|
|
2277
|
+
|
|
2278
|
+
const user0 = Keypair.generate();
|
|
2279
|
+
|
|
2280
|
+
const dlob = new DLOB();
|
|
2281
|
+
const marketIndex = 0;
|
|
2282
|
+
|
|
2283
|
+
const makerRebateNumerator = 1;
|
|
2284
|
+
const makerRebateDenominator = 10;
|
|
2285
|
+
|
|
2286
|
+
// post only bid same as ask
|
|
2287
|
+
insertOrderToDLOB(
|
|
2288
|
+
dlob,
|
|
2289
|
+
user0.publicKey,
|
|
2290
|
+
OrderType.LIMIT,
|
|
2291
|
+
MarketType.PERP,
|
|
2292
|
+
1, // orderId
|
|
2293
|
+
marketIndex,
|
|
2294
|
+
vAsk, // same price as vAsk
|
|
2295
|
+
BASE_PRECISION, // quantity
|
|
2296
|
+
PositionDirection.LONG,
|
|
2297
|
+
vBid,
|
|
2298
|
+
vAsk,
|
|
2299
|
+
undefined,
|
|
2300
|
+
undefined,
|
|
2301
|
+
undefined,
|
|
2302
|
+
true
|
|
2303
|
+
);
|
|
2304
|
+
|
|
2305
|
+
// should have no crossing orders
|
|
2306
|
+
const nodesToFillBefore = dlob.findRestingLimitOrderNodesToFill(
|
|
2307
|
+
marketIndex,
|
|
2308
|
+
12, // auction over
|
|
2309
|
+
MarketType.PERP,
|
|
2310
|
+
{
|
|
2311
|
+
price: vBid.add(vAsk).div(new BN(2)),
|
|
2312
|
+
slot: new BN(12),
|
|
2313
|
+
confidence: new BN(1),
|
|
2314
|
+
hasSufficientNumberOfDataPoints: true,
|
|
2315
|
+
},
|
|
2316
|
+
false,
|
|
2317
|
+
10,
|
|
2318
|
+
makerRebateNumerator,
|
|
2319
|
+
makerRebateDenominator,
|
|
2320
|
+
vAsk,
|
|
2321
|
+
vBid
|
|
2322
|
+
);
|
|
2323
|
+
expect(nodesToFillBefore.length).to.equal(0);
|
|
2324
|
+
|
|
2325
|
+
// post only bid crosses ask
|
|
2326
|
+
const price = vAsk.add(vAsk.muln(makerRebateNumerator).divn(makerRebateDenominator));
|
|
2327
|
+
insertOrderToDLOB(
|
|
2328
|
+
dlob,
|
|
2329
|
+
user0.publicKey,
|
|
2330
|
+
OrderType.LIMIT,
|
|
2331
|
+
MarketType.PERP,
|
|
2332
|
+
2, // orderId
|
|
2333
|
+
marketIndex,
|
|
2334
|
+
price, // crosses vask
|
|
2335
|
+
BASE_PRECISION, // quantity
|
|
2336
|
+
PositionDirection.LONG,
|
|
2337
|
+
vBid,
|
|
2338
|
+
vAsk,
|
|
2339
|
+
undefined,
|
|
2340
|
+
undefined,
|
|
2341
|
+
undefined,
|
|
2342
|
+
true
|
|
2343
|
+
);
|
|
2344
|
+
|
|
2345
|
+
// should have no crossing orders
|
|
2346
|
+
const nodesToFillAfter = dlob.findRestingLimitOrderNodesToFill(
|
|
2347
|
+
marketIndex,
|
|
2348
|
+
12, // auction over
|
|
2349
|
+
MarketType.PERP,
|
|
2350
|
+
{
|
|
2351
|
+
price: vBid.add(vAsk).div(new BN(2)),
|
|
2352
|
+
slot: new BN(12),
|
|
2353
|
+
confidence: new BN(1),
|
|
2354
|
+
hasSufficientNumberOfDataPoints: true,
|
|
2355
|
+
},
|
|
2356
|
+
false,
|
|
2357
|
+
10,
|
|
2358
|
+
makerRebateNumerator,
|
|
2359
|
+
makerRebateDenominator,
|
|
2360
|
+
vAsk,
|
|
2361
|
+
vBid
|
|
2362
|
+
);
|
|
2363
|
+
expect(nodesToFillAfter.length).to.equal(1);
|
|
2364
|
+
});
|
|
2365
|
+
|
|
2366
|
+
it('Test post only ask fills against fallback', async () => {
|
|
2367
|
+
const vAsk = new BN(150);
|
|
2368
|
+
const vBid = new BN(100);
|
|
2369
|
+
|
|
2370
|
+
const user0 = Keypair.generate();
|
|
2371
|
+
|
|
2372
|
+
const dlob = new DLOB();
|
|
2373
|
+
const marketIndex = 0;
|
|
2374
|
+
|
|
2375
|
+
const makerRebateNumerator = 1;
|
|
2376
|
+
const makerRebateDenominator = 10;
|
|
2377
|
+
|
|
2378
|
+
// post only bid same as ask
|
|
2379
|
+
insertOrderToDLOB(
|
|
2380
|
+
dlob,
|
|
2381
|
+
user0.publicKey,
|
|
2382
|
+
OrderType.LIMIT,
|
|
2383
|
+
MarketType.PERP,
|
|
2384
|
+
1, // orderId
|
|
2385
|
+
marketIndex,
|
|
2386
|
+
vBid, // same price as vAsk
|
|
2387
|
+
BASE_PRECISION, // quantity
|
|
2388
|
+
PositionDirection.SHORT,
|
|
2389
|
+
vBid,
|
|
2390
|
+
vAsk,
|
|
2391
|
+
undefined,
|
|
2392
|
+
undefined,
|
|
2393
|
+
undefined,
|
|
2394
|
+
true
|
|
2395
|
+
);
|
|
2396
|
+
|
|
2397
|
+
// should have no crossing orders
|
|
2398
|
+
const nodesToFillBefore = dlob.findRestingLimitOrderNodesToFill(
|
|
2399
|
+
marketIndex,
|
|
2400
|
+
12, // auction over
|
|
2401
|
+
MarketType.PERP,
|
|
2402
|
+
{
|
|
2403
|
+
price: vBid.add(vAsk).div(new BN(2)),
|
|
2404
|
+
slot: new BN(12),
|
|
2405
|
+
confidence: new BN(1),
|
|
2406
|
+
hasSufficientNumberOfDataPoints: true,
|
|
2407
|
+
},
|
|
2408
|
+
false,
|
|
2409
|
+
10,
|
|
2410
|
+
makerRebateNumerator,
|
|
2411
|
+
makerRebateDenominator,
|
|
2412
|
+
vAsk,
|
|
2413
|
+
vBid
|
|
2414
|
+
);
|
|
2415
|
+
expect(nodesToFillBefore.length).to.equal(0);
|
|
2416
|
+
|
|
2417
|
+
// post only bid crosses ask
|
|
2418
|
+
const price = vBid.sub(vAsk.muln(makerRebateNumerator).divn(makerRebateDenominator));
|
|
2419
|
+
insertOrderToDLOB(
|
|
2420
|
+
dlob,
|
|
2421
|
+
user0.publicKey,
|
|
2422
|
+
OrderType.LIMIT,
|
|
2423
|
+
MarketType.PERP,
|
|
2424
|
+
2, // orderId
|
|
2425
|
+
marketIndex,
|
|
2426
|
+
price, // crosses vask
|
|
2427
|
+
BASE_PRECISION, // quantity
|
|
2428
|
+
PositionDirection.SHORT,
|
|
2429
|
+
vBid,
|
|
2430
|
+
vAsk,
|
|
2431
|
+
undefined,
|
|
2432
|
+
undefined,
|
|
2433
|
+
undefined,
|
|
2434
|
+
true
|
|
2435
|
+
);
|
|
2436
|
+
|
|
2437
|
+
// should have no crossing orders
|
|
2438
|
+
const nodesToFillAfter = dlob.findRestingLimitOrderNodesToFill(
|
|
2439
|
+
marketIndex,
|
|
2440
|
+
12, // auction over
|
|
2441
|
+
MarketType.PERP,
|
|
2442
|
+
{
|
|
2443
|
+
price: vBid.add(vAsk).div(new BN(2)),
|
|
2444
|
+
slot: new BN(12),
|
|
2445
|
+
confidence: new BN(1),
|
|
2446
|
+
hasSufficientNumberOfDataPoints: true,
|
|
2447
|
+
},
|
|
2448
|
+
false,
|
|
2449
|
+
10,
|
|
2450
|
+
makerRebateNumerator,
|
|
2451
|
+
makerRebateDenominator,
|
|
2452
|
+
vAsk,
|
|
2453
|
+
vBid
|
|
2454
|
+
);
|
|
2455
|
+
expect(nodesToFillAfter.length).to.equal(1);
|
|
2456
|
+
});
|
|
2457
|
+
|
|
2270
2458
|
it('Test trigger orders', () => {
|
|
2271
2459
|
const vAsk = new BN(15);
|
|
2272
2460
|
const vBid = new BN(8);
|
|
@@ -2901,6 +3089,8 @@ describe('DLOB Perp Tests', () => {
|
|
|
2901
3089
|
oracle,
|
|
2902
3090
|
false,
|
|
2903
3091
|
10,
|
|
3092
|
+
0,
|
|
3093
|
+
1,
|
|
2904
3094
|
undefined,
|
|
2905
3095
|
undefined
|
|
2906
3096
|
);
|