diff --git a/src/circuit.rs b/src/circuit.rs index 2050b6f3..4bc5da2c 100644 --- a/src/circuit.rs +++ b/src/circuit.rs @@ -195,8 +195,12 @@ impl plonk::Circuit for Circuit { }); // Fixed columns for the Sinsemilla generator lookup table - let table_idx = meta.fixed_column(); - let lookup = (table_idx, meta.fixed_column(), meta.fixed_column()); + let table_idx = meta.lookup_table_column(); + let lookup = ( + table_idx, + meta.lookup_table_column(), + meta.lookup_table_column(), + ); // Instance column used for public inputs let primary = meta.instance_column(); diff --git a/src/circuit/gadget/ecc.rs b/src/circuit/gadget/ecc.rs index fce9fe3d..93a85974 100644 --- a/src/circuit/gadget/ecc.rs +++ b/src/circuit/gadget/ecc.rs @@ -433,7 +433,7 @@ mod tests { meta.advice_column(), meta.advice_column(), ]; - let lookup_table = meta.fixed_column(); + let lookup_table = meta.lookup_table_column(); let lagrange_coeffs = [ meta.fixed_column(), meta.fixed_column(), diff --git a/src/circuit/gadget/ecc/chip/mul_fixed/short.rs b/src/circuit/gadget/ecc/chip/mul_fixed/short.rs index e8b2606b..0c3223d7 100644 --- a/src/circuit/gadget/ecc/chip/mul_fixed/short.rs +++ b/src/circuit/gadget/ecc/chip/mul_fixed/short.rs @@ -402,7 +402,7 @@ pub mod tests { meta.advice_column(), meta.advice_column(), ]; - let lookup_table = meta.fixed_column(); + let lookup_table = meta.lookup_table_column(); let lagrange_coeffs = [ meta.fixed_column(), meta.fixed_column(), diff --git a/src/circuit/gadget/sinsemilla.rs b/src/circuit/gadget/sinsemilla.rs index 0216a97b..9a8bc5bd 100644 --- a/src/circuit/gadget/sinsemilla.rs +++ b/src/circuit/gadget/sinsemilla.rs @@ -460,7 +460,7 @@ mod tests { let constants = meta.fixed_column(); meta.enable_constant(constants); - let table_idx = meta.fixed_column(); + let table_idx = meta.lookup_table_column(); let lagrange_coeffs = [ meta.fixed_column(), meta.fixed_column(), @@ -473,7 +473,11 @@ mod tests { ]; // Fixed columns for the Sinsemilla generator lookup table - let lookup = (table_idx, meta.fixed_column(), meta.fixed_column()); + let lookup = ( + table_idx, + meta.lookup_table_column(), + meta.lookup_table_column(), + ); let range_check = LookupRangeCheckConfig::configure(meta, advices[9], table_idx); diff --git a/src/circuit/gadget/sinsemilla/chip.rs b/src/circuit/gadget/sinsemilla/chip.rs index afb1292d..a665e1f9 100644 --- a/src/circuit/gadget/sinsemilla/chip.rs +++ b/src/circuit/gadget/sinsemilla/chip.rs @@ -16,7 +16,10 @@ use crate::{ use halo2::{ arithmetic::{CurveAffine, FieldExt}, circuit::{Chip, Layouter}, - plonk::{Advice, Column, ConstraintSystem, Error, Expression, Fixed, Selector, VirtualCells}, + plonk::{ + Advice, Column, ConstraintSystem, Error, Expression, Fixed, Selector, TableColumn, + VirtualCells, + }, poly::Rotation, }; use pasta_curves::pallas; @@ -114,7 +117,7 @@ impl SinsemillaChip { advices: [Column; 5], witness_pieces: Column, fixed_y_q: Column, - lookup: (Column, Column, Column), + lookup: (TableColumn, TableColumn, TableColumn), range_check: LookupRangeCheckConfig, ) -> >::Config { // Enable equality on all advice columns diff --git a/src/circuit/gadget/sinsemilla/chip/generator_table.rs b/src/circuit/gadget/sinsemilla/chip/generator_table.rs index d3e72ca6..0861dd1e 100644 --- a/src/circuit/gadget/sinsemilla/chip/generator_table.rs +++ b/src/circuit/gadget/sinsemilla/chip/generator_table.rs @@ -1,7 +1,7 @@ use crate::primitives::sinsemilla::{self, sinsemilla_s_generators, S_PERSONALIZATION}; use halo2::{ circuit::Layouter, - plonk::{Column, ConstraintSystem, Error, Expression, Fixed}, + plonk::{ConstraintSystem, Error, Expression, TableColumn}, poly::Rotation, }; @@ -15,9 +15,9 @@ use group::Curve; /// Table containing independent generators S[0..2^k] #[derive(Eq, PartialEq, Copy, Clone, Debug)] pub struct GeneratorTableConfig { - pub table_idx: Column, - pub table_x: Column, - pub table_y: Column, + pub table_idx: TableColumn, + pub table_x: TableColumn, + pub table_y: TableColumn, } impl GeneratorTableConfig { @@ -84,15 +84,15 @@ impl GeneratorTableConfig { } pub fn load(&self, layouter: &mut impl Layouter) -> Result<(), Error> { - layouter.assign_region( + layouter.assign_table( || "generator_table", - |mut gate| { + |mut table| { // We generate the row values lazily (we only need them during keygen). let mut rows = sinsemilla_s_generators(); for index in 0..(1 << sinsemilla::K) { let mut row = None; - gate.assign_fixed( + table.assign_cell( || "table_idx", self.table_idx, index, @@ -101,13 +101,13 @@ impl GeneratorTableConfig { Ok(pallas::Base::from_u64(index as u64)) }, )?; - gate.assign_fixed( + table.assign_cell( || "table_x", self.table_x, index, || row.map(|(x, _)| x).ok_or(Error::SynthesisError), )?; - gate.assign_fixed( + table.assign_cell( || "table_y", self.table_y, index, diff --git a/src/circuit/gadget/sinsemilla/commit_ivk.rs b/src/circuit/gadget/sinsemilla/commit_ivk.rs index 414b8426..35014384 100644 --- a/src/circuit/gadget/sinsemilla/commit_ivk.rs +++ b/src/circuit/gadget/sinsemilla/commit_ivk.rs @@ -698,8 +698,12 @@ mod tests { meta.enable_equality((*advice).into()); } - let table_idx = meta.fixed_column(); - let lookup = (table_idx, meta.fixed_column(), meta.fixed_column()); + let table_idx = meta.lookup_table_column(); + let lookup = ( + table_idx, + meta.lookup_table_column(), + meta.lookup_table_column(), + ); let lagrange_coeffs = [ meta.fixed_column(), meta.fixed_column(), diff --git a/src/circuit/gadget/sinsemilla/merkle.rs b/src/circuit/gadget/sinsemilla/merkle.rs index d54ac5d3..672dcf3c 100644 --- a/src/circuit/gadget/sinsemilla/merkle.rs +++ b/src/circuit/gadget/sinsemilla/merkle.rs @@ -198,9 +198,9 @@ pub mod tests { // Fixed columns for the Sinsemilla generator lookup table let lookup = ( - meta.fixed_column(), - meta.fixed_column(), - meta.fixed_column(), + meta.lookup_table_column(), + meta.lookup_table_column(), + meta.lookup_table_column(), ); let range_check = LookupRangeCheckConfig::configure(meta, advices[9], lookup.0); diff --git a/src/circuit/gadget/sinsemilla/note_commit.rs b/src/circuit/gadget/sinsemilla/note_commit.rs index 025fa0d2..caf612cc 100644 --- a/src/circuit/gadget/sinsemilla/note_commit.rs +++ b/src/circuit/gadget/sinsemilla/note_commit.rs @@ -1532,8 +1532,12 @@ mod tests { meta.enable_equality((*advice).into()); } - let table_idx = meta.fixed_column(); - let lookup = (table_idx, meta.fixed_column(), meta.fixed_column()); + let table_idx = meta.lookup_table_column(); + let lookup = ( + table_idx, + meta.lookup_table_column(), + meta.lookup_table_column(), + ); let lagrange_coeffs = [ meta.fixed_column(), meta.fixed_column(), diff --git a/src/circuit/gadget/utilities/lookup_range_check.rs b/src/circuit/gadget/utilities/lookup_range_check.rs index f1ce479a..1b7fd682 100644 --- a/src/circuit/gadget/utilities/lookup_range_check.rs +++ b/src/circuit/gadget/utilities/lookup_range_check.rs @@ -4,7 +4,7 @@ use crate::spec::lebs2ip; use halo2::{ circuit::{Layouter, Region}, - plonk::{Advice, Column, ConstraintSystem, Error, Fixed, Selector}, + plonk::{Advice, Column, ConstraintSystem, Error, Selector, TableColumn}, poly::Rotation, }; use std::{convert::TryInto, marker::PhantomData}; @@ -29,7 +29,7 @@ pub struct LookupRangeCheckConfig pub q_running: Selector, pub q_bitshift: Selector, pub running_sum: Column, - table_idx: Column, + table_idx: TableColumn, _marker: PhantomData, } @@ -48,7 +48,7 @@ impl LookupRangeCheckConfig pub fn configure( meta: &mut ConstraintSystem, running_sum: Column, - table_idx: Column, + table_idx: TableColumn, ) -> Self { meta.enable_equality(running_sum.into()); @@ -119,12 +119,12 @@ impl LookupRangeCheckConfig // for now, since the Sinsemilla chip provides a pre-loaded table in the // Orchard context. pub fn load(&self, layouter: &mut impl Layouter) -> Result<(), Error> { - layouter.assign_region( + layouter.assign_table( || "table_idx", - |mut gate| { + |mut table| { // We generate the row values lazily (we only need them during keygen). for index in 0..(1 << K) { - gate.assign_fixed( + table.assign_cell( || "table_idx", self.table_idx, index, @@ -402,7 +402,7 @@ mod tests { fn configure(meta: &mut ConstraintSystem) -> Self::Config { let running_sum = meta.advice_column(); - let table_idx = meta.fixed_column(); + let table_idx = meta.lookup_table_column(); let constants = meta.fixed_column(); meta.enable_constant(constants); @@ -507,7 +507,7 @@ mod tests { fn configure(meta: &mut ConstraintSystem) -> Self::Config { let running_sum = meta.advice_column(); - let table_idx = meta.fixed_column(); + let table_idx = meta.lookup_table_column(); let constants = meta.fixed_column(); meta.enable_constant(constants);