diff --git a/prover/src/continuation.rs b/prover/src/continuation.rs index 03b08d8d7..01a9edbf3 100644 --- a/prover/src/continuation.rs +++ b/prover/src/continuation.rs @@ -201,6 +201,13 @@ fn global_memory_configs( ) -> Vec { let image = build_initial_image_paged(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() @@ -504,9 +511,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). @@ -523,7 +529,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() @@ -624,6 +630,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 mut provenance = local_to_global::genesis_provenance(image.iter().map(|(a, v)| (a, v as u64))); @@ -704,7 +711,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,