@veilo/sdk-core 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +449 -1243
  3. package/accounts.d.ts +2 -0
  4. package/accounts.js +3 -0
  5. package/cloak.d.ts +2 -0
  6. package/cloak.js +3 -0
  7. package/config.d.ts +2 -2
  8. package/config.js +2 -3
  9. package/dist/cjs/accounts/admin.d.ts +84 -0
  10. package/dist/cjs/accounts/admin.js +208 -0
  11. package/dist/cjs/accounts/errors.d.ts +6 -0
  12. package/dist/cjs/accounts/errors.js +98 -0
  13. package/dist/cjs/accounts/index.d.ts +4 -0
  14. package/dist/cjs/accounts/index.js +20 -0
  15. package/dist/cjs/accounts/pdas.d.ts +23 -0
  16. package/dist/cjs/accounts/pdas.js +44 -0
  17. package/dist/cjs/accounts/queries.d.ts +41 -0
  18. package/dist/cjs/accounts/queries.js +95 -0
  19. package/dist/cjs/client.d.ts +2 -407
  20. package/dist/cjs/client.js +6 -938
  21. package/dist/cjs/cloak/client.d.ts +28 -0
  22. package/dist/cjs/cloak/client.js +68 -0
  23. package/dist/cjs/cloak/errors.d.ts +13 -0
  24. package/dist/cjs/cloak/errors.js +25 -0
  25. package/dist/cjs/cloak/helpers.d.ts +6 -0
  26. package/dist/cjs/cloak/helpers.js +35 -0
  27. package/dist/cjs/cloak/index.d.ts +6 -0
  28. package/dist/cjs/cloak/index.js +24 -0
  29. package/dist/cjs/cloak/polling.d.ts +7 -0
  30. package/dist/cjs/cloak/polling.js +66 -0
  31. package/dist/cjs/cloak/transport.d.ts +15 -0
  32. package/dist/cjs/cloak/transport.js +119 -0
  33. package/dist/cjs/cloak/types.d.ts +188 -0
  34. package/dist/cjs/cloak/types.js +5 -0
  35. package/dist/cjs/cloak.d.ts +1 -0
  36. package/dist/cjs/cloak.js +18 -0
  37. package/dist/cjs/compactNote.d.ts +21 -0
  38. package/dist/cjs/compactNote.js +31 -7
  39. package/dist/cjs/events/index.d.ts +6 -0
  40. package/dist/cjs/events/index.js +22 -0
  41. package/dist/cjs/events/parsing.d.ts +25 -0
  42. package/dist/cjs/events/parsing.js +158 -0
  43. package/dist/cjs/events/position.d.ts +26 -0
  44. package/dist/cjs/events/position.js +53 -0
  45. package/dist/cjs/events/recovery.d.ts +87 -0
  46. package/dist/cjs/events/recovery.js +281 -0
  47. package/dist/cjs/events/scanning.d.ts +35 -0
  48. package/dist/cjs/events/scanning.js +98 -0
  49. package/dist/cjs/events/tree.d.ts +27 -0
  50. package/dist/cjs/events/tree.js +63 -0
  51. package/dist/cjs/events/types.d.ts +39 -0
  52. package/dist/cjs/events.d.ts +1 -77
  53. package/dist/cjs/events.js +6 -154
  54. package/dist/cjs/identity/encoding.d.ts +9 -0
  55. package/dist/cjs/identity/encoding.js +85 -0
  56. package/dist/cjs/identity/index.d.ts +4 -0
  57. package/dist/cjs/identity/index.js +20 -0
  58. package/dist/cjs/identity/noteKey.d.ts +33 -0
  59. package/dist/cjs/identity/noteKey.js +97 -0
  60. package/dist/cjs/identity/spending.d.ts +18 -0
  61. package/dist/cjs/identity/spending.js +46 -0
  62. package/dist/cjs/identity/viewKey.d.ts +38 -0
  63. package/dist/cjs/identity/viewKey.js +105 -0
  64. package/dist/cjs/idl/index.d.ts +18 -0
  65. package/dist/cjs/idl/index.js +24 -0
  66. package/dist/cjs/idl/privacy_pool.json +9907 -9907
  67. package/dist/cjs/idl/privacy_pool_legacy.js +3307 -0
  68. package/dist/cjs/idl/privacy_pool_legacy.json +2302 -0
  69. package/dist/cjs/idl/privacy_pool_legacy2.d.ts +5 -0
  70. package/dist/cjs/idl/privacy_pool_legacy2.js +3397 -0
  71. package/dist/cjs/idl/privacy_pool_legacy2.json +2376 -0
  72. package/dist/cjs/index.d.ts +9 -3
  73. package/dist/cjs/index.js +15 -2
  74. package/dist/cjs/notes/amount.d.ts +2 -0
  75. package/dist/cjs/notes/amount.js +21 -0
  76. package/dist/cjs/notes/encryption.d.ts +41 -0
  77. package/dist/cjs/notes/encryption.js +75 -0
  78. package/dist/cjs/notes/index.d.ts +8 -0
  79. package/dist/cjs/notes/index.js +24 -0
  80. package/dist/cjs/notes/mailbox.d.ts +70 -0
  81. package/dist/cjs/notes/mailbox.js +164 -0
  82. package/dist/cjs/notes/model.d.ts +91 -0
  83. package/dist/cjs/notes/model.js +109 -0
  84. package/dist/cjs/notes/nullifier.d.ts +27 -0
  85. package/dist/cjs/notes/nullifier.js +45 -0
  86. package/dist/cjs/notes/recovery.d.ts +20 -0
  87. package/dist/cjs/notes/recovery.js +48 -0
  88. package/dist/cjs/notes/selection.d.ts +77 -0
  89. package/dist/cjs/notes/selection.js +193 -0
  90. package/dist/cjs/notes/spent.d.ts +60 -0
  91. package/dist/cjs/notes/spent.js +101 -0
  92. package/dist/cjs/perps/constants.d.ts +16 -0
  93. package/dist/cjs/perps/constants.js +52 -0
  94. package/dist/cjs/perps/index.d.ts +5 -0
  95. package/dist/cjs/perps/index.js +21 -0
  96. package/dist/cjs/perps/keys.d.ts +16 -0
  97. package/dist/cjs/perps/keys.js +43 -0
  98. package/dist/cjs/perps/pdas.d.ts +29 -0
  99. package/dist/cjs/perps/pdas.js +55 -0
  100. package/dist/cjs/perps/relayer.d.ts +9 -0
  101. package/dist/cjs/perps/relayer.js +35 -0
  102. package/dist/cjs/perps/types.d.ts +126 -0
  103. package/dist/cjs/perps/types.js +2 -0
  104. package/dist/cjs/positions/index.d.ts +4 -0
  105. package/dist/cjs/positions/index.js +20 -0
  106. package/dist/cjs/positions/keys.d.ts +29 -0
  107. package/dist/cjs/positions/keys.js +71 -0
  108. package/dist/cjs/positions/pdas.d.ts +15 -0
  109. package/dist/cjs/positions/pdas.js +54 -0
  110. package/dist/cjs/positions/relayer.d.ts +4 -0
  111. package/dist/cjs/positions/relayer.js +15 -0
  112. package/dist/cjs/positions/types.d.ts +97 -0
  113. package/dist/cjs/positions/types.js +2 -0
  114. package/dist/cjs/predictions/client.d.ts +41 -0
  115. package/dist/cjs/predictions/client.js +147 -0
  116. package/dist/cjs/predictions/index.d.ts +5 -0
  117. package/dist/cjs/predictions/index.js +21 -0
  118. package/dist/cjs/predictions/keys.d.ts +14 -0
  119. package/dist/cjs/predictions/keys.js +40 -0
  120. package/dist/cjs/predictions/pdas.d.ts +6 -0
  121. package/dist/cjs/predictions/pdas.js +13 -0
  122. package/dist/cjs/predictions/relayer.d.ts +3 -0
  123. package/dist/cjs/predictions/relayer.js +11 -0
  124. package/dist/cjs/predictions/types.d.ts +178 -0
  125. package/dist/cjs/predictions/types.js +2 -0
  126. package/dist/cjs/program.d.ts +2 -0
  127. package/dist/cjs/program.js +8 -7
  128. package/dist/cjs/proof.d.ts +1 -183
  129. package/dist/cjs/proof.js +16 -290
  130. package/dist/cjs/proofs/encoding.d.ts +17 -0
  131. package/dist/cjs/proofs/encoding.js +72 -0
  132. package/dist/cjs/proofs/formatting.d.ts +6 -0
  133. package/dist/cjs/proofs/formatting.js +34 -0
  134. package/dist/cjs/proofs/index.d.ts +5 -0
  135. package/dist/cjs/proofs/index.js +21 -0
  136. package/dist/cjs/proofs/swap.d.ts +87 -0
  137. package/dist/cjs/proofs/swap.js +144 -0
  138. package/dist/cjs/proofs/transaction.d.ts +28 -0
  139. package/dist/cjs/proofs/transaction.js +110 -0
  140. package/dist/cjs/proofs/types.d.ts +70 -0
  141. package/dist/cjs/proofs/types.js +2 -0
  142. package/dist/cjs/prover.d.ts +30 -4
  143. package/dist/cjs/prover.js +118 -49
  144. package/dist/cjs/relayer/api.d.ts +31 -0
  145. package/dist/cjs/relayer/api.js +86 -0
  146. package/dist/cjs/relayer/client.d.ts +73 -0
  147. package/dist/cjs/relayer/client.js +206 -0
  148. package/dist/cjs/relayer/crypto.d.ts +5 -0
  149. package/dist/cjs/relayer/crypto.js +26 -0
  150. package/dist/cjs/relayer/encoding.d.ts +2 -0
  151. package/dist/cjs/relayer/encoding.js +23 -0
  152. package/dist/cjs/relayer/errors.d.ts +7 -0
  153. package/dist/cjs/relayer/errors.js +17 -0
  154. package/dist/cjs/relayer/index.d.ts +6 -0
  155. package/dist/cjs/relayer/index.js +19 -0
  156. package/dist/cjs/relayer/internal-config.d.ts +36 -0
  157. package/dist/cjs/relayer/internal-config.js +9 -0
  158. package/dist/cjs/relayer/internal.d.ts +6 -0
  159. package/dist/cjs/relayer/internal.js +14 -0
  160. package/dist/cjs/relayer/transport.d.ts +19 -0
  161. package/dist/cjs/relayer/transport.js +68 -0
  162. package/dist/{src/relayer.d.ts → cjs/relayer/types.d.ts} +53 -96
  163. package/dist/cjs/relayer/types.js +5 -0
  164. package/dist/cjs/relayer.d.ts +1 -318
  165. package/dist/cjs/relayer.js +15 -254
  166. package/dist/cjs/shield/alt.js +8 -8
  167. package/dist/cjs/shield/errors.js +2 -2
  168. package/dist/cjs/shield/finalize.js +2 -2
  169. package/dist/cjs/shield/ix.d.ts +1 -1
  170. package/dist/cjs/shield/owner.js +9 -11
  171. package/dist/cjs/shield/ports.js +3 -3
  172. package/dist/cjs/shield/preflight.js +3 -3
  173. package/dist/cjs/shield/shield.js +20 -19
  174. package/dist/cjs/shield/types.d.ts +1 -1
  175. package/dist/cjs/transactions/deposit.d.ts +94 -0
  176. package/dist/cjs/transactions/deposit.js +234 -0
  177. package/dist/cjs/transactions/index.d.ts +7 -0
  178. package/dist/cjs/transactions/index.js +26 -0
  179. package/dist/cjs/transactions/swap.d.ts +71 -0
  180. package/dist/cjs/transactions/swap.js +184 -0
  181. package/dist/cjs/transactions/transact.d.ts +34 -0
  182. package/dist/cjs/transactions/transact.js +146 -0
  183. package/dist/cjs/transactions/transfer.d.ts +51 -0
  184. package/dist/cjs/transactions/transfer.js +106 -0
  185. package/dist/cjs/transactions/withdraw.d.ts +52 -0
  186. package/dist/cjs/transactions/withdraw.js +104 -0
  187. package/dist/cjs/utxo.d.ts +1 -235
  188. package/dist/cjs/utxo.js +15 -404
  189. package/dist/esm/accounts/admin.d.ts +84 -0
  190. package/dist/esm/accounts/admin.js +165 -0
  191. package/dist/esm/accounts/errors.d.ts +6 -0
  192. package/dist/esm/accounts/errors.js +95 -0
  193. package/dist/esm/accounts/index.d.ts +4 -0
  194. package/dist/esm/accounts/index.js +4 -0
  195. package/dist/esm/accounts/pdas.d.ts +23 -0
  196. package/dist/esm/accounts/pdas.js +38 -0
  197. package/dist/esm/accounts/queries.d.ts +41 -0
  198. package/dist/esm/accounts/queries.js +88 -0
  199. package/dist/esm/client.d.ts +2 -407
  200. package/dist/esm/client.js +3 -891
  201. package/dist/esm/cloak/client.d.ts +28 -0
  202. package/dist/esm/cloak/client.js +64 -0
  203. package/dist/esm/cloak/errors.d.ts +13 -0
  204. package/dist/esm/cloak/errors.js +21 -0
  205. package/dist/esm/cloak/helpers.d.ts +6 -0
  206. package/dist/esm/cloak/helpers.js +31 -0
  207. package/dist/esm/cloak/index.d.ts +6 -0
  208. package/dist/esm/cloak/index.js +6 -0
  209. package/dist/esm/cloak/polling.d.ts +7 -0
  210. package/dist/esm/cloak/polling.js +63 -0
  211. package/dist/esm/cloak/transport.d.ts +15 -0
  212. package/dist/esm/cloak/transport.js +115 -0
  213. package/dist/esm/cloak/types.d.ts +188 -0
  214. package/dist/esm/cloak/types.js +4 -0
  215. package/dist/esm/cloak.d.ts +1 -0
  216. package/dist/esm/cloak.js +2 -0
  217. package/dist/esm/compactNote.d.ts +21 -0
  218. package/dist/esm/compactNote.js +24 -1
  219. package/dist/esm/events/index.d.ts +6 -0
  220. package/dist/esm/events/index.js +6 -0
  221. package/dist/esm/events/parsing.d.ts +25 -0
  222. package/dist/esm/events/parsing.js +120 -0
  223. package/dist/esm/events/position.d.ts +26 -0
  224. package/dist/esm/events/position.js +48 -0
  225. package/dist/esm/events/recovery.d.ts +87 -0
  226. package/dist/esm/events/recovery.js +237 -0
  227. package/dist/esm/events/scanning.d.ts +35 -0
  228. package/dist/esm/events/scanning.js +92 -0
  229. package/dist/esm/events/tree.d.ts +27 -0
  230. package/dist/esm/events/tree.js +58 -0
  231. package/dist/esm/events/types.d.ts +39 -0
  232. package/dist/esm/events/types.js +1 -0
  233. package/dist/esm/events.d.ts +1 -77
  234. package/dist/esm/events.js +3 -129
  235. package/dist/esm/identity/encoding.d.ts +9 -0
  236. package/dist/esm/identity/encoding.js +75 -0
  237. package/dist/esm/identity/index.d.ts +4 -0
  238. package/dist/esm/identity/index.js +4 -0
  239. package/dist/esm/identity/noteKey.d.ts +33 -0
  240. package/dist/esm/identity/noteKey.js +91 -0
  241. package/dist/esm/identity/spending.d.ts +18 -0
  242. package/dist/esm/identity/spending.js +35 -0
  243. package/dist/esm/identity/viewKey.d.ts +38 -0
  244. package/dist/esm/identity/viewKey.js +96 -0
  245. package/dist/esm/idl/index.d.ts +18 -0
  246. package/dist/esm/idl/index.js +18 -0
  247. package/dist/esm/idl/privacy_pool.json +9907 -9907
  248. package/dist/esm/idl/privacy_pool_legacy.d.ts +5 -0
  249. package/dist/esm/idl/privacy_pool_legacy.js +3305 -0
  250. package/dist/esm/idl/privacy_pool_legacy.json +2302 -0
  251. package/dist/esm/idl/privacy_pool_legacy2.d.ts +5 -0
  252. package/dist/esm/idl/privacy_pool_legacy2.js +3395 -0
  253. package/dist/esm/idl/privacy_pool_legacy2.json +2376 -0
  254. package/dist/esm/index.d.ts +9 -3
  255. package/dist/esm/index.js +10 -3
  256. package/dist/esm/notes/amount.d.ts +2 -0
  257. package/dist/esm/notes/amount.js +18 -0
  258. package/dist/esm/notes/encryption.d.ts +41 -0
  259. package/dist/esm/notes/encryption.js +67 -0
  260. package/dist/esm/notes/index.d.ts +8 -0
  261. package/dist/esm/notes/index.js +8 -0
  262. package/dist/esm/notes/mailbox.d.ts +70 -0
  263. package/dist/esm/notes/mailbox.js +154 -0
  264. package/dist/esm/notes/model.d.ts +91 -0
  265. package/dist/esm/notes/model.js +99 -0
  266. package/dist/esm/notes/nullifier.d.ts +27 -0
  267. package/dist/esm/notes/nullifier.js +40 -0
  268. package/dist/esm/notes/recovery.d.ts +20 -0
  269. package/dist/esm/notes/recovery.js +45 -0
  270. package/dist/esm/notes/selection.d.ts +77 -0
  271. package/dist/esm/notes/selection.js +188 -0
  272. package/dist/esm/notes/spent.d.ts +60 -0
  273. package/dist/esm/notes/spent.js +96 -0
  274. package/dist/esm/perps/constants.d.ts +16 -0
  275. package/dist/esm/perps/constants.js +48 -0
  276. package/dist/esm/perps/index.d.ts +5 -0
  277. package/dist/esm/perps/index.js +5 -0
  278. package/dist/esm/perps/keys.d.ts +16 -0
  279. package/dist/esm/perps/keys.js +35 -0
  280. package/dist/esm/perps/pdas.d.ts +29 -0
  281. package/dist/esm/perps/pdas.js +47 -0
  282. package/dist/esm/perps/relayer.d.ts +9 -0
  283. package/dist/esm/perps/relayer.js +25 -0
  284. package/dist/esm/perps/types.d.ts +126 -0
  285. package/dist/esm/perps/types.js +1 -0
  286. package/dist/esm/positions/index.d.ts +4 -0
  287. package/dist/esm/positions/index.js +4 -0
  288. package/dist/esm/positions/keys.d.ts +29 -0
  289. package/dist/esm/positions/keys.js +65 -0
  290. package/dist/esm/positions/pdas.d.ts +15 -0
  291. package/dist/esm/positions/pdas.js +44 -0
  292. package/dist/esm/positions/relayer.d.ts +4 -0
  293. package/dist/esm/positions/relayer.js +10 -0
  294. package/dist/esm/positions/types.d.ts +97 -0
  295. package/dist/esm/positions/types.js +1 -0
  296. package/dist/esm/predictions/client.d.ts +41 -0
  297. package/dist/esm/predictions/client.js +141 -0
  298. package/dist/esm/predictions/index.d.ts +5 -0
  299. package/dist/esm/predictions/index.js +5 -0
  300. package/dist/esm/predictions/keys.d.ts +14 -0
  301. package/dist/esm/predictions/keys.js +33 -0
  302. package/dist/esm/predictions/pdas.d.ts +6 -0
  303. package/dist/esm/predictions/pdas.js +10 -0
  304. package/dist/esm/predictions/relayer.d.ts +3 -0
  305. package/dist/esm/predictions/relayer.js +7 -0
  306. package/dist/esm/predictions/types.d.ts +178 -0
  307. package/dist/esm/predictions/types.js +1 -0
  308. package/dist/esm/program.d.ts +2 -0
  309. package/dist/esm/program.js +4 -3
  310. package/dist/esm/proof.d.ts +1 -183
  311. package/dist/esm/proof.js +2 -281
  312. package/dist/esm/proofs/encoding.d.ts +17 -0
  313. package/dist/esm/proofs/encoding.js +68 -0
  314. package/dist/esm/proofs/formatting.d.ts +6 -0
  315. package/dist/esm/proofs/formatting.js +31 -0
  316. package/dist/esm/proofs/index.d.ts +5 -0
  317. package/dist/esm/proofs/index.js +5 -0
  318. package/dist/esm/proofs/swap.d.ts +87 -0
  319. package/dist/esm/proofs/swap.js +138 -0
  320. package/dist/esm/proofs/transaction.d.ts +28 -0
  321. package/dist/esm/proofs/transaction.js +105 -0
  322. package/dist/esm/proofs/types.d.ts +70 -0
  323. package/dist/esm/proofs/types.js +1 -0
  324. package/dist/esm/prover.d.ts +30 -4
  325. package/dist/esm/prover.js +115 -15
  326. package/dist/esm/relayer/api.d.ts +31 -0
  327. package/dist/esm/relayer/api.js +55 -0
  328. package/dist/esm/relayer/client.d.ts +73 -0
  329. package/dist/esm/relayer/client.js +199 -0
  330. package/dist/esm/relayer/crypto.d.ts +5 -0
  331. package/dist/esm/relayer/crypto.js +20 -0
  332. package/dist/esm/relayer/encoding.d.ts +2 -0
  333. package/dist/esm/relayer/encoding.js +19 -0
  334. package/dist/esm/relayer/errors.d.ts +7 -0
  335. package/dist/esm/relayer/errors.js +13 -0
  336. package/dist/esm/relayer/index.d.ts +6 -0
  337. package/dist/esm/relayer/index.js +3 -0
  338. package/dist/esm/relayer/internal-config.d.ts +36 -0
  339. package/dist/esm/relayer/internal-config.js +6 -0
  340. package/dist/esm/relayer/internal.d.ts +6 -0
  341. package/dist/esm/relayer/internal.js +10 -0
  342. package/dist/esm/relayer/transport.d.ts +19 -0
  343. package/dist/esm/relayer/transport.js +64 -0
  344. package/dist/esm/relayer/types.d.ts +275 -0
  345. package/dist/esm/relayer/types.js +4 -0
  346. package/dist/esm/relayer.d.ts +1 -318
  347. package/dist/esm/relayer.js +2 -249
  348. package/dist/esm/shield/alt.js +1 -1
  349. package/dist/esm/shield/errors.js +1 -1
  350. package/dist/esm/shield/finalize.js +1 -1
  351. package/dist/esm/shield/ix.d.ts +1 -1
  352. package/dist/esm/shield/owner.js +3 -5
  353. package/dist/esm/shield/ports.js +1 -1
  354. package/dist/esm/shield/preflight.js +1 -1
  355. package/dist/esm/shield/shield.js +4 -3
  356. package/dist/esm/shield/types.d.ts +1 -1
  357. package/dist/esm/transactions/deposit.d.ts +94 -0
  358. package/dist/esm/transactions/deposit.js +198 -0
  359. package/dist/esm/transactions/index.d.ts +7 -0
  360. package/dist/esm/transactions/index.js +7 -0
  361. package/dist/esm/transactions/swap.d.ts +71 -0
  362. package/dist/esm/transactions/swap.js +144 -0
  363. package/dist/esm/transactions/transact.d.ts +34 -0
  364. package/dist/esm/transactions/transact.js +110 -0
  365. package/dist/esm/transactions/transfer.d.ts +51 -0
  366. package/dist/esm/transactions/transfer.js +103 -0
  367. package/dist/esm/transactions/withdraw.d.ts +52 -0
  368. package/dist/esm/transactions/withdraw.js +101 -0
  369. package/dist/esm/utxo.d.ts +1 -235
  370. package/dist/esm/utxo.js +2 -382
  371. package/identity.d.ts +2 -0
  372. package/identity.js +3 -0
  373. package/idl.d.ts +2 -0
  374. package/idl.js +3 -0
  375. package/notes.d.ts +2 -0
  376. package/notes.js +3 -0
  377. package/package.json +131 -11
  378. package/perps.d.ts +2 -0
  379. package/perps.js +3 -0
  380. package/poseidon.d.ts +2 -2
  381. package/poseidon.js +2 -3
  382. package/positions.d.ts +2 -0
  383. package/positions.js +3 -0
  384. package/predictions.d.ts +2 -0
  385. package/predictions.js +3 -0
  386. package/proof.d.ts +2 -2
  387. package/proof.js +2 -3
  388. package/prover.d.ts +2 -2
  389. package/prover.js +2 -3
  390. package/relayer.d.ts +2 -0
  391. package/relayer.js +3 -0
  392. package/shield.d.ts +2 -2
  393. package/shield.js +2 -3
  394. package/transactions.d.ts +2 -0
  395. package/transactions.js +3 -0
  396. package/SHIELD_INTEGRATION.md +0 -143
  397. package/dist/src/client.d.ts +0 -407
  398. package/dist/src/client.js +0 -951
  399. package/dist/src/compactNote.d.ts +0 -107
  400. package/dist/src/compactNote.js +0 -167
  401. package/dist/src/config.d.ts +0 -82
  402. package/dist/src/config.js +0 -57
  403. package/dist/src/events.d.ts +0 -77
  404. package/dist/src/events.js +0 -167
  405. package/dist/src/idl/privacy_pool.js +0 -15218
  406. package/dist/src/index.d.ts +0 -16
  407. package/dist/src/index.js +0 -67
  408. package/dist/src/merkle.d.ts +0 -77
  409. package/dist/src/merkle.js +0 -156
  410. package/dist/src/poseidon.d.ts +0 -29
  411. package/dist/src/poseidon.js +0 -100
  412. package/dist/src/program.d.ts +0 -37
  413. package/dist/src/program.js +0 -61
  414. package/dist/src/proof.d.ts +0 -183
  415. package/dist/src/proof.js +0 -292
  416. package/dist/src/prover.d.ts +0 -54
  417. package/dist/src/prover.js +0 -112
  418. package/dist/src/random.d.ts +0 -16
  419. package/dist/src/random.js +0 -28
  420. package/dist/src/relayer.js +0 -257
  421. package/dist/src/retry.d.ts +0 -32
  422. package/dist/src/retry.js +0 -75
  423. package/dist/src/shield/alt.d.ts +0 -87
  424. package/dist/src/shield/alt.js +0 -194
  425. package/dist/src/shield/computeBudget.d.ts +0 -61
  426. package/dist/src/shield/computeBudget.js +0 -64
  427. package/dist/src/shield/errors.d.ts +0 -58
  428. package/dist/src/shield/errors.js +0 -121
  429. package/dist/src/shield/finalize.d.ts +0 -45
  430. package/dist/src/shield/finalize.js +0 -119
  431. package/dist/src/shield/index.d.ts +0 -35
  432. package/dist/src/shield/index.js +0 -68
  433. package/dist/src/shield/ix.d.ts +0 -54
  434. package/dist/src/shield/ix.js +0 -119
  435. package/dist/src/shield/owner.d.ts +0 -36
  436. package/dist/src/shield/owner.js +0 -126
  437. package/dist/src/shield/ports.d.ts +0 -43
  438. package/dist/src/shield/ports.js +0 -153
  439. package/dist/src/shield/preflight.d.ts +0 -30
  440. package/dist/src/shield/preflight.js +0 -154
  441. package/dist/src/shield/shield.d.ts +0 -68
  442. package/dist/src/shield/shield.js +0 -499
  443. package/dist/src/shield/types.d.ts +0 -202
  444. package/dist/src/utxo.d.ts +0 -235
  445. package/dist/src/utxo.js +0 -407
  446. package/dist/tests/compact-note.test.d.ts +0 -1
  447. package/dist/tests/compact-note.test.js +0 -173
  448. package/dist/tests/config.test.d.ts +0 -1
  449. package/dist/tests/config.test.js +0 -102
  450. package/dist/tests/edge-cases.test.d.ts +0 -1
  451. package/dist/tests/edge-cases.test.js +0 -220
  452. package/dist/tests/encryption.test.d.ts +0 -1
  453. package/dist/tests/encryption.test.js +0 -215
  454. package/dist/tests/events.test.d.ts +0 -1
  455. package/dist/tests/events.test.js +0 -78
  456. package/dist/tests/multi-tree.test.d.ts +0 -1
  457. package/dist/tests/multi-tree.test.js +0 -405
  458. package/dist/tests/pda.test.d.ts +0 -1
  459. package/dist/tests/pda.test.js +0 -229
  460. package/dist/tests/poseidon-builder-parity.test.d.ts +0 -1
  461. package/dist/tests/poseidon-builder-parity.test.js +0 -72
  462. package/dist/tests/poseidon.test.d.ts +0 -1
  463. package/dist/tests/poseidon.test.js +0 -142
  464. package/dist/tests/proof.test.d.ts +0 -1
  465. package/dist/tests/proof.test.js +0 -296
  466. package/dist/tests/relayer.test.d.ts +0 -1
  467. package/dist/tests/relayer.test.js +0 -271
  468. package/dist/tests/sdk.integration.test.d.ts +0 -1
  469. package/dist/tests/sdk.integration.test.js +0 -330
  470. package/dist/tests/shield-owner.test.d.ts +0 -1
  471. package/dist/tests/shield-owner.test.js +0 -89
  472. package/dist/tests/shield-preflight.test.d.ts +0 -1
  473. package/dist/tests/shield-preflight.test.js +0 -87
  474. package/dist/tests/shield-realproof.test.d.ts +0 -1
  475. package/dist/tests/shield-realproof.test.js +0 -272
  476. package/dist/tests/shield.test.d.ts +0 -1
  477. package/dist/tests/shield.test.js +0 -403
  478. package/dist/tests/utxo.test.d.ts +0 -1
  479. package/dist/tests/utxo.test.js +0 -140
  480. /package/dist/{src/shield → cjs/events}/types.js +0 -0
  481. /package/dist/{src/idl/privacy_pool.d.ts → cjs/idl/privacy_pool_legacy.d.ts} +0 -0
