@zeroexcore/trader 1.1.4 → 3.0.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.
Files changed (141) hide show
  1. package/dist/cli.js +4 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/dca/cancel.d.ts +3 -0
  4. package/dist/commands/dca/cancel.d.ts.map +1 -0
  5. package/dist/commands/dca/cancel.js +44 -0
  6. package/dist/commands/dca/cancel.js.map +1 -0
  7. package/dist/commands/dca/create.d.ts +3 -0
  8. package/dist/commands/dca/create.d.ts.map +1 -0
  9. package/dist/commands/dca/create.js +88 -0
  10. package/dist/commands/dca/create.js.map +1 -0
  11. package/dist/commands/dca/index.d.ts +3 -0
  12. package/dist/commands/dca/index.d.ts.map +1 -0
  13. package/dist/commands/dca/index.js +10 -0
  14. package/dist/commands/dca/index.js.map +1 -0
  15. package/dist/commands/dca/list.d.ts +3 -0
  16. package/dist/commands/dca/list.d.ts.map +1 -0
  17. package/dist/commands/dca/list.js +48 -0
  18. package/dist/commands/dca/list.js.map +1 -0
  19. package/dist/commands/limit/cancel.d.ts +3 -0
  20. package/dist/commands/limit/cancel.d.ts.map +1 -0
  21. package/dist/commands/limit/cancel.js +45 -0
  22. package/dist/commands/limit/cancel.js.map +1 -0
  23. package/dist/commands/limit/create.d.ts +3 -0
  24. package/dist/commands/limit/create.d.ts.map +1 -0
  25. package/dist/commands/limit/create.js +68 -0
  26. package/dist/commands/limit/create.js.map +1 -0
  27. package/dist/commands/limit/index.d.ts +3 -0
  28. package/dist/commands/limit/index.d.ts.map +1 -0
  29. package/dist/commands/limit/index.js +10 -0
  30. package/dist/commands/limit/index.js.map +1 -0
  31. package/dist/commands/limit/list.d.ts +3 -0
  32. package/dist/commands/limit/list.d.ts.map +1 -0
  33. package/dist/commands/limit/list.js +40 -0
  34. package/dist/commands/limit/list.js.map +1 -0
  35. package/dist/commands/perps/close.d.ts +3 -0
  36. package/dist/commands/perps/close.d.ts.map +1 -0
  37. package/dist/commands/perps/close.js +48 -0
  38. package/dist/commands/perps/close.js.map +1 -0
  39. package/dist/commands/perps/decrease.d.ts +3 -0
  40. package/dist/commands/perps/decrease.d.ts.map +1 -0
  41. package/dist/commands/perps/decrease.js +55 -0
  42. package/dist/commands/perps/decrease.js.map +1 -0
  43. package/dist/commands/perps/increase.d.ts +3 -0
  44. package/dist/commands/perps/increase.d.ts.map +1 -0
  45. package/dist/commands/perps/increase.js +60 -0
  46. package/dist/commands/perps/increase.js.map +1 -0
  47. package/dist/commands/perps/index.d.ts.map +1 -1
  48. package/dist/commands/perps/index.js +8 -0
  49. package/dist/commands/perps/index.js.map +1 -1
  50. package/dist/commands/perps/open.d.ts +3 -0
  51. package/dist/commands/perps/open.d.ts.map +1 -0
  52. package/dist/commands/perps/open.js +60 -0
  53. package/dist/commands/perps/open.js.map +1 -0
  54. package/dist/commands/perps/pool.d.ts.map +1 -1
  55. package/dist/commands/perps/pool.js +37 -29
  56. package/dist/commands/perps/pool.js.map +1 -1
  57. package/dist/commands/perps/positions.d.ts.map +1 -1
  58. package/dist/commands/perps/positions.js +56 -61
  59. package/dist/commands/perps/positions.js.map +1 -1
  60. package/dist/commands/perps/show.d.ts.map +1 -1
  61. package/dist/commands/perps/show.js +45 -25
  62. package/dist/commands/perps/show.js.map +1 -1
  63. package/dist/commands/portfolio.d.ts.map +1 -1
  64. package/dist/commands/portfolio.js +65 -18
  65. package/dist/commands/portfolio.js.map +1 -1
  66. package/dist/commands/predict/buy.d.ts.map +1 -1
  67. package/dist/commands/predict/buy.js +3 -0
  68. package/dist/commands/predict/buy.js.map +1 -1
  69. package/dist/commands/predict/sell.d.ts.map +1 -1
  70. package/dist/commands/predict/sell.js +3 -0
  71. package/dist/commands/predict/sell.js.map +1 -1
  72. package/dist/commands/tokens/quote.d.ts.map +1 -1
  73. package/dist/commands/tokens/quote.js +4 -1
  74. package/dist/commands/tokens/quote.js.map +1 -1
  75. package/dist/commands/tokens/swap.d.ts.map +1 -1
  76. package/dist/commands/tokens/swap.js +6 -3
  77. package/dist/commands/tokens/swap.js.map +1 -1
  78. package/dist/config.d.ts +4 -1
  79. package/dist/config.d.ts.map +1 -1
  80. package/dist/config.js +5 -1
  81. package/dist/config.js.map +1 -1
  82. package/dist/utils/amounts.d.ts +0 -16
  83. package/dist/utils/amounts.d.ts.map +1 -1
  84. package/dist/utils/amounts.js +4 -36
  85. package/dist/utils/amounts.js.map +1 -1
  86. package/dist/utils/helius.d.ts +3 -23
  87. package/dist/utils/helius.d.ts.map +1 -1
  88. package/dist/utils/helius.js +0 -123
  89. package/dist/utils/helius.js.map +1 -1
  90. package/dist/utils/jupiter.d.ts +4 -8
  91. package/dist/utils/jupiter.d.ts.map +1 -1
  92. package/dist/utils/jupiter.js +1 -7
  93. package/dist/utils/jupiter.js.map +1 -1
  94. package/dist/utils/nft.d.ts +3 -37
  95. package/dist/utils/nft.d.ts.map +1 -1
  96. package/dist/utils/nft.js +0 -71
  97. package/dist/utils/nft.js.map +1 -1
  98. package/dist/utils/perps/index.d.ts +54 -11
  99. package/dist/utils/perps/index.d.ts.map +1 -1
  100. package/dist/utils/perps/index.js +281 -41
  101. package/dist/utils/perps/index.js.map +1 -1
  102. package/dist/utils/perps-api.d.ts +110 -0
  103. package/dist/utils/perps-api.d.ts.map +1 -0
  104. package/dist/utils/perps-api.js +275 -0
  105. package/dist/utils/perps-api.js.map +1 -0
  106. package/dist/utils/positions.d.ts +3 -77
  107. package/dist/utils/positions.d.ts.map +1 -1
  108. package/dist/utils/positions.js +3 -330
  109. package/dist/utils/positions.js.map +1 -1
  110. package/dist/utils/prediction.d.ts +6 -28
  111. package/dist/utils/prediction.d.ts.map +1 -1
  112. package/dist/utils/prediction.js +0 -37
  113. package/dist/utils/prediction.js.map +1 -1
  114. package/dist/utils/recurring.d.ts +79 -0
  115. package/dist/utils/recurring.d.ts.map +1 -0
  116. package/dist/utils/recurring.js +73 -0
  117. package/dist/utils/recurring.js.map +1 -0
  118. package/dist/utils/token-book.d.ts.map +1 -1
  119. package/dist/utils/token-book.js +10 -1
  120. package/dist/utils/token-book.js.map +1 -1
  121. package/dist/utils/token-info.d.ts +2 -1
  122. package/dist/utils/token-info.d.ts.map +1 -1
  123. package/dist/utils/token-info.js +5 -2
  124. package/dist/utils/token-info.js.map +1 -1
  125. package/dist/utils/trigger.d.ts +88 -0
  126. package/dist/utils/trigger.d.ts.map +1 -0
  127. package/dist/utils/trigger.js +114 -0
  128. package/dist/utils/trigger.js.map +1 -0
  129. package/dist/utils/wallet.d.ts +0 -9
  130. package/dist/utils/wallet.d.ts.map +1 -1
  131. package/dist/utils/wallet.js +14 -4
  132. package/dist/utils/wallet.js.map +1 -1
  133. package/package.json +8 -2
  134. package/dist/utils/perps/doves-idl.d.ts +0 -380
  135. package/dist/utils/perps/doves-idl.d.ts.map +0 -1
  136. package/dist/utils/perps/doves-idl.js +0 -379
  137. package/dist/utils/perps/doves-idl.js.map +0 -1
  138. package/dist/utils/perps/jupiter-perpetuals-idl.d.ts +0 -7243
  139. package/dist/utils/perps/jupiter-perpetuals-idl.d.ts.map +0 -1
  140. package/dist/utils/perps/jupiter-perpetuals-idl.js +0 -7242
  141. package/dist/utils/perps/jupiter-perpetuals-idl.js.map +0 -1
