Use this file to discover all available pages before exploring further.
SnarkVM is organized as a Rust workspace with multiple interdependent crates. This modular architecture enables clear separation of concerns, efficient compilation, and maintainable code.
Purpose: Foundation crate providing low-level utilities and macros.Location: utilities/Dependencies: None (bottom of dependency tree)Key Exports:
pub mod biginteger; // BigInteger256, BigInteger384pub mod bititerator; // Bit manipulation utilitiespub mod bits; // Bit vector operationspub mod bytes; // Byte serialization helperspub mod parallel; // Rayon parallel primitivespub mod serialize; // CanonicalSerialize/Deserialize
Usage: Every other crate depends on utilities for:
Purpose: Cryptographic algorithms and primitives.Location: algorithms/Dependencies: snarkvm-curves, snarkvm-fields, snarkvm-utilitiesModule Structure:
pub mod crypto_hash; // Poseidon hash functionpub mod fft; // Fast Fourier Transform for polynomialspub mod msm; // Multi-scalar multiplicationpub mod polycommit; // Polynomial commitment schemespub mod r1cs; // R1CS constraint systempub mod snark; // Varuna SNARK implementationpub mod srs; // Structured reference string
Purpose: Plaintext types for native program execution.Location: console/Dependencies: snarkvm-algorithms, snarkvm-curves, snarkvm-fields, snarkvm-utilitiesModule Structure:
pub mod account; // PrivateKey, ViewKey, Address, Signaturepub mod algorithms; // Poseidon, BHP, Pedersen, Varuna wrapperspub mod collections; // Indexed data structurespub mod network; // Network trait and parameterspub mod program; // Program, Function, Instruction typespub mod types; // Primitive types (Field, Group, etc.)
Type Exports (console/types/src/lib.rs):
pub use snarkvm_console_types_address::Address;pub use snarkvm_console_types_boolean::Boolean;pub use snarkvm_console_types_field::Field;pub use snarkvm_console_types_group::Group;pub use snarkvm_console_types_integers::{I8, I16, I32, I64, I128, U8, U16, U32, U64, U128};pub use snarkvm_console_types_scalar::Scalar;pub use snarkvm_console_types_string::StringType;
Console Field Type (console/types/field/src/lib.rs:39):
pub mod account; // Circuit account typespub mod algorithms; // Circuit crypto primitivespub mod collections; // Circuit data structurespub mod environment; // Circuit environment and traitspub mod network; // Circuit network typespub mod program; // Circuit program typespub mod types; // Circuit primitive types
Circuit Field Type (circuit/types/field/src/lib.rs:50):
pub struct Field<E: Environment> { linear_combination: LinearCombination<E::BaseField>, bits_le: OnceCell<Vec<Boolean<E>>>, // Cached bit representation}impl<E: Environment> Inject for Field<E> { type Primitive = console::Field<E::Network>; fn new(mode: Mode, field: Self::Primitive) -> Self;}impl<E: Environment> Eject for Field<E> { type Primitive = console::Field<E::Network>; fn eject_value(&self) -> Self::Primitive;}
pub trait Environment: Clone { type Network: console::Network; type BaseField: PrimeField; fn new_variable(mode: Mode, value: Self::BaseField) -> Variable<Self::BaseField>; fn enforce_constraint(lc1: LinearCombination<Self::BaseField>, lc2: LinearCombination<Self::BaseField>, lc3: LinearCombination<Self::BaseField>);}pub enum Mode { Constant, // No constraints, value is constant Public, // Public input variable Private, // Private witness variable}
The Mode enum determines whether a circuit variable generates constraints. Constant values are optimized away and don’t appear in the constraint system.
Purpose: Blockchain state management (blocks, transactions, storage).Location: ledger/Dependencies: snarkvm-synthesizerSubmodules:
pub mod authority; // Authority signature and verificationpub mod block; // Block structure and transitionspub mod committee; // Validator committee managementpub mod narwhal; // Narwhal BFT consensus componentspub mod puzzle; // Proof-of-work puzzle for coinbasepub mod query; // Ledger query interfacepub mod store; // Database storage layer