1- #![ no_std]
21//! Recursive proof verification for Plonky3 STARKs.
3- //!
4- //! This crate provides the infrastructure for verifying STARK proofs within circuits,
5- //! enabling recursive proof composition. The verification process is split into two phases:
6- //!
7- //! 1. **Circuit Building**: Allocate targets and add verification constraints
8- //! 2. **Execution**: Populate public inputs and execute the circuit
9- //!
10- //! # Architecture
11- //!
12- //! The crate is organized into the following modules:
13- //!
14- //! - [`traits`]: Core traits (`Recursive`, `RecursiveChallenger`, `RecursiveAir`, `RecursivePcs`)
15- //! - [`types`]: Core types (`ProofTargets`, `StarkChallenges`, `Target`)
16- //! - [`challenger`]: Fiat-Shamir challenger implementations
17- //! - [`verifier`]: STARK verification logic
18- //! - [`pcs`]: Polynomial commitment scheme implementations (FRI, etc.)
19- //! - [`generation`]: Challenge and proof generation utilities
20- //! - [`public_inputs`]: Public input builders and helpers
21- //! - [`prelude`]: Commonly used imports
22- //!
23- //! # Example
24- //!
25- //! ```ignore
26- //! use p3_recursion::prelude::*;
27- //!
28- //! // Phase 1: Build the verification circuit
29- //! let mut circuit = CircuitBuilder::new();
30- //! let proof_targets = ProofTargets::new(&mut circuit, &proof);
31- //! let public_targets = circuit.alloc_public_inputs(num_public, "AIR public values");
32- //!
33- //! verify_circuit::<_, _, _, _, _, 8>(
34- //! &config,
35- //! &air,
36- //! &mut circuit,
37- //! &proof_targets,
38- //! &public_targets,
39- //! &fri_params,
40- //! )?;
41- //!
42- //! // Phase 2: Execute with actual values
43- //! let challenges = generate_challenges(&air, &config, &proof, &public_values, None)?;
44- //! let public_inputs = construct_stark_verifier_inputs(
45- //! &public_values,
46- //! &ProofTargets::get_values(&proof),
47- //! &challenges,
48- //! num_queries,
49- //! );
50- //!
51- //! circuit.set_public_inputs(&public_inputs)?;
52- //! circuit.execute()?;
53- //! ```
542
55- extern crate alloc ;
3+ #! [ no_std ]
564
57- // ================================
58- // Module declarations
59- // ================================
5+ extern crate alloc;
606
617pub mod challenger;
628pub mod generation;
@@ -67,32 +13,19 @@ pub mod traits;
6713pub mod types;
6814pub mod verifier;
6915
70- // ================================
71- // Public API re-exports
72- // ================================
73-
74- // Core type
75- // Challenger
7616pub use challenger:: CircuitChallenger ;
77- // Generation
7817pub use generation:: { GenerationError , PcsGeneration , generate_challenges} ;
79- // PCS
8018pub use pcs:: fri:: { FriVerifierParams , MAX_QUERY_INDEX_BITS } ;
81- // Public inputs
8219pub use public_inputs:: {
8320 CommitmentOpening , FriVerifierInputs , PublicInputBuilder , StarkVerifierInputs ,
8421 StarkVerifierInputsBuilder , construct_stark_verifier_inputs,
8522} ;
86- // Core traits
8723pub use traits:: {
8824 Recursive , RecursiveAir , RecursiveChallenger , RecursiveExtensionMmcs , RecursiveMmcs ,
8925 RecursivePcs ,
9026} ;
91- pub use types:: Target ;
92- // Key types
9327pub use types:: {
9428 CommitmentTargets , OpenedValuesTargets , ProofTargets , RecursiveLagrangeSelectors ,
95- StarkChallenges ,
29+ StarkChallenges , Target ,
9630} ;
97- // Verifier
9831pub use verifier:: { ObservableCommitment , VerificationError , verify_circuit} ;
0 commit comments