@@ -1,13 +1,18 @@
1
1
  import { AnchorProvider, Program, Wallet } from "@coral-xyz/anchor";
2
- import { Keypair, PublicKey } from "@solana/web3.js";
2
+ import BN from "bn.js";
3
+ import { ComputeBudgetProgram, Keypair, PublicKey, SystemProgram, TransactionMessage, VersionedTransaction, } from "@solana/web3.js";
4
+ import { createAssociatedTokenAccountIdempotentInstruction, createCloseAccountInstruction, createSyncNativeInstruction, getAssociatedTokenAddressSync, NATIVE_MINT, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID, } from "@solana/spl-token";
3
5
  import Big from "big.js";
4
- import { perps as perpsConfig } from "../../config.js";
6
+ import { perps as perpsConfig, tokens } from "../../config.js";
5
7
  import IDL from "./idl.json" with { type: "json" };
6
- // Program IDs
7
- export const JUPITER_PERPETUALS_PROGRAM_ID = new PublicKey(perpsConfig.programId);
8
- export const JLP_POOL_ACCOUNT_PUBKEY = new PublicKey(perpsConfig.poolAccount);
9
- // Custody accounts
10
- export const CUSTODY = {
8
+ // ============================================================================
9
+ // Constants
10
+ // ============================================================================
11
+ const PROGRAM_ID = new PublicKey(perpsConfig.programId);
12
+ const POOL = new PublicKey(perpsConfig.poolAccount);
13
+ const PERPETUALS_PDA = PublicKey.findProgramAddressSync([Buffer.from("perpetuals")], PROGRAM_ID)[0];
14
+ const EVENT_AUTHORITY = PublicKey.findProgramAddressSync([Buffer.from("__event_authority")], PROGRAM_ID)[0];
15
+ const CUSTODY = {
11
16
  SOL: new PublicKey(perpsConfig.custody.SOL),
12
17
  ETH: new PublicKey(perpsConfig.custody.ETH),
13
18
  BTC: new PublicKey(perpsConfig.custody.BTC),
@@ -15,85 +20,320 @@ export const CUSTODY = {
15
20
  USDT: new PublicKey(perpsConfig.custody.USDT),
16
21
  };
17
22
  const CUSTODY_NAMES = Object.fromEntries(Object.entries(CUSTODY).map(([k, v]) => [v.toBase58(), k]));
23
+ // Mints for each perps market
24
+ const MARKET_MINTS = {
25
+ SOL: NATIVE_MINT,
26
+ ETH: new PublicKey(tokens.WETH),
27
+ BTC: new PublicKey(tokens.WBTC),
28
+ USDC: new PublicKey(tokens.USDC),
29
+ USDT: new PublicKey(tokens.USDT),
30
+ };
18
31
  const USDC_DECIMALS = 6;
19
- // Create program instance
32
+ // ============================================================================
33
+ // Program instance
34
+ // ============================================================================
20
35
  function createProgram(connection) {
21
36
  const provider = new AnchorProvider(connection, new Wallet(Keypair.generate()), AnchorProvider.defaultOptions());
22
- return new Program(IDL, JUPITER_PERPETUALS_PROGRAM_ID, provider);
37
+ return new Program(IDL, PROGRAM_ID, provider);
38
+ }
39
+ // ============================================================================
40
+ // PDA derivation
41
+ // ============================================================================
42
+ export function derivePositionPda(wallet, custody, collateralCustody, side) {
43
+ return PublicKey.findProgramAddressSync([
44
+ Buffer.from("position"),
45
+ wallet.toBuffer(),
46
+ POOL.toBuffer(),
47
+ custody.toBuffer(),
48
+ collateralCustody.toBuffer(),
49
+ Buffer.from(side === "long" ? [1] : [2]),
50
+ ], PROGRAM_ID)[0];
51
+ }
52
+ function derivePositionRequestPda(positionPubkey, requestChange) {
53
+ const counter = new BN(Math.floor(Math.random() * 1_000_000_000));
54
+ const changeEnum = requestChange === "increase" ? [1] : [2];
55
+ const [positionRequest] = PublicKey.findProgramAddressSync([
56
+ Buffer.from("position_request"),
57
+ positionPubkey.toBuffer(),
58
+ counter.toArrayLike(Buffer, "le", 8),
59
+ Buffer.from(changeEnum),
60
+ ], PROGRAM_ID);
61
+ return { positionRequest, counter };
62
+ }
63
+ // ============================================================================
64
+ // Custody resolution
65
+ // ============================================================================
66
+ /** Resolve market + side to custody and collateral custody */
67
+ export function resolveCustodies(market, side) {
68
+ const upper = market.toUpperCase();
69
+ const custody = CUSTODY[upper];
70
+ if (!custody)
71
+ throw new Error(`Unknown market: ${market}. Available: SOL, ETH, BTC`);
72
+ // Longs: collateral = same asset custody
73
+ // Shorts: collateral = USDC custody
74
+ const collateralCustody = side === "long" ? custody : CUSTODY.USDC;
75
+ return { custody, collateralCustody };
76
+ }
77
+ /** Resolve token name to mint PublicKey */
78
+ function resolveInputMint(token) {
79
+ const mint = MARKET_MINTS[token.toUpperCase()];
80
+ if (!mint)
81
+ throw new Error(`Unknown token: ${token}. Available: SOL, ETH, BTC, USDC, USDT`);
82
+ return mint;
83
+ }
84
+ /** Fetch oracle accounts from custody on-chain data */
85
+ async function fetchCustodyOracles(program, custodyPubkey) {
86
+ const custody = await program.account.custody.fetch(custodyPubkey);
87
+ return {
88
+ dovesPriceAccount: custody.dovesOracle,
89
+ pythnetPriceAccount: custody.oracle.oracleAccount,
90
+ tokenAccount: custody.tokenAccount,
91
+ mint: custody.mint,
92
+ };
23
93
  }
24
- // Helper to convert BN to Big
94
+ // ============================================================================
95
+ // Transaction builders
96
+ // ============================================================================
97
+ /**
98
+ * Build a createIncreasePositionMarketRequest transaction.
99
+ * Opens a new position or increases an existing one.
100
+ */
101
+ export async function buildIncreasePositionTx(connection, req) {
102
+ const program = createProgram(connection);
103
+ const { custody, collateralCustody } = resolveCustodies(req.market, req.side);
104
+ const inputMint = resolveInputMint(req.collateralToken);
105
+ const positionPubkey = derivePositionPda(req.owner, custody, collateralCustody, req.side);
106
+ const { positionRequest, counter } = derivePositionRequestPda(positionPubkey, "increase");
107
+ const positionRequestAta = getAssociatedTokenAddressSync(inputMint, positionRequest, true);
108
+ const fundingAccount = getAssociatedTokenAddressSync(inputMint, req.owner);
109
+ const preInstructions = [];
110
+ const postInstructions = [];
111
+ // Wrap SOL if needed
112
+ if (inputMint.equals(NATIVE_MINT)) {
113
+ preInstructions.push(createAssociatedTokenAccountIdempotentInstruction(req.owner, fundingAccount, req.owner, NATIVE_MINT), SystemProgram.transfer({
114
+ fromPubkey: req.owner,
115
+ toPubkey: fundingAccount,
116
+ lamports: BigInt(req.collateralAmount.toString()),
117
+ }), createSyncNativeInstruction(fundingAccount));
118
+ postInstructions.push(createCloseAccountInstruction(fundingAccount, req.owner, req.owner));
119
+ }
120
+ const increaseIx = await program.methods
121
+ .createIncreasePositionMarketRequest({
122
+ counter,
123
+ collateralTokenDelta: req.collateralAmount,
124
+ jupiterMinimumOut: req.jupiterMinimumOut ?? null,
125
+ priceSlippage: req.priceSlippage,
126
+ side: req.side === "long" ? { long: {} } : { short: {} },
127
+ sizeUsdDelta: req.sizeUsdDelta,
128
+ })
129
+ .accounts({
130
+ custody,
131
+ collateralCustody,
132
+ fundingAccount,
133
+ inputMint,
134
+ owner: req.owner,
135
+ perpetuals: PERPETUALS_PDA,
136
+ pool: POOL,
137
+ position: positionPubkey,
138
+ positionRequest,
139
+ positionRequestAta,
140
+ referral: null,
141
+ tokenProgram: TOKEN_PROGRAM_ID,
142
+ associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
143
+ systemProgram: SystemProgram.programId,
144
+ eventAuthority: EVENT_AUTHORITY,
145
+ program: PROGRAM_ID,
146
+ })
147
+ .instruction();
148
+ return buildAndSimulateTx(connection, req.owner, [...preInstructions, increaseIx, ...postInstructions]);
149
+ }
150
+ /**
151
+ * Build a createDecreasePositionMarketRequest transaction.
152
+ * Decreases or closes an existing position.
153
+ */
154
+ export async function buildDecreasePositionTx(connection, req) {
155
+ const program = createProgram(connection);
156
+ const desiredMint = resolveInputMint(req.desiredToken);
157
+ // Fetch position data to get custody addresses and side
158
+ const position = await program.account.position.fetch(req.positionPubkey);
159
+ const owner = position.owner;
160
+ const isLong = !!position.side?.long;
161
+ // Auto-calculate priceSlippage if the caller passed a minimal placeholder
162
+ // For closing a long: priceSlippage must be BELOW current price (min acceptable sell price)
163
+ // For closing a short: priceSlippage must be ABOVE current price (max acceptable buy price)
164
+ let priceSlippage = req.priceSlippage;
165
+ if (priceSlippage.lten(1_000_000)) {
166
+ // Placeholder detected — use 10% buffer from a safe default
167
+ // Long close: set to $0.01 (accept any price — keeper uses oracle)
168
+ // Short close: set to $999,999 (accept any price)
169
+ priceSlippage = isLong ? new BN(10_000) : new BN(999_999_000_000);
170
+ }
171
+ const { positionRequest, counter } = derivePositionRequestPda(req.positionPubkey, "decrease");
172
+ const positionRequestAta = getAssociatedTokenAddressSync(desiredMint, positionRequest, true);
173
+ const receivingAccount = getAssociatedTokenAddressSync(desiredMint, owner, true);
174
+ const preInstructions = [];
175
+ const postInstructions = [];
176
+ // Close wSOL ATA after receiving
177
+ if (desiredMint.equals(NATIVE_MINT)) {
178
+ postInstructions.push(createCloseAccountInstruction(receivingAccount, owner, owner));
179
+ }
180
+ const decreaseIx = await program.methods
181
+ .createDecreasePositionMarketRequest({
182
+ collateralUsdDelta: req.collateralUsdDelta ?? new BN(0),
183
+ sizeUsdDelta: req.sizeUsdDelta ?? new BN(0),
184
+ priceSlippage,
185
+ jupiterMinimumOut: req.jupiterMinimumOut ?? null,
186
+ counter,
187
+ entirePosition: req.entirePosition ?? null,
188
+ })
189
+ .accounts({
190
+ owner,
191
+ receivingAccount,
192
+ perpetuals: PERPETUALS_PDA,
193
+ pool: POOL,
194
+ position: req.positionPubkey,
195
+ positionRequest,
196
+ positionRequestAta,
197
+ custody: position.custody,
198
+ collateralCustody: position.collateralCustody,
199
+ desiredMint,
200
+ referral: null,
201
+ tokenProgram: TOKEN_PROGRAM_ID,
202
+ associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
203
+ systemProgram: SystemProgram.programId,
204
+ eventAuthority: EVENT_AUTHORITY,
205
+ program: PROGRAM_ID,
206
+ })
207
+ .instruction();
208
+ return buildAndSimulateTx(connection, owner, [...preInstructions, decreaseIx, ...postInstructions]);
209
+ }
210
+ // ============================================================================
211
+ // Transaction assembly + simulation
212
+ // ============================================================================
213
+ async function buildAndSimulateTx(connection, payer, instructions) {
214
+ // Prepend priority fee
215
+ const allIx = [
216
+ ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 100_000 }),
217
+ ...instructions,
218
+ ];
219
+ // Simulate to get compute units
220
+ const { blockhash: simBlockhash } = await connection.getLatestBlockhash("confirmed");
221
+ const simTx = new VersionedTransaction(new TransactionMessage({
222
+ instructions: allIx,
223
+ payerKey: payer,
224
+ recentBlockhash: simBlockhash,
225
+ }).compileToV0Message([]));
226
+ const simulation = await connection.simulateTransaction(simTx, {
227
+ replaceRecentBlockhash: true,
228
+ sigVerify: false,
229
+ });
230
+ if (simulation.value.err) {
231
+ const logs = simulation.value.logs?.join("\n") ?? "no logs";
232
+ throw new Error(`Transaction simulation failed: ${JSON.stringify(simulation.value.err)}\n${logs}`);
233
+ }
234
+ // Prepend compute unit limit from simulation
235
+ const cuLimit = Math.min((simulation.value.unitsConsumed || 200_000) * 1.2, 1_400_000);
236
+ allIx.unshift(ComputeBudgetProgram.setComputeUnitLimit({ units: Math.ceil(cuLimit) }));
237
+ const { blockhash } = await connection.getLatestBlockhash("confirmed");
238
+ const txMessage = new TransactionMessage({
239
+ payerKey: payer,
240
+ recentBlockhash: blockhash,
241
+ instructions: allIx,
242
+ }).compileToV0Message();
243
+ return new VersionedTransaction(txMessage);
244
+ }
245
+ // ============================================================================
246
+ // Read-only queries (existing)
247
+ // ============================================================================
25
248
  function bnToBig(bn, decimals = USDC_DECIMALS) {
26
249
  return Big(bn.toString()).div(Big(10).pow(decimals));
27
250
  }
