sememe 0.4.25 → 0.4.27

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.
@@ -0,0 +1,954 @@
1
+ {
2
+ "address": "HADRoNbLovyqhCsocfYQYB7QdfCAAinN9HTePvBCVDQ8",
3
+ "metadata": {
4
+ "name": "hadron",
5
+ "version": "2.0.0",
6
+ "spec": "0.1.0",
7
+ "description": "WE STRONGLY ENCOURAGE USING A HADRON SDK — THE @hadron-fi/sdk-v2 TypeScript package OR THE hadron-sdk-v2 Rust crate — NOT THIS IDL — TO BUILD/SEND TRANSACTIONS: Hadron's instruction wire format is custom (non-Borsh), so a generic Anchor/IDL/Borsh client will mis-encode instructions. This IDL is intended for structural/read use only (explorers, account decoding, Surfpool). See idl/README.md. — Hadron: Programmable Prop AMM Engine."
8
+ },
9
+ "instructions": [
10
+ {
11
+ "name": "initialize",
12
+ "discriminator": [0],
13
+ "accounts": [
14
+ { "name": "payer", "writable": true, "signer": true },
15
+ { "name": "creator", "writable": false, "signer": true, "docs": ["Must equal the signer that called allocateCurvePrefabs (curve_prefabs PDA is creator-bound, L-14)."] },
16
+ { "name": "config", "writable": true },
17
+ { "name": "mintX", "writable": false },
18
+ { "name": "mintY", "writable": false },
19
+ { "name": "vaultX", "writable": true },
20
+ { "name": "vaultY", "writable": true },
21
+ { "name": "tokenProgramX", "writable": false },
22
+ { "name": "tokenProgramY", "writable": false },
23
+ { "name": "ataProgram", "writable": false },
24
+ { "name": "systemProgram", "writable": false },
25
+ { "name": "midpriceOracle", "writable": true },
26
+ { "name": "curveMeta", "writable": true },
27
+ { "name": "curvePrefabs", "writable": true },
28
+ { "name": "curveUpdates", "writable": true }
29
+ ],
30
+ "args": [
31
+ { "name": "seed", "type": "u64" },
32
+ { "name": "mintX", "type": "pubkey" },
33
+ { "name": "mintY", "type": "pubkey" },
34
+ { "name": "authority", "type": "pubkey" },
35
+ { "name": "initialMidpriceQ32", "type": "u64" },
36
+ { "name": "lpSelfRotate", "type": "bool" },
37
+ { "name": "maxPrefabSlots", "type": { "option": "u8" } },
38
+ { "name": "maxCurvePoints", "type": { "option": "u8" } },
39
+ { "name": "combinedFactorMaxQ32", "type": { "option": "u64" } }
40
+ ]
41
+ },
42
+ {
43
+ "name": "deposit",
44
+ "discriminator": [1],
45
+ "accounts": [
46
+ { "name": "user", "writable": false, "signer": true },
47
+ { "name": "vaultX", "writable": true },
48
+ { "name": "vaultY", "writable": true },
49
+ { "name": "userXAta", "writable": true },
50
+ { "name": "userYAta", "writable": true },
51
+ { "name": "config", "writable": true, "docs": ["Mutated by the I-27 drawdown guard re-anchor / trip (Config::load_mut)."] },
52
+ { "name": "midpriceOracle", "writable": false, "docs": ["Read for the drawdown guard (v2)."] },
53
+ { "name": "tokenProgramX", "writable": false },
54
+ { "name": "tokenProgramY", "writable": false },
55
+ { "name": "mintX", "writable": false, "optional": true, "docs": ["Token2022 mint X (for TransferChecked when mint has extensions)"] },
56
+ { "name": "mintY", "writable": false, "optional": true, "docs": ["Token2022 mint Y (for TransferChecked when mint has extensions)"] }
57
+ ],
58
+ "args": [
59
+ { "name": "xAmount", "type": "u64" },
60
+ { "name": "yAmount", "type": "u64" },
61
+ { "name": "expiration", "type": "i64" }
62
+ ]
63
+ },
64
+ {
65
+ "name": "withdraw",
66
+ "discriminator": [2],
67
+ "accounts": [
68
+ { "name": "user", "writable": false, "signer": true },
69
+ { "name": "vaultX", "writable": true },
70
+ { "name": "vaultY", "writable": true },
71
+ { "name": "userXAta", "writable": true },
72
+ { "name": "userYAta", "writable": true },
73
+ { "name": "config", "writable": true, "docs": ["Mutated by the I-27 drawdown guard re-anchor / trip (Config::load_mut)."] },
74
+ { "name": "midpriceOracle", "writable": false, "docs": ["Read for the drawdown guard (v2)."] },
75
+ { "name": "tokenProgramX", "writable": false },
76
+ { "name": "tokenProgramY", "writable": false },
77
+ { "name": "mintX", "writable": false, "optional": true, "docs": ["Token2022 mint X (for TransferChecked when mint has extensions)"] },
78
+ { "name": "mintY", "writable": false, "optional": true, "docs": ["Token2022 mint Y (for TransferChecked when mint has extensions)"] }
79
+ ],
80
+ "args": [
81
+ { "name": "xAmount", "type": "u64" },
82
+ { "name": "yAmount", "type": "u64" },
83
+ { "name": "expiration", "type": "i64" }
84
+ ]
85
+ },
86
+ {
87
+ "name": "swapExactIn",
88
+ "discriminator": [3],
89
+ "accounts": [
90
+ { "name": "tokenProgramX", "writable": false },
91
+ { "name": "tokenProgramY", "writable": false },
92
+ { "name": "config", "writable": true },
93
+ { "name": "midpriceOracle", "writable": false },
94
+ { "name": "curveMeta", "writable": false, "docs": ["Read-only: swap loads CurveMeta::load and never mutates it."] },
95
+ { "name": "curvePrefabs", "writable": true },
96
+ { "name": "authority", "writable": false, "docs": ["Unused slot (destructured as _authority on-chain); kept for v1 layout compatibility."] },
97
+ { "name": "user", "writable": false, "signer": true },
98
+ { "name": "userSource", "writable": true },
99
+ { "name": "vaultSource", "writable": true },
100
+ { "name": "vaultDest", "writable": true },
101
+ { "name": "userDest", "writable": true },
102
+ { "name": "feeConfig", "writable": false },
103
+ { "name": "feeRecipientAta", "writable": true },
104
+ { "name": "clock", "writable": false },
105
+ { "name": "curveUpdates", "writable": true },
106
+ { "name": "mintX", "writable": false, "optional": true, "docs": ["Token2022 mint X (for TransferChecked when mint has extensions)"] },
107
+ { "name": "mintY", "writable": false, "optional": true, "docs": ["Token2022 mint Y (for TransferChecked when mint has extensions)"] },
108
+ { "name": "spreadConfig", "writable": false, "optional": true, "docs": ["Required when the pool has an initialized SpreadConfig."] },
109
+ { "name": "instructionsSysvar", "writable": false, "optional": true, "docs": ["Required alongside spreadConfig for instruction introspection."] }
110
+ ],
111
+ "args": [
112
+ { "name": "isX", "type": "bool" },
113
+ { "name": "amount", "type": "u64" },
114
+ { "name": "minOut", "type": "u64" },
115
+ { "name": "expiration", "type": "i64" }
116
+ ]
117
+ },
118
+ {
119
+ "name": "setCurve",
120
+ "discriminator": [4],
121
+ "accounts": [
122
+ { "name": "authority", "writable": false, "signer": true },
123
+ { "name": "curveMeta", "writable": true },
124
+ { "name": "curvePrefabs", "writable": true }
125
+ ],
126
+ "args": [
127
+ { "name": "slot", "type": "u8" },
128
+ { "name": "side", "type": "u8" },
129
+ { "name": "defaultInterpolation", "type": "u8" },
130
+ { "name": "numPoints", "type": "u8" },
131
+ { "name": "xMode", "type": "u8" },
132
+ { "name": "points", "type": { "vec": { "defined": { "name": "CurvePointInput" } } } },
133
+ { "name": "sequence", "type": "u64" }
134
+ ]
135
+ },
136
+ {
137
+ "name": "updateMidprice",
138
+ "discriminator": [5],
139
+ "accounts": [
140
+ { "name": "authority", "writable": false, "signer": true },
141
+ { "name": "midpriceOracle", "writable": true },
142
+ { "name": "clock", "writable": false }
143
+ ],
144
+ "args": [
145
+ { "name": "sequence", "type": "u64" },
146
+ { "name": "newMidpriceQ32", "type": "u64" }
147
+ ]
148
+ },
149
+ {
150
+ "name": "initializeFeeConfig",
151
+ "discriminator": [6],
152
+ "accounts": [
153
+ { "name": "payer", "writable": true, "signer": true },
154
+ { "name": "authority", "writable": false, "signer": true },
155
+ { "name": "feeConfig", "writable": true },
156
+ { "name": "systemProgram", "writable": false }
157
+ ],
158
+ "args": [
159
+ { "name": "feePpm", "type": "u32" },
160
+ { "name": "feeAdmin", "type": "pubkey" },
161
+ { "name": "feeRecipient", "type": "pubkey" }
162
+ ]
163
+ },
164
+ {
165
+ "name": "updateFeeConfig",
166
+ "discriminator": [7],
167
+ "accounts": [
168
+ { "name": "feeAdmin", "writable": false, "signer": true },
169
+ { "name": "feeConfig", "writable": true }
170
+ ],
171
+ "args": [
172
+ { "name": "feePpm", "type": "u32", "docs": ["u32::MAX (0xFFFFFFFF) means no change."] },
173
+ { "name": "feeRecipient", "type": "pubkey", "docs": ["Always 32 bytes; an all-zero pubkey leaves the recipient unchanged."] }
174
+ ]
175
+ },
176
+ {
177
+ "name": "setRiskCurve",
178
+ "discriminator": [8],
179
+ "accounts": [
180
+ { "name": "authority", "writable": false, "signer": true },
181
+ { "name": "curveMeta", "writable": true },
182
+ { "name": "curvePrefabs", "writable": true }
183
+ ],
184
+ "args": [
185
+ { "name": "slot", "type": "u8" },
186
+ { "name": "side", "type": "u8" },
187
+ { "name": "defaultInterpolation", "type": "u8" },
188
+ { "name": "numPoints", "type": "u8" },
189
+ { "name": "xMode", "type": "u8" },
190
+ { "name": "riskMode", "type": "u8" },
191
+ { "name": "points", "type": { "vec": { "defined": { "name": "CurvePointInput" } } } },
192
+ { "name": "sequence", "type": "u64" }
193
+ ]
194
+ },
195
+ {
196
+ "name": "updateSpreadFactor",
197
+ "discriminator": [9],
198
+ "accounts": [
199
+ { "name": "authority", "writable": false, "signer": true },
200
+ { "name": "midpriceOracle", "writable": true },
201
+ { "name": "clock", "writable": false }
202
+ ],
203
+ "args": [
204
+ { "name": "spreadFactorQ32", "type": "u64", "docs": ["Spread as a discount factor in Q32 (e.g. toQ32(0.9995) = 5 bps)."] }
205
+ ]
206
+ },
207
+ {
208
+ "name": "updateMidpriceAndSpreadFactor",
209
+ "discriminator": [10],
210
+ "accounts": [
211
+ { "name": "authority", "writable": false, "signer": true },
212
+ { "name": "midpriceOracle", "writable": true },
213
+ { "name": "clock", "writable": false }
214
+ ],
215
+ "args": [
216
+ { "name": "sequence", "type": "u64" },
217
+ { "name": "newMidpriceQ32", "type": "u64" },
218
+ { "name": "spreadFactorQ32", "type": "u64" }
219
+ ]
220
+ },
221
+ {
222
+ "name": "switchPriceCurve",
223
+ "discriminator": [11],
224
+ "accounts": [
225
+ { "name": "authority", "writable": false, "signer": true },
226
+ { "name": "curveMeta", "writable": true }
227
+ ],
228
+ "args": [
229
+ { "name": "sequence", "type": "u64" },
230
+ { "name": "side", "type": "u8" },
231
+ { "name": "slot", "type": "u8" }
232
+ ]
233
+ },
234
+ {
235
+ "name": "switchRiskCurve",
236
+ "discriminator": [12],
237
+ "accounts": [
238
+ { "name": "authority", "writable": false, "signer": true },
239
+ { "name": "curveMeta", "writable": true }
240
+ ],
241
+ "args": [
242
+ { "name": "sequence", "type": "u64" },
243
+ { "name": "side", "type": "u8" },
244
+ { "name": "slot", "type": "u8" }
245
+ ]
246
+ },
247
+ {
248
+ "name": "initializeSpreadConfig",
249
+ "discriminator": [13],
250
+ "accounts": [
251
+ { "name": "payer", "writable": true, "signer": true },
252
+ { "name": "authority", "writable": false, "signer": true },
253
+ { "name": "config", "writable": true },
254
+ { "name": "spreadConfig", "writable": true },
255
+ { "name": "systemProgram", "writable": false }
256
+ ],
257
+ "args": [
258
+ { "name": "admin", "type": "pubkey" }
259
+ ]
260
+ },
261
+ {
262
+ "name": "updateSpreadConfig",
263
+ "discriminator": [14],
264
+ "accounts": [
265
+ { "name": "admin", "writable": false, "signer": true },
266
+ { "name": "config", "writable": false },
267
+ { "name": "spreadConfig", "writable": true }
268
+ ],
269
+ "args": [
270
+ { "name": "numTriggers", "type": "u8" },
271
+ { "name": "triggers", "type": { "vec": { "defined": { "name": "SpreadTriggerInput" } } } }
272
+ ]
273
+ },
274
+ {
275
+ "name": "updateDeltaStaleness",
276
+ "discriminator": [15],
277
+ "accounts": [
278
+ { "name": "authority", "writable": false, "signer": true, "docs": ["Quoting authority (CurveMeta.authority)."] },
279
+ { "name": "config", "writable": true },
280
+ { "name": "curveMeta", "writable": false }
281
+ ],
282
+ "args": [
283
+ { "name": "deltaStaleness", "type": "u8" }
284
+ ]
285
+ },
286
+ {
287
+ "name": "nominateAuthority",
288
+ "discriminator": [16],
289
+ "accounts": [
290
+ { "name": "authority", "writable": false, "signer": true },
291
+ { "name": "config", "writable": true },
292
+ { "name": "clock", "writable": false }
293
+ ],
294
+ "args": [
295
+ { "name": "newAuthority", "type": "pubkey" },
296
+ { "name": "expirySlot", "type": "u64" }
297
+ ]
298
+ },
299
+ {
300
+ "name": "acceptAuthority",
301
+ "discriminator": [17],
302
+ "accounts": [
303
+ { "name": "newAuthority", "writable": false, "signer": true },
304
+ { "name": "config", "writable": true },
305
+ { "name": "clock", "writable": false }
306
+ ],
307
+ "args": []
308
+ },
309
+ {
310
+ "name": "submitCurveUpdates",
311
+ "discriminator": [18],
312
+ "accounts": [
313
+ { "name": "authority", "writable": false, "signer": true },
314
+ { "name": "curveUpdates", "writable": true }
315
+ ],
316
+ "args": [
317
+ { "name": "sequence", "type": "u64" },
318
+ { "name": "numOps", "type": "u8" },
319
+ { "name": "ops", "type": { "vec": { "defined": { "name": "CurveUpdateOp" } } } }
320
+ ]
321
+ },
322
+ {
323
+ "name": "applyCurveUpdates",
324
+ "discriminator": [19],
325
+ "accounts": [
326
+ { "name": "authority", "writable": false, "signer": true },
327
+ { "name": "curveMeta", "writable": false },
328
+ { "name": "curvePrefabs", "writable": true },
329
+ { "name": "curveUpdates", "writable": true }
330
+ ],
331
+ "args": []
332
+ },
333
+ {
334
+ "name": "closePool",
335
+ "discriminator": [20],
336
+ "accounts": [
337
+ { "name": "authority", "writable": true, "signer": true, "docs": ["Writable: close_token_account CPIs vault lamports to the authority."] },
338
+ { "name": "config", "writable": true },
339
+ { "name": "midpriceOracle", "writable": true },
340
+ { "name": "curveMeta", "writable": true },
341
+ { "name": "curvePrefabs", "writable": true },
342
+ { "name": "curveUpdates", "writable": true },
343
+ { "name": "vaultX", "writable": true },
344
+ { "name": "vaultY", "writable": true },
345
+ { "name": "tokenProgramX", "writable": false },
346
+ { "name": "tokenProgramY", "writable": false },
347
+ { "name": "mintX", "writable": false, "optional": true, "docs": ["Required for a Token-2022 mint X when vault X holds a balance: the sweep uses TransferChecked."] },
348
+ { "name": "mintY", "writable": false, "optional": true, "docs": ["Required for a Token-2022 mint Y when vault Y holds a balance: the sweep uses TransferChecked."] },
349
+ { "name": "spreadConfig", "writable": true, "optional": true, "docs": ["Required when the pool has an initialized SpreadConfig."] },
350
+ { "name": "authorityAtaX", "writable": true, "optional": true },
351
+ { "name": "authorityAtaY", "writable": true, "optional": true }
352
+ ],
353
+ "args": []
354
+ },
355
+ {
356
+ "name": "setPoolState",
357
+ "discriminator": [21],
358
+ "accounts": [
359
+ { "name": "authority", "writable": false, "signer": true },
360
+ { "name": "config", "writable": true },
361
+ { "name": "curveMeta", "writable": false, "docs": ["Read for the quoting-authority check (v2)."] }
362
+ ],
363
+ "args": [
364
+ { "name": "newState", "type": "u8" }
365
+ ]
366
+ },
367
+ {
368
+ "name": "allocateCurvePrefabs",
369
+ "discriminator": [22],
370
+ "accounts": [
371
+ { "name": "payer", "writable": true, "signer": true },
372
+ { "name": "creator", "writable": false, "signer": true, "docs": ["curve_prefabs PDA is bound to this signer (L-14)."] },
373
+ { "name": "curvePrefabs", "writable": true },
374
+ { "name": "systemProgram", "writable": false }
375
+ ],
376
+ "args": [
377
+ { "name": "seed", "type": "u64" },
378
+ { "name": "mintX", "type": "pubkey" },
379
+ { "name": "mintY", "type": "pubkey" },
380
+ { "name": "maxPrefabSlots", "type": "u8" },
381
+ { "name": "maxCurvePoints", "type": "u8" }
382
+ ]
383
+ },
384
+ {
385
+ "name": "rotateFeeAdmin",
386
+ "discriminator": [24],
387
+ "accounts": [
388
+ { "name": "feeAdmin", "writable": false, "signer": true },
389
+ { "name": "feeConfig", "writable": true }
390
+ ],
391
+ "args": [
392
+ { "name": "newFeeAdmin", "type": "pubkey" }
393
+ ]
394
+ },
395
+ {
396
+ "name": "initializePoolFeeConfig",
397
+ "discriminator": [25],
398
+ "accounts": [
399
+ { "name": "payer", "writable": true, "signer": true },
400
+ { "name": "feeAdmin", "writable": false, "signer": true },
401
+ { "name": "config", "writable": true },
402
+ { "name": "poolFeeConfig", "writable": true },
403
+ { "name": "globalFeeConfig", "writable": false },
404
+ { "name": "systemProgram", "writable": false }
405
+ ],
406
+ "args": [
407
+ { "name": "feePpm", "type": "u32" },
408
+ { "name": "feeAdmin", "type": "pubkey" },
409
+ { "name": "feeRecipient", "type": "pubkey" }
410
+ ]
411
+ },
412
+ {
413
+ "name": "updatePoolFeeConfig",
414
+ "discriminator": [26],
415
+ "accounts": [
416
+ { "name": "feeAdmin", "writable": false, "signer": true },
417
+ { "name": "config", "writable": false },
418
+ { "name": "poolFeeConfig", "writable": true }
419
+ ],
420
+ "args": [
421
+ { "name": "feePpm", "type": "u32", "docs": ["u32::MAX (0xFFFFFFFF) means no change."] },
422
+ { "name": "feeRecipient", "type": "pubkey", "docs": ["Always 32 bytes; an all-zero pubkey leaves the recipient unchanged."] }
423
+ ]
424
+ },
425
+ {
426
+ "name": "setAssetFee",
427
+ "discriminator": [27],
428
+ "accounts": [
429
+ { "name": "payer", "writable": true, "signer": true },
430
+ { "name": "feeAdmin", "writable": false, "signer": true },
431
+ { "name": "feeConfig", "writable": true },
432
+ { "name": "systemProgram", "writable": false }
433
+ ],
434
+ "args": [
435
+ { "name": "mintA", "type": "pubkey" },
436
+ { "name": "mintB", "type": "pubkey" },
437
+ { "name": "feePpm", "type": "u32", "docs": ["0 removes the per-pair override. Mints are sorted canonically on-chain."] }
438
+ ]
439
+ },
440
+ {
441
+ "name": "validateCurveUpdates",
442
+ "discriminator": [28],
443
+ "accounts": [
444
+ { "name": "authority", "writable": false, "signer": true },
445
+ { "name": "curveMeta", "writable": false },
446
+ { "name": "curvePrefabs", "writable": true },
447
+ { "name": "curveUpdates", "writable": true }
448
+ ],
449
+ "args": [],
450
+ "docs": ["Dry-run: applies queued ops in-place then intentionally reverts with ValidationSimulationSuccess (73). Use via simulateTransaction."]
451
+ },
452
+ {
453
+ "name": "removeSpreadTriggers",
454
+ "discriminator": [29],
455
+ "accounts": [
456
+ { "name": "admin", "writable": false, "signer": true },
457
+ { "name": "config", "writable": false },
458
+ { "name": "spreadConfig", "writable": true }
459
+ ],
460
+ "args": [
461
+ { "name": "numKeys", "type": "u8" },
462
+ { "name": "keys", "type": { "vec": { "defined": { "name": "SpreadTriggerKey" } } } }
463
+ ]
464
+ },
465
+ {
466
+ "name": "updateDrawdownGuard",
467
+ "discriminator": [30],
468
+ "accounts": [
469
+ { "name": "authority", "writable": false, "signer": true },
470
+ { "name": "config", "writable": true },
471
+ { "name": "midpriceOracle", "writable": false },
472
+ { "name": "vaultX", "writable": false },
473
+ { "name": "vaultY", "writable": false }
474
+ ],
475
+ "args": [
476
+ { "name": "thresholdBps", "type": "u16", "docs": ["Sum-of-losses trip threshold in bps. 0 disables the guard."] },
477
+ { "name": "rotationIntervalSlots", "type": "u32", "docs": ["Half-period for HWM rotation, in slots. 0 disables."] }
478
+ ]
479
+ },
480
+ {
481
+ "name": "updateFactorClamp",
482
+ "discriminator": [31],
483
+ "accounts": [
484
+ { "name": "authority", "writable": true, "signer": true },
485
+ { "name": "config", "writable": true }
486
+ ],
487
+ "args": [
488
+ { "name": "combinedFactorMaxQ32", "type": "u64", "docs": ["Hard ceiling on combined factor. Must be >= Q32_ONE (1.0)."] }
489
+ ]
490
+ },
491
+ {
492
+ "name": "closePoolFeeConfig",
493
+ "discriminator": [32],
494
+ "accounts": [
495
+ { "name": "feeAdmin", "writable": true, "signer": true, "docs": ["Writable: receives the closed pool_fee_config rent. Signer is the GLOBAL fee_admin."] },
496
+ { "name": "config", "writable": true },
497
+ { "name": "poolFeeConfig", "writable": true },
498
+ { "name": "globalFeeConfig", "writable": false }
499
+ ],
500
+ "args": []
501
+ },
502
+ {
503
+ "name": "rotateDepositAuthority",
504
+ "discriminator": [33],
505
+ "accounts": [
506
+ { "name": "signer", "writable": false, "signer": true, "docs": ["deposit_authority, or pool authority when lp_self_rotate == false."] },
507
+ { "name": "config", "writable": true }
508
+ ],
509
+ "args": [
510
+ { "name": "newAuthority", "type": "pubkey" }
511
+ ]
512
+ },
513
+ {
514
+ "name": "rotateWithdrawAuthority",
515
+ "discriminator": [34],
516
+ "accounts": [
517
+ { "name": "signer", "writable": false, "signer": true, "docs": ["withdraw_authority, or pool authority when lp_self_rotate == false."] },
518
+ { "name": "config", "writable": true }
519
+ ],
520
+ "args": [
521
+ { "name": "newAuthority", "type": "pubkey" }
522
+ ]
523
+ },
524
+ {
525
+ "name": "rotateQuotingAuthority",
526
+ "discriminator": [35],
527
+ "accounts": [
528
+ { "name": "authority", "writable": false, "signer": true },
529
+ { "name": "config", "writable": false },
530
+ { "name": "midpriceOracle", "writable": true },
531
+ { "name": "curveMeta", "writable": true },
532
+ { "name": "curveUpdates", "writable": true }
533
+ ],
534
+ "args": [
535
+ { "name": "newQuotingAuthority", "type": "pubkey" }
536
+ ]
537
+ },
538
+ {
539
+ "name": "rotateSpreadAdmin",
540
+ "discriminator": [36],
541
+ "accounts": [
542
+ { "name": "authority", "writable": false, "signer": true, "docs": ["Pool authority (config.authority), not the spread admin."] },
543
+ { "name": "config", "writable": false },
544
+ { "name": "spreadConfig", "writable": true }
545
+ ],
546
+ "args": [
547
+ { "name": "newSpreadAdmin", "type": "pubkey" }
548
+ ]
549
+ },
550
+ {
551
+ "name": "rotatePauseAuthority",
552
+ "discriminator": [37],
553
+ "accounts": [
554
+ { "name": "authority", "writable": false, "signer": true, "docs": ["Pool authority (config.authority)."] },
555
+ { "name": "config", "writable": true }
556
+ ],
557
+ "args": [
558
+ { "name": "newAuthority", "type": "pubkey" }
559
+ ]
560
+ },
561
+ {
562
+ "name": "pokeDrawdownGuard",
563
+ "discriminator": [38],
564
+ "accounts": [
565
+ { "name": "authority", "writable": false, "signer": true, "docs": ["Must equal the midprice oracle authority."] },
566
+ { "name": "config", "writable": true },
567
+ { "name": "midpriceOracle", "writable": false },
568
+ { "name": "vaultX", "writable": false },
569
+ { "name": "vaultY", "writable": false }
570
+ ],
571
+ "args": [],
572
+ "docs": ["Oracle-authority-gated drawdown-guard evaluation; acts purely on current state (no args). Signer must be the midprice oracle authority."]
573
+ }
574
+ ],
575
+ "accounts": [
576
+ {
577
+ "name": "Config",
578
+ "discriminator": [],
579
+ "size": 724,
580
+ "type": {
581
+ "kind": "struct",
582
+ "fields": [
583
+ { "name": "state", "type": "u8" },
584
+ { "name": "seed", "type": { "array": ["u8", 8] } },
585
+ { "name": "authority", "type": "pubkey" },
586
+ { "name": "mintX", "type": "pubkey" },
587
+ { "name": "mintY", "type": "pubkey" },
588
+ { "name": "configBump", "type": { "array": ["u8", 1] } },
589
+ { "name": "curveMeta", "type": "pubkey" },
590
+ { "name": "spreadConfigInitialized", "type": "u8" },
591
+ { "name": "deltaStaleness", "type": "u8" },
592
+ { "name": "oracleMode", "type": "u8" },
593
+ { "name": "hasPoolFee", "type": "u8" },
594
+ { "name": "lpSelfRotate", "type": "u8" },
595
+ { "name": "padding", "type": { "array": ["u8", 1] } },
596
+ { "name": "pendingAuthority", "type": "pubkey" },
597
+ { "name": "nominationExpiry", "type": { "array": ["u8", 8] } },
598
+ { "name": "tokenProgramX", "type": "pubkey" },
599
+ { "name": "tokenProgramY", "type": "pubkey" },
600
+ { "name": "depositAuthority", "type": "pubkey" },
601
+ { "name": "withdrawAuthority", "type": "pubkey" },
602
+ { "name": "pauseAuthority", "type": "pubkey" },
603
+ { "name": "hwmBaseCurrent", "type": { "array": ["u8", 16] } },
604
+ { "name": "hwmBasePrevious", "type": { "array": ["u8", 16] } },
605
+ { "name": "hwmQuoteCurrent", "type": { "array": ["u8", 16] } },
606
+ { "name": "hwmQuotePrevious", "type": { "array": ["u8", 16] } },
607
+ { "name": "lastRotationSlot", "type": { "array": ["u8", 8] } },
608
+ { "name": "rotationIntervalSlots", "type": { "array": ["u8", 4] } },
609
+ { "name": "thresholdBps", "type": { "array": ["u8", 2] } },
610
+ { "name": "combinedFactorMaxQ32", "type": { "array": ["u8", 8] } },
611
+ { "name": "curvePrefabs", "type": "pubkey" },
612
+ { "name": "tailPadding", "type": { "array": ["u8", 6] } },
613
+ { "name": "reserved", "type": { "array": ["u8", 256] } }
614
+ ]
615
+ }
616
+ },
617
+ {
618
+ "name": "MidpriceOracle",
619
+ "discriminator": [],
620
+ "size": 128,
621
+ "type": {
622
+ "kind": "struct",
623
+ "fields": [
624
+ { "name": "authority", "type": "pubkey" },
625
+ { "name": "sequence", "type": "u64" },
626
+ { "name": "midpriceQ32", "type": "u64" },
627
+ { "name": "spreadFactorQ32", "type": "u64" },
628
+ { "name": "lastUpdateSlot", "type": "u64" },
629
+ { "name": "reserved", "type": { "array": ["u8", 64] } }
630
+ ]
631
+ }
632
+ },
633
+ {
634
+ "name": "CurveMeta",
635
+ "discriminator": [],
636
+ "size": 56,
637
+ "type": {
638
+ "kind": "struct",
639
+ "fields": [
640
+ { "name": "authority", "type": "pubkey" },
641
+ { "name": "activePriceBidSlot", "type": "u8" },
642
+ { "name": "activePriceAskSlot", "type": "u8" },
643
+ { "name": "activeRiskBidSlot", "type": "u8" },
644
+ { "name": "activeRiskAskSlot", "type": "u8" },
645
+ { "name": "initializedSlots", "type": { "array": ["u8", 8] } },
646
+ { "name": "maxPrefabSlots", "type": "u8" },
647
+ { "name": "maxCurvePoints", "type": "u8" },
648
+ { "name": "padding", "type": { "array": ["u8", 2] } },
649
+ { "name": "switchSequence", "type": "u64" }
650
+ ]
651
+ }
652
+ },
653
+ {
654
+ "name": "FeeConfig",
655
+ "discriminator": [],
656
+ "size": 72,
657
+ "docs": ["Global FeeConfig header. The global account may carry an appended per-asset-pair fee table after byte 72: u16 LE count, then up to 64 entries of {mintA(32), mintB(32), feePpm(4)} = 68 bytes each (mints canonically sorted)."],
658
+ "type": {
659
+ "kind": "struct",
660
+ "fields": [
661
+ { "name": "initialized", "type": "u8" },
662
+ { "name": "feePpm", "type": { "array": ["u8", 4] } },
663
+ { "name": "bump", "type": { "array": ["u8", 1] } },
664
+ { "name": "padding", "type": { "array": ["u8", 2] } },
665
+ { "name": "feeAdmin", "type": "pubkey" },
666
+ { "name": "feeRecipient", "type": "pubkey" }
667
+ ]
668
+ }
669
+ },
670
+ {
671
+ "name": "SpreadConfig",
672
+ "discriminator": [],
673
+ "size": 7272,
674
+ "type": {
675
+ "kind": "struct",
676
+ "fields": [
677
+ { "name": "initialized", "type": "u8" },
678
+ { "name": "bump", "type": { "array": ["u8", 1] } },
679
+ { "name": "numTriggers", "type": "u8" },
680
+ { "name": "padding", "type": { "array": ["u8", 5] } },
681
+ { "name": "admin", "type": "pubkey" },
682
+ { "name": "config", "type": "pubkey" },
683
+ { "name": "triggers", "type": { "array": [{ "defined": { "name": "SpreadTrigger" } }, 100] } }
684
+ ]
685
+ }
686
+ },
687
+ {
688
+ "name": "CurveUpdates",
689
+ "discriminator": [],
690
+ "size": 998,
691
+ "type": {
692
+ "kind": "struct",
693
+ "fields": [
694
+ { "name": "authority", "type": "pubkey" },
695
+ { "name": "curveMeta", "type": "pubkey" },
696
+ { "name": "sequence", "type": "u64" },
697
+ { "name": "numOps", "type": "u8" },
698
+ { "name": "padding", "type": { "array": ["u8", 1] } },
699
+ { "name": "ops", "type": { "array": [{ "defined": { "name": "CurveUpdateOp" } }, 28] } }
700
+ ]
701
+ }
702
+ }
703
+ ],
704
+ "types": [
705
+ {
706
+ "name": "CurvePoint",
707
+ "docs": ["On-chain stored curve point (24 bytes, repr(C, packed)). Stored inside the variable-length CurvePrefabs account."],
708
+ "type": {
709
+ "kind": "struct",
710
+ "fields": [
711
+ { "name": "xIn", "type": "u64" },
712
+ { "name": "priceFactorQ32", "type": "u64" },
713
+ { "name": "interpolation", "type": "u8" },
714
+ { "name": "params", "type": { "array": ["u8", 4] } },
715
+ { "name": "reserved", "type": { "array": ["u8", 3] } }
716
+ ]
717
+ }
718
+ },
719
+ {
720
+ "name": "CurvePointInput",
721
+ "docs": ["Wire-format curve point in setCurve / setRiskCurve instruction data (21 bytes, no reserved tail)."],
722
+ "type": {
723
+ "kind": "struct",
724
+ "fields": [
725
+ { "name": "amountIn", "type": "u64" },
726
+ { "name": "priceFactorQ32", "type": "u64" },
727
+ { "name": "interpolation", "type": "u8" },
728
+ { "name": "params", "type": { "array": ["u8", 4] } }
729
+ ]
730
+ }
731
+ },
732
+ {
733
+ "name": "CurveUpdateOp",
734
+ "docs": ["Pending curve update op (33 bytes, repr(C, packed)). Same layout in CurveUpdates.ops and in submitCurveUpdates instruction data."],
735
+ "type": {
736
+ "kind": "struct",
737
+ "fields": [
738
+ { "name": "curveType", "type": "u8" },
739
+ { "name": "opKind", "type": "u8" },
740
+ { "name": "pointIndex", "type": "u8" },
741
+ { "name": "interpolation", "type": "u8" },
742
+ { "name": "amountIn", "type": "u64" },
743
+ { "name": "priceFactorQ32", "type": "u64" },
744
+ { "name": "params", "type": { "array": ["u8", 4] } },
745
+ { "name": "targetSlot", "type": "u8" },
746
+ { "name": "expectedXIn", "type": "u64" }
747
+ ]
748
+ }
749
+ },
750
+ {
751
+ "name": "SpreadTrigger",
752
+ "docs": ["On-chain spread trigger (72 bytes, repr(C)). Stored inside SpreadConfig.triggers."],
753
+ "type": {
754
+ "kind": "struct",
755
+ "fields": [
756
+ { "name": "account", "type": "pubkey" },
757
+ { "name": "programId", "type": "pubkey" },
758
+ { "name": "spreadBps", "type": "u16" },
759
+ { "name": "padding", "type": { "array": ["u8", 6] } }
760
+ ]
761
+ }
762
+ },
763
+ {
764
+ "name": "SpreadTriggerInput",
765
+ "docs": ["Wire-format spread trigger in updateSpreadConfig instruction data (66 bytes, no padding)."],
766
+ "type": {
767
+ "kind": "struct",
768
+ "fields": [
769
+ { "name": "account", "type": "pubkey" },
770
+ { "name": "programId", "type": "pubkey" },
771
+ { "name": "spreadBps", "type": "u16" }
772
+ ]
773
+ }
774
+ },
775
+ {
776
+ "name": "SpreadTriggerKey",
777
+ "docs": ["Trigger identity key in removeSpreadTriggers instruction data (64 bytes)."],
778
+ "type": {
779
+ "kind": "struct",
780
+ "fields": [
781
+ { "name": "account", "type": "pubkey" },
782
+ { "name": "programId", "type": "pubkey" }
783
+ ]
784
+ }
785
+ },
786
+ {
787
+ "name": "PoolState",
788
+ "type": {
789
+ "kind": "enum",
790
+ "variants": [
791
+ { "name": "Uninitialized" },
792
+ { "name": "Initialized" },
793
+ { "name": "Paused" },
794
+ { "name": "RejectSwaps" },
795
+ { "name": "Closed" }
796
+ ]
797
+ }
798
+ },
799
+ {
800
+ "name": "OracleMode",
801
+ "type": {
802
+ "kind": "enum",
803
+ "variants": [
804
+ { "name": "Authority" },
805
+ { "name": "Relative" }
806
+ ]
807
+ }
808
+ },
809
+ {
810
+ "name": "CurvePrefabType",
811
+ "type": {
812
+ "kind": "enum",
813
+ "variants": [
814
+ { "name": "PriceBid" },
815
+ { "name": "PriceAsk" },
816
+ { "name": "RiskBid" },
817
+ { "name": "RiskAsk" }
818
+ ]
819
+ }
820
+ },
821
+ {
822
+ "name": "CurveUpdateOpKind",
823
+ "type": {
824
+ "kind": "enum",
825
+ "variants": [
826
+ { "name": "Edit" },
827
+ { "name": "Add" },
828
+ { "name": "Remove" }
829
+ ]
830
+ }
831
+ },
832
+ {
833
+ "name": "Interpolation",
834
+ "type": {
835
+ "kind": "enum",
836
+ "variants": [
837
+ { "name": "Step" },
838
+ { "name": "Linear" },
839
+ { "name": "MarginalStep" },
840
+ { "name": "Hyperbolic" },
841
+ { "name": "Quadratic" },
842
+ { "name": "Cubic" }
843
+ ]
844
+ }
845
+ },
846
+ {
847
+ "name": "CurveXMode",
848
+ "type": {
849
+ "kind": "enum",
850
+ "variants": [
851
+ { "name": "Native" },
852
+ { "name": "Alternate" }
853
+ ]
854
+ }
855
+ },
856
+ {
857
+ "name": "RiskMode",
858
+ "type": {
859
+ "kind": "enum",
860
+ "variants": [
861
+ { "name": "Virtual" },
862
+ { "name": "Integrated" }
863
+ ]
864
+ }
865
+ },
866
+ {
867
+ "name": "Side",
868
+ "type": {
869
+ "kind": "enum",
870
+ "variants": [
871
+ { "name": "SellBase" },
872
+ { "name": "BuyBase" }
873
+ ]
874
+ }
875
+ }
876
+ ],
877
+ "errors": [
878
+ { "code": 0, "name": "NotSigner", "msg": "Not the signer" },
879
+ { "code": 1, "name": "InvalidOwner", "msg": "Invalid account owner" },
880
+ { "code": 2, "name": "InvalidAccountData", "msg": "Invalid account data" },
881
+ { "code": 3, "name": "InvalidAddress", "msg": "Invalid address" },
882
+ { "code": 4, "name": "Unauthorized", "msg": "Unauthorized: not the pool authority" },
883
+ { "code": 5, "name": "PoolNotInitialized", "msg": "Pool not initialized" },
884
+ { "code": 6, "name": "PoolAlreadyInitialized", "msg": "Pool already initialized" },
885
+ { "code": 7, "name": "InsufficientLiquidity", "msg": "Insufficient liquidity" },
886
+ { "code": 8, "name": "SlippageExceeded", "msg": "Slippage exceeded" },
887
+ { "code": 9, "name": "CurvePointsNotSorted", "msg": "Invalid curve: points not sorted" },
888
+ { "code": 10, "name": "CurveDuplicateX", "msg": "Invalid curve: duplicate x values" },
889
+ { "code": 11, "name": "CurveTooManyPoints", "msg": "Invalid curve: too many points" },
890
+ { "code": 12, "name": "CurveEmpty", "msg": "Invalid curve: empty curve" },
891
+ { "code": 13, "name": "InvalidMidprice", "msg": "Invalid midprice" },
892
+ { "code": 14, "name": "MathOverflow", "msg": "Overflow in calculation" },
893
+ { "code": 15, "name": "ZeroSwapAmount", "msg": "Swap amount is zero" },
894
+ { "code": 16, "name": "PoolPaused", "msg": "Pool is paused" },
895
+ { "code": 17, "name": "FeeConfigAlreadyInitialized", "msg": "Fee config already initialized" },
896
+ { "code": 18, "name": "FeeConfigNotInitialized", "msg": "Fee config not initialized" },
897
+ { "code": 19, "name": "NotFeeAdmin", "msg": "Not the fee admin" },
898
+ { "code": 20, "name": "InvalidFeePpm", "msg": "Invalid fee PPM" },
899
+ { "code": 21, "name": "RiskCurveXOutOfRange", "msg": "Risk curve x-value out of range (must be 0 to Q32_ONE)" },
900
+ { "code": 22, "name": "SequenceTooOld", "msg": "Sequence too old - must be >= current sequence" },
901
+ { "code": 23, "name": "PrefabSlotOutOfRange", "msg": "Prefab slot index out of range (must be 0 to max_prefab_slots-1)" },
902
+ { "code": 25, "name": "PrefabSlotNotInitialized", "msg": "Prefab slot not initialized" },
903
+ { "code": 27, "name": "SpreadConfigAlreadyInitialized", "msg": "Spread config already initialized" },
904
+ { "code": 28, "name": "SpreadConfigNotInitialized", "msg": "Spread config not initialized" },
905
+ { "code": 29, "name": "TooManySpreadTriggers", "msg": "Too many spread triggers" },
906
+ { "code": 30, "name": "SpreadConfigRequired", "msg": "Spread config required - pool has spread config initialized but it was not provided" },
907
+ { "code": 31, "name": "SpreadConfigInvalidOwner", "msg": "Spread config account not owned by program" },
908
+ { "code": 32, "name": "ConfigInvalidOwner", "msg": "Config account not owned by program" },
909
+ { "code": 33, "name": "MidpriceOracleInvalidOwner", "msg": "MidpriceOracle account not owned by program" },
910
+ { "code": 34, "name": "CurveMetaInvalidOwner", "msg": "CurveMeta account not owned by program" },
911
+ { "code": 35, "name": "CurvePrefabsInvalidOwner", "msg": "CurvePrefabs account not owned by program" },
912
+ { "code": 36, "name": "FeeConfigInvalidOwner", "msg": "FeeConfig account not owned by program" },
913
+ { "code": 37, "name": "StaleOracle", "msg": "Stale oracle" },
914
+ { "code": 38, "name": "Expired", "msg": "Transaction expired" },
915
+ { "code": 39, "name": "NoPendingNomination", "msg": "No pending authority nomination" },
916
+ { "code": 40, "name": "NominationExpired", "msg": "Authority nomination has expired" },
917
+ { "code": 41, "name": "InvalidNominee", "msg": "Signer is not the nominated authority" },
918
+ { "code": 42, "name": "NominateSelf", "msg": "Cannot nominate self as new authority" },
919
+ { "code": 43, "name": "InvalidNominationExpiry", "msg": "Nomination expiry must be in the future" },
920
+ { "code": 44, "name": "InvalidTokenProgram", "msg": "Invalid token program (must be SPL Token or Token2022)" },
921
+ { "code": 45, "name": "PriceCurveXOutOfRange", "msg": "Price curve x-value out of range (must be 0 to Q32_ONE in percent mode)" },
922
+ { "code": 46, "name": "CurveUpdatesBufferFull", "msg": "Curve updates buffer is full" },
923
+ { "code": 47, "name": "CurveUpdatesInvalidOwner", "msg": "CurveUpdates account not owned by program" },
924
+ { "code": 48, "name": "CurveMetaMismatch", "msg": "CurveMeta address mismatch: account does not belong to this pool" },
925
+ { "code": 50, "name": "InvalidRiskMode", "msg": "Invalid risk mode (must be 0=Virtual or 1=Integrated)" },
926
+ { "code": 51, "name": "IntegratedRiskUnsupportedInterpolation", "msg": "Integrated risk mode is not supported for this interpolation type" },
927
+ { "code": 52, "name": "VaultsNotEmpty", "msg": "Vaults must be empty before closing pool" },
928
+ { "code": 53, "name": "InvalidPoolState", "msg": "Invalid pool state (must be 1=Initialized, 2=Paused, or 3=RejectSwaps, and different from current)" },
929
+ { "code": 54, "name": "MaxPrefabSlotsOutOfRange", "msg": "Max prefab slots out of range (must be 1-16)" },
930
+ { "code": 55, "name": "MaxCurvePointsOutOfRange", "msg": "Max curve points out of range (must be 1-128)" },
931
+ { "code": 56, "name": "VaultAddressMismatch", "msg": "Vault address does not match derived PDA" },
932
+ { "code": 57, "name": "VaultTokenAccountTooSmall", "msg": "Vault token account data too small" },
933
+ { "code": 58, "name": "UserTokenAccountTooSmall", "msg": "User token account data too small" },
934
+ { "code": 59, "name": "VaultMintMismatch", "msg": "Vault token account mint does not match config" },
935
+ { "code": 60, "name": "UserTokenAccountInvalid", "msg": "User token account has wrong owner or mint" },
936
+ { "code": 61, "name": "ConcavityViolation", "msg": "Curve interpolation params violate output concavity constraints" },
937
+ { "code": 62, "name": "PriceFactorTooLarge", "msg": "Price factor exceeds 1.0 (Q32_ONE) — price curves must have factors <= 1.0" },
938
+ { "code": 63, "name": "PoolFeeConfigAlreadyInitialized", "msg": "Pool fee config already initialized" },
939
+ { "code": 64, "name": "PoolFeeConfigNotInitialized", "msg": "Pool fee config not initialized" },
940
+ { "code": 66, "name": "AssetFeeCapExceeded", "msg": "Asset fee cap exceeded" },
941
+ { "code": 67, "name": "CurveUpdateSlotMismatch", "msg": "Curve update target_slot does not match active slot for the op's curve_type" },
942
+ { "code": 68, "name": "RiskCurveMonotonicityViolation", "msg": "Risk curve is not monotone (segment shape or factor sequence)" },
943
+ { "code": 70, "name": "InvalidTriggerSpreadBps", "msg": "Spread trigger spread_bps must be non-zero" },
944
+ { "code": 71, "name": "PoolAlreadyClosed", "msg": "Pool is closed (terminal state); operation not permitted" },
945
+ { "code": 72, "name": "CurveUpdateExpectedXMismatch", "msg": "Curve update expected_x_in does not match the current point at point_index" },
946
+ { "code": 73, "name": "ValidationSimulationSuccess", "msg": "ValidateCurveUpdates dry-run succeeded" },
947
+ { "code": 74, "name": "NotDepositAuthority", "msg": "Not the deposit authority" },
948
+ { "code": 75, "name": "NotWithdrawAuthority", "msg": "Not the withdraw authority" },
949
+ { "code": 76, "name": "RotateToZero", "msg": "Rotation target is the zero pubkey" },
950
+ { "code": 77, "name": "RotateNoOp", "msg": "Rotation target equals the current authority (no-op)" },
951
+ { "code": 78, "name": "DrawdownGuardDisabled", "msg": "Drawdown guard is disabled" },
952
+ { "code": 79, "name": "UnsupportedMintExtension", "msg": "Unsupported Token-2022 mint extension" }
953
+ ]
954
+ }