Merge pull request #833 from mir-protocol/witness_gen_fixes

Fixes & re-enabling most constraints
This commit is contained in:
Daniel Lubarov 2022-12-03 08:53:28 -08:00 committed by GitHub
commit 4a0fbb289c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 26 deletions

View File

@ -105,8 +105,9 @@ pub(crate) fn eval_bootstrap_kernel<F: Field, P: PackedField<Scalar = F>>(
.zip(local_values.general.keccak().output_limbs) .zip(local_values.general.keccak().output_limbs)
{ {
let expected = P::from(F::from_canonical_u32(expected)); let expected = P::from(F::from_canonical_u32(expected));
let diff = expected - actual; let _diff = expected - actual;
yield_constr.constraint_transition(delta_is_bootstrap * diff); // TODO: Not working yet.
// yield_constr.constraint_transition(delta_is_bootstrap * diff);
} }
} }
@ -146,7 +147,8 @@ pub(crate) fn eval_bootstrap_kernel_circuit<F: RichField + Extendable<D>, const
{ {
let expected = builder.constant_extension(F::Extension::from_canonical_u32(expected)); let expected = builder.constant_extension(F::Extension::from_canonical_u32(expected));
let diff = builder.sub_extension(expected, actual); let diff = builder.sub_extension(expected, actual);
let constraint = builder.mul_extension(delta_is_bootstrap, diff); let _constraint = builder.mul_extension(delta_is_bootstrap, diff);
yield_constr.constraint_transition(builder, constraint); // TODO: Not working yet.
// yield_constr.constraint_transition(builder, constraint);
} }
} }

View File

