Skip to content

Commit e9d4667

Browse files
compute program_segment in the adapter and add it to ProverInput (#1671)
1 parent 1e630d8 commit e9d4667

5 files changed

Lines changed: 23619 additions & 12 deletions

File tree

stwo_cairo_prover/crates/adapter/src/adapter.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use anyhow::Result;
22
use cairo_vm::vm::runners::cairo_runner::CairoRunner;
3+
use itertools::Itertools;
34
use tracing::{info, span, Level};
45

56
use super::memory::{MemoryBuilder, MemoryConfig};
@@ -41,6 +42,17 @@ pub fn adapt(runner: &CairoRunner) -> Result<ProverInput> {
4142
// TODO(spapini): Add output builtin to public memory.
4243
let (memory, inst_cache) = memory.build();
4344

45+
// Compute program segment.
46+
let initial_pc = state_transitions.initial_state.pc.0;
47+
let initial_ap = state_transitions.initial_state.ap.0;
48+
let program = (initial_pc..initial_ap - 2)
49+
.map(|addr| {
50+
let id = memory.get_raw_id(addr);
51+
let value = memory.get(addr).as_u256();
52+
(id, value)
53+
})
54+
.collect_vec();
55+
4456
// TODO(Ohad): take this from the input.
4557
let public_segment_context = PublicSegmentContext::bootloader_context();
4658

@@ -51,6 +63,7 @@ pub fn adapt(runner: &CairoRunner) -> Result<ProverInput> {
5163
public_memory_addresses,
5264
builtin_segments,
5365
public_segment_context,
66+
program,
5467
#[cfg(feature = "extract-mem-trace")]
5568
relocated_mem: relocated_memory_clone,
5669
#[cfg(feature = "extract-mem-trace")]

stwo_cairo_prover/crates/adapter/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ pub struct ProverInput {
3232
pub public_memory_addresses: Vec<u32>,
3333
pub builtin_segments: BuiltinSegments,
3434
pub public_segment_context: PublicSegmentContext,
35+
pub program: Vec<(u32, [u32; 8])>,
3536
#[cfg(feature = "extract-mem-trace")]
3637
pub relocated_mem: Vec<MemoryEntry>,
3738
#[cfg(feature = "extract-mem-trace")]

stwo_cairo_prover/crates/prover/src/witness/cairo.rs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,23 +64,17 @@ fn extract_public_segments(
6464

6565
fn extract_sections_from_memory(
6666
memory: &Memory,
67-
initial_pc: u32,
6867
initial_ap: u32,
6968
final_ap: u32,
69+
program: Vec<(u32, [u32; 8])>,
7070
public_segment_context: PublicSegmentContext,
7171
) -> PublicMemory {
7272
let public_segments =
7373
extract_public_segments(memory, initial_ap, final_ap, public_segment_context);
74-
let program_memory_addresses = initial_pc..initial_ap - 2;
7574
let safe_call_addresses = initial_ap - 2..initial_ap;
7675
let output_memory_addresses =
7776
public_segments.output.start_ptr.value..public_segments.output.stop_ptr.value;
78-
let [program, safe_call, output] = [
79-
program_memory_addresses,
80-
safe_call_addresses,
81-
output_memory_addresses,
82-
]
83-
.map(|range| {
77+
let [safe_call, output] = [safe_call_addresses, output_memory_addresses].map(|range| {
8478
range
8579
.map(|addr| {
8680
let id = memory.get_raw_id(addr);
@@ -113,6 +107,7 @@ pub fn create_cairo_claim_generator(
113107
public_memory_addresses,
114108
builtin_segments,
115109
public_segment_context,
110+
program,
116111
..
117112
}: ProverInput,
118113
preprocessed_trace: Arc<PreProcessedTrace>,
@@ -135,14 +130,13 @@ pub fn create_cairo_claim_generator(
135130
all_components.insert("verify_bitwise_xor_9");
136131

137132
// Public data.
138-
let initial_pc = initial_state.pc.0;
139133
let initial_ap = initial_state.ap.0;
140134
let final_ap = final_state.ap.0;
141135
let public_memory = extract_sections_from_memory(
142136
&memory,
143-
initial_pc,
144137
initial_ap,
145138
final_ap,
139+
program,
146140
public_segment_context,
147141
);
148142

0 commit comments

Comments
 (0)