28
- // Fetch JLP pool stats
29
251
  export async function getPoolStats(connection) {
30
252
  const program = createProgram(connection);
31
- const pool = await program.account.pool.fetch(JLP_POOL_ACCOUNT_PUBKEY);
253
+ const pool = await program.account.pool.fetch(POOL);
32
254
  return {
33
255
  aumUsd: bnToBig(pool.aumUsd),
34
256
  name: Buffer.from(pool.name).toString("utf8").replace(/\0/g, ""),
35
257
  };
36
258
  }
37
- // Fetch custody info for a market
38
- export async function getCustodyInfo(connection, market) {
259
+ async function getCustodyInfo(connection, market) {
39
260
  const program = createProgram(connection);
40
- const custody = await program.account.custody.fetch(CUSTODY[market]);
261
+ const custodyData = await program.account.custody.fetch(CUSTODY[market]);
41
262
  return {
42
263
  name: market,
43
264
  pubkey: CUSTODY[market],
44
- maxLeverage: custody.pricing.maxLeverage.toNumber() / 10000,
45
- openFeeBps: custody.increasePositionBps.toNumber(),
46
- closeFeeBps: custody.decreasePositionBps.toNumber(),
265
+ mint: custodyData.mint,
266
+ tokenAccount: custodyData.tokenAccount,
267
+ dovesPriceAccount: custodyData.dovesOracle,
268
+ pythnetPriceAccount: custodyData.oracle.oracleAccount,
269
+ maxLeverage: custodyData.pricing.maxLeverage.toNumber() / 10000,
270
+ openFeeBps: custodyData.increasePositionBps.toNumber(),
271
+ closeFeeBps: custodyData.decreasePositionBps.toNumber(),
47
272
  borrowRate: Big(0),
48
273
  utilizationRate: 0,
49
274
  };
50
275
  }
51
- // Fetch all custody info
52
276
  export async function getAllCustodyInfo(connection) {
53
277
  const markets = ["SOL", "ETH", "BTC"];
54
278
  return Promise.all(markets.map((m) => getCustodyInfo(connection, m)));
55
279
  }
56
- // Fetch open positions for a wallet
57
- export async function getOpenPositions(connection, walletPubkey) {
280
+ export async function getOpenPositions(connection, walletPubkey,
281
+ /** Optional mark prices keyed by asset name (SOL, ETH, BTC). When provided, PnL + liquidation are computed. */
282
+ markPrices) {
58
283
  const wallet = typeof walletPubkey === "string" ? new PublicKey(walletPubkey) : walletPubkey;
59
284
  const program = createProgram(connection);
60
285
  const gpaResult = await connection.getProgramAccounts(program.programId, {
61
286
  commitment: "confirmed",
62
287
  filters: [
63
288
  { memcmp: { bytes: wallet.toBase58(), offset: 8 } },
64
- { memcmp: program.coder.accounts.memcmp("position") },
289
+ { memcmp: program.coder.accounts.memcmp("Position") },
65
290
  ],
66
291
  });
67
292
  const positions = gpaResult.map((item) => {
68
- const account = program.coder.accounts.decode("position", item.account.data);
293
+ const account = program.coder.accounts.decode("Position", item.account.data);
69
294
  const custodyKey = account.custody.toBase58();
295
+ const assetName = CUSTODY_NAMES[custodyKey] || custodyKey;
70
296
  const sizeUsd = bnToBig(account.sizeUsd);
71
297
  const collateralUsd = bnToBig(account.collateralUsd);
298
+ const entryPrice = bnToBig(account.price);
299
+ const leverage = sizeUsd.div(collateralUsd.eq(0) ? Big(1) : collateralUsd).toNumber();
300
+ const side = (account.side.long ? "long" : "short");
301
+ // Compute mark-dependent fields if prices available
302
+ let unrealizedPnl = Big(0);
303
+ let liquidationPrice = Big(0);
304
+ const mark = markPrices?.[assetName];
305
+ if (mark && entryPrice.gt(0)) {
306
+ const markBig = Big(mark);
307
+ // PnL = sizeUsd * (markPrice - entryPrice) / entryPrice for longs, inverse for shorts
308
+ const priceDelta = side === "long"
309
+ ? markBig.minus(entryPrice).div(entryPrice)
310
+ : entryPrice.minus(markBig).div(entryPrice);
311
+ unrealizedPnl = sizeUsd.mul(priceDelta);
312
+ // Liquidation price: price at which collateral is wiped out
313
+ // Long: liqPrice = entryPrice * (1 - collateralUsd / sizeUsd)
314
+ // Short: liqPrice = entryPrice * (1 + collateralUsd / sizeUsd)
315
+ const collateralRatio = collateralUsd.div(sizeUsd.eq(0) ? Big(1) : sizeUsd);
316
+ liquidationPrice = side === "long"
317
+ ? entryPrice.mul(Big(1).minus(collateralRatio))
318
+ : entryPrice.mul(Big(1).plus(collateralRatio));
319
+ }
72
320
  return {
73
321
  publicKey: item.pubkey.toBase58(),
74
322
  owner: account.owner.toBase58(),
75
- side: (account.side.long ? "long" : "short"),
76
- custody: CUSTODY_NAMES[custodyKey] || custodyKey,
323
+ side,
324
+ custody: assetName,
325
+ custodyPubkey: custodyKey,
326
+ collateralCustodyPubkey: account.collateralCustody.toBase58(),
77
327
  sizeUsd,
78
328
  collateralUsd,
79
- entryPrice: bnToBig(account.price),
80
- leverage: sizeUsd.div(collateralUsd.eq(0) ? Big(1) : collateralUsd).toNumber(),
81
- unrealizedPnl: Big(0),
82
- liquidationPrice: Big(0),
329
+ entryPrice,
330
+ leverage,
331
+ unrealizedPnl,
332
+ liquidationPrice,
83
333
  };
84
334
  });
85
- // Filter for open positions (sizeUsd > 0)
86
335
  return positions.filter((p) => p.sizeUsd.gt(0));
87
336
  }
88
- // Calculate PnL for a position
89
- export function calculatePnl(position, currentPrice) {
90
- const priceDelta = currentPrice.minus(position.entryPrice).abs();
91
- const rawPnl = position.sizeUsd.times(priceDelta).div(position.entryPrice);
92
- const isProfit = position.side === "long"
93
- ? currentPrice.gt(position.entryPrice)
94
- : currentPrice.lt(position.entryPrice);
95
- const pnl = isProfit ? rawPnl : rawPnl.neg();
96
- const pnlPercent = pnl.div(position.collateralUsd).times(100).toNumber();
97
- return { pnl, pnlPercent };
98
- }
337
+ // Re-export constants for use by commands
338
+ export { CUSTODY, POOL, PROGRAM_ID, MARKET_MINTS };
99
339
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/perps/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/perps/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import BN from 'bn.js';
2
+ import { Connection, Keypair, VersionedTransaction } from '@solana/web3.js';
3
+ export declare const PERPS_MINTS: Record<string, string>;
4
+ export declare const PERPS_ASSETS: readonly ["SOL", "ETH", "BTC"];
5
+ export type PerpsAsset = (typeof PERPS_ASSETS)[number];
6
+ export type PerpsSide = 'long' | 'short';
7
+ export type PerpsToken = PerpsAsset | 'USDC';
8
+ export interface PerpsPosition {
9
+ asset: string;
10
+ side: PerpsSide;
11
+ leverage: string;
12
+ sizeUsd: string;
13
+ collateralUsd: string;
14
+ entryPriceUsd: string;
15
+ markPriceUsd: string;
16
+ liquidationPriceUsd: string;
17
+ pnlAfterFeesUsd: string;
18
+ pnlAfterFeesPct: string;
19
+ positionPubkey: string;
20
+ }
21
+ export interface PerpsPositionsResponse {
22
+ dataList: PerpsPosition[];
23
+ count: number;
24
+ }
25
+ export interface MarketStats {
26
+ price: number;
27
+ priceChange24H: number;
28
+ priceHigh24H: number;
29
+ priceLow24H: number;
30
+ volume: number;
31
+ }
32
+ export interface PoolInfo {
33
+ longAvailableLiquidity: string;
34
+ longBorrowRatePercent: string;
35
+ longUtilizationPercent: string;
36
+ shortAvailableLiquidity: string;
37
+ shortBorrowRatePercent: string;
38
+ shortUtilizationPercent: string;
39
+ openFeePercent: string;
40
+ }
41
+ export declare const DEFAULT_SLIPPAGE_BPS = 30;
42
+ export interface IncreasePositionParams {
43
+ asset: PerpsAsset;
44
+ inputToken: PerpsToken;
45
+ inputTokenAmount: string;
46
+ leverage?: string;
47
+ sizeUsdDelta?: string;
48
+ side: PerpsSide;
49
+ slippageBps?: number;
50
+ walletAddress: string;
51
+ }
52
+ export interface DecreasePositionParams {
53
+ positionPubkey: string;
54
+ receiveToken: PerpsToken;
55
+ entirePosition?: boolean;
56
+ sizeUsdDelta?: string;
57
+ collateralUsdDelta?: string;
58
+ slippageBps?: number;
59
+ }
60
+ /**
61
+ * Compute priceSlippage from oracle price.
62
+ *
63
+ * priceSlippage is NOT a percentage — it's an absolute USD price (6 decimals).
64
+ * It acts as a guard rail; the keeper always fills at oracle price.
65
+ * Wider slippage does NOT give worse fills, it only reduces rejection risk.
66
+ *
67
+ * - increase long / decrease short: ceiling (current price + buffer)
68
+ * - decrease long / increase short: floor (current price - buffer)
69
+ */
70
+ export declare function computePriceSlippage(oraclePrice: number, slippageBps: number, side: PerpsSide, action: 'increase' | 'decrease'): BN;
71
+ export declare function getMarketStats(mint: string): Promise<MarketStats>;
72
+ export declare function getPoolInfo(mint: string): Promise<PoolInfo>;
73
+ /** Fetch positions from on-chain with live mark prices, PnL, and liquidation */
74
+ export declare function getPerpsPositions(walletAddress: string, connection: Connection): Promise<PerpsPositionsResponse>;
75
+ /**
76
+ * Build an increase-position (open) transaction on-chain.
77
+ * Returns a VersionedTransaction ready for signing.
78
+ */
79
+ export declare function buildIncreasePositionTransaction(connection: Connection, params: IncreasePositionParams): Promise<{
80
+ tx: VersionedTransaction;
81
+ positionPubkey: string;
82
+ }>;
83
+ /**
84
+ * Build a decrease-position (close/reduce) transaction on-chain.
85
+ * Fetches position data to determine side + asset for proper slippage.
86
+ */
87
+ export declare function buildDecreasePositionTransaction(connection: Connection, params: DecreasePositionParams,
88
+ /** Pass side + asset if already known (avoids extra on-chain fetch for slippage calc) */
89
+ positionInfo?: {
90
+ side: PerpsSide;
91
+ asset: PerpsAsset;
92
+ }): Promise<{
93
+ tx: VersionedTransaction;
94
+ positionPubkey: string;
95
+ }>;
96
+ /**
97
+ * Sign a transaction and submit it on-chain.
98
+ * The keeper will automatically pick up the PositionRequest and execute the trade.
99
+ */
100
+ export declare function signAndSendPerps(connection: Connection, keypair: Keypair, tx: VersionedTransaction): Promise<string>;
101
+ export declare function signAndExecutePerps(connection: Connection, keypair: Keypair, txBase64: string, _action: string): Promise<string>;
102
+ /** Convert raw 6-decimal USD string to human-readable number */
103
+ export declare function rawToUsd(raw: string | number): number;
104
+ /** Convert raw 6-decimal USD string to formatted dollar string */
105
+ export declare function formatUsd(raw: string | number): string;
106
+ /** Resolve asset name to mint */
107
+ export declare function assetToMint(asset: string): string;
108
+ /** Token decimals for perps input tokens */
109
+ export declare function perpsTokenDecimals(token: PerpsToken): number;
110
+ //# sourceMappingURL=perps-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perps-api.d.ts","sourceRoot":"","sources":["../../src/utils/perps-api.ts"],"names":[],"mappings":"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"}