@parqxchange/sdk 0.1.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.
Files changed (65) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +122 -0
  3. package/dist/accounts/marketOracle.d.ts +21 -0
  4. package/dist/accounts/marketOracle.js +114 -0
  5. package/dist/accounts/resolve.d.ts +75 -0
  6. package/dist/accounts/resolve.js +116 -0
  7. package/dist/actions/cranks.d.ts +8 -0
  8. package/dist/actions/cranks.js +10 -0
  9. package/dist/actions/liquidity.d.ts +23 -0
  10. package/dist/actions/liquidity.js +21 -0
  11. package/dist/actions/trading.d.ts +39 -0
  12. package/dist/actions/trading.js +95 -0
  13. package/dist/auth/tradingKey.d.ts +27 -0
  14. package/dist/auth/tradingKey.js +71 -0
  15. package/dist/decode/index.d.ts +39 -0
  16. package/dist/decode/index.js +445 -0
  17. package/dist/events/decoder.d.ts +60 -0
  18. package/dist/events/decoder.js +369 -0
  19. package/dist/events/emitter.d.ts +49 -0
  20. package/dist/events/emitter.js +153 -0
  21. package/dist/index.d.ts +25 -0
  22. package/dist/index.js +93 -0
  23. package/dist/indexer/client.d.ts +13 -0
  24. package/dist/indexer/client.js +36 -0
  25. package/dist/indexer/types.d.ts +9 -0
  26. package/dist/indexer/types.js +2 -0
  27. package/dist/minimal.d.ts +3 -0
  28. package/dist/minimal.js +13 -0
  29. package/dist/node.d.ts +1 -0
  30. package/dist/node.js +5 -0
  31. package/dist/programs/feeDistributor.d.ts +42 -0
  32. package/dist/programs/feeDistributor.js +42 -0
  33. package/dist/programs/oracle.d.ts +31 -0
  34. package/dist/programs/oracle.js +49 -0
  35. package/dist/programs/perp.d.ts +283 -0
  36. package/dist/programs/perp.js +346 -0
  37. package/dist/programs/pool.d.ts +113 -0
  38. package/dist/programs/pool.js +126 -0
  39. package/dist/programs/priceFeed.d.ts +13 -0
  40. package/dist/programs/priceFeed.js +21 -0
  41. package/dist/programs/staking.d.ts +76 -0
  42. package/dist/programs/staking.js +135 -0
  43. package/dist/types/index.d.ts +337 -0
  44. package/dist/types/index.js +9 -0
  45. package/dist/utils/computeBudget.d.ts +5 -0
  46. package/dist/utils/computeBudget.js +14 -0
  47. package/dist/utils/errors.d.ts +56 -0
  48. package/dist/utils/errors.js +138 -0
  49. package/dist/utils/pda.d.ts +28 -0
  50. package/dist/utils/pda.js +131 -0
  51. package/dist/utils/priceMath.d.ts +5 -0
  52. package/dist/utils/priceMath.js +46 -0
  53. package/dist/utils/tokenProgram.d.ts +2 -0
  54. package/dist/utils/tokenProgram.js +16 -0
  55. package/dist/utils/transaction.d.ts +2 -0
  56. package/dist/utils/transaction.js +12 -0
  57. package/dist/utils/version.d.ts +11 -0
  58. package/dist/utils/version.js +29 -0
  59. package/idl/fee_distributor.json +779 -0
  60. package/idl/oracle_adapter.json +767 -0
  61. package/idl/perp_engine.json +3908 -0
  62. package/idl/pool_program.json +2956 -0
  63. package/idl/price_feed.json +478 -0
  64. package/idl/staking.json +1336 -0
  65. package/package.json +98 -0
