miden_precompiles_prover/
lib.rs1#![no_std]
2#![allow(
3 dead_code,
4 unused_imports,
5 reason = "the imported prover stack is intentionally retained behind a narrow crate API"
6)]
7
8extern crate alloc;
9#[cfg(any(test, feature = "std"))]
10extern crate std;
11
12use alloc::string::{String, ToString};
13
14use miden_core::deferred::DeferredState;
15pub use miden_core::proof::{HashFunction, StarkProof};
16
17pub(crate) mod ec;
18pub(crate) mod hash;
19pub(crate) mod logup;
20pub(crate) mod math;
21pub(crate) mod primitives;
22pub(crate) mod relations;
23pub(crate) mod session;
24pub(crate) mod stark_config;
25pub(crate) mod transcript;
26pub(crate) mod uint;
27pub(crate) mod utils;
28
29pub fn prove_deferred_state(
31 state: &DeferredState,
32 hash_fn: HashFunction,
33) -> Result<StarkProof, ProveDeferredStateError> {
34 let deferred = {
35 let _span = tracing::info_span!("build_session").entered();
36 deferred::session_from_deferred_state(state)?
37 };
38 let traces = {
39 let _span = tracing::info_span!("build_trace").entered();
40 deferred.session.finish(deferred.root)
41 };
42 Ok(traces.prove_stark(hash_fn)?)
43}
44
45#[derive(Debug, thiserror::Error)]
47pub enum ProveDeferredStateError {
48 #[error("failed to translate deferred state into a precompile proving session: {0}")]
50 Translation(String),
51 #[error(transparent)]
53 Prove(#[from] ProveError),
54}
55
56impl From<deferred::DeferredSessionError> for ProveDeferredStateError {
57 fn from(error: deferred::DeferredSessionError) -> Self {
58 Self::Translation(error.to_string())
59 }
60}
61
62#[derive(Debug, thiserror::Error)]
64pub enum ProveError {
65 #[error("chiplet stack declares preprocessed columns, but no preprocessed bundle was built")]
68 MissingPreprocessed,
69 #[error(transparent)]
71 Preprocessed(#[from] miden_lifted_stark::PreprocessedValidationError),
72 #[error(transparent)]
74 Prover(#[from] miden_lifted_stark::ProverError),
75 #[error("failed to serialize STARK proof: {0}")]
77 Serialization(#[from] wincode::error::WriteError),
78}
79
80pub(crate) mod deferred;
81
82#[cfg(test)]
83mod tests;