@whetstone-research/doppler-sdk 0.0.24 → 1.0.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 (445) hide show
  1. package/README.md +69 -0
  2. package/dist/chunk-3LTCKCJC.js +319 -0
  3. package/dist/chunk-3LTCKCJC.js.map +1 -0
  4. package/dist/chunk-PZ5AY32C.js +9 -0
  5. package/dist/{chunk-4XN6DQBW.js.map → chunk-PZ5AY32C.js.map} +1 -1
  6. package/dist/chunk-RO6R66OM.js +974 -0
  7. package/dist/chunk-RO6R66OM.js.map +1 -0
  8. package/dist/evm/index.d.ts +8533 -0
  9. package/dist/evm/index.js +15055 -0
  10. package/dist/evm/index.js.map +1 -0
  11. package/dist/oracle-BSvZ6pxp.d.ts +820 -0
  12. package/dist/pda-RVIHNLRP.js +4 -0
  13. package/dist/pda-RVIHNLRP.js.map +1 -0
  14. package/dist/solana/index.d.ts +2495 -0
  15. package/dist/solana/index.js +2209 -0
  16. package/dist/solana/index.js.map +1 -0
  17. package/dist/solana/react/index.d.ts +1046 -0
  18. package/dist/solana/react/index.js +1436 -0
  19. package/dist/solana/react/index.js.map +1 -0
  20. package/package.json +36 -20
  21. package/dist/DopplerSDK.d.mts +0 -106
  22. package/dist/DopplerSDK.d.ts +0 -106
  23. package/dist/DopplerSDK.js +0 -53
  24. package/dist/DopplerSDK.js.map +0 -1
  25. package/dist/DopplerSDK.mjs +0 -44
  26. package/dist/DopplerSDK.mjs.map +0 -1
  27. package/dist/abis/bytecodes/derc20.d.mts +0 -3
  28. package/dist/abis/bytecodes/derc20.d.ts +0 -3
  29. package/dist/abis/bytecodes/derc20.js +0 -9
  30. package/dist/abis/bytecodes/derc20.js.map +0 -1
  31. package/dist/abis/bytecodes/derc20.mjs +0 -3
  32. package/dist/abis/bytecodes/derc20.mjs.map +0 -1
  33. package/dist/abis/bytecodes/derc2080.d.mts +0 -3
  34. package/dist/abis/bytecodes/derc2080.d.ts +0 -3
  35. package/dist/abis/bytecodes/derc2080.js +0 -9
  36. package/dist/abis/bytecodes/derc2080.js.map +0 -1
  37. package/dist/abis/bytecodes/derc2080.mjs +0 -3
  38. package/dist/abis/bytecodes/derc2080.mjs.map +0 -1
  39. package/dist/abis/bytecodes/doppler.d.mts +0 -3
  40. package/dist/abis/bytecodes/doppler.d.ts +0 -3
  41. package/dist/abis/bytecodes/doppler.js +0 -9
  42. package/dist/abis/bytecodes/doppler.js.map +0 -1
  43. package/dist/abis/bytecodes/doppler.mjs +0 -3
  44. package/dist/abis/bytecodes/doppler.mjs.map +0 -1
  45. package/dist/abis/bytecodes/dopplerDN404.d.mts +0 -3
  46. package/dist/abis/bytecodes/dopplerDN404.d.ts +0 -3
  47. package/dist/abis/bytecodes/dopplerDN404.js +0 -9
  48. package/dist/abis/bytecodes/dopplerDN404.js.map +0 -1
  49. package/dist/abis/bytecodes/dopplerDN404.mjs +0 -3
  50. package/dist/abis/bytecodes/dopplerDN404.mjs.map +0 -1
  51. package/dist/abis/bytecodes/stateView.d.mts +0 -3
  52. package/dist/abis/bytecodes/stateView.d.ts +0 -3
  53. package/dist/abis/bytecodes/stateView.js +0 -9
  54. package/dist/abis/bytecodes/stateView.js.map +0 -1
  55. package/dist/abis/bytecodes/stateView.mjs +0 -3
  56. package/dist/abis/bytecodes/stateView.mjs.map +0 -1
  57. package/dist/abis/bytecodes.d.mts +0 -5
  58. package/dist/abis/bytecodes.d.ts +0 -5
  59. package/dist/abis/bytecodes.js +0 -33
  60. package/dist/abis/bytecodes.js.map +0 -1
  61. package/dist/abis/bytecodes.mjs +0 -8
  62. package/dist/abis/bytecodes.mjs.map +0 -1
  63. package/dist/abis/index.d.mts +0 -3871
  64. package/dist/abis/index.d.ts +0 -3871
  65. package/dist/abis/index.js +0 -130
  66. package/dist/abis/index.js.map +0 -1
  67. package/dist/abis/index.mjs +0 -9
  68. package/dist/abis/index.mjs.map +0 -1
  69. package/dist/addresses.d.mts +0 -69
  70. package/dist/addresses.d.ts +0 -69
  71. package/dist/addresses.js +0 -29
  72. package/dist/addresses.js.map +0 -1
  73. package/dist/addresses.mjs +0 -4
  74. package/dist/addresses.mjs.map +0 -1
  75. package/dist/builders/DynamicAuctionBuilder.d.mts +0 -138
  76. package/dist/builders/DynamicAuctionBuilder.d.ts +0 -138
  77. package/dist/builders/DynamicAuctionBuilder.js +0 -35
  78. package/dist/builders/DynamicAuctionBuilder.js.map +0 -1
  79. package/dist/builders/DynamicAuctionBuilder.mjs +0 -26
  80. package/dist/builders/DynamicAuctionBuilder.mjs.map +0 -1
  81. package/dist/builders/MulticurveBuilder.d.mts +0 -196
  82. package/dist/builders/MulticurveBuilder.d.ts +0 -196
  83. package/dist/builders/MulticurveBuilder.js +0 -35
  84. package/dist/builders/MulticurveBuilder.js.map +0 -1
  85. package/dist/builders/MulticurveBuilder.mjs +0 -26
  86. package/dist/builders/MulticurveBuilder.mjs.map +0 -1
  87. package/dist/builders/StaticAuctionBuilder.d.mts +0 -131
  88. package/dist/builders/StaticAuctionBuilder.d.ts +0 -131
  89. package/dist/builders/StaticAuctionBuilder.js +0 -35
  90. package/dist/builders/StaticAuctionBuilder.js.map +0 -1
  91. package/dist/builders/StaticAuctionBuilder.mjs +0 -26
  92. package/dist/builders/StaticAuctionBuilder.mjs.map +0 -1
  93. package/dist/builders/index.d.mts +0 -8
  94. package/dist/builders/index.d.ts +0 -8
  95. package/dist/builders/index.js +0 -62
  96. package/dist/builders/index.js.map +0 -1
  97. package/dist/builders/index.mjs +0 -29
  98. package/dist/builders/index.mjs.map +0 -1
  99. package/dist/builders/shared.d.mts +0 -115
  100. package/dist/builders/shared.d.ts +0 -115
  101. package/dist/builders/shared.js +0 -46
  102. package/dist/builders/shared.js.map +0 -1
  103. package/dist/builders/shared.mjs +0 -25
  104. package/dist/builders/shared.mjs.map +0 -1
  105. package/dist/chunk-25GEBO3B.mjs +0 -219
  106. package/dist/chunk-25GEBO3B.mjs.map +0 -1
  107. package/dist/chunk-2A3B3NVB.js +0 -737
  108. package/dist/chunk-2A3B3NVB.js.map +0 -1
  109. package/dist/chunk-3NMGCQJ4.mjs +0 -6
  110. package/dist/chunk-3NMGCQJ4.mjs.map +0 -1
  111. package/dist/chunk-44CYUEPG.js +0 -377
  112. package/dist/chunk-44CYUEPG.js.map +0 -1
  113. package/dist/chunk-4VWQNNNW.js +0 -233
  114. package/dist/chunk-4VWQNNNW.js.map +0 -1
  115. package/dist/chunk-4XN6DQBW.js +0 -4
  116. package/dist/chunk-5GQJRNFL.mjs +0 -40
  117. package/dist/chunk-5GQJRNFL.mjs.map +0 -1
  118. package/dist/chunk-5JHXBDZD.js +0 -265
  119. package/dist/chunk-5JHXBDZD.js.map +0 -1
  120. package/dist/chunk-5TQOT6CW.js +0 -8
  121. package/dist/chunk-5TQOT6CW.js.map +0 -1
  122. package/dist/chunk-65CESA3J.js +0 -46
  123. package/dist/chunk-65CESA3J.js.map +0 -1
  124. package/dist/chunk-6BQY5EPB.js +0 -144
  125. package/dist/chunk-6BQY5EPB.js.map +0 -1
  126. package/dist/chunk-6H6X3VTZ.js +0 -18
  127. package/dist/chunk-6H6X3VTZ.js.map +0 -1
  128. package/dist/chunk-7A4DBBXA.js +0 -311
  129. package/dist/chunk-7A4DBBXA.js.map +0 -1
  130. package/dist/chunk-7M57PU6V.js +0 -28
  131. package/dist/chunk-7M57PU6V.js.map +0 -1
  132. package/dist/chunk-7ZUV6WPX.mjs +0 -3
  133. package/dist/chunk-7ZUV6WPX.mjs.map +0 -1
  134. package/dist/chunk-A2CJYRRQ.js +0 -330
  135. package/dist/chunk-A2CJYRRQ.js.map +0 -1
  136. package/dist/chunk-ABT6AT7C.mjs +0 -16
  137. package/dist/chunk-ABT6AT7C.mjs.map +0 -1
  138. package/dist/chunk-BK3S6SVR.js +0 -2707
  139. package/dist/chunk-BK3S6SVR.js.map +0 -1
  140. package/dist/chunk-BQZTELUX.js +0 -45
  141. package/dist/chunk-BQZTELUX.js.map +0 -1
  142. package/dist/chunk-CFAAYL5M.mjs +0 -26
  143. package/dist/chunk-CFAAYL5M.mjs.map +0 -1
  144. package/dist/chunk-CFXXUZJY.js +0 -275
  145. package/dist/chunk-CFXXUZJY.js.map +0 -1
  146. package/dist/chunk-CWTGQAOG.mjs +0 -72
  147. package/dist/chunk-CWTGQAOG.mjs.map +0 -1
  148. package/dist/chunk-DCWF3EMP.js +0 -171
  149. package/dist/chunk-DCWF3EMP.js.map +0 -1
  150. package/dist/chunk-DOUF6NON.mjs +0 -3
  151. package/dist/chunk-DOUF6NON.mjs.map +0 -1
  152. package/dist/chunk-DQJXCZU2.mjs +0 -318
  153. package/dist/chunk-DQJXCZU2.mjs.map +0 -1
  154. package/dist/chunk-DSYPZETD.js +0 -4
  155. package/dist/chunk-DSYPZETD.js.map +0 -1
  156. package/dist/chunk-F2BYG63D.mjs +0 -145
  157. package/dist/chunk-F2BYG63D.mjs.map +0 -1
  158. package/dist/chunk-FNUBKONK.js +0 -291
  159. package/dist/chunk-FNUBKONK.js.map +0 -1
  160. package/dist/chunk-FOESYJP3.mjs +0 -3
  161. package/dist/chunk-FOESYJP3.mjs.map +0 -1
  162. package/dist/chunk-FXTGIKQG.mjs +0 -3
  163. package/dist/chunk-FXTGIKQG.mjs.map +0 -1
  164. package/dist/chunk-GSBQIVME.mjs +0 -278
  165. package/dist/chunk-GSBQIVME.mjs.map +0 -1
  166. package/dist/chunk-H3B54PFV.mjs +0 -17
  167. package/dist/chunk-H3B54PFV.mjs.map +0 -1
  168. package/dist/chunk-HJFVRV47.js +0 -120
  169. package/dist/chunk-HJFVRV47.js.map +0 -1
  170. package/dist/chunk-IIM2CSDQ.js +0 -147
  171. package/dist/chunk-IIM2CSDQ.js.map +0 -1
  172. package/dist/chunk-IUTIHSLH.mjs +0 -295
  173. package/dist/chunk-IUTIHSLH.mjs.map +0 -1
  174. package/dist/chunk-IUZ3BBQP.mjs +0 -117
  175. package/dist/chunk-IUZ3BBQP.mjs.map +0 -1
  176. package/dist/chunk-IWJOPXYN.mjs +0 -96
  177. package/dist/chunk-IWJOPXYN.mjs.map +0 -1
  178. package/dist/chunk-IX4V4UGW.mjs +0 -141
  179. package/dist/chunk-IX4V4UGW.mjs.map +0 -1
  180. package/dist/chunk-J62YDWIK.js +0 -8
  181. package/dist/chunk-J62YDWIK.js.map +0 -1
  182. package/dist/chunk-JIKAD4YL.js +0 -4
  183. package/dist/chunk-JIKAD4YL.js.map +0 -1
  184. package/dist/chunk-JLUOFAE4.mjs +0 -2531
  185. package/dist/chunk-JLUOFAE4.mjs.map +0 -1
  186. package/dist/chunk-KAZQJ24E.mjs +0 -59
  187. package/dist/chunk-KAZQJ24E.mjs.map +0 -1
  188. package/dist/chunk-KHUE77HC.js +0 -81
  189. package/dist/chunk-KHUE77HC.js.map +0 -1
  190. package/dist/chunk-KOAC3BBP.mjs +0 -11
  191. package/dist/chunk-KOAC3BBP.mjs.map +0 -1
  192. package/dist/chunk-LW3CYA27.mjs +0 -2705
  193. package/dist/chunk-LW3CYA27.mjs.map +0 -1
  194. package/dist/chunk-MEA2C5YX.js +0 -143
  195. package/dist/chunk-MEA2C5YX.js.map +0 -1
  196. package/dist/chunk-MU56HCUI.js +0 -2556
  197. package/dist/chunk-MU56HCUI.js.map +0 -1
  198. package/dist/chunk-OCIY7QEJ.mjs +0 -169
  199. package/dist/chunk-OCIY7QEJ.mjs.map +0 -1
  200. package/dist/chunk-OHA5KJ2M.mjs +0 -6
  201. package/dist/chunk-OHA5KJ2M.mjs.map +0 -1
  202. package/dist/chunk-P25HBGP5.mjs +0 -3
  203. package/dist/chunk-P25HBGP5.mjs.map +0 -1
  204. package/dist/chunk-P563HTVU.js +0 -164
  205. package/dist/chunk-P563HTVU.js.map +0 -1
  206. package/dist/chunk-P7CHGWY7.js +0 -4
  207. package/dist/chunk-P7CHGWY7.js.map +0 -1
  208. package/dist/chunk-PGYTMRP3.js +0 -277
  209. package/dist/chunk-PGYTMRP3.js.map +0 -1
  210. package/dist/chunk-QAPQGDWK.js +0 -8
  211. package/dist/chunk-QAPQGDWK.js.map +0 -1
  212. package/dist/chunk-QHBKRUBY.mjs +0 -328
  213. package/dist/chunk-QHBKRUBY.mjs.map +0 -1
  214. package/dist/chunk-QOYI7WCH.js +0 -120
  215. package/dist/chunk-QOYI7WCH.js.map +0 -1
  216. package/dist/chunk-QRTABC4Z.js +0 -8
  217. package/dist/chunk-QRTABC4Z.js.map +0 -1
  218. package/dist/chunk-QSQGLWNY.mjs +0 -3
  219. package/dist/chunk-QSQGLWNY.mjs.map +0 -1
  220. package/dist/chunk-QUBD6HUZ.mjs +0 -735
  221. package/dist/chunk-QUBD6HUZ.mjs.map +0 -1
  222. package/dist/chunk-RDTIXP6S.mjs +0 -263
  223. package/dist/chunk-RDTIXP6S.mjs.map +0 -1
  224. package/dist/chunk-RLOZWHRR.js +0 -320
  225. package/dist/chunk-RLOZWHRR.js.map +0 -1
  226. package/dist/chunk-RV64M4Q6.mjs +0 -3
  227. package/dist/chunk-RV64M4Q6.mjs.map +0 -1
  228. package/dist/chunk-SWWLOD7Q.mjs +0 -6
  229. package/dist/chunk-SWWLOD7Q.mjs.map +0 -1
  230. package/dist/chunk-T3UA4MJL.js +0 -4
  231. package/dist/chunk-T3UA4MJL.js.map +0 -1
  232. package/dist/chunk-TEWAXP5C.mjs +0 -162
  233. package/dist/chunk-TEWAXP5C.mjs.map +0 -1
  234. package/dist/chunk-THEIRDGE.mjs +0 -273
  235. package/dist/chunk-THEIRDGE.mjs.map +0 -1
  236. package/dist/chunk-U3GOWK6J.mjs +0 -6
  237. package/dist/chunk-U3GOWK6J.mjs.map +0 -1
  238. package/dist/chunk-UPVKABAV.js +0 -19
  239. package/dist/chunk-UPVKABAV.js.map +0 -1
  240. package/dist/chunk-VEIVYUYF.js +0 -4
  241. package/dist/chunk-VEIVYUYF.js.map +0 -1
  242. package/dist/chunk-VKSD3KXF.mjs +0 -275
  243. package/dist/chunk-VKSD3KXF.mjs.map +0 -1
  244. package/dist/chunk-VYSOAGRU.mjs +0 -6
  245. package/dist/chunk-VYSOAGRU.mjs.map +0 -1
  246. package/dist/chunk-WDC53TM7.mjs +0 -305
  247. package/dist/chunk-WDC53TM7.mjs.map +0 -1
  248. package/dist/chunk-WKWP42TD.mjs +0 -39
  249. package/dist/chunk-WKWP42TD.mjs.map +0 -1
  250. package/dist/chunk-WNUB3UTT.js +0 -241
  251. package/dist/chunk-WNUB3UTT.js.map +0 -1
  252. package/dist/chunk-WNWK2QMU.mjs +0 -375
  253. package/dist/chunk-WNWK2QMU.mjs.map +0 -1
  254. package/dist/chunk-WQHTNL5L.js +0 -4
  255. package/dist/chunk-WQHTNL5L.js.map +0 -1
  256. package/dist/chunk-WZF5XNBC.js +0 -297
  257. package/dist/chunk-WZF5XNBC.js.map +0 -1
  258. package/dist/chunk-X3UMAHOJ.js +0 -4
  259. package/dist/chunk-X3UMAHOJ.js.map +0 -1
  260. package/dist/chunk-XMFOZYNI.js +0 -8
  261. package/dist/chunk-XMFOZYNI.js.map +0 -1
  262. package/dist/chunk-XNMXN5SZ.mjs +0 -3
  263. package/dist/chunk-XNMXN5SZ.mjs.map +0 -1
  264. package/dist/chunk-XSJTASPK.js +0 -13
  265. package/dist/chunk-XSJTASPK.js.map +0 -1
  266. package/dist/chunk-YBK6EBA5.mjs +0 -239
  267. package/dist/chunk-YBK6EBA5.mjs.map +0 -1
  268. package/dist/chunk-YYLD3AJ7.js +0 -61
  269. package/dist/chunk-YYLD3AJ7.js.map +0 -1
  270. package/dist/chunk-ZEDJUNC6.mjs +0 -115
  271. package/dist/chunk-ZEDJUNC6.mjs.map +0 -1
  272. package/dist/constants.d.mts +0 -91
  273. package/dist/constants.d.ts +0 -91
  274. package/dist/constants.js +0 -196
  275. package/dist/constants.js.map +0 -1
  276. package/dist/constants.mjs +0 -3
  277. package/dist/constants.mjs.map +0 -1
  278. package/dist/deployments.generated.d.mts +0 -275
  279. package/dist/deployments.generated.d.ts +0 -275
  280. package/dist/deployments.generated.js +0 -12
  281. package/dist/deployments.generated.js.map +0 -1
  282. package/dist/deployments.generated.mjs +0 -3
  283. package/dist/deployments.generated.mjs.map +0 -1
  284. package/dist/entities/DopplerFactory.d.mts +0 -272
  285. package/dist/entities/DopplerFactory.d.ts +0 -272
  286. package/dist/entities/DopplerFactory.js +0 -34
  287. package/dist/entities/DopplerFactory.js.map +0 -1
  288. package/dist/entities/DopplerFactory.mjs +0 -25
  289. package/dist/entities/DopplerFactory.mjs.map +0 -1
  290. package/dist/entities/auction/DynamicAuction.d.mts +0 -72
  291. package/dist/entities/auction/DynamicAuction.d.ts +0 -72
  292. package/dist/entities/auction/DynamicAuction.js +0 -21
  293. package/dist/entities/auction/DynamicAuction.js.map +0 -1
  294. package/dist/entities/auction/DynamicAuction.mjs +0 -12
  295. package/dist/entities/auction/DynamicAuction.mjs.map +0 -1
  296. package/dist/entities/auction/MulticurvePool.d.mts +0 -78
  297. package/dist/entities/auction/MulticurvePool.d.ts +0 -78
  298. package/dist/entities/auction/MulticurvePool.js +0 -24
  299. package/dist/entities/auction/MulticurvePool.js.map +0 -1
  300. package/dist/entities/auction/MulticurvePool.mjs +0 -15
  301. package/dist/entities/auction/MulticurvePool.mjs.map +0 -1
  302. package/dist/entities/auction/RehypeDopplerHook.d.mts +0 -57
  303. package/dist/entities/auction/RehypeDopplerHook.d.ts +0 -57
  304. package/dist/entities/auction/RehypeDopplerHook.js +0 -34
  305. package/dist/entities/auction/RehypeDopplerHook.js.map +0 -1
  306. package/dist/entities/auction/RehypeDopplerHook.mjs +0 -25
  307. package/dist/entities/auction/RehypeDopplerHook.mjs.map +0 -1
  308. package/dist/entities/auction/RehypeDopplerHookMigrator.d.mts +0 -48
  309. package/dist/entities/auction/RehypeDopplerHookMigrator.d.ts +0 -48
  310. package/dist/entities/auction/RehypeDopplerHookMigrator.js +0 -34
  311. package/dist/entities/auction/RehypeDopplerHookMigrator.js.map +0 -1
  312. package/dist/entities/auction/RehypeDopplerHookMigrator.mjs +0 -25
  313. package/dist/entities/auction/RehypeDopplerHookMigrator.mjs.map +0 -1
  314. package/dist/entities/auction/StaticAuction.d.mts +0 -44
  315. package/dist/entities/auction/StaticAuction.d.ts +0 -44
  316. package/dist/entities/auction/StaticAuction.js +0 -21
  317. package/dist/entities/auction/StaticAuction.js.map +0 -1
  318. package/dist/entities/auction/StaticAuction.mjs +0 -12
  319. package/dist/entities/auction/StaticAuction.mjs.map +0 -1
  320. package/dist/entities/auction/index.d.mts +0 -9
  321. package/dist/entities/auction/index.d.ts +0 -9
  322. package/dist/entities/auction/index.js +0 -55
  323. package/dist/entities/auction/index.js.map +0 -1
  324. package/dist/entities/auction/index.mjs +0 -30
  325. package/dist/entities/auction/index.mjs.map +0 -1
  326. package/dist/entities/quoter/Quoter.d.mts +0 -150
  327. package/dist/entities/quoter/Quoter.d.ts +0 -150
  328. package/dist/entities/quoter/Quoter.js +0 -21
  329. package/dist/entities/quoter/Quoter.js.map +0 -1
  330. package/dist/entities/quoter/Quoter.mjs +0 -12
  331. package/dist/entities/quoter/Quoter.mjs.map +0 -1
  332. package/dist/entities/quoter/index.d.mts +0 -5
  333. package/dist/entities/quoter/index.d.ts +0 -5
  334. package/dist/entities/quoter/index.js +0 -22
  335. package/dist/entities/quoter/index.js.map +0 -1
  336. package/dist/entities/quoter/index.mjs +0 -13
  337. package/dist/entities/quoter/index.mjs.map +0 -1
  338. package/dist/entities/token/derc20/Derc20.d.mts +0 -102
  339. package/dist/entities/token/derc20/Derc20.d.ts +0 -102
  340. package/dist/entities/token/derc20/Derc20.js +0 -19
  341. package/dist/entities/token/derc20/Derc20.js.map +0 -1
  342. package/dist/entities/token/derc20/Derc20.mjs +0 -10
  343. package/dist/entities/token/derc20/Derc20.mjs.map +0 -1
  344. package/dist/entities/token/derc20/index.d.mts +0 -5
  345. package/dist/entities/token/derc20/index.d.ts +0 -5
  346. package/dist/entities/token/derc20/index.js +0 -20
  347. package/dist/entities/token/derc20/index.js.map +0 -1
  348. package/dist/entities/token/derc20/index.mjs +0 -11
  349. package/dist/entities/token/derc20/index.mjs.map +0 -1
  350. package/dist/entities/token/eth/Eth.d.mts +0 -54
  351. package/dist/entities/token/eth/Eth.d.ts +0 -54
  352. package/dist/entities/token/eth/Eth.js +0 -12
  353. package/dist/entities/token/eth/Eth.js.map +0 -1
  354. package/dist/entities/token/eth/Eth.mjs +0 -3
  355. package/dist/entities/token/eth/Eth.mjs.map +0 -1
  356. package/dist/entities/token/eth/index.d.mts +0 -5
  357. package/dist/entities/token/eth/index.d.ts +0 -5
  358. package/dist/entities/token/eth/index.js +0 -13
  359. package/dist/entities/token/eth/index.js.map +0 -1
  360. package/dist/entities/token/eth/index.mjs +0 -4
  361. package/dist/entities/token/eth/index.mjs.map +0 -1
  362. package/dist/entities/token/index.d.mts +0 -6
  363. package/dist/entities/token/index.d.ts +0 -6
  364. package/dist/entities/token/index.js +0 -27
  365. package/dist/entities/token/index.js.map +0 -1
  366. package/dist/entities/token/index.mjs +0 -14
  367. package/dist/entities/token/index.mjs.map +0 -1
  368. package/dist/index.d.mts +0 -39
  369. package/dist/index.d.ts +0 -39
  370. package/dist/index.js +0 -587
  371. package/dist/index.js.map +0 -1
  372. package/dist/index.mjs +0 -49
  373. package/dist/index.mjs.map +0 -1
  374. package/dist/types.d.mts +0 -662
  375. package/dist/types.d.ts +0 -662
  376. package/dist/types.js +0 -34
  377. package/dist/types.js.map +0 -1
  378. package/dist/types.mjs +0 -5
  379. package/dist/types.mjs.map +0 -1
  380. package/dist/utils/airlock.d.mts +0 -11
  381. package/dist/utils/airlock.d.ts +0 -11
  382. package/dist/utils/airlock.js +0 -26
  383. package/dist/utils/airlock.js.map +0 -1
  384. package/dist/utils/airlock.mjs +0 -5
  385. package/dist/utils/airlock.mjs.map +0 -1
  386. package/dist/utils/balanceDelta.d.mts +0 -10
  387. package/dist/utils/balanceDelta.d.ts +0 -10
  388. package/dist/utils/balanceDelta.js +0 -12
  389. package/dist/utils/balanceDelta.js.map +0 -1
  390. package/dist/utils/balanceDelta.mjs +0 -3
  391. package/dist/utils/balanceDelta.mjs.map +0 -1
  392. package/dist/utils/computeOptimalGamma.d.mts +0 -7
  393. package/dist/utils/computeOptimalGamma.d.ts +0 -7
  394. package/dist/utils/computeOptimalGamma.js +0 -12
  395. package/dist/utils/computeOptimalGamma.js.map +0 -1
  396. package/dist/utils/computeOptimalGamma.mjs +0 -3
  397. package/dist/utils/computeOptimalGamma.mjs.map +0 -1
  398. package/dist/utils/dopplerHookMigrator.d.mts +0 -18
  399. package/dist/utils/dopplerHookMigrator.d.ts +0 -18
  400. package/dist/utils/dopplerHookMigrator.js +0 -20
  401. package/dist/utils/dopplerHookMigrator.js.map +0 -1
  402. package/dist/utils/dopplerHookMigrator.mjs +0 -7
  403. package/dist/utils/dopplerHookMigrator.mjs.map +0 -1
  404. package/dist/utils/index.d.mts +0 -14
  405. package/dist/utils/index.d.ts +0 -14
  406. package/dist/utils/index.js +0 -197
  407. package/dist/utils/index.js.map +0 -1
  408. package/dist/utils/index.mjs +0 -24
  409. package/dist/utils/index.mjs.map +0 -1
  410. package/dist/utils/isToken0Expected.d.mts +0 -13
  411. package/dist/utils/isToken0Expected.d.ts +0 -13
  412. package/dist/utils/isToken0Expected.js +0 -12
  413. package/dist/utils/isToken0Expected.js.map +0 -1
  414. package/dist/utils/isToken0Expected.mjs +0 -3
  415. package/dist/utils/isToken0Expected.mjs.map +0 -1
  416. package/dist/utils/marketCapHelpers.d.mts +0 -259
  417. package/dist/utils/marketCapHelpers.d.ts +0 -259
  418. package/dist/utils/marketCapHelpers.js +0 -58
  419. package/dist/utils/marketCapHelpers.js.map +0 -1
  420. package/dist/utils/marketCapHelpers.mjs +0 -5
  421. package/dist/utils/marketCapHelpers.mjs.map +0 -1
  422. package/dist/utils/poolKey.d.mts +0 -17
  423. package/dist/utils/poolKey.d.ts +0 -17
  424. package/dist/utils/poolKey.js +0 -12
  425. package/dist/utils/poolKey.js.map +0 -1
  426. package/dist/utils/poolKey.mjs +0 -3
  427. package/dist/utils/poolKey.mjs.map +0 -1
  428. package/dist/utils/priceHelpers.d.mts +0 -86
  429. package/dist/utils/priceHelpers.d.ts +0 -86
  430. package/dist/utils/priceHelpers.js +0 -41
  431. package/dist/utils/priceHelpers.js.map +0 -1
  432. package/dist/utils/priceHelpers.mjs +0 -4
  433. package/dist/utils/priceHelpers.mjs.map +0 -1
  434. package/dist/utils/tickMath.d.mts +0 -72
  435. package/dist/utils/tickMath.d.ts +0 -72
  436. package/dist/utils/tickMath.js +0 -60
  437. package/dist/utils/tickMath.js.map +0 -1
  438. package/dist/utils/tickMath.mjs +0 -3
  439. package/dist/utils/tickMath.mjs.map +0 -1
  440. package/dist/utils/tokenAddressMiner.d.mts +0 -37
  441. package/dist/utils/tokenAddressMiner.d.ts +0 -37
  442. package/dist/utils/tokenAddressMiner.js +0 -19
  443. package/dist/utils/tokenAddressMiner.js.map +0 -1
  444. package/dist/utils/tokenAddressMiner.mjs +0 -10
  445. package/dist/utils/tokenAddressMiner.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/solana/core/tokenMetadata.ts","../../src/solana/core/marketCapHelpers.ts","../../src/solana/core/errors.ts","../../src/solana/instructions/initializeConfig.ts","../../src/solana/instructions/initializePool.ts","../../src/solana/instructions/initializeOracle.ts","../../src/solana/instructions/setFees.ts","../../src/solana/instructions/setSentinel.ts","../../src/solana/instructions/setRoute.ts","../../src/solana/instructions/pause.ts","../../src/solana/instructions/unpause.ts","../../src/solana/instructions/transferAdmin.ts","../../src/solana/instructions/skim.ts","../../src/solana/instructions/swapExactIn.ts","../../src/solana/instructions/createPosition.ts","../../src/solana/instructions/closePosition.ts","../../src/solana/instructions/addLiquidity.ts","../../src/solana/instructions/removeLiquidity.ts","../../src/solana/instructions/collectProtocolFees.ts","../../src/solana/instructions/oracleUpdate.ts","../../src/solana/instructions/oracleConsult.ts","../../src/solana/instructions/quoteToNumeraire.ts","../../src/solana/client/config.ts","../../src/solana/initializer/index.ts","../../src/solana/initializer/constants.ts","../../src/solana/generated/initializer/accounts/initConfig.ts","../../src/solana/generated/initializer/types/calldataBuf.ts","../../src/solana/generated/initializer/types/initializeConfigArgs.ts","../../src/solana/generated/initializer/types/initializeLaunchArgs.ts","../../src/solana/generated/initializer/accounts/launch.ts","../../src/solana/generated/initializer/instructions/curveSwapExactIn.ts","../../src/solana/generated/initializer/instructions/initializeConfig.ts","../../src/solana/generated/initializer/instructions/initializeLaunch.ts","../../src/solana/generated/initializer/instructions/previewSwapExactIn.ts","../../src/solana/generated/initializer/instructions/setMigratorAllowlist.ts","../../src/solana/generated/initializer/instructions/setSentinelAllowlist.ts","../../src/solana/generated/initializer/errors/initializer.ts","../../src/solana/initializer/pda.ts","../../src/solana/initializer/instructions/initializeConfig.ts","../../src/solana/initializer/instructions/setMigratorAllowlist.ts","../../src/solana/initializer/instructions/setSentinelAllowlist.ts","../../src/solana/initializer/instructions/initializeLaunch.ts","../../src/solana/initializer/instructions/curveSwapExactIn.ts","../../src/solana/initializer/instructions/migrateLaunch.ts","../../src/solana/initializer/instructions/abortLaunch.ts","../../src/solana/initializer/instructions/previewSwapExactIn.ts","../../src/solana/initializer/instructions/previewMigration.ts","../../src/solana/initializer/client/launch.ts","../../src/solana/migrators/cpmmMigrator/index.ts","../../src/solana/generated/cpmmMigrator/types/migrateArgs.ts","../../src/solana/generated/cpmmMigrator/types/recipient.ts","../../src/solana/generated/cpmmMigrator/types/registerLaunchArgs.ts","../../src/solana/generated/cpmmMigrator/accounts/cpmmMigratorState.ts","../../src/solana/generated/cpmmMigrator/errors/cpmmMigrator.ts","../../src/solana/migrators/cpmmMigrator/constants.ts","../../src/solana/migrators/cpmmMigrator/pda.ts","../../src/solana/migrators/cpmmMigrator/client.ts"],"names":["CpmmErrorCode","getStructCodec","getU128Codec","getAddressCodec","MAX_SENTINEL_ALLOWLIST","SEED_CONFIG","SENTINEL_NO_CHANGE","SF_AFTER_SWAP","SF_BEFORE_SWAP","createInitializeConfigInstruction","getConfigAddress","getStructEncoder","fixEncoderSize","getBytesEncoder","getStructDecoder","fixDecoderSize","getBytesDecoder","getArrayEncoder","getAddressEncoder","getArrayDecoder","getAddressDecoder","combineCodec","getU8Encoder","getU64Encoder","getU16Encoder","getU8Decoder","getU64Decoder","getU16Decoder","transformEncoder","getU32Encoder","getU32Decoder","addEncoderSizePrefix","getUtf8Encoder","addressCodec","textEncoder","getProgramDerivedAddress","isTransactionSigner","createSignerAccountMeta","createAccountMeta","getU64Codec","base64ToBytes","address","getOptionEncoder","getU128Encoder","getOptionDecoder","getU128Decoder"],"mappings":"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","file":"index.js","sourcesContent":["import {\n getAddressCodec,\n getProgramDerivedAddress,\n type Address,\n type ProgramDerivedAddress,\n} from '@solana/kit';\nimport { TOKEN_METADATA_PROGRAM_ID } from './constants.js';\n\nconst addressCodec = getAddressCodec();\nconst textEncoder = new TextEncoder();\n\n/**\n * Derive Metaplex Token Metadata PDA for a given mint.\n *\n * Seeds: ['metadata', token_metadata_program_id, mint]\n */\nexport async function getMetadataAddress(\n mint: Address,\n): Promise<ProgramDerivedAddress> {\n return getProgramDerivedAddress({\n programAddress: TOKEN_METADATA_PROGRAM_ID,\n seeds: [\n textEncoder.encode('metadata'),\n addressCodec.encode(TOKEN_METADATA_PROGRAM_ID),\n addressCodec.encode(mint),\n ],\n });\n}\n","/**\n * Market cap conversion utilities for Solana token launches.\n *\n * Converts between human-readable market cap values (USD) and the raw\n * curve parameters used by the initializer program.\n *\n * For an XYK bonding curve the marginal spot price at any point is:\n *\n * spotPrice (quote/base, raw units) = (quoteReserve + curveVirtualQuote)\n * / (baseReserve + curveVirtualBase)\n *\n * At launch open (quoteReserve = 0, baseReserve = baseForCurve):\n *\n * spotPrice = curveVirtualQuote / (baseForCurve + curveVirtualBase)\n *\n * Adjusted for decimals and numeraire price:\n *\n * spotPriceUSD = spotPrice * 10^(baseDecimals - quoteDecimals) * numerairePriceUSD\n *\n * Market cap (FDV) is then:\n *\n * marketCap = spotPriceUSD * (baseTotalSupply / 10^baseDecimals)\n */\n\nimport type {\n MarketCapValidationResult,\n CurveParams,\n MarketCapToCurveParamsInput,\n CurveParamsToMarketCapInput,\n} from './types.js';\n\nexport type {\n MarketCapValidationResult,\n CurveParams,\n MarketCapToCurveParamsInput,\n CurveParamsToMarketCapInput,\n};\n\n// ============================================================================\n// Primitive helpers\n// ============================================================================\n\n/**\n * Convert a market cap (USD) and total supply to a per-token price (USD).\n *\n * @example\n * // $1M market cap, 1B tokens with 6 decimals\n * marketCapToTokenPrice(1_000_000, 1_000_000_000n * 10n**6n, 6)\n * // => 0.001\n */\nexport function marketCapToTokenPrice(\n marketCapUSD: number,\n baseTotalSupply: bigint,\n baseDecimals: number,\n): number {\n if (marketCapUSD <= 0) {\n throw new Error('Market cap must be positive');\n }\n if (baseTotalSupply <= 0n) {\n throw new Error('Token supply must be positive');\n }\n\n const supplyNum = Number(baseTotalSupply) / 10 ** baseDecimals;\n return marketCapUSD / supplyNum;\n}\n\n/**\n * Validate market cap parameters and return warnings for unusual values.\n * Does not throw — callers can decide whether to surface warnings to users.\n *\n * @example\n * const { valid, warnings } = validateMarketCapParameters(500, supply, 6);\n * if (!valid) console.warn(warnings);\n */\nexport function validateMarketCapParameters(\n marketCapUSD: number,\n baseTotalSupply: bigint,\n baseDecimals: number,\n): MarketCapValidationResult {\n const warnings: string[] = [];\n\n if (marketCapUSD < 1_000) {\n warnings.push(\n `Market cap $${marketCapUSD.toLocaleString()} is very small. Verify this is intentional.`,\n );\n }\n\n if (marketCapUSD > 1_000_000_000_000) {\n warnings.push(\n `Market cap $${marketCapUSD.toLocaleString()} exceeds $1T. Verify this is correct.`,\n );\n }\n\n const tokenPriceUSD = marketCapToTokenPrice(\n marketCapUSD,\n baseTotalSupply,\n baseDecimals,\n );\n\n if (tokenPriceUSD < 0.000_001) {\n warnings.push(\n `Implied token price $${tokenPriceUSD.toExponential(2)} is very small. This may cause precision issues.`,\n );\n }\n\n if (tokenPriceUSD > 1_000_000) {\n warnings.push(\n `Implied token price $${tokenPriceUSD.toLocaleString()} is very large. Verify token supply and market cap.`,\n );\n }\n\n return { valid: warnings.length === 0, warnings };\n}\n\n// ============================================================================\n// Market cap ↔ curve virtual reserves\n// ============================================================================\n\n/**\n * Convert a market cap range (USD) to XYK curve virtual reserve parameters.\n *\n * Returns `{ curveVirtualBase, curveVirtualQuote }` for both the start (open)\n * and end (graduation) prices, ready to pass into `InitializeLaunchArgs`.\n *\n * `baseForCurve` is the number of base tokens allocated to the curve vault\n * (baseTotalSupply - baseForDistribution - baseForLiquidity). It determines\n * the correct initial spot price alongside the virtual reserves.\n *\n * `virtualBase` defaults to `baseForCurve`. A larger value gives finer price\n * granularity at the cost of a proportionally larger `curveVirtualQuote`.\n *\n * @example\n * const totalSupply = 1_000_000_000n * 10n ** 6n;\n * const { start, end } = marketCapToCurveParams({\n * startMarketCapUSD: 100_000,\n * endMarketCapUSD: 5_000_000,\n * baseTotalSupply: totalSupply,\n * baseForCurve: totalSupply, // no distribution or liquidity allocation\n * baseDecimals: 6,\n * quoteDecimals: 9, // SOL\n * numerairePriceUSD: 150,\n * });\n * // Use start.curveVirtualBase / start.curveVirtualQuote in InitializeLaunchArgs\n */\nexport function marketCapToCurveParams(input: MarketCapToCurveParamsInput): {\n start: CurveParams;\n end: CurveParams;\n} {\n const {\n startMarketCapUSD,\n endMarketCapUSD,\n baseTotalSupply,\n baseForCurve,\n baseDecimals,\n quoteDecimals,\n numerairePriceUSD,\n virtualBase,\n } = input;\n\n if (startMarketCapUSD <= 0)\n throw new Error('startMarketCapUSD must be positive');\n if (endMarketCapUSD <= 0) throw new Error('endMarketCapUSD must be positive');\n if (startMarketCapUSD >= endMarketCapUSD) {\n throw new Error('startMarketCapUSD must be less than endMarketCapUSD');\n }\n if (baseForCurve <= 0n) throw new Error('baseForCurve must be positive');\n if (baseForCurve > baseTotalSupply)\n throw new Error('baseForCurve cannot exceed baseTotalSupply');\n if (numerairePriceUSD <= 0)\n throw new Error('numerairePriceUSD must be positive');\n\n const canonicalVirtualBase =\n virtualBase !== undefined && virtualBase > 0n ? virtualBase : baseForCurve;\n\n return {\n start: _marketCapToCurveParams(\n startMarketCapUSD,\n baseTotalSupply,\n baseForCurve,\n baseDecimals,\n quoteDecimals,\n numerairePriceUSD,\n canonicalVirtualBase,\n ),\n end: _marketCapToCurveParams(\n endMarketCapUSD,\n baseTotalSupply,\n baseForCurve,\n baseDecimals,\n quoteDecimals,\n numerairePriceUSD,\n canonicalVirtualBase,\n ),\n };\n}\n\n/**\n * Convert a single market cap (USD) to XYK curve virtual reserve parameters.\n * Use `marketCapToCurveParams` for a full start/end range.\n */\nexport function marketCapToSingleCurveParams(\n marketCapUSD: number,\n baseTotalSupply: bigint,\n baseForCurve: bigint,\n baseDecimals: number,\n quoteDecimals: number,\n numerairePriceUSD: number,\n virtualBase?: bigint,\n): CurveParams {\n if (marketCapUSD <= 0) throw new Error('marketCapUSD must be positive');\n if (baseForCurve <= 0n) throw new Error('baseForCurve must be positive');\n if (baseForCurve > baseTotalSupply)\n throw new Error('baseForCurve cannot exceed baseTotalSupply');\n if (numerairePriceUSD <= 0)\n throw new Error('numerairePriceUSD must be positive');\n\n const canonicalVirtualBase =\n virtualBase !== undefined && virtualBase > 0n ? virtualBase : baseForCurve;\n\n return _marketCapToCurveParams(\n marketCapUSD,\n baseTotalSupply,\n baseForCurve,\n baseDecimals,\n quoteDecimals,\n numerairePriceUSD,\n canonicalVirtualBase,\n );\n}\n\n/**\n * Derive the current market cap (USD) from live XYK curve state.\n *\n * Pass the virtual reserves from the `Launch` account and the current token\n * vault balances (`baseReserve`, `quoteReserve`) to get the live spot price.\n *\n * @example\n * const launch = await fetchLaunch(connection, launchAddress);\n * const [baseVaultBalance, quoteVaultBalance] = await Promise.all([\n * getTokenAccountBalance(connection, launch.baseVault),\n * getTokenAccountBalance(connection, launch.quoteVault),\n * ]);\n * // baseReserve is the curve-available portion, excluding reserved allocations\n * const baseReserve = baseVaultBalance - launch.baseForDistribution - launch.baseForLiquidity;\n * const mcap = curveParamsToMarketCap({\n * curveVirtualBase: launch.curveVirtualBase,\n * curveVirtualQuote: launch.curveVirtualQuote,\n * baseReserve,\n * quoteReserve: quoteVaultBalance,\n * baseTotalSupply: launch.baseTotalSupply,\n * baseDecimals: 6,\n * quoteDecimals: 9,\n * numerairePriceUSD: 150,\n * });\n */\nexport function curveParamsToMarketCap(\n input: CurveParamsToMarketCapInput,\n): number {\n const {\n curveVirtualBase,\n curveVirtualQuote,\n baseReserve,\n quoteReserve,\n baseTotalSupply,\n baseDecimals,\n quoteDecimals,\n numerairePriceUSD,\n } = input;\n\n if (curveVirtualBase <= 0n)\n throw new Error('curveVirtualBase must be positive');\n if (curveVirtualQuote <= 0n)\n throw new Error('curveVirtualQuote must be positive');\n if (baseReserve < 0n) throw new Error('baseReserve must be non-negative');\n if (quoteReserve < 0n) throw new Error('quoteReserve must be non-negative');\n\n const spotPriceUSD = _spotPriceUSD(\n curveVirtualBase,\n curveVirtualQuote,\n baseReserve,\n quoteReserve,\n baseDecimals,\n quoteDecimals,\n numerairePriceUSD,\n );\n\n const supplyHuman = Number(baseTotalSupply) / 10 ** baseDecimals;\n return spotPriceUSD * supplyHuman;\n}\n\n// ============================================================================\n// Internal\n// ============================================================================\n\nfunction _marketCapToCurveParams(\n marketCapUSD: number,\n baseTotalSupply: bigint,\n baseForCurve: bigint,\n baseDecimals: number,\n quoteDecimals: number,\n numerairePriceUSD: number,\n curveVirtualBase: bigint,\n): CurveParams {\n const tokenPriceUSD = marketCapToTokenPrice(\n marketCapUSD,\n baseTotalSupply,\n baseDecimals,\n );\n const priceInNumeraire = tokenPriceUSD / numerairePriceUSD;\n\n // Convert to raw units: quote_units / base_units\n const decimalScale = 10 ** (quoteDecimals - baseDecimals);\n const rawPriceQuotePerBase = priceInNumeraire * decimalScale;\n\n // spot price = virtual_quote / (baseForCurve + virtual_base)\n // => virtual_quote = rawPrice * (baseForCurve + virtual_base)\n const effectiveDenominator = baseForCurve + curveVirtualBase;\n\n const PRECISION = 1_000_000_000n;\n const rawPriceScaled = BigInt(\n Math.round(rawPriceQuotePerBase * Number(PRECISION)),\n );\n const curveVirtualQuote = (effectiveDenominator * rawPriceScaled) / PRECISION;\n\n if (curveVirtualQuote <= 0n) {\n throw new Error(\n `Computed curveVirtualQuote is zero or negative for marketCap=$${marketCapUSD.toLocaleString()}. ` +\n `Try a higher market cap or larger virtualBase.`,\n );\n }\n\n return { curveVirtualBase, curveVirtualQuote };\n}\n\nfunction _spotPriceUSD(\n curveVirtualBase: bigint,\n curveVirtualQuote: bigint,\n baseReserve: bigint,\n quoteReserve: bigint,\n baseDecimals: number,\n quoteDecimals: number,\n numerairePriceUSD: number,\n): number {\n // spot price (quote/base) = (quoteReserve + virtualQuote) / (baseReserve + virtualBase)\n const effBase = Number(baseReserve + curveVirtualBase);\n const effQuote = Number(quoteReserve + curveVirtualQuote);\n const rawRatio = effQuote / effBase;\n\n // adjust for decimals → numeraire per token (human units)\n const decimalScale = 10 ** (baseDecimals - quoteDecimals);\n return rawRatio * decimalScale * numerairePriceUSD;\n}\n","/**\n * CPMM program error codes\n *\n * These correspond to the CpmmError enum in the on-chain program.\n * Anchor errors start at 6000 (0x1770).\n */\nexport enum CpmmErrorCode {\n /** Unauthorized - caller lacks required authority */\n Unauthorized = 6000,\n /** Pool is currently locked (reentrancy protection) */\n PoolLocked = 6001,\n /** Invalid fee value (exceeds max or invalid range) */\n InvalidFee = 6002,\n /** Invalid fee split value (exceeds max or invalid range) */\n InvalidFeeSplit = 6003,\n /** Invalid swap direction (must be 0 or 1) */\n InvalidDirection = 6004,\n /** Insufficient liquidity for operation */\n InsufficientLiquidity = 6005,\n /** Output amount less than minimum (slippage exceeded) */\n SlippageExceeded = 6006,\n /** Math operation overflowed */\n MathOverflow = 6007,\n /** Mints not in canonical order */\n InvalidMintOrder = 6008,\n /** Cannot create pool with identical tokens */\n SameMintPair = 6009,\n /** Vault account invalid or mismatch */\n InvalidVault = 6010,\n /** Position account invalid or mismatch */\n InvalidPosition = 6011,\n /** Cannot close position with non-zero shares or fees */\n PositionNotEmpty = 6012,\n /** Invalid route configuration */\n InvalidRoute = 6013,\n /** Not supported in v0.1 */\n NotSupportedInV0_1 = 6014,\n /** Oracle not initialized for this pool */\n OracleNotInitialized = 6015,\n /** Zero shares out */\n ZeroSharesOut = 6016,\n /** Sentinel program rejected the operation */\n SentinelRejected = 6017,\n /** Sentinel CPI call failed */\n SentinelCpiFailed = 6018,\n /** Sentinel program account not provided */\n SentinelProgramNotProvided = 6019,\n /** Sentinel program account is not executable */\n SentinelProgramNotExecutable = 6020,\n /** Sentinel return data missing or wrong program id */\n SentinelReturnDataMissing = 6021,\n /** Sentinel return data invalid length or could not deserialize */\n SentinelReturnDataInvalid = 6022,\n /** Sentinel program not in allowlist */\n SentinelNotAllowlisted = 6023,\n /** Pool has zero shares (no liquidity) */\n TotalSharesZero = 6024,\n /** Amount cannot be zero */\n AmountZero = 6025,\n /** Pool is paused by admin */\n Paused = 6026,\n /** Internal invariant violation */\n InvariantViolation = 6027,\n /** Invalid mint address */\n InvalidMint = 6028,\n /** Invalid input parameter */\n InvalidInput = 6029,\n /** Reentrancy detected */\n Reentrancy = 6030,\n}\n\n/**\n * Human-readable error messages\n */\nexport const CPMM_ERROR_MESSAGES: Record<CpmmErrorCode, string> = {\n [CpmmErrorCode.Unauthorized]: 'Unauthorized: Caller lacks required authority',\n [CpmmErrorCode.PoolLocked]:\n 'Pool is currently locked (reentrancy protection)',\n [CpmmErrorCode.InvalidFee]:\n 'Invalid fee value (exceeds max or invalid range)',\n [CpmmErrorCode.InvalidFeeSplit]:\n 'Invalid fee split value (exceeds max or invalid range)',\n [CpmmErrorCode.InvalidDirection]: 'Invalid swap direction (must be 0 or 1)',\n [CpmmErrorCode.InsufficientLiquidity]:\n 'Insufficient liquidity for this operation',\n [CpmmErrorCode.SlippageExceeded]:\n 'Slippage exceeded: Output amount less than minimum',\n [CpmmErrorCode.MathOverflow]: 'Math operation overflowed',\n [CpmmErrorCode.InvalidMintOrder]: 'Token mints not in canonical order',\n [CpmmErrorCode.SameMintPair]: 'Cannot create pool with identical tokens',\n [CpmmErrorCode.InvalidVault]: 'Vault account is invalid or does not match',\n [CpmmErrorCode.InvalidPosition]:\n 'Position account is invalid or does not match',\n [CpmmErrorCode.PositionNotEmpty]:\n 'Cannot close position with non-zero shares or fees',\n [CpmmErrorCode.InvalidRoute]: 'Invalid route configuration',\n [CpmmErrorCode.NotSupportedInV0_1]: 'Not supported in v0.1',\n [CpmmErrorCode.OracleNotInitialized]: 'Oracle not initialized for this pool',\n [CpmmErrorCode.ZeroSharesOut]: 'Zero shares out',\n [CpmmErrorCode.SentinelRejected]: 'Sentinel program rejected the operation',\n [CpmmErrorCode.SentinelCpiFailed]: 'Sentinel CPI call failed',\n [CpmmErrorCode.SentinelProgramNotProvided]:\n 'Sentinel program account not provided',\n [CpmmErrorCode.SentinelProgramNotExecutable]:\n 'Sentinel program account is not executable',\n [CpmmErrorCode.SentinelReturnDataMissing]:\n 'Sentinel return data missing or wrong program id',\n [CpmmErrorCode.SentinelReturnDataInvalid]:\n 'Sentinel return data invalid length or could not deserialize',\n [CpmmErrorCode.SentinelNotAllowlisted]: 'Sentinel program not in allowlist',\n [CpmmErrorCode.TotalSharesZero]: 'Pool has zero shares (no liquidity)',\n [CpmmErrorCode.AmountZero]: 'Amount cannot be zero',\n [CpmmErrorCode.Paused]: 'Pool is paused by admin',\n [CpmmErrorCode.InvariantViolation]: 'Internal invariant violation',\n [CpmmErrorCode.InvalidMint]: 'Invalid mint address',\n [CpmmErrorCode.InvalidInput]: 'Invalid input parameter',\n [CpmmErrorCode.Reentrancy]: 'Reentrancy detected',\n};\n\n/**\n * Custom error class for CPMM program errors\n */\nexport class CpmmError extends Error {\n constructor(\n public readonly code: CpmmErrorCode,\n public readonly logs?: string[],\n ) {\n super(CPMM_ERROR_MESSAGES[code] || `Unknown CPMM error: ${code}`);\n this.name = 'CpmmError';\n }\n\n /**\n * Get the error code name\n */\n get codeName(): string {\n return CpmmErrorCode[this.code] || 'Unknown';\n }\n}\n\n/**\n * Parse error code from transaction logs\n */\nexport function parseErrorFromLogs(logs: string[]): CpmmError | null {\n // Look for Anchor error pattern: \"Program log: AnchorError ...\"\n // or custom error pattern: \"Program log: Error Code: ...\"\n for (const log of logs) {\n // Pattern 1: Anchor error with code\n const anchorMatch = log.match(\n /AnchorError.*Error Code:\\s*(\\w+)\\.\\s*Error Number:\\s*(\\d+)/,\n );\n if (anchorMatch) {\n const errorNumber = parseInt(anchorMatch[2], 10);\n if (errorNumber >= 6000 && errorNumber <= 6030) {\n return new CpmmError(errorNumber as CpmmErrorCode, logs);\n }\n }\n\n // Pattern 2: Error number in hex\n const hexMatch = log.match(/Error Number:\\s*0x([0-9a-fA-F]+)/);\n if (hexMatch) {\n const errorNumber = parseInt(hexMatch[1], 16);\n if (errorNumber >= 6000 && errorNumber <= 6030) {\n return new CpmmError(errorNumber as CpmmErrorCode, logs);\n }\n }\n\n // Pattern 3: Custom error message\n const customMatch = log.match(/Error Message:\\s*(.+)/);\n if (customMatch) {\n const message = customMatch[1].toLowerCase();\n // Try to match message to error code\n for (const [code, msg] of Object.entries(CPMM_ERROR_MESSAGES)) {\n if (\n msg.toLowerCase().includes(message) ||\n message.includes(msg.toLowerCase())\n ) {\n return new CpmmError(parseInt(code) as CpmmErrorCode, logs);\n }\n }\n }\n }\n\n return null;\n}\n\n/**\n * Check if an error code is a CPMM error\n */\nexport function isCpmmError(code: number): code is CpmmErrorCode {\n return code >= 6000 && code <= 6030;\n}\n\n/**\n * Get error message from code\n */\nexport function getErrorMessage(code: number): string {\n if (isCpmmError(code)) {\n return CPMM_ERROR_MESSAGES[code];\n }\n return `Unknown error code: ${code}`;\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n SYSTEM_PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_WRITABLE_SIGNER,\n} from '../core/constants.js';\nimport type { InitializeConfigArgs } from '../core/types.js';\nimport {\n initializeConfigArgsCodec,\n encodeInstructionData,\n} from '../core/codecs.js';\n\n/**\n * Accounts required for initialize_config instruction\n */\nexport interface InitializeConfigAccounts {\n /** AmmConfig account to initialize (writable, PDA: ['config']) */\n config: Address;\n /** Payer for account creation (writable, signer) */\n payer: Address;\n /** System program */\n systemProgram?: Address;\n}\n\n/**\n * Create an initialize_config instruction\n *\n * Initializes the global AMM configuration singleton. This should only be called once\n * per deployment to set up the admin, fees, and allowlist.\n *\n * @param accounts - Required accounts for initialization\n * @param args - Instruction arguments (admin, numeraireMint, fees, allowlist)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to initialize the config\n *\n * @example\n * ```ts\n * const [configAddress] = await getConfigAddress();\n * const ix = createInitializeConfigInstruction(\n * {\n * config: configAddress,\n * payer: payerPublicKey,\n * },\n * {\n * admin: adminPublicKey,\n * numeraireMint: usdcMint,\n * maxSwapFeeBps: 100,\n * maxFeeSplitBps: 5000,\n * maxRouteHops: 3,\n * protocolFeeEnabled: true,\n * protocolFeeBps: 500,\n * sentinelAllowlist: [],\n * }\n * );\n * ```\n */\nexport function createInitializeConfigInstruction(\n accounts: InitializeConfigAccounts,\n args: InitializeConfigArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const { config, payer, systemProgram = SYSTEM_PROGRAM_ID } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_WRITABLE },\n { address: payer, role: ACCOUNT_ROLE_WRITABLE_SIGNER },\n { address: systemProgram, role: ACCOUNT_ROLE_READONLY },\n ];\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.initializeConfig,\n initializeConfigArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport type { TransactionSigner, AccountSignerMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n SYSTEM_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_WRITABLE_SIGNER,\n} from '../core/constants.js';\nimport type { InitializePoolArgs } from '../core/types.js';\nimport {\n initializePoolArgsCodec,\n encodeInstructionData,\n} from '../core/codecs.js';\n\n/** Type that can be either an Address or a TransactionSigner */\ntype AddressOrSigner = Address | TransactionSigner;\n\n/** Check if value is a TransactionSigner (duck typing) */\nfunction isTransactionSigner(\n value: AddressOrSigner,\n): value is TransactionSigner {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'address' in value &&\n 'signTransactions' in value\n );\n}\n\n/** Create an account meta, embedding signer if provided */\nfunction createSignerAccountMeta(\n value: AddressOrSigner,\n role: typeof ACCOUNT_ROLE_WRITABLE_SIGNER,\n): AccountMeta | AccountSignerMeta {\n if (isTransactionSigner(value)) {\n return {\n address: value.address,\n role,\n signer: value,\n };\n }\n return { address: value, role };\n}\n\n/**\n * Accounts required for initialize_pool instruction\n */\nexport interface InitializePoolAccounts {\n /** AmmConfig account (read-only) */\n config: Address;\n /** Pool account to initialize (writable, PDA: ['pool', token0_mint, token1_mint]) */\n pool: Address;\n /** Protocol position account (writable, PDA: ['protocol_position', pool]) */\n protocolPosition: Address;\n /** Pool authority PDA (read-only, PDA: ['authority', pool]) */\n authority: Address;\n /** Vault for token0 (writable signer - pass TransactionSigner to include signer in instruction) */\n vault0: Address | TransactionSigner;\n /** Vault for token1 (writable signer - pass TransactionSigner to include signer in instruction) */\n vault1: Address | TransactionSigner;\n /** Token0 mint (read-only, must be lexicographically smaller) */\n token0Mint: Address;\n /** Token1 mint (read-only, must be lexicographically larger) */\n token1Mint: Address;\n /** Payer for account creation (writable signer - pass TransactionSigner to include signer in instruction) */\n payer: Address | TransactionSigner;\n /** SPL Token program */\n tokenProgram?: Address;\n /** System program */\n systemProgram?: Address;\n /** Rent sysvar */\n rent: Address;\n}\n\n/**\n * Create an initialize_pool instruction\n *\n * Initializes a new trading pool for a token pair. The mints must be in canonical order\n * (token0 < token1 by bytes). Use sortMints() to ensure proper ordering.\n *\n * @param accounts - Required accounts for pool initialization\n * @param args - Instruction arguments (mintA, mintB, fees, liquidityMeasureSide, numeraire override)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to initialize the pool\n *\n * @example\n * ```ts\n * const addresses = await getPoolInitAddresses(mintA, mintB);\n * const ix = createInitializePoolInstruction(\n * {\n * config: addresses.config[0],\n * pool: addresses.pool[0],\n * protocolPosition: addresses.protocolPosition[0],\n * authority: addresses.authority[0],\n * vault0: vault0Keypair.publicKey,\n * vault1: vault1Keypair.publicKey,\n * token0Mint: addresses.token0,\n * token1Mint: addresses.token1,\n * payer: payerPublicKey,\n * rent: SYSVAR_RENT_PUBKEY,\n * },\n * {\n * mintA: mintA,\n * mintB: mintB,\n * initialSwapFeeBps: 30,\n * initialFeeSplitBps: 5000,\n * liquidityMeasureSide: 0,\n * numeraireMintOverride: null,\n * }\n * );\n * ```\n */\nexport function createInitializePoolInstruction(\n accounts: InitializePoolAccounts,\n args: InitializePoolArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const {\n config,\n pool,\n protocolPosition,\n authority,\n vault0,\n vault1,\n token0Mint,\n token1Mint,\n payer,\n tokenProgram = TOKEN_PROGRAM_ID,\n systemProgram = SYSTEM_PROGRAM_ID,\n rent,\n } = accounts;\n\n // Build account metas in order expected by the program\n // For signer accounts (vault0, vault1, payer), embed the signer if provided\n const keys: (AccountMeta | AccountSignerMeta)[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: pool, role: ACCOUNT_ROLE_WRITABLE },\n { address: protocolPosition, role: ACCOUNT_ROLE_WRITABLE },\n { address: authority, role: ACCOUNT_ROLE_READONLY },\n createSignerAccountMeta(vault0, ACCOUNT_ROLE_WRITABLE_SIGNER),\n createSignerAccountMeta(vault1, ACCOUNT_ROLE_WRITABLE_SIGNER),\n { address: token0Mint, role: ACCOUNT_ROLE_READONLY },\n { address: token1Mint, role: ACCOUNT_ROLE_READONLY },\n createSignerAccountMeta(payer, ACCOUNT_ROLE_WRITABLE_SIGNER),\n { address: tokenProgram, role: ACCOUNT_ROLE_READONLY },\n { address: systemProgram, role: ACCOUNT_ROLE_READONLY },\n { address: rent, role: ACCOUNT_ROLE_READONLY },\n ];\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.initializePool,\n initializePoolArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n SYSTEM_PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n ACCOUNT_ROLE_WRITABLE_SIGNER,\n} from '../core/constants.js';\nimport type { InitializeOracleArgs } from '../core/types.js';\nimport {\n initializeOracleArgsCodec,\n encodeInstructionData,\n} from '../core/codecs.js';\n\n/**\n * Accounts required for initialize_oracle instruction\n */\nexport interface InitializeOracleAccounts {\n /** AmmConfig account (read-only) */\n config: Address;\n /** Pool account (read-only) */\n pool: Address;\n /** Oracle PDA to initialize (writable, will be created) */\n oracle: Address;\n /** Admin authority (signer, must match config.admin) */\n admin: Address;\n /** Payer for account creation (signer, writable) */\n payer: Address;\n /** System program */\n systemProgram?: Address;\n}\n\n/**\n * Create an initialize_oracle instruction\n *\n * Initializes a TWAP oracle for a pool. The oracle tracks price movements\n * and stores observations for time-weighted average price calculations.\n *\n * @param accounts - Required accounts for the instruction\n * @param args - Instruction arguments (maxPriceChangeRatioQ64, observationIntervalSec, numObservations)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to initialize the oracle\n *\n * @example\n * ```ts\n * const ix = createInitializeOracleInstruction(\n * {\n * config: configAddress,\n * pool: poolAddress,\n * oracle: oracleAddress,\n * admin: adminPublicKey,\n * payer: payerPublicKey,\n * },\n * {\n * maxPriceChangeRatioQ64: 1n << 64n, // 100% max change per slot\n * observationIntervalSec: 60, // 1 minute between observations\n * numObservations: 64, // Must be MAX_ORACLE_OBSERVATIONS\n * }\n * );\n * ```\n */\nexport function createInitializeOracleInstruction(\n accounts: InitializeOracleAccounts,\n args: InitializeOracleArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const {\n config,\n pool,\n oracle,\n admin,\n payer,\n systemProgram = SYSTEM_PROGRAM_ID,\n } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: pool, role: ACCOUNT_ROLE_READONLY },\n { address: oracle, role: ACCOUNT_ROLE_WRITABLE },\n { address: admin, role: ACCOUNT_ROLE_SIGNER },\n { address: payer, role: ACCOUNT_ROLE_WRITABLE_SIGNER },\n { address: systemProgram, role: ACCOUNT_ROLE_READONLY },\n ];\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.initializeOracle,\n initializeOracleArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n} from '../core/constants.js';\nimport type { SetFeesArgs } from '../core/types.js';\nimport { setFeesArgsCodec, encodeInstructionData } from '../core/codecs.js';\n\n/**\n * Accounts required for set_fees instruction\n */\nexport interface SetFeesAccounts {\n /** AmmConfig account (read-only) */\n config: Address;\n /** Pool account (writable) */\n pool: Address;\n /** Admin authority (signer, must match config.admin) */\n admin: Address;\n}\n\n/**\n * Create a set_fees instruction\n *\n * Admin instruction to update the swap fee and fee split on a pool.\n * Fees will be clamped to the config's max values.\n *\n * @param accounts - Required accounts for setting fees\n * @param args - Instruction arguments (swapFeeBps, feeSplitBps)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to set fees\n *\n * @example\n * ```ts\n * const ix = createSetFeesInstruction(\n * {\n * config: configAddress,\n * pool: poolAddress,\n * admin: adminPublicKey,\n * },\n * {\n * swapFeeBps: 30, // 0.30% swap fee\n * feeSplitBps: 5000, // 50% of fees go to LPs (distributable)\n * }\n * );\n * ```\n */\nexport function createSetFeesInstruction(\n accounts: SetFeesAccounts,\n args: SetFeesArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const { config, pool, admin } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: pool, role: ACCOUNT_ROLE_WRITABLE },\n { address: admin, role: ACCOUNT_ROLE_SIGNER },\n ];\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.setFees,\n setFeesArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n} from '../core/constants.js';\nimport type { SetSentinelArgs } from '../core/types.js';\nimport { setSentinelArgsCodec, encodeInstructionData } from '../core/codecs.js';\n\n/**\n * Accounts required for set_sentinel instruction\n */\nexport interface SetSentinelAccounts {\n /** AmmConfig account (read-only) */\n config: Address;\n /** Pool account (writable) */\n pool: Address;\n /** Admin authority (signer, must match config.admin) */\n admin: Address;\n}\n\n/**\n * Create a set_sentinel instruction\n *\n * Admin instruction to configure a sentinel (hook) program on a pool.\n * The sentinel program must be in the config's allowlist (if the allowlist is non-empty).\n * Use Pubkey::default() to disable the sentinel.\n *\n * @param accounts - Required accounts for setting sentinel\n * @param args - Instruction arguments (sentinelProgram, sentinelFlags)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to set sentinel\n *\n * @example\n * ```ts\n * import { SF_BEFORE_SWAP, SF_AFTER_SWAP } from '@cpmm/sdk';\n *\n * const ix = createSetSentinelInstruction(\n * {\n * config: configAddress,\n * pool: poolAddress,\n * admin: adminPublicKey,\n * },\n * {\n * sentinelProgram: sentinelProgramId,\n * sentinelFlags: SF_BEFORE_SWAP | SF_AFTER_SWAP, // Enable both hooks\n * }\n * );\n * ```\n */\nexport function createSetSentinelInstruction(\n accounts: SetSentinelAccounts,\n args: SetSentinelArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const { config, pool, admin } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: pool, role: ACCOUNT_ROLE_WRITABLE },\n { address: admin, role: ACCOUNT_ROLE_SIGNER },\n ];\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.setSentinel,\n setSentinelArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n} from '../core/constants.js';\nimport type { SetRouteArgs } from '../core/types.js';\nimport { setRouteArgsCodec, encodeInstructionData } from '../core/codecs.js';\n\n/**\n * Accounts required for set_route instruction\n */\nexport interface SetRouteAccounts {\n /** AmmConfig account (read-only) */\n config: Address;\n /** Pool account (writable) */\n pool: Address;\n /** Next pool in routing chain (optional, required if setting a route) */\n nextPool?: Address;\n /** Admin authority (signer, must match config.admin) */\n admin: Address;\n}\n\n/**\n * Create a set_route instruction\n *\n * Admin instruction to configure routing for a pool. This allows multi-hop swaps\n * through a chain of pools. The bridge mint must exist in both the current pool\n * and the next pool.\n *\n * To clear routing, pass Pubkey::default() for both routeNextPool and routeBridgeMint.\n *\n * @param accounts - Required accounts for setting route\n * @param args - Instruction arguments (routeNextPool, routeBridgeMint)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to set route\n *\n * @example\n * ```ts\n * // Set up routing: Pool A -> Pool B via USDC\n * const ix = createSetRouteInstruction(\n * {\n * config: configAddress,\n * pool: poolAAddress,\n * nextPool: poolBAddress,\n * admin: adminPublicKey,\n * },\n * {\n * routeNextPool: poolBAddress,\n * routeBridgeMint: usdcMint, // Must be in both pools\n * }\n * );\n *\n * // Clear routing\n * const clearIx = createSetRouteInstruction(\n * {\n * config: configAddress,\n * pool: poolAddress,\n * admin: adminPublicKey,\n * },\n * {\n * routeNextPool: address('11111111111111111111111111111111'),\n * routeBridgeMint: address('11111111111111111111111111111111'),\n * }\n * );\n * ```\n */\nexport function createSetRouteInstruction(\n accounts: SetRouteAccounts,\n args: SetRouteArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const { config, pool, nextPool, admin } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: pool, role: ACCOUNT_ROLE_WRITABLE },\n ];\n\n // Add next_pool if provided (optional account)\n if (nextPool) {\n keys.push({ address: nextPool, role: ACCOUNT_ROLE_READONLY });\n }\n\n keys.push({ address: admin, role: ACCOUNT_ROLE_SIGNER });\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.setRoute,\n setRouteArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n} from '../core/constants.js';\n\n/**\n * Accounts required for pause instruction\n */\nexport interface PauseAccounts {\n /** AmmConfig account (writable) */\n config: Address;\n /** Admin authority (signer, must match config.admin) */\n admin: Address;\n}\n\n/**\n * Create a pause instruction\n *\n * Admin instruction to pause all pool operations globally. When paused,\n * swaps, liquidity additions, and liquidity removals will fail.\n *\n * @param accounts - Required accounts for pausing\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to pause the AMM\n *\n * @example\n * ```ts\n * const ix = createPauseInstruction({\n * config: configAddress,\n * admin: adminPublicKey,\n * });\n * ```\n */\nexport function createPauseInstruction(\n accounts: PauseAccounts,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const { config, admin } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_WRITABLE },\n { address: admin, role: ACCOUNT_ROLE_SIGNER },\n ];\n\n // No args for pause instruction, just the discriminator\n const data = INSTRUCTION_DISCRIMINATORS.pause;\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n} from '../core/constants.js';\n\n/**\n * Accounts required for unpause instruction\n */\nexport interface UnpauseAccounts {\n /** AmmConfig account (writable) */\n config: Address;\n /** Admin authority (signer, must match config.admin) */\n admin: Address;\n}\n\n/**\n * Create an unpause instruction\n *\n * Admin instruction to unpause all pool operations. This re-enables\n * swaps, liquidity additions, and liquidity removals after a pause.\n *\n * @param accounts - Required accounts for unpausing\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to unpause the AMM\n *\n * @example\n * ```ts\n * const ix = createUnpauseInstruction({\n * config: configAddress,\n * admin: adminPublicKey,\n * });\n * ```\n */\nexport function createUnpauseInstruction(\n accounts: UnpauseAccounts,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const { config, admin } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_WRITABLE },\n { address: admin, role: ACCOUNT_ROLE_SIGNER },\n ];\n\n // No args for unpause instruction, just the discriminator\n const data = INSTRUCTION_DISCRIMINATORS.unpause;\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n} from '../core/constants.js';\nimport type { TransferAdminArgs } from '../core/types.js';\nimport {\n transferAdminArgsCodec,\n encodeInstructionData,\n} from '../core/codecs.js';\n\n/**\n * Accounts required for transfer_admin instruction\n */\nexport interface TransferAdminAccounts {\n /** AmmConfig account (writable) */\n config: Address;\n /** Current admin authority (signer, must match config.admin) */\n admin: Address;\n}\n\n/**\n * Create a transfer_admin instruction\n *\n * Admin instruction to transfer administrative authority to a new address.\n * The new admin will have full control over the AMM configuration and all pools.\n *\n * CAUTION: This action is irreversible. Ensure the new admin address is correct\n * and that you have access to it before executing.\n *\n * @param accounts - Required accounts for transferring admin\n * @param args - Instruction arguments (newAdmin)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to transfer admin\n *\n * @example\n * ```ts\n * const ix = createTransferAdminInstruction(\n * {\n * config: configAddress,\n * admin: currentAdminPublicKey,\n * },\n * {\n * newAdmin: newAdminPublicKey,\n * }\n * );\n * ```\n */\nexport function createTransferAdminInstruction(\n accounts: TransferAdminAccounts,\n args: TransferAdminArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const { config, admin } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_WRITABLE },\n { address: admin, role: ACCOUNT_ROLE_SIGNER },\n ];\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.transferAdmin,\n transferAdminArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n} from '../core/constants.js';\n\n/**\n * Accounts required for skim instruction\n */\nexport interface SkimAccounts {\n /** AmmConfig account (read-only) */\n config: Address;\n /** Pool account (read-only) */\n pool: Address;\n /** Admin authority (signer, must match config.admin) */\n admin: Address;\n /** Pool authority PDA (read-only, PDA: ['authority', pool]) */\n authority: Address;\n /** Token0 vault (writable) */\n vault0: Address;\n /** Token1 vault (writable) */\n vault1: Address;\n /** Token0 mint (read-only) */\n token0Mint: Address;\n /** Token1 mint (read-only) */\n token1Mint: Address;\n /** Admin's token0 ATA to receive excess (writable) */\n adminAta0: Address;\n /** Admin's token1 ATA to receive excess (writable) */\n adminAta1: Address;\n /** SPL Token program */\n tokenProgram?: Address;\n}\n\n/**\n * Create a skim instruction\n *\n * Admin instruction to withdraw excess tokens from pool vaults. This recovers any\n * tokens that were accidentally sent directly to the vault accounts (outside of\n * normal pool operations).\n *\n * Only withdraws tokens in excess of (reserve + unclaimed_fees). Normal pool\n * reserves and LP fees are not affected.\n *\n * @param accounts - Required accounts for skimming\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to skim excess tokens\n *\n * @example\n * ```ts\n * const ix = createSkimInstruction({\n * config: configAddress,\n * pool: poolAddress,\n * admin: adminPublicKey,\n * authority: authorityAddress,\n * vault0: vault0Address,\n * vault1: vault1Address,\n * token0Mint: mint0,\n * token1Mint: mint1,\n * adminAta0: adminToken0Account,\n * adminAta1: adminToken1Account,\n * });\n * ```\n */\nexport function createSkimInstruction(\n accounts: SkimAccounts,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const {\n config,\n pool,\n admin,\n authority,\n vault0,\n vault1,\n token0Mint,\n token1Mint,\n adminAta0,\n adminAta1,\n tokenProgram = TOKEN_PROGRAM_ID,\n } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: pool, role: ACCOUNT_ROLE_READONLY },\n { address: admin, role: ACCOUNT_ROLE_SIGNER },\n { address: authority, role: ACCOUNT_ROLE_READONLY },\n { address: vault0, role: ACCOUNT_ROLE_WRITABLE },\n { address: vault1, role: ACCOUNT_ROLE_WRITABLE },\n { address: token0Mint, role: ACCOUNT_ROLE_READONLY },\n { address: token1Mint, role: ACCOUNT_ROLE_READONLY },\n { address: adminAta0, role: ACCOUNT_ROLE_WRITABLE },\n { address: adminAta1, role: ACCOUNT_ROLE_WRITABLE },\n { address: tokenProgram, role: ACCOUNT_ROLE_READONLY },\n ];\n\n // No args for skim instruction, just the discriminator\n const data = INSTRUCTION_DISCRIMINATORS.skim;\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n} from '../core/constants.js';\nimport type { SwapExactInArgs, SwapDirection } from '../core/types.js';\nimport { encodeInstructionData, swapExactInArgsCodec } from '../core/codecs.js';\n\n/**\n * Accounts required for swap_exact_in instruction\n */\nexport interface SwapExactInAccounts {\n /** AmmConfig account (read-only) */\n config: Address;\n /** Pool account (writable) */\n pool: Address;\n /** Pool authority PDA (read-only) */\n authority: Address;\n /** Input token vault (writable) */\n vaultIn: Address;\n /** Output token vault (writable) */\n vaultOut: Address;\n /** Token0 mint (read-only, for transfer_checked) */\n token0Mint: Address;\n /** Token1 mint (read-only, for transfer_checked) */\n token1Mint: Address;\n /** User's input token account (writable) */\n userIn: Address;\n /** User's output token account (writable) */\n userOut: Address;\n /** User authority (signer) */\n user: Address;\n /** SPL Token program */\n tokenProgram?: Address;\n /** Oracle account (optional, required if updateOracle is true) */\n oracle?: Address;\n /** Optional remaining accounts (sentinel program/state, route/oracle data) */\n remainingAccounts?: Address[];\n}\n\n/**\n * Create a swap_exact_in instruction\n *\n * Swaps an exact input amount for a minimum output amount using the CPMM formula.\n *\n * @param accounts - Required accounts for the swap\n * @param args - Instruction arguments (amountIn, minAmountOut, direction, updateOracle)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to execute the swap\n *\n * @example\n * ```ts\n * const ix = createSwapExactInInstruction(\n * {\n * config: configAddress,\n * pool: poolAddress,\n * authority: authorityAddress,\n * vaultIn: vault0Address,\n * vaultOut: vault1Address,\n * token0Mint: mint0,\n * token1Mint: mint1,\n * userIn: userToken0Account,\n * userOut: userToken1Account,\n * user: userPublicKey,\n * },\n * {\n * amountIn: 1000000n,\n * minAmountOut: 990000n,\n * direction: 0, // token0 -> token1\n * updateOracle: false,\n * }\n * );\n * ```\n */\nexport function createSwapExactInInstruction(\n accounts: SwapExactInAccounts,\n args: SwapExactInArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const {\n config,\n pool,\n authority,\n vaultIn,\n vaultOut,\n token0Mint,\n token1Mint,\n userIn,\n userOut,\n user,\n tokenProgram = TOKEN_PROGRAM_ID,\n oracle,\n remainingAccounts = [],\n } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: pool, role: ACCOUNT_ROLE_WRITABLE },\n { address: authority, role: ACCOUNT_ROLE_READONLY },\n { address: vaultIn, role: ACCOUNT_ROLE_WRITABLE },\n { address: vaultOut, role: ACCOUNT_ROLE_WRITABLE },\n { address: token0Mint, role: ACCOUNT_ROLE_READONLY },\n { address: token1Mint, role: ACCOUNT_ROLE_READONLY },\n { address: userIn, role: ACCOUNT_ROLE_WRITABLE },\n { address: userOut, role: ACCOUNT_ROLE_WRITABLE },\n { address: user, role: ACCOUNT_ROLE_SIGNER },\n { address: tokenProgram, role: ACCOUNT_ROLE_READONLY },\n ];\n\n // Add oracle if provided (always writable due to Anchor #[account(mut)] constraint)\n if (oracle) {\n keys.push({ address: oracle, role: ACCOUNT_ROLE_WRITABLE });\n }\n for (const account of remainingAccounts) {\n keys.push({ address: account, role: ACCOUNT_ROLE_READONLY });\n }\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.swapExactIn,\n swapExactInArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n\n/**\n * Helper to create swap instruction with simplified parameters\n */\nexport function createSwapInstruction(params: {\n config: Address;\n pool: Address;\n authority: Address;\n vault0: Address;\n vault1: Address;\n token0Mint: Address;\n token1Mint: Address;\n userToken0: Address;\n userToken1: Address;\n user: Address;\n amountIn: bigint;\n minAmountOut: bigint;\n direction: SwapDirection;\n oracle?: Address;\n remainingAccounts?: Address[];\n updateOracle?: boolean;\n programId?: Address;\n}): Instruction {\n const {\n config,\n pool,\n authority,\n vault0,\n vault1,\n token0Mint,\n token1Mint,\n userToken0,\n userToken1,\n user,\n amountIn,\n minAmountOut,\n direction,\n oracle,\n remainingAccounts,\n updateOracle = false,\n programId = PROGRAM_ID,\n } = params;\n\n // Determine vaults and user accounts based on direction\n const [vaultIn, vaultOut] =\n direction === 0 ? [vault0, vault1] : [vault1, vault0];\n const [userIn, userOut] =\n direction === 0 ? [userToken0, userToken1] : [userToken1, userToken0];\n\n return createSwapExactInInstruction(\n {\n config,\n pool,\n authority,\n vaultIn,\n vaultOut,\n token0Mint,\n token1Mint,\n userIn,\n userOut,\n user,\n oracle,\n remainingAccounts,\n },\n {\n amountIn,\n minAmountOut,\n direction,\n updateOracle,\n },\n programId,\n );\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n SYSTEM_PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n ACCOUNT_ROLE_WRITABLE_SIGNER,\n} from '../core/constants.js';\nimport type { CreatePositionArgs } from '../core/types.js';\nimport {\n createPositionArgsCodec,\n encodeInstructionData,\n} from '../core/codecs.js';\n\n/**\n * Accounts required for create_position instruction\n */\nexport interface CreatePositionAccounts {\n /** Pool account (read-only) */\n pool: Address;\n /** Position PDA to be created (writable, derived from ['position', pool, owner, position_id]) */\n position: Address;\n /** Owner of the position (signer) */\n owner: Address;\n /** Payer for rent (signer, writable) */\n payer: Address;\n /** System program */\n systemProgram?: Address;\n}\n\n/**\n * Create a create_position instruction\n *\n * Creates a new liquidity position for a pool. The position is a PDA derived from\n * the pool, owner, and position ID. Users can have multiple positions per pool\n * by using different position IDs.\n *\n * @param accounts - Required accounts for creating the position\n * @param args - Instruction arguments (positionId)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to create a new position\n *\n * @example\n * ```ts\n * const ix = createCreatePositionInstruction(\n * {\n * pool: poolAddress,\n * position: positionPda,\n * owner: userPublicKey,\n * payer: userPublicKey,\n * },\n * {\n * positionId: 0n,\n * }\n * );\n * ```\n */\nexport function createCreatePositionInstruction(\n accounts: CreatePositionAccounts,\n args: CreatePositionArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const {\n pool,\n position,\n owner,\n payer,\n systemProgram = SYSTEM_PROGRAM_ID,\n } = accounts;\n\n // Build account metas in order expected by the program\n // Order: pool, position, owner, payer, system_program\n const keys: AccountMeta[] = [\n { address: pool, role: ACCOUNT_ROLE_READONLY },\n { address: position, role: ACCOUNT_ROLE_WRITABLE },\n { address: owner, role: ACCOUNT_ROLE_SIGNER },\n { address: payer, role: ACCOUNT_ROLE_WRITABLE_SIGNER },\n { address: systemProgram, role: ACCOUNT_ROLE_READONLY },\n ];\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.createPosition,\n createPositionArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n} from '../core/constants.js';\n\n/**\n * Accounts required for close_position instruction\n */\nexport interface ClosePositionAccounts {\n /** Pool account (read-only) */\n pool: Address;\n /** Position account to close (writable) */\n position: Address;\n /** Position owner (signer) */\n owner: Address;\n /** Recipient for rent lamports (writable) */\n rentRecipient: Address;\n}\n\n/**\n * Create a close_position instruction\n *\n * Closes an empty position account, returning the rent lamports to the recipient.\n * The position must have zero shares and zero accrued fees to be closed.\n *\n * @param accounts - Required accounts for closing the position\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to close a position\n *\n * @example\n * ```ts\n * const ix = createClosePositionInstruction({\n * pool: poolAddress,\n * position: positionAddress,\n * owner: userPublicKey,\n * rentRecipient: userPublicKey,\n * });\n * ```\n */\nexport function createClosePositionInstruction(\n accounts: ClosePositionAccounts,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const { pool, position, owner, rentRecipient } = accounts;\n\n // Build account metas in order expected by the program\n // Order: pool, position, owner, rent_recipient\n const keys: AccountMeta[] = [\n { address: pool, role: ACCOUNT_ROLE_READONLY },\n { address: position, role: ACCOUNT_ROLE_WRITABLE },\n { address: owner, role: ACCOUNT_ROLE_SIGNER },\n { address: rentRecipient, role: ACCOUNT_ROLE_WRITABLE },\n ];\n\n // closePosition has no args, just the discriminator\n const data = INSTRUCTION_DISCRIMINATORS.closePosition;\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport type { Codec } from '@solana/kit';\nimport {\n PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n} from '../core/constants.js';\nimport type { AddLiquidityArgs } from '../core/types.js';\nimport { encodeInstructionData } from '../core/codecs.js';\nimport {\n getStructCodec,\n getU64Codec,\n getU128Codec,\n getBooleanCodec,\n} from '@solana/kit';\n\n/**\n * Extended AddLiquidity args that include updateOracle flag\n * (matches the on-chain program's actual args)\n */\nexport interface AddLiquidityArgsWithOracle extends AddLiquidityArgs {\n /** Whether to update the oracle (requires oracle account) */\n updateOracle: boolean;\n}\n\n/**\n * Codec for AddLiquidity args including updateOracle\n */\nconst addLiquidityArgsWithOracleCodec: Codec<AddLiquidityArgsWithOracle> =\n getStructCodec([\n ['amount0Max', getU64Codec()],\n ['amount1Max', getU64Codec()],\n ['minSharesOut', getU128Codec()],\n ['updateOracle', getBooleanCodec()],\n ]);\n\n/**\n * Accounts required for add_liquidity instruction\n */\nexport interface AddLiquidityAccounts {\n /** AmmConfig account (read-only) */\n config: Address;\n /** Pool account (writable) */\n pool: Address;\n /** User's position account (writable) */\n position: Address;\n /** Protocol position for protocol fees (writable) */\n protocolPosition: Address;\n /** Position owner (signer) */\n owner: Address;\n /** Pool authority PDA (read-only) */\n authority: Address;\n /** Pool vault for token0 (writable) */\n vault0: Address;\n /** Pool vault for token1 (writable) */\n vault1: Address;\n /** Token0 mint (read-only) */\n token0Mint: Address;\n /** Token1 mint (read-only) */\n token1Mint: Address;\n /** User's token0 account (writable) */\n user0: Address;\n /** User's token1 account (writable) */\n user1: Address;\n /** SPL Token program */\n tokenProgram?: Address;\n /** Oracle account (optional, required if updateOracle is true) */\n oracle?: Address;\n /** Optional remaining accounts (sentinel program/state, route/oracle data) */\n remainingAccounts?: Address[];\n}\n\n/**\n * Create an add_liquidity instruction\n *\n * Adds liquidity to a pool by depositing tokens and receiving LP shares.\n * For an empty pool (first deposit), the amount of shares is sqrt(amount0 * amount1).\n * For subsequent deposits, shares are proportional to the smaller ratio of deposit to reserves.\n *\n * @param accounts - Required accounts for adding liquidity\n * @param args - Instruction arguments (amount0Max, amount1Max, minSharesOut, updateOracle)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to add liquidity\n *\n * @example\n * ```ts\n * const ix = createAddLiquidityInstruction(\n * {\n * config: configAddress,\n * pool: poolAddress,\n * position: positionAddress,\n * protocolPosition: protocolPositionAddress,\n * owner: userPublicKey,\n * authority: authorityPda,\n * vault0: vault0Address,\n * vault1: vault1Address,\n * token0Mint: mint0,\n * token1Mint: mint1,\n * user0: userToken0Account,\n * user1: userToken1Account,\n * },\n * {\n * amount0Max: 1000000n,\n * amount1Max: 1000000n,\n * minSharesOut: 0n,\n * updateOracle: false,\n * }\n * );\n * ```\n */\nexport function createAddLiquidityInstruction(\n accounts: AddLiquidityAccounts,\n args: AddLiquidityArgsWithOracle,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const {\n config,\n pool,\n position,\n protocolPosition,\n owner,\n authority,\n vault0,\n vault1,\n token0Mint,\n token1Mint,\n user0,\n user1,\n tokenProgram = TOKEN_PROGRAM_ID,\n oracle,\n remainingAccounts = [],\n } = accounts;\n\n // Build account metas in order expected by the program\n // Order: config, pool, position, protocol_position, owner, authority,\n // vault0, vault1, token0_mint, token1_mint, user0, user1, token_program, [oracle]\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: pool, role: ACCOUNT_ROLE_WRITABLE },\n { address: position, role: ACCOUNT_ROLE_WRITABLE },\n { address: protocolPosition, role: ACCOUNT_ROLE_WRITABLE },\n { address: owner, role: ACCOUNT_ROLE_SIGNER },\n { address: authority, role: ACCOUNT_ROLE_READONLY },\n { address: vault0, role: ACCOUNT_ROLE_WRITABLE },\n { address: vault1, role: ACCOUNT_ROLE_WRITABLE },\n { address: token0Mint, role: ACCOUNT_ROLE_READONLY },\n { address: token1Mint, role: ACCOUNT_ROLE_READONLY },\n { address: user0, role: ACCOUNT_ROLE_WRITABLE },\n { address: user1, role: ACCOUNT_ROLE_WRITABLE },\n { address: tokenProgram, role: ACCOUNT_ROLE_READONLY },\n ];\n\n // Add oracle if provided (always writable due to Anchor #[account(mut)] constraint)\n if (oracle) {\n keys.push({ address: oracle, role: ACCOUNT_ROLE_WRITABLE });\n }\n for (const account of remainingAccounts) {\n keys.push({ address: account, role: ACCOUNT_ROLE_READONLY });\n }\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.addLiquidity,\n addLiquidityArgsWithOracleCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n} from '../core/constants.js';\nimport type { RemoveLiquidityArgs } from '../core/types.js';\nimport {\n removeLiquidityArgsCodec,\n encodeInstructionData,\n} from '../core/codecs.js';\n\n/**\n * Accounts required for remove_liquidity instruction\n */\nexport interface RemoveLiquidityAccounts {\n /** AmmConfig account (read-only) */\n config: Address;\n /** Pool account (writable) */\n pool: Address;\n /** User's position account (writable) */\n position: Address;\n /** Protocol position for protocol fees (writable) */\n protocolPosition: Address;\n /** Position owner (signer) */\n owner: Address;\n /** Pool authority PDA (read-only) */\n authority: Address;\n /** Pool vault for token0 (writable) */\n vault0: Address;\n /** Pool vault for token1 (writable) */\n vault1: Address;\n /** Token0 mint (read-only) */\n token0Mint: Address;\n /** Token1 mint (read-only) */\n token1Mint: Address;\n /** User's token0 account (writable) */\n user0: Address;\n /** User's token1 account (writable) */\n user1: Address;\n /** SPL Token program */\n tokenProgram?: Address;\n /** Oracle account (optional, required if updateOracle is true) */\n oracle?: Address;\n /** Optional remaining accounts (sentinel program/state, route/oracle data) */\n remainingAccounts?: Address[];\n}\n\n/**\n * Create a remove_liquidity instruction\n *\n * Removes liquidity from a pool by burning LP shares and receiving tokens back.\n * The amount of tokens received is proportional to the share of the pool being withdrawn.\n * Also accrues any pending fees to the position before withdrawal.\n *\n * @param accounts - Required accounts for removing liquidity\n * @param args - Instruction arguments (sharesIn, minAmount0Out, minAmount1Out, updateOracle)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to remove liquidity\n *\n * @example\n * ```ts\n * const ix = createRemoveLiquidityInstruction(\n * {\n * config: configAddress,\n * pool: poolAddress,\n * position: positionAddress,\n * protocolPosition: protocolPositionAddress,\n * owner: userPublicKey,\n * authority: authorityPda,\n * vault0: vault0Address,\n * vault1: vault1Address,\n * token0Mint: mint0,\n * token1Mint: mint1,\n * user0: userToken0Account,\n * user1: userToken1Account,\n * },\n * {\n * sharesIn: 500000n,\n * minAmount0Out: 450000n,\n * minAmount1Out: 450000n,\n * updateOracle: false,\n * }\n * );\n * ```\n */\nexport function createRemoveLiquidityInstruction(\n accounts: RemoveLiquidityAccounts,\n args: RemoveLiquidityArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const {\n config,\n pool,\n position,\n protocolPosition,\n owner,\n authority,\n vault0,\n vault1,\n token0Mint,\n token1Mint,\n user0,\n user1,\n tokenProgram = TOKEN_PROGRAM_ID,\n oracle,\n remainingAccounts = [],\n } = accounts;\n\n // Build account metas in order expected by the program\n // Order: config, pool, position, protocol_position, owner, authority,\n // vault0, vault1, token0_mint, token1_mint, user0, user1, token_program, [oracle]\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: pool, role: ACCOUNT_ROLE_WRITABLE },\n { address: position, role: ACCOUNT_ROLE_WRITABLE },\n { address: protocolPosition, role: ACCOUNT_ROLE_WRITABLE },\n { address: owner, role: ACCOUNT_ROLE_SIGNER },\n { address: authority, role: ACCOUNT_ROLE_READONLY },\n { address: vault0, role: ACCOUNT_ROLE_WRITABLE },\n { address: vault1, role: ACCOUNT_ROLE_WRITABLE },\n { address: token0Mint, role: ACCOUNT_ROLE_READONLY },\n { address: token1Mint, role: ACCOUNT_ROLE_READONLY },\n { address: user0, role: ACCOUNT_ROLE_WRITABLE },\n { address: user1, role: ACCOUNT_ROLE_WRITABLE },\n { address: tokenProgram, role: ACCOUNT_ROLE_READONLY },\n ];\n\n // Add oracle if provided (always writable due to Anchor #[account(mut)] constraint)\n if (oracle) {\n keys.push({ address: oracle, role: ACCOUNT_ROLE_WRITABLE });\n }\n for (const account of remainingAccounts) {\n keys.push({ address: account, role: ACCOUNT_ROLE_READONLY });\n }\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.removeLiquidity,\n removeLiquidityArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_SIGNER,\n} from '../core/constants.js';\nimport type { CollectProtocolFeesArgs } from '../core/types.js';\nimport {\n collectProtocolFeesArgsCodec,\n encodeInstructionData,\n} from '../core/codecs.js';\n\n/**\n * Accounts required for collect_protocol_fees instruction\n */\nexport interface CollectProtocolFeesAccounts {\n /** AmmConfig account (read-only) */\n config: Address;\n /** Pool account (writable) */\n pool: Address;\n /** Protocol position account (writable) */\n protocolPosition: Address;\n /** Admin authority (signer) */\n admin: Address;\n /** Pool authority PDA (read-only) */\n authority: Address;\n /** Pool vault for token0 (writable) */\n vault0: Address;\n /** Pool vault for token1 (writable) */\n vault1: Address;\n /** Token0 mint (read-only) */\n token0Mint: Address;\n /** Token1 mint (read-only) */\n token1Mint: Address;\n /** Recipient token0 account (writable) */\n recipient0: Address;\n /** Recipient token1 account (writable) */\n recipient1: Address;\n /** SPL Token program */\n tokenProgram?: Address;\n}\n\n/**\n * Create a collect_protocol_fees instruction\n *\n * Collects accrued protocol fees from the protocol position and transfers them\n * to the configured recipients.\n *\n * @param accounts - Required accounts for collecting protocol fees\n * @param args - Instruction arguments (max0, max1)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to collect protocol fees\n *\n * @example\n * ```ts\n * const ix = createCollectProtocolFeesInstruction(\n * {\n * config: configAddress,\n * pool: poolAddress,\n * protocolPosition: protocolPositionAddress,\n * admin: adminPublicKey,\n * authority: authorityPda,\n * vault0: vault0Address,\n * vault1: vault1Address,\n * token0Mint: mint0,\n * token1Mint: mint1,\n * recipient0: adminToken0Account,\n * recipient1: adminToken1Account,\n * },\n * {\n * max0: BigInt('18446744073709551615'),\n * max1: BigInt('18446744073709551615'),\n * }\n * );\n * ```\n */\nexport function createCollectProtocolFeesInstruction(\n accounts: CollectProtocolFeesAccounts,\n args: CollectProtocolFeesArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const {\n config,\n pool,\n protocolPosition,\n admin,\n authority,\n vault0,\n vault1,\n token0Mint,\n token1Mint,\n recipient0,\n recipient1,\n tokenProgram = TOKEN_PROGRAM_ID,\n } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: pool, role: ACCOUNT_ROLE_WRITABLE },\n { address: protocolPosition, role: ACCOUNT_ROLE_WRITABLE },\n { address: admin, role: ACCOUNT_ROLE_SIGNER },\n { address: authority, role: ACCOUNT_ROLE_READONLY },\n { address: vault0, role: ACCOUNT_ROLE_WRITABLE },\n { address: vault1, role: ACCOUNT_ROLE_WRITABLE },\n { address: token0Mint, role: ACCOUNT_ROLE_READONLY },\n { address: token1Mint, role: ACCOUNT_ROLE_READONLY },\n { address: recipient0, role: ACCOUNT_ROLE_WRITABLE },\n { address: recipient1, role: ACCOUNT_ROLE_WRITABLE },\n { address: tokenProgram, role: ACCOUNT_ROLE_READONLY },\n ];\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.collectProtocolFees,\n collectProtocolFeesArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n} from '../core/constants.js';\n\n/**\n * Accounts required for oracle_update instruction\n */\nexport interface OracleUpdateAccounts {\n /** Pool account (read-only) */\n pool: Address;\n /** Oracle PDA to update (writable) */\n oracle: Address;\n}\n\n/**\n * Create an oracle_update instruction\n *\n * Updates the oracle with the current pool prices. This samples the current\n * spot price, clamps it according to maxPriceChangeRatioQ64, and records\n * a new observation if the observation interval has elapsed.\n *\n * This instruction is permissionless - anyone can call it to update the oracle.\n *\n * @param accounts - Required accounts for the instruction\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to update the oracle\n *\n * @example\n * ```ts\n * const ix = createOracleUpdateInstruction({\n * pool: poolAddress,\n * oracle: oracleAddress,\n * });\n * ```\n */\nexport function createOracleUpdateInstruction(\n accounts: OracleUpdateAccounts,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const { pool, oracle } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: pool, role: ACCOUNT_ROLE_READONLY },\n { address: oracle, role: ACCOUNT_ROLE_WRITABLE },\n ];\n\n // oracle_update has no args, just the discriminator\n const data = INSTRUCTION_DISCRIMINATORS.oracleUpdate;\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n} from '../core/constants.js';\nimport type { OracleConsultArgs } from '../core/types.js';\nimport {\n oracleConsultArgsCodec,\n encodeInstructionData,\n} from '../core/codecs.js';\nimport { getStructCodec, getU128Codec, type Codec } from '@solana/kit';\nimport type { ReadonlyUint8Array } from '@solana/kit';\n\n/**\n * Accounts required for oracle_consult instruction\n */\nexport interface OracleConsultAccounts {\n /** Pool account (read-only) */\n pool: Address;\n /** Oracle PDA to query (read-only) */\n oracle: Address;\n}\n\n/**\n * Result returned from oracle_consult via return data\n */\nexport interface OracleConsultResult {\n /** TWAP price of token0 in token1 (Q64.64 fixed-point) */\n price0Q64: bigint;\n /** TWAP price of token1 in token0 (Q64.64 fixed-point) */\n price1Q64: bigint;\n}\n\nconst oracleConsultResultCodec: Codec<OracleConsultResult> = getStructCodec([\n ['price0Q64', getU128Codec()],\n ['price1Q64', getU128Codec()],\n]);\n\n/**\n * Decode oracle_consult return data\n */\nexport function decodeOracleConsultResult(\n data: ReadonlyUint8Array,\n): OracleConsultResult {\n return oracleConsultResultCodec.decode(data);\n}\n\n/**\n * Create an oracle_consult instruction\n *\n * Queries the TWAP price from the oracle over the specified time window.\n * The result is returned via Solana's return data mechanism.\n *\n * Note: To read the result, you must invoke this instruction via CPI or\n * simulate the transaction and parse the return data.\n *\n * @param accounts - Required accounts for the instruction\n * @param args - Instruction arguments (windowSeconds)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to consult the oracle\n *\n * @example\n * ```ts\n * const ix = createOracleConsultInstruction(\n * {\n * pool: poolAddress,\n * oracle: oracleAddress,\n * },\n * {\n * windowSeconds: 300, // 5-minute TWAP\n * }\n * );\n * ```\n */\nexport function createOracleConsultInstruction(\n accounts: OracleConsultAccounts,\n args: OracleConsultArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const { pool, oracle } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: pool, role: ACCOUNT_ROLE_READONLY },\n { address: oracle, role: ACCOUNT_ROLE_READONLY },\n ];\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.oracleConsult,\n oracleConsultArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import { getAddressCodec, type Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport {\n PROGRAM_ID,\n INSTRUCTION_DISCRIMINATORS,\n ACCOUNT_ROLE_READONLY,\n} from '../core/constants.js';\nimport type { QuoteToNumeraireArgs } from '../core/types.js';\nimport {\n quoteToNumeraireArgsCodec,\n encodeInstructionData,\n} from '../core/codecs.js';\nimport {\n getStructCodec,\n getU128Codec,\n getU8Codec,\n type Codec,\n} from '@solana/kit';\nimport type { ReadonlyUint8Array } from '@solana/kit';\n\n/**\n * Accounts required for quote_to_numeraire instruction\n */\nexport interface QuoteToNumeraireAccounts {\n /** AmmConfig account (read-only) */\n config: Address;\n /** Starting pool for the route (read-only) */\n startPool: Address;\n /**\n * Remaining accounts for routing:\n * - [pool1?, pool2?, ...]\n *\n * Each hop requires the next pool in the route chain.\n */\n remainingAccounts?: Address[];\n}\n\n/**\n * Result returned from quote_to_numeraire via return data\n */\nexport interface QuoteToNumeraireResult {\n /** Amount converted to numeraire (u128) */\n amountInNumeraire: bigint;\n /** Final mint reached (should be numeraire) */\n endMint: Address;\n /** Number of hops used in the route */\n hopsUsed: number;\n}\n\nconst quoteToNumeraireResultCodec: Codec<QuoteToNumeraireResult> =\n getStructCodec([\n ['amountInNumeraire', getU128Codec()],\n ['endMint', getAddressCodec()],\n ['hopsUsed', getU8Codec()],\n ]);\n\n/**\n * Decode quote_to_numeraire return data\n */\nexport function decodeQuoteToNumeraireResult(\n data: ReadonlyUint8Array,\n): QuoteToNumeraireResult {\n return quoteToNumeraireResultCodec.decode(data);\n}\n\n/**\n * Create a quote_to_numeraire instruction\n *\n * Converts an amount of one token to its value in the pool's numeraire\n * via the routing chain using spot pricing. (TWAP is not supported in v0.1.)\n *\n * The result is returned via Solana's return data mechanism.\n *\n * @param accounts - Required accounts for the instruction\n * @param args - Instruction arguments (amount, side, maxHops, useTwap, windowSeconds)\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Instruction to quote amount in numeraire\n *\n * @example\n * ```ts\n * // Quote using spot prices (no TWAP)\n * const ix = createQuoteToNumeraireInstruction(\n * {\n * config: configAddress,\n * startPool: poolAddress,\n * },\n * {\n * amount: 1000000n,\n * side: 0, // token0\n * maxHops: 3,\n * useTwap: false,\n * windowSeconds: 0,\n * }\n * );\n * ```\n */\nexport function createQuoteToNumeraireInstruction(\n accounts: QuoteToNumeraireAccounts,\n args: QuoteToNumeraireArgs,\n programId: Address = PROGRAM_ID,\n): Instruction {\n const { config, startPool, remainingAccounts = [] } = accounts;\n\n // Build account metas in order expected by the program\n const keys: AccountMeta[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: startPool, role: ACCOUNT_ROLE_READONLY },\n ];\n\n // Add remaining accounts (pools and oracles for multi-hop routing)\n for (const account of remainingAccounts) {\n keys.push({ address: account, role: ACCOUNT_ROLE_READONLY });\n }\n\n const data = encodeInstructionData(\n INSTRUCTION_DISCRIMINATORS.quoteToNumeraire,\n quoteToNumeraireArgsCodec,\n args,\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","/**\n * Config fetching and utilities for the CPMM SDK\n */\n\nimport type { Address } from '@solana/kit';\nimport type { Rpc, GetAccountInfoApi } from '@solana/kit';\nimport type { AmmConfig } from '../core/types.js';\nimport { decodeAmmConfig } from '../core/codecs.js';\nimport { PROGRAM_ID } from '../core/constants.js';\nimport { getConfigAddress } from '../core/pda.js';\n\n// Browser-compatible base64 decoding\nfunction base64ToBytes(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\n/**\n * Fetch and decode the AmmConfig account\n *\n * @param rpc - Solana RPC client\n * @param programId - Program ID (defaults to CPMM program)\n * @param commitment - Optional commitment level\n * @returns Decoded config data or null if not found\n */\nexport async function fetchConfig(\n rpc: Rpc<GetAccountInfoApi>,\n programId: Address = PROGRAM_ID,\n commitment?: 'processed' | 'confirmed' | 'finalized',\n): Promise<AmmConfig | null> {\n const [configAddress] = await getConfigAddress(programId);\n const response = await rpc\n .getAccountInfo(configAddress, {\n encoding: 'base64',\n commitment,\n })\n .send();\n\n if (!response.value) {\n return null;\n }\n\n return decodeAmmConfig(base64ToBytes(response.value.data[0]));\n}\n\n/**\n * Fetch config with its PDA address\n */\nexport async function fetchConfigWithAddress(\n rpc: Rpc<GetAccountInfoApi>,\n programId: Address = PROGRAM_ID,\n commitment?: 'processed' | 'confirmed' | 'finalized',\n): Promise<{ address: Address; account: AmmConfig } | null> {\n const [configAddress] = await getConfigAddress(programId);\n const account = await fetchConfig(rpc, programId, commitment);\n if (!account) {\n return null;\n }\n return { address: configAddress, account };\n}\n","// Constants\nexport {\n INITIALIZER_PROGRAM_ID,\n BPF_LOADER_UPGRADEABLE_PROGRAM_ID,\n SEED_CONFIG,\n SEED_LAUNCH,\n SEED_LAUNCH_AUTHORITY,\n MAX_MIGRATOR_ALLOWLIST,\n MAX_SENTINEL_ALLOWLIST,\n MAX_CALLDATA,\n PHASE_TRADING,\n PHASE_MIGRATED,\n PHASE_ABORTED,\n DIRECTION_BUY,\n DIRECTION_SELL,\n CURVE_KIND_XYK,\n CURVE_PARAMS_FORMAT_XYK_V0,\n SF_BEFORE_SWAP,\n SF_AFTER_SWAP,\n SENTINEL_NO_CHANGE,\n INITIALIZER_INSTRUCTION_DISCRIMINATORS,\n INITIALIZER_ACCOUNT_DISCRIMINATORS,\n} from './constants.js';\n\n// Generated types and codec factories\nexport type {\n InitConfig,\n InitConfigArgs,\n Launch,\n LaunchArgs,\n InitializeConfigArgs,\n InitializeConfigArgsArgs,\n InitializeLaunchArgs,\n InitializeLaunchArgsArgs,\n CalldataBuf,\n} from '../generated/initializer/index.js';\n\nexport {\n getInitConfigDecoder,\n getInitConfigEncoder,\n getInitConfigCodec,\n getLaunchDecoder,\n getLaunchEncoder,\n getLaunchCodec,\n getInitializeConfigArgsEncoder,\n getInitializeConfigArgsDecoder,\n getInitializeConfigArgsCodec,\n getInitializeLaunchArgsEncoder,\n getInitializeLaunchArgsDecoder,\n getInitializeLaunchArgsCodec,\n} from '../generated/initializer/index.js';\n\n// PDA helpers\nexport {\n getConfigAddress,\n getProgramDataAddress,\n getLaunchAddress,\n getLaunchAuthorityAddress,\n encodeU64LE,\n launchIdFromU64,\n} from './pda.js';\n\n// Instruction builders\nexport {\n createInitializeConfigInstruction,\n type InitializeConfigAccounts,\n createSetMigratorAllowlistInstruction,\n type SetMigratorAllowlistAccounts,\n createSetSentinelAllowlistInstruction,\n type SetSentinelAllowlistAccounts,\n createInitializeLaunchInstruction,\n type InitializeLaunchAccounts,\n createCurveSwapExactInInstruction,\n type CurveSwapExactInAccounts,\n createMigrateLaunchInstruction,\n type MigrateLaunchAccounts,\n createAbortLaunchInstruction,\n type AbortLaunchAccounts,\n createPreviewSwapExactInInstruction,\n decodePreviewSwapExactInResult,\n type PreviewSwapExactInAccounts,\n type PreviewSwapExactInResult,\n createPreviewMigrationInstruction,\n decodePreviewMigrationResult,\n type PreviewMigrationAccounts,\n type PreviewMigrationResult,\n} from './instructions/index.js';\n\n// Client helpers\nexport {\n fetchLaunch,\n fetchAllLaunches,\n fetchLaunchesByAuthority,\n launchExists,\n type FetchLaunchesConfig,\n type LaunchWithAddress,\n} from './client/index.js';\n","import { address, type Address } from '@solana/kit';\n\n/**\n * Program ID for the Initializer program (devnet in this repo).\n *\n * Source of truth: programs/initializer/src/lib.rs\n */\nexport const INITIALIZER_PROGRAM_ID: Address = address(\n '4H9w6qMqqSh6DVW7BzYxPHFvLaQP7rbRiQnPYGPajQxq',\n);\n\nexport const BPF_LOADER_UPGRADEABLE_PROGRAM_ID: Address = address(\n 'BPFLoaderUpgradeab1e11111111111111111111111',\n);\n\n// ============================================================================\n// PDA Seeds (must match programs/initializer/src/constants.rs)\n// ============================================================================\n\nexport const SEED_CONFIG = 'config_v3';\nexport const SEED_LAUNCH = 'launch_v3';\nexport const SEED_LAUNCH_AUTHORITY = 'launch_authority_v3';\n\n// ============================================================================\n// Limits\n// ============================================================================\n\nexport const MAX_MIGRATOR_ALLOWLIST = 32;\nexport const MAX_SENTINEL_ALLOWLIST = 32;\nexport const MAX_CALLDATA = 256;\n\n// ============================================================================\n// Phases / Directions / Flags (must match programs/initializer/src/constants.rs)\n// ============================================================================\n\nexport const PHASE_TRADING = 0;\nexport const PHASE_MIGRATED = 1;\nexport const PHASE_ABORTED = 2;\n\nexport const DIRECTION_BUY = 0;\nexport const DIRECTION_SELL = 1;\n\nexport const CURVE_KIND_XYK = 0;\n\nexport const CURVE_PARAMS_FORMAT_XYK_V0 = 0x00;\n\nexport const SF_BEFORE_SWAP = 1 << 0;\nexport const SF_AFTER_SWAP = 1 << 1;\n\nexport const SENTINEL_NO_CHANGE = 0xffff;\n\n// ============================================================================\n// Instruction Discriminators (Anchor 8-byte hashes)\n// ============================================================================\n\nexport const INITIALIZER_INSTRUCTION_DISCRIMINATORS = {\n // SHA256(\"global:initialize_config\")[0:8]\n initializeConfig: new Uint8Array([\n 0xd0, 0x7f, 0x15, 0x01, 0xc2, 0xbe, 0xc4, 0x46,\n ]),\n // SHA256(\"global:set_migrator_allowlist\")[0:8]\n setMigratorAllowlist: new Uint8Array([\n 0xd1, 0x5a, 0xb5, 0x68, 0x63, 0x6c, 0xe9, 0xa8,\n ]),\n // SHA256(\"global:set_sentinel_allowlist\")[0:8]\n setSentinelAllowlist: new Uint8Array([\n 0xe9, 0x48, 0xb4, 0xf6, 0xab, 0x75, 0x15, 0x32,\n ]),\n // SHA256(\"global:initialize_launch\")[0:8]\n initializeLaunch: new Uint8Array([\n 0x5a, 0xc9, 0xdc, 0x8e, 0x70, 0xfd, 0x64, 0x0d,\n ]),\n // SHA256(\"global:curve_swap_exact_in\")[0:8]\n curveSwapExactIn: new Uint8Array([\n 0xc4, 0xf7, 0xc3, 0x7e, 0xe3, 0x1b, 0xa6, 0x5d,\n ]),\n // SHA256(\"global:migrate_launch\")[0:8]\n migrateLaunch: new Uint8Array([\n 0x13, 0xc7, 0x77, 0x67, 0x0d, 0x1e, 0x0c, 0xcd,\n ]),\n // SHA256(\"global:abort_launch\")[0:8]\n abortLaunch: new Uint8Array([0x2c, 0x70, 0xc0, 0xeb, 0xe3, 0x3d, 0xb3, 0x07]),\n // SHA256(\"global:preview_swap_exact_in\")[0:8]\n previewSwapExactIn: new Uint8Array([\n 0x32, 0x82, 0x1f, 0x45, 0x93, 0x3a, 0xde, 0xb2,\n ]),\n // SHA256(\"global:preview_migration\")[0:8]\n previewMigration: new Uint8Array([\n 0xd8, 0xb4, 0xd1, 0x70, 0x3e, 0x10, 0x0f, 0x3f,\n ]),\n} as const;\n\n// ============================================================================\n// Account Discriminators (Anchor 8-byte hashes)\n// ============================================================================\n\nexport const INITIALIZER_ACCOUNT_DISCRIMINATORS = {\n // SHA256(\"account:InitConfig\")[0:8]\n InitConfig: new Uint8Array([0x61, 0xa6, 0x23, 0x07, 0x14, 0x02, 0xa4, 0x7e]),\n // SHA256(\"account:Launch\")[0:8]\n Launch: new Uint8Array([0x90, 0x33, 0x33, 0xa3, 0xce, 0x55, 0xd5, 0x26]),\n} as const;\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertAccountExists,\n assertAccountsExist,\n combineCodec,\n decodeAccount,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type Account,\n type Address,\n type EncodedAccount,\n type FetchAccountConfig,\n type FetchAccountsConfig,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type MaybeAccount,\n type MaybeEncodedAccount,\n type ReadonlyUint8Array,\n} from '@solana/kit';\n\nexport const INIT_CONFIG_DISCRIMINATOR = new Uint8Array([\n 97, 166, 35, 7, 20, 2, 164, 126,\n]);\n\nexport function getInitConfigDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(INIT_CONFIG_DISCRIMINATOR);\n}\n\nexport type InitConfig = {\n discriminator: ReadonlyUint8Array;\n admin: Address;\n migratorAllowlistLen: number;\n migratorAllowlist: Array<Address>;\n sentinelAllowlistLen: number;\n sentinelAllowlist: Array<Address>;\n bump: number;\n version: number;\n reserved: ReadonlyUint8Array;\n};\n\nexport type InitConfigArgs = {\n admin: Address;\n migratorAllowlistLen: number;\n migratorAllowlist: Array<Address>;\n sentinelAllowlistLen: number;\n sentinelAllowlist: Array<Address>;\n bump: number;\n version: number;\n reserved: ReadonlyUint8Array;\n};\n\n/** Gets the encoder for {@link InitConfigArgs} account data. */\nexport function getInitConfigEncoder(): FixedSizeEncoder<InitConfigArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['admin', getAddressEncoder()],\n ['migratorAllowlistLen', getU8Encoder()],\n ['migratorAllowlist', getArrayEncoder(getAddressEncoder(), { size: 32 })],\n ['sentinelAllowlistLen', getU8Encoder()],\n ['sentinelAllowlist', getArrayEncoder(getAddressEncoder(), { size: 32 })],\n ['bump', getU8Encoder()],\n ['version', getU8Encoder()],\n ['reserved', fixEncoderSize(getBytesEncoder(), 31)],\n ]),\n (value) => ({ ...value, discriminator: INIT_CONFIG_DISCRIMINATOR })\n );\n}\n\n/** Gets the decoder for {@link InitConfig} account data. */\nexport function getInitConfigDecoder(): FixedSizeDecoder<InitConfig> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['admin', getAddressDecoder()],\n ['migratorAllowlistLen', getU8Decoder()],\n ['migratorAllowlist', getArrayDecoder(getAddressDecoder(), { size: 32 })],\n ['sentinelAllowlistLen', getU8Decoder()],\n ['sentinelAllowlist', getArrayDecoder(getAddressDecoder(), { size: 32 })],\n ['bump', getU8Decoder()],\n ['version', getU8Decoder()],\n ['reserved', fixDecoderSize(getBytesDecoder(), 31)],\n ]);\n}\n\n/** Gets the codec for {@link InitConfig} account data. */\nexport function getInitConfigCodec(): FixedSizeCodec<\n InitConfigArgs,\n InitConfig\n> {\n return combineCodec(getInitConfigEncoder(), getInitConfigDecoder());\n}\n\nexport function decodeInitConfig<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress>\n): Account<InitConfig, TAddress>;\nexport function decodeInitConfig<TAddress extends string = string>(\n encodedAccount: MaybeEncodedAccount<TAddress>\n): MaybeAccount<InitConfig, TAddress>;\nexport function decodeInitConfig<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>\n): Account<InitConfig, TAddress> | MaybeAccount<InitConfig, TAddress> {\n return decodeAccount(\n encodedAccount as MaybeEncodedAccount<TAddress>,\n getInitConfigDecoder()\n );\n}\n\nexport async function fetchInitConfig<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<Account<InitConfig, TAddress>> {\n const maybeAccount = await fetchMaybeInitConfig(rpc, address, config);\n assertAccountExists(maybeAccount);\n return maybeAccount;\n}\n\nexport async function fetchMaybeInitConfig<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<MaybeAccount<InitConfig, TAddress>> {\n const maybeAccount = await fetchEncodedAccount(rpc, address, config);\n return decodeInitConfig(maybeAccount);\n}\n\nexport async function fetchAllInitConfig(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<Account<InitConfig>[]> {\n const maybeAccounts = await fetchAllMaybeInitConfig(rpc, addresses, config);\n assertAccountsExist(maybeAccounts);\n return maybeAccounts;\n}\n\nexport async function fetchAllMaybeInitConfig(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<MaybeAccount<InitConfig>[]> {\n const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);\n return maybeAccounts.map((maybeAccount) => decodeInitConfig(maybeAccount));\n}\n\nexport function getInitConfigSize(): number {\n return 2123;\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU16Decoder,\n getU16Encoder,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type ReadonlyUint8Array,\n} from '@solana/kit';\n\nexport type CalldataBuf = { len: number; bytes: ReadonlyUint8Array };\n\nexport type CalldataBufArgs = CalldataBuf;\n\nexport function getCalldataBufEncoder(): FixedSizeEncoder<CalldataBufArgs> {\n return getStructEncoder([\n ['len', getU16Encoder()],\n ['bytes', fixEncoderSize(getBytesEncoder(), 256)],\n ]);\n}\n\nexport function getCalldataBufDecoder(): FixedSizeDecoder<CalldataBuf> {\n return getStructDecoder([\n ['len', getU16Decoder()],\n ['bytes', fixDecoderSize(getBytesDecoder(), 256)],\n ]);\n}\n\nexport function getCalldataBufCodec(): FixedSizeCodec<\n CalldataBufArgs,\n CalldataBuf\n> {\n return combineCodec(getCalldataBufEncoder(), getCalldataBufDecoder());\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getAddressDecoder,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getStructDecoder,\n getStructEncoder,\n type Address,\n type Codec,\n type Decoder,\n type Encoder,\n} from '@solana/kit';\n\nexport type InitializeConfigArgs = {\n migratorAllowlist: Array<Address>;\n sentinelAllowlist: Array<Address>;\n};\n\nexport type InitializeConfigArgsArgs = InitializeConfigArgs;\n\nexport function getInitializeConfigArgsEncoder(): Encoder<InitializeConfigArgsArgs> {\n return getStructEncoder([\n ['migratorAllowlist', getArrayEncoder(getAddressEncoder())],\n ['sentinelAllowlist', getArrayEncoder(getAddressEncoder())],\n ]);\n}\n\nexport function getInitializeConfigArgsDecoder(): Decoder<InitializeConfigArgs> {\n return getStructDecoder([\n ['migratorAllowlist', getArrayDecoder(getAddressDecoder())],\n ['sentinelAllowlist', getArrayDecoder(getAddressDecoder())],\n ]);\n}\n\nexport function getInitializeConfigArgsCodec(): Codec<\n InitializeConfigArgsArgs,\n InitializeConfigArgs\n> {\n return combineCodec(\n getInitializeConfigArgsEncoder(),\n getInitializeConfigArgsDecoder()\n );\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n addDecoderSizePrefix,\n addEncoderSizePrefix,\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU16Decoder,\n getU16Encoder,\n getU32Decoder,\n getU32Encoder,\n getU64Decoder,\n getU64Encoder,\n getU8Decoder,\n getU8Encoder,\n getUtf8Decoder,\n getUtf8Encoder,\n type Address,\n type Codec,\n type Decoder,\n type Encoder,\n type ReadonlyUint8Array,\n} from '@solana/kit';\n\nexport type InitializeLaunchArgs = {\n namespace: Address;\n launchId: ReadonlyUint8Array;\n baseDecimals: number;\n baseTotalSupply: bigint;\n baseForDistribution: bigint;\n baseForLiquidity: bigint;\n curveVirtualBase: bigint;\n curveVirtualQuote: bigint;\n curveFeeBps: number;\n curveKind: number;\n curveParams: ReadonlyUint8Array;\n allowBuy: number;\n allowSell: number;\n sentinelProgram: Address;\n sentinelFlags: number;\n sentinelCalldata: ReadonlyUint8Array;\n migratorProgram: Address;\n migratorInitCalldata: ReadonlyUint8Array;\n migratorMigrateCalldata: ReadonlyUint8Array;\n /**\n * Commitment hash for swap/preview sentinel remaining accounts.\n * Computed as hash(u32_len || pubkey_0 || ... || pubkey_n).\n */\n sentinelRemainingAccountsHash: ReadonlyUint8Array;\n /**\n * Commitment hash for migrate remaining accounts.\n * Computed as hash(u32_len || pubkey_0 || ... || pubkey_n).\n */\n migratorRemainingAccountsHash: ReadonlyUint8Array;\n /** Token name for on-chain metadata. If empty, metadata creation is skipped. */\n metadataName: string;\n /** Token symbol for on-chain metadata. */\n metadataSymbol: string;\n /** Metadata JSON URI for on-chain metadata. */\n metadataUri: string;\n};\n\nexport type InitializeLaunchArgsArgs = {\n namespace: Address;\n launchId: ReadonlyUint8Array;\n baseDecimals: number;\n baseTotalSupply: number | bigint;\n baseForDistribution: number | bigint;\n baseForLiquidity: number | bigint;\n curveVirtualBase: number | bigint;\n curveVirtualQuote: number | bigint;\n curveFeeBps: number;\n curveKind: number;\n curveParams: ReadonlyUint8Array;\n allowBuy: number;\n allowSell: number;\n sentinelProgram: Address;\n sentinelFlags: number;\n sentinelCalldata: ReadonlyUint8Array;\n migratorProgram: Address;\n migratorInitCalldata: ReadonlyUint8Array;\n migratorMigrateCalldata: ReadonlyUint8Array;\n /**\n * Commitment hash for swap/preview sentinel remaining accounts.\n * Computed as hash(u32_len || pubkey_0 || ... || pubkey_n).\n */\n sentinelRemainingAccountsHash: ReadonlyUint8Array;\n /**\n * Commitment hash for migrate remaining accounts.\n * Computed as hash(u32_len || pubkey_0 || ... || pubkey_n).\n */\n migratorRemainingAccountsHash: ReadonlyUint8Array;\n /** Token name for on-chain metadata. If empty, metadata creation is skipped. */\n metadataName: string;\n /** Token symbol for on-chain metadata. */\n metadataSymbol: string;\n /** Metadata JSON URI for on-chain metadata. */\n metadataUri: string;\n};\n\nexport function getInitializeLaunchArgsEncoder(): Encoder<InitializeLaunchArgsArgs> {\n return getStructEncoder([\n ['namespace', getAddressEncoder()],\n ['launchId', fixEncoderSize(getBytesEncoder(), 32)],\n ['baseDecimals', getU8Encoder()],\n ['baseTotalSupply', getU64Encoder()],\n ['baseForDistribution', getU64Encoder()],\n ['baseForLiquidity', getU64Encoder()],\n ['curveVirtualBase', getU64Encoder()],\n ['curveVirtualQuote', getU64Encoder()],\n ['curveFeeBps', getU16Encoder()],\n ['curveKind', getU8Encoder()],\n ['curveParams', addEncoderSizePrefix(getBytesEncoder(), getU32Encoder())],\n ['allowBuy', getU8Encoder()],\n ['allowSell', getU8Encoder()],\n ['sentinelProgram', getAddressEncoder()],\n ['sentinelFlags', getU32Encoder()],\n [\n 'sentinelCalldata',\n addEncoderSizePrefix(getBytesEncoder(), getU32Encoder()),\n ],\n ['migratorProgram', getAddressEncoder()],\n [\n 'migratorInitCalldata',\n addEncoderSizePrefix(getBytesEncoder(), getU32Encoder()),\n ],\n [\n 'migratorMigrateCalldata',\n addEncoderSizePrefix(getBytesEncoder(), getU32Encoder()),\n ],\n ['sentinelRemainingAccountsHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['migratorRemainingAccountsHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['metadataName', addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder())],\n ['metadataSymbol', addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder())],\n ['metadataUri', addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder())],\n ]);\n}\n\nexport function getInitializeLaunchArgsDecoder(): Decoder<InitializeLaunchArgs> {\n return getStructDecoder([\n ['namespace', getAddressDecoder()],\n ['launchId', fixDecoderSize(getBytesDecoder(), 32)],\n ['baseDecimals', getU8Decoder()],\n ['baseTotalSupply', getU64Decoder()],\n ['baseForDistribution', getU64Decoder()],\n ['baseForLiquidity', getU64Decoder()],\n ['curveVirtualBase', getU64Decoder()],\n ['curveVirtualQuote', getU64Decoder()],\n ['curveFeeBps', getU16Decoder()],\n ['curveKind', getU8Decoder()],\n ['curveParams', addDecoderSizePrefix(getBytesDecoder(), getU32Decoder())],\n ['allowBuy', getU8Decoder()],\n ['allowSell', getU8Decoder()],\n ['sentinelProgram', getAddressDecoder()],\n ['sentinelFlags', getU32Decoder()],\n [\n 'sentinelCalldata',\n addDecoderSizePrefix(getBytesDecoder(), getU32Decoder()),\n ],\n ['migratorProgram', getAddressDecoder()],\n [\n 'migratorInitCalldata',\n addDecoderSizePrefix(getBytesDecoder(), getU32Decoder()),\n ],\n [\n 'migratorMigrateCalldata',\n addDecoderSizePrefix(getBytesDecoder(), getU32Decoder()),\n ],\n ['sentinelRemainingAccountsHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['migratorRemainingAccountsHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['metadataName', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())],\n ['metadataSymbol', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())],\n ['metadataUri', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())],\n ]);\n}\n\nexport function getInitializeLaunchArgsCodec(): Codec<\n InitializeLaunchArgsArgs,\n InitializeLaunchArgs\n> {\n return combineCodec(\n getInitializeLaunchArgsEncoder(),\n getInitializeLaunchArgsDecoder()\n );\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertAccountExists,\n assertAccountsExist,\n combineCodec,\n decodeAccount,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU16Decoder,\n getU16Encoder,\n getU32Decoder,\n getU32Encoder,\n getU64Decoder,\n getU64Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type Account,\n type Address,\n type EncodedAccount,\n type FetchAccountConfig,\n type FetchAccountsConfig,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type MaybeAccount,\n type MaybeEncodedAccount,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n getCalldataBufDecoder,\n getCalldataBufEncoder,\n type CalldataBuf,\n type CalldataBufArgs,\n} from '../types';\n\nexport const LAUNCH_DISCRIMINATOR = new Uint8Array([\n 144, 51, 51, 163, 206, 85, 213, 38,\n]);\n\nexport function getLaunchDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(LAUNCH_DISCRIMINATOR);\n}\n\nexport type Launch = {\n discriminator: ReadonlyUint8Array;\n authority: Address;\n namespace: Address;\n launchId: ReadonlyUint8Array;\n phase: number;\n bump: number;\n launchAuthorityBump: number;\n pad0: ReadonlyUint8Array;\n baseMint: Address;\n quoteMint: Address;\n baseVault: Address;\n quoteVault: Address;\n baseTotalSupply: bigint;\n baseForDistribution: bigint;\n baseForLiquidity: bigint;\n baseForCurve: bigint;\n curveVirtualBase: bigint;\n curveVirtualQuote: bigint;\n curveFeeBps: number;\n pad1: ReadonlyUint8Array;\n allowBuy: number;\n allowSell: number;\n pad2: ReadonlyUint8Array;\n sentinelProgram: Address;\n sentinelFlags: number;\n pad3: ReadonlyUint8Array;\n sentinelCalldata: CalldataBuf;\n migratorProgram: Address;\n migratorInitCalldata: CalldataBuf;\n migratorMigrateCalldata: CalldataBuf;\n curveKind: number;\n swapLock: number;\n pad4: ReadonlyUint8Array;\n curveParams: CalldataBuf;\n quoteDeposited: bigint;\n reserved: ReadonlyUint8Array;\n};\n\nexport type LaunchArgs = {\n authority: Address;\n namespace: Address;\n launchId: ReadonlyUint8Array;\n phase: number;\n bump: number;\n launchAuthorityBump: number;\n pad0: ReadonlyUint8Array;\n baseMint: Address;\n quoteMint: Address;\n baseVault: Address;\n quoteVault: Address;\n baseTotalSupply: number | bigint;\n baseForDistribution: number | bigint;\n baseForLiquidity: number | bigint;\n baseForCurve: number | bigint;\n curveVirtualBase: number | bigint;\n curveVirtualQuote: number | bigint;\n curveFeeBps: number;\n pad1: ReadonlyUint8Array;\n allowBuy: number;\n allowSell: number;\n pad2: ReadonlyUint8Array;\n sentinelProgram: Address;\n sentinelFlags: number;\n pad3: ReadonlyUint8Array;\n sentinelCalldata: CalldataBufArgs;\n migratorProgram: Address;\n migratorInitCalldata: CalldataBufArgs;\n migratorMigrateCalldata: CalldataBufArgs;\n curveKind: number;\n swapLock: number;\n pad4: ReadonlyUint8Array;\n curveParams: CalldataBufArgs;\n quoteDeposited: number | bigint;\n reserved: ReadonlyUint8Array;\n};\n\n/** Gets the encoder for {@link LaunchArgs} account data. */\nexport function getLaunchEncoder(): FixedSizeEncoder<LaunchArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['authority', getAddressEncoder()],\n ['namespace', getAddressEncoder()],\n ['launchId', fixEncoderSize(getBytesEncoder(), 32)],\n ['phase', getU8Encoder()],\n ['bump', getU8Encoder()],\n ['launchAuthorityBump', getU8Encoder()],\n ['pad0', fixEncoderSize(getBytesEncoder(), 5)],\n ['baseMint', getAddressEncoder()],\n ['quoteMint', getAddressEncoder()],\n ['baseVault', getAddressEncoder()],\n ['quoteVault', getAddressEncoder()],\n ['baseTotalSupply', getU64Encoder()],\n ['baseForDistribution', getU64Encoder()],\n ['baseForLiquidity', getU64Encoder()],\n ['baseForCurve', getU64Encoder()],\n ['curveVirtualBase', getU64Encoder()],\n ['curveVirtualQuote', getU64Encoder()],\n ['curveFeeBps', getU16Encoder()],\n ['pad1', fixEncoderSize(getBytesEncoder(), 6)],\n ['allowBuy', getU8Encoder()],\n ['allowSell', getU8Encoder()],\n ['pad2', fixEncoderSize(getBytesEncoder(), 6)],\n ['sentinelProgram', getAddressEncoder()],\n ['sentinelFlags', getU32Encoder()],\n ['pad3', fixEncoderSize(getBytesEncoder(), 4)],\n ['sentinelCalldata', getCalldataBufEncoder()],\n ['migratorProgram', getAddressEncoder()],\n ['migratorInitCalldata', getCalldataBufEncoder()],\n ['migratorMigrateCalldata', getCalldataBufEncoder()],\n ['curveKind', getU8Encoder()],\n ['swapLock', getU8Encoder()],\n ['pad4', fixEncoderSize(getBytesEncoder(), 6)],\n ['curveParams', getCalldataBufEncoder()],\n ['quoteDeposited', getU64Encoder()],\n ['reserved', fixEncoderSize(getBytesEncoder(), 64)],\n ]),\n (value) => ({ ...value, discriminator: LAUNCH_DISCRIMINATOR })\n );\n}\n\n/** Gets the decoder for {@link Launch} account data. */\nexport function getLaunchDecoder(): FixedSizeDecoder<Launch> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['authority', getAddressDecoder()],\n ['namespace', getAddressDecoder()],\n ['launchId', fixDecoderSize(getBytesDecoder(), 32)],\n ['phase', getU8Decoder()],\n ['bump', getU8Decoder()],\n ['launchAuthorityBump', getU8Decoder()],\n ['pad0', fixDecoderSize(getBytesDecoder(), 5)],\n ['baseMint', getAddressDecoder()],\n ['quoteMint', getAddressDecoder()],\n ['baseVault', getAddressDecoder()],\n ['quoteVault', getAddressDecoder()],\n ['baseTotalSupply', getU64Decoder()],\n ['baseForDistribution', getU64Decoder()],\n ['baseForLiquidity', getU64Decoder()],\n ['baseForCurve', getU64Decoder()],\n ['curveVirtualBase', getU64Decoder()],\n ['curveVirtualQuote', getU64Decoder()],\n ['curveFeeBps', getU16Decoder()],\n ['pad1', fixDecoderSize(getBytesDecoder(), 6)],\n ['allowBuy', getU8Decoder()],\n ['allowSell', getU8Decoder()],\n ['pad2', fixDecoderSize(getBytesDecoder(), 6)],\n ['sentinelProgram', getAddressDecoder()],\n ['sentinelFlags', getU32Decoder()],\n ['pad3', fixDecoderSize(getBytesDecoder(), 4)],\n ['sentinelCalldata', getCalldataBufDecoder()],\n ['migratorProgram', getAddressDecoder()],\n ['migratorInitCalldata', getCalldataBufDecoder()],\n ['migratorMigrateCalldata', getCalldataBufDecoder()],\n ['curveKind', getU8Decoder()],\n ['swapLock', getU8Decoder()],\n ['pad4', fixDecoderSize(getBytesDecoder(), 6)],\n ['curveParams', getCalldataBufDecoder()],\n ['quoteDeposited', getU64Decoder()],\n ['reserved', fixDecoderSize(getBytesDecoder(), 64)],\n ]);\n}\n\n/** Gets the codec for {@link Launch} account data. */\nexport function getLaunchCodec(): FixedSizeCodec<LaunchArgs, Launch> {\n return combineCodec(getLaunchEncoder(), getLaunchDecoder());\n}\n\nexport function decodeLaunch<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress>\n): Account<Launch, TAddress>;\nexport function decodeLaunch<TAddress extends string = string>(\n encodedAccount: MaybeEncodedAccount<TAddress>\n): MaybeAccount<Launch, TAddress>;\nexport function decodeLaunch<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>\n): Account<Launch, TAddress> | MaybeAccount<Launch, TAddress> {\n return decodeAccount(\n encodedAccount as MaybeEncodedAccount<TAddress>,\n getLaunchDecoder()\n );\n}\n\nexport async function fetchLaunch<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<Account<Launch, TAddress>> {\n const maybeAccount = await fetchMaybeLaunch(rpc, address, config);\n assertAccountExists(maybeAccount);\n return maybeAccount;\n}\n\nexport async function fetchMaybeLaunch<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<MaybeAccount<Launch, TAddress>> {\n const maybeAccount = await fetchEncodedAccount(rpc, address, config);\n return decodeLaunch(maybeAccount);\n}\n\nexport async function fetchAllLaunch(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<Account<Launch>[]> {\n const maybeAccounts = await fetchAllMaybeLaunch(rpc, addresses, config);\n assertAccountsExist(maybeAccounts);\n return maybeAccounts;\n}\n\nexport async function fetchAllMaybeLaunch(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<MaybeAccount<Launch>[]> {\n const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);\n return maybeAccounts.map((maybeAccount) => decodeLaunch(maybeAccount));\n}\n\nexport function getLaunchSize(): number {\n return 1488;\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n getU8Decoder,\n getU8Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { INITIALIZER_PROGRAM_ADDRESS } from '../programs';\n\nexport const CURVE_SWAP_EXACT_IN_DISCRIMINATOR = new Uint8Array([\n 196, 247, 195, 126, 227, 27, 166, 93,\n]);\n\nexport function getCurveSwapExactInDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n CURVE_SWAP_EXACT_IN_DISCRIMINATOR\n );\n}\n\nexport type CurveSwapExactInInstruction<\n TProgram extends string = typeof INITIALIZER_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountLaunch extends string | AccountMeta<string> = string,\n TAccountLaunchAuthority extends string | AccountMeta<string> = string,\n TAccountBaseVault extends string | AccountMeta<string> = string,\n TAccountQuoteVault extends string | AccountMeta<string> = string,\n TAccountUserBaseAccount extends string | AccountMeta<string> = string,\n TAccountUserQuoteAccount extends string | AccountMeta<string> = string,\n TAccountBaseMint extends string | AccountMeta<string> = string,\n TAccountQuoteMint extends string | AccountMeta<string> = string,\n TAccountUser extends string | AccountMeta<string> = string,\n TAccountSentinelProgram extends string | AccountMeta<string> = string,\n TAccountTokenProgram extends string | AccountMeta<string> =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountLaunch extends string\n ? WritableAccount<TAccountLaunch>\n : TAccountLaunch,\n TAccountLaunchAuthority extends string\n ? ReadonlyAccount<TAccountLaunchAuthority>\n : TAccountLaunchAuthority,\n TAccountBaseVault extends string\n ? WritableAccount<TAccountBaseVault>\n : TAccountBaseVault,\n TAccountQuoteVault extends string\n ? WritableAccount<TAccountQuoteVault>\n : TAccountQuoteVault,\n TAccountUserBaseAccount extends string\n ? WritableAccount<TAccountUserBaseAccount>\n : TAccountUserBaseAccount,\n TAccountUserQuoteAccount extends string\n ? WritableAccount<TAccountUserQuoteAccount>\n : TAccountUserQuoteAccount,\n TAccountBaseMint extends string\n ? ReadonlyAccount<TAccountBaseMint>\n : TAccountBaseMint,\n TAccountQuoteMint extends string\n ? ReadonlyAccount<TAccountQuoteMint>\n : TAccountQuoteMint,\n TAccountUser extends string\n ? ReadonlySignerAccount<TAccountUser> & AccountSignerMeta<TAccountUser>\n : TAccountUser,\n TAccountSentinelProgram extends string\n ? ReadonlyAccount<TAccountSentinelProgram>\n : TAccountSentinelProgram,\n TAccountTokenProgram extends string\n ? ReadonlyAccount<TAccountTokenProgram>\n : TAccountTokenProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type CurveSwapExactInInstructionData = {\n discriminator: ReadonlyUint8Array;\n amountIn: bigint;\n minAmountOut: bigint;\n direction: number;\n};\n\nexport type CurveSwapExactInInstructionDataArgs = {\n amountIn: number | bigint;\n minAmountOut: number | bigint;\n direction: number;\n};\n\nexport function getCurveSwapExactInInstructionDataEncoder(): FixedSizeEncoder<CurveSwapExactInInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['amountIn', getU64Encoder()],\n ['minAmountOut', getU64Encoder()],\n ['direction', getU8Encoder()],\n ]),\n (value) => ({ ...value, discriminator: CURVE_SWAP_EXACT_IN_DISCRIMINATOR })\n );\n}\n\nexport function getCurveSwapExactInInstructionDataDecoder(): FixedSizeDecoder<CurveSwapExactInInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['amountIn', getU64Decoder()],\n ['minAmountOut', getU64Decoder()],\n ['direction', getU8Decoder()],\n ]);\n}\n\nexport function getCurveSwapExactInInstructionDataCodec(): FixedSizeCodec<\n CurveSwapExactInInstructionDataArgs,\n CurveSwapExactInInstructionData\n> {\n return combineCodec(\n getCurveSwapExactInInstructionDataEncoder(),\n getCurveSwapExactInInstructionDataDecoder()\n );\n}\n\nexport type CurveSwapExactInAsyncInput<\n TAccountConfig extends string = string,\n TAccountLaunch extends string = string,\n TAccountLaunchAuthority extends string = string,\n TAccountBaseVault extends string = string,\n TAccountQuoteVault extends string = string,\n TAccountUserBaseAccount extends string = string,\n TAccountUserQuoteAccount extends string = string,\n TAccountBaseMint extends string = string,\n TAccountQuoteMint extends string = string,\n TAccountUser extends string = string,\n TAccountSentinelProgram extends string = string,\n TAccountTokenProgram extends string = string,\n> = {\n config?: Address<TAccountConfig>;\n launch: Address<TAccountLaunch>;\n launchAuthority: Address<TAccountLaunchAuthority>;\n baseVault: Address<TAccountBaseVault>;\n quoteVault: Address<TAccountQuoteVault>;\n userBaseAccount: Address<TAccountUserBaseAccount>;\n userQuoteAccount: Address<TAccountUserQuoteAccount>;\n baseMint: Address<TAccountBaseMint>;\n quoteMint: Address<TAccountQuoteMint>;\n user: TransactionSigner<TAccountUser>;\n /** Optional sentinel program (must match launch.sentinel_program if set) */\n sentinelProgram?: Address<TAccountSentinelProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n amountIn: CurveSwapExactInInstructionDataArgs['amountIn'];\n minAmountOut: CurveSwapExactInInstructionDataArgs['minAmountOut'];\n direction: CurveSwapExactInInstructionDataArgs['direction'];\n};\n\nexport async function getCurveSwapExactInInstructionAsync<\n TAccountConfig extends string,\n TAccountLaunch extends string,\n TAccountLaunchAuthority extends string,\n TAccountBaseVault extends string,\n TAccountQuoteVault extends string,\n TAccountUserBaseAccount extends string,\n TAccountUserQuoteAccount extends string,\n TAccountBaseMint extends string,\n TAccountQuoteMint extends string,\n TAccountUser extends string,\n TAccountSentinelProgram extends string,\n TAccountTokenProgram extends string,\n TProgramAddress extends Address = typeof INITIALIZER_PROGRAM_ADDRESS,\n>(\n input: CurveSwapExactInAsyncInput<\n TAccountConfig,\n TAccountLaunch,\n TAccountLaunchAuthority,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountUserBaseAccount,\n TAccountUserQuoteAccount,\n TAccountBaseMint,\n TAccountQuoteMint,\n TAccountUser,\n TAccountSentinelProgram,\n TAccountTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n CurveSwapExactInInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountLaunch,\n TAccountLaunchAuthority,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountUserBaseAccount,\n TAccountUserQuoteAccount,\n TAccountBaseMint,\n TAccountQuoteMint,\n TAccountUser,\n TAccountSentinelProgram,\n TAccountTokenProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? INITIALIZER_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n launch: { value: input.launch ?? null, isWritable: true },\n launchAuthority: {\n value: input.launchAuthority ?? null,\n isWritable: false,\n },\n baseVault: { value: input.baseVault ?? null, isWritable: true },\n quoteVault: { value: input.quoteVault ?? null, isWritable: true },\n userBaseAccount: { value: input.userBaseAccount ?? null, isWritable: true },\n userQuoteAccount: {\n value: input.userQuoteAccount ?? null,\n isWritable: true,\n },\n baseMint: { value: input.baseMint ?? null, isWritable: false },\n quoteMint: { value: input.quoteMint ?? null, isWritable: false },\n user: { value: input.user ?? null, isWritable: false },\n sentinelProgram: {\n value: input.sentinelProgram ?? null,\n isWritable: false,\n },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.config.value) {\n accounts.config.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([99, 111, 110, 102, 105, 103, 95, 118, 51])\n ),\n ],\n });\n }\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('launch', accounts.launch),\n getAccountMeta('launchAuthority', accounts.launchAuthority),\n getAccountMeta('baseVault', accounts.baseVault),\n getAccountMeta('quoteVault', accounts.quoteVault),\n getAccountMeta('userBaseAccount', accounts.userBaseAccount),\n getAccountMeta('userQuoteAccount', accounts.userQuoteAccount),\n getAccountMeta('baseMint', accounts.baseMint),\n getAccountMeta('quoteMint', accounts.quoteMint),\n getAccountMeta('user', accounts.user),\n getAccountMeta('sentinelProgram', accounts.sentinelProgram),\n getAccountMeta('tokenProgram', accounts.tokenProgram),\n ],\n data: getCurveSwapExactInInstructionDataEncoder().encode(\n args as CurveSwapExactInInstructionDataArgs\n ),\n programAddress,\n } as CurveSwapExactInInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountLaunch,\n TAccountLaunchAuthority,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountUserBaseAccount,\n TAccountUserQuoteAccount,\n TAccountBaseMint,\n TAccountQuoteMint,\n TAccountUser,\n TAccountSentinelProgram,\n TAccountTokenProgram\n >);\n}\n\nexport type CurveSwapExactInInput<\n TAccountConfig extends string = string,\n TAccountLaunch extends string = string,\n TAccountLaunchAuthority extends string = string,\n TAccountBaseVault extends string = string,\n TAccountQuoteVault extends string = string,\n TAccountUserBaseAccount extends string = string,\n TAccountUserQuoteAccount extends string = string,\n TAccountBaseMint extends string = string,\n TAccountQuoteMint extends string = string,\n TAccountUser extends string = string,\n TAccountSentinelProgram extends string = string,\n TAccountTokenProgram extends string = string,\n> = {\n config: Address<TAccountConfig>;\n launch: Address<TAccountLaunch>;\n launchAuthority: Address<TAccountLaunchAuthority>;\n baseVault: Address<TAccountBaseVault>;\n quoteVault: Address<TAccountQuoteVault>;\n userBaseAccount: Address<TAccountUserBaseAccount>;\n userQuoteAccount: Address<TAccountUserQuoteAccount>;\n baseMint: Address<TAccountBaseMint>;\n quoteMint: Address<TAccountQuoteMint>;\n user: TransactionSigner<TAccountUser>;\n /** Optional sentinel program (must match launch.sentinel_program if set) */\n sentinelProgram?: Address<TAccountSentinelProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n amountIn: CurveSwapExactInInstructionDataArgs['amountIn'];\n minAmountOut: CurveSwapExactInInstructionDataArgs['minAmountOut'];\n direction: CurveSwapExactInInstructionDataArgs['direction'];\n};\n\nexport function getCurveSwapExactInInstruction<\n TAccountConfig extends string,\n TAccountLaunch extends string,\n TAccountLaunchAuthority extends string,\n TAccountBaseVault extends string,\n TAccountQuoteVault extends string,\n TAccountUserBaseAccount extends string,\n TAccountUserQuoteAccount extends string,\n TAccountBaseMint extends string,\n TAccountQuoteMint extends string,\n TAccountUser extends string,\n TAccountSentinelProgram extends string,\n TAccountTokenProgram extends string,\n TProgramAddress extends Address = typeof INITIALIZER_PROGRAM_ADDRESS,\n>(\n input: CurveSwapExactInInput<\n TAccountConfig,\n TAccountLaunch,\n TAccountLaunchAuthority,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountUserBaseAccount,\n TAccountUserQuoteAccount,\n TAccountBaseMint,\n TAccountQuoteMint,\n TAccountUser,\n TAccountSentinelProgram,\n TAccountTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): CurveSwapExactInInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountLaunch,\n TAccountLaunchAuthority,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountUserBaseAccount,\n TAccountUserQuoteAccount,\n TAccountBaseMint,\n TAccountQuoteMint,\n TAccountUser,\n TAccountSentinelProgram,\n TAccountTokenProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? INITIALIZER_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n launch: { value: input.launch ?? null, isWritable: true },\n launchAuthority: {\n value: input.launchAuthority ?? null,\n isWritable: false,\n },\n baseVault: { value: input.baseVault ?? null, isWritable: true },\n quoteVault: { value: input.quoteVault ?? null, isWritable: true },\n userBaseAccount: { value: input.userBaseAccount ?? null, isWritable: true },\n userQuoteAccount: {\n value: input.userQuoteAccount ?? null,\n isWritable: true,\n },\n baseMint: { value: input.baseMint ?? null, isWritable: false },\n quoteMint: { value: input.quoteMint ?? null, isWritable: false },\n user: { value: input.user ?? null, isWritable: false },\n sentinelProgram: {\n value: input.sentinelProgram ?? null,\n isWritable: false,\n },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('launch', accounts.launch),\n getAccountMeta('launchAuthority', accounts.launchAuthority),\n getAccountMeta('baseVault', accounts.baseVault),\n getAccountMeta('quoteVault', accounts.quoteVault),\n getAccountMeta('userBaseAccount', accounts.userBaseAccount),\n getAccountMeta('userQuoteAccount', accounts.userQuoteAccount),\n getAccountMeta('baseMint', accounts.baseMint),\n getAccountMeta('quoteMint', accounts.quoteMint),\n getAccountMeta('user', accounts.user),\n getAccountMeta('sentinelProgram', accounts.sentinelProgram),\n getAccountMeta('tokenProgram', accounts.tokenProgram),\n ],\n data: getCurveSwapExactInInstructionDataEncoder().encode(\n args as CurveSwapExactInInstructionDataArgs\n ),\n programAddress,\n } as CurveSwapExactInInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountLaunch,\n TAccountLaunchAuthority,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountUserBaseAccount,\n TAccountUserQuoteAccount,\n TAccountBaseMint,\n TAccountQuoteMint,\n TAccountUser,\n TAccountSentinelProgram,\n TAccountTokenProgram\n >);\n}\n\nexport type ParsedCurveSwapExactInInstruction<\n TProgram extends string = typeof INITIALIZER_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n launch: TAccountMetas[1];\n launchAuthority: TAccountMetas[2];\n baseVault: TAccountMetas[3];\n quoteVault: TAccountMetas[4];\n userBaseAccount: TAccountMetas[5];\n userQuoteAccount: TAccountMetas[6];\n baseMint: TAccountMetas[7];\n quoteMint: TAccountMetas[8];\n user: TAccountMetas[9];\n /** Optional sentinel program (must match launch.sentinel_program if set) */\n sentinelProgram?: TAccountMetas[10] | undefined;\n tokenProgram: TAccountMetas[11];\n };\n data: CurveSwapExactInInstructionData;\n};\n\nexport function parseCurveSwapExactInInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedCurveSwapExactInInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 12) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 12,\n }\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n const getNextOptionalAccount = () => {\n const accountMeta = getNextAccount();\n return accountMeta.address === INITIALIZER_PROGRAM_ADDRESS\n ? undefined\n : accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n launch: getNextAccount(),\n launchAuthority: getNextAccount(),\n baseVault: getNextAccount(),\n quoteVault: getNextAccount(),\n userBaseAccount: getNextAccount(),\n userQuoteAccount: getNextAccount(),\n baseMint: getNextAccount(),\n quoteMint: getNextAccount(),\n user: getNextAccount(),\n sentinelProgram: getNextOptionalAccount(),\n tokenProgram: getNextAccount(),\n },\n data: getCurveSwapExactInInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type Codec,\n type Decoder,\n type Encoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { INITIALIZER_PROGRAM_ADDRESS } from '../programs';\n\nexport const INITIALIZE_CONFIG_DISCRIMINATOR = new Uint8Array([\n 208, 127, 21, 1, 194, 190, 196, 70,\n]);\n\nexport function getInitializeConfigDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n INITIALIZE_CONFIG_DISCRIMINATOR\n );\n}\n\nexport type InitializeConfigInstruction<\n TProgram extends string = typeof INITIALIZER_PROGRAM_ADDRESS,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountProgramData extends string | AccountMeta<string> = string,\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountAdmin extends string\n ? WritableSignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n TAccountConfig extends string\n ? WritableAccount<TAccountConfig>\n : TAccountConfig,\n TAccountProgramData extends string\n ? ReadonlyAccount<TAccountProgramData>\n : TAccountProgramData,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type InitializeConfigInstructionData = {\n discriminator: ReadonlyUint8Array;\n migratorAllowlist: Array<Address>;\n sentinelAllowlist: Array<Address>;\n};\n\nexport type InitializeConfigInstructionDataArgs = {\n migratorAllowlist: Array<Address>;\n sentinelAllowlist: Array<Address>;\n};\n\nexport function getInitializeConfigInstructionDataEncoder(): Encoder<InitializeConfigInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['migratorAllowlist', getArrayEncoder(getAddressEncoder())],\n ['sentinelAllowlist', getArrayEncoder(getAddressEncoder())],\n ]),\n (value) => ({ ...value, discriminator: INITIALIZE_CONFIG_DISCRIMINATOR })\n );\n}\n\nexport function getInitializeConfigInstructionDataDecoder(): Decoder<InitializeConfigInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['migratorAllowlist', getArrayDecoder(getAddressDecoder())],\n ['sentinelAllowlist', getArrayDecoder(getAddressDecoder())],\n ]);\n}\n\nexport function getInitializeConfigInstructionDataCodec(): Codec<\n InitializeConfigInstructionDataArgs,\n InitializeConfigInstructionData\n> {\n return combineCodec(\n getInitializeConfigInstructionDataEncoder(),\n getInitializeConfigInstructionDataDecoder()\n );\n}\n\nexport type InitializeConfigAsyncInput<\n TAccountAdmin extends string = string,\n TAccountConfig extends string = string,\n TAccountProgramData extends string = string,\n TAccountSystemProgram extends string = string,\n> = {\n admin: TransactionSigner<TAccountAdmin>;\n config?: Address<TAccountConfig>;\n programData: Address<TAccountProgramData>;\n systemProgram?: Address<TAccountSystemProgram>;\n migratorAllowlist: InitializeConfigInstructionDataArgs['migratorAllowlist'];\n sentinelAllowlist: InitializeConfigInstructionDataArgs['sentinelAllowlist'];\n};\n\nexport async function getInitializeConfigInstructionAsync<\n TAccountAdmin extends string,\n TAccountConfig extends string,\n TAccountProgramData extends string,\n TAccountSystemProgram extends string,\n TProgramAddress extends Address = typeof INITIALIZER_PROGRAM_ADDRESS,\n>(\n input: InitializeConfigAsyncInput<\n TAccountAdmin,\n TAccountConfig,\n TAccountProgramData,\n TAccountSystemProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n InitializeConfigInstruction<\n TProgramAddress,\n TAccountAdmin,\n TAccountConfig,\n TAccountProgramData,\n TAccountSystemProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? INITIALIZER_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n admin: { value: input.admin ?? null, isWritable: true },\n config: { value: input.config ?? null, isWritable: true },\n programData: { value: input.programData ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.config.value) {\n accounts.config.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([99, 111, 110, 102, 105, 103, 95, 118, 51])\n ),\n ],\n });\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('config', accounts.config),\n getAccountMeta('programData', accounts.programData),\n getAccountMeta('systemProgram', accounts.systemProgram),\n ],\n data: getInitializeConfigInstructionDataEncoder().encode(\n args as InitializeConfigInstructionDataArgs\n ),\n programAddress,\n } as InitializeConfigInstruction<\n TProgramAddress,\n TAccountAdmin,\n TAccountConfig,\n TAccountProgramData,\n TAccountSystemProgram\n >);\n}\n\nexport type InitializeConfigInput<\n TAccountAdmin extends string = string,\n TAccountConfig extends string = string,\n TAccountProgramData extends string = string,\n TAccountSystemProgram extends string = string,\n> = {\n admin: TransactionSigner<TAccountAdmin>;\n config: Address<TAccountConfig>;\n programData: Address<TAccountProgramData>;\n systemProgram?: Address<TAccountSystemProgram>;\n migratorAllowlist: InitializeConfigInstructionDataArgs['migratorAllowlist'];\n sentinelAllowlist: InitializeConfigInstructionDataArgs['sentinelAllowlist'];\n};\n\nexport function getInitializeConfigInstruction<\n TAccountAdmin extends string,\n TAccountConfig extends string,\n TAccountProgramData extends string,\n TAccountSystemProgram extends string,\n TProgramAddress extends Address = typeof INITIALIZER_PROGRAM_ADDRESS,\n>(\n input: InitializeConfigInput<\n TAccountAdmin,\n TAccountConfig,\n TAccountProgramData,\n TAccountSystemProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): InitializeConfigInstruction<\n TProgramAddress,\n TAccountAdmin,\n TAccountConfig,\n TAccountProgramData,\n TAccountSystemProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? INITIALIZER_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n admin: { value: input.admin ?? null, isWritable: true },\n config: { value: input.config ?? null, isWritable: true },\n programData: { value: input.programData ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('config', accounts.config),\n getAccountMeta('programData', accounts.programData),\n getAccountMeta('systemProgram', accounts.systemProgram),\n ],\n data: getInitializeConfigInstructionDataEncoder().encode(\n args as InitializeConfigInstructionDataArgs\n ),\n programAddress,\n } as InitializeConfigInstruction<\n TProgramAddress,\n TAccountAdmin,\n TAccountConfig,\n TAccountProgramData,\n TAccountSystemProgram\n >);\n}\n\nexport type ParsedInitializeConfigInstruction<\n TProgram extends string = typeof INITIALIZER_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n admin: TAccountMetas[0];\n config: TAccountMetas[1];\n programData: TAccountMetas[2];\n systemProgram: TAccountMetas[3];\n };\n data: InitializeConfigInstructionData;\n};\n\nexport function parseInitializeConfigInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedInitializeConfigInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 4) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 4,\n }\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n admin: getNextAccount(),\n config: getNextAccount(),\n programData: getNextAccount(),\n systemProgram: getNextAccount(),\n },\n data: getInitializeConfigInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n addDecoderSizePrefix,\n addEncoderSizePrefix,\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU16Decoder,\n getU16Encoder,\n getU32Decoder,\n getU32Encoder,\n getU64Decoder,\n getU64Encoder,\n getU8Decoder,\n getU8Encoder,\n getUtf8Decoder,\n getUtf8Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type Codec,\n type Decoder,\n type Encoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { INITIALIZER_PROGRAM_ADDRESS } from '../programs';\n\nexport const INITIALIZE_LAUNCH_DISCRIMINATOR = new Uint8Array([\n 90, 201, 220, 142, 112, 253, 100, 13,\n]);\n\nexport function getInitializeLaunchDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n INITIALIZE_LAUNCH_DISCRIMINATOR\n );\n}\n\nexport type InitializeLaunchInstruction<\n TProgram extends string = typeof INITIALIZER_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountLaunch extends string | AccountMeta<string> = string,\n TAccountLaunchAuthority extends string | AccountMeta<string> = string,\n TAccountBaseMint extends string | AccountMeta<string> = string,\n TAccountQuoteMint extends string | AccountMeta<string> = string,\n TAccountBaseVault extends string | AccountMeta<string> = string,\n TAccountQuoteVault extends string | AccountMeta<string> = string,\n TAccountPayer extends string | AccountMeta<string> = string,\n TAccountAuthority extends string | AccountMeta<string> = string,\n TAccountMigratorProgram extends string | AccountMeta<string> = string,\n TAccountTokenProgram extends string | AccountMeta<string> =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TAccountRent extends string | AccountMeta<string> =\n 'SysvarRent111111111111111111111111111111111',\n TAccountMetadataAccount extends string | AccountMeta<string> = string,\n TAccountMetadataProgram extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountLaunch extends string\n ? WritableAccount<TAccountLaunch>\n : TAccountLaunch,\n TAccountLaunchAuthority extends string\n ? ReadonlyAccount<TAccountLaunchAuthority>\n : TAccountLaunchAuthority,\n TAccountBaseMint extends string\n ? WritableSignerAccount<TAccountBaseMint> &\n AccountSignerMeta<TAccountBaseMint>\n : TAccountBaseMint,\n TAccountQuoteMint extends string\n ? ReadonlyAccount<TAccountQuoteMint>\n : TAccountQuoteMint,\n TAccountBaseVault extends string\n ? WritableSignerAccount<TAccountBaseVault> &\n AccountSignerMeta<TAccountBaseVault>\n : TAccountBaseVault,\n TAccountQuoteVault extends string\n ? WritableSignerAccount<TAccountQuoteVault> &\n AccountSignerMeta<TAccountQuoteVault>\n : TAccountQuoteVault,\n TAccountPayer extends string\n ? WritableSignerAccount<TAccountPayer> &\n AccountSignerMeta<TAccountPayer>\n : TAccountPayer,\n TAccountAuthority extends string\n ? ReadonlySignerAccount<TAccountAuthority> &\n AccountSignerMeta<TAccountAuthority>\n : TAccountAuthority,\n TAccountMigratorProgram extends string\n ? ReadonlyAccount<TAccountMigratorProgram>\n : TAccountMigratorProgram,\n TAccountTokenProgram extends string\n ? ReadonlyAccount<TAccountTokenProgram>\n : TAccountTokenProgram,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n TAccountRent extends string\n ? ReadonlyAccount<TAccountRent>\n : TAccountRent,\n TAccountMetadataAccount extends string\n ? WritableAccount<TAccountMetadataAccount>\n : TAccountMetadataAccount,\n TAccountMetadataProgram extends string\n ? ReadonlyAccount<TAccountMetadataProgram>\n : TAccountMetadataProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type InitializeLaunchInstructionData = {\n discriminator: ReadonlyUint8Array;\n namespace: Address;\n launchId: ReadonlyUint8Array;\n baseDecimals: number;\n baseTotalSupply: bigint;\n baseForDistribution: bigint;\n baseForLiquidity: bigint;\n curveVirtualBase: bigint;\n curveVirtualQuote: bigint;\n curveFeeBps: number;\n curveKind: number;\n curveParams: ReadonlyUint8Array;\n allowBuy: number;\n allowSell: number;\n sentinelProgram: Address;\n sentinelFlags: number;\n sentinelCalldata: ReadonlyUint8Array;\n migratorProgram: Address;\n migratorInitCalldata: ReadonlyUint8Array;\n migratorMigrateCalldata: ReadonlyUint8Array;\n /**\n * Commitment hash for swap/preview sentinel remaining accounts.\n * Computed as hash(u32_len || pubkey_0 || ... || pubkey_n).\n */\n sentinelRemainingAccountsHash: ReadonlyUint8Array;\n /**\n * Commitment hash for migrate remaining accounts.\n * Computed as hash(u32_len || pubkey_0 || ... || pubkey_n).\n */\n migratorRemainingAccountsHash: ReadonlyUint8Array;\n /** Token name for on-chain metadata. If empty, metadata creation is skipped. */\n metadataName: string;\n /** Token symbol for on-chain metadata. */\n metadataSymbol: string;\n /** Metadata JSON URI for on-chain metadata. */\n metadataUri: string;\n};\n\nexport type InitializeLaunchInstructionDataArgs = {\n namespace: Address;\n launchId: ReadonlyUint8Array;\n baseDecimals: number;\n baseTotalSupply: number | bigint;\n baseForDistribution: number | bigint;\n baseForLiquidity: number | bigint;\n curveVirtualBase: number | bigint;\n curveVirtualQuote: number | bigint;\n curveFeeBps: number;\n curveKind: number;\n curveParams: ReadonlyUint8Array;\n allowBuy: number;\n allowSell: number;\n sentinelProgram: Address;\n sentinelFlags: number;\n sentinelCalldata: ReadonlyUint8Array;\n migratorProgram: Address;\n migratorInitCalldata: ReadonlyUint8Array;\n migratorMigrateCalldata: ReadonlyUint8Array;\n /**\n * Commitment hash for swap/preview sentinel remaining accounts.\n * Computed as hash(u32_len || pubkey_0 || ... || pubkey_n).\n */\n sentinelRemainingAccountsHash: ReadonlyUint8Array;\n /**\n * Commitment hash for migrate remaining accounts.\n * Computed as hash(u32_len || pubkey_0 || ... || pubkey_n).\n */\n migratorRemainingAccountsHash: ReadonlyUint8Array;\n /** Token name for on-chain metadata. If empty, metadata creation is skipped. */\n metadataName: string;\n /** Token symbol for on-chain metadata. */\n metadataSymbol: string;\n /** Metadata JSON URI for on-chain metadata. */\n metadataUri: string;\n};\n\nexport function getInitializeLaunchInstructionDataEncoder(): Encoder<InitializeLaunchInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['namespace', getAddressEncoder()],\n ['launchId', fixEncoderSize(getBytesEncoder(), 32)],\n ['baseDecimals', getU8Encoder()],\n ['baseTotalSupply', getU64Encoder()],\n ['baseForDistribution', getU64Encoder()],\n ['baseForLiquidity', getU64Encoder()],\n ['curveVirtualBase', getU64Encoder()],\n ['curveVirtualQuote', getU64Encoder()],\n ['curveFeeBps', getU16Encoder()],\n ['curveKind', getU8Encoder()],\n ['curveParams', addEncoderSizePrefix(getBytesEncoder(), getU32Encoder())],\n ['allowBuy', getU8Encoder()],\n ['allowSell', getU8Encoder()],\n ['sentinelProgram', getAddressEncoder()],\n ['sentinelFlags', getU32Encoder()],\n [\n 'sentinelCalldata',\n addEncoderSizePrefix(getBytesEncoder(), getU32Encoder()),\n ],\n ['migratorProgram', getAddressEncoder()],\n [\n 'migratorInitCalldata',\n addEncoderSizePrefix(getBytesEncoder(), getU32Encoder()),\n ],\n [\n 'migratorMigrateCalldata',\n addEncoderSizePrefix(getBytesEncoder(), getU32Encoder()),\n ],\n ['sentinelRemainingAccountsHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['migratorRemainingAccountsHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['metadataName', addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder())],\n [\n 'metadataSymbol',\n addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder()),\n ],\n ['metadataUri', addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder())],\n ]),\n (value) => ({ ...value, discriminator: INITIALIZE_LAUNCH_DISCRIMINATOR })\n );\n}\n\nexport function getInitializeLaunchInstructionDataDecoder(): Decoder<InitializeLaunchInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['namespace', getAddressDecoder()],\n ['launchId', fixDecoderSize(getBytesDecoder(), 32)],\n ['baseDecimals', getU8Decoder()],\n ['baseTotalSupply', getU64Decoder()],\n ['baseForDistribution', getU64Decoder()],\n ['baseForLiquidity', getU64Decoder()],\n ['curveVirtualBase', getU64Decoder()],\n ['curveVirtualQuote', getU64Decoder()],\n ['curveFeeBps', getU16Decoder()],\n ['curveKind', getU8Decoder()],\n ['curveParams', addDecoderSizePrefix(getBytesDecoder(), getU32Decoder())],\n ['allowBuy', getU8Decoder()],\n ['allowSell', getU8Decoder()],\n ['sentinelProgram', getAddressDecoder()],\n ['sentinelFlags', getU32Decoder()],\n [\n 'sentinelCalldata',\n addDecoderSizePrefix(getBytesDecoder(), getU32Decoder()),\n ],\n ['migratorProgram', getAddressDecoder()],\n [\n 'migratorInitCalldata',\n addDecoderSizePrefix(getBytesDecoder(), getU32Decoder()),\n ],\n [\n 'migratorMigrateCalldata',\n addDecoderSizePrefix(getBytesDecoder(), getU32Decoder()),\n ],\n ['sentinelRemainingAccountsHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['migratorRemainingAccountsHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['metadataName', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())],\n ['metadataSymbol', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())],\n ['metadataUri', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())],\n ]);\n}\n\nexport function getInitializeLaunchInstructionDataCodec(): Codec<\n InitializeLaunchInstructionDataArgs,\n InitializeLaunchInstructionData\n> {\n return combineCodec(\n getInitializeLaunchInstructionDataEncoder(),\n getInitializeLaunchInstructionDataDecoder()\n );\n}\n\nexport type InitializeLaunchAsyncInput<\n TAccountConfig extends string = string,\n TAccountLaunch extends string = string,\n TAccountLaunchAuthority extends string = string,\n TAccountBaseMint extends string = string,\n TAccountQuoteMint extends string = string,\n TAccountBaseVault extends string = string,\n TAccountQuoteVault extends string = string,\n TAccountPayer extends string = string,\n TAccountAuthority extends string = string,\n TAccountMigratorProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountRent extends string = string,\n TAccountMetadataAccount extends string = string,\n TAccountMetadataProgram extends string = string,\n> = {\n config?: Address<TAccountConfig>;\n launch: Address<TAccountLaunch>;\n launchAuthority?: Address<TAccountLaunchAuthority>;\n baseMint: TransactionSigner<TAccountBaseMint>;\n quoteMint: Address<TAccountQuoteMint>;\n baseVault: TransactionSigner<TAccountBaseVault>;\n quoteVault: TransactionSigner<TAccountQuoteVault>;\n payer: TransactionSigner<TAccountPayer>;\n /** Optional authority (creator/admin). If not provided, launch is permissionless. */\n authority?: TransactionSigner<TAccountAuthority>;\n /** Optional migrator program for init hook */\n migratorProgram?: Address<TAccountMigratorProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n systemProgram?: Address<TAccountSystemProgram>;\n rent?: Address<TAccountRent>;\n /** Metadata account (PDA derived from base_mint via Metaplex Token Metadata). */\n metadataAccount?: Address<TAccountMetadataAccount>;\n /** Metaplex Token Metadata program. */\n metadataProgram?: Address<TAccountMetadataProgram>;\n namespace: InitializeLaunchInstructionDataArgs['namespace'];\n launchId: InitializeLaunchInstructionDataArgs['launchId'];\n baseDecimals: InitializeLaunchInstructionDataArgs['baseDecimals'];\n baseTotalSupply: InitializeLaunchInstructionDataArgs['baseTotalSupply'];\n baseForDistribution: InitializeLaunchInstructionDataArgs['baseForDistribution'];\n baseForLiquidity: InitializeLaunchInstructionDataArgs['baseForLiquidity'];\n curveVirtualBase: InitializeLaunchInstructionDataArgs['curveVirtualBase'];\n curveVirtualQuote: InitializeLaunchInstructionDataArgs['curveVirtualQuote'];\n curveFeeBps: InitializeLaunchInstructionDataArgs['curveFeeBps'];\n curveKind: InitializeLaunchInstructionDataArgs['curveKind'];\n curveParams: InitializeLaunchInstructionDataArgs['curveParams'];\n allowBuy: InitializeLaunchInstructionDataArgs['allowBuy'];\n allowSell: InitializeLaunchInstructionDataArgs['allowSell'];\n sentinelProgram: InitializeLaunchInstructionDataArgs['sentinelProgram'];\n sentinelFlags: InitializeLaunchInstructionDataArgs['sentinelFlags'];\n sentinelCalldata: InitializeLaunchInstructionDataArgs['sentinelCalldata'];\n migratorProgramArg: InitializeLaunchInstructionDataArgs['migratorProgram'];\n migratorInitCalldata: InitializeLaunchInstructionDataArgs['migratorInitCalldata'];\n migratorMigrateCalldata: InitializeLaunchInstructionDataArgs['migratorMigrateCalldata'];\n sentinelRemainingAccountsHash: InitializeLaunchInstructionDataArgs['sentinelRemainingAccountsHash'];\n migratorRemainingAccountsHash: InitializeLaunchInstructionDataArgs['migratorRemainingAccountsHash'];\n metadataName: InitializeLaunchInstructionDataArgs['metadataName'];\n metadataSymbol: InitializeLaunchInstructionDataArgs['metadataSymbol'];\n metadataUri: InitializeLaunchInstructionDataArgs['metadataUri'];\n};\n\nexport async function getInitializeLaunchInstructionAsync<\n TAccountConfig extends string,\n TAccountLaunch extends string,\n TAccountLaunchAuthority extends string,\n TAccountBaseMint extends string,\n TAccountQuoteMint extends string,\n TAccountBaseVault extends string,\n TAccountQuoteVault extends string,\n TAccountPayer extends string,\n TAccountAuthority extends string,\n TAccountMigratorProgram extends string,\n TAccountTokenProgram extends string,\n TAccountSystemProgram extends string,\n TAccountRent extends string,\n TAccountMetadataAccount extends string,\n TAccountMetadataProgram extends string,\n TProgramAddress extends Address = typeof INITIALIZER_PROGRAM_ADDRESS,\n>(\n input: InitializeLaunchAsyncInput<\n TAccountConfig,\n TAccountLaunch,\n TAccountLaunchAuthority,\n TAccountBaseMint,\n TAccountQuoteMint,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountPayer,\n TAccountAuthority,\n TAccountMigratorProgram,\n TAccountTokenProgram,\n TAccountSystemProgram,\n TAccountRent,\n TAccountMetadataAccount,\n TAccountMetadataProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n InitializeLaunchInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountLaunch,\n TAccountLaunchAuthority,\n TAccountBaseMint,\n TAccountQuoteMint,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountPayer,\n TAccountAuthority,\n TAccountMigratorProgram,\n TAccountTokenProgram,\n TAccountSystemProgram,\n TAccountRent,\n TAccountMetadataAccount,\n TAccountMetadataProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? INITIALIZER_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n launch: { value: input.launch ?? null, isWritable: true },\n launchAuthority: {\n value: input.launchAuthority ?? null,\n isWritable: false,\n },\n baseMint: { value: input.baseMint ?? null, isWritable: true },\n quoteMint: { value: input.quoteMint ?? null, isWritable: false },\n baseVault: { value: input.baseVault ?? null, isWritable: true },\n quoteVault: { value: input.quoteVault ?? null, isWritable: true },\n payer: { value: input.payer ?? null, isWritable: true },\n authority: { value: input.authority ?? null, isWritable: false },\n migratorProgram: {\n value: input.migratorProgram ?? null,\n isWritable: false,\n },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n rent: { value: input.rent ?? null, isWritable: false },\n metadataAccount: { value: input.metadataAccount ?? null, isWritable: true },\n metadataProgram: {\n value: input.metadataProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input, migratorProgram: input.migratorProgramArg };\n\n // Resolve default values.\n if (!accounts.config.value) {\n accounts.config.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([99, 111, 110, 102, 105, 103, 95, 118, 51])\n ),\n ],\n });\n }\n if (!accounts.launchAuthority.value) {\n accounts.launchAuthority.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([\n 108, 97, 117, 110, 99, 104, 95, 97, 117, 116, 104, 111, 114, 105,\n 116, 121, 95, 118, 51,\n ])\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount(\n 'launch',\n accounts.launch.value\n )\n ),\n ],\n });\n }\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.rent.value) {\n accounts.rent.value =\n 'SysvarRent111111111111111111111111111111111' as Address<'SysvarRent111111111111111111111111111111111'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('launch', accounts.launch),\n getAccountMeta('launchAuthority', accounts.launchAuthority),\n getAccountMeta('baseMint', accounts.baseMint),\n getAccountMeta('quoteMint', accounts.quoteMint),\n getAccountMeta('baseVault', accounts.baseVault),\n getAccountMeta('quoteVault', accounts.quoteVault),\n getAccountMeta('payer', accounts.payer),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('migratorProgram', accounts.migratorProgram),\n getAccountMeta('tokenProgram', accounts.tokenProgram),\n getAccountMeta('systemProgram', accounts.systemProgram),\n getAccountMeta('rent', accounts.rent),\n getAccountMeta('metadataAccount', accounts.metadataAccount),\n getAccountMeta('metadataProgram', accounts.metadataProgram),\n ],\n data: getInitializeLaunchInstructionDataEncoder().encode(\n args as InitializeLaunchInstructionDataArgs\n ),\n programAddress,\n } as InitializeLaunchInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountLaunch,\n TAccountLaunchAuthority,\n TAccountBaseMint,\n TAccountQuoteMint,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountPayer,\n TAccountAuthority,\n TAccountMigratorProgram,\n TAccountTokenProgram,\n TAccountSystemProgram,\n TAccountRent,\n TAccountMetadataAccount,\n TAccountMetadataProgram\n >);\n}\n\nexport type InitializeLaunchInput<\n TAccountConfig extends string = string,\n TAccountLaunch extends string = string,\n TAccountLaunchAuthority extends string = string,\n TAccountBaseMint extends string = string,\n TAccountQuoteMint extends string = string,\n TAccountBaseVault extends string = string,\n TAccountQuoteVault extends string = string,\n TAccountPayer extends string = string,\n TAccountAuthority extends string = string,\n TAccountMigratorProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountRent extends string = string,\n TAccountMetadataAccount extends string = string,\n TAccountMetadataProgram extends string = string,\n> = {\n config: Address<TAccountConfig>;\n launch: Address<TAccountLaunch>;\n launchAuthority: Address<TAccountLaunchAuthority>;\n baseMint: TransactionSigner<TAccountBaseMint>;\n quoteMint: Address<TAccountQuoteMint>;\n baseVault: TransactionSigner<TAccountBaseVault>;\n quoteVault: TransactionSigner<TAccountQuoteVault>;\n payer: TransactionSigner<TAccountPayer>;\n /** Optional authority (creator/admin). If not provided, launch is permissionless. */\n authority?: TransactionSigner<TAccountAuthority>;\n /** Optional migrator program for init hook */\n migratorProgram?: Address<TAccountMigratorProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n systemProgram?: Address<TAccountSystemProgram>;\n rent?: Address<TAccountRent>;\n /** Metadata account (PDA derived from base_mint via Metaplex Token Metadata). */\n metadataAccount?: Address<TAccountMetadataAccount>;\n /** Metaplex Token Metadata program. */\n metadataProgram?: Address<TAccountMetadataProgram>;\n namespace: InitializeLaunchInstructionDataArgs['namespace'];\n launchId: InitializeLaunchInstructionDataArgs['launchId'];\n baseDecimals: InitializeLaunchInstructionDataArgs['baseDecimals'];\n baseTotalSupply: InitializeLaunchInstructionDataArgs['baseTotalSupply'];\n baseForDistribution: InitializeLaunchInstructionDataArgs['baseForDistribution'];\n baseForLiquidity: InitializeLaunchInstructionDataArgs['baseForLiquidity'];\n curveVirtualBase: InitializeLaunchInstructionDataArgs['curveVirtualBase'];\n curveVirtualQuote: InitializeLaunchInstructionDataArgs['curveVirtualQuote'];\n curveFeeBps: InitializeLaunchInstructionDataArgs['curveFeeBps'];\n curveKind: InitializeLaunchInstructionDataArgs['curveKind'];\n curveParams: InitializeLaunchInstructionDataArgs['curveParams'];\n allowBuy: InitializeLaunchInstructionDataArgs['allowBuy'];\n allowSell: InitializeLaunchInstructionDataArgs['allowSell'];\n sentinelProgram: InitializeLaunchInstructionDataArgs['sentinelProgram'];\n sentinelFlags: InitializeLaunchInstructionDataArgs['sentinelFlags'];\n sentinelCalldata: InitializeLaunchInstructionDataArgs['sentinelCalldata'];\n migratorProgramArg: InitializeLaunchInstructionDataArgs['migratorProgram'];\n migratorInitCalldata: InitializeLaunchInstructionDataArgs['migratorInitCalldata'];\n migratorMigrateCalldata: InitializeLaunchInstructionDataArgs['migratorMigrateCalldata'];\n sentinelRemainingAccountsHash: InitializeLaunchInstructionDataArgs['sentinelRemainingAccountsHash'];\n migratorRemainingAccountsHash: InitializeLaunchInstructionDataArgs['migratorRemainingAccountsHash'];\n metadataName: InitializeLaunchInstructionDataArgs['metadataName'];\n metadataSymbol: InitializeLaunchInstructionDataArgs['metadataSymbol'];\n metadataUri: InitializeLaunchInstructionDataArgs['metadataUri'];\n};\n\nexport function getInitializeLaunchInstruction<\n TAccountConfig extends string,\n TAccountLaunch extends string,\n TAccountLaunchAuthority extends string,\n TAccountBaseMint extends string,\n TAccountQuoteMint extends string,\n TAccountBaseVault extends string,\n TAccountQuoteVault extends string,\n TAccountPayer extends string,\n TAccountAuthority extends string,\n TAccountMigratorProgram extends string,\n TAccountTokenProgram extends string,\n TAccountSystemProgram extends string,\n TAccountRent extends string,\n TAccountMetadataAccount extends string,\n TAccountMetadataProgram extends string,\n TProgramAddress extends Address = typeof INITIALIZER_PROGRAM_ADDRESS,\n>(\n input: InitializeLaunchInput<\n TAccountConfig,\n TAccountLaunch,\n TAccountLaunchAuthority,\n TAccountBaseMint,\n TAccountQuoteMint,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountPayer,\n TAccountAuthority,\n TAccountMigratorProgram,\n TAccountTokenProgram,\n TAccountSystemProgram,\n TAccountRent,\n TAccountMetadataAccount,\n TAccountMetadataProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): InitializeLaunchInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountLaunch,\n TAccountLaunchAuthority,\n TAccountBaseMint,\n TAccountQuoteMint,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountPayer,\n TAccountAuthority,\n TAccountMigratorProgram,\n TAccountTokenProgram,\n TAccountSystemProgram,\n TAccountRent,\n TAccountMetadataAccount,\n TAccountMetadataProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? INITIALIZER_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n launch: { value: input.launch ?? null, isWritable: true },\n launchAuthority: {\n value: input.launchAuthority ?? null,\n isWritable: false,\n },\n baseMint: { value: input.baseMint ?? null, isWritable: true },\n quoteMint: { value: input.quoteMint ?? null, isWritable: false },\n baseVault: { value: input.baseVault ?? null, isWritable: true },\n quoteVault: { value: input.quoteVault ?? null, isWritable: true },\n payer: { value: input.payer ?? null, isWritable: true },\n authority: { value: input.authority ?? null, isWritable: false },\n migratorProgram: {\n value: input.migratorProgram ?? null,\n isWritable: false,\n },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n rent: { value: input.rent ?? null, isWritable: false },\n metadataAccount: { value: input.metadataAccount ?? null, isWritable: true },\n metadataProgram: {\n value: input.metadataProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input, migratorProgram: input.migratorProgramArg };\n\n // Resolve default values.\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.rent.value) {\n accounts.rent.value =\n 'SysvarRent111111111111111111111111111111111' as Address<'SysvarRent111111111111111111111111111111111'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('launch', accounts.launch),\n getAccountMeta('launchAuthority', accounts.launchAuthority),\n getAccountMeta('baseMint', accounts.baseMint),\n getAccountMeta('quoteMint', accounts.quoteMint),\n getAccountMeta('baseVault', accounts.baseVault),\n getAccountMeta('quoteVault', accounts.quoteVault),\n getAccountMeta('payer', accounts.payer),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('migratorProgram', accounts.migratorProgram),\n getAccountMeta('tokenProgram', accounts.tokenProgram),\n getAccountMeta('systemProgram', accounts.systemProgram),\n getAccountMeta('rent', accounts.rent),\n getAccountMeta('metadataAccount', accounts.metadataAccount),\n getAccountMeta('metadataProgram', accounts.metadataProgram),\n ],\n data: getInitializeLaunchInstructionDataEncoder().encode(\n args as InitializeLaunchInstructionDataArgs\n ),\n programAddress,\n } as InitializeLaunchInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountLaunch,\n TAccountLaunchAuthority,\n TAccountBaseMint,\n TAccountQuoteMint,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountPayer,\n TAccountAuthority,\n TAccountMigratorProgram,\n TAccountTokenProgram,\n TAccountSystemProgram,\n TAccountRent,\n TAccountMetadataAccount,\n TAccountMetadataProgram\n >);\n}\n\nexport type ParsedInitializeLaunchInstruction<\n TProgram extends string = typeof INITIALIZER_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n launch: TAccountMetas[1];\n launchAuthority: TAccountMetas[2];\n baseMint: TAccountMetas[3];\n quoteMint: TAccountMetas[4];\n baseVault: TAccountMetas[5];\n quoteVault: TAccountMetas[6];\n payer: TAccountMetas[7];\n /** Optional authority (creator/admin). If not provided, launch is permissionless. */\n authority?: TAccountMetas[8] | undefined;\n /** Optional migrator program for init hook */\n migratorProgram?: TAccountMetas[9] | undefined;\n tokenProgram: TAccountMetas[10];\n systemProgram: TAccountMetas[11];\n rent: TAccountMetas[12];\n /** Metadata account (PDA derived from base_mint via Metaplex Token Metadata). */\n metadataAccount?: TAccountMetas[13] | undefined;\n /** Metaplex Token Metadata program. */\n metadataProgram?: TAccountMetas[14] | undefined;\n };\n data: InitializeLaunchInstructionData;\n};\n\nexport function parseInitializeLaunchInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedInitializeLaunchInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 15) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 15,\n }\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n const getNextOptionalAccount = () => {\n const accountMeta = getNextAccount();\n return accountMeta.address === INITIALIZER_PROGRAM_ADDRESS\n ? undefined\n : accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n launch: getNextAccount(),\n launchAuthority: getNextAccount(),\n baseMint: getNextAccount(),\n quoteMint: getNextAccount(),\n baseVault: getNextAccount(),\n quoteVault: getNextAccount(),\n payer: getNextAccount(),\n authority: getNextOptionalAccount(),\n migratorProgram: getNextOptionalAccount(),\n tokenProgram: getNextAccount(),\n systemProgram: getNextAccount(),\n rent: getNextAccount(),\n metadataAccount: getNextOptionalAccount(),\n metadataProgram: getNextOptionalAccount(),\n },\n data: getInitializeLaunchInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n getU8Decoder,\n getU8Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { INITIALIZER_PROGRAM_ADDRESS } from '../programs';\n\nexport const PREVIEW_SWAP_EXACT_IN_DISCRIMINATOR = new Uint8Array([\n 50, 130, 31, 69, 147, 58, 222, 178,\n]);\n\nexport function getPreviewSwapExactInDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n PREVIEW_SWAP_EXACT_IN_DISCRIMINATOR\n );\n}\n\nexport type PreviewSwapExactInInstruction<\n TProgram extends string = typeof INITIALIZER_PROGRAM_ADDRESS,\n TAccountLaunch extends string | AccountMeta<string> = string,\n TAccountBaseVault extends string | AccountMeta<string> = string,\n TAccountQuoteVault extends string | AccountMeta<string> = string,\n TAccountSentinelProgram extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountLaunch extends string\n ? ReadonlyAccount<TAccountLaunch>\n : TAccountLaunch,\n TAccountBaseVault extends string\n ? ReadonlyAccount<TAccountBaseVault>\n : TAccountBaseVault,\n TAccountQuoteVault extends string\n ? ReadonlyAccount<TAccountQuoteVault>\n : TAccountQuoteVault,\n TAccountSentinelProgram extends string\n ? ReadonlyAccount<TAccountSentinelProgram>\n : TAccountSentinelProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type PreviewSwapExactInInstructionData = {\n discriminator: ReadonlyUint8Array;\n amountIn: bigint;\n direction: number;\n};\n\nexport type PreviewSwapExactInInstructionDataArgs = {\n amountIn: number | bigint;\n direction: number;\n};\n\nexport function getPreviewSwapExactInInstructionDataEncoder(): FixedSizeEncoder<PreviewSwapExactInInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['amountIn', getU64Encoder()],\n ['direction', getU8Encoder()],\n ]),\n (value) => ({\n ...value,\n discriminator: PREVIEW_SWAP_EXACT_IN_DISCRIMINATOR,\n })\n );\n}\n\nexport function getPreviewSwapExactInInstructionDataDecoder(): FixedSizeDecoder<PreviewSwapExactInInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['amountIn', getU64Decoder()],\n ['direction', getU8Decoder()],\n ]);\n}\n\nexport function getPreviewSwapExactInInstructionDataCodec(): FixedSizeCodec<\n PreviewSwapExactInInstructionDataArgs,\n PreviewSwapExactInInstructionData\n> {\n return combineCodec(\n getPreviewSwapExactInInstructionDataEncoder(),\n getPreviewSwapExactInInstructionDataDecoder()\n );\n}\n\nexport type PreviewSwapExactInInput<\n TAccountLaunch extends string = string,\n TAccountBaseVault extends string = string,\n TAccountQuoteVault extends string = string,\n TAccountSentinelProgram extends string = string,\n> = {\n launch: Address<TAccountLaunch>;\n baseVault: Address<TAccountBaseVault>;\n quoteVault: Address<TAccountQuoteVault>;\n /** Optional sentinel program (must match launch.sentinel_program if set) */\n sentinelProgram?: Address<TAccountSentinelProgram>;\n amountIn: PreviewSwapExactInInstructionDataArgs['amountIn'];\n direction: PreviewSwapExactInInstructionDataArgs['direction'];\n};\n\nexport function getPreviewSwapExactInInstruction<\n TAccountLaunch extends string,\n TAccountBaseVault extends string,\n TAccountQuoteVault extends string,\n TAccountSentinelProgram extends string,\n TProgramAddress extends Address = typeof INITIALIZER_PROGRAM_ADDRESS,\n>(\n input: PreviewSwapExactInInput<\n TAccountLaunch,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountSentinelProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): PreviewSwapExactInInstruction<\n TProgramAddress,\n TAccountLaunch,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountSentinelProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? INITIALIZER_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n launch: { value: input.launch ?? null, isWritable: false },\n baseVault: { value: input.baseVault ?? null, isWritable: false },\n quoteVault: { value: input.quoteVault ?? null, isWritable: false },\n sentinelProgram: {\n value: input.sentinelProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('launch', accounts.launch),\n getAccountMeta('baseVault', accounts.baseVault),\n getAccountMeta('quoteVault', accounts.quoteVault),\n getAccountMeta('sentinelProgram', accounts.sentinelProgram),\n ],\n data: getPreviewSwapExactInInstructionDataEncoder().encode(\n args as PreviewSwapExactInInstructionDataArgs\n ),\n programAddress,\n } as PreviewSwapExactInInstruction<\n TProgramAddress,\n TAccountLaunch,\n TAccountBaseVault,\n TAccountQuoteVault,\n TAccountSentinelProgram\n >);\n}\n\nexport type ParsedPreviewSwapExactInInstruction<\n TProgram extends string = typeof INITIALIZER_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n launch: TAccountMetas[0];\n baseVault: TAccountMetas[1];\n quoteVault: TAccountMetas[2];\n /** Optional sentinel program (must match launch.sentinel_program if set) */\n sentinelProgram?: TAccountMetas[3] | undefined;\n };\n data: PreviewSwapExactInInstructionData;\n};\n\nexport function parsePreviewSwapExactInInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedPreviewSwapExactInInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 4) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 4,\n }\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n const getNextOptionalAccount = () => {\n const accountMeta = getNextAccount();\n return accountMeta.address === INITIALIZER_PROGRAM_ADDRESS\n ? undefined\n : accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n launch: getNextAccount(),\n baseVault: getNextAccount(),\n quoteVault: getNextAccount(),\n sentinelProgram: getNextOptionalAccount(),\n },\n data: getPreviewSwapExactInInstructionDataDecoder().decode(\n instruction.data\n ),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type Codec,\n type Decoder,\n type Encoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { INITIALIZER_PROGRAM_ADDRESS } from '../programs';\n\nexport const SET_MIGRATOR_ALLOWLIST_DISCRIMINATOR = new Uint8Array([\n 209, 90, 181, 104, 99, 108, 233, 168,\n]);\n\nexport function getSetMigratorAllowlistDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n SET_MIGRATOR_ALLOWLIST_DISCRIMINATOR\n );\n}\n\nexport type SetMigratorAllowlistInstruction<\n TProgram extends string = typeof INITIALIZER_PROGRAM_ADDRESS,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TAccountConfig extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountAdmin extends string\n ? ReadonlySignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n TAccountConfig extends string\n ? WritableAccount<TAccountConfig>\n : TAccountConfig,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type SetMigratorAllowlistInstructionData = {\n discriminator: ReadonlyUint8Array;\n allowlist: Array<Address>;\n};\n\nexport type SetMigratorAllowlistInstructionDataArgs = {\n allowlist: Array<Address>;\n};\n\nexport function getSetMigratorAllowlistInstructionDataEncoder(): Encoder<SetMigratorAllowlistInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['allowlist', getArrayEncoder(getAddressEncoder())],\n ]),\n (value) => ({\n ...value,\n discriminator: SET_MIGRATOR_ALLOWLIST_DISCRIMINATOR,\n })\n );\n}\n\nexport function getSetMigratorAllowlistInstructionDataDecoder(): Decoder<SetMigratorAllowlistInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['allowlist', getArrayDecoder(getAddressDecoder())],\n ]);\n}\n\nexport function getSetMigratorAllowlistInstructionDataCodec(): Codec<\n SetMigratorAllowlistInstructionDataArgs,\n SetMigratorAllowlistInstructionData\n> {\n return combineCodec(\n getSetMigratorAllowlistInstructionDataEncoder(),\n getSetMigratorAllowlistInstructionDataDecoder()\n );\n}\n\nexport type SetMigratorAllowlistAsyncInput<\n TAccountAdmin extends string = string,\n TAccountConfig extends string = string,\n> = {\n admin: TransactionSigner<TAccountAdmin>;\n config?: Address<TAccountConfig>;\n allowlist: SetMigratorAllowlistInstructionDataArgs['allowlist'];\n};\n\nexport async function getSetMigratorAllowlistInstructionAsync<\n TAccountAdmin extends string,\n TAccountConfig extends string,\n TProgramAddress extends Address = typeof INITIALIZER_PROGRAM_ADDRESS,\n>(\n input: SetMigratorAllowlistAsyncInput<TAccountAdmin, TAccountConfig>,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n SetMigratorAllowlistInstruction<\n TProgramAddress,\n TAccountAdmin,\n TAccountConfig\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? INITIALIZER_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n admin: { value: input.admin ?? null, isWritable: false },\n config: { value: input.config ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.config.value) {\n accounts.config.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([99, 111, 110, 102, 105, 103, 95, 118, 51])\n ),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('config', accounts.config),\n ],\n data: getSetMigratorAllowlistInstructionDataEncoder().encode(\n args as SetMigratorAllowlistInstructionDataArgs\n ),\n programAddress,\n } as SetMigratorAllowlistInstruction<\n TProgramAddress,\n TAccountAdmin,\n TAccountConfig\n >);\n}\n\nexport type SetMigratorAllowlistInput<\n TAccountAdmin extends string = string,\n TAccountConfig extends string = string,\n> = {\n admin: TransactionSigner<TAccountAdmin>;\n config: Address<TAccountConfig>;\n allowlist: SetMigratorAllowlistInstructionDataArgs['allowlist'];\n};\n\nexport function getSetMigratorAllowlistInstruction<\n TAccountAdmin extends string,\n TAccountConfig extends string,\n TProgramAddress extends Address = typeof INITIALIZER_PROGRAM_ADDRESS,\n>(\n input: SetMigratorAllowlistInput<TAccountAdmin, TAccountConfig>,\n config?: { programAddress?: TProgramAddress }\n): SetMigratorAllowlistInstruction<\n TProgramAddress,\n TAccountAdmin,\n TAccountConfig\n> {\n // Program address.\n const programAddress = config?.programAddress ?? INITIALIZER_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n admin: { value: input.admin ?? null, isWritable: false },\n config: { value: input.config ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('config', accounts.config),\n ],\n data: getSetMigratorAllowlistInstructionDataEncoder().encode(\n args as SetMigratorAllowlistInstructionDataArgs\n ),\n programAddress,\n } as SetMigratorAllowlistInstruction<\n TProgramAddress,\n TAccountAdmin,\n TAccountConfig\n >);\n}\n\nexport type ParsedSetMigratorAllowlistInstruction<\n TProgram extends string = typeof INITIALIZER_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n admin: TAccountMetas[0];\n config: TAccountMetas[1];\n };\n data: SetMigratorAllowlistInstructionData;\n};\n\nexport function parseSetMigratorAllowlistInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedSetMigratorAllowlistInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 2) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 2,\n }\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: { admin: getNextAccount(), config: getNextAccount() },\n data: getSetMigratorAllowlistInstructionDataDecoder().decode(\n instruction.data\n ),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type Codec,\n type Decoder,\n type Encoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { INITIALIZER_PROGRAM_ADDRESS } from '../programs';\n\nexport const SET_SENTINEL_ALLOWLIST_DISCRIMINATOR = new Uint8Array([\n 233, 72, 180, 246, 171, 117, 21, 50,\n]);\n\nexport function getSetSentinelAllowlistDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n SET_SENTINEL_ALLOWLIST_DISCRIMINATOR\n );\n}\n\nexport type SetSentinelAllowlistInstruction<\n TProgram extends string = typeof INITIALIZER_PROGRAM_ADDRESS,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TAccountConfig extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountAdmin extends string\n ? ReadonlySignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n TAccountConfig extends string\n ? WritableAccount<TAccountConfig>\n : TAccountConfig,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type SetSentinelAllowlistInstructionData = {\n discriminator: ReadonlyUint8Array;\n allowlist: Array<Address>;\n};\n\nexport type SetSentinelAllowlistInstructionDataArgs = {\n allowlist: Array<Address>;\n};\n\nexport function getSetSentinelAllowlistInstructionDataEncoder(): Encoder<SetSentinelAllowlistInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['allowlist', getArrayEncoder(getAddressEncoder())],\n ]),\n (value) => ({\n ...value,\n discriminator: SET_SENTINEL_ALLOWLIST_DISCRIMINATOR,\n })\n );\n}\n\nexport function getSetSentinelAllowlistInstructionDataDecoder(): Decoder<SetSentinelAllowlistInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['allowlist', getArrayDecoder(getAddressDecoder())],\n ]);\n}\n\nexport function getSetSentinelAllowlistInstructionDataCodec(): Codec<\n SetSentinelAllowlistInstructionDataArgs,\n SetSentinelAllowlistInstructionData\n> {\n return combineCodec(\n getSetSentinelAllowlistInstructionDataEncoder(),\n getSetSentinelAllowlistInstructionDataDecoder()\n );\n}\n\nexport type SetSentinelAllowlistAsyncInput<\n TAccountAdmin extends string = string,\n TAccountConfig extends string = string,\n> = {\n admin: TransactionSigner<TAccountAdmin>;\n config?: Address<TAccountConfig>;\n allowlist: SetSentinelAllowlistInstructionDataArgs['allowlist'];\n};\n\nexport async function getSetSentinelAllowlistInstructionAsync<\n TAccountAdmin extends string,\n TAccountConfig extends string,\n TProgramAddress extends Address = typeof INITIALIZER_PROGRAM_ADDRESS,\n>(\n input: SetSentinelAllowlistAsyncInput<TAccountAdmin, TAccountConfig>,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n SetSentinelAllowlistInstruction<\n TProgramAddress,\n TAccountAdmin,\n TAccountConfig\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? INITIALIZER_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n admin: { value: input.admin ?? null, isWritable: false },\n config: { value: input.config ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.config.value) {\n accounts.config.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([99, 111, 110, 102, 105, 103, 95, 118, 51])\n ),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('config', accounts.config),\n ],\n data: getSetSentinelAllowlistInstructionDataEncoder().encode(\n args as SetSentinelAllowlistInstructionDataArgs\n ),\n programAddress,\n } as SetSentinelAllowlistInstruction<\n TProgramAddress,\n TAccountAdmin,\n TAccountConfig\n >);\n}\n\nexport type SetSentinelAllowlistInput<\n TAccountAdmin extends string = string,\n TAccountConfig extends string = string,\n> = {\n admin: TransactionSigner<TAccountAdmin>;\n config: Address<TAccountConfig>;\n allowlist: SetSentinelAllowlistInstructionDataArgs['allowlist'];\n};\n\nexport function getSetSentinelAllowlistInstruction<\n TAccountAdmin extends string,\n TAccountConfig extends string,\n TProgramAddress extends Address = typeof INITIALIZER_PROGRAM_ADDRESS,\n>(\n input: SetSentinelAllowlistInput<TAccountAdmin, TAccountConfig>,\n config?: { programAddress?: TProgramAddress }\n): SetSentinelAllowlistInstruction<\n TProgramAddress,\n TAccountAdmin,\n TAccountConfig\n> {\n // Program address.\n const programAddress = config?.programAddress ?? INITIALIZER_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n admin: { value: input.admin ?? null, isWritable: false },\n config: { value: input.config ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('config', accounts.config),\n ],\n data: getSetSentinelAllowlistInstructionDataEncoder().encode(\n args as SetSentinelAllowlistInstructionDataArgs\n ),\n programAddress,\n } as SetSentinelAllowlistInstruction<\n TProgramAddress,\n TAccountAdmin,\n TAccountConfig\n >);\n}\n\nexport type ParsedSetSentinelAllowlistInstruction<\n TProgram extends string = typeof INITIALIZER_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n admin: TAccountMetas[0];\n config: TAccountMetas[1];\n };\n data: SetSentinelAllowlistInstructionData;\n};\n\nexport function parseSetSentinelAllowlistInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedSetSentinelAllowlistInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 2) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 2,\n }\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: { admin: getNextAccount(), config: getNextAccount() },\n data: getSetSentinelAllowlistInstructionDataDecoder().decode(\n instruction.data\n ),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n isProgramError,\n type Address,\n type SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM,\n type SolanaError,\n} from '@solana/kit';\nimport { INITIALIZER_PROGRAM_ADDRESS } from '../programs';\n\n/** Unauthorized: Unauthorized */\nexport const INITIALIZER_ERROR__UNAUTHORIZED = 0x1770; // 6000\n/** InvalidPhase: Invalid phase */\nexport const INITIALIZER_ERROR__INVALID_PHASE = 0x1771; // 6001\n/** InvalidAmount: Invalid amount */\nexport const INITIALIZER_ERROR__INVALID_AMOUNT = 0x1772; // 6002\n/** InvalidVault: Invalid vault */\nexport const INITIALIZER_ERROR__INVALID_VAULT = 0x1773; // 6003\n/** InvalidMint: Invalid mint */\nexport const INITIALIZER_ERROR__INVALID_MINT = 0x1774; // 6004\n/** MathOverflow: Math overflow */\nexport const INITIALIZER_ERROR__MATH_OVERFLOW = 0x1775; // 6005\n/** InvalidCurveParams: Invalid curve params */\nexport const INITIALIZER_ERROR__INVALID_CURVE_PARAMS = 0x1776; // 6006\n/** SlippageExceeded: Slippage exceeded */\nexport const INITIALIZER_ERROR__SLIPPAGE_EXCEEDED = 0x1777; // 6007\n/** CurveLiquidityInsufficient: Curve liquidity insufficient */\nexport const INITIALIZER_ERROR__CURVE_LIQUIDITY_INSUFFICIENT = 0x1778; // 6008\n/** CalldataTooLarge: Calldata too large */\nexport const INITIALIZER_ERROR__CALLDATA_TOO_LARGE = 0x1779; // 6009\n/** MigratorNotAllowlisted: Migrator not allowlisted */\nexport const INITIALIZER_ERROR__MIGRATOR_NOT_ALLOWLISTED = 0x177a; // 6010\n/** SentinelNotAllowlisted: Sentinel not allowlisted */\nexport const INITIALIZER_ERROR__SENTINEL_NOT_ALLOWLISTED = 0x177b; // 6011\n/** WrongMigrator: Wrong migrator program */\nexport const INITIALIZER_ERROR__WRONG_MIGRATOR = 0x177c; // 6012\n/** WrongSentinel: Wrong sentinel program */\nexport const INITIALIZER_ERROR__WRONG_SENTINEL = 0x177d; // 6013\n/** MigratorCpiFailed: Migrator CPI failed */\nexport const INITIALIZER_ERROR__MIGRATOR_CPI_FAILED = 0x177e; // 6014\n/** SentinelCpiFailed: Sentinel CPI failed */\nexport const INITIALIZER_ERROR__SENTINEL_CPI_FAILED = 0x177f; // 6015\n/** SentinelRejected: Sentinel rejected */\nexport const INITIALIZER_ERROR__SENTINEL_REJECTED = 0x1780; // 6016\n/** BuyNotAllowed: Buy not allowed */\nexport const INITIALIZER_ERROR__BUY_NOT_ALLOWED = 0x1781; // 6017\n/** SellNotAllowed: Sell not allowed */\nexport const INITIALIZER_ERROR__SELL_NOT_ALLOWED = 0x1782; // 6018\n/** InvalidDirection: Invalid direction */\nexport const INITIALIZER_ERROR__INVALID_DIRECTION = 0x1783; // 6019\n/** AllowlistFull: Allowlist full */\nexport const INITIALIZER_ERROR__ALLOWLIST_FULL = 0x1784; // 6020\n/** InvalidInput: Invalid input */\nexport const INITIALIZER_ERROR__INVALID_INPUT = 0x1785; // 6021\n/** AlreadyMigrated: Already migrated */\nexport const INITIALIZER_ERROR__ALREADY_MIGRATED = 0x1786; // 6022\n/** QuoteVaultNotEmpty: Quote vault not empty */\nexport const INITIALIZER_ERROR__QUOTE_VAULT_NOT_EMPTY = 0x1787; // 6023\n/** LaunchLocked: Launch locked */\nexport const INITIALIZER_ERROR__LAUNCH_LOCKED = 0x1788; // 6024\n/** InvalidCurveKind: Invalid curve kind */\nexport const INITIALIZER_ERROR__INVALID_CURVE_KIND = 0x1789; // 6025\n/** CurveParamsInvalid: Curve params invalid */\nexport const INITIALIZER_ERROR__CURVE_PARAMS_INVALID = 0x178a; // 6026\n/** RemainingAccountOverlap: Remaining account overlaps with protocol account */\nexport const INITIALIZER_ERROR__REMAINING_ACCOUNT_OVERLAP = 0x178b; // 6027\n/** MissingRemainingAccountsCommitment: Missing remaining accounts commitment */\nexport const INITIALIZER_ERROR__MISSING_REMAINING_ACCOUNTS_COMMITMENT = 0x178c; // 6028\n/** RemainingAccountsCommitmentMismatch: Remaining accounts commitment mismatch */\nexport const INITIALIZER_ERROR__REMAINING_ACCOUNTS_COMMITMENT_MISMATCH = 0x178d; // 6029\n/** InvalidOracle: Invalid oracle account */\nexport const INITIALIZER_ERROR__INVALID_ORACLE = 0x178e; // 6030\n/** MissingMetadataAccounts: Missing metadata accounts */\nexport const INITIALIZER_ERROR__MISSING_METADATA_ACCOUNTS = 0x178f; // 6031\n/** InvalidMetadataProgram: Invalid metadata program */\nexport const INITIALIZER_ERROR__INVALID_METADATA_PROGRAM = 0x1790; // 6032\n/** InvalidMetadataAccount: Invalid metadata account */\nexport const INITIALIZER_ERROR__INVALID_METADATA_ACCOUNT = 0x1791; // 6033\n/** MetadataCpiFailed: Metadata CPI failed */\nexport const INITIALIZER_ERROR__METADATA_CPI_FAILED = 0x1792; // 6034\n\nexport type InitializerError =\n | typeof INITIALIZER_ERROR__ALLOWLIST_FULL\n | typeof INITIALIZER_ERROR__ALREADY_MIGRATED\n | typeof INITIALIZER_ERROR__BUY_NOT_ALLOWED\n | typeof INITIALIZER_ERROR__CALLDATA_TOO_LARGE\n | typeof INITIALIZER_ERROR__CURVE_LIQUIDITY_INSUFFICIENT\n | typeof INITIALIZER_ERROR__CURVE_PARAMS_INVALID\n | typeof INITIALIZER_ERROR__INVALID_AMOUNT\n | typeof INITIALIZER_ERROR__INVALID_CURVE_KIND\n | typeof INITIALIZER_ERROR__INVALID_CURVE_PARAMS\n | typeof INITIALIZER_ERROR__INVALID_DIRECTION\n | typeof INITIALIZER_ERROR__INVALID_INPUT\n | typeof INITIALIZER_ERROR__INVALID_METADATA_ACCOUNT\n | typeof INITIALIZER_ERROR__INVALID_METADATA_PROGRAM\n | typeof INITIALIZER_ERROR__INVALID_MINT\n | typeof INITIALIZER_ERROR__INVALID_ORACLE\n | typeof INITIALIZER_ERROR__INVALID_PHASE\n | typeof INITIALIZER_ERROR__INVALID_VAULT\n | typeof INITIALIZER_ERROR__LAUNCH_LOCKED\n | typeof INITIALIZER_ERROR__MATH_OVERFLOW\n | typeof INITIALIZER_ERROR__METADATA_CPI_FAILED\n | typeof INITIALIZER_ERROR__MIGRATOR_CPI_FAILED\n | typeof INITIALIZER_ERROR__MIGRATOR_NOT_ALLOWLISTED\n | typeof INITIALIZER_ERROR__MISSING_METADATA_ACCOUNTS\n | typeof INITIALIZER_ERROR__MISSING_REMAINING_ACCOUNTS_COMMITMENT\n | typeof INITIALIZER_ERROR__QUOTE_VAULT_NOT_EMPTY\n | typeof INITIALIZER_ERROR__REMAINING_ACCOUNT_OVERLAP\n | typeof INITIALIZER_ERROR__REMAINING_ACCOUNTS_COMMITMENT_MISMATCH\n | typeof INITIALIZER_ERROR__SELL_NOT_ALLOWED\n | typeof INITIALIZER_ERROR__SENTINEL_CPI_FAILED\n | typeof INITIALIZER_ERROR__SENTINEL_NOT_ALLOWLISTED\n | typeof INITIALIZER_ERROR__SENTINEL_REJECTED\n | typeof INITIALIZER_ERROR__SLIPPAGE_EXCEEDED\n | typeof INITIALIZER_ERROR__UNAUTHORIZED\n | typeof INITIALIZER_ERROR__WRONG_MIGRATOR\n | typeof INITIALIZER_ERROR__WRONG_SENTINEL;\n\nlet initializerErrorMessages: Record<InitializerError, string> | undefined;\nif (process.env.NODE_ENV !== 'production') {\n initializerErrorMessages = {\n [INITIALIZER_ERROR__ALLOWLIST_FULL]: `Allowlist full`,\n [INITIALIZER_ERROR__ALREADY_MIGRATED]: `Already migrated`,\n [INITIALIZER_ERROR__BUY_NOT_ALLOWED]: `Buy not allowed`,\n [INITIALIZER_ERROR__CALLDATA_TOO_LARGE]: `Calldata too large`,\n [INITIALIZER_ERROR__CURVE_LIQUIDITY_INSUFFICIENT]: `Curve liquidity insufficient`,\n [INITIALIZER_ERROR__CURVE_PARAMS_INVALID]: `Curve params invalid`,\n [INITIALIZER_ERROR__INVALID_AMOUNT]: `Invalid amount`,\n [INITIALIZER_ERROR__INVALID_CURVE_KIND]: `Invalid curve kind`,\n [INITIALIZER_ERROR__INVALID_CURVE_PARAMS]: `Invalid curve params`,\n [INITIALIZER_ERROR__INVALID_DIRECTION]: `Invalid direction`,\n [INITIALIZER_ERROR__INVALID_INPUT]: `Invalid input`,\n [INITIALIZER_ERROR__INVALID_METADATA_ACCOUNT]: `Invalid metadata account`,\n [INITIALIZER_ERROR__INVALID_METADATA_PROGRAM]: `Invalid metadata program`,\n [INITIALIZER_ERROR__INVALID_MINT]: `Invalid mint`,\n [INITIALIZER_ERROR__INVALID_ORACLE]: `Invalid oracle account`,\n [INITIALIZER_ERROR__INVALID_PHASE]: `Invalid phase`,\n [INITIALIZER_ERROR__INVALID_VAULT]: `Invalid vault`,\n [INITIALIZER_ERROR__LAUNCH_LOCKED]: `Launch locked`,\n [INITIALIZER_ERROR__MATH_OVERFLOW]: `Math overflow`,\n [INITIALIZER_ERROR__METADATA_CPI_FAILED]: `Metadata CPI failed`,\n [INITIALIZER_ERROR__MIGRATOR_CPI_FAILED]: `Migrator CPI failed`,\n [INITIALIZER_ERROR__MIGRATOR_NOT_ALLOWLISTED]: `Migrator not allowlisted`,\n [INITIALIZER_ERROR__MISSING_METADATA_ACCOUNTS]: `Missing metadata accounts`,\n [INITIALIZER_ERROR__MISSING_REMAINING_ACCOUNTS_COMMITMENT]: `Missing remaining accounts commitment`,\n [INITIALIZER_ERROR__QUOTE_VAULT_NOT_EMPTY]: `Quote vault not empty`,\n [INITIALIZER_ERROR__REMAINING_ACCOUNT_OVERLAP]: `Remaining account overlaps with protocol account`,\n [INITIALIZER_ERROR__REMAINING_ACCOUNTS_COMMITMENT_MISMATCH]: `Remaining accounts commitment mismatch`,\n [INITIALIZER_ERROR__SELL_NOT_ALLOWED]: `Sell not allowed`,\n [INITIALIZER_ERROR__SENTINEL_CPI_FAILED]: `Sentinel CPI failed`,\n [INITIALIZER_ERROR__SENTINEL_NOT_ALLOWLISTED]: `Sentinel not allowlisted`,\n [INITIALIZER_ERROR__SENTINEL_REJECTED]: `Sentinel rejected`,\n [INITIALIZER_ERROR__SLIPPAGE_EXCEEDED]: `Slippage exceeded`,\n [INITIALIZER_ERROR__UNAUTHORIZED]: `Unauthorized`,\n [INITIALIZER_ERROR__WRONG_MIGRATOR]: `Wrong migrator program`,\n [INITIALIZER_ERROR__WRONG_SENTINEL]: `Wrong sentinel program`,\n };\n}\n\nexport function getInitializerErrorMessage(code: InitializerError): string {\n if (process.env.NODE_ENV !== 'production') {\n return (initializerErrorMessages as Record<InitializerError, string>)[code];\n }\n\n return 'Error message not available in production bundles.';\n}\n\nexport function isInitializerError<TProgramErrorCode extends InitializerError>(\n error: unknown,\n transactionMessage: {\n instructions: Record<number, { programAddress: Address }>;\n },\n code?: TProgramErrorCode\n): error is SolanaError<typeof SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM> &\n Readonly<{ context: Readonly<{ code: TProgramErrorCode }> }> {\n return isProgramError<TProgramErrorCode>(\n error,\n transactionMessage,\n INITIALIZER_PROGRAM_ADDRESS,\n code\n );\n}\n","import {\n type Address,\n type ProgramDerivedAddress,\n getAddressCodec,\n getProgramDerivedAddress,\n} from '@solana/kit';\nimport {\n BPF_LOADER_UPGRADEABLE_PROGRAM_ID,\n INITIALIZER_PROGRAM_ID,\n SEED_CONFIG,\n SEED_LAUNCH,\n SEED_LAUNCH_AUTHORITY,\n} from './constants.js';\n\nconst addressCodec = getAddressCodec();\nconst textEncoder = new TextEncoder();\n\nexport function encodeU64LE(value: bigint): Uint8Array {\n const bytes = new Uint8Array(8);\n const view = new DataView(bytes.buffer);\n view.setBigUint64(0, value, true);\n return bytes;\n}\n\n/**\n * Derive the InitConfig PDA address.\n * Seeds: ['config_v3']\n */\nexport async function getConfigAddress(\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n return getProgramDerivedAddress({\n programAddress: programId,\n seeds: [textEncoder.encode(SEED_CONFIG)],\n });\n}\n\n/**\n * Derive the ProgramData PDA for an upgradeable program.\n * Seeds: [initializer_program_id] with program = BPFLoaderUpgradeable.\n */\nexport async function getProgramDataAddress(\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n return getProgramDerivedAddress({\n programAddress: BPF_LOADER_UPGRADEABLE_PROGRAM_ID,\n seeds: [addressCodec.encode(programId)],\n });\n}\n\n/**\n * Derive the Launch PDA address.\n * Seeds: ['launch_v3', namespace, launch_id_bytes_32]\n */\nexport async function getLaunchAddress(\n namespace: Address,\n launchId: Uint8Array,\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n if (launchId.length !== 32) {\n throw new Error('launchId must be 32 bytes');\n }\n return getProgramDerivedAddress({\n programAddress: programId,\n seeds: [\n textEncoder.encode(SEED_LAUNCH),\n addressCodec.encode(namespace),\n launchId,\n ],\n });\n}\n\n/**\n * Derive the Launch authority PDA address.\n * Seeds: ['launch_authority_v3', launch]\n */\nexport async function getLaunchAuthorityAddress(\n launch: Address,\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n return getProgramDerivedAddress({\n programAddress: programId,\n seeds: [\n textEncoder.encode(SEED_LAUNCH_AUTHORITY),\n addressCodec.encode(launch),\n ],\n });\n}\n\n/**\n * Convenience helper for the common pattern: embed a u64 into a 32-byte launch_id.\n */\nexport function launchIdFromU64(launchId: bigint): Uint8Array {\n const out = new Uint8Array(32);\n out.set(encodeU64LE(launchId), 0);\n return out;\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport type { TransactionSigner, AccountSignerMeta } from '@solana/kit';\nimport {\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_WRITABLE_SIGNER,\n SYSTEM_PROGRAM_ID,\n} from '../../core/constants.js';\nimport { INITIALIZER_PROGRAM_ID } from '../constants.js';\nimport type { InitializeConfigArgsArgs } from '../../generated/initializer/index.js';\nimport { getInitializeConfigInstructionDataEncoder } from '../../generated/initializer/index.js';\n\ntype AddressOrSigner = Address | TransactionSigner;\n\nfunction isTransactionSigner(\n value: AddressOrSigner,\n): value is TransactionSigner {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'address' in value &&\n 'signTransactions' in value\n );\n}\n\nfunction createSignerAccountMeta(\n value: AddressOrSigner,\n role: typeof ACCOUNT_ROLE_WRITABLE_SIGNER,\n): AccountMeta | AccountSignerMeta {\n if (isTransactionSigner(value)) {\n return { address: value.address, role, signer: value };\n }\n return { address: value, role };\n}\n\nexport interface InitializeConfigAccounts {\n admin: AddressOrSigner;\n config: Address;\n programData: Address;\n systemProgram?: Address;\n}\n\nexport function createInitializeConfigInstruction(\n accounts: InitializeConfigAccounts,\n args: InitializeConfigArgsArgs,\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Instruction {\n const {\n admin,\n config,\n programData,\n systemProgram = SYSTEM_PROGRAM_ID,\n } = accounts;\n\n const keys: (AccountMeta | AccountSignerMeta)[] = [\n createSignerAccountMeta(admin, ACCOUNT_ROLE_WRITABLE_SIGNER),\n { address: config, role: ACCOUNT_ROLE_WRITABLE },\n { address: programData, role: ACCOUNT_ROLE_READONLY },\n { address: systemProgram, role: ACCOUNT_ROLE_READONLY },\n ];\n\n const data = new Uint8Array(\n getInitializeConfigInstructionDataEncoder().encode(args),\n );\n\n return { programAddress: programId, accounts: keys, data };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport type { TransactionSigner, AccountSignerMeta } from '@solana/kit';\nimport {\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_WRITABLE_SIGNER,\n} from '../../core/constants.js';\nimport { INITIALIZER_PROGRAM_ID } from '../constants.js';\nimport { getSetMigratorAllowlistInstructionDataEncoder } from '../../generated/initializer/index.js';\n\ntype AddressOrSigner = Address | TransactionSigner;\n\nfunction isTransactionSigner(\n value: AddressOrSigner,\n): value is TransactionSigner {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'address' in value &&\n 'signTransactions' in value\n );\n}\n\nfunction createSignerAccountMeta(\n value: AddressOrSigner,\n role: typeof ACCOUNT_ROLE_WRITABLE_SIGNER,\n): AccountMeta | AccountSignerMeta {\n if (isTransactionSigner(value)) {\n return { address: value.address, role, signer: value };\n }\n return { address: value, role };\n}\n\nexport interface SetMigratorAllowlistAccounts {\n admin: AddressOrSigner;\n config: Address;\n}\n\nexport function createSetMigratorAllowlistInstruction(\n accounts: SetMigratorAllowlistAccounts,\n allowlist: Address[],\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Instruction {\n const { admin, config } = accounts;\n\n const keys: (AccountMeta | AccountSignerMeta)[] = [\n createSignerAccountMeta(admin, ACCOUNT_ROLE_WRITABLE_SIGNER),\n { address: config, role: ACCOUNT_ROLE_WRITABLE },\n ];\n\n const data = new Uint8Array(\n getSetMigratorAllowlistInstructionDataEncoder().encode({ allowlist }),\n );\n\n return { programAddress: programId, accounts: keys, data };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport type { TransactionSigner, AccountSignerMeta } from '@solana/kit';\nimport {\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_WRITABLE_SIGNER,\n} from '../../core/constants.js';\nimport { INITIALIZER_PROGRAM_ID } from '../constants.js';\nimport { getSetSentinelAllowlistInstructionDataEncoder } from '../../generated/initializer/index.js';\n\ntype AddressOrSigner = Address | TransactionSigner;\n\nfunction isTransactionSigner(\n value: AddressOrSigner,\n): value is TransactionSigner {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'address' in value &&\n 'signTransactions' in value\n );\n}\n\nfunction createSignerAccountMeta(\n value: AddressOrSigner,\n role: typeof ACCOUNT_ROLE_WRITABLE_SIGNER,\n): AccountMeta | AccountSignerMeta {\n if (isTransactionSigner(value)) {\n return { address: value.address, role, signer: value };\n }\n return { address: value, role };\n}\n\nexport interface SetSentinelAllowlistAccounts {\n admin: AddressOrSigner;\n config: Address;\n}\n\nexport function createSetSentinelAllowlistInstruction(\n accounts: SetSentinelAllowlistAccounts,\n allowlist: Address[],\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Instruction {\n const { admin, config } = accounts;\n\n const keys: (AccountMeta | AccountSignerMeta)[] = [\n createSignerAccountMeta(admin, ACCOUNT_ROLE_WRITABLE_SIGNER),\n { address: config, role: ACCOUNT_ROLE_WRITABLE },\n ];\n\n const data = new Uint8Array(\n getSetSentinelAllowlistInstructionDataEncoder().encode({ allowlist }),\n );\n\n return { programAddress: programId, accounts: keys, data };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport type { TransactionSigner, AccountSignerMeta } from '@solana/kit';\nimport {\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_SIGNER,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_WRITABLE_SIGNER,\n SYSTEM_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n} from '../../core/constants.js';\nimport {\n CURVE_KIND_XYK,\n CURVE_PARAMS_FORMAT_XYK_V0,\n INITIALIZER_PROGRAM_ID,\n} from '../constants.js';\nimport type { InitializeLaunchArgsArgs } from '../../generated/initializer/index.js';\nimport { getInitializeLaunchInstructionDataEncoder } from '../../generated/initializer/index.js';\n\ntype AddressOrSigner = Address | TransactionSigner;\n\nfunction isTransactionSigner(\n value: AddressOrSigner,\n): value is TransactionSigner {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'address' in value &&\n 'signTransactions' in value\n );\n}\n\nfunction createAccountMeta(\n value: AddressOrSigner,\n role:\n | typeof ACCOUNT_ROLE_READONLY\n | typeof ACCOUNT_ROLE_WRITABLE\n | typeof ACCOUNT_ROLE_SIGNER\n | typeof ACCOUNT_ROLE_WRITABLE_SIGNER,\n): AccountMeta | AccountSignerMeta {\n if (isTransactionSigner(value)) {\n return { address: value.address, role, signer: value };\n }\n return { address: value, role };\n}\n\nexport interface InitializeLaunchAccounts {\n config: Address;\n launch: Address;\n launchAuthority: Address;\n baseMint: AddressOrSigner;\n quoteMint: Address;\n baseVault: AddressOrSigner;\n quoteVault: AddressOrSigner;\n payer: AddressOrSigner;\n authority?: AddressOrSigner; // optional creator/admin signer\n migratorProgram?: Address; // optional module hook program\n tokenProgram?: Address;\n systemProgram?: Address;\n rent: Address;\n}\n\nfunction validateInitializeLaunchCurveParams(\n args: InitializeLaunchArgsArgs,\n): void {\n if (args.curveKind !== CURVE_KIND_XYK) {\n throw new Error(\n `unsupported curve kind: ${args.curveKind}; only CURVE_KIND_XYK is currently enabled`,\n );\n }\n if (\n args.curveParams.length !== 1 ||\n args.curveParams[0] !== CURVE_PARAMS_FORMAT_XYK_V0\n ) {\n throw new Error('xyk curve params must be [CURVE_PARAMS_FORMAT_XYK_V0]');\n }\n}\n\nexport function createInitializeLaunchInstruction(\n accounts: InitializeLaunchAccounts,\n args: InitializeLaunchArgsArgs,\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Instruction {\n validateInitializeLaunchCurveParams(args);\n\n const {\n config,\n launch,\n launchAuthority,\n baseMint,\n quoteMint,\n baseVault,\n quoteVault,\n payer,\n authority,\n migratorProgram,\n tokenProgram = TOKEN_PROGRAM_ID,\n systemProgram = SYSTEM_PROGRAM_ID,\n rent,\n } = accounts;\n\n const keys: (AccountMeta | AccountSignerMeta)[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: launch, role: ACCOUNT_ROLE_WRITABLE },\n { address: launchAuthority, role: ACCOUNT_ROLE_READONLY },\n createAccountMeta(baseMint, ACCOUNT_ROLE_WRITABLE_SIGNER),\n { address: quoteMint, role: ACCOUNT_ROLE_READONLY },\n createAccountMeta(baseVault, ACCOUNT_ROLE_WRITABLE_SIGNER),\n createAccountMeta(quoteVault, ACCOUNT_ROLE_WRITABLE_SIGNER),\n createAccountMeta(payer, ACCOUNT_ROLE_WRITABLE_SIGNER),\n ];\n\n // Optional accounts (Anchor will treat them as None if constraints don't match).\n if (authority) {\n keys.push(createAccountMeta(authority, ACCOUNT_ROLE_SIGNER));\n }\n if (migratorProgram) {\n keys.push({ address: migratorProgram, role: ACCOUNT_ROLE_READONLY });\n }\n\n keys.push({ address: tokenProgram, role: ACCOUNT_ROLE_READONLY });\n keys.push({ address: systemProgram, role: ACCOUNT_ROLE_READONLY });\n keys.push({ address: rent, role: ACCOUNT_ROLE_READONLY });\n\n const data = new Uint8Array(\n getInitializeLaunchInstructionDataEncoder().encode(args),\n );\n\n return {\n programAddress: programId,\n accounts: keys,\n data,\n };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport type { TransactionSigner, AccountSignerMeta } from '@solana/kit';\nimport {\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_SIGNER,\n ACCOUNT_ROLE_WRITABLE,\n TOKEN_PROGRAM_ID,\n} from '../../core/constants.js';\nimport { INITIALIZER_PROGRAM_ID } from '../constants.js';\nimport { getCurveSwapExactInInstructionDataEncoder } from '../../generated/initializer/index.js';\n\ntype AddressOrSigner = Address | TransactionSigner;\n\nfunction isTransactionSigner(\n value: AddressOrSigner,\n): value is TransactionSigner {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'address' in value &&\n 'signTransactions' in value\n );\n}\n\nfunction createAccountMeta(\n value: AddressOrSigner,\n role:\n | typeof ACCOUNT_ROLE_READONLY\n | typeof ACCOUNT_ROLE_WRITABLE\n | typeof ACCOUNT_ROLE_SIGNER,\n): AccountMeta | AccountSignerMeta {\n if (isTransactionSigner(value)) {\n return { address: value.address, role, signer: value };\n }\n return { address: value, role };\n}\n\nexport interface CurveSwapExactInAccounts {\n config: Address;\n launch: Address;\n launchAuthority: Address;\n baseVault: Address;\n quoteVault: Address;\n userBaseAccount: Address;\n userQuoteAccount: Address;\n baseMint: Address;\n quoteMint: Address;\n user: AddressOrSigner;\n sentinelProgram?: Address;\n tokenProgram?: Address;\n}\n\nexport function createCurveSwapExactInInstruction(\n accounts: CurveSwapExactInAccounts,\n args: { amountIn: bigint; minAmountOut: bigint; direction: number },\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Instruction {\n const {\n config,\n launch,\n launchAuthority,\n baseVault,\n quoteVault,\n userBaseAccount,\n userQuoteAccount,\n baseMint,\n quoteMint,\n user,\n sentinelProgram,\n tokenProgram = TOKEN_PROGRAM_ID,\n } = accounts;\n\n const keys: (AccountMeta | AccountSignerMeta)[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: launch, role: ACCOUNT_ROLE_WRITABLE },\n { address: launchAuthority, role: ACCOUNT_ROLE_READONLY },\n { address: baseVault, role: ACCOUNT_ROLE_WRITABLE },\n { address: quoteVault, role: ACCOUNT_ROLE_WRITABLE },\n { address: userBaseAccount, role: ACCOUNT_ROLE_WRITABLE },\n { address: userQuoteAccount, role: ACCOUNT_ROLE_WRITABLE },\n { address: baseMint, role: ACCOUNT_ROLE_READONLY },\n { address: quoteMint, role: ACCOUNT_ROLE_READONLY },\n createAccountMeta(user, ACCOUNT_ROLE_SIGNER),\n ];\n\n if (sentinelProgram) {\n keys.push({ address: sentinelProgram, role: ACCOUNT_ROLE_READONLY });\n }\n\n keys.push({ address: tokenProgram, role: ACCOUNT_ROLE_READONLY });\n\n const data = new Uint8Array(\n getCurveSwapExactInInstructionDataEncoder().encode(args),\n );\n\n return { programAddress: programId, accounts: keys, data };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport type { TransactionSigner, AccountSignerMeta } from '@solana/kit';\nimport {\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_WRITABLE,\n ACCOUNT_ROLE_WRITABLE_SIGNER,\n SYSTEM_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n} from '../../core/constants.js';\nimport {\n INITIALIZER_INSTRUCTION_DISCRIMINATORS,\n INITIALIZER_PROGRAM_ID,\n} from '../constants.js';\nimport { encodeInstructionData } from '../../core/codecs.js';\n\ntype AddressOrSigner = Address | TransactionSigner;\n\nfunction isTransactionSigner(\n value: AddressOrSigner,\n): value is TransactionSigner {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'address' in value &&\n 'signTransactions' in value\n );\n}\n\nfunction createSignerAccountMeta(\n value: AddressOrSigner,\n role: typeof ACCOUNT_ROLE_WRITABLE_SIGNER,\n): AccountMeta | AccountSignerMeta {\n if (isTransactionSigner(value)) {\n return { address: value.address, role, signer: value };\n }\n return { address: value, role };\n}\n\nexport interface MigrateLaunchAccounts {\n config: Address;\n launch: Address;\n launchAuthority: Address;\n baseMint: Address;\n quoteMint: Address;\n baseVault: Address;\n quoteVault: Address;\n migratorProgram: Address;\n payer: AddressOrSigner;\n tokenProgram?: Address;\n systemProgram?: Address;\n rent: Address;\n}\n\nexport function createMigrateLaunchInstruction(\n accounts: MigrateLaunchAccounts,\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Instruction {\n const {\n config,\n launch,\n launchAuthority,\n baseMint,\n quoteMint,\n baseVault,\n quoteVault,\n migratorProgram,\n payer,\n tokenProgram = TOKEN_PROGRAM_ID,\n systemProgram = SYSTEM_PROGRAM_ID,\n rent,\n } = accounts;\n\n const keys: (AccountMeta | AccountSignerMeta)[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: launch, role: ACCOUNT_ROLE_WRITABLE },\n { address: launchAuthority, role: ACCOUNT_ROLE_READONLY },\n { address: baseMint, role: ACCOUNT_ROLE_READONLY },\n { address: quoteMint, role: ACCOUNT_ROLE_READONLY },\n { address: baseVault, role: ACCOUNT_ROLE_WRITABLE },\n { address: quoteVault, role: ACCOUNT_ROLE_WRITABLE },\n { address: migratorProgram, role: ACCOUNT_ROLE_READONLY },\n createSignerAccountMeta(payer, ACCOUNT_ROLE_WRITABLE_SIGNER),\n { address: tokenProgram, role: ACCOUNT_ROLE_READONLY },\n { address: systemProgram, role: ACCOUNT_ROLE_READONLY },\n { address: rent, role: ACCOUNT_ROLE_READONLY },\n ];\n\n const data = encodeInstructionData(\n INITIALIZER_INSTRUCTION_DISCRIMINATORS.migrateLaunch,\n );\n\n return { programAddress: programId, accounts: keys, data };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction, AccountMeta } from '@solana/kit';\nimport type { TransactionSigner, AccountSignerMeta } from '@solana/kit';\nimport {\n ACCOUNT_ROLE_READONLY,\n ACCOUNT_ROLE_SIGNER,\n ACCOUNT_ROLE_WRITABLE,\n TOKEN_PROGRAM_ID,\n} from '../../core/constants.js';\nimport {\n INITIALIZER_INSTRUCTION_DISCRIMINATORS,\n INITIALIZER_PROGRAM_ID,\n} from '../constants.js';\nimport { encodeInstructionData } from '../../core/codecs.js';\n\ntype AddressOrSigner = Address | TransactionSigner;\n\nfunction isTransactionSigner(\n value: AddressOrSigner,\n): value is TransactionSigner {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'address' in value &&\n 'signTransactions' in value\n );\n}\n\nfunction createAccountMeta(\n value: AddressOrSigner,\n role:\n | typeof ACCOUNT_ROLE_READONLY\n | typeof ACCOUNT_ROLE_WRITABLE\n | typeof ACCOUNT_ROLE_SIGNER,\n): AccountMeta | AccountSignerMeta {\n if (isTransactionSigner(value)) {\n return { address: value.address, role, signer: value };\n }\n return { address: value, role };\n}\n\nexport interface AbortLaunchAccounts {\n config: Address;\n launch: Address;\n launchAuthority: Address;\n baseVault: Address;\n quoteVault: Address;\n authority: AddressOrSigner;\n authorityBaseAccount: Address;\n baseMint: Address;\n tokenProgram?: Address;\n}\n\nexport function createAbortLaunchInstruction(\n accounts: AbortLaunchAccounts,\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Instruction {\n const {\n config,\n launch,\n launchAuthority,\n baseVault,\n quoteVault,\n authority,\n authorityBaseAccount,\n baseMint,\n tokenProgram = TOKEN_PROGRAM_ID,\n } = accounts;\n\n const keys: (AccountMeta | AccountSignerMeta)[] = [\n { address: config, role: ACCOUNT_ROLE_READONLY },\n { address: launch, role: ACCOUNT_ROLE_WRITABLE },\n { address: launchAuthority, role: ACCOUNT_ROLE_READONLY },\n { address: baseVault, role: ACCOUNT_ROLE_WRITABLE },\n { address: quoteVault, role: ACCOUNT_ROLE_READONLY },\n createAccountMeta(authority, ACCOUNT_ROLE_SIGNER),\n { address: authorityBaseAccount, role: ACCOUNT_ROLE_WRITABLE },\n { address: baseMint, role: ACCOUNT_ROLE_READONLY },\n { address: tokenProgram, role: ACCOUNT_ROLE_READONLY },\n ];\n\n const data = encodeInstructionData(\n INITIALIZER_INSTRUCTION_DISCRIMINATORS.abortLaunch,\n );\n\n return { programAddress: programId, accounts: keys, data };\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction } from '@solana/kit';\nimport { getStructCodec, getU64Codec } from '@solana/kit';\nimport { ACCOUNT_ROLE_READONLY } from '../../core/constants.js';\nimport { INITIALIZER_PROGRAM_ID } from '../constants.js';\nimport { getPreviewSwapExactInInstructionDataEncoder } from '../../generated/initializer/index.js';\n\nexport interface PreviewSwapExactInResult {\n amountOut: bigint;\n feePaid: bigint;\n}\n\nconst previewSwapExactInResultCodec = getStructCodec([\n ['amountOut', getU64Codec()],\n ['feePaid', getU64Codec()],\n]);\n\nexport interface PreviewSwapExactInAccounts {\n launch: Address;\n baseVault: Address;\n quoteVault: Address;\n sentinelProgram?: Address;\n}\n\nexport function createPreviewSwapExactInInstruction(\n accounts: PreviewSwapExactInAccounts,\n args: { amountIn: bigint; direction: number },\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Instruction {\n const { launch, baseVault, quoteVault, sentinelProgram } = accounts;\n\n const keys = [\n { address: launch, role: ACCOUNT_ROLE_READONLY },\n { address: baseVault, role: ACCOUNT_ROLE_READONLY },\n { address: quoteVault, role: ACCOUNT_ROLE_READONLY },\n ] as const;\n\n const accountsList = sentinelProgram\n ? [...keys, { address: sentinelProgram, role: ACCOUNT_ROLE_READONLY }]\n : keys;\n\n const data = new Uint8Array(\n getPreviewSwapExactInInstructionDataEncoder().encode(args),\n );\n\n return { programAddress: programId, accounts: accountsList, data };\n}\n\nexport function decodePreviewSwapExactInResult(\n data: Uint8Array,\n): PreviewSwapExactInResult {\n return previewSwapExactInResultCodec.decode(data);\n}\n","import type { Address } from '@solana/kit';\nimport type { Instruction } from '@solana/kit';\nimport { getStructCodec, getU64Codec } from '@solana/kit';\nimport { ACCOUNT_ROLE_READONLY } from '../../core/constants.js';\nimport {\n INITIALIZER_INSTRUCTION_DISCRIMINATORS,\n INITIALIZER_PROGRAM_ID,\n} from '../constants.js';\nimport { encodeInstructionData } from '../../core/codecs.js';\n\nexport interface PreviewMigrationResult {\n baseVaultAmount: bigint;\n quoteVaultAmount: bigint;\n baseMintSupply: bigint;\n}\n\nconst previewMigrationResultCodec = getStructCodec([\n ['baseVaultAmount', getU64Codec()],\n ['quoteVaultAmount', getU64Codec()],\n ['baseMintSupply', getU64Codec()],\n]);\n\nexport interface PreviewMigrationAccounts {\n launch: Address;\n baseMint: Address;\n baseVault: Address;\n quoteVault: Address;\n}\n\nexport function createPreviewMigrationInstruction(\n accounts: PreviewMigrationAccounts,\n programId: Address = INITIALIZER_PROGRAM_ID,\n): Instruction {\n const { launch, baseMint, baseVault, quoteVault } = accounts;\n\n const keys = [\n { address: launch, role: ACCOUNT_ROLE_READONLY },\n { address: baseMint, role: ACCOUNT_ROLE_READONLY },\n { address: baseVault, role: ACCOUNT_ROLE_READONLY },\n { address: quoteVault, role: ACCOUNT_ROLE_READONLY },\n ];\n\n const data = encodeInstructionData(\n INITIALIZER_INSTRUCTION_DISCRIMINATORS.previewMigration,\n );\n\n return { programAddress: programId, accounts: keys, data };\n}\n\nexport function decodePreviewMigrationResult(\n data: Uint8Array,\n): PreviewMigrationResult {\n return previewMigrationResultCodec.decode(data);\n}\n","/**\n * Launch fetching functions for the Initializer SDK\n */\n\nimport { getAddressCodec, type Address } from '@solana/kit';\nimport type { ReadonlyUint8Array } from '@solana/kit';\nimport type { Rpc, GetAccountInfoApi } from '@solana/kit';\nimport type { GetProgramAccountsRpc } from '../../core/rpc.js';\nimport type { Base64EncodedBytes } from '@solana/kit';\nimport {\n getLaunchDecoder,\n type Launch,\n} from '../../generated/initializer/index.js';\nimport {\n INITIALIZER_PROGRAM_ID,\n INITIALIZER_ACCOUNT_DISCRIMINATORS,\n} from '../constants.js';\nimport { getLaunchAddress } from '../pda.js';\n\nconst addressCodec = getAddressCodec();\n\nfunction bytesToBase64(bytes: ReadonlyUint8Array): string {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\nfunction base64ToBytes(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\nexport interface FetchLaunchesConfig {\n programId?: Address;\n commitment?: 'processed' | 'confirmed' | 'finalized';\n}\n\nexport interface LaunchWithAddress {\n address: Address;\n account: Launch;\n}\n\ntype ProgramAccount = Readonly<{\n pubkey: Address;\n account: Readonly<{ data: [string, 'base64'] }>;\n}>;\n\nexport async function fetchLaunch(\n rpc: Rpc<GetAccountInfoApi>,\n address: Address,\n config?: FetchLaunchesConfig,\n): Promise<Launch | null> {\n const response = await rpc\n .getAccountInfo(address, {\n encoding: 'base64',\n commitment: config?.commitment,\n })\n .send();\n\n if (!response.value) {\n return null;\n }\n\n return getLaunchDecoder().decode(base64ToBytes(response.value.data[0]));\n}\n\nexport async function fetchAllLaunches(\n rpc: GetProgramAccountsRpc,\n config?: FetchLaunchesConfig,\n): Promise<LaunchWithAddress[]> {\n const programId = config?.programId ?? INITIALIZER_PROGRAM_ID;\n\n const discriminatorFilter = {\n memcmp: {\n offset: 0n,\n bytes: bytesToBase64(\n INITIALIZER_ACCOUNT_DISCRIMINATORS.Launch,\n ) as Base64EncodedBytes,\n encoding: 'base64' as const,\n },\n };\n\n const response = (await rpc\n .getProgramAccounts(programId, {\n encoding: 'base64',\n commitment: config?.commitment,\n filters: [discriminatorFilter],\n })\n .send()) as unknown;\n\n const accounts = (\n Array.isArray(response)\n ? response\n : (response as { value: ProgramAccount[] }).value\n ) as ProgramAccount[];\n\n const launches: LaunchWithAddress[] = [];\n const decoder = getLaunchDecoder();\n\n for (const account of accounts) {\n try {\n const launch = decoder.decode(base64ToBytes(account.account.data[0]));\n launches.push({ address: account.pubkey, account: launch });\n } catch {\n console.warn(`Failed to decode launch account: ${account.pubkey}`);\n }\n }\n\n return launches;\n}\n\n/**\n * Fetch launches filtered by Launch.authority (offset 8).\n * Note: Permissionless launches have authority == Pubkey::default().\n */\nexport async function fetchLaunchesByAuthority(\n rpc: GetProgramAccountsRpc,\n authority: Address,\n config?: FetchLaunchesConfig,\n): Promise<LaunchWithAddress[]> {\n const programId = config?.programId ?? INITIALIZER_PROGRAM_ID;\n\n const discriminatorFilter = {\n memcmp: {\n offset: 0n,\n bytes: bytesToBase64(\n INITIALIZER_ACCOUNT_DISCRIMINATORS.Launch,\n ) as Base64EncodedBytes,\n encoding: 'base64' as const,\n },\n };\n\n const authorityFilter = {\n memcmp: {\n offset: 8n,\n bytes: bytesToBase64(\n addressCodec.encode(authority),\n ) as Base64EncodedBytes,\n encoding: 'base64' as const,\n },\n };\n\n const response = (await rpc\n .getProgramAccounts(programId, {\n encoding: 'base64',\n commitment: config?.commitment,\n filters: [discriminatorFilter, authorityFilter],\n })\n .send()) as unknown;\n\n const accounts = (\n Array.isArray(response)\n ? response\n : (response as { value: ProgramAccount[] }).value\n ) as ProgramAccount[];\n\n const launches: LaunchWithAddress[] = [];\n const decoder = getLaunchDecoder();\n\n for (const account of accounts) {\n try {\n const launch = decoder.decode(base64ToBytes(account.account.data[0]));\n launches.push({ address: account.pubkey, account: launch });\n } catch {\n console.warn(`Failed to decode launch account: ${account.pubkey}`);\n }\n }\n\n return launches;\n}\n\nexport async function launchExists(\n rpc: Rpc<GetAccountInfoApi>,\n namespace: Address,\n launchId: Uint8Array,\n config?: FetchLaunchesConfig,\n): Promise<boolean> {\n const programId = config?.programId ?? INITIALIZER_PROGRAM_ID;\n const [launchAddress] = await getLaunchAddress(\n namespace,\n launchId,\n programId,\n );\n const launch = await fetchLaunch(rpc, launchAddress, config);\n return launch !== null;\n}\n","import { mergeBytes } from '@solana/kit';\nimport {\n getRegisterLaunchArgsEncoder,\n getMigrateArgsEncoder,\n type RegisterLaunchArgsArgs,\n type MigrateArgsArgs,\n} from '../../generated/cpmmMigrator/index.js';\nimport { CPMM_MIGRATOR_INSTRUCTION_DISCRIMINATORS } from './constants.js';\n\nexport {\n CPMM_MIGRATOR_PROGRAM_ID,\n SEED_STATE,\n MAX_RECIPIENTS,\n CPMM_MIGRATOR_INSTRUCTION_DISCRIMINATORS,\n CPMM_MIGRATOR_ACCOUNT_DISCRIMINATORS,\n} from './constants.js';\n\nexport type {\n Recipient,\n RecipientArgs,\n RegisterLaunchArgs,\n RegisterLaunchArgsArgs,\n MigrateArgs,\n MigrateArgsArgs,\n CpmmMigratorState,\n CpmmMigratorStateArgs,\n} from '../../generated/cpmmMigrator/index.js';\n\nexport {\n getRecipientEncoder,\n getRecipientDecoder,\n getRecipientCodec,\n getRegisterLaunchArgsEncoder,\n getRegisterLaunchArgsDecoder,\n getRegisterLaunchArgsCodec,\n getMigrateArgsEncoder,\n getMigrateArgsDecoder,\n getMigrateArgsCodec,\n getCpmmMigratorStateEncoder,\n getCpmmMigratorStateDecoder,\n getCpmmMigratorStateCodec,\n} from '../../generated/cpmmMigrator/index.js';\n\nexport { getCpmmMigratorStateAddress } from './pda.js';\n\nexport { fetchCpmmMigratorState } from './client.js';\n\nexport function encodeRegisterLaunchCalldata(\n args: RegisterLaunchArgsArgs,\n): Uint8Array {\n const encoded = new Uint8Array(getRegisterLaunchArgsEncoder().encode(args));\n return mergeBytes([\n CPMM_MIGRATOR_INSTRUCTION_DISCRIMINATORS.registerLaunch,\n encoded,\n ]);\n}\n\nexport function encodeMigrateCalldata(args: MigrateArgsArgs): Uint8Array {\n const encoded = new Uint8Array(getMigrateArgsEncoder().encode(args));\n return mergeBytes([\n CPMM_MIGRATOR_INSTRUCTION_DISCRIMINATORS.migrate,\n encoded,\n ]);\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n} from '@solana/kit';\n\n/**\n * Arguments for migrate instruction.\n * These are deserialized from the migrator_migrate_calldata passed by initializer.\n */\nexport type MigrateArgs = {\n /** Base tokens reserved for distribution to recipients */\n baseForDistribution: bigint;\n /** Base tokens reserved for CPMM liquidity */\n baseForLiquidity: bigint;\n};\n\nexport type MigrateArgsArgs = {\n /** Base tokens reserved for distribution to recipients */\n baseForDistribution: number | bigint;\n /** Base tokens reserved for CPMM liquidity */\n baseForLiquidity: number | bigint;\n};\n\nexport function getMigrateArgsEncoder(): FixedSizeEncoder<MigrateArgsArgs> {\n return getStructEncoder([\n ['baseForDistribution', getU64Encoder()],\n ['baseForLiquidity', getU64Encoder()],\n ]);\n}\n\nexport function getMigrateArgsDecoder(): FixedSizeDecoder<MigrateArgs> {\n return getStructDecoder([\n ['baseForDistribution', getU64Decoder()],\n ['baseForLiquidity', getU64Decoder()],\n ]);\n}\n\nexport function getMigrateArgsCodec(): FixedSizeCodec<\n MigrateArgsArgs,\n MigrateArgs\n> {\n return combineCodec(getMigrateArgsEncoder(), getMigrateArgsDecoder());\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getAddressDecoder,\n getAddressEncoder,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n} from '@solana/kit';\n\nexport type Recipient = { wallet: Address; amount: bigint };\n\nexport type RecipientArgs = { wallet: Address; amount: number | bigint };\n\nexport function getRecipientEncoder(): FixedSizeEncoder<RecipientArgs> {\n return getStructEncoder([\n ['wallet', getAddressEncoder()],\n ['amount', getU64Encoder()],\n ]);\n}\n\nexport function getRecipientDecoder(): FixedSizeDecoder<Recipient> {\n return getStructDecoder([\n ['wallet', getAddressDecoder()],\n ['amount', getU64Decoder()],\n ]);\n}\n\nexport function getRecipientCodec(): FixedSizeCodec<RecipientArgs, Recipient> {\n return combineCodec(getRecipientEncoder(), getRecipientDecoder());\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getAddressDecoder,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getOptionDecoder,\n getOptionEncoder,\n getStructDecoder,\n getStructEncoder,\n getU128Decoder,\n getU128Encoder,\n getU16Decoder,\n getU16Encoder,\n getU64Decoder,\n getU64Encoder,\n type Address,\n type Codec,\n type Decoder,\n type Encoder,\n type Option,\n type OptionOrNullable,\n} from '@solana/kit';\nimport {\n getRecipientDecoder,\n getRecipientEncoder,\n type Recipient,\n type RecipientArgs,\n} from '.';\n\n/**\n * Arguments for register_launch instruction.\n * These are deserialized from the migrator_init_calldata passed by initializer.\n */\nexport type RegisterLaunchArgs = {\n cpmmConfig: Address;\n initialSwapFeeBps: number;\n initialFeeSplitBps: number;\n recipients: Array<Recipient>;\n minRaiseQuote: bigint;\n minMigrationPriceQ64Opt: Option<bigint>;\n};\n\nexport type RegisterLaunchArgsArgs = {\n cpmmConfig: Address;\n initialSwapFeeBps: number;\n initialFeeSplitBps: number;\n recipients: Array<RecipientArgs>;\n minRaiseQuote: number | bigint;\n minMigrationPriceQ64Opt: OptionOrNullable<number | bigint>;\n};\n\nexport function getRegisterLaunchArgsEncoder(): Encoder<RegisterLaunchArgsArgs> {\n return getStructEncoder([\n ['cpmmConfig', getAddressEncoder()],\n ['initialSwapFeeBps', getU16Encoder()],\n ['initialFeeSplitBps', getU16Encoder()],\n ['recipients', getArrayEncoder(getRecipientEncoder())],\n ['minRaiseQuote', getU64Encoder()],\n ['minMigrationPriceQ64Opt', getOptionEncoder(getU128Encoder())],\n ]);\n}\n\nexport function getRegisterLaunchArgsDecoder(): Decoder<RegisterLaunchArgs> {\n return getStructDecoder([\n ['cpmmConfig', getAddressDecoder()],\n ['initialSwapFeeBps', getU16Decoder()],\n ['initialFeeSplitBps', getU16Decoder()],\n ['recipients', getArrayDecoder(getRecipientDecoder())],\n ['minRaiseQuote', getU64Decoder()],\n ['minMigrationPriceQ64Opt', getOptionDecoder(getU128Decoder())],\n ]);\n}\n\nexport function getRegisterLaunchArgsCodec(): Codec<\n RegisterLaunchArgsArgs,\n RegisterLaunchArgs\n> {\n return combineCodec(\n getRegisterLaunchArgsEncoder(),\n getRegisterLaunchArgsDecoder()\n );\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertAccountExists,\n assertAccountsExist,\n combineCodec,\n decodeAccount,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getBooleanDecoder,\n getBooleanEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getOptionDecoder,\n getOptionEncoder,\n getStructDecoder,\n getStructEncoder,\n getU128Decoder,\n getU128Encoder,\n getU16Decoder,\n getU16Encoder,\n getU64Decoder,\n getU64Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type Account,\n type Address,\n type Codec,\n type Decoder,\n type EncodedAccount,\n type Encoder,\n type FetchAccountConfig,\n type FetchAccountsConfig,\n type MaybeAccount,\n type MaybeEncodedAccount,\n type Option,\n type OptionOrNullable,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n getRecipientDecoder,\n getRecipientEncoder,\n type Recipient,\n type RecipientArgs,\n} from '../types';\n\nexport const CPMM_MIGRATOR_STATE_DISCRIMINATOR = new Uint8Array([\n 169, 86, 255, 187, 37, 248, 11, 176,\n]);\n\nexport function getCpmmMigratorStateDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n CPMM_MIGRATOR_STATE_DISCRIMINATOR\n );\n}\n\nexport type CpmmMigratorState = {\n discriminator: ReadonlyUint8Array;\n /** The launch this state is associated with */\n launch: Address;\n /** Admin who registered this launch (receives unsold curve base tokens) */\n admin: Address;\n /** CPMM config to use for pool initialization */\n cpmmConfig: Address;\n /** Initial swap fee for the CPMM pool (basis points) */\n initialSwapFeeBps: number;\n /** Initial fee split for the CPMM pool (basis points) */\n initialFeeSplitBps: number;\n /** Padding for alignment */\n pad0: ReadonlyUint8Array;\n /** Recipients for base token distribution at migration */\n recipients: Array<Recipient>;\n /** Minimum quote tokens required to migrate */\n minRaiseQuote: bigint;\n /** Optional minimum price floor (Q64 fixed point) */\n minMigrationPriceQ64Opt: Option<bigint>;\n /** Whether this launch has been migrated */\n isMigrated: boolean;\n /** Bump seed for this PDA */\n bump: number;\n /** Reserved for future use */\n reserved: ReadonlyUint8Array;\n};\n\nexport type CpmmMigratorStateArgs = {\n /** The launch this state is associated with */\n launch: Address;\n /** Admin who registered this launch (receives unsold curve base tokens) */\n admin: Address;\n /** CPMM config to use for pool initialization */\n cpmmConfig: Address;\n /** Initial swap fee for the CPMM pool (basis points) */\n initialSwapFeeBps: number;\n /** Initial fee split for the CPMM pool (basis points) */\n initialFeeSplitBps: number;\n /** Padding for alignment */\n pad0: ReadonlyUint8Array;\n /** Recipients for base token distribution at migration */\n recipients: Array<RecipientArgs>;\n /** Minimum quote tokens required to migrate */\n minRaiseQuote: number | bigint;\n /** Optional minimum price floor (Q64 fixed point) */\n minMigrationPriceQ64Opt: OptionOrNullable<number | bigint>;\n /** Whether this launch has been migrated */\n isMigrated: boolean;\n /** Bump seed for this PDA */\n bump: number;\n /** Reserved for future use */\n reserved: ReadonlyUint8Array;\n};\n\n/** Gets the encoder for {@link CpmmMigratorStateArgs} account data. */\nexport function getCpmmMigratorStateEncoder(): Encoder<CpmmMigratorStateArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['launch', getAddressEncoder()],\n ['admin', getAddressEncoder()],\n ['cpmmConfig', getAddressEncoder()],\n ['initialSwapFeeBps', getU16Encoder()],\n ['initialFeeSplitBps', getU16Encoder()],\n ['pad0', fixEncoderSize(getBytesEncoder(), 4)],\n ['recipients', getArrayEncoder(getRecipientEncoder(), { size: 2 })],\n ['minRaiseQuote', getU64Encoder()],\n ['minMigrationPriceQ64Opt', getOptionEncoder(getU128Encoder())],\n ['isMigrated', getBooleanEncoder()],\n ['bump', getU8Encoder()],\n ['reserved', fixEncoderSize(getBytesEncoder(), 14)],\n ]),\n (value) => ({ ...value, discriminator: CPMM_MIGRATOR_STATE_DISCRIMINATOR })\n );\n}\n\n/** Gets the decoder for {@link CpmmMigratorState} account data. */\nexport function getCpmmMigratorStateDecoder(): Decoder<CpmmMigratorState> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['launch', getAddressDecoder()],\n ['admin', getAddressDecoder()],\n ['cpmmConfig', getAddressDecoder()],\n ['initialSwapFeeBps', getU16Decoder()],\n ['initialFeeSplitBps', getU16Decoder()],\n ['pad0', fixDecoderSize(getBytesDecoder(), 4)],\n ['recipients', getArrayDecoder(getRecipientDecoder(), { size: 2 })],\n ['minRaiseQuote', getU64Decoder()],\n ['minMigrationPriceQ64Opt', getOptionDecoder(getU128Decoder())],\n ['isMigrated', getBooleanDecoder()],\n ['bump', getU8Decoder()],\n ['reserved', fixDecoderSize(getBytesDecoder(), 14)],\n ]);\n}\n\n/** Gets the codec for {@link CpmmMigratorState} account data. */\nexport function getCpmmMigratorStateCodec(): Codec<\n CpmmMigratorStateArgs,\n CpmmMigratorState\n> {\n return combineCodec(\n getCpmmMigratorStateEncoder(),\n getCpmmMigratorStateDecoder()\n );\n}\n\nexport function decodeCpmmMigratorState<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress>\n): Account<CpmmMigratorState, TAddress>;\nexport function decodeCpmmMigratorState<TAddress extends string = string>(\n encodedAccount: MaybeEncodedAccount<TAddress>\n): MaybeAccount<CpmmMigratorState, TAddress>;\nexport function decodeCpmmMigratorState<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>\n):\n | Account<CpmmMigratorState, TAddress>\n | MaybeAccount<CpmmMigratorState, TAddress> {\n return decodeAccount(\n encodedAccount as MaybeEncodedAccount<TAddress>,\n getCpmmMigratorStateDecoder()\n );\n}\n\nexport async function fetchCpmmMigratorState<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<Account<CpmmMigratorState, TAddress>> {\n const maybeAccount = await fetchMaybeCpmmMigratorState(rpc, address, config);\n assertAccountExists(maybeAccount);\n return maybeAccount;\n}\n\nexport async function fetchMaybeCpmmMigratorState<\n TAddress extends string = string,\n>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<MaybeAccount<CpmmMigratorState, TAddress>> {\n const maybeAccount = await fetchEncodedAccount(rpc, address, config);\n return decodeCpmmMigratorState(maybeAccount);\n}\n\nexport async function fetchAllCpmmMigratorState(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<Account<CpmmMigratorState>[]> {\n const maybeAccounts = await fetchAllMaybeCpmmMigratorState(\n rpc,\n addresses,\n config\n );\n assertAccountsExist(maybeAccounts);\n return maybeAccounts;\n}\n\nexport async function fetchAllMaybeCpmmMigratorState(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<MaybeAccount<CpmmMigratorState>[]> {\n const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);\n return maybeAccounts.map((maybeAccount) =>\n decodeCpmmMigratorState(maybeAccount)\n );\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n isProgramError,\n type Address,\n type SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM,\n type SolanaError,\n} from '@solana/kit';\nimport { CPMM_MIGRATOR_PROGRAM_ADDRESS } from '../programs';\n\n/** Unauthorized: Unauthorized */\nexport const CPMM_MIGRATOR_ERROR__UNAUTHORIZED = 0x1770; // 6000\n/** InvalidPhase: Invalid phase */\nexport const CPMM_MIGRATOR_ERROR__INVALID_PHASE = 0x1771; // 6001\n/** InvalidAmount: Invalid amount */\nexport const CPMM_MIGRATOR_ERROR__INVALID_AMOUNT = 0x1772; // 6002\n/** InvalidVault: Invalid vault */\nexport const CPMM_MIGRATOR_ERROR__INVALID_VAULT = 0x1773; // 6003\n/** InvalidMint: Invalid mint */\nexport const CPMM_MIGRATOR_ERROR__INVALID_MINT = 0x1774; // 6004\n/** MathOverflow: Math overflow */\nexport const CPMM_MIGRATOR_ERROR__MATH_OVERFLOW = 0x1775; // 6005\n/** InvalidConfig: Invalid config */\nexport const CPMM_MIGRATOR_ERROR__INVALID_CONFIG = 0x1776; // 6006\n/** MinRaiseNotMet: Minimum raise not met */\nexport const CPMM_MIGRATOR_ERROR__MIN_RAISE_NOT_MET = 0x1777; // 6007\n/** PriceFloorNotMet: Price floor not met */\nexport const CPMM_MIGRATOR_ERROR__PRICE_FLOOR_NOT_MET = 0x1778; // 6008\n/** MissingRecipientAccount: Missing recipient account */\nexport const CPMM_MIGRATOR_ERROR__MISSING_RECIPIENT_ACCOUNT = 0x1779; // 6009\n/** InvalidRecipientAccount: Invalid recipient account */\nexport const CPMM_MIGRATOR_ERROR__INVALID_RECIPIENT_ACCOUNT = 0x177a; // 6010\n/** ExtraRecipientAccounts: Extra recipient accounts */\nexport const CPMM_MIGRATOR_ERROR__EXTRA_RECIPIENT_ACCOUNTS = 0x177b; // 6011\n/** PoolAlreadyInitialized: Pool already initialized */\nexport const CPMM_MIGRATOR_ERROR__POOL_ALREADY_INITIALIZED = 0x177c; // 6012\n/** PositionAlreadyInitialized: Position already initialized */\nexport const CPMM_MIGRATOR_ERROR__POSITION_ALREADY_INITIALIZED = 0x177d; // 6013\n/** AlreadyMigrated: Already migrated */\nexport const CPMM_MIGRATOR_ERROR__ALREADY_MIGRATED = 0x177e; // 6014\n/** TooManyRecipients: Too many recipients */\nexport const CPMM_MIGRATOR_ERROR__TOO_MANY_RECIPIENTS = 0x177f; // 6015\n/** InvalidRecipient: Invalid recipient */\nexport const CPMM_MIGRATOR_ERROR__INVALID_RECIPIENT = 0x1780; // 6016\n/** InvalidLaunch: Invalid launch */\nexport const CPMM_MIGRATOR_ERROR__INVALID_LAUNCH = 0x1781; // 6017\n/** LaunchConfigMismatch: Launch configuration mismatch */\nexport const CPMM_MIGRATOR_ERROR__LAUNCH_CONFIG_MISMATCH = 0x1782; // 6018\n\nexport type CpmmMigratorError =\n | typeof CPMM_MIGRATOR_ERROR__ALREADY_MIGRATED\n | typeof CPMM_MIGRATOR_ERROR__EXTRA_RECIPIENT_ACCOUNTS\n | typeof CPMM_MIGRATOR_ERROR__INVALID_AMOUNT\n | typeof CPMM_MIGRATOR_ERROR__INVALID_CONFIG\n | typeof CPMM_MIGRATOR_ERROR__INVALID_LAUNCH\n | typeof CPMM_MIGRATOR_ERROR__INVALID_MINT\n | typeof CPMM_MIGRATOR_ERROR__INVALID_PHASE\n | typeof CPMM_MIGRATOR_ERROR__INVALID_RECIPIENT\n | typeof CPMM_MIGRATOR_ERROR__INVALID_RECIPIENT_ACCOUNT\n | typeof CPMM_MIGRATOR_ERROR__INVALID_VAULT\n | typeof CPMM_MIGRATOR_ERROR__LAUNCH_CONFIG_MISMATCH\n | typeof CPMM_MIGRATOR_ERROR__MATH_OVERFLOW\n | typeof CPMM_MIGRATOR_ERROR__MIN_RAISE_NOT_MET\n | typeof CPMM_MIGRATOR_ERROR__MISSING_RECIPIENT_ACCOUNT\n | typeof CPMM_MIGRATOR_ERROR__POOL_ALREADY_INITIALIZED\n | typeof CPMM_MIGRATOR_ERROR__POSITION_ALREADY_INITIALIZED\n | typeof CPMM_MIGRATOR_ERROR__PRICE_FLOOR_NOT_MET\n | typeof CPMM_MIGRATOR_ERROR__TOO_MANY_RECIPIENTS\n | typeof CPMM_MIGRATOR_ERROR__UNAUTHORIZED;\n\nlet cpmmMigratorErrorMessages: Record<CpmmMigratorError, string> | undefined;\nif (process.env.NODE_ENV !== 'production') {\n cpmmMigratorErrorMessages = {\n [CPMM_MIGRATOR_ERROR__ALREADY_MIGRATED]: `Already migrated`,\n [CPMM_MIGRATOR_ERROR__EXTRA_RECIPIENT_ACCOUNTS]: `Extra recipient accounts`,\n [CPMM_MIGRATOR_ERROR__INVALID_AMOUNT]: `Invalid amount`,\n [CPMM_MIGRATOR_ERROR__INVALID_CONFIG]: `Invalid config`,\n [CPMM_MIGRATOR_ERROR__INVALID_LAUNCH]: `Invalid launch`,\n [CPMM_MIGRATOR_ERROR__INVALID_MINT]: `Invalid mint`,\n [CPMM_MIGRATOR_ERROR__INVALID_PHASE]: `Invalid phase`,\n [CPMM_MIGRATOR_ERROR__INVALID_RECIPIENT]: `Invalid recipient`,\n [CPMM_MIGRATOR_ERROR__INVALID_RECIPIENT_ACCOUNT]: `Invalid recipient account`,\n [CPMM_MIGRATOR_ERROR__INVALID_VAULT]: `Invalid vault`,\n [CPMM_MIGRATOR_ERROR__LAUNCH_CONFIG_MISMATCH]: `Launch configuration mismatch`,\n [CPMM_MIGRATOR_ERROR__MATH_OVERFLOW]: `Math overflow`,\n [CPMM_MIGRATOR_ERROR__MIN_RAISE_NOT_MET]: `Minimum raise not met`,\n [CPMM_MIGRATOR_ERROR__MISSING_RECIPIENT_ACCOUNT]: `Missing recipient account`,\n [CPMM_MIGRATOR_ERROR__POOL_ALREADY_INITIALIZED]: `Pool already initialized`,\n [CPMM_MIGRATOR_ERROR__POSITION_ALREADY_INITIALIZED]: `Position already initialized`,\n [CPMM_MIGRATOR_ERROR__PRICE_FLOOR_NOT_MET]: `Price floor not met`,\n [CPMM_MIGRATOR_ERROR__TOO_MANY_RECIPIENTS]: `Too many recipients`,\n [CPMM_MIGRATOR_ERROR__UNAUTHORIZED]: `Unauthorized`,\n };\n}\n\nexport function getCpmmMigratorErrorMessage(code: CpmmMigratorError): string {\n if (process.env.NODE_ENV !== 'production') {\n return (cpmmMigratorErrorMessages as Record<CpmmMigratorError, string>)[\n code\n ];\n }\n\n return 'Error message not available in production bundles.';\n}\n\nexport function isCpmmMigratorError<\n TProgramErrorCode extends CpmmMigratorError,\n>(\n error: unknown,\n transactionMessage: {\n instructions: Record<number, { programAddress: Address }>;\n },\n code?: TProgramErrorCode\n): error is SolanaError<typeof SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM> &\n Readonly<{ context: Readonly<{ code: TProgramErrorCode }> }> {\n return isProgramError<TProgramErrorCode>(\n error,\n transactionMessage,\n CPMM_MIGRATOR_PROGRAM_ADDRESS,\n code\n );\n}\n","import { address, type Address } from '@solana/kit';\n\n// Source of truth: programs/cpmm_migrator/src/lib.rs\nexport const CPMM_MIGRATOR_PROGRAM_ID: Address = address(\n 'CpmmMig1111111111111111111111111111111111111',\n);\n\nexport const SEED_STATE = 'state';\n\n// Source of truth: programs/cpmm_migrator/src/constants.rs\nexport const MAX_RECIPIENTS = 2;\n\nexport const CPMM_MIGRATOR_INSTRUCTION_DISCRIMINATORS = {\n // SHA256(\"global:register_launch\")[0:8]\n registerLaunch: new Uint8Array([\n 0x72, 0x72, 0x43, 0x17, 0x29, 0x46, 0x00, 0xe1,\n ]),\n // SHA256(\"global:migrate\")[0:8]\n migrate: new Uint8Array([0x9b, 0xea, 0xe7, 0x92, 0xec, 0x9e, 0xa2, 0x1e]),\n} as const;\n\nexport const CPMM_MIGRATOR_ACCOUNT_DISCRIMINATORS = {\n // SHA256(\"account:CpmmMigratorState\")[0:8]\n CpmmMigratorState: new Uint8Array([\n 0xa9, 0x56, 0xff, 0xbb, 0x25, 0xf8, 0x0b, 0xb0,\n ]),\n} as const;\n","import {\n type Address,\n type ProgramDerivedAddress,\n getAddressCodec,\n getProgramDerivedAddress,\n} from '@solana/kit';\nimport { CPMM_MIGRATOR_PROGRAM_ID, SEED_STATE } from './constants.js';\n\nconst addressCodec = getAddressCodec();\nconst textEncoder = new TextEncoder();\n\nexport async function getCpmmMigratorStateAddress(\n launch: Address,\n programId: Address = CPMM_MIGRATOR_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n return getProgramDerivedAddress({\n programAddress: programId,\n seeds: [textEncoder.encode(SEED_STATE), addressCodec.encode(launch)],\n });\n}\n","import type { Address } from '@solana/kit';\nimport type { Rpc, GetAccountInfoApi } from '@solana/kit';\nimport {\n getCpmmMigratorStateDecoder,\n type CpmmMigratorState,\n} from '../../generated/cpmmMigrator/index.js';\n\nfunction base64ToBytes(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\nexport async function fetchCpmmMigratorState(\n rpc: Rpc<GetAccountInfoApi>,\n address: Address,\n): Promise<CpmmMigratorState | null> {\n const response = await rpc\n .getAccountInfo(address, { encoding: 'base64' })\n .send();\n if (!response.value) return null;\n return getCpmmMigratorStateDecoder().decode(\n base64ToBytes(response.value.data[0]),\n );\n}\n"]}