@drift-labs/sdk 0.2.0-master.25 → 0.2.0-master.27

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 (124) hide show
  1. package/lib/accounts/pollingClearingHouseAccountSubscriber.d.ts +14 -13
  2. package/lib/accounts/pollingClearingHouseAccountSubscriber.js +30 -27
  3. package/lib/accounts/types.d.ts +9 -9
  4. package/lib/accounts/webSocketClearingHouseAccountSubscriber.d.ts +15 -14
  5. package/lib/accounts/webSocketClearingHouseAccountSubscriber.js +38 -34
  6. package/lib/addresses/pda.d.ts +7 -6
  7. package/lib/addresses/pda.js +31 -27
  8. package/lib/admin.d.ts +13 -7
  9. package/lib/admin.js +111 -44
  10. package/lib/clearingHouse.d.ts +71 -42
  11. package/lib/clearingHouse.js +767 -278
  12. package/lib/clearingHouseConfig.d.ts +2 -2
  13. package/lib/clearingHouseUser.d.ts +24 -22
  14. package/lib/clearingHouseUser.js +273 -177
  15. package/lib/config.d.ts +7 -7
  16. package/lib/config.js +21 -21
  17. package/lib/constants/numericConstants.d.ts +12 -12
  18. package/lib/constants/numericConstants.js +13 -13
  19. package/lib/constants/{markets.d.ts → perpMarkets.d.ts} +5 -5
  20. package/lib/constants/{markets.js → perpMarkets.js} +4 -4
  21. package/lib/constants/{banks.d.ts → spotMarkets.d.ts} +6 -6
  22. package/lib/constants/{banks.js → spotMarkets.js} +16 -16
  23. package/lib/dlob/DLOB.d.ts +73 -0
  24. package/lib/dlob/DLOB.js +557 -0
  25. package/lib/dlob/DLOBNode.d.ts +52 -0
  26. package/lib/dlob/DLOBNode.js +82 -0
  27. package/lib/dlob/NodeList.d.ts +26 -0
  28. package/lib/dlob/NodeList.js +138 -0
  29. package/lib/events/types.d.ts +2 -1
  30. package/lib/events/types.js +1 -0
  31. package/lib/examples/makeTradeExample.js +7 -7
  32. package/lib/idl/clearing_house.json +1152 -503
  33. package/lib/index.d.ts +10 -3
  34. package/lib/index.js +10 -3
  35. package/lib/math/amm.d.ts +2 -2
  36. package/lib/math/amm.js +1 -1
  37. package/lib/math/funding.d.ts +6 -6
  38. package/lib/math/funding.js +2 -1
  39. package/lib/math/margin.d.ts +4 -4
  40. package/lib/math/margin.js +18 -11
  41. package/lib/math/market.d.ts +11 -10
  42. package/lib/math/market.js +30 -7
  43. package/lib/math/oracles.d.ts +2 -1
  44. package/lib/math/oracles.js +11 -1
  45. package/lib/math/orders.d.ts +6 -6
  46. package/lib/math/orders.js +31 -16
  47. package/lib/math/position.d.ts +13 -13
  48. package/lib/math/position.js +19 -19
  49. package/lib/math/spotBalance.d.ts +22 -0
  50. package/lib/math/spotBalance.js +193 -0
  51. package/lib/math/spotMarket.d.ts +4 -0
  52. package/lib/math/spotMarket.js +8 -0
  53. package/lib/math/spotPosition.d.ts +6 -0
  54. package/lib/math/spotPosition.js +23 -0
  55. package/lib/math/state.js +2 -2
  56. package/lib/math/trade.d.ts +4 -4
  57. package/lib/orderParams.d.ts +4 -4
  58. package/lib/orderParams.js +12 -4
  59. package/lib/serum/serumSubscriber.d.ts +23 -0
  60. package/lib/serum/serumSubscriber.js +41 -0
  61. package/lib/serum/types.d.ts +11 -0
  62. package/lib/serum/types.js +2 -0
  63. package/lib/tx/retryTxSender.d.ts +1 -1
  64. package/lib/tx/retryTxSender.js +4 -2
  65. package/lib/tx/types.d.ts +1 -1
  66. package/lib/types.d.ts +148 -57
  67. package/lib/types.js +39 -11
  68. package/lib/userMap/userMap.d.ts +25 -0
  69. package/lib/userMap/userMap.js +73 -0
  70. package/lib/userMap/userStatsMap.d.ts +19 -0
  71. package/lib/userMap/userStatsMap.js +68 -0
  72. package/package.json +6 -3
  73. package/src/accounts/pollingClearingHouseAccountSubscriber.ts +42 -38
  74. package/src/accounts/types.ts +12 -9
  75. package/src/accounts/webSocketClearingHouseAccountSubscriber.ts +65 -52
  76. package/src/addresses/pda.ts +49 -44
  77. package/src/admin.ts +190 -55
  78. package/src/clearingHouse.ts +1092 -365
  79. package/src/clearingHouseConfig.ts +2 -2
  80. package/src/clearingHouseUser.ts +518 -255
  81. package/src/config.ts +30 -30
  82. package/src/constants/numericConstants.ts +17 -15
  83. package/src/constants/{markets.ts → perpMarkets.ts} +5 -5
  84. package/src/constants/{banks.ts → spotMarkets.ts} +19 -19
  85. package/src/dlob/DLOB.ts +884 -0
  86. package/src/dlob/DLOBNode.ts +163 -0
  87. package/src/dlob/NodeList.ts +185 -0
  88. package/src/events/types.ts +3 -0
  89. package/src/examples/makeTradeExample.js +152 -75
  90. package/src/examples/makeTradeExample.ts +10 -8
  91. package/src/idl/clearing_house.json +1152 -503
  92. package/src/index.ts +10 -3
  93. package/src/math/amm.ts +6 -3
  94. package/src/math/funding.ts +7 -7
  95. package/src/math/margin.ts +34 -23
  96. package/src/math/market.ts +72 -20
  97. package/src/math/oracles.ts +18 -1
  98. package/src/math/orders.ts +33 -25
  99. package/src/math/position.ts +31 -31
  100. package/src/math/spotBalance.ts +316 -0
  101. package/src/math/spotMarket.ts +9 -0
  102. package/src/math/spotPosition.ts +47 -0
  103. package/src/math/state.ts +2 -2
  104. package/src/math/trade.ts +4 -4
  105. package/src/orderParams.ts +16 -8
  106. package/src/serum/serumSubscriber.ts +80 -0
  107. package/src/serum/types.ts +13 -0
  108. package/src/tx/retryTxSender.ts +5 -2
  109. package/src/tx/types.ts +2 -1
  110. package/src/types.ts +135 -56
  111. package/src/userMap/userMap.ts +100 -0
  112. package/src/userMap/userStatsMap.ts +110 -0
  113. package/tests/bn/test.ts +2 -3
  114. package/tests/dlob/helpers.ts +322 -0
  115. package/tests/dlob/test.ts +2865 -0
  116. package/lib/math/bankBalance.d.ts +0 -15
  117. package/lib/math/bankBalance.js +0 -150
  118. package/src/constants/numericConstants.js +0 -41
  119. package/src/math/bankBalance.ts +0 -258
  120. package/src/math/oracles.js +0 -26
  121. package/src/math/state.js +0 -15
  122. package/src/orderParams.js +0 -20
  123. package/src/slot/SlotSubscriber.js +0 -39
  124. package/src/tokenFaucet.js +0 -189
