@drift-labs/sdk 0.1.36-master.7 → 0.2.0-master.10

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 (254) hide show
  1. package/lib/accounts/bulkAccountLoader.d.ts +6 -6
  2. package/lib/accounts/bulkAccountLoader.js +81 -95
  3. package/lib/accounts/bulkUserSubscription.js +13 -57
  4. package/lib/accounts/fetch.d.ts +4 -0
  5. package/lib/accounts/fetch.js +18 -0
  6. package/lib/accounts/pollingClearingHouseAccountSubscriber.d.ts +34 -38
  7. package/lib/accounts/pollingClearingHouseAccountSubscriber.js +224 -224
  8. package/lib/accounts/pollingOracleSubscriber.d.ts +3 -3
  9. package/lib/accounts/pollingOracleSubscriber.js +37 -49
  10. package/lib/accounts/pollingTokenAccountSubscriber.d.ts +3 -3
  11. package/lib/accounts/pollingTokenAccountSubscriber.js +35 -50
  12. package/lib/accounts/pollingUserAccountSubscriber.d.ts +7 -13
  13. package/lib/accounts/pollingUserAccountSubscriber.js +71 -134
  14. package/lib/accounts/types.d.ts +34 -41
  15. package/lib/accounts/webSocketAccountSubscriber.d.ts +6 -4
  16. package/lib/accounts/webSocketAccountSubscriber.js +39 -35
  17. package/lib/accounts/webSocketClearingHouseAccountSubscriber.d.ts +33 -28
  18. package/lib/accounts/webSocketClearingHouseAccountSubscriber.js +153 -185
  19. package/lib/accounts/webSocketUserAccountSubscriber.d.ts +5 -11
  20. package/lib/accounts/webSocketUserAccountSubscriber.js +22 -67
  21. package/lib/addresses/marketAddresses.d.ts +4 -0
  22. package/lib/addresses/marketAddresses.js +15 -0
  23. package/lib/addresses/pda.d.ts +12 -0
  24. package/lib/addresses/pda.js +83 -0
  25. package/lib/admin.d.ts +12 -18
  26. package/lib/admin.js +398 -558
  27. package/lib/clearingHouse.d.ts +83 -109
  28. package/lib/clearingHouse.js +832 -893
  29. package/lib/clearingHouseConfig.d.ts +34 -0
  30. package/lib/clearingHouseConfig.js +2 -0
  31. package/lib/clearingHouseUser.d.ts +19 -22
  32. package/lib/clearingHouseUser.js +155 -141
  33. package/lib/clearingHouseUserConfig.d.ts +14 -0
  34. package/lib/clearingHouseUserConfig.js +2 -0
  35. package/lib/config.d.ts +12 -0
  36. package/lib/config.js +35 -4
  37. package/lib/constants/banks.d.ts +16 -0
  38. package/lib/constants/banks.js +41 -0
  39. package/lib/constants/markets.d.ts +8 -3
  40. package/lib/constants/markets.js +13 -206
  41. package/lib/constants/numericConstants.d.ts +17 -0
  42. package/lib/constants/numericConstants.js +23 -6
  43. package/lib/events/eventList.d.ts +22 -0
  44. package/lib/events/eventList.js +77 -0
  45. package/lib/events/eventSubscriber.d.ts +34 -0
  46. package/lib/events/eventSubscriber.js +126 -0
  47. package/lib/events/fetchLogs.d.ts +13 -0
  48. package/lib/events/fetchLogs.js +39 -0
  49. package/lib/events/pollingLogProvider.d.ts +15 -0
  50. package/lib/events/pollingLogProvider.js +53 -0
  51. package/lib/events/sort.d.ts +2 -0
  52. package/lib/events/sort.js +44 -0
  53. package/lib/events/txEventCache.d.ts +24 -0
  54. package/lib/events/txEventCache.js +71 -0
  55. package/lib/events/types.d.ts +49 -0
  56. package/lib/events/types.js +20 -0
  57. package/lib/events/webSocketLogProvider.d.ts +12 -0
  58. package/lib/events/webSocketLogProvider.js +30 -0
  59. package/lib/examples/makeTradeExample.js +26 -27
  60. package/lib/factory/bigNum.d.ts +118 -0
  61. package/lib/factory/bigNum.js +364 -0
  62. package/lib/factory/oracleClient.d.ts +1 -2
  63. package/lib/factory/oracleClient.js +6 -2
  64. package/lib/idl/clearing_house.json +2258 -2774
  65. package/lib/index.d.ts +14 -5
  66. package/lib/index.js +18 -5
  67. package/lib/math/amm.d.ts +24 -29
  68. package/lib/math/amm.js +209 -176
  69. package/lib/math/auction.d.ts +5 -0
  70. package/lib/math/auction.js +42 -0
  71. package/lib/math/bankBalance.d.ts +9 -0
  72. package/lib/math/bankBalance.js +75 -0
  73. package/lib/math/conversion.d.ts +0 -1
  74. package/lib/math/conversion.js +1 -5
  75. package/lib/math/funding.d.ts +6 -6
  76. package/lib/math/funding.js +158 -175
  77. package/lib/math/market.d.ts +6 -6
  78. package/lib/math/market.js +10 -9
  79. package/lib/math/orders.d.ts +6 -1
  80. package/lib/math/orders.js +38 -1
  81. package/lib/math/position.d.ts +7 -5
  82. package/lib/math/position.js +29 -27
  83. package/lib/math/repeg.d.ts +22 -0
  84. package/lib/math/repeg.js +128 -0
  85. package/lib/math/trade.d.ts +5 -4
  86. package/lib/math/trade.js +29 -24
  87. package/lib/mockUSDCFaucet.js +87 -116
  88. package/lib/oracles/oracleClientCache.d.ts +8 -0
  89. package/lib/oracles/oracleClientCache.js +19 -0
  90. package/lib/oracles/pythClient.d.ts +3 -5
  91. package/lib/oracles/pythClient.js +12 -31
  92. package/lib/oracles/quoteAssetOracleClient.d.ts +9 -0
  93. package/lib/oracles/quoteAssetOracleClient.js +21 -0
  94. package/lib/oracles/switchboardClient.d.ts +3 -5
  95. package/lib/oracles/switchboardClient.js +29 -50
  96. package/lib/oracles/types.d.ts +6 -1
  97. package/lib/orderParams.d.ts +14 -5
  98. package/lib/orderParams.js +8 -96
  99. package/lib/orders.d.ts +6 -7
  100. package/lib/orders.js +11 -89
  101. package/lib/slot/SlotSubscriber.d.ts +19 -0
  102. package/lib/slot/SlotSubscriber.js +26 -0
  103. package/lib/tx/retryTxSender.d.ts +2 -2
  104. package/lib/tx/retryTxSender.js +108 -123
  105. package/lib/tx/types.d.ts +5 -1
  106. package/lib/tx/utils.d.ts +1 -1
  107. package/lib/tx/utils.js +11 -2
  108. package/lib/types.d.ts +180 -110
  109. package/lib/types.js +54 -1
  110. package/lib/userName.d.ts +4 -0
  111. package/lib/userName.js +20 -0
  112. package/lib/util/computeUnits.js +10 -21
  113. package/lib/util/tps.js +11 -22
  114. package/lib/wallet.js +7 -20
  115. package/package.json +11 -4
  116. package/src/accounts/bulkAccountLoader.js +197 -0
  117. package/src/accounts/bulkAccountLoader.ts +21 -15
  118. package/src/accounts/bulkUserSubscription.js +33 -0
  119. package/src/accounts/bulkUserSubscription.ts +1 -45
  120. package/src/accounts/fetch.js +29 -0
  121. package/src/accounts/fetch.ts +33 -0
  122. package/src/accounts/pollingClearingHouseAccountSubscriber.js +311 -0
  123. package/src/accounts/pollingClearingHouseAccountSubscriber.ts +249 -214
  124. package/src/accounts/pollingOracleSubscriber.js +93 -0
  125. package/src/accounts/pollingOracleSubscriber.ts +16 -8
  126. package/src/accounts/pollingTokenAccountSubscriber.js +90 -0
  127. package/src/accounts/pollingTokenAccountSubscriber.ts +11 -8
  128. package/src/accounts/pollingUserAccountSubscriber.js +132 -0
  129. package/src/accounts/pollingUserAccountSubscriber.ts +21 -86
  130. package/src/accounts/types.js +10 -0
  131. package/src/accounts/types.ts +41 -70
  132. package/src/accounts/utils.js +7 -0
  133. package/src/accounts/webSocketAccountSubscriber.js +93 -0
  134. package/src/accounts/webSocketAccountSubscriber.ts +33 -16
  135. package/src/accounts/webSocketClearingHouseAccountSubscriber.js +233 -0
  136. package/src/accounts/webSocketClearingHouseAccountSubscriber.ts +190 -240
  137. package/src/accounts/webSocketUserAccountSubscriber.js +62 -0
  138. package/src/accounts/webSocketUserAccountSubscriber.ts +11 -71
  139. package/src/addresses/marketAddresses.js +26 -0
  140. package/src/addresses/marketAddresses.ts +18 -0
  141. package/{lib/addresses.js → src/addresses/pda.js} +45 -34
  142. package/src/addresses/pda.ts +118 -0
  143. package/src/admin.ts +247 -336
  144. package/src/assert/assert.js +9 -0
  145. package/src/clearingHouse.ts +1023 -1026
  146. package/src/clearingHouseConfig.ts +37 -0
  147. package/src/clearingHouseUser.ts +275 -185
  148. package/src/clearingHouseUserConfig.ts +18 -0
  149. package/src/config.ts +54 -1
  150. package/src/constants/banks.ts +50 -0
  151. package/src/constants/markets.ts +16 -207
  152. package/src/constants/numericConstants.ts +34 -5
  153. package/src/events/eventList.js +77 -0
  154. package/src/events/eventList.ts +94 -0
  155. package/src/events/eventSubscriber.js +139 -0
  156. package/src/events/eventSubscriber.ts +194 -0
  157. package/src/events/fetchLogs.js +50 -0
  158. package/src/events/fetchLogs.ts +80 -0
  159. package/src/events/pollingLogProvider.js +64 -0
  160. package/src/events/pollingLogProvider.ts +79 -0
  161. package/src/events/sort.js +44 -0
  162. package/src/events/sort.ts +65 -0
  163. package/src/events/txEventCache.js +71 -0
  164. package/src/events/txEventCache.ts +74 -0
  165. package/src/events/types.js +20 -0
  166. package/src/events/types.ts +98 -0
  167. package/src/events/webSocketLogProvider.js +41 -0
  168. package/src/events/webSocketLogProvider.ts +38 -0
  169. package/src/examples/makeTradeExample.js +80 -0
  170. package/src/examples/makeTradeExample.ts +20 -11
  171. package/src/factory/bigNum.js +364 -0
  172. package/src/factory/bigNum.ts +524 -0
  173. package/src/factory/oracleClient.js +20 -0
  174. package/src/factory/oracleClient.ts +7 -4
  175. package/src/idl/clearing_house.json +2258 -2774
  176. package/src/index.js +69 -0
  177. package/src/index.ts +14 -5
  178. package/src/math/amm.js +369 -0
  179. package/src/math/amm.ts +382 -243
  180. package/src/math/auction.js +42 -0
  181. package/src/math/auction.ts +43 -0
  182. package/src/math/bankBalance.js +75 -0
  183. package/src/math/bankBalance.ts +112 -0
  184. package/src/math/conversion.js +11 -0
  185. package/src/math/conversion.ts +1 -11
  186. package/src/math/funding.js +248 -0
  187. package/src/math/funding.ts +12 -9
  188. package/src/math/market.js +57 -0
  189. package/src/math/market.ts +37 -30
  190. package/src/math/oracles.js +26 -0
  191. package/src/math/orders.js +110 -0
  192. package/src/math/orders.ts +43 -1
  193. package/src/math/position.js +140 -0
  194. package/src/math/position.ts +52 -35
  195. package/src/math/repeg.js +128 -0
  196. package/src/math/repeg.ts +176 -0
  197. package/src/math/state.js +15 -0
  198. package/src/math/trade.js +253 -0
  199. package/src/math/trade.ts +55 -47
  200. package/src/math/utils.js +26 -0
  201. package/src/math/utils.js.map +1 -0
  202. package/src/mockUSDCFaucet.js +171 -0
  203. package/src/oracles/oracleClientCache.js +19 -0
  204. package/src/oracles/oracleClientCache.ts +20 -0
  205. package/src/oracles/pythClient.js +46 -0
  206. package/src/oracles/pythClient.ts +4 -11
  207. package/src/oracles/quoteAssetOracleClient.js +32 -0
  208. package/src/oracles/quoteAssetOracleClient.ts +25 -0
  209. package/src/oracles/switchboardClient.js +69 -0
  210. package/src/oracles/switchboardClient.ts +11 -24
  211. package/src/oracles/types.js +2 -0
  212. package/src/oracles/types.ts +7 -1
  213. package/src/orderParams.js +20 -0
  214. package/src/orderParams.ts +20 -141
  215. package/src/orders.js +134 -0
  216. package/src/orders.ts +25 -134
  217. package/src/slot/SlotSubscriber.js +39 -0
  218. package/src/slot/SlotSubscriber.ts +42 -0
  219. package/src/token/index.js +38 -0
  220. package/src/tx/retryTxSender.js +188 -0
  221. package/src/tx/retryTxSender.ts +6 -4
  222. package/src/tx/types.js +2 -0
  223. package/src/tx/types.ts +6 -1
  224. package/src/tx/utils.js +17 -0
  225. package/src/tx/utils.ts +22 -3
  226. package/src/types.js +114 -0
  227. package/src/types.ts +176 -124
  228. package/src/userName.js +20 -0
  229. package/src/userName.ts +20 -0
  230. package/src/util/promiseTimeout.js +14 -0
  231. package/src/util/tps.js +27 -0
  232. package/src/wallet.js +35 -0
  233. package/tests/bn/test.ts +255 -0
  234. package/tsconfig.json +12 -12
  235. package/lib/addresses.d.ts +0 -10
  236. package/lib/constants/accounts.d.ts +0 -15
  237. package/lib/constants/accounts.js +0 -18
  238. package/lib/factory/clearingHouse.d.ts +0 -35
  239. package/lib/factory/clearingHouse.js +0 -81
  240. package/lib/factory/clearingHouseUser.d.ts +0 -19
  241. package/lib/factory/clearingHouseUser.js +0 -34
  242. package/lib/math/insuranceFund.d.ts +0 -15
  243. package/lib/math/insuranceFund.js +0 -33
  244. package/lib/settlement.d.ts +0 -4
  245. package/lib/settlement.js +0 -10
  246. package/lib/tx/defaultTxSender.d.ts +0 -8
  247. package/lib/tx/defaultTxSender.js +0 -12
  248. package/src/addresses.ts +0 -82
  249. package/src/constants/accounts.ts +0 -26
  250. package/src/factory/clearingHouse.ts +0 -173
  251. package/src/factory/clearingHouseUser.ts +0 -73
  252. package/src/math/insuranceFund.ts +0 -29
  253. package/src/settlement.ts +0 -9
  254. package/src/tx/defaultTxSender.ts +0 -24
