Architecture

Four layers, verifiable end to end.

Deposit $ZPHS tokens into a fixed-denomination pool, then either withdraw to a fresh address or send a fully shielded transfer to another payment address — commitment, sender and amount stay hidden, only an encrypted memo lands on-chain. Groth16 zk-SNARK proofs verified inside an Anchor program; every withdrawal and transfer is signed by a random relayer so your wallet never appears.

L1Web client

Next.js and React. Derives Sapling-style keys from one wallet signature, generates notes, builds Merkle paths, encrypts memos with X25519+ChaCha20-Poly1305 and produces Groth16 proofs with snarkjs in the browser. Keys never leave the device.

L2Circuits

spend.circom (withdrawal) and transfer.circom (shielded → shielded), Circom 2. Each verifies the Merkle path, derives the nullifier and binds public inputs (recipient, relayer, fee, memoHash) to prevent tampering.

L3Anchor program

Verifies Groth16 proofs on-chain, keeps a 64-deep ring of historical roots per denomination, records nullifiers in PDAs, and executes $ZPHS transfers between vault and recipients.

L4Relayer

Node.js Vercel Functions with a pool of dedicated Solana keypairs selected at random per operation. /api/relay handles unshield, /api/transfer handles shielded sends. Pre-simulates every transaction, rate-limited, fee policy enforced server-side. Users can also opt in to a personal relayer — a browser-owned keypair with zero fee — for full self-custody of the signing key.

BYOR \u2014 The Zephyros BYOR Relayer: This repository hosts the lightweight Zephyros Relayer software. Unlike traditional privacy networks that require syncing a full node for days, Zephyros leverages Solana’s high-performance ledger. Your local relayer connects directly to Solana RPC nodes to submit shielded proofs instantly. Setup takes less than 5 minutes. Zero storage required.