Skip to content
This repository was archived by the owner on Apr 18, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all 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
21 changes: 15 additions & 6 deletions gadgets/src/is_equal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
use eth_types::Field;
use halo2_proofs::{
circuit::{Chip, Region, Value},
plonk::{ConstraintSystem, Error, Expression, VirtualCells},
plonk::{Advice, Column, ConstraintSystem, Error, Expression, VirtualCells},
poly::Rotation,
};

Expand Down Expand Up @@ -58,25 +58,34 @@ pub struct IsEqualChip<F> {
}

impl<F: Field> IsEqualChip<F> {
/// Configure the IsEqual chip.
pub fn configure(
/// Configure the IsEqual chip with value_inv column.
pub fn configure_with_value_inv(
meta: &mut ConstraintSystem<F>,
q_enable: impl FnOnce(&mut VirtualCells<'_, F>) -> Expression<F>,
lhs: impl FnOnce(&mut VirtualCells<'_, F>) -> Expression<F>,
rhs: impl FnOnce(&mut VirtualCells<'_, F>) -> Expression<F>,
value_inv: impl FnOnce(&mut ConstraintSystem<F>) -> Column<Advice>,
) -> IsEqualConfig<F> {
let value = |meta: &mut VirtualCells<F>| lhs(meta) - rhs(meta);
let value_inv = meta.advice_column();

let value_inv = value_inv(meta);
let is_zero_config = IsZeroChip::configure(meta, q_enable, value, value_inv);
let is_equal_expression = is_zero_config.expr();

IsEqualConfig {
is_zero_config,
is_equal_expression,
}
}

/// Configure the IsEqual chip.
pub fn configure(
meta: &mut ConstraintSystem<F>,
q_enable: impl FnOnce(&mut VirtualCells<'_, F>) -> Expression<F>,
lhs: impl FnOnce(&mut VirtualCells<'_, F>) -> Expression<F>,
rhs: impl FnOnce(&mut VirtualCells<'_, F>) -> Expression<F>,
) -> IsEqualConfig<F> {
Self::configure_with_value_inv(meta, q_enable, lhs, rhs, |meta| meta.advice_column())
}

/// Construct an IsEqual chip given a config.
pub fn construct(config: IsEqualConfig<F>) -> Self {
Self { config }
Expand Down
3 changes: 2 additions & 1 deletion zkevm-circuits/src/copy_circuit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -195,11 +195,12 @@ impl<F: Field> SubCircuitConfig<F> for CopyCircuitConfig<F> {
bytecode_table.annotate_columns(meta);
copy_table.annotate_columns(meta);

let is_id_unchange = IsEqualChip::configure(
let is_id_unchange = IsEqualChip::configure_with_value_inv(
meta,
|meta| meta.query_selector(q_step) * not::expr(meta.query_advice(is_last, CURRENT)),
|meta| meta.query_advice(id, CURRENT),
|meta| meta.query_advice(id, NEXT_ROW),
|meta| meta.advice_column_in(SecondPhase),
);

let is_src_end = IsEqualChip::configure(
Expand Down