@drift-labs/sdk 0.1.23-master.4 → 0.1.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.
- package/lib/accounts/bulkAccountLoader.d.ts +2 -0
- package/lib/accounts/bulkAccountLoader.js +24 -0
- package/lib/addresses.js +5 -1
- package/lib/admin.d.ts +2 -2
- package/lib/admin.js +11 -5
- package/lib/clearingHouse.js +7 -1
- package/lib/clearingHouseUser.d.ts +12 -17
- package/lib/clearingHouseUser.js +114 -217
- package/lib/constants/markets.d.ts +6 -4
- package/lib/constants/markets.js +48 -0
- package/lib/constants/numericConstants.d.ts +2 -2
- package/lib/constants/numericConstants.js +3 -3
- package/lib/factory/oracleClient.d.ts +5 -0
- package/lib/factory/oracleClient.js +16 -0
- package/lib/idl/clearing_house.json +58 -5
- package/lib/idl/switchboard_v2.json +4663 -0
- package/lib/index.d.ts +4 -1
- package/lib/index.js +9 -2
- package/lib/math/funding.d.ts +6 -6
- package/lib/math/funding.js +4 -16
- package/lib/math/orders.d.ts +1 -0
- package/lib/math/orders.js +19 -1
- package/lib/mockUSDCFaucet.js +5 -1
- package/lib/oracles/pythClient.d.ts +14 -0
- package/lib/oracles/pythClient.js +53 -0
- package/lib/oracles/switchboardClient.d.ts +13 -0
- package/lib/oracles/switchboardClient.js +76 -0
- package/lib/oracles/types.d.ts +15 -0
- package/lib/oracles/types.js +2 -0
- package/lib/orderParams.d.ts +1 -1
- package/lib/orderParams.js +2 -2
- package/lib/orders.js +1 -1
- package/lib/types.d.ts +5 -1
- package/package.json +2 -1
- package/src/accounts/bulkAccountLoader.ts +32 -0
- package/src/accounts/types.js +10 -0
- package/src/accounts/utils.js +7 -0
- package/src/accounts/webSocketAccountSubscriber.js +76 -0
- package/src/addresses.js +83 -0
- package/src/admin.ts +15 -4
- package/src/clearingHouse.ts +2 -0
- package/src/clearingHouseUser.ts +161 -330
- package/src/constants/markets.ts +54 -3
- package/src/constants/numericConstants.ts +2 -2
- package/src/factory/oracleClient.ts +22 -0
- package/src/idl/clearing_house.json +58 -5
- package/src/idl/switchboard_v2.json +4663 -0
- package/src/index.ts +4 -1
- package/src/math/funding.ts +9 -25
- package/src/math/orders.ts +28 -0
- package/src/mockUSDCFaucet.js +171 -0
- package/src/oracles/pythClient.ts +49 -0
- package/src/oracles/switchboardClient.ts +87 -0
- package/src/oracles/types.ts +15 -0
- package/src/orderParams.ts +3 -2
- package/src/orders.ts +1 -1
- package/src/types.js +60 -0
- package/src/types.ts +6 -1
- package/lib/pythClient.d.ts +0 -7
- package/lib/pythClient.js +0 -25
- package/src/pythClient.ts +0 -15
package/src/constants/markets.ts
CHANGED
|
@@ -1,118 +1,169 @@
|
|
|
1
|
-
import { BN } from '../';
|
|
1
|
+
import { BN, OracleSource } from '../';
|
|
2
2
|
|
|
3
|
-
type
|
|
3
|
+
export type MarketConfig = {
|
|
4
|
+
fullName?: string;
|
|
5
|
+
category?: string[];
|
|
4
6
|
symbol: string;
|
|
5
7
|
baseAssetSymbol: string;
|
|
6
8
|
marketIndex: BN;
|
|
7
9
|
devnetPythOracle: string;
|
|
8
10
|
mainnetPythOracle: string;
|
|
9
11
|
launchTs: number;
|
|
12
|
+
oracleSource: OracleSource;
|
|
10
13
|
};
|
|
11
14
|
|
|
12
|
-
export const Markets:
|
|
15
|
+
export const Markets: MarketConfig[] = [
|
|
13
16
|
{
|
|
17
|
+
fullName: 'Solana',
|
|
18
|
+
category: ['L1', 'Infra'],
|
|
14
19
|
symbol: 'SOL-PERP',
|
|
15
20
|
baseAssetSymbol: 'SOL',
|
|
16
21
|
marketIndex: new BN(0),
|
|
17
22
|
devnetPythOracle: 'J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix',
|
|
18
23
|
mainnetPythOracle: 'H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG',
|
|
19
24
|
launchTs: 1635209696886,
|
|
25
|
+
oracleSource: OracleSource.PYTH,
|
|
20
26
|
},
|
|
21
27
|
{
|
|
28
|
+
fullName: 'Bitcoin',
|
|
29
|
+
category: ['L1', 'Payment'],
|
|
22
30
|
symbol: 'BTC-PERP',
|
|
23
31
|
baseAssetSymbol: 'BTC',
|
|
24
32
|
marketIndex: new BN(1),
|
|
25
33
|
devnetPythOracle: 'HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J',
|
|
26
34
|
mainnetPythOracle: 'GVXRSBjFk6e6J3NbVPXohDJetcTjaeeuykUpbQF8UoMU',
|
|
27
35
|
launchTs: 1637691088868,
|
|
36
|
+
oracleSource: OracleSource.PYTH,
|
|
28
37
|
},
|
|
29
38
|
{
|
|
39
|
+
fullName: 'Ethereum',
|
|
40
|
+
category: ['L1', 'Infra'],
|
|
30
41
|
symbol: 'ETH-PERP',
|
|
31
42
|
baseAssetSymbol: 'ETH',
|
|
32
43
|
marketIndex: new BN(2),
|
|
33
44
|
devnetPythOracle: 'EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw',
|
|
34
45
|
mainnetPythOracle: 'JBu1AL4obBcCMqKBBxhpWCNUt136ijcuMZLFvTP7iWdB',
|
|
35
46
|
launchTs: 1637691133472,
|
|
47
|
+
oracleSource: OracleSource.PYTH,
|
|
36
48
|
},
|
|
37
49
|
{
|
|
50
|
+
fullName: 'Terra',
|
|
51
|
+
category: ['L1', 'Infra'],
|
|
38
52
|
symbol: 'LUNA-PERP',
|
|
39
53
|
baseAssetSymbol: 'LUNA',
|
|
40
54
|
marketIndex: new BN(3),
|
|
41
55
|
devnetPythOracle: '8PugCXTAHLM9kfLSQWe2njE5pzAgUdpPk3Nx5zSm7BD3',
|
|
42
56
|
mainnetPythOracle: '5bmWuR1dgP4avtGYMNKLuxumZTVKGgoN2BCMXWDNL9nY',
|
|
43
57
|
launchTs: 1638821738525,
|
|
58
|
+
oracleSource: OracleSource.PYTH,
|
|
44
59
|
},
|
|
45
60
|
{
|
|
46
61
|
symbol: 'AVAX-PERP',
|
|
62
|
+
category: ['L1', 'Infra'],
|
|
47
63
|
baseAssetSymbol: 'AVAX',
|
|
48
64
|
marketIndex: new BN(4),
|
|
49
65
|
devnetPythOracle: 'FVb5h1VmHPfVb1RfqZckchq18GxRv4iKt8T4eVTQAqdz',
|
|
50
66
|
mainnetPythOracle: 'Ax9ujW5B9oqcv59N8m6f1BpTBq2rGeGaBcpKjC5UYsXU',
|
|
51
67
|
launchTs: 1639092501080,
|
|
68
|
+
oracleSource: OracleSource.PYTH,
|
|
52
69
|
},
|
|
53
70
|
{
|
|
71
|
+
fullName: 'Binance Coin',
|
|
54
72
|
symbol: 'BNB-PERP',
|
|
73
|
+
category: ['L1', 'Exchange'],
|
|
55
74
|
baseAssetSymbol: 'BNB',
|
|
56
75
|
marketIndex: new BN(5),
|
|
57
76
|
devnetPythOracle: 'GwzBgrXb4PG59zjce24SF2b9JXbLEjJJTBkmytuEZj1b',
|
|
58
77
|
mainnetPythOracle: '4CkQJBxhU8EZ2UjhigbtdaPbpTe6mqf811fipYBFbSYN',
|
|
59
78
|
launchTs: 1639523193012,
|
|
79
|
+
oracleSource: OracleSource.PYTH,
|
|
60
80
|
},
|
|
61
81
|
{
|
|
82
|
+
fullName: 'Polygon',
|
|
83
|
+
category: ['L1', 'Infra'],
|
|
62
84
|
symbol: 'MATIC-PERP',
|
|
63
85
|
baseAssetSymbol: 'MATIC',
|
|
64
86
|
marketIndex: new BN(6),
|
|
65
87
|
devnetPythOracle: 'FBirwuDFuRAu4iSGc7RGxN5koHB7EJM1wbCmyPuQoGur',
|
|
66
88
|
mainnetPythOracle: '7KVswB9vkCgeM3SHP7aGDijvdRAHK8P5wi9JXViCrtYh',
|
|
67
89
|
launchTs: 1641488603564,
|
|
90
|
+
oracleSource: OracleSource.PYTH,
|
|
68
91
|
},
|
|
69
92
|
{
|
|
93
|
+
fullName: 'Cosmos',
|
|
94
|
+
category: ['L1', 'Infra'],
|
|
70
95
|
symbol: 'ATOM-PERP',
|
|
71
96
|
baseAssetSymbol: 'ATOM',
|
|
72
97
|
marketIndex: new BN(7),
|
|
73
98
|
devnetPythOracle: '7YAze8qFUMkBnyLVdKT4TFUUFui99EwS5gfRArMcrvFk',
|
|
74
99
|
mainnetPythOracle: 'CrCpTerNqtZvqLcKqz1k13oVeXV9WkMD2zA9hBKXrsbN',
|
|
75
100
|
launchTs: 1641920238195,
|
|
101
|
+
oracleSource: OracleSource.PYTH,
|
|
76
102
|
},
|
|
77
103
|
{
|
|
104
|
+
fullName: 'Polkadot',
|
|
78
105
|
symbol: 'DOT-PERP',
|
|
79
106
|
baseAssetSymbol: 'DOT',
|
|
80
107
|
marketIndex: new BN(8),
|
|
81
108
|
devnetPythOracle: '4dqq5VBpN4EwYb7wyywjjfknvMKu7m78j9mKZRXTj462',
|
|
82
109
|
mainnetPythOracle: 'EcV1X1gY2yb4KXxjVQtTHTbioum2gvmPnFk4zYAt7zne',
|
|
83
110
|
launchTs: 1642629253786,
|
|
111
|
+
oracleSource: OracleSource.PYTH,
|
|
84
112
|
},
|
|
85
113
|
{
|
|
114
|
+
fullName: 'Cardano',
|
|
115
|
+
category: ['L1', 'Infra'],
|
|
86
116
|
symbol: 'ADA-PERP',
|
|
87
117
|
baseAssetSymbol: 'ADA',
|
|
88
118
|
marketIndex: new BN(9),
|
|
89
119
|
devnetPythOracle: '8oGTURNmSQkrBS1AQ5NjB2p8qY34UVmMA9ojrw8vnHus',
|
|
90
120
|
mainnetPythOracle: '3pyn4svBbxJ9Wnn3RVeafyLWfzie6yC5eTig2S62v9SC',
|
|
91
121
|
launchTs: 1643084413000,
|
|
122
|
+
oracleSource: OracleSource.PYTH,
|
|
92
123
|
},
|
|
93
124
|
{
|
|
125
|
+
fullName: 'Algorand',
|
|
126
|
+
category: ['L1', 'Infra'],
|
|
94
127
|
symbol: 'ALGO-PERP',
|
|
95
128
|
baseAssetSymbol: 'ALGO',
|
|
96
129
|
marketIndex: new BN(10),
|
|
97
130
|
devnetPythOracle: 'c1A946dY5NHuVda77C8XXtXytyR3wK1SCP3eA9VRfC3',
|
|
98
131
|
mainnetPythOracle: 'HqFyq1wh1xKvL7KDqqT7NJeSPdAqsDqnmBisUC2XdXAX',
|
|
99
132
|
launchTs: 1643686767000,
|
|
133
|
+
oracleSource: OracleSource.PYTH,
|
|
100
134
|
},
|
|
101
135
|
{
|
|
136
|
+
fullName: 'FTX Coin',
|
|
137
|
+
category: ['L1', 'Exchange'],
|
|
102
138
|
symbol: 'FTT-PERP',
|
|
103
139
|
baseAssetSymbol: 'FTT',
|
|
104
140
|
marketIndex: new BN(11),
|
|
105
141
|
devnetPythOracle: '6vivTRs5ZPeeXbjo7dfburfaYDWoXjBtdtuYgQRuGfu',
|
|
106
142
|
mainnetPythOracle: '8JPJJkmDScpcNmBRKGZuPuG2GYAveQgP3t5gFuMymwvF',
|
|
107
143
|
launchTs: 1644382122000,
|
|
144
|
+
oracleSource: OracleSource.PYTH,
|
|
108
145
|
},
|
|
109
146
|
{
|
|
147
|
+
fullName: 'Litecoin',
|
|
148
|
+
category: ['L1', 'Payments'],
|
|
110
149
|
symbol: 'LTC-PERP',
|
|
111
150
|
baseAssetSymbol: 'LTC',
|
|
112
151
|
marketIndex: new BN(12),
|
|
113
152
|
devnetPythOracle: 'BLArYBCUYhdWiY8PCUTpvFE21iaJq85dvxLk9bYMobcU',
|
|
114
153
|
mainnetPythOracle: '8RMnV1eD55iqUFJLMguPkYBkq8DCtx81XcmAja93LvRR',
|
|
115
154
|
launchTs: 1645027429000,
|
|
155
|
+
oracleSource: OracleSource.PYTH,
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
fullName: 'Ripple',
|
|
159
|
+
category: ['L1', 'Payments'],
|
|
160
|
+
symbol: 'XRP-PERP',
|
|
161
|
+
baseAssetSymbol: 'XRP',
|
|
162
|
+
marketIndex: new BN(13),
|
|
163
|
+
devnetPythOracle: 'WMW5xc3HypXwTnPesyUT49uLsyHwNURsWAEk39onKuk',
|
|
164
|
+
mainnetPythOracle: 'WMW5xc3HypXwTnPesyUT49uLsyHwNURsWAEk39onKuk',
|
|
165
|
+
launchTs: 1647543166000,
|
|
166
|
+
oracleSource: OracleSource.SWITCHBOARD,
|
|
116
167
|
},
|
|
117
168
|
// {
|
|
118
169
|
// symbol: 'mSOL-PERP',
|
|
@@ -3,12 +3,11 @@ import { BN } from '../';
|
|
|
3
3
|
export const ZERO = new BN(0);
|
|
4
4
|
export const ONE = new BN(1);
|
|
5
5
|
export const TWO = new BN(2);
|
|
6
|
+
export const TEN = new BN(10);
|
|
6
7
|
export const TEN_THOUSAND = new BN(10000);
|
|
7
8
|
export const BN_MAX = new BN(Number.MAX_SAFE_INTEGER);
|
|
8
9
|
|
|
9
10
|
export const MAX_LEVERAGE = new BN(5);
|
|
10
|
-
export const FULL_LIQUIDATION_RATIO = new BN(500);
|
|
11
|
-
export const PARTIAL_LIQUIDATION_RATIO = new BN(625);
|
|
12
11
|
|
|
13
12
|
export const QUOTE_PRECISION = new BN(10 ** 6);
|
|
14
13
|
export const MARK_PRICE_PRECISION = new BN(10 ** 10);
|
|
@@ -23,3 +22,4 @@ export const PRICE_TO_QUOTE_PRECISION =
|
|
|
23
22
|
MARK_PRICE_PRECISION.div(QUOTE_PRECISION);
|
|
24
23
|
export const AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO =
|
|
25
24
|
AMM_RESERVE_PRECISION.mul(PEG_PRECISION).div(QUOTE_PRECISION); // 10^10
|
|
25
|
+
export const MARGIN_PRECISION = TEN_THOUSAND;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { isVariant, OracleSource } from '../types';
|
|
2
|
+
import { Connection } from '@solana/web3.js';
|
|
3
|
+
import { DriftEnv } from '../config';
|
|
4
|
+
import { OracleClient } from '../oracles/types';
|
|
5
|
+
import { PythClient } from '../oracles/pythClient';
|
|
6
|
+
import { SwitchboardClient } from '../oracles/switchboardClient';
|
|
7
|
+
|
|
8
|
+
export function getOracleClient(
|
|
9
|
+
oracleSource: OracleSource,
|
|
10
|
+
connection: Connection,
|
|
11
|
+
env: DriftEnv
|
|
12
|
+
): OracleClient {
|
|
13
|
+
if (isVariant(oracleSource, 'pyth')) {
|
|
14
|
+
return new PythClient(connection);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (isVariant(oracleSource, 'switchboard')) {
|
|
18
|
+
return new SwitchboardClient(connection, env);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
throw new Error(`Unknown oracle source ${oracleSource}`);
|
|
22
|
+
}
|
|
@@ -211,6 +211,24 @@
|
|
|
211
211
|
{
|
|
212
212
|
"name": "ammPegMultiplier",
|
|
213
213
|
"type": "u128"
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"name": "oracleSource",
|
|
217
|
+
"type": {
|
|
218
|
+
"defined": "OracleSource"
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"name": "marginRatioInitial",
|
|
223
|
+
"type": "u32"
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"name": "marginRatioPartial",
|
|
227
|
+
"type": "u32"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"name": "marginRatioMaintenance",
|
|
231
|
+
"type": "u32"
|
|
214
232
|
}
|
|
215
233
|
]
|
|
216
234
|
},
|
|
@@ -1526,22 +1544,31 @@
|
|
|
1526
1544
|
},
|
|
1527
1545
|
{
|
|
1528
1546
|
"name": "state",
|
|
1547
|
+
"isMut": false,
|
|
1548
|
+
"isSigner": false
|
|
1549
|
+
},
|
|
1550
|
+
{
|
|
1551
|
+
"name": "markets",
|
|
1529
1552
|
"isMut": true,
|
|
1530
1553
|
"isSigner": false
|
|
1531
1554
|
}
|
|
1532
1555
|
],
|
|
1533
1556
|
"args": [
|
|
1557
|
+
{
|
|
1558
|
+
"name": "marketIndex",
|
|
1559
|
+
"type": "u64"
|
|
1560
|
+
},
|
|
1534
1561
|
{
|
|
1535
1562
|
"name": "marginRatioInitial",
|
|
1536
|
-
"type": "
|
|
1563
|
+
"type": "u32"
|
|
1537
1564
|
},
|
|
1538
1565
|
{
|
|
1539
1566
|
"name": "marginRatioPartial",
|
|
1540
|
-
"type": "
|
|
1567
|
+
"type": "u32"
|
|
1541
1568
|
},
|
|
1542
1569
|
{
|
|
1543
1570
|
"name": "marginRatioMaintenance",
|
|
1544
|
-
"type": "
|
|
1571
|
+
"type": "u32"
|
|
1545
1572
|
}
|
|
1546
1573
|
]
|
|
1547
1574
|
},
|
|
@@ -3028,9 +3055,21 @@
|
|
|
3028
3055
|
"defined": "AMM"
|
|
3029
3056
|
}
|
|
3030
3057
|
},
|
|
3058
|
+
{
|
|
3059
|
+
"name": "marginRatioInitial",
|
|
3060
|
+
"type": "u32"
|
|
3061
|
+
},
|
|
3062
|
+
{
|
|
3063
|
+
"name": "marginRatioPartial",
|
|
3064
|
+
"type": "u32"
|
|
3065
|
+
},
|
|
3066
|
+
{
|
|
3067
|
+
"name": "marginRatioMaintenance",
|
|
3068
|
+
"type": "u32"
|
|
3069
|
+
},
|
|
3031
3070
|
{
|
|
3032
3071
|
"name": "padding0",
|
|
3033
|
-
"type": "
|
|
3072
|
+
"type": "u32"
|
|
3034
3073
|
},
|
|
3035
3074
|
{
|
|
3036
3075
|
"name": "padding1",
|
|
@@ -3222,12 +3261,16 @@
|
|
|
3222
3261
|
"name": "fillerReward",
|
|
3223
3262
|
"type": "u128"
|
|
3224
3263
|
},
|
|
3264
|
+
{
|
|
3265
|
+
"name": "quoteAssetAmountSurplus",
|
|
3266
|
+
"type": "u128"
|
|
3267
|
+
},
|
|
3225
3268
|
{
|
|
3226
3269
|
"name": "padding",
|
|
3227
3270
|
"type": {
|
|
3228
3271
|
"array": [
|
|
3229
3272
|
"u64",
|
|
3230
|
-
|
|
3273
|
+
8
|
|
3231
3274
|
]
|
|
3232
3275
|
}
|
|
3233
3276
|
}
|
|
@@ -4132,6 +4175,16 @@
|
|
|
4132
4175
|
"code": 6056,
|
|
4133
4176
|
"name": "NoPositionsLiquidatable",
|
|
4134
4177
|
"msg": "No positions liquidatable"
|
|
4178
|
+
},
|
|
4179
|
+
{
|
|
4180
|
+
"code": 6057,
|
|
4181
|
+
"name": "InvalidMarginRatio",
|
|
4182
|
+
"msg": "Invalid Margin Ratio"
|
|
4183
|
+
},
|
|
4184
|
+
{
|
|
4185
|
+
"code": 6058,
|
|
4186
|
+
"name": "CantCancelPostOnlyOrder",
|
|
4187
|
+
"msg": "Cant Cancel Post Only Order"
|
|
4135
4188
|
}
|
|
4136
4189
|
]
|
|
4137
4190
|
}
|