Skip to main content

Overview

The snarkvm-algorithms crate provides the core cryptographic primitives and algorithms for zero-knowledge proof construction in SnarkVM. This crate implements the foundational mathematical operations required for the Aleo blockchain’s proof system.

Module Structure

The algorithms crate is organized into the following key modules:

Cryptographic Hash Functions

The crypto_hash module provides cryptographic hash functions optimized for zero-knowledge proofs.
  • Poseidon - Algebraic hash function designed for efficient ZK circuits
  • SHA-256 - Standard cryptographic hash with circuit implementations
See Cryptographic Hash Functions for details.

Polynomial Operations

The fft module implements Fast Fourier Transform operations for efficient polynomial arithmetic.
  • EvaluationDomain - FFT domains for polynomial evaluation
  • DensePolynomial - Dense polynomial representation
  • SparsePolynomial - Sparse polynomial representation
  • Evaluations - Polynomial evaluations in Lagrange basis
See FFT Implementations for details.

Polynomial Commitments

The polycommit module implements polynomial commitment schemes.
  • KZG10 - Kate-Zaverucha-Goldberg polynomial commitments
  • SonicKZG10 - Batched KZG with degree bounds from Sonic/AuroraLight
See Polynomial Commitment Schemes for details.

SNARK Implementations

The snark module contains zero-knowledge proof system implementations.
  • Varuna - The primary zkSNARK used in Aleo
  • AHP - Algebraic Holographic Proof for R1CS
See SNARK Implementations for details.

Multi-Scalar Multiplication

The msm module provides optimized multi-scalar multiplication for elliptic curves.
  • VariableBase - Variable-base MSM using Pippenger’s algorithm
  • FixedBase - Fixed-base MSM with precomputation

R1CS Constraint Systems

The r1cs module defines the Rank-1 Constraint System abstraction.
  • ConstraintSynthesizer - Trait for circuit synthesis
  • ConstraintSystem - R1CS constraint collection

Structured Reference Strings

The srs module manages the universal structured reference string.
  • UniversalSRS - Universal parameters for polynomial commitments
  • UniversalProver - Prover-side SRS
  • UniversalVerifier - Verifier-side SRS

Core Traits

SNARK Trait

The SNARK trait defines the interface for zero-knowledge proof systems:

AlgebraicSponge Trait

The AlgebraicSponge trait provides cryptographic sponge functions for Fiat-Shamir transformations:

Dependencies

The algorithms crate depends on:
  • snarkvm-fields - Finite field arithmetic
  • snarkvm-curves - Elliptic curve implementations
  • snarkvm-utilities - Common utilities and macros
  • snarkvm-parameters - Parameter loading and management

Feature Flags

  • cuda - Enable CUDA acceleration for MSM operations
  • serial - Disable parallel computation (for deterministic testing)
  • test - Enable test utilities
  • profiler - Enable performance profiling

Architecture Notes

Crate Organization

Following the snarkVM architecture:
  1. No circular dependencies - algorithms depends only on fields, curves, and utilities
  2. Parallel by default - Uses Rayon for parallel computation unless serial feature is enabled
  3. Generic over curves - Algorithms are generic over PairingEngine for flexibility

Performance Considerations

  • FFT operations are parallelized across available cores
  • MSM uses Pippenger’s algorithm with optimal window sizing
  • Polynomial commitments support batching for improved performance
  • Optional CUDA acceleration for compute-intensive operations

Common Patterns

Working with Polynomials

Using Polynomial Commitments

Next Steps