@@ -0,0 +1,18 @@
1
+ import { ClearingHouse } from './clearingHouse';
2
+ import { PublicKey } from '@solana/web3.js';
3
+ import { BulkAccountLoader } from './accounts/bulkAccountLoader';
4
+
5
+ export type ClearingHouseUserConfig = {
6
+ accountSubscription?: ClearingHouseUserAccountSubscriptionConfig;
7
+ clearingHouse: ClearingHouse;
8
+ userAccountPublicKey: PublicKey;
9
+ };
10
+
11
+ export type ClearingHouseUserAccountSubscriptionConfig =
12
+ | {
13
+ type: 'websocket';
14
+ }
15
+ | {
16
+ type: 'polling';
17
+ accountLoader: BulkAccountLoader;
18
+ };
package/src/config.ts CHANGED
@@ -1,8 +1,25 @@
1
+ import {
2
+ DevnetMarkets,
3
+ MainnetMarkets,
4
+ MarketConfig,
5
+ Markets,
6
+ } from './constants/markets';
7
+ import {
8
+ BankConfig,
9
+ Banks,
10
+ DevnetBanks,
11
+ MainnetBanks,
12
+ } from './constants/banks';
13
+ import { BN } from '@project-serum/anchor';
14
+ import { OracleInfo } from './oracles/types';
15
+
1
16
  type DriftConfig = {
2
17
  ENV: DriftEnv;
3
18
  PYTH_ORACLE_MAPPING_ADDRESS: string;
4
19
  CLEARING_HOUSE_PROGRAM_ID: string;
5
20
  USDC_MINT_ADDRESS: string;
21
+ MARKETS: MarketConfig[];
22
+ BANKS: BankConfig[];
6
23
  };
