Skip to content

Commit 4380f02

Browse files
committed
integrate cairo claim generator auto gen into stwo-cairo
1 parent 7e9cf0f commit 4380f02

File tree

23 files changed

+37600
-37077
lines changed

23 files changed

+37600
-37077
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/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ version = "0.1.1"
1616
edition = "2021"
1717

1818
[workspace.dependencies]
19+
indexmap = "2.2.6"
1920
bincode = "1.3"
2021
bzip2 = { version = "0.5.0", default-features = false, features = ["libbz2-rs-sys"] }
2122
bytemuck = { version = "1.20.0", features = ["derive"] }
2223
cairo-lang-casm = "=2.14.1-dev.0"
2324
cairo-lang-runner = "=2.14.1-dev.0"
2425
cairo-lang-executable = "=2.14.1-dev.0"
25-
cairo-lang-utils = "=2.14.1-dev.0"
26+
cairo-lang-utils = "=2.14.1-dev.0"
2627
# TODO(yuval): Use an official version, not a specific commit.
2728
# Note: This revision does not originate from the main branch but from 'starkware-development'.
2829
cairo-vm = { version = "3.0.0", features = [

stwo_cairo_prover/crates/adapter/src/builtins.rs

Lines changed: 50 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ use cairo_vm::types::builtin_name::BuiltinName;
66
use cairo_vm::types::relocatable::MaybeRelocatable;
77
use serde::{Deserialize, Serialize};
88
use stwo_cairo_common::builtins::{
9-
ADD_MOD_MEMORY_CELLS, BITWISE_MEMORY_CELLS, ECDSA_MEMORY_CELLS, EC_OP_MEMORY_CELLS,
10-
KECCAK_MEMORY_CELLS, MUL_MOD_MEMORY_CELLS, OUTPUT_MEMORY_CELLS, PEDERSEN_MEMORY_CELLS,
11-
POSEIDON_MEMORY_CELLS, RANGE_CHECK_MEMORY_CELLS,
9+
ADD_MOD_BUILTIN_MEMORY_CELLS, BITWISE_BUILTIN_MEMORY_CELLS, ECDSA_MEMORY_CELLS,
10+
EC_OP_MEMORY_CELLS, KECCAK_MEMORY_CELLS, MUL_MOD_BUILTIN_MEMORY_CELLS, OUTPUT_MEMORY_CELLS,
11+
PEDERSEN_BUILTIN_MEMORY_CELLS, POSEIDON_BUILTIN_MEMORY_CELLS,
12+
RANGE_CHECK_96_BUILTIN_MEMORY_CELLS, RANGE_CHECK_BUILTIN_MEMORY_CELLS,
1213
};
1314
use stwo_cairo_common::prover_types::simd::N_LANES;
1415
use tracing::{info, span, Level};
@@ -36,14 +37,14 @@ impl From<VMMemorySegmentAddresses> for MemorySegmentAddresses {
3637
/// This struct holds the builtins used in a Cairo program.
3738
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
3839
pub struct BuiltinSegments {
39-
pub add_mod: Option<MemorySegmentAddresses>,
40-
pub bitwise: Option<MemorySegmentAddresses>,
40+
pub add_mod_builtin: Option<MemorySegmentAddresses>,
41+
pub bitwise_builtin: Option<MemorySegmentAddresses>,
4142
pub output: Option<MemorySegmentAddresses>,
42-
pub mul_mod: Option<MemorySegmentAddresses>,
43-
pub pedersen: Option<MemorySegmentAddresses>,
44-
pub poseidon: Option<MemorySegmentAddresses>,
45-
pub range_check_bits_96: Option<MemorySegmentAddresses>,
46-
pub range_check_bits_128: Option<MemorySegmentAddresses>,
43+
pub mul_mod_builtin: Option<MemorySegmentAddresses>,
44+
pub pedersen_builtin: Option<MemorySegmentAddresses>,
45+
pub poseidon_builtin: Option<MemorySegmentAddresses>,
46+
pub range_check96_builtin: Option<MemorySegmentAddresses>,
47+
pub range_check_builtin: Option<MemorySegmentAddresses>,
4748
}
4849

4950
impl BuiltinSegments {
@@ -57,20 +58,40 @@ impl BuiltinSegments {
5758
);
5859
};
5960

60-
insert_builtin(BuiltinName::add_mod, &self.add_mod, ADD_MOD_MEMORY_CELLS);
61-
insert_builtin(BuiltinName::bitwise, &self.bitwise, BITWISE_MEMORY_CELLS);
62-
insert_builtin(BuiltinName::mul_mod, &self.mul_mod, MUL_MOD_MEMORY_CELLS);
63-
insert_builtin(BuiltinName::pedersen, &self.pedersen, PEDERSEN_MEMORY_CELLS);
64-
insert_builtin(BuiltinName::poseidon, &self.poseidon, POSEIDON_MEMORY_CELLS);
61+
insert_builtin(
62+
BuiltinName::add_mod,
63+
&self.add_mod_builtin,
64+
ADD_MOD_BUILTIN_MEMORY_CELLS,
65+
);
66+
insert_builtin(
67+
BuiltinName::bitwise,
68+
&self.bitwise_builtin,
69+
BITWISE_BUILTIN_MEMORY_CELLS,
70+
);
71+
insert_builtin(
72+
BuiltinName::mul_mod,
73+
&self.mul_mod_builtin,
74+
MUL_MOD_BUILTIN_MEMORY_CELLS,
75+
);
76+
insert_builtin(
77+
BuiltinName::pedersen,
78+
&self.pedersen_builtin,
79+
PEDERSEN_BUILTIN_MEMORY_CELLS,
80+
);
81+
insert_builtin(
82+
BuiltinName::poseidon,
83+
&self.poseidon_builtin,
84+
POSEIDON_BUILTIN_MEMORY_CELLS,
85+
);
6586
insert_builtin(
6687
BuiltinName::range_check,
67-
&self.range_check_bits_128,
68-
RANGE_CHECK_MEMORY_CELLS,
88+
&self.range_check_builtin,
89+
RANGE_CHECK_BUILTIN_MEMORY_CELLS,
6990
);
7091
insert_builtin(
7192
BuiltinName::range_check96,
72-
&self.range_check_bits_96,
73-
RANGE_CHECK_MEMORY_CELLS,
93+
&self.range_check96_builtin,
94+
RANGE_CHECK_96_BUILTIN_MEMORY_CELLS,
7495
);
7596
insert_builtin(BuiltinName::output, &self.output, OUTPUT_MEMORY_CELLS);
7697
counts
@@ -98,16 +119,16 @@ impl BuiltinSegments {
98119
}
99120

100121
let cells_per_instance = match builtin_name {
101-
BuiltinName::add_mod => ADD_MOD_MEMORY_CELLS,
102-
BuiltinName::bitwise => BITWISE_MEMORY_CELLS,
122+
BuiltinName::add_mod => ADD_MOD_BUILTIN_MEMORY_CELLS,
123+
BuiltinName::bitwise => BITWISE_BUILTIN_MEMORY_CELLS,
103124
BuiltinName::ec_op => EC_OP_MEMORY_CELLS,
104125
BuiltinName::ecdsa => ECDSA_MEMORY_CELLS,
105126
BuiltinName::keccak => KECCAK_MEMORY_CELLS,
106-
BuiltinName::mul_mod => MUL_MOD_MEMORY_CELLS,
107-
BuiltinName::pedersen => PEDERSEN_MEMORY_CELLS,
108-
BuiltinName::poseidon => POSEIDON_MEMORY_CELLS,
109-
BuiltinName::range_check96 => RANGE_CHECK_MEMORY_CELLS,
110-
BuiltinName::range_check => RANGE_CHECK_MEMORY_CELLS,
127+
BuiltinName::mul_mod => MUL_MOD_BUILTIN_MEMORY_CELLS,
128+
BuiltinName::pedersen => PEDERSEN_BUILTIN_MEMORY_CELLS,
129+
BuiltinName::poseidon => POSEIDON_BUILTIN_MEMORY_CELLS,
130+
BuiltinName::range_check96 => RANGE_CHECK_96_BUILTIN_MEMORY_CELLS,
131+
BuiltinName::range_check => RANGE_CHECK_BUILTIN_MEMORY_CELLS,
111132
_ => panic!("Invalid builtin name"),
112133
};
113134
assert!(
@@ -161,7 +182,7 @@ fn get_memory_segment_size(segment: &MemorySegmentAddresses) -> usize {
161182
#[cfg(test)]
162183
mod test_builtin_segments {
163184
use super::*;
164-
use crate::builtins::BITWISE_MEMORY_CELLS;
185+
use crate::builtins::BITWISE_BUILTIN_MEMORY_CELLS;
165186

166187
#[test]
167188
fn test_pad_relocatble_builtin_segments() {
@@ -194,7 +215,7 @@ mod test_builtin_segments {
194215
&builtin_segments,
195216
);
196217

197-
assert!(relocatable_memory[0].len() == 32 * BITWISE_MEMORY_CELLS);
218+
assert!(relocatable_memory[0].len() == 32 * BITWISE_BUILTIN_MEMORY_CELLS);
198219
assert!(relocatable_memory[1].len() == 16 * EC_OP_MEMORY_CELLS);
199220
assert!(relocatable_memory[2].len() == 10);
200221

@@ -218,7 +239,7 @@ mod test_builtin_segments {
218239
)]
219240
fn test_builtin_segment_invalid_size() {
220241
let mul_mod_segment =
221-
vec![Some(MaybeRelocatable::Int(7.into())); MUL_MOD_MEMORY_CELLS * 123 + 3];
242+
vec![Some(MaybeRelocatable::Int(7.into())); MUL_MOD_BUILTIN_MEMORY_CELLS * 123 + 3];
222243
let mut relocatable_memory = [mul_mod_segment];
223244
let builtin_segments = BTreeMap::from([(0, BuiltinName::mul_mod)]);
224245

stwo_cairo_prover/crates/adapter/src/relocator.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,13 @@ impl Relocator {
103103
};
104104

105105
match builtin_name {
106-
BuiltinName::range_check => res.range_check_bits_128 = segment,
107-
BuiltinName::pedersen => res.pedersen = segment,
108-
BuiltinName::bitwise => res.bitwise = segment,
109-
BuiltinName::poseidon => res.poseidon = segment,
110-
BuiltinName::range_check96 => res.range_check_bits_96 = segment,
111-
BuiltinName::add_mod => res.add_mod = segment,
112-
BuiltinName::mul_mod => res.mul_mod = segment,
106+
BuiltinName::range_check => res.range_check_builtin = segment,
107+
BuiltinName::pedersen => res.pedersen_builtin = segment,
108+
BuiltinName::bitwise => res.bitwise_builtin = segment,
109+
BuiltinName::poseidon => res.poseidon_builtin = segment,
110+
BuiltinName::range_check96 => res.range_check96_builtin = segment,
111+
BuiltinName::add_mod => res.add_mod_builtin = segment,
112+
BuiltinName::mul_mod => res.mul_mod_builtin = segment,
113113
BuiltinName::output => res.output = segment,
114114
BuiltinName::ecdsa | BuiltinName::keccak | BuiltinName::ec_op => {
115115
panic!("Builtin {builtin_name} is not supported in Stwo")
@@ -324,14 +324,14 @@ pub mod relocator_tests {
324324
let builtin_segments = relocator.relocate_builtin_segments(&builtin_segments);
325325

326326
assert_eq!(
327-
builtin_segments.bitwise,
327+
builtin_segments.bitwise_builtin,
328328
Some(MemorySegmentAddresses {
329329
begin_addr: 1,
330330
stop_ptr: 81
331331
})
332332
);
333333
assert_eq!(
334-
builtin_segments.range_check_bits_128,
334+
builtin_segments.range_check_builtin,
335335
Some(MemorySegmentAddresses {
336336
begin_addr: 81,
337337
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/cairo-air/src/verifier.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ use stwo::core::fields::qm31::SecureField;
99
use stwo::core::pcs::CommitmentSchemeVerifier;
1010
use stwo::core::verifier::{verify, VerificationError};
1111
use stwo_cairo_common::builtins::{
12-
ADD_MOD_MEMORY_CELLS, BITWISE_MEMORY_CELLS, MUL_MOD_MEMORY_CELLS, PEDERSEN_MEMORY_CELLS,
13-
POSEIDON_MEMORY_CELLS, RANGE_CHECK_MEMORY_CELLS,
12+
ADD_MOD_BUILTIN_MEMORY_CELLS, BITWISE_BUILTIN_MEMORY_CELLS, MUL_MOD_BUILTIN_MEMORY_CELLS,
13+
PEDERSEN_BUILTIN_MEMORY_CELLS, POSEIDON_BUILTIN_MEMORY_CELLS,
14+
RANGE_CHECK_96_BUILTIN_MEMORY_CELLS, RANGE_CHECK_BUILTIN_MEMORY_CELLS,
1415
};
1516
use stwo_cairo_common::memory::{LARGE_MEMORY_VALUE_ID_BASE, LOG_MEMORY_ADDRESS_BOUND};
1617
use stwo_cairo_common::prover_types::cpu::{CasmState, PRIME};
@@ -161,7 +162,7 @@ fn verify_builtins(builtins_claim: &BuiltinsClaim, segment_ranges: &PublicSegmen
161162
}),
162163
$name,
163164
stringify!($name),
164-
[<$name:upper _MEMORY_CELLS>]
165+
[<$name:upper _BUILTIN_MEMORY_CELLS>]
165166
);
166167
}
167168
};
@@ -177,7 +178,7 @@ fn verify_builtins(builtins_claim: &BuiltinsClaim, segment_ranges: &PublicSegmen
177178
}),
178179
range_check_128,
179180
"range_check_128",
180-
RANGE_CHECK_MEMORY_CELLS,
181+
RANGE_CHECK_BUILTIN_MEMORY_CELLS,
181182
);
182183
check_builtin(
183184
builtins_claim
@@ -188,7 +189,7 @@ fn verify_builtins(builtins_claim: &BuiltinsClaim, segment_ranges: &PublicSegmen
188189
}),
189190
range_check_96,
190191
"range_check_96",
191-
RANGE_CHECK_MEMORY_CELLS,
192+
RANGE_CHECK_96_BUILTIN_MEMORY_CELLS,
192193
);
193194
check_builtin_generic!(bitwise);
194195
check_builtin_generic!(add_mod);

0 commit comments

Comments
 (0)