@drift-labs/sdk 0.2.0-temp.2 → 2.0.1

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 (278) hide show
  1. package/README.md +27 -29
  2. package/lib/accounts/bulkAccountLoader.d.ts +2 -0
  3. package/lib/accounts/bulkAccountLoader.js +36 -29
  4. package/lib/accounts/bulkUserStatsSubscription.d.ts +7 -0
  5. package/lib/accounts/bulkUserStatsSubscription.js +21 -0
  6. package/lib/accounts/bulkUserSubscription.d.ts +2 -2
  7. package/lib/accounts/bulkUserSubscription.js +0 -1
  8. package/lib/accounts/fetch.d.ts +2 -1
  9. package/lib/accounts/fetch.js +9 -1
  10. package/lib/accounts/{pollingClearingHouseAccountSubscriber.d.ts → pollingDriftClientAccountSubscriber.d.ts} +20 -25
  11. package/lib/accounts/{pollingClearingHouseAccountSubscriber.js → pollingDriftClientAccountSubscriber.js} +45 -49
  12. package/lib/accounts/{pollingOracleSubscriber.d.ts → pollingOracleAccountSubscriber.d.ts} +2 -2
  13. package/lib/accounts/{pollingOracleSubscriber.js → pollingOracleAccountSubscriber.js} +3 -3
  14. package/lib/accounts/pollingUserAccountSubscriber.d.ts +1 -1
  15. package/lib/accounts/pollingUserAccountSubscriber.js +5 -11
  16. package/lib/accounts/pollingUserStatsAccountSubscriber.d.ts +27 -0
  17. package/lib/accounts/pollingUserStatsAccountSubscriber.js +107 -0
  18. package/lib/accounts/types.d.ts +26 -15
  19. package/lib/accounts/webSocketDriftClientAccountSubscriber.d.ts +49 -0
  20. package/lib/accounts/{webSocketClearingHouseAccountSubscriber.js → webSocketDriftClientAccountSubscriber.js} +47 -45
  21. package/lib/accounts/webSocketUserStatsAccountSubsriber.d.ts +20 -0
  22. package/lib/accounts/webSocketUserStatsAccountSubsriber.js +47 -0
  23. package/lib/addresses/marketAddresses.d.ts +1 -3
  24. package/lib/addresses/marketAddresses.js +1 -1
  25. package/lib/addresses/pda.d.ts +15 -9
  26. package/lib/addresses/pda.js +73 -35
  27. package/lib/adminClient.d.ts +65 -0
  28. package/lib/adminClient.js +637 -0
  29. package/lib/config.d.ts +10 -10
  30. package/lib/config.js +26 -22
  31. package/lib/constants/numericConstants.d.ts +29 -12
  32. package/lib/constants/numericConstants.js +40 -21
  33. package/lib/constants/perpMarkets.d.ts +18 -0
  34. package/lib/constants/{markets.js → perpMarkets.js} +20 -9
  35. package/lib/constants/spotMarkets.d.ts +19 -0
  36. package/lib/constants/spotMarkets.js +63 -0
  37. package/lib/dlob/DLOB.d.ts +82 -0
  38. package/lib/dlob/DLOB.js +694 -0
  39. package/lib/dlob/DLOBNode.d.ts +54 -0
  40. package/lib/dlob/DLOBNode.js +77 -0
  41. package/lib/dlob/NodeList.d.ts +27 -0
  42. package/lib/dlob/NodeList.js +144 -0
  43. package/lib/driftClient.d.ts +234 -0
  44. package/lib/driftClient.js +2108 -0
  45. package/lib/{clearingHouseConfig.d.ts → driftClientConfig.d.ts} +9 -9
  46. package/lib/{clearingHouseConfig.js → driftClientConfig.js} +0 -0
  47. package/lib/events/eventList.d.ts +0 -1
  48. package/lib/events/eventList.js +0 -7
  49. package/lib/events/eventSubscriber.d.ts +5 -2
  50. package/lib/events/eventSubscriber.js +25 -11
  51. package/lib/events/fetchLogs.d.ts +13 -2
  52. package/lib/events/fetchLogs.js +45 -14
  53. package/lib/events/pollingLogProvider.d.ts +2 -1
  54. package/lib/events/pollingLogProvider.js +7 -3
  55. package/lib/events/sort.js +8 -11
  56. package/lib/events/txEventCache.d.ts +0 -2
  57. package/lib/events/txEventCache.js +0 -14
  58. package/lib/events/types.d.ts +11 -3
  59. package/lib/events/types.js +8 -0
  60. package/lib/events/webSocketLogProvider.js +1 -1
  61. package/lib/examples/makeTradeExample.js +30 -18
  62. package/lib/factory/bigNum.d.ts +8 -4
  63. package/lib/factory/bigNum.js +109 -19
  64. package/lib/idl/drift.json +8392 -0
  65. package/lib/index.d.ts +29 -12
  66. package/lib/index.js +29 -12
  67. package/lib/math/amm.d.ts +9 -6
  68. package/lib/math/amm.js +91 -38
  69. package/lib/math/conversion.js +1 -1
  70. package/lib/math/exchangeStatus.d.ts +4 -0
  71. package/lib/math/exchangeStatus.js +18 -0
  72. package/lib/math/funding.d.ts +6 -6
  73. package/lib/math/funding.js +23 -21
  74. package/lib/math/insurance.d.ts +4 -0
  75. package/lib/math/insurance.js +27 -0
  76. package/lib/math/margin.d.ts +11 -0
  77. package/lib/math/margin.js +82 -0
  78. package/lib/math/market.d.ts +14 -9
  79. package/lib/math/market.js +70 -10
  80. package/lib/math/oracles.d.ts +4 -0
  81. package/lib/math/oracles.js +36 -8
  82. package/lib/math/orders.d.ts +16 -6
  83. package/lib/math/orders.js +97 -17
  84. package/lib/math/position.d.ts +27 -13
  85. package/lib/math/position.js +91 -37
  86. package/lib/math/repeg.js +17 -8
  87. package/lib/math/spotBalance.d.ts +22 -0
  88. package/lib/math/spotBalance.js +192 -0
  89. package/lib/math/spotMarket.d.ts +4 -0
  90. package/lib/math/spotMarket.js +8 -0
  91. package/lib/math/spotPosition.d.ts +6 -0
  92. package/lib/math/spotPosition.js +23 -0
  93. package/lib/math/trade.d.ts +10 -10
  94. package/lib/math/trade.js +27 -31
  95. package/lib/oracles/pythClient.js +1 -1
  96. package/lib/oracles/quoteAssetOracleClient.js +1 -1
  97. package/lib/oracles/switchboardClient.js +1 -1
  98. package/lib/orderParams.d.ts +4 -4
  99. package/lib/orderParams.js +12 -4
  100. package/lib/serum/serumFulfillmentConfigMap.d.ts +10 -0
  101. package/lib/serum/serumFulfillmentConfigMap.js +17 -0
  102. package/lib/serum/serumSubscriber.d.ts +27 -0
  103. package/lib/serum/serumSubscriber.js +56 -0
  104. package/lib/serum/types.d.ts +11 -0
  105. package/{src/oracles → lib/serum}/types.js +0 -0
  106. package/lib/tokenFaucet.d.ts +1 -0
  107. package/lib/tokenFaucet.js +23 -12
  108. package/lib/tx/retryTxSender.d.ts +1 -1
  109. package/lib/tx/retryTxSender.js +13 -4
  110. package/lib/tx/types.d.ts +1 -1
  111. package/lib/types.d.ts +631 -222
  112. package/lib/types.js +137 -24
  113. package/lib/user.d.ts +228 -0
  114. package/lib/user.js +959 -0
  115. package/lib/userConfig.d.ts +14 -0
  116. package/lib/{clearingHouseUserConfig.js → userConfig.js} +0 -0
  117. package/lib/userMap/userMap.d.ts +41 -0
  118. package/lib/userMap/userMap.js +85 -0
  119. package/lib/userMap/userStatsMap.d.ts +19 -0
  120. package/lib/userMap/userStatsMap.js +68 -0
  121. package/lib/userName.d.ts +1 -0
  122. package/lib/userName.js +3 -2
  123. package/lib/userStats.d.ts +18 -0
  124. package/lib/userStats.js +49 -0
  125. package/lib/userStatsConfig.d.ts +14 -0
  126. package/{src/clearingHouseConfig.js → lib/userStatsConfig.js} +0 -0
  127. package/lib/util/getTokenAddress.d.ts +2 -0
  128. package/lib/util/getTokenAddress.js +9 -0
  129. package/package.json +12 -5
  130. package/src/accounts/bulkAccountLoader.ts +44 -34
  131. package/src/accounts/bulkUserStatsSubscription.ts +33 -0
  132. package/src/accounts/bulkUserSubscription.ts +2 -3
  133. package/src/accounts/fetch.ts +27 -2
  134. package/src/accounts/{pollingClearingHouseAccountSubscriber.ts → pollingDriftClientAccountSubscriber.ts} +65 -75
  135. package/src/accounts/{pollingOracleSubscriber.ts → pollingOracleAccountSubscriber.ts} +2 -2
  136. package/src/accounts/pollingUserAccountSubscriber.ts +5 -12
  137. package/src/accounts/pollingUserStatsAccountSubscriber.ts +166 -0
  138. package/src/accounts/types.ts +35 -15
  139. package/src/accounts/{webSocketClearingHouseAccountSubscriber.ts → webSocketDriftClientAccountSubscriber.ts} +78 -73
  140. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +80 -0
  141. package/src/addresses/marketAddresses.ts +3 -4
  142. package/src/addresses/pda.ts +105 -33
  143. package/src/adminClient.ts +1207 -0
  144. package/src/config.ts +41 -34
  145. package/src/constants/numericConstants.ts +59 -26
  146. package/src/constants/{markets.ts → perpMarkets.ts} +22 -11
  147. package/src/constants/spotMarkets.ts +83 -0
  148. package/src/dlob/DLOB.ts +1120 -0
  149. package/src/dlob/DLOBNode.ts +155 -0
  150. package/src/dlob/NodeList.ts +195 -0
  151. package/src/driftClient.ts +3594 -0
  152. package/src/{clearingHouseConfig.ts → driftClientConfig.ts} +9 -8
  153. package/src/events/eventList.ts +1 -8
  154. package/src/events/eventSubscriber.ts +36 -14
  155. package/src/events/fetchLogs.ts +60 -15
  156. package/src/events/pollingLogProvider.ts +11 -3
  157. package/src/events/sort.ts +11 -15
  158. package/src/events/txEventCache.ts +0 -16
  159. package/src/events/types.ts +27 -2
  160. package/src/events/webSocketLogProvider.ts +1 -1
  161. package/src/examples/makeTradeExample.js +152 -75
  162. package/src/examples/makeTradeExample.ts +44 -28
  163. package/src/factory/bigNum.ts +150 -22
  164. package/src/idl/drift.json +8392 -0
  165. package/src/idl/pyth.json +98 -2
  166. package/src/index.ts +29 -12
  167. package/src/math/amm.ts +161 -48
  168. package/src/math/conversion.ts +2 -2
  169. package/src/math/exchangeStatus.ts +31 -0
  170. package/src/math/funding.ts +41 -31
  171. package/src/math/insurance.ts +35 -0
  172. package/src/math/margin.ts +133 -0
  173. package/src/math/market.ts +143 -14
  174. package/src/math/oracles.ts +63 -9
  175. package/src/math/orders.ts +168 -26
  176. package/src/math/position.ts +133 -59
  177. package/src/math/repeg.ts +19 -9
  178. package/src/math/spotBalance.ts +319 -0
  179. package/src/math/spotMarket.ts +9 -0
  180. package/src/math/spotPosition.ts +47 -0
  181. package/src/math/trade.ts +33 -37
  182. package/src/oracles/pythClient.ts +2 -2
  183. package/src/oracles/quoteAssetOracleClient.ts +2 -2
  184. package/src/oracles/switchboardClient.ts +2 -2
  185. package/src/orderParams.ts +16 -8
  186. package/src/serum/serumFulfillmentConfigMap.ts +26 -0
  187. package/src/serum/serumSubscriber.ts +99 -0
  188. package/src/serum/types.ts +13 -0
  189. package/src/tokenFaucet.ts +38 -15
  190. package/src/tx/retryTxSender.ts +16 -5
  191. package/src/tx/types.ts +2 -1
  192. package/src/types.ts +594 -195
  193. package/src/user.ts +1599 -0
  194. package/src/{clearingHouseUserConfig.ts → userConfig.ts} +5 -5
  195. package/src/userMap/userMap.ts +124 -0
  196. package/src/userMap/userStatsMap.ts +108 -0
  197. package/src/userName.ts +2 -1
  198. package/src/userStats.ts +75 -0
  199. package/src/userStatsConfig.ts +18 -0
  200. package/src/util/getTokenAddress.ts +18 -0
  201. package/tests/bn/test.ts +46 -11
  202. package/tests/dlob/helpers.ts +619 -0
  203. package/tests/dlob/test.ts +4586 -0
  204. package/lib/accounts/webSocketClearingHouseAccountSubscriber.d.ts +0 -49
  205. package/lib/admin.d.ts +0 -44
  206. package/lib/admin.js +0 -438
  207. package/lib/clearingHouse.d.ts +0 -146
  208. package/lib/clearingHouse.js +0 -1154
  209. package/lib/clearingHouseUser.d.ts +0 -187
  210. package/lib/clearingHouseUser.js +0 -634
  211. package/lib/clearingHouseUserConfig.d.ts +0 -14
  212. package/lib/constants/banks.d.ts +0 -16
  213. package/lib/constants/banks.js +0 -41
  214. package/lib/constants/markets.d.ts +0 -19
  215. package/lib/idl/clearing_house.json +0 -4464
  216. package/lib/math/bankBalance.d.ts +0 -9
  217. package/lib/math/bankBalance.js +0 -75
  218. package/lib/math/state.d.ts +0 -8
  219. package/lib/math/state.js +0 -15
  220. package/lib/orders.d.ts +0 -8
  221. package/lib/orders.js +0 -134
  222. package/src/accounts/bulkAccountLoader.js +0 -197
  223. package/src/accounts/bulkUserSubscription.js +0 -33
  224. package/src/accounts/pollingClearingHouseAccountSubscriber.js +0 -311
  225. package/src/accounts/pollingOracleSubscriber.js +0 -93
  226. package/src/accounts/pollingTokenAccountSubscriber.js +0 -90
  227. package/src/accounts/pollingUserAccountSubscriber.js +0 -132
  228. package/src/accounts/types.js +0 -10
  229. package/src/accounts/utils.js +0 -7
  230. package/src/accounts/webSocketAccountSubscriber.js +0 -93
  231. package/src/accounts/webSocketClearingHouseAccountSubscriber.js +0 -233
  232. package/src/accounts/webSocketUserAccountSubscriber.js +0 -62
  233. package/src/addresses/marketAddresses.js +0 -26
  234. package/src/admin.js +0 -517
  235. package/src/admin.ts +0 -730
  236. package/src/clearingHouse.ts +0 -1828
  237. package/src/clearingHouseUser.ts +0 -978
  238. package/src/clearingHouseUserConfig.js +0 -2
  239. package/src/config.js +0 -67
  240. package/src/constants/banks.js +0 -42
  241. package/src/constants/banks.ts +0 -50
  242. package/src/constants/markets.js +0 -42
  243. package/src/constants/numericConstants.js +0 -41
  244. package/src/events/eventSubscriber.js +0 -139
  245. package/src/events/fetchLogs.js +0 -50
  246. package/src/events/pollingLogProvider.js +0 -64
  247. package/src/events/sort.js +0 -44
  248. package/src/events/txEventCache.js +0 -71
  249. package/src/events/types.js +0 -20
  250. package/src/events/webSocketLogProvider.js +0 -41
  251. package/src/factory/bigNum.js +0 -390
  252. package/src/factory/oracleClient.js +0 -20
  253. package/src/idl/clearing_house.json +0 -4464
  254. package/src/index.js +0 -69
  255. package/src/math/amm.js +0 -369
  256. package/src/math/auction.js +0 -42
  257. package/src/math/bankBalance.ts +0 -112
  258. package/src/math/conversion.js +0 -11
  259. package/src/math/funding.js +0 -248
  260. package/src/math/oracles.js +0 -26
  261. package/src/math/repeg.js +0 -128
  262. package/src/math/state.js +0 -15
  263. package/src/math/state.ts +0 -14
  264. package/src/math/trade.js +0 -253
  265. package/src/math/utils.js +0 -26
  266. package/src/math/utils.js.map +0 -1
  267. package/src/mockUSDCFaucet.js +0 -280
  268. package/src/oracles/oracleClientCache.js +0 -19
  269. package/src/oracles/pythClient.js +0 -46
  270. package/src/oracles/quoteAssetOracleClient.js +0 -32
  271. package/src/oracles/switchboardClient.js +0 -69
  272. package/src/orderParams.js +0 -20
  273. package/src/orders.ts +0 -245
  274. package/src/slot/SlotSubscriber.js +0 -39
  275. package/src/tokenFaucet.js +0 -189
  276. package/src/types.js +0 -125
  277. package/src/userName.js +0 -20
  278. package/src/wallet.js +0 -35
