New Stylus template: ZK based token contracts
Yash KumarWe have added support for creating and deploying ZK Proof based token contracts with Stylus. The templates provide you with Stylus contracts, ZK circuit files, and a ready-to-deploy Next.js app + API for proof generation and minting.
This guide walks you through building a privacy-preserving ERC721 token system using Zero-Knowledge proofs on Arbitrum Stylus. Users can mint tokens by proving they own a minimum amount of ETH without revealing their exact balance.
- ZK Circuit: Proves token ownership without revealing exact balances
 - Stylus Contract: Rust-based ERC721 contract that verifies ZK proofs
 - Frontend: Next.js app for generating proofs and minting tokens
 - Oracle System: Secure balance verification mechanism
 
- Node.js (>= 20.18.0)
 - pnpm package manager
 - Rust with cargo
 - circom for ZK circuits
 - Stylus CLI for contract deployment
 
Select "Stylus ZK ERC721" from the dropdown menu. This will:
- Clone the repository to your machine
 - Set up the project structure
 - Install basic dependencies
 
Install dependencies for all components:
Run the setup script to generate oracle keys and build the ZK circuit:
This script will:
- Generate a random oracle secret key
 - Inject the secret into the ZK circuit
 - Compile the circuit with circom
 - Generate proving and verification keys
 - Create the trusted setup for Groth16
 
⚠️ Important: The oracle secret is critical for security. Keep it private!
Copy the deployed contract address - you'll need it for the frontend.
Update the contract address in your frontend:
Create environment file:
- Connect Wallet: Connect to Arbitrum Sepolia testnet
 - Generate Proof: Click "Generate ZK Proof" - this proves you have sufficient balance
 - Mint Tokens: Use the proof to mint ERC721 tokens
 
The core circuit (circuits/token_ownership.circom) has these components:
Replace the balance check with custom logic:
Extend the circuit to verify multiple token balances:
Add expiration logic to proofs:
After modifying the circuit:
Need help? Please reach out to our support team.