mirror of https://github.com/zcash/halo2.git
Merge pull request #165 from daira/bump-halo2
Update to assign_table API.
This commit is contained in:
commit
078b71a960
|
@ -62,5 +62,5 @@ name = "small"
|
||||||
harness = false
|
harness = false
|
||||||
|
|
||||||
[patch.crates-io]
|
[patch.crates-io]
|
||||||
halo2 = { git = "https://github.com/zcash/halo2.git", rev = "2e960317ae02c72dc3ff5a02c7d31f154d606748" }
|
halo2 = { git = "https://github.com/zcash/halo2.git", rev = "27c4187673a9c6ade13fbdbd4f20955530c22d7f" }
|
||||||
zcash_note_encryption = { git = "https://github.com/zcash/librustzcash.git", rev = "cc533a9da4f6a7209a7be05f82b12a03969152c9" }
|
zcash_note_encryption = { git = "https://github.com/zcash/librustzcash.git", rev = "cc533a9da4f6a7209a7be05f82b12a03969152c9" }
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue