Solana India Fellowship capstone
Sunflower is a privacy protocol on Solana Devnet that lets users shield SOL, hold encrypted balances on-chain, and send privately using Twisted ElGamal ciphertexts and sigma proofs (Fiat–Shamir NIZKs — the same family as Token-2022 confidential transfers).
The repo includes:
- On-chain programs (Anchor): account-based vault + optional UTXO mixer
- Rust prover (
crypto_helper) for local development and Docker deploys - TypeScript prover (
frontend/lib/crypto) for Vercel / serverless deploys - Next.js app: marketing landing, simple wallet UI, and developer console
For a deep technical write-up, see finalreport.md and Architecture.md.
| Program | ID |
|---|---|
privacy_vault |
DNgdrd77NG3z17F5wJJFuGYHKk9dF9HccKKpCQSXos1S |
arcium_bridge |
7Rj21r9ujnVCjHzNXahP3wYPJ8i9zzBcYpanyxGGjrtK |
| Arcium MXE (cluster offset 456) | 7Ab8P5AzcH7F8HhPXPXbGLtXHUwfCUwbcGA9TQWpjr4t |
| Route | Purpose |
|---|---|
/ |
Landing page — protocol overview & cryptography |
/app |
Simple wallet — deposit, private send, withdraw (SOL only) |
/dev |
Developer console — full instruction panel, UTXO mixer, Arcium path |
- Rust 1.79+
- Solana CLI + Anchor 0.31
- Node.js 20+ and Yarn
- Phantom wallet on Devnet
anchor build
anchor testcd frontend
cp .env.example .env.local
yarn install
yarn devOpen http://localhost:3000 → Connect Wallet → /app.
API routes under /api/arcium/* use the TypeScript crypto helper by default (no Rust required for local dev).
Health check:
curl http://localhost:3000/api/arcium/health./scripts/build_crypto_helper.sh
export CRYPTO_USE_RUST=1
export CRYPTO_HELPER_PATH="$(pwd)/frontend/bin/crypto_helper"
cd frontend && yarn dev- Set project root to
frontend - Environment variable:
NEXT_PUBLIC_SOLANA_RPC_URL=https://api.devnet.solana.com - Deploy — TypeScript crypto runs in API routes (see
frontend/vercel.jsonfor function timeout)
From repo root:
docker compose up --buildApp runs at http://localhost:3000 with CRYPTO_HELPER_PATH=/app/bin/crypto_helper.
programs/
privacy_vault/ # Main vault: ElGamal accounts, shield, private transfer, UTXO pool
arcium_bridge/ # Public SPL settlement bridge after off-chain compute
client/
src/bin/crypto_helper.rs # Rust CLI prover (plan-transfer, decrypt-balance, …)
frontend/
app/ # Next.js pages & API routes
components/ # SimpleWallet, landing, dev console
lib/crypto/ # TypeScript port of crypto_helper (@noble/curves)
tests/ # Anchor integration tests
scripts/ # Build helpers, devnet Arcium tests
- Shielded account init, shield,
transfer_private(encrypted amount) - Apply pending balance for incoming private credits
- UTXO pool: deposit_utxo → claim_utxo with Merkle proofs
- Frontend: auto-setup, shielded balance decrypt, recipient invite flow
- Hybrid Arcium path:
plan_transfer_prepon MXE +transfer_private/transfer_private_arcium
See finalreport.md §10–11 for test status and known limitations (e.g. unshield edge cases).
Copy frontend/.env.example → frontend/.env.local.
| Variable | Description |
|---|---|
NEXT_PUBLIC_SOLANA_RPC_URL |
Solana RPC (default: devnet) |
CRYPTO_USE_RUST |
Set to 1 to use Rust crypto_helper instead of TS |
CRYPTO_HELPER_PATH |
Path to prebuilt Rust binary |
NEXT_PUBLIC_ARCIUM_MXE_PROGRAM_ID |
MXE program for hybrid transfers |
NEXT_PUBLIC_ARCIUM_CLUSTER_OFFSET |
Arcium cluster offset (456 on devnet) |
Capstone project — Solana India Fellowship.