@drift-labs/sdk 2.86.0-beta.1 → 2.86.0-beta.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.
package/VERSION CHANGED
@@ -1 +1 @@
1
- 2.86.0-beta.1
1
+ 2.86.0-beta.10
@@ -47,7 +47,7 @@ class PollingDriftClientAccountSubscriber {
47
47
  this.oracleInfos = oracleInfos;
48
48
  }
49
49
  await this.updateAccountsToPoll();
50
- await this.updateOraclesToPoll();
50
+ this.updateOraclesToPoll();
51
51
  await this.addToAccountLoader();
52
52
  let subscriptionSucceeded = false;
53
53
  let retries = 0;
@@ -59,8 +59,7 @@ class PollingDriftClientAccountSubscriber {
59
59
  if (subscriptionSucceeded) {
60
60
  this.eventEmitter.emit('update');
61
61
  }
62
- await this.setPerpOracleMap();
63
- await this.setSpotOracleMap();
62
+ await Promise.all([this.setPerpOracleMap(), this.setSpotOracleMap()]);
64
63
  this.isSubscribing = false;
65
64
  this.isSubscribed = subscriptionSucceeded;
66
65
  this.subscriptionPromiseResolver(subscriptionSucceeded);
@@ -76,13 +75,15 @@ class PollingDriftClientAccountSubscriber {
76
75
  publicKey: statePublicKey,
77
76
  eventType: 'stateAccountUpdate',
78
77
  });
79
- await this.updatePerpMarketAccountsToPoll();
80
- await this.updateSpotMarketAccountsToPoll();
78
+ await Promise.all([
79
+ this.updatePerpMarketAccountsToPoll(),
80
+ this.updateSpotMarketAccountsToPoll(),
81
+ ]);
81
82
  }
82
83
  async updatePerpMarketAccountsToPoll() {
83
- for (const marketIndex of this.perpMarketIndexes) {
84
- await this.addPerpMarketAccountToPoll(marketIndex);
85
- }
84
+ await Promise.all(this.perpMarketIndexes.map((marketIndex) => {
85
+ return this.addPerpMarketAccountToPoll(marketIndex);
86
+ }));
86
87
  return true;
87
88
  }
