@strobelabs/perpcity-sdk 0.1.7 → 0.2.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/LICENSE.md +674 -0
- package/README.md +339 -5
- package/dist/index.d.mts +295 -193
- package/dist/index.d.ts +295 -193
- package/dist/index.js +1058 -453
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1009 -447
- package/dist/index.mjs.map +1 -1
- package/package.json +14 -3
package/dist/index.d.ts
CHANGED
|
@@ -6,14 +6,106 @@ import { GraphQLClient } from 'graphql-request';
|
|
|
6
6
|
interface PerpCityDeployments {
|
|
7
7
|
perpManager: Address;
|
|
8
8
|
usdc: Address;
|
|
9
|
-
goldskyPublic: string;
|
|
10
|
-
goldskyPrivate: string;
|
|
11
9
|
}
|
|
12
10
|
interface PerpCityContextConfig {
|
|
13
11
|
walletClient: WalletClient;
|
|
14
12
|
goldskyBearerToken?: string;
|
|
13
|
+
goldskyEndpoint: string;
|
|
14
|
+
deployments: PerpCityDeployments;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
type OpenInterest = {
|
|
18
|
+
takerLongNotional: number;
|
|
19
|
+
takerShortNotional: number;
|
|
20
|
+
};
|
|
21
|
+
type TimeSeries<T extends number | OpenInterest> = {
|
|
22
|
+
timestamp: number;
|
|
23
|
+
value: T;
|
|
24
|
+
};
|
|
25
|
+
type Bounds = {
|
|
26
|
+
minMargin: number;
|
|
27
|
+
minTakerLeverage: number;
|
|
28
|
+
maxTakerLeverage: number;
|
|
29
|
+
};
|
|
30
|
+
type Fees = {
|
|
31
|
+
creatorFee: number;
|
|
32
|
+
insuranceFee: number;
|
|
33
|
+
lpFee: number;
|
|
34
|
+
liquidationFee: number;
|
|
35
|
+
};
|
|
36
|
+
type LiveDetails = {
|
|
37
|
+
pnl: number;
|
|
38
|
+
fundingPayment: number;
|
|
39
|
+
effectiveMargin: number;
|
|
40
|
+
isLiquidatable: boolean;
|
|
41
|
+
};
|
|
42
|
+
type ClosedPosition = {
|
|
43
|
+
perpId: Hex;
|
|
44
|
+
wasMaker: boolean;
|
|
45
|
+
wasLong: boolean;
|
|
46
|
+
pnlAtClose: number;
|
|
47
|
+
};
|
|
48
|
+
type ClosePositionParams = {
|
|
49
|
+
minAmt0Out: number;
|
|
50
|
+
minAmt1Out: number;
|
|
51
|
+
maxAmt1In: number;
|
|
52
|
+
};
|
|
53
|
+
type OpenTakerPositionParams = {
|
|
54
|
+
isLong: boolean;
|
|
55
|
+
margin: number;
|
|
56
|
+
leverage: number;
|
|
57
|
+
unspecifiedAmountLimit: number;
|
|
58
|
+
};
|
|
59
|
+
type OpenMakerPositionParams = {
|
|
60
|
+
margin: number;
|
|
61
|
+
priceLower: number;
|
|
62
|
+
priceUpper: number;
|
|
63
|
+
liquidity: bigint;
|
|
64
|
+
maxAmt0In: number;
|
|
65
|
+
maxAmt1In: number;
|
|
66
|
+
};
|
|
67
|
+
type CreatePerpParams = {
|
|
68
|
+
startingPrice: number;
|
|
69
|
+
beacon: Address;
|
|
70
|
+
};
|
|
71
|
+
type PerpData = {
|
|
72
|
+
id: Hex;
|
|
73
|
+
tickSpacing: number;
|
|
74
|
+
mark: number;
|
|
75
|
+
index: number;
|
|
76
|
+
beacon: Address;
|
|
77
|
+
lastIndexUpdate: number;
|
|
78
|
+
openInterest: OpenInterest;
|
|
79
|
+
markTimeSeries: TimeSeries<number>[];
|
|
80
|
+
indexTimeSeries: TimeSeries<number>[];
|
|
81
|
+
fundingRate: number;
|
|
82
|
+
bounds: Bounds;
|
|
83
|
+
fees: Fees;
|
|
84
|
+
openInterestTimeSeries: TimeSeries<OpenInterest>[];
|
|
85
|
+
fundingRateTimeSeries: TimeSeries<number>[];
|
|
86
|
+
totalOpenMakerPnl: number;
|
|
87
|
+
totalOpenTakerPnl: number;
|
|
88
|
+
};
|
|
89
|
+
type UserData = {
|
|
90
|
+
walletAddress: Hex;
|
|
91
|
+
usdcBalance: number;
|
|
92
|
+
openPositions: OpenPositionData[];
|
|
93
|
+
closedPositions: ClosedPosition[];
|
|
94
|
+
realizedPnl: number;
|
|
95
|
+
unrealizedPnl: number;
|
|
96
|
+
};
|
|
97
|
+
type OpenPositionData = {
|
|
98
|
+
perpId: Hex;
|
|
99
|
+
positionId: bigint;
|
|
100
|
+
isLong?: boolean;
|
|
101
|
+
isMaker?: boolean;
|
|
102
|
+
liveDetails: LiveDetails;
|
|
103
|
+
};
|
|
104
|
+
type CacheConfig = {
|
|
105
|
+
ttl: number;
|
|
106
|
+
maxSize: number;
|
|
107
|
+
};
|
|
108
|
+
|
|
17
109
|
declare class PerpCityContext {
|
|
18
110
|
readonly walletClient: viem.Client<viem.Transport, viem.Chain | undefined, viem.Account | undefined, viem.WalletRpcSchema, {
|
|
19
111
|
call: (parameters: viem.CallParameters<viem.Chain | undefined>) => Promise<viem.CallReturnType>;
|
|
@@ -38,15 +130,15 @@ declare class PerpCityContext {
|
|
|
38
130
|
blobGasUsed: bigint;
|
|
39
131
|
difficulty: bigint;
|
|
40
132
|
excessBlobGas: bigint;
|
|
41
|
-
extraData:
|
|
133
|
+
extraData: Hex;
|
|
42
134
|
gasLimit: bigint;
|
|
43
135
|
gasUsed: bigint;
|
|
44
|
-
miner:
|
|
136
|
+
miner: Address;
|
|
45
137
|
mixHash: viem.Hash;
|
|
46
138
|
parentBeaconBlockRoot?: `0x${string}` | undefined;
|
|
47
139
|
parentHash: viem.Hash;
|
|
48
|
-
receiptsRoot:
|
|
49
|
-
sealFields:
|
|
140
|
+
receiptsRoot: Hex;
|
|
141
|
+
sealFields: Hex[];
|
|
50
142
|
sha3Uncles: viem.Hash;
|
|
51
143
|
size: bigint;
|
|
52
144
|
stateRoot: viem.Hash;
|
|
@@ -59,18 +151,18 @@ declare class PerpCityContext {
|
|
|
59
151
|
transactions: includeTransactions extends true ? ({
|
|
60
152
|
type: "legacy";
|
|
61
153
|
chainId?: number | undefined;
|
|
62
|
-
r:
|
|
63
|
-
s:
|
|
154
|
+
r: Hex;
|
|
155
|
+
s: Hex;
|
|
64
156
|
v: bigint;
|
|
65
157
|
yParity?: undefined | undefined;
|
|
66
158
|
value: bigint;
|
|
67
|
-
from:
|
|
159
|
+
from: Address;
|
|
68
160
|
gas: bigint;
|
|
69
161
|
hash: viem.Hash;
|
|
70
|
-
input:
|
|
162
|
+
input: Hex;
|
|
71
163
|
nonce: number;
|
|
72
|
-
to:
|
|
73
|
-
typeHex:
|
|
164
|
+
to: Address | null;
|
|
165
|
+
typeHex: Hex | null;
|
|
74
166
|
accessList?: undefined | undefined;
|
|
75
167
|
authorizationList?: undefined | undefined;
|
|
76
168
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -84,18 +176,18 @@ declare class PerpCityContext {
|
|
|
84
176
|
} | {
|
|
85
177
|
type: "eip2930";
|
|
86
178
|
chainId: number;
|
|
87
|
-
r:
|
|
88
|
-
s:
|
|
179
|
+
r: Hex;
|
|
180
|
+
s: Hex;
|
|
89
181
|
v: bigint;
|
|
90
182
|
yParity: number;
|
|
91
183
|
value: bigint;
|
|
92
|
-
from:
|
|
184
|
+
from: Address;
|
|
93
185
|
gas: bigint;
|
|
94
186
|
hash: viem.Hash;
|
|
95
|
-
input:
|
|
187
|
+
input: Hex;
|
|
96
188
|
nonce: number;
|
|
97
|
-
to:
|
|
98
|
-
typeHex:
|
|
189
|
+
to: Address | null;
|
|
190
|
+
typeHex: Hex | null;
|
|
99
191
|
accessList: viem.AccessList;
|
|
100
192
|
authorizationList?: undefined | undefined;
|
|
101
193
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -109,18 +201,18 @@ declare class PerpCityContext {
|
|
|
109
201
|
} | {
|
|
110
202
|
type: "eip1559";
|
|
111
203
|
chainId: number;
|
|
112
|
-
r:
|
|
113
|
-
s:
|
|
204
|
+
r: Hex;
|
|
205
|
+
s: Hex;
|
|
114
206
|
v: bigint;
|
|
115
207
|
yParity: number;
|
|
116
208
|
value: bigint;
|
|
117
|
-
from:
|
|
209
|
+
from: Address;
|
|
118
210
|
gas: bigint;
|
|
119
211
|
hash: viem.Hash;
|
|
120
|
-
input:
|
|
212
|
+
input: Hex;
|
|
121
213
|
nonce: number;
|
|
122
|
-
to:
|
|
123
|
-
typeHex:
|
|
214
|
+
to: Address | null;
|
|
215
|
+
typeHex: Hex | null;
|
|
124
216
|
accessList: viem.AccessList;
|
|
125
217
|
authorizationList?: undefined | undefined;
|
|
126
218
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -134,21 +226,21 @@ declare class PerpCityContext {
|
|
|
134
226
|
} | {
|
|
135
227
|
type: "eip4844";
|
|
136
228
|
chainId: number;
|
|
137
|
-
r:
|
|
138
|
-
s:
|
|
229
|
+
r: Hex;
|
|
230
|
+
s: Hex;
|
|
139
231
|
v: bigint;
|
|
140
232
|
yParity: number;
|
|
141
233
|
value: bigint;
|
|
142
|
-
from:
|
|
234
|
+
from: Address;
|
|
143
235
|
gas: bigint;
|
|
144
236
|
hash: viem.Hash;
|
|
145
|
-
input:
|
|
237
|
+
input: Hex;
|
|
146
238
|
nonce: number;
|
|
147
|
-
to:
|
|
148
|
-
typeHex:
|
|
239
|
+
to: Address | null;
|
|
240
|
+
typeHex: Hex | null;
|
|
149
241
|
accessList: viem.AccessList;
|
|
150
242
|
authorizationList?: undefined | undefined;
|
|
151
|
-
blobVersionedHashes: readonly
|
|
243
|
+
blobVersionedHashes: readonly Hex[];
|
|
152
244
|
gasPrice?: undefined | undefined;
|
|
153
245
|
maxFeePerBlobGas: bigint;
|
|
154
246
|
maxFeePerGas: bigint;
|
|
@@ -159,18 +251,18 @@ declare class PerpCityContext {
|
|
|
159
251
|
} | {
|
|
160
252
|
type: "eip7702";
|
|
161
253
|
chainId: number;
|
|
162
|
-
r:
|
|
163
|
-
s:
|
|
254
|
+
r: Hex;
|
|
255
|
+
s: Hex;
|
|
164
256
|
v: bigint;
|
|
165
257
|
yParity: number;
|
|
166
258
|
value: bigint;
|
|
167
|
-
from:
|
|
259
|
+
from: Address;
|
|
168
260
|
gas: bigint;
|
|
169
261
|
hash: viem.Hash;
|
|
170
|
-
input:
|
|
262
|
+
input: Hex;
|
|
171
263
|
nonce: number;
|
|
172
|
-
to:
|
|
173
|
-
typeHex:
|
|
264
|
+
to: Address | null;
|
|
265
|
+
typeHex: Hex | null;
|
|
174
266
|
accessList: viem.AccessList;
|
|
175
267
|
authorizationList: viem.SignedAuthorizationList;
|
|
176
268
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -209,18 +301,18 @@ declare class PerpCityContext {
|
|
|
209
301
|
getTransaction: <blockTag extends viem.BlockTag = "latest">(args: viem.GetTransactionParameters<blockTag>) => Promise<{
|
|
210
302
|
type: "legacy";
|
|
211
303
|
chainId?: number | undefined;
|
|
212
|
-
r:
|
|
213
|
-
s:
|
|
304
|
+
r: Hex;
|
|
305
|
+
s: Hex;
|
|
214
306
|
v: bigint;
|
|
215
307
|
yParity?: undefined | undefined;
|
|
216
308
|
value: bigint;
|
|
217
|
-
from:
|
|
309
|
+
from: Address;
|
|
218
310
|
gas: bigint;
|
|
219
311
|
hash: viem.Hash;
|
|
220
|
-
input:
|
|
312
|
+
input: Hex;
|
|
221
313
|
nonce: number;
|
|
222
|
-
to:
|
|
223
|
-
typeHex:
|
|
314
|
+
to: Address | null;
|
|
315
|
+
typeHex: Hex | null;
|
|
224
316
|
accessList?: undefined | undefined;
|
|
225
317
|
authorizationList?: undefined | undefined;
|
|
226
318
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -234,18 +326,18 @@ declare class PerpCityContext {
|
|
|
234
326
|
} | {
|
|
235
327
|
type: "eip2930";
|
|
236
328
|
chainId: number;
|
|
237
|
-
r:
|
|
238
|
-
s:
|
|
329
|
+
r: Hex;
|
|
330
|
+
s: Hex;
|
|
239
331
|
v: bigint;
|
|
240
332
|
yParity: number;
|
|
241
333
|
value: bigint;
|
|
242
|
-
from:
|
|
334
|
+
from: Address;
|
|
243
335
|
gas: bigint;
|
|
244
336
|
hash: viem.Hash;
|
|
245
|
-
input:
|
|
337
|
+
input: Hex;
|
|
246
338
|
nonce: number;
|
|
247
|
-
to:
|
|
248
|
-
typeHex:
|
|
339
|
+
to: Address | null;
|
|
340
|
+
typeHex: Hex | null;
|
|
249
341
|
accessList: viem.AccessList;
|
|
250
342
|
authorizationList?: undefined | undefined;
|
|
251
343
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -259,18 +351,18 @@ declare class PerpCityContext {
|
|
|
259
351
|
} | {
|
|
260
352
|
type: "eip1559";
|
|
261
353
|
chainId: number;
|
|
262
|
-
r:
|
|
263
|
-
s:
|
|
354
|
+
r: Hex;
|
|
355
|
+
s: Hex;
|
|
264
356
|
v: bigint;
|
|
265
357
|
yParity: number;
|
|
266
358
|
value: bigint;
|
|
267
|
-
from:
|
|
359
|
+
from: Address;
|
|
268
360
|
gas: bigint;
|
|
269
361
|
hash: viem.Hash;
|
|
270
|
-
input:
|
|
362
|
+
input: Hex;
|
|
271
363
|
nonce: number;
|
|
272
|
-
to:
|
|
273
|
-
typeHex:
|
|
364
|
+
to: Address | null;
|
|
365
|
+
typeHex: Hex | null;
|
|
274
366
|
accessList: viem.AccessList;
|
|
275
367
|
authorizationList?: undefined | undefined;
|
|
276
368
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -284,21 +376,21 @@ declare class PerpCityContext {
|
|
|
284
376
|
} | {
|
|
285
377
|
type: "eip4844";
|
|
286
378
|
chainId: number;
|
|
287
|
-
r:
|
|
288
|
-
s:
|
|
379
|
+
r: Hex;
|
|
380
|
+
s: Hex;
|
|
289
381
|
v: bigint;
|
|
290
382
|
yParity: number;
|
|
291
383
|
value: bigint;
|
|
292
|
-
from:
|
|
384
|
+
from: Address;
|
|
293
385
|
gas: bigint;
|
|
294
386
|
hash: viem.Hash;
|
|
295
|
-
input:
|
|
387
|
+
input: Hex;
|
|
296
388
|
nonce: number;
|
|
297
|
-
to:
|
|
298
|
-
typeHex:
|
|
389
|
+
to: Address | null;
|
|
390
|
+
typeHex: Hex | null;
|
|
299
391
|
accessList: viem.AccessList;
|
|
300
392
|
authorizationList?: undefined | undefined;
|
|
301
|
-
blobVersionedHashes: readonly
|
|
393
|
+
blobVersionedHashes: readonly Hex[];
|
|
302
394
|
gasPrice?: undefined | undefined;
|
|
303
395
|
maxFeePerBlobGas: bigint;
|
|
304
396
|
maxFeePerGas: bigint;
|
|
@@ -309,18 +401,18 @@ declare class PerpCityContext {
|
|
|
309
401
|
} | {
|
|
310
402
|
type: "eip7702";
|
|
311
403
|
chainId: number;
|
|
312
|
-
r:
|
|
313
|
-
s:
|
|
404
|
+
r: Hex;
|
|
405
|
+
s: Hex;
|
|
314
406
|
v: bigint;
|
|
315
407
|
yParity: number;
|
|
316
408
|
value: bigint;
|
|
317
|
-
from:
|
|
409
|
+
from: Address;
|
|
318
410
|
gas: bigint;
|
|
319
411
|
hash: viem.Hash;
|
|
320
|
-
input:
|
|
412
|
+
input: Hex;
|
|
321
413
|
nonce: number;
|
|
322
|
-
to:
|
|
323
|
-
typeHex:
|
|
414
|
+
to: Address | null;
|
|
415
|
+
typeHex: Hex | null;
|
|
324
416
|
accessList: viem.AccessList;
|
|
325
417
|
authorizationList: viem.SignedAuthorizationList;
|
|
326
418
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -336,13 +428,13 @@ declare class PerpCityContext {
|
|
|
336
428
|
getTransactionCount: (args: viem.GetTransactionCountParameters) => Promise<viem.GetTransactionCountReturnType>;
|
|
337
429
|
getTransactionReceipt: (args: viem.GetTransactionReceiptParameters) => Promise<viem.TransactionReceipt>;
|
|
338
430
|
multicall: <const contracts extends readonly unknown[], allowFailure extends boolean = true>(args: viem.MulticallParameters<contracts, allowFailure>) => Promise<viem.MulticallReturnType<contracts, allowFailure>>;
|
|
339
|
-
prepareTransactionRequest: <const request extends viem.PrepareTransactionRequestRequest<viem.Chain | undefined, chainOverride>, chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account |
|
|
431
|
+
prepareTransactionRequest: <const request extends viem.PrepareTransactionRequestRequest<viem.Chain | undefined, chainOverride>, chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | Address | undefined = undefined>(args: viem.PrepareTransactionRequestParameters<viem.Chain | undefined, viem.Account | undefined, chainOverride, accountOverride, request>) => Promise<viem.UnionRequiredBy<Extract<viem.UnionOmit<viem.ExtractChainFormatterParameters<viem.DeriveChain<viem.Chain | undefined, chainOverride>, "transactionRequest", viem.TransactionRequest>, "from"> & (viem.DeriveChain<viem.Chain | undefined, chainOverride> extends infer T_1 ? T_1 extends viem.DeriveChain<viem.Chain | undefined, chainOverride> ? T_1 extends viem.Chain ? {
|
|
340
432
|
chain: T_1;
|
|
341
433
|
} : {
|
|
342
434
|
chain?: undefined;
|
|
343
435
|
} : never : never) & (viem.DeriveAccount<viem.Account | undefined, accountOverride> extends infer T_2 ? T_2 extends viem.DeriveAccount<viem.Account | undefined, accountOverride> ? T_2 extends viem.Account ? {
|
|
344
436
|
account: T_2;
|
|
345
|
-
from:
|
|
437
|
+
from: Address;
|
|
346
438
|
} : {
|
|
347
439
|
account?: undefined;
|
|
348
440
|
from?: undefined;
|
|
@@ -3594,7 +3686,7 @@ declare class PerpCityContext {
|
|
|
3594
3686
|
simulate: <const calls extends readonly unknown[]>(args: viem.SimulateBlocksParameters<calls>) => Promise<viem.SimulateBlocksReturnType<calls>>;
|
|
3595
3687
|
simulateBlocks: <const calls extends readonly unknown[]>(args: viem.SimulateBlocksParameters<calls>) => Promise<viem.SimulateBlocksReturnType<calls>>;
|
|
3596
3688
|
simulateCalls: <const calls extends readonly unknown[]>(args: viem.SimulateCallsParameters<calls>) => Promise<viem.SimulateCallsReturnType<calls>>;
|
|
3597
|
-
simulateContract: <const abi extends viem.Abi | readonly unknown[], functionName extends viem.ContractFunctionName<abi, "nonpayable" | "payable">, const args_1 extends viem.ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>, chainOverride extends viem.Chain | undefined, accountOverride extends viem.Account |
|
|
3689
|
+
simulateContract: <const abi extends viem.Abi | readonly unknown[], functionName extends viem.ContractFunctionName<abi, "nonpayable" | "payable">, const args_1 extends viem.ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>, chainOverride extends viem.Chain | undefined, accountOverride extends viem.Account | Address | undefined = undefined>(args: viem.SimulateContractParameters<abi, functionName, args_1, viem.Chain | undefined, chainOverride, accountOverride>) => Promise<viem.SimulateContractReturnType<abi, functionName, args_1, viem.Chain | undefined, viem.Account | undefined, chainOverride, accountOverride>>;
|
|
3598
3690
|
verifyHash: (args: viem.VerifyHashActionParameters) => Promise<viem.VerifyHashActionReturnType>;
|
|
3599
3691
|
verifyMessage: (args: viem.VerifyMessageActionParameters) => Promise<viem.VerifyMessageActionReturnType>;
|
|
3600
3692
|
verifySiweMessage: (args: viem__types_actions_siwe_verifySiweMessage.VerifySiweMessageParameters) => Promise<viem__types_actions_siwe_verifySiweMessage.VerifySiweMessageReturnType>;
|
|
@@ -3608,126 +3700,33 @@ declare class PerpCityContext {
|
|
|
3608
3700
|
watchPendingTransactions: (args: viem.WatchPendingTransactionsParameters<viem.Transport>) => viem.WatchPendingTransactionsReturnType;
|
|
3609
3701
|
} & viem.WalletActions<viem.Chain | undefined, viem.Account | undefined>>;
|
|
3610
3702
|
readonly goldskyClient: GraphQLClient;
|
|
3703
|
+
private readonly _deployments;
|
|
3611
3704
|
constructor(config: PerpCityContextConfig);
|
|
3612
|
-
validateChainId(): number;
|
|
3613
3705
|
deployments(): PerpCityDeployments;
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3622
|
-
|
|
3623
|
-
|
|
3624
|
-
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
|
|
3631
|
-
|
|
3632
|
-
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
priceLower: number;
|
|
3639
|
-
priceUpper: number;
|
|
3640
|
-
maxAmt0In: number;
|
|
3641
|
-
maxAmt1In: number;
|
|
3642
|
-
};
|
|
3643
|
-
type OpenTakerPositionParams = {
|
|
3644
|
-
isLong: boolean;
|
|
3645
|
-
margin: number;
|
|
3646
|
-
leverage: number;
|
|
3647
|
-
unspecifiedAmountLimit: number;
|
|
3648
|
-
};
|
|
3649
|
-
type OpenInterest = {
|
|
3650
|
-
takerLongNotional: number;
|
|
3651
|
-
takerShortNotional: number;
|
|
3652
|
-
};
|
|
3653
|
-
type TimeSeries<T extends number | OpenInterest> = {
|
|
3654
|
-
timestamp: number;
|
|
3655
|
-
value: T;
|
|
3656
|
-
};
|
|
3657
|
-
type SimulateOpenPositionResults = {
|
|
3658
|
-
success: boolean;
|
|
3659
|
-
size: number;
|
|
3660
|
-
notional: number;
|
|
3661
|
-
creatorFeeAmt: number;
|
|
3662
|
-
insuranceFeeAmt: number;
|
|
3663
|
-
lpFeeAmt: number;
|
|
3664
|
-
};
|
|
3665
|
-
type Fees = {
|
|
3666
|
-
creatorFee: number;
|
|
3667
|
-
insuranceFee: number;
|
|
3668
|
-
lpFee: number;
|
|
3669
|
-
liquidationFee: number;
|
|
3670
|
-
};
|
|
3671
|
-
type Bounds = {
|
|
3672
|
-
minMargin: number;
|
|
3673
|
-
minTakerLeverage: number;
|
|
3674
|
-
maxTakerLeverage: number;
|
|
3675
|
-
};
|
|
3676
|
-
declare class Perp {
|
|
3677
|
-
readonly context: PerpCityContext;
|
|
3678
|
-
readonly id: Hex;
|
|
3679
|
-
constructor(context: PerpCityContext, id: Hex);
|
|
3680
|
-
tickSpacing(): Promise<number>;
|
|
3681
|
-
mark(): Promise<number>;
|
|
3682
|
-
index(): Promise<number>;
|
|
3683
|
-
beacon(): Promise<Address>;
|
|
3684
|
-
lastIndexUpdate(): Promise<number>;
|
|
3685
|
-
openInterest(): Promise<OpenInterest>;
|
|
3686
|
-
markTimeSeries(): Promise<TimeSeries<number>[]>;
|
|
3687
|
-
indexTimeSeries(): Promise<TimeSeries<number>[]>;
|
|
3688
|
-
fundingRate(): Promise<number>;
|
|
3689
|
-
bounds(): Promise<Bounds>;
|
|
3690
|
-
maxTakerNotional(isLong: boolean): Promise<number>;
|
|
3691
|
-
simulateTaker(params: OpenTakerPositionParams): Promise<SimulateOpenPositionResults>;
|
|
3692
|
-
allMakerPositions(): Promise<OpenPosition[]>;
|
|
3693
|
-
allTakerPositions(): Promise<OpenPosition[]>;
|
|
3694
|
-
totalOpenMakerPnl(): Promise<number>;
|
|
3695
|
-
totalOpenTakerPnl(): Promise<number>;
|
|
3696
|
-
fees(): Promise<Fees>;
|
|
3697
|
-
openInterestTimeSeries(): Promise<TimeSeries<OpenInterest>[]>;
|
|
3698
|
-
fundingRateTimeSeries(): Promise<TimeSeries<number>[]>;
|
|
3699
|
-
approveAndOpenMakerPosition(params: OpenMakerPositionParams): Promise<OpenPosition>;
|
|
3700
|
-
approveAndOpenTakerPosition(params: OpenTakerPositionParams): Promise<OpenPosition>;
|
|
3701
|
-
openMakerPosition(params: OpenMakerPositionParams): Promise<OpenPosition>;
|
|
3702
|
-
openTakerPosition(params: OpenTakerPositionParams): Promise<OpenPosition>;
|
|
3703
|
-
}
|
|
3704
|
-
|
|
3705
|
-
type CreatePerpParams = {
|
|
3706
|
-
startingPrice: number;
|
|
3707
|
-
beacon: Address;
|
|
3708
|
-
};
|
|
3709
|
-
declare class PerpManager {
|
|
3710
|
-
readonly context: PerpCityContext;
|
|
3711
|
-
constructor(context: PerpCityContext);
|
|
3712
|
-
getPerps(): Promise<Perp[]>;
|
|
3713
|
-
createPerp(params: CreatePerpParams): Promise<Perp>;
|
|
3714
|
-
}
|
|
3715
|
-
|
|
3716
|
-
type ClosedPosition = {
|
|
3717
|
-
perpId: Hex;
|
|
3718
|
-
wasMaker: boolean;
|
|
3719
|
-
wasLong: boolean;
|
|
3720
|
-
pnlAtClose: number;
|
|
3721
|
-
};
|
|
3722
|
-
declare class User {
|
|
3723
|
-
readonly context: PerpCityContext;
|
|
3724
|
-
readonly walletAddress: Hex;
|
|
3725
|
-
constructor(context: PerpCityContext);
|
|
3726
|
-
usdcBalance(): Promise<number>;
|
|
3727
|
-
openPositions(): Promise<OpenPosition[]>;
|
|
3728
|
-
closedPositions(): Promise<ClosedPosition[]>;
|
|
3729
|
-
realizedPnl(): Promise<number>;
|
|
3730
|
-
unrealizedPnl(): Promise<number>;
|
|
3706
|
+
private fetchPerpData;
|
|
3707
|
+
private fetchPerpContractData;
|
|
3708
|
+
/**
|
|
3709
|
+
* Fetch comprehensive perp data with all related information in a single batched request
|
|
3710
|
+
*/
|
|
3711
|
+
getPerpData(perpId: Hex): Promise<PerpData>;
|
|
3712
|
+
/**
|
|
3713
|
+
* Fetch data for multiple perps efficiently with true batching
|
|
3714
|
+
* This fetches all perps in just 2 Goldsky requests total (not 2N!)
|
|
3715
|
+
*/
|
|
3716
|
+
getMultiplePerpData(perpIds: Hex[]): Promise<Map<Hex, PerpData>>;
|
|
3717
|
+
private fetchMultiplePerpContractData;
|
|
3718
|
+
private fetchUserData;
|
|
3719
|
+
private fetchUserOpenPositions;
|
|
3720
|
+
private fetchUserClosedPositions;
|
|
3721
|
+
private fetchPositionLiveDetailsFromContract;
|
|
3722
|
+
/**
|
|
3723
|
+
* Fetch comprehensive user data with all positions in a single batched request
|
|
3724
|
+
*/
|
|
3725
|
+
getUserData(userAddress: Hex): Promise<UserData>;
|
|
3726
|
+
/**
|
|
3727
|
+
* Fetch open position data with live details
|
|
3728
|
+
*/
|
|
3729
|
+
getOpenPositionData(perpId: Hex, positionId: bigint): Promise<OpenPositionData>;
|
|
3731
3730
|
}
|
|
3732
3731
|
|
|
3733
3732
|
declare function priceToSqrtPriceX96(price: number): bigint;
|
|
@@ -3747,9 +3746,59 @@ declare const Q96: bigint;
|
|
|
3747
3746
|
|
|
3748
3747
|
declare function estimateLiquidity(context: PerpCityContext, tickLower: number, tickUpper: number, usdScaled: bigint): Promise<bigint>;
|
|
3749
3748
|
|
|
3750
|
-
|
|
3751
|
-
|
|
3752
|
-
|
|
3749
|
+
/**
|
|
3750
|
+
* Base class for all PerpCity SDK errors
|
|
3751
|
+
*/
|
|
3752
|
+
declare class PerpCityError extends Error {
|
|
3753
|
+
readonly cause?: Error | undefined;
|
|
3754
|
+
constructor(message: string, cause?: Error | undefined);
|
|
3755
|
+
}
|
|
3756
|
+
/**
|
|
3757
|
+
* Error thrown when a contract call reverts
|
|
3758
|
+
*/
|
|
3759
|
+
declare class ContractError extends PerpCityError {
|
|
3760
|
+
readonly errorName?: string | undefined;
|
|
3761
|
+
readonly args?: readonly unknown[] | undefined;
|
|
3762
|
+
constructor(message: string, errorName?: string | undefined, args?: readonly unknown[] | undefined, cause?: Error);
|
|
3763
|
+
}
|
|
3764
|
+
/**
|
|
3765
|
+
* Error thrown when a transaction is rejected by the user
|
|
3766
|
+
*/
|
|
3767
|
+
declare class TransactionRejectedError extends PerpCityError {
|
|
3768
|
+
constructor(message?: string, cause?: Error);
|
|
3769
|
+
}
|
|
3770
|
+
/**
|
|
3771
|
+
* Error thrown when there are insufficient funds
|
|
3772
|
+
*/
|
|
3773
|
+
declare class InsufficientFundsError extends PerpCityError {
|
|
3774
|
+
constructor(message?: string, cause?: Error);
|
|
3775
|
+
}
|
|
3776
|
+
/**
|
|
3777
|
+
* Error thrown when a GraphQL query fails
|
|
3778
|
+
*/
|
|
3779
|
+
declare class GraphQLError extends PerpCityError {
|
|
3780
|
+
constructor(message: string, cause?: Error);
|
|
3781
|
+
}
|
|
3782
|
+
/**
|
|
3783
|
+
* Error thrown when an RPC call fails
|
|
3784
|
+
*/
|
|
3785
|
+
declare class RPCError extends PerpCityError {
|
|
3786
|
+
constructor(message: string, cause?: Error);
|
|
3787
|
+
}
|
|
3788
|
+
/**
|
|
3789
|
+
* Error thrown when validation fails
|
|
3790
|
+
*/
|
|
3791
|
+
declare class ValidationError extends PerpCityError {
|
|
3792
|
+
constructor(message: string, cause?: Error);
|
|
3793
|
+
}
|
|
3794
|
+
/**
|
|
3795
|
+
* Parse and format a contract error into a user-friendly message
|
|
3796
|
+
*/
|
|
3797
|
+
declare function parseContractError(error: unknown): PerpCityError;
|
|
3798
|
+
/**
|
|
3799
|
+
* Wrap an async function with error handling
|
|
3800
|
+
*/
|
|
3801
|
+
declare function withErrorHandling<T>(fn: () => Promise<T>, context: string): Promise<T>;
|
|
3753
3802
|
|
|
3754
3803
|
declare const PERP_MANAGER_ABI: readonly [{
|
|
3755
3804
|
readonly inputs: readonly [{
|
|
@@ -4963,4 +5012,57 @@ declare const BEACON_ABI: readonly [{
|
|
|
4963
5012
|
readonly type: "function";
|
|
4964
5013
|
}];
|
|
4965
5014
|
|
|
4966
|
-
|
|
5015
|
+
declare class OpenPosition {
|
|
5016
|
+
readonly context: PerpCityContext;
|
|
5017
|
+
readonly perpId: Hex;
|
|
5018
|
+
readonly positionId: bigint;
|
|
5019
|
+
readonly isLong?: boolean;
|
|
5020
|
+
readonly isMaker?: boolean;
|
|
5021
|
+
constructor(context: PerpCityContext, perpId: Hex, positionId: bigint, isLong?: boolean, isMaker?: boolean);
|
|
5022
|
+
closePosition(params: ClosePositionParams): Promise<OpenPosition | null>;
|
|
5023
|
+
liveDetails(): Promise<LiveDetails>;
|
|
5024
|
+
}
|
|
5025
|
+
|
|
5026
|
+
declare function getPerpMark(perpData: PerpData): number;
|
|
5027
|
+
declare function getPerpIndex(perpData: PerpData): number;
|
|
5028
|
+
declare function getPerpBeacon(perpData: PerpData): string;
|
|
5029
|
+
declare function getPerpLastIndexUpdate(perpData: PerpData): number;
|
|
5030
|
+
declare function getPerpOpenInterest(perpData: PerpData): OpenInterest;
|
|
5031
|
+
declare function getPerpMarkTimeSeries(perpData: PerpData): TimeSeries<number>[];
|
|
5032
|
+
declare function getPerpIndexTimeSeries(perpData: PerpData): TimeSeries<number>[];
|
|
5033
|
+
declare function getPerpFundingRate(perpData: PerpData): number;
|
|
5034
|
+
declare function getPerpBounds(perpData: PerpData): Bounds;
|
|
5035
|
+
declare function getPerpFees(perpData: PerpData): Fees;
|
|
5036
|
+
declare function getPerpOpenInterestTimeSeries(perpData: PerpData): TimeSeries<OpenInterest>[];
|
|
5037
|
+
declare function getPerpFundingRateTimeSeries(perpData: PerpData): TimeSeries<number>[];
|
|
5038
|
+
declare function getPerpTickSpacing(perpData: PerpData): number;
|
|
5039
|
+
declare function getAllMakerPositions(context: PerpCityContext, perpId: Hex): Promise<OpenPosition[]>;
|
|
5040
|
+
declare function getAllTakerPositions(context: PerpCityContext, perpId: Hex): Promise<OpenPosition[]>;
|
|
5041
|
+
declare function getTotalOpenMakerPnl(context: PerpCityContext, perpId: Hex): Promise<number>;
|
|
5042
|
+
declare function getTotalOpenTakerPnl(context: PerpCityContext, perpId: Hex): Promise<number>;
|
|
5043
|
+
|
|
5044
|
+
declare function getPerps(context: PerpCityContext): Promise<Hex[]>;
|
|
5045
|
+
declare function createPerp(context: PerpCityContext, params: CreatePerpParams): Promise<Hex>;
|
|
5046
|
+
declare function openTakerPosition(context: PerpCityContext, perpId: Hex, params: OpenTakerPositionParams): Promise<OpenPosition>;
|
|
5047
|
+
declare function openMakerPosition(context: PerpCityContext, perpId: Hex, params: OpenMakerPositionParams): Promise<OpenPosition>;
|
|
5048
|
+
|
|
5049
|
+
declare function getUserUsdcBalance(userData: UserData): number;
|
|
5050
|
+
declare function getUserOpenPositions(userData: UserData): OpenPositionData[];
|
|
5051
|
+
declare function getUserClosedPositions(userData: UserData): ClosedPosition[];
|
|
5052
|
+
declare function getUserRealizedPnl(userData: UserData): number;
|
|
5053
|
+
declare function getUserUnrealizedPnl(userData: UserData): number;
|
|
5054
|
+
declare function getUserWalletAddress(userData: UserData): Hex;
|
|
5055
|
+
|
|
5056
|
+
declare function getPositionPerpId(positionData: OpenPositionData): Hex;
|
|
5057
|
+
declare function getPositionId(positionData: OpenPositionData): bigint;
|
|
5058
|
+
declare function getPositionIsLong(positionData: OpenPositionData): boolean | undefined;
|
|
5059
|
+
declare function getPositionIsMaker(positionData: OpenPositionData): boolean | undefined;
|
|
5060
|
+
declare function getPositionLiveDetails(positionData: OpenPositionData): LiveDetails;
|
|
5061
|
+
declare function getPositionPnl(positionData: OpenPositionData): number;
|
|
5062
|
+
declare function getPositionFundingPayment(positionData: OpenPositionData): number;
|
|
5063
|
+
declare function getPositionEffectiveMargin(positionData: OpenPositionData): number;
|
|
5064
|
+
declare function getPositionIsLiquidatable(positionData: OpenPositionData): boolean;
|
|
5065
|
+
declare function closePosition(context: PerpCityContext, perpId: Hex, positionId: bigint, params: ClosePositionParams): Promise<OpenPositionData | null>;
|
|
5066
|
+
declare function getPositionLiveDetailsFromContract(context: PerpCityContext, perpId: Hex, positionId: bigint): Promise<LiveDetails>;
|
|
5067
|
+
|
|
5068
|
+
export { BEACON_ABI, BIGINT_1E6, type Bounds, type CacheConfig, type ClosePositionParams, type ClosedPosition, ContractError, type CreatePerpParams, type Fees, GraphQLError, InsufficientFundsError, type LiveDetails, NUMBER_1E6, type OpenInterest, type OpenMakerPositionParams, OpenPosition, type OpenPositionData, type OpenTakerPositionParams, PERP_MANAGER_ABI, PerpCityContext, type PerpCityContextConfig, type PerpCityDeployments, PerpCityError, type PerpData, Q96, RPCError, type TimeSeries, TransactionRejectedError, type UserData, ValidationError, approveUsdc, closePosition, createPerp, estimateLiquidity, getAllMakerPositions, getAllTakerPositions, getPerpBeacon, getPerpBounds, getPerpFees, getPerpFundingRate, getPerpFundingRateTimeSeries, getPerpIndex, getPerpIndexTimeSeries, getPerpLastIndexUpdate, getPerpMark, getPerpMarkTimeSeries, getPerpOpenInterest, getPerpOpenInterestTimeSeries, getPerpTickSpacing, getPerps, getPositionEffectiveMargin, getPositionFundingPayment, getPositionId, getPositionIsLiquidatable, getPositionIsLong, getPositionIsMaker, getPositionLiveDetails, getPositionLiveDetailsFromContract, getPositionPerpId, getPositionPnl, getTotalOpenMakerPnl, getTotalOpenTakerPnl, getUserClosedPositions, getUserOpenPositions, getUserRealizedPnl, getUserUnrealizedPnl, getUserUsdcBalance, getUserWalletAddress, marginRatioToLeverage, openMakerPosition, openTakerPosition, parseContractError, priceToSqrtPriceX96, priceToTick, scale6Decimals, scaleFrom6Decimals, scaleFromX96, scaleToX96, sqrtPriceX96ToPrice, withErrorHandling };
|