mirror of
https://github.com/arnaucube/ark-r1cs-std.git
synced 2026-01-12 08:51:35 +01:00
Runs cargo fmt
This commit is contained in:
committed by
Pratyush Mishra
parent
98416f6b2e
commit
fb87c421e7
@@ -1,10 +1,11 @@
|
||||
use algebra::Field;
|
||||
use r1cs_core::{ConstraintSystem, SynthesisError};
|
||||
use r1cs_std::prelude::*;
|
||||
use r1cs_std::boolean::AllocatedBit;
|
||||
use r1cs_std::{boolean::AllocatedBit, prelude::*};
|
||||
|
||||
use crate::merkle_tree::*;
|
||||
use crate::crh::{FixedLengthCRH, FixedLengthCRHGadget};
|
||||
use crate::{
|
||||
crh::{FixedLengthCRH, FixedLengthCRHGadget},
|
||||
merkle_tree::*,
|
||||
};
|
||||
|
||||
use std::borrow::Borrow;
|
||||
|
||||
@@ -14,7 +15,7 @@ where
|
||||
HGadget: FixedLengthCRHGadget<P::H, ConstraintF>,
|
||||
ConstraintF: Field,
|
||||
{
|
||||
path: Vec<(HGadget::OutputGadget, HGadget::OutputGadget)>,
|
||||
path: Vec<(HGadget::OutputGadget, HGadget::OutputGadget)>,
|
||||
}
|
||||
|
||||
impl<P, CRHGadget, ConstraintF> MerkleTreePathGadget<P, CRHGadget, ConstraintF>
|
||||
@@ -30,13 +31,7 @@ where
|
||||
root: &CRHGadget::OutputGadget,
|
||||
leaf: impl ToBytesGadget<ConstraintF>,
|
||||
) -> Result<(), SynthesisError> {
|
||||
self.conditionally_check_membership(
|
||||
cs,
|
||||
parameters,
|
||||
root,
|
||||
leaf,
|
||||
&Boolean::Constant(true),
|
||||
)
|
||||
self.conditionally_check_membership(cs, parameters, root, leaf, &Boolean::Constant(true))
|
||||
}
|
||||
|
||||
pub fn conditionally_check_membership<CS: ConstraintSystem<ConstraintF>>(
|
||||
@@ -153,9 +148,7 @@ where
|
||||
})?;
|
||||
path.push((l_hash, r_hash));
|
||||
}
|
||||
Ok(MerkleTreePathGadget {
|
||||
path,
|
||||
})
|
||||
Ok(MerkleTreePathGadget { path })
|
||||
}
|
||||
|
||||
fn alloc_input<F, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
@@ -179,9 +172,7 @@ where
|
||||
path.push((l_hash, r_hash));
|
||||
}
|
||||
|
||||
Ok(MerkleTreePathGadget {
|
||||
path,
|
||||
})
|
||||
Ok(MerkleTreePathGadget { path })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,20 +182,15 @@ mod test {
|
||||
|
||||
use crate::{
|
||||
crh::{
|
||||
pedersen::{PedersenCRH, PedersenWindow},
|
||||
pedersen::constraints::PedersenCRHGadget,
|
||||
FixedLengthCRH,
|
||||
FixedLengthCRHGadget,
|
||||
pedersen::{constraints::PedersenCRHGadget, PedersenCRH, PedersenWindow},
|
||||
FixedLengthCRH, FixedLengthCRHGadget,
|
||||
},
|
||||
merkle_tree::*,
|
||||
};
|
||||
use algebra::{
|
||||
curves::jubjub::JubJubAffine as JubJub,
|
||||
fields::jubjub::fq::Fq,
|
||||
};
|
||||
use algebra::{curves::jubjub::JubJubAffine as JubJub, fields::jubjub::fq::Fq};
|
||||
use r1cs_core::ConstraintSystem;
|
||||
use rand::SeedableRng;
|
||||
use rand_xorshift::XorShiftRng;
|
||||
use r1cs_core::ConstraintSystem;
|
||||
|
||||
use super::*;
|
||||
use r1cs_std::{
|
||||
@@ -223,7 +209,7 @@ mod test {
|
||||
type HG = PedersenCRHGadget<JubJub, Fq, JubJubGadget>;
|
||||
|
||||
struct JubJubMerkleTreeParams;
|
||||
|
||||
|
||||
impl MerkleTreeConfig for JubJubMerkleTreeParams {
|
||||
const HEIGHT: usize = 32;
|
||||
type H = H;
|
||||
@@ -244,25 +230,27 @@ mod test {
|
||||
assert!(proof.verify(&crh_parameters, &root, &leaf).unwrap());
|
||||
|
||||
// Allocate Merkle Tree Root
|
||||
let root = <HG as FixedLengthCRHGadget<H, _>>::OutputGadget::alloc(&mut cs.ns(|| format!("new_digest_{}", i)), || {
|
||||
if use_bad_root {
|
||||
Ok(<H as FixedLengthCRH>::Output::default())
|
||||
} else {
|
||||
Ok(root)
|
||||
}
|
||||
})
|
||||
let root = <HG as FixedLengthCRHGadget<H, _>>::OutputGadget::alloc(
|
||||
&mut cs.ns(|| format!("new_digest_{}", i)),
|
||||
|| {
|
||||
if use_bad_root {
|
||||
Ok(<H as FixedLengthCRH>::Output::default())
|
||||
} else {
|
||||
Ok(root)
|
||||
}
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let constraints_from_digest = cs.num_constraints();
|
||||
println!("constraints from digest: {}", constraints_from_digest);
|
||||
|
||||
// Allocate Parameters for CRH
|
||||
let crh_parameters =
|
||||
<HG as FixedLengthCRHGadget<H, Fq>>::ParametersGadget::alloc(
|
||||
&mut cs.ns(|| format!("new_parameters_{}", i)),
|
||||
|| Ok(crh_parameters.clone()),
|
||||
)
|
||||
.unwrap();
|
||||
let crh_parameters = <HG as FixedLengthCRHGadget<H, Fq>>::ParametersGadget::alloc(
|
||||
&mut cs.ns(|| format!("new_parameters_{}", i)),
|
||||
|| Ok(crh_parameters.clone()),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let constraints_from_parameters = cs.num_constraints() - constraints_from_digest;
|
||||
println!(
|
||||
@@ -272,15 +260,16 @@ mod test {
|
||||
|
||||
// Allocate Leaf
|
||||
let leaf_g = UInt8::constant_vec(leaf);
|
||||
|
||||
|
||||
let constraints_from_leaf =
|
||||
cs.num_constraints() - constraints_from_parameters - constraints_from_digest;
|
||||
println!("constraints from leaf: {}", constraints_from_leaf);
|
||||
|
||||
// Allocate Merkle Tree Path
|
||||
let cw = MerkleTreePathGadget::<_, HG, _>::alloc(&mut cs.ns(|| format!("new_witness_{}", i)), || {
|
||||
Ok(proof)
|
||||
})
|
||||
let cw = MerkleTreePathGadget::<_, HG, _>::alloc(
|
||||
&mut cs.ns(|| format!("new_witness_{}", i)),
|
||||
|| Ok(proof),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let constraints_from_path = cs.num_constraints()
|
||||
@@ -320,7 +309,7 @@ mod test {
|
||||
fn good_root_test() {
|
||||
let mut leaves = Vec::new();
|
||||
for i in 0..4u8 {
|
||||
let input = [i ; 30];
|
||||
let input = [i; 30];
|
||||
leaves.push(input);
|
||||
}
|
||||
generate_merkle_tree(&leaves, false);
|
||||
@@ -331,7 +320,7 @@ mod test {
|
||||
fn bad_root_test() {
|
||||
let mut leaves = Vec::new();
|
||||
for i in 0..4u8 {
|
||||
let input = [i ; 30];
|
||||
let input = [i; 30];
|
||||
leaves.push(input);
|
||||
}
|
||||
generate_merkle_tree(&leaves, true);
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
use crate::crh::FixedLengthCRH;
|
||||
use crate::{crh::FixedLengthCRH, Error};
|
||||
use algebra::bytes::ToBytes;
|
||||
use crate::Error;
|
||||
use std::{fmt, rc::Rc};
|
||||
|
||||
|
||||
#[cfg(feature = "r1cs")]
|
||||
pub mod constraints;
|
||||
|
||||
@@ -20,22 +18,25 @@ pub trait MerkleTreeConfig {
|
||||
Debug(bound = "P: MerkleTreeConfig, <P::H as FixedLengthCRH>::Output: fmt::Debug")
|
||||
)]
|
||||
pub struct MerkleTreePath<P: MerkleTreeConfig> {
|
||||
pub(crate) path: Vec<(<P::H as FixedLengthCRH>::Output, <P::H as FixedLengthCRH>::Output)>,
|
||||
pub(crate) path: Vec<(
|
||||
<P::H as FixedLengthCRH>::Output,
|
||||
<P::H as FixedLengthCRH>::Output,
|
||||
)>,
|
||||
}
|
||||
|
||||
pub type MerkleTreeParams<P> = <<P as MerkleTreeConfig>::H as FixedLengthCRH>::Parameters;
|
||||
pub type MerkleTreeDigest<P> = <<P as MerkleTreeConfig>::H as FixedLengthCRH>::Output;
|
||||
|
||||
|
||||
impl<P: MerkleTreeConfig> Default for MerkleTreePath<P> {
|
||||
fn default() -> Self {
|
||||
let mut path = Vec::with_capacity(P::HEIGHT as usize);
|
||||
for _i in 1..P::HEIGHT as usize {
|
||||
path.push((<P::H as FixedLengthCRH>::Output::default(), <P::H as FixedLengthCRH>::Output::default()));
|
||||
}
|
||||
Self {
|
||||
path,
|
||||
path.push((
|
||||
<P::H as FixedLengthCRH>::Output::default(),
|
||||
<P::H as FixedLengthCRH>::Output::default(),
|
||||
));
|
||||
}
|
||||
Self { path }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,7 +83,10 @@ impl<P: MerkleTreeConfig> MerkleTreePath<P> {
|
||||
|
||||
pub struct MerkleHashTree<P: MerkleTreeConfig> {
|
||||
tree: Vec<<P::H as FixedLengthCRH>::Output>,
|
||||
padding_tree: Vec<(<P::H as FixedLengthCRH>::Output, <P::H as FixedLengthCRH>::Output)>,
|
||||
padding_tree: Vec<(
|
||||
<P::H as FixedLengthCRH>::Output,
|
||||
<P::H as FixedLengthCRH>::Output,
|
||||
)>,
|
||||
parameters: Rc<<P::H as FixedLengthCRH>::Parameters>,
|
||||
root: Option<<P::H as FixedLengthCRH>::Output>,
|
||||
}
|
||||
@@ -99,7 +103,10 @@ impl<P: MerkleTreeConfig> MerkleHashTree<P> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new<L: ToBytes>(parameters: Rc<<P::H as FixedLengthCRH>::Parameters>, leaves: &[L]) -> Result<Self, Error> {
|
||||
pub fn new<L: ToBytes>(
|
||||
parameters: Rc<<P::H as FixedLengthCRH>::Parameters>,
|
||||
leaves: &[L],
|
||||
) -> Result<Self, Error> {
|
||||
let new_time = start_timer!(|| "MerkleTree::New");
|
||||
|
||||
let last_level_size = leaves.len().next_power_of_two();
|
||||
@@ -225,9 +232,7 @@ impl<P: MerkleTreeConfig> MerkleHashTree<P> {
|
||||
if path.len() != (Self::HEIGHT - 1) as usize {
|
||||
Err(MerkleTreeError::IncorrectPathLength(path.len()))?
|
||||
} else {
|
||||
Ok(MerkleTreePath {
|
||||
path,
|
||||
})
|
||||
Ok(MerkleTreePath { path })
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -241,7 +246,9 @@ pub enum MerkleTreeError {
|
||||
impl std::fmt::Display for MerkleTreeError {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
let msg = match self {
|
||||
MerkleTreeError::IncorrectLeafIndex(index) => format!("incorrect leaf index: {}", index),
|
||||
MerkleTreeError::IncorrectLeafIndex(index) => {
|
||||
format!("incorrect leaf index: {}", index)
|
||||
},
|
||||
MerkleTreeError::IncorrectPathLength(len) => format!("incorrect path length: {}", len),
|
||||
};
|
||||
write!(f, "{}", msg)
|
||||
@@ -358,10 +365,12 @@ pub(crate) fn hash_empty<H: FixedLengthCRH>(
|
||||
H::evaluate(parameters, &empty_buffer)
|
||||
}
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::{crh::{pedersen::*, *}, merkle_tree::*};
|
||||
use crate::{
|
||||
crh::{pedersen::*, *},
|
||||
merkle_tree::*,
|
||||
};
|
||||
use algebra::curves::jubjub::JubJubAffine as JubJub;
|
||||
use rand::SeedableRng;
|
||||
use rand_xorshift::XorShiftRng;
|
||||
@@ -373,18 +382,16 @@ mod test {
|
||||
const NUM_WINDOWS: usize = 256;
|
||||
}
|
||||
|
||||
|
||||
type H = PedersenCRH<JubJub, Window4x256>;
|
||||
|
||||
struct JubJubMerkleTreeParams;
|
||||
|
||||
|
||||
impl MerkleTreeConfig for JubJubMerkleTreeParams {
|
||||
const HEIGHT: usize = 32;
|
||||
type H = H;
|
||||
}
|
||||
type JubJubMerkleTree = MerkleHashTree<JubJubMerkleTreeParams>;
|
||||
|
||||
|
||||
fn generate_merkle_tree<L: ToBytes + Clone + Eq>(leaves: &[L]) -> () {
|
||||
let mut rng = XorShiftRng::seed_from_u64(9174123u64);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user