package/src/config.ts CHANGED
@@ -1,25 +1,26 @@
1
1
  import {
2
- DevnetMarkets,
3
- MainnetMarkets,
4
- MarketConfig,
5
- Markets,
6
- } from './constants/markets';
2
+ DevnetPerpMarkets,
3
+ MainnetPerpMarkets,
4
+ PerpMarketConfig,
5
+ PerpMarkets,
6
+ } from './constants/perpMarkets';
7
7
  import {
8
- BankConfig,
9
- Banks,
10
- DevnetBanks,
11
- MainnetBanks,
12
- } from './constants/banks';
13
- import { BN } from '@project-serum/anchor';
8
+ SpotMarketConfig,
9
+ SpotMarkets,
10
+ DevnetSpotMarkets,
11
+ MainnetSpotMarkets,
12
+ } from './constants/spotMarkets';
14
13
  import { OracleInfo } from './oracles/types';
15
14
 
16
15
  type DriftConfig = {
17
16
  ENV: DriftEnv;
18
17
  PYTH_ORACLE_MAPPING_ADDRESS: string;
19
- CLEARING_HOUSE_PROGRAM_ID: string;
18
+ DRIFT_PROGRAM_ID: string;
20
19
  USDC_MINT_ADDRESS: string;
21
- MARKETS: MarketConfig[];
22
- BANKS: BankConfig[];
20
+ SERUM_V3: string;
21
+ V2_ALPHA_TICKET_MINT_ADDRESS: string;
22
+ PERP_MARKETS: PerpMarketConfig[];
23
+ SPOT_MARKETS: SpotMarketConfig[];
23
24
  };
