@veilo/sdk-core 0.1.17 → 0.4.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 (218) hide show
  1. package/README.md +1296 -272
  2. package/SHIELD_INTEGRATION.md +143 -0
  3. package/config.d.ts +2 -0
  4. package/config.js +4 -0
  5. package/dist/cjs/client.d.ts +407 -0
  6. package/dist/cjs/client.js +951 -0
  7. package/dist/cjs/compactNote.d.ts +107 -0
  8. package/dist/cjs/compactNote.js +167 -0
  9. package/dist/cjs/config.d.ts +82 -0
  10. package/dist/cjs/config.js +57 -0
  11. package/dist/cjs/events.d.ts +77 -0
  12. package/dist/cjs/events.js +167 -0
  13. package/dist/cjs/idl/privacy_pool.d.ts +5 -0
  14. package/dist/cjs/idl/privacy_pool.js +15218 -0
  15. package/dist/cjs/idl/privacy_pool.json +10313 -0
  16. package/dist/cjs/index.d.ts +16 -0
  17. package/dist/cjs/index.js +67 -0
  18. package/dist/cjs/merkle.d.ts +77 -0
  19. package/dist/cjs/merkle.js +156 -0
  20. package/dist/cjs/poseidon.d.ts +29 -0
  21. package/dist/cjs/poseidon.js +100 -0
  22. package/dist/cjs/program.d.ts +37 -0
  23. package/dist/cjs/program.js +61 -0
  24. package/dist/cjs/proof.d.ts +183 -0
  25. package/dist/cjs/proof.js +292 -0
  26. package/dist/cjs/prover.d.ts +54 -0
  27. package/dist/cjs/prover.js +112 -0
  28. package/dist/cjs/random.d.ts +16 -0
  29. package/dist/cjs/random.js +28 -0
  30. package/dist/cjs/relayer.d.ts +318 -0
  31. package/dist/cjs/relayer.js +257 -0
  32. package/dist/cjs/retry.d.ts +32 -0
  33. package/dist/cjs/retry.js +75 -0
  34. package/dist/cjs/shield/alt.d.ts +87 -0
  35. package/dist/cjs/shield/alt.js +194 -0
  36. package/dist/cjs/shield/computeBudget.d.ts +61 -0
  37. package/dist/cjs/shield/computeBudget.js +64 -0
  38. package/dist/cjs/shield/errors.d.ts +58 -0
  39. package/dist/cjs/shield/errors.js +121 -0
  40. package/dist/cjs/shield/finalize.d.ts +45 -0
  41. package/dist/cjs/shield/finalize.js +119 -0
  42. package/dist/cjs/shield/index.d.ts +35 -0
  43. package/dist/cjs/shield/index.js +68 -0
  44. package/dist/cjs/shield/ix.d.ts +54 -0
  45. package/dist/cjs/shield/ix.js +119 -0
  46. package/dist/cjs/shield/owner.d.ts +36 -0
  47. package/dist/cjs/shield/owner.js +126 -0
  48. package/dist/cjs/shield/ports.d.ts +43 -0
  49. package/dist/cjs/shield/ports.js +153 -0
  50. package/dist/cjs/shield/preflight.d.ts +30 -0
  51. package/dist/cjs/shield/preflight.js +154 -0
  52. package/dist/cjs/shield/shield.d.ts +68 -0
  53. package/dist/cjs/shield/shield.js +499 -0
  54. package/dist/cjs/shield/types.d.ts +202 -0
  55. package/dist/cjs/shield/types.js +2 -0
  56. package/dist/cjs/utxo.d.ts +235 -0
  57. package/dist/cjs/utxo.js +407 -0
  58. package/dist/esm/client.d.ts +407 -0
  59. package/dist/esm/client.js +891 -0
  60. package/dist/esm/compactNote.d.ts +107 -0
  61. package/dist/esm/compactNote.js +156 -0
  62. package/dist/esm/config.d.ts +82 -0
  63. package/dist/esm/config.js +51 -0
  64. package/dist/esm/events.d.ts +77 -0
  65. package/dist/esm/events.js +129 -0
  66. package/dist/esm/idl/privacy_pool.d.ts +5 -0
  67. package/dist/esm/idl/privacy_pool.js +15216 -0
  68. package/dist/esm/idl/privacy_pool.json +10313 -0
  69. package/dist/esm/index.d.ts +16 -0
  70. package/dist/esm/index.js +29 -0
  71. package/dist/esm/merkle.d.ts +77 -0
  72. package/dist/esm/merkle.js +151 -0
  73. package/dist/esm/package.json +1 -0
  74. package/dist/esm/poseidon.d.ts +29 -0
  75. package/dist/esm/poseidon.js +87 -0
  76. package/dist/esm/program.d.ts +37 -0
  77. package/dist/esm/program.js +53 -0
  78. package/dist/esm/proof.d.ts +183 -0
  79. package/dist/esm/proof.js +281 -0
  80. package/dist/esm/prover.d.ts +54 -0
  81. package/dist/esm/prover.js +75 -0
  82. package/dist/esm/random.d.ts +16 -0
  83. package/dist/esm/random.js +21 -0
  84. package/dist/esm/relayer.d.ts +318 -0
  85. package/dist/esm/relayer.js +249 -0
  86. package/dist/esm/retry.d.ts +32 -0
  87. package/dist/esm/retry.js +71 -0
  88. package/dist/esm/shield/alt.d.ts +87 -0
  89. package/dist/esm/shield/alt.js +186 -0
  90. package/dist/esm/shield/computeBudget.d.ts +61 -0
  91. package/dist/esm/shield/computeBudget.js +61 -0
  92. package/dist/esm/shield/errors.d.ts +58 -0
  93. package/dist/esm/shield/errors.js +115 -0
  94. package/dist/esm/shield/finalize.d.ts +45 -0
  95. package/dist/esm/shield/finalize.js +83 -0
  96. package/dist/esm/shield/index.d.ts +35 -0
  97. package/dist/esm/shield/index.js +32 -0
  98. package/dist/esm/shield/ix.d.ts +54 -0
  99. package/dist/esm/shield/ix.js +82 -0
  100. package/dist/esm/shield/owner.d.ts +36 -0
  101. package/dist/esm/shield/owner.js +122 -0
  102. package/dist/esm/shield/ports.d.ts +43 -0
  103. package/dist/esm/shield/ports.js +147 -0
  104. package/dist/esm/shield/preflight.d.ts +30 -0
  105. package/dist/esm/shield/preflight.js +151 -0
  106. package/dist/esm/shield/shield.d.ts +68 -0
  107. package/dist/esm/shield/shield.js +492 -0
  108. package/dist/esm/shield/types.d.ts +202 -0
  109. package/dist/esm/shield/types.js +1 -0
  110. package/dist/esm/utxo.d.ts +235 -0
  111. package/dist/esm/utxo.js +382 -0
  112. package/dist/src/client.d.ts +407 -0
  113. package/dist/src/client.js +951 -0
  114. package/dist/src/compactNote.d.ts +107 -0
  115. package/dist/src/compactNote.js +167 -0
  116. package/dist/src/config.d.ts +82 -0
  117. package/dist/src/config.js +57 -0
  118. package/dist/src/events.d.ts +77 -0
  119. package/dist/src/events.js +167 -0
  120. package/dist/src/idl/privacy_pool.d.ts +5 -0
  121. package/dist/src/idl/privacy_pool.js +15218 -0
  122. package/dist/src/index.d.ts +16 -0
  123. package/dist/src/index.js +67 -0
  124. package/dist/src/merkle.d.ts +77 -0
  125. package/dist/src/merkle.js +156 -0
  126. package/dist/src/poseidon.d.ts +29 -0
  127. package/dist/src/poseidon.js +100 -0
  128. package/dist/src/program.d.ts +37 -0
  129. package/dist/src/program.js +61 -0
  130. package/dist/src/proof.d.ts +183 -0
  131. package/dist/src/proof.js +292 -0
  132. package/dist/src/prover.d.ts +54 -0
  133. package/dist/src/prover.js +112 -0
  134. package/dist/src/random.d.ts +16 -0
  135. package/dist/src/random.js +28 -0
  136. package/dist/src/relayer.d.ts +318 -0
  137. package/dist/src/relayer.js +257 -0
  138. package/dist/src/retry.d.ts +32 -0
  139. package/dist/src/retry.js +75 -0
  140. package/dist/src/shield/alt.d.ts +87 -0
  141. package/dist/src/shield/alt.js +194 -0
  142. package/dist/src/shield/computeBudget.d.ts +61 -0
  143. package/dist/src/shield/computeBudget.js +64 -0
  144. package/dist/src/shield/errors.d.ts +58 -0
  145. package/dist/src/shield/errors.js +121 -0
  146. package/dist/src/shield/finalize.d.ts +45 -0
  147. package/dist/src/shield/finalize.js +119 -0
  148. package/dist/src/shield/index.d.ts +35 -0
  149. package/dist/src/shield/index.js +68 -0
  150. package/dist/src/shield/ix.d.ts +54 -0
  151. package/dist/src/shield/ix.js +119 -0
  152. package/dist/src/shield/owner.d.ts +36 -0
  153. package/dist/src/shield/owner.js +126 -0
  154. package/dist/src/shield/ports.d.ts +43 -0
  155. package/dist/src/shield/ports.js +153 -0
  156. package/dist/src/shield/preflight.d.ts +30 -0
  157. package/dist/src/shield/preflight.js +154 -0
  158. package/dist/src/shield/shield.d.ts +68 -0
  159. package/dist/src/shield/shield.js +499 -0
  160. package/dist/src/shield/types.d.ts +202 -0
  161. package/dist/src/shield/types.js +2 -0
  162. package/dist/src/utxo.d.ts +235 -0
  163. package/dist/src/utxo.js +407 -0
  164. package/dist/tests/compact-note.test.d.ts +1 -0
  165. package/dist/tests/compact-note.test.js +173 -0
  166. package/dist/tests/config.test.d.ts +1 -0
  167. package/dist/tests/config.test.js +102 -0
  168. package/dist/tests/edge-cases.test.d.ts +1 -0
  169. package/dist/tests/edge-cases.test.js +220 -0
  170. package/dist/tests/encryption.test.d.ts +1 -0
  171. package/dist/tests/encryption.test.js +215 -0
  172. package/dist/tests/events.test.d.ts +1 -0
  173. package/dist/tests/events.test.js +78 -0
  174. package/dist/tests/multi-tree.test.d.ts +1 -0
  175. package/dist/tests/multi-tree.test.js +405 -0
  176. package/dist/tests/pda.test.d.ts +1 -0
  177. package/dist/tests/pda.test.js +229 -0
  178. package/dist/tests/poseidon-builder-parity.test.d.ts +1 -0
  179. package/dist/tests/poseidon-builder-parity.test.js +72 -0
  180. package/dist/tests/poseidon.test.d.ts +1 -0
  181. package/dist/tests/poseidon.test.js +142 -0
  182. package/dist/tests/proof.test.d.ts +1 -0
  183. package/dist/tests/proof.test.js +296 -0
  184. package/dist/tests/relayer.test.d.ts +1 -0
  185. package/dist/tests/relayer.test.js +271 -0
  186. package/dist/tests/sdk.integration.test.d.ts +1 -0
  187. package/dist/tests/sdk.integration.test.js +330 -0
  188. package/dist/tests/shield-owner.test.d.ts +1 -0
  189. package/dist/tests/shield-owner.test.js +89 -0
  190. package/dist/tests/shield-preflight.test.d.ts +1 -0
  191. package/dist/tests/shield-preflight.test.js +87 -0
  192. package/dist/tests/shield-realproof.test.d.ts +1 -0
  193. package/dist/tests/shield-realproof.test.js +272 -0
  194. package/dist/tests/shield.test.d.ts +1 -0
  195. package/dist/tests/shield.test.js +403 -0
  196. package/dist/tests/utxo.test.d.ts +1 -0
  197. package/dist/tests/utxo.test.js +140 -0
  198. package/package.json +105 -11
  199. package/poseidon.d.ts +2 -0
  200. package/poseidon.js +4 -0
  201. package/proof.d.ts +2 -0
  202. package/proof.js +4 -0
  203. package/prover.d.ts +2 -0
  204. package/prover.js +4 -0
  205. package/shield.d.ts +2 -0
  206. package/shield.js +4 -0
  207. package/src/client.ts +0 -352
  208. package/src/config.ts +0 -13
  209. package/src/index.ts +0 -6
  210. package/src/merkle.ts +0 -178
  211. package/src/note.ts +0 -193
  212. package/src/poseidon.ts +0 -62
  213. package/src/proof.ts +0 -170
  214. package/test/script.js +0 -0
  215. package/test-tsconfig.json +0 -19
  216. package/tests/note.test.ts +0 -50
  217. package/tests/sdk.integration.test.ts +0 -210
  218. package/tsconfig.json +0 -18
