@cubee_ee/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +110 -0
  3. package/dist/clients/AdminClient.d.ts +61 -0
  4. package/dist/clients/AdminClient.d.ts.map +1 -0
  5. package/dist/clients/AdminClient.js +196 -0
  6. package/dist/clients/AdminClient.js.map +1 -0
  7. package/dist/clients/CubeBackendClient.d.ts +67 -0
  8. package/dist/clients/CubeBackendClient.d.ts.map +1 -0
  9. package/dist/clients/CubeBackendClient.js +126 -0
  10. package/dist/clients/CubeBackendClient.js.map +1 -0
  11. package/dist/clients/CubicPoolClient.d.ts +73 -0
  12. package/dist/clients/CubicPoolClient.d.ts.map +1 -0
  13. package/dist/clients/CubicPoolClient.js +425 -0
  14. package/dist/clients/CubicPoolClient.js.map +1 -0
  15. package/dist/clients/PoolFactoryClient.d.ts +45 -0
  16. package/dist/clients/PoolFactoryClient.d.ts.map +1 -0
  17. package/dist/clients/PoolFactoryClient.js +83 -0
  18. package/dist/clients/PoolFactoryClient.js.map +1 -0
  19. package/dist/clients/RpcClient.d.ts +28 -0
  20. package/dist/clients/RpcClient.d.ts.map +1 -0
  21. package/dist/clients/RpcClient.js +58 -0
  22. package/dist/clients/RpcClient.js.map +1 -0
  23. package/dist/clients/SingleTokenDepositClient.d.ts +45 -0
  24. package/dist/clients/SingleTokenDepositClient.d.ts.map +1 -0
  25. package/dist/clients/SingleTokenDepositClient.js +63 -0
  26. package/dist/clients/SingleTokenDepositClient.js.map +1 -0
  27. package/dist/clients/index.d.ts +8 -0
  28. package/dist/clients/index.d.ts.map +1 -0
  29. package/dist/clients/index.js +24 -0
  30. package/dist/clients/index.js.map +1 -0
  31. package/dist/clients/tx-builders.d.ts +32 -0
  32. package/dist/clients/tx-builders.d.ts.map +1 -0
  33. package/dist/clients/tx-builders.js +398 -0
  34. package/dist/clients/tx-builders.js.map +1 -0
  35. package/dist/config/index.d.ts +60 -0
  36. package/dist/config/index.d.ts.map +1 -0
  37. package/dist/config/index.js +59 -0
  38. package/dist/config/index.js.map +1 -0
  39. package/dist/config/networks.d.ts +10 -0
  40. package/dist/config/networks.d.ts.map +1 -0
  41. package/dist/config/networks.js +31 -0
  42. package/dist/config/networks.js.map +1 -0
  43. package/dist/config/tokens.d.ts +19 -0
  44. package/dist/config/tokens.d.ts.map +1 -0
  45. package/dist/config/tokens.js +43 -0
  46. package/dist/config/tokens.js.map +1 -0
  47. package/dist/idl/cubic_pool.json +2497 -0
  48. package/dist/idl/index.d.ts +975 -0
  49. package/dist/idl/index.d.ts.map +1 -0
  50. package/dist/idl/index.js +18 -0
  51. package/dist/idl/index.js.map +1 -0
  52. package/dist/idl/protocol_admin.json +1816 -0
  53. package/dist/idl/single_token_liquidity.json +745 -0
  54. package/dist/index.d.ts +48 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +136 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/math/cubicMath.d.ts +40 -0
  59. package/dist/math/cubicMath.d.ts.map +1 -0
  60. package/dist/math/cubicMath.js +75 -0
  61. package/dist/math/cubicMath.js.map +1 -0
  62. package/dist/math/fixedPoint.d.ts +14 -0
  63. package/dist/math/fixedPoint.d.ts.map +1 -0
  64. package/dist/math/fixedPoint.js +46 -0
  65. package/dist/math/fixedPoint.js.map +1 -0
  66. package/dist/math/index.d.ts +7 -0
  67. package/dist/math/index.d.ts.map +1 -0
  68. package/dist/math/index.js +23 -0
  69. package/dist/math/index.js.map +1 -0
  70. package/dist/math/logExp.d.ts +15 -0
  71. package/dist/math/logExp.d.ts.map +1 -0
  72. package/dist/math/logExp.js +91 -0
  73. package/dist/math/logExp.js.map +1 -0
  74. package/dist/math/singleToken.d.ts +53 -0
  75. package/dist/math/singleToken.d.ts.map +1 -0
  76. package/dist/math/singleToken.js +185 -0
  77. package/dist/math/singleToken.js.map +1 -0
  78. package/dist/math/slippage.d.ts +24 -0
  79. package/dist/math/slippage.d.ts.map +1 -0
  80. package/dist/math/slippage.js +54 -0
  81. package/dist/math/slippage.js.map +1 -0
  82. package/dist/math/weightedMath.d.ts +18 -0
  83. package/dist/math/weightedMath.d.ts.map +1 -0
  84. package/dist/math/weightedMath.js +45 -0
  85. package/dist/math/weightedMath.js.map +1 -0
  86. package/dist/parsers/borsh.d.ts +24 -0
  87. package/dist/parsers/borsh.d.ts.map +1 -0
  88. package/dist/parsers/borsh.js +80 -0
  89. package/dist/parsers/borsh.js.map +1 -0
  90. package/dist/parsers/events.d.ts +3 -0
  91. package/dist/parsers/events.d.ts.map +1 -0
  92. package/dist/parsers/events.js +172 -0
  93. package/dist/parsers/events.js.map +1 -0
  94. package/dist/parsers/index.d.ts +5 -0
  95. package/dist/parsers/index.d.ts.map +1 -0
  96. package/dist/parsers/index.js +21 -0
  97. package/dist/parsers/index.js.map +1 -0
  98. package/dist/parsers/mintAccount.d.ts +22 -0
  99. package/dist/parsers/mintAccount.d.ts.map +1 -0
  100. package/dist/parsers/mintAccount.js +22 -0
  101. package/dist/parsers/mintAccount.js.map +1 -0
  102. package/dist/parsers/poolAccount.d.ts +32 -0
  103. package/dist/parsers/poolAccount.d.ts.map +1 -0
  104. package/dist/parsers/poolAccount.js +88 -0
  105. package/dist/parsers/poolAccount.js.map +1 -0
  106. package/dist/types/events.d.ts +82 -0
  107. package/dist/types/events.d.ts.map +1 -0
  108. package/dist/types/events.js +3 -0
  109. package/dist/types/events.js.map +1 -0
  110. package/dist/types/index.d.ts +5 -0
  111. package/dist/types/index.d.ts.map +1 -0
  112. package/dist/types/index.js +21 -0
  113. package/dist/types/index.js.map +1 -0
  114. package/dist/types/pool.d.ts +66 -0
  115. package/dist/types/pool.d.ts.map +1 -0
  116. package/dist/types/pool.js +3 -0
  117. package/dist/types/pool.js.map +1 -0
  118. package/dist/types/result.d.ts +23 -0
  119. package/dist/types/result.d.ts.map +1 -0
  120. package/dist/types/result.js +11 -0
  121. package/dist/types/result.js.map +1 -0
  122. package/dist/types/tx.d.ts +80 -0
  123. package/dist/types/tx.d.ts.map +1 -0
  124. package/dist/types/tx.js +3 -0
  125. package/dist/types/tx.js.map +1 -0
  126. package/dist/utils/errors.d.ts +8 -0
  127. package/dist/utils/errors.d.ts.map +1 -0
  128. package/dist/utils/errors.js +83 -0
  129. package/dist/utils/errors.js.map +1 -0
  130. package/dist/utils/index.d.ts +4 -0
  131. package/dist/utils/index.d.ts.map +1 -0
  132. package/dist/utils/index.js +20 -0
  133. package/dist/utils/index.js.map +1 -0
  134. package/dist/utils/pda.d.ts +8 -0
  135. package/dist/utils/pda.d.ts.map +1 -0
  136. package/dist/utils/pda.js +27 -0
  137. package/dist/utils/pda.js.map +1 -0
  138. package/dist/utils/retry.d.ts +22 -0
  139. package/dist/utils/retry.d.ts.map +1 -0
  140. package/dist/utils/retry.js +62 -0
  141. package/dist/utils/retry.js.map +1 -0
  142. package/package.json +54 -0
  143. package/src/clients/AdminClient.ts +254 -0
  144. package/src/clients/CubeBackendClient.ts +193 -0
  145. package/src/clients/CubicPoolClient.ts +492 -0
  146. package/src/clients/PoolFactoryClient.ts +102 -0
  147. package/src/clients/RpcClient.ts +78 -0
  148. package/src/clients/SingleTokenDepositClient.ts +91 -0
  149. package/src/clients/index.ts +7 -0
  150. package/src/clients/tx-builders.ts +538 -0
  151. package/src/config/index.ts +82 -0
  152. package/src/config/networks.ts +49 -0
  153. package/src/config/tokens.ts +52 -0
  154. package/src/idl/cubic_pool.json +2497 -0
  155. package/src/idl/index.ts +13 -0
  156. package/src/idl/protocol_admin.json +1816 -0
  157. package/src/idl/single_token_liquidity.json +745 -0
  158. package/src/index.ts +154 -0
  159. package/src/math/cubicMath.ts +89 -0
  160. package/src/math/fixedPoint.ts +39 -0
  161. package/src/math/index.ts +6 -0
  162. package/src/math/logExp.ts +82 -0
  163. package/src/math/singleToken.ts +250 -0
  164. package/src/math/slippage.ts +49 -0
  165. package/src/math/weightedMath.ts +48 -0
  166. package/src/parsers/borsh.ts +80 -0
  167. package/src/parsers/events.ts +172 -0
  168. package/src/parsers/index.ts +4 -0
  169. package/src/parsers/mintAccount.ts +37 -0
  170. package/src/parsers/poolAccount.ts +113 -0
  171. package/src/types/events.ts +100 -0
  172. package/src/types/index.ts +4 -0
  173. package/src/types/pool.ts +64 -0
  174. package/src/types/result.ts +45 -0
  175. package/src/types/tx.ts +87 -0
  176. package/src/utils/errors.ts +78 -0
  177. package/src/utils/index.ts +3 -0
  178. package/src/utils/pda.ts +58 -0
  179. package/src/utils/retry.ts +85 -0
