From e7b18f1b3b952c3d2626fd30e54bdbaff90a8ae8 Mon Sep 17 00:00:00 2001 From: MauroFab Date: Thu, 25 Jun 2026 19:04:43 -0300 Subject: [PATCH] Reuse genesis page data for continuation global proof --- prover/src/continuation.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/prover/src/continuation.rs b/prover/src/continuation.rs index 6cd78530f..4c34078ef 100644 --- a/prover/src/continuation.rs +++ b/prover/src/continuation.rs @@ -206,6 +206,13 @@ fn global_memory_configs( ) -> Vec { let image = build_initial_image(elf, private_inputs); let init_page_data = build_init_page_data(&image); + global_memory_configs_from_init_page_data(boundaries, &init_page_data) +} + +fn global_memory_configs_from_init_page_data( + boundaries: &[Vec], + init_page_data: &HashMap>, +) -> Vec { let touched_pages: std::collections::BTreeSet = boundaries .iter() .flatten() @@ -526,9 +533,8 @@ fn verify_epoch( /// epoch's `init` and every genesis value matches the ELF. fn prove_global( boundaries: &[Vec], - elf: &Elf, elf_bytes: &[u8], - private_inputs: &[u8], + init_page_data: &HashMap>, opts: &ProofOptions, ) -> Result, Error> { // Each cell's final state (boundaries are in epoch order, so the last fini wins). @@ -546,7 +552,7 @@ fn prove_global( } } - let gm_configs = global_memory_configs(boundaries, elf, private_inputs); + let gm_configs = global_memory_configs_from_init_page_data(boundaries, init_page_data); let mut l2g_traces: Vec> = boundaries .iter() @@ -647,6 +653,7 @@ pub fn prove_continuation( // The cross-epoch memory image, carried forward: epoch i+1's init is epoch i's // fini, updated in place with each epoch's touched-cell final values. let mut image = build_initial_image_paged(&elf, private_inputs); + let init_page_data = build_init_page_data(&image); let initial_memory: HashMap = image.iter().map(|(a, v)| (a, v as u64)).collect(); let mut provenance = local_to_global::genesis_provenance(&initial_memory); @@ -725,7 +732,7 @@ pub fn prove_continuation( // One global LogUp over all the (kept) local-to-global tables. let all_boundaries: Vec> = epochs.iter().map(|e| e.boundary.clone()).collect(); - let global = prove_global(&all_boundaries, &elf, elf_bytes, private_inputs, opts)?; + let global = prove_global(&all_boundaries, elf_bytes, &init_page_data, opts)?; Ok(ContinuationProof { epochs,