7
24
 
8
25
  export type DriftEnv = 'devnet' | 'mainnet-beta';
@@ -11,14 +28,18 @@ export const configs: { [key in DriftEnv]: DriftConfig } = {
11
28
  devnet: {
12
29
  ENV: 'devnet',
13
30
  PYTH_ORACLE_MAPPING_ADDRESS: 'BmA9Z6FjioHJPpjT39QazZyhDRUdZy2ezwx4GiDdE2u2',
14
- CLEARING_HOUSE_PROGRAM_ID: 'AsW7LnXB9UA1uec9wi9MctYTgTz7YH9snhxd16GsFaGX',
31
+ CLEARING_HOUSE_PROGRAM_ID: 'BMow898PH56jD8z4EaqxicoGXkR1HhN17qrER6Uc4AYq',
15
32
  USDC_MINT_ADDRESS: '8zGuJQqwhZafTah7Uc7Z4tXRnguqkn5KLFAP8oV6PHe2',
33
+ MARKETS: DevnetMarkets,
34
+ BANKS: DevnetBanks,
16
35
  },
17
36
  'mainnet-beta': {
18
37
  ENV: 'mainnet-beta',
19
38
  PYTH_ORACLE_MAPPING_ADDRESS: 'AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J',
20
39
  CLEARING_HOUSE_PROGRAM_ID: 'dammHkt7jmytvbS3nHTxQNEcP59aE57nxwV21YdqEDN',
21
40
  USDC_MINT_ADDRESS: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
41
+ MARKETS: MainnetMarkets,
42
+ BANKS: MainnetBanks,
22
43
  },
23
44
  };
