Update to assign_table API.

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
This commit is contained in:
Daira Hopwood 2021-07-27 18:32:32 +01:00
parent a273307661
commit 145da9c510
10 changed files with 51 additions and 32 deletions

View File

@ -195,8 +195,12 @@ impl plonk::Circuit<pallas::Base> for Circuit {
}); });
// Fixed columns for the Sinsemilla generator lookup table // Fixed columns for the Sinsemilla generator lookup table
let table_idx = meta.fixed_column(); let table_idx = meta.lookup_table_column();
let lookup = (table_idx, meta.fixed_column(), meta.fixed_column()); let lookup = (
table_idx,
meta.lookup_table_column(),
meta.lookup_table_column(),
);
// Instance column used for public inputs // Instance column used for public inputs
let primary = meta.instance_column(); let primary = meta.instance_column();

View File

@ -433,7 +433,7 @@ mod tests {
meta.advice_column(), meta.advice_column(),
meta.advice_column(), meta.advice_column(),
]; ];
let lookup_table = meta.fixed_column(); let lookup_table = meta.lookup_table_column();
let lagrange_coeffs = [ let lagrange_coeffs = [
meta.fixed_column(), meta.fixed_column(),
meta.fixed_column(), meta.fixed_column(),

View File

@ -402,7 +402,7 @@ pub mod tests {
meta.advice_column(), meta.advice_column(),
meta.advice_column(), meta.advice_column(),
]; ];
let lookup_table = meta.fixed_column(); let lookup_table = meta.lookup_table_column();
let lagrange_coeffs = [ let lagrange_coeffs = [
meta.fixed_column(), meta.fixed_column(),
meta.fixed_column(), meta.fixed_column(),

View File

@ -460,7 +460,7 @@ mod tests {
let constants = meta.fixed_column(); let constants = meta.fixed_column();
meta.enable_constant(constants); meta.enable_constant(constants);
let table_idx = meta.fixed_column(); let table_idx = meta.lookup_table_column();
let lagrange_coeffs = [ let lagrange_coeffs = [
meta.fixed_column(), meta.fixed_column(),
meta.fixed_column(), meta.fixed_column(),
@ -473,7 +473,11 @@ mod tests {
]; ];
// Fixed columns for the Sinsemilla generator lookup table // 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); let range_check = LookupRangeCheckConfig::configure(meta, advices[9], table_idx);

View File

@ -16,7 +16,10 @@ use crate::{
use halo2::{ use halo2::{
arithmetic::{CurveAffine, FieldExt}, arithmetic::{CurveAffine, FieldExt},
circuit::{Chip, Layouter}, circuit::{Chip, Layouter},
plonk::{Advice, Column, ConstraintSystem, Error, Expression, Fixed, Selector, VirtualCells}, plonk::{
Advice, Column, ConstraintSystem, Error, Expression, Fixed, Selector, TableColumn,
VirtualCells,
},
poly::Rotation, poly::Rotation,
}; };
use pasta_curves::pallas; use pasta_curves::pallas;
@ -114,7 +117,7 @@ impl SinsemillaChip {
advices: [Column<Advice>; 5], advices: [Column<Advice>; 5],
witness_pieces: Column<Advice>, witness_pieces: Column<Advice>,
fixed_y_q: Column<Fixed>, fixed_y_q: Column<Fixed>,
lookup: (Column<Fixed>, Column<Fixed>, Column<Fixed>), lookup: (TableColumn, TableColumn, TableColumn),
range_check: LookupRangeCheckConfig<pallas::Base, { sinsemilla::K }>, range_check: LookupRangeCheckConfig<pallas::Base, { sinsemilla::K }>,
) -> <Self as Chip<pallas::Base>>::Config { ) -> <Self as Chip<pallas::Base>>::Config {
// Enable equality on all advice columns // Enable equality on all advice columns

View File

@ -1,7 +1,7 @@
use crate::primitives::sinsemilla::{self, sinsemilla_s_generators, S_PERSONALIZATION}; use crate::primitives::sinsemilla::{self, sinsemilla_s_generators, S_PERSONALIZATION};
use halo2::{ use halo2::{
circuit::Layouter, circuit::Layouter,
plonk::{Column, ConstraintSystem, Error, Expression, Fixed}, plonk::{ConstraintSystem, Error, Expression, TableColumn},
poly::Rotation, poly::Rotation,
}; };
@ -15,9 +15,9 @@ use group::Curve;
/// Table containing independent generators S[0..2^k] /// Table containing independent generators S[0..2^k]
#[derive(Eq, PartialEq, Copy, Clone, Debug)] #[derive(Eq, PartialEq, Copy, Clone, Debug)]
pub struct GeneratorTableConfig { pub struct GeneratorTableConfig {
pub table_idx: Column<Fixed>, pub table_idx: TableColumn,
pub table_x: Column<Fixed>, pub table_x: TableColumn,
pub table_y: Column<Fixed>, pub table_y: TableColumn,
} }
impl GeneratorTableConfig { impl GeneratorTableConfig {
@ -84,15 +84,15 @@ impl GeneratorTableConfig {
} }
pub fn load(&self, layouter: &mut impl Layouter<pallas::Base>) -> Result<(), Error> { pub fn load(&self, layouter: &mut impl Layouter<pallas::Base>) -> Result<(), Error> {
layouter.assign_region( layouter.assign_table(
|| "generator_table", || "generator_table",
|mut gate| { |mut table| {
// We generate the row values lazily (we only need them during keygen). // We generate the row values lazily (we only need them during keygen).
let mut rows = sinsemilla_s_generators(); let mut rows = sinsemilla_s_generators();
for index in 0..(1 << sinsemilla::K) { for index in 0..(1 << sinsemilla::K) {
let mut row = None; let mut row = None;
gate.assign_fixed( table.assign_cell(
|| "table_idx", || "table_idx",
self.table_idx, self.table_idx,
index, index,
@ -101,13 +101,13 @@ impl GeneratorTableConfig {
Ok(pallas::Base::from_u64(index as u64)) Ok(pallas::Base::from_u64(index as u64))
}, },
)?; )?;
gate.assign_fixed( table.assign_cell(
|| "table_x", || "table_x",
self.table_x, self.table_x,
index, index,
|| row.map(|(x, _)| x).ok_or(Error::SynthesisError), || row.map(|(x, _)| x).ok_or(Error::SynthesisError),
)?; )?;
gate.assign_fixed( table.assign_cell(
|| "table_y", || "table_y",
self.table_y, self.table_y,
index, index,

View File

@ -698,8 +698,12 @@ mod tests {
meta.enable_equality((*advice).into()); meta.enable_equality((*advice).into());
} }
let table_idx = meta.fixed_column(); let table_idx = meta.lookup_table_column();
let lookup = (table_idx, meta.fixed_column(), meta.fixed_column()); let lookup = (
table_idx,
meta.lookup_table_column(),
meta.lookup_table_column(),
);
let lagrange_coeffs = [ let lagrange_coeffs = [
meta.fixed_column(), meta.fixed_column(),
meta.fixed_column(), meta.fixed_column(),

View File

@ -198,9 +198,9 @@ pub mod tests {
// Fixed columns for the Sinsemilla generator lookup table // Fixed columns for the Sinsemilla generator lookup table
let lookup = ( let lookup = (
meta.fixed_column(), meta.lookup_table_column(),
meta.fixed_column(), meta.lookup_table_column(),
meta.fixed_column(), meta.lookup_table_column(),
); );
let range_check = LookupRangeCheckConfig::configure(meta, advices[9], lookup.0); let range_check = LookupRangeCheckConfig::configure(meta, advices[9], lookup.0);

View File

@ -1532,8 +1532,12 @@ mod tests {
meta.enable_equality((*advice).into()); meta.enable_equality((*advice).into());
} }
let table_idx = meta.fixed_column(); let table_idx = meta.lookup_table_column();
let lookup = (table_idx, meta.fixed_column(), meta.fixed_column()); let lookup = (
table_idx,
meta.lookup_table_column(),
meta.lookup_table_column(),
);
let lagrange_coeffs = [ let lagrange_coeffs = [
meta.fixed_column(), meta.fixed_column(),
meta.fixed_column(), meta.fixed_column(),

View File

@ -4,7 +4,7 @@
use crate::spec::lebs2ip; use crate::spec::lebs2ip;
use halo2::{ use halo2::{
circuit::{Layouter, Region}, circuit::{Layouter, Region},
plonk::{Advice, Column, ConstraintSystem, Error, Fixed, Selector}, plonk::{Advice, Column, ConstraintSystem, Error, Selector, TableColumn},
poly::Rotation, poly::Rotation,
}; };
use std::{convert::TryInto, marker::PhantomData}; use std::{convert::TryInto, marker::PhantomData};
@ -29,7 +29,7 @@ pub struct LookupRangeCheckConfig<F: FieldExt + PrimeFieldBits, const K: usize>
pub q_running: Selector, pub q_running: Selector,
pub q_bitshift: Selector, pub q_bitshift: Selector,
pub running_sum: Column<Advice>, pub running_sum: Column<Advice>,
table_idx: Column<Fixed>, table_idx: TableColumn,
_marker: PhantomData<F>, _marker: PhantomData<F>,
} }
@ -48,7 +48,7 @@ impl<F: FieldExt + PrimeFieldBits, const K: usize> LookupRangeCheckConfig<F, K>
pub fn configure( pub fn configure(
meta: &mut ConstraintSystem<F>, meta: &mut ConstraintSystem<F>,
running_sum: Column<Advice>, running_sum: Column<Advice>,
table_idx: Column<Fixed>, table_idx: TableColumn,
) -> Self { ) -> Self {
meta.enable_equality(running_sum.into()); meta.enable_equality(running_sum.into());
@ -119,12 +119,12 @@ impl<F: FieldExt + PrimeFieldBits, const K: usize> LookupRangeCheckConfig<F, K>
// for now, since the Sinsemilla chip provides a pre-loaded table in the // for now, since the Sinsemilla chip provides a pre-loaded table in the
// Orchard context. // Orchard context.
pub fn load(&self, layouter: &mut impl Layouter<F>) -> Result<(), Error> { pub fn load(&self, layouter: &mut impl Layouter<F>) -> Result<(), Error> {
layouter.assign_region( layouter.assign_table(
|| "table_idx", || "table_idx",
|mut gate| { |mut table| {
// We generate the row values lazily (we only need them during keygen). // We generate the row values lazily (we only need them during keygen).
for index in 0..(1 << K) { for index in 0..(1 << K) {
gate.assign_fixed( table.assign_cell(
|| "table_idx", || "table_idx",
self.table_idx, self.table_idx,
index, index,
@ -402,7 +402,7 @@ mod tests {
fn configure(meta: &mut ConstraintSystem<F>) -> Self::Config { fn configure(meta: &mut ConstraintSystem<F>) -> Self::Config {
let running_sum = meta.advice_column(); let running_sum = meta.advice_column();
let table_idx = meta.fixed_column(); let table_idx = meta.lookup_table_column();
let constants = meta.fixed_column(); let constants = meta.fixed_column();
meta.enable_constant(constants); meta.enable_constant(constants);
@ -507,7 +507,7 @@ mod tests {
fn configure(meta: &mut ConstraintSystem<F>) -> Self::Config { fn configure(meta: &mut ConstraintSystem<F>) -> Self::Config {
let running_sum = meta.advice_column(); let running_sum = meta.advice_column();
let table_idx = meta.fixed_column(); let table_idx = meta.lookup_table_column();
let constants = meta.fixed_column(); let constants = meta.fixed_column();
meta.enable_constant(constants); meta.enable_constant(constants);