mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-07 00:03:10 +00:00
Misc fixes to get tests green again
This commit is contained in:
parent
959aaccae6
commit
04f74446fa
42
src/gadgets/hash.rs
Normal file
42
src/gadgets/hash.rs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
use std::convert::TryInto;
|
||||||
|
|
||||||
|
use crate::circuit_builder::CircuitBuilder;
|
||||||
|
use crate::field::field::Field;
|
||||||
|
use crate::gates::gmimc::GMiMCGate;
|
||||||
|
use crate::hash::GMIMC_ROUNDS;
|
||||||
|
use crate::target::Target;
|
||||||
|
use crate::wire::Wire;
|
||||||
|
|
||||||
|
impl<F: Field> CircuitBuilder<F> {
|
||||||
|
pub fn permute(&mut self, inputs: [Target; 12]) -> [Target; 12] {
|
||||||
|
let zero = self.zero();
|
||||||
|
let gate = self.add_gate_no_constants(
|
||||||
|
GMiMCGate::<F, GMIMC_ROUNDS>::with_automatic_constants());
|
||||||
|
|
||||||
|
// We don't want to swap any inputs, so set that wire to 0.
|
||||||
|
let swap_wire = GMiMCGate::<F, GMIMC_ROUNDS>::WIRE_SWAP;
|
||||||
|
let swap_wire = Target::Wire(Wire { gate, input: swap_wire });
|
||||||
|
self.route(zero, swap_wire);
|
||||||
|
|
||||||
|
// The old accumulator wire doesn't matter, since we won't read the new accumulator wire.
|
||||||
|
// We do have to set it to something though, so we'll arbitrary pick 0.
|
||||||
|
let old_acc_wire = GMiMCGate::<F, GMIMC_ROUNDS>::WIRE_INDEX_ACCUMULATOR_OLD;
|
||||||
|
let old_acc_wire = Target::Wire(Wire { gate, input: old_acc_wire });
|
||||||
|
self.route(zero, old_acc_wire);
|
||||||
|
|
||||||
|
// Route input wires.
|
||||||
|
for i in 0..12 {
|
||||||
|
let in_wire = GMiMCGate::<F, GMIMC_ROUNDS>::wire_input(i);
|
||||||
|
let in_wire = Target::Wire(Wire { gate, input: in_wire });
|
||||||
|
self.route(inputs[i], in_wire);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Collect output wires.
|
||||||
|
(0..12)
|
||||||
|
.map(|i| Target::Wire(
|
||||||
|
Wire { gate, input: GMiMCGate::<F, GMIMC_ROUNDS>::wire_output(i) }))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.try_into()
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,7 +3,6 @@ use std::convert::TryInto;
|
|||||||
use crate::circuit_builder::CircuitBuilder;
|
use crate::circuit_builder::CircuitBuilder;
|
||||||
use crate::field::field::Field;
|
use crate::field::field::Field;
|
||||||
use crate::gates::gmimc::GMiMCGate;
|
use crate::gates::gmimc::GMiMCGate;
|
||||||
use crate::gates::noop::NoopGate;
|
|
||||||
use crate::hash::{compress, hash_or_noop};
|
use crate::hash::{compress, hash_or_noop};
|
||||||
use crate::hash::GMIMC_ROUNDS;
|
use crate::hash::GMIMC_ROUNDS;
|
||||||
use crate::proof::{Hash, HashTarget};
|
use crate::proof::{Hash, HashTarget};
|
||||||
@ -41,10 +40,6 @@ pub(crate) fn verify_merkle_proof<F: Field>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<F: Field> CircuitBuilder<F> {
|
impl<F: Field> CircuitBuilder<F> {
|
||||||
pub(crate) fn permute(&mut self, state: [Target; 12]) -> [Target; 12] {
|
|
||||||
todo!()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Verifies that the given leaf data is present at the given index in the Merkle tree with the
|
/// Verifies that the given leaf data is present at the given index in the Merkle tree with the
|
||||||
/// given root.
|
/// given root.
|
||||||
pub(crate) fn verify_merkle_proof(
|
pub(crate) fn verify_merkle_proof(
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
pub(crate) mod arithmetic;
|
pub mod arithmetic;
|
||||||
|
pub mod hash;
|
||||||
pub(crate) mod merkle_proofs;
|
pub(crate) mod merkle_proofs;
|
||||||
pub(crate) mod split_join;
|
pub(crate) mod split_join;
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use crate::circuit_builder::CircuitBuilder;
|
use crate::circuit_builder::CircuitBuilder;
|
||||||
use crate::vars::{EvaluationTargets, EvaluationVars};
|
|
||||||
use crate::field::field::Field;
|
use crate::field::field::Field;
|
||||||
use crate::gates::gate::{Gate, GateRef};
|
use crate::gates::gate::{Gate, GateRef};
|
||||||
use crate::generator::{SimpleGenerator, WitnessGenerator};
|
use crate::generator::{SimpleGenerator, WitnessGenerator};
|
||||||
use crate::gmimc::gmimc_automatic_constants;
|
use crate::gmimc::gmimc_automatic_constants;
|
||||||
use crate::target::Target;
|
use crate::target::Target;
|
||||||
|
use crate::vars::{EvaluationTargets, EvaluationVars};
|
||||||
use crate::wire::Wire;
|
use crate::wire::Wire;
|
||||||
use crate::witness::PartialWitness;
|
use crate::witness::PartialWitness;
|
||||||
|
|
||||||
@ -69,8 +69,8 @@ impl<F: Field, const R: usize> Gate<F> for GMiMCGate<F, R> {
|
|||||||
fn eval_unfiltered(&self, vars: EvaluationVars<F>) -> Vec<F> {
|
fn eval_unfiltered(&self, vars: EvaluationVars<F>) -> Vec<F> {
|
||||||
let mut constraints = Vec::with_capacity(W + R);
|
let mut constraints = Vec::with_capacity(W + R);
|
||||||
|
|
||||||
let swap = vars.local_wires[Self::WIRE_SWAP];
|
|
||||||
// Assert that `swap` is binary.
|
// Assert that `swap` is binary.
|
||||||
|
let swap = vars.local_wires[Self::WIRE_SWAP];
|
||||||
constraints.push(swap * (swap - F::ONE));
|
constraints.push(swap * (swap - F::ONE));
|
||||||
|
|
||||||
let old_index_acc = vars.local_wires[Self::WIRE_INDEX_ACCUMULATOR_OLD];
|
let old_index_acc = vars.local_wires[Self::WIRE_INDEX_ACCUMULATOR_OLD];
|
||||||
@ -161,11 +161,15 @@ struct GMiMCGenerator<F: Field, const R: usize> {
|
|||||||
|
|
||||||
impl<F: Field, const R: usize> SimpleGenerator<F> for GMiMCGenerator<F, R> {
|
impl<F: Field, const R: usize> SimpleGenerator<F> for GMiMCGenerator<F, R> {
|
||||||
fn dependencies(&self) -> Vec<Target> {
|
fn dependencies(&self) -> Vec<Target> {
|
||||||
(0..W)
|
let mut dep_input_indices = Vec::with_capacity(W + 2);
|
||||||
.map(|i| Target::Wire(Wire {
|
for i in 0..W {
|
||||||
gate: self.gate_index,
|
dep_input_indices.push(GMiMCGate::<F, R>::wire_input(i));
|
||||||
input: GMiMCGate::<F, R>::wire_input(i),
|
}
|
||||||
}))
|
dep_input_indices.push(GMiMCGate::<F, R>::WIRE_SWAP);
|
||||||
|
dep_input_indices.push(GMiMCGate::<F, R>::WIRE_INDEX_ACCUMULATOR_OLD);
|
||||||
|
|
||||||
|
dep_input_indices.into_iter()
|
||||||
|
.map(|input| Target::Wire(Wire { gate: self.gate_index, input }))
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,7 +272,12 @@ mod tests {
|
|||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
let mut witness = PartialWitness::new();
|
let mut witness = PartialWitness::new();
|
||||||
witness.set_wire(Wire { gate: 0, input: Gate::WIRE_SWAP }, F::ZERO);
|
witness.set_wire(
|
||||||
|
Wire { gate: 0, input: Gate::WIRE_INDEX_ACCUMULATOR_OLD },
|
||||||
|
F::from_canonical_usize(7));
|
||||||
|
witness.set_wire(
|
||||||
|
Wire { gate: 0, input: Gate::WIRE_SWAP },
|
||||||
|
F::ZERO);
|
||||||
for i in 0..W {
|
for i in 0..W {
|
||||||
witness.set_wire(
|
witness.set_wire(
|
||||||
Wire { gate: 0, input: Gate::wire_input(i) },
|
Wire { gate: 0, input: Gate::wire_input(i) },
|
||||||
@ -284,8 +293,12 @@ mod tests {
|
|||||||
|
|
||||||
for i in 0..W {
|
for i in 0..W {
|
||||||
let out = witness.get_wire(
|
let out = witness.get_wire(
|
||||||
Wire { gate: 1, input: Gate::wire_output(i) });
|
Wire { gate: 0, input: Gate::wire_output(i) });
|
||||||
assert_eq!(out, expected_outputs[i]);
|
assert_eq!(out, expected_outputs[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let acc_new = witness.get_wire(
|
||||||
|
Wire { gate: 0, input: Gate::WIRE_INDEX_ACCUMULATOR_NEW });
|
||||||
|
assert_eq!(acc_new, F::from_canonical_usize(7 * 2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -228,7 +228,7 @@ mod tests {
|
|||||||
|
|
||||||
let config = CircuitConfig {
|
let config = CircuitConfig {
|
||||||
num_wires: 114,
|
num_wires: 114,
|
||||||
num_routed_wires: 13,
|
num_routed_wires: 27,
|
||||||
..CircuitConfig::default()
|
..CircuitConfig::default()
|
||||||
};
|
};
|
||||||
let mut builder = CircuitBuilder::<F>::new(config);
|
let mut builder = CircuitBuilder::<F>::new(config);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user