@@ -0,0 +1,3908 @@
1
+ {
2
+ "address": "6QrsMTMEu9rsLpyxQgRdvQsWoPgHGY9npNNiwTtXsbdc",
3
+ "metadata": {
4
+ "name": "perp_engine",
5
+ "version": "0.1.0",
6
+ "spec": "0.1.0"
7
+ },
8
+ "instructions": [
9
+ {
10
+ "name": "cancel_order",
11
+ "discriminator": [
12
+ 95,
13
+ 129,
14
+ 237,
15
+ 240,
16
+ 8,
17
+ 49,
18
+ 223,
19
+ 132
20
+ ],
21
+ "accounts": [
22
+ {
23
+ "name": "market_state"
24
+ },
25
+ {
26
+ "name": "order",
27
+ "writable": true
28
+ },
29
+ {
30
+ "name": "signer",
31
+ "docs": [
32
+ "Must be order.owner OR market_state.keeper (for orphan cleanup)"
33
+ ],
34
+ "writable": true,
35
+ "signer": true
36
+ },
37
+ {
38
+ "name": "owner",
39
+ "writable": true
40
+ },
41
+ {
42
+ "name": "owner_usdc",
43
+ "writable": true
44
+ },
45
+ {
46
+ "name": "vault_usdc",
47
+ "writable": true
48
+ },
49
+ {
50
+ "name": "vault_authority"
51
+ },
52
+ {
53
+ "name": "engine_auth"
54
+ },
55
+ {
56
+ "name": "pool_state",
57
+ "writable": true
58
+ },
59
+ {
60
+ "name": "pool_program"
61
+ },
62
+ {
63
+ "name": "token_program",
64
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
65
+ },
66
+ {
67
+ "name": "system_program",
68
+ "address": "11111111111111111111111111111111"
69
+ }
70
+ ],
71
+ "args": []
72
+ },
73
+ {
74
+ "name": "claim_affiliate_reward",
75
+ "discriminator": [
76
+ 145,
77
+ 45,
78
+ 136,
79
+ 116,
80
+ 123,
81
+ 149,
82
+ 248,
83
+ 15
84
+ ],
85
+ "accounts": [
86
+ {
87
+ "name": "affiliate_reward",
88
+ "writable": true
89
+ },
90
+ {
91
+ "name": "market_state"
92
+ },
93
+ {
94
+ "name": "affiliate",
95
+ "signer": true
96
+ },
97
+ {
98
+ "name": "affiliate_usdc",
99
+ "writable": true
100
+ },
101
+ {
102
+ "name": "engine_auth"
103
+ }
104
+ ],
105
+ "args": []
106
+ },
107
+ {
108
+ "name": "close_affiliate_reward",
109
+ "discriminator": [
110
+ 55,
111
+ 224,
112
+ 212,
113
+ 224,
114
+ 214,
115
+ 43,
116
+ 145,
117
+ 98
118
+ ],
119
+ "accounts": [
120
+ {
121
+ "name": "affiliate_reward",
122
+ "writable": true
123
+ },
124
+ {
125
+ "name": "affiliate",
126
+ "writable": true,
127
+ "signer": true
128
+ }
129
+ ],
130
+ "args": []
131
+ },
132
+ {
133
+ "name": "close_position",
134
+ "discriminator": [
135
+ 123,
136
+ 134,
137
+ 81,
138
+ 0,
139
+ 49,
140
+ 68,
141
+ 98,
142
+ 98
143
+ ],
144
+ "accounts": [
145
+ {
146
+ "name": "market_state",
147
+ "writable": true
148
+ },
149
+ {
150
+ "name": "protocol_config",
151
+ "docs": [
152
+ "Program-level protocol config. Read-only — consulted here only for the",
153
+ "venue-wide emergency halt flag (`halt_mode`). Closes are blocked ONLY",
154
+ "under `Full` (ReduceOnly leaves exits open — H-04). Auto-resolved by the",
155
+ "Anchor client from the const seed; SDK/frontend callers need no change."
156
+ ],
157
+ "pda": {
158
+ "seeds": [
159
+ {
160
+ "kind": "const",
161
+ "value": [
162
+ 112,
163
+ 114,
164
+ 111,
165
+ 116,
166
+ 111,
167
+ 99,
168
+ 111,
169
+ 108,
170
+ 95,
171
+ 99,
172
+ 111,
173
+ 110,
174
+ 102,
175
+ 105,
176
+ 103
177
+ ]
178
+ }
179
+ ]
180
+ }
181
+ },
182
+ {
183
+ "name": "position",
184
+ "docs": [
185
+ "Position account — caller passes the address; we verify owner and market_id"
186
+ ],
187
+ "writable": true
188
+ },
189
+ {
190
+ "name": "trading_key",
191
+ "docs": [
192
+ "Optional trading key — if provided, signer must be the registered delegate"
193
+ ],
194
+ "optional": true
195
+ },
196
+ {
197
+ "name": "signer",
198
+ "docs": [
199
+ "The signing account (wallet owner or delegate)"
200
+ ],
201
+ "writable": true,
202
+ "signer": true
203
+ },
204
+ {
205
+ "name": "owner",
206
+ "docs": [
207
+ "The position owner — receives rent on full close"
208
+ ],
209
+ "writable": true
210
+ },
211
+ {
212
+ "name": "user_usdc",
213
+ "docs": [
214
+ "User's USDC account — receives net_return from vault"
215
+ ],
216
+ "writable": true
217
+ },
218
+ {
219
+ "name": "pool_state",
220
+ "writable": true
221
+ },
222
+ {
223
+ "name": "pool_program"
224
+ },
225
+ {
226
+ "name": "oracle_program"
227
+ },
228
+ {
229
+ "name": "market_oracle"
230
+ },
231
+ {
232
+ "name": "referral_config"
233
+ },
234
+ {
235
+ "name": "referral_code_account"
236
+ },
237
+ {
238
+ "name": "trader_referral"
239
+ },
240
+ {
241
+ "name": "affiliate",
242
+ "docs": [
243
+ "Affiliate wallet that owns the referral code (verified in handler)."
244
+ ]
245
+ },
246
+ {
247
+ "name": "affiliate_reward",
248
+ "docs": [
249
+ "AffiliateReward PDA — credited with `affiliate_cut` on the happy path."
250
+ ],
251
+ "writable": true,
252
+ "optional": true
253
+ },
254
+ {
255
+ "name": "vault_usdc",
256
+ "docs": [
257
+ "Pool's USDC vault — pays user on close"
258
+ ],
259
+ "writable": true
260
+ },
261
+ {
262
+ "name": "vault_authority"
263
+ },
264
+ {
265
+ "name": "engine_auth"
266
+ },
267
+ {
268
+ "name": "lp_mint",
269
+ "docs": [
270
+ "Ref 123 — pool-program reads these 3 from CPI remaining_accounts to",
271
+ "decide whether lp_gain on a Treasury-routed losing close should be swept",
272
+ "to insurance_vault (when lp_mint.supply == 0) instead of stranding in",
273
+ "pool.total_usdc. Pool-program does all validation; perp-engine just",
274
+ "forwards. SDK derives all 3 deterministically."
275
+ ]
276
+ },
277
+ {
278
+ "name": "insurance_fund",
279
+ "writable": true
280
+ },
281
+ {
282
+ "name": "insurance_vault",
283
+ "writable": true
284
+ },
285
+ {
286
+ "name": "token_program",
287
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
288
+ },
289
+ {
290
+ "name": "system_program",
291
+ "address": "11111111111111111111111111111111"
292
+ },
293
+ {
294
+ "name": "perp_engine_program",
295
+ "docs": [
296
+ "This program — needed for the F-005 self-CPI to update_funding_rate."
297
+ ],
298
+ "address": "6QrsMTMEu9rsLpyxQgRdvQsWoPgHGY9npNNiwTtXsbdc"
299
+ }
300
+ ],
301
+ "args": [
302
+ {
303
+ "name": "args",
304
+ "type": {
305
+ "defined": {
306
+ "name": "ClosePositionArgs"
307
+ }
308
+ }
309
+ }
310
+ ]
311
+ },
312
+ {
313
+ "name": "configure_referral_tiers",
314
+ "discriminator": [
315
+ 115,
316
+ 206,
317
+ 78,
318
+ 56,
319
+ 202,
320
+ 213,
321
+ 212,
322
+ 53
323
+ ],
324
+ "accounts": [
325
+ {
326
+ "name": "referral_config",
327
+ "writable": true,
328
+ "pda": {
329
+ "seeds": [
330
+ {
331
+ "kind": "const",
332
+ "value": [
333
+ 114,
334
+ 101,
335
+ 102,
336
+ 101,
337
+ 114,
338
+ 114,
339
+ 97,
340
+ 108,
341
+ 95,
342
+ 99,
343
+ 111,
344
+ 110,
345
+ 102,
346
+ 105,
347
+ 103
348
+ ]
349
+ }
350
+ ]
351
+ }
352
+ },
353
+ {
354
+ "name": "admin",
355
+ "writable": true,
356
+ "signer": true
357
+ },
358
+ {
359
+ "name": "system_program",
360
+ "address": "11111111111111111111111111111111"
361
+ }
362
+ ],
363
+ "args": [
364
+ {
365
+ "name": "tiers",
366
+ "type": {
367
+ "array": [
368
+ {
369
+ "defined": {
370
+ "name": "ReferralTier"
371
+ }
372
+ },
373
+ 4
374
+ ]
375
+ }
376
+ }
377
+ ]
378
+ },
379
+ {
380
+ "name": "create_order",
381
+ "discriminator": [
382
+ 141,
383
+ 54,
384
+ 37,
385
+ 207,
386
+ 237,
387
+ 210,
388
+ 250,
389
+ 215
390
+ ],
391
+ "accounts": [
392
+ {
393
+ "name": "market_state"
394
+ },
395
+ {
396
+ "name": "protocol_config",
397
+ "docs": [
398
+ "Program-level protocol config. Read-only — consulted here only for the",
399
+ "venue-wide emergency halt flag (`halt_mode`). Auto-resolved by the Anchor",
400
+ "client from the const seed (`[b\"protocol_config\"]`), so SDK/frontend",
401
+ "callers need no change; the keeper's raw ix-builder passes it explicitly."
402
+ ],
403
+ "pda": {
404
+ "seeds": [
405
+ {
406
+ "kind": "const",
407
+ "value": [
408
+ 112,
409
+ 114,
410
+ 111,
411
+ 116,
412
+ 111,
413
+ 99,
414
+ 111,
415
+ 108,
416
+ 95,
417
+ 99,
418
+ 111,
419
+ 110,
420
+ 102,
421
+ 105,
422
+ 103
423
+ ]
424
+ }
425
+ ]
426
+ }
427
+ },
428
+ {
429
+ "name": "pool_state",
430
+ "docs": [
431
+ "credit_collateral CPI can bump total_usdc on Increase orders."
432
+ ],
433
+ "writable": true
434
+ },
435
+ {
436
+ "name": "order_nonce",
437
+ "writable": true,
438
+ "pda": {
439
+ "seeds": [
440
+ {
441
+ "kind": "const",
442
+ "value": [
443
+ 111,
444
+ 114,
445
+ 100,
446
+ 101,
447
+ 114,
448
+ 95,
449
+ 110,
450
+ 111,
451
+ 110,
452
+ 99,
453
+ 101
454
+ ]
455
+ },
456
+ {
457
+ "kind": "account",
458
+ "path": "owner"
459
+ }
460
+ ]
461
+ }
462
+ },
463
+ {
464
+ "name": "order",
465
+ "writable": true
466
+ },
467
+ {
468
+ "name": "owner",
469
+ "writable": true,
470
+ "signer": true
471
+ },
472
+ {
473
+ "name": "owner_usdc",
474
+ "docs": [
475
+ "Source USDC (for Increase orders; ignored for Decrease)"
476
+ ],
477
+ "writable": true
478
+ },
479
+ {
480
+ "name": "vault_usdc",
481
+ "docs": [
482
+ "Market vault — collateral escrowed here"
483
+ ],
484
+ "writable": true
485
+ },
486
+ {
487
+ "name": "pool_program"
488
+ },
489
+ {
490
+ "name": "engine_auth"
491
+ },
492
+ {
493
+ "name": "token_program",
494
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
495
+ },
496
+ {
497
+ "name": "system_program",
498
+ "address": "11111111111111111111111111111111"
499
+ }
500
+ ],
501
+ "args": [
502
+ {
503
+ "name": "args",
504
+ "type": {
505
+ "defined": {
506
+ "name": "CreateOrderArgs"
507
+ }
508
+ }
509
+ }
510
+ ]
511
+ },
512
+ {
513
+ "name": "create_referral_code",
514
+ "discriminator": [
515
+ 206,
516
+ 2,
517
+ 37,
518
+ 2,
519
+ 193,
520
+ 190,
521
+ 203,
522
+ 191
523
+ ],
524
+ "accounts": [
525
+ {
526
+ "name": "referral_code",
527
+ "writable": true,
528
+ "pda": {
529
+ "seeds": [
530
+ {
531
+ "kind": "const",
532
+ "value": [
533
+ 114,
534
+ 101,
535
+ 102,
536
+ 101,
537
+ 114,
538
+ 114,
539
+ 97,
540
+ 108,
541
+ 95,
542
+ 99,
543
+ 111,
544
+ 100,
545
+ 101
546
+ ]
547
+ },
548
+ {
549
+ "kind": "arg",
550
+ "path": "code"
551
+ }
552
+ ]
553
+ }
554
+ },
555
+ {
556
+ "name": "affiliate",
557
+ "writable": true,
558
+ "signer": true
559
+ },
560
+ {
561
+ "name": "system_program",
562
+ "address": "11111111111111111111111111111111"
563
+ }
564
+ ],
565
+ "args": [
566
+ {
567
+ "name": "code",
568
+ "type": {
569
+ "array": [
570
+ "u8",
571
+ 32
572
+ ]
573
+ }
574
+ }
575
+ ]
576
+ },
577
+ {
578
+ "name": "execute_order",
579
+ "discriminator": [
580
+ 115,
581
+ 61,
582
+ 180,
583
+ 24,
584
+ 168,
585
+ 32,
586
+ 215,
587
+ 20
588
+ ],
589
+ "accounts": [
590
+ {
591
+ "name": "market_state",
592
+ "writable": true
593
+ },
594
+ {
595
+ "name": "protocol_config",
596
+ "docs": [
597
+ "Program-level protocol config. Read-only here — supplies the 24/7",
598
+ "tier breakpoints, per-tier leverage caps, and RTH window minutes",
599
+ "used by the session-aware tier check on the grow path."
600
+ ],
601
+ "pda": {
602
+ "seeds": [
603
+ {
604
+ "kind": "const",
605
+ "value": [
606
+ 112,
607
+ 114,
608
+ 111,
609
+ 116,
610
+ 111,
611
+ 99,
612
+ 111,
613
+ 108,
614
+ 95,
615
+ 99,
616
+ 111,
617
+ 110,
618
+ 102,
619
+ 105,
620
+ 103
621
+ ]
622
+ }
623
+ ]
624
+ }
625
+ },
626
+ {
627
+ "name": "order",
628
+ "writable": true
629
+ },
630
+ {
631
+ "name": "position",
632
+ "docs": [
633
+ "Position PDA — init_if_needed so this works for both increase (new) and decrease (existing)"
634
+ ],
635
+ "writable": true
636
+ },
637
+ {
638
+ "name": "keeper",
639
+ "docs": [
640
+ "Keeper — authorized executor, receives Order PDA rent on close"
641
+ ],
642
+ "writable": true,
643
+ "signer": true
644
+ },
645
+ {
646
+ "name": "owner",
647
+ "writable": true
648
+ },
649
+ {
650
+ "name": "owner_usdc",
651
+ "docs": [
652
+ "Owner's USDC — receives net return on decrease"
653
+ ],
654
+ "writable": true
655
+ },
656
+ {
657
+ "name": "vault_usdc",
658
+ "docs": [
659
+ "Vault USDC (collateral was escrowed here by create_order)"
660
+ ],
661
+ "writable": true
662
+ },
663
+ {
664
+ "name": "pool_state",
665
+ "writable": true
666
+ },
667
+ {
668
+ "name": "pool_program"
669
+ },
670
+ {
671
+ "name": "oracle_program"
672
+ },
673
+ {
674
+ "name": "market_oracle"
675
+ },
676
+ {
677
+ "name": "vault_authority"
678
+ },
679
+ {
680
+ "name": "engine_auth"
681
+ },
682
+ {
683
+ "name": "referral_config"
684
+ },
685
+ {
686
+ "name": "referral_code_account"
687
+ },
688
+ {
689
+ "name": "trader_referral"
690
+ },
691
+ {
692
+ "name": "affiliate",
693
+ "docs": [
694
+ "Affiliate wallet that owns the referral code (verified in handler)."
695
+ ]
696
+ },
697
+ {
698
+ "name": "affiliate_reward",
699
+ "docs": [
700
+ "AffiliateReward PDA — credited with `affiliate_cut` on the happy path.",
701
+ "Keeper pays rent on init since keeper signs the execute_order tx."
702
+ ],
703
+ "writable": true,
704
+ "optional": true
705
+ },
706
+ {
707
+ "name": "token_program",
708
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
709
+ },
710
+ {
711
+ "name": "system_program",
712
+ "address": "11111111111111111111111111111111"
713
+ },
714
+ {
715
+ "name": "perp_engine_program",
716
+ "docs": [
717
+ "This program — needed for the F-005 self-CPI to update_funding_rate."
718
+ ],
719
+ "address": "6QrsMTMEu9rsLpyxQgRdvQsWoPgHGY9npNNiwTtXsbdc"
720
+ }
721
+ ],
722
+ "args": []
723
+ },
724
+ {
725
+ "name": "initialize_market",
726
+ "discriminator": [
727
+ 35,
728
+ 35,
729
+ 189,
730
+ 193,
731
+ 155,
732
+ 48,
733
+ 170,
734
+ 203
735
+ ],
736
+ "accounts": [
737
+ {
738
+ "name": "market_state",
739
+ "writable": true,
740
+ "pda": {
741
+ "seeds": [
742
+ {
743
+ "kind": "const",
744
+ "value": [
745
+ 109,
746
+ 97,
747
+ 114,
748
+ 107,
749
+ 101,
750
+ 116
751
+ ]
752
+ },
753
+ {
754
+ "kind": "arg",
755
+ "path": "args.market_id"
756
+ }
757
+ ]
758
+ }
759
+ },
760
+ {
761
+ "name": "engine_auth"
762
+ },
763
+ {
764
+ "name": "protocol_config",
765
+ "docs": [
766
+ "Program-level protocol authority. `has_one = admin` enforces that the",
767
+ "signer is the registered admin (F-008)."
768
+ ],
769
+ "pda": {
770
+ "seeds": [
771
+ {
772
+ "kind": "const",
773
+ "value": [
774
+ 112,
775
+ 114,
776
+ 111,
777
+ 116,
778
+ 111,
779
+ 99,
780
+ 111,
781
+ 108,
782
+ 95,
783
+ 99,
784
+ 111,
785
+ 110,
786
+ 102,
787
+ 105,
788
+ 103
789
+ ]
790
+ }
791
+ ]
792
+ }
793
+ },
794
+ {
795
+ "name": "admin",
796
+ "writable": true,
797
+ "signer": true,
798
+ "relations": [
799
+ "protocol_config"
800
+ ]
801
+ },
802
+ {
803
+ "name": "system_program",
804
+ "address": "11111111111111111111111111111111"
805
+ }
806
+ ],
807
+ "args": [
808
+ {
809
+ "name": "args",
810
+ "type": {
811
+ "defined": {
812
+ "name": "InitializeMarketArgs"
813
+ }
814
+ }
815
+ }
816
+ ]
817
+ },
818
+ {
819
+ "name": "initialize_protocol_config",
820
+ "discriminator": [
821
+ 28,
822
+ 50,
823
+ 43,
824
+ 233,
825
+ 244,
826
+ 98,
827
+ 123,
828
+ 118
829
+ ],
830
+ "accounts": [
831
+ {
832
+ "name": "protocol_config",
833
+ "writable": true,
834
+ "pda": {
835
+ "seeds": [
836
+ {
837
+ "kind": "const",
838
+ "value": [
839
+ 112,
840
+ 114,
841
+ 111,
842
+ 116,
843
+ 111,
844
+ 99,
845
+ 111,
846
+ 108,
847
+ 95,
848
+ 99,
849
+ 111,
850
+ 110,
851
+ 102,
852
+ 105,
853
+ 103
854
+ ]
855
+ }
856
+ ]
857
+ }
858
+ },
859
+ {
860
+ "name": "admin",
861
+ "writable": true,
862
+ "signer": true
863
+ },
864
+ {
865
+ "name": "system_program",
866
+ "address": "11111111111111111111111111111111"
867
+ }
868
+ ],
869
+ "args": []
870
+ },
871
+ {
872
+ "name": "liquidate",
873
+ "discriminator": [
874
+ 223,
875
+ 179,
876
+ 226,
877
+ 125,
878
+ 48,
879
+ 46,
880
+ 39,
881
+ 74
882
+ ],
883
+ "accounts": [
884
+ {
885
+ "name": "market_state",
886
+ "writable": true
887
+ },
888
+ {
889
+ "name": "protocol_config",
890
+ "docs": [
891
+ "Program-level protocol config. Read-only — consulted here only for the",
892
+ "venue-wide emergency halt flag (`halt_mode`). Liquidations are blocked",
893
+ "ONLY under `Full` (ReduceOnly keeps the keeper liquidating — H-04).",
894
+ "Positioned 2nd (after market_state) to match the keeper's",
895
+ "`buildLiquidateIx` account order. Auto-resolved by the Anchor client."
896
+ ],
897
+ "pda": {
898
+ "seeds": [
899
+ {
900
+ "kind": "const",
901
+ "value": [
902
+ 112,
903
+ 114,
904
+ 111,
905
+ 116,
906
+ 111,
907
+ 99,
908
+ 111,
909
+ 108,
910
+ 95,
911
+ 99,
912
+ 111,
913
+ 110,
914
+ 102,
915
+ 105,
916
+ 103
917
+ ]
918
+ }
919
+ ]
920
+ }
921
+ },
922
+ {
923
+ "name": "position",
924
+ "docs": [
925
+ "Position to liquidate — caller provides the address; we verify market_id"
926
+ ],
927
+ "writable": true
928
+ },
929
+ {
930
+ "name": "liquidator",
931
+ "docs": [
932
+ "Permissionless — any account can trigger liquidation"
933
+ ],
934
+ "writable": true,
935
+ "signer": true
936
+ },
937
+ {
938
+ "name": "user_usdc",
939
+ "docs": [
940
+ "User's USDC account — receives any net_return after losses+rewards"
941
+ ],
942
+ "writable": true
943
+ },
944
+ {
945
+ "name": "liquidator_usdc",
946
+ "docs": [
947
+ "Liquidator's USDC account — receives liquidator reward via second CPI"
948
+ ],
949
+ "writable": true
950
+ },
951
+ {
952
+ "name": "pool_state",
953
+ "writable": true
954
+ },
955
+ {
956
+ "name": "pool_program"
957
+ },
958
+ {
959
+ "name": "oracle_program"
960
+ },
961
+ {
962
+ "name": "market_oracle"
963
+ },
964
+ {
965
+ "name": "vault_usdc",
966
+ "docs": [
967
+ "Pool's USDC vault"
968
+ ],
969
+ "writable": true
970
+ },
971
+ {
972
+ "name": "vault_authority"
973
+ },
974
+ {
975
+ "name": "insurance_fund",
976
+ "docs": [
977
+ "`accrue_to_insurance` via seeds = [b\"insurance_fund\"]."
978
+ ],
979
+ "writable": true
980
+ },
981
+ {
982
+ "name": "insurance_vault",
983
+ "docs": [
984
+ "`accrue_to_insurance` against `insurance_fund.usdc_vault`."
985
+ ],
986
+ "writable": true
987
+ },
988
+ {
989
+ "name": "insurance_vault_authority",
990
+ "docs": [
991
+ "on pool-program). Required by the followup-#44 `reimburse_liquidator` CPI",
992
+ "to sign the SPL transfer out of `insurance_vault`. Pool-program verifies",
993
+ "the PDA via its own seed bind; we pass it through unchecked here."
994
+ ]
995
+ },
996
+ {
997
+ "name": "lp_mint",
998
+ "docs": [
999
+ "Ref 123 — pool-program's release_and_settle reads lp_mint.supply",
1000
+ "to decide whether a Treasury-routed lp_gain should be swept to",
1001
+ "insurance_vault (lp_supply == 0) instead of stranding in pool.total_usdc.",
1002
+ "Pool-program verifies vs pool.lp_mint."
1003
+ ]
1004
+ },
1005
+ {
1006
+ "name": "engine_auth"
1007
+ },
1008
+ {
1009
+ "name": "token_program",
1010
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
1011
+ },
1012
+ {
1013
+ "name": "perp_engine_program",
1014
+ "docs": [
1015
+ "This program — needed for the F-005 self-CPI to update_funding_rate."
1016
+ ],
1017
+ "address": "6QrsMTMEu9rsLpyxQgRdvQsWoPgHGY9npNNiwTtXsbdc"
1018
+ }
1019
+ ],
1020
+ "args": [
1021
+ {
1022
+ "name": "max_collateral_loss",
1023
+ "type": {
1024
+ "option": "u64"
1025
+ }
1026
+ }
1027
+ ]
1028
+ },
1029
+ {
1030
+ "name": "migrate_market_state_v2",
1031
+ "discriminator": [
1032
+ 225,
1033
+ 54,
1034
+ 89,
1035
+ 42,
1036
+ 105,
1037
+ 180,
1038
+ 62,
1039
+ 11
1040
+ ],
1041
+ "accounts": [
1042
+ {
1043
+ "name": "market_state",
1044
+ "docs": [
1045
+ "Anchor's `Account<MarketState>` would try to borsh-deserialize the existing",
1046
+ "460-byte buffer against the new 476-byte layout BEFORE realloc and fail",
1047
+ "with `AccountDidNotDeserialize (3003)`. We sidestep that by taking the",
1048
+ "account as `UncheckedAccount` and doing realloc + write manually."
1049
+ ],
1050
+ "writable": true,
1051
+ "pda": {
1052
+ "seeds": [
1053
+ {
1054
+ "kind": "const",
1055
+ "value": [
1056
+ 109,
1057
+ 97,
1058
+ 114,
1059
+ 107,
1060
+ 101,
1061
+ 116
1062
+ ]
1063
+ },
1064
+ {
1065
+ "kind": "arg",
1066
+ "path": "market_id"
1067
+ }
1068
+ ]
1069
+ }
1070
+ },
1071
+ {
1072
+ "name": "protocol_config",
1073
+ "pda": {
1074
+ "seeds": [
1075
+ {
1076
+ "kind": "const",
1077
+ "value": [
1078
+ 112,
1079
+ 114,
1080
+ 111,
1081
+ 116,
1082
+ 111,
1083
+ 99,
1084
+ 111,
1085
+ 108,
1086
+ 95,
1087
+ 99,
1088
+ 111,
1089
+ 110,
1090
+ 102,
1091
+ 105,
1092
+ 103
1093
+ ]
1094
+ }
1095
+ ]
1096
+ }
1097
+ },
1098
+ {
1099
+ "name": "admin",
1100
+ "writable": true,
1101
+ "signer": true,
1102
+ "relations": [
1103
+ "protocol_config"
1104
+ ]
1105
+ },
1106
+ {
1107
+ "name": "system_program",
1108
+ "address": "11111111111111111111111111111111"
1109
+ }
1110
+ ],
1111
+ "args": [
1112
+ {
1113
+ "name": "market_id",
1114
+ "type": {
1115
+ "array": [
1116
+ "u8",
1117
+ 32
1118
+ ]
1119
+ }
1120
+ }
1121
+ ]
1122
+ },
1123
+ {
1124
+ "name": "migrate_market_state_v3",
1125
+ "docs": [
1126
+ "MarketState V2 (476) → V3 (511): one combined realloc for the coordinated",
1127
+ "go-live (step 4) — appends the ADL tail-backstop params (33B @476, shipped",
1128
+ "DISARMED: adl_frozen=1, triggers=u64::MAX) AND the 250x initial_margin_bps",
1129
+ "(2B @509, written 0; the per-market margin migration then sets it to 50)."
1130
+ ],
1131
+ "discriminator": [
1132
+ 146,
1133
+ 71,
1134
+ 103,
1135
+ 219,
1136
+ 246,
1137
+ 112,
1138
+ 237,
1139
+ 201
1140
+ ],
1141
+ "accounts": [
1142
+ {
1143
+ "name": "market_state",
1144
+ "writable": true,
1145
+ "pda": {
1146
+ "seeds": [
1147
+ {
1148
+ "kind": "const",
1149
+ "value": [
1150
+ 109,
1151
+ 97,
1152
+ 114,
1153
+ 107,
1154
+ 101,
1155
+ 116
1156
+ ]
1157
+ },
1158
+ {
1159
+ "kind": "arg",
1160
+ "path": "market_id"
1161
+ }
1162
+ ]
1163
+ }
1164
+ },
1165
+ {
1166
+ "name": "protocol_config",
1167
+ "pda": {
1168
+ "seeds": [
1169
+ {
1170
+ "kind": "const",
1171
+ "value": [
1172
+ 112,
1173
+ 114,
1174
+ 111,
1175
+ 116,
1176
+ 111,
1177
+ 99,
1178
+ 111,
1179
+ 108,
1180
+ 95,
1181
+ 99,
1182
+ 111,
1183
+ 110,
1184
+ 102,
1185
+ 105,
1186
+ 103
1187
+ ]
1188
+ }
1189
+ ]
1190
+ }
1191
+ },
1192
+ {
1193
+ "name": "admin",
1194
+ "writable": true,
1195
+ "signer": true,
1196
+ "relations": [
1197
+ "protocol_config"
1198
+ ]
1199
+ },
1200
+ {
1201
+ "name": "system_program",
1202
+ "address": "11111111111111111111111111111111"
1203
+ }
1204
+ ],
1205
+ "args": [
1206
+ {
1207
+ "name": "market_id",
1208
+ "type": {
1209
+ "array": [
1210
+ "u8",
1211
+ 32
1212
+ ]
1213
+ }
1214
+ }
1215
+ ]
1216
+ },
1217
+ {
1218
+ "name": "migrate_protocol_config_v2",
1219
+ "discriminator": [
1220
+ 148,
1221
+ 117,
1222
+ 205,
1223
+ 126,
1224
+ 209,
1225
+ 232,
1226
+ 254,
1227
+ 107
1228
+ ],
1229
+ "accounts": [
1230
+ {
1231
+ "name": "protocol_config",
1232
+ "writable": true,
1233
+ "pda": {
1234
+ "seeds": [
1235
+ {
1236
+ "kind": "const",
1237
+ "value": [
1238
+ 112,
1239
+ 114,
1240
+ 111,
1241
+ 116,
1242
+ 111,
1243
+ 99,
1244
+ 111,
1245
+ 108,
1246
+ 95,
1247
+ 99,
1248
+ 111,
1249
+ 110,
1250
+ 102,
1251
+ 105,
1252
+ 103
1253
+ ]
1254
+ }
1255
+ ]
1256
+ }
1257
+ },
1258
+ {
1259
+ "name": "admin",
1260
+ "writable": true,
1261
+ "signer": true,
1262
+ "relations": [
1263
+ "protocol_config"
1264
+ ]
1265
+ },
1266
+ {
1267
+ "name": "system_program",
1268
+ "address": "11111111111111111111111111111111"
1269
+ }
1270
+ ],
1271
+ "args": []
1272
+ },
1273
+ {
1274
+ "name": "open_position",
1275
+ "discriminator": [
1276
+ 135,
1277
+ 128,
1278
+ 47,
1279
+ 77,
1280
+ 15,
1281
+ 152,
1282
+ 240,
1283
+ 49
1284
+ ],
1285
+ "accounts": [
1286
+ {
1287
+ "name": "market_state",
1288
+ "writable": true
1289
+ },
1290
+ {
1291
+ "name": "protocol_config",
1292
+ "docs": [
1293
+ "Program-level protocol config. Read-only here — supplies the 24/7",
1294
+ "tier breakpoints, per-tier leverage caps, and RTH window minutes",
1295
+ "used by the session-aware tier check below."
1296
+ ],
1297
+ "pda": {
1298
+ "seeds": [
1299
+ {
1300
+ "kind": "const",
1301
+ "value": [
1302
+ 112,
1303
+ 114,
1304
+ 111,
1305
+ 116,
1306
+ 111,
1307
+ 99,
1308
+ 111,
1309
+ 108,
1310
+ 95,
1311
+ 99,
1312
+ 111,
1313
+ 110,
1314
+ 102,
1315
+ 105,
1316
+ 103
1317
+ ]
1318
+ }
1319
+ ]
1320
+ }
1321
+ },
1322
+ {
1323
+ "name": "position",
1324
+ "writable": true
1325
+ },
1326
+ {
1327
+ "name": "trading_key",
1328
+ "docs": [
1329
+ "Optional trading key — if Some, signer must be the registered delegate"
1330
+ ],
1331
+ "optional": true
1332
+ },
1333
+ {
1334
+ "name": "signer",
1335
+ "docs": [
1336
+ "The fee-paying, signing account (wallet owner or delegate)"
1337
+ ],
1338
+ "writable": true,
1339
+ "signer": true
1340
+ },
1341
+ {
1342
+ "name": "signer_usdc",
1343
+ "docs": [
1344
+ "Signer's USDC account (pays wallet_collateral + fees)"
1345
+ ],
1346
+ "writable": true
1347
+ },
1348
+ {
1349
+ "name": "vault_usdc",
1350
+ "docs": [
1351
+ "Pool's USDC vault — wallet_collateral + fee transferred here at open"
1352
+ ],
1353
+ "writable": true
1354
+ },
1355
+ {
1356
+ "name": "referral_config"
1357
+ },
1358
+ {
1359
+ "name": "referral_code_account"
1360
+ },
1361
+ {
1362
+ "name": "trader_referral"
1363
+ },
1364
+ {
1365
+ "name": "affiliate",
1366
+ "docs": [
1367
+ "Affiliate wallet that owns the referral code (verified in handler against",
1368
+ "ReferralCode.owner). Pass any unchecked account when no referral applies;",
1369
+ "the handler only reads/credits affiliate_reward when affiliate_cut > 0.",
1370
+ "pubkey returned by `resolve_referral_discount`."
1371
+ ]
1372
+ },
1373
+ {
1374
+ "name": "affiliate_reward",
1375
+ "docs": [
1376
+ "AffiliateReward PDA — credited with `affiliate_cut` on the happy path.",
1377
+ "Optional + init_if_needed so the no-referral path can pass `None` and",
1378
+ "avoid paying init rent. Seeded by (affiliate_pubkey, market_id)."
1379
+ ],
1380
+ "writable": true,
1381
+ "optional": true
1382
+ },
1383
+ {
1384
+ "name": "pool_state",
1385
+ "writable": true
1386
+ },
1387
+ {
1388
+ "name": "pool_program"
1389
+ },
1390
+ {
1391
+ "name": "oracle_program"
1392
+ },
1393
+ {
1394
+ "name": "market_oracle"
1395
+ },
1396
+ {
1397
+ "name": "engine_auth"
1398
+ },
1399
+ {
1400
+ "name": "user_claims",
1401
+ "docs": [
1402
+ "Passed as UncheckedAccount so callers can pass system_program when not using queue funds.",
1403
+ "The apply_queue_collateral_draw CPI validates it (init_if_needed + owner check)."
1404
+ ],
1405
+ "writable": true
1406
+ },
1407
+ {
1408
+ "name": "token_program",
1409
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
1410
+ },
1411
+ {
1412
+ "name": "system_program",
1413
+ "address": "11111111111111111111111111111111"
1414
+ },
1415
+ {
1416
+ "name": "perp_engine_program",
1417
+ "docs": [
1418
+ "This program — needed for the F-005 self-CPI to update_funding_rate."
1419
+ ],
1420
+ "address": "6QrsMTMEu9rsLpyxQgRdvQsWoPgHGY9npNNiwTtXsbdc"
1421
+ }
1422
+ ],
1423
+ "args": [
1424
+ {
1425
+ "name": "args",
1426
+ "type": {
1427
+ "defined": {
1428
+ "name": "OpenPositionArgs"
1429
+ }
1430
+ }
1431
+ }
1432
+ ]
1433
+ },
1434
+ {
1435
+ "name": "register_trading_key",
1436
+ "discriminator": [
1437
+ 236,
1438
+ 157,
1439
+ 2,
1440
+ 231,
1441
+ 38,
1442
+ 247,
1443
+ 243,
1444
+ 249
1445
+ ],
1446
+ "accounts": [
1447
+ {
1448
+ "name": "trading_key",
1449
+ "docs": [
1450
+ "init_if_needed: re-calling overwrites the existing key (intentional rotation)"
1451
+ ],
1452
+ "writable": true,
1453
+ "pda": {
1454
+ "seeds": [
1455
+ {
1456
+ "kind": "const",
1457
+ "value": [
1458
+ 116,
1459
+ 114,
1460
+ 97,
1461
+ 100,
1462
+ 105,
1463
+ 110,
1464
+ 103,
1465
+ 95,
1466
+ 107,
1467
+ 101,
1468
+ 121
1469
+ ]
1470
+ },
1471
+ {
1472
+ "kind": "account",
1473
+ "path": "wallet"
1474
+ }
1475
+ ]
1476
+ }
1477
+ },
1478
+ {
1479
+ "name": "wallet",
1480
+ "writable": true,
1481
+ "signer": true
1482
+ },
1483
+ {
1484
+ "name": "system_program",
1485
+ "address": "11111111111111111111111111111111"
1486
+ }
1487
+ ],
1488
+ "args": [
1489
+ {
1490
+ "name": "delegate",
1491
+ "type": "pubkey"
1492
+ },
1493
+ {
1494
+ "name": "expires_at",
1495
+ "type": "i64"
1496
+ }
1497
+ ]
1498
+ },
1499
+ {
1500
+ "name": "revoke_trading_key",
1501
+ "discriminator": [
1502
+ 188,
1503
+ 162,
1504
+ 180,
1505
+ 62,
1506
+ 200,
1507
+ 195,
1508
+ 255,
1509
+ 242
1510
+ ],
1511
+ "accounts": [
1512
+ {
1513
+ "name": "trading_key",
1514
+ "writable": true,
1515
+ "pda": {
1516
+ "seeds": [
1517
+ {
1518
+ "kind": "const",
1519
+ "value": [
1520
+ 116,
1521
+ 114,
1522
+ 97,
1523
+ 100,
1524
+ 105,
1525
+ 110,
1526
+ 103,
1527
+ 95,
1528
+ 107,
1529
+ 101,
1530
+ 121
1531
+ ]
1532
+ },
1533
+ {
1534
+ "kind": "account",
1535
+ "path": "wallet"
1536
+ }
1537
+ ]
1538
+ }
1539
+ },
1540
+ {
1541
+ "name": "wallet",
1542
+ "writable": true,
1543
+ "signer": true
1544
+ }
1545
+ ],
1546
+ "args": []
1547
+ },
1548
+ {
1549
+ "name": "set_market_paused",
1550
+ "discriminator": [
1551
+ 233,
1552
+ 31,
1553
+ 161,
1554
+ 248,
1555
+ 178,
1556
+ 111,
1557
+ 102,
1558
+ 65
1559
+ ],
1560
+ "accounts": [
1561
+ {
1562
+ "name": "market_state",
1563
+ "writable": true
1564
+ },
1565
+ {
1566
+ "name": "pool_state"
1567
+ },
1568
+ {
1569
+ "name": "admin",
1570
+ "signer": true
1571
+ }
1572
+ ],
1573
+ "args": [
1574
+ {
1575
+ "name": "paused",
1576
+ "type": "bool"
1577
+ }
1578
+ ]
1579
+ },
1580
+ {
1581
+ "name": "set_referral_tier",
1582
+ "discriminator": [
1583
+ 56,
1584
+ 47,
1585
+ 38,
1586
+ 12,
1587
+ 138,
1588
+ 121,
1589
+ 151,
1590
+ 162
1591
+ ],
1592
+ "accounts": [
1593
+ {
1594
+ "name": "referral_config",
1595
+ "pda": {
1596
+ "seeds": [
1597
+ {
1598
+ "kind": "const",
1599
+ "value": [
1600
+ 114,
1601
+ 101,
1602
+ 102,
1603
+ 101,
1604
+ 114,
1605
+ 114,
1606
+ 97,
1607
+ 108,
1608
+ 95,
1609
+ 99,
1610
+ 111,
1611
+ 110,
1612
+ 102,
1613
+ 105,
1614
+ 103
1615
+ ]
1616
+ }
1617
+ ]
1618
+ }
1619
+ },
1620
+ {
1621
+ "name": "referral_code",
1622
+ "writable": true
1623
+ },
1624
+ {
1625
+ "name": "admin",
1626
+ "signer": true
1627
+ }
1628
+ ],
1629
+ "args": [
1630
+ {
1631
+ "name": "tier",
1632
+ "type": "u8"
1633
+ }
1634
+ ]
1635
+ },
1636
+ {
1637
+ "name": "set_trader_referral",
1638
+ "discriminator": [
1639
+ 130,
1640
+ 179,
1641
+ 224,
1642
+ 41,
1643
+ 135,
1644
+ 234,
1645
+ 158,
1646
+ 120
1647
+ ],
1648
+ "accounts": [
1649
+ {
1650
+ "name": "referral_code",
1651
+ "pda": {
1652
+ "seeds": [
1653
+ {
1654
+ "kind": "const",
1655
+ "value": [
1656
+ 114,
1657
+ 101,
1658
+ 102,
1659
+ 101,
1660
+ 114,
1661
+ 114,
1662
+ 97,
1663
+ 108,
1664
+ 95,
1665
+ 99,
1666
+ 111,
1667
+ 100,
1668
+ 101
1669
+ ]
1670
+ },
1671
+ {
1672
+ "kind": "arg",
1673
+ "path": "code"
1674
+ }
1675
+ ]
1676
+ }
1677
+ },
1678
+ {
1679
+ "name": "trader_referral",
1680
+ "writable": true,
1681
+ "pda": {
1682
+ "seeds": [
1683
+ {
1684
+ "kind": "const",
1685
+ "value": [
1686
+ 116,
1687
+ 114,
1688
+ 97,
1689
+ 100,
1690
+ 101,
1691
+ 114,
1692
+ 95,
1693
+ 114,
1694
+ 101,
1695
+ 102,
1696
+ 101,
1697
+ 114,
1698
+ 114,
1699
+ 97,
1700
+ 108
1701
+ ]
1702
+ },
1703
+ {
1704
+ "kind": "account",
1705
+ "path": "trader"
1706
+ }
1707
+ ]
1708
+ }
1709
+ },
1710
+ {
1711
+ "name": "trader",
1712
+ "writable": true,
1713
+ "signer": true
1714
+ },
1715
+ {
1716
+ "name": "system_program",
1717
+ "address": "11111111111111111111111111111111"
1718
+ }
1719
+ ],
1720
+ "args": [
1721
+ {
1722
+ "name": "code",
1723
+ "type": {
1724
+ "array": [
1725
+ "u8",
1726
+ 32
1727
+ ]
1728
+ }
1729
+ }
1730
+ ]
1731
+ },
1732
+ {
1733
+ "name": "set_trading_halt",
1734
+ "docs": [
1735
+ "Admin emergency venue-wide trading halt. `mode`: 0 = None (normal /",
1736
+ "resume), 1 = ReduceOnly (block opens/increases/new orders/margin/",
1737
+ "funding; closes, cancels and liquidations stay open — the venue-wide",
1738
+ "equivalent of per-market `is_paused`), 2 = Full (additionally freeze",
1739
+ "closes + liquidations). One reversible tx halts (1/2) or resumes (0).",
1740
+ "The on-chain `ProtocolConfig.halt_mode` is the single source of truth."
1741
+ ],
1742
+ "discriminator": [
1743
+ 236,
1744
+ 13,
1745
+ 115,
1746
+ 30,
1747
+ 158,
1748
+ 56,
1749
+ 177,
1750
+ 72
1751
+ ],
1752
+ "accounts": [
1753
+ {
1754
+ "name": "protocol_config",
1755
+ "writable": true,
1756
+ "pda": {
1757
+ "seeds": [
1758
+ {
1759
+ "kind": "const",
1760
+ "value": [
1761
+ 112,
1762
+ 114,
1763
+ 111,
1764
+ 116,
1765
+ 111,
1766
+ 99,
1767
+ 111,
1768
+ 108,
1769
+ 95,
1770
+ 99,
1771
+ 111,
1772
+ 110,
1773
+ 102,
1774
+ 105,
1775
+ 103
1776
+ ]
1777
+ }
1778
+ ]
1779
+ }
1780
+ },
1781
+ {
1782
+ "name": "admin",
1783
+ "signer": true,
1784
+ "relations": [
1785
+ "protocol_config"
1786
+ ]
1787
+ }
1788
+ ],
1789
+ "args": [
1790
+ {
1791
+ "name": "mode",
1792
+ "type": "u8"
1793
+ }
1794
+ ]
1795
+ },
1796
+ {
1797
+ "name": "update_funding_rate",
1798
+ "discriminator": [
1799
+ 201,
1800
+ 178,
1801
+ 116,
1802
+ 212,
1803
+ 166,
1804
+ 144,
1805
+ 72,
1806
+ 238
1807
+ ],
1808
+ "accounts": [
1809
+ {
1810
+ "name": "market_state",
1811
+ "writable": true
1812
+ },
1813
+ {
1814
+ "name": "protocol_config",
1815
+ "docs": [
1816
+ "Program-level protocol config. Read-only — consulted for the venue-wide",
1817
+ "emergency halt flag (`halt_mode`). Positioned 2nd (after market_state,",
1818
+ "before pool_state) to match the F-005 self-CPI account order in",
1819
+ "`funding_helpers::invoke_update_funding_rate` and the keeper's",
1820
+ "`buildUpdateFundingRateIx`. Auto-resolved by the Anchor client."
1821
+ ],
1822
+ "pda": {
1823
+ "seeds": [
1824
+ {
1825
+ "kind": "const",
1826
+ "value": [
1827
+ 112,
1828
+ 114,
1829
+ 111,
1830
+ 116,
1831
+ 111,
1832
+ 99,
1833
+ 111,
1834
+ 108,
1835
+ 95,
1836
+ 99,
1837
+ 111,
1838
+ 110,
1839
+ 102,
1840
+ 105,
1841
+ 103
1842
+ ]
1843
+ }
1844
+ ]
1845
+ }
1846
+ },
1847
+ {
1848
+ "name": "pool_state",
1849
+ "docs": [
1850
+ "Bound to market_state.pool_state via account constraint (F-004): prevents",
1851
+ "any other pool-program-owned account from being substituted to spoof the",
1852
+ "borrowing-utilization read."
1853
+ ]
1854
+ }
1855
+ ],
1856
+ "args": []
1857
+ },
1858
+ {
1859
+ "name": "update_market_config",
1860
+ "discriminator": [
1861
+ 91,
1862
+ 87,
1863
+ 149,
1864
+ 101,
1865
+ 110,
1866
+ 116,
1867
+ 16,
1868
+ 120
1869
+ ],
1870
+ "accounts": [
1871
+ {
1872
+ "name": "market_state",
1873
+ "writable": true
1874
+ },
1875
+ {
1876
+ "name": "pool_state"
1877
+ },
1878
+ {
1879
+ "name": "admin",
1880
+ "docs": [
1881
+ "Admin signer — must match pool_state.admin at bytes [POOL_ADMIN_OFFSET..POOL_ADMIN_END]"
1882
+ ],
1883
+ "signer": true
1884
+ }
1885
+ ],
1886
+ "args": [
1887
+ {
1888
+ "name": "args",
1889
+ "type": {
1890
+ "defined": {
1891
+ "name": "UpdateMarketConfigArgs"
1892
+ }
1893
+ }
1894
+ }
1895
+ ]
1896
+ },
1897
+ {
1898
+ "name": "update_position_margin",
1899
+ "discriminator": [
1900
+ 131,
1901
+ 249,
1902
+ 20,
1903
+ 133,
1904
+ 50,
1905
+ 11,
1906
+ 185,
1907
+ 28
1908
+ ],
1909
+ "accounts": [
1910
+ {
1911
+ "name": "market_state",
1912
+ "writable": true
1913
+ },
1914
+ {
1915
+ "name": "protocol_config",
1916
+ "docs": [
1917
+ "Program-level protocol config. Read-only — consulted here only for the",
1918
+ "venue-wide emergency halt flag (`halt_mode`). Auto-resolved by the Anchor",
1919
+ "client from the const seed (`[b\"protocol_config\"]`), so SDK/frontend",
1920
+ "callers need no change; the keeper's raw ix-builder passes it explicitly."
1921
+ ],
1922
+ "pda": {
1923
+ "seeds": [
1924
+ {
1925
+ "kind": "const",
1926
+ "value": [
1927
+ 112,
1928
+ 114,
1929
+ 111,
1930
+ 116,
1931
+ 111,
1932
+ 99,
1933
+ 111,
1934
+ 108,
1935
+ 95,
1936
+ 99,
1937
+ 111,
1938
+ 110,
1939
+ 102,
1940
+ 105,
1941
+ 103
1942
+ ]
1943
+ }
1944
+ ]
1945
+ }
1946
+ },
1947
+ {
1948
+ "name": "position",
1949
+ "docs": [
1950
+ "Position account — caller provides the address; we verify owner and market_id"
1951
+ ],
1952
+ "writable": true
1953
+ },
1954
+ {
1955
+ "name": "trading_key",
1956
+ "docs": [
1957
+ "Optional trading key — if provided, signer must be the registered delegate"
1958
+ ],
1959
+ "optional": true
1960
+ },
1961
+ {
1962
+ "name": "signer",
1963
+ "docs": [
1964
+ "The signing account (wallet owner or delegate)"
1965
+ ],
1966
+ "writable": true,
1967
+ "signer": true
1968
+ },
1969
+ {
1970
+ "name": "owner"
1971
+ },
1972
+ {
1973
+ "name": "signer_usdc",
1974
+ "docs": [
1975
+ "Signer's USDC account (source for margin add)"
1976
+ ],
1977
+ "writable": true
1978
+ },
1979
+ {
1980
+ "name": "vault_usdc",
1981
+ "docs": [
1982
+ "Pool's USDC vault — receives added margin"
1983
+ ],
1984
+ "writable": true
1985
+ },
1986
+ {
1987
+ "name": "user_usdc",
1988
+ "docs": [
1989
+ "User's USDC account — receives returned margin on delta < 0"
1990
+ ],
1991
+ "writable": true
1992
+ },
1993
+ {
1994
+ "name": "vault_authority"
1995
+ },
1996
+ {
1997
+ "name": "pool_state",
1998
+ "writable": true
1999
+ },
2000
+ {
2001
+ "name": "pool_program"
2002
+ },
2003
+ {
2004
+ "name": "engine_auth"
2005
+ },
2006
+ {
2007
+ "name": "oracle_program"
2008
+ },
2009
+ {
2010
+ "name": "market_oracle"
2011
+ },
2012
+ {
2013
+ "name": "token_program",
2014
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
2015
+ },
2016
+ {
2017
+ "name": "perp_engine_program",
2018
+ "docs": [
2019
+ "This program — needed for the F-005 self-CPI to update_funding_rate."
2020
+ ],
2021
+ "address": "6QrsMTMEu9rsLpyxQgRdvQsWoPgHGY9npNNiwTtXsbdc"
2022
+ }
2023
+ ],
2024
+ "args": [
2025
+ {
2026
+ "name": "delta",
2027
+ "type": "i64"
2028
+ }
2029
+ ]
2030
+ },
2031
+ {
2032
+ "name": "update_protocol_config",
2033
+ "discriminator": [
2034
+ 197,
2035
+ 97,
2036
+ 123,
2037
+ 54,
2038
+ 221,
2039
+ 168,
2040
+ 11,
2041
+ 135
2042
+ ],
2043
+ "accounts": [
2044
+ {
2045
+ "name": "protocol_config",
2046
+ "writable": true,
2047
+ "pda": {
2048
+ "seeds": [
2049
+ {
2050
+ "kind": "const",
2051
+ "value": [
2052
+ 112,
2053
+ 114,
2054
+ 111,
2055
+ 116,
2056
+ 111,
2057
+ 99,
2058
+ 111,
2059
+ 108,
2060
+ 95,
2061
+ 99,
2062
+ 111,
2063
+ 110,
2064
+ 102,
2065
+ 105,
2066
+ 103
2067
+ ]
2068
+ }
2069
+ ]
2070
+ }
2071
+ },
2072
+ {
2073
+ "name": "admin",
2074
+ "signer": true,
2075
+ "relations": [
2076
+ "protocol_config"
2077
+ ]
2078
+ }
2079
+ ],
2080
+ "args": [
2081
+ {
2082
+ "name": "args",
2083
+ "type": {
2084
+ "defined": {
2085
+ "name": "UpdateProtocolConfigArgs"
2086
+ }
2087
+ }
2088
+ }
2089
+ ]
2090
+ }
2091
+ ],
2092
+ "accounts": [
2093
+ {
2094
+ "name": "AffiliateReward",
2095
+ "discriminator": [
2096
+ 9,
2097
+ 60,
2098
+ 238,
2099
+ 122,
2100
+ 97,
2101
+ 249,
2102
+ 105,
2103
+ 21
2104
+ ]
2105
+ },
2106
+ {
2107
+ "name": "MarketState",
2108
+ "discriminator": [
2109
+ 0,
2110
+ 125,
2111
+ 123,
2112
+ 215,
2113
+ 95,
2114
+ 96,
2115
+ 164,
2116
+ 194
2117
+ ]
2118
+ },
2119
+ {
2120
+ "name": "Order",
2121
+ "discriminator": [
2122
+ 134,
2123
+ 173,
2124
+ 223,
2125
+ 185,
2126
+ 77,
2127
+ 86,
2128
+ 28,
2129
+ 51
2130
+ ]
2131
+ },
2132
+ {
2133
+ "name": "OrderNonce",
2134
+ "discriminator": [
2135
+ 165,
2136
+ 225,
2137
+ 30,
2138
+ 180,
2139
+ 170,
2140
+ 135,
2141
+ 119,
2142
+ 188
2143
+ ]
2144
+ },
2145
+ {
2146
+ "name": "Position",
2147
+ "discriminator": [
2148
+ 170,
2149
+ 188,
2150
+ 143,
2151
+ 228,
2152
+ 122,
2153
+ 64,
2154
+ 247,
2155
+ 208
2156
+ ]
2157
+ },
2158
+ {
2159
+ "name": "ProtocolConfig",
2160
+ "discriminator": [
2161
+ 207,
2162
+ 91,
2163
+ 250,
2164
+ 28,
2165
+ 152,
2166
+ 179,
2167
+ 215,
2168
+ 209
2169
+ ]
2170
+ },
2171
+ {
2172
+ "name": "ReferralCode",
2173
+ "discriminator": [
2174
+ 227,
2175
+ 239,
2176
+ 247,
2177
+ 224,
2178
+ 128,
2179
+ 187,
2180
+ 44,
2181
+ 229
2182
+ ]
2183
+ },
2184
+ {
2185
+ "name": "ReferralConfig",
2186
+ "discriminator": [
2187
+ 102,
2188
+ 148,
2189
+ 171,
2190
+ 235,
2191
+ 148,
2192
+ 83,
2193
+ 250,
2194
+ 140
2195
+ ]
2196
+ },
2197
+ {
2198
+ "name": "TraderReferral",
2199
+ "discriminator": [
2200
+ 128,
2201
+ 194,
2202
+ 68,
2203
+ 99,
2204
+ 45,
2205
+ 69,
2206
+ 154,
2207
+ 115
2208
+ ]
2209
+ },
2210
+ {
2211
+ "name": "TradingKey",
2212
+ "discriminator": [
2213
+ 189,
2214
+ 58,
2215
+ 13,
2216
+ 247,
2217
+ 24,
2218
+ 128,
2219
+ 19,
2220
+ 108
2221
+ ]
2222
+ }
2223
+ ],
2224
+ "events": [
2225
+ {
2226
+ "name": "BadDebt",
2227
+ "discriminator": [
2228
+ 192,
2229
+ 33,
2230
+ 54,
2231
+ 41,
2232
+ 223,
2233
+ 158,
2234
+ 37,
2235
+ 34
2236
+ ]
2237
+ },
2238
+ {
2239
+ "name": "FeeAccrued",
2240
+ "discriminator": [
2241
+ 61,
2242
+ 83,
2243
+ 48,
2244
+ 144,
2245
+ 144,
2246
+ 50,
2247
+ 153,
2248
+ 45
2249
+ ]
2250
+ },
2251
+ {
2252
+ "name": "FundingUpdated",
2253
+ "discriminator": [
2254
+ 206,
2255
+ 76,
2256
+ 89,
2257
+ 81,
2258
+ 126,
2259
+ 37,
2260
+ 255,
2261
+ 224
2262
+ ]
2263
+ },
2264
+ {
2265
+ "name": "HaltModeChanged",
2266
+ "discriminator": [
2267
+ 188,
2268
+ 233,
2269
+ 118,
2270
+ 25,
2271
+ 206,
2272
+ 29,
2273
+ 235,
2274
+ 47
2275
+ ]
2276
+ },
2277
+ {
2278
+ "name": "Liquidated",
2279
+ "discriminator": [
2280
+ 231,
2281
+ 57,
2282
+ 55,
2283
+ 75,
2284
+ 0,
2285
+ 170,
2286
+ 246,
2287
+ 68
2288
+ ]
2289
+ },
2290
+ {
2291
+ "name": "PositionClosed",
2292
+ "discriminator": [
2293
+ 157,
2294
+ 163,
2295
+ 227,
2296
+ 228,
2297
+ 13,
2298
+ 97,
2299
+ 138,
2300
+ 121
2301
+ ]
2302
+ },
2303
+ {
2304
+ "name": "PositionOpened",
2305
+ "discriminator": [
2306
+ 237,
2307
+ 175,
2308
+ 243,
2309
+ 230,
2310
+ 147,
2311
+ 117,
2312
+ 101,
2313
+ 121
2314
+ ]
2315
+ },
2316
+ {
2317
+ "name": "ReferralRebateAccrued",
2318
+ "discriminator": [
2319
+ 83,
2320
+ 228,
2321
+ 253,
2322
+ 221,
2323
+ 66,
2324
+ 113,
2325
+ 109,
2326
+ 62
2327
+ ]
2328
+ }
2329
+ ],
2330
+ "errors": [
2331
+ {
2332
+ "code": 7001,
2333
+ "name": "PriceStale",
2334
+ "msg": "Price feed is stale"
2335
+ },
2336
+ {
2337
+ "code": 7002,
2338
+ "name": "PriceUncertain",
2339
+ "msg": "Price confidence too wide"
2340
+ },
2341
+ {
2342
+ "code": 7003,
2343
+ "name": "OracleNoReturnData",
2344
+ "msg": "Oracle returned no data"
2345
+ },
2346
+ {
2347
+ "code": 7004,
2348
+ "name": "OracleReturnMismatch",
2349
+ "msg": "Oracle return data mismatch"
2350
+ },
2351
+ {
2352
+ "code": 8001,
2353
+ "name": "InsufficientPool",
2354
+ "msg": "Insufficient pool liquidity"
2355
+ },
2356
+ {
2357
+ "code": 8002,
2358
+ "name": "LeverageExceeded",
2359
+ "msg": "Leverage exceeds max"
2360
+ },
2361
+ {
2362
+ "code": 8003,
2363
+ "name": "BelowMinSize",
2364
+ "msg": "Size below minimum"
2365
+ },
2366
+ {
2367
+ "code": 8004,
2368
+ "name": "WrongPool",
2369
+ "msg": "Wrong pool account"
2370
+ },
2371
+ {
2372
+ "code": 9001,
2373
+ "name": "HealthFactorTooLow",
2374
+ "msg": "Health factor too low"
2375
+ },
2376
+ {
2377
+ "code": 10001,
2378
+ "name": "TradingKeyExpired",
2379
+ "msg": "Trading key expired"
2380
+ },
2381
+ {
2382
+ "code": 10002,
2383
+ "name": "Unauthorized",
2384
+ "msg": "Unauthorized"
2385
+ },
2386
+ {
2387
+ "code": 10003,
2388
+ "name": "PositionNotFound",
2389
+ "msg": "Position not found"
2390
+ },
2391
+ {
2392
+ "code": 10004,
2393
+ "name": "MarketPaused",
2394
+ "msg": "Market is paused"
2395
+ },
2396
+ {
2397
+ "code": 10005,
2398
+ "name": "ProtocolHalted",
2399
+ "msg": "Protocol trading is halted"
2400
+ },
2401
+ {
2402
+ "code": 10006,
2403
+ "name": "InvalidHaltMode",
2404
+ "msg": "Invalid halt mode — must be 0 (None), 1 (ReduceOnly), or 2 (Full)"
2405
+ },
2406
+ {
2407
+ "code": 11001,
2408
+ "name": "MathOverflow",
2409
+ "msg": "Math overflow"
2410
+ },
2411
+ {
2412
+ "code": 12001,
2413
+ "name": "SlippageExceeded",
2414
+ "msg": "Slippage tolerance exceeded"
2415
+ },
2416
+ {
2417
+ "code": 12002,
2418
+ "name": "OrderNotTriggered",
2419
+ "msg": "Order not triggered"
2420
+ },
2421
+ {
2422
+ "code": 12003,
2423
+ "name": "WrongOrderType",
2424
+ "msg": "Wrong order type"
2425
+ },
2426
+ {
2427
+ "code": 13001,
2428
+ "name": "ReferralCodeTaken",
2429
+ "msg": "Referral code already taken"
2430
+ },
2431
+ {
2432
+ "code": 13002,
2433
+ "name": "ReferralCodeNotFound",
2434
+ "msg": "Referral code not found"
2435
+ },
2436
+ {
2437
+ "code": 13003,
2438
+ "name": "TraderAlreadyReferred",
2439
+ "msg": "Trader already has a referral"
2440
+ },
2441
+ {
2442
+ "code": 13004,
2443
+ "name": "InvalidTier",
2444
+ "msg": "Invalid tier — must be 0–3"
2445
+ },
2446
+ {
2447
+ "code": 9002,
2448
+ "name": "PositionHealthy",
2449
+ "msg": "Position health >= 1000, not liquidatable"
2450
+ },
2451
+ {
2452
+ "code": 15001,
2453
+ "name": "InvalidOptimalUsage",
2454
+ "msg": "Invalid optimal usage factor — must be < PRECISION"
2455
+ },
2456
+ {
2457
+ "code": 15002,
2458
+ "name": "MustBePaused",
2459
+ "msg": "Market must be paused for migration"
2460
+ },
2461
+ {
2462
+ "code": 15003,
2463
+ "name": "MissingFeeSettings",
2464
+ "msg": "Missing fee_settings remaining account"
2465
+ },
2466
+ {
2467
+ "code": 15004,
2468
+ "name": "MissingAffiliateReward",
2469
+ "msg": "Missing affiliate_reward remaining account"
2470
+ },
2471
+ {
2472
+ "code": 15005,
2473
+ "name": "MissingAffiliateRewardBump",
2474
+ "msg": "Missing affiliate_reward_bump in args"
2475
+ },
2476
+ {
2477
+ "code": 15006,
2478
+ "name": "MissingFeeDistributorAccounts",
2479
+ "msg": "Missing fee-distributor remaining accounts (need 4: program, fee_pool, referral_reserve, token_program)"
2480
+ },
2481
+ {
2482
+ "code": 8005,
2483
+ "name": "OiCapExceeded",
2484
+ "msg": "Open interest cap exceeded"
2485
+ },
2486
+ {
2487
+ "code": 8006,
2488
+ "name": "BelowMinCollateral",
2489
+ "msg": "Collateral below minimum ($10)"
2490
+ },
2491
+ {
2492
+ "code": 8007,
2493
+ "name": "InvalidConfig",
2494
+ "msg": "Invalid market config — inconsistent or default-pubkey field"
2495
+ },
2496
+ {
2497
+ "code": 8008,
2498
+ "name": "QueueCollateralExceedsClaim",
2499
+ "msg": "Position's collateral_from_queue exceeds available user claim"
2500
+ },
2501
+ {
2502
+ "code": 8009,
2503
+ "name": "WalletAndQueueZero",
2504
+ "msg": "Both wallet_collateral and from_queue_amount are zero"
2505
+ },
2506
+ {
2507
+ "code": 8010,
2508
+ "name": "MissingQueueEntryAccount",
2509
+ "msg": "Liquidation flow: required queue entry account missing"
2510
+ },
2511
+ {
2512
+ "code": 8011,
2513
+ "name": "LeverageExceedsTierCap",
2514
+ "msg": "Requested leverage exceeds the current-session tier cap for this wallet's notional"
2515
+ },
2516
+ {
2517
+ "code": 8012,
2518
+ "name": "MalformedQueueEntry",
2519
+ "msg": "Liquidation clawback: queue entry/claims account malformed or too short"
2520
+ },
2521
+ {
2522
+ "code": 8013,
2523
+ "name": "QueueOwnerMismatch",
2524
+ "msg": "Liquidation clawback: queue entry/claims owner != liquidated position owner"
2525
+ },
2526
+ {
2527
+ "code": 8014,
2528
+ "name": "QueueMarketMismatch",
2529
+ "msg": "Liquidation clawback: queue entry/claims belongs to a different market"
2530
+ },
2531
+ {
2532
+ "code": 8015,
2533
+ "name": "InitialMarginUnmet",
2534
+ "msg": "Initial margin requirement not met (collateral below notional * initial_margin_bps)"
2535
+ },
2536
+ {
2537
+ "code": 14001,
2538
+ "name": "FundingCadenceTooFast",
2539
+ "msg": "update_funding_rate called within 5s of last update"
2540
+ }
2541
+ ],
2542
+ "types": [
2543
+ {
2544
+ "name": "AffiliateReward",
2545
+ "type": {
2546
+ "kind": "struct",
2547
+ "fields": [
2548
+ {
2549
+ "name": "affiliate",
2550
+ "type": "pubkey"
2551
+ },
2552
+ {
2553
+ "name": "market_id",
2554
+ "type": {
2555
+ "array": [
2556
+ "u8",
2557
+ 32
2558
+ ]
2559
+ }
2560
+ },
2561
+ {
2562
+ "name": "accrued_usdc",
2563
+ "type": "u64"
2564
+ },
2565
+ {
2566
+ "name": "bump",
2567
+ "type": "u8"
2568
+ }
2569
+ ]
2570
+ }
2571
+ },
2572
+ {
2573
+ "name": "BadDebt",
2574
+ "type": {
2575
+ "kind": "struct",
2576
+ "fields": [
2577
+ {
2578
+ "name": "market_id",
2579
+ "type": {
2580
+ "array": [
2581
+ "u8",
2582
+ 32
2583
+ ]
2584
+ }
2585
+ },
2586
+ {
2587
+ "name": "amount",
2588
+ "type": "u64"
2589
+ }
2590
+ ]
2591
+ }
2592
+ },
2593
+ {
2594
+ "name": "ClosePositionArgs",
2595
+ "type": {
2596
+ "kind": "struct",
2597
+ "fields": [
2598
+ {
2599
+ "name": "close_size",
2600
+ "type": {
2601
+ "option": "u64"
2602
+ }
2603
+ },
2604
+ {
2605
+ "name": "min_output_usdc",
2606
+ "type": "u64"
2607
+ }
2608
+ ]
2609
+ }
2610
+ },
2611
+ {
2612
+ "name": "CreateOrderArgs",
2613
+ "type": {
2614
+ "kind": "struct",
2615
+ "fields": [
2616
+ {
2617
+ "name": "order_type",
2618
+ "type": {
2619
+ "defined": {
2620
+ "name": "OrderType"
2621
+ }
2622
+ }
2623
+ },
2624
+ {
2625
+ "name": "side",
2626
+ "type": {
2627
+ "defined": {
2628
+ "name": "Side"
2629
+ }
2630
+ }
2631
+ },
2632
+ {
2633
+ "name": "size_usdc",
2634
+ "type": "u64"
2635
+ },
2636
+ {
2637
+ "name": "collateral_usdc",
2638
+ "type": "u64"
2639
+ },
2640
+ {
2641
+ "name": "trigger_price",
2642
+ "type": "u64"
2643
+ },
2644
+ {
2645
+ "name": "acceptable_price",
2646
+ "type": "u64"
2647
+ },
2648
+ {
2649
+ "name": "min_output_usdc",
2650
+ "type": "u64"
2651
+ },
2652
+ {
2653
+ "name": "referral_code",
2654
+ "type": {
2655
+ "array": [
2656
+ "u8",
2657
+ 32
2658
+ ]
2659
+ }
2660
+ },
2661
+ {
2662
+ "name": "position_nonce",
2663
+ "type": "u64"
2664
+ }
2665
+ ]
2666
+ }
2667
+ },
2668
+ {
2669
+ "name": "FeeAccrued",
2670
+ "type": {
2671
+ "kind": "struct",
2672
+ "fields": [
2673
+ {
2674
+ "name": "market_id",
2675
+ "type": {
2676
+ "array": [
2677
+ "u8",
2678
+ 32
2679
+ ]
2680
+ }
2681
+ },
2682
+ {
2683
+ "name": "fee_type",
2684
+ "type": "u8"
2685
+ },
2686
+ {
2687
+ "name": "amount",
2688
+ "type": "u64"
2689
+ }
2690
+ ]
2691
+ }
2692
+ },
2693
+ {
2694
+ "name": "FundingUpdated",
2695
+ "type": {
2696
+ "kind": "struct",
2697
+ "fields": [
2698
+ {
2699
+ "name": "market_id",
2700
+ "type": {
2701
+ "array": [
2702
+ "u8",
2703
+ 32
2704
+ ]
2705
+ }
2706
+ },
2707
+ {
2708
+ "name": "funding_index",
2709
+ "type": "i128"
2710
+ },
2711
+ {
2712
+ "name": "long_oi",
2713
+ "type": "u64"
2714
+ },
2715
+ {
2716
+ "name": "short_oi",
2717
+ "type": "u64"
2718
+ }
2719
+ ]
2720
+ }
2721
+ },
2722
+ {
2723
+ "name": "HaltModeChanged",
2724
+ "docs": [
2725
+ "Emitted by `set_trading_halt` on every venue-wide halt-mode change (halt",
2726
+ "AND resume). External monitors (e.g. a Telegram alert bot) can subscribe to",
2727
+ "observe the transition; the indexer itself reads `halt_mode` on-demand via",
2728
+ "`getAccountInfo` rather than consuming this event."
2729
+ ],
2730
+ "type": {
2731
+ "kind": "struct",
2732
+ "fields": [
2733
+ {
2734
+ "name": "mode",
2735
+ "docs": [
2736
+ "New halt mode: 0 = None (normal), 1 = ReduceOnly, 2 = Full."
2737
+ ],
2738
+ "type": "u8"
2739
+ },
2740
+ {
2741
+ "name": "admin",
2742
+ "docs": [
2743
+ "The admin signer that made the change."
2744
+ ],
2745
+ "type": "pubkey"
2746
+ },
2747
+ {
2748
+ "name": "ts",
2749
+ "docs": [
2750
+ "Unix timestamp (slot clock) of the change."
2751
+ ],
2752
+ "type": "i64"
2753
+ }
2754
+ ]
2755
+ }
2756
+ },
2757
+ {
2758
+ "name": "InitializeMarketArgs",
2759
+ "type": {
2760
+ "kind": "struct",
2761
+ "fields": [
2762
+ {
2763
+ "name": "market_id",
2764
+ "type": {
2765
+ "array": [
2766
+ "u8",
2767
+ 32
2768
+ ]
2769
+ }
2770
+ },
2771
+ {
2772
+ "name": "pool_state",
2773
+ "type": "pubkey"
2774
+ },
2775
+ {
2776
+ "name": "pool_program",
2777
+ "type": "pubkey"
2778
+ },
2779
+ {
2780
+ "name": "oracle_program",
2781
+ "type": "pubkey"
2782
+ },
2783
+ {
2784
+ "name": "treasury",
2785
+ "type": "pubkey"
2786
+ },
2787
+ {
2788
+ "name": "staking_program_id",
2789
+ "type": "pubkey"
2790
+ },
2791
+ {
2792
+ "name": "keeper",
2793
+ "type": "pubkey"
2794
+ },
2795
+ {
2796
+ "name": "max_leverage",
2797
+ "type": "u8"
2798
+ },
2799
+ {
2800
+ "name": "base_fee_bps",
2801
+ "type": "u16"
2802
+ },
2803
+ {
2804
+ "name": "mmr_bps",
2805
+ "type": "u16"
2806
+ },
2807
+ {
2808
+ "name": "max_oi_long",
2809
+ "type": "u64"
2810
+ },
2811
+ {
2812
+ "name": "max_oi_short",
2813
+ "type": "u64"
2814
+ },
2815
+ {
2816
+ "name": "fee_bps_favorable",
2817
+ "type": "u16"
2818
+ },
2819
+ {
2820
+ "name": "initial_margin_bps",
2821
+ "type": "u16"
2822
+ }
2823
+ ]
2824
+ }
2825
+ },
2826
+ {
2827
+ "name": "Liquidated",
2828
+ "type": {
2829
+ "kind": "struct",
2830
+ "fields": [
2831
+ {
2832
+ "name": "owner",
2833
+ "type": "pubkey"
2834
+ },
2835
+ {
2836
+ "name": "market_id",
2837
+ "type": {
2838
+ "array": [
2839
+ "u8",
2840
+ 32
2841
+ ]
2842
+ }
2843
+ },
2844
+ {
2845
+ "name": "bad_debt",
2846
+ "type": "u64"
2847
+ }
2848
+ ]
2849
+ }
2850
+ },
2851
+ {
2852
+ "name": "MarketState",
2853
+ "type": {
2854
+ "kind": "struct",
2855
+ "fields": [
2856
+ {
2857
+ "name": "market_id",
2858
+ "type": {
2859
+ "array": [
2860
+ "u8",
2861
+ 32
2862
+ ]
2863
+ }
2864
+ },
2865
+ {
2866
+ "name": "long_oi",
2867
+ "type": "u64"
2868
+ },
2869
+ {
2870
+ "name": "short_oi",
2871
+ "type": "u64"
2872
+ },
2873
+ {
2874
+ "name": "funding_index",
2875
+ "type": "i128"
2876
+ },
2877
+ {
2878
+ "name": "last_funding_ts",
2879
+ "type": "i64"
2880
+ },
2881
+ {
2882
+ "name": "max_leverage",
2883
+ "type": "u8"
2884
+ },
2885
+ {
2886
+ "name": "base_fee_bps",
2887
+ "type": "u16"
2888
+ },
2889
+ {
2890
+ "name": "mmr_bps",
2891
+ "type": "u16"
2892
+ },
2893
+ {
2894
+ "name": "pool_state",
2895
+ "type": "pubkey"
2896
+ },
2897
+ {
2898
+ "name": "pool_program",
2899
+ "type": "pubkey"
2900
+ },
2901
+ {
2902
+ "name": "oracle_program",
2903
+ "type": "pubkey"
2904
+ },
2905
+ {
2906
+ "name": "treasury",
2907
+ "type": "pubkey"
2908
+ },
2909
+ {
2910
+ "name": "staking_program_id",
2911
+ "type": "pubkey"
2912
+ },
2913
+ {
2914
+ "name": "engine_auth_bump",
2915
+ "type": "u8"
2916
+ },
2917
+ {
2918
+ "name": "is_paused",
2919
+ "type": "bool"
2920
+ },
2921
+ {
2922
+ "name": "saved_funding_factor_per_second",
2923
+ "type": "i128"
2924
+ },
2925
+ {
2926
+ "name": "funding_increase_factor_per_second",
2927
+ "type": "u64"
2928
+ },
2929
+ {
2930
+ "name": "funding_decrease_factor_per_second",
2931
+ "type": "u64"
2932
+ },
2933
+ {
2934
+ "name": "threshold_for_stable_funding",
2935
+ "type": "u64"
2936
+ },
2937
+ {
2938
+ "name": "threshold_for_decrease_funding",
2939
+ "type": "u64"
2940
+ },
2941
+ {
2942
+ "name": "min_funding_factor_per_second",
2943
+ "type": "u64"
2944
+ },
2945
+ {
2946
+ "name": "max_funding_factor_per_second",
2947
+ "type": "u64"
2948
+ },
2949
+ {
2950
+ "name": "long_cumulative_borrowing_factor",
2951
+ "type": "u128"
2952
+ },
2953
+ {
2954
+ "name": "short_cumulative_borrowing_factor",
2955
+ "type": "u128"
2956
+ },
2957
+ {
2958
+ "name": "last_borrowing_ts",
2959
+ "type": "i64"
2960
+ },
2961
+ {
2962
+ "name": "borrowing_factor",
2963
+ "type": "u64"
2964
+ },
2965
+ {
2966
+ "name": "optimal_usage_factor",
2967
+ "type": "u64"
2968
+ },
2969
+ {
2970
+ "name": "above_optimal_borrowing_factor",
2971
+ "type": "u64"
2972
+ },
2973
+ {
2974
+ "name": "long_reserved_usdc",
2975
+ "type": "u64"
2976
+ },
2977
+ {
2978
+ "name": "short_reserved_usdc",
2979
+ "type": "u64"
2980
+ },
2981
+ {
2982
+ "name": "price_impact_factor",
2983
+ "type": "u64"
2984
+ },
2985
+ {
2986
+ "name": "max_price_impact_bps",
2987
+ "type": "u16"
2988
+ },
2989
+ {
2990
+ "name": "impact_pool_usdc",
2991
+ "type": "u64"
2992
+ },
2993
+ {
2994
+ "name": "keeper",
2995
+ "type": "pubkey"
2996
+ },
2997
+ {
2998
+ "name": "max_oi_long",
2999
+ "type": "u64"
3000
+ },
3001
+ {
3002
+ "name": "max_oi_short",
3003
+ "type": "u64"
3004
+ },
3005
+ {
3006
+ "name": "fee_bps_favorable",
3007
+ "type": "u16"
3008
+ },
3009
+ {
3010
+ "name": "bump",
3011
+ "type": "u8"
3012
+ },
3013
+ {
3014
+ "name": "off_hours_max_oi_long",
3015
+ "type": "u64"
3016
+ },
3017
+ {
3018
+ "name": "off_hours_max_oi_short",
3019
+ "type": "u64"
3020
+ },
3021
+ {
3022
+ "name": "adl_frozen",
3023
+ "type": "u8"
3024
+ },
3025
+ {
3026
+ "name": "adl_tail_trigger_usdc_rth",
3027
+ "type": "u64"
3028
+ },
3029
+ {
3030
+ "name": "adl_tail_trigger_usdc_off",
3031
+ "type": "u64"
3032
+ },
3033
+ {
3034
+ "name": "adl_tail_min_age_secs_rth",
3035
+ "type": "u32"
3036
+ },
3037
+ {
3038
+ "name": "adl_tail_min_age_secs_off",
3039
+ "type": "u32"
3040
+ },
3041
+ {
3042
+ "name": "adl_haircut_bps_rth",
3043
+ "type": "u16"
3044
+ },
3045
+ {
3046
+ "name": "adl_haircut_bps_off",
3047
+ "type": "u16"
3048
+ },
3049
+ {
3050
+ "name": "adl_max_haircut_bps",
3051
+ "type": "u16"
3052
+ },
3053
+ {
3054
+ "name": "adl_max_feed_divergence_bps",
3055
+ "type": "u16"
3056
+ },
3057
+ {
3058
+ "name": "initial_margin_bps",
3059
+ "type": "u16"
3060
+ }
3061
+ ]
3062
+ }
3063
+ },
3064
+ {
3065
+ "name": "OpenPositionArgs",
3066
+ "docs": [
3067
+ "BREAKING (v4): `collateral_usdc` has been replaced by an explicit",
3068
+ "`wallet_collateral + from_queue_amount` split per spec §5.4.",
3069
+ "`position_nonce` replaces the old `nonce` field name.",
3070
+ "`min_output_usdc` is added for future SL/TP integration (currently unused at open)."
3071
+ ],
3072
+ "type": {
3073
+ "kind": "struct",
3074
+ "fields": [
3075
+ {
3076
+ "name": "side",
3077
+ "type": {
3078
+ "defined": {
3079
+ "name": "Side"
3080
+ }
3081
+ }
3082
+ },
3083
+ {
3084
+ "name": "size_usdc",
3085
+ "type": "u64"
3086
+ },
3087
+ {
3088
+ "name": "wallet_collateral",
3089
+ "type": "u64"
3090
+ },
3091
+ {
3092
+ "name": "from_queue_amount",
3093
+ "type": "u64"
3094
+ },
3095
+ {
3096
+ "name": "acceptable_price",
3097
+ "type": "u64"
3098
+ },
3099
+ {
3100
+ "name": "min_output_usdc",
3101
+ "type": "u64"
3102
+ },
3103
+ {
3104
+ "name": "position_nonce",
3105
+ "type": "u64"
3106
+ },
3107
+ {
3108
+ "name": "referral_code",
3109
+ "type": {
3110
+ "array": [
3111
+ "u8",
3112
+ 32
3113
+ ]
3114
+ }
3115
+ }
3116
+ ]
3117
+ }
3118
+ },
3119
+ {
3120
+ "name": "Order",
3121
+ "type": {
3122
+ "kind": "struct",
3123
+ "fields": [
3124
+ {
3125
+ "name": "owner",
3126
+ "type": "pubkey"
3127
+ },
3128
+ {
3129
+ "name": "market_id",
3130
+ "type": {
3131
+ "array": [
3132
+ "u8",
3133
+ 32
3134
+ ]
3135
+ }
3136
+ },
3137
+ {
3138
+ "name": "order_type",
3139
+ "type": {
3140
+ "defined": {
3141
+ "name": "OrderType"
3142
+ }
3143
+ }
3144
+ },
3145
+ {
3146
+ "name": "side",
3147
+ "type": {
3148
+ "defined": {
3149
+ "name": "Side"
3150
+ }
3151
+ }
3152
+ },
3153
+ {
3154
+ "name": "size_usdc",
3155
+ "type": "u64"
3156
+ },
3157
+ {
3158
+ "name": "collateral_usdc",
3159
+ "type": "u64"
3160
+ },
3161
+ {
3162
+ "name": "trigger_price",
3163
+ "type": "u64"
3164
+ },
3165
+ {
3166
+ "name": "acceptable_price",
3167
+ "type": "u64"
3168
+ },
3169
+ {
3170
+ "name": "min_output_usdc",
3171
+ "type": "u64"
3172
+ },
3173
+ {
3174
+ "name": "referral_code",
3175
+ "type": {
3176
+ "array": [
3177
+ "u8",
3178
+ 32
3179
+ ]
3180
+ }
3181
+ },
3182
+ {
3183
+ "name": "position_nonce",
3184
+ "type": "u64"
3185
+ },
3186
+ {
3187
+ "name": "created_at",
3188
+ "type": "i64"
3189
+ },
3190
+ {
3191
+ "name": "nonce",
3192
+ "type": "u64"
3193
+ },
3194
+ {
3195
+ "name": "bump",
3196
+ "type": "u8"
3197
+ }
3198
+ ]
3199
+ }
3200
+ },
3201
+ {
3202
+ "name": "OrderNonce",
3203
+ "type": {
3204
+ "kind": "struct",
3205
+ "fields": [
3206
+ {
3207
+ "name": "owner",
3208
+ "type": "pubkey"
3209
+ },
3210
+ {
3211
+ "name": "nonce",
3212
+ "type": "u64"
3213
+ },
3214
+ {
3215
+ "name": "bump",
3216
+ "type": "u8"
3217
+ }
3218
+ ]
3219
+ }
3220
+ },
3221
+ {
3222
+ "name": "OrderType",
3223
+ "type": {
3224
+ "kind": "enum",
3225
+ "variants": [
3226
+ {
3227
+ "name": "MarketIncrease"
3228
+ },
3229
+ {
3230
+ "name": "LimitIncrease"
3231
+ },
3232
+ {
3233
+ "name": "StopIncrease"
3234
+ },
3235
+ {
3236
+ "name": "MarketDecrease"
3237
+ },
3238
+ {
3239
+ "name": "LimitDecrease"
3240
+ },
3241
+ {
3242
+ "name": "StopLossDecrease"
3243
+ }
3244
+ ]
3245
+ }
3246
+ },
3247
+ {
3248
+ "name": "Position",
3249
+ "type": {
3250
+ "kind": "struct",
3251
+ "fields": [
3252
+ {
3253
+ "name": "owner",
3254
+ "type": "pubkey"
3255
+ },
3256
+ {
3257
+ "name": "market_id",
3258
+ "type": {
3259
+ "array": [
3260
+ "u8",
3261
+ 32
3262
+ ]
3263
+ }
3264
+ },
3265
+ {
3266
+ "name": "side",
3267
+ "type": {
3268
+ "defined": {
3269
+ "name": "Side"
3270
+ }
3271
+ }
3272
+ },
3273
+ {
3274
+ "name": "size_usdc",
3275
+ "type": "u64"
3276
+ },
3277
+ {
3278
+ "name": "collateral_usdc",
3279
+ "type": "u64"
3280
+ },
3281
+ {
3282
+ "name": "entry_price",
3283
+ "type": "u64"
3284
+ },
3285
+ {
3286
+ "name": "funding_index_snapshot",
3287
+ "type": "i128"
3288
+ },
3289
+ {
3290
+ "name": "borrowing_factor_snapshot",
3291
+ "type": "u128"
3292
+ },
3293
+ {
3294
+ "name": "reserved_max_payout",
3295
+ "type": "u64"
3296
+ },
3297
+ {
3298
+ "name": "collateral_from_queue",
3299
+ "type": "u64"
3300
+ },
3301
+ {
3302
+ "name": "opened_at",
3303
+ "type": "i64"
3304
+ },
3305
+ {
3306
+ "name": "bump",
3307
+ "type": "u8"
3308
+ }
3309
+ ]
3310
+ }
3311
+ },
3312
+ {
3313
+ "name": "PositionClosed",
3314
+ "type": {
3315
+ "kind": "struct",
3316
+ "fields": [
3317
+ {
3318
+ "name": "owner",
3319
+ "type": "pubkey"
3320
+ },
3321
+ {
3322
+ "name": "market_id",
3323
+ "type": {
3324
+ "array": [
3325
+ "u8",
3326
+ 32
3327
+ ]
3328
+ }
3329
+ },
3330
+ {
3331
+ "name": "pnl",
3332
+ "type": "i64"
3333
+ },
3334
+ {
3335
+ "name": "net_return",
3336
+ "type": "u64"
3337
+ },
3338
+ {
3339
+ "name": "exit_price",
3340
+ "type": "u64"
3341
+ }
3342
+ ]
3343
+ }
3344
+ },
3345
+ {
3346
+ "name": "PositionOpened",
3347
+ "type": {
3348
+ "kind": "struct",
3349
+ "fields": [
3350
+ {
3351
+ "name": "owner",
3352
+ "type": "pubkey"
3353
+ },
3354
+ {
3355
+ "name": "market_id",
3356
+ "type": {
3357
+ "array": [
3358
+ "u8",
3359
+ 32
3360
+ ]
3361
+ }
3362
+ },
3363
+ {
3364
+ "name": "side",
3365
+ "type": {
3366
+ "defined": {
3367
+ "name": "Side"
3368
+ }
3369
+ }
3370
+ },
3371
+ {
3372
+ "name": "size_usdc",
3373
+ "type": "u64"
3374
+ },
3375
+ {
3376
+ "name": "collateral",
3377
+ "type": "u64"
3378
+ },
3379
+ {
3380
+ "name": "entry_price",
3381
+ "type": "u64"
3382
+ }
3383
+ ]
3384
+ }
3385
+ },
3386
+ {
3387
+ "name": "ProtocolConfig",
3388
+ "docs": [
3389
+ "Per-program protocol authority. One PDA per program at seeds = [b\"protocol_config\"].",
3390
+ "Holds the admin pubkey gating privileged init instructions (initialize_market).",
3391
+ "Single-key, no two-step handover (intentional pre-mainnet posture; rotation deferred to v1.1)."
3392
+ ],
3393
+ "type": {
3394
+ "kind": "struct",
3395
+ "fields": [
3396
+ {
3397
+ "name": "admin",
3398
+ "type": "pubkey"
3399
+ },
3400
+ {
3401
+ "name": "bump",
3402
+ "type": "u8"
3403
+ },
3404
+ {
3405
+ "name": "halt_mode",
3406
+ "docs": [
3407
+ "Venue-wide emergency trading halt (see `HaltMode`). 0 = None, 1 =",
3408
+ "ReduceOnly, 2 = Full. Set/reset in one reversible `set_trading_halt`",
3409
+ "tx. Carved from the first byte of the old `_reserved`, so existing",
3410
+ "on-chain PDAs decode it as 0 (= None, normal operation) the moment the",
3411
+ "program is redeployed — no realloc, no migration FOR THIS CHANGE: the",
3412
+ "struct is already `LEN` (126) on-chain (the 72→126 Phase-1 growth +",
3413
+ "`migrate_protocol_config_v2` is long done), and this carve only",
3414
+ "repartitions the existing 31-byte `_reserved` region (→ 1 + 30), so",
3415
+ "`LEN` is unchanged. Mirrors the `InsuranceFund.auto_payouts_frozen` precedent."
3416
+ ],
3417
+ "type": "u8"
3418
+ },
3419
+ {
3420
+ "name": "_reserved",
3421
+ "type": {
3422
+ "array": [
3423
+ "u8",
3424
+ 30
3425
+ ]
3426
+ }
3427
+ },
3428
+ {
3429
+ "name": "rth_open_minutes_utc",
3430
+ "type": "u16"
3431
+ },
3432
+ {
3433
+ "name": "rth_close_minutes_utc",
3434
+ "type": "u16"
3435
+ },
3436
+ {
3437
+ "name": "tier_breakpoints_usdc",
3438
+ "type": {
3439
+ "array": [
3440
+ "u64",
3441
+ 5
3442
+ ]
3443
+ }
3444
+ },
3445
+ {
3446
+ "name": "rth_max_leverage",
3447
+ "type": {
3448
+ "array": [
3449
+ "u8",
3450
+ 5
3451
+ ]
3452
+ }
3453
+ },
3454
+ {
3455
+ "name": "off_hours_max_leverage",
3456
+ "type": {
3457
+ "array": [
3458
+ "u8",
3459
+ 5
3460
+ ]
3461
+ }
3462
+ }
3463
+ ]
3464
+ }
3465
+ },
3466
+ {
3467
+ "name": "ReferralCode",
3468
+ "type": {
3469
+ "kind": "struct",
3470
+ "fields": [
3471
+ {
3472
+ "name": "owner",
3473
+ "type": "pubkey"
3474
+ },
3475
+ {
3476
+ "name": "code",
3477
+ "type": {
3478
+ "array": [
3479
+ "u8",
3480
+ 32
3481
+ ]
3482
+ }
3483
+ },
3484
+ {
3485
+ "name": "tier",
3486
+ "type": "u8"
3487
+ },
3488
+ {
3489
+ "name": "bump",
3490
+ "type": "u8"
3491
+ }
3492
+ ]
3493
+ }
3494
+ },
3495
+ {
3496
+ "name": "ReferralConfig",
3497
+ "type": {
3498
+ "kind": "struct",
3499
+ "fields": [
3500
+ {
3501
+ "name": "admin",
3502
+ "type": "pubkey"
3503
+ },
3504
+ {
3505
+ "name": "tiers",
3506
+ "type": {
3507
+ "array": [
3508
+ {
3509
+ "defined": {
3510
+ "name": "ReferralTier"
3511
+ }
3512
+ },
3513
+ 4
3514
+ ]
3515
+ }
3516
+ },
3517
+ {
3518
+ "name": "bump",
3519
+ "type": "u8"
3520
+ }
3521
+ ]
3522
+ }
3523
+ },
3524
+ {
3525
+ "name": "ReferralRebateAccrued",
3526
+ "docs": [
3527
+ "Emitted by `close_position` whenever `credit_affiliate_cut` credits the",
3528
+ "`AffiliateReward` PDA with a non-zero `affiliate_cut`. Carries enough fields",
3529
+ "to power the indexer's `/referral-stats?code=<affiliate_pubkey>` aggregate",
3530
+ "without joining against `PositionClosed` rows — `size_usdc` is the close",
3531
+ "notional (for `volumeReferred`), `amount` is the rebate (for",
3532
+ "`rebatesEarned`), and the trade-count aggregate is just `COUNT(*)` filtered",
3533
+ "by `affiliate`. Closes ref 99 (path A — emit canonical event from the",
3534
+ "rebate-credit site instead of polling AffiliateReward PDAs or approximating",
3535
+ "from referral-attribution PDAs)."
3536
+ ],
3537
+ "type": {
3538
+ "kind": "struct",
3539
+ "fields": [
3540
+ {
3541
+ "name": "affiliate",
3542
+ "docs": [
3543
+ "Affiliate wallet that earned the rebate (matches `AffiliateReward.affiliate`)."
3544
+ ],
3545
+ "type": "pubkey"
3546
+ },
3547
+ {
3548
+ "name": "owner",
3549
+ "docs": [
3550
+ "Trader whose close generated the rebate."
3551
+ ],
3552
+ "type": "pubkey"
3553
+ },
3554
+ {
3555
+ "name": "market_id",
3556
+ "type": {
3557
+ "array": [
3558
+ "u8",
3559
+ 32
3560
+ ]
3561
+ }
3562
+ },
3563
+ {
3564
+ "name": "size_usdc",
3565
+ "docs": [
3566
+ "Close notional (USDC scale 1e6) — sums into `volumeReferred`."
3567
+ ],
3568
+ "type": "u64"
3569
+ },
3570
+ {
3571
+ "name": "amount",
3572
+ "docs": [
3573
+ "Rebate amount credited to the affiliate (USDC scale 1e6) —",
3574
+ "sums into `rebatesEarned`."
3575
+ ],
3576
+ "type": "u64"
3577
+ }
3578
+ ]
3579
+ }
3580
+ },
3581
+ {
3582
+ "name": "ReferralTier",
3583
+ "type": {
3584
+ "kind": "struct",
3585
+ "fields": [
3586
+ {
3587
+ "name": "total_rebate_bps",
3588
+ "type": "u16"
3589
+ },
3590
+ {
3591
+ "name": "discount_share_pct",
3592
+ "type": "u8"
3593
+ }
3594
+ ]
3595
+ }
3596
+ },
3597
+ {
3598
+ "name": "Side",
3599
+ "type": {
3600
+ "kind": "enum",
3601
+ "variants": [
3602
+ {
3603
+ "name": "Long"
3604
+ },
3605
+ {
3606
+ "name": "Short"
3607
+ }
3608
+ ]
3609
+ }
3610
+ },
3611
+ {
3612
+ "name": "TraderReferral",
3613
+ "type": {
3614
+ "kind": "struct",
3615
+ "fields": [
3616
+ {
3617
+ "name": "trader",
3618
+ "type": "pubkey"
3619
+ },
3620
+ {
3621
+ "name": "code",
3622
+ "type": {
3623
+ "array": [
3624
+ "u8",
3625
+ 32
3626
+ ]
3627
+ }
3628
+ },
3629
+ {
3630
+ "name": "bump",
3631
+ "type": "u8"
3632
+ }
3633
+ ]
3634
+ }
3635
+ },
3636
+ {
3637
+ "name": "TradingKey",
3638
+ "type": {
3639
+ "kind": "struct",
3640
+ "fields": [
3641
+ {
3642
+ "name": "wallet",
3643
+ "type": "pubkey"
3644
+ },
3645
+ {
3646
+ "name": "delegate",
3647
+ "type": "pubkey"
3648
+ },
3649
+ {
3650
+ "name": "expires_at",
3651
+ "type": "i64"
3652
+ },
3653
+ {
3654
+ "name": "bump",
3655
+ "type": "u8"
3656
+ }
3657
+ ]
3658
+ }
3659
+ },
3660
+ {
3661
+ "name": "UpdateMarketConfigArgs",
3662
+ "type": {
3663
+ "kind": "struct",
3664
+ "fields": [
3665
+ {
3666
+ "name": "funding_increase_factor_per_second",
3667
+ "type": {
3668
+ "option": "u64"
3669
+ }
3670
+ },
3671
+ {
3672
+ "name": "funding_decrease_factor_per_second",
3673
+ "type": {
3674
+ "option": "u64"
3675
+ }
3676
+ },
3677
+ {
3678
+ "name": "threshold_for_stable_funding",
3679
+ "type": {
3680
+ "option": "u64"
3681
+ }
3682
+ },
3683
+ {
3684
+ "name": "threshold_for_decrease_funding",
3685
+ "type": {
3686
+ "option": "u64"
3687
+ }
3688
+ },
3689
+ {
3690
+ "name": "min_funding_factor_per_second",
3691
+ "type": {
3692
+ "option": "u64"
3693
+ }
3694
+ },
3695
+ {
3696
+ "name": "max_funding_factor_per_second",
3697
+ "type": {
3698
+ "option": "u64"
3699
+ }
3700
+ },
3701
+ {
3702
+ "name": "borrowing_factor",
3703
+ "type": {
3704
+ "option": "u64"
3705
+ }
3706
+ },
3707
+ {
3708
+ "name": "optimal_usage_factor",
3709
+ "type": {
3710
+ "option": "u64"
3711
+ }
3712
+ },
3713
+ {
3714
+ "name": "above_optimal_borrowing_factor",
3715
+ "type": {
3716
+ "option": "u64"
3717
+ }
3718
+ },
3719
+ {
3720
+ "name": "price_impact_factor",
3721
+ "type": {
3722
+ "option": "u64"
3723
+ }
3724
+ },
3725
+ {
3726
+ "name": "max_price_impact_bps",
3727
+ "type": {
3728
+ "option": "u16"
3729
+ }
3730
+ },
3731
+ {
3732
+ "name": "keeper",
3733
+ "type": {
3734
+ "option": "pubkey"
3735
+ }
3736
+ },
3737
+ {
3738
+ "name": "staking_program_id",
3739
+ "type": {
3740
+ "option": "pubkey"
3741
+ }
3742
+ },
3743
+ {
3744
+ "name": "max_oi_long",
3745
+ "type": {
3746
+ "option": "u64"
3747
+ }
3748
+ },
3749
+ {
3750
+ "name": "max_oi_short",
3751
+ "type": {
3752
+ "option": "u64"
3753
+ }
3754
+ },
3755
+ {
3756
+ "name": "fee_bps_favorable",
3757
+ "type": {
3758
+ "option": "u16"
3759
+ }
3760
+ },
3761
+ {
3762
+ "name": "off_hours_max_oi_long",
3763
+ "type": {
3764
+ "option": "u64"
3765
+ }
3766
+ },
3767
+ {
3768
+ "name": "off_hours_max_oi_short",
3769
+ "type": {
3770
+ "option": "u64"
3771
+ }
3772
+ },
3773
+ {
3774
+ "name": "mmr_bps",
3775
+ "type": {
3776
+ "option": "u16"
3777
+ }
3778
+ },
3779
+ {
3780
+ "name": "adl_frozen",
3781
+ "type": {
3782
+ "option": "u8"
3783
+ }
3784
+ },
3785
+ {
3786
+ "name": "adl_tail_trigger_usdc_rth",
3787
+ "type": {
3788
+ "option": "u64"
3789
+ }
3790
+ },
3791
+ {
3792
+ "name": "adl_tail_trigger_usdc_off",
3793
+ "type": {
3794
+ "option": "u64"
3795
+ }
3796
+ },
3797
+ {
3798
+ "name": "adl_tail_min_age_secs_rth",
3799
+ "type": {
3800
+ "option": "u32"
3801
+ }
3802
+ },
3803
+ {
3804
+ "name": "adl_tail_min_age_secs_off",
3805
+ "type": {
3806
+ "option": "u32"
3807
+ }
3808
+ },
3809
+ {
3810
+ "name": "adl_haircut_bps_rth",
3811
+ "type": {
3812
+ "option": "u16"
3813
+ }
3814
+ },
3815
+ {
3816
+ "name": "adl_haircut_bps_off",
3817
+ "type": {
3818
+ "option": "u16"
3819
+ }
3820
+ },
3821
+ {
3822
+ "name": "adl_max_haircut_bps",
3823
+ "type": {
3824
+ "option": "u16"
3825
+ }
3826
+ },
3827
+ {
3828
+ "name": "adl_max_feed_divergence_bps",
3829
+ "type": {
3830
+ "option": "u16"
3831
+ }
3832
+ },
3833
+ {
3834
+ "name": "initial_margin_bps",
3835
+ "type": {
3836
+ "option": "u16"
3837
+ }
3838
+ },
3839
+ {
3840
+ "name": "max_leverage",
3841
+ "type": {
3842
+ "option": "u8"
3843
+ }
3844
+ },
3845
+ {
3846
+ "name": "base_fee_bps",
3847
+ "type": {
3848
+ "option": "u16"
3849
+ }
3850
+ }
3851
+ ]
3852
+ }
3853
+ },
3854
+ {
3855
+ "name": "UpdateProtocolConfigArgs",
3856
+ "type": {
3857
+ "kind": "struct",
3858
+ "fields": [
3859
+ {
3860
+ "name": "rth_open_minutes_utc",
3861
+ "type": {
3862
+ "option": "u16"
3863
+ }
3864
+ },
3865
+ {
3866
+ "name": "rth_close_minutes_utc",
3867
+ "type": {
3868
+ "option": "u16"
3869
+ }
3870
+ },
3871
+ {
3872
+ "name": "tier_breakpoints_usdc",
3873
+ "type": {
3874
+ "option": {
3875
+ "array": [
3876
+ "u64",
3877
+ 5
3878
+ ]
3879
+ }
3880
+ }
3881
+ },
3882
+ {
3883
+ "name": "rth_max_leverage",
3884
+ "type": {
3885
+ "option": {
3886
+ "array": [
3887
+ "u8",
3888
+ 5
3889
+ ]
3890
+ }
3891
+ }
3892
+ },
3893
+ {
3894
+ "name": "off_hours_max_leverage",
3895
+ "type": {
3896
+ "option": {
3897
+ "array": [
3898
+ "u8",
3899
+ 5
3900
+ ]
3901
+ }
3902
+ }
3903
+ }
3904
+ ]
3905
+ }
3906
+ }
3907
+ ]
3908
+ }