update the column naming

This commit is contained in:
Haichen Shen
2022-11-17 10:47:20 -08:00
parent ca1bfc0c97
commit 6b86764876
2 changed files with 47 additions and 42 deletions

View File

@@ -3,7 +3,9 @@ use halo2_proofs::{arithmetic::FieldExt, circuit::*, plonk::*, poly::Rotation};
#[derive(Debug, Clone)]
struct FibonacciConfig {
pub advice: [Column<Advice>; 3],
pub col_a: Column<Advice>,
pub col_b: Column<Advice>,
pub col_c: Column<Advice>,
pub selector: Selector,
pub instance: Column<Instance>,
}
@@ -47,7 +49,9 @@ impl<F: FieldExt> FibonacciChip<F> {
});
FibonacciConfig {
advice: [col_a, col_b, col_c],
col_a,
col_b,
col_c,
selector,
instance,
}
@@ -67,19 +71,19 @@ impl<F: FieldExt> FibonacciChip<F> {
|| "f(0)",
self.config.instance,
0,
self.config.advice[0],
self.config.col_a,
0)?;
let b_cell = region.assign_advice_from_instance(
|| "f(1)",
self.config.instance,
1,
self.config.advice[1],
self.config.col_b,
0)?;
let c_cell = region.assign_advice(
|| "add",
self.config.advice[2],
|| "a + b",
self.config.col_c,
0,
|| a_cell.value().copied() + b_cell.value(),
)?;
@@ -104,19 +108,19 @@ impl<F: FieldExt> FibonacciChip<F> {
prev_b.copy_advice(
|| "a",
&mut region,
self.config.advice[0],
self.config.col_a,
0,
)?;
prev_c.copy_advice(
|| "b",
&mut region,
self.config.advice[1],
self.config.col_b,
0,
)?;
let c_cell = region.assign_advice(
|| "c",
self.config.advice[2],
self.config.col_c,
0,
|| prev_b.value().copied() + prev_c.value(),
)?;

View File

@@ -113,43 +113,44 @@ impl<F: FieldExt> FibonacciChip<F> {
}
}
#[derive(Default)]
struct MyCircuit<F>(PhantomData<F>);
impl<F: FieldExt> Circuit<F> for MyCircuit<F> {
type Config = FibonacciConfig;
type FloorPlanner = SimpleFloorPlanner;
fn without_witnesses(&self) -> Self {
Self::default()
}
fn configure(meta: &mut ConstraintSystem<F>) -> Self::Config {
let advice = meta.advice_column();
let instance = meta.instance_column();
FibonacciChip::configure(meta, advice, instance)
}
fn synthesize(
&self,
config: Self::Config,
mut layouter: impl Layouter<F>,
) -> Result<(), Error> {
let chip = FibonacciChip::construct(config);
let out_cell = chip.assign(layouter.namespace(|| "entire table"), 10)?;
chip.expose_public(layouter.namespace(|| "out"), out_cell, 2)?;
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
use super::MyCircuit;
use std::marker::PhantomData;
use halo2_proofs::{dev::MockProver, pasta::Fp};
#[derive(Default)]
struct MyCircuit<F>(PhantomData<F>);
impl<F: FieldExt> Circuit<F> for MyCircuit<F> {
type Config = FibonacciConfig;
type FloorPlanner = SimpleFloorPlanner;
fn without_witnesses(&self) -> Self {
Self::default()
}
fn configure(meta: &mut ConstraintSystem<F>) -> Self::Config {
let advice = meta.advice_column();
let instance = meta.instance_column();
FibonacciChip::configure(meta, advice, instance)
}
fn synthesize(
&self,
config: Self::Config,
mut layouter: impl Layouter<F>,
) -> Result<(), Error> {
let chip = FibonacciChip::construct(config);
let out_cell = chip.assign(layouter.namespace(|| "entire table"), 10)?;
chip.expose_public(layouter.namespace(|| "out"), out_cell, 2)?;
Ok(())
}
}
#[test]
fn fibonacci_example2() {
let k = 4;