diff --git a/evm/src/all_stark.rs b/evm/src/all_stark.rs index 4ac6ebbd..10f7acfa 100644 --- a/evm/src/all_stark.rs +++ b/evm/src/all_stark.rs @@ -224,7 +224,7 @@ mod tests { let op = (0..4) .filter(|&o| memory_trace[memory::registers::is_memop(o)].values[i] == F::ONE) .collect_vec()[0]; - + if mem_timestamp != last_timestamp { current_cpu_index += 1; last_timestamp = mem_timestamp; @@ -244,7 +244,6 @@ mod tests { cpu_trace_rows[current_cpu_index][cpu::columns::memop_value(op, j)] = memory_trace[memory::registers::value_limb(j)].values[i]; } - } trace_rows_to_poly_values(cpu_trace_rows) } diff --git a/evm/src/memory/memory_stark.rs b/evm/src/memory/memory_stark.rs index 1daf5319..2b5c54b1 100644 --- a/evm/src/memory/memory_stark.rs +++ b/evm/src/memory/memory_stark.rs @@ -53,6 +53,7 @@ pub fn generate_random_memory_ops( let timestamp = F::from_canonical_usize(i); let mut used_indices = HashSet::new(); let mut new_writes_this_cycle = HashMap::new(); + let mut has_read = false; for _ in 0..2 { let mut channel_index = rng.gen_range(0..4); while used_indices.contains(&channel_index) { @@ -60,7 +61,12 @@ pub fn generate_random_memory_ops( } used_indices.insert(channel_index); - let is_read = if i == 0 { false } else { rng.gen() }; + let is_read = if i == 0 { + false + } else { + !has_read && rng.gen() + }; + has_read = has_read || is_read; let is_read_field = F::from_bool(is_read); let (context, segment, virt, vals) = if is_read { @@ -104,7 +110,6 @@ pub fn generate_random_memory_ops( for (k, v) in new_writes_this_cycle { current_memory_values.insert(k, v); } - } memory_ops @@ -378,33 +383,33 @@ impl, const D: usize> Stark for MemoryStark