@@ -41,10 +41,13 @@ pub type U64HashMap<V> = HashMap<u64, V, U64BuildHasher>;
4141// TODO: Correctly define this
4242const MAX_PUBLIC_OUTPUT_COMMIT_SIZE : u64 = 1024 ;
4343const PUBLIC_OUTPUT_START_INDEX : u64 = 0 ;
44- // Ported from main: increased from 1024 to support larger inputs (ethrex)
45- const MAX_PRIVATE_INPUT_SIZE : u64 = 6700000 ;
46- // Ported from main: fixed high address to avoid overlap with program memory
47- const PRIVATE_INPUT_START_INDEX : u64 = 0xFF000000 ;
44+ /// Maximum size of the private input memory region (in bytes).
45+ pub const MAX_PRIVATE_INPUT_SIZE : u64 = 6700000 ;
46+ /// Fixed high address where private input is mapped. Guest programs can read
47+ /// directly from this address (ZisK-style memory-mapped input).
48+ /// Layout: 4-byte LE length prefix at `PRIVATE_INPUT_START_INDEX`, then data at +4.
49+ /// Must match `PRIVATE_INPUT_START` in `syscalls/src/syscalls.rs`.
50+ pub const PRIVATE_INPUT_START_INDEX : u64 = 0xFF000000 ;
4851
4952#[ derive( Default , Debug ) ]
5053pub struct Memory ( U64HashMap < [ u8 ; 4 ] > ) ;
@@ -151,7 +154,13 @@ impl Memory {
151154 Ok ( self . load_bytes ( PUBLIC_OUTPUT_START_INDEX + 4 , size as u64 ) )
152155 }
153156
157+ /// Pre-loads private input bytes at `PRIVATE_INPUT_START_INDEX` as a
158+ /// 4-byte LE length prefix followed by the raw data. The guest reads these
159+ /// bytes directly via normal RISC-V loads (ZisK-style memory-mapped input).
154160 pub fn store_private_inputs ( & mut self , inputs : Vec < u8 > ) -> Result < ( ) , MemoryError > {
161+ if inputs. is_empty ( ) {
162+ return Ok ( ( ) ) ;
163+ }
155164 if inputs. len ( ) as u64 > MAX_PRIVATE_INPUT_SIZE {
156165 return Err ( MemoryError :: PrivateInputSizeExceeded ) ;
157166 }
@@ -160,13 +169,6 @@ impl Memory {
160169 Ok ( ( ) )
161170 }
162171
163- pub fn load_private_inputs ( & self ) -> Result < Vec < u8 > , MemoryError > {
164- let size = self . load_word ( PRIVATE_INPUT_START_INDEX ) ?;
165- let mut inputs = size. to_le_bytes ( ) . to_vec ( ) ;
166- inputs. extend_from_slice ( & self . load_bytes ( PRIVATE_INPUT_START_INDEX + 4 , size as u64 ) ) ;
167- Ok ( inputs)
168- }
169-
170172 pub fn load_bytes ( & self , mut addr : u64 , len : u64 ) -> Vec < u8 > {
171173 let mut result = Vec :: with_capacity ( len as usize ) ;
172174 let end = addr + len;
0 commit comments