From 49d92cb8f1b0ae9de76872f76af4429699ff692f Mon Sep 17 00:00:00 2001 From: Robin Salen Date: Thu, 17 Aug 2023 17:35:35 -0400 Subject: [PATCH] Remove is_bootstrap_kernel column --- evm/src/cpu/bootstrap_kernel.rs | 12 ++++++------ evm/src/cpu/columns/mod.rs | 3 --- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/evm/src/cpu/bootstrap_kernel.rs b/evm/src/cpu/bootstrap_kernel.rs index 4aee617c..c7565709 100644 --- a/evm/src/cpu/bootstrap_kernel.rs +++ b/evm/src/cpu/bootstrap_kernel.rs @@ -25,7 +25,6 @@ pub(crate) fn generate_bootstrap_kernel(state: &mut GenerationState for chunk in &KERNEL.code.iter().enumerate().chunks(NUM_GP_CHANNELS) { let mut cpu_row = CpuColumnsView::default(); cpu_row.clock = F::from_canonical_usize(state.traces.clock()); - cpu_row.is_bootstrap_kernel = F::ONE; // Write this chunk to memory, while simultaneously packing its bytes into a u32 word. for (channel, (addr, &byte)) in chunk.enumerate() { @@ -40,7 +39,6 @@ pub(crate) fn generate_bootstrap_kernel(state: &mut GenerationState let mut final_cpu_row = CpuColumnsView::default(); final_cpu_row.clock = F::from_canonical_usize(state.traces.clock()); - final_cpu_row.is_bootstrap_kernel = F::ONE; final_cpu_row.is_keccak_sponge = F::ONE; // The Keccak sponge CTL uses memory value columns for its inputs and outputs. final_cpu_row.mem_channels[0].value[0] = F::ZERO; // context @@ -66,8 +64,8 @@ pub(crate) fn eval_bootstrap_kernel>( let next_values: &CpuColumnsView<_> = vars.next_values.borrow(); // IS_BOOTSTRAP_KERNEL must have an init value of 1, a final value of 0, and a delta in {0, -1}. - let local_is_bootstrap = local_values.is_bootstrap_kernel; - let next_is_bootstrap = next_values.is_bootstrap_kernel; + let local_is_bootstrap = P::ONES - local_values.op.into_iter().sum::

(); + let next_is_bootstrap = P::ONES - next_values.op.into_iter().sum::

(); yield_constr.constraint_first_row(local_is_bootstrap - P::ONES); yield_constr.constraint_last_row(local_is_bootstrap); let delta_is_bootstrap = next_is_bootstrap - local_is_bootstrap; @@ -113,8 +111,10 @@ pub(crate) fn eval_bootstrap_kernel_circuit, const let one = builder.one_extension(); // IS_BOOTSTRAP_KERNEL must have an init value of 1, a final value of 0, and a delta in {0, -1}. - let local_is_bootstrap = local_values.is_bootstrap_kernel; - let next_is_bootstrap = next_values.is_bootstrap_kernel; + let local_is_bootstrap = builder.add_many_extension(local_values.op.into_iter()); + let local_is_bootstrap = builder.sub_extension(one, local_is_bootstrap); + let next_is_bootstrap = builder.add_many_extension(next_values.op.into_iter()); + let next_is_bootstrap = builder.sub_extension(one, next_is_bootstrap); let constraint = builder.sub_extension(local_is_bootstrap, one); yield_constr.constraint_first_row(builder, constraint); yield_constr.constraint_last_row(builder, local_is_bootstrap); diff --git a/evm/src/cpu/columns/mod.rs b/evm/src/cpu/columns/mod.rs index fecc8df9..134ab02b 100644 --- a/evm/src/cpu/columns/mod.rs +++ b/evm/src/cpu/columns/mod.rs @@ -35,9 +35,6 @@ pub struct MemoryChannelView { #[repr(C)] #[derive(Clone, Copy, Eq, PartialEq, Debug)] pub struct CpuColumnsView { - /// Filter. 1 if the row is part of bootstrapping the kernel code, 0 otherwise. - pub is_bootstrap_kernel: T, - /// If CPU cycle: Current context. // TODO: this is currently unconstrained pub context: T,