24
45
 
@@ -45,3 +66,35 @@ export const initialize = (props: {
45
66
 
46
67
  return currentConfig;
47
68
  };
69
+
70
+ export function getMarketsBanksAndOraclesForSubscription(env: DriftEnv): {
71
+ marketIndexes: BN[];
72
+ bankIndexes: BN[];
73
+ oracleInfos: OracleInfo[];
74
+ } {
75
+ const marketIndexes = [];
76
+ const bankIndexes = [];
77
+ const oracleInfos = new Map<string, OracleInfo>();
78
+
79
+ for (const market of Markets[env]) {
80
+ marketIndexes.push(market.marketIndex);
81
+ oracleInfos.set(market.oracle.toString(), {
82
+ publicKey: market.oracle,
83
+ source: market.oracleSource,
84
+ });
85
+ }
86
+
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,
92
+ });
93
+ }
94
+
95
+ return {
96
+ marketIndexes,
97
+ bankIndexes,
98
+ oracleInfos: Array.from(oracleInfos.values()),
99
+ };
100
+ }
@@ -0,0 +1,50 @@
1
+ import { BN, OracleSource } from '../';
2
+ import { DriftEnv } from '../';
3
+ import { PublicKey } from '@solana/web3.js';
4
+
5
+ export type BankConfig = {
6
+ symbol: string;
7
+ bankIndex: BN;
8
+ oracle: PublicKey;
9
+ mint: PublicKey;
10
+ oracleSource: OracleSource;
11
+ };
12
+
13
+ export const DevnetBanks: BankConfig[] = [
14
+ {
15
+ symbol: 'USDC',
16
+ bankIndex: new BN(0),
17
+ oracle: PublicKey.default,
18
+ oracleSource: OracleSource.QUOTE_ASSET,
19
+ mint: new PublicKey('8zGuJQqwhZafTah7Uc7Z4tXRnguqkn5KLFAP8oV6PHe2'),
20
+ },
21
+ {
22
+ symbol: 'SOL',
23
+ bankIndex: new BN(1),
24
+ oracle: new PublicKey('J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix'),
25
+ oracleSource: OracleSource.PYTH,
26
+ mint: new PublicKey('So11111111111111111111111111111111111111112'),
27
+ },
28
+ {
29
+ symbol: 'BTC',
30
+ bankIndex: new BN(2),
31
+ oracle: new PublicKey('HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J'),
32
+ oracleSource: OracleSource.PYTH,
33
+ mint: new PublicKey('Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr'),
34
+ },
35
+ ];
36
+
37
+ export const MainnetBanks: BankConfig[] = [
38
+ {
39
+ symbol: 'USDC',
40
+ bankIndex: new BN(0),
41
+ oracle: PublicKey.default,
42
+ oracleSource: OracleSource.QUOTE_ASSET,
43
+ mint: new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'),
44
+ },
45
+ ];
46
+
47
+ export const Banks: { [key in DriftEnv]: BankConfig[] } = {
48
+ devnet: DevnetBanks,
49
+ 'mainnet-beta': MainnetBanks,
50
+ };
@@ -1,4 +1,6 @@
1
1
  import { BN, OracleSource } from '../';
