Dory Polynomial Commitment Scheme
Dory is the multilinear polynomial commitment scheme used in Jolt to commit to witness polynomials and generate opening proofs. It provides succinct commitments with efficient proving and verification.Overview
Dory is a polynomial commitment scheme (PCS) specifically designed for multilinear polynomials. In the Jolt architecture, it serves as the primary commitment mechanism for all witness data.Key Properties
- Multilinear polynomials: Dory commits to polynomials that are linear in each variable
- Succinct commitments: Commitment size is independent of polynomial degree
- Batch openings: Efficiently proves multiple polynomial evaluations simultaneously
- Transparent setup: Does not require a trusted setup ceremony
Role in Jolt
Dory is used throughout the Jolt prover pipeline:Committed Witness Polynomials
The following polynomials are committed using Dory:RdInc: Register destination increment trackingRamInc: RAM increment trackingInstructionRa(d): Instruction lookup one-hot read-after polynomialsBytecodeRa(d): Bytecode one-hot read-after polynomialsRamRa(d): RAM one-hot read-after polynomialsTrustedAdvice: Trusted auxiliary witness dataUntrustedAdvice: Untrusted auxiliary witness data
Type Parameters
Dory appears throughout the Jolt codebase via the generic type parameter pattern:Prover Pipeline Integration
Dory commitments are generated in stages during proving:Stage 2: Streaming Commitment
- Tier-1 chunks: Large witness polynomials are split into chunks
- Tier-2 aggregation: Chunk commitments are aggregated hierarchically
- Final commitments: Root commitments are included in the proof
Stage 6: Opening Proofs
At the end of the sumcheck protocol, the prover must open committed polynomials at evaluation points determined by the verifier’s challenges. Dory provides:- Batched opening proofs: Multiple polynomial openings are aggregated into a single proof
- Opening accumulator:
ProverOpeningAccumulatorcollects all opening claims throughout the protocol - Opening proof generation: Batched Dory opening proof proves all evaluations simultaneously
Zero-Knowledge Mode
When Jolt is compiled with thezk feature flag, Dory supports zero-knowledge openings:
- Standard mode: Opening proof reveals the evaluation
y = P(r) - ZK mode: Opening proof includes a commitment
y_comto the evaluation, and proves correctness of the committed value without revealingyitself
poly/commitment/dory/commitment_scheme.rs with the bind_opening_inputs_zk method.
Implementation Location
The Dory implementation is located injolt-core/poly/commitment/dory/:
commitment_scheme.rs: MainDoryCommitmentSchemeimplementationopening_proofs.rs: Batched opening proof generation and verificationstructure.rs: Dory polynomial commitment structure and parameters
Performance Characteristics
Dory’s performance is crucial to Jolt’s overall efficiency:- Commitment time: Dominated by multi-scalar multiplications (MSMs)
- Opening proof time: Proportional to the number of evaluation points
- Memory usage: Streaming commitment reduces peak memory by avoiding full polynomial materialization
Multi-Scalar Multiplication
Dory relies heavily on efficient MSM implementations injolt-core/msm/. The MSM performance directly impacts commitment generation time.
Comparison to Other PCS
Jolt also includes an implementation of HyperKZG for comparison, but Dory is the default choice due to:- Better asymptotic complexity for batch openings
- No trusted setup requirement
- Efficient handling of large multilinear polynomials via streaming
Academic References
Dory is based on the following research: Dory: Efficient, Transparent arguments for Generalised Inner Products and Polynomial CommitmentsJonathan Lee, et al. The Jolt paper also discusses how Dory integrates with the lookup singularity approach: Jolt: SNARKs for Virtual Machines via Lookups
Arasu Arun, Srinath Setty, Justin Thaler Unlocking the lookup singularity with Lasso
Srinath Setty, Justin Thaler, Riad Wahby