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

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 (197) 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 +9 -17
  26. package/lib/admin.js +375 -558
  27. package/lib/clearingHouse.d.ts +86 -109
  28. package/lib/clearingHouse.js +828 -895
  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 +34 -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 +2287 -2938
  65. package/lib/index.d.ts +12 -4
  66. package/lib/index.js +12 -4
  67. package/lib/math/amm.d.ts +24 -29
  68. package/lib/math/amm.js +239 -178
  69. package/lib/math/auction.d.ts +5 -0
  70. package/lib/math/auction.js +39 -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 +5 -0
  80. package/lib/math/orders.js +31 -1
  81. package/lib/math/position.d.ts +7 -5
  82. package/lib/math/position.js +27 -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 -21
  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/orders.d.ts +6 -7
  98. package/lib/orders.js +10 -80
  99. package/lib/slot/SlotSubscriber.d.ts +12 -0
  100. package/lib/slot/SlotSubscriber.js +23 -0
  101. package/lib/tx/retryTxSender.d.ts +2 -2
  102. package/lib/tx/retryTxSender.js +108 -123
  103. package/lib/tx/types.d.ts +5 -1
  104. package/lib/tx/utils.d.ts +1 -1
  105. package/lib/tx/utils.js +11 -2
  106. package/lib/types.d.ts +110 -109
  107. package/lib/types.js +14 -1
  108. package/lib/userName.d.ts +4 -0
  109. package/lib/userName.js +20 -0
  110. package/lib/util/computeUnits.js +10 -21
  111. package/lib/util/tps.js +11 -22
  112. package/lib/wallet.js +7 -20
  113. package/package.json +11 -4
  114. package/src/accounts/bulkAccountLoader.ts +21 -15
  115. package/src/accounts/bulkUserSubscription.ts +1 -45
  116. package/src/accounts/fetch.ts +33 -0
  117. package/src/accounts/pollingClearingHouseAccountSubscriber.ts +249 -214
  118. package/src/accounts/pollingOracleSubscriber.ts +16 -8
  119. package/src/accounts/pollingTokenAccountSubscriber.ts +11 -8
  120. package/src/accounts/pollingUserAccountSubscriber.ts +21 -86
  121. package/src/accounts/types.ts +41 -70
  122. package/src/accounts/webSocketAccountSubscriber.ts +33 -16
  123. package/src/accounts/webSocketClearingHouseAccountSubscriber.ts +190 -240
  124. package/src/accounts/webSocketUserAccountSubscriber.ts +11 -71
  125. package/src/addresses/marketAddresses.ts +18 -0
  126. package/src/addresses/pda.ts +118 -0
  127. package/src/admin.ts +218 -346
  128. package/src/clearingHouse.ts +983 -952
  129. package/src/clearingHouseConfig.ts +37 -0
  130. package/src/clearingHouseUser.ts +275 -185
  131. package/src/clearingHouseUserConfig.ts +18 -0
  132. package/src/config.ts +54 -1
  133. package/src/constants/banks.ts +43 -0
  134. package/src/constants/markets.ts +16 -207
  135. package/src/constants/numericConstants.ts +34 -5
  136. package/src/events/eventList.ts +94 -0
  137. package/src/events/eventSubscriber.ts +194 -0
  138. package/src/events/fetchLogs.ts +80 -0
  139. package/src/events/pollingLogProvider.ts +79 -0
  140. package/src/events/sort.ts +65 -0
  141. package/src/events/txEventCache.ts +74 -0
  142. package/src/events/types.ts +98 -0
  143. package/src/events/webSocketLogProvider.ts +38 -0
  144. package/src/examples/makeTradeExample.ts +20 -11
  145. package/src/factory/bigNum.ts +524 -0
  146. package/src/factory/oracleClient.ts +7 -4
  147. package/src/idl/clearing_house.json +2287 -2938
  148. package/src/index.ts +12 -4
  149. package/src/math/amm.ts +414 -245
  150. package/src/math/auction.ts +39 -0
  151. package/src/math/bankBalance.ts +112 -0
  152. package/src/math/conversion.ts +1 -11
  153. package/src/math/funding.ts +12 -9
  154. package/src/math/market.ts +37 -30
  155. package/src/math/orders.ts +38 -0
  156. package/src/math/position.ts +48 -35
  157. package/src/math/repeg.ts +176 -0
  158. package/src/math/trade.ts +45 -35
  159. package/src/math/utils.js +27 -0
  160. package/src/math/utils.js.map +1 -0
  161. package/src/oracles/oracleClientCache.ts +20 -0
  162. package/src/oracles/pythClient.ts +4 -11
  163. package/src/oracles/quoteAssetOracleClient.ts +25 -0
  164. package/src/oracles/switchboardClient.ts +11 -24
  165. package/src/oracles/types.ts +7 -1
  166. package/src/orders.ts +24 -126
  167. package/src/slot/SlotSubscriber.ts +32 -0
  168. package/src/tx/retryTxSender.ts +6 -4
  169. package/src/tx/types.ts +6 -1
  170. package/src/tx/utils.ts +22 -3
  171. package/src/types.ts +111 -122
  172. package/src/userName.ts +20 -0
  173. package/src/util/computeUnits.js +17 -0
  174. package/src/util/computeUnits.js.map +1 -0
  175. package/tests/bn/test.ts +255 -0
  176. package/tsconfig.json +12 -12
  177. package/lib/addresses.d.ts +0 -10
  178. package/lib/addresses.js +0 -93
  179. package/lib/constants/accounts.d.ts +0 -15
  180. package/lib/constants/accounts.js +0 -18
  181. package/lib/factory/clearingHouse.d.ts +0 -35
  182. package/lib/factory/clearingHouse.js +0 -81
  183. package/lib/factory/clearingHouseUser.d.ts +0 -19
  184. package/lib/factory/clearingHouseUser.js +0 -34
  185. package/lib/math/insuranceFund.d.ts +0 -15
  186. package/lib/math/insuranceFund.js +0 -33
  187. package/lib/settlement.d.ts +0 -4
  188. package/lib/settlement.js +0 -10
  189. package/lib/tx/defaultTxSender.d.ts +0 -8
  190. package/lib/tx/defaultTxSender.js +0 -12
  191. package/src/addresses.ts +0 -82
  192. package/src/constants/accounts.ts +0 -26
  193. package/src/factory/clearingHouse.ts +0 -173
  194. package/src/factory/clearingHouseUser.ts +0 -73
  195. package/src/math/insuranceFund.ts +0 -29
  196. package/src/settlement.ts +0 -9
  197. 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: '9jwr5nC2f9yAraXrg4UzHXmCX3vi9FQkjD6p9e8bRqNa',
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,43 @@
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: 'BTC',
23
+ bankIndex: new BN(1),
24
+ oracle: new PublicKey('HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J'),
25
+ oracleSource: OracleSource.PYTH,
26
+ mint: new PublicKey('Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr'),
27
+ },
28
+ ];
29
+
30
+ export const MainnetBanks: BankConfig[] = [
31
+ {
32
+ symbol: 'USDC',
33
+ bankIndex: new BN(0),
34
+ oracle: PublicKey.default,
35
+ oracleSource: OracleSource.QUOTE_ASSET,
36
+ mint: new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'),
37
+ },
38
+ ];
39
+
40
+ export const Banks: { [key in DriftEnv]: BankConfig[] } = {
41
+ devnet: DevnetBanks,
42
+ 'mainnet-beta': MainnetBanks,
43
+ };
@@ -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,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
+ }