24
25
 
25
26
  export type DriftEnv = 'devnet' | 'mainnet-beta';
@@ -28,18 +29,24 @@ export const configs: { [key in DriftEnv]: DriftConfig } = {
28
29
  devnet: {
29
30
  ENV: 'devnet',
30
31
  PYTH_ORACLE_MAPPING_ADDRESS: 'BmA9Z6FjioHJPpjT39QazZyhDRUdZy2ezwx4GiDdE2u2',
31
- CLEARING_HOUSE_PROGRAM_ID: '4oyTJnAQ9FqJj1y9mPytbWsLeeHmBzGYfuFqypwyQvuh',
32
+ DRIFT_PROGRAM_ID: 'dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH',
32
33
  USDC_MINT_ADDRESS: '8zGuJQqwhZafTah7Uc7Z4tXRnguqkn5KLFAP8oV6PHe2',
33
- MARKETS: DevnetMarkets,
34
- BANKS: DevnetBanks,
34
+ SERUM_V3: 'DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY',
35
+ V2_ALPHA_TICKET_MINT_ADDRESS:
36
+ 'DeEiGWfCMP9psnLGkxGrBBMEAW5Jv8bBGMN8DCtFRCyB',
37
+ PERP_MARKETS: DevnetPerpMarkets,
38
+ SPOT_MARKETS: DevnetSpotMarkets,
35
39
  },
36
40
  'mainnet-beta': {
37
41
  ENV: 'mainnet-beta',
38
42
  PYTH_ORACLE_MAPPING_ADDRESS: 'AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J',
39
- CLEARING_HOUSE_PROGRAM_ID: 'dammHkt7jmytvbS3nHTxQNEcP59aE57nxwV21YdqEDN',
43
+ DRIFT_PROGRAM_ID: 'dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH',
40
44
  USDC_MINT_ADDRESS: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
41
- MARKETS: MainnetMarkets,
42
- BANKS: MainnetBanks,
45
+ SERUM_V3: '9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin',
46
+ V2_ALPHA_TICKET_MINT_ADDRESS:
47
+ 'Cmvhycb6LQvvzaShGw4iDHRLzeSSryioAsU98DSSkMNa',
48
+ PERP_MARKETS: MainnetPerpMarkets,
49
+ SPOT_MARKETS: MainnetSpotMarkets,
43
50
  },
44
51
  };
