in prover/src/lib.rs [419:460]
fn build_trace_commitment<H>(
&self,
trace: Matrix<Self::BaseField>,
domain: &StarkDomain<Self::BaseField>,
) -> (
TraceCommitment<Self::BaseField, H>,
TracePolyTable<Self::BaseField>,
)
where
H: ElementHasher<BaseField = Self::BaseField>,
{
// extend the execution trace
#[cfg(feature = "std")]
let now = Instant::now();
let trace_polys = trace.interpolate_columns_into();
let trace_lde = trace_polys.evaluate_columns_over(domain);
#[cfg(feature = "std")]
debug!(
"Extended execution trace of {} columns from 2^{} to 2^{} steps ({}x blowup) in {} ms",
trace_lde.num_cols(),
log2(trace_polys.num_rows()),
log2(trace_lde.num_rows()),
domain.trace_to_lde_blowup(),
now.elapsed().as_millis()
);
// build trace commitment
#[cfg(feature = "std")]
let now = Instant::now();
let trace_tree = trace_lde.commit_to_rows();
#[cfg(feature = "std")]
debug!(
"Computed execution trace commitment (Merkle tree of depth {}) in {} ms",
trace_tree.depth(),
now.elapsed().as_millis()
);
(
TraceCommitment::new(trace_lde, trace_tree, domain.trace_to_lde_blowup()),
TracePolyTable::new(trace_polys),
)
}