Design Patterns for Efficient Recursive SNARKs: Practical Trade-offs and Engineering Tips
Design Pattern: separate a rich inner proof (domain-specific execution, heavy witness objects) from a small outer circuit that verifies inner-proof accumulators and enforces state linking. Choose state commitments by access pattern: Merkle for sparse key-value updates (logarithmic update cost, per-key Merkle paths), PCS/KZG for table/vector workloads (small commitments, multi-opening costs, FFTs and MSMs). Use hybrids (iterate then aggregate) to trade latency versus peak prover resources. Engineer provers for streaming witness generation, reusable precomputation (FFT domains, fixed-base MSMs), and minimal cross-level dependencies to avoid memory blowups. Treat setup artifacts as versioned deployment artifacts and prefer universal/reusable setups when operational scope covers many recursion levels.









