Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add New IO commitment table traces in Memory table trace #1571

Merged
merged 7 commits into from
Apr 17, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions circuits/src/cpu/columns.rs
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,8 @@ pub fn lookup_for_io_memory_tables() -> TableWithTypedOutput<InputOutputMemoryCt
CPU.is_io_store_private,
CPU.is_io_store_public,
CPU.is_call_tape,
CPU.is_events_commitment_tape,
CPU.is_cast_list_commitment_tape,
]),
clk: CPU.clk,
addr: CPU.io_addr,
Expand All @@ -353,6 +355,8 @@ pub fn lookup_for_io_memory_tables() -> TableWithTypedOutput<InputOutputMemoryCt
CPU.is_io_store_private,
CPU.is_io_store_public,
CPU.is_call_tape,
CPU.is_events_commitment_tape,
CPU.is_cast_list_commitment_tape,
]
.iter()
.sum(),
Expand Down
12 changes: 11 additions & 1 deletion circuits/src/generation/fullword_memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ pub fn generate_fullword_memory_trace<F: RichField>(
}
#[cfg(test)]
mod tests {

use mozak_runner::code;
use mozak_runner::elf::Program;
use mozak_runner::instruction::Op::{LW, SW};
Expand All @@ -77,7 +78,9 @@ mod tests {
use crate::generation::fullword_memory::generate_fullword_memory_trace;
use crate::generation::halfword_memory::generate_halfword_memory_trace;
use crate::generation::io_memory::{
generate_io_memory_private_trace, generate_io_memory_public_trace,
generate_call_tape_trace, generate_cast_list_commitment_tape_trace,
generate_events_commitment_tape_trace, generate_io_memory_private_trace,
generate_io_memory_public_trace,
};
use crate::generation::memory::generate_memory_trace;
use crate::generation::memory_zeroinit::generate_memory_zero_init_trace;
Expand Down Expand Up @@ -172,6 +175,10 @@ mod tests {
let fullword_memory = generate_fullword_memory_trace(&record.executed);
let io_memory_private_rows = generate_io_memory_private_trace(&record.executed);
let io_memory_public_rows= generate_io_memory_public_trace(&record.executed);
let call_tape_rows = generate_call_tape_trace(&record.executed);
let events_commitment_tape_rows = generate_events_commitment_tape_trace(&record.executed);
let cast_list_commitment_tape_rows =
generate_cast_list_commitment_tape_trace(&record.executed);
let poseidon2_rows = generate_poseidon2_sponge_trace(&record.executed);
let poseidon2_output_bytes = generate_poseidon2_output_bytes_trace(&poseidon2_rows);
let trace = generate_memory_trace::<GoldilocksField>(
Expand All @@ -182,6 +189,9 @@ mod tests {
&fullword_memory,
&io_memory_private_rows,
&io_memory_public_rows,
&call_tape_rows,
&events_commitment_tape_rows,
&cast_list_commitment_tape_rows,
&poseidon2_rows,
&poseidon2_output_bytes,
);
Expand Down
11 changes: 10 additions & 1 deletion circuits/src/generation/halfword_memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,9 @@ mod tests {
use crate::generation::generate_poseidon2_output_bytes_trace;
use crate::generation::halfword_memory::generate_halfword_memory_trace;
use crate::generation::io_memory::{
generate_io_memory_private_trace, generate_io_memory_public_trace,
generate_call_tape_trace, generate_cast_list_commitment_tape_trace,
generate_events_commitment_tape_trace, generate_io_memory_private_trace,
generate_io_memory_public_trace,
};
use crate::generation::memory::generate_memory_trace;
use crate::generation::memory_zeroinit::generate_memory_zero_init_trace;
Expand Down Expand Up @@ -163,6 +165,10 @@ mod tests {
let fullword_memory = generate_fullword_memory_trace(&record.executed);
let io_memory_private_rows = generate_io_memory_private_trace(&record.executed);
let io_memory_public_rows = generate_io_memory_public_trace(&record.executed);
let call_tape_rows = generate_call_tape_trace(&record.executed);
let events_commitment_tape_rows = generate_events_commitment_tape_trace(&record.executed);
let cast_list_commitment_tape_rows =
generate_cast_list_commitment_tape_trace(&record.executed);
let poseidon2_sponge_rows = generate_poseidon2_sponge_trace(&record.executed);
let poseidon2_output_bytes = generate_poseidon2_output_bytes_trace(&poseidon2_sponge_rows);

Expand All @@ -174,6 +180,9 @@ mod tests {
&fullword_memory,
&io_memory_private_rows,
&io_memory_public_rows,
&call_tape_rows,
&events_commitment_tape_rows,
&cast_list_commitment_tape_rows,
&poseidon2_sponge_rows,
&poseidon2_output_bytes,
);
Expand Down
27 changes: 25 additions & 2 deletions circuits/src/generation/memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,9 @@ pub fn generate_memory_trace<F: RichField>(
fullword_memory_rows: &[FullWordMemory<F>],
io_memory_private_rows: &[InputOutputMemory<F>],
io_memory_public_rows: &[InputOutputMemory<F>],
io_memory_call_tape_rows: &[InputOutputMemory<F>],
io_memory_events_commitment_tape_rows: &[InputOutputMemory<F>],
io_memory_castlist_commitment_tape_rows: &[InputOutputMemory<F>],
poseidon2_sponge_rows: &[Poseidon2Sponge<F>],
poseidon2_output_bytes_rows: &[Poseidon2OutputBytes<F>],
) -> Vec<Memory<F>> {
Expand All @@ -170,6 +173,9 @@ pub fn generate_memory_trace<F: RichField>(
transform_fullword(fullword_memory_rows),
transform_io(io_memory_private_rows),
transform_io(io_memory_public_rows),
transform_io(io_memory_call_tape_rows),
transform_io(io_memory_events_commitment_tape_rows),
transform_io(io_memory_castlist_commitment_tape_rows),
transform_poseidon2_sponge(poseidon2_sponge_rows),
transform_poseidon2_output_bytes(poseidon2_output_bytes_rows,),
)
Expand Down Expand Up @@ -208,7 +214,9 @@ mod tests {
use crate::generation::fullword_memory::generate_fullword_memory_trace;
use crate::generation::halfword_memory::generate_halfword_memory_trace;
use crate::generation::io_memory::{
generate_io_memory_private_trace, generate_io_memory_public_trace,
generate_call_tape_trace, generate_cast_list_commitment_tape_trace,
generate_events_commitment_tape_trace, generate_io_memory_private_trace,
generate_io_memory_public_trace,
};
use crate::generation::memory_zeroinit::generate_memory_zero_init_trace;
use crate::generation::memoryinit::generate_memory_init_trace;
Expand Down Expand Up @@ -273,7 +281,12 @@ mod tests {
let fullword_memory = generate_fullword_memory_trace(&record.executed);
let io_memory_private_rows = generate_io_memory_private_trace(&record.executed);
let io_memory_public_rows = generate_io_memory_public_trace(&record.executed);
let poseidon2_sponge_trace = generate_poseidon2_sponge_trace(&record.executed);

let call_tape_rows = generate_call_tape_trace(&record.executed);
let events_commitment_tape_rows = generate_events_commitment_tape_trace(&record.executed);
let cast_list_commitment_tape_rows =
generate_cast_list_commitment_tape_trace(&record.executed);
let poseidon2_sponge_trace = generate_poseidon2_sponge_trace(&record.executed);
let poseidon2_output_bytes = generate_poseidon2_output_bytes_trace(&poseidon2_sponge_trace);

let trace = super::generate_memory_trace::<GoldilocksField>(
Expand All @@ -284,6 +297,9 @@ mod tests {
&fullword_memory,
&io_memory_private_rows,
&io_memory_public_rows,
&call_tape_rows,
&events_commitment_tape_rows,
&cast_list_commitment_tape_rows,
&poseidon2_sponge_trace,
&poseidon2_output_bytes,
);
Expand Down Expand Up @@ -354,6 +370,10 @@ mod tests {
let fullword_memory = generate_fullword_memory_trace(&[]);
let io_memory_private_rows = generate_io_memory_private_trace(&[]);
let io_memory_public_rows = generate_io_memory_public_trace(&[]);
let call_tape_rows = generate_call_tape_trace(&[]);
let events_commitment_tape_rows = generate_events_commitment_tape_trace(&[]);
let cast_list_commitment_tape_rows =
generate_cast_list_commitment_tape_trace(&[]);
let poseidon2_trace = generate_poseidon2_sponge_trace(&[]);
let poseidon2_output_bytes = generate_poseidon2_output_bytes_trace(&poseidon2_trace);
let trace = super::generate_memory_trace::<F>(
Expand All @@ -364,6 +384,9 @@ mod tests {
&fullword_memory,
&io_memory_private_rows,
&io_memory_public_rows,
&call_tape_rows,
&events_commitment_tape_rows,
&cast_list_commitment_tape_rows,
&poseidon2_trace,
&poseidon2_output_bytes,
);
Expand Down
5 changes: 4 additions & 1 deletion circuits/src/generation/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ pub mod memory;
pub mod memory_zeroinit;
pub mod memoryinit;
pub mod xor;

use std::borrow::Borrow;
use std::fmt::Display;

Expand Down Expand Up @@ -71,6 +70,7 @@ pub const MIN_TRACE_LENGTH: usize = 8;
/// `program`: A serialized ELF Program
/// `record`: Non-constrained execution trace generated by the runner
#[must_use]
#[allow(clippy::too_many_lines)]
pub fn generate_traces<F: RichField + Extendable<D>, const D: usize>(
program: &Program,
record: &ExecutionRecord<F>,
Expand Down Expand Up @@ -110,6 +110,9 @@ pub fn generate_traces<F: RichField + Extendable<D>, const D: usize>(
&fullword_memory_rows,
&io_memory_private_rows,
&io_memory_public_rows,
&call_tape_rows,
&events_commitment_tape_rows,
&cast_list_commitment_tape_rows,
&poseiden2_sponge_rows,
&poseidon2_output_bytes_rows,
);
Expand Down
13 changes: 6 additions & 7 deletions circuits/src/memory_io/stark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ mod tests {

pub fn prove_events_commitment_tape<Stark: ProveAndVerify>(
address: u32,
events_commitment_tape: Vec<u8>,
events_commitment_tape: [u8; 32],
) {
let (program, record) = execute_code_with_runtime_args(
// set sys-call IO_READ in x10(or a0)
Expand All @@ -318,7 +318,7 @@ mod tests {
(REG_A2, u32::try_from(COMMITMENT_SIZE).unwrap()), // A2 - size
],
RuntimeArguments {
events_commitment_tape,
events_commitment_tape: events_commitment_tape.to_vec(),
..Default::default()
},
);
Expand All @@ -334,7 +334,7 @@ mod tests {

pub fn prove_cast_list_commitment_tape<Stark: ProveAndVerify>(
address: u32,
cast_list_commitment_tape: Vec<u8>,
cast_list_commitment_tape: [u8; 32],
) {
let (program, record) = execute_code_with_runtime_args(
// set sys-call IO_READ in x10(or a0)
Expand All @@ -348,7 +348,7 @@ mod tests {
(REG_A2, u32::try_from(COMMITMENT_SIZE).unwrap()), // A2 - size
],
RuntimeArguments {
cast_list_commitment_tape,
cast_list_commitment_tape: cast_list_commitment_tape.to_vec(),
..Default::default()
},
);
Expand Down Expand Up @@ -462,20 +462,19 @@ mod tests {

#[test]
fn prove_events_commitment_tape_mozak(address in u32_extra_except_mozak_ro_memory(), content in u8_extra()) {
prove_events_commitment_tape::<MozakStark<F, D>>(address, vec![content]);
prove_events_commitment_tape::<MozakStark<F, D>>(address, [content; 32]);
}

#[test]
fn prove_cast_list_commitment_tape_mozak(address in u32_extra_except_mozak_ro_memory(), content in u8_extra()) {
prove_cast_list_commitment_tape::<MozakStark<F, D>>(address, vec![content]);
prove_cast_list_commitment_tape::<MozakStark<F, D>>(address, [content; 32]);
}

#[test]
fn prove_io_read_mozak_explicit(address in u32_extra_except_mozak_ro_memory(), content in u8_extra()) {
prove_io_read_explicit::<MozakStark<F, D>>(address, content);
}
}

#[test]
fn test_circuit() -> anyhow::Result<()> {
type C = Poseidon2GoldilocksConfig;
Expand Down
3 changes: 3 additions & 0 deletions circuits/src/rangecheck/generation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,9 @@ mod tests {
&fullword_memory,
&io_memory_private_rows,
&io_memory_public_rows,
&call_tape_rows,
&events_commitment_tape_rows,
&cast_list_commitment_tape_rows,
&poseidon2_sponge_trace,
&poseidon2_output_bytes,
);
Expand Down
7 changes: 5 additions & 2 deletions circuits/src/rangecheck_u8/generation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ mod tests {
let fullword_memory = generate_fullword_memory_trace(&record.executed);
let io_memory_private = generate_io_memory_private_trace(&record.executed);
let io_memory_public = generate_io_memory_public_trace(&record.executed);
let call_tape = generate_call_tape_trace(&record.executed);
let call_tape_rows = generate_call_tape_trace(&record.executed);
let events_commitment_tape_rows = generate_events_commitment_tape_trace(&record.executed);
let cast_list_commitment_tape_rows =
generate_cast_list_commitment_tape_trace(&record.executed);
Expand All @@ -122,6 +122,9 @@ mod tests {
&fullword_memory,
&io_memory_private,
&io_memory_public,
&call_tape_rows,
&events_commitment_tape_rows,
&cast_list_commitment_tape_rows,
&poseidon2_sponge_trace,
&poseidon2_output_bytes,
);
Expand All @@ -130,7 +133,7 @@ mod tests {
&cpu_rows,
&io_memory_private,
&io_memory_public,
&call_tape,
&call_tape_rows,
&events_commitment_tape_rows,
&cast_list_commitment_tape_rows,
&register_init,
Expand Down
7 changes: 6 additions & 1 deletion circuits/src/stark/mozak_stark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -676,6 +676,9 @@ impl Lookups for IntoMemoryTable {
memory_fullword::columns::lookup_for_memory_limb(3),
memory_io::columns::lookup_for_memory(TableKind::IoMemoryPrivate),
memory_io::columns::lookup_for_memory(TableKind::IoMemoryPublic),
memory_io::columns::lookup_for_memory(TableKind::CallTape),
memory_io::columns::lookup_for_memory(TableKind::EventsCommitmentTape),
memory_io::columns::lookup_for_memory(TableKind::CastListCommitmentTape),
Comment on lines +679 to +681
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Plus I added these missing lookups.

],
(0..8).map(poseidon2_sponge::columns::lookup_for_input_memory),
(0..32).map(poseidon2_output_bytes::columns::lookup_for_output_memory),
Expand Down Expand Up @@ -816,7 +819,9 @@ impl Lookups for IoMemoryToCpuTable {
[
TableKind::IoMemoryPrivate,
TableKind::IoMemoryPublic,
TableKind::CallTape
TableKind::CallTape,
TableKind::EventsCommitmentTape,
TableKind::CastListCommitmentTape,
],
0..
)
Expand Down
14 changes: 12 additions & 2 deletions circuits/src/test_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ impl ProveAndVerify for RangeCheckStark<F, D> {
let fullword_memory = generate_fullword_memory_trace(&record.executed);
let io_memory_private = generate_io_memory_private_trace(&record.executed);
let io_memory_public = generate_io_memory_public_trace(&record.executed);
let call_tape = generate_call_tape_trace(&record.executed);
let call_tape_rows = generate_call_tape_trace(&record.executed);
let events_commitment_tape_rows = generate_events_commitment_tape_trace(&record.executed);
let cast_list_commitment_tape_rows =
generate_cast_list_commitment_tape_trace(&record.executed);
Expand All @@ -171,6 +171,9 @@ impl ProveAndVerify for RangeCheckStark<F, D> {
&fullword_memory,
&io_memory_private,
&io_memory_public,
&call_tape_rows,
&events_commitment_tape_rows,
&cast_list_commitment_tape_rows,
&poseidon2_sponge_trace,
&poseidon2_output_bytes,
);
Expand All @@ -179,7 +182,7 @@ impl ProveAndVerify for RangeCheckStark<F, D> {
&cpu_trace,
&io_memory_private,
&io_memory_public,
&call_tape,
&call_tape_rows,
&events_commitment_tape_rows,
&cast_list_commitment_tape_rows,
&register_init,
Expand Down Expand Up @@ -236,6 +239,10 @@ impl ProveAndVerify for MemoryStark<F, D> {
let fullword_memory = generate_fullword_memory_trace(&record.executed);
let io_memory_private = generate_io_memory_private_trace(&record.executed);
let io_memory_public = generate_io_memory_public_trace(&record.executed);
let call_tape_rows = generate_call_tape_trace(&record.executed);
let events_commitment_tape_rows = generate_events_commitment_tape_trace(&record.executed);
let cast_list_commitment_tape_rows =
generate_cast_list_commitment_tape_trace(&record.executed);
let poseidon2_sponge_trace = generate_poseidon2_sponge_trace(&record.executed);
let poseidon2_output_bytes = generate_poseidon2_output_bytes_trace(&poseidon2_sponge_trace);
let trace_poly_values = trace_rows_to_poly_values(generate_memory_trace(
Expand All @@ -246,6 +253,9 @@ impl ProveAndVerify for MemoryStark<F, D> {
&fullword_memory,
&io_memory_private,
&io_memory_public,
&call_tape_rows,
&events_commitment_tape_rows,
&cast_list_commitment_tape_rows,
&poseidon2_sponge_trace,
&poseidon2_output_bytes,
));
Expand Down