@drift-labs/sdk 0.1.36-master.7 → 0.2.0-master.0
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 +6 -6
- package/lib/accounts/bulkAccountLoader.js +81 -95
- package/lib/accounts/bulkUserSubscription.js +13 -57
- package/lib/accounts/fetch.d.ts +4 -0
- package/lib/accounts/fetch.js +18 -0
- package/lib/accounts/pollingClearingHouseAccountSubscriber.d.ts +34 -38
- package/lib/accounts/pollingClearingHouseAccountSubscriber.js +224 -224
- package/lib/accounts/pollingOracleSubscriber.d.ts +3 -3
- package/lib/accounts/pollingOracleSubscriber.js +37 -49
- package/lib/accounts/pollingTokenAccountSubscriber.d.ts +3 -3
- package/lib/accounts/pollingTokenAccountSubscriber.js +35 -50
- package/lib/accounts/pollingUserAccountSubscriber.d.ts +7 -13
- package/lib/accounts/pollingUserAccountSubscriber.js +71 -134
- package/lib/accounts/types.d.ts +34 -41
- package/lib/accounts/webSocketAccountSubscriber.d.ts +6 -4
- package/lib/accounts/webSocketAccountSubscriber.js +39 -35
- package/lib/accounts/webSocketClearingHouseAccountSubscriber.d.ts +33 -28
- package/lib/accounts/webSocketClearingHouseAccountSubscriber.js +153 -185
- package/lib/accounts/webSocketUserAccountSubscriber.d.ts +5 -11
- package/lib/accounts/webSocketUserAccountSubscriber.js +22 -67
- package/lib/addresses/marketAddresses.d.ts +4 -0
- package/lib/addresses/marketAddresses.js +15 -0
- package/lib/addresses/pda.d.ts +12 -0
- package/lib/addresses/pda.js +83 -0
- package/lib/admin.d.ts +8 -17
- package/lib/admin.js +366 -558
- package/lib/clearingHouse.d.ts +84 -109
- package/lib/clearingHouse.js +778 -899
- package/lib/clearingHouseConfig.d.ts +34 -0
- package/lib/clearingHouseConfig.js +2 -0
- package/lib/clearingHouseUser.d.ts +19 -22
- package/lib/clearingHouseUser.js +155 -141
- package/lib/clearingHouseUserConfig.d.ts +14 -0
- package/lib/clearingHouseUserConfig.js +2 -0
- package/lib/config.d.ts +12 -0
- package/lib/config.js +35 -4
- package/lib/constants/banks.d.ts +16 -0
- package/lib/constants/banks.js +34 -0
- package/lib/constants/markets.d.ts +8 -3
- package/lib/constants/markets.js +13 -206
- package/lib/constants/numericConstants.d.ts +16 -0
- package/lib/constants/numericConstants.js +22 -6
- package/lib/events/eventList.d.ts +22 -0
- package/lib/events/eventList.js +77 -0
- package/lib/events/eventSubscriber.d.ts +34 -0
- package/lib/events/eventSubscriber.js +126 -0
- package/lib/events/fetchLogs.d.ts +13 -0
- package/lib/events/fetchLogs.js +39 -0
- package/lib/events/pollingLogProvider.d.ts +15 -0
- package/lib/events/pollingLogProvider.js +53 -0
- package/lib/events/sort.d.ts +2 -0
- package/lib/events/sort.js +44 -0
- package/lib/events/txEventCache.d.ts +24 -0
- package/lib/events/txEventCache.js +71 -0
- package/lib/events/types.d.ts +49 -0
- package/lib/events/types.js +20 -0
- package/lib/events/webSocketLogProvider.d.ts +12 -0
- package/lib/events/webSocketLogProvider.js +30 -0
- package/lib/examples/makeTradeExample.js +26 -27
- package/lib/factory/bigNum.d.ts +112 -0
- package/lib/factory/bigNum.js +356 -0
- package/lib/factory/oracleClient.d.ts +1 -2
- package/lib/factory/oracleClient.js +6 -2
- package/lib/idl/clearing_house.json +2213 -2951
- package/lib/index.d.ts +12 -4
- package/lib/index.js +12 -4
- package/lib/math/amm.d.ts +19 -29
- package/lib/math/amm.js +129 -179
- package/lib/math/auction.d.ts +5 -0
- package/lib/math/auction.js +39 -0
- package/lib/math/bankBalance.d.ts +9 -0
- package/lib/math/bankBalance.js +75 -0
- package/lib/math/conversion.d.ts +0 -1
- package/lib/math/conversion.js +1 -5
- package/lib/math/funding.d.ts +6 -6
- package/lib/math/funding.js +158 -175
- package/lib/math/market.d.ts +6 -6
- package/lib/math/market.js +10 -9
- package/lib/math/orders.d.ts +5 -0
- package/lib/math/orders.js +31 -1
- package/lib/math/position.d.ts +7 -5
- package/lib/math/position.js +27 -27
- package/lib/math/repeg.d.ts +22 -0
- package/lib/math/repeg.js +128 -0
- package/lib/math/trade.d.ts +5 -4
- package/lib/math/trade.js +29 -21
- package/lib/mockUSDCFaucet.js +87 -116
- package/lib/oracles/oracleClientCache.d.ts +8 -0
- package/lib/oracles/oracleClientCache.js +19 -0
- package/lib/oracles/pythClient.d.ts +3 -5
- package/lib/oracles/pythClient.js +12 -31
- package/lib/oracles/quoteAssetOracleClient.d.ts +9 -0
- package/lib/oracles/quoteAssetOracleClient.js +21 -0
- package/lib/oracles/switchboardClient.d.ts +3 -5
- package/lib/oracles/switchboardClient.js +29 -50
- package/lib/oracles/types.d.ts +6 -1
- package/lib/orders.d.ts +6 -6
- package/lib/orders.js +10 -9
- package/lib/slot/SlotSubscriber.d.ts +12 -0
- package/lib/slot/SlotSubscriber.js +23 -0
- package/lib/tx/retryTxSender.d.ts +2 -2
- package/lib/tx/retryTxSender.js +108 -123
- package/lib/tx/types.d.ts +5 -1
- package/lib/tx/utils.d.ts +1 -1
- package/lib/tx/utils.js +11 -2
- package/lib/types.d.ts +105 -109
- package/lib/types.js +13 -1
- package/lib/userName.d.ts +4 -0
- package/lib/userName.js +20 -0
- package/lib/util/computeUnits.js +10 -21
- package/lib/util/tps.js +11 -22
- package/lib/wallet.js +7 -20
- package/package.json +10 -3
- package/src/accounts/bulkAccountLoader.ts +21 -15
- package/src/accounts/bulkUserSubscription.ts +1 -45
- package/src/accounts/fetch.ts +33 -0
- package/src/accounts/pollingClearingHouseAccountSubscriber.ts +249 -214
- package/src/accounts/pollingOracleSubscriber.ts +16 -8
- package/src/accounts/pollingTokenAccountSubscriber.ts +11 -8
- package/src/accounts/pollingUserAccountSubscriber.ts +21 -86
- package/src/accounts/types.ts +41 -70
- package/src/accounts/webSocketAccountSubscriber.ts +33 -16
- package/src/accounts/webSocketClearingHouseAccountSubscriber.ts +190 -240
- package/src/accounts/webSocketUserAccountSubscriber.ts +11 -71
- package/src/addresses/marketAddresses.ts +18 -0
- package/src/addresses/pda.ts +118 -0
- package/src/admin.ts +205 -346
- package/src/clearingHouse.ts +918 -961
- package/src/clearingHouseConfig.ts +37 -0
- package/src/clearingHouseUser.ts +275 -185
- package/src/clearingHouseUserConfig.ts +18 -0
- package/src/config.ts +54 -1
- package/src/constants/banks.ts +43 -0
- package/src/constants/markets.ts +16 -207
- package/src/constants/numericConstants.ts +33 -5
- package/src/events/eventList.ts +94 -0
- package/src/events/eventSubscriber.ts +194 -0
- package/src/events/fetchLogs.ts +80 -0
- package/src/events/pollingLogProvider.ts +79 -0
- package/src/events/sort.ts +65 -0
- package/src/events/txEventCache.ts +74 -0
- package/src/events/types.ts +98 -0
- package/src/events/webSocketLogProvider.ts +38 -0
- package/src/examples/makeTradeExample.ts +20 -11
- package/src/factory/bigNum.ts +507 -0
- package/src/factory/oracleClient.ts +7 -4
- package/src/idl/clearing_house.json +2213 -2951
- package/src/index.ts +12 -4
- package/src/math/amm.ts +229 -245
- package/src/math/auction.ts +39 -0
- package/src/math/bankBalance.ts +112 -0
- package/src/math/conversion.ts +1 -11
- package/src/math/funding.ts +12 -9
- package/src/math/market.ts +37 -30
- package/src/math/orders.ts +38 -0
- package/src/math/position.ts +48 -35
- package/src/math/repeg.ts +175 -0
- package/src/math/trade.ts +45 -35
- package/src/math/utils.js +27 -0
- package/src/math/utils.js.map +1 -0
- package/src/oracles/oracleClientCache.ts +20 -0
- package/src/oracles/pythClient.ts +4 -11
- package/src/oracles/quoteAssetOracleClient.ts +25 -0
- package/src/oracles/switchboardClient.ts +11 -24
- package/src/oracles/types.ts +7 -1
- package/src/orders.ts +35 -20
- package/src/slot/SlotSubscriber.ts +32 -0
- package/src/tx/retryTxSender.ts +6 -4
- package/src/tx/types.ts +6 -1
- package/src/tx/utils.ts +22 -3
- package/src/types.ts +108 -122
- package/src/userName.ts +20 -0
- package/src/util/computeUnits.js +17 -0
- package/src/util/computeUnits.js.map +1 -0
- package/tests/bn/test.ts +255 -0
- package/tsconfig.json +12 -12
- package/lib/addresses.d.ts +0 -10
- package/lib/addresses.js +0 -93
- package/lib/constants/accounts.d.ts +0 -15
- package/lib/constants/accounts.js +0 -18
- package/lib/factory/clearingHouse.d.ts +0 -35
- package/lib/factory/clearingHouse.js +0 -81
- package/lib/factory/clearingHouseUser.d.ts +0 -19
- package/lib/factory/clearingHouseUser.js +0 -34
- package/lib/math/insuranceFund.d.ts +0 -15
- package/lib/math/insuranceFund.js +0 -33
- package/lib/settlement.d.ts +0 -4
- package/lib/settlement.js +0 -10
- package/lib/tx/defaultTxSender.d.ts +0 -8
- package/lib/tx/defaultTxSender.js +0 -12
- package/src/addresses.ts +0 -82
- package/src/constants/accounts.ts +0 -26
- package/src/factory/clearingHouse.ts +0 -173
- package/src/factory/clearingHouseUser.ts +0 -73
- package/src/math/insuranceFund.ts +0 -29
- package/src/settlement.ts +0 -9
- package/src/tx/defaultTxSender.ts +0 -24
package/lib/types.d.ts
CHANGED
|
@@ -9,6 +9,14 @@ export declare class SwapDirection {
|
|
|
9
9
|
remove: {};
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
|
+
export declare class BankBalanceType {
|
|
13
|
+
static readonly DEPOSIT: {
|
|
14
|
+
deposit: {};
|
|
15
|
+
};
|
|
16
|
+
static readonly BORROW: {
|
|
17
|
+
borrow: {};
|
|
18
|
+
};
|
|
19
|
+
}
|
|
12
20
|
export declare class PositionDirection {
|
|
13
21
|
static readonly LONG: {
|
|
14
22
|
long: {};
|
|
@@ -24,6 +32,9 @@ export declare class OracleSource {
|
|
|
24
32
|
static readonly SWITCHBOARD: {
|
|
25
33
|
switchboard: {};
|
|
26
34
|
};
|
|
35
|
+
static readonly QUOTE_ASSET: {
|
|
36
|
+
quoteAsset: {};
|
|
37
|
+
};
|
|
27
38
|
}
|
|
28
39
|
export declare class OrderType {
|
|
29
40
|
static readonly LIMIT: {
|
|
@@ -87,55 +98,27 @@ export declare class OrderTriggerCondition {
|
|
|
87
98
|
};
|
|
88
99
|
}
|
|
89
100
|
export declare function isVariant(object: unknown, type: string): boolean;
|
|
101
|
+
export declare function isOneOfVariant(object: unknown, types: string[]): boolean;
|
|
90
102
|
export declare enum TradeSide {
|
|
91
103
|
None = 0,
|
|
92
104
|
Buy = 1,
|
|
93
105
|
Sell = 2
|
|
94
106
|
}
|
|
95
107
|
export declare type CandleResolution = '1' | '5' | '15' | '60' | '240' | 'D' | 'W' | 'M';
|
|
96
|
-
export declare type TradeHistoryAccount = {
|
|
97
|
-
head: BN;
|
|
98
|
-
tradeRecords: TradeRecord[];
|
|
99
|
-
};
|
|
100
|
-
export declare type DepositHistoryAccount = {
|
|
101
|
-
head: BN;
|
|
102
|
-
depositRecords: DepositRecord[];
|
|
103
|
-
};
|
|
104
|
-
export declare type ExtendedCurveHistoryAccount = {
|
|
105
|
-
head: BN;
|
|
106
|
-
curveRecords: ExtendedCurveRecord[];
|
|
107
|
-
};
|
|
108
|
-
export declare type FundingRateHistoryAccount = {
|
|
109
|
-
head: BN;
|
|
110
|
-
fundingRateRecords: FundingRateRecord[];
|
|
111
|
-
};
|
|
112
|
-
export declare type FundingPaymentHistoryAccount = {
|
|
113
|
-
head: BN;
|
|
114
|
-
fundingPaymentRecords: FundingPaymentRecord[];
|
|
115
|
-
};
|
|
116
|
-
export declare type LiquidationHistoryAccount = {
|
|
117
|
-
head: BN;
|
|
118
|
-
liquidationRecords: LiquidationRecord[];
|
|
119
|
-
};
|
|
120
|
-
export declare type OrderHistoryAccount = {
|
|
121
|
-
head: BN;
|
|
122
|
-
lastOrderId: BN;
|
|
123
|
-
orderRecords: OrderRecord[];
|
|
124
|
-
};
|
|
125
108
|
export declare type DepositRecord = {
|
|
126
109
|
ts: BN;
|
|
127
|
-
recordId: BN;
|
|
128
110
|
userAuthority: PublicKey;
|
|
129
111
|
user: PublicKey;
|
|
130
112
|
direction: {
|
|
131
113
|
deposit?: any;
|
|
132
114
|
withdraw?: any;
|
|
133
115
|
};
|
|
134
|
-
|
|
135
|
-
cumulativeDepositsBefore: BN;
|
|
116
|
+
bankIndex: BN;
|
|
136
117
|
amount: BN;
|
|
118
|
+
from?: PublicKey;
|
|
119
|
+
to?: PublicKey;
|
|
137
120
|
};
|
|
138
|
-
export declare type
|
|
121
|
+
export declare type CurveRecord = {
|
|
139
122
|
ts: BN;
|
|
140
123
|
recordId: BN;
|
|
141
124
|
marketIndex: BN;
|
|
@@ -154,27 +137,6 @@ export declare type ExtendedCurveRecord = {
|
|
|
154
137
|
oraclePrice: BN;
|
|
155
138
|
tradeId: BN;
|
|
156
139
|
};
|
|
157
|
-
export declare type TradeRecord = {
|
|
158
|
-
ts: BN;
|
|
159
|
-
recordId: BN;
|
|
160
|
-
userAuthority: PublicKey;
|
|
161
|
-
user: PublicKey;
|
|
162
|
-
direction: {
|
|
163
|
-
long?: any;
|
|
164
|
-
short?: any;
|
|
165
|
-
};
|
|
166
|
-
baseAssetAmount: BN;
|
|
167
|
-
quoteAssetAmount: BN;
|
|
168
|
-
markPriceBefore: BN;
|
|
169
|
-
markPriceAfter: BN;
|
|
170
|
-
fee: BN;
|
|
171
|
-
quoteAssetAmountSurplus: BN;
|
|
172
|
-
refereeDiscount: BN;
|
|
173
|
-
tokenDiscount: BN;
|
|
174
|
-
marketIndex: BN;
|
|
175
|
-
liquidation: boolean;
|
|
176
|
-
oraclePrice: BN;
|
|
177
|
-
};
|
|
178
140
|
export declare type FundingRateRecord = {
|
|
179
141
|
ts: BN;
|
|
180
142
|
recordId: BN;
|
|
@@ -187,7 +149,6 @@ export declare type FundingRateRecord = {
|
|
|
187
149
|
};
|
|
188
150
|
export declare type FundingPaymentRecord = {
|
|
189
151
|
ts: BN;
|
|
190
|
-
recordId: BN;
|
|
191
152
|
userAuthority: PublicKey;
|
|
192
153
|
user: PublicKey;
|
|
193
154
|
marketIndex: BN;
|
|
@@ -217,41 +178,33 @@ export declare type LiquidationRecord = {
|
|
|
217
178
|
};
|
|
218
179
|
export declare type OrderRecord = {
|
|
219
180
|
ts: BN;
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
181
|
+
taker: PublicKey;
|
|
182
|
+
maker: PublicKey;
|
|
183
|
+
takerOrder: Order;
|
|
184
|
+
makerOrder: Order;
|
|
224
185
|
action: OrderAction;
|
|
225
186
|
filler: PublicKey;
|
|
187
|
+
fillRecordId: BN;
|
|
188
|
+
marketIndex: BN;
|
|
226
189
|
baseAssetAmountFilled: BN;
|
|
227
190
|
quoteAssetAmountFilled: BN;
|
|
228
|
-
|
|
191
|
+
makerRebate: BN;
|
|
192
|
+
takerFee: BN;
|
|
229
193
|
fillerReward: BN;
|
|
230
|
-
tradeRecordId: BN;
|
|
231
194
|
quoteAssetAmountSurplus: BN;
|
|
195
|
+
oraclePrice: BN;
|
|
232
196
|
};
|
|
233
197
|
export declare type StateAccount = {
|
|
234
198
|
admin: PublicKey;
|
|
235
199
|
fundingPaused: boolean;
|
|
236
200
|
exchangePaused: boolean;
|
|
237
201
|
adminControlsPrices: boolean;
|
|
238
|
-
collateralMint: PublicKey;
|
|
239
|
-
collateralVault: PublicKey;
|
|
240
|
-
collateralVaultAuthority: PublicKey;
|
|
241
|
-
collateralVaultNonce: number;
|
|
242
202
|
insuranceVault: PublicKey;
|
|
243
203
|
insuranceVaultAuthority: PublicKey;
|
|
244
204
|
insuranceVaultNonce: number;
|
|
245
205
|
marginRatioInitial: BN;
|
|
246
206
|
marginRatioMaintenance: BN;
|
|
247
207
|
marginRatioPartial: BN;
|
|
248
|
-
markets: PublicKey;
|
|
249
|
-
curveHistory: PublicKey;
|
|
250
|
-
depositHistory: PublicKey;
|
|
251
|
-
fundingRateHistory: PublicKey;
|
|
252
|
-
fundingPaymentHistory: PublicKey;
|
|
253
|
-
tradeHistory: PublicKey;
|
|
254
|
-
liquidationHistory: PublicKey;
|
|
255
208
|
partialLiquidationClosePercentageNumerator: BN;
|
|
256
209
|
partialLiquidationClosePercentageDenominator: BN;
|
|
257
210
|
partialLiquidationPenaltyPercentageNumerator: BN;
|
|
@@ -267,33 +220,49 @@ export declare type StateAccount = {
|
|
|
267
220
|
discountMint: PublicKey;
|
|
268
221
|
oracleGuardRails: OracleGuardRails;
|
|
269
222
|
maxDeposit: BN;
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
};
|
|
273
|
-
export declare type OrderStateAccount = {
|
|
274
|
-
orderHistory: PublicKey;
|
|
275
|
-
orderFillerRewardStructure: OrderFillerRewardStructure;
|
|
223
|
+
numberOfMarkets: BN;
|
|
224
|
+
numberOfBanks: BN;
|
|
276
225
|
minOrderQuoteAssetAmount: BN;
|
|
277
226
|
};
|
|
278
|
-
export declare type
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
enabled: boolean;
|
|
283
|
-
};
|
|
284
|
-
export declare type MarketsAccount = {
|
|
285
|
-
markets: Market[];
|
|
286
|
-
};
|
|
287
|
-
export declare type Market = {
|
|
227
|
+
export declare type MarketAccount = {
|
|
228
|
+
initialized: boolean;
|
|
229
|
+
marketIndex: BN;
|
|
230
|
+
pubkey: PublicKey;
|
|
288
231
|
amm: AMM;
|
|
289
232
|
baseAssetAmount: BN;
|
|
290
233
|
baseAssetAmountLong: BN;
|
|
291
234
|
baseAssetAmountShort: BN;
|
|
292
|
-
initialized: boolean;
|
|
293
235
|
openInterest: BN;
|
|
294
236
|
marginRatioInitial: number;
|
|
295
237
|
marginRatioMaintenance: number;
|
|
296
238
|
marginRatioPartial: number;
|
|
239
|
+
nextFillRecordId: BN;
|
|
240
|
+
pnlPool: PoolBalance;
|
|
241
|
+
};
|
|
242
|
+
export declare type BankAccount = {
|
|
243
|
+
bankIndex: BN;
|
|
244
|
+
pubkey: PublicKey;
|
|
245
|
+
mint: PublicKey;
|
|
246
|
+
vault: PublicKey;
|
|
247
|
+
vaultAuthority: PublicKey;
|
|
248
|
+
vaultAuthorityNonce: number;
|
|
249
|
+
decimals: number;
|
|
250
|
+
optimalUtilization: BN;
|
|
251
|
+
optimalBorrowRate: BN;
|
|
252
|
+
maxBorrowRate: BN;
|
|
253
|
+
cumulativeDepositInterest: BN;
|
|
254
|
+
cumulativeBorrowInterest: BN;
|
|
255
|
+
depositBalance: BN;
|
|
256
|
+
borrowBalance: BN;
|
|
257
|
+
lastUpdated: BN;
|
|
258
|
+
oracle: PublicKey;
|
|
259
|
+
initialAssetWeight: BN;
|
|
260
|
+
maintenanceAssetWeight: BN;
|
|
261
|
+
initialLiabilityWeight: BN;
|
|
262
|
+
maintenanceLiabilityWeight: BN;
|
|
263
|
+
};
|
|
264
|
+
export declare type PoolBalance = {
|
|
265
|
+
balance: BN;
|
|
297
266
|
};
|
|
298
267
|
export declare type AMM = {
|
|
299
268
|
baseAssetReserve: BN;
|
|
@@ -318,50 +287,66 @@ export declare type AMM = {
|
|
|
318
287
|
totalFeeWithdrawn: BN;
|
|
319
288
|
totalFee: BN;
|
|
320
289
|
minimumQuoteAssetTradeSize: BN;
|
|
321
|
-
|
|
290
|
+
baseAssetAmountStepSize: BN;
|
|
322
291
|
lastOraclePrice: BN;
|
|
323
292
|
baseSpread: number;
|
|
293
|
+
curveUpdateIntensity: number;
|
|
294
|
+
netBaseAssetAmount: BN;
|
|
295
|
+
quoteAssetAmountLong: BN;
|
|
296
|
+
quoteAssetAmountShort: BN;
|
|
297
|
+
terminalQuoteAssetReserve: BN;
|
|
298
|
+
feePool: PoolBalance;
|
|
299
|
+
totalExchangeFee: BN;
|
|
300
|
+
totalMmFee: BN;
|
|
301
|
+
netRevenueSinceLastFunding: BN;
|
|
302
|
+
lastUpdateSlot: BN;
|
|
303
|
+
lastBidPriceTwap: BN;
|
|
304
|
+
lastAskPriceTwap: BN;
|
|
305
|
+
longSpread: BN;
|
|
306
|
+
shortSpread: BN;
|
|
324
307
|
};
|
|
325
308
|
export declare type UserPosition = {
|
|
326
309
|
baseAssetAmount: BN;
|
|
327
310
|
lastCumulativeFundingRate: BN;
|
|
328
311
|
marketIndex: BN;
|
|
329
312
|
quoteAssetAmount: BN;
|
|
313
|
+
quoteEntryAmount: BN;
|
|
330
314
|
openOrders: BN;
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
user: PublicKey;
|
|
315
|
+
unsettledPnl: BN;
|
|
316
|
+
openBids: BN;
|
|
317
|
+
openAsks: BN;
|
|
335
318
|
};
|
|
336
319
|
export declare type UserAccount = {
|
|
337
320
|
authority: PublicKey;
|
|
321
|
+
name: number[];
|
|
322
|
+
userId: number;
|
|
323
|
+
bankBalances: UserBankBalance[];
|
|
338
324
|
collateral: BN;
|
|
339
325
|
cumulativeDeposits: BN;
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
lastCollateralAvailableToClaim: BN;
|
|
349
|
-
forgoPositionSettlement: number;
|
|
350
|
-
hasSettledPosition: number;
|
|
351
|
-
};
|
|
352
|
-
export declare type UserOrdersAccount = {
|
|
326
|
+
fees: {
|
|
327
|
+
totalFeePaid: BN;
|
|
328
|
+
totalFeeRebate: BN;
|
|
329
|
+
totalTokenDiscount: BN;
|
|
330
|
+
totalReferralReward: BN;
|
|
331
|
+
totalRefereeDiscount: BN;
|
|
332
|
+
};
|
|
333
|
+
positions: UserPosition[];
|
|
353
334
|
orders: Order[];
|
|
354
|
-
|
|
335
|
+
};
|
|
336
|
+
export declare type UserBankBalance = {
|
|
337
|
+
bankIndex: BN;
|
|
338
|
+
balanceType: BankBalanceType;
|
|
339
|
+
balance: BN;
|
|
355
340
|
};
|
|
356
341
|
export declare type Order = {
|
|
357
342
|
status: OrderStatus;
|
|
358
343
|
orderType: OrderType;
|
|
359
344
|
ts: BN;
|
|
345
|
+
slot: BN;
|
|
360
346
|
orderId: BN;
|
|
361
347
|
userOrderId: number;
|
|
362
348
|
marketIndex: BN;
|
|
363
349
|
price: BN;
|
|
364
|
-
userBaseAssetAmount: BN;
|
|
365
350
|
baseAssetAmount: BN;
|
|
366
351
|
baseAssetAmountFilled: BN;
|
|
367
352
|
quoteAssetAmount: BN;
|
|
@@ -372,10 +357,14 @@ export declare type Order = {
|
|
|
372
357
|
triggerPrice: BN;
|
|
373
358
|
triggerCondition: OrderTriggerCondition;
|
|
374
359
|
discountTier: OrderDiscountTier;
|
|
360
|
+
existingPositionDirection: PositionDirection;
|
|
375
361
|
referrer: PublicKey;
|
|
376
362
|
postOnly: boolean;
|
|
377
363
|
immediateOrCancel: boolean;
|
|
378
364
|
oraclePriceOffset: BN;
|
|
365
|
+
auctionDuration: number;
|
|
366
|
+
auctionStartPrice: BN;
|
|
367
|
+
auctionEndPrice: BN;
|
|
379
368
|
};
|
|
380
369
|
export declare type OrderParams = {
|
|
381
370
|
orderType: OrderType;
|
|
@@ -399,6 +388,10 @@ export declare type OrderParams = {
|
|
|
399
388
|
referrer: boolean;
|
|
400
389
|
};
|
|
401
390
|
};
|
|
391
|
+
export declare type MakerInfo = {
|
|
392
|
+
maker: PublicKey;
|
|
393
|
+
order: Order;
|
|
394
|
+
};
|
|
402
395
|
export interface IWallet {
|
|
403
396
|
signTransaction(tx: Transaction): Promise<Transaction>;
|
|
404
397
|
signAllTransactions(txs: Transaction[]): Promise<Transaction[]>;
|
|
@@ -435,6 +428,9 @@ export declare type FeeStructure = {
|
|
|
435
428
|
refereeDiscountNumerator: BN;
|
|
436
429
|
refereeDiscountDenominator: BN;
|
|
437
430
|
};
|
|
431
|
+
makerRebateNumerator: BN;
|
|
432
|
+
makerRebateDenominator: BN;
|
|
433
|
+
fillerRewardStructure: OrderFillerRewardStructure;
|
|
438
434
|
};
|
|
439
435
|
export declare type OracleGuardRails = {
|
|
440
436
|
priceDivergence: {
|
package/lib/types.js
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TradeSide = exports.isVariant = exports.OrderTriggerCondition = exports.OrderAction = exports.OrderDiscountTier = exports.OrderStatus = exports.OrderType = exports.OracleSource = exports.PositionDirection = exports.SwapDirection = void 0;
|
|
3
|
+
exports.TradeSide = exports.isOneOfVariant = exports.isVariant = exports.OrderTriggerCondition = exports.OrderAction = exports.OrderDiscountTier = exports.OrderStatus = exports.OrderType = exports.OracleSource = exports.PositionDirection = exports.BankBalanceType = exports.SwapDirection = void 0;
|
|
4
4
|
// # Utility Types / Enums / Constants
|
|
5
5
|
class SwapDirection {
|
|
6
6
|
}
|
|
7
7
|
exports.SwapDirection = SwapDirection;
|
|
8
8
|
SwapDirection.ADD = { add: {} };
|
|
9
9
|
SwapDirection.REMOVE = { remove: {} };
|
|
10
|
+
class BankBalanceType {
|
|
11
|
+
}
|
|
12
|
+
exports.BankBalanceType = BankBalanceType;
|
|
13
|
+
BankBalanceType.DEPOSIT = { deposit: {} };
|
|
14
|
+
BankBalanceType.BORROW = { borrow: {} };
|
|
10
15
|
class PositionDirection {
|
|
11
16
|
}
|
|
12
17
|
exports.PositionDirection = PositionDirection;
|
|
@@ -17,6 +22,7 @@ class OracleSource {
|
|
|
17
22
|
exports.OracleSource = OracleSource;
|
|
18
23
|
OracleSource.PYTH = { pyth: {} };
|
|
19
24
|
OracleSource.SWITCHBOARD = { switchboard: {} };
|
|
25
|
+
OracleSource.QUOTE_ASSET = { quoteAsset: {} };
|
|
20
26
|
class OrderType {
|
|
21
27
|
}
|
|
22
28
|
exports.OrderType = OrderType;
|
|
@@ -53,6 +59,12 @@ function isVariant(object, type) {
|
|
|
53
59
|
return object.hasOwnProperty(type);
|
|
54
60
|
}
|
|
55
61
|
exports.isVariant = isVariant;
|
|
62
|
+
function isOneOfVariant(object, types) {
|
|
63
|
+
return types.reduce((result, type) => {
|
|
64
|
+
return result || object.hasOwnProperty(type);
|
|
65
|
+
}, false);
|
|
66
|
+
}
|
|
67
|
+
exports.isOneOfVariant = isOneOfVariant;
|
|
56
68
|
var TradeSide;
|
|
57
69
|
(function (TradeSide) {
|
|
58
70
|
TradeSide[TradeSide["None"] = 0] = "None";
|
package/lib/userName.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decodeName = exports.encodeName = exports.DEFAULT_USER_NAME = exports.MAX_NAME_LENGTH = void 0;
|
|
4
|
+
exports.MAX_NAME_LENGTH = 32;
|
|
5
|
+
exports.DEFAULT_USER_NAME = 'Main Account';
|
|
6
|
+
function encodeName(name) {
|
|
7
|
+
if (name.length > exports.MAX_NAME_LENGTH) {
|
|
8
|
+
throw Error(`User name (${name}) longer than 32 characters`);
|
|
9
|
+
}
|
|
10
|
+
const buffer = Buffer.alloc(32);
|
|
11
|
+
buffer.fill(name);
|
|
12
|
+
buffer.fill(' ', name.length);
|
|
13
|
+
return Array(...buffer);
|
|
14
|
+
}
|
|
15
|
+
exports.encodeName = encodeName;
|
|
16
|
+
function decodeName(bytes) {
|
|
17
|
+
const buffer = Buffer.from(bytes);
|
|
18
|
+
return buffer.toString('utf8').trim();
|
|
19
|
+
}
|
|
20
|
+
exports.decodeName = decodeName;
|
package/lib/util/computeUnits.js
CHANGED
|
@@ -1,27 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.findComputeUnitConsumption = void 0;
|
|
13
|
-
function findComputeUnitConsumption(programId, connection, txSignature, commitment = 'confirmed') {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
return computeUnits;
|
|
4
|
+
async function findComputeUnitConsumption(programId, connection, txSignature, commitment = 'confirmed') {
|
|
5
|
+
const tx = await connection.getTransaction(txSignature, { commitment });
|
|
6
|
+
const computeUnits = [];
|
|
7
|
+
const regex = new RegExp(`Program ${programId.toString()} consumed ([0-9]{0,6}) of 200000 compute units`);
|
|
8
|
+
tx.meta.logMessages.forEach((logMessage) => {
|
|
9
|
+
const match = logMessage.match(regex);
|
|
10
|
+
if (match && match[1]) {
|
|
11
|
+
computeUnits.push(match[1]);
|
|
12
|
+
}
|
|
25
13
|
});
|
|
14
|
+
return computeUnits;
|
|
26
15
|
}
|
|
27
16
|
exports.findComputeUnitConsumption = findComputeUnitConsumption;
|
package/lib/util/tps.js
CHANGED
|
@@ -1,27 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.estimateTps = void 0;
|
|
13
|
-
function estimateTps(programId, connection, failed) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
(signatures[0].blockTime - signatures[numberOfSignatures - 1].blockTime));
|
|
25
|
-
});
|
|
4
|
+
async function estimateTps(programId, connection, failed) {
|
|
5
|
+
let signatures = await connection.getSignaturesForAddress(programId, undefined, 'finalized');
|
|
6
|
+
if (failed) {
|
|
7
|
+
signatures = signatures.filter((signature) => signature.err);
|
|
8
|
+
}
|
|
9
|
+
const numberOfSignatures = signatures.length;
|
|
10
|
+
if (numberOfSignatures === 0) {
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
return (numberOfSignatures /
|
|
14
|
+
(signatures[0].blockTime - signatures[numberOfSignatures - 1].blockTime));
|
|
26
15
|
}
|
|
27
16
|
exports.estimateTps = estimateTps;
|
package/lib/wallet.js
CHANGED
|
@@ -1,31 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.Wallet = void 0;
|
|
13
4
|
class Wallet {
|
|
14
5
|
constructor(payer) {
|
|
15
6
|
this.payer = payer;
|
|
16
7
|
}
|
|
17
|
-
signTransaction(tx) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return tx;
|
|
21
|
-
});
|
|
8
|
+
async signTransaction(tx) {
|
|
9
|
+
tx.partialSign(this.payer);
|
|
10
|
+
return tx;
|
|
22
11
|
}
|
|
23
|
-
signAllTransactions(txs) {
|
|
24
|
-
return
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return t;
|
|
28
|
-
});
|
|
12
|
+
async signAllTransactions(txs) {
|
|
13
|
+
return txs.map((t) => {
|
|
14
|
+
t.partialSign(this.payer);
|
|
15
|
+
return t;
|
|
29
16
|
});
|
|
30
17
|
}
|
|
31
18
|
get publicKey() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@drift-labs/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-master.0",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"types": "lib/index.d.ts",
|
|
6
6
|
"author": "crispheaney",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"lint": "eslint './**/*.{ts,tsx}' --quiet",
|
|
14
14
|
"build": "yarn clean && tsc",
|
|
15
15
|
"clean": "rm -rf lib",
|
|
16
|
+
"test": "mocha -r ts-node/register tests/**/*.ts",
|
|
16
17
|
"patch-and-pub": "npm version patch --force && npm publish"
|
|
17
18
|
},
|
|
18
19
|
"keywords": [
|
|
@@ -31,17 +32,23 @@
|
|
|
31
32
|
"@project-serum/anchor": "0.24.2",
|
|
32
33
|
"@pythnetwork/client": "^2.5.1",
|
|
33
34
|
"@solana/spl-token": "^0.1.6",
|
|
34
|
-
"@solana/web3.js": "
|
|
35
|
+
"@solana/web3.js": "1.41.0",
|
|
35
36
|
"@switchboard-xyz/switchboard-v2": "^0.0.67",
|
|
36
37
|
"strict-event-emitter-types": "^2.0.0",
|
|
37
38
|
"uuid": "^8.3.2"
|
|
38
39
|
},
|
|
39
40
|
"devDependencies": {
|
|
41
|
+
"@types/chai": "^4.3.1",
|
|
42
|
+
"@types/mocha": "^9.1.1",
|
|
40
43
|
"@typescript-eslint/eslint-plugin": "^4.28.0",
|
|
41
44
|
"@typescript-eslint/parser": "^4.28.0",
|
|
45
|
+
"@types/jest": "^28.1.3",
|
|
46
|
+
"chai": "^4.3.6",
|
|
42
47
|
"eslint": "^7.29.0",
|
|
43
48
|
"eslint-config-prettier": "^8.3.0",
|
|
44
|
-
"eslint-plugin-prettier": "^3.4.0"
|
|
49
|
+
"eslint-plugin-prettier": "^3.4.0",
|
|
50
|
+
"mocha": "^10.0.0",
|
|
51
|
+
"ts-node": "^10.8.0"
|
|
45
52
|
},
|
|
46
53
|
"description": "SDK for Drift Protocol v1",
|
|
47
54
|
"engines": {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Commitment, Connection, PublicKey } from '@solana/web3.js';
|
|
2
2
|
import { v4 as uuidv4 } from 'uuid';
|
|
3
|
-
import {
|
|
3
|
+
import { BufferAndSlot } from './types';
|
|
4
4
|
import { promiseTimeout } from '../util/promiseTimeout';
|
|
5
5
|
|
|
6
6
|
type AccountToLoad = {
|
|
7
7
|
publicKey: PublicKey;
|
|
8
|
-
callbacks: Map<string, (buffer: Buffer) => void>;
|
|
8
|
+
callbacks: Map<string, (buffer: Buffer, slot: number) => void>;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
const GET_MULTIPLE_ACCOUNTS_CHUNK_SIZE = 99;
|
|
@@ -17,7 +17,7 @@ export class BulkAccountLoader {
|
|
|
17
17
|
commitment: Commitment;
|
|
18
18
|
pollingFrequency: number;
|
|
19
19
|
accountsToLoad = new Map<string, AccountToLoad>();
|
|
20
|
-
|
|
20
|
+
bufferAndSlotMap = new Map<string, BufferAndSlot>();
|
|
21
21
|
errorCallbacks = new Map<string, (e) => void>();
|
|
22
22
|
intervalId?: NodeJS.Timer;
|
|
23
23
|
// to handle clients spamming load
|
|
@@ -38,7 +38,7 @@ export class BulkAccountLoader {
|
|
|
38
38
|
|
|
39
39
|
public addAccount(
|
|
40
40
|
publicKey: PublicKey,
|
|
41
|
-
callback: (buffer: Buffer) => void
|
|
41
|
+
callback: (buffer: Buffer, slot: number) => void
|
|
42
42
|
): string {
|
|
43
43
|
const existingSize = this.accountsToLoad.size;
|
|
44
44
|
|
|
@@ -47,7 +47,10 @@ export class BulkAccountLoader {
|
|
|
47
47
|
if (existingAccountToLoad) {
|
|
48
48
|
existingAccountToLoad.callbacks.set(callbackId, callback);
|
|
49
49
|
} else {
|
|
50
|
-
const callbacks = new Map<
|
|
50
|
+
const callbacks = new Map<
|
|
51
|
+
string,
|
|
52
|
+
(buffer: Buffer, slot: number) => void
|
|
53
|
+
>();
|
|
51
54
|
callbacks.set(callbackId, callback);
|
|
52
55
|
const newAccountToLoad = {
|
|
53
56
|
publicKey,
|
|
@@ -167,7 +170,7 @@ export class BulkAccountLoader {
|
|
|
167
170
|
for (const i in accountsToLoad) {
|
|
168
171
|
const accountToLoad = accountsToLoad[i];
|
|
169
172
|
const key = accountToLoad.publicKey.toString();
|
|
170
|
-
const oldRPCResponse = this.
|
|
173
|
+
const oldRPCResponse = this.bufferAndSlotMap.get(key);
|
|
171
174
|
|
|
172
175
|
let newBuffer: Buffer | undefined = undefined;
|
|
173
176
|
if (rpcResponse.result.value[i]) {
|
|
@@ -177,11 +180,11 @@ export class BulkAccountLoader {
|
|
|
177
180
|
}
|
|
178
181
|
|
|
179
182
|
if (!oldRPCResponse) {
|
|
180
|
-
this.
|
|
183
|
+
this.bufferAndSlotMap.set(key, {
|
|
181
184
|
slot: newSlot,
|
|
182
185
|
buffer: newBuffer,
|
|
183
186
|
});
|
|
184
|
-
this.handleAccountCallbacks(accountToLoad, newBuffer);
|
|
187
|
+
this.handleAccountCallbacks(accountToLoad, newBuffer, newSlot);
|
|
185
188
|
continue;
|
|
186
189
|
}
|
|
187
190
|
|
|
@@ -191,24 +194,27 @@ export class BulkAccountLoader {
|
|
|
191
194
|
|
|
192
195
|
const oldBuffer = oldRPCResponse.buffer;
|
|
193
196
|
if (newBuffer && (!oldBuffer || !newBuffer.equals(oldBuffer))) {
|
|
194
|
-
this.
|
|
197
|
+
this.bufferAndSlotMap.set(key, {
|
|
195
198
|
slot: newSlot,
|
|
196
199
|
buffer: newBuffer,
|
|
197
200
|
});
|
|
198
|
-
this.handleAccountCallbacks(accountToLoad, newBuffer);
|
|
201
|
+
this.handleAccountCallbacks(accountToLoad, newBuffer, newSlot);
|
|
199
202
|
}
|
|
200
203
|
}
|
|
201
204
|
}
|
|
202
205
|
|
|
203
|
-
handleAccountCallbacks(
|
|
206
|
+
handleAccountCallbacks(
|
|
207
|
+
accountToLoad: AccountToLoad,
|
|
208
|
+
buffer: Buffer,
|
|
209
|
+
slot: number
|
|
210
|
+
): void {
|
|
204
211
|
for (const [_, callback] of accountToLoad.callbacks) {
|
|
205
|
-
callback(buffer);
|
|
212
|
+
callback(buffer, slot);
|
|
206
213
|
}
|
|
207
214
|
}
|
|
208
215
|
|
|
209
|
-
public
|
|
210
|
-
|
|
211
|
-
return accountData?.buffer;
|
|
216
|
+
public getBufferAndSlot(publicKey: PublicKey): BufferAndSlot | undefined {
|
|
217
|
+
return this.bufferAndSlotMap.get(publicKey.toString());
|
|
212
218
|
}
|
|
213
219
|
|
|
214
220
|
public startPolling(): void {
|