Skip to content

Trymbakmahant/sunflower

Repository files navigation

Sunflower — Privacy Vault on Solana

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 IDs (Devnet)

Program ID
privacy_vault DNgdrd77NG3z17F5wJJFuGYHKk9dF9HccKKpCQSXos1S
arcium_bridge 7Rj21r9ujnVCjHzNXahP3wYPJ8i9zzBcYpanyxGGjrtK
Arcium MXE (cluster offset 456) 7Ab8P5AzcH7F8HhPXPXbGLtXHUwfCUwbcGA9TQWpjr4t

Frontend routes

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

Quick start (local)

Prerequisites

1. Build & test on-chain programs

anchor build
anchor test

2. Run the frontend

cd frontend
cp .env.example .env.local
yarn install
yarn dev

Open http://localhost:3000Connect 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

3. Optional — use Rust prover instead

./scripts/build_crypto_helper.sh
export CRYPTO_USE_RUST=1
export CRYPTO_HELPER_PATH="$(pwd)/frontend/bin/crypto_helper"
cd frontend && yarn dev

Deploy

Vercel (recommended for demo UI)

  1. Set project root to frontend
  2. Environment variable: NEXT_PUBLIC_SOLANA_RPC_URL=https://api.devnet.solana.com
  3. Deploy — TypeScript crypto runs in API routes (see frontend/vercel.json for function timeout)

Docker (full stack with Rust binary)

From repo root:

docker compose up --build

App runs at http://localhost:3000 with CRYPTO_HELPER_PATH=/app/bin/crypto_helper.


Repository layout

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

What works today

  • Shielded account init, shield, transfer_private (encrypted amount)
  • Apply pending balance for incoming private credits
  • UTXO pool: deposit_utxoclaim_utxo with Merkle proofs
  • Frontend: auto-setup, shielded balance decrypt, recipient invite flow
  • Hybrid Arcium path: plan_transfer_prep on MXE + transfer_private / transfer_private_arcium

See finalreport.md §10–11 for test status and known limitations (e.g. unshield edge cases).


Environment variables

Copy frontend/.env.examplefrontend/.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)

License

Capstone project — Solana India Fellowship.

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors