@veilo/sdk-core 0.5.0 → 0.6.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 (236) hide show
  1. package/README.md +237 -19
  2. package/accounts.d.ts +2 -0
  3. package/accounts.js +3 -0
  4. package/cloak.d.ts +2 -0
  5. package/cloak.js +3 -0
  6. package/config.d.ts +2 -0
  7. package/config.js +3 -0
  8. package/dist/cjs/events/index.d.ts +6 -0
  9. package/dist/cjs/events/index.js +22 -0
  10. package/dist/cjs/events/parsing.d.ts +25 -0
  11. package/dist/cjs/events/parsing.js +158 -0
  12. package/dist/cjs/events/position.d.ts +26 -0
  13. package/dist/cjs/events/position.js +53 -0
  14. package/dist/cjs/events/recovery.d.ts +87 -0
  15. package/dist/cjs/events/recovery.js +281 -0
  16. package/dist/cjs/events/scanning.d.ts +35 -0
  17. package/dist/cjs/events/scanning.js +98 -0
  18. package/dist/cjs/events/tree.d.ts +27 -0
  19. package/dist/cjs/events/tree.js +63 -0
  20. package/dist/cjs/events/types.d.ts +39 -0
  21. package/dist/cjs/events/types.js +2 -0
  22. package/dist/cjs/events.d.ts +1 -77
  23. package/dist/cjs/events.js +6 -154
  24. package/dist/cjs/identity/encoding.d.ts +9 -0
  25. package/dist/cjs/identity/encoding.js +85 -0
  26. package/dist/cjs/identity/index.d.ts +4 -0
  27. package/dist/cjs/identity/index.js +20 -0
  28. package/dist/cjs/identity/noteKey.d.ts +33 -0
  29. package/dist/cjs/identity/noteKey.js +97 -0
  30. package/dist/cjs/identity/spending.d.ts +18 -0
  31. package/dist/cjs/identity/spending.js +46 -0
  32. package/dist/cjs/identity/viewKey.d.ts +38 -0
  33. package/dist/cjs/identity/viewKey.js +105 -0
  34. package/dist/cjs/idl/index.d.ts +18 -0
  35. package/dist/cjs/idl/index.js +24 -0
  36. package/dist/cjs/idl/privacy_pool.json +9907 -9907
  37. package/dist/cjs/idl/privacy_pool_legacy.d.ts +5 -0
  38. package/dist/cjs/idl/privacy_pool_legacy.js +3307 -0
  39. package/dist/cjs/idl/privacy_pool_legacy.json +2302 -0
  40. package/dist/cjs/idl/privacy_pool_legacy2.d.ts +5 -0
  41. package/dist/cjs/idl/privacy_pool_legacy2.js +3397 -0
  42. package/dist/cjs/idl/privacy_pool_legacy2.json +2376 -0
  43. package/dist/cjs/index.d.ts +8 -3
  44. package/dist/cjs/index.js +12 -2
  45. package/dist/cjs/notes/amount.d.ts +2 -0
  46. package/dist/cjs/notes/amount.js +21 -0
  47. package/dist/cjs/notes/index.d.ts +3 -0
  48. package/dist/cjs/notes/index.js +3 -0
  49. package/dist/cjs/notes/recovery.d.ts +16 -6
  50. package/dist/cjs/notes/recovery.js +33 -16
  51. package/dist/cjs/notes/selection.d.ts +77 -0
  52. package/dist/cjs/notes/selection.js +193 -0
  53. package/dist/cjs/notes/spent.d.ts +60 -0
  54. package/dist/cjs/notes/spent.js +101 -0
  55. package/dist/cjs/perps/constants.d.ts +16 -0
  56. package/dist/cjs/perps/constants.js +52 -0
  57. package/dist/cjs/perps/index.d.ts +5 -0
  58. package/dist/cjs/perps/index.js +21 -0
  59. package/dist/cjs/perps/keys.d.ts +16 -0
  60. package/dist/cjs/perps/keys.js +43 -0
  61. package/dist/cjs/perps/pdas.d.ts +29 -0
  62. package/dist/cjs/perps/pdas.js +55 -0
  63. package/dist/cjs/perps/relayer.d.ts +9 -0
  64. package/dist/cjs/perps/relayer.js +35 -0
  65. package/dist/cjs/perps/types.d.ts +126 -0
  66. package/dist/cjs/perps/types.js +2 -0
  67. package/dist/cjs/positions/index.d.ts +4 -0
  68. package/dist/cjs/positions/index.js +20 -0
  69. package/dist/cjs/positions/keys.d.ts +29 -0
  70. package/dist/cjs/positions/keys.js +71 -0
  71. package/dist/cjs/positions/pdas.d.ts +15 -0
  72. package/dist/cjs/positions/pdas.js +54 -0
  73. package/dist/cjs/positions/relayer.d.ts +4 -0
  74. package/dist/cjs/positions/relayer.js +15 -0
  75. package/dist/cjs/positions/types.d.ts +97 -0
  76. package/dist/cjs/positions/types.js +2 -0
  77. package/dist/cjs/predictions/client.d.ts +41 -0
  78. package/dist/cjs/predictions/client.js +147 -0
  79. package/dist/cjs/predictions/index.d.ts +5 -0
  80. package/dist/cjs/predictions/index.js +21 -0
  81. package/dist/cjs/predictions/keys.d.ts +14 -0
  82. package/dist/cjs/predictions/keys.js +40 -0
  83. package/dist/cjs/predictions/pdas.d.ts +6 -0
  84. package/dist/cjs/predictions/pdas.js +13 -0
  85. package/dist/cjs/predictions/relayer.d.ts +3 -0
  86. package/dist/cjs/predictions/relayer.js +11 -0
  87. package/dist/cjs/predictions/types.d.ts +178 -0
  88. package/dist/cjs/predictions/types.js +2 -0
  89. package/dist/cjs/program.d.ts +2 -0
  90. package/dist/cjs/program.js +8 -7
  91. package/dist/cjs/prover.d.ts +27 -4
  92. package/dist/cjs/prover.js +107 -48
  93. package/dist/cjs/relayer/api.d.ts +31 -0
  94. package/dist/cjs/relayer/api.js +86 -0
  95. package/dist/cjs/relayer/client.d.ts +29 -17
  96. package/dist/cjs/relayer/client.js +72 -17
  97. package/dist/cjs/relayer/errors.d.ts +1 -1
  98. package/dist/cjs/relayer/errors.js +1 -1
  99. package/dist/cjs/relayer/index.d.ts +4 -1
  100. package/dist/cjs/relayer/index.js +1 -1
  101. package/dist/cjs/relayer/internal-config.d.ts +36 -0
  102. package/dist/cjs/relayer/internal-config.js +9 -0
  103. package/dist/cjs/relayer/internal.d.ts +6 -0
  104. package/dist/cjs/relayer/internal.js +14 -0
  105. package/dist/cjs/relayer/transport.d.ts +4 -2
  106. package/dist/cjs/relayer/transport.js +10 -5
  107. package/dist/cjs/relayer/types.d.ts +9 -10
  108. package/dist/cjs/relayer/types.js +1 -1
  109. package/dist/cjs/shield/owner.js +1 -4
  110. package/dist/esm/events/index.d.ts +6 -0
  111. package/dist/esm/events/index.js +6 -0
  112. package/dist/esm/events/parsing.d.ts +25 -0
  113. package/dist/esm/events/parsing.js +120 -0
  114. package/dist/esm/events/position.d.ts +26 -0
  115. package/dist/esm/events/position.js +48 -0
  116. package/dist/esm/events/recovery.d.ts +87 -0
  117. package/dist/esm/events/recovery.js +237 -0
  118. package/dist/esm/events/scanning.d.ts +35 -0
  119. package/dist/esm/events/scanning.js +92 -0
  120. package/dist/esm/events/tree.d.ts +27 -0
  121. package/dist/esm/events/tree.js +58 -0
  122. package/dist/esm/events/types.d.ts +39 -0
  123. package/dist/esm/events/types.js +1 -0
  124. package/dist/esm/events.d.ts +1 -77
  125. package/dist/esm/events.js +3 -129
  126. package/dist/esm/identity/encoding.d.ts +9 -0
  127. package/dist/esm/identity/encoding.js +75 -0
  128. package/dist/esm/identity/index.d.ts +4 -0
  129. package/dist/esm/identity/index.js +4 -0
  130. package/dist/esm/identity/noteKey.d.ts +33 -0
  131. package/dist/esm/identity/noteKey.js +91 -0
  132. package/dist/esm/identity/spending.d.ts +18 -0
  133. package/dist/esm/identity/spending.js +35 -0
  134. package/dist/esm/identity/viewKey.d.ts +38 -0
  135. package/dist/esm/identity/viewKey.js +96 -0
  136. package/dist/esm/idl/index.d.ts +18 -0
  137. package/dist/esm/idl/index.js +18 -0
  138. package/dist/esm/idl/privacy_pool.json +9907 -9907
  139. package/dist/esm/idl/privacy_pool_legacy.d.ts +5 -0
  140. package/dist/esm/idl/privacy_pool_legacy.js +3305 -0
  141. package/dist/esm/idl/privacy_pool_legacy.json +2302 -0
  142. package/dist/esm/idl/privacy_pool_legacy2.d.ts +5 -0
  143. package/dist/esm/idl/privacy_pool_legacy2.js +3395 -0
  144. package/dist/esm/idl/privacy_pool_legacy2.json +2376 -0
  145. package/dist/esm/index.d.ts +8 -3
  146. package/dist/esm/index.js +8 -3
  147. package/dist/esm/notes/amount.d.ts +2 -0
  148. package/dist/esm/notes/amount.js +18 -0
  149. package/dist/esm/notes/index.d.ts +3 -0
  150. package/dist/esm/notes/index.js +3 -0
  151. package/dist/esm/notes/recovery.d.ts +16 -6
  152. package/dist/esm/notes/recovery.js +33 -16
  153. package/dist/esm/notes/selection.d.ts +77 -0
  154. package/dist/esm/notes/selection.js +188 -0
  155. package/dist/esm/notes/spent.d.ts +60 -0
  156. package/dist/esm/notes/spent.js +96 -0
  157. package/dist/esm/perps/constants.d.ts +16 -0
  158. package/dist/esm/perps/constants.js +48 -0
  159. package/dist/esm/perps/index.d.ts +5 -0
  160. package/dist/esm/perps/index.js +5 -0
  161. package/dist/esm/perps/keys.d.ts +16 -0
  162. package/dist/esm/perps/keys.js +35 -0
  163. package/dist/esm/perps/pdas.d.ts +29 -0
  164. package/dist/esm/perps/pdas.js +47 -0
  165. package/dist/esm/perps/relayer.d.ts +9 -0
  166. package/dist/esm/perps/relayer.js +25 -0
  167. package/dist/esm/perps/types.d.ts +126 -0
  168. package/dist/esm/perps/types.js +1 -0
  169. package/dist/esm/positions/index.d.ts +4 -0
  170. package/dist/esm/positions/index.js +4 -0
  171. package/dist/esm/positions/keys.d.ts +29 -0
  172. package/dist/esm/positions/keys.js +65 -0
  173. package/dist/esm/positions/pdas.d.ts +15 -0
  174. package/dist/esm/positions/pdas.js +44 -0
  175. package/dist/esm/positions/relayer.d.ts +4 -0
  176. package/dist/esm/positions/relayer.js +10 -0
  177. package/dist/esm/positions/types.d.ts +97 -0
  178. package/dist/esm/positions/types.js +1 -0
  179. package/dist/esm/predictions/client.d.ts +41 -0
  180. package/dist/esm/predictions/client.js +141 -0
  181. package/dist/esm/predictions/index.d.ts +5 -0
  182. package/dist/esm/predictions/index.js +5 -0
  183. package/dist/esm/predictions/keys.d.ts +14 -0
  184. package/dist/esm/predictions/keys.js +33 -0
  185. package/dist/esm/predictions/pdas.d.ts +6 -0
  186. package/dist/esm/predictions/pdas.js +10 -0
  187. package/dist/esm/predictions/relayer.d.ts +3 -0
  188. package/dist/esm/predictions/relayer.js +7 -0
  189. package/dist/esm/predictions/types.d.ts +178 -0
  190. package/dist/esm/predictions/types.js +1 -0
  191. package/dist/esm/program.d.ts +2 -0
  192. package/dist/esm/program.js +4 -3
  193. package/dist/esm/prover.d.ts +27 -4
  194. package/dist/esm/prover.js +106 -15
  195. package/dist/esm/relayer/api.d.ts +31 -0
  196. package/dist/esm/relayer/api.js +55 -0
  197. package/dist/esm/relayer/client.d.ts +29 -17
  198. package/dist/esm/relayer/client.js +72 -17
  199. package/dist/esm/relayer/errors.d.ts +1 -1
  200. package/dist/esm/relayer/errors.js +1 -1
  201. package/dist/esm/relayer/index.d.ts +4 -1
  202. package/dist/esm/relayer/index.js +1 -1
  203. package/dist/esm/relayer/internal-config.d.ts +36 -0
  204. package/dist/esm/relayer/internal-config.js +6 -0
  205. package/dist/esm/relayer/internal.d.ts +6 -0
  206. package/dist/esm/relayer/internal.js +10 -0
  207. package/dist/esm/relayer/transport.d.ts +4 -2
  208. package/dist/esm/relayer/transport.js +10 -5
  209. package/dist/esm/relayer/types.d.ts +9 -10
  210. package/dist/esm/relayer/types.js +1 -1
  211. package/dist/esm/shield/owner.js +1 -4
  212. package/identity.d.ts +2 -0
  213. package/identity.js +3 -0
  214. package/idl.d.ts +2 -0
  215. package/idl.js +3 -0
  216. package/notes.d.ts +2 -0
  217. package/notes.js +3 -0
  218. package/package.json +85 -3
  219. package/perps.d.ts +2 -0
  220. package/perps.js +3 -0
  221. package/poseidon.d.ts +2 -0
  222. package/poseidon.js +3 -0
  223. package/positions.d.ts +2 -0
  224. package/positions.js +3 -0
  225. package/predictions.d.ts +2 -0
  226. package/predictions.js +3 -0
  227. package/proof.d.ts +2 -0
  228. package/proof.js +3 -0
  229. package/prover.d.ts +2 -0
  230. package/prover.js +3 -0
  231. package/relayer.d.ts +2 -0
  232. package/relayer.js +3 -0
  233. package/shield.d.ts +2 -0
  234. package/shield.js +3 -0
  235. package/transactions.d.ts +2 -0
  236. package/transactions.js +3 -0