package/src/config.ts CHANGED
@@ -1,15 +1,15 @@
1
1
  import {
2
- DevnetMarkets,
2
+ DevnetPerpMarkets,
3
3
  MainnetMarkets,
4
- MarketConfig,
5
- Markets,
6
- } from './constants/markets';
4
+ PerpMarketConfig,
5
+ PerpMarkets,
6
+ } from './constants/perpMarkets';
7
7
  import {
8
- BankConfig,
9
- Banks,
10
- DevnetBanks,
11
- MainnetBanks,
12
- } from './constants/banks';
8
+ SpotMarketConfig,
9
+ SpotMarkets,
10
+ DevnetSpotMarkets,
11
+ MainnetSpotMarkets,
12
+ } from './constants/spotMarkets';
13
13
  import { BN } from '@project-serum/anchor';
14
14
  import { OracleInfo } from './oracles/types';
15
15
 
@@ -18,8 +18,8 @@ type DriftConfig = {
18
18
  PYTH_ORACLE_MAPPING_ADDRESS: string;
19
19
  CLEARING_HOUSE_PROGRAM_ID: string;
20
20
  USDC_MINT_ADDRESS: string;
21
- MARKETS: MarketConfig[];
22
- BANKS: BankConfig[];
21
+ PERP_MARKETS: PerpMarketConfig[];
22
+ SPOT_MARKETS: SpotMarketConfig[];
23
23
  };
