@drift-labs/sdk 2.96.0-beta.2 → 2.96.0-beta.20
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/README.md +1 -0
- package/VERSION +1 -1
- package/bun.lockb +0 -0
- package/lib/accounts/pollingDriftClientAccountSubscriber.d.ts +5 -3
- package/lib/accounts/pollingDriftClientAccountSubscriber.js +24 -1
- package/lib/accounts/types.d.ts +5 -8
- package/lib/accounts/types.js +7 -1
- package/lib/accounts/utils.d.ts +7 -0
- package/lib/accounts/utils.js +33 -1
- package/lib/accounts/webSocketAccountSubscriber.d.ts +1 -1
- package/lib/accounts/webSocketDriftClientAccountSubscriber.d.ts +8 -7
- package/lib/accounts/webSocketDriftClientAccountSubscriber.js +24 -1
- package/lib/accounts/webSocketProgramAccountSubscriber.d.ts +1 -1
- package/lib/config.d.ts +5 -1
- package/lib/config.js +9 -1
- package/lib/constants/perpMarkets.js +21 -0
- package/lib/constants/spotMarkets.js +12 -1
- package/lib/driftClient.d.ts +44 -9
- package/lib/driftClient.js +181 -61
- package/lib/driftClientConfig.d.ts +2 -6
- package/lib/events/eventSubscriber.js +9 -8
- package/lib/events/types.js +1 -5
- package/lib/idl/drift.json +169 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/math/margin.d.ts +16 -1
- package/lib/math/margin.js +67 -1
- package/lib/orderParams.js +8 -8
- package/lib/orderSubscriber/OrderSubscriber.d.ts +1 -2
- package/lib/orderSubscriber/OrderSubscriber.js +4 -19
- package/lib/orderSubscriber/types.d.ts +0 -9
- package/lib/tokenFaucet.js +2 -1
- package/lib/tx/baseTxSender.js +2 -2
- package/lib/tx/fastSingleTxSender.js +2 -2
- package/lib/tx/forwardOnlyTxSender.js +2 -2
- package/lib/tx/retryTxSender.js +2 -2
- package/lib/tx/txHandler.js +10 -7
- package/lib/tx/whileValidTxSender.d.ts +2 -4
- package/lib/tx/whileValidTxSender.js +16 -17
- package/lib/types.d.ts +21 -1
- package/lib/types.js +6 -1
- package/lib/user.d.ts +4 -1
- package/lib/user.js +13 -13
- package/lib/userConfig.d.ts +1 -6
- package/lib/userMap/userMap.js +0 -14
- package/lib/userMap/userMapConfig.d.ts +0 -7
- package/lib/userStatsConfig.d.ts +0 -6
- package/lib/util/TransactionConfirmationManager.d.ts +14 -0
- package/lib/util/TransactionConfirmationManager.js +96 -0
- package/package.json +4 -5
- package/src/accounts/pollingDriftClientAccountSubscriber.ts +41 -5
- package/src/accounts/types.ts +6 -9
- package/src/accounts/utils.ts +42 -0
- package/src/accounts/webSocketAccountSubscriber.ts +1 -1
- package/src/accounts/webSocketDriftClientAccountSubscriber.ts +43 -8
- package/src/accounts/webSocketProgramAccountSubscriber.ts +1 -1
- package/src/config.ts +15 -1
- package/src/constants/perpMarkets.ts +22 -0
- package/src/constants/spotMarkets.ts +14 -1
- package/src/driftClient.ts +423 -91
- package/src/driftClientConfig.ts +2 -7
- package/src/events/eventSubscriber.ts +18 -11
- package/src/events/types.ts +1 -5
- package/src/idl/drift.json +169 -1
- package/src/index.ts +1 -0
- package/src/math/margin.ts +137 -1
- package/src/orderParams.ts +20 -12
- package/src/orderSubscriber/OrderSubscriber.ts +1 -15
- package/src/orderSubscriber/types.ts +0 -10
- package/src/tokenFaucet.ts +2 -2
- package/src/tx/baseTxSender.ts +2 -2
- package/src/tx/fastSingleTxSender.ts +2 -2
- package/src/tx/forwardOnlyTxSender.ts +2 -2
- package/src/tx/retryTxSender.ts +2 -2
- package/src/tx/txHandler.ts +8 -2
- package/src/tx/whileValidTxSender.ts +23 -26
- package/src/types.ts +30 -1
- package/src/user.ts +35 -13
- package/src/userConfig.ts +1 -7
- package/src/userMap/userMap.ts +1 -17
- package/src/userMap/userMapConfig.ts +0 -8
- package/src/userStatsConfig.ts +0 -7
- package/src/util/TransactionConfirmationManager.ts +155 -0
- package/tests/ci/idl.ts +12 -3
- package/tests/ci/verifyConstants.ts +13 -0
- package/tests/tx/TransactionConfirmationManager.test.ts +286 -0
- package/lib/accounts/grpcAccountSubscriber.d.ts +0 -16
- package/lib/accounts/grpcAccountSubscriber.js +0 -155
- package/lib/accounts/grpcDriftClientAccountSubscriber.d.ts +0 -13
- package/lib/accounts/grpcDriftClientAccountSubscriber.js +0 -96
- package/lib/accounts/grpcInsuranceFundStakeAccountSubscriber.d.ts +0 -10
- package/lib/accounts/grpcInsuranceFundStakeAccountSubscriber.js +0 -30
- package/lib/accounts/grpcProgramAccountSubscriber.d.ts +0 -19
- package/lib/accounts/grpcProgramAccountSubscriber.js +0 -161
- package/lib/accounts/grpcUserAccountSubscriber.d.ts +0 -10
- package/lib/accounts/grpcUserAccountSubscriber.js +0 -28
- package/lib/accounts/grpcUserStatsAccountSubscriber.d.ts +0 -10
- package/lib/accounts/grpcUserStatsAccountSubscriber.js +0 -28
- package/lib/orderSubscriber/grpcSubscription.d.ts +0 -25
- package/lib/orderSubscriber/grpcSubscription.js +0 -68
- package/lib/userMap/grpcSubscription.d.ts +0 -26
- package/lib/userMap/grpcSubscription.js +0 -42
- package/src/accounts/grpcAccountSubscriber.ts +0 -158
- package/src/accounts/grpcDriftClientAccountSubscriber.ts +0 -196
- package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +0 -62
- package/src/accounts/grpcProgramAccountSubscriber.ts +0 -181
- package/src/accounts/grpcUserAccountSubscriber.ts +0 -48
- package/src/accounts/grpcUserStatsAccountSubscriber.ts +0 -51
- package/src/orderSubscriber/grpcSubscription.ts +0 -126
- package/src/userMap/grpcSubscription.ts +0 -83
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
DriftClientAccountEvents,
|
|
2
|
+
AccountSubscriber,
|
|
4
3
|
DataAndSlot,
|
|
4
|
+
DelistedMarketSetting,
|
|
5
|
+
DriftClientAccountEvents,
|
|
6
|
+
DriftClientAccountSubscriber,
|
|
7
|
+
NotSubscribedError,
|
|
5
8
|
ResubOpts,
|
|
6
9
|
} from './types';
|
|
7
|
-
import {
|
|
8
|
-
import { SpotMarketAccount, PerpMarketAccount, StateAccount } from '../types';
|
|
10
|
+
import { PerpMarketAccount, SpotMarketAccount, StateAccount } from '../types';
|
|
9
11
|
import { Program } from '@coral-xyz/anchor';
|
|
10
12
|
import StrictEventEmitter from 'strict-event-emitter-types';
|
|
11
13
|
import { EventEmitter } from 'events';
|
|
12
14
|
import {
|
|
13
15
|
getDriftStateAccountPublicKey,
|
|
14
|
-
getSpotMarketPublicKey,
|
|
15
16
|
getPerpMarketPublicKey,
|
|
16
17
|
getPerpMarketPublicKeySync,
|
|
18
|
+
getSpotMarketPublicKey,
|
|
17
19
|
getSpotMarketPublicKeySync,
|
|
18
20
|
} from '../addresses/pda';
|
|
19
21
|
import { WebSocketAccountSubscriber } from './webSocketAccountSubscriber';
|
|
@@ -23,6 +25,7 @@ import { OracleClientCache } from '../oracles/oracleClientCache';
|
|
|
23
25
|
import * as Buffer from 'buffer';
|
|
24
26
|
import { QUOTE_ORACLE_PRICE_DATA } from '../oracles/quoteAssetOracleClient';
|
|
25
27
|
import { findAllMarketAndOracles } from '../config';
|
|
28
|
+
import { findDelistedPerpMarketsAndOracles } from './utils';
|
|
26
29
|
|
|
27
30
|
const ORACLE_DEFAULT_KEY = PublicKey.default.toBase58();
|
|
28
31
|
|
|
@@ -55,14 +58,15 @@ export class WebSocketDriftClientAccountSubscriber
|
|
|
55
58
|
spotOracleMap = new Map<number, PublicKey>();
|
|
56
59
|
spotOracleStringMap = new Map<number, string>();
|
|
57
60
|
oracleSubscribers = new Map<string, AccountSubscriber<OraclePriceData>>();
|
|
61
|
+
delistedMarketSetting: DelistedMarketSetting;
|
|
58
62
|
|
|
59
63
|
initialPerpMarketAccountData: Map<number, PerpMarketAccount>;
|
|
60
64
|
initialSpotMarketAccountData: Map<number, SpotMarketAccount>;
|
|
61
65
|
initialOraclePriceData: Map<string, OraclePriceData>;
|
|
62
66
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
private isSubscribing = false;
|
|
68
|
+
private subscriptionPromise: Promise<boolean>;
|
|
69
|
+
private subscriptionPromiseResolver: (val: boolean) => void;
|
|
66
70
|
|
|
67
71
|
public constructor(
|
|
68
72
|
program: Program,
|
|
@@ -70,6 +74,7 @@ export class WebSocketDriftClientAccountSubscriber
|
|
|
70
74
|
spotMarketIndexes: number[],
|
|
71
75
|
oracleInfos: OracleInfo[],
|
|
72
76
|
shouldFindAllMarketsAndOracles: boolean,
|
|
77
|
+
delistedMarketSetting: DelistedMarketSetting,
|
|
73
78
|
resubOpts?: ResubOpts,
|
|
74
79
|
commitment?: Commitment
|
|
75
80
|
) {
|
|
@@ -80,6 +85,7 @@ export class WebSocketDriftClientAccountSubscriber
|
|
|
80
85
|
this.spotMarketIndexes = spotMarketIndexes;
|
|
81
86
|
this.oracleInfos = oracleInfos;
|
|
82
87
|
this.shouldFindAllMarketsAndOracles = shouldFindAllMarketsAndOracles;
|
|
88
|
+
this.delistedMarketSetting = delistedMarketSetting;
|
|
83
89
|
this.resubOpts = resubOpts;
|
|
84
90
|
this.commitment = commitment;
|
|
85
91
|
}
|
|
@@ -151,6 +157,8 @@ export class WebSocketDriftClientAccountSubscriber
|
|
|
151
157
|
|
|
152
158
|
this.eventEmitter.emit('update');
|
|
153
159
|
|
|
160
|
+
await this.handleDelistedMarkets();
|
|
161
|
+
|
|
154
162
|
await Promise.all([this.setPerpOracleMap(), this.setSpotOracleMap()]);
|
|
155
163
|
|
|
156
164
|
this.isSubscribing = false;
|
|
@@ -480,6 +488,33 @@ export class WebSocketDriftClientAccountSubscriber
|
|
|
480
488
|
await Promise.all(addOraclePromises);
|
|
481
489
|
}
|
|
482
490
|
|
|
491
|
+
async handleDelistedMarkets(): Promise<void> {
|
|
492
|
+
if (this.delistedMarketSetting === DelistedMarketSetting.Subscribe) {
|
|
493
|
+
return;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
const { perpMarketIndexes, oracles } = findDelistedPerpMarketsAndOracles(
|
|
497
|
+
this.getMarketAccountsAndSlots(),
|
|
498
|
+
this.getSpotMarketAccountsAndSlots()
|
|
499
|
+
);
|
|
500
|
+
|
|
501
|
+
for (const perpMarketIndex of perpMarketIndexes) {
|
|
502
|
+
await this.perpMarketAccountSubscribers
|
|
503
|
+
.get(perpMarketIndex)
|
|
504
|
+
.unsubscribe();
|
|
505
|
+
if (this.delistedMarketSetting === DelistedMarketSetting.Discard) {
|
|
506
|
+
this.perpMarketAccountSubscribers.delete(perpMarketIndex);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
for (const oracle of oracles) {
|
|
511
|
+
await this.oracleSubscribers.get(oracle.toBase58()).unsubscribe();
|
|
512
|
+
if (this.delistedMarketSetting === DelistedMarketSetting.Discard) {
|
|
513
|
+
this.oracleSubscribers.delete(oracle.toBase58());
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
483
518
|
assertIsSubscribed(): void {
|
|
484
519
|
if (!this.isSubscribed) {
|
|
485
520
|
throw new NotSubscribedError(
|
package/src/config.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ConfirmOptions } from '@solana/web3.js';
|
|
2
|
+
import { PerpMarketAccount, PublicKey, SpotMarketAccount } from '.';
|
|
2
3
|
import {
|
|
3
4
|
DevnetPerpMarkets,
|
|
4
5
|
MainnetPerpMarkets,
|
|
@@ -13,6 +14,10 @@ import {
|
|
|
13
14
|
} from './constants/spotMarkets';
|
|
14
15
|
import { OracleInfo } from './oracles/types';
|
|
15
16
|
import { Program, ProgramAccount } from '@coral-xyz/anchor';
|
|
17
|
+
import {
|
|
18
|
+
ON_DEMAND_DEVNET_PID,
|
|
19
|
+
ON_DEMAND_MAINNET_PID,
|
|
20
|
+
} from '@switchboard-xyz/on-demand';
|
|
16
21
|
|
|
17
22
|
type DriftConfig = {
|
|
18
23
|
ENV: DriftEnv;
|
|
@@ -30,6 +35,7 @@ type DriftConfig = {
|
|
|
30
35
|
MARKET_LOOKUP_TABLE: string;
|
|
31
36
|
SERUM_LOOKUP_TABLE?: string;
|
|
32
37
|
PYTH_PULL_ORACLE_LOOKUP_TABLE?: string;
|
|
38
|
+
SB_ON_DEMAND_PID: PublicKey;
|
|
33
39
|
};
|
|
34
40
|
|
|
35
41
|
export type DriftEnv = 'devnet' | 'mainnet-beta';
|
|
@@ -37,6 +43,12 @@ export type DriftEnv = 'devnet' | 'mainnet-beta';
|
|
|
37
43
|
export const DRIFT_PROGRAM_ID = 'dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH';
|
|
38
44
|
export const DRIFT_ORACLE_RECEIVER_ID =
|
|
39
45
|
'G6EoTTTgpkNBtVXo96EQp2m6uwwVh2Kt6YidjkmQqoha';
|
|
46
|
+
export const SWIFT_ID = 'SW1fThqrxLzVprnCMpiybiqYQfoNCdduC5uWsSUKChS';
|
|
47
|
+
|
|
48
|
+
export const DEFAULT_CONFIRMATION_OPTS: ConfirmOptions = {
|
|
49
|
+
preflightCommitment: 'confirmed',
|
|
50
|
+
commitment: 'confirmed',
|
|
51
|
+
};
|
|
40
52
|
|
|
41
53
|
export const configs: { [key in DriftEnv]: DriftConfig } = {
|
|
42
54
|
devnet: {
|
|
@@ -54,6 +66,7 @@ export const configs: { [key in DriftEnv]: DriftConfig } = {
|
|
|
54
66
|
SPOT_MARKETS: DevnetSpotMarkets,
|
|
55
67
|
MARKET_LOOKUP_TABLE: 'FaMS3U4uBojvGn5FSDEPimddcXsCfwkKsFgMVVnDdxGb',
|
|
56
68
|
DRIFT_ORACLE_RECEIVER_ID,
|
|
69
|
+
SB_ON_DEMAND_PID: ON_DEMAND_DEVNET_PID,
|
|
57
70
|
},
|
|
58
71
|
'mainnet-beta': {
|
|
59
72
|
ENV: 'mainnet-beta',
|
|
@@ -71,6 +84,7 @@ export const configs: { [key in DriftEnv]: DriftConfig } = {
|
|
|
71
84
|
MARKET_LOOKUP_TABLE: 'D9cnvzswDikQDf53k4HpQ3KJ9y1Fv3HGGDFYMXnK5T6c',
|
|
72
85
|
SERUM_LOOKUP_TABLE: 'GPZkp76cJtNL2mphCvT6FXkJCVPpouidnacckR6rzKDN',
|
|
73
86
|
DRIFT_ORACLE_RECEIVER_ID,
|
|
87
|
+
SB_ON_DEMAND_PID: ON_DEMAND_MAINNET_PID,
|
|
74
88
|
},
|
|
75
89
|
};
|
|
76
90
|
|
|
@@ -852,6 +852,28 @@ export const MainnetPerpMarkets: PerpMarketConfig[] = [
|
|
|
852
852
|
pythFeedId:
|
|
853
853
|
'0x8963217838ab4cf5cadc172203c1f0b763fbaa45f346d8ee50ba994bbcac3026',
|
|
854
854
|
},
|
|
855
|
+
{
|
|
856
|
+
fullName: 'LANDO-F1-SGP-WIN-BET',
|
|
857
|
+
category: ['Prediction', 'Sports'],
|
|
858
|
+
symbol: 'LANDO-F1-SGP-WIN-BET',
|
|
859
|
+
baseAssetSymbol: 'LANDO-F1-SGP-WIN',
|
|
860
|
+
marketIndex: 43,
|
|
861
|
+
oracle: new PublicKey('DpJz7rjTJLxxnuqrqZTUjMWtnaMFAEfZUv5ATdb9HTh1'),
|
|
862
|
+
launchTs: 1726646453000,
|
|
863
|
+
oracleSource: OracleSource.Prelaunch,
|
|
864
|
+
},
|
|
865
|
+
{
|
|
866
|
+
fullName: 'MOTHER',
|
|
867
|
+
category: ['Solana', 'Meme'],
|
|
868
|
+
symbol: 'MOTHER-PERP',
|
|
869
|
+
baseAssetSymbol: 'MOTHER',
|
|
870
|
+
marketIndex: 44,
|
|
871
|
+
oracle: new PublicKey('56ap2coZG7FPWUigVm9XrpQs3xuCwnwQaWtjWZcffEUG'),
|
|
872
|
+
launchTs: 1727291859000,
|
|
873
|
+
oracleSource: OracleSource.PYTH_PULL,
|
|
874
|
+
pythFeedId:
|
|
875
|
+
'0x62742a997d01f7524f791fdb2dd43aaf0e567d765ebf8fd0406a994239e874d4',
|
|
876
|
+
},
|
|
855
877
|
];
|
|
856
878
|
|
|
857
879
|
export const PerpMarkets: { [key in DriftEnv]: PerpMarketConfig[] } = {
|
|
@@ -133,7 +133,7 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
133
133
|
precisionExp: EIGHT,
|
|
134
134
|
serumMarket: new PublicKey('3BAKsQd3RuhZKES2DGysMhjBdwjZYKYmxRqnSMtZ4KSN'),
|
|
135
135
|
pythFeedId:
|
|
136
|
-
'
|
|
136
|
+
'0xc9d8b075a5c69303365ae23633d4e085199bf5c520a3b90fed1322a0342ffc33',
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
symbol: 'wETH',
|
|
@@ -353,6 +353,8 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
353
353
|
precision: new BN(10).pow(SIX),
|
|
354
354
|
precisionExp: SIX,
|
|
355
355
|
launchTs: 1719415157000,
|
|
356
|
+
pythFeedId:
|
|
357
|
+
'0xc811abc82b4bad1f9bd711a2773ccaa935b03ecef974236942cec5e0eb845a3a',
|
|
356
358
|
},
|
|
357
359
|
{
|
|
358
360
|
symbol: 'POPCAT',
|
|
@@ -423,6 +425,17 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
|
|
|
423
425
|
pythFeedId:
|
|
424
426
|
'0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d',
|
|
425
427
|
},
|
|
428
|
+
{
|
|
429
|
+
symbol: 'MOTHER',
|
|
430
|
+
marketIndex: 26,
|
|
431
|
+
oracle: new PublicKey('56ap2coZG7FPWUigVm9XrpQs3xuCwnwQaWtjWZcffEUG'),
|
|
432
|
+
oracleSource: OracleSource.PYTH_PULL,
|
|
433
|
+
mint: new PublicKey('3S8qX1MsMqRbiwKg2cQyx7nis1oHMgaCuc9c4VfvVdPN'),
|
|
434
|
+
precision: new BN(10).pow(SIX),
|
|
435
|
+
precisionExp: SIX,
|
|
436
|
+
pythFeedId:
|
|
437
|
+
'0x62742a997d01f7524f791fdb2dd43aaf0e567d765ebf8fd0406a994239e874d4',
|
|
438
|
+
},
|
|
426
439
|
];
|
|
427
440
|
|
|
428
441
|
export const SpotMarkets: { [key in DriftEnv]: SpotMarketConfig[] } = {
|