@@ -0,0 +1,3305 @@
1
+ // AUTO-GENERATED from privacy_pool_legacy.json — do not edit by hand.
2
+ // Regenerate with: npm run gen:idl
3
+ //
4
+ // Shipped as a .ts module rather than a JSON import because Node ESM requires
5
+ // an import attribute (`with { type: "json" }`) that TypeScript cannot emit
6
+ // compatibly for both the CJS and ESM builds.
7
+ const IDL_JSON = {
8
+ "address": "GYy4kM6GHhpgLCUscuABbzkD2ZbJ2fneYryaZ6Ch7fFU",
9
+ "metadata": {
10
+ "name": "privacy_pool",
11
+ "version": "0.1.0",
12
+ "spec": "0.1.0",
13
+ "description": "Veilo - Privacy Layer on Solana"
14
+ },
15
+ "instructions": [
16
+ {
17
+ "name": "add_merkle_tree",
18
+ "discriminator": [
19
+ 199,
20
+ 97,
21
+ 38,
22
+ 35,
23
+ 140,
24
+ 113,
25
+ 187,
26
+ 30
27
+ ],
28
+ "accounts": [
29
+ {
30
+ "name": "config",
31
+ "writable": true,
32
+ "pda": {
33
+ "seeds": [
34
+ {
35
+ "kind": "const",
36
+ "value": [
37
+ 112,
38
+ 114,
39
+ 105,
40
+ 118,
41
+ 97,
42
+ 99,
43
+ 121,
44
+ 95,
45
+ 99,
46
+ 111,
47
+ 110,
48
+ 102,
49
+ 105,
50
+ 103,
51
+ 95,
52
+ 118,
53
+ 51
54
+ ]
55
+ },
56
+ {
57
+ "kind": "arg",
58
+ "path": "mint_address"
59
+ }
60
+ ]
61
+ }
62
+ },
63
+ {
64
+ "name": "note_tree",
65
+ "writable": true,
66
+ "pda": {
67
+ "seeds": [
68
+ {
69
+ "kind": "const",
70
+ "value": [
71
+ 112,
72
+ 114,
73
+ 105,
74
+ 118,
75
+ 97,
76
+ 99,
77
+ 121,
78
+ 95,
79
+ 110,
80
+ 111,
81
+ 116,
82
+ 101,
83
+ 95,
84
+ 116,
85
+ 114,
86
+ 101,
87
+ 101,
88
+ 95,
89
+ 118,
90
+ 51
91
+ ]
92
+ },
93
+ {
94
+ "kind": "arg",
95
+ "path": "mint_address"
96
+ },
97
+ {
98
+ "kind": "arg",
99
+ "path": "tree_id"
100
+ }
101
+ ]
102
+ }
103
+ },
104
+ {
105
+ "name": "relayer",
106
+ "docs": [
107
+ "Relayer who can add trees (must be registered in config.relayers)"
108
+ ],
109
+ "writable": true,
110
+ "signer": true
111
+ },
112
+ {
113
+ "name": "system_program",
114
+ "address": "11111111111111111111111111111111"
115
+ }
116
+ ],
117
+ "args": [
118
+ {
119
+ "name": "_mint_address",
120
+ "type": "pubkey"
121
+ },
122
+ {
123
+ "name": "tree_id",
124
+ "type": "u16"
125
+ }
126
+ ]
127
+ },
128
+ {
129
+ "name": "add_relayer",
130
+ "discriminator": [
131
+ 184,
132
+ 240,
133
+ 94,
134
+ 199,
135
+ 19,
136
+ 71,
137
+ 21,
138
+ 192
139
+ ],
140
+ "accounts": [
141
+ {
142
+ "name": "config",
143
+ "writable": true,
144
+ "pda": {
145
+ "seeds": [
146
+ {
147
+ "kind": "const",
148
+ "value": [
149
+ 112,
150
+ 114,
151
+ 105,
152
+ 118,
153
+ 97,
154
+ 99,
155
+ 121,
156
+ 95,
157
+ 99,
158
+ 111,
159
+ 110,
160
+ 102,
161
+ 105,
162
+ 103,
163
+ 95,
164
+ 118,
165
+ 51
166
+ ]
167
+ },
168
+ {
169
+ "kind": "arg",
170
+ "path": "mint_address"
171
+ }
172
+ ]
173
+ }
174
+ },
175
+ {
176
+ "name": "admin",
177
+ "docs": [
178
+ "has_one = admin ensures this matches config.admin.",
179
+ "When using Squads, the vault PDA signs after multisig approval."
180
+ ],
181
+ "signer": true,
182
+ "relations": [
183
+ "config"
184
+ ]
185
+ }
186
+ ],
187
+ "args": [
188
+ {
189
+ "name": "_mint_address",
190
+ "type": "pubkey"
191
+ },
192
+ {
193
+ "name": "new_relayer",
194
+ "type": "pubkey"
195
+ }
196
+ ]
197
+ },
198
+ {
199
+ "name": "fund_native_source",
200
+ "docs": [
201
+ "Option B: Create executor PDA + WSOL ATA and transfer swap_amount from vault.",
202
+ "Must be invoked as the FIRST instruction in an atomic transaction whose SECOND",
203
+ "instruction is `transact_swap`. Both instructions are sent together so that",
204
+ "failure in `transact_swap` reverts the vault debit atomically.",
205
+ "",
206
+ "Only for native SOL source pools. SPL-source swaps use `transact_swap` directly."
207
+ ],
208
+ "discriminator": [
209
+ 247,
210
+ 142,
211
+ 43,
212
+ 167,
213
+ 56,
214
+ 52,
215
+ 137,
216
+ 118
217
+ ],
218
+ "accounts": [
219
+ {
220
+ "name": "executor",
221
+ "docs": [
222
+ "Executor PDA — created here, validated in the following transact_swap instruction."
223
+ ],
224
+ "writable": true,
225
+ "pda": {
226
+ "seeds": [
227
+ {
228
+ "kind": "const",
229
+ "value": [
230
+ 115,
231
+ 119,
232
+ 97,
233
+ 112,
234
+ 95,
235
+ 101,
236
+ 120,
237
+ 101,
238
+ 99,
239
+ 117,
240
+ 116,
241
+ 111,
242
+ 114
243
+ ]
244
+ },
245
+ {
246
+ "kind": "arg",
247
+ "path": "source_mint"
248
+ },
249
+ {
250
+ "kind": "arg",
251
+ "path": "dest_mint"
252
+ },
253
+ {
254
+ "kind": "arg",
255
+ "path": "input_nullifier_0"
256
+ },
257
+ {
258
+ "kind": "account",
259
+ "path": "relayer"
260
+ }
261
+ ]
262
+ }
263
+ },
264
+ {
265
+ "name": "executor_source_token",
266
+ "docs": [
267
+ "Executor's WSOL ATA — created here, funded with swap_amount from source vault.",
268
+ "This is executor_source_token for the following transact_swap instruction."
269
+ ],
270
+ "writable": true,
271
+ "pda": {
272
+ "seeds": [
273
+ {
274
+ "kind": "account",
275
+ "path": "executor"
276
+ },
277
+ {
278
+ "kind": "const",
279
+ "value": [
280
+ 6,
281
+ 221,
282
+ 246,
283
+ 225,
284
+ 215,
285
+ 101,
286
+ 161,
287
+ 147,
288
+ 217,
289
+ 203,
290
+ 225,
291
+ 70,
292
+ 206,
293
+ 235,
294
+ 121,
295
+ 172,
296
+ 28,
297
+ 180,
298
+ 133,
299
+ 237,
300
+ 95,
301
+ 91,
302
+ 55,
303
+ 145,
304
+ 58,
305
+ 140,
306
+ 245,
307
+ 133,
308
+ 126,
309
+ 255,
310
+ 0,
311
+ 169
312
+ ]
313
+ },
314
+ {
315
+ "kind": "account",
316
+ "path": "source_mint_account"
317
+ }
318
+ ],
319
+ "program": {
320
+ "kind": "const",
321
+ "value": [
322
+ 140,
323
+ 151,
324
+ 37,
325
+ 143,
326
+ 78,
327
+ 36,
328
+ 137,
329
+ 241,
330
+ 187,
331
+ 61,
332
+ 16,
333
+ 41,
334
+ 20,
335
+ 142,
336
+ 13,
337
+ 131,
338
+ 11,
339
+ 90,
340
+ 19,
341
+ 153,
342
+ 218,
343
+ 255,
344
+ 16,
345
+ 132,
346
+ 4,
347
+ 142,
348
+ 123,
349
+ 216,
350
+ 219,
351
+ 233,
352
+ 248,
353
+ 89
354
+ ]
355
+ }
356
+ }
357
+ },
358
+ {
359
+ "name": "source_vault",
360
+ "docs": [
361
+ "Source vault PDA (native SOL pool — program-owned, stores raw lamports)."
362
+ ],
363
+ "writable": true,
364
+ "pda": {
365
+ "seeds": [
366
+ {
367
+ "kind": "const",
368
+ "value": [
369
+ 112,
370
+ 114,
371
+ 105,
372
+ 118,
373
+ 97,
374
+ 99,
375
+ 121,
376
+ 95,
377
+ 118,
378
+ 97,
379
+ 117,
380
+ 108,
381
+ 116,
382
+ 95,
383
+ 118,
384
+ 51
385
+ ]
386
+ },
387
+ {
388
+ "kind": "arg",
389
+ "path": "source_mint"
390
+ }
391
+ ]
392
+ }
393
+ },
394
+ {
395
+ "name": "source_config",
396
+ "docs": [
397
+ "Source pool config — checked for vault_bump and relayer authorisation."
398
+ ],
399
+ "pda": {
400
+ "seeds": [
401
+ {
402
+ "kind": "const",
403
+ "value": [
404
+ 112,
405
+ 114,
406
+ 105,
407
+ 118,
408
+ 97,
409
+ 99,
410
+ 121,
411
+ 95,
412
+ 99,
413
+ 111,
414
+ 110,
415
+ 102,
416
+ 105,
417
+ 103,
418
+ 95,
419
+ 118,
420
+ 51
421
+ ]
422
+ },
423
+ {
424
+ "kind": "arg",
425
+ "path": "source_mint"
426
+ }
427
+ ]
428
+ }
429
+ },
430
+ {
431
+ "name": "source_mint_account",
432
+ "docs": [
433
+ "WSOL mint (So111…1112) — required for executor_source_token ATA constraint.",
434
+ "Must equal effective_mint(source_mint), i.e., source_mint must be native SOL."
435
+ ]
436
+ },
437
+ {
438
+ "name": "relayer",
439
+ "docs": [
440
+ "Relayer — pays rent for created accounts, must be whitelisted in source pool."
441
+ ],
442
+ "writable": true,
443
+ "signer": true
444
+ },
445
+ {
446
+ "name": "instructions_sysvar",
447
+ "docs": [
448
+ "with a `transact_swap` call in the same transaction, preventing standalone",
449
+ "vault-drain calls with arbitrary nullifiers."
450
+ ],
451
+ "address": "Sysvar1nstructions1111111111111111111111111"
452
+ },
453
+ {
454
+ "name": "token_program",
455
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
456
+ },
457
+ {
458
+ "name": "system_program",
459
+ "address": "11111111111111111111111111111111"
460
+ },
461
+ {
462
+ "name": "associated_token_program",
463
+ "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
464
+ }
465
+ ],
466
+ "args": [
467
+ {
468
+ "name": "source_mint",
469
+ "type": "pubkey"
470
+ },
471
+ {
472
+ "name": "dest_mint",
473
+ "type": "pubkey"
474
+ },
475
+ {
476
+ "name": "input_nullifier_0",
477
+ "type": {
478
+ "array": [
479
+ "u8",
480
+ 32
481
+ ]
482
+ }
483
+ },
484
+ {
485
+ "name": "swap_amount",
486
+ "type": "u64"
487
+ }
488
+ ]
489
+ },
490
+ {
491
+ "name": "initialize",
492
+ "discriminator": [
493
+ 175,
494
+ 175,
495
+ 109,
496
+ 31,
497
+ 13,
498
+ 152,
499
+ 155,
500
+ 237
501
+ ],
502
+ "accounts": [
503
+ {
504
+ "name": "config",
505
+ "writable": true,
506
+ "pda": {
507
+ "seeds": [
508
+ {
509
+ "kind": "const",
510
+ "value": [
511
+ 112,
512
+ 114,
513
+ 105,
514
+ 118,
515
+ 97,
516
+ 99,
517
+ 121,
518
+ 95,
519
+ 99,
520
+ 111,
521
+ 110,
522
+ 102,
523
+ 105,
524
+ 103,
525
+ 95,
526
+ 118,
527
+ 51
528
+ ]
529
+ },
530
+ {
531
+ "kind": "arg",
532
+ "path": "mint_address"
533
+ }
534
+ ]
535
+ }
536
+ },
537
+ {
538
+ "name": "vault",
539
+ "writable": true,
540
+ "pda": {
541
+ "seeds": [
542
+ {
543
+ "kind": "const",
544
+ "value": [
545
+ 112,
546
+ 114,
547
+ 105,
548
+ 118,
549
+ 97,
550
+ 99,
551
+ 121,
552
+ 95,
553
+ 118,
554
+ 97,
555
+ 117,
556
+ 108,
557
+ 116,
558
+ 95,
559
+ 118,
560
+ 51
561
+ ]
562
+ },
563
+ {
564
+ "kind": "arg",
565
+ "path": "mint_address"
566
+ }
567
+ ]
568
+ }
569
+ },
570
+ {
571
+ "name": "note_tree",
572
+ "docs": [
573
+ "Initial tree (tree_id = 0)"
574
+ ],
575
+ "writable": true,
576
+ "pda": {
577
+ "seeds": [
578
+ {
579
+ "kind": "const",
580
+ "value": [
581
+ 112,
582
+ 114,
583
+ 105,
584
+ 118,
585
+ 97,
586
+ 99,
587
+ 121,
588
+ 95,
589
+ 110,
590
+ 111,
591
+ 116,
592
+ 101,
593
+ 95,
594
+ 116,
595
+ 114,
596
+ 101,
597
+ 101,
598
+ 95,
599
+ 118,
600
+ 51
601
+ ]
602
+ },
603
+ {
604
+ "kind": "arg",
605
+ "path": "mint_address"
606
+ },
607
+ {
608
+ "kind": "const",
609
+ "value": [
610
+ 0,
611
+ 0
612
+ ]
613
+ }
614
+ ]
615
+ }
616
+ },
617
+ {
618
+ "name": "nullifiers",
619
+ "writable": true,
620
+ "pda": {
621
+ "seeds": [
622
+ {
623
+ "kind": "const",
624
+ "value": [
625
+ 112,
626
+ 114,
627
+ 105,
628
+ 118,
629
+ 97,
630
+ 99,
631
+ 121,
632
+ 95,
633
+ 110,
634
+ 117,
635
+ 108,
636
+ 108,
637
+ 105,
638
+ 102,
639
+ 105,
640
+ 101,
641
+ 114,
642
+ 115,
643
+ 95,
644
+ 118,
645
+ 51
646
+ ]
647
+ },
648
+ {
649
+ "kind": "arg",
650
+ "path": "mint_address"
651
+ }
652
+ ]
653
+ }
654
+ },
655
+ {
656
+ "name": "admin",
657
+ "docs": [
658
+ "When using Squads multisig, this should be the vault PDA.",
659
+ "Squads will sign this account after multisig approval."
660
+ ],
661
+ "signer": true
662
+ },
663
+ {
664
+ "name": "payer",
665
+ "docs": [
666
+ "Transaction fee payer (can be anyone, separate from admin authority)"
667
+ ],
668
+ "writable": true,
669
+ "signer": true
670
+ },
671
+ {
672
+ "name": "system_program",
673
+ "address": "11111111111111111111111111111111"
674
+ }
675
+ ],
676
+ "args": [
677
+ {
678
+ "name": "fee_bps",
679
+ "type": "u16"
680
+ },
681
+ {
682
+ "name": "mint_address",
683
+ "type": "pubkey"
684
+ },
685
+ {
686
+ "name": "min_deposit_amount",
687
+ "type": {
688
+ "option": "u64"
689
+ }
690
+ },
691
+ {
692
+ "name": "max_deposit_amount",
693
+ "type": {
694
+ "option": "u64"
695
+ }
696
+ },
697
+ {
698
+ "name": "min_withdraw_amount",
699
+ "type": {
700
+ "option": "u64"
701
+ }
702
+ },
703
+ {
704
+ "name": "max_withdraw_amount",
705
+ "type": {
706
+ "option": "u64"
707
+ }
708
+ }
709
+ ]
710
+ },
711
+ {
712
+ "name": "initialize_global_config",
713
+ "discriminator": [
714
+ 113,
715
+ 216,
716
+ 122,
717
+ 131,
718
+ 225,
719
+ 209,
720
+ 22,
721
+ 55
722
+ ],
723
+ "accounts": [
724
+ {
725
+ "name": "global_config",
726
+ "writable": true,
727
+ "pda": {
728
+ "seeds": [
729
+ {
730
+ "kind": "const",
731
+ "value": [
732
+ 103,
733
+ 108,
734
+ 111,
735
+ 98,
736
+ 97,
737
+ 108,
738
+ 95,
739
+ 99,
740
+ 111,
741
+ 110,
742
+ 102,
743
+ 105,
744
+ 103,
745
+ 95,
746
+ 118,
747
+ 49
748
+ ]
749
+ }
750
+ ]
751
+ }
752
+ },
753
+ {
754
+ "name": "admin",
755
+ "docs": [
756
+ "When using Squads multisig, this should be the vault PDA."
757
+ ],
758
+ "signer": true
759
+ },
760
+ {
761
+ "name": "payer",
762
+ "docs": [
763
+ "Transaction fee payer (can be anyone, separate from admin authority)"
764
+ ],
765
+ "writable": true,
766
+ "signer": true
767
+ },
768
+ {
769
+ "name": "system_program",
770
+ "address": "11111111111111111111111111111111"
771
+ }
772
+ ],
773
+ "args": []
774
+ },
775
+ {
776
+ "name": "transact",
777
+ "docs": [
778
+ "Unified UTXO transaction instruction",
779
+ "Circuit equation: sumIns + publicAmount = sumOuts",
780
+ "Handles deposits (publicAmount > 0), withdrawals (publicAmount < 0), and transfers (publicAmount = 0)",
781
+ "",
782
+ "Cross-tree transactions:",
783
+ "- input_tree_id: Tree containing input notes (for root validation)",
784
+ "- output_tree_id: Tree for new output commitments",
785
+ "- Can be the same tree or different trees",
786
+ "- Allows withdrawals even when input tree is full (outputs go to new tree)"
787
+ ],
788
+ "discriminator": [
789
+ 217,
790
+ 149,
791
+ 130,
792
+ 143,
793
+ 221,
794
+ 52,
795
+ 252,
796
+ 119
797
+ ],
798
+ "accounts": [
799
+ {
800
+ "name": "config",
801
+ "writable": true,
802
+ "pda": {
803
+ "seeds": [
804
+ {
805
+ "kind": "const",
806
+ "value": [
807
+ 112,
808
+ 114,
809
+ 105,
810
+ 118,
811
+ 97,
812
+ 99,
813
+ 121,
814
+ 95,
815
+ 99,
816
+ 111,
817
+ 110,
818
+ 102,
819
+ 105,
820
+ 103,
821
+ 95,
822
+ 118,
823
+ 51
824
+ ]
825
+ },
826
+ {
827
+ "kind": "arg",
828
+ "path": "mint_address"
829
+ }
830
+ ]
831
+ }
832
+ },
833
+ {
834
+ "name": "global_config",
835
+ "pda": {
836
+ "seeds": [
837
+ {
838
+ "kind": "const",
839
+ "value": [
840
+ 103,
841
+ 108,
842
+ 111,
843
+ 98,
844
+ 97,
845
+ 108,
846
+ 95,
847
+ 99,
848
+ 111,
849
+ 110,
850
+ 102,
851
+ 105,
852
+ 103,
853
+ 95,
854
+ 118,
855
+ 49
856
+ ]
857
+ }
858
+ ]
859
+ }
860
+ },
861
+ {
862
+ "name": "vault",
863
+ "writable": true,
864
+ "pda": {
865
+ "seeds": [
866
+ {
867
+ "kind": "const",
868
+ "value": [
869
+ 112,
870
+ 114,
871
+ 105,
872
+ 118,
873
+ 97,
874
+ 99,
875
+ 121,
876
+ 95,
877
+ 118,
878
+ 97,
879
+ 117,
880
+ 108,
881
+ 116,
882
+ 95,
883
+ 118,
884
+ 51
885
+ ]
886
+ },
887
+ {
888
+ "kind": "arg",
889
+ "path": "mint_address"
890
+ }
891
+ ]
892
+ }
893
+ },
894
+ {
895
+ "name": "input_tree",
896
+ "docs": [
897
+ "Input tree - where input notes came from (for root validation)"
898
+ ],
899
+ "writable": true,
900
+ "pda": {
901
+ "seeds": [
902
+ {
903
+ "kind": "const",
904
+ "value": [
905
+ 112,
906
+ 114,
907
+ 105,
908
+ 118,
909
+ 97,
910
+ 99,
911
+ 121,
912
+ 95,
913
+ 110,
914
+ 111,
915
+ 116,
916
+ 101,
917
+ 95,
918
+ 116,
919
+ 114,
920
+ 101,
921
+ 101,
922
+ 95,
923
+ 118,
924
+ 51
925
+ ]
926
+ },
927
+ {
928
+ "kind": "arg",
929
+ "path": "mint_address"
930
+ },
931
+ {
932
+ "kind": "arg",
933
+ "path": "input_tree_id"
934
+ }
935
+ ]
936
+ }
937
+ },
938
+ {
939
+ "name": "output_tree",
940
+ "docs": [
941
+ "Output tree - where new output commitments will be inserted"
942
+ ],
943
+ "writable": true,
944
+ "pda": {
945
+ "seeds": [
946
+ {
947
+ "kind": "const",
948
+ "value": [
949
+ 112,
950
+ 114,
951
+ 105,
952
+ 118,
953
+ 97,
954
+ 99,
955
+ 121,
956
+ 95,
957
+ 110,
958
+ 111,
959
+ 116,
960
+ 101,
961
+ 95,
962
+ 116,
963
+ 114,
964
+ 101,
965
+ 101,
966
+ 95,
967
+ 118,
968
+ 51
969
+ ]
970
+ },
971
+ {
972
+ "kind": "arg",
973
+ "path": "mint_address"
974
+ },
975
+ {
976
+ "kind": "arg",
977
+ "path": "output_tree_id"
978
+ }
979
+ ]
980
+ }
981
+ },
982
+ {
983
+ "name": "nullifiers",
984
+ "writable": true,
985
+ "pda": {
986
+ "seeds": [
987
+ {
988
+ "kind": "const",
989
+ "value": [
990
+ 112,
991
+ 114,
992
+ 105,
993
+ 118,
994
+ 97,
995
+ 99,
996
+ 121,
997
+ 95,
998
+ 110,
999
+ 117,
1000
+ 108,
1001
+ 108,
1002
+ 105,
1003
+ 102,
1004
+ 105,
1005
+ 101,
1006
+ 114,
1007
+ 115,
1008
+ 95,
1009
+ 118,
1010
+ 51
1011
+ ]
1012
+ },
1013
+ {
1014
+ "kind": "arg",
1015
+ "path": "mint_address"
1016
+ }
1017
+ ]
1018
+ }
1019
+ },
1020
+ {
1021
+ "name": "nullifier_marker_0",
1022
+ "docs": [
1023
+ "First nullifier marker (must not exist for withdrawals - ensures nullifier is fresh)",
1024
+ "For deposits (public_amount > 0), this should be the zero nullifier marker (reusable)",
1025
+ "NOTE: Nullifier markers are global (no tree_id) to prevent cross-tree double-spend"
1026
+ ],
1027
+ "writable": true,
1028
+ "pda": {
1029
+ "seeds": [
1030
+ {
1031
+ "kind": "const",
1032
+ "value": [
1033
+ 110,
1034
+ 117,
1035
+ 108,
1036
+ 108,
1037
+ 105,
1038
+ 102,
1039
+ 105,
1040
+ 101,
1041
+ 114,
1042
+ 95,
1043
+ 118,
1044
+ 51
1045
+ ]
1046
+ },
1047
+ {
1048
+ "kind": "arg",
1049
+ "path": "mint_address"
1050
+ },
1051
+ {
1052
+ "kind": "arg",
1053
+ "path": "input_nullifier_0"
1054
+ }
1055
+ ]
1056
+ }
1057
+ },
1058
+ {
1059
+ "name": "nullifier_marker_1",
1060
+ "docs": [
1061
+ "Second nullifier marker (must not exist for withdrawals - ensures nullifier is fresh)",
1062
+ "For deposits (public_amount > 0), this should be the zero nullifier marker (reusable)",
1063
+ "NOTE: Nullifier markers are global (no tree_id) to prevent cross-tree double-spend"
1064
+ ],
1065
+ "writable": true,
1066
+ "pda": {
1067
+ "seeds": [
1068
+ {
1069
+ "kind": "const",
1070
+ "value": [
1071
+ 110,
1072
+ 117,
1073
+ 108,
1074
+ 108,
1075
+ 105,
1076
+ 102,
1077
+ 105,
1078
+ 101,
1079
+ 114,
1080
+ 95,
1081
+ 118,
1082
+ 51
1083
+ ]
1084
+ },
1085
+ {
1086
+ "kind": "arg",
1087
+ "path": "mint_address"
1088
+ },
1089
+ {
1090
+ "kind": "arg",
1091
+ "path": "input_nullifier_1"
1092
+ }
1093
+ ]
1094
+ }
1095
+ },
1096
+ {
1097
+ "name": "relayer",
1098
+ "docs": [
1099
+ "Relayer who submits transaction (pays rent, receives fee)"
1100
+ ],
1101
+ "writable": true,
1102
+ "signer": true
1103
+ },
1104
+ {
1105
+ "name": "recipient",
1106
+ "docs": [
1107
+ "Recipient (receives withdrawal amount if public_amount > 0)"
1108
+ ],
1109
+ "writable": true
1110
+ },
1111
+ {
1112
+ "name": "vault_token_account",
1113
+ "docs": [
1114
+ "Vault's token account (ATA for mint_address)"
1115
+ ],
1116
+ "writable": true
1117
+ },
1118
+ {
1119
+ "name": "user_token_account",
1120
+ "docs": [
1121
+ "User's token account (for deposits)"
1122
+ ],
1123
+ "writable": true
1124
+ },
1125
+ {
1126
+ "name": "recipient_token_account",
1127
+ "docs": [
1128
+ "Recipient's token account (for withdrawals)"
1129
+ ],
1130
+ "writable": true
1131
+ },
1132
+ {
1133
+ "name": "relayer_token_account",
1134
+ "docs": [
1135
+ "Relayer's token account (for fees)"
1136
+ ],
1137
+ "writable": true
1138
+ },
1139
+ {
1140
+ "name": "token_program",
1141
+ "docs": [
1142
+ "SPL Token program"
1143
+ ]
1144
+ },
1145
+ {
1146
+ "name": "system_program",
1147
+ "address": "11111111111111111111111111111111"
1148
+ }
1149
+ ],
1150
+ "args": [
1151
+ {
1152
+ "name": "root",
1153
+ "type": {
1154
+ "array": [
1155
+ "u8",
1156
+ 32
1157
+ ]
1158
+ }
1159
+ },
1160
+ {
1161
+ "name": "input_tree_id",
1162
+ "type": "u16"
1163
+ },
1164
+ {
1165
+ "name": "output_tree_id",
1166
+ "type": "u16"
1167
+ },
1168
+ {
1169
+ "name": "public_amount",
1170
+ "type": "i64"
1171
+ },
1172
+ {
1173
+ "name": "ext_data_hash",
1174
+ "type": {
1175
+ "array": [
1176
+ "u8",
1177
+ 32
1178
+ ]
1179
+ }
1180
+ },
1181
+ {
1182
+ "name": "mint_address",
1183
+ "type": "pubkey"
1184
+ },
1185
+ {
1186
+ "name": "input_nullifier_0",
1187
+ "type": {
1188
+ "array": [
1189
+ "u8",
1190
+ 32
1191
+ ]
1192
+ }
1193
+ },
1194
+ {
1195
+ "name": "input_nullifier_1",
1196
+ "type": {
1197
+ "array": [
1198
+ "u8",
1199
+ 32
1200
+ ]
1201
+ }
1202
+ },
1203
+ {
1204
+ "name": "output_commitment_0",
1205
+ "type": {
1206
+ "array": [
1207
+ "u8",
1208
+ 32
1209
+ ]
1210
+ }
1211
+ },
1212
+ {
1213
+ "name": "output_commitment_1",
1214
+ "type": {
1215
+ "array": [
1216
+ "u8",
1217
+ 32
1218
+ ]
1219
+ }
1220
+ },
1221
+ {
1222
+ "name": "deadline",
1223
+ "type": "i64"
1224
+ },
1225
+ {
1226
+ "name": "ext_data",
1227
+ "type": {
1228
+ "defined": {
1229
+ "name": "ExtData"
1230
+ }
1231
+ }
1232
+ },
1233
+ {
1234
+ "name": "proof",
1235
+ "type": {
1236
+ "defined": {
1237
+ "name": "TransactionProof"
1238
+ }
1239
+ }
1240
+ }
1241
+ ]
1242
+ },
1243
+ {
1244
+ "name": "transact_swap",
1245
+ "docs": [
1246
+ "Atomic cross-pool private swap",
1247
+ "Consumes notes from source pool, swaps via Raydium CPMM (no Serum), creates notes in dest pool",
1248
+ "All in one transaction - see swap.rs for implementation details"
1249
+ ],
1250
+ "discriminator": [
1251
+ 36,
1252
+ 133,
1253
+ 230,
1254
+ 184,
1255
+ 198,
1256
+ 10,
1257
+ 202,
1258
+ 249
1259
+ ],
1260
+ "accounts": [
1261
+ {
1262
+ "name": "source_config",
1263
+ "writable": true,
1264
+ "pda": {
1265
+ "seeds": [
1266
+ {
1267
+ "kind": "const",
1268
+ "value": [
1269
+ 112,
1270
+ 114,
1271
+ 105,
1272
+ 118,
1273
+ 97,
1274
+ 99,
1275
+ 121,
1276
+ 95,
1277
+ 99,
1278
+ 111,
1279
+ 110,
1280
+ 102,
1281
+ 105,
1282
+ 103,
1283
+ 95,
1284
+ 118,
1285
+ 51
1286
+ ]
1287
+ },
1288
+ {
1289
+ "kind": "arg",
1290
+ "path": "source_mint"
1291
+ }
1292
+ ]
1293
+ }
1294
+ },
1295
+ {
1296
+ "name": "global_config",
1297
+ "pda": {
1298
+ "seeds": [
1299
+ {
1300
+ "kind": "const",
1301
+ "value": [
1302
+ 103,
1303
+ 108,
1304
+ 111,
1305
+ 98,
1306
+ 97,
1307
+ 108,
1308
+ 95,
1309
+ 99,
1310
+ 111,
1311
+ 110,
1312
+ 102,
1313
+ 105,
1314
+ 103,
1315
+ 95,
1316
+ 118,
1317
+ 49
1318
+ ]
1319
+ }
1320
+ ]
1321
+ }
1322
+ },
1323
+ {
1324
+ "name": "source_vault",
1325
+ "writable": true,
1326
+ "pda": {
1327
+ "seeds": [
1328
+ {
1329
+ "kind": "const",
1330
+ "value": [
1331
+ 112,
1332
+ 114,
1333
+ 105,
1334
+ 118,
1335
+ 97,
1336
+ 99,
1337
+ 121,
1338
+ 95,
1339
+ 118,
1340
+ 97,
1341
+ 117,
1342
+ 108,
1343
+ 116,
1344
+ 95,
1345
+ 118,
1346
+ 51
1347
+ ]
1348
+ },
1349
+ {
1350
+ "kind": "arg",
1351
+ "path": "source_mint"
1352
+ }
1353
+ ]
1354
+ }
1355
+ },
1356
+ {
1357
+ "name": "source_tree",
1358
+ "docs": [
1359
+ "Source tree - where input notes came from"
1360
+ ],
1361
+ "writable": true,
1362
+ "pda": {
1363
+ "seeds": [
1364
+ {
1365
+ "kind": "const",
1366
+ "value": [
1367
+ 112,
1368
+ 114,
1369
+ 105,
1370
+ 118,
1371
+ 97,
1372
+ 99,
1373
+ 121,
1374
+ 95,
1375
+ 110,
1376
+ 111,
1377
+ 116,
1378
+ 101,
1379
+ 95,
1380
+ 116,
1381
+ 114,
1382
+ 101,
1383
+ 101,
1384
+ 95,
1385
+ 118,
1386
+ 51
1387
+ ]
1388
+ },
1389
+ {
1390
+ "kind": "arg",
1391
+ "path": "source_mint"
1392
+ },
1393
+ {
1394
+ "kind": "arg",
1395
+ "path": "source_tree_id"
1396
+ }
1397
+ ]
1398
+ }
1399
+ },
1400
+ {
1401
+ "name": "source_nullifiers",
1402
+ "writable": true,
1403
+ "pda": {
1404
+ "seeds": [
1405
+ {
1406
+ "kind": "const",
1407
+ "value": [
1408
+ 112,
1409
+ 114,
1410
+ 105,
1411
+ 118,
1412
+ 97,
1413
+ 99,
1414
+ 121,
1415
+ 95,
1416
+ 110,
1417
+ 117,
1418
+ 108,
1419
+ 108,
1420
+ 105,
1421
+ 102,
1422
+ 105,
1423
+ 101,
1424
+ 114,
1425
+ 115,
1426
+ 95,
1427
+ 118,
1428
+ 51
1429
+ ]
1430
+ },
1431
+ {
1432
+ "kind": "arg",
1433
+ "path": "source_mint"
1434
+ }
1435
+ ]
1436
+ }
1437
+ },
1438
+ {
1439
+ "name": "source_nullifier_marker_0",
1440
+ "docs": [
1441
+ "First nullifier marker for source pool",
1442
+ "NOTE: Nullifier markers are global (no tree_id) to prevent cross-tree double-spend"
1443
+ ],
1444
+ "writable": true,
1445
+ "pda": {
1446
+ "seeds": [
1447
+ {
1448
+ "kind": "const",
1449
+ "value": [
1450
+ 110,
1451
+ 117,
1452
+ 108,
1453
+ 108,
1454
+ 105,
1455
+ 102,
1456
+ 105,
1457
+ 101,
1458
+ 114,
1459
+ 95,
1460
+ 118,
1461
+ 51
1462
+ ]
1463
+ },
1464
+ {
1465
+ "kind": "arg",
1466
+ "path": "source_mint"
1467
+ },
1468
+ {
1469
+ "kind": "arg",
1470
+ "path": "input_nullifier_0"
1471
+ }
1472
+ ]
1473
+ }
1474
+ },
1475
+ {
1476
+ "name": "source_nullifier_marker_1",
1477
+ "docs": [
1478
+ "Second nullifier marker for source pool",
1479
+ "NOTE: Nullifier markers are global (no tree_id) to prevent cross-tree double-spend"
1480
+ ],
1481
+ "writable": true,
1482
+ "pda": {
1483
+ "seeds": [
1484
+ {
1485
+ "kind": "const",
1486
+ "value": [
1487
+ 110,
1488
+ 117,
1489
+ 108,
1490
+ 108,
1491
+ 105,
1492
+ 102,
1493
+ 105,
1494
+ 101,
1495
+ 114,
1496
+ 95,
1497
+ 118,
1498
+ 51
1499
+ ]
1500
+ },
1501
+ {
1502
+ "kind": "arg",
1503
+ "path": "source_mint"
1504
+ },
1505
+ {
1506
+ "kind": "arg",
1507
+ "path": "input_nullifier_1"
1508
+ }
1509
+ ]
1510
+ }
1511
+ },
1512
+ {
1513
+ "name": "source_vault_token_account",
1514
+ "docs": [
1515
+ "Source vault's token account",
1516
+ "For native SOL pools (mint_address == Pubkey::default), this may be unused — pass any mut account.",
1517
+ "For SPL pools, must be the canonical ATA of the source vault for the source mint."
1518
+ ],
1519
+ "writable": true
1520
+ },
1521
+ {
1522
+ "name": "source_mint_account",
1523
+ "docs": [
1524
+ "Source token mint — for native SOL pools, pass the WSOL (NATIVE_MINT) account.",
1525
+ "Must match effective_mint(source_mint) so executor ATAs are created with WSOL."
1526
+ ]
1527
+ },
1528
+ {
1529
+ "name": "dest_config",
1530
+ "writable": true,
1531
+ "pda": {
1532
+ "seeds": [
1533
+ {
1534
+ "kind": "const",
1535
+ "value": [
1536
+ 112,
1537
+ 114,
1538
+ 105,
1539
+ 118,
1540
+ 97,
1541
+ 99,
1542
+ 121,
1543
+ 95,
1544
+ 99,
1545
+ 111,
1546
+ 110,
1547
+ 102,
1548
+ 105,
1549
+ 103,
1550
+ 95,
1551
+ 118,
1552
+ 51
1553
+ ]
1554
+ },
1555
+ {
1556
+ "kind": "arg",
1557
+ "path": "dest_mint"
1558
+ }
1559
+ ]
1560
+ }
1561
+ },
1562
+ {
1563
+ "name": "dest_vault",
1564
+ "writable": true,
1565
+ "pda": {
1566
+ "seeds": [
1567
+ {
1568
+ "kind": "const",
1569
+ "value": [
1570
+ 112,
1571
+ 114,
1572
+ 105,
1573
+ 118,
1574
+ 97,
1575
+ 99,
1576
+ 121,
1577
+ 95,
1578
+ 118,
1579
+ 97,
1580
+ 117,
1581
+ 108,
1582
+ 116,
1583
+ 95,
1584
+ 118,
1585
+ 51
1586
+ ]
1587
+ },
1588
+ {
1589
+ "kind": "arg",
1590
+ "path": "dest_mint"
1591
+ }
1592
+ ]
1593
+ }
1594
+ },
1595
+ {
1596
+ "name": "dest_tree",
1597
+ "docs": [
1598
+ "Destination tree - where output commitments will be inserted"
1599
+ ],
1600
+ "writable": true,
1601
+ "pda": {
1602
+ "seeds": [
1603
+ {
1604
+ "kind": "const",
1605
+ "value": [
1606
+ 112,
1607
+ 114,
1608
+ 105,
1609
+ 118,
1610
+ 97,
1611
+ 99,
1612
+ 121,
1613
+ 95,
1614
+ 110,
1615
+ 111,
1616
+ 116,
1617
+ 101,
1618
+ 95,
1619
+ 116,
1620
+ 114,
1621
+ 101,
1622
+ 101,
1623
+ 95,
1624
+ 118,
1625
+ 51
1626
+ ]
1627
+ },
1628
+ {
1629
+ "kind": "arg",
1630
+ "path": "dest_mint"
1631
+ },
1632
+ {
1633
+ "kind": "arg",
1634
+ "path": "dest_tree_id"
1635
+ }
1636
+ ]
1637
+ }
1638
+ },
1639
+ {
1640
+ "name": "dest_vault_token_account",
1641
+ "docs": [
1642
+ "Destination vault's token account",
1643
+ "For native SOL pools (mint_address == Pubkey::default), may be unused — pass any mut account.",
1644
+ "For SPL pools, must be the canonical ATA of the dest vault for the dest mint."
1645
+ ],
1646
+ "writable": true
1647
+ },
1648
+ {
1649
+ "name": "dest_mint_account",
1650
+ "docs": [
1651
+ "Destination token mint — for native SOL pools, pass the WSOL (NATIVE_MINT) account.",
1652
+ "Must match effective_mint(dest_mint) so executor ATAs are created with WSOL."
1653
+ ]
1654
+ },
1655
+ {
1656
+ "name": "executor",
1657
+ "docs": [
1658
+ "Executor PDA - holds tokens during swap",
1659
+ "Seeds include source_mint, dest_mint, nullifier, AND relayer key to prevent front-running DoS",
1660
+ "Uses init_if_needed: for native SOL swaps the executor is pre-created by fund_native_source."
1661
+ ],
1662
+ "writable": true,
1663
+ "pda": {
1664
+ "seeds": [
1665
+ {
1666
+ "kind": "const",
1667
+ "value": [
1668
+ 115,
1669
+ 119,
1670
+ 97,
1671
+ 112,
1672
+ 95,
1673
+ 101,
1674
+ 120,
1675
+ 101,
1676
+ 99,
1677
+ 117,
1678
+ 116,
1679
+ 111,
1680
+ 114
1681
+ ]
1682
+ },
1683
+ {
1684
+ "kind": "arg",
1685
+ "path": "source_mint"
1686
+ },
1687
+ {
1688
+ "kind": "arg",
1689
+ "path": "dest_mint"
1690
+ },
1691
+ {
1692
+ "kind": "arg",
1693
+ "path": "input_nullifier_0"
1694
+ },
1695
+ {
1696
+ "kind": "account",
1697
+ "path": "relayer"
1698
+ }
1699
+ ]
1700
+ }
1701
+ },
1702
+ {
1703
+ "name": "executor_source_token",
1704
+ "docs": [
1705
+ "Executor's source token account (receives from source vault)",
1706
+ "Uses init_if_needed: pre-created by fund_native_source for native SOL swaps."
1707
+ ],
1708
+ "writable": true,
1709
+ "pda": {
1710
+ "seeds": [
1711
+ {
1712
+ "kind": "account",
1713
+ "path": "executor"
1714
+ },
1715
+ {
1716
+ "kind": "const",
1717
+ "value": [
1718
+ 6,
1719
+ 221,
1720
+ 246,
1721
+ 225,
1722
+ 215,
1723
+ 101,
1724
+ 161,
1725
+ 147,
1726
+ 217,
1727
+ 203,
1728
+ 225,
1729
+ 70,
1730
+ 206,
1731
+ 235,
1732
+ 121,
1733
+ 172,
1734
+ 28,
1735
+ 180,
1736
+ 133,
1737
+ 237,
1738
+ 95,
1739
+ 91,
1740
+ 55,
1741
+ 145,
1742
+ 58,
1743
+ 140,
1744
+ 245,
1745
+ 133,
1746
+ 126,
1747
+ 255,
1748
+ 0,
1749
+ 169
1750
+ ]
1751
+ },
1752
+ {
1753
+ "kind": "account",
1754
+ "path": "source_mint_account"
1755
+ }
1756
+ ],
1757
+ "program": {
1758
+ "kind": "const",
1759
+ "value": [
1760
+ 140,
1761
+ 151,
1762
+ 37,
1763
+ 143,
1764
+ 78,
1765
+ 36,
1766
+ 137,
1767
+ 241,
1768
+ 187,
1769
+ 61,
1770
+ 16,
1771
+ 41,
1772
+ 20,
1773
+ 142,
1774
+ 13,
1775
+ 131,
1776
+ 11,
1777
+ 90,
1778
+ 19,
1779
+ 153,
1780
+ 218,
1781
+ 255,
1782
+ 16,
1783
+ 132,
1784
+ 4,
1785
+ 142,
1786
+ 123,
1787
+ 216,
1788
+ 219,
1789
+ 233,
1790
+ 248,
1791
+ 89
1792
+ ]
1793
+ }
1794
+ }
1795
+ },
1796
+ {
1797
+ "name": "executor_dest_token",
1798
+ "docs": [
1799
+ "Executor's destination token account (receives swapped tokens)"
1800
+ ],
1801
+ "writable": true,
1802
+ "pda": {
1803
+ "seeds": [
1804
+ {
1805
+ "kind": "account",
1806
+ "path": "executor"
1807
+ },
1808
+ {
1809
+ "kind": "const",
1810
+ "value": [
1811
+ 6,
1812
+ 221,
1813
+ 246,
1814
+ 225,
1815
+ 215,
1816
+ 101,
1817
+ 161,
1818
+ 147,
1819
+ 217,
1820
+ 203,
1821
+ 225,
1822
+ 70,
1823
+ 206,
1824
+ 235,
1825
+ 121,
1826
+ 172,
1827
+ 28,
1828
+ 180,
1829
+ 133,
1830
+ 237,
1831
+ 95,
1832
+ 91,
1833
+ 55,
1834
+ 145,
1835
+ 58,
1836
+ 140,
1837
+ 245,
1838
+ 133,
1839
+ 126,
1840
+ 255,
1841
+ 0,
1842
+ 169
1843
+ ]
1844
+ },
1845
+ {
1846
+ "kind": "account",
1847
+ "path": "dest_mint_account"
1848
+ }
1849
+ ],
1850
+ "program": {
1851
+ "kind": "const",
1852
+ "value": [
1853
+ 140,
1854
+ 151,
1855
+ 37,
1856
+ 143,
1857
+ 78,
1858
+ 36,
1859
+ 137,
1860
+ 241,
1861
+ 187,
1862
+ 61,
1863
+ 16,
1864
+ 41,
1865
+ 20,
1866
+ 142,
1867
+ 13,
1868
+ 131,
1869
+ 11,
1870
+ 90,
1871
+ 19,
1872
+ 153,
1873
+ 218,
1874
+ 255,
1875
+ 16,
1876
+ 132,
1877
+ 4,
1878
+ 142,
1879
+ 123,
1880
+ 216,
1881
+ 219,
1882
+ 233,
1883
+ 248,
1884
+ 89
1885
+ ]
1886
+ }
1887
+ }
1888
+ },
1889
+ {
1890
+ "name": "relayer",
1891
+ "docs": [
1892
+ "Relayer who submits transaction (pays rent, receives fee)"
1893
+ ],
1894
+ "writable": true,
1895
+ "signer": true
1896
+ },
1897
+ {
1898
+ "name": "relayer_token_account",
1899
+ "docs": [
1900
+ "Relayer's token account for fees (dest token)"
1901
+ ],
1902
+ "writable": true
1903
+ },
1904
+ {
1905
+ "name": "swap_program",
1906
+ "docs": [
1907
+ "Raydium Swap program (CPMM or AMM)"
1908
+ ]
1909
+ },
1910
+ {
1911
+ "name": "jupiter_event_authority",
1912
+ "docs": [
1913
+ "Jupiter Event Authority (required for Jupiter V6 swaps)"
1914
+ ]
1915
+ },
1916
+ {
1917
+ "name": "token_program",
1918
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
1919
+ },
1920
+ {
1921
+ "name": "system_program",
1922
+ "address": "11111111111111111111111111111111"
1923
+ },
1924
+ {
1925
+ "name": "associated_token_program",
1926
+ "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
1927
+ }
1928
+ ],
1929
+ "args": [
1930
+ {
1931
+ "name": "source_tree_id",
1932
+ "type": "u16"
1933
+ },
1934
+ {
1935
+ "name": "source_mint",
1936
+ "type": "pubkey"
1937
+ },
1938
+ {
1939
+ "name": "input_nullifier_0",
1940
+ "type": {
1941
+ "array": [
1942
+ "u8",
1943
+ 32
1944
+ ]
1945
+ }
1946
+ },
1947
+ {
1948
+ "name": "input_nullifier_1",
1949
+ "type": {
1950
+ "array": [
1951
+ "u8",
1952
+ 32
1953
+ ]
1954
+ }
1955
+ },
1956
+ {
1957
+ "name": "dest_tree_id",
1958
+ "type": "u16"
1959
+ },
1960
+ {
1961
+ "name": "dest_mint",
1962
+ "type": "pubkey"
1963
+ },
1964
+ {
1965
+ "name": "proof",
1966
+ "type": {
1967
+ "defined": {
1968
+ "name": "SwapProof"
1969
+ }
1970
+ }
1971
+ },
1972
+ {
1973
+ "name": "source_root",
1974
+ "type": {
1975
+ "array": [
1976
+ "u8",
1977
+ 32
1978
+ ]
1979
+ }
1980
+ },
1981
+ {
1982
+ "name": "output_commitment_0",
1983
+ "type": {
1984
+ "array": [
1985
+ "u8",
1986
+ 32
1987
+ ]
1988
+ }
1989
+ },
1990
+ {
1991
+ "name": "output_commitment_1",
1992
+ "type": {
1993
+ "array": [
1994
+ "u8",
1995
+ 32
1996
+ ]
1997
+ }
1998
+ },
1999
+ {
2000
+ "name": "swap_params",
2001
+ "type": {
2002
+ "defined": {
2003
+ "name": "SwapParams"
2004
+ }
2005
+ }
2006
+ },
2007
+ {
2008
+ "name": "swap_amount",
2009
+ "type": "u64"
2010
+ },
2011
+ {
2012
+ "name": "swap_data",
2013
+ "type": "bytes"
2014
+ },
2015
+ {
2016
+ "name": "ext_data",
2017
+ "type": {
2018
+ "defined": {
2019
+ "name": "ExtData"
2020
+ }
2021
+ }
2022
+ }
2023
+ ]
2024
+ },
2025
+ {
2026
+ "name": "update_global_config",
2027
+ "discriminator": [
2028
+ 164,
2029
+ 84,
2030
+ 130,
2031
+ 189,
2032
+ 111,
2033
+ 58,
2034
+ 250,
2035
+ 200
2036
+ ],
2037
+ "accounts": [
2038
+ {
2039
+ "name": "global_config",
2040
+ "writable": true,
2041
+ "pda": {
2042
+ "seeds": [
2043
+ {
2044
+ "kind": "const",
2045
+ "value": [
2046
+ 103,
2047
+ 108,
2048
+ 111,
2049
+ 98,
2050
+ 97,
2051
+ 108,
2052
+ 95,
2053
+ 99,
2054
+ 111,
2055
+ 110,
2056
+ 102,
2057
+ 105,
2058
+ 103,
2059
+ 95,
2060
+ 118,
2061
+ 49
2062
+ ]
2063
+ }
2064
+ ]
2065
+ }
2066
+ },
2067
+ {
2068
+ "name": "admin",
2069
+ "docs": [
2070
+ "has_one = admin ensures this matches global_config.admin."
2071
+ ],
2072
+ "signer": true,
2073
+ "relations": [
2074
+ "global_config"
2075
+ ]
2076
+ }
2077
+ ],
2078
+ "args": []
2079
+ },
2080
+ {
2081
+ "name": "update_pool_config",
2082
+ "discriminator": [
2083
+ 68,
2084
+ 236,
2085
+ 203,
2086
+ 122,
2087
+ 179,
2088
+ 62,
2089
+ 234,
2090
+ 252
2091
+ ],
2092
+ "accounts": [
2093
+ {
2094
+ "name": "config",
2095
+ "writable": true,
2096
+ "pda": {
2097
+ "seeds": [
2098
+ {
2099
+ "kind": "const",
2100
+ "value": [
2101
+ 112,
2102
+ 114,
2103
+ 105,
2104
+ 118,
2105
+ 97,
2106
+ 99,
2107
+ 121,
2108
+ 95,
2109
+ 99,
2110
+ 111,
2111
+ 110,
2112
+ 102,
2113
+ 105,
2114
+ 103,
2115
+ 95,
2116
+ 118,
2117
+ 51
2118
+ ]
2119
+ },
2120
+ {
2121
+ "kind": "arg",
2122
+ "path": "mint_address"
2123
+ }
2124
+ ]
2125
+ }
2126
+ },
2127
+ {
2128
+ "name": "admin",
2129
+ "signer": true,
2130
+ "relations": [
2131
+ "config"
2132
+ ]
2133
+ }
2134
+ ],
2135
+ "args": [
2136
+ {
2137
+ "name": "_mint_address",
2138
+ "type": "pubkey"
2139
+ },
2140
+ {
2141
+ "name": "min_deposit_amount",
2142
+ "type": {
2143
+ "option": "u64"
2144
+ }
2145
+ },
2146
+ {
2147
+ "name": "max_deposit_amount",
2148
+ "type": {
2149
+ "option": "u64"
2150
+ }
2151
+ },
2152
+ {
2153
+ "name": "min_withdraw_amount",
2154
+ "type": {
2155
+ "option": "u64"
2156
+ }
2157
+ },
2158
+ {
2159
+ "name": "max_withdraw_amount",
2160
+ "type": {
2161
+ "option": "u64"
2162
+ }
2163
+ },
2164
+ {
2165
+ "name": "fee_bps",
2166
+ "type": {
2167
+ "option": "u16"
2168
+ }
2169
+ },
2170
+ {
2171
+ "name": "min_withdrawal_fee",
2172
+ "type": {
2173
+ "option": "u64"
2174
+ }
2175
+ },
2176
+ {
2177
+ "name": "fee_error_margin_bps",
2178
+ "type": {
2179
+ "option": "u16"
2180
+ }
2181
+ },
2182
+ {
2183
+ "name": "min_swap_fee",
2184
+ "type": {
2185
+ "option": "u64"
2186
+ }
2187
+ },
2188
+ {
2189
+ "name": "swap_fee_bps",
2190
+ "type": {
2191
+ "option": "u16"
2192
+ }
2193
+ }
2194
+ ]
2195
+ }
2196
+ ],
2197
+ "accounts": [
2198
+ {
2199
+ "name": "GlobalConfig",
2200
+ "discriminator": [
2201
+ 149,
2202
+ 8,
2203
+ 156,
2204
+ 202,
2205
+ 160,
2206
+ 252,
2207
+ 176,
2208
+ 217
2209
+ ]
2210
+ },
2211
+ {
2212
+ "name": "MerkleTreeAccount",
2213
+ "discriminator": [
2214
+ 147,
2215
+ 200,
2216
+ 34,
2217
+ 248,
2218
+ 131,
2219
+ 187,
2220
+ 248,
2221
+ 253
2222
+ ]
2223
+ },
2224
+ {
2225
+ "name": "NullifierMarker",
2226
+ "discriminator": [
2227
+ 160,
2228
+ 124,
2229
+ 83,
2230
+ 42,
2231
+ 185,
2232
+ 14,
2233
+ 141,
2234
+ 101
2235
+ ]
2236
+ },
2237
+ {
2238
+ "name": "NullifierSet",
2239
+ "discriminator": [
2240
+ 251,
2241
+ 219,
2242
+ 17,
2243
+ 100,
2244
+ 208,
2245
+ 102,
2246
+ 127,
2247
+ 25
2248
+ ]
2249
+ },
2250
+ {
2251
+ "name": "PrivacyConfig",
2252
+ "discriminator": [
2253
+ 165,
2254
+ 149,
2255
+ 218,
2256
+ 209,
2257
+ 148,
2258
+ 237,
2259
+ 242,
2260
+ 159
2261
+ ]
2262
+ },
2263
+ {
2264
+ "name": "SwapExecutor",
2265
+ "discriminator": [
2266
+ 28,
2267
+ 237,
2268
+ 82,
2269
+ 118,
2270
+ 158,
2271
+ 162,
2272
+ 39,
2273
+ 225
2274
+ ]
2275
+ },
2276
+ {
2277
+ "name": "Vault",
2278
+ "discriminator": [
2279
+ 211,
2280
+ 8,
2281
+ 232,
2282
+ 43,
2283
+ 2,
2284
+ 152,
2285
+ 117,
2286
+ 119
2287
+ ]
2288
+ }
2289
+ ],
2290
+ "events": [
2291
+ {
2292
+ "name": "CommitmentEvent",
2293
+ "discriminator": [
2294
+ 89,
2295
+ 205,
2296
+ 140,
2297
+ 111,
2298
+ 36,
2299
+ 129,
2300
+ 217,
2301
+ 125
2302
+ ]
2303
+ },
2304
+ {
2305
+ "name": "NullifierSpent",
2306
+ "discriminator": [
2307
+ 166,
2308
+ 111,
2309
+ 130,
2310
+ 54,
2311
+ 212,
2312
+ 115,
2313
+ 152,
2314
+ 215
2315
+ ]
2316
+ },
2317
+ {
2318
+ "name": "SwapExecutedEvent",
2319
+ "discriminator": [
2320
+ 183,
2321
+ 28,
2322
+ 219,
2323
+ 210,
2324
+ 164,
2325
+ 184,
2326
+ 62,
2327
+ 12
2328
+ ]
2329
+ }
2330
+ ],
2331
+ "errors": [
2332
+ {
2333
+ "code": 6000,
2334
+ "name": "Paused",
2335
+ "msg": "Pool is paused"
2336
+ },
2337
+ {
2338
+ "code": 6001,
2339
+ "name": "NoDenoms",
2340
+ "msg": "No denominations configured"
2341
+ },
2342
+ {
2343
+ "code": 6002,
2344
+ "name": "TooManyDenoms",
2345
+ "msg": "Too many denominations"
2346
+ },
2347
+ {
2348
+ "code": 6003,
2349
+ "name": "BadDenomIndex",
2350
+ "msg": "Bad denomination index"
2351
+ },
2352
+ {
2353
+ "code": 6004,
2354
+ "name": "MathOverflow",
2355
+ "msg": "Math overflow"
2356
+ },
2357
+ {
2358
+ "code": 6005,
2359
+ "name": "NullifierAlreadyUsed",
2360
+ "msg": "Nullifier already used"
2361
+ },
2362
+ {
2363
+ "code": 6006,
2364
+ "name": "NullifierTableFull",
2365
+ "msg": "Nullifier table is full"
2366
+ },
2367
+ {
2368
+ "code": 6007,
2369
+ "name": "UnknownRoot",
2370
+ "msg": "Unknown root"
2371
+ },
2372
+ {
2373
+ "code": 6008,
2374
+ "name": "RelayerNotAllowed",
2375
+ "msg": "Relayer not allowed"
2376
+ },
2377
+ {
2378
+ "code": 6009,
2379
+ "name": "InsufficientVaultBalance",
2380
+ "msg": "Vault balance too low"
2381
+ },
2382
+ {
2383
+ "code": 6010,
2384
+ "name": "TooManyRelayers",
2385
+ "msg": "Too many relayers"
2386
+ },
2387
+ {
2388
+ "code": 6011,
2389
+ "name": "InvalidProof",
2390
+ "msg": "Invalid proof encoding"
2391
+ },
2392
+ {
2393
+ "code": 6012,
2394
+ "name": "VerifyFailed",
2395
+ "msg": "Groth16 verification failed"
2396
+ },
2397
+ {
2398
+ "code": 6013,
2399
+ "name": "MerkleTreeFull",
2400
+ "msg": "Merkle tree is full - use a different tree_id or add a new tree with add_merkle_tree"
2401
+ },
2402
+ {
2403
+ "code": 6014,
2404
+ "name": "MerkleHashFailed",
2405
+ "msg": "Merkle hash failed"
2406
+ },
2407
+ {
2408
+ "code": 6015,
2409
+ "name": "InvalidExtData",
2410
+ "msg": "Invalid external data hash"
2411
+ },
2412
+ {
2413
+ "code": 6016,
2414
+ "name": "RecipientMismatch",
2415
+ "msg": "Recipient mismatch"
2416
+ },
2417
+ {
2418
+ "code": 6017,
2419
+ "name": "InvalidMintAddress",
2420
+ "msg": "Invalid mint address"
2421
+ },
2422
+ {
2423
+ "code": 6018,
2424
+ "name": "ExcessiveFee",
2425
+ "msg": "Excessive fee"
2426
+ },
2427
+ {
2428
+ "code": 6019,
2429
+ "name": "InsufficientFee",
2430
+ "msg": "Fee below minimum required for withdrawal"
2431
+ },
2432
+ {
2433
+ "code": 6020,
2434
+ "name": "ArithmeticOverflow",
2435
+ "msg": "Arithmetic overflow/underflow occurred"
2436
+ },
2437
+ {
2438
+ "code": 6021,
2439
+ "name": "InsufficientFundsForWithdrawal",
2440
+ "msg": "Insufficient funds for withdrawal (including rent exemption)"
2441
+ },
2442
+ {
2443
+ "code": 6022,
2444
+ "name": "InsufficientFundsForFee",
2445
+ "msg": "Insufficient funds for fee payment"
2446
+ },
2447
+ {
2448
+ "code": 6023,
2449
+ "name": "InvalidPublicAmount",
2450
+ "msg": "Invalid public amount data"
2451
+ },
2452
+ {
2453
+ "code": 6024,
2454
+ "name": "InvalidFeeAmount",
2455
+ "msg": "Invalid fee amount"
2456
+ },
2457
+ {
2458
+ "code": 6025,
2459
+ "name": "DuplicateNullifiers",
2460
+ "msg": "Duplicate nullifiers detected"
2461
+ },
2462
+ {
2463
+ "code": 6026,
2464
+ "name": "DuplicateCommitments",
2465
+ "msg": "Duplicate output commitments detected"
2466
+ },
2467
+ {
2468
+ "code": 6027,
2469
+ "name": "MissingTokenAccount",
2470
+ "msg": "Token account required for SPL token operations"
2471
+ },
2472
+ {
2473
+ "code": 6028,
2474
+ "name": "MissingTokenProgram",
2475
+ "msg": "Token program required for SPL token operations"
2476
+ },
2477
+ {
2478
+ "code": 6029,
2479
+ "name": "InvalidTokenAuthority",
2480
+ "msg": "Invalid token account authority"
2481
+ },
2482
+ {
2483
+ "code": 6030,
2484
+ "name": "RelayerMismatch",
2485
+ "msg": "Relayer account does not match ext_data.relayer"
2486
+ },
2487
+ {
2488
+ "code": 6031,
2489
+ "name": "RelayerTokenAccountMismatch",
2490
+ "msg": "Relayer token account not owned by ext_data.relayer"
2491
+ },
2492
+ {
2493
+ "code": 6032,
2494
+ "name": "RecipientTokenAccountMismatch",
2495
+ "msg": "Recipient token account not owned by ext_data.recipient"
2496
+ },
2497
+ {
2498
+ "code": 6033,
2499
+ "name": "DepositorTokenAccountMismatch",
2500
+ "msg": "Depositor token account not owned/delegated to relayer"
2501
+ },
2502
+ {
2503
+ "code": 6034,
2504
+ "name": "InvalidPrivateTransferFee",
2505
+ "msg": "Private transfer (public_amount == 0) must have fee == 0 and refund == 0"
2506
+ },
2507
+ {
2508
+ "code": 6035,
2509
+ "name": "DepositBelowMinimum",
2510
+ "msg": "Deposit amount below pool minimum"
2511
+ },
2512
+ {
2513
+ "code": 6036,
2514
+ "name": "DepositLimitExceeded",
2515
+ "msg": "Deposit amount exceeds pool maximum"
2516
+ },
2517
+ {
2518
+ "code": 6037,
2519
+ "name": "WithdrawalBelowMinimum",
2520
+ "msg": "Withdrawal amount below pool minimum"
2521
+ },
2522
+ {
2523
+ "code": 6038,
2524
+ "name": "WithdrawalLimitExceeded",
2525
+ "msg": "Withdrawal amount exceeds pool maximum"
2526
+ },
2527
+ {
2528
+ "code": 6039,
2529
+ "name": "InvalidPoolConfigRange",
2530
+ "msg": "Invalid PoolConfig range (min > max)"
2531
+ },
2532
+ {
2533
+ "code": 6040,
2534
+ "name": "ExcessiveFeeBps",
2535
+ "msg": "Fee basis points exceeds maximum (100 = 1%)"
2536
+ },
2537
+ {
2538
+ "code": 6041,
2539
+ "name": "ExcessiveFeeMargin",
2540
+ "msg": "Fee error margin exceeds maximum (5000 = 50%)"
2541
+ },
2542
+ {
2543
+ "code": 6042,
2544
+ "name": "UnauthorizedAdmin",
2545
+ "msg": "Only authorized admin can initialize"
2546
+ },
2547
+ {
2548
+ "code": 6043,
2549
+ "name": "Unauthorized",
2550
+ "msg": "Unauthorized: only admin or relayers can perform this action"
2551
+ },
2552
+ {
2553
+ "code": 6044,
2554
+ "name": "InvalidTreeId",
2555
+ "msg": "Invalid tree_id (tree does not exist or exceeds num_trees)"
2556
+ },
2557
+ {
2558
+ "code": 6045,
2559
+ "name": "TooManyTrees",
2560
+ "msg": "Maximum number of Merkle trees reached for this pool"
2561
+ },
2562
+ {
2563
+ "code": 6046,
2564
+ "name": "InvalidNullifiersForDeposit",
2565
+ "msg": "Deposits must use zero nullifiers (no notes consumed)"
2566
+ },
2567
+ {
2568
+ "code": 6047,
2569
+ "name": "ZeroNullifier",
2570
+ "msg": "Nullifier cannot be zero for withdrawals/transfers"
2571
+ },
2572
+ {
2573
+ "code": 6048,
2574
+ "name": "ZeroCommitment",
2575
+ "msg": "Output commitment cannot be zero"
2576
+ },
2577
+ {
2578
+ "code": 6049,
2579
+ "name": "InvalidTokenAccountOwner",
2580
+ "msg": "Token account must be owned by SPL Token Program"
2581
+ },
2582
+ {
2583
+ "code": 6050,
2584
+ "name": "VaultTokenAccountNotATA",
2585
+ "msg": "Vault token account must be the canonical Associated Token Account"
2586
+ },
2587
+ {
2588
+ "code": 6051,
2589
+ "name": "WithdrawalTooSmallForMinFee",
2590
+ "msg": "Withdrawal amount too small: max fee based on fee_bps would be less than min_withdrawal_fee"
2591
+ },
2592
+ {
2593
+ "code": 6052,
2594
+ "name": "InvalidNullifierMarkerForDeposit",
2595
+ "msg": "Nullifier marker account does not correspond to zero nullifier for deposits"
2596
+ },
2597
+ {
2598
+ "code": 6053,
2599
+ "name": "InsufficientDelegation",
2600
+ "msg": "Token account delegation amount insufficient for deposit"
2601
+ },
2602
+ {
2603
+ "code": 6054,
2604
+ "name": "InvalidSwapProgram",
2605
+ "msg": "Invalid swap program: must be Raydium CPMM or AMM"
2606
+ },
2607
+ {
2608
+ "code": 6055,
2609
+ "name": "InvalidRemainingAccounts",
2610
+ "msg": "Invalid remaining accounts: wrong count or ownership"
2611
+ },
2612
+ {
2613
+ "code": 6056,
2614
+ "name": "JupiterInsufficientAccounts",
2615
+ "msg": "Jupiter swap requires additional routing accounts"
2616
+ },
2617
+ {
2618
+ "code": 6057,
2619
+ "name": "JupiterInvalidInstruction",
2620
+ "msg": "Jupiter instruction data invalid or unsupported version"
2621
+ },
2622
+ {
2623
+ "code": 6058,
2624
+ "name": "InvalidSwapParams",
2625
+ "msg": "Swap params mints do not match instruction mints"
2626
+ },
2627
+ {
2628
+ "code": 6059,
2629
+ "name": "MissingTransactSwapInstruction",
2630
+ "msg": "fund_native_source must be immediately followed by transact_swap in the same transaction"
2631
+ },
2632
+ {
2633
+ "code": 6060,
2634
+ "name": "DeadlineExpired",
2635
+ "msg": "Transaction deadline has expired"
2636
+ }
2637
+ ],
2638
+ "types": [
2639
+ {
2640
+ "name": "CommitmentEvent",
2641
+ "type": {
2642
+ "kind": "struct",
2643
+ "fields": [
2644
+ {
2645
+ "name": "commitment",
2646
+ "type": {
2647
+ "array": [
2648
+ "u8",
2649
+ 32
2650
+ ]
2651
+ }
2652
+ },
2653
+ {
2654
+ "name": "leaf_index",
2655
+ "type": "u64"
2656
+ },
2657
+ {
2658
+ "name": "new_root",
2659
+ "type": {
2660
+ "array": [
2661
+ "u8",
2662
+ 32
2663
+ ]
2664
+ }
2665
+ },
2666
+ {
2667
+ "name": "timestamp",
2668
+ "type": "i64"
2669
+ },
2670
+ {
2671
+ "name": "mint_address",
2672
+ "type": "pubkey"
2673
+ },
2674
+ {
2675
+ "name": "tree_id",
2676
+ "type": "u16"
2677
+ }
2678
+ ]
2679
+ }
2680
+ },
2681
+ {
2682
+ "name": "ExtData",
2683
+ "docs": [
2684
+ "External data that gets hashed into ext_data_hash",
2685
+ "These are public parameters that affect financial flows"
2686
+ ],
2687
+ "type": {
2688
+ "kind": "struct",
2689
+ "fields": [
2690
+ {
2691
+ "name": "recipient",
2692
+ "docs": [
2693
+ "Who receives withdrawal"
2694
+ ],
2695
+ "type": "pubkey"
2696
+ },
2697
+ {
2698
+ "name": "relayer",
2699
+ "docs": [
2700
+ "Who submits tx (gets fee)"
2701
+ ],
2702
+ "type": "pubkey"
2703
+ },
2704
+ {
2705
+ "name": "fee",
2706
+ "docs": [
2707
+ "Fee to relayer in lamports"
2708
+ ],
2709
+ "type": "u64"
2710
+ },
2711
+ {
2712
+ "name": "refund",
2713
+ "docs": [
2714
+ "Refund to user in lamports"
2715
+ ],
2716
+ "type": "u64"
2717
+ }
2718
+ ]
2719
+ }
2720
+ },
2721
+ {
2722
+ "name": "GlobalConfig",
2723
+ "type": {
2724
+ "kind": "struct",
2725
+ "fields": [
2726
+ {
2727
+ "name": "bump",
2728
+ "docs": [
2729
+ "PDA bump"
2730
+ ],
2731
+ "type": "u8"
2732
+ },
2733
+ {
2734
+ "name": "admin",
2735
+ "docs": [
2736
+ "Admin who can configure global settings"
2737
+ ],
2738
+ "type": "pubkey"
2739
+ }
2740
+ ]
2741
+ }
2742
+ },
2743
+ {
2744
+ "name": "MerkleTreeAccount",
2745
+ "docs": [
2746
+ "Layout tests verify 9107 bytes total with 1-byte alignment. Breaking this corrupts all accounts."
2747
+ ],
2748
+ "serialization": "bytemuckunsafe",
2749
+ "repr": {
2750
+ "kind": "rust",
2751
+ "packed": true
2752
+ },
2753
+ "type": {
2754
+ "kind": "struct",
2755
+ "fields": [
2756
+ {
2757
+ "name": "authority",
2758
+ "docs": [
2759
+ "Authority allowed to manage the tree (config admin)"
2760
+ ],
2761
+ "type": "pubkey"
2762
+ },
2763
+ {
2764
+ "name": "height",
2765
+ "docs": [
2766
+ "Tree height (number of levels)"
2767
+ ],
2768
+ "type": "u8"
2769
+ },
2770
+ {
2771
+ "name": "root_history_size",
2772
+ "docs": [
2773
+ "How many roots we track"
2774
+ ],
2775
+ "type": "u16"
2776
+ },
2777
+ {
2778
+ "name": "next_index",
2779
+ "docs": [
2780
+ "Next leaf index"
2781
+ ],
2782
+ "type": "u64"
2783
+ },
2784
+ {
2785
+ "name": "root_index",
2786
+ "docs": [
2787
+ "Index into root_history for the current root"
2788
+ ],
2789
+ "type": "u64"
2790
+ },
2791
+ {
2792
+ "name": "root",
2793
+ "docs": [
2794
+ "Current root"
2795
+ ],
2796
+ "type": {
2797
+ "array": [
2798
+ "u8",
2799
+ 32
2800
+ ]
2801
+ }
2802
+ },
2803
+ {
2804
+ "name": "subtrees",
2805
+ "docs": [
2806
+ "Cached subtree values for each level"
2807
+ ],
2808
+ "type": {
2809
+ "array": [
2810
+ {
2811
+ "array": [
2812
+ "u8",
2813
+ 32
2814
+ ]
2815
+ },
2816
+ 22
2817
+ ]
2818
+ }
2819
+ },
2820
+ {
2821
+ "name": "root_history",
2822
+ "docs": [
2823
+ "Circular buffer of recent roots"
2824
+ ],
2825
+ "type": {
2826
+ "array": [
2827
+ {
2828
+ "array": [
2829
+ "u8",
2830
+ 32
2831
+ ]
2832
+ },
2833
+ 256
2834
+ ]
2835
+ }
2836
+ }
2837
+ ]
2838
+ }
2839
+ },
2840
+ {
2841
+ "name": "NullifierMarker",
2842
+ "docs": [
2843
+ "Per-nullifier PDA marker (created when nullifier is spent).",
2844
+ "The nullifier itself is encoded in the PDA seeds; metadata is emitted via events."
2845
+ ],
2846
+ "type": {
2847
+ "kind": "struct",
2848
+ "fields": [
2849
+ {
2850
+ "name": "is_spent",
2851
+ "type": "bool"
2852
+ },
2853
+ {
2854
+ "name": "bump",
2855
+ "type": "u8"
2856
+ }
2857
+ ]
2858
+ }
2859
+ },
2860
+ {
2861
+ "name": "NullifierSet",
2862
+ "docs": [
2863
+ "Nullifier set metadata (actual nullifiers stored as individual PDAs)."
2864
+ ],
2865
+ "type": {
2866
+ "kind": "struct",
2867
+ "fields": [
2868
+ {
2869
+ "name": "bump",
2870
+ "type": "u8"
2871
+ },
2872
+ {
2873
+ "name": "count",
2874
+ "type": "u32"
2875
+ }
2876
+ ]
2877
+ }
2878
+ },
2879
+ {
2880
+ "name": "NullifierSpent",
2881
+ "type": {
2882
+ "kind": "struct",
2883
+ "fields": [
2884
+ {
2885
+ "name": "nullifier",
2886
+ "type": {
2887
+ "array": [
2888
+ "u8",
2889
+ 32
2890
+ ]
2891
+ }
2892
+ },
2893
+ {
2894
+ "name": "timestamp",
2895
+ "type": "i64"
2896
+ },
2897
+ {
2898
+ "name": "mint_address",
2899
+ "type": "pubkey"
2900
+ },
2901
+ {
2902
+ "name": "tree_id",
2903
+ "type": "u16"
2904
+ }
2905
+ ]
2906
+ }
2907
+ },
2908
+ {
2909
+ "name": "PrivacyConfig",
2910
+ "type": {
2911
+ "kind": "struct",
2912
+ "fields": [
2913
+ {
2914
+ "name": "bump",
2915
+ "docs": [
2916
+ "PDA bump for this config"
2917
+ ],
2918
+ "type": "u8"
2919
+ },
2920
+ {
2921
+ "name": "vault_bump",
2922
+ "docs": [
2923
+ "PDA bump for vault"
2924
+ ],
2925
+ "type": "u8"
2926
+ },
2927
+ {
2928
+ "name": "admin",
2929
+ "docs": [
2930
+ "Admin who can configure pool and relayers"
2931
+ ],
2932
+ "type": "pubkey"
2933
+ },
2934
+ {
2935
+ "name": "fee_bps",
2936
+ "docs": [
2937
+ "Fee in basis points (0–10_000) for withdrawals"
2938
+ ],
2939
+ "type": "u16"
2940
+ },
2941
+ {
2942
+ "name": "min_withdrawal_fee",
2943
+ "docs": [
2944
+ "Minimum fee for withdrawals (in lamports) to ensure relayer compensation"
2945
+ ],
2946
+ "type": "u64"
2947
+ },
2948
+ {
2949
+ "name": "fee_error_margin_bps",
2950
+ "docs": [
2951
+ "Fee error margin in basis points (e.g., 500 = 5%)",
2952
+ "Allows fee variance to prevent timing attacks where identical fees",
2953
+ "could correlate deposits/withdrawals"
2954
+ ],
2955
+ "type": "u16"
2956
+ },
2957
+ {
2958
+ "name": "total_tvl",
2959
+ "docs": [
2960
+ "Total value locked (all deposits combined)"
2961
+ ],
2962
+ "type": "u64"
2963
+ },
2964
+ {
2965
+ "name": "mint_address",
2966
+ "docs": [
2967
+ "Token mint address (for now: SOL, future: multi-token support)"
2968
+ ],
2969
+ "type": "pubkey"
2970
+ },
2971
+ {
2972
+ "name": "min_deposit_amount",
2973
+ "docs": [
2974
+ "Minimum amount allowed per deposit (in lamports/token units)"
2975
+ ],
2976
+ "type": "u64"
2977
+ },
2978
+ {
2979
+ "name": "max_deposit_amount",
2980
+ "docs": [
2981
+ "Maximum amount allowed per deposit (in lamports/token units)"
2982
+ ],
2983
+ "type": "u64"
2984
+ },
2985
+ {
2986
+ "name": "min_withdraw_amount",
2987
+ "docs": [
2988
+ "Minimum amount allowed per withdrawal (in lamports/token units)"
2989
+ ],
2990
+ "type": "u64"
2991
+ },
2992
+ {
2993
+ "name": "max_withdraw_amount",
2994
+ "docs": [
2995
+ "Maximum amount allowed per withdrawal (in lamports/token units)"
2996
+ ],
2997
+ "type": "u64"
2998
+ },
2999
+ {
3000
+ "name": "num_relayers",
3001
+ "docs": [
3002
+ "Relayer registry"
3003
+ ],
3004
+ "type": "u8"
3005
+ },
3006
+ {
3007
+ "name": "relayers",
3008
+ "type": {
3009
+ "array": [
3010
+ "pubkey",
3011
+ 16
3012
+ ]
3013
+ }
3014
+ },
3015
+ {
3016
+ "name": "num_trees",
3017
+ "docs": [
3018
+ "Multi-tree support: number of active Merkle trees"
3019
+ ],
3020
+ "type": "u16"
3021
+ },
3022
+ {
3023
+ "name": "next_tree_index",
3024
+ "docs": [
3025
+ "Suggested tree index for next deposit (round-robin)"
3026
+ ],
3027
+ "type": "u16"
3028
+ },
3029
+ {
3030
+ "name": "min_swap_fee",
3031
+ "docs": [
3032
+ "Minimum swap fee in destination token units (e.g., 100000 = 0.1 USDC)",
3033
+ "Ensures relayer compensation for swap transactions"
3034
+ ],
3035
+ "type": "u64"
3036
+ },
3037
+ {
3038
+ "name": "swap_fee_bps",
3039
+ "docs": [
3040
+ "Swap fee in basis points (0-10_000) of swap output amount",
3041
+ "Used with min_swap_fee: actual fee must be >= max(min_swap_fee, output * swap_fee_bps / 10000)"
3042
+ ],
3043
+ "type": "u16"
3044
+ }
3045
+ ]
3046
+ }
3047
+ },
3048
+ {
3049
+ "name": "SwapExecutedEvent",
3050
+ "type": {
3051
+ "kind": "struct",
3052
+ "fields": [
3053
+ {
3054
+ "name": "source_mint",
3055
+ "type": "pubkey"
3056
+ },
3057
+ {
3058
+ "name": "dest_mint",
3059
+ "type": "pubkey"
3060
+ },
3061
+ {
3062
+ "name": "source_tree_id",
3063
+ "type": "u16"
3064
+ },
3065
+ {
3066
+ "name": "dest_tree_id",
3067
+ "type": "u16"
3068
+ },
3069
+ {
3070
+ "name": "nullifiers",
3071
+ "type": {
3072
+ "array": [
3073
+ {
3074
+ "array": [
3075
+ "u8",
3076
+ 32
3077
+ ]
3078
+ },
3079
+ 2
3080
+ ]
3081
+ }
3082
+ },
3083
+ {
3084
+ "name": "commitments",
3085
+ "type": {
3086
+ "array": [
3087
+ {
3088
+ "array": [
3089
+ "u8",
3090
+ 32
3091
+ ]
3092
+ },
3093
+ 2
3094
+ ]
3095
+ }
3096
+ },
3097
+ {
3098
+ "name": "timestamp",
3099
+ "type": "i64"
3100
+ }
3101
+ ]
3102
+ }
3103
+ },
3104
+ {
3105
+ "name": "SwapExecutor",
3106
+ "docs": [
3107
+ "Ephemeral PDA that holds tokens during swap, created and closed atomically"
3108
+ ],
3109
+ "type": {
3110
+ "kind": "struct",
3111
+ "fields": [
3112
+ {
3113
+ "name": "source_mint",
3114
+ "type": "pubkey"
3115
+ },
3116
+ {
3117
+ "name": "dest_mint",
3118
+ "type": "pubkey"
3119
+ },
3120
+ {
3121
+ "name": "nullifier",
3122
+ "type": {
3123
+ "array": [
3124
+ "u8",
3125
+ 32
3126
+ ]
3127
+ }
3128
+ },
3129
+ {
3130
+ "name": "bump",
3131
+ "type": "u8"
3132
+ },
3133
+ {
3134
+ "name": "swap_amount",
3135
+ "docs": [
3136
+ "Swap amount stored by fund_native_source for validation in transact_swap.",
3137
+ "Zero when executor was created directly in transact_swap (relayer-float path)."
3138
+ ],
3139
+ "type": "u64"
3140
+ },
3141
+ {
3142
+ "name": "is_prefunded",
3143
+ "docs": [
3144
+ "1 when executor was pre-funded by fund_native_source (vault already debited).",
3145
+ "0 for the single-instruction relayer-float path (backward compatible)."
3146
+ ],
3147
+ "type": "u8"
3148
+ },
3149
+ {
3150
+ "name": "relayer",
3151
+ "docs": [
3152
+ "Relayer who created this executor — only they may call reclaim_stale_executor."
3153
+ ],
3154
+ "type": "pubkey"
3155
+ }
3156
+ ]
3157
+ }
3158
+ },
3159
+ {
3160
+ "name": "SwapParams",
3161
+ "docs": [
3162
+ "Swap parameters committed to in the ZK proof"
3163
+ ],
3164
+ "type": {
3165
+ "kind": "struct",
3166
+ "fields": [
3167
+ {
3168
+ "name": "min_amount_out",
3169
+ "type": "u64"
3170
+ },
3171
+ {
3172
+ "name": "deadline",
3173
+ "type": "i64"
3174
+ },
3175
+ {
3176
+ "name": "source_mint",
3177
+ "type": "pubkey"
3178
+ },
3179
+ {
3180
+ "name": "dest_mint",
3181
+ "type": "pubkey"
3182
+ },
3183
+ {
3184
+ "name": "dest_amount",
3185
+ "docs": [
3186
+ "Amount of destination tokens the user commits to receiving.",
3187
+ "Included in swapParamsHash — cryptographically binds the ZK circuit's",
3188
+ "destAmount to the on-chain vault deposit, preventing an attacker from",
3189
+ "encoding an inflated destination note while receiving a tiny swap output."
3190
+ ],
3191
+ "type": "u64"
3192
+ },
3193
+ {
3194
+ "name": "swap_data_hash",
3195
+ "docs": [
3196
+ "SHA-256 hash of the raw swap instruction data (swap_data).",
3197
+ "Binds the exact DEX instruction bytes into the ZK proof so the relayer",
3198
+ "cannot substitute different swap_data (e.g. 0% slippage) after the user",
3199
+ "has generated their proof. Set to [0u8;32] for CPMM/AMM swaps, which",
3200
+ "already enforce dex_min_out by direct instruction decoding."
3201
+ ],
3202
+ "type": {
3203
+ "array": [
3204
+ "u8",
3205
+ 32
3206
+ ]
3207
+ }
3208
+ }
3209
+ ]
3210
+ }
3211
+ },
3212
+ {
3213
+ "name": "SwapProof",
3214
+ "docs": [
3215
+ "Proof for swap transaction circuit (2-in-2-out cross-pool UTXO model)"
3216
+ ],
3217
+ "type": {
3218
+ "kind": "struct",
3219
+ "fields": [
3220
+ {
3221
+ "name": "proof_a",
3222
+ "type": {
3223
+ "array": [
3224
+ "u8",
3225
+ 64
3226
+ ]
3227
+ }
3228
+ },
3229
+ {
3230
+ "name": "proof_b",
3231
+ "type": {
3232
+ "array": [
3233
+ "u8",
3234
+ 128
3235
+ ]
3236
+ }
3237
+ },
3238
+ {
3239
+ "name": "proof_c",
3240
+ "type": {
3241
+ "array": [
3242
+ "u8",
3243
+ 64
3244
+ ]
3245
+ }
3246
+ }
3247
+ ]
3248
+ }
3249
+ },
3250
+ {
3251
+ "name": "TransactionProof",
3252
+ "docs": [
3253
+ "Proof for new UTXO transaction circuit (same structure, different VK)"
3254
+ ],
3255
+ "type": {
3256
+ "kind": "struct",
3257
+ "fields": [
3258
+ {
3259
+ "name": "proof_a",
3260
+ "type": {
3261
+ "array": [
3262
+ "u8",
3263
+ 64
3264
+ ]
3265
+ }
3266
+ },
3267
+ {
3268
+ "name": "proof_b",
3269
+ "type": {
3270
+ "array": [
3271
+ "u8",
3272
+ 128
3273
+ ]
3274
+ }
3275
+ },
3276
+ {
3277
+ "name": "proof_c",
3278
+ "type": {
3279
+ "array": [
3280
+ "u8",
3281
+ 64
3282
+ ]
3283
+ }
3284
+ }
3285
+ ]
3286
+ }
3287
+ },
3288
+ {
3289
+ "name": "Vault",
3290
+ "type": {
3291
+ "kind": "struct",
3292
+ "fields": [
3293
+ {
3294
+ "name": "bump",
3295
+ "docs": [
3296
+ "PDA bump for this vault"
3297
+ ],
3298
+ "type": "u8"
3299
+ }
3300
+ ]
3301
+ }
3302
+ }
3303
+ ]
3304
+ };
3305
+ export default IDL_JSON;