A privacy perpetual futures DEX with encrypted position management and private cross-chain deposits on Solana powered by Arcium and ZEC.
- Encrypted Position Management: All position data (size, collateral, leverage, PnL) is encrypted using Arcium's Multi-Party Computation (MPC)
- Private Deposits: Zcash shielded transactions break the link between deposit and trading activity
- High Performance: Sub-second finality and <$0.001 transaction fees on Solana
- Full Trading Features: Up to 20x leverage, real-time PnL, liquidation protection
Traditional DeFi exchanges expose all trading activity on-chain, making it easy for:
- Front-runners to see large orders
- Competitors to copy trading strategies
- Regulators to track transactions
- Malicious actors to target positions
PrivatePerps solves this by encrypting all position data and enabling private deposits, ensuring only you can see your trading activity.
- Perpetual Futures: Trade BTC, ETH, SOL perpetuals with up to 20x leverage
- Long & Short Positions: Profit from both rising and falling markets
- Real-Time PnL: Encrypted profit/loss calculations via Arcium MPC
- Liquidation Protection: Automated margin checks and liquidation prevention
- Funding Rates: Perpetual funding mechanism for market balance
- Encrypted Positions: Position size, collateral, and leverage are encrypted on-chain
- Private PnL: Profit/loss calculated on encrypted data without revealing values
- Private Deposits: Zcash shielded transactions for anonymous deposits
- Private Withdrawals: Withdraw to new Zcash addresses for complete unlinkability
- Mobile Responsive: Fully responsive trading interface
- Real-Time Charts: Professional candlestick charts with order book
- Position Management: View and manage all positions with privacy controls
- Bridge Integration: Seamless ZEC β wZEC bridging
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PERPX ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Frontend (Next.js/React) β
β ββ Trading Interface β
β ββ Position Dashboard β
β ββ Bridge UI β
β β
β Solana Programs β
β ββ Perp DEX (Public Trading) β
β ββ Confidential Perp (Arcium Encrypted) β
β ββ ZEC Bridge (Cross-Chain) β
β β
β Arcium MXE (MPC Network) β
β ββ Encrypted Position Storage β
β ββ Private PnL Computation β
β ββ Liquidation Checks β
β β
β External Services β
β ββ Pyth Oracle (Price Feeds) β
β ββ Zcash Node (Bridge Relayer) β
β ββ CoinGecko (Fallback Prices) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Perp DEX Program (
programs/perp-dex/): Public perpetual trading program - Confidential Perp Program (
arcium-confidential/): Encrypted position management with Arcium - ZEC Bridge Program (
programs/zec-bridge/): Cross-chain bridge for Zcash deposits - Frontend (
frontend/): Next.js trading interface - Bridge Relayer (
bridge-relayer/): Service monitoring Zcash deposits
For detailed architecture, see PROJECT.md.
git clone https://github.com/e-man07/perp-dex.git
cd perp-dex# Install Rust and Solana CLI (if not already installed)
sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
# Install Node.js dependencies
npm install
# Install frontend dependencies
cd frontend && npm install && cd ..
# Install bridge relayer dependencies
cd bridge-relayer && npm install && cd ..# Build Solana programs
anchor build
# Build Arcium confidential program
cd arcium-confidential
arcium build
cd ..# Start Solana localnet
solana-test-validator
# In another terminal, start Arcium MXE localnet
cd arcium-confidential
arcium localnet
# In another terminal, start frontend
cd frontend
npm run dev# Initialize bridge, markets, and risk parameters
npx ts-node scripts/initialize-all.tsVisit http://localhost:3000 to start trading!
- Rust (latest stable): Install Rust
- Solana CLI (v1.18+): Install Solana
- Anchor (v0.30+): Install Anchor
- Node.js (v18+): Install Node.js
- Arcium CLI:
cargo install arcium-cli - Docker (for Zcash bridge): Install Docker
- RAM: 8GB minimum, 16GB recommended
- Disk Space: 10GB+ for Solana ledger and Zcash blockchain
- OS: macOS, Linux, or WSL2 on Windows
# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# Install Solana CLI
sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
# Verify installation
solana --version
anchor --versioncargo install arcium-cli
arcium --versiongit clone https://github.com/e-man07/perpX.git
cd perp-dex
# Install root dependencies
npm install
# Install frontend dependencies
cd frontend && npm install && cd ..
# Install bridge relayer dependencies
cd bridge-relayer && npm install && cd ..# Build Solana programs
anchor build
# Build Arcium confidential program
cd arcium-confidential
arcium build
cd ..# Generate a new wallet (or use existing)
solana-keygen new
# Set cluster to localnet
solana config set --url localhost
# Airdrop SOL for testing
solana airdrop 10Create .env files in each directory:
ANCHOR_PROVIDER_URL=http://localhost:8899
ANCHOR_WALLET=~/.config/solana/id.jsonNEXT_PUBLIC_SOLANA_NETWORK=localhost
NEXT_PUBLIC_RPC_URL=http://localhost:8899
NEXT_PUBLIC_USE_LOCALNET=trueSOLANA_RPC_URL=http://localhost:8899
SOLANA_PRIVATE_KEY=<your-keypair-path>
ZCASH_RPC_URL=http://localhost:8232
ZCASH_RPC_USER=zcash
ZCASH_RPC_PASSWORD=<generated-password>
ZEC_VIEWING_KEY=<your-viewing-key>Edit Anchor.toml to configure program IDs and cluster:
[programs.localnet]
perp_dex = "6mQu42YHujNsRkUw9qD4zC6K8saQbyL28H28AuVaqQui"
zec_bridge = "3zoZWhwFvZC7mtQv44MjsrbGBS37qxdM1uQjs8CTieQK"
[provider]
cluster = "localnet"
wallet = "~/.config/solana/id.json"- Open the frontend at
http://localhost:3000 - Click "Connect Wallet" and select your Solana wallet (Phantom, etc.)
- Click "Bridge" in the navigation
- Enter amount of ZEC to deposit
- Generate deposit address and send ZEC
- Wait for confirmation (or use "Dev Mode" on localnet)
- Claim wZEC tokens
- Select a market (BTC/USD, ETH/USD, or SOL/USD)
- Choose Long or Short
- Enter margin amount (in wZEC)
- Set leverage (1x - 20x)
- Click "Open Private Position"
- Confirm transaction in wallet
- View all open positions in the "Positions" section
- Click "Reveal" to decrypt and view position details
- Monitor unrealized PnL and liquidation price
- Close positions when ready
# Initialize all components
npx ts-node scripts/initialize-all.ts
# Or initialize separately
npx ts-node scripts/initialize-bridge-localnet.ts
npx ts-node scripts/initialize-confidential-perp-localnet.ts
npx ts-node scripts/init-markets-localnet.ts# Deposit liquidity as an LP
npx ts-node scripts/deposit-liquidity-localnet.ts# Update market prices from oracle
npx ts-node scripts/update-market-prices.ts# Test complete bridge flow
npx ts-node scripts/test-bridge-full-flow.tsperp-dex/
βββ programs/ # Solana programs
β βββ perp-dex/ # Public perpetual DEX
β βββ zec-bridge/ # Zcash bridge
βββ arcium-confidential/ # Arcium encrypted program
β βββ programs/ # Confidential perp program
β βββ encrypted-ixs/ # Encrypted instructions
βββ frontend/ # Next.js frontend
β βββ app/ # Next.js app router
β βββ components/ # React components
β βββ hooks/ # React hooks
βββ bridge-relayer/ # Bridge relayer service
βββ scripts/ # Utility scripts
βββ tests/ # Integration tests
βββ sdk/ # TypeScript SDK
# Terminal 1: Solana localnet
solana-test-validator
# Terminal 2: Arcium MXE
cd arcium-confidential && arcium localnet
# Terminal 3: Frontend
cd frontend && npm run dev
# Terminal 4: Bridge relayer (optional)
cd bridge-relayer && npm run dev- Edit Rust programs in
programs/orarcium-confidential/ - Edit frontend in
frontend/ - Rebuild after Rust changes:
anchor buildorarcium build - Frontend hot-reloads automatically
# Run tests
anchor test
# Or run specific test file
anchor test tests/perp-dex.ts- Rust: Follow standard Rust formatting (
cargo fmt) - TypeScript: Use Prettier (
npm run lint:fix) - Commit Messages: Use conventional commits
# Run all tests
anchor test
# Run specific test
anchor test tests/perp-dex.ts# Test bridge flow
npx ts-node scripts/test-bridge-full-flow.ts
# Test trading flow
npx ts-node scripts/test-perp-trade.ts- Start localnet:
solana-test-validator - Deploy programs:
anchor deploy - Initialize:
npx ts-node scripts/initialize-all.ts - Test in frontend: Open
http://localhost:3000
scripts/test-bridge-localnet.ts: Test bridge deposit/withdrawalscripts/test-perp-trade.ts: Test opening/closing positionsscripts/quick-test-flow.sh: Quick verification script
# Set cluster to devnet
solana config set --url devnet
# Airdrop SOL
solana airdrop 2# Deploy Solana programs
anchor deploy
# Deploy Arcium program
cd arcium-confidential
arcium deploy
cd ..# Update Anchor.toml to use devnet program IDs
# Then initialize
npx ts-node scripts/initialize-bridge.ts
npx ts-node scripts/initialize-confidential-perp.ts
npx ts-node scripts/init-markets-localnet.tscd frontend
# Update .env.local with devnet RPC
NEXT_PUBLIC_SOLANA_NETWORK=devnet
NEXT_PUBLIC_RPC_URL=https://api.devnet.solana.com
# Build and deploy
npm run build
# Deploy to Vercel, Netlify, etc.