@@ -1,210 +0,0 @@
1
- import "mocha";
2
- import { strict as assert } from "assert";
3
- import * as anchor from "@coral-xyz/anchor";
4
- import type { Idl, Program } from "@coral-xyz/anchor";
5
- import {
6
- Keypair,
7
- LAMPORTS_PER_SOL,
8
- PublicKey,
9
- } from "@solana/web3.js";
10
- import fs from "fs";
11
- import os from "os";
12
- import path from "path";
13
-
14
- import {
15
- initializePool,
16
- addRelayer,
17
- getPoolPdas,
18
- createNoteAndDeposit,
19
- withdrawViaRelayer,
20
- sol,
21
- } from "../src";
22
-
23
- // ---- IDL + Provider helpers ----
24
-
25
- function loadIdl(): Idl {
26
- // NOTE: this path is relative to dist/tests at runtime
27
- const idlPath = path.join(
28
- __dirname,
29
- "../../../privacy-pool/target/idl/privacy_pool.json"
30
- );
31
- const raw = fs.readFileSync(idlPath, "utf8");
32
- return JSON.parse(raw);
33
- }
34
-
35
- function makeProvider(): anchor.AnchorProvider {
36
- const url = process.env.ANCHOR_PROVIDER_URL ?? "http://127.0.0.1:8899";
37
- const connection = new anchor.web3.Connection(url, "confirmed");
38
-
39
- const keypairPath =
40
- process.env.ANCHOR_WALLET ??
41
- path.join(os.homedir(), ".config", "solana", "id.json");
42
-
43
- const secret = JSON.parse(fs.readFileSync(keypairPath, "utf8"));
44
- const kp = Keypair.fromSecretKey(Uint8Array.from(secret));
45
- const wallet = new anchor.Wallet(kp);
46
-
47
- return new anchor.AnchorProvider(connection, wallet, {
48
- commitment: "confirmed",
49
- preflightCommitment: "confirmed",
50
- });
51
- }
52
-
53
- describe("privacy-pool SDK integration (Merkle v3, rolling root)", () => {
54
- const provider = makeProvider();
55
- anchor.setProvider(provider);
56
-
57
- const idl = loadIdl();
58
- const program = new anchor.Program(idl as Idl, provider) as Program<any>;
59
- const wallet = provider.wallet as anchor.Wallet;
60
-
61
- const connection = provider.connection;
62
-
63
- // This MUST match what initializePool uses below.
64
- const DENOM_INDEX = 0;
65
- const DENOMS_LAMPORTS = [sol(1), sol(5)]; // 1 SOL, 5 SOL
66
- const FEE_BPS = 50; // 0.5%
67
-
68
- async function airdropAndConfirm(pubkey: PublicKey, lamports: number) {
69
- const sig = await connection.requestAirdrop(pubkey, lamports);
70
- await connection.confirmTransaction(sig, "confirmed");
71
- }
72
-
73
- it("initialize + deposit + withdraw via SDK", async () => {
74
- const { config, vault, noteTree, nullifiers } = getPoolPdas(
75
- program.programId
76
- );
77
-
78
- // 1) Make sure admin has SOL
79
- await airdropAndConfirm(wallet.publicKey, 5 * LAMPORTS_PER_SOL);
80
-
81
- // 2) Initialize pool if needed (idempotent-ish for localnet dev)
82
- const existingConfig = await connection.getAccountInfo(config);
83
- if (!existingConfig) {
84
- await initializePool({
85
- program,
86
- admin: wallet,
87
- denomsLamports: DENOMS_LAMPORTS,
88
- feeBps: FEE_BPS,
89
- });
90
- } else {
91
- console.log(
92
- "Initialize skipped: config already exists on this cluster, continuing."
93
- );
94
- }
95
-
96
- // Ground truth amounts come from what we passed into initializePool
97
- const amountLamports = BigInt(DENOMS_LAMPORTS[DENOM_INDEX].toString());
98
- const fee = (amountLamports * BigInt(FEE_BPS)) / 10_000n;
99
- const toUser = amountLamports - fee;
100
-
101
- // 3) Deposit one note via SDK helper
102
- await createNoteAndDeposit({
103
- program,
104
- depositor: wallet,
105
- denomIndex: DENOM_INDEX,
106
- valueLamports: amountLamports,
107
- });
108
-
109
- // 4) Prepare relayer + recipient
110
- const relayer = Keypair.generate();
111
- const recipient = Keypair.generate();
112
-
113
- await airdropAndConfirm(relayer.publicKey, 2 * LAMPORTS_PER_SOL);
114
- await airdropAndConfirm(recipient.publicKey, 0.2 * LAMPORTS_PER_SOL);
115
-
116
- // Admin adds relayer
117
- await addRelayer({
118
- program,
119
- admin: wallet,
120
- newRelayer: relayer.publicKey,
121
- });
122
-
123
- // 5) Fetch current Merkle root from NoteTree account.
124
- const noteTreeAcc: any = await (program.account as any).noteTree.fetch(
125
- noteTree
126
- );
127
-
128
- // Support all known shapes:
129
- // - rolling history: { currentRootIndex, roots: number[][] }
130
- // - single root (previous layout): { lastRoot: number[] }
131
- // - current layout: { currentRoot: number[] }
132
- let rootBytes: Uint8Array;
133
-
134
- if (
135
- noteTreeAcc &&
136
- typeof noteTreeAcc.currentRootIndex !== "undefined" &&
137
- typeof noteTreeAcc.roots !== "undefined"
138
- ) {
139
- const idx: number = Number(noteTreeAcc.currentRootIndex);
140
- const rootsArr: number[][] = noteTreeAcc.roots;
141
- const rootArray: number[] = rootsArr[idx];
142
- if (!rootArray) {
143
- console.error("NoteTree account shape (roots):", noteTreeAcc);
144
- throw new Error("NoteTree.roots[currentRootIndex] is undefined");
145
- }
146
- rootBytes = new Uint8Array(rootArray);
147
- } else if (
148
- noteTreeAcc &&
149
- typeof noteTreeAcc.lastRoot !== "undefined"
150
- ) {
151
- const rootArray: number[] = noteTreeAcc.lastRoot;
152
- rootBytes = new Uint8Array(rootArray);
153
- } else if (
154
- noteTreeAcc &&
155
- typeof noteTreeAcc.currentRoot !== "undefined"
156
- ) {
157
- const rootArray: number[] = noteTreeAcc.currentRoot;
158
- rootBytes = new Uint8Array(rootArray);
159
- } else {
160
- console.error("NoteTree account shape (unknown):", noteTreeAcc);
161
- throw new Error("Unknown NoteTree layout in IDL / account");
162
- }
163
-
164
- const nullifier = new Uint8Array(32).fill(3); // demo nullifier
165
-
166
- const beforeVault = BigInt(await connection.getBalance(vault));
167
- const beforeRelayer = BigInt(
168
- await connection.getBalance(relayer.publicKey)
169
- );
170
- const beforeRecipient = BigInt(
171
- await connection.getBalance(recipient.publicKey)
172
- );
173
-
174
- // 6) Withdraw via SDK
175
- await withdrawViaRelayer({
176
- program,
177
- relayer,
178
- recipient: recipient.publicKey,
179
- denomIndex: DENOM_INDEX,
180
- root: rootBytes,
181
- nullifier,
182
- });
183
-
184
- const afterVault = BigInt(await connection.getBalance(vault));
185
- const afterRelayer = BigInt(
186
- await connection.getBalance(relayer.publicKey)
187
- );
188
- const afterRecipient = BigInt(
189
- await connection.getBalance(recipient.publicKey)
190
- );
191
-
192
- const vaultDelta = beforeVault - afterVault;
193
- const relayerDelta = afterRelayer - beforeRelayer;
194
- const recipientDelta = afterRecipient - beforeRecipient;
195
-
196
- // 7) Assertions
197
- assert(
198
- vaultDelta === amountLamports,
199
- `Vault did not decrease by amount: got ${vaultDelta.toString()} expected ${amountLamports.toString()}`
200
- );
201
- assert(
202
- relayerDelta === fee,
203
- `Relayer did not receive correct fee: got ${relayerDelta.toString()} expected ${fee.toString()}`
204
- );
205
- assert(
206
- recipientDelta === toUser,
207
- `Recipient did not receive correct amount: got ${recipientDelta.toString()} expected ${toUser.toString()}`
208
- );
209
- });
210
- });
package/tsconfig.json DELETED
@@ -1,18 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2020",
4
- "module": "commonjs",
5
- "moduleResolution": "node",
6
- "declaration": true,
7
- "outDir": "dist",
8
- "rootDir": "./src",
9
- "strict": true,
10
- "esModuleInterop": true,
11
- "skipLibCheck": true,
12
- "forceConsistentCasingInFileNames": true,
13
- "resolveJsonModule": true // 👈 add this
14
- },
15
- "include": [
16
- "src/**/*.ts"
17
- ]
18
- }