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
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();

View File

@ -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(),

View File

@ -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(),

View File

@ -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);

View File

@ -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<Advice>; 5],
witness_pieces: Column<Advice>,
fixed_y_q: Column<Fixed>,
lookup: (Column<Fixed>, Column<Fixed>, Column<Fixed>),
lookup: (TableColumn, TableColumn, TableColumn),
range_check: LookupRangeCheckConfig<pallas::Base, { sinsemilla::K }>,
) -> <Self as Chip<pallas::Base>>::Config {
// Enable equality on all advice columns

View File

@ -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<Fixed>,
pub table_x: Column<Fixed>,
pub table_y: Column<Fixed>,
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<pallas::Base>) -> 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,

View File

@ -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(),

View File

@ -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);

View File

@ -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(),

View File

@ -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<F: FieldExt + PrimeFieldBits, const K: usize>
pub q_running: Selector,
pub q_bitshift: Selector,
pub running_sum: Column<Advice>,
table_idx: Column<Fixed>,
table_idx: TableColumn,
_marker: PhantomData<F>,
}
@ -48,7 +48,7 @@ impl<F: FieldExt + PrimeFieldBits, const K: usize> LookupRangeCheckConfig<F, K>
pub fn configure(
meta: &mut ConstraintSystem<F>,
running_sum: Column<Advice>,
table_idx: Column<Fixed>,
table_idx: TableColumn,
) -> Self {
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
// Orchard context.
pub fn load(&self, layouter: &mut impl Layouter<F>) -> 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<F>) -> 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<F>) -> 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);