@drift-labs/sdk 2.53.0-beta.8 → 2.53.0-beta.9
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/bun.lockb +0 -0
- package/lib/dlob/DLOB.d.ts +1 -1
- package/lib/dlob/DLOB.js +16 -14
- package/lib/dlob/DLOBNode.d.ts +4 -5
- package/lib/dlob/DLOBNode.js +1 -0
- package/lib/dlob/NodeList.d.ts +5 -6
- package/lib/dlob/NodeList.js +1 -0
- package/lib/driftClient.d.ts +1 -1
- package/lib/driftClient.js +2 -1
- package/lib/orderSubscriber/OrderSubscriber.js +1 -2
- package/package.json +1 -1
- package/src/dlob/DLOB.ts +23 -15
- package/src/dlob/DLOBNode.ts +5 -5
- package/src/dlob/NodeList.ts +6 -6
- package/src/driftClient.ts +3 -1
- package/src/orderSubscriber/OrderSubscriber.ts +1 -2
- package/tests/dlob/test.ts +341 -126
- package/tests/tx/priorityFeeStrategy.ts +80 -82
package/tests/dlob/test.ts
CHANGED
|
@@ -6073,41 +6073,40 @@ describe('DLOB Spot Tests', () => {
|
|
|
6073
6073
|
});
|
|
6074
6074
|
|
|
6075
6075
|
describe('Uncross L2', () => {
|
|
6076
|
-
|
|
6077
6076
|
it('Bid crosses ask above oracle (no premium)', () => {
|
|
6078
6077
|
const bids = [
|
|
6079
6078
|
{
|
|
6080
6079
|
price: new BN(104).mul(QUOTE_PRECISION),
|
|
6081
6080
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6082
|
-
sources: {
|
|
6081
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6083
6082
|
},
|
|
6084
6083
|
{
|
|
6085
6084
|
price: new BN(103).mul(QUOTE_PRECISION),
|
|
6086
6085
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6087
|
-
sources: {
|
|
6086
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6088
6087
|
},
|
|
6089
6088
|
{
|
|
6090
6089
|
price: new BN(102).mul(QUOTE_PRECISION),
|
|
6091
6090
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6092
|
-
sources: {
|
|
6091
|
+
sources: { dlob: new BN(1).mul(BASE_PRECISION) },
|
|
6093
6092
|
},
|
|
6094
6093
|
{
|
|
6095
6094
|
price: new BN(100).mul(QUOTE_PRECISION),
|
|
6096
6095
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6097
|
-
sources: {
|
|
6098
|
-
}
|
|
6096
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6097
|
+
},
|
|
6099
6098
|
];
|
|
6100
6099
|
|
|
6101
6100
|
const asks = [
|
|
6102
6101
|
{
|
|
6103
6102
|
price: new BN(101).mul(QUOTE_PRECISION),
|
|
6104
6103
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6105
|
-
sources: {
|
|
6104
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6106
6105
|
},
|
|
6107
6106
|
{
|
|
6108
6107
|
price: new BN(102).mul(QUOTE_PRECISION),
|
|
6109
6108
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6110
|
-
sources: {
|
|
6109
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6111
6110
|
},
|
|
6112
6111
|
];
|
|
6113
6112
|
|
|
@@ -6117,24 +6116,59 @@ describe('Uncross L2', () => {
|
|
|
6117
6116
|
|
|
6118
6117
|
const groupingSize = QUOTE_PRECISION.divn(10);
|
|
6119
6118
|
|
|
6120
|
-
const { bids: newBids, asks: newAsks } = uncrossL2(
|
|
6119
|
+
const { bids: newBids, asks: newAsks } = uncrossL2(
|
|
6120
|
+
bids,
|
|
6121
|
+
asks,
|
|
6122
|
+
oraclePrice,
|
|
6123
|
+
oraclePrice5Min,
|
|
6124
|
+
markPrice5Min,
|
|
6125
|
+
groupingSize,
|
|
6126
|
+
new Set<string>(),
|
|
6127
|
+
new Set<string>()
|
|
6128
|
+
);
|
|
6121
6129
|
|
|
6122
|
-
expect(newBids[0].price.toString()).to.equal(
|
|
6123
|
-
|
|
6124
|
-
|
|
6125
|
-
expect(newBids[0].
|
|
6130
|
+
expect(newBids[0].price.toString()).to.equal(
|
|
6131
|
+
new BN(101).mul(QUOTE_PRECISION).sub(groupingSize).toString()
|
|
6132
|
+
);
|
|
6133
|
+
expect(newBids[0].size.toString()).to.equal(
|
|
6134
|
+
new BN(3).mul(BASE_PRECISION).toString()
|
|
6135
|
+
);
|
|
6136
|
+
expect(newBids[0].sources['vamm'].toString()).to.equal(
|
|
6137
|
+
new BN(2).mul(BASE_PRECISION).toString()
|
|
6138
|
+
);
|
|
6139
|
+
expect(newBids[0].sources['dlob'].toString()).to.equal(
|
|
6140
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6141
|
+
);
|
|
6126
6142
|
|
|
6127
|
-
expect(newBids[1].price.toString()).to.equal(
|
|
6128
|
-
|
|
6129
|
-
|
|
6143
|
+
expect(newBids[1].price.toString()).to.equal(
|
|
6144
|
+
new BN(100).mul(QUOTE_PRECISION).toString()
|
|
6145
|
+
);
|
|
6146
|
+
expect(newBids[1].size.toString()).to.equal(
|
|
6147
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6148
|
+
);
|
|
6149
|
+
expect(newBids[1].sources['vamm'].toString()).to.equal(
|
|
6150
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6151
|
+
);
|
|
6130
6152
|
|
|
6131
|
-
expect(newAsks[0].price.toString()).to.equal(
|
|
6132
|
-
|
|
6133
|
-
|
|
6153
|
+
expect(newAsks[0].price.toString()).to.equal(
|
|
6154
|
+
new BN(101).mul(QUOTE_PRECISION).toString()
|
|
6155
|
+
);
|
|
6156
|
+
expect(newAsks[0].size.toString()).to.equal(
|
|
6157
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6158
|
+
);
|
|
6159
|
+
expect(newAsks[0].sources['vamm'].toString()).to.equal(
|
|
6160
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6161
|
+
);
|
|
6134
6162
|
|
|
6135
|
-
expect(newAsks[1].price.toString()).to.equal(
|
|
6136
|
-
|
|
6137
|
-
|
|
6163
|
+
expect(newAsks[1].price.toString()).to.equal(
|
|
6164
|
+
new BN(102).mul(QUOTE_PRECISION).toString()
|
|
6165
|
+
);
|
|
6166
|
+
expect(newAsks[1].size.toString()).to.equal(
|
|
6167
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6168
|
+
);
|
|
6169
|
+
expect(newAsks[1].sources['vamm'].toString()).to.equal(
|
|
6170
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6171
|
+
);
|
|
6138
6172
|
});
|
|
6139
6173
|
|
|
6140
6174
|
it('Ask crosses ask below oracle, (new premium)', () => {
|
|
@@ -6142,12 +6176,12 @@ describe('Uncross L2', () => {
|
|
|
6142
6176
|
{
|
|
6143
6177
|
price: new BN(99).mul(QUOTE_PRECISION),
|
|
6144
6178
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6145
|
-
sources: {
|
|
6179
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6146
6180
|
},
|
|
6147
6181
|
{
|
|
6148
6182
|
price: new BN(98).mul(QUOTE_PRECISION),
|
|
6149
6183
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6150
|
-
sources: {
|
|
6184
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6151
6185
|
},
|
|
6152
6186
|
];
|
|
6153
6187
|
|
|
@@ -6155,23 +6189,23 @@ describe('Uncross L2', () => {
|
|
|
6155
6189
|
{
|
|
6156
6190
|
price: new BN(96).mul(QUOTE_PRECISION),
|
|
6157
6191
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6158
|
-
sources: {
|
|
6192
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6159
6193
|
},
|
|
6160
6194
|
{
|
|
6161
6195
|
price: new BN(97).mul(QUOTE_PRECISION),
|
|
6162
6196
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6163
|
-
sources: {
|
|
6197
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6164
6198
|
},
|
|
6165
6199
|
{
|
|
6166
6200
|
price: new BN(98).mul(QUOTE_PRECISION),
|
|
6167
6201
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6168
|
-
sources: {
|
|
6202
|
+
sources: { dlob: new BN(1).mul(BASE_PRECISION) },
|
|
6169
6203
|
},
|
|
6170
6204
|
{
|
|
6171
6205
|
price: new BN(100).mul(QUOTE_PRECISION),
|
|
6172
6206
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6173
|
-
sources: {
|
|
6174
|
-
}
|
|
6207
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6208
|
+
},
|
|
6175
6209
|
];
|
|
6176
6210
|
|
|
6177
6211
|
const oraclePrice = new BN(100).mul(QUOTE_PRECISION);
|
|
@@ -6180,24 +6214,59 @@ describe('Uncross L2', () => {
|
|
|
6180
6214
|
|
|
6181
6215
|
const groupingSize = QUOTE_PRECISION.divn(10);
|
|
6182
6216
|
|
|
6183
|
-
const { bids: newBids, asks: newAsks } = uncrossL2(
|
|
6217
|
+
const { bids: newBids, asks: newAsks } = uncrossL2(
|
|
6218
|
+
bids,
|
|
6219
|
+
asks,
|
|
6220
|
+
oraclePrice,
|
|
6221
|
+
oraclePrice5Min,
|
|
6222
|
+
markPrice5Min,
|
|
6223
|
+
groupingSize,
|
|
6224
|
+
new Set<string>(),
|
|
6225
|
+
new Set<string>()
|
|
6226
|
+
);
|
|
6184
6227
|
|
|
6185
|
-
expect(newBids[0].price.toString()).to.equal(
|
|
6186
|
-
|
|
6187
|
-
|
|
6228
|
+
expect(newBids[0].price.toString()).to.equal(
|
|
6229
|
+
new BN(99).mul(QUOTE_PRECISION).toString()
|
|
6230
|
+
);
|
|
6231
|
+
expect(newBids[0].size.toString()).to.equal(
|
|
6232
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6233
|
+
);
|
|
6234
|
+
expect(newBids[0].sources['vamm'].toString()).to.equal(
|
|
6235
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6236
|
+
);
|
|
6188
6237
|
|
|
6189
|
-
expect(newBids[1].price.toString()).to.equal(
|
|
6190
|
-
|
|
6191
|
-
|
|
6238
|
+
expect(newBids[1].price.toString()).to.equal(
|
|
6239
|
+
new BN(98).mul(QUOTE_PRECISION).toString()
|
|
6240
|
+
);
|
|
6241
|
+
expect(newBids[1].size.toString()).to.equal(
|
|
6242
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6243
|
+
);
|
|
6244
|
+
expect(newBids[1].sources['vamm'].toString()).to.equal(
|
|
6245
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6246
|
+
);
|
|
6192
6247
|
|
|
6193
|
-
expect(newAsks[0].price.toString()).to.equal(
|
|
6194
|
-
|
|
6195
|
-
|
|
6196
|
-
expect(newAsks[0].
|
|
6248
|
+
expect(newAsks[0].price.toString()).to.equal(
|
|
6249
|
+
new BN(99).mul(QUOTE_PRECISION).add(groupingSize).toString()
|
|
6250
|
+
);
|
|
6251
|
+
expect(newAsks[0].size.toString()).to.equal(
|
|
6252
|
+
new BN(3).mul(BASE_PRECISION).toString()
|
|
6253
|
+
);
|
|
6254
|
+
expect(newAsks[0].sources['vamm'].toString()).to.equal(
|
|
6255
|
+
new BN(2).mul(BASE_PRECISION).toString()
|
|
6256
|
+
);
|
|
6257
|
+
expect(newAsks[0].sources['dlob'].toString()).to.equal(
|
|
6258
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6259
|
+
);
|
|
6197
6260
|
|
|
6198
|
-
expect(newAsks[1].price.toString()).to.equal(
|
|
6199
|
-
|
|
6200
|
-
|
|
6261
|
+
expect(newAsks[1].price.toString()).to.equal(
|
|
6262
|
+
new BN(100).mul(QUOTE_PRECISION).toString()
|
|
6263
|
+
);
|
|
6264
|
+
expect(newAsks[1].size.toString()).to.equal(
|
|
6265
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6266
|
+
);
|
|
6267
|
+
expect(newAsks[1].sources['vamm'].toString()).to.equal(
|
|
6268
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6269
|
+
);
|
|
6201
6270
|
});
|
|
6202
6271
|
|
|
6203
6272
|
it('No cross (no premium)', () => {
|
|
@@ -6205,17 +6274,17 @@ describe('Uncross L2', () => {
|
|
|
6205
6274
|
{
|
|
6206
6275
|
price: new BN(99).mul(QUOTE_PRECISION),
|
|
6207
6276
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6208
|
-
sources: {
|
|
6277
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6209
6278
|
},
|
|
6210
6279
|
{
|
|
6211
6280
|
price: new BN(98).mul(QUOTE_PRECISION),
|
|
6212
6281
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6213
|
-
sources: {
|
|
6282
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6214
6283
|
},
|
|
6215
6284
|
{
|
|
6216
6285
|
price: new BN(97).mul(QUOTE_PRECISION),
|
|
6217
6286
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6218
|
-
sources: {
|
|
6287
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6219
6288
|
},
|
|
6220
6289
|
];
|
|
6221
6290
|
|
|
@@ -6223,12 +6292,12 @@ describe('Uncross L2', () => {
|
|
|
6223
6292
|
{
|
|
6224
6293
|
price: new BN(101).mul(QUOTE_PRECISION),
|
|
6225
6294
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6226
|
-
sources: {
|
|
6295
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6227
6296
|
},
|
|
6228
6297
|
{
|
|
6229
6298
|
price: new BN(102).mul(QUOTE_PRECISION),
|
|
6230
6299
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6231
|
-
sources: {
|
|
6300
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6232
6301
|
},
|
|
6233
6302
|
];
|
|
6234
6303
|
|
|
@@ -6238,27 +6307,66 @@ describe('Uncross L2', () => {
|
|
|
6238
6307
|
|
|
6239
6308
|
const groupingSize = QUOTE_PRECISION.divn(10);
|
|
6240
6309
|
|
|
6241
|
-
const { bids: newBids, asks: newAsks } = uncrossL2(
|
|
6310
|
+
const { bids: newBids, asks: newAsks } = uncrossL2(
|
|
6311
|
+
bids,
|
|
6312
|
+
asks,
|
|
6313
|
+
oraclePrice,
|
|
6314
|
+
oraclePrice5Min,
|
|
6315
|
+
markPrice5Min,
|
|
6316
|
+
groupingSize,
|
|
6317
|
+
new Set<string>(),
|
|
6318
|
+
new Set<string>()
|
|
6319
|
+
);
|
|
6242
6320
|
|
|
6243
|
-
expect(newBids[0].price.toString()).to.equal(
|
|
6244
|
-
|
|
6245
|
-
|
|
6321
|
+
expect(newBids[0].price.toString()).to.equal(
|
|
6322
|
+
new BN(99).mul(QUOTE_PRECISION).toString()
|
|
6323
|
+
);
|
|
6324
|
+
expect(newBids[0].size.toString()).to.equal(
|
|
6325
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6326
|
+
);
|
|
6327
|
+
expect(newBids[0].sources['vamm'].toString()).to.equal(
|
|
6328
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6329
|
+
);
|
|
6246
6330
|
|
|
6247
|
-
expect(newBids[1].price.toString()).to.equal(
|
|
6248
|
-
|
|
6249
|
-
|
|
6331
|
+
expect(newBids[1].price.toString()).to.equal(
|
|
6332
|
+
new BN(98).mul(QUOTE_PRECISION).toString()
|
|
6333
|
+
);
|
|
6334
|
+
expect(newBids[1].size.toString()).to.equal(
|
|
6335
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6336
|
+
);
|
|
6337
|
+
expect(newBids[1].sources['vamm'].toString()).to.equal(
|
|
6338
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6339
|
+
);
|
|
6250
6340
|
|
|
6251
|
-
expect(newBids[2].price.toString()).to.equal(
|
|
6252
|
-
|
|
6253
|
-
|
|
6341
|
+
expect(newBids[2].price.toString()).to.equal(
|
|
6342
|
+
new BN(97).mul(QUOTE_PRECISION).toString()
|
|
6343
|
+
);
|
|
6344
|
+
expect(newBids[2].size.toString()).to.equal(
|
|
6345
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6346
|
+
);
|
|
6347
|
+
expect(newBids[2].sources['vamm'].toString()).to.equal(
|
|
6348
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6349
|
+
);
|
|
6254
6350
|
|
|
6255
|
-
expect(newAsks[0].price.toString()).to.equal(
|
|
6256
|
-
|
|
6257
|
-
|
|
6351
|
+
expect(newAsks[0].price.toString()).to.equal(
|
|
6352
|
+
new BN(101).mul(QUOTE_PRECISION).toString()
|
|
6353
|
+
);
|
|
6354
|
+
expect(newAsks[0].size.toString()).to.equal(
|
|
6355
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6356
|
+
);
|
|
6357
|
+
expect(newAsks[0].sources['vamm'].toString()).to.equal(
|
|
6358
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6359
|
+
);
|
|
6258
6360
|
|
|
6259
|
-
expect(newAsks[1].price.toString()).to.equal(
|
|
6260
|
-
|
|
6261
|
-
|
|
6361
|
+
expect(newAsks[1].price.toString()).to.equal(
|
|
6362
|
+
new BN(102).mul(QUOTE_PRECISION).toString()
|
|
6363
|
+
);
|
|
6364
|
+
expect(newAsks[1].size.toString()).to.equal(
|
|
6365
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6366
|
+
);
|
|
6367
|
+
expect(newAsks[1].sources['vamm'].toString()).to.equal(
|
|
6368
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6369
|
+
);
|
|
6262
6370
|
});
|
|
6263
6371
|
|
|
6264
6372
|
it('Crossed on opposite sides of reference price', () => {
|
|
@@ -6266,7 +6374,7 @@ describe('Uncross L2', () => {
|
|
|
6266
6374
|
{
|
|
6267
6375
|
price: new BN(32).mul(QUOTE_PRECISION),
|
|
6268
6376
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6269
|
-
sources: {
|
|
6377
|
+
sources: { dlob: new BN(1).mul(BASE_PRECISION) },
|
|
6270
6378
|
},
|
|
6271
6379
|
];
|
|
6272
6380
|
|
|
@@ -6274,27 +6382,48 @@ describe('Uncross L2', () => {
|
|
|
6274
6382
|
{
|
|
6275
6383
|
price: new BN(29).mul(QUOTE_PRECISION),
|
|
6276
6384
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6277
|
-
sources: {
|
|
6385
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6278
6386
|
},
|
|
6279
6387
|
];
|
|
6280
6388
|
|
|
6281
|
-
const oraclePrice = new BN(
|
|
6282
|
-
const oraclePrice5Min = new BN(
|
|
6283
|
-
const markPrice5Min = new BN(
|
|
6389
|
+
const oraclePrice = new BN('29250100');
|
|
6390
|
+
const oraclePrice5Min = new BN('29696597');
|
|
6391
|
+
const markPrice5Min = new BN('31747865');
|
|
6284
6392
|
|
|
6285
6393
|
const groupingSize = QUOTE_PRECISION.divn(10);
|
|
6286
6394
|
|
|
6287
|
-
const { bids: newBids, asks: newAsks } = uncrossL2(
|
|
6395
|
+
const { bids: newBids, asks: newAsks } = uncrossL2(
|
|
6396
|
+
bids,
|
|
6397
|
+
asks,
|
|
6398
|
+
oraclePrice,
|
|
6399
|
+
oraclePrice5Min,
|
|
6400
|
+
markPrice5Min,
|
|
6401
|
+
groupingSize,
|
|
6402
|
+
new Set<string>(),
|
|
6403
|
+
new Set<string>()
|
|
6404
|
+
);
|
|
6288
6405
|
|
|
6289
6406
|
const referencePrice = oraclePrice.add(markPrice5Min.sub(oraclePrice5Min));
|
|
6290
6407
|
|
|
6291
|
-
expect(newBids[0].price.toString()).to.equal(
|
|
6292
|
-
|
|
6293
|
-
|
|
6408
|
+
expect(newBids[0].price.toString()).to.equal(
|
|
6409
|
+
referencePrice.sub(groupingSize).toString()
|
|
6410
|
+
);
|
|
6411
|
+
expect(newBids[0].size.toString()).to.equal(
|
|
6412
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6413
|
+
);
|
|
6414
|
+
expect(newBids[0].sources['dlob'].toString()).to.equal(
|
|
6415
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6416
|
+
);
|
|
6294
6417
|
|
|
6295
|
-
expect(newAsks[0].price.toString()).to.equal(
|
|
6296
|
-
|
|
6297
|
-
|
|
6418
|
+
expect(newAsks[0].price.toString()).to.equal(
|
|
6419
|
+
referencePrice.add(groupingSize).toString()
|
|
6420
|
+
);
|
|
6421
|
+
expect(newAsks[0].size.toString()).to.equal(
|
|
6422
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6423
|
+
);
|
|
6424
|
+
expect(newAsks[0].sources['vamm'].toString()).to.equal(
|
|
6425
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6426
|
+
);
|
|
6298
6427
|
});
|
|
6299
6428
|
|
|
6300
6429
|
it('Skip user with bid', () => {
|
|
@@ -6302,35 +6431,35 @@ describe('Uncross L2', () => {
|
|
|
6302
6431
|
{
|
|
6303
6432
|
price: new BN(104).mul(QUOTE_PRECISION),
|
|
6304
6433
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6305
|
-
sources: {
|
|
6434
|
+
sources: { dlob: new BN(1).mul(BASE_PRECISION) },
|
|
6306
6435
|
},
|
|
6307
6436
|
{
|
|
6308
6437
|
price: new BN(103).mul(QUOTE_PRECISION),
|
|
6309
6438
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6310
|
-
sources: {
|
|
6439
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6311
6440
|
},
|
|
6312
6441
|
{
|
|
6313
6442
|
price: new BN(102).mul(QUOTE_PRECISION),
|
|
6314
6443
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6315
|
-
sources: {
|
|
6444
|
+
sources: { dlob: new BN(1).mul(BASE_PRECISION) },
|
|
6316
6445
|
},
|
|
6317
6446
|
{
|
|
6318
6447
|
price: new BN(100).mul(QUOTE_PRECISION),
|
|
6319
6448
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6320
|
-
sources: {
|
|
6321
|
-
}
|
|
6449
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6450
|
+
},
|
|
6322
6451
|
];
|
|
6323
6452
|
|
|
6324
6453
|
const asks = [
|
|
6325
6454
|
{
|
|
6326
6455
|
price: new BN(101).mul(QUOTE_PRECISION),
|
|
6327
6456
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6328
|
-
sources: {
|
|
6457
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6329
6458
|
},
|
|
6330
6459
|
{
|
|
6331
6460
|
price: new BN(102).mul(QUOTE_PRECISION),
|
|
6332
6461
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6333
|
-
sources: {
|
|
6462
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6334
6463
|
},
|
|
6335
6464
|
];
|
|
6336
6465
|
|
|
@@ -6340,29 +6469,72 @@ describe('Uncross L2', () => {
|
|
|
6340
6469
|
|
|
6341
6470
|
const groupingSize = QUOTE_PRECISION.divn(10);
|
|
6342
6471
|
|
|
6343
|
-
const userBids = new Set<string>([
|
|
6344
|
-
|
|
6472
|
+
const userBids = new Set<string>([
|
|
6473
|
+
new BN(104).mul(QUOTE_PRECISION).toString(),
|
|
6474
|
+
]);
|
|
6475
|
+
const { bids: newBids, asks: newAsks } = uncrossL2(
|
|
6476
|
+
bids,
|
|
6477
|
+
asks,
|
|
6478
|
+
oraclePrice,
|
|
6479
|
+
oraclePrice5Min,
|
|
6480
|
+
markPrice5Min,
|
|
6481
|
+
groupingSize,
|
|
6482
|
+
userBids,
|
|
6483
|
+
new Set<string>()
|
|
6484
|
+
);
|
|
6345
6485
|
|
|
6346
|
-
expect(newBids[0].price.toString()).to.equal(
|
|
6347
|
-
|
|
6348
|
-
|
|
6486
|
+
expect(newBids[0].price.toString()).to.equal(
|
|
6487
|
+
new BN(104).mul(QUOTE_PRECISION).toString()
|
|
6488
|
+
);
|
|
6489
|
+
expect(newBids[0].size.toString()).to.equal(
|
|
6490
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6491
|
+
);
|
|
6492
|
+
expect(newBids[0].sources['dlob'].toString()).to.equal(
|
|
6493
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6494
|
+
);
|
|
6349
6495
|
|
|
6350
|
-
expect(newBids[1].price.toString()).to.equal(
|
|
6351
|
-
|
|
6352
|
-
|
|
6353
|
-
expect(newBids[1].
|
|
6496
|
+
expect(newBids[1].price.toString()).to.equal(
|
|
6497
|
+
new BN(101).mul(QUOTE_PRECISION).sub(groupingSize).toString()
|
|
6498
|
+
);
|
|
6499
|
+
expect(newBids[1].size.toString()).to.equal(
|
|
6500
|
+
new BN(2).mul(BASE_PRECISION).toString()
|
|
6501
|
+
);
|
|
6502
|
+
expect(newBids[1].sources['vamm'].toString()).to.equal(
|
|
6503
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6504
|
+
);
|
|
6505
|
+
expect(newBids[1].sources['dlob'].toString()).to.equal(
|
|
6506
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6507
|
+
);
|
|
6354
6508
|
|
|
6355
|
-
expect(newBids[2].price.toString()).to.equal(
|
|
6356
|
-
|
|
6357
|
-
|
|
6509
|
+
expect(newBids[2].price.toString()).to.equal(
|
|
6510
|
+
new BN(100).mul(QUOTE_PRECISION).toString()
|
|
6511
|
+
);
|
|
6512
|
+
expect(newBids[2].size.toString()).to.equal(
|
|
6513
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6514
|
+
);
|
|
6515
|
+
expect(newBids[2].sources['vamm'].toString()).to.equal(
|
|
6516
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6517
|
+
);
|
|
6358
6518
|
|
|
6359
|
-
expect(newAsks[0].price.toString()).to.equal(
|
|
6360
|
-
|
|
6361
|
-
|
|
6519
|
+
expect(newAsks[0].price.toString()).to.equal(
|
|
6520
|
+
new BN(101).mul(QUOTE_PRECISION).toString()
|
|
6521
|
+
);
|
|
6522
|
+
expect(newAsks[0].size.toString()).to.equal(
|
|
6523
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6524
|
+
);
|
|
6525
|
+
expect(newAsks[0].sources['vamm'].toString()).to.equal(
|
|
6526
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6527
|
+
);
|
|
6362
6528
|
|
|
6363
|
-
expect(newAsks[1].price.toString()).to.equal(
|
|
6364
|
-
|
|
6365
|
-
|
|
6529
|
+
expect(newAsks[1].price.toString()).to.equal(
|
|
6530
|
+
new BN(102).mul(QUOTE_PRECISION).toString()
|
|
6531
|
+
);
|
|
6532
|
+
expect(newAsks[1].size.toString()).to.equal(
|
|
6533
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6534
|
+
);
|
|
6535
|
+
expect(newAsks[1].sources['vamm'].toString()).to.equal(
|
|
6536
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6537
|
+
);
|
|
6366
6538
|
});
|
|
6367
6539
|
|
|
6368
6540
|
it('Skip user with ask', () => {
|
|
@@ -6370,12 +6542,12 @@ describe('Uncross L2', () => {
|
|
|
6370
6542
|
{
|
|
6371
6543
|
price: new BN(99).mul(QUOTE_PRECISION),
|
|
6372
6544
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6373
|
-
sources: {
|
|
6545
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6374
6546
|
},
|
|
6375
6547
|
{
|
|
6376
6548
|
price: new BN(98).mul(QUOTE_PRECISION),
|
|
6377
6549
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6378
|
-
sources: {
|
|
6550
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6379
6551
|
},
|
|
6380
6552
|
];
|
|
6381
6553
|
|
|
@@ -6383,23 +6555,23 @@ describe('Uncross L2', () => {
|
|
|
6383
6555
|
{
|
|
6384
6556
|
price: new BN(96).mul(QUOTE_PRECISION),
|
|
6385
6557
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6386
|
-
sources: {
|
|
6558
|
+
sources: { dlob: new BN(1).mul(BASE_PRECISION) },
|
|
6387
6559
|
},
|
|
6388
6560
|
{
|
|
6389
6561
|
price: new BN(97).mul(QUOTE_PRECISION),
|
|
6390
6562
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6391
|
-
sources: {
|
|
6563
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6392
6564
|
},
|
|
6393
6565
|
{
|
|
6394
6566
|
price: new BN(98).mul(QUOTE_PRECISION),
|
|
6395
6567
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6396
|
-
sources: {
|
|
6568
|
+
sources: { dlob: new BN(1).mul(BASE_PRECISION) },
|
|
6397
6569
|
},
|
|
6398
6570
|
{
|
|
6399
6571
|
price: new BN(100).mul(QUOTE_PRECISION),
|
|
6400
6572
|
size: new BN(1).mul(BASE_PRECISION),
|
|
6401
|
-
sources: {
|
|
6402
|
-
}
|
|
6573
|
+
sources: { vamm: new BN(1).mul(BASE_PRECISION) },
|
|
6574
|
+
},
|
|
6403
6575
|
];
|
|
6404
6576
|
|
|
6405
6577
|
const oraclePrice = new BN(100).mul(QUOTE_PRECISION);
|
|
@@ -6408,28 +6580,71 @@ describe('Uncross L2', () => {
|
|
|
6408
6580
|
|
|
6409
6581
|
const groupingSize = QUOTE_PRECISION.divn(10);
|
|
6410
6582
|
|
|
6411
|
-
const userAsks = new Set<string>([
|
|
6412
|
-
|
|
6583
|
+
const userAsks = new Set<string>([
|
|
6584
|
+
new BN(96).mul(QUOTE_PRECISION).toString(),
|
|
6585
|
+
]);
|
|
6586
|
+
const { bids: newBids, asks: newAsks } = uncrossL2(
|
|
6587
|
+
bids,
|
|
6588
|
+
asks,
|
|
6589
|
+
oraclePrice,
|
|
6590
|
+
oraclePrice5Min,
|
|
6591
|
+
markPrice5Min,
|
|
6592
|
+
groupingSize,
|
|
6593
|
+
new Set<string>(),
|
|
6594
|
+
userAsks
|
|
6595
|
+
);
|
|
6413
6596
|
|
|
6414
|
-
expect(newBids[0].price.toString()).to.equal(
|
|
6415
|
-
|
|
6416
|
-
|
|
6597
|
+
expect(newBids[0].price.toString()).to.equal(
|
|
6598
|
+
new BN(99).mul(QUOTE_PRECISION).toString()
|
|
6599
|
+
);
|
|
6600
|
+
expect(newBids[0].size.toString()).to.equal(
|
|
6601
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6602
|
+
);
|
|
6603
|
+
expect(newBids[0].sources['vamm'].toString()).to.equal(
|
|
6604
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6605
|
+
);
|
|
6417
6606
|
|
|
6418
|
-
expect(newBids[1].price.toString()).to.equal(
|
|
6419
|
-
|
|
6420
|
-
|
|
6607
|
+
expect(newBids[1].price.toString()).to.equal(
|
|
6608
|
+
new BN(98).mul(QUOTE_PRECISION).toString()
|
|
6609
|
+
);
|
|
6610
|
+
expect(newBids[1].size.toString()).to.equal(
|
|
6611
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6612
|
+
);
|
|
6613
|
+
expect(newBids[1].sources['vamm'].toString()).to.equal(
|
|
6614
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6615
|
+
);
|
|
6421
6616
|
|
|
6422
|
-
expect(newAsks[0].price.toString()).to.equal(
|
|
6423
|
-
|
|
6424
|
-
|
|
6617
|
+
expect(newAsks[0].price.toString()).to.equal(
|
|
6618
|
+
new BN(96).mul(QUOTE_PRECISION).toString()
|
|
6619
|
+
);
|
|
6620
|
+
expect(newAsks[0].size.toString()).to.equal(
|
|
6621
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6622
|
+
);
|
|
6623
|
+
expect(newAsks[0].sources['dlob'].toString()).to.equal(
|
|
6624
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6625
|
+
);
|
|
6425
6626
|
|
|
6426
|
-
expect(newAsks[1].price.toString()).to.equal(
|
|
6427
|
-
|
|
6428
|
-
|
|
6429
|
-
expect(newAsks[1].
|
|
6627
|
+
expect(newAsks[1].price.toString()).to.equal(
|
|
6628
|
+
new BN(99).mul(QUOTE_PRECISION).add(groupingSize).toString()
|
|
6629
|
+
);
|
|
6630
|
+
expect(newAsks[1].size.toString()).to.equal(
|
|
6631
|
+
new BN(2).mul(BASE_PRECISION).toString()
|
|
6632
|
+
);
|
|
6633
|
+
expect(newAsks[1].sources['vamm'].toString()).to.equal(
|
|
6634
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6635
|
+
);
|
|
6636
|
+
expect(newAsks[1].sources['dlob'].toString()).to.equal(
|
|
6637
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6638
|
+
);
|
|
6430
6639
|
|
|
6431
|
-
expect(newAsks[2].price.toString()).to.equal(
|
|
6432
|
-
|
|
6433
|
-
|
|
6640
|
+
expect(newAsks[2].price.toString()).to.equal(
|
|
6641
|
+
new BN(100).mul(QUOTE_PRECISION).toString()
|
|
6642
|
+
);
|
|
6643
|
+
expect(newAsks[2].size.toString()).to.equal(
|
|
6644
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6645
|
+
);
|
|
6646
|
+
expect(newAsks[2].sources['vamm'].toString()).to.equal(
|
|
6647
|
+
new BN(1).mul(BASE_PRECISION).toString()
|
|
6648
|
+
);
|
|
6434
6649
|
});
|
|
6435
6650
|
});
|