24
24
 
25
25
  export type DriftEnv = 'devnet' | 'mainnet-beta';
@@ -28,18 +28,18 @@ export const configs: { [key in DriftEnv]: DriftConfig } = {
28
28
  devnet: {
29
29
  ENV: 'devnet',
30
30
  PYTH_ORACLE_MAPPING_ADDRESS: 'BmA9Z6FjioHJPpjT39QazZyhDRUdZy2ezwx4GiDdE2u2',
31
- CLEARING_HOUSE_PROGRAM_ID: '3v1iEjbSSLSSYyt1pmx4UB5rqJGurmz71RibXF7X6UF3',
31
+ CLEARING_HOUSE_PROGRAM_ID: 'CUowJP5Dea7pkc2mKrkX2RuZUrPXL3u419iBRXyZEWQz',
32
32
  USDC_MINT_ADDRESS: '8zGuJQqwhZafTah7Uc7Z4tXRnguqkn5KLFAP8oV6PHe2',
33
- MARKETS: DevnetMarkets,
34
- BANKS: DevnetBanks,
33
+ PERP_MARKETS: DevnetPerpMarkets,
34
+ SPOT_MARKETS: DevnetSpotMarkets,
35
35
  },
36
36
  'mainnet-beta': {
37
37
  ENV: 'mainnet-beta',
38
38
  PYTH_ORACLE_MAPPING_ADDRESS: 'AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J',
39
39
  CLEARING_HOUSE_PROGRAM_ID: 'dammHkt7jmytvbS3nHTxQNEcP59aE57nxwV21YdqEDN',
40
40
  USDC_MINT_ADDRESS: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
41
- MARKETS: MainnetMarkets,
42
- BANKS: MainnetBanks,
41
+ PERP_MARKETS: MainnetMarkets,
42
+ SPOT_MARKETS: MainnetSpotMarkets,
43
43
  },
44
44
  };
45
45
 