88
89
  async addPerpMarketAccountToPoll(marketIndex) {
@@ -96,9 +97,9 @@ class PollingDriftClientAccountSubscriber {
96
97
  return true;
97
98
  }
98
99
  async updateSpotMarketAccountsToPoll() {
99
- for (const marketIndex of this.spotMarketIndexes) {
100
+ await Promise.all(this.spotMarketIndexes.map(async (marketIndex) => {
100
101
  await this.addSpotMarketAccountToPoll(marketIndex);
101
- }
102
+ }));
102
103
  return true;
103
104
  }
104
105
  async addSpotMarketAccountToPoll(marketIndex) {
@@ -127,12 +128,15 @@ class PollingDriftClientAccountSubscriber {
127
128
  return true;
128
129
  }
129
130
  async addToAccountLoader() {
131
+ const accountPromises = [];
130
132
  for (const [_, accountToPoll] of this.accountsToPoll) {
131
- await this.addAccountToAccountLoader(accountToPoll);
133
+ accountPromises.push(this.addAccountToAccountLoader(accountToPoll));
132
134
  }
135
+ const oraclePromises = [];
133
136
  for (const [_, oracleToPoll] of this.oraclesToPoll) {
134
- await this.addOracleToAccountLoader(oracleToPoll);
137
+ oraclePromises.push(this.addOracleToAccountLoader(oracleToPoll));
135
138
  }
139
+ await Promise.all([...accountPromises, ...oraclePromises]);
136
140
  this.errorCallbackId = this.accountLoader.addErrorCallbacks((error) => {
137
141
  this.eventEmitter.emit('error', error);
138
142
  });
@@ -284,33 +288,37 @@ class PollingDriftClientAccountSubscriber {
284
288
  }
285
289
  async setPerpOracleMap() {
286
290
  const perpMarkets = this.getMarketAccountsAndSlots();
291
+ const oraclePromises = [];
287
292
  for (const perpMarket of perpMarkets) {
288
293
  const perpMarketAccount = perpMarket.data;
289
294
  const perpMarketIndex = perpMarketAccount.marketIndex;
290
295
  const oracle = perpMarketAccount.amm.oracle;
291
296
  if (!this.oracles.has(oracle.toBase58())) {
292
- await this.addOracle({
297
+ oraclePromises.push(this.addOracle({
293
298
  publicKey: oracle,
294
299
  source: perpMarketAccount.amm.oracleSource,
295
- });
300
+ }));
296
301
  }
297
302
  this.perpOracleMap.set(perpMarketIndex, oracle);
298
303
  }
304
+ await Promise.all(oraclePromises);
299
305
  }
300
306
  async setSpotOracleMap() {
301
307
  const spotMarkets = this.getSpotMarketAccountsAndSlots();
308
+ const oraclePromises = [];
302
309
  for (const spotMarket of spotMarkets) {
303
310
  const spotMarketAccount = spotMarket.data;
304
311
  const spotMarketIndex = spotMarketAccount.marketIndex;
305
312
  const oracle = spotMarketAccount.oracle;
306
313
  if (!this.oracles.has(oracle.toBase58())) {
307
- await this.addOracle({
314
+ oraclePromises.push(this.addOracle({
308
315
  publicKey: oracle,
309
316
  source: spotMarketAccount.oracleSource,
310
- });
317
+ }));
311
318
  }
312
319
  this.spotOracleMap.set(spotMarketIndex, oracle);
313
320
  }
321
+ await Promise.all(oraclePromises);
314
322
  }
315
323
  assertIsSubscribed() {
316
324
  if (!this.isSubscribed) {
@@ -52,24 +52,23 @@ class WebSocketDriftClientAccountSubscriber {
52
52
  this.eventEmitter.emit('stateAccountUpdate', data);
53
53
  this.eventEmitter.emit('update');
54
54
  });
55
- // subscribe to market accounts
56
- await this.subscribeToPerpMarketAccounts();
57
- // subscribe to spot market accounts
58
- await this.subscribeToSpotMarketAccounts();
59
- // subscribe to oracles
60
- await this.subscribeToOracles();
55
+ await Promise.all([
56
+ // subscribe to market accounts
57
+ this.subscribeToPerpMarketAccounts(),
58
+ // subscribe to spot market accounts
59
+ this.subscribeToSpotMarketAccounts(),
60
+ // subscribe to oracles
61
+ this.subscribeToOracles(),
62
+ ]);
61
63
  this.eventEmitter.emit('update');
62
- await this.setPerpOracleMap();
63
- await this.setSpotOracleMap();
64
+ await Promise.all([this.setPerpOracleMap(), this.setSpotOracleMap()]);
64
65
  this.isSubscribing = false;
65
66
  this.isSubscribed = true;
66
67
  this.subscriptionPromiseResolver(true);
67
68
  return true;
68
69
  }
69
70
  async subscribeToPerpMarketAccounts() {
70
- for (const marketIndex of this.perpMarketIndexes) {
71
- await this.subscribeToPerpMarketAccount(marketIndex);
72
- }
71
+ await Promise.all(this.perpMarketIndexes.map((marketIndex) => this.subscribeToPerpMarketAccount(marketIndex)));
73
72
  return true;
74
73
  }
75
74
  async subscribeToPerpMarketAccount(marketIndex) {
@@ -83,9 +82,7 @@ class WebSocketDriftClientAccountSubscriber {
83
82
  return true;
84
83
  }
85
84
  async subscribeToSpotMarketAccounts() {
86
- for (const marketIndex of this.spotMarketIndexes) {
87
- await this.subscribeToSpotMarketAccount(marketIndex);
88
- }
85
+ await Promise.all(this.spotMarketIndexes.map((marketIndex) => this.subscribeToSpotMarketAccount(marketIndex)));
89
86
  return true;
90
87
  }
91
88
  async subscribeToSpotMarketAccount(marketIndex) {
@@ -99,11 +96,9 @@ class WebSocketDriftClientAccountSubscriber {
99
96
  return true;
100
97
  }
101
98
  async subscribeToOracles() {
102
- for (const oracleInfo of this.oracleInfos) {
103
- if (!oracleInfo.publicKey.equals(web3_js_1.PublicKey.default)) {
104
- await this.subscribeToOracle(oracleInfo);
105
- }
106
- }
99
+ await Promise.all(this.oracleInfos
100
+ .filter((oracleInfo) => !oracleInfo.publicKey.equals(web3_js_1.PublicKey.default))
101
+ .map((oracleInfo) => this.subscribeToOracle(oracleInfo)));
107
102
  return true;
108
103
  }
109
104
  async subscribeToOracle(oracleInfo) {
@@ -119,19 +114,13 @@ class WebSocketDriftClientAccountSubscriber {
119
114
  return true;
120
115
  }
121
116
  async unsubscribeFromMarketAccounts() {
122
- for (const accountSubscriber of this.perpMarketAccountSubscribers.values()) {
123
- await accountSubscriber.unsubscribe();
124
- }
117
+ await Promise.all(Array.from(this.perpMarketAccountSubscribers.values()).map((accountSubscriber) => accountSubscriber.unsubscribe()));
125
118
  }
126
119
  async unsubscribeFromSpotMarketAccounts() {
127
- for (const accountSubscriber of this.spotMarketAccountSubscribers.values()) {
128
- await accountSubscriber.unsubscribe();
129
- }
120
+ await Promise.all(Array.from(this.spotMarketAccountSubscribers.values()).map((accountSubscriber) => accountSubscriber.unsubscribe()));
130
121
  }
131
122
  async unsubscribeFromOracles() {
132
- for (const accountSubscriber of this.oracleSubscribers.values()) {
133
- await accountSubscriber.unsubscribe();
134
- }
123
+ await Promise.all(Array.from(this.oracleSubscribers.values()).map((accountSubscriber) => accountSubscriber.unsubscribe()));
135
124
  }
136
125
  async fetch() {
137
126
  if (!this.isSubscribed) {
@@ -179,6 +168,7 @@ class WebSocketDriftClientAccountSubscriber {
179
168
  }
180
169
  async setPerpOracleMap() {
181
170
  const perpMarkets = this.getMarketAccountsAndSlots();
171
+ const addOraclePromises = [];
182
172
  for (const perpMarket of perpMarkets) {
183
173
  if (!perpMarket) {
184
174
  continue;
@@ -187,16 +177,18 @@ class WebSocketDriftClientAccountSubscriber {
187
177
  const perpMarketIndex = perpMarketAccount.marketIndex;
188
178
  const oracle = perpMarketAccount.amm.oracle;
189
179
  if (!this.oracleSubscribers.has(oracle.toBase58())) {
190
- await this.addOracle({
180
+ addOraclePromises.push(this.addOracle({
191
181
  publicKey: oracle,
192
182
  source: perpMarket.data.amm.oracleSource,
193
- });
183
+ }));
194
184
  }
195
185
  this.perpOracleMap.set(perpMarketIndex, oracle);
196
186
  }
187
+ await Promise.all(addOraclePromises);
197
188
  }
198
189
  async setSpotOracleMap() {
199
190
  const spotMarkets = this.getSpotMarketAccountsAndSlots();
191
+ const addOraclePromises = [];
200
192
  for (const spotMarket of spotMarkets) {
201
193
  if (!spotMarket) {
202
194
  continue;
@@ -205,13 +197,14 @@ class WebSocketDriftClientAccountSubscriber {
205
197
  const spotMarketIndex = spotMarketAccount.marketIndex;
206
198
  const oracle = spotMarketAccount.oracle;
207
199
  if (!this.oracleSubscribers.has(oracle.toBase58())) {
208
- await this.addOracle({
200
+ addOraclePromises.push(this.addOracle({
209
201
  publicKey: oracle,
210
202
  source: spotMarketAccount.oracleSource,
211
- });
203
+ }));
212
204
  }
213
205
  this.spotOracleMap.set(spotMarketIndex, oracle);
214
206
  }
207
+ await Promise.all(addOraclePromises);
215
208
  }
216
209
  assertIsSubscribed() {
217
210
  if (!this.isSubscribed) {
@@ -179,6 +179,10 @@ export declare class AdminClient extends DriftClient {
179
179
  getUpdatePrelaunchOracleParamsIx(perpMarketIndex: number, price?: BN, maxPrice?: BN): Promise<TransactionInstruction>;
180
180
  deletePrelaunchOracle(perpMarketIndex: number): Promise<TransactionSignature>;
181
181
  getDeletePrelaunchOracleIx(perpMarketIndex: number, price?: BN, maxPrice?: BN): Promise<TransactionInstruction>;
182
+ updateSpotMarketFuel(spotMarketIndex: number, fuelBoostDeposits?: number, fuelBoostBorrows?: number, fuelBoostTaker?: number, fuelBoostMaker?: number): Promise<TransactionSignature>;
183
+ getUpdateSpotMarketFuelIx(spotMarketIndex: number, fuelBoostDeposits?: number, fuelBoostBorrows?: number, fuelBoostTaker?: number, fuelBoostMaker?: number): Promise<TransactionInstruction>;
184
+ updatePerpMarketFuel(perpMarketIndex: number, fuelBoostTaker?: number, fuelBoostMaker?: number, fuelBoostPosition?: number): Promise<TransactionSignature>;
185
+ getUpdatePerpMarketFuelIx(perpMarketIndex: number, fuelBoostTaker?: number, fuelBoostMaker?: number, fuelBoostPosition?: number): Promise<TransactionInstruction>;
182
186
  initializePythPullOracle(feedId: string): Promise<TransactionSignature>;
183
187
  getInitializePythPullOracleIx(feedId: string): Promise<TransactionInstruction>;
184
188
  }
@@ -1631,6 +1631,42 @@ class AdminClient extends driftClient_1.DriftClient {
1631
1631
  },
1632
1632
  });
1633
1633
  }
1634
+ async updateSpotMarketFuel(spotMarketIndex, fuelBoostDeposits, fuelBoostBorrows, fuelBoostTaker, fuelBoostMaker) {
1635
+ const updateSpotMarketFuelIx = await this.getUpdateSpotMarketFuelIx(spotMarketIndex, fuelBoostDeposits || null, fuelBoostBorrows || null, fuelBoostTaker || null, fuelBoostMaker || null);
1636
+ const tx = await this.buildTransaction(updateSpotMarketFuelIx);
1637
+ const { txSig } = await this.sendTransaction(tx, [], this.opts);
1638
+ return txSig;
1639
+ }
1640
+ async getUpdateSpotMarketFuelIx(spotMarketIndex, fuelBoostDeposits, fuelBoostBorrows, fuelBoostTaker, fuelBoostMaker) {
1641
+ const spotMarketPublicKey = await (0, pda_1.getSpotMarketPublicKey)(this.program.programId, spotMarketIndex);
1642
+ return await this.program.instruction.updateSpotMarketFuel(fuelBoostDeposits || null, fuelBoostBorrows || null, fuelBoostTaker || null, fuelBoostMaker || null, {
1643
+ accounts: {
1644
+ admin: this.isSubscribed
1645
+ ? this.getStateAccount().admin
1646
+ : this.wallet.publicKey,
1647
+ state: await this.getStatePublicKey(),
1648
+ spotMarket: spotMarketPublicKey,
1649
+ },
1650
+ });
1651
+ }
1652
+ async updatePerpMarketFuel(perpMarketIndex, fuelBoostTaker, fuelBoostMaker, fuelBoostPosition) {
1653
+ const updatePerpMarketFuelIx = await this.getUpdatePerpMarketFuelIx(perpMarketIndex, fuelBoostTaker || null, fuelBoostMaker || null, fuelBoostPosition || null);
1654
+ const tx = await this.buildTransaction(updatePerpMarketFuelIx);
1655
+ const { txSig } = await this.sendTransaction(tx, [], this.opts);
1656
+ return txSig;
1657
+ }
1658
+ async getUpdatePerpMarketFuelIx(perpMarketIndex, fuelBoostTaker, fuelBoostMaker, fuelBoostPosition) {
1659
+ const perpMarketPublicKey = await (0, pda_1.getPerpMarketPublicKey)(this.program.programId, perpMarketIndex);
1660
+ return await this.program.instruction.updatePerpMarketFuel(fuelBoostTaker || null, fuelBoostMaker || null, fuelBoostPosition || null, {
1661
+ accounts: {
1662
+ admin: this.isSubscribed
1663
+ ? this.getStateAccount().admin
1664
+ : this.wallet.publicKey,
1665
+ state: await this.getStatePublicKey(),
1666
+ perpMarket: perpMarketPublicKey,
1667
+ },
1668
+ });
1669
+ }
1634
1670
  async initializePythPullOracle(feedId) {
1635
1671
  const initializePythPullOracleIx = await this.getInitializePythPullOracleIx(feedId);
1636
1672
  const tx = await this.buildTransaction(initializePythPullOracleIx);
@@ -65,3 +65,5 @@ export declare const ACCOUNT_AGE_DELETION_CUTOFF_SECONDS: number;
65
65
  export declare const IDLE_TIME_SLOTS = 9000;
66
66
  export declare const SLOT_TIME_ESTIMATE_MS = 400;
67
67
  export declare const DUST_POSITION_SIZE: BN;
68
+ export declare const FUEL_WINDOW: BN;
69
+ export declare const FUEL_START_TS: BN;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  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_RATE_BUFFER_PRECISION = exports.FUNDING_RATE_PRECISION = exports.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_UTILIZATION_PRECISION = exports.SPOT_MARKET_UTILIZATION_PRECISION_EXP = exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION = exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP = exports.SPOT_MARKET_RATE_PRECISION = exports.SPOT_MARKET_RATE_PRECISION_EXP = exports.AMM_RESERVE_PRECISION_EXP = exports.PEG_PRECISION_EXP = exports.FUNDING_RATE_PRECISION_EXP = exports.PRICE_PRECISION_EXP = exports.FUNDING_RATE_BUFFER_PRECISION_EXP = exports.QUOTE_PRECISION_EXP = exports.CONCENTRATION_PRECISION = exports.PERCENTAGE_PRECISION = exports.PERCENTAGE_PRECISION_EXP = exports.MAX_LEVERAGE_ORDER_SIZE = exports.MAX_LEVERAGE = exports.TEN_MILLION = exports.BN_MAX = exports.TEN_THOUSAND = exports.TEN = exports.NINE = exports.EIGHT = exports.SEVEN = exports.SIX = exports.FIVE = exports.FOUR = exports.THREE = exports.TWO = exports.ONE = exports.ZERO = void 0;
4
- exports.DUST_POSITION_SIZE = exports.SLOT_TIME_ESTIMATE_MS = exports.IDLE_TIME_SLOTS = exports.ACCOUNT_AGE_DELETION_CUTOFF_SECONDS = exports.DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT = exports.OPEN_ORDER_MARGIN_REQUIREMENT = exports.LAMPORTS_EXP = exports.LAMPORTS_PRECISION = exports.QUOTE_SPOT_MARKET_INDEX = exports.ONE_YEAR = exports.ONE_HOUR = exports.FIVE_MINUTE = exports.FUNDING_RATE_OFFSET_DENOMINATOR = exports.LIQUIDATION_PCT_PRECISION = exports.BID_ASK_SPREAD_PRECISION = void 0;
4
+ exports.FUEL_START_TS = exports.FUEL_WINDOW = exports.DUST_POSITION_SIZE = exports.SLOT_TIME_ESTIMATE_MS = exports.IDLE_TIME_SLOTS = exports.ACCOUNT_AGE_DELETION_CUTOFF_SECONDS = exports.DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT = exports.OPEN_ORDER_MARGIN_REQUIREMENT = exports.LAMPORTS_EXP = exports.LAMPORTS_PRECISION = exports.QUOTE_SPOT_MARKET_INDEX = exports.ONE_YEAR = exports.ONE_HOUR = exports.FIVE_MINUTE = exports.FUNDING_RATE_OFFSET_DENOMINATOR = exports.LIQUIDATION_PCT_PRECISION = exports.BID_ASK_SPREAD_PRECISION = void 0;
5
5
  const web3_js_1 = require("@solana/web3.js");
6
6
  const __1 = require("../");
7
7
  exports.ZERO = new __1.BN(0);
@@ -69,3 +69,5 @@ exports.ACCOUNT_AGE_DELETION_CUTOFF_SECONDS = 60 * 60 * 24 * 13; // 13 days
69
69
  exports.IDLE_TIME_SLOTS = 9000;
70
70
  exports.SLOT_TIME_ESTIMATE_MS = 400;
71
71
  exports.DUST_POSITION_SIZE = exports.QUOTE_PRECISION.divn(100); // Dust position is any position smaller than 1c
72
+ exports.FUEL_WINDOW = new __1.BN(60 * 60 * 24 * 28); // 28 days
73
+ exports.FUEL_START_TS = new __1.BN(1715745600); // unix timestamp
@@ -279,6 +279,17 @@ exports.DevnetPerpMarkets = [
279
279
  oracleSource: __1.OracleSource.Prelaunch,
280
280
  pythFeedId: '0xb17e5bc5de742a8a378b54c9c75442b7d51e30ada63f28d9bd28d3c0e26511a0',
281
281
  },
282
+ {
283
+ fullName: 'Wen',
284
+ category: ['Solana', 'Meme'],
285
+ symbol: 'WEN-PERP',
286
+ baseAssetSymbol: 'WEN',
287
+ marketIndex: 25,
288
+ oracle: new web3_js_1.PublicKey('F47c7aJgYkfKXQ9gzrJaEpsNwUKHprysregTWXrtYLFp'),
289
+ launchTs: 1720572064000,
290
+ oracleSource: __1.OracleSource.PYTH_1K_PULL,
291
+ pythFeedId: '0x5169491cd7e2a44c98353b779d5eb612e4ac32e073f5cc534303d86307c2f1bc',
292
+ },
282
293
  ];
283
294
  exports.MainnetPerpMarkets = [
284
295
  {
@@ -653,6 +664,27 @@ exports.MainnetPerpMarkets = [
653
664
  launchTs: 1719415157000,
654
665
  oracleSource: __1.OracleSource.SWITCHBOARD,
655
666
  },
667
+ {
668
+ fullName: 'POPCAT',
669
+ category: ['Meme', 'Solana'],
670
+ symbol: 'POPCAT-PERP',
671
+ baseAssetSymbol: 'POPCAT',
672
+ marketIndex: 34,
673
+ oracle: new web3_js_1.PublicKey('3GjpjC8TWsPqjyFSiR7saGxgzD8zqYJNsBnWpenZPEBy'),
674
+ launchTs: 1720013054000,
675
+ oracleSource: __1.OracleSource.SWITCHBOARD,
676
+ },
677
+ {
678
+ fullName: 'Wen',
679
+ category: ['Solana', 'Meme'],
680
+ symbol: 'WEN-PERP',
681
+ baseAssetSymbol: 'WEN',
682
+ marketIndex: 35,
683
+ oracle: new web3_js_1.PublicKey('F47c7aJgYkfKXQ9gzrJaEpsNwUKHprysregTWXrtYLFp'),
684
+ launchTs: 1720633344000,
685
+ oracleSource: __1.OracleSource.PYTH_1K_PULL,
686
+ pythFeedId: '0x5169491cd7e2a44c98353b779d5eb612e4ac32e073f5cc534303d86307c2f1bc',
687
+ },
656
688
  ];
657
689
  exports.PerpMarkets = {
658
690
  devnet: exports.DevnetPerpMarkets,
@@ -230,7 +230,7 @@ exports.MainnetSpotMarkets = [
230
230
  {
231
231
  symbol: 'INF',
232
232
  marketIndex: 16,
233
- oracle: new web3_js_1.PublicKey('6AQHz9mpGNjyVafcWdqzzgsJq14Cs8gG6MiQKmdAgCuP'),
233
+ oracle: new web3_js_1.PublicKey('81SuhCcCQri9w4yPyv56ErtpXuncVyFCDT3fYehceG1M'),
234
234
  oracleSource: __1.OracleSource.SWITCHBOARD,
235
235
  mint: new web3_js_1.PublicKey('5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm'),
236
236
  precision: new __1.BN(10).pow(numericConstants_1.NINE),
@@ -268,6 +268,17 @@ exports.MainnetSpotMarkets = [
268
268
  precisionExp: numericConstants_1.SIX,
269
269
  launchTs: 1719415157000,
270
270
  },
271
+ {
272
+ symbol: 'POPCAT',
273
+ marketIndex: 20,
274
+ oracle: new web3_js_1.PublicKey('3GjpjC8TWsPqjyFSiR7saGxgzD8zqYJNsBnWpenZPEBy'),
275
+ oracleSource: __1.OracleSource.SWITCHBOARD,
276
+ mint: new web3_js_1.PublicKey('7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr'),
277
+ precision: new __1.BN(10).pow(numericConstants_1.NINE),
278
+ precisionExp: numericConstants_1.NINE,
279
+ launchTs: 1720013054000,
280
+ phoenixMarket: new web3_js_1.PublicKey('31XgvAQ1HgFQEk31KdszbPkVXKaQqB1bgYZPoDrFpSR2'),
281
+ },
271
282
  ];
272
283
  exports.SpotMarkets = {
273
284
  devnet: exports.DevnetSpotMarkets,