Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion circuits/one/client/verify.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
printTransactionResult,
handleVerifyError,
} from "@solana-noir-examples/lib/verify";
import { getAddressFromKeypairFile } from "@solana-noir-examples/lib/keypair";

const RPC_URL = process.env.RPC_URL || "https://api.devnet.solana.com";

Expand All @@ -20,7 +21,8 @@ const WS_URL =
// NOTE: This is a devnet example program ID. For production, deploy your own
// verifier via `sunspot deploy` and set PROGRAM_ID environment variable.
const PROGRAM_ID =
process.env.PROGRAM_ID || "FgcE5gSBCgcS1aDympdw5RgQLt9RBMberPqsj4JZxdeL";
process.env.PROGRAM_ID ||
(await getAddressFromKeypairFile("../target/one-keypair.json"));

const circuitConfig: CircuitConfig = {
circuitDir: path.join(process.cwd(), ".."),
Expand Down
7 changes: 5 additions & 2 deletions circuits/smt_exclusion/client/test-transfer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ import {
fieldToHex,
initPoseidon,
} from "./smt.js";
import { getAddressFromKeypairFile } from "@solana-noir-examples/lib/keypair";

// ============================================================================
// Configuration
Expand All @@ -66,12 +67,14 @@ const WS_URL =

const ZK_VERIFIER_PROGRAM_ID = address(
process.env.ZK_VERIFIER_PROGRAM_ID ||
"548u4SFWZMaRWZQqdyAgm66z7VRYtNHHF2sr7JTBXbwN"
(await getAddressFromKeypairFile("../target/smt_exclusion-keypair.json"))
);

const EXCLUSION_PROGRAM_ID = address(
process.env.EXCLUSION_PROGRAM_ID ||
"4WvvKAwJ2hYRqaceZyyS3s51V68LbfGsXWut7gsGnqaZ"
(await getAddressFromKeypairFile(
"../on_chain_program/target/deploy/exclusion_program_example-keypair.json"
))
);

const circuitConfig: CircuitConfig = {
Expand Down
4 changes: 3 additions & 1 deletion circuits/smt_exclusion/client/verify.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
printTransactionResult,
handleVerifyError,
} from "@solana-noir-examples/lib/verify";
import { getAddressFromKeypairFile } from "@solana-noir-examples/lib/keypair";

const RPC_URL = process.env.RPC_URL || "https://api.devnet.solana.com";

Expand All @@ -29,7 +30,8 @@ const WS_URL =
// NOTE: This is a devnet example program ID. For production, deploy your own
// verifier via `sunspot deploy` and set PROGRAM_ID environment variable.
const PROGRAM_ID =
process.env.PROGRAM_ID || "548u4SFWZMaRWZQqdyAgm66z7VRYtNHHF2sr7JTBXbwN";
process.env.PROGRAM_ID ||
(await getAddressFromKeypairFile("../target/smt_exclusion-keypair.json"));

const circuitConfig: CircuitConfig = {
circuitDir: path.join(process.cwd(), ".."),
Expand Down
4 changes: 3 additions & 1 deletion circuits/verify_signer/client/verify.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
printTransactionResult,
handleVerifyError,
} from "@solana-noir-examples/lib/verify";
import { getAddressFromKeypairFile } from "@solana-noir-examples/lib/keypair";

const RPC_URL = process.env.RPC_URL || "https://api.devnet.solana.com";

Expand All @@ -24,7 +25,8 @@ const WS_URL =
// NOTE: This is a devnet example program ID. For production, deploy your own
// verifier via `sunspot deploy` and set PROGRAM_ID environment variable.
const PROGRAM_ID =
process.env.PROGRAM_ID || "7uatSejNcJvmp8G19F6F54uyzLkkMYnEgD58pFTTuW1A";
process.env.PROGRAM_ID ||
(await getAddressFromKeypairFile("../target/verify_signer-keypair.json"));

const circuitConfig: CircuitConfig = {
circuitDir: path.join(process.cwd(), ".."),
Expand Down
8 changes: 4 additions & 4 deletions justfile
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,8 @@ prove-signer: execute-signer
cd circuits/verify_signer && sunspot prove target/verify_signer.json target/verify_signer.gz target/verify_signer.ccs target/verify_signer.pk

# Verify proof on-chain (requires deployed verifier program)
verify-signer program_id="7uatSejNcJvmp8G19F6F54uyzLkkMYnEgD58pFTTuW1A":
cd circuits/verify_signer/client && pnpm run verify -- --program {{program_id}}
verify-signer:
cd circuits/verify_signer/client && pnpm run verify
git checkout circuits/verify_signer/Prover.toml 2>/dev/null || true

# Full Sunspot setup (regenerates keys - only needed if circuit changes)
Expand Down Expand Up @@ -142,8 +142,8 @@ prove-smt: execute-smt
cd circuits/smt_exclusion && sunspot prove target/smt_exclusion.json target/smt_exclusion.gz target/smt_exclusion.ccs target/smt_exclusion.pk

# Verify proof on-chain (requires deployed verifier program)
verify-smt program_id="548u4SFWZMaRWZQqdyAgm66z7VRYtNHHF2sr7JTBXbwN":
cd circuits/smt_exclusion/client && pnpm run verify -- --program {{program_id}}
verify-smt:
cd circuits/smt_exclusion/client && pnpm run verify
git checkout circuits/smt_exclusion/Prover.toml 2>/dev/null || true

# Integration test: verify proof + SOL transfer (requires deployed programs)
Expand Down
21 changes: 21 additions & 0 deletions lib/keypair.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { createKeyPairSignerFromBytes, type KeyPairSigner } from "@solana/kit";
import fs from "fs";
import path from "path";

async function loadKeypairFromFile(
filePath: string
): Promise<KeyPairSigner<string>> {
const resolvedPath = path.resolve(filePath);
const loadedKeyBytes = Uint8Array.from(
JSON.parse(fs.readFileSync(resolvedPath, "utf8"))
);

return await createKeyPairSignerFromBytes(loadedKeyBytes);
}

export async function getAddressFromKeypairFile(
filePath: string
): Promise<string> {
const keypairSigner = await loadKeypairFromFile(filePath);
return keypairSigner.address;
}
3 changes: 2 additions & 1 deletion lib/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"type": "module",
"exports": {
"./proof": "./proof.js",
"./verify": "./verify.js"
"./verify": "./verify.js",
"./keypair": "./keypair.js"
},
"scripts": {
"build": "tsc"
Expand Down