@@ -67,34 +67,34 @@ export const initialize = (props: {
67
67
  return currentConfig;
68
68
  };
69
69
 
70
- export function getMarketsBanksAndOraclesForSubscription(env: DriftEnv): {
71
- marketIndexes: BN[];
72
- bankIndexes: BN[];
70
+ export function getMarketsAndOraclesForSubscription(env: DriftEnv): {
71
+ perpMarketIndexes: BN[];
72
+ spotMarketIndexes: BN[];
73
73
  oracleInfos: OracleInfo[];
74
74
  } {
75
- const marketIndexes = [];
76
- const bankIndexes = [];
75
+ const perpMarketIndexes = [];
76
+ const spotMarketIndexes = [];
77
77
  const oracleInfos = new Map<string, OracleInfo>();
78
78
 
79
- for (const market of Markets[env]) {
80
- marketIndexes.push(market.marketIndex);
79
+ for (const market of PerpMarkets[env]) {
80
+ perpMarketIndexes.push(market.marketIndex);
81
81
  oracleInfos.set(market.oracle.toString(), {
82
82
  publicKey: market.oracle,
83
83
  source: market.oracleSource,
84
84
  });
85
85
  }
86
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,
87
+ for (const spotMarket of SpotMarkets[env]) {
88
+ spotMarketIndexes.push(spotMarket.marketIndex);
89
+ oracleInfos.set(spotMarket.oracle.toString(), {
90
+ publicKey: spotMarket.oracle,
91
+ source: spotMarket.oracleSource,
92
92
  });
93
93
  }
94
94
 
95
95
  return {
96
- marketIndexes,
97
- bankIndexes,
96
+ perpMarketIndexes: perpMarketIndexes,
97
+ spotMarketIndexes: spotMarketIndexes,
98
98
  oracleInfos: Array.from(oracleInfos.values()),
99
99
  };
100
100
  }
@@ -20,26 +20,28 @@ export const FUNDING_RATE_PRECISION_EXP = MARK_PRICE_PRECISION_EXP.mul(
20
20
  export const PEG_PRECISION_EXP = new BN(3);
21
21
  export const AMM_RESERVE_PRECISION_EXP = new BN(13);
22
22
 
23
- export const BANK_INTEREST_PRECISION_EXP = new BN(6);
24
- export const BANK_INTEREST_PRECISION = new BN(10).pow(
25
- BANK_INTEREST_PRECISION_EXP
23
+ export const SPOT_MARKET_INTEREST_PRECISION_EXP = new BN(6);
24
+ export const SPOT_MARKET_INTEREST_PRECISION = new BN(10).pow(
25
+ SPOT_MARKET_INTEREST_PRECISION_EXP
26
26
  );
27
27
 
28
- export const BANK_CUMULATIVE_INTEREST_PRECISION_EXP = new BN(10);
29
- export const BANK_CUMULATIVE_INTEREST_PRECISION = new BN(10).pow(
30
- BANK_CUMULATIVE_INTEREST_PRECISION_EXP
28
+ export const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP = new BN(10);
29
+ export const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION = new BN(10).pow(
30
+ SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP
31
31
  );
32
32
 
33
- export const BANK_UTILIZATION_PRECISION = new BN(1000000);
34
- export const BANK_RATE_PRECISION = new BN(1000000);
35
- export const BANK_WEIGHT_PRECISION = new BN(100);
36
- export const BANK_BALANCE_PRECISION_EXP = new BN(6);
37
- export const BANK_BALANCE_PRECISION = new BN(10).pow(
38
- BANK_BALANCE_PRECISION_EXP
33
+ export const SPOT_MARKET_UTILIZATION_PRECISION = new BN(1000000);
34
+ export const SPOT_MARKET_RATE_PRECISION = new BN(1000000);
35
+ export const SPOT_MARKET_WEIGHT_PRECISION = new BN(10000);
36
+ export const SPOT_MARKET_BALANCE_PRECISION_EXP = new BN(6);
37
+ export const SPOT_MARKET_BALANCE_PRECISION = new BN(10).pow(
38
+ SPOT_MARKET_BALANCE_PRECISION_EXP
39
39
  );
40
- export const BANK_IMF_PRECISION_EXP = new BN(6);
40
+ export const SPOT_MARKET_IMF_PRECISION_EXP = new BN(6);
41
41
 
42
- export const BANK_IMF_PRECISION = new BN(10).pow(BANK_IMF_PRECISION_EXP);
42
+ export const SPOT_MARKET_IMF_PRECISION = new BN(10).pow(
43
+ SPOT_MARKET_IMF_PRECISION_EXP
44
+ );
43
45
  export const LIQUIDATION_FEE_PRECISION = new BN(1000000);
44
46
 
45
47
  export const QUOTE_PRECISION = new BN(10).pow(QUOTE_PRECISION_EXP);
@@ -66,7 +68,7 @@ export const BID_ASK_SPREAD_PRECISION = new BN(1000000);
66
68
 
67
69
  export const ONE_YEAR = new BN(31536000);
68
70
 
69
- export const QUOTE_ASSET_BANK_INDEX = new BN(0);
71
+ export const QUOTE_SPOT_MARKET_INDEX = new BN(0);
70
72
 
71
73
  export const LAMPORTS_PRECISION = new BN(LAMPORTS_PER_SOL);
72
74
  export const LAMPORTS_EXP = new BN(Math.log10(LAMPORTS_PER_SOL));
@@ -2,7 +2,7 @@ import { BN, 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;
@@ -13,7 +13,7 @@ export type MarketConfig = {
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'],
@@ -46,9 +46,9 @@ export const DevnetMarkets: MarketConfig[] = [
46
46
  },
47
47
  ];
48
48
 
49
- export const MainnetMarkets: MarketConfig[] = [];
49
+ export const MainnetMarkets: PerpMarketConfig[] = [];
50
50
 
51
- export const Markets: { [key in DriftEnv]: MarketConfig[] } = {
52
- devnet: DevnetMarkets,
51
+ export const PerpMarkets: { [key in DriftEnv]: PerpMarketConfig[] } = {
52
+ devnet: DevnetPerpMarkets,
53
53
  'mainnet-beta': [],
54
54
  };
@@ -1,15 +1,15 @@
1
1
  import { PublicKey } from '@solana/web3.js';
2
2
  import { BN, DriftEnv, OracleSource } from '../';
3
3
  import {
4
- BANK_BALANCE_PRECISION,
5
- BANK_BALANCE_PRECISION_EXP,
4
+ SPOT_MARKET_BALANCE_PRECISION,
5
+ SPOT_MARKET_BALANCE_PRECISION_EXP,
6
6
  LAMPORTS_EXP,
7
7
  LAMPORTS_PRECISION,
8
8
  } from './numericConstants';
9
9
 
10
- export type BankConfig = {
10
+ export type SpotMarketConfig = {
11
11
  symbol: string;
12
- bankIndex: BN;
12
+ marketIndex: BN;
13
13
  oracle: PublicKey;
14
14
  mint: PublicKey;
15
15
  oracleSource: OracleSource;
@@ -21,19 +21,19 @@ export const WRAPPED_SOL_MINT = new PublicKey(
21
21
  'So11111111111111111111111111111111111111112'
22
22
  );
23
23
 
24
- export const DevnetBanks: BankConfig[] = [
24
+ export const DevnetSpotMarkets: SpotMarketConfig[] = [
25
25
  {
26
26
  symbol: 'USDC',
27
- bankIndex: new BN(0),
27
+ marketIndex: new BN(0),
28
28
  oracle: PublicKey.default,
29
29
  oracleSource: OracleSource.QUOTE_ASSET,
30
30
  mint: new PublicKey('8zGuJQqwhZafTah7Uc7Z4tXRnguqkn5KLFAP8oV6PHe2'),
31
- precision: BANK_BALANCE_PRECISION,
32
- precisionExp: BANK_BALANCE_PRECISION_EXP,
31
+ precision: SPOT_MARKET_BALANCE_PRECISION,
32
+ precisionExp: SPOT_MARKET_BALANCE_PRECISION_EXP,
33
33
  },
34
34
  {
35
35
  symbol: 'SOL',
36
- bankIndex: new BN(1),
36
+ marketIndex: new BN(1),
37
37
  oracle: new PublicKey('J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix'),
38
38
  oracleSource: OracleSource.PYTH,
39
39
  mint: new PublicKey(WRAPPED_SOL_MINT),
@@ -42,28 +42,28 @@ export const DevnetBanks: BankConfig[] = [
42
42
  },
43
43
  {
44
44
  symbol: 'BTC',
45
- bankIndex: new BN(2),
45
+ marketIndex: new BN(2),
46
46
  oracle: new PublicKey('HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J'),
47
47
  oracleSource: OracleSource.PYTH,
48
48
  mint: new PublicKey('3BZPwbcqB5kKScF3TEXxwNfx5ipV13kbRVDvfVp5c6fv'),
49
- precision: BANK_BALANCE_PRECISION,
50
- precisionExp: BANK_BALANCE_PRECISION_EXP,
49
+ precision: SPOT_MARKET_BALANCE_PRECISION,
50
+ precisionExp: SPOT_MARKET_BALANCE_PRECISION_EXP,
51
51
  },
52
52
  ];
53
53
 
54
- export const MainnetBanks: BankConfig[] = [
54
+ export const MainnetSpotMarkets: SpotMarketConfig[] = [
55
55
  {
56
56
  symbol: 'USDC',
57
- bankIndex: new BN(0),
57
+ marketIndex: new BN(0),
58
58
  oracle: PublicKey.default,
59
59
  oracleSource: OracleSource.QUOTE_ASSET,
60
60
  mint: new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'),
61
- precision: BANK_BALANCE_PRECISION,
62
- precisionExp: BANK_BALANCE_PRECISION_EXP,
61
+ precision: SPOT_MARKET_BALANCE_PRECISION,
62
+ precisionExp: SPOT_MARKET_BALANCE_PRECISION_EXP,
63
63
  },
64
64
  ];
65
65
 
66
- export const Banks: { [key in DriftEnv]: BankConfig[] } = {
67
- devnet: DevnetBanks,
68
- 'mainnet-beta': MainnetBanks,
66
+ export const SpotMarkets: { [key in DriftEnv]: SpotMarketConfig[] } = {
67
+ devnet: DevnetSpotMarkets,
68
+ 'mainnet-beta': MainnetSpotMarkets,
69
69
  };