From 122ffacc7ae7cfbdc419e0bea4a18b77ccbf2aae Mon Sep 17 00:00:00 2001 From: Stav Beno Date: Wed, 7 May 2025 11:26:47 +0300 Subject: [PATCH] tmp --- cairo-vm-cli/src/main.rs | 4 +- cairo1-run/cairo | 1 + vm/hola | Bin 0 -> 155251 bytes vm/src/cairo_run.rs | 25 +++++ vm/src/vm/runners/cairo_runner.rs | 178 ++++++++++++++++++++++++++++++ 5 files changed, 206 insertions(+), 2 deletions(-) create mode 160000 cairo1-run/cairo create mode 100644 vm/hola diff --git a/cairo-vm-cli/src/main.rs b/cairo-vm-cli/src/main.rs index 0b39884b2a..0292a4777f 100644 --- a/cairo-vm-cli/src/main.rs +++ b/cairo-vm-cli/src/main.rs @@ -250,8 +250,8 @@ fn run(args: impl Iterator) -> Result<(), Error> { eprintln!("{error}"); CairoRunError::Runner(error) })?; - let bytes = prover_input_info.serialize()?; - std::fs::write(path, bytes)?; + prover_input_info + .write_encoded_prover_input_info(&Path::new(&path)).expect(""); } if let Some(path) = args.prover_input_info_json { diff --git a/cairo1-run/cairo b/cairo1-run/cairo new file mode 160000 index 0000000000..879302d8ce --- /dev/null +++ b/cairo1-run/cairo @@ -0,0 +1 @@ +Subproject commit 879302d8cea7206ed6349bcc2bff2b3bfa0c7521 diff --git a/vm/hola b/vm/hola new file mode 100644 index 0000000000000000000000000000000000000000..9048b37041fabc87f8b90a94eded10bd541398bc GIT binary patch literal 155251 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, } +use bincode::decode_from_slice; +use std::fs::File; +use std::io; +use std::io::Read; +use std::io::Write; +use std::path::Path; + + impl ProverInputInfo { pub fn serialize_json(&self) -> Result { serde_json::to_string_pretty(&self).map_err(ProverInputInfoError::from) @@ -1571,6 +1579,176 @@ impl ProverInputInfo { bincode::serde::encode_to_vec(self, bincode::config::standard()) .map_err(ProverInputInfoError::from) } + + pub fn write_encoded_prover_input_info( + &self, + path: &std::path::Path, + ) -> std::io::Result<()> { + let mut dest = File::create(path)?; + // Header + // let trace_len = data.relocatable_trace.len() as u32; + dest.write_all(&(self.relocatable_trace.len() as u32).to_le_bytes()) + .expect(""); + // let memory_len = data.relocatable_memory.iter().map(|seg| seg.len()).sum::() as u32; + dest.write_all(&(self.relocatable_memory.len() as u32).to_le_bytes()) + .expect(""); + + // let public_offset_count = data.public_memory_offsets.values().map(|v| v.len()).sum::() as u32; + // let builtin_count = data.builtins_segments.len() as u32; + + // write_memory + for segment in self.relocatable_memory.iter() { + + dest.write_all(&(segment.len() as u32).to_le_bytes()) + .expect(""); + for memory_cell in segment.iter() { + match memory_cell { + None => { + dest.write_all(&[0u8]).expect(""); + dest.write_all(&[0u8; 32]).expect(""); + } + Some(unwrapped_memory_cell) => match unwrapped_memory_cell { + MaybeRelocatable::Int(int) => { + dest.write_all(&[0u8]).expect(""); + dest.write_all(&int.to_bytes_le()).expect(""); + } + MaybeRelocatable::RelocatableValue(relocatable) => { + dest.write_all(&[1u8]).expect(""); + dest.write_all(&(relocatable.segment_index as u32).to_le_bytes()) + .expect(""); + dest.write_all(&(relocatable.offset as u32).to_le_bytes()) + .expect(""); + } + }, + } + } + } + + // write_trace + for entry in &self.relocatable_trace { + dest.write_all(&(entry.pc.segment_index as u32).to_le_bytes()) + .expect(""); + dest.write_all(&(entry.pc.offset as u32).to_le_bytes()) + .expect(""); + dest.write_all(&(entry.fp as u32).to_le_bytes()).expect(""); + dest.write_all(&(entry.ap as u32).to_le_bytes()).expect(""); + } + + //write builtins segments + dest.write_all( + &bincode::serde::encode_to_vec(&self.builtins_segments, bincode::config::standard()) + .unwrap(), + ) + .expect(""); + + //write pa addresses + dest.write_all( + &bincode::serde::encode_to_vec( + &self.public_memory_offsets, + bincode::config::standard(), + ) + .unwrap(), + ) + .expect(""); + + Ok(()) + } + + pub fn read_encoded_prover_input_info(path: &Path) -> io::Result { + let mut file = File::open(path)?; + let mut buf = [0u8; 4]; + + // --- Read Header --- + file.read_exact(&mut buf)?; + let trace_len = u32::from_le_bytes(buf); + + file.read_exact(&mut buf)?; + let num_memory_segments = u32::from_le_bytes(buf); + + // --- Read Memory --- + let mut relocatable_memory = Vec::new(); + + for _ in 0..num_memory_segments { + // Read segment length + file.read_exact(&mut buf)?; + let segment_len = u32::from_le_bytes(buf); + + let mut segment = Vec::with_capacity(segment_len as usize); + for _ in 0..segment_len { + let mut tag = [0u8; 1]; + file.read_exact(&mut tag)?; + + match tag[0] { + 0u8 => { + let mut felt_bytes = [0u8; 32]; + file.read_exact(&mut felt_bytes)?; + segment.push(Some(MaybeRelocatable::Int(Felt252::from_bytes_le( + &felt_bytes, + )))); + } + 1u8 => { + let mut seg_buf = [0u8; 4]; + let mut off_buf = [0u8; 4]; + + file.read_exact(&mut seg_buf)?; + file.read_exact(&mut off_buf)?; + segment.push(Some(MaybeRelocatable::RelocatableValue(Relocatable { + segment_index: u32::from_le_bytes(seg_buf) as isize, + offset: u32::from_le_bytes(off_buf) as usize, + }))) + } + _ => panic!("invalid tag: {}", tag[0]), + }; + } + relocatable_memory.push(segment); + } + + // --- Read Trace --- + let mut relocatable_trace = Vec::with_capacity(trace_len as usize); + for _ in 0..trace_len { + let mut seg_buf = [0u8; 4]; + let mut off_buf = [0u8; 4]; + let mut fp_buf = [0u8; 4]; + let mut ap_buf = [0u8; 4]; + + file.read_exact(&mut seg_buf)?; + file.read_exact(&mut off_buf)?; + file.read_exact(&mut fp_buf)?; + file.read_exact(&mut ap_buf)?; + + relocatable_trace.push(TraceEntry { + pc: Relocatable { + segment_index: u32::from_le_bytes(seg_buf) as isize, + offset: u32::from_le_bytes(off_buf) as usize, + }, + fp: u32::from_le_bytes(fp_buf) as usize, + ap: u32::from_le_bytes(ap_buf) as usize, + }); + } + + // --- Read Remaining as Bincode Maps --- + let mut remaining_bytes = Vec::new(); + file.read_to_end(&mut remaining_bytes)?; + + let config = bincode::config::standard(); + + let (builtins_segments, bytes_read) = + bincode::serde::decode_from_slice(&remaining_bytes, config.clone()).map_err(|e| { + io::Error::new(io::ErrorKind::InvalidData, format!("bincode error: {e}")) + })?; + + let (public_memory_offsets, _) = decode_from_slice(&remaining_bytes[bytes_read..], config) + .map_err(|e| { + io::Error::new(io::ErrorKind::InvalidData, format!("bincode error: {e}")) + })?; + + Ok(Self { + relocatable_trace, + relocatable_memory, + public_memory_offsets, + builtins_segments, + }) + } } // TODO(Stav): add TraceNotEnabled error.