DARX - ZK Dark Pool
Private Trading, Powered by Zero-Knowledge Proofs. Trade any token in size with zero price impact with crypto's first decentralized crossing network. Live today on Arbitrum Ecosystem.
Videos
Description
DARX — ZK Dark Pool
Private trading powered by zero-knowledge proofs.
Trade at midpoint prices with encrypted order data. Orders are matched off-chain and settled on-chain via a Groth16 ZK proof; only you and the relayer see your order details (relayer privacy).
Pitch Deck: https://www.figma.com/deck/qRseTVpXI21ktYUdjy1p0E/Darx---ZK-Dark-Pool?node-id=1-42&viewport=-5281%2C-71%2C0.61&t=Zn8gNwExGIKEyP8x-1&scaling=min-zoom&content-scaling=fixed&page-id=0%3A1
Website: https://darxcrypto.vercel.app/
Features
- Private order book — Side, size, price, value, and filled amount are AES-256-GCM encrypted in the database.
- ZK-settled trades — Matched trades are proven in-circuit (midpoint tolerance) and settled on Arbitrum Sepolia with a single settleTrade call.
- Midpoint pricing — BBO feeds from Binance (with CoinGecko fallback); trades clear at the midpoint.
- Modern stack — Next.js 16, React 19, Wagmi, RainbowKit, Supabase, Circom, snarkjs, Foundry.
---
How it works
┌─────────────┐ submit order ┌─────────────┐ match / encrypt ┌──────────────┐
│ Frontend │ ───────────────────► │ Backend │ ──────────────────────► │ Supabase │
│ (Next.js) │ │ (Express) │ │ (orders) │
└──────┬──────┘ └──────┬───────┘ └──────────────┘
│ │
│ if matched: │ fullProve (snarkjs in-process)
│ approve + settleTrade() │ → proof + publicInputs
▼ ▼
┌─────────────┐ ┌─────────────┐
│ DarkPool │ ◄── verify proof ──── │ Groth16 │
│ (Arbitrum │ + transfer │ Verifier │
│ Sepolia) │ │ (Solidity) │
└─────────────┘ └─────────────┘
1. User connects wallet, enters amount (token or USDC), submits BUY/SELL.
2. Backend stores the order (encrypted), tries to match with an open opposite order.
3. Matched: Backend generates a ZK proof with snarkjs.groth16.fullProve; frontend approves tokens and calls DarkPool.settleTrade(proof, buyer, seller, ...); backend marks both orders filled.
4. Unmatched: Order stays open; when a counterparty matches later, they run settlement and the first user’s UI can poll until filled.
---
Tech stack
Layer | Technologies
Frontend | Next.js 16, React 19, Wagmi, RainbowKit, Tailwind, Shadcn UI, TanStack Query & Table
Backend | Node.js, Express, Supabase, snarkjs (in-process proof)
Contracts| Solidity 0.8, Foundry, OpenZeppelin
ZK | Circom, Groth16 (snarkjs), Verifier.sol
Chain | Arbitrum Sepolia
Progress During Hackathon
<p><span>During the hackathon, we built DARX from a working concept into a live end-to-end prototype for private crypto trade execution. We implemented a full flow where users connect wallets, submit orders, get matched off-chain, generate a Groth16 proof, and settle on-chain via a DarkPool smart contract on Arbitrum Sepolia. We also integrated real-time pricing with fallback mechanisms, built a complete trade interface, and shipped an advanced orders page with filtering, sorting, and pagination.</span></p><p><span>On the backend side, we added encrypted order storage (relayer privacy model), improved order lifecycle handling, and stabilized matching/settlement behavior across edge cases. On the frontend, we improved UX significantly with balance-aware controls, dynamic button states, wallet-connect flow, better alerts, and flexible amount input modes (token or USDC). By the end of the hackathon, DARX had a functional architecture spanning frontend, backend, ZK proving pipeline, and smart contracts—demonstrating a practical path from private off-chain intent to verifiable on-chain settlement.</span></p>
Tech Stack
Fundraising Status
<p>solo developer project.</p>