@drift-labs/sdk 0.2.0-master.33 → 0.2.0-master.35

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/lib/admin.d.ts CHANGED
@@ -52,5 +52,6 @@ export declare class Admin extends ClearingHouse {
52
52
  updatePerpMarketMaxFillReserveFraction(perpMarketIndex: number, maxBaseAssetAmountRatio: number): Promise<TransactionSignature>;
53
53
  updateMaxSlippageRatio(perpMarketIndex: number, maxSlippageRatio: number): Promise<TransactionSignature>;
54
54
  updatePerpMarketMaxImbalances(perpMarketIndex: number, unrealizedMaxImbalance: BN, maxRevenueWithdrawPerPeriod: BN, quoteMaxInsurance: BN): Promise<TransactionSignature>;
55
+ updatePerpMarketMaxOpenInterest(perpMarketIndex: number, maxOpenInterest: BN): Promise<TransactionSignature>;
55
56
  updateSerumVault(srmVault: PublicKey): Promise<TransactionSignature>;
56
57
  }
package/lib/admin.js CHANGED
@@ -541,6 +541,15 @@ class Admin extends clearingHouse_1.ClearingHouse {
541
541
  },
542
542
  });
543
543
  }
544
+ async updatePerpMarketMaxOpenInterest(perpMarketIndex, maxOpenInterest) {
545
+ return await this.program.rpc.updatePerpMarketMaxOpenInterest(maxOpenInterest, {
546
+ accounts: {
547
+ admin: this.wallet.publicKey,
548
+ state: await this.getStatePublicKey(),
549
+ perpMarket: await (0, pda_1.getPerpMarketPublicKey)(this.program.programId, perpMarketIndex),
550
+ },
551
+ });
552
+ }
544
553
  async updateSerumVault(srmVault) {
545
554
  return await this.program.rpc.updateSerumVault({
546
555
  accounts: {
@@ -147,9 +147,9 @@ export declare class ClearingHouse {
147
147
  txSig: TransactionSignature;
148
148
  signedFillTx: Transaction;
149
149
  }>;
150
- placeOrder(orderParams: OptionalOrderParams): Promise<TransactionSignature>;
150
+ placePerpOrder(orderParams: OptionalOrderParams): Promise<TransactionSignature>;
151
151
  getOrderParams(optionalOrderParams: OptionalOrderParams, marketType: MarketType): OrderParams;
152
- getPlaceOrderIx(orderParams: OptionalOrderParams): Promise<TransactionInstruction>;
152
+ getPlacePerpOrderIx(orderParams: OptionalOrderParams): Promise<TransactionInstruction>;
153
153
  updateAMMs(marketIndexes: number[]): Promise<TransactionSignature>;
154
154
  getUpdateAMMsIx(marketIndexes: number[]): Promise<TransactionInstruction>;
155
155
  settleExpiredMarket(marketIndex: number): Promise<TransactionSignature>;
@@ -161,8 +161,8 @@ export declare class ClearingHouse {
161
161
  getCancelOrderByUserIdIx(userOrderId: number): Promise<TransactionInstruction>;
162
162
  cancelOrders(marketType?: MarketType, marketIndex?: number, direction?: PositionDirection): Promise<TransactionSignature>;
163
163
  getCancelOrdersIx(marketType: MarketType | null, marketIndex: number | null, direction: PositionDirection | null): Promise<TransactionInstruction>;
164
- fillOrder(userAccountPublicKey: PublicKey, user: UserAccount, order?: Pick<Order, 'marketIndex' | 'orderId'>, makerInfo?: MakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionSignature>;
165
- getFillOrderIx(userAccountPublicKey: PublicKey, userAccount: UserAccount, order: Pick<Order, 'marketIndex' | 'orderId'>, makerInfo?: MakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionInstruction>;
164
+ fillPerpOrder(userAccountPublicKey: PublicKey, user: UserAccount, order?: Pick<Order, 'marketIndex' | 'orderId'>, makerInfo?: MakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionSignature>;
165
+ getFillPerpOrderIx(userAccountPublicKey: PublicKey, userAccount: UserAccount, order: Pick<Order, 'marketIndex' | 'orderId'>, makerInfo?: MakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionInstruction>;
166
166
  placeSpotOrder(orderParams: OptionalOrderParams): Promise<TransactionSignature>;
167
167
  getPlaceSpotOrderIx(orderParams: OptionalOrderParams): Promise<TransactionInstruction>;
168
168
  fillSpotOrder(userAccountPublicKey: PublicKey, user: UserAccount, order?: Order, fulfillmentConfig?: SerumV3FulfillmentConfigAccount, makerInfo?: MakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionSignature>;
@@ -170,10 +170,10 @@ export declare class ClearingHouse {
170
170
  addSerumRemainingAccounts(marketIndex: number, remainingAccounts: AccountMeta[], fulfillmentConfig: SerumV3FulfillmentConfigAccount): void;
171
171
  triggerOrder(userAccountPublicKey: PublicKey, user: UserAccount, order: Order): Promise<TransactionSignature>;
172
172
  getTriggerOrderIx(userAccountPublicKey: PublicKey, userAccount: UserAccount, order: Order): Promise<TransactionInstruction>;
173
- placeAndTake(orderParams: OptionalOrderParams, makerInfo?: MakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionSignature>;
174
- getPlaceAndTakeIx(orderParams: OptionalOrderParams, makerInfo?: MakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionInstruction>;
175
- placeAndMake(orderParams: OptionalOrderParams, takerInfo: TakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionSignature>;
176
- getPlaceAndMakeIx(orderParams: OptionalOrderParams, takerInfo: TakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionInstruction>;
173
+ placeAndTakePerpOrder(orderParams: OptionalOrderParams, makerInfo?: MakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionSignature>;
174
+ getPlaceAndTakePerpOrderIx(orderParams: OptionalOrderParams, makerInfo?: MakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionInstruction>;
175
+ placeAndMakePerpOrder(orderParams: OptionalOrderParams, takerInfo: TakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionSignature>;
176
+ getPlaceAndMakePerpOrderIx(orderParams: OptionalOrderParams, takerInfo: TakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionInstruction>;
177
177
  placeAndTakeSpotOrder(orderParams: OptionalOrderParams, fulfillmentConfig?: SerumV3FulfillmentConfigAccount, makerInfo?: MakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionSignature>;
178
178
  getPlaceAndTakeSpotOrderIx(orderParams: OptionalOrderParams, fulfillmentConfig?: SerumV3FulfillmentConfigAccount, makerInfo?: MakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionInstruction>;
179
179
  placeAndMakeSpotOrder(orderParams: OptionalOrderParams, takerInfo: TakerInfo, referrerInfo?: ReferrerInfo): Promise<TransactionSignature>;
@@ -891,7 +891,7 @@ class ClearingHouse {
891
891
  });
892
892
  }
893
893
  async openPosition(direction, amount, marketIndex, limitPrice) {
894
- return await this.placeAndTake({
894
+ return await this.placeAndTakePerpOrder({
895
895
  orderType: types_1.OrderType.MARKET,
896
896
  marketIndex,
897
897
  direction,
@@ -913,8 +913,8 @@ class ClearingHouse {
913
913
  async sendMarketOrderAndGetSignedFillTx(orderParams, userAccountPublicKey, userAccount) {
914
914
  const marketIndex = orderParams.marketIndex;
915
915
  const orderId = userAccount.nextOrderId;
916
- const marketOrderTx = (0, utils_1.wrapInTx)(await this.getPlaceOrderIx(orderParams));
917
- const fillTx = (0, utils_1.wrapInTx)(await this.getFillOrderIx(userAccountPublicKey, userAccount, {
916
+ const marketOrderTx = (0, utils_1.wrapInTx)(await this.getPlacePerpOrderIx(orderParams));
917
+ const fillTx = (0, utils_1.wrapInTx)(await this.getFillPerpOrderIx(userAccountPublicKey, userAccount, {
918
918
  orderId,
919
919
  marketIndex,
920
920
  }));
@@ -929,8 +929,8 @@ class ClearingHouse {
929
929
  this.marketLastSlotCache.set(orderParams.marketIndex, slot);
930
930
  return { txSig, signedFillTx };
931
931
  }
932
- async placeOrder(orderParams) {
933
- const { txSig, slot } = await this.txSender.send((0, utils_1.wrapInTx)(await this.getPlaceOrderIx(orderParams)), [], this.opts);
932
+ async placePerpOrder(orderParams) {
933
+ const { txSig, slot } = await this.txSender.send((0, utils_1.wrapInTx)(await this.getPlacePerpOrderIx(orderParams)), [], this.opts);
934
934
  this.marketLastSlotCache.set(orderParams.marketIndex, slot);
935
935
  return txSig;
936
936
  }
@@ -939,7 +939,7 @@ class ClearingHouse {
939
939
  marketType,
940
940
  });
941
941
  }
942
- async getPlaceOrderIx(orderParams) {
942
+ async getPlacePerpOrderIx(orderParams) {
943
943
  orderParams = this.getOrderParams(orderParams, types_1.MarketType.PERP);
944
944
  const userAccountPublicKey = await this.getUserAccountPublicKey();
945
945
  const remainingAccounts = this.getRemainingAccounts({
@@ -947,7 +947,7 @@ class ClearingHouse {
947
947
  useMarketLastSlotCache: true,
948
948
  readablePerpMarketIndex: orderParams.marketIndex,
949
949
  });
950
- return await this.program.instruction.placeOrder(orderParams, {
950
+ return await this.program.instruction.placePerpOrder(orderParams, {
951
951
  accounts: {
952
952
  state: await this.getStatePublicKey(),
953
953
  user: userAccountPublicKey,
@@ -1100,11 +1100,11 @@ class ClearingHouse {
1100
1100
  remainingAccounts,
1101
1101
  });
1102
1102
  }
1103
- async fillOrder(userAccountPublicKey, user, order, makerInfo, referrerInfo) {
1104
- const { txSig } = await this.txSender.send((0, utils_1.wrapInTx)(await this.getFillOrderIx(userAccountPublicKey, user, order, makerInfo, referrerInfo)), [], this.opts);
1103
+ async fillPerpOrder(userAccountPublicKey, user, order, makerInfo, referrerInfo) {
1104
+ const { txSig } = await this.txSender.send((0, utils_1.wrapInTx)(await this.getFillPerpOrderIx(userAccountPublicKey, user, order, makerInfo, referrerInfo)), [], this.opts);
1105
1105
  return txSig;
1106
1106
  }
1107
- async getFillOrderIx(userAccountPublicKey, userAccount, order, makerInfo, referrerInfo) {
1107
+ async getFillPerpOrderIx(userAccountPublicKey, userAccount, order, makerInfo, referrerInfo) {
1108
1108
  const userStatsPublicKey = (0, pda_1.getUserStatsAccountPublicKey)(this.program.programId, userAccount.authority);
1109
1109
  const fillerPublicKey = await this.getUserAccountPublicKey();
1110
1110
  const fillerStatsPublicKey = this.getUserStatsAccountPublicKey();
@@ -1145,7 +1145,7 @@ class ClearingHouse {
1145
1145
  }
1146
1146
  const orderId = order.orderId;
1147
1147
  const makerOrderId = makerInfo ? makerInfo.order.orderId : null;
1148
- return await this.program.instruction.fillOrder(orderId, makerOrderId, {
1148
+ return await this.program.instruction.fillPerpOrder(orderId, makerOrderId, {
1149
1149
  accounts: {
1150
1150
  state: await this.getStatePublicKey(),
1151
1151
  filler: fillerPublicKey,
@@ -1352,12 +1352,12 @@ class ClearingHouse {
1352
1352
  remainingAccounts,
1353
1353
  });
1354
1354
  }
1355
- async placeAndTake(orderParams, makerInfo, referrerInfo) {
1356
- const { txSig, slot } = await this.txSender.send((0, utils_1.wrapInTx)(await this.getPlaceAndTakeIx(orderParams, makerInfo, referrerInfo)), [], this.opts);
1355
+ async placeAndTakePerpOrder(orderParams, makerInfo, referrerInfo) {
1356
+ const { txSig, slot } = await this.txSender.send((0, utils_1.wrapInTx)(await this.getPlaceAndTakePerpOrderIx(orderParams, makerInfo, referrerInfo)), [], this.opts);
1357
1357
  this.marketLastSlotCache.set(orderParams.marketIndex, slot);
1358
1358
  return txSig;
1359
1359
  }
1360
- async getPlaceAndTakeIx(orderParams, makerInfo, referrerInfo) {
1360
+ async getPlaceAndTakePerpOrderIx(orderParams, makerInfo, referrerInfo) {
1361
1361
  orderParams = this.getOrderParams(orderParams, types_1.MarketType.PERP);
1362
1362
  const userStatsPublicKey = await this.getUserStatsAccountPublicKey();
1363
1363
  const userAccountPublicKey = await this.getUserAccountPublicKey();
@@ -1396,7 +1396,7 @@ class ClearingHouse {
1396
1396
  isSigner: false,
1397
1397
  });
1398
1398
  }
1399
- return await this.program.instruction.placeAndTake(orderParams, makerOrderId, {
1399
+ return await this.program.instruction.placeAndTakePerpOrder(orderParams, makerOrderId, {
1400
1400
  accounts: {
1401
1401
  state: await this.getStatePublicKey(),
1402
1402
  user: userAccountPublicKey,
@@ -1406,12 +1406,12 @@ class ClearingHouse {
1406
1406
  remainingAccounts,
1407
1407
  });
1408
1408
  }
1409
- async placeAndMake(orderParams, takerInfo, referrerInfo) {
1410
- const { txSig, slot } = await this.txSender.send((0, utils_1.wrapInTx)(await this.getPlaceAndMakeIx(orderParams, takerInfo, referrerInfo)), [], this.opts);
1409
+ async placeAndMakePerpOrder(orderParams, takerInfo, referrerInfo) {
1410
+ const { txSig, slot } = await this.txSender.send((0, utils_1.wrapInTx)(await this.getPlaceAndMakePerpOrderIx(orderParams, takerInfo, referrerInfo)), [], this.opts);
1411
1411
  this.marketLastSlotCache.set(orderParams.marketIndex, slot);
1412
1412
  return txSig;
1413
1413
  }
1414
- async getPlaceAndMakeIx(orderParams, takerInfo, referrerInfo) {
1414
+ async getPlaceAndMakePerpOrderIx(orderParams, takerInfo, referrerInfo) {
1415
1415
  orderParams = this.getOrderParams(orderParams, types_1.MarketType.PERP);
1416
1416
  const userStatsPublicKey = this.getUserStatsAccountPublicKey();
1417
1417
  const userAccountPublicKey = await this.getUserAccountPublicKey();
@@ -1433,7 +1433,7 @@ class ClearingHouse {
1433
1433
  });
1434
1434
  }
1435
1435
  const takerOrderId = takerInfo.order.orderId;
1436
- return await this.program.instruction.placeAndMake(orderParams, takerOrderId, {
1436
+ return await this.program.instruction.placeAndMakePerpOrder(orderParams, takerOrderId, {
1437
1437
  accounts: {
1438
1438
  state: await this.getStatePublicKey(),
1439
1439
  user: userAccountPublicKey,
@@ -1555,7 +1555,7 @@ class ClearingHouse {
1555
1555
  if (!userPosition) {
1556
1556
  throw Error(`No position in market ${marketIndex.toString()}`);
1557
1557
  }
1558
- return await this.placeAndTake({
1558
+ return await this.placeAndTakePerpOrder({
1559
1559
  orderType: types_1.OrderType.MARKET,
1560
1560
  marketIndex,
1561
1561
  direction: (0, position_1.findDirectionToClose)(userPosition),
@@ -114,7 +114,7 @@ class ClearingHouseUser {
114
114
  const position = this.getUserPosition(marketIndex);
115
115
  const [lpOpenBids, lpOpenAsks] = this.getLPBidAsks(marketIndex);
116
116
  const totalOpenBids = lpOpenBids.add(position.openBids);
117
- const totalOpenAsks = lpOpenAsks.sub(position.openAsks);
117
+ const totalOpenAsks = lpOpenAsks.add(position.openAsks);
118
118
  return [totalOpenBids, totalOpenAsks];
119
119
  }
120
120
  /**
package/lib/config.js CHANGED
@@ -7,7 +7,7 @@ exports.configs = {
7
7
  devnet: {
8
8
  ENV: 'devnet',
9
9
  PYTH_ORACLE_MAPPING_ADDRESS: 'BmA9Z6FjioHJPpjT39QazZyhDRUdZy2ezwx4GiDdE2u2',
10
- CLEARING_HOUSE_PROGRAM_ID: 'FPVkWvcQgc4aCS8TrKo5c8GqTbKMauvzpADdqzRT2WbT',
10
+ CLEARING_HOUSE_PROGRAM_ID: 'BJG3o4CURrokB7huNyiHptYepAtHXj4YfefJiPgzUULV',
11
11
  USDC_MINT_ADDRESS: '8zGuJQqwhZafTah7Uc7Z4tXRnguqkn5KLFAP8oV6PHe2',
12
12
  SERUM_V3: 'DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY',
13
13
  V2_ALPHA_TICKET_MINT_ADDRESS: 'DeEiGWfCMP9psnLGkxGrBBMEAW5Jv8bBGMN8DCtFRCyB',
@@ -35,6 +35,7 @@ export declare const SPOT_MARKET_IMF_PRECISION: BN;
35
35
  export declare const LIQUIDATION_FEE_PRECISION: BN;
36
36
  export declare const QUOTE_PRECISION: BN;
37
37
  export declare const PRICE_PRECISION: BN;
38
+ export declare const FUNDING_RATE_PRECISION: BN;
38
39
  export declare const FUNDING_RATE_BUFFER_PRECISION: BN;
39
40
  export declare const PEG_PRECISION: BN;
40
41
  export declare const AMM_RESERVE_PRECISION: BN;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LAMPORTS_EXP = exports.LAMPORTS_PRECISION = exports.QUOTE_SPOT_MARKET_INDEX = exports.ONE_YEAR = exports.BID_ASK_SPREAD_PRECISION = exports.MARGIN_PRECISION = exports.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO = exports.PRICE_TO_QUOTE_PRECISION = exports.PRICE_DIV_PEG = exports.AMM_TO_QUOTE_PRECISION_RATIO = exports.BASE_PRECISION_EXP = exports.BASE_PRECISION = exports.AMM_RESERVE_PRECISION = exports.PEG_PRECISION = exports.FUNDING_RATE_BUFFER_PRECISION = exports.PRICE_PRECISION = exports.QUOTE_PRECISION = exports.LIQUIDATION_FEE_PRECISION = exports.SPOT_MARKET_IMF_PRECISION = exports.SPOT_MARKET_IMF_PRECISION_EXP = exports.SPOT_MARKET_BALANCE_PRECISION = exports.SPOT_MARKET_BALANCE_PRECISION_EXP = exports.SPOT_MARKET_WEIGHT_PRECISION = exports.SPOT_MARKET_UTILIZATION_PRECISION = exports.SPOT_MARKET_UTILIZATION_PRECISION_EXP = exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION = exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP = exports.SPOT_MARKET_RATE_PRECISION = exports.SPOT_MARKET_RATE_PRECISION_EXP = exports.AMM_RESERVE_PRECISION_EXP = exports.PEG_PRECISION_EXP = exports.FUNDING_RATE_PRECISION_EXP = exports.PRICE_PRECISION_EXP = exports.FUNDING_RATE_BUFFER_PRECISION_EXP = exports.QUOTE_PRECISION_EXP = exports.MAX_LEVERAGE = exports.TEN_MILLION = exports.BN_MAX = exports.TEN_THOUSAND = exports.TEN = exports.NINE = exports.EIGHT = exports.SEVEN = exports.SIX = exports.FIVE = exports.FOUR = exports.THREE = exports.TWO = exports.ONE = exports.ZERO = void 0;
3
+ exports.LAMPORTS_PRECISION = exports.QUOTE_SPOT_MARKET_INDEX = exports.ONE_YEAR = exports.BID_ASK_SPREAD_PRECISION = exports.MARGIN_PRECISION = exports.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO = exports.PRICE_TO_QUOTE_PRECISION = exports.PRICE_DIV_PEG = exports.AMM_TO_QUOTE_PRECISION_RATIO = exports.BASE_PRECISION_EXP = exports.BASE_PRECISION = exports.AMM_RESERVE_PRECISION = exports.PEG_PRECISION = exports.FUNDING_RATE_BUFFER_PRECISION = exports.FUNDING_RATE_PRECISION = exports.PRICE_PRECISION = exports.QUOTE_PRECISION = exports.LIQUIDATION_FEE_PRECISION = exports.SPOT_MARKET_IMF_PRECISION = exports.SPOT_MARKET_IMF_PRECISION_EXP = exports.SPOT_MARKET_BALANCE_PRECISION = exports.SPOT_MARKET_BALANCE_PRECISION_EXP = exports.SPOT_MARKET_WEIGHT_PRECISION = exports.SPOT_MARKET_UTILIZATION_PRECISION = exports.SPOT_MARKET_UTILIZATION_PRECISION_EXP = exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION = exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP = exports.SPOT_MARKET_RATE_PRECISION = exports.SPOT_MARKET_RATE_PRECISION_EXP = exports.AMM_RESERVE_PRECISION_EXP = exports.PEG_PRECISION_EXP = exports.FUNDING_RATE_PRECISION_EXP = exports.PRICE_PRECISION_EXP = exports.FUNDING_RATE_BUFFER_PRECISION_EXP = exports.QUOTE_PRECISION_EXP = exports.MAX_LEVERAGE = exports.TEN_MILLION = exports.BN_MAX = exports.TEN_THOUSAND = exports.TEN = exports.NINE = exports.EIGHT = exports.SEVEN = exports.SIX = exports.FIVE = exports.FOUR = exports.THREE = exports.TWO = exports.ONE = exports.ZERO = void 0;
4
+ exports.LAMPORTS_EXP = void 0;
4
5
  const web3_js_1 = require("@solana/web3.js");
5
6
  const __1 = require("../");
6
7
  exports.ZERO = new __1.BN(0);
@@ -21,7 +22,7 @@ exports.MAX_LEVERAGE = new __1.BN(5);
21
22
  exports.QUOTE_PRECISION_EXP = new __1.BN(6);
22
23
  exports.FUNDING_RATE_BUFFER_PRECISION_EXP = new __1.BN(3);
23
24
  exports.PRICE_PRECISION_EXP = new __1.BN(6);
24
- exports.FUNDING_RATE_PRECISION_EXP = exports.PRICE_PRECISION_EXP.mul(exports.FUNDING_RATE_BUFFER_PRECISION_EXP);
25
+ exports.FUNDING_RATE_PRECISION_EXP = exports.PRICE_PRECISION_EXP.add(exports.FUNDING_RATE_BUFFER_PRECISION_EXP);
25
26
  exports.PEG_PRECISION_EXP = new __1.BN(6);
26
27
  exports.AMM_RESERVE_PRECISION_EXP = new __1.BN(9);
27
28
  exports.SPOT_MARKET_RATE_PRECISION_EXP = new __1.BN(6);
@@ -38,6 +39,7 @@ exports.SPOT_MARKET_IMF_PRECISION = new __1.BN(10).pow(exports.SPOT_MARKET_IMF_P
38
39
  exports.LIQUIDATION_FEE_PRECISION = new __1.BN(1000000);
39
40
  exports.QUOTE_PRECISION = new __1.BN(10).pow(exports.QUOTE_PRECISION_EXP);
40
41
  exports.PRICE_PRECISION = new __1.BN(10).pow(exports.PRICE_PRECISION_EXP);
42
+ exports.FUNDING_RATE_PRECISION = new __1.BN(10).pow(exports.FUNDING_RATE_PRECISION_EXP);
41
43
  exports.FUNDING_RATE_BUFFER_PRECISION = new __1.BN(10).pow(exports.FUNDING_RATE_BUFFER_PRECISION_EXP);
42
44
  exports.PEG_PRECISION = new __1.BN(10).pow(exports.PEG_PRECISION_EXP);
43
45
  exports.AMM_RESERVE_PRECISION = new __1.BN(10).pow(exports.AMM_RESERVE_PRECISION_EXP);
@@ -247,7 +247,7 @@
247
247
  ]
248
248
  },
249
249
  {
250
- "name": "placeOrder",
250
+ "name": "placePerpOrder",
251
251
  "accounts": [
252
252
  {
253
253
  "name": "state",
@@ -373,7 +373,7 @@
373
373
  ]
374
374
  },
375
375
  {
376
- "name": "placeAndTake",
376
+ "name": "placeAndTakePerpOrder",
377
377
  "accounts": [
378
378
  {
379
379
  "name": "state",
@@ -412,7 +412,7 @@
412
412
  ]
413
413
  },
414
414
  {
415
- "name": "placeAndMake",
415
+ "name": "placeAndMakePerpOrder",
416
416
  "accounts": [
417
417
  {
418
418
  "name": "state",
@@ -772,7 +772,7 @@
772
772
  "args": []
773
773
  },
774
774
  {
775
- "name": "fillOrder",
775
+ "name": "fillPerpOrder",
776
776
  "accounts": [
777
777
  {
778
778
  "name": "state",
@@ -3276,6 +3276,32 @@
3276
3276
  }
3277
3277
  ]
3278
3278
  },
3279
+ {
3280
+ "name": "updatePerpMarketMaxOpenInterest",
3281
+ "accounts": [
3282
+ {
3283
+ "name": "admin",
3284
+ "isMut": false,
3285
+ "isSigner": true
3286
+ },
3287
+ {
3288
+ "name": "state",
3289
+ "isMut": false,
3290
+ "isSigner": false
3291
+ },
3292
+ {
3293
+ "name": "perpMarket",
3294
+ "isMut": true,
3295
+ "isSigner": false
3296
+ }
3297
+ ],
3298
+ "args": [
3299
+ {
3300
+ "name": "maxOpenInterest",
3301
+ "type": "u128"
3302
+ }
3303
+ ]
3304
+ },
3279
3305
  {
3280
3306
  "name": "updateAdmin",
3281
3307
  "accounts": [
@@ -4089,6 +4115,10 @@
4089
4115
  "name": "settledPerpPnl",
4090
4116
  "type": "i64"
4091
4117
  },
4118
+ {
4119
+ "name": "cumulativeSpotFees",
4120
+ "type": "i64"
4121
+ },
4092
4122
  {
4093
4123
  "name": "nextOrderId",
4094
4124
  "type": "u32"
@@ -4684,6 +4714,10 @@
4684
4714
  "name": "baseAssetAmountWithUnsettledLp",
4685
4715
  "type": "i128"
4686
4716
  },
4717
+ {
4718
+ "name": "maxOpenInterest",
4719
+ "type": "u128"
4720
+ },
4687
4721
  {
4688
4722
  "name": "quoteAssetAmountLong",
4689
4723
  "type": "i128"
@@ -5371,6 +5405,15 @@
5371
5405
  {
5372
5406
  "name": "auctionDuration",
5373
5407
  "type": "u8"
5408
+ },
5409
+ {
5410
+ "name": "padding",
5411
+ "type": {
5412
+ "array": [
5413
+ "u8",
5414
+ 2
5415
+ ]
5416
+ }
5374
5417
  }
5375
5418
  ]
5376
5419
  }
@@ -7568,6 +7611,16 @@
7568
7611
  "code": 6134,
7569
7612
  "name": "ReduceOnlyWithdrawIncreasedRisk",
7570
7613
  "msg": "Reduce Only Withdraw Increased Risk"
7614
+ },
7615
+ {
7616
+ "code": 6135,
7617
+ "name": "MaxOpenInterest",
7618
+ "msg": "Max Open Interest"
7619
+ },
7620
+ {
7621
+ "code": 6136,
7622
+ "name": "CantResolvePerpBankruptcy",
7623
+ "msg": "Cant Resolve Perp Bankruptcy"
7571
7624
  }
7572
7625
  ]
7573
7626
  }
package/lib/types.d.ts CHANGED
@@ -630,9 +630,6 @@ export declare type AMM = {
630
630
  totalFeeMinusDistributions: BN;
631
631
  totalFeeWithdrawn: BN;
632
632
  totalFee: BN;
633
- cumulativeFundingPaymentPerLp: BN;
634
- cumulativeFeePerLp: BN;
635
- cumulativeNetBaseAssetAmountPerLp: BN;
636
633
  userLpShares: BN;
637
634
  baseAssetAmountWithUnsettledLp: BN;
638
635
  orderStepSize: BN;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drift-labs/sdk",
3
- "version": "0.2.0-master.33",
3
+ "version": "0.2.0-master.35",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "author": "crispheaney",
package/src/admin.ts CHANGED
@@ -1007,6 +1007,25 @@ export class Admin extends ClearingHouse {
1007
1007
  );
1008
1008
  }
1009
1009
 
1010
+ public async updatePerpMarketMaxOpenInterest(
1011
+ perpMarketIndex: number,
1012
+ maxOpenInterest: BN
1013
+ ): Promise<TransactionSignature> {
1014
+ return await this.program.rpc.updatePerpMarketMaxOpenInterest(
1015
+ maxOpenInterest,
1016
+ {
1017
+ accounts: {
1018
+ admin: this.wallet.publicKey,
1019
+ state: await this.getStatePublicKey(),
1020
+ perpMarket: await getPerpMarketPublicKey(
1021
+ this.program.programId,
1022
+ perpMarketIndex
1023
+ ),
1024
+ },
1025
+ }
1026
+ );
1027
+ }
1028
+
1010
1029
  public async updateSerumVault(
1011
1030
  srmVault: PublicKey
1012
1031
  ): Promise<TransactionSignature> {
@@ -1561,7 +1561,7 @@ export class ClearingHouse {
1561
1561
  marketIndex: number,
1562
1562
  limitPrice?: BN
1563
1563
  ): Promise<TransactionSignature> {
1564
- return await this.placeAndTake({
1564
+ return await this.placeAndTakePerpOrder({
1565
1565
  orderType: OrderType.MARKET,
1566
1566
  marketIndex,
1567
1567
  direction,
@@ -1591,9 +1591,9 @@ export class ClearingHouse {
1591
1591
  const marketIndex = orderParams.marketIndex;
1592
1592
  const orderId = userAccount.nextOrderId;
1593
1593
 
1594
- const marketOrderTx = wrapInTx(await this.getPlaceOrderIx(orderParams));
1594
+ const marketOrderTx = wrapInTx(await this.getPlacePerpOrderIx(orderParams));
1595
1595
  const fillTx = wrapInTx(
1596
- await this.getFillOrderIx(userAccountPublicKey, userAccount, {
1596
+ await this.getFillPerpOrderIx(userAccountPublicKey, userAccount, {
1597
1597
  orderId,
1598
1598
  marketIndex,
1599
1599
  })
@@ -1624,11 +1624,11 @@ export class ClearingHouse {
1624
1624
  return { txSig, signedFillTx };
1625
1625
  }
1626
1626
 
1627
- public async placeOrder(
1627
+ public async placePerpOrder(
1628
1628
  orderParams: OptionalOrderParams
1629
1629
  ): Promise<TransactionSignature> {
1630
1630
  const { txSig, slot } = await this.txSender.send(
1631
- wrapInTx(await this.getPlaceOrderIx(orderParams)),
1631
+ wrapInTx(await this.getPlacePerpOrderIx(orderParams)),
1632
1632
  [],
1633
1633
  this.opts
1634
1634
  );
@@ -1645,7 +1645,7 @@ export class ClearingHouse {
1645
1645
  });
1646
1646
  }
1647
1647
 
1648
- public async getPlaceOrderIx(
1648
+ public async getPlacePerpOrderIx(
1649
1649
  orderParams: OptionalOrderParams
1650
1650
  ): Promise<TransactionInstruction> {
1651
1651
  orderParams = this.getOrderParams(orderParams, MarketType.PERP);
@@ -1657,7 +1657,7 @@ export class ClearingHouse {
1657
1657
  readablePerpMarketIndex: orderParams.marketIndex,
1658
1658
  });
1659
1659
 
1660
- return await this.program.instruction.placeOrder(orderParams, {
1660
+ return await this.program.instruction.placePerpOrder(orderParams, {
1661
1661
  accounts: {
1662
1662
  state: await this.getStatePublicKey(),
1663
1663
  user: userAccountPublicKey,
@@ -1895,7 +1895,7 @@ export class ClearingHouse {
1895
1895
  );
1896
1896
  }
1897
1897
 
1898
- public async fillOrder(
1898
+ public async fillPerpOrder(
1899
1899
  userAccountPublicKey: PublicKey,
1900
1900
  user: UserAccount,
1901
1901
  order?: Pick<Order, 'marketIndex' | 'orderId'>,
@@ -1904,7 +1904,7 @@ export class ClearingHouse {
1904
1904
  ): Promise<TransactionSignature> {
1905
1905
  const { txSig } = await this.txSender.send(
1906
1906
  wrapInTx(
1907
- await this.getFillOrderIx(
1907
+ await this.getFillPerpOrderIx(
1908
1908
  userAccountPublicKey,
1909
1909
  user,
1910
1910
  order,
@@ -1918,7 +1918,7 @@ export class ClearingHouse {
1918
1918
  return txSig;
1919
1919
  }
1920
1920
 
1921
- public async getFillOrderIx(
1921
+ public async getFillPerpOrderIx(
1922
1922
  userAccountPublicKey: PublicKey,
1923
1923
  userAccount: UserAccount,
1924
1924
  order: Pick<Order, 'marketIndex' | 'orderId'>,
@@ -1977,7 +1977,7 @@ export class ClearingHouse {
1977
1977
  const orderId = order.orderId;
1978
1978
  const makerOrderId = makerInfo ? makerInfo.order.orderId : null;
1979
1979
 
1980
- return await this.program.instruction.fillOrder(orderId, makerOrderId, {
1980
+ return await this.program.instruction.fillPerpOrder(orderId, makerOrderId, {
1981
1981
  accounts: {
1982
1982
  state: await this.getStatePublicKey(),
1983
1983
  filler: fillerPublicKey,
@@ -2275,14 +2275,18 @@ export class ClearingHouse {
2275
2275
  });
2276
2276
  }
2277
2277
 
2278
- public async placeAndTake(
2278
+ public async placeAndTakePerpOrder(
2279
2279
  orderParams: OptionalOrderParams,
2280
2280
  makerInfo?: MakerInfo,
2281
2281
  referrerInfo?: ReferrerInfo
2282
2282
  ): Promise<TransactionSignature> {
2283
2283
  const { txSig, slot } = await this.txSender.send(
2284
2284
  wrapInTx(
2285
- await this.getPlaceAndTakeIx(orderParams, makerInfo, referrerInfo)
2285
+ await this.getPlaceAndTakePerpOrderIx(
2286
+ orderParams,
2287
+ makerInfo,
2288
+ referrerInfo
2289
+ )
2286
2290
  ),
2287
2291
  [],
2288
2292
  this.opts
@@ -2291,7 +2295,7 @@ export class ClearingHouse {
2291
2295
  return txSig;
2292
2296
  }
2293
2297
 
2294
- public async getPlaceAndTakeIx(
2298
+ public async getPlaceAndTakePerpOrderIx(
2295
2299
  orderParams: OptionalOrderParams,
2296
2300
  makerInfo?: MakerInfo,
2297
2301
  referrerInfo?: ReferrerInfo
@@ -2338,7 +2342,7 @@ export class ClearingHouse {
2338
2342
  });
2339
2343
  }
2340
2344
 
2341
- return await this.program.instruction.placeAndTake(
2345
+ return await this.program.instruction.placeAndTakePerpOrder(
2342
2346
  orderParams,
2343
2347
  makerOrderId,
2344
2348
  {
@@ -2353,14 +2357,18 @@ export class ClearingHouse {
2353
2357
  );
2354
2358
  }
2355
2359
 
2356
- public async placeAndMake(
2360
+ public async placeAndMakePerpOrder(
2357
2361
  orderParams: OptionalOrderParams,
2358
2362
  takerInfo: TakerInfo,
2359
2363
  referrerInfo?: ReferrerInfo
2360
2364
  ): Promise<TransactionSignature> {
2361
2365
  const { txSig, slot } = await this.txSender.send(
2362
2366
  wrapInTx(
2363
- await this.getPlaceAndMakeIx(orderParams, takerInfo, referrerInfo)
2367
+ await this.getPlaceAndMakePerpOrderIx(
2368
+ orderParams,
2369
+ takerInfo,
2370
+ referrerInfo
2371
+ )
2364
2372
  ),
2365
2373
  [],
2366
2374
  this.opts
@@ -2371,7 +2379,7 @@ export class ClearingHouse {
2371
2379
  return txSig;
2372
2380
  }
2373
2381
 
2374
- public async getPlaceAndMakeIx(
2382
+ public async getPlaceAndMakePerpOrderIx(
2375
2383
  orderParams: OptionalOrderParams,
2376
2384
  takerInfo: TakerInfo,
2377
2385
  referrerInfo?: ReferrerInfo
@@ -2400,7 +2408,7 @@ export class ClearingHouse {
2400
2408
  }
2401
2409
 
2402
2410
  const takerOrderId = takerInfo.order.orderId;
2403
- return await this.program.instruction.placeAndMake(
2411
+ return await this.program.instruction.placeAndMakePerpOrder(
2404
2412
  orderParams,
2405
2413
  takerOrderId,
2406
2414
  {
@@ -2596,7 +2604,7 @@ export class ClearingHouse {
2596
2604
  throw Error(`No position in market ${marketIndex.toString()}`);
2597
2605
  }
2598
2606
 
2599
- return await this.placeAndTake({
2607
+ return await this.placeAndTakePerpOrder({
2600
2608
  orderType: OrderType.MARKET,
2601
2609
  marketIndex,
2602
2610
  direction: findDirectionToClose(userPosition),
@@ -201,7 +201,7 @@ export class ClearingHouseUser {
201
201
  const [lpOpenBids, lpOpenAsks] = this.getLPBidAsks(marketIndex);
202
202
 
203
203
  const totalOpenBids = lpOpenBids.add(position.openBids);
204
- const totalOpenAsks = lpOpenAsks.sub(position.openAsks);
204
+ const totalOpenAsks = lpOpenAsks.add(position.openAsks);
205
205
 
206
206
  return [totalOpenBids, totalOpenAsks];
207
207
  }
package/src/config.ts CHANGED
@@ -29,7 +29,7 @@ export const configs: { [key in DriftEnv]: DriftConfig } = {
29
29
  devnet: {
30
30
  ENV: 'devnet',
31
31
  PYTH_ORACLE_MAPPING_ADDRESS: 'BmA9Z6FjioHJPpjT39QazZyhDRUdZy2ezwx4GiDdE2u2',
32
- CLEARING_HOUSE_PROGRAM_ID: 'FPVkWvcQgc4aCS8TrKo5c8GqTbKMauvzpADdqzRT2WbT',
32
+ CLEARING_HOUSE_PROGRAM_ID: 'BJG3o4CURrokB7huNyiHptYepAtHXj4YfefJiPgzUULV',
33
33
  USDC_MINT_ADDRESS: '8zGuJQqwhZafTah7Uc7Z4tXRnguqkn5KLFAP8oV6PHe2',
34
34
  SERUM_V3: 'DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY',
35
35
  V2_ALPHA_TICKET_MINT_ADDRESS:
@@ -21,7 +21,7 @@ export const MAX_LEVERAGE = new BN(5);
21
21
  export const QUOTE_PRECISION_EXP = new BN(6);
22
22
  export const FUNDING_RATE_BUFFER_PRECISION_EXP = new BN(3);
23
23
  export const PRICE_PRECISION_EXP = new BN(6);
24
- export const FUNDING_RATE_PRECISION_EXP = PRICE_PRECISION_EXP.mul(
24
+ export const FUNDING_RATE_PRECISION_EXP = PRICE_PRECISION_EXP.add(
25
25
  FUNDING_RATE_BUFFER_PRECISION_EXP
26
26
  );
27
27
  export const PEG_PRECISION_EXP = new BN(6);
@@ -56,6 +56,9 @@ export const LIQUIDATION_FEE_PRECISION = new BN(1000000);
56
56
 
57
57
  export const QUOTE_PRECISION = new BN(10).pow(QUOTE_PRECISION_EXP);
58
58
  export const PRICE_PRECISION = new BN(10).pow(PRICE_PRECISION_EXP);
59
+ export const FUNDING_RATE_PRECISION = new BN(10).pow(
60
+ FUNDING_RATE_PRECISION_EXP
61
+ );
59
62
  export const FUNDING_RATE_BUFFER_PRECISION = new BN(10).pow(
60
63
  FUNDING_RATE_BUFFER_PRECISION_EXP
61
64
  );
@@ -247,7 +247,7 @@
247
247
  ]
248
248
  },
249
249
  {
250
- "name": "placeOrder",
250
+ "name": "placePerpOrder",
251
251
  "accounts": [
252
252
  {
253
253
  "name": "state",
@@ -373,7 +373,7 @@
373
373
  ]
374
374
  },
375
375
  {
376
- "name": "placeAndTake",
376
+ "name": "placeAndTakePerpOrder",
377
377
  "accounts": [
378
378
  {
379
379
  "name": "state",
@@ -412,7 +412,7 @@
412
412
  ]
413
413
  },
414
414
  {
415
- "name": "placeAndMake",
415
+ "name": "placeAndMakePerpOrder",
416
416
  "accounts": [
417
417
  {
418
418
  "name": "state",
@@ -772,7 +772,7 @@
772
772
  "args": []
773
773
  },
774
774
  {
775
- "name": "fillOrder",
775
+ "name": "fillPerpOrder",
776
776
  "accounts": [
777
777
  {
778
778
  "name": "state",
@@ -3276,6 +3276,32 @@
3276
3276
  }
3277
3277
  ]
3278
3278
  },
3279
+ {
3280
+ "name": "updatePerpMarketMaxOpenInterest",
3281
+ "accounts": [
3282
+ {
3283
+ "name": "admin",
3284
+ "isMut": false,
3285
+ "isSigner": true
3286
+ },
3287
+ {
3288
+ "name": "state",
3289
+ "isMut": false,
3290
+ "isSigner": false
3291
+ },
3292
+ {
3293
+ "name": "perpMarket",
3294
+ "isMut": true,
3295
+ "isSigner": false
3296
+ }
3297
+ ],
3298
+ "args": [
3299
+ {
3300
+ "name": "maxOpenInterest",
3301
+ "type": "u128"
3302
+ }
3303
+ ]
3304
+ },
3279
3305
  {
3280
3306
  "name": "updateAdmin",
3281
3307
  "accounts": [
@@ -4089,6 +4115,10 @@
4089
4115
  "name": "settledPerpPnl",
4090
4116
  "type": "i64"
4091
4117
  },
4118
+ {
4119
+ "name": "cumulativeSpotFees",
4120
+ "type": "i64"
4121
+ },
4092
4122
  {
4093
4123
  "name": "nextOrderId",
4094
4124
  "type": "u32"
@@ -4684,6 +4714,10 @@
4684
4714
  "name": "baseAssetAmountWithUnsettledLp",
4685
4715
  "type": "i128"
4686
4716
  },
4717
+ {
4718
+ "name": "maxOpenInterest",
4719
+ "type": "u128"
4720
+ },
4687
4721
  {
4688
4722
  "name": "quoteAssetAmountLong",
4689
4723
  "type": "i128"
@@ -5371,6 +5405,15 @@
5371
5405
  {
5372
5406
  "name": "auctionDuration",
5373
5407
  "type": "u8"
5408
+ },
5409
+ {
5410
+ "name": "padding",
5411
+ "type": {
5412
+ "array": [
5413
+ "u8",
5414
+ 2
5415
+ ]
5416
+ }
5374
5417
  }
5375
5418
  ]
5376
5419
  }
@@ -7568,6 +7611,16 @@
7568
7611
  "code": 6134,
7569
7612
  "name": "ReduceOnlyWithdrawIncreasedRisk",
7570
7613
  "msg": "Reduce Only Withdraw Increased Risk"
7614
+ },
7615
+ {
7616
+ "code": 6135,
7617
+ "name": "MaxOpenInterest",
7618
+ "msg": "Max Open Interest"
7619
+ },
7620
+ {
7621
+ "code": 6136,
7622
+ "name": "CantResolvePerpBankruptcy",
7623
+ "msg": "Cant Resolve Perp Bankruptcy"
7571
7624
  }
7572
7625
  ]
7573
7626
  }
package/src/types.ts CHANGED
@@ -576,9 +576,6 @@ export type AMM = {
576
576
  totalFeeMinusDistributions: BN;
577
577
  totalFeeWithdrawn: BN;
578
578
  totalFee: BN;
579
- cumulativeFundingPaymentPerLp: BN;
580
- cumulativeFeePerLp: BN;
581
- cumulativeNetBaseAssetAmountPerLp: BN;
582
579
  userLpShares: BN;
583
580
  baseAssetAmountWithUnsettledLp: BN;
584
581
  orderStepSize: BN;
@@ -19,8 +19,8 @@ import {
19
19
  UserMapInterface,
20
20
  Wallet,
21
21
  OrderRecord,
22
+ ExchangeStatus,
22
23
  } from '../../src';
23
- import { ExchangeStatus } from '../../lib';
24
24
 
25
25
  export const mockPerpPosition: PerpPosition = {
26
26
  baseAssetAmount: new BN(0),
@@ -73,9 +73,6 @@ export const mockAMM: AMM = {
73
73
  totalFeeMinusDistributions: new BN(0),
74
74
  totalFeeWithdrawn: new BN(0),
75
75
  totalFee: new BN(0),
76
- cumulativeFundingPaymentPerLp: new BN(0),
77
- cumulativeFeePerLp: new BN(0),
78
- cumulativeNetBaseAssetAmountPerLp: new BN(0),
79
76
  userLpShares: new BN(0),
80
77
  baseAssetAmountWithUnsettledLp: new BN(0),
81
78
  orderStepSize: new BN(0),
@@ -19,6 +19,7 @@ import {
19
19
  Order,
20
20
  isMarketOrder,
21
21
  isLimitOrder,
22
+ ZERO,
22
23
  } from '../../src';
23
24
 
24
25
  import {
@@ -27,7 +28,6 @@ import {
27
28
  mockStateAccount,
28
29
  MockUserMap,
29
30
  } from './helpers';
30
- import { ZERO } from '../../lib';
31
31
 
32
32
  function insertOrderToDLOB(
33
33
  dlob: DLOB,
@@ -194,14 +194,14 @@ function printCrossedNodes(n: NodeToFill, slot: number) {
194
194
  }`
195
195
  );
196
196
  console.log(
197
- `node: (mkt: ${isMarketOrder(n.node.order)}, lim: ${isLimitOrder(
198
- n.node.order
197
+ `node: (mkt: ${isMarketOrder(n.node.order!)}, lim: ${isLimitOrder(
198
+ n.node.order!
199
199
  )})`
200
200
  );
201
201
  if (n.makerNode) {
202
202
  console.log(
203
- `mkrnode: (mkt: ${isMarketOrder(n.makerNode.order)}, lim: ${isLimitOrder(
204
- n.makerNode.order
203
+ `mkrnode: (mkt: ${isMarketOrder(n.makerNode.order!)}, lim: ${isLimitOrder(
204
+ n.makerNode.order!
205
205
  )})`
206
206
  );
207
207
  }