@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 +1 -1
- package/bun.lockb +0 -0
- package/lib/dlob/orderBookLevels.js +8 -1
- package/package.json +2 -1
- package/src/dlob/orderBookLevels.ts +10 -1
- package/tests/amm/test.ts +78 -0
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.43.0-beta.
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
});
|