@drift-labs/sdk 0.2.0-master.3 → 0.2.0-master.31

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.
Files changed (208) hide show
  1. package/README.md +13 -13
  2. package/lib/accounts/bulkUserStatsSubscription.d.ts +7 -0
  3. package/lib/accounts/bulkUserStatsSubscription.js +21 -0
  4. package/lib/accounts/bulkUserSubscription.js +0 -1
  5. package/lib/accounts/fetch.d.ts +2 -1
  6. package/lib/accounts/fetch.js +9 -1
  7. package/lib/accounts/pollingClearingHouseAccountSubscriber.d.ts +16 -16
  8. package/lib/accounts/pollingClearingHouseAccountSubscriber.js +31 -28
  9. package/lib/accounts/pollingUserStatsAccountSubscriber.d.ts +27 -0
  10. package/lib/accounts/pollingUserStatsAccountSubscriber.js +113 -0
  11. package/lib/accounts/types.d.ts +22 -11
  12. package/lib/accounts/webSocketClearingHouseAccountSubscriber.d.ts +17 -17
  13. package/lib/accounts/webSocketClearingHouseAccountSubscriber.js +37 -35
  14. package/lib/accounts/webSocketUserStatsAccountSubsriber.d.ts +20 -0
  15. package/lib/accounts/webSocketUserStatsAccountSubsriber.js +47 -0
  16. package/lib/addresses/marketAddresses.d.ts +1 -3
  17. package/lib/addresses/pda.d.ts +10 -4
  18. package/lib/addresses/pda.js +51 -14
  19. package/lib/admin.d.ts +42 -26
  20. package/lib/admin.js +228 -81
  21. package/lib/clearingHouse.d.ts +130 -49
  22. package/lib/clearingHouse.js +1256 -367
  23. package/lib/clearingHouseConfig.d.ts +4 -4
  24. package/lib/clearingHouseUser.d.ts +51 -39
  25. package/lib/clearingHouseUser.js +408 -191
  26. package/lib/clearingHouseUserStats.d.ts +18 -0
  27. package/lib/clearingHouseUserStats.js +49 -0
  28. package/lib/clearingHouseUserStatsConfig.d.ts +14 -0
  29. package/lib/clearingHouseUserStatsConfig.js +2 -0
  30. package/lib/config.d.ts +7 -9
  31. package/lib/config.js +21 -21
  32. package/lib/constants/numericConstants.d.ts +25 -12
  33. package/lib/constants/numericConstants.js +35 -21
  34. package/lib/constants/perpMarkets.d.ts +18 -0
  35. package/lib/constants/{markets.js → perpMarkets.js} +7 -7
  36. package/lib/constants/spotMarkets.d.ts +19 -0
  37. package/lib/constants/spotMarkets.js +53 -0
  38. package/lib/dlob/DLOB.d.ts +74 -0
  39. package/lib/dlob/DLOB.js +595 -0
  40. package/lib/dlob/DLOBNode.d.ts +54 -0
  41. package/lib/dlob/DLOBNode.js +85 -0
  42. package/lib/dlob/NodeList.d.ts +26 -0
  43. package/lib/dlob/NodeList.js +139 -0
  44. package/lib/events/eventList.js +3 -0
  45. package/lib/events/eventSubscriber.d.ts +4 -2
  46. package/lib/events/eventSubscriber.js +16 -9
  47. package/lib/events/fetchLogs.d.ts +10 -1
  48. package/lib/events/fetchLogs.js +27 -7
  49. package/lib/events/pollingLogProvider.d.ts +2 -1
  50. package/lib/events/pollingLogProvider.js +6 -2
  51. package/lib/events/sort.js +8 -11
  52. package/lib/events/types.d.ts +8 -2
  53. package/lib/events/types.js +6 -0
  54. package/lib/examples/makeTradeExample.js +20 -8
  55. package/lib/factory/bigNum.d.ts +2 -0
  56. package/lib/factory/bigNum.js +48 -10
  57. package/lib/idl/clearing_house.json +4889 -1529
  58. package/lib/idl/{mock_usdc_faucet.json → token_faucet.json} +46 -23
  59. package/lib/index.d.ts +21 -6
  60. package/lib/index.js +25 -6
  61. package/lib/math/amm.d.ts +9 -6
  62. package/lib/math/amm.js +91 -66
  63. package/lib/math/auction.js +4 -1
  64. package/lib/math/conversion.js +1 -1
  65. package/lib/math/funding.d.ts +6 -6
  66. package/lib/math/funding.js +11 -10
  67. package/lib/math/insurance.d.ts +4 -0
  68. package/lib/math/insurance.js +27 -0
  69. package/lib/math/margin.d.ts +11 -0
  70. package/lib/math/margin.js +77 -0
  71. package/lib/math/market.d.ts +14 -9
  72. package/lib/math/market.js +72 -10
  73. package/lib/math/oracles.d.ts +4 -0
  74. package/lib/math/oracles.js +36 -8
  75. package/lib/math/orders.d.ts +6 -2
  76. package/lib/math/orders.js +78 -3
  77. package/lib/math/position.d.ts +21 -13
  78. package/lib/math/position.js +76 -36
  79. package/lib/math/repeg.js +14 -5
  80. package/lib/math/spotBalance.d.ts +22 -0
  81. package/lib/math/spotBalance.js +192 -0
  82. package/lib/math/spotMarket.d.ts +4 -0
  83. package/lib/math/spotMarket.js +8 -0
  84. package/lib/math/spotPosition.d.ts +6 -0
  85. package/lib/math/spotPosition.js +23 -0
  86. package/lib/math/trade.d.ts +10 -10
  87. package/lib/math/trade.js +32 -39
  88. package/lib/oracles/pythClient.js +1 -1
  89. package/lib/oracles/quoteAssetOracleClient.js +1 -1
  90. package/lib/oracles/switchboardClient.js +1 -1
  91. package/lib/orderParams.d.ts +14 -5
  92. package/lib/orderParams.js +12 -92
  93. package/lib/serum/serumSubscriber.d.ts +23 -0
  94. package/lib/serum/serumSubscriber.js +41 -0
  95. package/lib/serum/types.d.ts +11 -0
  96. package/lib/serum/types.js +2 -0
  97. package/lib/slot/SlotSubscriber.d.ts +7 -0
  98. package/lib/slot/SlotSubscriber.js +3 -0
  99. package/lib/{mockUSDCFaucet.d.ts → tokenFaucet.d.ts} +8 -5
  100. package/lib/{mockUSDCFaucet.js → tokenFaucet.js} +63 -51
  101. package/lib/tx/retryTxSender.d.ts +1 -1
  102. package/lib/tx/retryTxSender.js +13 -4
  103. package/lib/tx/types.d.ts +1 -1
  104. package/lib/tx/utils.js +1 -1
  105. package/lib/types.d.ts +566 -138
  106. package/lib/types.js +129 -5
  107. package/lib/userMap/userMap.d.ts +25 -0
  108. package/lib/userMap/userMap.js +73 -0
  109. package/lib/userMap/userStatsMap.d.ts +19 -0
  110. package/lib/userMap/userStatsMap.js +68 -0
  111. package/lib/util/computeUnits.js +1 -1
  112. package/lib/util/getTokenAddress.d.ts +2 -0
  113. package/lib/util/getTokenAddress.js +9 -0
  114. package/package.json +12 -6
  115. package/src/accounts/bulkUserStatsSubscription.ts +33 -0
  116. package/src/accounts/bulkUserSubscription.ts +0 -1
  117. package/src/accounts/fetch.ts +27 -2
  118. package/src/accounts/pollingClearingHouseAccountSubscriber.ts +46 -42
  119. package/src/accounts/pollingUserStatsAccountSubscriber.ts +172 -0
  120. package/src/accounts/types.ts +31 -11
  121. package/src/accounts/webSocketClearingHouseAccountSubscriber.ts +64 -59
  122. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +80 -0
  123. package/src/addresses/marketAddresses.ts +1 -2
  124. package/src/addresses/pda.ts +88 -14
  125. package/src/admin.ts +452 -147
  126. package/src/assert/assert.js +9 -0
  127. package/src/clearingHouse.ts +2066 -467
  128. package/src/clearingHouseConfig.ts +4 -3
  129. package/src/clearingHouseUser.ts +747 -294
  130. package/src/clearingHouseUserStats.ts +75 -0
  131. package/src/clearingHouseUserStatsConfig.ts +18 -0
  132. package/src/config.ts +30 -31
  133. package/src/constants/numericConstants.ts +48 -25
  134. package/src/constants/{markets.ts → perpMarkets.ts} +10 -10
  135. package/src/constants/spotMarkets.ts +73 -0
  136. package/src/dlob/DLOB.ts +953 -0
  137. package/src/dlob/DLOBNode.ts +167 -0
  138. package/src/dlob/NodeList.ts +189 -0
  139. package/src/events/eventList.js +77 -0
  140. package/src/events/eventList.ts +3 -0
  141. package/src/events/eventSubscriber.ts +20 -12
  142. package/src/events/fetchLogs.ts +35 -8
  143. package/src/events/pollingLogProvider.ts +10 -2
  144. package/src/events/sort.ts +11 -15
  145. package/src/events/types.ts +19 -1
  146. package/src/examples/makeTradeExample.js +157 -0
  147. package/src/examples/makeTradeExample.ts +32 -14
  148. package/src/factory/bigNum.ts +65 -13
  149. package/src/idl/clearing_house.json +4889 -1529
  150. package/src/idl/{mock_usdc_faucet.json → token_faucet.json} +46 -23
  151. package/src/index.ts +21 -6
  152. package/src/math/amm.ts +171 -88
  153. package/src/math/auction.ts +5 -1
  154. package/src/math/conversion.ts +2 -2
  155. package/src/math/funding.ts +20 -18
  156. package/src/math/insurance.ts +35 -0
  157. package/src/math/margin.ts +127 -0
  158. package/src/math/market.ts +145 -14
  159. package/src/math/oracles.ts +63 -9
  160. package/src/math/orders.ts +138 -4
  161. package/src/math/position.ts +119 -58
  162. package/src/math/repeg.ts +16 -6
  163. package/src/math/spotBalance.ts +319 -0
  164. package/src/math/spotMarket.ts +9 -0
  165. package/src/math/spotPosition.ts +47 -0
  166. package/src/math/trade.ts +53 -59
  167. package/src/oracles/pythClient.ts +2 -2
  168. package/src/oracles/quoteAssetOracleClient.ts +2 -2
  169. package/src/oracles/switchboardClient.ts +2 -2
  170. package/src/orderParams.ts +24 -137
  171. package/src/serum/serumSubscriber.ts +80 -0
  172. package/src/serum/types.ts +13 -0
  173. package/src/slot/SlotSubscriber.ts +11 -1
  174. package/src/token/index.js +38 -0
  175. package/src/{mockUSDCFaucet.ts → tokenFaucet.ts} +82 -70
  176. package/src/tx/retryTxSender.ts +16 -5
  177. package/src/tx/types.js +2 -0
  178. package/src/tx/types.ts +2 -1
  179. package/src/tx/utils.js +17 -0
  180. package/src/tx/utils.ts +1 -1
  181. package/src/types.ts +533 -140
  182. package/src/userMap/userMap.ts +100 -0
  183. package/src/userMap/userStatsMap.ts +110 -0
  184. package/src/util/computeUnits.js +21 -11
  185. package/src/util/computeUnits.ts +1 -1
  186. package/src/util/getTokenAddress.js +9 -0
  187. package/src/util/getTokenAddress.ts +18 -0
  188. package/src/util/promiseTimeout.js +14 -0
  189. package/src/util/tps.js +27 -0
  190. package/tests/bn/test.ts +24 -10
  191. package/tests/dlob/helpers.ts +397 -0
  192. package/tests/dlob/test.ts +3688 -0
  193. package/lib/constants/banks.d.ts +0 -16
  194. package/lib/constants/banks.js +0 -34
  195. package/lib/constants/markets.d.ts +0 -19
  196. package/lib/math/bankBalance.d.ts +0 -9
  197. package/lib/math/bankBalance.js +0 -75
  198. package/lib/math/state.d.ts +0 -8
  199. package/lib/math/state.js +0 -15
  200. package/lib/orders.d.ts +0 -8
  201. package/lib/orders.js +0 -134
  202. package/src/constants/banks.ts +0 -43
  203. package/src/math/bankBalance.ts +0 -112
  204. package/src/math/state.ts +0 -14
  205. package/src/math/utils.js +0 -27
  206. package/src/math/utils.js.map +0 -1
  207. package/src/orders.ts +0 -244
  208. package/src/util/computeUnits.js.map +0 -1
