@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.
- package/README.md +1296 -272
- package/SHIELD_INTEGRATION.md +143 -0
- package/config.d.ts +2 -0
- package/config.js +4 -0
- package/dist/cjs/client.d.ts +407 -0
- package/dist/cjs/client.js +951 -0
- package/dist/cjs/compactNote.d.ts +107 -0
- package/dist/cjs/compactNote.js +167 -0
- package/dist/cjs/config.d.ts +82 -0
- package/dist/cjs/config.js +57 -0
- package/dist/cjs/events.d.ts +77 -0
- package/dist/cjs/events.js +167 -0
- package/dist/cjs/idl/privacy_pool.d.ts +5 -0
- package/dist/cjs/idl/privacy_pool.js +15218 -0
- package/dist/cjs/idl/privacy_pool.json +10313 -0
- package/dist/cjs/index.d.ts +16 -0
- package/dist/cjs/index.js +67 -0
- package/dist/cjs/merkle.d.ts +77 -0
- package/dist/cjs/merkle.js +156 -0
- package/dist/cjs/poseidon.d.ts +29 -0
- package/dist/cjs/poseidon.js +100 -0
- package/dist/cjs/program.d.ts +37 -0
- package/dist/cjs/program.js +61 -0
- package/dist/cjs/proof.d.ts +183 -0
- package/dist/cjs/proof.js +292 -0
- package/dist/cjs/prover.d.ts +54 -0
- package/dist/cjs/prover.js +112 -0
- package/dist/cjs/random.d.ts +16 -0
- package/dist/cjs/random.js +28 -0
- package/dist/cjs/relayer.d.ts +318 -0
- package/dist/cjs/relayer.js +257 -0
- package/dist/cjs/retry.d.ts +32 -0
- package/dist/cjs/retry.js +75 -0
- package/dist/cjs/shield/alt.d.ts +87 -0
- package/dist/cjs/shield/alt.js +194 -0
- package/dist/cjs/shield/computeBudget.d.ts +61 -0
- package/dist/cjs/shield/computeBudget.js +64 -0
- package/dist/cjs/shield/errors.d.ts +58 -0
- package/dist/cjs/shield/errors.js +121 -0
- package/dist/cjs/shield/finalize.d.ts +45 -0
- package/dist/cjs/shield/finalize.js +119 -0
- package/dist/cjs/shield/index.d.ts +35 -0
- package/dist/cjs/shield/index.js +68 -0
- package/dist/cjs/shield/ix.d.ts +54 -0
- package/dist/cjs/shield/ix.js +119 -0
- package/dist/cjs/shield/owner.d.ts +36 -0
- package/dist/cjs/shield/owner.js +126 -0
- package/dist/cjs/shield/ports.d.ts +43 -0
- package/dist/cjs/shield/ports.js +153 -0
- package/dist/cjs/shield/preflight.d.ts +30 -0
- package/dist/cjs/shield/preflight.js +154 -0
- package/dist/cjs/shield/shield.d.ts +68 -0
- package/dist/cjs/shield/shield.js +499 -0
- package/dist/cjs/shield/types.d.ts +202 -0
- package/dist/cjs/shield/types.js +2 -0
- package/dist/cjs/utxo.d.ts +235 -0
- package/dist/cjs/utxo.js +407 -0
- package/dist/esm/client.d.ts +407 -0
- package/dist/esm/client.js +891 -0
- package/dist/esm/compactNote.d.ts +107 -0
- package/dist/esm/compactNote.js +156 -0
- package/dist/esm/config.d.ts +82 -0
- package/dist/esm/config.js +51 -0
- package/dist/esm/events.d.ts +77 -0
- package/dist/esm/events.js +129 -0
- package/dist/esm/idl/privacy_pool.d.ts +5 -0
- package/dist/esm/idl/privacy_pool.js +15216 -0
- package/dist/esm/idl/privacy_pool.json +10313 -0
- package/dist/esm/index.d.ts +16 -0
- package/dist/esm/index.js +29 -0
- package/dist/esm/merkle.d.ts +77 -0
- package/dist/esm/merkle.js +151 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/poseidon.d.ts +29 -0
- package/dist/esm/poseidon.js +87 -0
- package/dist/esm/program.d.ts +37 -0
- package/dist/esm/program.js +53 -0
- package/dist/esm/proof.d.ts +183 -0
- package/dist/esm/proof.js +281 -0
- package/dist/esm/prover.d.ts +54 -0
- package/dist/esm/prover.js +75 -0
- package/dist/esm/random.d.ts +16 -0
- package/dist/esm/random.js +21 -0
- package/dist/esm/relayer.d.ts +318 -0
- package/dist/esm/relayer.js +249 -0
- package/dist/esm/retry.d.ts +32 -0
- package/dist/esm/retry.js +71 -0
- package/dist/esm/shield/alt.d.ts +87 -0
- package/dist/esm/shield/alt.js +186 -0
- package/dist/esm/shield/computeBudget.d.ts +61 -0
- package/dist/esm/shield/computeBudget.js +61 -0
- package/dist/esm/shield/errors.d.ts +58 -0
- package/dist/esm/shield/errors.js +115 -0
- package/dist/esm/shield/finalize.d.ts +45 -0
- package/dist/esm/shield/finalize.js +83 -0
- package/dist/esm/shield/index.d.ts +35 -0
- package/dist/esm/shield/index.js +32 -0
- package/dist/esm/shield/ix.d.ts +54 -0
- package/dist/esm/shield/ix.js +82 -0
- package/dist/esm/shield/owner.d.ts +36 -0
- package/dist/esm/shield/owner.js +122 -0
- package/dist/esm/shield/ports.d.ts +43 -0
- package/dist/esm/shield/ports.js +147 -0
- package/dist/esm/shield/preflight.d.ts +30 -0
- package/dist/esm/shield/preflight.js +151 -0
- package/dist/esm/shield/shield.d.ts +68 -0
- package/dist/esm/shield/shield.js +492 -0
- package/dist/esm/shield/types.d.ts +202 -0
- package/dist/esm/shield/types.js +1 -0
- package/dist/esm/utxo.d.ts +235 -0
- package/dist/esm/utxo.js +382 -0
- package/dist/src/client.d.ts +407 -0
- package/dist/src/client.js +951 -0
- package/dist/src/compactNote.d.ts +107 -0
- package/dist/src/compactNote.js +167 -0
- package/dist/src/config.d.ts +82 -0
- package/dist/src/config.js +57 -0
- package/dist/src/events.d.ts +77 -0
- package/dist/src/events.js +167 -0
- package/dist/src/idl/privacy_pool.d.ts +5 -0
- package/dist/src/idl/privacy_pool.js +15218 -0
- package/dist/src/index.d.ts +16 -0
- package/dist/src/index.js +67 -0
- package/dist/src/merkle.d.ts +77 -0
- package/dist/src/merkle.js +156 -0
- package/dist/src/poseidon.d.ts +29 -0
- package/dist/src/poseidon.js +100 -0
- package/dist/src/program.d.ts +37 -0
- package/dist/src/program.js +61 -0
- package/dist/src/proof.d.ts +183 -0
- package/dist/src/proof.js +292 -0
- package/dist/src/prover.d.ts +54 -0
- package/dist/src/prover.js +112 -0
- package/dist/src/random.d.ts +16 -0
- package/dist/src/random.js +28 -0
- package/dist/src/relayer.d.ts +318 -0
- package/dist/src/relayer.js +257 -0
- package/dist/src/retry.d.ts +32 -0
- package/dist/src/retry.js +75 -0
- package/dist/src/shield/alt.d.ts +87 -0
- package/dist/src/shield/alt.js +194 -0
- package/dist/src/shield/computeBudget.d.ts +61 -0
- package/dist/src/shield/computeBudget.js +64 -0
- package/dist/src/shield/errors.d.ts +58 -0
- package/dist/src/shield/errors.js +121 -0
- package/dist/src/shield/finalize.d.ts +45 -0
- package/dist/src/shield/finalize.js +119 -0
- package/dist/src/shield/index.d.ts +35 -0
- package/dist/src/shield/index.js +68 -0
- package/dist/src/shield/ix.d.ts +54 -0
- package/dist/src/shield/ix.js +119 -0
- package/dist/src/shield/owner.d.ts +36 -0
- package/dist/src/shield/owner.js +126 -0
- package/dist/src/shield/ports.d.ts +43 -0
- package/dist/src/shield/ports.js +153 -0
- package/dist/src/shield/preflight.d.ts +30 -0
- package/dist/src/shield/preflight.js +154 -0
- package/dist/src/shield/shield.d.ts +68 -0
- package/dist/src/shield/shield.js +499 -0
- package/dist/src/shield/types.d.ts +202 -0
- package/dist/src/shield/types.js +2 -0
- package/dist/src/utxo.d.ts +235 -0
- package/dist/src/utxo.js +407 -0
- package/dist/tests/compact-note.test.d.ts +1 -0
- package/dist/tests/compact-note.test.js +173 -0
- package/dist/tests/config.test.d.ts +1 -0
- package/dist/tests/config.test.js +102 -0
- package/dist/tests/edge-cases.test.d.ts +1 -0
- package/dist/tests/edge-cases.test.js +220 -0
- package/dist/tests/encryption.test.d.ts +1 -0
- package/dist/tests/encryption.test.js +215 -0
- package/dist/tests/events.test.d.ts +1 -0
- package/dist/tests/events.test.js +78 -0
- package/dist/tests/multi-tree.test.d.ts +1 -0
- package/dist/tests/multi-tree.test.js +405 -0
- package/dist/tests/pda.test.d.ts +1 -0
- package/dist/tests/pda.test.js +229 -0
- package/dist/tests/poseidon-builder-parity.test.d.ts +1 -0
- package/dist/tests/poseidon-builder-parity.test.js +72 -0
- package/dist/tests/poseidon.test.d.ts +1 -0
- package/dist/tests/poseidon.test.js +142 -0
- package/dist/tests/proof.test.d.ts +1 -0
- package/dist/tests/proof.test.js +296 -0
- package/dist/tests/relayer.test.d.ts +1 -0
- package/dist/tests/relayer.test.js +271 -0
- package/dist/tests/sdk.integration.test.d.ts +1 -0
- package/dist/tests/sdk.integration.test.js +330 -0
- package/dist/tests/shield-owner.test.d.ts +1 -0
- package/dist/tests/shield-owner.test.js +89 -0
- package/dist/tests/shield-preflight.test.d.ts +1 -0
- package/dist/tests/shield-preflight.test.js +87 -0
- package/dist/tests/shield-realproof.test.d.ts +1 -0
- package/dist/tests/shield-realproof.test.js +272 -0
- package/dist/tests/shield.test.d.ts +1 -0
- package/dist/tests/shield.test.js +403 -0
- package/dist/tests/utxo.test.d.ts +1 -0
- package/dist/tests/utxo.test.js +140 -0
- package/package.json +105 -11
- package/poseidon.d.ts +2 -0
- package/poseidon.js +4 -0
- package/proof.d.ts +2 -0
- package/proof.js +4 -0
- package/prover.d.ts +2 -0
- package/prover.js +4 -0
- package/shield.d.ts +2 -0
- package/shield.js +4 -0
- package/src/client.ts +0 -352
- package/src/config.ts +0 -13
- package/src/index.ts +0 -6
- package/src/merkle.ts +0 -178
- package/src/note.ts +0 -193
- package/src/poseidon.ts +0 -62
- package/src/proof.ts +0 -170
- package/test/script.js +0 -0
- package/test-tsconfig.json +0 -19
- package/tests/note.test.ts +0 -50
- package/tests/sdk.integration.test.ts +0 -210
- 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
|
-
}
|