@zeroexcore/trader 1.1.3 → 3.0.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/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/dca/cancel.d.ts +3 -0
- package/dist/commands/dca/cancel.d.ts.map +1 -0
- package/dist/commands/dca/cancel.js +44 -0
- package/dist/commands/dca/cancel.js.map +1 -0
- package/dist/commands/dca/create.d.ts +3 -0
- package/dist/commands/dca/create.d.ts.map +1 -0
- package/dist/commands/dca/create.js +88 -0
- package/dist/commands/dca/create.js.map +1 -0
- package/dist/commands/dca/index.d.ts +3 -0
- package/dist/commands/dca/index.d.ts.map +1 -0
- package/dist/commands/dca/index.js +10 -0
- package/dist/commands/dca/index.js.map +1 -0
- package/dist/commands/dca/list.d.ts +3 -0
- package/dist/commands/dca/list.d.ts.map +1 -0
- package/dist/commands/dca/list.js +48 -0
- package/dist/commands/dca/list.js.map +1 -0
- package/dist/commands/limit/cancel.d.ts +3 -0
- package/dist/commands/limit/cancel.d.ts.map +1 -0
- package/dist/commands/limit/cancel.js +45 -0
- package/dist/commands/limit/cancel.js.map +1 -0
- package/dist/commands/limit/create.d.ts +3 -0
- package/dist/commands/limit/create.d.ts.map +1 -0
- package/dist/commands/limit/create.js +68 -0
- package/dist/commands/limit/create.js.map +1 -0
- package/dist/commands/limit/index.d.ts +3 -0
- package/dist/commands/limit/index.d.ts.map +1 -0
- package/dist/commands/limit/index.js +10 -0
- package/dist/commands/limit/index.js.map +1 -0
- package/dist/commands/limit/list.d.ts +3 -0
- package/dist/commands/limit/list.d.ts.map +1 -0
- package/dist/commands/limit/list.js +40 -0
- package/dist/commands/limit/list.js.map +1 -0
- package/dist/commands/perps/close.d.ts +3 -0
- package/dist/commands/perps/close.d.ts.map +1 -0
- package/dist/commands/perps/close.js +48 -0
- package/dist/commands/perps/close.js.map +1 -0
- package/dist/commands/perps/decrease.d.ts +3 -0
- package/dist/commands/perps/decrease.d.ts.map +1 -0
- package/dist/commands/perps/decrease.js +55 -0
- package/dist/commands/perps/decrease.js.map +1 -0
- package/dist/commands/perps/increase.d.ts +3 -0
- package/dist/commands/perps/increase.d.ts.map +1 -0
- package/dist/commands/perps/increase.js +60 -0
- package/dist/commands/perps/increase.js.map +1 -0
- package/dist/commands/perps/index.d.ts.map +1 -1
- package/dist/commands/perps/index.js +8 -0
- package/dist/commands/perps/index.js.map +1 -1
- package/dist/commands/perps/open.d.ts +3 -0
- package/dist/commands/perps/open.d.ts.map +1 -0
- package/dist/commands/perps/open.js +60 -0
- package/dist/commands/perps/open.js.map +1 -0
- package/dist/commands/perps/pool.d.ts.map +1 -1
- package/dist/commands/perps/pool.js +37 -29
- package/dist/commands/perps/pool.js.map +1 -1
- package/dist/commands/perps/positions.d.ts.map +1 -1
- package/dist/commands/perps/positions.js +56 -61
- package/dist/commands/perps/positions.js.map +1 -1
- package/dist/commands/perps/show.d.ts.map +1 -1
- package/dist/commands/perps/show.js +45 -25
- package/dist/commands/perps/show.js.map +1 -1
- package/dist/commands/portfolio.d.ts.map +1 -1
- package/dist/commands/portfolio.js +65 -18
- package/dist/commands/portfolio.js.map +1 -1
- package/dist/commands/predict/buy.d.ts.map +1 -1
- package/dist/commands/predict/buy.js +3 -0
- package/dist/commands/predict/buy.js.map +1 -1
- package/dist/commands/predict/sell.d.ts.map +1 -1
- package/dist/commands/predict/sell.js +3 -0
- package/dist/commands/predict/sell.js.map +1 -1
- package/dist/commands/tokens/quote.d.ts.map +1 -1
- package/dist/commands/tokens/quote.js +4 -1
- package/dist/commands/tokens/quote.js.map +1 -1
- package/dist/commands/tokens/swap.d.ts.map +1 -1
- package/dist/commands/tokens/swap.js +6 -3
- package/dist/commands/tokens/swap.js.map +1 -1
- package/dist/config.d.ts +4 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/utils/amounts.d.ts +0 -16
- package/dist/utils/amounts.d.ts.map +1 -1
- package/dist/utils/amounts.js +4 -36
- package/dist/utils/amounts.js.map +1 -1
- package/dist/utils/helius.d.ts +3 -23
- package/dist/utils/helius.d.ts.map +1 -1
- package/dist/utils/helius.js +0 -123
- package/dist/utils/helius.js.map +1 -1
- package/dist/utils/jupiter.d.ts +4 -8
- package/dist/utils/jupiter.d.ts.map +1 -1
- package/dist/utils/jupiter.js +1 -7
- package/dist/utils/jupiter.js.map +1 -1
- package/dist/utils/nft.d.ts +3 -37
- package/dist/utils/nft.d.ts.map +1 -1
- package/dist/utils/nft.js +0 -71
- package/dist/utils/nft.js.map +1 -1
- package/dist/utils/perps/index.d.ts +51 -10
- package/dist/utils/perps/index.d.ts.map +1 -1
- package/dist/utils/perps/index.js +249 -34
- package/dist/utils/perps/index.js.map +1 -1
- package/dist/utils/perps-api.d.ts +110 -0
- package/dist/utils/perps-api.d.ts.map +1 -0
- package/dist/utils/perps-api.js +260 -0
- package/dist/utils/perps-api.js.map +1 -0
- package/dist/utils/positions.d.ts +3 -77
- package/dist/utils/positions.d.ts.map +1 -1
- package/dist/utils/positions.js +3 -330
- package/dist/utils/positions.js.map +1 -1
- package/dist/utils/prediction.d.ts +6 -28
- package/dist/utils/prediction.d.ts.map +1 -1
- package/dist/utils/prediction.js +0 -37
- package/dist/utils/prediction.js.map +1 -1
- package/dist/utils/recurring.d.ts +79 -0
- package/dist/utils/recurring.d.ts.map +1 -0
- package/dist/utils/recurring.js +73 -0
- package/dist/utils/recurring.js.map +1 -0
- package/dist/utils/token-book.d.ts.map +1 -1
- package/dist/utils/token-book.js +17 -2
- package/dist/utils/token-book.js.map +1 -1
- package/dist/utils/token-info.d.ts +2 -1
- package/dist/utils/token-info.d.ts.map +1 -1
- package/dist/utils/token-info.js +5 -2
- package/dist/utils/token-info.js.map +1 -1
- package/dist/utils/trigger.d.ts +88 -0
- package/dist/utils/trigger.d.ts.map +1 -0
- package/dist/utils/trigger.js +114 -0
- package/dist/utils/trigger.js.map +1 -0
- package/dist/utils/wallet.d.ts +0 -9
- package/dist/utils/wallet.d.ts.map +1 -1
- package/dist/utils/wallet.js +14 -4
- package/dist/utils/wallet.js.map +1 -1
- package/package.json +8 -2
- package/dist/utils/perps/doves-idl.d.ts +0 -380
- package/dist/utils/perps/doves-idl.d.ts.map +0 -1
- package/dist/utils/perps/doves-idl.js +0 -379
- package/dist/utils/perps/doves-idl.js.map +0 -1
- package/dist/utils/perps/jupiter-perpetuals-idl.d.ts +0 -7243
- package/dist/utils/perps/jupiter-perpetuals-idl.d.ts.map +0 -1
- package/dist/utils/perps/jupiter-perpetuals-idl.js +0 -7242
- 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
|
|
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
|
-
//
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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,45 +20,263 @@ 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
|
-
//
|
|
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,
|
|
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
|
-
//
|
|
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(
|
|
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
|
-
|
|
38
|
-
export async function getCustodyInfo(connection, market) {
|
|
259
|
+
async function getCustodyInfo(connection, market) {
|
|
39
260
|
const program = createProgram(connection);
|
|
40
|
-
const
|
|
261
|
+
const custodyData = await program.account.custody.fetch(CUSTODY[market]);
|
|
41
262
|
return {
|
|
42
263
|
name: market,
|
|
43
264
|
pubkey: CUSTODY[market],
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
280
|
export async function getOpenPositions(connection, walletPubkey) {
|
|
58
281
|
const wallet = typeof walletPubkey === "string" ? new PublicKey(walletPubkey) : walletPubkey;
|
|
59
282
|
const program = createProgram(connection);
|
|
@@ -61,11 +284,11 @@ export async function getOpenPositions(connection, walletPubkey) {
|
|
|
61
284
|
commitment: "confirmed",
|
|
62
285
|
filters: [
|
|
63
286
|
{ memcmp: { bytes: wallet.toBase58(), offset: 8 } },
|
|
64
|
-
{ memcmp: program.coder.accounts.memcmp("
|
|
287
|
+
{ memcmp: program.coder.accounts.memcmp("Position") },
|
|
65
288
|
],
|
|
66
289
|
});
|
|
67
290
|
const positions = gpaResult.map((item) => {
|
|
68
|
-
const account = program.coder.accounts.decode("
|
|
291
|
+
const account = program.coder.accounts.decode("Position", item.account.data);
|
|
69
292
|
const custodyKey = account.custody.toBase58();
|
|
70
293
|
const sizeUsd = bnToBig(account.sizeUsd);
|
|
71
294
|
const collateralUsd = bnToBig(account.collateralUsd);
|
|
@@ -74,6 +297,8 @@ export async function getOpenPositions(connection, walletPubkey) {
|
|
|
74
297
|
owner: account.owner.toBase58(),
|
|
75
298
|
side: (account.side.long ? "long" : "short"),
|
|
76
299
|
custody: CUSTODY_NAMES[custodyKey] || custodyKey,
|
|
300
|
+
custodyPubkey: custodyKey,
|
|
301
|
+
collateralCustodyPubkey: account.collateralCustody.toBase58(),
|
|
77
302
|
sizeUsd,
|
|
78
303
|
collateralUsd,
|
|
79
304
|
entryPrice: bnToBig(account.price),
|
|
@@ -82,18 +307,8 @@ export async function getOpenPositions(connection, walletPubkey) {
|
|
|
82
307
|
liquidationPrice: Big(0),
|
|
83
308
|
};
|
|
84
309
|
});
|
|
85
|
-
// Filter for open positions (sizeUsd > 0)
|
|
86
310
|
return positions.filter((p) => p.sizeUsd.gt(0));
|
|
87
311
|
}
|
|
88
|
-
//
|
|
89
|
-
export
|
|
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
|
-
}
|
|
312
|
+
// Re-export constants for use by commands
|
|
313
|
+
export { CUSTODY, POOL, PROGRAM_ID, MARKET_MINTS };
|
|
99
314
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/perps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAM,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAc,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChE,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAElD,cAAc;AACd,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,SAAS,CACxD,WAAW,CAAC,SAAS,CACtB,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,SAAS,CAClD,WAAW,CAAC,WAAW,CACxB,CAAA;AAED,mBAAmB;AACnB,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,EAAE,IAAI,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC;IAC3C,GAAG,EAAE,IAAI,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC;IAC3C,GAAG,EAAE,IAAI,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC;IAC3C,IAAI,EAAE,IAAI,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7C,IAAI,EAAE,IAAI,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;CACrC,CAAA;AAEV,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CACtC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAC3D,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,CAAA;AA+BvB,0BAA0B;AAC1B,SAAS,aAAa,CAAC,UAAsB;IAC3C,MAAM,QAAQ,GAAG,IAAI,cAAc,CACjC,UAAU,EACV,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAC9B,cAAc,CAAC,cAAc,EAAE,CAChC,CAAA;IACD,OAAO,IAAI,OAAO,CAAC,GAAU,EAAE,6BAA6B,EAAE,QAAQ,CAAC,CAAA;AACzE,CAAC;AAED,8BAA8B;AAC9B,SAAS,OAAO,CAAC,EAAM,EAAE,QAAQ,GAAG,aAAa;IAC/C,OAAO,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;AACtD,CAAC;AAED,uBAAuB;AACvB,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAsB;IACvD,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;IACzC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAEtE,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAgB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;KAC7E,CAAA;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAsB,EACtB,MAA4B;IAE5B,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;IACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IAEpE,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;QACvB,WAAW,EAAG,OAAO,CAAC,OAAe,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,KAAK;QACpE,UAAU,EAAG,OAAe,CAAC,mBAAmB,CAAC,QAAQ,EAAE;QAC3D,WAAW,EAAG,OAAe,CAAC,mBAAmB,CAAC,QAAQ,EAAE;QAC5D,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;QAClB,eAAe,EAAE,CAAC;KACnB,CAAA;AACH,CAAC;AAED,yBAAyB;AACzB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAsB;IAC5D,MAAM,OAAO,GAA6B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/D,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AACvE,CAAC;AAED,oCAAoC;AACpC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAsB,EACtB,YAAgC;IAEhC,MAAM,MAAM,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;IAC5F,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;IAEzC,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE;QACvE,UAAU,EAAE,WAAW;QACvB,OAAO,EAAE;YACP,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;YACnD,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;SACtD;KACF,CAAC,CAAA;IAEF,MAAM,SAAS,GAAoB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAQ,CAAA;QACnF,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;QAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACxC,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAEpD,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC/B,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAqB;YAChE,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,IAAI,UAAU;YAChD,OAAO;YACP,aAAa;YACb,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YAClC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE;YAC9E,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;YACrB,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;SACzB,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,0CAA0C;IAC1C,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AACjD,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,YAAY,CAC1B,QAAuB,EACvB,YAAiB;IAEjB,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAA;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAE1E,MAAM,QAAQ,GACZ,QAAQ,CAAC,IAAI,KAAK,MAAM;QACtB,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACtC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAE1C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;IAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;IAExE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAA;AAC5B,CAAC"}
|
|
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 (reliable, always has asset field) */
|
|
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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"}
|