2
+ import { DriftEnv } from '../';
3
+ import { PublicKey } from '@solana/web3.js';
2
4
 
3
5
  export type MarketConfig = {
4
6
  fullName?: string;
@@ -6,22 +8,20 @@ export type MarketConfig = {
6
8
  symbol: string;
7
9
  baseAssetSymbol: string;
8
10
  marketIndex: BN;
9
- devnetPublicKey: string;
10
- mainnetPublicKey: string;
11
11
  launchTs: number;
12
+ oracle: PublicKey;
12
13
  oracleSource: OracleSource;
13
14
  };
14
15
 
15
- export const Markets: MarketConfig[] = [
16
+ export const DevnetMarkets: MarketConfig[] = [
16
17
  {
17
18
  fullName: 'Solana',
18
19
  category: ['L1', 'Infra'],
19
20
  symbol: 'SOL-PERP',
20
21
  baseAssetSymbol: 'SOL',
21
22
  marketIndex: new BN(0),
22
- devnetPublicKey: 'J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix',
23
- mainnetPublicKey: 'H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG',
24
- launchTs: 1635209696886,
23
+ oracle: new PublicKey('J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix'),
24
+ launchTs: 1655751353000,
25
25
  oracleSource: OracleSource.PYTH,
26
26
  },
27
27
  {
@@ -30,9 +30,8 @@ export const Markets: MarketConfig[] = [
30
30
  symbol: 'BTC-PERP',
31
31
  baseAssetSymbol: 'BTC',
32
32
  marketIndex: new BN(1),
33
- devnetPublicKey: 'HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J',
34
- mainnetPublicKey: 'GVXRSBjFk6e6J3NbVPXohDJetcTjaeeuykUpbQF8UoMU',
35
- launchTs: 1637691088868,
33
+ oracle: new PublicKey('HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J'),
34
+ launchTs: 1655751353000,
36
35
  oracleSource: OracleSource.PYTH,
37
36
  },
38
37
  {
@@ -41,205 +40,15 @@ export const Markets: MarketConfig[] = [
41
40
  symbol: 'ETH-PERP',
42
41
  baseAssetSymbol: 'ETH',
43
42
  marketIndex: new BN(2),
44
- devnetPublicKey: 'EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw',
45
- mainnetPublicKey: 'JBu1AL4obBcCMqKBBxhpWCNUt136ijcuMZLFvTP7iWdB',
43
+ oracle: new PublicKey('EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw'),
46
44
  launchTs: 1637691133472,
47
45
  oracleSource: OracleSource.PYTH,
48
46
  },
49
- {
50
- fullName: 'Terra',
51
- category: ['L1', 'Infra'],
52
- symbol: 'LUNA-PERP',
53
- baseAssetSymbol: 'LUNA',
54
- marketIndex: new BN(3),
55
- devnetPublicKey: '8PugCXTAHLM9kfLSQWe2njE5pzAgUdpPk3Nx5zSm7BD3',
56
- mainnetPublicKey: '5bmWuR1dgP4avtGYMNKLuxumZTVKGgoN2BCMXWDNL9nY',
57
- launchTs: 1638821738525,
58
- oracleSource: OracleSource.PYTH,
59
- },
60
- {
61
- symbol: 'AVAX-PERP',
62
- category: ['L1', 'Infra'],
63
- baseAssetSymbol: 'AVAX',
64
- marketIndex: new BN(4),
65
- devnetPublicKey: 'FVb5h1VmHPfVb1RfqZckchq18GxRv4iKt8T4eVTQAqdz',
66
- mainnetPublicKey: 'Ax9ujW5B9oqcv59N8m6f1BpTBq2rGeGaBcpKjC5UYsXU',
67
- launchTs: 1639092501080,
68
- oracleSource: OracleSource.PYTH,
69
- },
70
- {
71
- fullName: 'Binance Coin',
72
- symbol: 'BNB-PERP',
73
- category: ['L1', 'Exchange'],
74
- baseAssetSymbol: 'BNB',
75
- marketIndex: new BN(5),
76
- devnetPublicKey: 'GwzBgrXb4PG59zjce24SF2b9JXbLEjJJTBkmytuEZj1b',
77
- mainnetPublicKey: '4CkQJBxhU8EZ2UjhigbtdaPbpTe6mqf811fipYBFbSYN',
78
- launchTs: 1639523193012,
79
- oracleSource: OracleSource.PYTH,
80
- },
81
- {
82
- fullName: 'Polygon',
83
- category: ['L1', 'Infra'],
84
- symbol: 'MATIC-PERP',
85
- baseAssetSymbol: 'MATIC',
86
- marketIndex: new BN(6),
87
- devnetPublicKey: 'FBirwuDFuRAu4iSGc7RGxN5koHB7EJM1wbCmyPuQoGur',
88
- mainnetPublicKey: '7KVswB9vkCgeM3SHP7aGDijvdRAHK8P5wi9JXViCrtYh',
89
- launchTs: 1641488603564,
90
- oracleSource: OracleSource.PYTH,
91
- },
92
- {
93
- fullName: 'Cosmos',
94
- category: ['L1', 'Infra'],
95
- symbol: 'ATOM-PERP',
96
- baseAssetSymbol: 'ATOM',
97
- marketIndex: new BN(7),
98
- devnetPublicKey: '7YAze8qFUMkBnyLVdKT4TFUUFui99EwS5gfRArMcrvFk',
99
- mainnetPublicKey: 'CrCpTerNqtZvqLcKqz1k13oVeXV9WkMD2zA9hBKXrsbN',
100
- launchTs: 1641920238195,
101
- oracleSource: OracleSource.PYTH,
102
- },
103
- {
104
- fullName: 'Polkadot',
105
- symbol: 'DOT-PERP',
106
- baseAssetSymbol: 'DOT',
107
- marketIndex: new BN(8),
108
- devnetPublicKey: '4dqq5VBpN4EwYb7wyywjjfknvMKu7m78j9mKZRXTj462',
109
- mainnetPublicKey: 'EcV1X1gY2yb4KXxjVQtTHTbioum2gvmPnFk4zYAt7zne',
110
- launchTs: 1642629253786,
111
- oracleSource: OracleSource.PYTH,
112
- },
113
- {
114
- fullName: 'Cardano',
115
- category: ['L1', 'Infra'],
116
- symbol: 'ADA-PERP',
117
- baseAssetSymbol: 'ADA',
118
- marketIndex: new BN(9),
119
- devnetPublicKey: '8oGTURNmSQkrBS1AQ5NjB2p8qY34UVmMA9ojrw8vnHus',
120
- mainnetPublicKey: '3pyn4svBbxJ9Wnn3RVeafyLWfzie6yC5eTig2S62v9SC',
121
- launchTs: 1643084413000,
122
- oracleSource: OracleSource.PYTH,
123
- },
124
- {
125
- fullName: 'Algorand',
126
- category: ['L1', 'Infra'],
127
- symbol: 'ALGO-PERP',
128
- baseAssetSymbol: 'ALGO',
129
- marketIndex: new BN(10),
130
- devnetPublicKey: 'c1A946dY5NHuVda77C8XXtXytyR3wK1SCP3eA9VRfC3',
131
- mainnetPublicKey: 'HqFyq1wh1xKvL7KDqqT7NJeSPdAqsDqnmBisUC2XdXAX',
132
- launchTs: 1643686767000,
133
- oracleSource: OracleSource.PYTH,
134
- },
135
- {
136
- fullName: 'FTX Coin',
137
- category: ['L1', 'Exchange'],
138
- symbol: 'FTT-PERP',
139
- baseAssetSymbol: 'FTT',
140
- marketIndex: new BN(11),
141
- devnetPublicKey: '6vivTRs5ZPeeXbjo7dfburfaYDWoXjBtdtuYgQRuGfu',
142
- mainnetPublicKey: '8JPJJkmDScpcNmBRKGZuPuG2GYAveQgP3t5gFuMymwvF',
143
- launchTs: 1644382122000,
144
- oracleSource: OracleSource.PYTH,
145
- },
146
- {
147
- fullName: 'Litecoin',
148
- category: ['L1', 'Payments'],
149
- symbol: 'LTC-PERP',
150
- baseAssetSymbol: 'LTC',
151
- marketIndex: new BN(12),
152
- devnetPublicKey: 'BLArYBCUYhdWiY8PCUTpvFE21iaJq85dvxLk9bYMobcU',
153
- mainnetPublicKey: '8RMnV1eD55iqUFJLMguPkYBkq8DCtx81XcmAja93LvRR',
154
- launchTs: 1645027429000,
155
- oracleSource: OracleSource.PYTH,
156
- },
157
- {
158
- fullName: 'Ripple',
159
- category: ['L1', 'Payments'],
160
- symbol: 'XRP-PERP',
161
- baseAssetSymbol: 'XRP',
162
- marketIndex: new BN(13),
163
- devnetPublicKey: 'WMW5xc3HypXwTnPesyUT49uLsyHwNURsWAEk39onKuk',
164
- mainnetPublicKey: 'WMW5xc3HypXwTnPesyUT49uLsyHwNURsWAEk39onKuk',
165
- launchTs: 1647543166000,
166
- oracleSource: OracleSource.SWITCHBOARD,
167
- },
168
- {
169
- fullName: 'ApeCoin',
170
- category: ['NFT'],
171
- symbol: 'APE-PERP',
172
- baseAssetSymbol: 'APE',
173
- marketIndex: new BN(14),
174
- devnetPublicKey: 'AwH6kBrJbkL9JTeqRd7Q59EdWh6UjPtoqoA5M4x4K2fA',
175
- mainnetPublicKey: '74zeQpprjNtEghGiC3VEPsR9y4kR2GTd4Rq9YVk9tnjz',
176
- launchTs: 1648475932000,
177
- oracleSource: OracleSource.SWITCHBOARD,
178
- },
179
- {
180
- fullName: 'DogeCoin',
181
- category: ['Meme', 'NFT'],
182
- symbol: 'DOGE-PERP',
183
- baseAssetSymbol: 'DOGE',
184
- marketIndex: new BN(15),
185
- devnetPublicKey: '4L6YhY8VvUgmqG5MvJkUJATtzB2rFqdrJwQCmFLv4Jzy',
186
- mainnetPublicKey: 'FsSM3s38PX9K7Dn6eGzuE29S2Dsk1Sss1baytTQdCaQj',
187
- launchTs: 1648607439000,
188
- oracleSource: OracleSource.PYTH,
189
- },
190
- {
191
- fullName: 'Near',
192
- category: ['L1', 'Infra'],
193
- symbol: 'NEAR-PERP',
194
- baseAssetSymbol: 'NEAR',
195
- marketIndex: new BN(16),
196
- devnetPublicKey: '3gnSbT7bhoTdGkFVZc1dW1PvjreWzpUNUD5ppXwv1N59',
197
- mainnetPublicKey: 'ECSFWQ1bnnpqPVvoy9237t2wddZAaHisW88mYxuEHKWf',
198
- launchTs: 1649105516000,
199
- oracleSource: OracleSource.PYTH,
200
- },
201
- {
202
- fullName: 'Serum',
203
- category: ['Solana', 'Exchange'],
204
- symbol: 'SRM-PERP',
205
- baseAssetSymbol: 'SRM',
206
- marketIndex: new BN(17),
207
- devnetPublicKey: '992moaMQKs32GKZ9dxi8keyM2bUmbrwBZpK4p2K6X5Vs',
208
- mainnetPublicKey: '3NBReDRTLKMQEKiLD5tGcx4kXbTf88b7f2xLS9UuGjym',
209
- launchTs: 1649877367000,
210
- oracleSource: OracleSource.PYTH,
211
- },
212
- {
213
- fullName: 'StepN',
214
- category: ['Solana', 'Shoe'],
215
- symbol: 'GMT-PERP',
216
- baseAssetSymbol: 'GMT',
217
- marketIndex: new BN(18),
218
- devnetPublicKey: '7GBoA2oGXMTepYjFgrdHyYVGcPs4FWskUF7S1dGzQsY9',
219
- mainnetPublicKey: '81kbdwDfTNsg4d5D1BxE9FHEdxEMk8xCJUj5ujjWQyvd',
220
- launchTs: 1650507526000,
221
- oracleSource: OracleSource.SWITCHBOARD,
222
- },
223
- {
224
- fullName: 'Curve DAO Token',
225
- category: ['Exchange'],
226
- symbol: 'CRV-PERP',
227
- baseAssetSymbol: 'CRV',
228
- marketIndex: new BN(19),
229
- devnetPublicKey: 'AuEiE5XG5kD1NFoKgEPrWuN9CdT44A3K7yGDuiUPvh9S',
230
- mainnetPublicKey: '61NzdQ9y6KhMhWxyJ8kXEe25NxdixVL1YUnGYLDMaUxH',
231
- launchTs: 1651017354000,
232
- oracleSource: OracleSource.SWITCHBOARD,
233
- },
234
- {
235
- fullName: 'Fantom',
236
- category: ['L1', 'Infra'],
237
- symbol: 'FTM-PERP',
238
- baseAssetSymbol: 'FTM',
239
- marketIndex: new BN(20),
240
- devnetPublicKey: 'BTwrLU4so1oJMViWA3BTzh8YmFwiLZ6CL4U3JryG7Q5S',
241
- mainnetPublicKey: '7Dn52EY5EGE8Nvvw98KVMGPWTiTGn3PF4y24TVLyXdT9',
242
- launchTs: 1651559653000,
243
- oracleSource: OracleSource.PYTH,
244
- },
245
47
  ];
48
+
49
+ export const MainnetMarkets: MarketConfig[] = [];
50
+
51
+ export const Markets: { [key in DriftEnv]: MarketConfig[] } = {
52
+ devnet: DevnetMarkets,
53
+ 'mainnet-beta': [],
54
+ };
@@ -10,18 +10,47 @@ export const TEN_MILLION = TEN_THOUSAND.mul(TEN_THOUSAND);
10
10
 
11
11
  export const MAX_LEVERAGE = new BN(5);
12
12
 
13
- export const QUOTE_PRECISION = new BN(10 ** 6);
14
- export const MARK_PRICE_PRECISION = new BN(10 ** 10);
15
- export const FUNDING_PAYMENT_PRECISION = new BN(10000);
16
- export const PEG_PRECISION = new BN(1000);
13
+ 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
30
+ );
31
+
32
+ export const QUOTE_PRECISION = new BN(10).pow(QUOTE_PRECISION_EXP);
33
+ export const MARK_PRICE_PRECISION = new BN(10).pow(MARK_PRICE_PRECISION_EXP);
34
+ export const FUNDING_PAYMENT_PRECISION = new BN(10).pow(
35
+ FUNDING_PAYMENT_PRECISION_EXP
36
+ );
37
+ export const PEG_PRECISION = new BN(10).pow(PEG_PRECISION_EXP);
38
+
39
+ export const AMM_RESERVE_PRECISION = new BN(10).pow(AMM_RESERVE_PRECISION_EXP);
17
40
 
18
- export const AMM_RESERVE_PRECISION = new BN(10 ** 13);
19
41
  export const BASE_PRECISION = AMM_RESERVE_PRECISION;
42
+ export const BASE_PRECISION_EXP = AMM_RESERVE_PRECISION_EXP;
43
+
20
44
  export const AMM_TO_QUOTE_PRECISION_RATIO =
21
45
  AMM_RESERVE_PRECISION.div(QUOTE_PRECISION); // 10^7
46
+ export const PRICE_DIV_PEG = MARK_PRICE_PRECISION.div(PEG_PRECISION); //10^7
22
47
  export const PRICE_TO_QUOTE_PRECISION =
23
48
  MARK_PRICE_PRECISION.div(QUOTE_PRECISION);
24
49
  export const AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO =
25
50
  AMM_RESERVE_PRECISION.mul(PEG_PRECISION).div(QUOTE_PRECISION); // 10^10
26
51
  export const MARGIN_PRECISION = TEN_THOUSAND;
27
52
  export const BID_ASK_SPREAD_PRECISION = new BN(1000000);
53
+
54
+ export const ONE_YEAR = new BN(31536000);
55
+
56
+ export const QUOTE_ASSET_BANK_INDEX = new BN(0);
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventList = void 0;
4
+ class Node {
5
+ constructor(event, next, prev) {
6
+ this.event = event;
7
+ this.next = next;
8
+ this.prev = prev;
9
+ }
10
+ }
11
+ class EventList {
12
+ constructor(eventType, maxSize, sortFn, orderDirection) {
13
+ this.eventType = eventType;
14
+ this.maxSize = maxSize;
15
+ this.sortFn = sortFn;
16
+ this.orderDirection = orderDirection;
17
+ this.size = 0;
18
+ }
19
+ insert(event) {
20
+ this.size++;
21
+ const newNode = new Node(event);
22
+ if (this.head === undefined) {
23
+ this.head = this.tail = newNode;
24
+ return;
25
+ }
26
+ if (this.sortFn(this.head.event, newNode.event) ===
27
+ (this.orderDirection === 'asc' ? 'less than' : 'greater than')) {
28
+ this.head.prev = newNode;
29
+ newNode.next = this.head;
30
+ this.head = newNode;
31
+ }
32
+ else {
33
+ let currentNode = this.head;
34
+ while (currentNode.next !== undefined &&
35
+ this.sortFn(currentNode.next.event, newNode.event) !==
36
+ (this.orderDirection === 'asc' ? 'less than' : 'greater than')) {
37
+ currentNode = currentNode.next;
38
+ }
39
+ newNode.next = currentNode.next;
40
+ if (currentNode.next !== undefined) {
41
+ newNode.next.prev = newNode;
42
+ }
43
+ currentNode.next = newNode;
44
+ newNode.prev = currentNode;
45
+ }
46
+ if (this.size > this.maxSize) {
47
+ this.detach();
48
+ }
49
+ }
50
+ detach() {
51
+ const node = this.tail;
52
+ if (node.prev !== undefined) {
53
+ node.prev.next = node.next;
54
+ }
55
+ else {
56
+ this.head = node.next;
57
+ }
58
+ if (node.next !== undefined) {
59
+ node.next.prev = node.prev;
60
+ }
61
+ else {
62
+ this.tail = node.prev;
63
+ }
64
+ this.size--;
65
+ }
66
+ toArray() {
67
+ return Array.from(this);
68
+ }
69
+ *[Symbol.iterator]() {
70
+ let node = this.head;
71
+ while (node) {
72
+ yield node.event;
73
+ node = node.next;
74
+ }
75
+ }
76
+ }
77
+ exports.EventList = EventList;
@@ -0,0 +1,94 @@
1
+ import {
2
+ EventType,
3
+ EventMap,
4
+ EventSubscriptionOrderDirection,
5
+ SortFn,
6
+ } from './types';
7
+
8
+ class Node<Type extends EventType, Event extends EventMap[Type]> {
9
+ constructor(
10
+ public event: Event,
11
+ public next?: Node<Type, Event>,
12
+ public prev?: Node<Type, Event>
13
+ ) {}
14
+ }
15
+
16
+ export class EventList<Type extends EventType> {
17
+ size = 0;
18
+ head?: Node<Type, EventMap[Type]>;
19
+ tail?: Node<Type, EventMap[Type]>;
20
+
21
+ public constructor(
22
+ public eventType: Type,
23
+ public maxSize: number,
24
+ private sortFn: SortFn,
25
+ private orderDirection: EventSubscriptionOrderDirection
26
+ ) {}
27
+
28
+ public insert(event: EventMap[Type]): void {
29
+ this.size++;
30
+ const newNode = new Node(event);
31
+ if (this.head === undefined) {
32
+ this.head = this.tail = newNode;
33
+ return;
34
+ }
35
+
36
+ if (
37
+ this.sortFn(this.head.event, newNode.event) ===
38
+ (this.orderDirection === 'asc' ? 'less than' : 'greater than')
39
+ ) {
40
+ this.head.prev = newNode;
41
+ newNode.next = this.head;
42
+ this.head = newNode;
43
+ } else {
44
+ let currentNode = this.head;
45
+ while (
46
+ currentNode.next !== undefined &&
47
+ this.sortFn(currentNode.next.event, newNode.event) !==
48
+ (this.orderDirection === 'asc' ? 'less than' : 'greater than')
49
+ ) {
50
+ currentNode = currentNode.next;
51
+ }
52
+
53
+ newNode.next = currentNode.next;
54
+ if (currentNode.next !== undefined) {
55
+ newNode.next.prev = newNode;
56
+ }
57
+ currentNode.next = newNode;
58
+ newNode.prev = currentNode;
59
+ }
60
+
61
+ if (this.size > this.maxSize) {
62
+ this.detach();
63
+ }
64
+ }
65
+
66
+ detach(): void {
67
+ const node = this.tail;
68
+ if (node.prev !== undefined) {
69
+ node.prev.next = node.next;
70
+ } else {
71
+ this.head = node.next;
72
+ }
73
+
74
+ if (node.next !== undefined) {
75
+ node.next.prev = node.prev;
76
+ } else {
77
+ this.tail = node.prev;
78
+ }
79
+
80
+ this.size--;
81
+ }
82
+
83
+ toArray(): EventMap[Type][] {
84
+ return Array.from(this);
85
+ }
86
+
87
+ *[Symbol.iterator]() {
88
+ let node = this.head;
89
+ while (node) {
90
+ yield node.event;
91
+ node = node.next;
92
+ }
93
+ }
94
+ }