@drift-labs/sdk 0.1.18-master.0 → 0.1.18-orders.1
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/defaultClearingHouseAccountSubscriber.d.ts +7 -4
- package/lib/accounts/defaultClearingHouseAccountSubscriber.js +27 -2
- package/lib/accounts/defaultHistoryAccountSubscriber.d.ts +28 -0
- package/lib/accounts/defaultHistoryAccountSubscriber.js +110 -0
- package/lib/accounts/defaultUserAccountSubscriber.d.ts +3 -2
- package/lib/accounts/defaultUserAccountSubscriber.js +12 -1
- package/lib/accounts/types.d.ts +31 -5
- package/lib/accounts/webSocketAccountSubscriber.d.ts +0 -1
- package/lib/addresses.d.ts +4 -1
- package/lib/addresses.js +28 -1
- package/lib/admin.d.ts +10 -5
- package/lib/admin.js +53 -30
- package/lib/assert/assert.d.ts +0 -1
- package/lib/clearingHouse.d.ts +22 -3
- package/lib/clearingHouse.js +246 -15
- package/lib/clearingHouseUser.d.ts +10 -17
- package/lib/clearingHouseUser.js +111 -97
- package/lib/config.d.ts +0 -1
- package/lib/config.js +1 -1
- package/lib/constants/markets.d.ts +0 -1
- package/lib/constants/numericConstants.d.ts +0 -1
- package/lib/examples/makeTradeExample.d.ts +0 -1
- package/lib/examples/makeTradeExample.js +6 -6
- package/lib/idl/clearing_house.json +895 -132
- package/lib/index.d.ts +4 -1
- package/lib/index.js +4 -0
- package/lib/math/amm.d.ts +1 -1
- package/lib/math/amm.js +38 -15
- package/lib/math/conversion.d.ts +0 -1
- package/lib/math/conversion.js +1 -1
- package/lib/math/funding.d.ts +0 -1
- package/lib/math/funding.js +1 -1
- package/lib/math/insuranceFund.d.ts +0 -1
- package/lib/math/market.d.ts +2 -2
- package/lib/math/market.js +12 -2
- package/lib/math/orders.d.ts +3 -0
- package/lib/math/orders.js +30 -0
- package/lib/math/position.d.ts +4 -2
- package/lib/math/position.js +19 -5
- package/lib/math/trade.d.ts +0 -1
- package/lib/math/trade.js +16 -16
- package/lib/math/utils.d.ts +0 -1
- package/lib/mockUSDCFaucet.d.ts +0 -1
- package/lib/orderParams.d.ts +7 -0
- package/lib/orderParams.js +88 -0
- package/lib/orders.d.ts +5 -0
- package/lib/orders.js +136 -0
- package/lib/pythClient.d.ts +0 -1
- package/lib/pythClient.js +1 -1
- package/lib/tx/defaultTxSender.d.ts +0 -1
- package/lib/tx/types.d.ts +0 -1
- package/lib/tx/utils.d.ts +0 -1
- package/lib/types.d.ts +140 -7
- package/lib/types.js +36 -1
- package/lib/util/computeUnits.d.ts +0 -1
- package/lib/util/tps.d.ts +0 -1
- package/lib/wallet.d.ts +0 -1
- package/package.json +1 -1
- package/src/accounts/defaultClearingHouseAccountSubscriber.ts +52 -5
- package/src/accounts/defaultHistoryAccountSubscriber.ts +176 -0
- package/src/accounts/defaultUserAccountSubscriber.ts +29 -2
- package/src/accounts/types.ts +41 -4
- package/src/addresses.ts +35 -0
- package/src/admin.ts +86 -33
- package/src/clearingHouse.ts +340 -7
- package/src/clearingHouseUser.ts +154 -102
- package/src/config.ts +1 -1
- package/src/idl/clearing_house.json +895 -132
- package/src/index.ts +4 -0
- package/src/math/amm.ts +47 -14
- package/src/math/market.ts +28 -2
- package/src/math/orders.ts +39 -0
- package/src/math/position.ts +23 -3
- package/src/orderParams.ts +128 -0
- package/src/orders.ts +230 -0
- package/src/types.ts +124 -6
- package/tsconfig.json +0 -1
- package/lib/accounts/defaultClearingHouseAccountSubscriber.d.ts.map +0 -1
- package/lib/accounts/defaultUserAccountSubscriber.d.ts.map +0 -1
- package/lib/accounts/types.d.ts.map +0 -1
- package/lib/accounts/webSocketAccountSubscriber.d.ts.map +0 -1
- package/lib/addresses.d.ts.map +0 -1
- package/lib/admin.d.ts.map +0 -1
- package/lib/assert/assert.d.ts.map +0 -1
- package/lib/clearingHouse.d.ts.map +0 -1
- package/lib/clearingHouseUser.d.ts.map +0 -1
- package/lib/config.d.ts.map +0 -1
- package/lib/constants/markets.d.ts.map +0 -1
- package/lib/constants/numericConstants.d.ts.map +0 -1
- package/lib/examples/makeTradeExample.d.ts.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/math/amm.d.ts.map +0 -1
- package/lib/math/conversion.d.ts.map +0 -1
- package/lib/math/funding.d.ts.map +0 -1
- package/lib/math/insuranceFund.d.ts.map +0 -1
- package/lib/math/market.d.ts.map +0 -1
- package/lib/math/position.d.ts.map +0 -1
- package/lib/math/trade.d.ts.map +0 -1
- package/lib/math/utils.d.ts.map +0 -1
- package/lib/mockUSDCFaucet.d.ts.map +0 -1
- package/lib/pythClient.d.ts.map +0 -1
- package/lib/tx/defaultTxSender.d.ts.map +0 -1
- package/lib/tx/types.d.ts.map +0 -1
- package/lib/tx/utils.d.ts.map +0 -1
- package/lib/types.d.ts.map +0 -1
- package/lib/util/computeUnits.d.ts.map +0 -1
- package/lib/util/tps.d.ts.map +0 -1
- package/lib/wallet.d.ts.map +0 -1
package/lib/clearingHouse.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="bn.js" />
|
|
3
3
|
import { BN, Program, Provider } from '@project-serum/anchor';
|
|
4
|
-
import { MarketsAccount, StateAccount, DepositHistoryAccount, FundingPaymentHistoryAccount, FundingRateHistoryAccount, IWallet, LiquidationHistoryAccount, PositionDirection, TradeHistoryAccount, UserAccount, Market,
|
|
4
|
+
import { MarketsAccount, StateAccount, CurveHistoryAccount, DepositHistoryAccount, FundingPaymentHistoryAccount, FundingRateHistoryAccount, IWallet, LiquidationHistoryAccount, PositionDirection, TradeHistoryAccount, UserAccount, Market, OrderHistoryAccount, OrderStateAccount, OrderParams, Order } from './types';
|
|
5
5
|
import { Connection, PublicKey, TransactionSignature, Keypair, ConfirmOptions, TransactionInstruction } from '@solana/web3.js';
|
|
6
6
|
import { MockUSDCFaucet } from './mockUSDCFaucet';
|
|
7
7
|
import { EventEmitter } from 'events';
|
|
@@ -56,7 +56,11 @@ export declare class ClearingHouse {
|
|
|
56
56
|
getTradeHistoryAccount(): TradeHistoryAccount;
|
|
57
57
|
getLiquidationHistoryAccount(): LiquidationHistoryAccount;
|
|
58
58
|
getDepositHistoryAccount(): DepositHistoryAccount;
|
|
59
|
-
getCurveHistoryAccount():
|
|
59
|
+
getCurveHistoryAccount(): CurveHistoryAccount;
|
|
60
|
+
getOrderHistoryAccount(): OrderHistoryAccount;
|
|
61
|
+
orderStatePublicKey?: PublicKey;
|
|
62
|
+
getOrderStatePublicKey(): Promise<PublicKey>;
|
|
63
|
+
getOrderStateAccount(): OrderStateAccount;
|
|
60
64
|
/**
|
|
61
65
|
* Update the wallet to use for clearing house transactions and linked user account
|
|
62
66
|
* @param newWallet
|
|
@@ -69,8 +73,10 @@ export declare class ClearingHouse {
|
|
|
69
73
|
getInitializeUserInstructions(): Promise<[
|
|
70
74
|
Keypair,
|
|
71
75
|
PublicKey,
|
|
76
|
+
TransactionInstruction,
|
|
72
77
|
TransactionInstruction
|
|
73
78
|
]>;
|
|
79
|
+
getInitializeUserOrdersInstruction(userAccountPublicKey?: PublicKey): Promise<TransactionInstruction>;
|
|
74
80
|
userAccountPublicKey?: PublicKey;
|
|
75
81
|
/**
|
|
76
82
|
* Get the address for the Clearing House User's account. NOT the user's wallet address.
|
|
@@ -79,6 +85,12 @@ export declare class ClearingHouse {
|
|
|
79
85
|
getUserAccountPublicKey(): Promise<PublicKey>;
|
|
80
86
|
userAccount?: UserAccount;
|
|
81
87
|
getUserAccount(): Promise<UserAccount>;
|
|
88
|
+
userOrdersAccountPublicKey?: PublicKey;
|
|
89
|
+
/**
|
|
90
|
+
* Get the address for the Clearing House User Order's account. NOT the user's wallet address.
|
|
91
|
+
* @returns
|
|
92
|
+
*/
|
|
93
|
+
getUserOrdersAccountPublicKey(): Promise<PublicKey>;
|
|
82
94
|
depositCollateral(amount: BN, collateralAccountPublicKey: PublicKey, userPositionsAccountPublicKey?: PublicKey): Promise<TransactionSignature>;
|
|
83
95
|
getDepositCollateralInstruction(amount: BN, collateralAccountPublicKey: PublicKey, userPositionsAccountPublicKey?: PublicKey): Promise<TransactionInstruction>;
|
|
84
96
|
/**
|
|
@@ -94,6 +106,14 @@ export declare class ClearingHouse {
|
|
|
94
106
|
getWithdrawCollateralIx(amount: BN, collateralAccountPublicKey: PublicKey): Promise<TransactionInstruction>;
|
|
95
107
|
openPosition(direction: PositionDirection, amount: BN, marketIndex: BN, limitPrice?: BN, discountToken?: PublicKey, referrer?: PublicKey): Promise<TransactionSignature>;
|
|
96
108
|
getOpenPositionIx(direction: PositionDirection, amount: BN, marketIndex: BN, limitPrice?: BN, discountToken?: PublicKey, referrer?: PublicKey): Promise<TransactionInstruction>;
|
|
109
|
+
placeOrder(orderParams: OrderParams, discountToken?: PublicKey, referrer?: PublicKey): Promise<TransactionSignature>;
|
|
110
|
+
getPlaceOrderIx(orderParams: OrderParams, discountToken?: PublicKey, referrer?: PublicKey): Promise<TransactionInstruction>;
|
|
111
|
+
cancelOrder(orderId: BN): Promise<TransactionSignature>;
|
|
112
|
+
getCancelOrderIx(orderId: BN): Promise<TransactionInstruction>;
|
|
113
|
+
fillOrder(userAccountPublicKey: PublicKey, userOrdersAccountPublicKey: PublicKey, order: Order): Promise<TransactionSignature>;
|
|
114
|
+
getFillOrderIx(userAccountPublicKey: PublicKey, userOrdersAccountPublicKey: PublicKey, order: Order): Promise<TransactionInstruction>;
|
|
115
|
+
placeAndFillOrder(orderParams: OrderParams, discountToken?: PublicKey, referrer?: PublicKey): Promise<TransactionSignature>;
|
|
116
|
+
getPlaceAndFillOrderIx(orderParams: OrderParams, discountToken?: PublicKey, referrer?: PublicKey): Promise<TransactionInstruction>;
|
|
97
117
|
/**
|
|
98
118
|
* Close an entire position. If you want to reduce a position, use the {@link openPosition} method in the opposite direction of the current position.
|
|
99
119
|
* @param marketIndex
|
|
@@ -111,4 +131,3 @@ export declare class ClearingHouse {
|
|
|
111
131
|
getSettleFundingPaymentIx(userAccount: PublicKey, userPositionsAccount: PublicKey): Promise<TransactionInstruction>;
|
|
112
132
|
triggerEvent(eventName: keyof ClearingHouseAccountEvents, data?: any): void;
|
|
113
133
|
}
|
|
114
|
-
//# sourceMappingURL=clearingHouse.d.ts.map
|
package/lib/clearingHouse.js
CHANGED
|
@@ -90,6 +90,7 @@ class ClearingHouse {
|
|
|
90
90
|
'fundingRateHistoryAccount',
|
|
91
91
|
'liquidationHistoryAccount',
|
|
92
92
|
'tradeHistoryAccount',
|
|
93
|
+
'orderHistoryAccount',
|
|
93
94
|
]);
|
|
94
95
|
});
|
|
95
96
|
}
|
|
@@ -115,7 +116,7 @@ class ClearingHouse {
|
|
|
115
116
|
if (this.statePublicKey) {
|
|
116
117
|
return this.statePublicKey;
|
|
117
118
|
}
|
|
118
|
-
this.statePublicKey = yield
|
|
119
|
+
this.statePublicKey = yield addresses_1.getClearingHouseStateAccountPublicKey(this.program.programId);
|
|
119
120
|
return this.statePublicKey;
|
|
120
121
|
});
|
|
121
122
|
}
|
|
@@ -149,6 +150,21 @@ class ClearingHouse {
|
|
|
149
150
|
getCurveHistoryAccount() {
|
|
150
151
|
return this.accountSubscriber.getCurveHistoryAccount();
|
|
151
152
|
}
|
|
153
|
+
getOrderHistoryAccount() {
|
|
154
|
+
return this.accountSubscriber.getOrderHistoryAccount();
|
|
155
|
+
}
|
|
156
|
+
getOrderStatePublicKey() {
|
|
157
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
if (this.orderStatePublicKey) {
|
|
159
|
+
return this.orderStatePublicKey;
|
|
160
|
+
}
|
|
161
|
+
this.orderStatePublicKey = yield addresses_1.getOrderStateAccountPublicKey(this.program.programId);
|
|
162
|
+
return this.orderStatePublicKey;
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
getOrderStateAccount() {
|
|
166
|
+
return this.accountSubscriber.getOrderStateAccount();
|
|
167
|
+
}
|
|
152
168
|
/**
|
|
153
169
|
* Update the wallet to use for clearing house transactions and linked user account
|
|
154
170
|
* @param newWallet
|
|
@@ -166,15 +182,17 @@ class ClearingHouse {
|
|
|
166
182
|
}
|
|
167
183
|
initializeUserAccount() {
|
|
168
184
|
return __awaiter(this, void 0, void 0, function* () {
|
|
169
|
-
const [userPositionsAccount, userAccountPublicKey, initializeUserAccountIx,] = yield this.getInitializeUserInstructions();
|
|
170
|
-
const tx = new web3_js_1.Transaction()
|
|
185
|
+
const [userPositionsAccount, userAccountPublicKey, initializeUserAccountIx, initializeUserOrdersAccountIx,] = yield this.getInitializeUserInstructions();
|
|
186
|
+
const tx = new web3_js_1.Transaction()
|
|
187
|
+
.add(initializeUserAccountIx)
|
|
188
|
+
.add(initializeUserOrdersAccountIx);
|
|
171
189
|
const txSig = yield this.txSender.send(tx, [userPositionsAccount], this.opts);
|
|
172
190
|
return [txSig, userAccountPublicKey];
|
|
173
191
|
});
|
|
174
192
|
}
|
|
175
193
|
getInitializeUserInstructions() {
|
|
176
194
|
return __awaiter(this, void 0, void 0, function* () {
|
|
177
|
-
const [
|
|
195
|
+
const [userAccountPublicKey, userAccountNonce] = yield addresses_1.getUserAccountPublicKeyAndNonce(this.program.programId, this.wallet.publicKey);
|
|
178
196
|
const remainingAccounts = [];
|
|
179
197
|
const optionalAccounts = {
|
|
180
198
|
whitelistToken: false,
|
|
@@ -192,7 +210,7 @@ class ClearingHouse {
|
|
|
192
210
|
const userPositions = new web3_js_1.Keypair();
|
|
193
211
|
const initializeUserAccountIx = yield this.program.instruction.initializeUser(userAccountNonce, optionalAccounts, {
|
|
194
212
|
accounts: {
|
|
195
|
-
user:
|
|
213
|
+
user: userAccountPublicKey,
|
|
196
214
|
authority: this.wallet.publicKey,
|
|
197
215
|
rent: anchor.web3.SYSVAR_RENT_PUBKEY,
|
|
198
216
|
systemProgram: anchor.web3.SystemProgram.programId,
|
|
@@ -201,7 +219,31 @@ class ClearingHouse {
|
|
|
201
219
|
},
|
|
202
220
|
remainingAccounts: remainingAccounts,
|
|
203
221
|
});
|
|
204
|
-
|
|
222
|
+
const initializeUserOrdersAccountIx = yield this.getInitializeUserOrdersInstruction(userAccountPublicKey);
|
|
223
|
+
return [
|
|
224
|
+
userPositions,
|
|
225
|
+
userAccountPublicKey,
|
|
226
|
+
initializeUserAccountIx,
|
|
227
|
+
initializeUserOrdersAccountIx,
|
|
228
|
+
];
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
getInitializeUserOrdersInstruction(userAccountPublicKey) {
|
|
232
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
233
|
+
const [userOrdersAccountPublicKey, userOrdersAccountNonce] = yield addresses_1.getUserOrdersAccountPublicKeyAndNonce(this.program.programId, this.wallet.publicKey);
|
|
234
|
+
if (!userAccountPublicKey) {
|
|
235
|
+
userAccountPublicKey = yield this.getUserAccountPublicKey();
|
|
236
|
+
}
|
|
237
|
+
return yield this.program.instruction.initializeUserOrders(userOrdersAccountNonce, {
|
|
238
|
+
accounts: {
|
|
239
|
+
user: userAccountPublicKey,
|
|
240
|
+
authority: this.wallet.publicKey,
|
|
241
|
+
rent: anchor.web3.SYSVAR_RENT_PUBKEY,
|
|
242
|
+
systemProgram: anchor.web3.SystemProgram.programId,
|
|
243
|
+
userOrders: userOrdersAccountPublicKey,
|
|
244
|
+
state: yield this.getStatePublicKey(),
|
|
245
|
+
},
|
|
246
|
+
});
|
|
205
247
|
});
|
|
206
248
|
}
|
|
207
249
|
/**
|
|
@@ -213,7 +255,7 @@ class ClearingHouse {
|
|
|
213
255
|
if (this.userAccountPublicKey) {
|
|
214
256
|
return this.userAccountPublicKey;
|
|
215
257
|
}
|
|
216
|
-
this.userAccountPublicKey = yield
|
|
258
|
+
this.userAccountPublicKey = yield addresses_1.getUserAccountPublicKey(this.program.programId, this.wallet.publicKey);
|
|
217
259
|
return this.userAccountPublicKey;
|
|
218
260
|
});
|
|
219
261
|
}
|
|
@@ -226,6 +268,19 @@ class ClearingHouse {
|
|
|
226
268
|
return this.userAccount;
|
|
227
269
|
});
|
|
228
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
* Get the address for the Clearing House User Order's account. NOT the user's wallet address.
|
|
273
|
+
* @returns
|
|
274
|
+
*/
|
|
275
|
+
getUserOrdersAccountPublicKey() {
|
|
276
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
277
|
+
if (this.userOrdersAccountPublicKey) {
|
|
278
|
+
return this.userOrdersAccountPublicKey;
|
|
279
|
+
}
|
|
280
|
+
this.userOrdersAccountPublicKey = yield addresses_1.getUserOrdersAccountPublicKey(this.program.programId, this.wallet.publicKey);
|
|
281
|
+
return this.userOrdersAccountPublicKey;
|
|
282
|
+
});
|
|
283
|
+
}
|
|
229
284
|
depositCollateral(amount, collateralAccountPublicKey, userPositionsAccountPublicKey) {
|
|
230
285
|
return __awaiter(this, void 0, void 0, function* () {
|
|
231
286
|
const depositCollateralIx = yield this.getDepositCollateralInstruction(amount, collateralAccountPublicKey, userPositionsAccountPublicKey);
|
|
@@ -264,10 +319,11 @@ class ClearingHouse {
|
|
|
264
319
|
*/
|
|
265
320
|
initializeUserAccountAndDepositCollateral(amount, collateralAccountPublicKey) {
|
|
266
321
|
return __awaiter(this, void 0, void 0, function* () {
|
|
267
|
-
const [userPositionsAccount, userAccountPublicKey, initializeUserAccountIx,] = yield this.getInitializeUserInstructions();
|
|
322
|
+
const [userPositionsAccount, userAccountPublicKey, initializeUserAccountIx, initializeUserOrdersAccountIx,] = yield this.getInitializeUserInstructions();
|
|
268
323
|
const depositCollateralIx = yield this.getDepositCollateralInstruction(amount, collateralAccountPublicKey, userPositionsAccount.publicKey);
|
|
269
324
|
const tx = new web3_js_1.Transaction()
|
|
270
325
|
.add(initializeUserAccountIx)
|
|
326
|
+
.add(initializeUserOrdersAccountIx)
|
|
271
327
|
.add(depositCollateralIx);
|
|
272
328
|
const txSig = yield this.program.provider.send(tx, [userPositionsAccount]);
|
|
273
329
|
return [txSig, userAccountPublicKey];
|
|
@@ -276,12 +332,13 @@ class ClearingHouse {
|
|
|
276
332
|
initializeUserAccountForDevnet(mockUSDCFaucet, amount) {
|
|
277
333
|
return __awaiter(this, void 0, void 0, function* () {
|
|
278
334
|
const [associateTokenPublicKey, createAssociatedAccountIx, mintToIx] = yield mockUSDCFaucet.createAssociatedTokenAccountAndMintToInstructions(this.wallet.publicKey, amount);
|
|
279
|
-
const [userPositionsAccount, userAccountPublicKey, initializeUserAccountIx,] = yield this.getInitializeUserInstructions();
|
|
335
|
+
const [userPositionsAccount, userAccountPublicKey, initializeUserAccountIx, initializeUserOrdersAccountIx,] = yield this.getInitializeUserInstructions();
|
|
280
336
|
const depositCollateralIx = yield this.getDepositCollateralInstruction(amount, associateTokenPublicKey, userPositionsAccount.publicKey);
|
|
281
337
|
const tx = new web3_js_1.Transaction()
|
|
282
338
|
.add(createAssociatedAccountIx)
|
|
283
339
|
.add(mintToIx)
|
|
284
340
|
.add(initializeUserAccountIx)
|
|
341
|
+
.add(initializeUserOrdersAccountIx)
|
|
285
342
|
.add(depositCollateralIx);
|
|
286
343
|
const txSig = yield this.program.provider.send(tx, [userPositionsAccount]);
|
|
287
344
|
return [txSig, userAccountPublicKey];
|
|
@@ -303,7 +360,7 @@ class ClearingHouse {
|
|
|
303
360
|
}
|
|
304
361
|
withdrawCollateral(amount, collateralAccountPublicKey) {
|
|
305
362
|
return __awaiter(this, void 0, void 0, function* () {
|
|
306
|
-
return this.txSender.send(
|
|
363
|
+
return this.txSender.send(utils_1.wrapInTx(yield this.getWithdrawCollateralIx(amount, collateralAccountPublicKey)), [], this.opts);
|
|
307
364
|
});
|
|
308
365
|
}
|
|
309
366
|
getWithdrawCollateralIx(amount, collateralAccountPublicKey) {
|
|
@@ -332,7 +389,7 @@ class ClearingHouse {
|
|
|
332
389
|
}
|
|
333
390
|
openPosition(direction, amount, marketIndex, limitPrice, discountToken, referrer) {
|
|
334
391
|
return __awaiter(this, void 0, void 0, function* () {
|
|
335
|
-
return yield this.txSender.send(
|
|
392
|
+
return yield this.txSender.send(utils_1.wrapInTx(yield this.getOpenPositionIx(direction, amount, marketIndex, limitPrice, discountToken, referrer)), [], this.opts);
|
|
336
393
|
});
|
|
337
394
|
}
|
|
338
395
|
getOpenPositionIx(direction, amount, marketIndex, limitPrice, discountToken, referrer) {
|
|
@@ -381,6 +438,180 @@ class ClearingHouse {
|
|
|
381
438
|
});
|
|
382
439
|
});
|
|
383
440
|
}
|
|
441
|
+
placeOrder(orderParams, discountToken, referrer) {
|
|
442
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
443
|
+
return yield this.txSender.send(utils_1.wrapInTx(yield this.getPlaceOrderIx(orderParams, discountToken, referrer)), [], this.opts);
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
getPlaceOrderIx(orderParams, discountToken, referrer) {
|
|
447
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
448
|
+
const userAccountPublicKey = yield this.getUserAccountPublicKey();
|
|
449
|
+
const userAccount = yield this.getUserAccount();
|
|
450
|
+
const priceOracle = this.getMarketsAccount().markets[orderParams.marketIndex.toNumber()].amm
|
|
451
|
+
.oracle;
|
|
452
|
+
const remainingAccounts = [];
|
|
453
|
+
if (orderParams.optionalAccounts.discountToken) {
|
|
454
|
+
if (!discountToken) {
|
|
455
|
+
throw Error('Optional accounts specified discount token but no discount token present');
|
|
456
|
+
}
|
|
457
|
+
remainingAccounts.push({
|
|
458
|
+
pubkey: discountToken,
|
|
459
|
+
isWritable: false,
|
|
460
|
+
isSigner: false,
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
if (orderParams.optionalAccounts.referrer) {
|
|
464
|
+
if (!referrer) {
|
|
465
|
+
throw Error('Optional accounts specified referrer but no referrer present');
|
|
466
|
+
}
|
|
467
|
+
remainingAccounts.push({
|
|
468
|
+
pubkey: referrer,
|
|
469
|
+
isWritable: false,
|
|
470
|
+
isSigner: false,
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
const state = this.getStateAccount();
|
|
474
|
+
const orderState = this.getOrderStateAccount();
|
|
475
|
+
return yield this.program.instruction.placeOrder(orderParams, {
|
|
476
|
+
accounts: {
|
|
477
|
+
state: yield this.getStatePublicKey(),
|
|
478
|
+
user: userAccountPublicKey,
|
|
479
|
+
authority: this.wallet.publicKey,
|
|
480
|
+
markets: state.markets,
|
|
481
|
+
userOrders: yield this.getUserOrdersAccountPublicKey(),
|
|
482
|
+
userPositions: userAccount.positions,
|
|
483
|
+
fundingPaymentHistory: state.fundingPaymentHistory,
|
|
484
|
+
fundingRateHistory: state.fundingRateHistory,
|
|
485
|
+
orderState: yield this.getOrderStatePublicKey(),
|
|
486
|
+
orderHistory: orderState.orderHistory,
|
|
487
|
+
oracle: priceOracle,
|
|
488
|
+
},
|
|
489
|
+
remainingAccounts,
|
|
490
|
+
});
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
cancelOrder(orderId) {
|
|
494
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
495
|
+
return yield this.txSender.send(utils_1.wrapInTx(yield this.getCancelOrderIx(orderId)), [], this.opts);
|
|
496
|
+
});
|
|
497
|
+
}
|
|
498
|
+
getCancelOrderIx(orderId) {
|
|
499
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
500
|
+
const userAccountPublicKey = yield this.getUserAccountPublicKey();
|
|
501
|
+
const userAccount = yield this.getUserAccount();
|
|
502
|
+
const state = this.getStateAccount();
|
|
503
|
+
const orderState = this.getOrderStateAccount();
|
|
504
|
+
return yield this.program.instruction.cancelOrder(orderId, {
|
|
505
|
+
accounts: {
|
|
506
|
+
state: yield this.getStatePublicKey(),
|
|
507
|
+
user: userAccountPublicKey,
|
|
508
|
+
authority: this.wallet.publicKey,
|
|
509
|
+
markets: state.markets,
|
|
510
|
+
userOrders: yield this.getUserOrdersAccountPublicKey(),
|
|
511
|
+
userPositions: userAccount.positions,
|
|
512
|
+
fundingPaymentHistory: state.fundingPaymentHistory,
|
|
513
|
+
fundingRateHistory: state.fundingRateHistory,
|
|
514
|
+
orderState: yield this.getOrderStatePublicKey(),
|
|
515
|
+
orderHistory: orderState.orderHistory,
|
|
516
|
+
},
|
|
517
|
+
});
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
fillOrder(userAccountPublicKey, userOrdersAccountPublicKey, order) {
|
|
521
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
522
|
+
return yield this.txSender.send(utils_1.wrapInTx(yield this.getFillOrderIx(userAccountPublicKey, userOrdersAccountPublicKey, order)), [], this.opts);
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
getFillOrderIx(userAccountPublicKey, userOrdersAccountPublicKey, order) {
|
|
526
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
527
|
+
const fillerPublicKey = yield this.getUserAccountPublicKey();
|
|
528
|
+
const userAccount = yield this.program.account.user.fetch(userAccountPublicKey);
|
|
529
|
+
const marketIndex = order.marketIndex;
|
|
530
|
+
const oracle = this.getMarket(marketIndex).amm.oracle;
|
|
531
|
+
const state = this.getStateAccount();
|
|
532
|
+
const orderState = this.getOrderStateAccount();
|
|
533
|
+
const remainingAccounts = [];
|
|
534
|
+
if (!order.referrer.equals(web3_js_1.PublicKey.default)) {
|
|
535
|
+
remainingAccounts.push({
|
|
536
|
+
pubkey: order.referrer,
|
|
537
|
+
isWritable: true,
|
|
538
|
+
isSigner: false,
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
const orderId = order.orderId;
|
|
542
|
+
return yield this.program.instruction.fillOrder(orderId, {
|
|
543
|
+
accounts: {
|
|
544
|
+
state: yield this.getStatePublicKey(),
|
|
545
|
+
filler: fillerPublicKey,
|
|
546
|
+
user: userAccountPublicKey,
|
|
547
|
+
authority: this.wallet.publicKey,
|
|
548
|
+
markets: state.markets,
|
|
549
|
+
userPositions: userAccount.positions,
|
|
550
|
+
userOrders: userOrdersAccountPublicKey,
|
|
551
|
+
tradeHistory: state.tradeHistory,
|
|
552
|
+
fundingPaymentHistory: state.fundingPaymentHistory,
|
|
553
|
+
fundingRateHistory: state.fundingRateHistory,
|
|
554
|
+
orderState: yield this.getOrderStatePublicKey(),
|
|
555
|
+
orderHistory: orderState.orderHistory,
|
|
556
|
+
oracle: oracle,
|
|
557
|
+
},
|
|
558
|
+
remainingAccounts,
|
|
559
|
+
});
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
placeAndFillOrder(orderParams, discountToken, referrer) {
|
|
563
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
564
|
+
return yield this.txSender.send(utils_1.wrapInTx(yield this.getPlaceAndFillOrderIx(orderParams, discountToken, referrer)), [], this.opts);
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
getPlaceAndFillOrderIx(orderParams, discountToken, referrer) {
|
|
568
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
569
|
+
const userAccountPublicKey = yield this.getUserAccountPublicKey();
|
|
570
|
+
const userAccount = yield this.getUserAccount();
|
|
571
|
+
const priceOracle = this.getMarketsAccount().markets[orderParams.marketIndex.toNumber()].amm
|
|
572
|
+
.oracle;
|
|
573
|
+
const remainingAccounts = [];
|
|
574
|
+
if (orderParams.optionalAccounts.discountToken) {
|
|
575
|
+
if (!discountToken) {
|
|
576
|
+
throw Error('Optional accounts specified discount token but no discount token present');
|
|
577
|
+
}
|
|
578
|
+
remainingAccounts.push({
|
|
579
|
+
pubkey: discountToken,
|
|
580
|
+
isWritable: false,
|
|
581
|
+
isSigner: false,
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
if (orderParams.optionalAccounts.referrer) {
|
|
585
|
+
if (!referrer) {
|
|
586
|
+
throw Error('Optional accounts specified referrer but no referrer present');
|
|
587
|
+
}
|
|
588
|
+
remainingAccounts.push({
|
|
589
|
+
pubkey: referrer,
|
|
590
|
+
isWritable: true,
|
|
591
|
+
isSigner: false,
|
|
592
|
+
});
|
|
593
|
+
}
|
|
594
|
+
const state = this.getStateAccount();
|
|
595
|
+
const orderState = this.getOrderStateAccount();
|
|
596
|
+
return yield this.program.instruction.placeAndFillOrder(orderParams, {
|
|
597
|
+
accounts: {
|
|
598
|
+
state: yield this.getStatePublicKey(),
|
|
599
|
+
user: userAccountPublicKey,
|
|
600
|
+
authority: this.wallet.publicKey,
|
|
601
|
+
markets: state.markets,
|
|
602
|
+
userOrders: yield this.getUserOrdersAccountPublicKey(),
|
|
603
|
+
userPositions: userAccount.positions,
|
|
604
|
+
tradeHistory: state.tradeHistory,
|
|
605
|
+
fundingPaymentHistory: state.fundingPaymentHistory,
|
|
606
|
+
fundingRateHistory: state.fundingRateHistory,
|
|
607
|
+
orderState: yield this.getOrderStatePublicKey(),
|
|
608
|
+
orderHistory: orderState.orderHistory,
|
|
609
|
+
oracle: priceOracle,
|
|
610
|
+
},
|
|
611
|
+
remainingAccounts,
|
|
612
|
+
});
|
|
613
|
+
});
|
|
614
|
+
}
|
|
384
615
|
/**
|
|
385
616
|
* Close an entire position. If you want to reduce a position, use the {@link openPosition} method in the opposite direction of the current position.
|
|
386
617
|
* @param marketIndex
|
|
@@ -390,7 +621,7 @@ class ClearingHouse {
|
|
|
390
621
|
*/
|
|
391
622
|
closePosition(marketIndex, discountToken, referrer) {
|
|
392
623
|
return __awaiter(this, void 0, void 0, function* () {
|
|
393
|
-
return yield this.txSender.send(
|
|
624
|
+
return yield this.txSender.send(utils_1.wrapInTx(yield this.getClosePositionIx(marketIndex, discountToken, referrer)), [], this.opts);
|
|
394
625
|
});
|
|
395
626
|
}
|
|
396
627
|
getClosePositionIx(marketIndex, discountToken, referrer) {
|
|
@@ -438,7 +669,7 @@ class ClearingHouse {
|
|
|
438
669
|
}
|
|
439
670
|
liquidate(liquidateeUserAccountPublicKey) {
|
|
440
671
|
return __awaiter(this, void 0, void 0, function* () {
|
|
441
|
-
return this.txSender.send(
|
|
672
|
+
return this.txSender.send(utils_1.wrapInTx(yield this.getLiquidateIx(liquidateeUserAccountPublicKey)), [], this.opts);
|
|
442
673
|
});
|
|
443
674
|
}
|
|
444
675
|
getLiquidateIx(liquidateeUserAccountPublicKey) {
|
|
@@ -482,7 +713,7 @@ class ClearingHouse {
|
|
|
482
713
|
}
|
|
483
714
|
updateFundingRate(oracle, marketIndex) {
|
|
484
715
|
return __awaiter(this, void 0, void 0, function* () {
|
|
485
|
-
return this.txSender.send(
|
|
716
|
+
return this.txSender.send(utils_1.wrapInTx(yield this.getUpdateFundingRateIx(oracle, marketIndex)), [], this.opts);
|
|
486
717
|
});
|
|
487
718
|
}
|
|
488
719
|
getUpdateFundingRateIx(oracle, marketIndex) {
|
|
@@ -500,7 +731,7 @@ class ClearingHouse {
|
|
|
500
731
|
}
|
|
501
732
|
settleFundingPayment(userAccount, userPositionsAccount) {
|
|
502
733
|
return __awaiter(this, void 0, void 0, function* () {
|
|
503
|
-
return this.txSender.send(
|
|
734
|
+
return this.txSender.send(utils_1.wrapInTx(yield this.getSettleFundingPaymentIx(userAccount, userPositionsAccount)), [], this.opts);
|
|
504
735
|
});
|
|
505
736
|
}
|
|
506
737
|
getSettleFundingPaymentIx(userAccount, userPositionsAccount) {
|
|
@@ -4,7 +4,7 @@ import BN from 'bn.js';
|
|
|
4
4
|
import { EventEmitter } from 'events';
|
|
5
5
|
import StrictEventEmitter from 'strict-event-emitter-types';
|
|
6
6
|
import { ClearingHouse } from './clearingHouse';
|
|
7
|
-
import { UserAccount, UserPosition, UserPositionsAccount } from './types';
|
|
7
|
+
import { Order, UserAccount, UserOrdersAccount, UserPosition, UserPositionsAccount } from './types';
|
|
8
8
|
import { UserAccountSubscriber, UserAccountEvents } from './accounts/types';
|
|
9
9
|
import { PositionDirection } from '.';
|
|
10
10
|
export declare class ClearingHouseUser {
|
|
@@ -12,6 +12,7 @@ export declare class ClearingHouseUser {
|
|
|
12
12
|
authority: PublicKey;
|
|
13
13
|
accountSubscriber: UserAccountSubscriber;
|
|
14
14
|
userAccountPublicKey?: PublicKey;
|
|
15
|
+
userOrdersAccountPublicKey?: PublicKey;
|
|
15
16
|
isSubscribed: boolean;
|
|
16
17
|
eventEmitter: StrictEventEmitter<EventEmitter, UserAccountEvents>;
|
|
17
18
|
static from(clearingHouse: ClearingHouse, authority: PublicKey): ClearingHouseUser;
|
|
@@ -28,6 +29,7 @@ export declare class ClearingHouseUser {
|
|
|
28
29
|
unsubscribe(): Promise<void>;
|
|
29
30
|
getUserAccount(): UserAccount;
|
|
30
31
|
getUserPositionsAccount(): UserPositionsAccount;
|
|
32
|
+
getUserOrdersAccount(): UserOrdersAccount;
|
|
31
33
|
/**
|
|
32
34
|
* Gets the user's current position for a given market. If the user has no position returns undefined
|
|
33
35
|
* @param marketIndex
|
|
@@ -35,7 +37,13 @@ export declare class ClearingHouseUser {
|
|
|
35
37
|
*/
|
|
36
38
|
getUserPosition(marketIndex: BN): UserPosition | undefined;
|
|
37
39
|
getEmptyPosition(marketIndex: BN): UserPosition;
|
|
40
|
+
/**
|
|
41
|
+
* @param orderId
|
|
42
|
+
* @returns Order
|
|
43
|
+
*/
|
|
44
|
+
getOrder(orderId: BN): Order | undefined;
|
|
38
45
|
getUserAccountPublicKey(): Promise<PublicKey>;
|
|
46
|
+
getUserOrdersAccountPublicKey(): Promise<PublicKey>;
|
|
39
47
|
exists(): Promise<boolean>;
|
|
40
48
|
/**
|
|
41
49
|
* calculates Buying Power = FC * MAX_LEVERAGE
|
|
@@ -125,21 +133,6 @@ export declare class ClearingHouseUser {
|
|
|
125
133
|
liquidationPriceAfterClose(positionMarketIndex: BN, closeQuoteAmount: BN): BN;
|
|
126
134
|
/**
|
|
127
135
|
* Get the maximum trade size for a given market, taking into account the user's current leverage, positions, collateral, etc.
|
|
128
|
-
*
|
|
129
|
-
* To Calculate Max Quote Available:
|
|
130
|
-
*
|
|
131
|
-
* Case 1: SameSide
|
|
132
|
-
* => Remaining quote to get to maxLeverage
|
|
133
|
-
*
|
|
134
|
-
* Case 2: NOT SameSide && currentLeverage <= maxLeverage
|
|
135
|
-
* => Current opposite position x2 + remaining to get to maxLeverage
|
|
136
|
-
*
|
|
137
|
-
* Case 3: NOT SameSide && currentLeverage > maxLeverage && otherPositions - currentPosition > maxLeverage
|
|
138
|
-
* => strictly reduce current position size
|
|
139
|
-
*
|
|
140
|
-
* Case 4: NOT SameSide && currentLeverage > maxLeverage && otherPositions - currentPosition < maxLeverage
|
|
141
|
-
* => current position + remaining to get to maxLeverage
|
|
142
|
-
*
|
|
143
136
|
* @param marketIndex
|
|
144
137
|
* @param tradeSide
|
|
145
138
|
* @param userMaxLeverageSetting - leverage : Precision TEN_THOUSAND
|
|
@@ -166,5 +159,5 @@ export declare class ClearingHouseUser {
|
|
|
166
159
|
* @returns positionValue : Precision QUOTE_PRECISION
|
|
167
160
|
*/
|
|
168
161
|
private getTotalPositionValueExcludingMarket;
|
|
162
|
+
canFillOrder(order: Order): boolean;
|
|
169
163
|
}
|
|
170
|
-
//# sourceMappingURL=clearingHouseUser.d.ts.map
|