@@ -1,119 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.TRANSACT_ACCOUNT_NAMES = void 0;
37
- exports.buildTransactInstruction = buildTransactInstruction;
38
- const anchor = __importStar(require("@coral-xyz/anchor"));
39
- const web3_js_1 = require("@solana/web3.js");
40
- const program_js_1 = require("../program.js");
41
- const errors_js_1 = require("./errors.js");
42
- const computeBudget_js_1 = require("./computeBudget.js");
43
- // Anchor is CommonJS and does not expose BN as a detectable named export to
44
- // Node ESM. Pull both runtime values from the namespace so CJS and ESM agree.
45
- const { BN, BorshInstructionCoder } = anchor;
46
- const IDL_TRANSACT = program_js_1.PRIVACY_POOL_IDL.instructions.find((i) => i.name === "transact");
47
- if (!IDL_TRANSACT) {
48
- throw new Error("privacy_pool IDL has no `transact` instruction");
49
- }
50
- /** Account names in IDL order. Exported so callers can see what must be resolved. */
51
- exports.TRANSACT_ACCOUNT_NAMES = IDL_TRANSACT.accounts.map((a) => a.name);
52
- /**
53
- * Build the `transact` instruction.
54
- *
55
- * @throws ShieldError('UNRESOLVED_ACCOUNT') if the IDL declares an account the
56
- * caller did not supply — a loud failure is the point, because the
57
- * alternative is a misordered account list that fails opaquely on-chain.
58
- */
59
- function buildTransactInstruction(accounts, args, programId = program_js_1.PRIVACY_POOL_PROGRAM_ID) {
60
- const keys = IDL_TRANSACT.accounts.map((a) => {
61
- const pubkey = accounts[a.name];
62
- if (!pubkey) {
63
- throw new errors_js_1.ShieldError("UNRESOLVED_ACCOUNT", `The IDL declares account "${a.name}" for transact, but it was not resolved. ` +
64
- `Expected accounts: ${exports.TRANSACT_ACCOUNT_NAMES.join(", ")}`, { context: { missing: a.name, supplied: Object.keys(accounts) } });
65
- }
66
- return {
67
- pubkey,
68
- isWritable: !!a.writable,
69
- isSigner: !!a.signer,
70
- };
71
- });
72
- const coder = new BorshInstructionCoder(program_js_1.PRIVACY_POOL_IDL);
73
- const data = coder.encode("transact", toBorshArgs(args));
74
- if (data.length !== computeBudget_js_1.TRANSACT_INSTRUCTION_DATA_BYTES) {
75
- // Not fatal — the size budget assertion downstream is authoritative — but a
76
- // change here means the size arithmetic in computeBudget.ts is stale.
77
- console.warn(`[veilo] transact instruction data is ${data.length} bytes, expected ` +
78
- `${computeBudget_js_1.TRANSACT_INSTRUCTION_DATA_BYTES}. The shield size budget may no longer hold.`);
79
- }
80
- return new web3_js_1.TransactionInstruction({ programId, keys, data });
81
- }
82
- /** Anchor's Borsh coder wants camelCase field names, BNs, and plain arrays. */
83
- function toBorshArgs(args) {
84
- return {
85
- root: Array.from(args.root),
86
- input_tree_id: args.inputTreeId,
87
- output_tree_id: args.outputTreeId,
88
- public_amount: new BN(args.publicAmount.toString()),
89
- ext_data_hash: Array.from(args.extDataHash),
90
- mint_address: args.mintAddress,
91
- input_nullifier_0: Array.from(args.inputNullifiers[0]),
92
- input_nullifier_1: Array.from(args.inputNullifiers[1]),
93
- output_commitment_0: Array.from(args.outputCommitments[0]),
94
- output_commitment_1: Array.from(args.outputCommitments[1]),
95
- deadline: new BN(args.deadline.toString()),
96
- ext_data: {
97
- recipient: args.extData.recipient,
98
- relayer: args.extData.relayer,
99
- fee: new BN(args.extData.fee.toString()),
100
- refund: new BN(args.extData.refund.toString()),
101
- claimant: args.extData.claimant,
102
- },
103
- proof: {
104
- proof_a: args.proof.proofA,
105
- proof_b: args.proof.proofB,
106
- proof_c: args.proof.proofC,
107
- },
108
- note_ciphers: args.noteCiphers
109
- ? {
110
- note0_ephemeral_key: Array.from(args.noteCiphers.note0EphemeralKey),
111
- note0_encrypted: Array.from(args.noteCiphers.note0Encrypted),
112
- note0_view_tag: args.noteCiphers.note0ViewTag,
113
- note1_ephemeral_key: Array.from(args.noteCiphers.note1EphemeralKey),
114
- note1_encrypted: Array.from(args.noteCiphers.note1Encrypted),
115
- note1_view_tag: args.noteCiphers.note1ViewTag,
116
- }
117
- : null,
118
- };
119
- }
@@ -1,36 +0,0 @@
1
- import { PublicKey } from "@solana/web3.js";
2
- import type { ShieldOwner } from "./types.js";
3
- /**
4
- * Resolve a shield recipient into the pair of keys that must belong to the same
5
- * account.
6
- *
7
- * This is the only mechanism that makes the owner invariant safe. A note's
8
- * *spend* authority is a Poseidon field element and its *detection* authority is
9
- * an Ed25519 wallet key; nothing on-chain relates them, and if an integrator
10
- * sources them separately and gets them wrong, the note is spendable but
11
- * permanently invisible — the funds are gone from the owner's view with no error
12
- * raised anywhere in the stack.
13
- *
14
- * `GET /auth/veiloPublicKey` returns both halves in a single response, so
15
- * routing through this function makes the pairing structural rather than a
16
- * convention integrators are asked to remember.
17
- *
18
- * Prefer this over hand-building a {@link ShieldOwner} in all cases.
19
- */
20
- export declare function resolveShieldOwner(target: {
21
- username: string;
22
- } | {
23
- publicKey: string | PublicKey;
24
- }): Promise<ShieldOwner>;
25
- /**
26
- * Build a {@link ShieldOwner} from keys the caller already holds.
27
- *
28
- * Only correct when both keys provably belong to the same account. The explicit
29
- * flag is not ceremony — it is the last checkpoint before a class of bug whose
30
- * only symptom is a user's money quietly disappearing from their balance.
31
- */
32
- export declare function unsafeShieldOwner(params: {
33
- veiloPublicKey: bigint;
34
- noteViewingKey: PublicKey;
35
- acknowledgeOwnerInvariant: true;
36
- }): ShieldOwner;
@@ -1,126 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveShieldOwner = resolveShieldOwner;
4
- exports.unsafeShieldOwner = unsafeShieldOwner;
5
- const web3_js_1 = require("@solana/web3.js");
6
- const relayer_js_1 = require("../relayer.js");
7
- const errors_js_1 = require("./errors.js");
8
- /**
9
- * Owner resolution is a Veilo protocol service, not an integrator-selected
10
- * transport. Keep the production endpoint and public encryption key inside the
11
- * SDK so callers cannot accidentally resolve the two owner keys from different
12
- * relayers.
13
- *
14
- * These values are public network coordinates, not credentials. In particular,
15
- * never put a secret API key here: browser/mobile package contents are always
16
- * inspectable. The two owner endpoints used below are intentionally public and
17
- * return public key material only.
18
- */
19
- const OWNER_RELAYER = new relayer_js_1.VeiloRelayerClient({
20
- apiKey: "",
21
- relayerPublicKey: "utVxnA7zax09qJCZ7UJsa8PAOoWLRcCwOkdxg/ZGmD4=",
22
- });
23
- /**
24
- * Resolve a shield recipient into the pair of keys that must belong to the same
25
- * account.
26
- *
27
- * This is the only mechanism that makes the owner invariant safe. A note's
28
- * *spend* authority is a Poseidon field element and its *detection* authority is
29
- * an Ed25519 wallet key; nothing on-chain relates them, and if an integrator
30
- * sources them separately and gets them wrong, the note is spendable but
31
- * permanently invisible — the funds are gone from the owner's view with no error
32
- * raised anywhere in the stack.
33
- *
34
- * `GET /auth/veiloPublicKey` returns both halves in a single response, so
35
- * routing through this function makes the pairing structural rather than a
36
- * convention integrators are asked to remember.
37
- *
38
- * Prefer this over hand-building a {@link ShieldOwner} in all cases.
39
- */
40
- async function resolveShieldOwner(target) {
41
- const query = "username" in target
42
- ? { username: target.username }
43
- : {
44
- publicKey: typeof target.publicKey === "string"
45
- ? target.publicKey
46
- : target.publicKey.toBase58(),
47
- };
48
- let response;
49
- try {
50
- response = await OWNER_RELAYER.getVeiloPublicKey(query);
51
- }
52
- catch (e) {
53
- // A raw Solana address may not have a Veilo account yet. Provisioning is
54
- // public and idempotent, and returns only the Poseidon spend key; the
55
- // address we were given is the matching note-viewing key.
56
- if ("publicKey" in target &&
57
- (e?.status === 404 || (e instanceof relayer_js_1.VeiloApiError && e.status === 404))) {
58
- const wallet = typeof target.publicKey === "string"
59
- ? new web3_js_1.PublicKey(target.publicKey)
60
- : target.publicKey;
61
- const provisioned = await OWNER_RELAYER.preRegisterKey(wallet.toBase58());
62
- if (!provisioned?.veiloPublicKey) {
63
- throw new errors_js_1.ShieldError("UNKNOWN", "The relayer pre-registered the recipient but returned no Veilo public key.", { context: { publicKey: wallet.toBase58(), response: provisioned }, cause: e });
64
- }
65
- return {
66
- veiloPublicKey: BigInt(provisioned.veiloPublicKey),
67
- noteViewingKey: wallet,
68
- acknowledgeOwnerInvariant: true,
69
- };
70
- }
71
- // A pre-registered account is one someone else created on the recipient's
72
- // behalf; the recipient has never proved ownership, so the relayer refuses
73
- // to resolve it by username. Shielding to them still works, but the caller
74
- // must address them by Solana address instead.
75
- if (e?.body?.preRegistered ||
76
- e?.details?.preRegistered ||
77
- /preregistered/i.test(String(e?.message ?? ""))) {
78
- throw new errors_js_1.ShieldError("UNKNOWN", `"${"username" in target ? target.username : "that account"}" is pre-registered ` +
79
- `and cannot be resolved by username. Resolve it by Solana address instead — ` +
80
- `resolveShieldOwner({ publicKey }).`, { context: { preRegistered: true }, cause: e });
81
- }
82
- throw e;
83
- }
84
- const veiloPublicKeyRaw = response?.veiloPublicKey;
85
- const walletRaw = response?.pubK;
86
- if (!veiloPublicKeyRaw || !walletRaw) {
87
- throw new errors_js_1.ShieldError("UNKNOWN", `The relayer did not return both keys for this recipient ` +
88
- `(veiloPublicKey=${!!veiloPublicKeyRaw}, pubK=${!!walletRaw}). ` +
89
- `Shielding without both would create a note the owner cannot find.`, { context: { response } });
90
- }
91
- const noteViewingKey = new web3_js_1.PublicKey(walletRaw);
92
- if ("publicKey" in target &&
93
- !noteViewingKey.equals(typeof target.publicKey === "string"
94
- ? new web3_js_1.PublicKey(target.publicKey)
95
- : target.publicKey)) {
96
- throw new errors_js_1.ShieldError("UNKNOWN", "The Veilo owner service returned a different wallet than the one requested. " +
97
- "Shielding was stopped to prevent creating a note for the wrong recipient.", {
98
- context: {
99
- requested: typeof target.publicKey === "string"
100
- ? target.publicKey
101
- : target.publicKey.toBase58(),
102
- returned: noteViewingKey.toBase58(),
103
- },
104
- });
105
- }
106
- return {
107
- veiloPublicKey: BigInt(veiloPublicKeyRaw),
108
- noteViewingKey,
109
- // Safe to assert: both halves came from one response about one account.
110
- acknowledgeOwnerInvariant: true,
111
- };
112
- }
113
- /**
114
- * Build a {@link ShieldOwner} from keys the caller already holds.
115
- *
116
- * Only correct when both keys provably belong to the same account. The explicit
117
- * flag is not ceremony — it is the last checkpoint before a class of bug whose
118
- * only symptom is a user's money quietly disappearing from their balance.
119
- */
120
- function unsafeShieldOwner(params) {
121
- return {
122
- veiloPublicKey: params.veiloPublicKey,
123
- noteViewingKey: params.noteViewingKey,
124
- acknowledgeOwnerInvariant: true,
125
- };
126
- }
@@ -1,43 +0,0 @@
1
- import { Connection, PublicKey } from "@solana/web3.js";
2
- import type { DepositTarget, ShieldCachePort, TreeSource } from "./types.js";
3
- /**
4
- * Injection points for the shield path.
5
- *
6
- * The three production deposit implementations (extension, wallet-app,
7
- * veilo-dapp) are ~85% identical and diverge on exactly these axes: where
8
- * proofs come from, where the tree comes from, which lookup table to use, and
9
- * what to cache into. Making each an explicit port is what lets one
10
- * implementation serve all of them — and lets a third-party integrator supply
11
- * their own without forking anything.
12
- *
13
- * Proof generation is deliberately NOT redefined here: `TransactionProofBuilder`
14
- * from `proof.ts` already has the right shape, and a second prover abstraction
15
- * would be exactly the kind of duplication this module exists to avoid.
16
- */
17
- /**
18
- * Read the target tree and root directly from chain.
19
- *
20
- * Note the account decoding: `MerkleTreeAccount::EXPECTED_SIZE` (9107) does not
21
- * match the size its declared fields sum to (8987), a 120-byte discrepancy that
22
- * is unexplained. Until it is, hand-slicing this account at fixed byte offsets
23
- * is unsafe. Anchor's coder reads declared fields from the front and ignores the
24
- * tail, so `.fetch()` stays correct regardless.
25
- */
26
- export declare function onChainTreeSource(connection: Connection, programId?: PublicKey): TreeSource;
27
- /**
28
- * Fixed values, for tests and offline builds.
29
- *
30
- * Also the escape hatch for an integrator who already tracks the tree state and
31
- * does not want the SDK making RPC calls on their behalf.
32
- */
33
- export declare function staticTreeSource(target: DepositTarget): TreeSource;
34
- /**
35
- * In-memory cache with TTL. The default.
36
- *
37
- * Persistent storage is deliberately the caller's problem — `localStorage`,
38
- * `chrome.storage`, and `AsyncStorage` are three different answers in three
39
- * different apps, and none of them belongs in a published SDK.
40
- */
41
- export declare function memoryCache(): ShieldCachePort;
42
- /** A cache that never stores anything. Useful for tests that assert fetch counts. */
43
- export declare function noCache(): ShieldCachePort;
@@ -1,153 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.onChainTreeSource = onChainTreeSource;
4
- exports.staticTreeSource = staticTreeSource;
5
- exports.memoryCache = memoryCache;
6
- exports.noCache = noCache;
7
- const program_js_1 = require("../program.js");
8
- const client_js_1 = require("../client.js");
9
- const config_js_1 = require("../config.js");
10
- const errors_js_1 = require("./errors.js");
11
- /**
12
- * Injection points for the shield path.
13
- *
14
- * The three production deposit implementations (extension, wallet-app,
15
- * veilo-dapp) are ~85% identical and diverge on exactly these axes: where
16
- * proofs come from, where the tree comes from, which lookup table to use, and
17
- * what to cache into. Making each an explicit port is what lets one
18
- * implementation serve all of them — and lets a third-party integrator supply
19
- * their own without forking anything.
20
- *
21
- * Proof generation is deliberately NOT redefined here: `TransactionProofBuilder`
22
- * from `proof.ts` already has the right shape, and a second prover abstraction
23
- * would be exactly the kind of duplication this module exists to avoid.
24
- */
25
- // -- TreeSource ---------------------------------------------------------------
26
- /**
27
- * Read the target tree and root directly from chain.
28
- *
29
- * Note the account decoding: `MerkleTreeAccount::EXPECTED_SIZE` (9107) does not
30
- * match the size its declared fields sum to (8987), a 120-byte discrepancy that
31
- * is unexplained. Until it is, hand-slicing this account at fixed byte offsets
32
- * is unsafe. Anchor's coder reads declared fields from the front and ignores the
33
- * tail, so `.fetch()` stays correct regardless.
34
- */
35
- function onChainTreeSource(connection, programId = program_js_1.PRIVACY_POOL_PROGRAM_ID) {
36
- return {
37
- async getDepositTarget(mint) {
38
- const program = (0, program_js_1.createReadonlyVeiloProgram)(connection);
39
- const { config } = (0, client_js_1.getPoolPdas)(programId, mint);
40
- const cfg = await program.account.privacyConfig.fetch(config);
41
- const numTrees = Number(cfg.numTrees);
42
- if (!Number.isInteger(numTrees) || numTrees <= 0) {
43
- throw new errors_js_1.ShieldError("TREE_FULL", `Pool ${mint.toBase58()} has no deposit tree.`, { context: { mint: mint.toBase58(), numTrees } });
44
- }
45
- // Fetch every tree in one RPC call. The older getBestTreeForDeposit path
46
- // fetched them serially, then fetched the chosen trees a second time.
47
- const treePdas = Array.from({ length: numTrees }, (_, treeId) => (0, client_js_1.getNoteTreePda)(programId, mint, treeId));
48
- const infos = await connection.getMultipleAccountsInfo(treePdas, {
49
- commitment: "confirmed",
50
- });
51
- const capacity = 2 ** config_js_1.MERKLE_TREE_DEPTH;
52
- const trees = infos.map((info, treeId) => {
53
- if (!info)
54
- return null;
55
- // Anchor camel-cases the IDL's `MerkleTreeAccount` name when it builds
56
- // the Borsh account-layout map (the same key exposed as
57
- // `program.account.merkleTreeAccount`).
58
- const decoded = program.coder.accounts.decode("merkleTreeAccount", info.data);
59
- const nextIndex = Number(decoded.nextIndex);
60
- return {
61
- treeId,
62
- decoded,
63
- nextIndex,
64
- remainingCapacity: capacity - nextIndex,
65
- };
66
- });
67
- const inputTree = trees[0];
68
- if (!inputTree) {
69
- throw new errors_js_1.ShieldError("POOL_NOT_FOUND", `Pool ${mint.toBase58()} is missing its input Merkle tree (tree 0).`, { context: { mint: mint.toBase58(), tree: treePdas[0].toBase58() } });
70
- }
71
- const available = trees.filter((tree) => !!tree && tree.nextIndex < capacity);
72
- if (available.length === 0) {
73
- throw new errors_js_1.ShieldError("TREE_FULL", `All ${numTrees} Merkle trees for ${mint.toBase58()} are full.`, { context: { mint: mint.toBase58(), numTrees, capacity } });
74
- }
75
- const minCapacity = Math.floor(capacity * 0.0001);
76
- const preferred = available
77
- .filter((tree) => tree.remainingCapacity >= minCapacity)
78
- .sort((a, b) => a.treeId - b.treeId);
79
- const outputTree = preferred[0] ??
80
- available.sort((a, b) => b.remainingCapacity - a.remainingCapacity)[0];
81
- return {
82
- inputTreeId: 0,
83
- inputRoot: extractRoot(inputTree.decoded),
84
- outputTreeId: outputTree.treeId,
85
- outputNextIndex: outputTree.nextIndex,
86
- };
87
- },
88
- };
89
- }
90
- /**
91
- * Fixed values, for tests and offline builds.
92
- *
93
- * Also the escape hatch for an integrator who already tracks the tree state and
94
- * does not want the SDK making RPC calls on their behalf.
95
- */
96
- function staticTreeSource(target) {
97
- return { async getDepositTarget() { return target; } };
98
- }
99
- /**
100
- * Read the root from a decoded `MerkleTreeAccount`.
101
- *
102
- * Uses `root_history[root_index]` rather than the `root` field. Both are written
103
- * to the same value by `append` (merkle_tree.rs:108-111) so they agree, but the
104
- * history read is what all three production implementations use and is therefore
105
- * the one that is actually exercised against mainnet.
106
- */
107
- function extractRoot(tree) {
108
- const history = tree.rootHistory ?? tree.root_history;
109
- const index = Number(tree.rootIndex ?? tree.root_index ?? 0);
110
- if (Array.isArray(history) && history[index]) {
111
- return new Uint8Array(history[index]);
112
- }
113
- const root = tree.root;
114
- if (root)
115
- return new Uint8Array(root);
116
- throw new Error("could not read a Merkle root from the tree account");
117
- }
118
- // -- Cache --------------------------------------------------------------------
119
- /**
120
- * In-memory cache with TTL. The default.
121
- *
122
- * Persistent storage is deliberately the caller's problem — `localStorage`,
123
- * `chrome.storage`, and `AsyncStorage` are three different answers in three
124
- * different apps, and none of them belongs in a published SDK.
125
- */
126
- function memoryCache() {
127
- const store = new Map();
128
- return {
129
- async get(key) {
130
- const hit = store.get(key);
131
- if (!hit)
132
- return undefined;
133
- if (hit.expiresAt !== 0 && hit.expiresAt < Date.now()) {
134
- store.delete(key);
135
- return undefined;
136
- }
137
- return hit.value;
138
- },
139
- async set(key, value, ttlMs) {
140
- store.set(key, {
141
- value,
142
- expiresAt: ttlMs && ttlMs > 0 ? Date.now() + ttlMs : 0,
143
- });
144
- },
145
- };
146
- }
147
- /** A cache that never stores anything. Useful for tests that assert fetch counts. */
148
- function noCache() {
149
- return {
150
- async get() { return undefined; },
151
- async set() { },
152
- };
153
- }
@@ -1,30 +0,0 @@
1
- import { Connection, PublicKey } from "@solana/web3.js";
2
- import type { PreflightOptions, ShieldCachePort } from "./types.js";
3
- /**
4
- * Checks that run before the prover.
5
- *
6
- * Proving costs 10–30 seconds. Every check here is a single RPC call, and each
7
- * one pre-empts an on-chain failure whose message tells the user nothing they
8
- * can act on. The delegate check is the clearest example: the program requires
9
- * `user_token.delegate.is_none()`, so anyone who ever approved a DEX has a
10
- * permanently broken deposit path that reports only "Invalid token account
11
- * authority" — with no hint that revoking a delegate would fix it.
12
- *
13
- * These are advisory in the sense that the chain enforces them anyway. They are
14
- * not advisory in the sense that skipping them produces a materially worse
15
- * product.
16
- */
17
- export declare function preflightShield(params: {
18
- connection: Connection;
19
- amount: bigint;
20
- mint: PublicKey;
21
- signer: {
22
- publicKey: PublicKey;
23
- tokenAccount: PublicKey;
24
- };
25
- programId?: PublicKey;
26
- options?: PreflightOptions;
27
- cache?: ShieldCachePort;
28
- computeUnitLimit?: number;
29
- computeUnitPriceMicroLamports?: number;
30
- }): Promise<void>;
@@ -1,154 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.preflightShield = preflightShield;
4
- const spl_token_1 = require("@solana/spl-token");
5
- const client_js_1 = require("../client.js");
6
- const program_js_1 = require("../program.js");
7
- const config_js_1 = require("../config.js");
8
- const errors_js_1 = require("./errors.js");
9
- const computeBudget_js_1 = require("./computeBudget.js");
10
- /**
11
- * Checks that run before the prover.
12
- *
13
- * Proving costs 10–30 seconds. Every check here is a single RPC call, and each
14
- * one pre-empts an on-chain failure whose message tells the user nothing they
15
- * can act on. The delegate check is the clearest example: the program requires
16
- * `user_token.delegate.is_none()`, so anyone who ever approved a DEX has a
17
- * permanently broken deposit path that reports only "Invalid token account
18
- * authority" — with no hint that revoking a delegate would fix it.
19
- *
20
- * These are advisory in the sense that the chain enforces them anyway. They are
21
- * not advisory in the sense that skipping them produces a materially worse
22
- * product.
23
- */
24
- async function preflightShield(params) {
25
- const { connection, amount, mint, signer, programId = program_js_1.PRIVACY_POOL_PROGRAM_ID, options = {}, } = params;
26
- const isToken = !mint.equals(config_js_1.NATIVE_SOL_MINT);
27
- // --- Pool state ------------------------------------------------------------
28
- if (!options.skipPoolState) {
29
- const program = (0, program_js_1.createReadonlyVeiloProgram)(connection);
30
- const { config } = (0, client_js_1.getPoolPdas)(programId, mint);
31
- let cfg;
32
- try {
33
- cfg = await program.account.privacyConfig.fetch(config);
34
- }
35
- catch (e) {
36
- throw new errors_js_1.ShieldError("POOL_NOT_FOUND", `No privacy pool exists for mint ${mint.toBase58()}.`, { context: { mint: mint.toBase58(), config: config.toBase58() }, cause: e });
37
- }
38
- if (cfg.paused) {
39
- throw new errors_js_1.ShieldError("POOL_PAUSED", "The pool is paused. Try again later.");
40
- }
41
- const min = BigInt(cfg.minDepositAmount?.toString() ?? "0");
42
- const max = BigInt(cfg.maxDepositAmount?.toString() ?? "0");
43
- if (min > 0n && amount < min) {
44
- throw new errors_js_1.ShieldError("AMOUNT_BELOW_MINIMUM", `Amount ${amount} is below the pool minimum of ${min}.`, { context: { amount: amount.toString(), minimum: min.toString() } });
45
- }
46
- if (max > 0n && amount > max) {
47
- throw new errors_js_1.ShieldError("AMOUNT_ABOVE_MAXIMUM", `Amount ${amount} exceeds the pool maximum of ${max}.`, { context: { amount: amount.toString(), maximum: max.toString() } });
48
- }
49
- }
50
- // --- Source token account (SPL only) --------------------------------------
51
- if (isToken && !options.skipTokenAccount) {
52
- let account;
53
- try {
54
- account = await (0, spl_token_1.getAccount)(connection, signer.tokenAccount);
55
- }
56
- catch (e) {
57
- if (e instanceof spl_token_1.TokenAccountNotFoundError || /could not find/i.test(String(e))) {
58
- // Deliberately no "create the ATA" remedy: an ATA that does not exist
59
- // holds zero tokens, so creating it would only move the failure to
60
- // INSUFFICIENT_TOKEN_BALANCE. Say the true thing instead.
61
- throw new errors_js_1.ShieldError("TOKEN_ACCOUNT_MISSING", `The signer has no token account for ${mint.toBase58()}, so there is nothing to shield.`, { context: { tokenAccount: signer.tokenAccount.toBase58() }, cause: e });
62
- }
63
- throw e;
64
- }
65
- if (!account.mint.equals(mint)) {
66
- throw new errors_js_1.ShieldError("TOKEN_ACCOUNT_WRONG_MINT", `Token account ${signer.tokenAccount.toBase58()} holds ${account.mint.toBase58()}, not ${mint.toBase58()}.`, { context: { expected: mint.toBase58(), actual: account.mint.toBase58() } });
67
- }
68
- if (!account.owner.equals(signer.publicKey)) {
69
- throw new errors_js_1.ShieldError("TOKEN_ACCOUNT_WRONG_OWNER", `Token account ${signer.tokenAccount.toBase58()} is owned by ${account.owner.toBase58()}, ` +
70
- `not by the signing wallet. The program requires the signer to own the source account outright.`, {
71
- context: {
72
- tokenAccount: signer.tokenAccount.toBase58(),
73
- owner: account.owner.toBase58(),
74
- signer: signer.publicKey.toBase58(),
75
- },
76
- });
77
- }
78
- if (account.isFrozen) {
79
- throw new errors_js_1.ShieldError("TOKEN_ACCOUNT_FROZEN", `Token account ${signer.tokenAccount.toBase58()} is frozen.`, { context: { tokenAccount: signer.tokenAccount.toBase58() } });
80
- }
81
- // The program checks `delegate.is_none()`, NOT the delegated amount — so a
82
- // stale delegate with zero allowance still fails. This is the single most
83
- // common avoidable failure on this path, and it is entirely fixable.
84
- if (account.delegate) {
85
- throw new errors_js_1.ShieldError("TOKEN_ACCOUNT_DELEGATED", `Token account ${signer.tokenAccount.toBase58()} has an active delegate ` +
86
- `(${account.delegate.toBase58()}). The pool rejects deposits from delegated ` +
87
- `accounts even when the delegated amount is zero. Revoke the delegate, then shield.`, {
88
- context: {
89
- tokenAccount: signer.tokenAccount.toBase58(),
90
- delegate: account.delegate.toBase58(),
91
- delegatedAmount: account.delegatedAmount.toString(),
92
- },
93
- remedy: {
94
- description: `Revoke the delegate on ${signer.tokenAccount.toBase58()}`,
95
- instructions: [
96
- (0, spl_token_1.createRevokeInstruction)(signer.tokenAccount, signer.publicKey),
97
- ],
98
- },
99
- });
100
- }
101
- if (account.amount < amount) {
102
- throw new errors_js_1.ShieldError("INSUFFICIENT_TOKEN_BALANCE", `Token account holds ${account.amount} but ${amount} is required.`, { context: { balance: account.amount.toString(), required: amount.toString() } });
103
- }
104
- // The vault's ATA must already exist — the program requires the canonical
105
- // one and will not create it.
106
- const { vault } = (0, client_js_1.getPoolPdas)(programId, mint);
107
- const vaultAta = await (0, spl_token_1.getAssociatedTokenAddress)(mint, vault, true);
108
- const vaultInfo = await connection.getAccountInfo(vaultAta);
109
- if (!vaultInfo) {
110
- throw new errors_js_1.ShieldError("VAULT_ATA_MISSING", `The pool vault has no associated token account for ${mint.toBase58()}. ` +
111
- `This is a pool provisioning issue, not something the signer can fix.`, { context: { vault: vault.toBase58(), vaultAta: vaultAta.toBase58() } });
112
- }
113
- }
114
- // --- Signer balance --------------------------------------------------------
115
- if (!options.skipBalance) {
116
- const rentPer = await cachedRent(connection, params.cache);
117
- const rent = BigInt(rentPer) * BigInt(computeBudget_js_1.NULLIFIER_MARKERS_PER_TRANSACT);
118
- const computeUnitLimit = params.computeUnitLimit ?? computeBudget_js_1.SHIELD_COMPUTE_UNIT_LIMIT;
119
- const computeUnitPriceMicroLamports = params.computeUnitPriceMicroLamports ?? computeBudget_js_1.SHIELD_COMPUTE_UNIT_PRICE_MICRO_LAMPORTS;
120
- const priorityFee = (BigInt(computeUnitLimit) * BigInt(computeUnitPriceMicroLamports)) /
121
- 1000000n;
122
- const baseFee = 5000n;
123
- // The signer pays the marker rent regardless of the mint — it is SOL either
124
- // way, and it is burned, not refunded.
125
- const required = rent + priorityFee + baseFee + (isToken ? 0n : amount);
126
- const balance = BigInt(await connection.getBalance(signer.publicKey));
127
- if (balance < required) {
128
- throw new errors_js_1.ShieldError("INSUFFICIENT_SOL", `The signing wallet has ${balance} lamports but needs ${required} ` +
129
- `(${isToken ? "" : `${amount} shielded + `}${rent} nullifier-marker rent + ` +
130
- `${priorityFee + baseFee} fees). Note that the marker rent is burned, not refunded, ` +
131
- `and the program forces it onto the signer — it cannot be sponsored.`, {
132
- context: {
133
- balance: balance.toString(),
134
- required: required.toString(),
135
- breakdown: {
136
- amount: isToken ? "0" : amount.toString(),
137
- nullifierMarkerRent: rent.toString(),
138
- priorityFee: priorityFee.toString(),
139
- baseFee: baseFee.toString(),
140
- },
141
- },
142
- });
143
- }
144
- }
145
- }
146
- async function cachedRent(connection, cache) {
147
- const key = `rent:${computeBudget_js_1.NULLIFIER_MARKER_ACCOUNT_BYTES}`;
148
- const hit = await cache?.get(key);
149
- if (hit !== undefined)
150
- return hit;
151
- const value = await connection.getMinimumBalanceForRentExemption(computeBudget_js_1.NULLIFIER_MARKER_ACCOUNT_BYTES);
152
- await cache?.set(key, value, 60 * 60000);
153
- return value;
154
- }