@@ -0,0 +1,745 @@
1
+ {
2
+ "address": "7BpdUH1tzTSXLuQNo6YpjJ8Eagw8AkrS6cnkxiJdCFS2",
3
+ "metadata": {
4
+ "name": "single_token_liquidity",
5
+ "version": "0.1.0",
6
+ "spec": "0.1.0",
7
+ "description": "1-token liquidity provisioning helper for Cubic Pool"
8
+ },
9
+ "instructions": [
10
+ {
11
+ "name": "deposit_single_token",
12
+ "docs": [
13
+ "Single-token liquidity-add into a Cubic Pool. See",
14
+ "`instructions/deposit_single_token.rs` for the",
15
+ "`remaining_accounts` layout.",
16
+ "",
17
+ "# Parameters",
18
+ "* `amount_in` — raw units of",
19
+ "`pool.token_mints[token_in_index]`.",
20
+ "* `token_in_index` — index in `pool.token_mints`.",
21
+ "* `slippage_hundredths_bps`— slippage bound applied to every",
22
+ "per-leg swap. Same scale as `cubic_pool.swap_fee_rate`",
23
+ "(1_000_000 = 100%). Must be in `[10, 1_000_000]`",
24
+ "= `[0.001%, 100%]`.",
25
+ "* `minimum_bpt_amount` — final guard on BPT received by user.",
26
+ "",
27
+ "# Used by",
28
+ "SDK `SingleTokenClient`, frontend `useSingleTokenDeposit` hook."
29
+ ],
30
+ "discriminator": [
31
+ 166,
32
+ 136,
33
+ 166,
34
+ 47,
35
+ 199,
36
+ 192,
37
+ 86,
38
+ 169
39
+ ],
40
+ "accounts": [
41
+ {
42
+ "name": "pool",
43
+ "writable": true
44
+ },
45
+ {
46
+ "name": "helper"
47
+ },
48
+ {
49
+ "name": "bpt_mint",
50
+ "writable": true
51
+ },
52
+ {
53
+ "name": "helper_bpt_account",
54
+ "docs": [
55
+ "Helper's BPT account (where the freshly-minted BPT lands before",
56
+ "being forwarded to the user)."
57
+ ],
58
+ "writable": true
59
+ },
60
+ {
61
+ "name": "user_bpt_account",
62
+ "writable": true
63
+ },
64
+ {
65
+ "name": "user",
66
+ "writable": true,
67
+ "signer": true
68
+ },
69
+ {
70
+ "name": "cubic_pool_program"
71
+ },
72
+ {
73
+ "name": "bpt_token_program"
74
+ }
75
+ ],
76
+ "args": [
77
+ {
78
+ "name": "amount_in",
79
+ "type": "u64"
80
+ },
81
+ {
82
+ "name": "token_in_index",
83
+ "type": "u8"
84
+ },
85
+ {
86
+ "name": "slippage_hundredths_bps",
87
+ "type": "u32"
88
+ },
89
+ {
90
+ "name": "minimum_bpt_amount",
91
+ "type": "u64"
92
+ }
93
+ ]
94
+ },
95
+ {
96
+ "name": "withdraw_sol",
97
+ "docs": [
98
+ "Drain lamports from any stld-owned account down to (not below)",
99
+ "rent-exempt minimum.",
100
+ "",
101
+ "# Authority",
102
+ "Treasury PDA only — in practice via CPI from",
103
+ "`protocol_admin::stld_withdraw_sol`.",
104
+ "",
105
+ "# Parameters",
106
+ "* `amount` — lamports; > 0 and ≤",
107
+ "`source.lamports() - rent_exempt_minimum`."
108
+ ],
109
+ "discriminator": [
110
+ 145,
111
+ 131,
112
+ 74,
113
+ 136,
114
+ 65,
115
+ 137,
116
+ 42,
117
+ 38
118
+ ],
119
+ "accounts": [
120
+ {
121
+ "name": "config",
122
+ "docs": [
123
+ "Cubic-pool config whose `protocol_admin` is the authority for this",
124
+ "drain. In production it's the Treasury PDA of the `protocol-admin`",
125
+ "program."
126
+ ]
127
+ },
128
+ {
129
+ "name": "source",
130
+ "writable": true
131
+ },
132
+ {
133
+ "name": "recipient",
134
+ "writable": true
135
+ },
136
+ {
137
+ "name": "authority",
138
+ "signer": true
139
+ }
140
+ ],
141
+ "args": [
142
+ {
143
+ "name": "amount",
144
+ "type": "u64"
145
+ }
146
+ ]
147
+ }
148
+ ],
149
+ "accounts": [
150
+ {
151
+ "name": "CubicPool",
152
+ "discriminator": [
153
+ 137,
154
+ 210,
155
+ 42,
156
+ 22,
157
+ 209,
158
+ 156,
159
+ 43,
160
+ 78
161
+ ]
162
+ },
163
+ {
164
+ "name": "CubicPoolConfig",
165
+ "discriminator": [
166
+ 4,
167
+ 29,
168
+ 243,
169
+ 10,
170
+ 142,
171
+ 64,
172
+ 232,
173
+ 118
174
+ ]
175
+ }
176
+ ],
177
+ "events": [
178
+ {
179
+ "name": "SingleTokenDeposit",
180
+ "discriminator": [
181
+ 215,
182
+ 54,
183
+ 137,
184
+ 104,
185
+ 219,
186
+ 39,
187
+ 164,
188
+ 235
189
+ ]
190
+ },
191
+ {
192
+ "name": "StldSolWithdrawn",
193
+ "discriminator": [
194
+ 24,
195
+ 246,
196
+ 27,
197
+ 39,
198
+ 222,
199
+ 196,
200
+ 135,
201
+ 61
202
+ ]
203
+ }
204
+ ],
205
+ "errors": [
206
+ {
207
+ "code": 6000,
208
+ "name": "ZeroAmount",
209
+ "msg": "Zero amount"
210
+ },
211
+ {
212
+ "code": 6001,
213
+ "name": "ZeroFeeAmount",
214
+ "msg": "Swap amount is too small: fee rounds to zero"
215
+ },
216
+ {
217
+ "code": 6002,
218
+ "name": "SlippageTooLow",
219
+ "msg": "Slippage below 0.001%"
220
+ },
221
+ {
222
+ "code": 6003,
223
+ "name": "SlippageTooHigh",
224
+ "msg": "Slippage above 100%"
225
+ },
226
+ {
227
+ "code": 6004,
228
+ "name": "PoolDisabled",
229
+ "msg": "Pool disabled"
230
+ },
231
+ {
232
+ "code": 6005,
233
+ "name": "SwapsDisabled",
234
+ "msg": "Swaps disabled"
235
+ },
236
+ {
237
+ "code": 6006,
238
+ "name": "InvalidTokenCount",
239
+ "msg": "Invalid token count"
240
+ },
241
+ {
242
+ "code": 6007,
243
+ "name": "InvalidTokenIndex",
244
+ "msg": "Invalid token index"
245
+ },
246
+ {
247
+ "code": 6008,
248
+ "name": "InvalidAccountLayout",
249
+ "msg": "Invalid remaining_accounts layout"
250
+ },
251
+ {
252
+ "code": 6009,
253
+ "name": "InvalidMint",
254
+ "msg": "Invalid mint passed in remaining_accounts"
255
+ },
256
+ {
257
+ "code": 6010,
258
+ "name": "InvalidTokenProgram",
259
+ "msg": "Invalid token program passed in remaining_accounts"
260
+ },
261
+ {
262
+ "code": 6011,
263
+ "name": "InvalidVault",
264
+ "msg": "Invalid vault: must be ATA(pool, mint, token_program)"
265
+ },
266
+ {
267
+ "code": 6012,
268
+ "name": "InvalidHelperAta",
269
+ "msg": "Invalid helper ATA: must be ATA(helper_pda, mint, token_program)"
270
+ },
271
+ {
272
+ "code": 6013,
273
+ "name": "InvalidUserAta",
274
+ "msg": "User token account does not match expected owner/mint"
275
+ },
276
+ {
277
+ "code": 6014,
278
+ "name": "PoolNotSeeded",
279
+ "msg": "Pool not seeded: need at least one actual_balance > 0"
280
+ },
281
+ {
282
+ "code": 6015,
283
+ "name": "InvalidVirtualBalance",
284
+ "msg": "Virtual balance of zero for a token"
285
+ },
286
+ {
287
+ "code": 6016,
288
+ "name": "MathOverflow",
289
+ "msg": "Math overflow"
290
+ },
291
+ {
292
+ "code": 6017,
293
+ "name": "MathUnderflow",
294
+ "msg": "Math underflow"
295
+ },
296
+ {
297
+ "code": 6018,
298
+ "name": "ZeroExpectedOut",
299
+ "msg": "Expected swap output is zero"
300
+ },
301
+ {
302
+ "code": 6019,
303
+ "name": "InsufficientBpt",
304
+ "msg": "Received BPT less than minimum_bpt_amount"
305
+ },
306
+ {
307
+ "code": 6020,
308
+ "name": "InvalidBptMint",
309
+ "msg": "Invalid BPT mint: must be [bpt_mint, pool] PDA in cubic-pool program"
310
+ },
311
+ {
312
+ "code": 6021,
313
+ "name": "InvalidCubicPoolProgram",
314
+ "msg": "Invalid Cubic Pool program id"
315
+ },
316
+ {
317
+ "code": 6022,
318
+ "name": "InvalidUserBptAccount",
319
+ "msg": "User BPT account mismatch"
320
+ },
321
+ {
322
+ "code": 6023,
323
+ "name": "InvalidHelperBptAccount",
324
+ "msg": "Helper BPT account mismatch"
325
+ },
326
+ {
327
+ "code": 6024,
328
+ "name": "InvalidPoolOwner",
329
+ "msg": "Pool account is owned by a different program"
330
+ },
331
+ {
332
+ "code": 6025,
333
+ "name": "PoolHasZeroBalanceToken",
334
+ "msg": "Pool has at least one token with actual_balance = 0; single-token deposit unsupported in this state"
335
+ },
336
+ {
337
+ "code": 6026,
338
+ "name": "AmountTooSmall",
339
+ "msg": "amount_in is too small: truncation would leave a pool token with zero allocation"
340
+ },
341
+ {
342
+ "code": 6027,
343
+ "name": "Unauthorized",
344
+ "msg": "Unauthorized"
345
+ },
346
+ {
347
+ "code": 6028,
348
+ "name": "InvalidSourceOwner",
349
+ "msg": "Source account must be owned by this program"
350
+ },
351
+ {
352
+ "code": 6029,
353
+ "name": "WouldBreakRentExempt",
354
+ "msg": "Withdrawal would break rent exemption"
355
+ }
356
+ ],
357
+ "types": [
358
+ {
359
+ "name": "CubicPool",
360
+ "docs": [
361
+ "`CubicPool` — per-pool state for a weighted AMM with virtual liquidity.",
362
+ "",
363
+ "Each pool is a PDA derived from `[CUBIC_POOL_SEED, config_pubkey,",
364
+ "pool_id_le]`. One config can host many pools (different `pool_id`s).",
365
+ "",
366
+ "## Storage layout — DO NOT REORDER",
367
+ "Backends (`onchainPoolFetcher.ts`, indexer) read fields by raw offset.",
368
+ "Adding fields is fine if appended **before** `reserved` and `reserved`",
369
+ "shrinks accordingly so total `LEN` stays the same.",
370
+ "",
371
+ "## Derived (not stored) state",
372
+ "- `bpt_mint` — derived as `[BPT_MINT_SEED, pool]` PDA.",
373
+ "- `bpt_total_supply`— read from `bpt_mint.supply` at runtime.",
374
+ "- `token_vaults[i]` — derived as ATA(pool, mint, token_programs[i]).",
375
+ "- `token_decimals` — read from each mint account at runtime."
376
+ ],
377
+ "type": {
378
+ "kind": "struct",
379
+ "fields": [
380
+ {
381
+ "name": "config",
382
+ "docs": [
383
+ "`CubicPoolConfig` this pool inherits governance from. Pinned at",
384
+ "init, used both as a PDA seed and at runtime in admin-instruction",
385
+ "constraints (`pool.config == config.key()`)."
386
+ ],
387
+ "type": "pubkey"
388
+ },
389
+ {
390
+ "name": "bump",
391
+ "docs": [
392
+ "Bump seed for the pool PDA. Stored so signer-seed reconstruction is",
393
+ "O(1) instead of an expensive `find_program_address` per CPI."
394
+ ],
395
+ "type": "u8"
396
+ },
397
+ {
398
+ "name": "token_count",
399
+ "docs": [
400
+ "Number of active tokens in the pool, in [MIN_TOKENS, MAX_TOKENS] =",
401
+ "[2, 10]. Slots beyond `token_count` are zeroed and ignored."
402
+ ],
403
+ "type": "u8"
404
+ },
405
+ {
406
+ "name": "pool_id",
407
+ "docs": [
408
+ "User-chosen 64-bit salt baked into the PDA seeds, allowing multiple",
409
+ "pools per config without re-deploying. Unique per (config, pool_id)."
410
+ ],
411
+ "type": "u64"
412
+ },
413
+ {
414
+ "name": "token_mints",
415
+ "docs": [
416
+ "Mint pubkeys for each active token, fixed length array padded with",
417
+ "`Pubkey::default()` past `token_count`."
418
+ ],
419
+ "type": {
420
+ "array": [
421
+ "pubkey",
422
+ 10
423
+ ]
424
+ }
425
+ },
426
+ {
427
+ "name": "token_programs",
428
+ "docs": [
429
+ "Per-token program ID (`spl_token::ID` or `spl_token_2022::ID`). A",
430
+ "single pool may mix legacy SPL tokens and Token-2022 mints."
431
+ ],
432
+ "type": {
433
+ "array": [
434
+ "pubkey",
435
+ 10
436
+ ]
437
+ }
438
+ },
439
+ {
440
+ "name": "normalized_weights",
441
+ "docs": [
442
+ "Normalised weights in basis points (sum = `WEIGHT_SCALE` = 10_000).",
443
+ "`weights[i] / WEIGHT_SCALE` is the target value-share of token i."
444
+ ],
445
+ "type": {
446
+ "array": [
447
+ "u64",
448
+ 10
449
+ ]
450
+ }
451
+ },
452
+ {
453
+ "name": "virtual_balances",
454
+ "docs": [
455
+ "Virtual balances (raw token units) used by the cubic invariant",
456
+ "math. Decoupled from actual vault holdings to enable concentrated",
457
+ "liquidity à la Cubic AMM. Updated by every swap / add / remove."
458
+ ],
459
+ "type": {
460
+ "array": [
461
+ "u64",
462
+ 10
463
+ ]
464
+ }
465
+ },
466
+ {
467
+ "name": "actual_balances",
468
+ "docs": [
469
+ "Actual balances mirrored from the on-chain vaults. Always",
470
+ "== vault.amount for that token (CEI ordering keeps them in sync)."
471
+ ],
472
+ "type": {
473
+ "array": [
474
+ "u64",
475
+ 10
476
+ ]
477
+ }
478
+ },
479
+ {
480
+ "name": "swap_fee_rate",
481
+ "docs": [
482
+ "Swap fee in hundredths of a basis point (precision",
483
+ "`SWAP_FEE_PRECISION` = 1_000_000). 100_000 = 10% (current cap)."
484
+ ],
485
+ "type": "u32"
486
+ },
487
+ {
488
+ "name": "protocol_fee_rate",
489
+ "docs": [
490
+ "Share of each swap fee taken by the protocol, in basis points",
491
+ "(precision `PROTOCOL_FEE_PRECISION` = 10_000). 5_000 = 50% (cap)."
492
+ ],
493
+ "type": "u16"
494
+ },
495
+ {
496
+ "name": "protocol_fees_owed",
497
+ "docs": [
498
+ "Accumulated protocol fees per token (raw units), waiting on",
499
+ "`collect_protocol_fees`. Stored separately from `actual_balances`",
500
+ "so LP value isn't diluted by uncollected fees."
501
+ ],
502
+ "type": {
503
+ "array": [
504
+ "u64",
505
+ 10
506
+ ]
507
+ }
508
+ },
509
+ {
510
+ "name": "created_at",
511
+ "docs": [
512
+ "Pool creation `Clock::unix_timestamp`. Informational only."
513
+ ],
514
+ "type": "i64"
515
+ },
516
+ {
517
+ "name": "pool_enabled",
518
+ "docs": [
519
+ "Master kill switch — when `false`, swaps and add/remove liquidity",
520
+ "all revert. Only `protocol_admin` can flip this; required to be",
521
+ "`false` before `debug_withdraw_liquidity` is callable."
522
+ ],
523
+ "type": "bool"
524
+ },
525
+ {
526
+ "name": "swaps_enabled",
527
+ "docs": [
528
+ "Trading switch — `false` blocks swaps but still allows LP",
529
+ "add/remove. Either `pool_admin` or `config.protocol_admin` can flip."
530
+ ],
531
+ "type": "bool"
532
+ },
533
+ {
534
+ "name": "pool_admin",
535
+ "docs": [
536
+ "Per-pool admin. Initialised to the wallet that called",
537
+ "`initialize_cubic_pool`. Allowed to: rotate `swap_fee_rate`,",
538
+ "toggle `swaps_enabled`, transfer / disable itself via the",
539
+ "pending/accept/disable flow. Set to `Pubkey::default()` once the",
540
+ "admin role is renounced — after that, no pool-admin function is",
541
+ "callable on this pool, ever."
542
+ ],
543
+ "type": "pubkey"
544
+ },
545
+ {
546
+ "name": "pending_pool_admin",
547
+ "docs": [
548
+ "Pending successor for `pool_admin` during a 2-step transfer.",
549
+ "`Pubkey::default()` ⇒ no transfer in flight."
550
+ ],
551
+ "type": "pubkey"
552
+ },
553
+ {
554
+ "name": "reserved",
555
+ "docs": [
556
+ "Forward-compat padding (do not repurpose without a migration plan)."
557
+ ],
558
+ "type": {
559
+ "array": [
560
+ "u8",
561
+ 64
562
+ ]
563
+ }
564
+ }
565
+ ]
566
+ }
567
+ },
568
+ {
569
+ "name": "CubicPoolConfig",
570
+ "docs": [
571
+ "`CubicPoolConfig` — protocol-level governance for every pool created",
572
+ "against this account.",
573
+ "",
574
+ "One config can host many pools (each pool stores `config: Pubkey`).",
575
+ "Per-pool admin (level-1: rotates `swap_fee_rate`, toggles `swaps_enabled`)",
576
+ "lives on `CubicPool::pool_admin`. This config carries only the",
577
+ "protocol-level admin (level-2) plus protocol-wide defaults."
578
+ ],
579
+ "type": {
580
+ "kind": "struct",
581
+ "fields": [
582
+ {
583
+ "name": "protocol_admin",
584
+ "docs": [
585
+ "Protocol-level admin. Allowed to: pause pools, change",
586
+ "`protocol_fee_rate`, collect protocol fees, drain via",
587
+ "`debug_withdraw_liquidity`, update `banned_extensions`, withdraw",
588
+ "SOL from program-owned accounts, and rotate itself via the",
589
+ "pending/accept flow. Set to a designated authority (typically the",
590
+ "Treasury PDA of the `protocol-admin` program) at config init."
591
+ ],
592
+ "type": "pubkey"
593
+ },
594
+ {
595
+ "name": "pending_protocol_admin",
596
+ "docs": [
597
+ "Pending successor for `protocol_admin` during a 2-step transfer.",
598
+ "`Pubkey::default()` ⇒ no transfer in flight."
599
+ ],
600
+ "type": "pubkey"
601
+ },
602
+ {
603
+ "name": "default_protocol_fee_rate",
604
+ "docs": [
605
+ "Default `protocol_fee_rate` (in basis points, max 5000 = 50%) seeded",
606
+ "onto every new pool created against this config. Pools may diverge",
607
+ "later via `set_protocol_fee_rate`."
608
+ ],
609
+ "type": "u16"
610
+ },
611
+ {
612
+ "name": "banned_extensions",
613
+ "docs": [
614
+ "Bitmap of banned Token-2022 extension types. Bit N set ⇒ extension",
615
+ "type N is rejected at pool init. Maintained by `protocol_admin` via",
616
+ "`set_banned_extensions`. Defaults to `DEFAULT_BANNED_EXTENSIONS`",
617
+ "(TransferFee, ConfidentialTransfer, NonTransferable, …)."
618
+ ],
619
+ "type": "u64"
620
+ },
621
+ {
622
+ "name": "reserved",
623
+ "docs": [
624
+ "Forward-compatibility padding so future fields can be added without",
625
+ "migrating existing config accounts."
626
+ ],
627
+ "type": {
628
+ "array": [
629
+ "u8",
630
+ 120
631
+ ]
632
+ }
633
+ }
634
+ ]
635
+ }
636
+ },
637
+ {
638
+ "name": "SingleTokenDeposit",
639
+ "docs": [
640
+ "Emitted at the end of `deposit_single_token` with everything an",
641
+ "indexer needs to reconstruct the user-facing receipt without",
642
+ "re-fetching state.",
643
+ "",
644
+ "# Fields",
645
+ "* `helper` — helper PDA pubkey.",
646
+ "* `pool` — Cubic Pool PDA.",
647
+ "* `user` — depositor.",
648
+ "* `token_in_index` — index of the supplied token.",
649
+ "* `amount_in` — raw input.",
650
+ "* `slippage_hundredths_bps` — slippage bound used for each leg.",
651
+ "* `allocations` — pre-CPI per-token slice plan.",
652
+ "* `deposited_amounts` — post-CPI helper balances actually fed",
653
+ "to `add_liquidity` (after `cap_deposit_amounts_to_lp_ratio`).",
654
+ "* `bpt_received` — BPT minted to the user.",
655
+ "* `dust_refunded` — total tokens (raw, summed across",
656
+ "tokens) returned from helper → user."
657
+ ],
658
+ "type": {
659
+ "kind": "struct",
660
+ "fields": [
661
+ {
662
+ "name": "helper",
663
+ "type": "pubkey"
664
+ },
665
+ {
666
+ "name": "pool",
667
+ "type": "pubkey"
668
+ },
669
+ {
670
+ "name": "user",
671
+ "type": "pubkey"
672
+ },
673
+ {
674
+ "name": "token_in_index",
675
+ "type": "u8"
676
+ },
677
+ {
678
+ "name": "amount_in",
679
+ "type": "u64"
680
+ },
681
+ {
682
+ "name": "slippage_hundredths_bps",
683
+ "type": "u32"
684
+ },
685
+ {
686
+ "name": "allocations",
687
+ "type": {
688
+ "vec": "u64"
689
+ }
690
+ },
691
+ {
692
+ "name": "deposited_amounts",
693
+ "type": {
694
+ "vec": "u64"
695
+ }
696
+ },
697
+ {
698
+ "name": "bpt_received",
699
+ "type": "u64"
700
+ },
701
+ {
702
+ "name": "dust_refunded",
703
+ "type": "u64"
704
+ },
705
+ {
706
+ "name": "timestamp",
707
+ "type": "i64"
708
+ }
709
+ ]
710
+ }
711
+ },
712
+ {
713
+ "name": "StldSolWithdrawn",
714
+ "docs": [
715
+ "Emitted by `withdraw_sol` after lamports move out of a stld-owned",
716
+ "account."
717
+ ],
718
+ "type": {
719
+ "kind": "struct",
720
+ "fields": [
721
+ {
722
+ "name": "source",
723
+ "type": "pubkey"
724
+ },
725
+ {
726
+ "name": "authority",
727
+ "type": "pubkey"
728
+ },
729
+ {
730
+ "name": "recipient",
731
+ "type": "pubkey"
732
+ },
733
+ {
734
+ "name": "amount",
735
+ "type": "u64"
736
+ },
737
+ {
738
+ "name": "timestamp",
739
+ "type": "i64"
740
+ }
741
+ ]
742
+ }
743
+ }
744
+ ]
745
+ }