@drift-labs/sdk 0.2.0-master.24 → 0.2.0-master.26

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 (193) hide show
  1. package/lib/accounts/pollingClearingHouseAccountSubscriber.d.ts +13 -13
  2. package/lib/accounts/pollingClearingHouseAccountSubscriber.js +27 -27
  3. package/lib/accounts/types.d.ts +8 -9
  4. package/lib/accounts/webSocketClearingHouseAccountSubscriber.d.ts +14 -14
  5. package/lib/accounts/webSocketClearingHouseAccountSubscriber.js +35 -34
  6. package/lib/addresses/pda.d.ts +8 -6
  7. package/lib/addresses/pda.js +35 -27
  8. package/lib/admin.d.ts +9 -6
  9. package/lib/admin.js +90 -54
  10. package/lib/clearingHouse.d.ts +71 -42
  11. package/lib/clearingHouse.js +765 -282
  12. package/lib/clearingHouseConfig.d.ts +2 -2
  13. package/lib/clearingHouseUser.d.ts +19 -17
  14. package/lib/clearingHouseUser.js +145 -123
  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/{src/constants/markets.js → lib/constants/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/events/eventSubscriber.d.ts +4 -2
  24. package/lib/events/eventSubscriber.js +16 -9
  25. package/lib/events/fetchLogs.d.ts +10 -1
  26. package/lib/events/fetchLogs.js +27 -7
  27. package/lib/events/pollingLogProvider.d.ts +2 -1
  28. package/lib/events/pollingLogProvider.js +6 -2
  29. package/lib/events/types.d.ts +4 -2
  30. package/lib/events/types.js +2 -0
  31. package/lib/examples/makeTradeExample.js +18 -6
  32. package/lib/idl/clearing_house.json +1128 -347
  33. package/lib/index.d.ts +6 -3
  34. package/lib/index.js +6 -3
  35. package/lib/math/amm.d.ts +5 -3
  36. package/lib/math/amm.js +42 -4
  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 +10 -9
  42. package/lib/math/market.js +29 -6
  43. package/lib/math/oracles.d.ts +2 -1
  44. package/lib/math/oracles.js +11 -1
  45. package/lib/math/orders.d.ts +5 -5
  46. package/lib/math/position.d.ts +13 -13
  47. package/lib/math/position.js +19 -19
  48. package/lib/math/spotBalance.d.ts +19 -0
  49. package/lib/math/spotBalance.js +176 -0
  50. package/lib/math/spotMarket.d.ts +4 -0
  51. package/lib/math/spotMarket.js +8 -0
  52. package/lib/math/spotPosition.d.ts +2 -0
  53. package/lib/math/spotPosition.js +8 -0
  54. package/lib/math/state.js +2 -2
  55. package/lib/math/trade.d.ts +4 -4
  56. package/lib/orderParams.d.ts +4 -4
  57. package/lib/orderParams.js +12 -4
  58. package/lib/serum/serumSubscriber.d.ts +23 -0
  59. package/lib/serum/serumSubscriber.js +41 -0
  60. package/lib/serum/types.d.ts +11 -0
  61. package/lib/serum/types.js +2 -0
  62. package/lib/tx/retryTxSender.d.ts +1 -1
  63. package/lib/tx/retryTxSender.js +4 -2
  64. package/lib/tx/types.d.ts +1 -1
  65. package/lib/types.d.ts +148 -39
  66. package/lib/types.js +37 -9
  67. package/my-script/.env +7 -0
  68. package/my-script/getUserStats.ts +106 -0
  69. package/my-script/multiConnections.ts +119 -0
  70. package/my-script/test-regex.ts +11 -0
  71. package/my-script/utils.ts +52 -0
  72. package/package.json +1 -1
  73. package/src/accounts/bulkAccountLoader.js +249 -0
  74. package/src/accounts/bulkUserStatsSubscription.js +75 -0
  75. package/src/accounts/bulkUserSubscription.js +75 -0
  76. package/src/accounts/fetch.js +92 -0
  77. package/src/accounts/pollingClearingHouseAccountSubscriber.js +465 -0
  78. package/src/accounts/pollingClearingHouseAccountSubscriber.ts +38 -38
  79. package/src/accounts/pollingOracleSubscriber.js +156 -0
  80. package/src/accounts/pollingTokenAccountSubscriber.js +141 -0
  81. package/src/accounts/pollingUserAccountSubscriber.js +208 -0
  82. package/src/accounts/pollingUserStatsAccountSubscriber.js +208 -0
  83. package/src/accounts/types.js +28 -0
  84. package/src/accounts/types.ts +11 -9
  85. package/src/accounts/utils.js +7 -0
  86. package/src/accounts/webSocketAccountSubscriber.js +138 -0
  87. package/src/accounts/webSocketClearingHouseAccountSubscriber.js +433 -0
  88. package/src/accounts/webSocketClearingHouseAccountSubscriber.ts +59 -52
  89. package/src/accounts/webSocketUserAccountSubscriber.js +113 -0
  90. package/src/accounts/webSocketUserStatsAccountSubsriber.js +113 -0
  91. package/src/addresses/pda.js +186 -0
  92. package/src/addresses/pda.ts +56 -42
  93. package/src/admin.js +1284 -0
  94. package/src/admin.ts +149 -75
  95. package/src/assert/assert.js +1 -1
  96. package/src/clearingHouse.js +3433 -0
  97. package/src/clearingHouse.ts +1097 -380
  98. package/src/clearingHouseConfig.js +2 -0
  99. package/src/clearingHouseConfig.ts +2 -2
  100. package/src/clearingHouseUser.js +874 -0
  101. package/src/clearingHouseUser.ts +237 -172
  102. package/src/clearingHouseUserConfig.js +2 -0
  103. package/src/clearingHouseUserStats.js +115 -0
  104. package/src/clearingHouseUserStatsConfig.js +2 -0
  105. package/src/config.js +80 -0
  106. package/src/config.ts +30 -30
  107. package/src/constants/numericConstants.js +18 -11
  108. package/src/constants/numericConstants.ts +17 -15
  109. package/{lib/constants/markets.js → src/constants/perpMarkets.js} +11 -11
  110. package/src/constants/{markets.ts → perpMarkets.ts} +5 -5
  111. package/src/constants/spotMarkets.js +51 -0
  112. package/src/constants/{banks.ts → spotMarkets.ts} +19 -19
  113. package/src/events/eventList.js +66 -23
  114. package/src/events/eventSubscriber.js +202 -0
  115. package/src/events/eventSubscriber.ts +20 -12
  116. package/src/events/fetchLogs.js +117 -0
  117. package/src/events/fetchLogs.ts +35 -8
  118. package/src/events/pollingLogProvider.js +113 -0
  119. package/src/events/pollingLogProvider.ts +10 -2
  120. package/src/events/sort.js +41 -0
  121. package/src/events/txEventCache.js +22 -19
  122. package/src/events/types.js +25 -0
  123. package/src/events/types.ts +7 -1
  124. package/src/events/webSocketLogProvider.js +76 -0
  125. package/src/examples/makeTradeExample.ts +27 -6
  126. package/src/factory/bigNum.js +183 -180
  127. package/src/factory/oracleClient.js +9 -9
  128. package/src/idl/clearing_house.json +1128 -347
  129. package/src/index.js +75 -0
  130. package/src/index.ts +6 -3
  131. package/src/math/amm.js +422 -0
  132. package/src/math/amm.ts +73 -5
  133. package/src/math/auction.js +10 -10
  134. package/src/math/conversion.js +4 -3
  135. package/src/math/funding.js +223 -175
  136. package/src/math/funding.ts +7 -7
  137. package/src/math/insurance.js +27 -0
  138. package/src/math/margin.js +77 -0
  139. package/src/math/margin.ts +34 -23
  140. package/src/math/market.js +105 -0
  141. package/src/math/market.ts +71 -19
  142. package/src/math/oracles.js +40 -10
  143. package/src/math/oracles.ts +18 -1
  144. package/src/math/orders.js +153 -0
  145. package/src/math/orders.ts +5 -5
  146. package/src/math/position.js +172 -0
  147. package/src/math/position.ts +31 -31
  148. package/src/math/repeg.js +40 -40
  149. package/src/math/spotBalance.js +176 -0
  150. package/src/math/spotBalance.ts +290 -0
  151. package/src/math/spotMarket.js +8 -0
  152. package/src/math/spotMarket.ts +9 -0
  153. package/src/math/spotPosition.js +8 -0
  154. package/src/math/spotPosition.ts +6 -0
  155. package/src/math/state.ts +2 -2
  156. package/src/math/trade.js +81 -74
  157. package/src/math/trade.ts +4 -4
  158. package/src/math/utils.js +8 -7
  159. package/src/oracles/oracleClientCache.js +10 -9
  160. package/src/oracles/pythClient.js +52 -17
  161. package/src/oracles/quoteAssetOracleClient.js +44 -13
  162. package/src/oracles/switchboardClient.js +69 -37
  163. package/src/oracles/types.js +1 -1
  164. package/src/orderParams.js +14 -6
  165. package/src/orderParams.ts +16 -8
  166. package/src/serum/serumSubscriber.js +102 -0
  167. package/src/serum/serumSubscriber.ts +80 -0
  168. package/src/serum/types.js +2 -0
  169. package/src/serum/types.ts +13 -0
  170. package/src/slot/SlotSubscriber.js +67 -20
  171. package/src/token/index.js +4 -4
  172. package/src/tokenFaucet.js +288 -154
  173. package/src/tx/retryTxSender.js +280 -0
  174. package/src/tx/retryTxSender.ts +5 -2
  175. package/src/tx/types.js +1 -1
  176. package/src/tx/types.ts +2 -1
  177. package/src/tx/utils.js +7 -6
  178. package/src/types.js +216 -0
  179. package/src/types.ts +131 -39
  180. package/src/userName.js +5 -5
  181. package/src/util/computeUnits.js +46 -11
  182. package/src/util/promiseTimeout.js +5 -5
  183. package/src/util/tps.js +46 -12
  184. package/src/wallet.js +55 -18
  185. package/lib/math/bankBalance.d.ts +0 -15
  186. package/lib/math/bankBalance.js +0 -150
  187. package/src/addresses/marketAddresses.js +0 -26
  188. package/src/constants/banks.js +0 -42
  189. package/src/examples/makeTradeExample.js +0 -80
  190. package/src/math/bankBalance.ts +0 -258
  191. package/src/math/state.js +0 -15
  192. package/src/math/utils.js.map +0 -1
  193. package/src/util/getTokenAddress.js +0 -9
package/lib/config.js CHANGED
@@ -1,24 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getMarketsBanksAndOraclesForSubscription = exports.initialize = exports.getConfig = exports.configs = void 0;
4
- const markets_1 = require("./constants/markets");
5
- const banks_1 = require("./constants/banks");
3
+ exports.getMarketsAndOraclesForSubscription = exports.initialize = exports.getConfig = exports.configs = void 0;
4
+ const perpMarkets_1 = require("./constants/perpMarkets");
5
+ const spotMarkets_1 = require("./constants/spotMarkets");
6
6
  exports.configs = {
7
7
  devnet: {
8
8
  ENV: 'devnet',
9
9
  PYTH_ORACLE_MAPPING_ADDRESS: 'BmA9Z6FjioHJPpjT39QazZyhDRUdZy2ezwx4GiDdE2u2',
10
- CLEARING_HOUSE_PROGRAM_ID: 'HbUKwqFPjz9r7ZtT416AU8aaecDQMKKiDCTS3AdXnS6c',
10
+ CLEARING_HOUSE_PROGRAM_ID: '3v1iEjbSSLSSYyt1pmx4UB5rqJGurmz71RibXF7X6UF3',
11
11
  USDC_MINT_ADDRESS: '8zGuJQqwhZafTah7Uc7Z4tXRnguqkn5KLFAP8oV6PHe2',
12
- MARKETS: markets_1.DevnetMarkets,
13
- BANKS: banks_1.DevnetBanks,
12
+ PERP_MARKETS: perpMarkets_1.DevnetPerpMarkets,
13
+ SPOT_MARKETS: spotMarkets_1.DevnetSpotMarkets,
14
14
  },
15
15
  'mainnet-beta': {
16
16
  ENV: 'mainnet-beta',
17
17
  PYTH_ORACLE_MAPPING_ADDRESS: 'AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J',
18
18
  CLEARING_HOUSE_PROGRAM_ID: 'dammHkt7jmytvbS3nHTxQNEcP59aE57nxwV21YdqEDN',
19
19
  USDC_MINT_ADDRESS: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
20
- MARKETS: markets_1.MainnetMarkets,
21
- BANKS: banks_1.MainnetBanks,
20
+ PERP_MARKETS: perpMarkets_1.MainnetMarkets,
21
+ SPOT_MARKETS: spotMarkets_1.MainnetSpotMarkets,
22
22
  },
23
23
  };
24
24
  let currentConfig = exports.configs.devnet;
@@ -40,28 +40,28 @@ const initialize = (props) => {
40
40
  return currentConfig;
41
41
  };
42
42
  exports.initialize = initialize;
43
- function getMarketsBanksAndOraclesForSubscription(env) {
44
- const marketIndexes = [];
45
- const bankIndexes = [];
43
+ function getMarketsAndOraclesForSubscription(env) {
44
+ const perpMarketIndexes = [];
45
+ const spotMarketIndexes = [];
46
46
  const oracleInfos = new Map();
47
- for (const market of markets_1.Markets[env]) {
48
- marketIndexes.push(market.marketIndex);
47
+ for (const market of perpMarkets_1.PerpMarkets[env]) {
48
+ perpMarketIndexes.push(market.marketIndex);
49
49
  oracleInfos.set(market.oracle.toString(), {
50
50
  publicKey: market.oracle,
51
51
  source: market.oracleSource,
52
52
  });
53
53
  }
54
- for (const bank of banks_1.Banks[env]) {
55
- bankIndexes.push(bank.bankIndex);
56
- oracleInfos.set(bank.oracle.toString(), {
57
- publicKey: bank.oracle,
58
- source: bank.oracleSource,
54
+ for (const spotMarket of spotMarkets_1.SpotMarkets[env]) {
55
+ spotMarketIndexes.push(spotMarket.marketIndex);
56
+ oracleInfos.set(spotMarket.oracle.toString(), {
57
+ publicKey: spotMarket.oracle,
58
+ source: spotMarket.oracleSource,
59
59
  });
60
60
  }
61
61
  return {
62
- marketIndexes,
63
- bankIndexes,
62
+ perpMarketIndexes: perpMarketIndexes,
63
+ spotMarketIndexes: spotMarketIndexes,
64
64
  oracleInfos: Array.from(oracleInfos.values()),
65
65
  };
66
66
  }
67
- exports.getMarketsBanksAndOraclesForSubscription = getMarketsBanksAndOraclesForSubscription;
67
+ exports.getMarketsAndOraclesForSubscription = getMarketsAndOraclesForSubscription;
@@ -14,17 +14,17 @@ export declare const MARK_PRICE_PRECISION_EXP: BN;
14
14
  export declare const FUNDING_RATE_PRECISION_EXP: BN;
15
15
  export declare const PEG_PRECISION_EXP: BN;
16
16
  export declare const AMM_RESERVE_PRECISION_EXP: BN;
17
- export declare const BANK_INTEREST_PRECISION_EXP: BN;
18
- export declare const BANK_INTEREST_PRECISION: BN;
19
- export declare const BANK_CUMULATIVE_INTEREST_PRECISION_EXP: BN;
20
- export declare const BANK_CUMULATIVE_INTEREST_PRECISION: BN;
21
- export declare const BANK_UTILIZATION_PRECISION: BN;
22
- export declare const BANK_RATE_PRECISION: BN;
23
- export declare const BANK_WEIGHT_PRECISION: BN;
24
- export declare const BANK_BALANCE_PRECISION_EXP: BN;
25
- export declare const BANK_BALANCE_PRECISION: BN;
26
- export declare const BANK_IMF_PRECISION_EXP: BN;
27
- export declare const BANK_IMF_PRECISION: BN;
17
+ export declare const SPOT_MARKET_INTEREST_PRECISION_EXP: BN;
18
+ export declare const SPOT_MARKET_INTEREST_PRECISION: BN;
19
+ export declare const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP: BN;
20
+ export declare const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION: BN;
21
+ export declare const SPOT_MARKET_UTILIZATION_PRECISION: BN;
22
+ export declare const SPOT_MARKET_RATE_PRECISION: BN;
23
+ export declare const SPOT_MARKET_WEIGHT_PRECISION: BN;
24
+ export declare const SPOT_MARKET_BALANCE_PRECISION_EXP: BN;
25
+ export declare const SPOT_MARKET_BALANCE_PRECISION: BN;
26
+ export declare const SPOT_MARKET_IMF_PRECISION_EXP: BN;
27
+ export declare const SPOT_MARKET_IMF_PRECISION: BN;
28
28
  export declare const LIQUIDATION_FEE_PRECISION: BN;
29
29
  export declare const QUOTE_PRECISION: BN;
30
30
  export declare const MARK_PRICE_PRECISION: BN;
@@ -40,6 +40,6 @@ export declare const AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO: BN;
40
40
  export declare const MARGIN_PRECISION: BN;
41
41
  export declare const BID_ASK_SPREAD_PRECISION: BN;
42
42
  export declare const ONE_YEAR: BN;
43
- export declare const QUOTE_ASSET_BANK_INDEX: BN;
43
+ export declare const QUOTE_SPOT_MARKET_INDEX: BN;
44
44
  export declare const LAMPORTS_PRECISION: BN;
45
45
  export declare const LAMPORTS_EXP: BN;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LAMPORTS_EXP = exports.LAMPORTS_PRECISION = exports.QUOTE_ASSET_BANK_INDEX = exports.ONE_YEAR = exports.BID_ASK_SPREAD_PRECISION = exports.MARGIN_PRECISION = exports.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO = exports.PRICE_TO_QUOTE_PRECISION = exports.PRICE_DIV_PEG = exports.AMM_TO_QUOTE_PRECISION_RATIO = exports.BASE_PRECISION_EXP = exports.BASE_PRECISION = exports.AMM_RESERVE_PRECISION = exports.PEG_PRECISION = exports.FUNDING_PAYMENT_PRECISION = exports.MARK_PRICE_PRECISION = exports.QUOTE_PRECISION = exports.LIQUIDATION_FEE_PRECISION = exports.BANK_IMF_PRECISION = exports.BANK_IMF_PRECISION_EXP = exports.BANK_BALANCE_PRECISION = exports.BANK_BALANCE_PRECISION_EXP = exports.BANK_WEIGHT_PRECISION = exports.BANK_RATE_PRECISION = exports.BANK_UTILIZATION_PRECISION = exports.BANK_CUMULATIVE_INTEREST_PRECISION = exports.BANK_CUMULATIVE_INTEREST_PRECISION_EXP = exports.BANK_INTEREST_PRECISION = exports.BANK_INTEREST_PRECISION_EXP = exports.AMM_RESERVE_PRECISION_EXP = exports.PEG_PRECISION_EXP = exports.FUNDING_RATE_PRECISION_EXP = exports.MARK_PRICE_PRECISION_EXP = exports.FUNDING_PAYMENT_PRECISION_EXP = exports.QUOTE_PRECISION_EXP = exports.MAX_LEVERAGE = exports.TEN_MILLION = exports.BN_MAX = exports.TEN_THOUSAND = exports.TEN = exports.TWO = exports.ONE = exports.ZERO = void 0;
3
+ exports.LAMPORTS_EXP = exports.LAMPORTS_PRECISION = exports.QUOTE_SPOT_MARKET_INDEX = exports.ONE_YEAR = exports.BID_ASK_SPREAD_PRECISION = exports.MARGIN_PRECISION = exports.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO = exports.PRICE_TO_QUOTE_PRECISION = exports.PRICE_DIV_PEG = exports.AMM_TO_QUOTE_PRECISION_RATIO = exports.BASE_PRECISION_EXP = exports.BASE_PRECISION = exports.AMM_RESERVE_PRECISION = exports.PEG_PRECISION = exports.FUNDING_PAYMENT_PRECISION = exports.MARK_PRICE_PRECISION = exports.QUOTE_PRECISION = exports.LIQUIDATION_FEE_PRECISION = exports.SPOT_MARKET_IMF_PRECISION = exports.SPOT_MARKET_IMF_PRECISION_EXP = exports.SPOT_MARKET_BALANCE_PRECISION = exports.SPOT_MARKET_BALANCE_PRECISION_EXP = exports.SPOT_MARKET_WEIGHT_PRECISION = exports.SPOT_MARKET_RATE_PRECISION = exports.SPOT_MARKET_UTILIZATION_PRECISION = exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION = exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP = exports.SPOT_MARKET_INTEREST_PRECISION = exports.SPOT_MARKET_INTEREST_PRECISION_EXP = exports.AMM_RESERVE_PRECISION_EXP = exports.PEG_PRECISION_EXP = exports.FUNDING_RATE_PRECISION_EXP = exports.MARK_PRICE_PRECISION_EXP = exports.FUNDING_PAYMENT_PRECISION_EXP = exports.QUOTE_PRECISION_EXP = exports.MAX_LEVERAGE = exports.TEN_MILLION = exports.BN_MAX = exports.TEN_THOUSAND = exports.TEN = exports.TWO = exports.ONE = exports.ZERO = void 0;
4
4
  const web3_js_1 = require("@solana/web3.js");
5
5
  const __1 = require("../");
6
6
  exports.ZERO = new __1.BN(0);
@@ -17,17 +17,17 @@ exports.MARK_PRICE_PRECISION_EXP = new __1.BN(10);
17
17
  exports.FUNDING_RATE_PRECISION_EXP = exports.MARK_PRICE_PRECISION_EXP.mul(exports.FUNDING_PAYMENT_PRECISION_EXP);
18
18
  exports.PEG_PRECISION_EXP = new __1.BN(3);
19
19
  exports.AMM_RESERVE_PRECISION_EXP = new __1.BN(13);
20
- exports.BANK_INTEREST_PRECISION_EXP = new __1.BN(6);
21
- exports.BANK_INTEREST_PRECISION = new __1.BN(10).pow(exports.BANK_INTEREST_PRECISION_EXP);
22
- exports.BANK_CUMULATIVE_INTEREST_PRECISION_EXP = new __1.BN(10);
23
- exports.BANK_CUMULATIVE_INTEREST_PRECISION = new __1.BN(10).pow(exports.BANK_CUMULATIVE_INTEREST_PRECISION_EXP);
24
- exports.BANK_UTILIZATION_PRECISION = new __1.BN(1000000);
25
- exports.BANK_RATE_PRECISION = new __1.BN(1000000);
26
- exports.BANK_WEIGHT_PRECISION = new __1.BN(100);
27
- exports.BANK_BALANCE_PRECISION_EXP = new __1.BN(6);
28
- exports.BANK_BALANCE_PRECISION = new __1.BN(10).pow(exports.BANK_BALANCE_PRECISION_EXP);
29
- exports.BANK_IMF_PRECISION_EXP = new __1.BN(6);
30
- exports.BANK_IMF_PRECISION = new __1.BN(10).pow(exports.BANK_IMF_PRECISION_EXP);
20
+ exports.SPOT_MARKET_INTEREST_PRECISION_EXP = new __1.BN(6);
21
+ exports.SPOT_MARKET_INTEREST_PRECISION = new __1.BN(10).pow(exports.SPOT_MARKET_INTEREST_PRECISION_EXP);
22
+ exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP = new __1.BN(10);
23
+ exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION = new __1.BN(10).pow(exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP);
24
+ exports.SPOT_MARKET_UTILIZATION_PRECISION = new __1.BN(1000000);
25
+ exports.SPOT_MARKET_RATE_PRECISION = new __1.BN(1000000);
26
+ exports.SPOT_MARKET_WEIGHT_PRECISION = new __1.BN(10000);
27
+ exports.SPOT_MARKET_BALANCE_PRECISION_EXP = new __1.BN(6);
28
+ exports.SPOT_MARKET_BALANCE_PRECISION = new __1.BN(10).pow(exports.SPOT_MARKET_BALANCE_PRECISION_EXP);
29
+ exports.SPOT_MARKET_IMF_PRECISION_EXP = new __1.BN(6);
30
+ exports.SPOT_MARKET_IMF_PRECISION = new __1.BN(10).pow(exports.SPOT_MARKET_IMF_PRECISION_EXP);
31
31
  exports.LIQUIDATION_FEE_PRECISION = new __1.BN(1000000);
32
32
  exports.QUOTE_PRECISION = new __1.BN(10).pow(exports.QUOTE_PRECISION_EXP);
33
33
  exports.MARK_PRICE_PRECISION = new __1.BN(10).pow(exports.MARK_PRICE_PRECISION_EXP);
@@ -43,6 +43,6 @@ exports.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO = exports.AMM_RESERVE_PRECISION.m
43
43
  exports.MARGIN_PRECISION = exports.TEN_THOUSAND;
44
44
  exports.BID_ASK_SPREAD_PRECISION = new __1.BN(1000000);
45
45
  exports.ONE_YEAR = new __1.BN(31536000);
46
- exports.QUOTE_ASSET_BANK_INDEX = new __1.BN(0);
46
+ exports.QUOTE_SPOT_MARKET_INDEX = new __1.BN(0);
47
47
  exports.LAMPORTS_PRECISION = new __1.BN(web3_js_1.LAMPORTS_PER_SOL);
48
48
  exports.LAMPORTS_EXP = new __1.BN(Math.log10(web3_js_1.LAMPORTS_PER_SOL));
@@ -2,7 +2,7 @@
2
2
  import { BN, OracleSource } from '../';
3
3
  import { DriftEnv } from '../';
4
4
  import { PublicKey } from '@solana/web3.js';
5
- export declare type MarketConfig = {
5
+ export declare type PerpMarketConfig = {
6
6
  fullName?: string;
7
7
  category?: string[];
8
8
  symbol: string;
@@ -12,8 +12,8 @@ export declare type MarketConfig = {
12
12
  oracle: PublicKey;
13
13
  oracleSource: OracleSource;
14
14
  };
15
- export declare const DevnetMarkets: MarketConfig[];
16
- export declare const MainnetMarkets: MarketConfig[];
17
- export declare const Markets: {
18
- [key in DriftEnv]: MarketConfig[];
15
+ export declare const DevnetPerpMarkets: PerpMarketConfig[];
16
+ export declare const MainnetMarkets: PerpMarketConfig[];
17
+ export declare const PerpMarkets: {
18
+ [key in DriftEnv]: PerpMarketConfig[];
19
19
  };
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Markets = exports.MainnetMarkets = exports.DevnetMarkets = void 0;
3
+ exports.PerpMarkets = exports.MainnetMarkets = exports.DevnetPerpMarkets = void 0;
4
4
  const __1 = require("../");
5
5
  const web3_js_1 = require("@solana/web3.js");
6
- exports.DevnetMarkets = [
6
+ exports.DevnetPerpMarkets = [
7
7
  {
8
8
  fullName: 'Solana',
9
9
  category: ['L1', 'Infra'],
@@ -36,7 +36,7 @@ exports.DevnetMarkets = [
36
36
  },
37
37
  ];
38
38
  exports.MainnetMarkets = [];
39
- exports.Markets = {
40
- devnet: exports.DevnetMarkets,
39
+ exports.PerpMarkets = {
40
+ devnet: exports.DevnetPerpMarkets,
41
41
  'mainnet-beta': [],
42
42
  };
@@ -1,9 +1,9 @@
1
1
  /// <reference types="bn.js" />
2
2
  import { PublicKey } from '@solana/web3.js';
3
3
  import { BN, DriftEnv, OracleSource } from '../';
4
- export declare type BankConfig = {
4
+ export declare type SpotMarketConfig = {
5
5
  symbol: string;
6
- bankIndex: BN;
6
+ marketIndex: BN;
7
7
  oracle: PublicKey;
8
8
  mint: PublicKey;
9
9
  oracleSource: OracleSource;
@@ -11,8 +11,8 @@ export declare type BankConfig = {
11
11
  precisionExp: BN;
12
12
  };
13
13
  export declare const WRAPPED_SOL_MINT: PublicKey;
14
- export declare const DevnetBanks: BankConfig[];
15
- export declare const MainnetBanks: BankConfig[];
16
- export declare const Banks: {
17
- [key in DriftEnv]: BankConfig[];
14
+ export declare const DevnetSpotMarkets: SpotMarketConfig[];
15
+ export declare const MainnetSpotMarkets: SpotMarketConfig[];
16
+ export declare const SpotMarkets: {
17
+ [key in DriftEnv]: SpotMarketConfig[];
18
18
  };
@@ -1,23 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Banks = exports.MainnetBanks = exports.DevnetBanks = exports.WRAPPED_SOL_MINT = void 0;
3
+ exports.SpotMarkets = exports.MainnetSpotMarkets = exports.DevnetSpotMarkets = exports.WRAPPED_SOL_MINT = void 0;
4
4
  const web3_js_1 = require("@solana/web3.js");
5
5
  const __1 = require("../");
6
6
  const numericConstants_1 = require("./numericConstants");
7
7
  exports.WRAPPED_SOL_MINT = new web3_js_1.PublicKey('So11111111111111111111111111111111111111112');
8
- exports.DevnetBanks = [
8
+ exports.DevnetSpotMarkets = [
9
9
  {
10
10
  symbol: 'USDC',
11
- bankIndex: new __1.BN(0),
11
+ marketIndex: new __1.BN(0),
12
12
  oracle: web3_js_1.PublicKey.default,
13
13
  oracleSource: __1.OracleSource.QUOTE_ASSET,
14
14
  mint: new web3_js_1.PublicKey('8zGuJQqwhZafTah7Uc7Z4tXRnguqkn5KLFAP8oV6PHe2'),
15
- precision: numericConstants_1.BANK_BALANCE_PRECISION,
16
- precisionExp: numericConstants_1.BANK_BALANCE_PRECISION_EXP,
15
+ precision: numericConstants_1.SPOT_MARKET_BALANCE_PRECISION,
16
+ precisionExp: numericConstants_1.SPOT_MARKET_BALANCE_PRECISION_EXP,
17
17
  },
18
18
  {
19
19
  symbol: 'SOL',
20
- bankIndex: new __1.BN(1),
20
+ marketIndex: new __1.BN(1),
21
21
  oracle: new web3_js_1.PublicKey('J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix'),
22
22
  oracleSource: __1.OracleSource.PYTH,
23
23
  mint: new web3_js_1.PublicKey(exports.WRAPPED_SOL_MINT),
@@ -26,26 +26,26 @@ exports.DevnetBanks = [
26
26
  },
27
27
  {
28
28
  symbol: 'BTC',
29
- bankIndex: new __1.BN(2),
29
+ marketIndex: new __1.BN(2),
30
30
  oracle: new web3_js_1.PublicKey('HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J'),
31
31
  oracleSource: __1.OracleSource.PYTH,
32
32
  mint: new web3_js_1.PublicKey('3BZPwbcqB5kKScF3TEXxwNfx5ipV13kbRVDvfVp5c6fv'),
33
- precision: numericConstants_1.BANK_BALANCE_PRECISION,
34
- precisionExp: numericConstants_1.BANK_BALANCE_PRECISION_EXP,
33
+ precision: numericConstants_1.SPOT_MARKET_BALANCE_PRECISION,
34
+ precisionExp: numericConstants_1.SPOT_MARKET_BALANCE_PRECISION_EXP,
35
35
  },
36
36
  ];
37
- exports.MainnetBanks = [
37
+ exports.MainnetSpotMarkets = [
38
38
  {
39
39
  symbol: 'USDC',
40
- bankIndex: new __1.BN(0),
40
+ marketIndex: new __1.BN(0),
41
41
  oracle: web3_js_1.PublicKey.default,
42
42
  oracleSource: __1.OracleSource.QUOTE_ASSET,
43
43
  mint: new web3_js_1.PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'),
44
- precision: numericConstants_1.BANK_BALANCE_PRECISION,
45
- precisionExp: numericConstants_1.BANK_BALANCE_PRECISION_EXP,
44
+ precision: numericConstants_1.SPOT_MARKET_BALANCE_PRECISION,
45
+ precisionExp: numericConstants_1.SPOT_MARKET_BALANCE_PRECISION_EXP,
46
46
  },
47
47
  ];
48
- exports.Banks = {
49
- devnet: exports.DevnetBanks,
50
- 'mainnet-beta': exports.MainnetBanks,
48
+ exports.SpotMarkets = {
49
+ devnet: exports.DevnetSpotMarkets,
50
+ 'mainnet-beta': exports.MainnetSpotMarkets,
51
51
  };
@@ -15,10 +15,12 @@ export declare class EventSubscriber {
15
15
  private awaitTxResolver;
16
16
  private logProvider;
17
17
  eventEmitter: StrictEventEmitter<EventEmitter, EventSubscriberEvents>;
18
+ private lastSeenSlot;
19
+ lastSeenTxSig: string;
18
20
  constructor(connection: Connection, program: Program, options?: EventSubscriptionOptions);
19
- subscribe(): boolean;
21
+ subscribe(): Promise<boolean>;
20
22
  private handleTxLogs;
21
- private fetchPreviousTx;
23
+ fetchPreviousTx(fetchMax?: boolean): Promise<void>;
22
24
  unsubscribe(): Promise<boolean>;
23
25
  private parseEventsFromLogs;
24
26
  awaitTx(txSig: TransactionSignature): Promise<void>;
@@ -30,17 +30,21 @@ class EventSubscriber {
30
30
  this.logProvider = new pollingLogProvider_1.PollingLogProvider(this.connection, this.program.programId, options.commitment, this.options.logProviderConfig.frequency);
31
31
  }
32
32
  }
33
- subscribe() {
34
- if (this.logProvider.isSubscribed()) {
33
+ async subscribe() {
34
+ try {
35
+ if (this.logProvider.isSubscribed()) {
36
+ return true;
37
+ }
38
+ this.logProvider.subscribe((txSig, slot, logs) => {
39
+ this.handleTxLogs(txSig, slot, logs);
40
+ }, true);
35
41
  return true;
36
42
  }
37
- this.fetchPreviousTx().catch((e) => {
43
+ catch (e) {
38
44
  console.error('Error fetching previous txs in event subscriber');
39
45
  console.error(e);
40
- });
41
- return this.logProvider.subscribe((txSig, slot, logs) => {
42
- this.handleTxLogs(txSig, slot, logs);
43
- });
46
+ return false;
47
+ }
44
48
  }
45
49
  handleTxLogs(txSig, slot, logs) {
46
50
  if (this.txEventCache.has(txSig)) {
@@ -56,10 +60,13 @@ class EventSubscriber {
56
60
  this.awaitTxResolver.get(txSig)();
57
61
  this.awaitTxResolver.delete(txSig);
58
62
  }
63
+ if (slot > this.lastSeenSlot) {
64
+ this.lastSeenTxSig = txSig;
65
+ }
59
66
  this.txEventCache.add(txSig, wrappedEvents);
60
67
  }
61
- async fetchPreviousTx() {
62
- if (!this.options.untilTx) {
68
+ async fetchPreviousTx(fetchMax) {
69
+ if (!this.options.untilTx && !fetchMax) {
63
70
  return;
64
71
  }
65
72
  let txFetched = 0;
@@ -1,4 +1,6 @@
1
+ import { Program } from '@project-serum/anchor';
1
2
  import { Connection, Finality, PublicKey, TransactionSignature } from '@solana/web3.js';
3
+ import { WrappedEvents } from './types';
2
4
  declare type Log = {
3
5
  txSig: TransactionSignature;
4
6
  slot: number;
@@ -7,7 +9,14 @@ declare type Log = {
7
9
  declare type FetchLogsResponse = {
8
10
  earliestTx: string;
9
11
  mostRecentTx: string;
12
+ earliestSlot: number;
13
+ mostRecentSlot: number;
10
14
  transactionLogs: Log[];
11
15
  };
12
- export declare function fetchLogs(connection: Connection, programId: PublicKey, finality: Finality, beforeTx?: TransactionSignature, untilTx?: TransactionSignature): Promise<FetchLogsResponse | undefined>;
16
+ export declare function fetchLogs(connection: Connection, programId: PublicKey, finality: Finality, beforeTx?: TransactionSignature, untilTx?: TransactionSignature, limit?: number): Promise<FetchLogsResponse>;
17
+ export declare class LogParser {
18
+ private program;
19
+ constructor(program: Program);
20
+ parseEventsFromLogs(event: Log): WrappedEvents;
21
+ }
13
22
  export {};
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchLogs = void 0;
4
- async function fetchLogs(connection, programId, finality, beforeTx, untilTx) {
3
+ exports.LogParser = exports.fetchLogs = void 0;
4
+ async function fetchLogs(connection, programId, finality, beforeTx, untilTx, limit) {
5
5
  const signatures = await connection.getSignaturesForAddress(programId, {
6
6
  before: beforeTx,
7
7
  until: untilTx,
8
+ limit,
8
9
  }, finality);
9
- const sortedSignatures = signatures.sort((a, b) => a.slot < b.slot ? -1 : 1);
10
+ const sortedSignatures = signatures.sort((a, b) => a.slot === b.slot ? 0 : a.slot < b.slot ? -1 : 1);
10
11
  const filteredSignatures = sortedSignatures.filter((signature) => !signature.err);
11
12
  if (filteredSignatures.length === 0) {
12
13
  return undefined;
@@ -22,12 +23,14 @@ async function fetchLogs(connection, programId, finality, beforeTx, untilTx) {
22
23
  };
23
24
  });
24
25
  }))).flat();
25
- const earliestTx = filteredSignatures[0].signature;
26
- const mostRecentTx = filteredSignatures[filteredSignatures.length - 1].signature;
26
+ const earliest = filteredSignatures[0];
27
+ const mostRecent = filteredSignatures[filteredSignatures.length - 1];
27
28
  return {
28
29
  transactionLogs: transactionLogs,
29
- earliestTx: earliestTx,
30
- mostRecentTx: mostRecentTx,
30
+ earliestTx: earliest.signature,
31
+ mostRecentTx: mostRecent.signature,
32
+ earliestSlot: earliest.slot,
33
+ mostRecentSlot: mostRecent.slot,
31
34
  };
32
35
  }
33
36
  exports.fetchLogs = fetchLogs;
@@ -37,3 +40,20 @@ function chunk(array, size) {
37
40
  .map((_, index) => index * size)
38
41
  .map((begin) => array.slice(begin, begin + size));
39
42
  }
43
+ class LogParser {
44
+ constructor(program) {
45
+ this.program = program;
46
+ }
47
+ parseEventsFromLogs(event) {
48
+ const records = [];
49
+ // @ts-ignore
50
+ this.program._events._eventParser.parseLogs(event.logs, (eventLog) => {
51
+ eventLog.data.txSig = event.txSig;
52
+ eventLog.data.slot = event.slot;
53
+ eventLog.data.eventType = eventLog.name;
54
+ records.push(eventLog.data);
55
+ });
56
+ return records;
57
+ }
58
+ }
59
+ exports.LogParser = LogParser;
@@ -8,8 +8,9 @@ export declare class PollingLogProvider implements LogProvider {
8
8
  private intervalId;
9
9
  private mostRecentSeenTx?;
10
10
  private mutex;
11
+ private firstFetch;
11
12
  constructor(connection: Connection, programId: PublicKey, commitment: Commitment, frequency?: number);
12
- subscribe(callback: logProviderCallback): boolean;
13
+ subscribe(callback: logProviderCallback, skipHistory?: boolean): boolean;
13
14
  isSubscribed(): boolean;
14
15
  unsubscribe(): Promise<boolean>;
15
16
  }
@@ -7,9 +7,10 @@ class PollingLogProvider {
7
7
  this.connection = connection;
8
8
  this.programId = programId;
9
9
  this.frequency = frequency;
10
+ this.firstFetch = true;
10
11
  this.finality = commitment === 'finalized' ? 'finalized' : 'confirmed';
11
12
  }
12
- subscribe(callback) {
13
+ subscribe(callback, skipHistory) {
13
14
  if (this.intervalId) {
14
15
  return true;
15
16
  }
@@ -19,7 +20,10 @@ class PollingLogProvider {
19
20
  }
20
21
  this.mutex = 1;
21
22
  try {
22
- const response = await (0, fetchLogs_1.fetchLogs)(this.connection, this.programId, this.finality, undefined, this.mostRecentSeenTx);
23
+ const response = await (0, fetchLogs_1.fetchLogs)(this.connection, this.programId, this.finality, undefined, this.mostRecentSeenTx,
24
+ // If skipping history, only fetch one log back, not the maximum amount available
25
+ skipHistory && this.firstFetch ? 1 : undefined);
26
+ this.firstFetch = false;
23
27
  if (response === undefined) {
24
28
  return;
25
29
  }
@@ -1,5 +1,5 @@
1
1
  import { Commitment, TransactionSignature } from '@solana/web3.js';
2
- import { DepositRecord, FundingPaymentRecord, FundingRateRecord, LiquidationRecord, NewUserRecord, OrderActionRecord, OrderRecord, SettlePnlRecord } from '../index';
2
+ import { DepositRecord, FundingPaymentRecord, FundingRateRecord, LiquidationRecord, NewUserRecord, OrderActionRecord, OrderRecord, SettlePnlRecord, LPRecord, InsuranceFundRecord } from '../index';
3
3
  export declare type EventSubscriptionOptions = {
4
4
  eventTypes?: EventType[];
5
5
  maxEventsPerType?: number;
@@ -30,6 +30,8 @@ export declare type EventMap = {
30
30
  OrderActionRecord: Event<OrderActionRecord>;
31
31
  SettlePnlRecord: Event<SettlePnlRecord>;
32
32
  NewUserRecord: Event<NewUserRecord>;
33
+ LPRecord: Event<LPRecord>;
34
+ InsuranceFundRecord: Event<InsuranceFundRecord>;
33
35
  };
34
36
  export declare type EventType = keyof EventMap;
35
37
  export interface EventSubscriberEvents {
@@ -39,7 +41,7 @@ export declare type SortFn = (currentRecord: EventMap[EventType], newRecord: Eve
39
41
  export declare type logProviderCallback = (txSig: TransactionSignature, slot: number, logs: string[]) => void;
40
42
  export interface LogProvider {
41
43
  isSubscribed(): boolean;
42
- subscribe(callback: logProviderCallback): boolean;
44
+ subscribe(callback: logProviderCallback, skipHistory?: boolean): boolean;
43
45
  unsubscribe(): Promise<boolean>;
44
46
  }
45
47
  export declare type WebSocketLogProviderConfig = {
@@ -11,6 +11,8 @@ exports.DefaultEventSubscriptionOptions = {
11
11
  'FundingRateRecord',
12
12
  'NewUserRecord',
13
13
  'SettlePnlRecord',
14
+ 'LPRecord',
15
+ 'InsuranceFundRecord',
14
16
  ],
15
17
  maxEventsPerType: 4096,
16
18
  orderBy: 'blockchain',
@@ -6,14 +6,15 @@ const __1 = require("..");
6
6
  const spl_token_1 = require("@solana/spl-token");
7
7
  const web3_js_1 = require("@solana/web3.js");
8
8
  const __2 = require("..");
9
- const banks_1 = require("../constants/banks");
9
+ const spotMarkets_1 = require("../constants/spotMarkets");
10
10
  const getTokenAddress = (mintAddress, userPubKey) => {
11
11
  return spl_token_1.Token.getAssociatedTokenAddress(new web3_js_1.PublicKey(`ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL`), spl_token_1.TOKEN_PROGRAM_ID, new web3_js_1.PublicKey(mintAddress), new web3_js_1.PublicKey(userPubKey));
12
12
  };
13
13
  exports.getTokenAddress = getTokenAddress;
14
+ const cluster = 'devnet';
14
15
  const main = async () => {
15
16
  // Initialize Drift SDK
16
- const sdkConfig = (0, __2.initialize)({ env: 'devnet' });
17
+ const sdkConfig = (0, __2.initialize)({ env: cluster });
17
18
  // Set up the Wallet and Provider
18
19
  const privateKey = process.env.BOT_PRIVATE_KEY; // stored as an array string
19
20
  const keypair = web3_js_1.Keypair.fromSecretKey(Uint8Array.from(JSON.parse(privateKey)));
@@ -30,32 +31,43 @@ const main = async () => {
30
31
  const usdcTokenAddress = await (0, exports.getTokenAddress)(sdkConfig.USDC_MINT_ADDRESS, wallet.publicKey.toString());
31
32
  // Set up the Drift Clearing House
32
33
  const clearingHousePublicKey = new web3_js_1.PublicKey(sdkConfig.CLEARING_HOUSE_PROGRAM_ID);
34
+ const bulkAccountLoader = new __2.BulkAccountLoader(connection, 'confirmed', 1000);
33
35
  const clearingHouse = new __2.ClearingHouse({
34
36
  connection,
35
37
  wallet: provider.wallet,
36
38
  programID: clearingHousePublicKey,
39
+ perpMarketIndexes: __2.PerpMarkets[cluster].map((market) => market.marketIndex),
40
+ spotMarketIndexes: spotMarkets_1.SpotMarkets[cluster].map((spotMarket) => spotMarket.marketIndex),
41
+ accountSubscription: {
42
+ type: 'polling',
43
+ accountLoader: bulkAccountLoader,
44
+ },
37
45
  });
38
46
  await clearingHouse.subscribe();
39
47
  // Set up Clearing House user client
40
48
  const user = new __2.ClearingHouseUser({
41
49
  clearingHouse,
42
50
  userAccountPublicKey: await clearingHouse.getUserAccountPublicKey(),
51
+ accountSubscription: {
52
+ type: 'polling',
53
+ accountLoader: bulkAccountLoader,
54
+ },
43
55
  });
44
56
  //// Check if clearing house account exists for the current wallet
45
57
  const userAccountExists = await user.exists();
46
58
  if (!userAccountExists) {
47
59
  //// Create a Clearing House account by Depositing some USDC ($10,000 in this case)
48
60
  const depositAmount = new anchor_1.BN(10000).mul(__2.QUOTE_PRECISION);
49
- await clearingHouse.initializeUserAccountAndDepositCollateral(depositAmount, await (0, exports.getTokenAddress)(usdcTokenAddress.toString(), wallet.publicKey.toString()), banks_1.Banks['devnet'][0].bankIndex);
61
+ await clearingHouse.initializeUserAccountAndDepositCollateral(depositAmount, await (0, exports.getTokenAddress)(usdcTokenAddress.toString(), wallet.publicKey.toString()), spotMarkets_1.SpotMarkets['devnet'][0].marketIndex);
50
62
  }
51
63
  await user.subscribe();
52
64
  // Get current price
53
- const solMarketInfo = sdkConfig.MARKETS.find((market) => market.baseAssetSymbol === 'SOL');
54
- const currentMarketPrice = (0, __2.calculateMarkPrice)(clearingHouse.getMarketAccount(solMarketInfo.marketIndex), undefined);
65
+ const solMarketInfo = sdkConfig.PERP_MARKETS.find((market) => market.baseAssetSymbol === 'SOL');
66
+ const currentMarketPrice = (0, __2.calculateMarkPrice)(clearingHouse.getPerpMarketAccount(solMarketInfo.marketIndex), undefined);
55
67
  const formattedPrice = (0, __2.convertToNumber)(currentMarketPrice, __2.MARK_PRICE_PRECISION);
56
68
  console.log(`Current Market Price is $${formattedPrice}`);
57
69
  // Estimate the slippage for a $5000 LONG trade
58
- const solMarketAccount = clearingHouse.getMarketAccount(solMarketInfo.marketIndex);
70
+ const solMarketAccount = clearingHouse.getPerpMarketAccount(solMarketInfo.marketIndex);
59
71
  const longAmount = new anchor_1.BN(5000).mul(__2.QUOTE_PRECISION);
60
72
  const slippage = (0, __2.convertToNumber)((0, __2.calculateTradeSlippage)(__2.PositionDirection.LONG, longAmount, solMarketAccount, 'quote', undefined)[0], __2.MARK_PRICE_PRECISION);
61
73
  console.log(`Slippage for a $5000 LONG on the SOL market would be $${slippage}`);