@drift-labs/sdk 0.2.0-master.2 → 0.2.0-master.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/lib/accounts/bulkUserStatsSubscription.d.ts +7 -0
- package/lib/accounts/bulkUserStatsSubscription.js +21 -0
- package/lib/accounts/bulkUserSubscription.js +0 -1
- package/lib/accounts/fetch.d.ts +2 -1
- package/lib/accounts/fetch.js +9 -1
- package/lib/accounts/pollingUserStatsAccountSubscriber.d.ts +27 -0
- package/lib/accounts/pollingUserStatsAccountSubscriber.js +113 -0
- package/lib/accounts/types.d.ts +14 -1
- package/lib/accounts/webSocketUserStatsAccountSubsriber.d.ts +20 -0
- package/lib/accounts/webSocketUserStatsAccountSubsriber.js +47 -0
- package/lib/addresses/pda.d.ts +1 -0
- package/lib/addresses/pda.js +8 -1
- package/lib/admin.d.ts +9 -5
- package/lib/admin.js +52 -11
- package/lib/clearingHouse.d.ts +52 -23
- package/lib/clearingHouse.js +727 -197
- package/lib/clearingHouseConfig.d.ts +1 -0
- package/lib/clearingHouseUser.d.ts +17 -17
- package/lib/clearingHouseUser.js +186 -101
- package/lib/clearingHouseUserStats.d.ts +18 -0
- package/lib/clearingHouseUserStats.js +49 -0
- package/lib/clearingHouseUserStatsConfig.d.ts +14 -0
- package/lib/clearingHouseUserStatsConfig.js +2 -0
- package/lib/config.js +1 -1
- package/lib/constants/banks.d.ts +2 -2
- package/lib/constants/banks.js +12 -4
- package/lib/constants/numericConstants.d.ts +5 -0
- package/lib/constants/numericConstants.js +8 -3
- package/lib/events/eventList.js +3 -0
- package/lib/events/types.d.ts +3 -1
- package/lib/events/types.js +2 -0
- package/lib/factory/bigNum.d.ts +1 -0
- package/lib/factory/bigNum.js +34 -10
- package/lib/idl/clearing_house.json +1609 -388
- package/lib/idl/{mock_usdc_faucet.json → token_faucet.json} +46 -23
- package/lib/index.d.ts +9 -3
- package/lib/index.js +13 -3
- package/lib/math/amm.d.ts +1 -0
- package/lib/math/amm.js +22 -38
- package/lib/math/auction.js +4 -1
- package/lib/math/bankBalance.d.ts +7 -1
- package/lib/math/bankBalance.js +77 -2
- package/lib/math/margin.d.ts +11 -0
- package/lib/math/margin.js +72 -0
- package/lib/math/market.d.ts +4 -1
- package/lib/math/market.js +35 -1
- package/lib/math/oracles.d.ts +3 -0
- package/lib/math/oracles.js +25 -5
- package/lib/math/orders.d.ts +5 -2
- package/lib/math/orders.js +53 -12
- package/lib/math/position.d.ts +8 -0
- package/lib/math/position.js +45 -12
- package/lib/math/trade.d.ts +1 -1
- package/lib/math/trade.js +7 -10
- package/lib/orderParams.d.ts +14 -5
- package/lib/orderParams.js +8 -96
- package/lib/slot/SlotSubscriber.d.ts +7 -0
- package/lib/slot/SlotSubscriber.js +3 -0
- package/lib/{mockUSDCFaucet.d.ts → tokenFaucet.d.ts} +8 -5
- package/lib/{mockUSDCFaucet.js → tokenFaucet.js} +63 -51
- package/lib/tx/retryTxSender.js +9 -2
- package/lib/tx/utils.js +1 -1
- package/lib/types.d.ts +233 -26
- package/lib/types.js +64 -1
- package/lib/util/computeUnits.js +1 -1
- package/lib/util/getTokenAddress.d.ts +2 -0
- package/lib/util/getTokenAddress.js +9 -0
- package/package.json +3 -3
- package/src/accounts/bulkUserStatsSubscription.ts +33 -0
- package/src/accounts/bulkUserSubscription.ts +0 -1
- package/src/accounts/fetch.ts +27 -2
- package/src/accounts/pollingUserStatsAccountSubscriber.ts +172 -0
- package/src/accounts/types.ts +18 -0
- package/src/accounts/webSocketUserStatsAccountSubsriber.ts +80 -0
- package/src/addresses/marketAddresses.js +26 -0
- package/src/addresses/pda.ts +13 -0
- package/src/admin.ts +82 -15
- package/src/assert/assert.js +9 -0
- package/src/clearingHouse.ts +1224 -319
- package/src/clearingHouseConfig.ts +1 -0
- package/src/clearingHouseUser.ts +311 -148
- package/src/clearingHouseUserStats.ts +75 -0
- package/src/clearingHouseUserStatsConfig.ts +18 -0
- package/src/config.ts +1 -1
- package/src/constants/banks.js +42 -0
- package/src/constants/banks.ts +14 -4
- package/src/constants/markets.js +42 -0
- package/src/constants/numericConstants.js +41 -0
- package/src/constants/numericConstants.ts +14 -2
- package/src/events/eventList.js +77 -0
- package/src/events/eventList.ts +3 -0
- package/src/events/eventSubscriber.js +139 -0
- package/src/events/fetchLogs.js +50 -0
- package/src/events/pollingLogProvider.js +64 -0
- package/src/events/sort.js +44 -0
- package/src/events/txEventCache.js +71 -0
- package/src/events/types.ts +6 -0
- package/src/events/webSocketLogProvider.js +41 -0
- package/src/examples/makeTradeExample.js +80 -0
- package/src/factory/bigNum.js +390 -0
- package/src/factory/bigNum.ts +42 -13
- package/src/factory/oracleClient.js +20 -0
- package/src/idl/clearing_house.json +1609 -388
- package/src/idl/{mock_usdc_faucet.json → token_faucet.json} +46 -23
- package/src/index.ts +9 -3
- package/src/math/amm.ts +54 -55
- package/src/math/auction.js +42 -0
- package/src/math/auction.ts +5 -1
- package/src/math/bankBalance.ts +148 -2
- package/src/math/conversion.js +11 -0
- package/src/math/funding.js +248 -0
- package/src/math/margin.ts +124 -0
- package/src/math/market.ts +66 -1
- package/src/math/oracles.js +26 -0
- package/src/math/oracles.ts +42 -5
- package/src/math/orders.ts +112 -13
- package/src/math/position.ts +64 -9
- package/src/math/repeg.js +128 -0
- package/src/math/state.js +15 -0
- package/src/math/trade.js +253 -0
- package/src/math/trade.ts +23 -25
- package/src/math/utils.js +0 -1
- package/src/oracles/oracleClientCache.js +19 -0
- package/src/oracles/pythClient.js +46 -0
- package/src/oracles/quoteAssetOracleClient.js +32 -0
- package/src/oracles/switchboardClient.js +69 -0
- package/src/oracles/types.js +2 -0
- package/src/orderParams.js +20 -0
- package/src/orderParams.ts +20 -141
- package/src/slot/SlotSubscriber.js +39 -0
- package/src/slot/SlotSubscriber.ts +11 -1
- package/src/token/index.js +38 -0
- package/src/tokenFaucet.js +189 -0
- package/src/{mockUSDCFaucet.ts → tokenFaucet.ts} +82 -70
- package/src/tx/retryTxSender.ts +11 -3
- package/src/tx/types.js +2 -0
- package/src/tx/utils.js +17 -0
- package/src/tx/utils.ts +1 -1
- package/src/types.ts +236 -27
- package/src/userName.js +20 -0
- package/src/util/computeUnits.js +21 -11
- package/src/util/computeUnits.ts +1 -1
- package/src/util/getTokenAddress.js +9 -0
- package/src/util/getTokenAddress.ts +18 -0
- package/src/util/promiseTimeout.js +14 -0
- package/src/util/tps.js +27 -0
- package/src/wallet.js +35 -0
- package/tests/bn/test.ts +10 -0
- package/lib/orders.d.ts +0 -8
- package/lib/orders.js +0 -142
- package/src/orders.ts +0 -251
- package/src/util/computeUnits.js.map +0 -1
package/src/factory/bigNum.ts
CHANGED
|
@@ -17,6 +17,10 @@ export class BigNum {
|
|
|
17
17
|
this.precision = new BN(precisionVal);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
private bigNumFromParam(bn: BigNum | BN) {
|
|
21
|
+
return BN.isBN(bn) ? BigNum.from(bn) : bn;
|
|
22
|
+
}
|
|
23
|
+
|
|
20
24
|
public add(bn: BigNum): BigNum {
|
|
21
25
|
assert(bn.precision.eq(this.precision), 'Adding unequal precisions');
|
|
22
26
|
|
|
@@ -30,7 +34,7 @@ export class BigNum {
|
|
|
30
34
|
}
|
|
31
35
|
|
|
32
36
|
public mul(bn: BigNum | BN): BigNum {
|
|
33
|
-
const mulVal =
|
|
37
|
+
const mulVal = this.bigNumFromParam(bn);
|
|
34
38
|
|
|
35
39
|
return BigNum.from(
|
|
36
40
|
this.val.mul(mulVal.val),
|
|
@@ -44,7 +48,7 @@ export class BigNum {
|
|
|
44
48
|
* @returns
|
|
45
49
|
*/
|
|
46
50
|
public scalarMul(bn: BigNum | BN): BigNum {
|
|
47
|
-
if (bn
|
|
51
|
+
if (BN.isBN(bn)) return BigNum.from(this.val.mul(bn), this.precision);
|
|
48
52
|
|
|
49
53
|
return BigNum.from(
|
|
50
54
|
this.val.mul(bn.val),
|
|
@@ -53,7 +57,8 @@ export class BigNum {
|
|
|
53
57
|
}
|
|
54
58
|
|
|
55
59
|
public div(bn: BigNum | BN): BigNum {
|
|
56
|
-
if (bn
|
|
60
|
+
if (BN.isBN(bn)) return BigNum.from(this.val.div(bn), this.precision);
|
|
61
|
+
|
|
57
62
|
return BigNum.from(this.val.div(bn.val), this.precision.sub(bn.precision));
|
|
58
63
|
}
|
|
59
64
|
|
|
@@ -101,7 +106,7 @@ export class BigNum {
|
|
|
101
106
|
}
|
|
102
107
|
|
|
103
108
|
public gt(bn: BigNum | BN, ignorePrecision?: boolean): boolean {
|
|
104
|
-
const comparisonVal =
|
|
109
|
+
const comparisonVal = this.bigNumFromParam(bn);
|
|
105
110
|
|
|
106
111
|
if (!ignorePrecision && !comparisonVal.eq(ZERO)) {
|
|
107
112
|
assert(
|
|
@@ -114,7 +119,7 @@ export class BigNum {
|
|
|
114
119
|
}
|
|
115
120
|
|
|
116
121
|
public lt(bn: BigNum | BN, ignorePrecision?: boolean): boolean {
|
|
117
|
-
const comparisonVal =
|
|
122
|
+
const comparisonVal = this.bigNumFromParam(bn);
|
|
118
123
|
|
|
119
124
|
if (!ignorePrecision && !comparisonVal.val.eq(ZERO)) {
|
|
120
125
|
assert(
|
|
@@ -127,7 +132,7 @@ export class BigNum {
|
|
|
127
132
|
}
|
|
128
133
|
|
|
129
134
|
public gte(bn: BigNum | BN, ignorePrecision?: boolean): boolean {
|
|
130
|
-
const comparisonVal =
|
|
135
|
+
const comparisonVal = this.bigNumFromParam(bn);
|
|
131
136
|
|
|
132
137
|
if (!ignorePrecision && !comparisonVal.val.eq(ZERO)) {
|
|
133
138
|
assert(
|
|
@@ -140,7 +145,7 @@ export class BigNum {
|
|
|
140
145
|
}
|
|
141
146
|
|
|
142
147
|
public lte(bn: BigNum | BN, ignorePrecision?: boolean): boolean {
|
|
143
|
-
const comparisonVal =
|
|
148
|
+
const comparisonVal = this.bigNumFromParam(bn);
|
|
144
149
|
|
|
145
150
|
if (!ignorePrecision && !comparisonVal.val.eq(ZERO)) {
|
|
146
151
|
assert(
|
|
@@ -153,7 +158,7 @@ export class BigNum {
|
|
|
153
158
|
}
|
|
154
159
|
|
|
155
160
|
public eq(bn: BigNum | BN, ignorePrecision?: boolean): boolean {
|
|
156
|
-
const comparisonVal =
|
|
161
|
+
const comparisonVal = this.bigNumFromParam(bn);
|
|
157
162
|
|
|
158
163
|
if (!ignorePrecision && !comparisonVal.val.eq(ZERO)) {
|
|
159
164
|
assert(
|
|
@@ -206,7 +211,8 @@ export class BigNum {
|
|
|
206
211
|
'Tried to print a BN with precision lower than zero'
|
|
207
212
|
);
|
|
208
213
|
|
|
209
|
-
const
|
|
214
|
+
const isNeg = this.isNeg();
|
|
215
|
+
const plainString = this.abs().toString();
|
|
210
216
|
const precisionNum = this.precision.toNumber();
|
|
211
217
|
|
|
212
218
|
// make a string with at least the precisionNum number of zeroes
|
|
@@ -227,6 +233,9 @@ export class BigNum {
|
|
|
227
233
|
// add zero if leading delim
|
|
228
234
|
if (printString[0] === BigNum.delim) printString = `0${printString}`;
|
|
229
235
|
|
|
236
|
+
// Add minus if negative
|
|
237
|
+
if (isNeg) printString = `-${printString}`;
|
|
238
|
+
|
|
230
239
|
// remove trailing delim
|
|
231
240
|
if (printString[printString.length - 1] === BigNum.delim)
|
|
232
241
|
printString = printString.slice(0, printString.length - 1);
|
|
@@ -392,10 +401,30 @@ export class BigNum {
|
|
|
392
401
|
): string {
|
|
393
402
|
const prefix = `${this.lt(BigNum.zero()) ? `-` : ``}$`;
|
|
394
403
|
|
|
395
|
-
const
|
|
396
|
-
useTradePrecision || precisionOverride
|
|
397
|
-
|
|
398
|
-
|
|
404
|
+
const usingCustomPrecision =
|
|
405
|
+
true && (useTradePrecision || precisionOverride);
|
|
406
|
+
|
|
407
|
+
let val = usingCustomPrecision
|
|
408
|
+
? this.prettyPrint(useTradePrecision, precisionOverride)
|
|
409
|
+
: BigNum.fromPrint(this.toFixed(2), new BN(2)).prettyPrint();
|
|
410
|
+
|
|
411
|
+
// Append two trailing zeroes if not using custom precision
|
|
412
|
+
if (!usingCustomPrecision) {
|
|
413
|
+
const [_, rightSide] = val.split(BigNum.delim);
|
|
414
|
+
|
|
415
|
+
const trailingLength = rightSide?.length ?? 0;
|
|
416
|
+
|
|
417
|
+
if (trailingLength < 2) {
|
|
418
|
+
const numHasDecimals = this.print().includes(BigNum.delim);
|
|
419
|
+
|
|
420
|
+
// Handle case where pretty print won't include the decimal point
|
|
421
|
+
if (trailingLength === 0 && numHasDecimals) {
|
|
422
|
+
val = `${val}.00`;
|
|
423
|
+
} else {
|
|
424
|
+
val = `${val}${new Array(2 - trailingLength).fill('0').join('')}`;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
399
428
|
|
|
400
429
|
return `${prefix}${val.replace('-', '')}`;
|
|
401
430
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getOracleClient = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
const pythClient_1 = require("../oracles/pythClient");
|
|
6
|
+
const switchboardClient_1 = require("../oracles/switchboardClient");
|
|
7
|
+
const quoteAssetOracleClient_1 = require("../oracles/quoteAssetOracleClient");
|
|
8
|
+
function getOracleClient(oracleSource, connection) {
|
|
9
|
+
if (types_1.isVariant(oracleSource, 'pyth')) {
|
|
10
|
+
return new pythClient_1.PythClient(connection);
|
|
11
|
+
}
|
|
12
|
+
if (types_1.isVariant(oracleSource, 'switchboard')) {
|
|
13
|
+
return new switchboardClient_1.SwitchboardClient(connection);
|
|
14
|
+
}
|
|
15
|
+
if (types_1.isVariant(oracleSource, 'quoteAsset')) {
|
|
16
|
+
return new quoteAssetOracleClient_1.QuoteAssetOracleClient();
|
|
17
|
+
}
|
|
18
|
+
throw new Error(`Unknown oracle source ${oracleSource}`);
|
|
19
|
+
}
|
|
20
|
+
exports.getOracleClient = getOracleClient;
|