Skip to content

Commit db30738

Browse files
committed
integrate cairo claim generator auto gen into stwo-cairo
1 parent 015d4ac commit db30738

File tree

20 files changed

+1960
-1446
lines changed

20 files changed

+1960
-1446
lines changed

stwo_cairo_prover/Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

stwo_cairo_prover/crates/adapter/src/builtins.rs

Lines changed: 50 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@ impl From<VMMemorySegmentAddresses> for MemorySegmentAddresses {
3838
/// This struct holds the builtins used in a Cairo program.
3939
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
4040
pub struct BuiltinSegments {
41-
pub add_mod: Option<MemorySegmentAddresses>,
42-
pub bitwise: Option<MemorySegmentAddresses>,
41+
pub add_mod_builtin: Option<MemorySegmentAddresses>,
42+
pub bitwise_builtin: Option<MemorySegmentAddresses>,
4343
pub output: Option<MemorySegmentAddresses>,
44-
pub mul_mod: Option<MemorySegmentAddresses>,
45-
pub pedersen: Option<MemorySegmentAddresses>,
46-
pub poseidon: Option<MemorySegmentAddresses>,
47-
pub range_check_bits_96: Option<MemorySegmentAddresses>,
48-
pub range_check_bits_128: Option<MemorySegmentAddresses>,
44+
pub mul_mod_builtin: Option<MemorySegmentAddresses>,
45+
pub pedersen_builtin: Option<MemorySegmentAddresses>,
46+
pub poseidon_builtin: Option<MemorySegmentAddresses>,
47+
pub range_check96_builtin: Option<MemorySegmentAddresses>,
48+
pub range_check_builtin: Option<MemorySegmentAddresses>,
4949
}
5050

5151
impl BuiltinSegments {
@@ -59,19 +59,39 @@ impl BuiltinSegments {
5959
);
6060
};
6161

62-
insert_builtin(BuiltinName::add_mod, &self.add_mod, ADD_MOD_MEMORY_CELLS);
63-
insert_builtin(BuiltinName::bitwise, &self.bitwise, BITWISE_MEMORY_CELLS);
64-
insert_builtin(BuiltinName::mul_mod, &self.mul_mod, MUL_MOD_MEMORY_CELLS);
65-
insert_builtin(BuiltinName::pedersen, &self.pedersen, PEDERSEN_MEMORY_CELLS);
66-
insert_builtin(BuiltinName::poseidon, &self.poseidon, POSEIDON_MEMORY_CELLS);
62+
insert_builtin(
63+
BuiltinName::add_mod,
64+
&self.add_mod_builtin,
65+
ADD_MOD_MEMORY_CELLS,
66+
);
67+
insert_builtin(
68+
BuiltinName::bitwise,
69+
&self.bitwise_builtin,
70+
BITWISE_MEMORY_CELLS,
71+
);
72+
insert_builtin(
73+
BuiltinName::mul_mod,
74+
&self.mul_mod_builtin,
75+
MUL_MOD_MEMORY_CELLS,
76+
);
77+
insert_builtin(
78+
BuiltinName::pedersen,
79+
&self.pedersen_builtin,
80+
PEDERSEN_MEMORY_CELLS,
81+
);
82+
insert_builtin(
83+
BuiltinName::poseidon,
84+
&self.poseidon_builtin,
85+
POSEIDON_MEMORY_CELLS,
86+
);
6787
insert_builtin(
6888
BuiltinName::range_check,
69-
&self.range_check_bits_128,
89+
&self.range_check_builtin,
7090
RANGE_CHECK_MEMORY_CELLS,
7191
);
7292
insert_builtin(
7393
BuiltinName::range_check96,
74-
&self.range_check_bits_96,
94+
&self.range_check96_builtin,
7595
RANGE_CHECK_MEMORY_CELLS,
7696
);
7797
insert_builtin(BuiltinName::output, &self.output, OUTPUT_MEMORY_CELLS);
@@ -88,56 +108,56 @@ impl BuiltinSegments {
88108
// TODO (ohadn): relocate this function if a more appropriate place is found.
89109
// TODO (Stav): remove when the new adapter flow is used.
90110
pub fn pad_builtin_segments(&mut self, memory: &mut MemoryBuilder) {
91-
if let Some(segment) = &self.add_mod {
92-
self.add_mod = Some(pad_segment(
111+
if let Some(segment) = &self.add_mod_builtin {
112+
self.add_mod_builtin = Some(pad_segment(
93113
segment,
94114
memory,
95115
ADD_MOD_MEMORY_CELLS as u32,
96116
Some("add_mod"),
97117
));
98118
}
99-
if let Some(segment) = &self.bitwise {
100-
self.bitwise = Some(pad_segment(
119+
if let Some(segment) = &self.bitwise_builtin {
120+
self.bitwise_builtin = Some(pad_segment(
101121
segment,
102122
memory,
103123
BITWISE_MEMORY_CELLS as u32,
104124
Some("bitwise"),
105125
));
106126
}
107-
if let Some(segment) = &self.mul_mod {
108-
self.mul_mod = Some(pad_segment(
127+
if let Some(segment) = &self.mul_mod_builtin {
128+
self.mul_mod_builtin = Some(pad_segment(
109129
segment,
110130
memory,
111131
MUL_MOD_MEMORY_CELLS as u32,
112132
Some("mul_mod"),
113133
));
114134
}
115-
if let Some(segment) = &self.pedersen {
116-
self.pedersen = Some(pad_segment(
135+
if let Some(segment) = &self.pedersen_builtin {
136+
self.pedersen_builtin = Some(pad_segment(
117137
segment,
118138
memory,
119139
PEDERSEN_MEMORY_CELLS as u32,
120140
Some("pedersen"),
121141
));
122142
}
123-
if let Some(segment) = &self.poseidon {
124-
self.poseidon = Some(pad_segment(
143+
if let Some(segment) = &self.poseidon_builtin {
144+
self.poseidon_builtin = Some(pad_segment(
125145
segment,
126146
memory,
127147
POSEIDON_MEMORY_CELLS as u32,
128148
Some("poseidon"),
129149
));
130150
}
131-
if let Some(segment) = &self.range_check_bits_96 {
132-
self.range_check_bits_96 = Some(pad_segment(
151+
if let Some(segment) = &self.range_check96_builtin {
152+
self.range_check96_builtin = Some(pad_segment(
133153
segment,
134154
memory,
135155
RANGE_CHECK_MEMORY_CELLS as u32,
136156
Some("range_check_96"),
137157
));
138158
}
139-
if let Some(segment) = &self.range_check_bits_128 {
140-
self.range_check_bits_128 = Some(pad_segment(
159+
if let Some(segment) = &self.range_check_builtin {
160+
self.range_check_builtin = Some(pad_segment(
141161
segment,
142162
memory,
143163
RANGE_CHECK_MEMORY_CELLS as u32,
@@ -333,7 +353,7 @@ mod test_builtin_segments {
333353
assert_eq!(cells_per_instance, instance_example.len());
334354
let begin_addr = 23581;
335355
let stop_ptr = begin_addr + cells_per_instance * num_instances;
336-
builtin_segments.bitwise = Some(MemorySegmentAddresses {
356+
builtin_segments.bitwise_builtin = Some(MemorySegmentAddresses {
337357
begin_addr,
338358
stop_ptr,
339359
});
@@ -345,7 +365,7 @@ mod test_builtin_segments {
345365
let &MemorySegmentAddresses {
346366
begin_addr: new_begin_addr,
347367
stop_ptr: new_stop_ptr,
348-
} = builtin_segments.bitwise.as_ref().unwrap();
368+
} = builtin_segments.bitwise_builtin.as_ref().unwrap();
349369
assert_eq!(new_begin_addr, begin_addr);
350370
let segment_length = new_stop_ptr - new_begin_addr;
351371
assert_eq!(segment_length % cells_per_instance, 0);

stwo_cairo_prover/crates/adapter/src/relocator.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,13 @@ impl Relocator {
101101
};
102102

103103
match builtin_name {
104-
BuiltinName::range_check => res.range_check_bits_128 = segment,
105-
BuiltinName::pedersen => res.pedersen = segment,
106-
BuiltinName::bitwise => res.bitwise = segment,
107-
BuiltinName::poseidon => res.poseidon = segment,
108-
BuiltinName::range_check96 => res.range_check_bits_96 = segment,
109-
BuiltinName::add_mod => res.add_mod = segment,
110-
BuiltinName::mul_mod => res.mul_mod = segment,
104+
BuiltinName::range_check => res.range_check_builtin = segment,
105+
BuiltinName::pedersen => res.pedersen_builtin = segment,
106+
BuiltinName::bitwise => res.bitwise_builtin = segment,
107+
BuiltinName::poseidon => res.poseidon_builtin = segment,
108+
BuiltinName::range_check96 => res.range_check96_builtin = segment,
109+
BuiltinName::add_mod => res.add_mod_builtin = segment,
110+
BuiltinName::mul_mod => res.mul_mod_builtin = segment,
111111
BuiltinName::output => res.output = segment,
112112
BuiltinName::ecdsa | BuiltinName::keccak | BuiltinName::ec_op => {
113113
panic!("Builtin {builtin_name} is not supported in Stwo")
@@ -319,14 +319,14 @@ pub mod relocator_tests {
319319
let builtin_segments = relocator.relocate_builtin_segments(&builtin_segments);
320320

321321
assert_eq!(
322-
builtin_segments.bitwise,
322+
builtin_segments.bitwise_builtin,
323323
Some(MemorySegmentAddresses {
324324
begin_addr: 1,
325325
stop_ptr: 81
326326
})
327327
);
328328
assert_eq!(
329-
builtin_segments.range_check_bits_128,
329+
builtin_segments.range_check_builtin,
330330
Some(MemorySegmentAddresses {
331331
begin_addr: 81,
332332
stop_ptr: 97

stwo_cairo_prover/crates/cairo-air/src/air.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ impl CairoClaim {
231231
}
232232
}
233233

234-
#[derive(Serialize, Deserialize, CairoSerialize, CairoDeserialize)]
234+
#[derive(Serialize, Deserialize, CairoSerialize, CairoDeserialize, Default)]
235235
pub struct PublicData {
236236
pub public_memory: PublicMemory,
237237
pub initial_state: CasmState,
@@ -293,7 +293,7 @@ impl PublicData {
293293

294294
// TODO(alonf) Change all the obscure types and structs to a meaningful struct system for the
295295
// memory.
296-
#[derive(Clone, Debug, Serialize, Deserialize, Copy, CairoSerialize, CairoDeserialize)]
296+
#[derive(Clone, Debug, Serialize, Deserialize, Copy, CairoSerialize, CairoDeserialize, Default)]
297297
pub struct MemorySmallValue {
298298
pub id: u32,
299299
pub value: u32,
@@ -313,7 +313,7 @@ pub type PubMemoryValue = (u32, [u32; 8]);
313313
// (address, id, value)
314314
pub type PubMemoryEntry = (u32, u32, [u32; 8]);
315315

316-
#[derive(Clone, Debug, Serialize, Deserialize, Copy, CairoSerialize, CairoDeserialize)]
316+
#[derive(Clone, Debug, Serialize, Deserialize, Copy, CairoSerialize, CairoDeserialize, Default)]
317317
pub struct SegmentRange {
318318
pub start_ptr: MemorySmallValue,
319319
pub stop_ptr: MemorySmallValue,
@@ -330,7 +330,7 @@ impl SegmentRange {
330330
}
331331
}
332332

333-
#[derive(Clone, Debug, Serialize, Deserialize, Copy)]
333+
#[derive(Clone, Debug, Serialize, Deserialize, Copy, Default)]
334334
pub struct PublicSegmentRanges {
335335
pub output: SegmentRange,
336336
pub pedersen: Option<SegmentRange>,
@@ -503,7 +503,7 @@ impl PublicSegmentRanges {
503503

504504
pub type MemorySection = Vec<PubMemoryValue>;
505505

506-
#[derive(Serialize, Deserialize, CairoSerialize, CairoDeserialize)]
506+
#[derive(Serialize, Deserialize, CairoSerialize, CairoDeserialize, Default)]
507507
pub struct PublicMemory {
508508
pub program: MemorySection,
509509
pub public_segments: PublicSegmentRanges,

stwo_cairo_prover/crates/common/casm_registry.json

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,23 @@
11
{
2-
"air_version": "4b1289f2",
2+
"air_version": "a6bb4c5d-dirty",
33
"air_fns": {
4+
"memory_address_to_id": {
5+
"trace_type": "Memory",
6+
"log_height": null,
7+
"num_state_cols": 1,
8+
"use_lookup_cols": {},
9+
"yield_lookup_cols": {
10+
"MemoryAddressToId": 1
11+
},
12+
"lookup_rows": {},
13+
"padding_type": "Multiplicity",
14+
"total_num_trace_cols": 6,
15+
"trace_cells_upper_bound": 6,
16+
"uses_upper_bound": {},
17+
"rows_upper_bound": {},
18+
"max_instances_uses_limit": 2147483647,
19+
"max_instances_rows_limit": 268435456
20+
},
421
"range_check_9_9": {
522
"trace_type": "Component",
623
"log_height": 18,
@@ -25,55 +42,6 @@
2542
"max_instances_uses_limit": 2147483647,
2643
"max_instances_rows_limit": 268435456
2744
},
28-
"memory_id_to_small": {
29-
"trace_type": "Memory",
30-
"log_height": null,
31-
"num_state_cols": 8,
32-
"use_lookup_cols": {
33-
"RangeCheck_9_9": 1,
34-
"RangeCheck_9_9_B": 1,
35-
"RangeCheck_9_9_C": 1,
36-
"RangeCheck_9_9_D": 1
37-
},
38-
"yield_lookup_cols": {
39-
"MemoryIdToBig": 1
40-
},
41-
"lookup_rows": {
42-
"RangeCheck_9_9": 1,
43-
"RangeCheck_9_9_B": 1,
44-
"RangeCheck_9_9_C": 1,
45-
"RangeCheck_9_9_D": 1
46-
},
47-
"padding_type": "Multiplicity",
48-
"total_num_trace_cols": 21,
49-
"trace_cells_upper_bound": 21,
50-
"uses_upper_bound": {
51-
"range_check_9_9": 1,
52-
"range_check_9_9_b": 1,
53-
"range_check_9_9_c": 1,
54-
"range_check_9_9_d": 1
55-
},
56-
"rows_upper_bound": {},
57-
"max_instances_uses_limit": 2147483647,
58-
"max_instances_rows_limit": 268435456
59-
},
60-
"memory_address_to_id": {
61-
"trace_type": "Memory",
62-
"log_height": null,
63-
"num_state_cols": 1,
64-
"use_lookup_cols": {},
65-
"yield_lookup_cols": {
66-
"MemoryAddressToId": 1
67-
},
68-
"lookup_rows": {},
69-
"padding_type": "Multiplicity",
70-
"total_num_trace_cols": 6,
71-
"trace_cells_upper_bound": 6,
72-
"uses_upper_bound": {},
73-
"rows_upper_bound": {},
74-
"max_instances_uses_limit": 2147483647,
75-
"max_instances_rows_limit": 268435456
76-
},
7745
"memory_id_to_big": {
7846
"trace_type": "Memory",
7947
"log_height": null,
@@ -2320,6 +2288,38 @@
23202288
},
23212289
"max_instances_uses_limit": 3715369,
23222290
"max_instances_rows_limit": 2097152
2291+
},
2292+
"memory_id_to_small": {
2293+
"trace_type": "Memory",
2294+
"log_height": null,
2295+
"num_state_cols": 8,
2296+
"use_lookup_cols": {
2297+
"RangeCheck_9_9": 1,
2298+
"RangeCheck_9_9_B": 1,
2299+
"RangeCheck_9_9_C": 1,
2300+
"RangeCheck_9_9_D": 1
2301+
},
2302+
"yield_lookup_cols": {
2303+
"MemoryIdToBig": 1
2304+
},
2305+
"lookup_rows": {
2306+
"RangeCheck_9_9": 1,
2307+
"RangeCheck_9_9_B": 1,
2308+
"RangeCheck_9_9_C": 1,
2309+
"RangeCheck_9_9_D": 1
2310+
},
2311+
"padding_type": "Multiplicity",
2312+
"total_num_trace_cols": 21,
2313+
"trace_cells_upper_bound": 21,
2314+
"uses_upper_bound": {
2315+
"range_check_9_9": 1,
2316+
"range_check_9_9_b": 1,
2317+
"range_check_9_9_c": 1,
2318+
"range_check_9_9_d": 1
2319+
},
2320+
"rows_upper_bound": {},
2321+
"max_instances_uses_limit": 2147483647,
2322+
"max_instances_rows_limit": 268435456
23232323
}
23242324
}
23252325
}

stwo_cairo_prover/crates/common/src/builtins.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ pub const MUL_MOD_MEMORY_CELLS: usize = 7;
77
pub const PEDERSEN_MEMORY_CELLS: usize = 3;
88
pub const POSEIDON_MEMORY_CELLS: usize = 6;
99
pub const RANGE_CHECK_MEMORY_CELLS: usize = 1;
10+
pub const RANGE_CHECK96_MEMORY_CELLS: usize = 1;
1011
pub const OUTPUT_MEMORY_CELLS: usize = 1;

stwo_cairo_prover/crates/prover/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ stwo.workspace = true
3535
stwo-constraint-framework = { workspace = true, features = ["parallel"] }
3636
tracing.workspace = true
3737
dashmap.workspace = true
38+
indexmap = "2.2.6"
3839

3940
[target.'cfg(not(any(target_arch = "wasm32", target_arch = "wasm64")))'.dependencies]
4041
sonic-rs.workspace = true

0 commit comments

Comments
 (0)