@ -136,7 +136,7 @@ impl<F: RichField + Extendable<D>, const D: usize> Stark<F, D> for CpuStark<F, D
fn eval_packed_generic<FE, P, const D2: usize>( fn eval_packed_generic<FE, P, const D2: usize>(
&self, &self,
vars: StarkEvaluationVars<FE, P, { Self::COLUMNS }>, vars: StarkEvaluationVars<FE, P, { Self::COLUMNS }>,
_yield_constr: &mut ConstraintConsumer<P>, yield_constr: &mut ConstraintConsumer<P>,
) where ) where
FE: FieldExtension<D2, BaseField = F>, FE: FieldExtension<D2, BaseField = F>,
P: PackedField<Scalar = FE>, P: PackedField<Scalar = FE>,
@ -145,25 +145,25 @@ impl<F: RichField + Extendable<D>, const D: usize> Stark<F, D> for CpuStark<F, D
let next_values = vars.next_values.borrow(); let next_values = vars.next_values.borrow();
// TODO: Some failing constraints temporarily disabled by using this dummy consumer. // TODO: Some failing constraints temporarily disabled by using this dummy consumer.
let mut dummy_yield_constr = ConstraintConsumer::new(vec![], P::ZEROS, P::ZEROS, P::ZEROS); let mut dummy_yield_constr = ConstraintConsumer::new(vec![], P::ZEROS, P::ZEROS, P::ZEROS);
bootstrap_kernel::eval_bootstrap_kernel(vars, &mut dummy_yield_constr); bootstrap_kernel::eval_bootstrap_kernel(vars, yield_constr);
control_flow::eval_packed_generic(local_values, next_values, &mut dummy_yield_constr); control_flow::eval_packed_generic(local_values, next_values, yield_constr);
decode::eval_packed_generic(local_values, &mut dummy_yield_constr); decode::eval_packed_generic(local_values, yield_constr);
dup_swap::eval_packed(local_values, &mut dummy_yield_constr); dup_swap::eval_packed(local_values, yield_constr);
jumps::eval_packed(local_values, next_values, &mut dummy_yield_constr); jumps::eval_packed(local_values, next_values, &mut dummy_yield_constr);
membus::eval_packed(local_values, &mut dummy_yield_constr); membus::eval_packed(local_values, yield_constr);
modfp254::eval_packed(local_values, &mut dummy_yield_constr); modfp254::eval_packed(local_values, yield_constr);
shift::eval_packed(local_values, &mut dummy_yield_constr); shift::eval_packed(local_values, yield_constr);
simple_logic::eval_packed(local_values, &mut dummy_yield_constr); simple_logic::eval_packed(local_values, yield_constr);
stack::eval_packed(local_values, &mut dummy_yield_constr); stack::eval_packed(local_values, yield_constr);
stack_bounds::eval_packed(local_values, &mut dummy_yield_constr); stack_bounds::eval_packed(local_values, &mut dummy_yield_constr);
syscalls::eval_packed(local_values, next_values, &mut dummy_yield_constr); syscalls::eval_packed(local_values, next_values, yield_constr);
} }
fn eval_ext_circuit( fn eval_ext_circuit(
&self, &self,
builder: &mut plonky2::plonk::circuit_builder::CircuitBuilder<F, D>, builder: &mut plonky2::plonk::circuit_builder::CircuitBuilder<F, D>,
vars: StarkEvaluationTargets<D, { Self::COLUMNS }>, vars: StarkEvaluationTargets<D, { Self::COLUMNS }>,
_yield_constr: &mut RecursiveConstraintConsumer<F, D>, yield_constr: &mut RecursiveConstraintConsumer<F, D>,
) { ) {
let local_values = vars.local_values.borrow(); let local_values = vars.local_values.borrow();
let next_values = vars.next_values.borrow(); let next_values = vars.next_values.borrow();
@ -171,18 +171,18 @@ impl<F: RichField + Extendable<D>, const D: usize> Stark<F, D> for CpuStark<F, D
let zero = builder.zero_extension(); let zero = builder.zero_extension();
let mut dummy_yield_constr = let mut dummy_yield_constr =
RecursiveConstraintConsumer::new(zero, vec![], zero, zero, zero); RecursiveConstraintConsumer::new(zero, vec![], zero, zero, zero);
bootstrap_kernel::eval_bootstrap_kernel_circuit(builder, vars, &mut dummy_yield_constr); bootstrap_kernel::eval_bootstrap_kernel_circuit(builder, vars, yield_constr);
control_flow::eval_ext_circuit(builder, local_values, next_values, &mut dummy_yield_constr); control_flow::eval_ext_circuit(builder, local_values, next_values, yield_constr);
decode::eval_ext_circuit(builder, local_values, &mut dummy_yield_constr); decode::eval_ext_circuit(builder, local_values, yield_constr);
dup_swap::eval_ext_circuit(builder, local_values, &mut dummy_yield_constr); dup_swap::eval_ext_circuit(builder, local_values, yield_constr);
jumps::eval_ext_circuit(builder, local_values, next_values, &mut dummy_yield_constr); jumps::eval_ext_circuit(builder, local_values, next_values, &mut dummy_yield_constr);
membus::eval_ext_circuit(builder, local_values, &mut dummy_yield_constr); membus::eval_ext_circuit(builder, local_values, yield_constr);
modfp254::eval_ext_circuit(builder, local_values, &mut dummy_yield_constr); modfp254::eval_ext_circuit(builder, local_values, yield_constr);
shift::eval_ext_circuit(builder, local_values, &mut dummy_yield_constr); shift::eval_ext_circuit(builder, local_values, yield_constr);
simple_logic::eval_ext_circuit(builder, local_values, &mut dummy_yield_constr); simple_logic::eval_ext_circuit(builder, local_values, yield_constr);
stack::eval_ext_circuit(builder, local_values, &mut dummy_yield_constr); stack::eval_ext_circuit(builder, local_values, yield_constr);
stack_bounds::eval_ext_circuit(builder, local_values, &mut dummy_yield_constr); stack_bounds::eval_ext_circuit(builder, local_values, &mut dummy_yield_constr);
syscalls::eval_ext_circuit(builder, local_values, next_values, &mut dummy_yield_constr); syscalls::eval_ext_circuit(builder, local_values, next_values, yield_constr);
} }
fn constraint_degree(&self) -> usize { fn constraint_degree(&self) -> usize {

View File

@ -225,6 +225,10 @@ fn perform_op<F: Field>(
fn try_perform_instruction<F: Field>(state: &mut GenerationState<F>) -> Result<(), ProgramError> { fn try_perform_instruction<F: Field>(state: &mut GenerationState<F>) -> Result<(), ProgramError> {
let mut row: CpuColumnsView<F> = CpuColumnsView::default(); let mut row: CpuColumnsView<F> = CpuColumnsView::default();
row.is_cpu_cycle = F::ONE; row.is_cpu_cycle = F::ONE;
row.context = F::from_canonical_usize(state.registers.context);
row.program_counter = F::from_canonical_usize(state.registers.program_counter);
row.is_kernel_mode = F::from_bool(state.registers.is_kernel);
row.stack_len = F::from_canonical_usize(state.registers.stack_len);
let opcode = read_code_memory(state, &mut row); let opcode = read_code_memory(state, &mut row);
let op = decode(state.registers, opcode)?; let op = decode(state.registers, opcode)?;