45
52
 
@@ -67,34 +74,34 @@ export const initialize = (props: {
67
74
  return currentConfig;
68
75
  };
69
76
 
70
- export function getMarketsBanksAndOraclesForSubscription(env: DriftEnv): {
71
- marketIndexes: BN[];
72
- bankIndexes: BN[];
77
+ export function getMarketsAndOraclesForSubscription(env: DriftEnv): {
78
+ perpMarketIndexes: number[];
79
+ spotMarketIndexes: number[];
73
80
  oracleInfos: OracleInfo[];
74
81
  } {
75
- const marketIndexes = [];
76
- const bankIndexes = [];
82
+ const perpMarketIndexes = [];
83
+ const spotMarketIndexes = [];
77
84
  const oracleInfos = new Map<string, OracleInfo>();
78
85
 
79
- for (const market of Markets[env]) {
80
- marketIndexes.push(market.marketIndex);
86
+ for (const market of PerpMarkets[env]) {
87
+ perpMarketIndexes.push(market.marketIndex);
81
88
  oracleInfos.set(market.oracle.toString(), {
82
89
  publicKey: market.oracle,
83
90
  source: market.oracleSource,
84
91
  });
85
92
  }
86
93
 
87
- for (const bank of Banks[env]) {
88
- bankIndexes.push(bank.bankIndex);
89
- oracleInfos.set(bank.oracle.toString(), {
90
- publicKey: bank.oracle,
91
- source: bank.oracleSource,
94
+ for (const spotMarket of SpotMarkets[env]) {
95
+ spotMarketIndexes.push(spotMarket.marketIndex);
96
+ oracleInfos.set(spotMarket.oracle.toString(), {
97
+ publicKey: spotMarket.oracle,
98
+ source: spotMarket.oracleSource,
92
99
  });
93
100
  }
94
101
 
95
102
  return {
96
- marketIndexes,
97
- bankIndexes,
103
+ perpMarketIndexes: perpMarketIndexes,
104
+ spotMarketIndexes: spotMarketIndexes,
98
105
  oracleInfos: Array.from(oracleInfos.values()),
99
106
  };
100
107
  }
@@ -1,8 +1,16 @@
1
+ import { LAMPORTS_PER_SOL } from '@solana/web3.js';
1
2
  import { BN } from '../';
2
3
 
3
4
  export const ZERO = new BN(0);
4
5
  export const ONE = new BN(1);
5
6
  export const TWO = new BN(2);
7
+ export const THREE = new BN(3);
8
+ export const FOUR = new BN(4);
9
+ export const FIVE = new BN(5);
10
+ export const SIX = new BN(6);
11
+ export const SEVEN = new BN(7);
12
+ export const EIGHT = new BN(8);
13
+ export const NINE = new BN(9);
6
14
  export const TEN = new BN(10);
7
15
  export const TEN_THOUSAND = new BN(10000);
8
16
  export const BN_MAX = new BN(Number.MAX_SAFE_INTEGER);
@@ -10,30 +18,53 @@ export const TEN_MILLION = TEN_THOUSAND.mul(TEN_THOUSAND);
10
18
 
11
19
  export const MAX_LEVERAGE = new BN(5);
12
20
 
21
+ export const PERCENTAGE_PRECISION_EXP = new BN(6);
22
+ export const PERCENTAGE_PRECISION = new BN(10).pow(PERCENTAGE_PRECISION_EXP);
23
+ export const CONCENTRATION_PRECISION = PERCENTAGE_PRECISION;
24
+
13
25
  export const QUOTE_PRECISION_EXP = new BN(6);
14
- export const FUNDING_PAYMENT_PRECISION_EXP = new BN(4);
15
- export const MARK_PRICE_PRECISION_EXP = new BN(10);
16
- export const FUNDING_RATE_PRECISION_EXP = MARK_PRICE_PRECISION_EXP.mul(
17
- FUNDING_PAYMENT_PRECISION_EXP
18
- );
19
- export const PEG_PRECISION_EXP = new BN(3);
20
- export const AMM_RESERVE_PRECISION_EXP = new BN(13);
21
-
22
- export const BANK_INTEREST_PRECISION = new BN(1000000);
23
- export const BANK_CUMULATIVE_INTEREST_PRECISION = new BN(10000000000);
24
- export const BANK_UTILIZATION_PRECISION = new BN(1000000);
25
- export const BANK_RATE_PRECISION = new BN(1000000);
26
- export const BANK_WEIGHT_PRECISION = new BN(100);
27
- export const BANK_BALANCE_PRECISION_EXP = new BN(6);
28
- export const BANK_BALANCE_PRECISION = new BN(10).pow(
29
- BANK_BALANCE_PRECISION_EXP
26
+ export const FUNDING_RATE_BUFFER_PRECISION_EXP = new BN(3);
27
+ export const PRICE_PRECISION_EXP = new BN(6);
28
+ export const FUNDING_RATE_PRECISION_EXP = PRICE_PRECISION_EXP.add(
29
+ FUNDING_RATE_BUFFER_PRECISION_EXP
30
+ );
31
+ export const PEG_PRECISION_EXP = new BN(6);
32
+ export const AMM_RESERVE_PRECISION_EXP = new BN(9);
33
+
34
+ export const SPOT_MARKET_RATE_PRECISION_EXP = new BN(6);
35
+ export const SPOT_MARKET_RATE_PRECISION = new BN(10).pow(
36
+ SPOT_MARKET_RATE_PRECISION_EXP
37
+ );
38
+
39
+ export const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP = new BN(10);
40
+ export const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION = new BN(10).pow(
41
+ SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP
42
+ );
43
+
44
+ export const SPOT_MARKET_UTILIZATION_PRECISION_EXP = new BN(6);
45
+ export const SPOT_MARKET_UTILIZATION_PRECISION = new BN(10).pow(
46
+ SPOT_MARKET_UTILIZATION_PRECISION_EXP
47
+ );
48
+
49
+ export const SPOT_MARKET_WEIGHT_PRECISION = new BN(10000);
50
+ export const SPOT_MARKET_BALANCE_PRECISION_EXP = new BN(9);
51
+ export const SPOT_MARKET_BALANCE_PRECISION = new BN(10).pow(
52
+ SPOT_MARKET_BALANCE_PRECISION_EXP
53
+ );
54
+ export const SPOT_MARKET_IMF_PRECISION_EXP = new BN(6);
55
+
56
+ export const SPOT_MARKET_IMF_PRECISION = new BN(10).pow(
57
+ SPOT_MARKET_IMF_PRECISION_EXP
30
58
  );
31
59
  export const LIQUIDATION_FEE_PRECISION = new BN(1000000);
32
60
 
33
61
  export const QUOTE_PRECISION = new BN(10).pow(QUOTE_PRECISION_EXP);
34
- export const MARK_PRICE_PRECISION = new BN(10).pow(MARK_PRICE_PRECISION_EXP);
35
- export const FUNDING_PAYMENT_PRECISION = new BN(10).pow(
36
- FUNDING_PAYMENT_PRECISION_EXP
62
+ export const PRICE_PRECISION = new BN(10).pow(PRICE_PRECISION_EXP);
63
+ export const FUNDING_RATE_PRECISION = new BN(10).pow(
64
+ FUNDING_RATE_PRECISION_EXP
65
+ );
66
+ export const FUNDING_RATE_BUFFER_PRECISION = new BN(10).pow(
67
+ FUNDING_RATE_BUFFER_PRECISION_EXP
37
68
  );
38
69
  export const PEG_PRECISION = new BN(10).pow(PEG_PRECISION_EXP);
39
70
 
@@ -43,15 +74,17 @@ export const BASE_PRECISION = AMM_RESERVE_PRECISION;
43
74
  export const BASE_PRECISION_EXP = AMM_RESERVE_PRECISION_EXP;
44
75
 
45
76
  export const AMM_TO_QUOTE_PRECISION_RATIO =
46
- AMM_RESERVE_PRECISION.div(QUOTE_PRECISION); // 10^7
47
- export const PRICE_DIV_PEG = MARK_PRICE_PRECISION.div(PEG_PRECISION); //10^7
48
- export const PRICE_TO_QUOTE_PRECISION =
49
- MARK_PRICE_PRECISION.div(QUOTE_PRECISION);
77
+ AMM_RESERVE_PRECISION.div(QUOTE_PRECISION); // 10^3
78
+ export const PRICE_DIV_PEG = PRICE_PRECISION.div(PEG_PRECISION); //10^1
79
+ export const PRICE_TO_QUOTE_PRECISION = PRICE_PRECISION.div(QUOTE_PRECISION); // 10^1
50
80
  export const AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO =
51
- AMM_RESERVE_PRECISION.mul(PEG_PRECISION).div(QUOTE_PRECISION); // 10^10
81
+ AMM_RESERVE_PRECISION.mul(PEG_PRECISION).div(QUOTE_PRECISION); // 10^9
52
82
  export const MARGIN_PRECISION = TEN_THOUSAND;
53
- export const BID_ASK_SPREAD_PRECISION = new BN(1000000);
83
+ export const BID_ASK_SPREAD_PRECISION = new BN(1000000); // 10^6
54
84
 
55
85
  export const ONE_YEAR = new BN(31536000);
56
86
 
57
- export const QUOTE_ASSET_BANK_INDEX = new BN(0);
87
+ export const QUOTE_SPOT_MARKET_INDEX = 0;
88
+
89
+ export const LAMPORTS_PRECISION = new BN(LAMPORTS_PER_SOL);
90
+ export const LAMPORTS_EXP = new BN(Math.log10(LAMPORTS_PER_SOL));
@@ -1,25 +1,25 @@
1
- import { BN, OracleSource } from '../';
1
+ import { OracleSource } from '../';
2
2
  import { DriftEnv } from '../';
3
3
  import { PublicKey } from '@solana/web3.js';
4
4
 
5
- export type MarketConfig = {
5
+ export type PerpMarketConfig = {
6
6
  fullName?: string;
7
7
  category?: string[];
8
8
  symbol: string;
9
9
  baseAssetSymbol: string;
10
- marketIndex: BN;
10
+ marketIndex: number;
11
11
  launchTs: number;
12
12
  oracle: PublicKey;
13
13
  oracleSource: OracleSource;
14
14
  };
15
15
 
16
- export const DevnetMarkets: MarketConfig[] = [
16
+ export const DevnetPerpMarkets: PerpMarketConfig[] = [
17
17
  {
18
18
  fullName: 'Solana',
19
19
  category: ['L1', 'Infra'],
20
20
  symbol: 'SOL-PERP',
21
21
  baseAssetSymbol: 'SOL',
22
- marketIndex: new BN(0),
22
+ marketIndex: 0,
23
23
  oracle: new PublicKey('J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix'),
24
24
  launchTs: 1655751353000,
25
25
  oracleSource: OracleSource.PYTH,
@@ -29,7 +29,7 @@ export const DevnetMarkets: MarketConfig[] = [
29
29
  category: ['L1', 'Payment'],
30
30
  symbol: 'BTC-PERP',
31
31
  baseAssetSymbol: 'BTC',
32
- marketIndex: new BN(1),
32
+ marketIndex: 1,
33
33
  oracle: new PublicKey('HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J'),
34
34
  launchTs: 1655751353000,
35
35
  oracleSource: OracleSource.PYTH,
@@ -39,16 +39,27 @@ export const DevnetMarkets: MarketConfig[] = [
39
39
  category: ['L1', 'Infra'],
40
40
  symbol: 'ETH-PERP',
41
41
  baseAssetSymbol: 'ETH',
42
- marketIndex: new BN(2),
42
+ marketIndex: 2,
43
43
  oracle: new PublicKey('EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw'),
44
44
  launchTs: 1637691133472,
45
45
  oracleSource: OracleSource.PYTH,
46
46
  },
47
47
  ];
48
48
 
49
- export const MainnetMarkets: MarketConfig[] = [];
49
+ export const MainnetPerpMarkets: PerpMarketConfig[] = [
50
+ {
51
+ fullName: 'Solana',
52
+ category: ['L1', 'Infra'],
53
+ symbol: 'SOL-PERP',
54
+ baseAssetSymbol: 'SOL',
55
+ marketIndex: 0,
56
+ oracle: new PublicKey('H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG'),
57
+ launchTs: 1667560505000,
58
+ oracleSource: OracleSource.PYTH,
59
+ },
60
+ ];
50
61
 
51
- export const Markets: { [key in DriftEnv]: MarketConfig[] } = {
52
- devnet: DevnetMarkets,
53
- 'mainnet-beta': [],
62
+ export const PerpMarkets: { [key in DriftEnv]: PerpMarketConfig[] } = {
63
+ devnet: DevnetPerpMarkets,
64
+ 'mainnet-beta': MainnetPerpMarkets,
54
65
  };
@@ -0,0 +1,83 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ import { BN, DriftEnv, OracleSource } from '../';
3
+ import {
4
+ QUOTE_PRECISION,
5
+ QUOTE_PRECISION_EXP,
6
+ LAMPORTS_EXP,
7
+ LAMPORTS_PRECISION,
8
+ SIX,
9
+ } from './numericConstants';
10
+
11
+ export type SpotMarketConfig = {
12
+ symbol: string;
13
+ marketIndex: number;
14
+ oracle: PublicKey;
15
+ mint: PublicKey;
16
+ oracleSource: OracleSource;
17
+ precision: BN;
18
+ precisionExp: BN;
19
+ serumMarket?: PublicKey;
20
+ };
21
+
22
+ export const WRAPPED_SOL_MINT = new PublicKey(
23
+ 'So11111111111111111111111111111111111111112'
24
+ );
25
+
26
+ export const DevnetSpotMarkets: SpotMarketConfig[] = [
27
+ {
28
+ symbol: 'USDC',
29
+ marketIndex: 0,
30
+ oracle: PublicKey.default,
31
+ oracleSource: OracleSource.QUOTE_ASSET,
32
+ mint: new PublicKey('8zGuJQqwhZafTah7Uc7Z4tXRnguqkn5KLFAP8oV6PHe2'),
33
+ precision: new BN(10).pow(SIX),
34
+ precisionExp: SIX,
35
+ },
36
+ {
37
+ symbol: 'SOL',
38
+ marketIndex: 1,
39
+ oracle: new PublicKey('J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix'),
40
+ oracleSource: OracleSource.PYTH,
41
+ mint: new PublicKey(WRAPPED_SOL_MINT),
42
+ precision: LAMPORTS_PRECISION,
43
+ precisionExp: LAMPORTS_EXP,
44
+ serumMarket: new PublicKey('8N37SsnTu8RYxtjrV9SStjkkwVhmU8aCWhLvwduAPEKW'),
45
+ },
46
+ {
47
+ symbol: 'BTC',
48
+ marketIndex: 2,
49
+ oracle: new PublicKey('HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J'),
50
+ oracleSource: OracleSource.PYTH,
51
+ mint: new PublicKey('3BZPwbcqB5kKScF3TEXxwNfx5ipV13kbRVDvfVp5c6fv'),
52
+ precision: new BN(10).pow(SIX),
53
+ precisionExp: SIX,
54
+ serumMarket: new PublicKey('AGsmbVu3MS9u68GEYABWosQQCZwmLcBHu4pWEuBYH7Za'),
55
+ },
56
+ ];
57
+
58
+ export const MainnetSpotMarkets: SpotMarketConfig[] = [
59
+ {
60
+ symbol: 'USDC',
61
+ marketIndex: 0,
62
+ oracle: PublicKey.default,
63
+ oracleSource: OracleSource.QUOTE_ASSET,
64
+ mint: new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'),
65
+ precision: QUOTE_PRECISION,
66
+ precisionExp: QUOTE_PRECISION_EXP,
67
+ },
68
+ {
69
+ symbol: 'SOL',
70
+ marketIndex: 1,
71
+ oracle: new PublicKey('H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG'),
72
+ oracleSource: OracleSource.PYTH,
73
+ mint: new PublicKey(WRAPPED_SOL_MINT),
74
+ precision: LAMPORTS_PRECISION,
75
+ precisionExp: LAMPORTS_EXP,
76
+ serumMarket: new PublicKey('9wFFyRfZBsuAha4YcuxcXLKwMxJR43S7fPfQLusDBzvT'),
77
+ },
78
+ ];
79
+
80
+ export const SpotMarkets: { [key in DriftEnv]: SpotMarketConfig[] } = {
81
+ devnet: DevnetSpotMarkets,
82
+ 'mainnet-beta': MainnetSpotMarkets,
83
+ };