@@ -9,17 +9,17 @@ const web3_js_1 = require("@solana/web3.js");
9
9
  const oracleClientCache_1 = require("../oracles/oracleClientCache");
10
10
  const quoteAssetOracleClient_1 = require("../oracles/quoteAssetOracleClient");
11
11
  class WebSocketClearingHouseAccountSubscriber {
12
- constructor(program, marketIndexes, bankIndexes, oracleInfos) {
12
+ constructor(program, perpMarketIndexes, spotMarketIndexes, oracleInfos) {
13
13
  this.oracleClientCache = new oracleClientCache_1.OracleClientCache();
14
- this.marketAccountSubscribers = new Map();
15
- this.bankAccountSubscribers = new Map();
14
+ this.perpMarketAccountSubscribers = new Map();
15
+ this.spotMarketAccountSubscribers = new Map();
16
16
  this.oracleSubscribers = new Map();
17
17
  this.isSubscribing = false;
18
18
  this.isSubscribed = false;
19
19
  this.program = program;
20
20
  this.eventEmitter = new events_1.EventEmitter();
21
- this.marketIndexes = marketIndexes;
22
- this.bankIndexes = bankIndexes;
21
+ this.perpMarketIndexes = perpMarketIndexes;
22
+ this.spotMarketIndexes = spotMarketIndexes;
23
23
  this.oracleInfos = oracleInfos;
24
24
  }
25
25
  async subscribe() {
@@ -42,8 +42,8 @@ class WebSocketClearingHouseAccountSubscriber {
42
42
  });
43
43
  // subscribe to market accounts
44
44
  await this.subscribeToMarketAccounts();
45
- // subscribe to bank accounts
46
- await this.subscribeToBankAccounts();
45
+ // subscribe to spot market accounts
46
+ await this.subscribeToSpotMarketAccounts();
47
47
  // subscribe to oracles
48
48
  await this.subscribeToOracles();
49
49
  this.eventEmitter.emit('update');
@@ -53,35 +53,35 @@ class WebSocketClearingHouseAccountSubscriber {
53
53
  return true;
54
54
  }
55
55
  async subscribeToMarketAccounts() {
56
- for (const marketIndex of this.marketIndexes) {
56
+ for (const marketIndex of this.perpMarketIndexes) {
57
57
  await this.subscribeToMarketAccount(marketIndex);
58
58
  }
59
59
  return true;
60
60
  }
61
61
  async subscribeToMarketAccount(marketIndex) {
62
62
  const marketPublicKey = await (0, pda_1.getMarketPublicKey)(this.program.programId, marketIndex);
63
- const accountSubscriber = new webSocketAccountSubscriber_1.WebSocketAccountSubscriber('market', this.program, marketPublicKey);
63
+ const accountSubscriber = new webSocketAccountSubscriber_1.WebSocketAccountSubscriber('perpMarket', this.program, marketPublicKey);
64
64
  await accountSubscriber.subscribe((data) => {
65
- this.eventEmitter.emit('marketAccountUpdate', data);
65
+ this.eventEmitter.emit('perpMarketAccountUpdate', data);
66
66
  this.eventEmitter.emit('update');
67
67
  });
68
- this.marketAccountSubscribers.set(marketIndex.toNumber(), accountSubscriber);
68
+ this.perpMarketAccountSubscribers.set(marketIndex, accountSubscriber);
69
69
  return true;
70
70
  }
71
- async subscribeToBankAccounts() {
72
- for (const bankIndex of this.bankIndexes) {
73
- await this.subscribeToBankAccount(bankIndex);
71
+ async subscribeToSpotMarketAccounts() {
72
+ for (const marketIndex of this.spotMarketIndexes) {
73
+ await this.subscribeToSpotMarketAccount(marketIndex);
74
74
  }
75
75
  return true;
76
76
  }
77
- async subscribeToBankAccount(bankIndex) {
78
- const bankPublicKey = await (0, pda_1.getBankPublicKey)(this.program.programId, bankIndex);
79
- const accountSubscriber = new webSocketAccountSubscriber_1.WebSocketAccountSubscriber('bank', this.program, bankPublicKey);
77
+ async subscribeToSpotMarketAccount(marketIndex) {
78
+ const marketPublicKey = await (0, pda_1.getSpotMarketPublicKey)(this.program.programId, marketIndex);
79
+ const accountSubscriber = new webSocketAccountSubscriber_1.WebSocketAccountSubscriber('spotMarket', this.program, marketPublicKey);
80
80
  await accountSubscriber.subscribe((data) => {
81
- this.eventEmitter.emit('bankAccountUpdate', data);
81
+ this.eventEmitter.emit('spotMarketAccountUpdate', data);
82
82
  this.eventEmitter.emit('update');
83
83
  });
84
- this.bankAccountSubscribers.set(bankIndex.toNumber(), accountSubscriber);
84
+ this.spotMarketAccountSubscribers.set(marketIndex, accountSubscriber);
85
85
  return true;
86
86
  }
87
87
  async subscribeToOracles() {
@@ -105,12 +105,12 @@ class WebSocketClearingHouseAccountSubscriber {
105
105
  return true;
106
106
  }
107
107
  async unsubscribeFromMarketAccounts() {
108
- for (const accountSubscriber of this.marketAccountSubscribers.values()) {
108
+ for (const accountSubscriber of this.perpMarketAccountSubscribers.values()) {
109
109
  await accountSubscriber.unsubscribe();
110
110
  }
111
111
  }
112
- async unsubscribeFromBankAccounts() {
113
- for (const accountSubscriber of this.bankAccountSubscribers.values()) {
112
+ async unsubscribeFromSpotMarketAccounts() {
113
+ for (const accountSubscriber of this.spotMarketAccountSubscribers.values()) {
114
114
  await accountSubscriber.unsubscribe();
115
115
  }
116
116
  }
@@ -124,8 +124,8 @@ class WebSocketClearingHouseAccountSubscriber {
124
124
  return;
125
125
  }
126
126
  const promises = [this.stateAccountSubscriber.fetch()]
127
- .concat(Array.from(this.marketAccountSubscribers.values()).map((subscriber) => subscriber.fetch()))
128
- .concat(Array.from(this.bankAccountSubscribers.values()).map((subscriber) => subscriber.fetch()));
127
+ .concat(Array.from(this.perpMarketAccountSubscribers.values()).map((subscriber) => subscriber.fetch()))
128
+ .concat(Array.from(this.spotMarketAccountSubscribers.values()).map((subscriber) => subscriber.fetch()));
129
129
  await Promise.all(promises);
130
130
  }
131
131
  async unsubscribe() {
@@ -134,18 +134,18 @@ class WebSocketClearingHouseAccountSubscriber {
134
134
  }
135
135
  await this.stateAccountSubscriber.unsubscribe();
136
136
  await this.unsubscribeFromMarketAccounts();
137
- await this.unsubscribeFromBankAccounts();
137
+ await this.unsubscribeFromSpotMarketAccounts();
138
138
  await this.unsubscribeFromOracles();
139
139
  this.isSubscribed = false;
140
140
  }
141
- async addBank(bankIndex) {
142
- if (this.bankAccountSubscribers.has(bankIndex.toNumber())) {
141
+ async addSpotMarket(marketIndex) {
142
+ if (this.spotMarketAccountSubscribers.has(marketIndex)) {
143
143
  return true;
144
144
  }
145
- return this.subscribeToBankAccount(bankIndex);
145
+ return this.subscribeToSpotMarketAccount(marketIndex);
146
146
  }
147
- async addMarket(marketIndex) {
148
- if (this.marketAccountSubscribers.has(marketIndex.toNumber())) {
147
+ async addPerpMarket(marketIndex) {
148
+ if (this.perpMarketAccountSubscribers.has(marketIndex)) {
149
149
  return true;
150
150
  }
151
151
  return this.subscribeToMarketAccount(marketIndex);
@@ -170,15 +170,17 @@ class WebSocketClearingHouseAccountSubscriber {
170
170
  }
171
171
  getMarketAccountAndSlot(marketIndex) {
172
172
  this.assertIsSubscribed();
173
- return this.marketAccountSubscribers.get(marketIndex.toNumber())
174
- .dataAndSlot;
173
+ return this.perpMarketAccountSubscribers.get(marketIndex).dataAndSlot;
175
174
  }
176
175
  getMarketAccountsAndSlots() {
177
- return Array.from(this.marketAccountSubscribers.values()).map((subscriber) => subscriber.dataAndSlot);
176
+ return Array.from(this.perpMarketAccountSubscribers.values()).map((subscriber) => subscriber.dataAndSlot);
178
177
  }
179
- getBankAccountAndSlot(bankIndex) {
178
+ getSpotMarketAccountAndSlot(marketIndex) {
180
179
  this.assertIsSubscribed();
181
- return this.bankAccountSubscribers.get(bankIndex.toNumber()).dataAndSlot;
180
+ return this.spotMarketAccountSubscribers.get(marketIndex).dataAndSlot;
181
+ }
182
+ getSpotMarketAccountsAndSlots() {
183
+ return Array.from(this.spotMarketAccountSubscribers.values()).map((subscriber) => subscriber.dataAndSlot);
182
184
  }
183
185
  getOraclePriceDataAndSlot(oraclePublicKey) {
184
186
  this.assertIsSubscribed();
@@ -0,0 +1,20 @@
1
+ /// <reference types="node" />
2
+ import { DataAndSlot, AccountSubscriber, UserStatsAccountSubscriber, UserStatsAccountEvents } from './types';
3
+ import { Program } from '@project-serum/anchor';
4
+ import StrictEventEmitter from 'strict-event-emitter-types';
5
+ import { EventEmitter } from 'events';
6
+ import { PublicKey } from '@solana/web3.js';
7
+ import { UserStatsAccount } from '../types';
8
+ export declare class WebSocketUserStatsAccountSubscriber implements UserStatsAccountSubscriber {
9
+ isSubscribed: boolean;
10
+ program: Program;
11
+ eventEmitter: StrictEventEmitter<EventEmitter, UserStatsAccountEvents>;
12
+ userStatsAccountPublicKey: PublicKey;
13
+ userStatsAccountSubscriber: AccountSubscriber<UserStatsAccount>;
14
+ constructor(program: Program, userStatsAccountPublicKey: PublicKey);
15
+ subscribe(): Promise<boolean>;
16
+ fetch(): Promise<void>;
17
+ unsubscribe(): Promise<void>;
18
+ assertIsSubscribed(): void;
19
+ getUserStatsAccountAndSlot(): DataAndSlot<UserStatsAccount>;
20
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebSocketUserStatsAccountSubscriber = void 0;
4
+ const types_1 = require("./types");
5
+ const events_1 = require("events");
6
+ const webSocketAccountSubscriber_1 = require("./webSocketAccountSubscriber");
7
+ class WebSocketUserStatsAccountSubscriber {
8
+ constructor(program, userStatsAccountPublicKey) {
9
+ this.isSubscribed = false;
10
+ this.program = program;
11
+ this.userStatsAccountPublicKey = userStatsAccountPublicKey;
12
+ this.eventEmitter = new events_1.EventEmitter();
13
+ }
14
+ async subscribe() {
15
+ if (this.isSubscribed) {
16
+ return true;
17
+ }
18
+ this.userStatsAccountSubscriber = new webSocketAccountSubscriber_1.WebSocketAccountSubscriber('userStats', this.program, this.userStatsAccountPublicKey);
19
+ await this.userStatsAccountSubscriber.subscribe((data) => {
20
+ this.eventEmitter.emit('userStatsAccountUpdate', data);
21
+ this.eventEmitter.emit('update');
22
+ });
23
+ this.eventEmitter.emit('update');
24
+ this.isSubscribed = true;
25
+ return true;
26
+ }
27
+ async fetch() {
28
+ await Promise.all([this.userStatsAccountSubscriber.fetch()]);
29
+ }
30
+ async unsubscribe() {
31
+ if (!this.isSubscribed) {
32
+ return;
33
+ }
34
+ await Promise.all([this.userStatsAccountSubscriber.unsubscribe()]);
35
+ this.isSubscribed = false;
36
+ }
37
+ assertIsSubscribed() {
38
+ if (!this.isSubscribed) {
39
+ throw new types_1.NotSubscribedError('You must call `subscribe` before using this function');
40
+ }
41
+ }
42
+ getUserStatsAccountAndSlot() {
43
+ this.assertIsSubscribed();
44
+ return this.userStatsAccountSubscriber.dataAndSlot;
45
+ }
46
+ }
47
+ exports.WebSocketUserStatsAccountSubscriber = WebSocketUserStatsAccountSubscriber;
@@ -1,4 +1,2 @@
1
- /// <reference types="bn.js" />
2
1
  import { PublicKey } from '@solana/web3.js';
3
- import { BN } from '@project-serum/anchor';
4
- export declare function getMarketAddress(programId: PublicKey, marketIndex: BN): Promise<PublicKey>;
2
+ export declare function getMarketAddress(programId: PublicKey, marketIndex: number): Promise<PublicKey>;
@@ -6,7 +6,13 @@ export declare function getClearingHouseStateAccountPublicKey(programId: PublicK
6
6
  export declare function getUserAccountPublicKeyAndNonce(programId: PublicKey, authority: PublicKey, userId?: number): Promise<[PublicKey, number]>;
7
7
  export declare function getUserAccountPublicKey(programId: PublicKey, authority: PublicKey, userId?: number): Promise<PublicKey>;
8
8
  export declare function getUserAccountPublicKeySync(programId: PublicKey, authority: PublicKey, userId?: number): PublicKey;
9
- export declare function getMarketPublicKey(programId: PublicKey, marketIndex: BN): Promise<PublicKey>;
10
- export declare function getBankPublicKey(programId: PublicKey, bankIndex: BN): Promise<PublicKey>;
11
- export declare function getBankVaultPublicKey(programId: PublicKey, bankIndex: BN): Promise<PublicKey>;
12
- export declare function getBankVaultAuthorityPublicKey(programId: PublicKey, bankIndex: BN): Promise<PublicKey>;
9
+ export declare function getUserStatsAccountPublicKey(programId: PublicKey, authority: PublicKey): PublicKey;
10
+ export declare function getMarketPublicKey(programId: PublicKey, marketIndex: number): Promise<PublicKey>;
11
+ export declare function getSpotMarketPublicKey(programId: PublicKey, marketIndex: number): Promise<PublicKey>;
12
+ export declare function getSpotMarketVaultPublicKey(programId: PublicKey, marketIndex: number): Promise<PublicKey>;
13
+ export declare function getInsuranceFundVaultPublicKey(programId: PublicKey, marketIndex: number): Promise<PublicKey>;
14
+ export declare function getInsuranceFundStakeAccountPublicKey(programId: PublicKey, authority: PublicKey, marketIndex: number): PublicKey;
15
+ export declare function getClearingHouseSignerPublicKey(programId: PublicKey): PublicKey;
16
+ export declare function getSerumOpenOrdersPublicKey(programId: PublicKey, market: PublicKey): PublicKey;
17
+ export declare function getSerumSignerPublicKey(programId: PublicKey, market: PublicKey, nonce: BN): PublicKey;
18
+ export declare function getSerumFulfillmentConfigPublicKey(programId: PublicKey, market: PublicKey): PublicKey;
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.getBankVaultAuthorityPublicKey = exports.getBankVaultPublicKey = exports.getBankPublicKey = exports.getMarketPublicKey = exports.getUserAccountPublicKeySync = exports.getUserAccountPublicKey = exports.getUserAccountPublicKeyAndNonce = exports.getClearingHouseStateAccountPublicKey = exports.getClearingHouseStateAccountPublicKeyAndNonce = void 0;
26
+ exports.getSerumFulfillmentConfigPublicKey = exports.getSerumSignerPublicKey = exports.getSerumOpenOrdersPublicKey = exports.getClearingHouseSignerPublicKey = exports.getInsuranceFundStakeAccountPublicKey = exports.getInsuranceFundVaultPublicKey = exports.getSpotMarketVaultPublicKey = exports.getSpotMarketPublicKey = exports.getMarketPublicKey = exports.getUserStatsAccountPublicKey = exports.getUserAccountPublicKeySync = exports.getUserAccountPublicKey = exports.getUserAccountPublicKeyAndNonce = exports.getClearingHouseStateAccountPublicKey = exports.getClearingHouseStateAccountPublicKeyAndNonce = void 0;
27
27
  const anchor = __importStar(require("@project-serum/anchor"));
28
28
  async function getClearingHouseStateAccountPublicKeyAndNonce(programId) {
29
29
  return anchor.web3.PublicKey.findProgramAddress([Buffer.from(anchor.utils.bytes.utf8.encode('clearing_house'))], programId);
@@ -53,31 +53,68 @@ function getUserAccountPublicKeySync(programId, authority, userId = 0) {
53
53
  ], programId)[0];
54
54
  }
55
55
  exports.getUserAccountPublicKeySync = getUserAccountPublicKeySync;
56
+ function getUserStatsAccountPublicKey(programId, authority) {
57
+ return anchor.web3.PublicKey.findProgramAddressSync([
58
+ Buffer.from(anchor.utils.bytes.utf8.encode('user_stats')),
59
+ authority.toBuffer(),
60
+ ], programId)[0];
61
+ }
62
+ exports.getUserStatsAccountPublicKey = getUserStatsAccountPublicKey;
56
63
  async function getMarketPublicKey(programId, marketIndex) {
57
64
  return (await anchor.web3.PublicKey.findProgramAddress([
58
65
  Buffer.from(anchor.utils.bytes.utf8.encode('market')),
59
- marketIndex.toArrayLike(Buffer, 'le', 8),
66
+ new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
60
67
  ], programId))[0];
61
68
  }
62
69
  exports.getMarketPublicKey = getMarketPublicKey;
63
- async function getBankPublicKey(programId, bankIndex) {
70
+ async function getSpotMarketPublicKey(programId, marketIndex) {
64
71
  return (await anchor.web3.PublicKey.findProgramAddress([
65
- Buffer.from(anchor.utils.bytes.utf8.encode('bank')),
66
- bankIndex.toArrayLike(Buffer, 'le', 8),
72
+ Buffer.from(anchor.utils.bytes.utf8.encode('spot_market')),
73
+ new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
67
74
  ], programId))[0];
68
75
  }
69
- exports.getBankPublicKey = getBankPublicKey;
70
- async function getBankVaultPublicKey(programId, bankIndex) {
76
+ exports.getSpotMarketPublicKey = getSpotMarketPublicKey;
77
+ async function getSpotMarketVaultPublicKey(programId, marketIndex) {
71
78
  return (await anchor.web3.PublicKey.findProgramAddress([
72
- Buffer.from(anchor.utils.bytes.utf8.encode('bank_vault')),
73
- bankIndex.toArrayLike(Buffer, 'le', 8),
79
+ Buffer.from(anchor.utils.bytes.utf8.encode('spot_market_vault')),
80
+ new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
74
81
  ], programId))[0];
75
82
  }
76
- exports.getBankVaultPublicKey = getBankVaultPublicKey;
77
- async function getBankVaultAuthorityPublicKey(programId, bankIndex) {
83
+ exports.getSpotMarketVaultPublicKey = getSpotMarketVaultPublicKey;
84
+ async function getInsuranceFundVaultPublicKey(programId, marketIndex) {
78
85
  return (await anchor.web3.PublicKey.findProgramAddress([
79
- Buffer.from(anchor.utils.bytes.utf8.encode('bank_vault_authority')),
80
- bankIndex.toArrayLike(Buffer, 'le', 8),
86
+ Buffer.from(anchor.utils.bytes.utf8.encode('insurance_fund_vault')),
87
+ new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
81
88
  ], programId))[0];
82
89
  }
83
- exports.getBankVaultAuthorityPublicKey = getBankVaultAuthorityPublicKey;
90
+ exports.getInsuranceFundVaultPublicKey = getInsuranceFundVaultPublicKey;
91
+ function getInsuranceFundStakeAccountPublicKey(programId, authority, marketIndex) {
92
+ return anchor.web3.PublicKey.findProgramAddressSync([
93
+ Buffer.from(anchor.utils.bytes.utf8.encode('insurance_fund_stake')),
94
+ authority.toBuffer(),
95
+ new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2),
96
+ ], programId)[0];
97
+ }
98
+ exports.getInsuranceFundStakeAccountPublicKey = getInsuranceFundStakeAccountPublicKey;
99
+ function getClearingHouseSignerPublicKey(programId) {
100
+ return anchor.web3.PublicKey.findProgramAddressSync([Buffer.from(anchor.utils.bytes.utf8.encode('clearing_house_signer'))], programId)[0];
101
+ }
102
+ exports.getClearingHouseSignerPublicKey = getClearingHouseSignerPublicKey;
103
+ function getSerumOpenOrdersPublicKey(programId, market) {
104
+ return anchor.web3.PublicKey.findProgramAddressSync([
105
+ Buffer.from(anchor.utils.bytes.utf8.encode('serum_open_orders')),
106
+ market.toBuffer(),
107
+ ], programId)[0];
108
+ }
109
+ exports.getSerumOpenOrdersPublicKey = getSerumOpenOrdersPublicKey;
110
+ function getSerumSignerPublicKey(programId, market, nonce) {
111
+ return anchor.web3.PublicKey.createProgramAddressSync([market.toBuffer(), nonce.toArrayLike(Buffer, 'le', 8)], programId);
112
+ }
113
+ exports.getSerumSignerPublicKey = getSerumSignerPublicKey;
114
+ function getSerumFulfillmentConfigPublicKey(programId, market) {
115
+ return anchor.web3.PublicKey.findProgramAddressSync([
116
+ Buffer.from(anchor.utils.bytes.utf8.encode('serum_fulfillment_config')),
117
+ market.toBuffer(),
118
+ ], programId)[0];
119
+ }
120
+ exports.getSerumFulfillmentConfigPublicKey = getSerumFulfillmentConfigPublicKey;
package/lib/admin.d.ts CHANGED
@@ -1,42 +1,58 @@
1
1
  /// <reference types="bn.js" />
2
2
  import { PublicKey, TransactionSignature } from '@solana/web3.js';
3
- import { FeeStructure, OracleGuardRails, OracleSource, OrderFillerRewardStructure } from './types';
3
+ import { FeeStructure, OracleGuardRails, OracleSource, ExchangeStatus, MarketStatus, ContractTier, AssetTier } from './types';
4
4
  import { BN } from '@project-serum/anchor';
5
5
  import { ClearingHouse } from './clearingHouse';
6
6
  export declare class Admin extends ClearingHouse {
7
- initialize(usdcMint: PublicKey, adminControlsPrices: boolean): Promise<[TransactionSignature]>;
8
- initializeBank(mint: PublicKey, optimalUtilization: BN, optimalRate: BN, maxRate: BN, oracle: PublicKey, oracleSource: OracleSource, initialAssetWeight: BN, maintenanceAssetWeight: BN, initialLiabilityWeight: BN, maintenanceLiabilityWeight: BN): Promise<TransactionSignature>;
9
- initializeMarket(priceOracle: PublicKey, baseAssetReserve: BN, quoteAssetReserve: BN, periodicity: BN, pegMultiplier?: BN, oracleSource?: OracleSource, marginRatioInitial?: number, marginRatioPartial?: number, marginRatioMaintenance?: number): Promise<TransactionSignature>;
10
- moveAmmPrice(baseAssetReserve: BN, quoteAssetReserve: BN, marketIndex: BN): Promise<TransactionSignature>;
11
- updateK(sqrtK: BN, marketIndex: BN): Promise<TransactionSignature>;
12
- moveAmmToPrice(marketIndex: BN, targetPrice: BN): Promise<TransactionSignature>;
13
- repegAmmCurve(newPeg: BN, marketIndex: BN): Promise<TransactionSignature>;
14
- updateAmmOracleTwap(marketIndex: BN): Promise<TransactionSignature>;
15
- resetAmmOracleTwap(marketIndex: BN): Promise<TransactionSignature>;
16
- withdrawFromInsuranceVault(amount: BN, recipient: PublicKey): Promise<TransactionSignature>;
17
- withdrawFees(marketIndex: BN, amount: BN, recipient: PublicKey): Promise<TransactionSignature>;
18
- withdrawFromInsuranceVaultToMarket(marketIndex: BN, amount: BN): Promise<TransactionSignature>;
7
+ initialize(usdcMint: PublicKey, _adminControlsPrices: boolean): Promise<[TransactionSignature]>;
8
+ initializeSpotMarket(mint: PublicKey, optimalUtilization: number, optimalRate: number, maxRate: number, oracle: PublicKey, oracleSource: OracleSource, initialAssetWeight: BN, maintenanceAssetWeight: BN, initialLiabilityWeight: BN, maintenanceLiabilityWeight: BN, imfFactor?: BN, liquidationFee?: BN, activeStatus?: boolean): Promise<TransactionSignature>;
9
+ initializeSerumFulfillmentConfig(marketIndex: number, serumMarket: PublicKey, serumProgram: PublicKey): Promise<TransactionSignature>;
10
+ initializeMarket(priceOracle: PublicKey, baseAssetReserve: BN, quoteAssetReserve: BN, periodicity: BN, pegMultiplier?: BN, oracleSource?: OracleSource, marginRatioInitial?: number, marginRatioMaintenance?: number, liquidationFee?: BN, activeStatus?: boolean): Promise<TransactionSignature>;
11
+ moveAmmPrice(marketIndex: number, baseAssetReserve: BN, quoteAssetReserve: BN, sqrtK?: BN): Promise<TransactionSignature>;
12
+ updateK(sqrtK: BN, marketIndex: number): Promise<TransactionSignature>;
13
+ updateConcentrationScale(marketIndex: number, concentrationScale: BN): Promise<TransactionSignature>;
14
+ moveAmmToPrice(perpMarketIndex: number, targetPrice: BN): Promise<TransactionSignature>;
15
+ repegAmmCurve(newPeg: BN, marketIndex: number): Promise<TransactionSignature>;
16
+ updateAmmOracleTwap(marketIndex: number): Promise<TransactionSignature>;
17
+ resetAmmOracleTwap(marketIndex: number): Promise<TransactionSignature>;
18
+ depositIntoMarketFeePool(marketIndex: number, amount: BN, sourceVault: PublicKey): Promise<TransactionSignature>;
19
19
  updateAdmin(admin: PublicKey): Promise<TransactionSignature>;
20
- updateCurveUpdateIntensity(marketIndex: BN, curveUpdateIntensity: number): Promise<TransactionSignature>;
21
- updateMarginRatio(marketIndex: BN, marginRatioInitial: number, marginRatioPartial: number, marginRatioMaintenance: number): Promise<TransactionSignature>;
22
- updateMarketBaseSpread(marketIndex: BN, baseSpread: number): Promise<TransactionSignature>;
23
- updateMarketMaxSpread(marketIndex: BN, maxSpread: number): Promise<TransactionSignature>;
20
+ updateCurveUpdateIntensity(marketIndex: number, curveUpdateIntensity: number): Promise<TransactionSignature>;
21
+ updateMarginRatio(marketIndex: number, marginRatioInitial: number, marginRatioMaintenance: number): Promise<TransactionSignature>;
22
+ updateMarketBaseSpread(marketIndex: number, baseSpread: number): Promise<TransactionSignature>;
23
+ updateAmmJitIntensity(marketIndex: number, ammJitIntensity: number): Promise<TransactionSignature>;
24
+ updateMarketMaxSpread(marketIndex: number, maxSpread: number): Promise<TransactionSignature>;
24
25
  updatePartialLiquidationClosePercentage(numerator: BN, denominator: BN): Promise<TransactionSignature>;
25
26
  updatePartialLiquidationPenaltyPercentage(numerator: BN, denominator: BN): Promise<TransactionSignature>;
26
27
  updateFullLiquidationPenaltyPercentage(numerator: BN, denominator: BN): Promise<TransactionSignature>;
27
28
  updatePartialLiquidationShareDenominator(denominator: BN): Promise<TransactionSignature>;
28
29
  updateFullLiquidationShareDenominator(denominator: BN): Promise<TransactionSignature>;
29
- updateOrderFillerRewardStructure(orderFillerRewardStructure: OrderFillerRewardStructure): Promise<TransactionSignature>;
30
- updateFee(fees: FeeStructure): Promise<TransactionSignature>;
30
+ updatePerpFeeStructure(feeStructure: FeeStructure): Promise<TransactionSignature>;
31
+ updateSpotFeeStructure(feeStructure: FeeStructure): Promise<TransactionSignature>;
31
32
  updateOracleGuardRails(oracleGuardRails: OracleGuardRails): Promise<TransactionSignature>;
32
- updateMarketOracle(marketIndex: BN, oracle: PublicKey, oracleSource: OracleSource): Promise<TransactionSignature>;
33
- updateMarketMinimumQuoteAssetTradeSize(marketIndex: BN, minimumTradeSize: BN): Promise<TransactionSignature>;
34
- updateMarketBaseAssetAmountStepSize(marketIndex: BN, stepSize: BN): Promise<TransactionSignature>;
33
+ updateWithdrawGuardThreshold(marketIndex: number, withdrawGuardThreshold: BN): Promise<TransactionSignature>;
34
+ updateSpotMarketIfFactor(marketIndex: number, userIfFactor: BN, totalIfFactor: BN): Promise<TransactionSignature>;
35
+ updateSpotMarketRevenueSettlePeriod(marketIndex: number, revenueSettlePeriod: BN): Promise<TransactionSignature>;
36
+ updateSpotMarketMaxTokenDeposits(marketIndex: number, maxTokenDeposits: BN): Promise<TransactionSignature>;
37
+ updateInsuranceWithdrawEscrowPeriod(marketIndex: number, insuranceWithdrawEscrowPeriod: BN): Promise<TransactionSignature>;
38
+ updateLpCooldownTime(marketIndex: number, cooldownTime: BN): Promise<TransactionSignature>;
39
+ updateMarketOracle(marketIndex: number, oracle: PublicKey, oracleSource: OracleSource): Promise<TransactionSignature>;
40
+ updateMarketMinimumQuoteAssetTradeSize(marketIndex: number, minimumTradeSize: BN): Promise<TransactionSignature>;
41
+ updateMarketBaseAssetAmountStepSize(marketIndex: number, stepSize: BN): Promise<TransactionSignature>;
42
+ updateMarketExpiry(perpMarketIndex: number, expiryTs: BN): Promise<TransactionSignature>;
35
43
  updateWhitelistMint(whitelistMint?: PublicKey): Promise<TransactionSignature>;
36
44
  updateDiscountMint(discountMint: PublicKey): Promise<TransactionSignature>;
37
45
  updateMaxDeposit(maxDeposit: BN): Promise<TransactionSignature>;
38
- updateFundingPaused(fundingPaused: boolean): Promise<TransactionSignature>;
39
- updateExchangePaused(exchangePaused: boolean): Promise<TransactionSignature>;
40
- disableAdminControlsPrices(): Promise<TransactionSignature>;
41
- updateOrderAuctionTime(time: BN | number): Promise<TransactionSignature>;
46
+ updateSpotMarketMarginWeights(spotMarketIndex: number, initialAssetWeight: BN, maintenanceAssetWeight: BN, initialLiabilityWeight: BN, maintenanceLiabilityWeight: BN, imfFactor?: BN): Promise<TransactionSignature>;
47
+ updateSpotMarketAssetTier(spotMarketIndex: number, assetTier: AssetTier): Promise<TransactionSignature>;
48
+ updateSpotMarketStatus(spotMarketIndex: number, marketStatus: MarketStatus): Promise<TransactionSignature>;
49
+ updatePerpMarketStatus(perpMarketIndex: number, marketStatus: MarketStatus): Promise<TransactionSignature>;
50
+ updatePerpMarketContractTier(perpMarketIndex: number, contractTier: ContractTier): Promise<TransactionSignature>;
51
+ updateExchangeStatus(exchangeStatus: ExchangeStatus): Promise<TransactionSignature>;
52
+ updatePerpAuctionDuration(minDuration: BN | number): Promise<TransactionSignature>;
53
+ updateSpotAuctionDuration(defaultAuctionDuration: number): Promise<TransactionSignature>;
54
+ updateMaxBaseAssetAmountRatio(marketIndex: number, maxBaseAssetAmountRatio: number): Promise<TransactionSignature>;
55
+ updateMaxSlippageRatio(marketIndex: number, maxSlippageRatio: number): Promise<TransactionSignature>;
56
+ updateMarketMaxImbalances(marketIndex: number, unrealizedMaxImbalance: BN, maxRevenueWithdrawPerPeriod: BN, quoteMaxInsurance: BN): Promise<TransactionSignature>;
57
+ updateSerumVault(srmVault: PublicKey): Promise<TransactionSignature>;
42
58
  }