Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions rustfmt.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
imports_granularity = "Crate"
reorder_imports = true # default
group_imports = "StdExternalCrate"
4 changes: 1 addition & 3 deletions src/backends/counter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@
//! }
//! ```
//!
use std::cell::RefCell;
use std::fmt;
use std::thread_local;
use std::{cell::RefCell, fmt, thread_local};

thread_local! {
static COUNTER: RefCell<Counter> = RefCell::new(Counter::new());
Expand Down
37 changes: 25 additions & 12 deletions src/backends/plonky2/basetypes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,37 @@
//! `backend_plonky2` feature is enabled.
//! See src/middleware/basetypes.rs for more details.

use crate::middleware::serialization::{
deserialize_hash_tuple, deserialize_value_tuple, serialize_hash_tuple, serialize_value_tuple,
use std::{
cmp::{Ord, Ordering},
fmt,
};
use crate::middleware::{Params, ToFields};

use anyhow::{anyhow, Error, Result};
use hex::{FromHex, FromHexError};
use plonky2::field::goldilocks_field::GoldilocksField;
use plonky2::field::types::{Field, PrimeField64};
use plonky2::hash::poseidon::PoseidonHash;
use plonky2::plonk::config::Hasher;
use plonky2::plonk::config::PoseidonGoldilocksConfig;
use plonky2::plonk::proof::Proof as Plonky2Proof;
use plonky2::{
field::{
goldilocks_field::GoldilocksField,
types::{Field, PrimeField64},
},
hash::poseidon::PoseidonHash,
plonk::{
config::{Hasher, PoseidonGoldilocksConfig},
proof::Proof as Plonky2Proof,
},
};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::cmp::{Ord, Ordering};
use std::fmt;

use crate::backends::counter;
use crate::{
backends::counter,
middleware::{
serialization::{
deserialize_hash_tuple, deserialize_value_tuple, serialize_hash_tuple,
serialize_value_tuple,
},
Params, ToFields,
},
};

/// F is the native field we use everywhere. Currently it's Goldilocks from plonky2
pub type F = GoldilocksField;
Expand Down
43 changes: 27 additions & 16 deletions src/backends/plonky2/circuits/common.rs
Original file line number Diff line number Diff line change
@@ -1,23 +1,34 @@
//! Common functionality to build Pod circuits with plonky2

use crate::backends::plonky2::basetypes::D;
use crate::backends::plonky2::mock::mainpod::Statement;
use crate::backends::plonky2::mock::mainpod::{Operation, OperationArg};
use crate::backends::plonky2::primitives::merkletree::MerkleClaimAndProofTarget;
use crate::middleware::{
NativeOperation, NativePredicate, Params, Predicate, StatementArg, ToFields, Value,
EMPTY_VALUE, F, HASH_SIZE, OPERATION_ARG_F_LEN, OPERATION_AUX_F_LEN, STATEMENT_ARG_F_LEN,
VALUE_SIZE,
};
use anyhow::Result;
use plonky2::field::extension::Extendable;
use plonky2::field::types::{Field, PrimeField64};
use plonky2::hash::hash_types::{HashOutTarget, RichField, NUM_HASH_OUT_ELTS};
use plonky2::iop::target::{BoolTarget, Target};
use plonky2::iop::witness::{PartialWitness, WitnessWrite};
use plonky2::plonk::circuit_builder::CircuitBuilder;
use std::{array, iter};

use anyhow::Result;
use plonky2::{
field::{
extension::Extendable,
types::{Field, PrimeField64},
},
hash::hash_types::{HashOutTarget, RichField, NUM_HASH_OUT_ELTS},
iop::{
target::{BoolTarget, Target},
witness::{PartialWitness, WitnessWrite},
},
plonk::circuit_builder::CircuitBuilder,
};

use crate::{
backends::plonky2::{
basetypes::D,
mock::mainpod::{Operation, OperationArg, Statement},
primitives::merkletree::MerkleClaimAndProofTarget,
},
middleware::{
NativeOperation, NativePredicate, Params, Predicate, StatementArg, ToFields, Value,
EMPTY_VALUE, F, HASH_SIZE, OPERATION_ARG_F_LEN, OPERATION_AUX_F_LEN, STATEMENT_ARG_F_LEN,
VALUE_SIZE,
},
};

pub const CODE_SIZE: usize = HASH_SIZE + 2;

#[derive(Copy, Clone)]
Expand Down
53 changes: 28 additions & 25 deletions src/backends/plonky2/circuits/mainpod.rs
Original file line number Diff line number Diff line change
@@ -1,33 +1,32 @@
use anyhow::{anyhow, Result};
use anyhow::Result;
use itertools::zip_eq;
use plonky2::{
hash::{hash_types::HashOutTarget, poseidon::PoseidonHash},
iop::{target::BoolTarget, witness::PartialWitness},
plonk::circuit_builder::CircuitBuilder,
};

use crate::backends::plonky2::mock::mainpod;
use crate::backends::plonky2::signedpod::SignedPod;
use crate::backends::plonky2::{
basetypes::{Value, D, EMPTY_HASH, F, VALUE_SIZE},
mock::mainpod::MerkleClaimAndProof,
primitives::merkletree::{MerkleClaimAndProofTarget, MerkleProofGadget},
};
use crate::middleware::{
hash_str, AnchoredKey, NativeOperation, NativePredicate, Params, PodType, Statement,
StatementArg, ToFields, KEY_TYPE, SELF,
};
use crate::{
backends::plonky2::{
circuits::common::{CircuitBuilderPod, OperationTarget, StatementTarget, ValueTarget},
primitives::merkletree,
basetypes::{Value, D, EMPTY_HASH, F, VALUE_SIZE},
circuits::{
common::{
CircuitBuilderPod, Flattenable, MerkleClaimTarget, OperationTarget,
StatementTarget, ValueTarget,
},
signedpod::{SignedPodVerifyGadget, SignedPodVerifyTarget},
},
mock::{mainpod, mainpod::MerkleClaimAndProof},
primitives::{
merkletree,
merkletree::{MerkleClaimAndProofTarget, MerkleProofGadget},
},
signedpod::SignedPod,
},
middleware::{
hash_str, AnchoredKey, NativeOperation, NativePredicate, Params, PodType, Statement,
StatementArg, ToFields, KEY_TYPE, SELF,
},
middleware,
};

use super::{
common::{Flattenable, MerkleClaimTarget},
signedpod::{SignedPodVerifyGadget, SignedPodVerifyTarget},
};

//
Expand Down Expand Up @@ -555,12 +554,16 @@ mod tests {
use plonky2::plonk::{circuit_builder::CircuitBuilder, circuit_data::CircuitConfig};

use super::*;
use crate::backends::plonky2::mock::mainpod;
use crate::backends::plonky2::{
basetypes::C,
mock::mainpod::{OperationArg, OperationAux},
use crate::{
backends::plonky2::{
basetypes::C,
mock::{
mainpod,
mainpod::{OperationArg, OperationAux},
},
},
middleware::{OperationType, PodId},
};
use crate::middleware::{OperationType, PodId};

fn operation_verify(
st: mainpod::Statement,
Expand Down
45 changes: 26 additions & 19 deletions src/backends/plonky2/circuits/signedpod.rs
Original file line number Diff line number Diff line change
@@ -1,24 +1,29 @@
use std::iter;

use anyhow::Result;
use itertools::Itertools;
use plonky2::{
hash::hash_types::{HashOut, HashOutTarget},
iop::target::Target,
iop::witness::{PartialWitness, WitnessWrite},
iop::{
target::Target,
witness::{PartialWitness, WitnessWrite},
},
plonk::circuit_builder::CircuitBuilder,
};
use std::iter;

use crate::backends::plonky2::{
basetypes::{Value, D, EMPTY_VALUE, F},
circuits::common::{CircuitBuilderPod, StatementArgTarget, StatementTarget, ValueTarget},
primitives::{
merkletree::{MerkleProof, MerkleProofExistenceGadget, MerkleProofExistenceTarget},
signature::{PublicKey, SignatureVerifyGadget, SignatureVerifyTarget},
use crate::{
backends::plonky2::{
basetypes::{Value, D, EMPTY_VALUE, F},
circuits::common::{CircuitBuilderPod, StatementArgTarget, StatementTarget, ValueTarget},
primitives::{
merkletree::{MerkleProof, MerkleProofExistenceGadget, MerkleProofExistenceTarget},
signature::{PublicKey, SignatureVerifyGadget, SignatureVerifyTarget},
},
signedpod::SignedPod,
},
middleware::{
hash_str, NativePredicate, Params, PodType, Predicate, ToFields, KEY_SIGNER, KEY_TYPE, SELF,
},
signedpod::SignedPod,
};
use crate::middleware::{
hash_str, NativePredicate, Params, PodType, Predicate, ToFields, KEY_SIGNER, KEY_TYPE, SELF,
};

pub struct SignedPodVerifyGadget {
Expand Down Expand Up @@ -188,16 +193,18 @@ pub mod tests {
use plonky2::plonk::{circuit_builder::CircuitBuilder, circuit_data::CircuitConfig};

use super::*;
use crate::backends::plonky2::{
basetypes::C,
primitives::signature::SecretKey,
signedpod::{SignedPod, Signer},
use crate::{
backends::plonky2::{
basetypes::C,
primitives::signature::SecretKey,
signedpod::{SignedPod, Signer},
},
middleware::F,
};
use crate::middleware::F;

#[test]
fn test_signed_pod_verify() -> Result<()> {
let mut params = Params {
let params = Params {
max_signed_pod_values: 6,
..Default::default()
};
Expand Down
57 changes: 28 additions & 29 deletions src/backends/plonky2/mainpod.rs
Original file line number Diff line number Diff line change
@@ -1,29 +1,26 @@
use crate::backends::plonky2::basetypes::C;
use anyhow::{anyhow, Result};
use base64::prelude::*;
use itertools::Itertools;
use log::error;
use plonky2::hash::poseidon::PoseidonHash;
use plonky2::iop::witness::PartialWitness;
use plonky2::plonk::config::Hasher;
use plonky2::plonk::proof::ProofWithPublicInputs;
use plonky2::plonk::{circuit_builder::CircuitBuilder, circuit_data::CircuitConfig};
use serde::{Deserialize, Serialize};
use std::any::Any;
use std::fmt;

use crate::backends::plonky2::basetypes::{Hash, Value, D, EMPTY_HASH, EMPTY_VALUE, F, VALUE_SIZE};
use crate::backends::plonky2::circuits::mainpod::{MainPodVerifyCircuit, MainPodVerifyInput};
use crate::backends::plonky2::signedpod::SignedPod;
// TODO: Move the shared components between MockMainPod and MainPod to a common place.
use crate::backends::plonky2::mock::mainpod::{hash_statements, MockMainPod, Operation, Statement};
use crate::middleware::{
self, hash_str, AnchoredKey, MainPodInputs, NativeOperation, NativePredicate, NonePod,
OperationType, Params, Pod, PodId, PodProver, Predicate, StatementArg, ToFields, KEY_TYPE,
SELF,
use anyhow::{anyhow, Result};
use itertools::Itertools;
use plonky2::{
iop::witness::PartialWitness,
plonk::{
circuit_builder::CircuitBuilder, circuit_data::CircuitConfig, proof::ProofWithPublicInputs,
},
};

use super::mock::mainpod::MerkleClaimAndProof;
use crate::{
backends::plonky2::{
basetypes::{C, D, F},
circuits::mainpod::{MainPodVerifyCircuit, MainPodVerifyInput},
mock::mainpod::{hash_statements, MockMainPod, Statement},
signedpod::SignedPod,
},
middleware::{
self, AnchoredKey, MainPodInputs, Params, Pod, PodId, PodProver, StatementArg, SELF,
},
};
// TODO: Move the shared components between MockMainPod and MainPod to a common place.

pub struct Prover {}

Expand Down Expand Up @@ -163,13 +160,15 @@ impl Pod for MainPod {
#[cfg(test)]
pub mod tests {
use super::*;
use crate::backends::plonky2::mock::mainpod::{MockProver, OperationAux};
use crate::backends::plonky2::primitives::signature::SecretKey;
use crate::backends::plonky2::signedpod::Signer;
use crate::examples::zu_kyc_sign_pod_builders;
use crate::frontend;
use crate::middleware;
use crate::op;
use crate::{
backends::plonky2::{
mock::mainpod::MockProver, primitives::signature::SecretKey, signedpod::Signer,
},
examples::zu_kyc_sign_pod_builders,
frontend, middleware,
middleware::Value,
op,
};

// TODO: Use the method from examples once everything works
pub fn zu_kyc_pod_builder(
Expand Down
21 changes: 10 additions & 11 deletions src/backends/plonky2/mock/mainpod/mod.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
use std::{any::Any, fmt};

use anyhow::{anyhow, Result};
use base64::prelude::*;
use itertools::Itertools;
use log::error;
use plonky2::hash::poseidon::PoseidonHash;
use plonky2::plonk::config::Hasher;
use plonky2::{hash::poseidon::PoseidonHash, plonk::config::Hasher};
use serde::{Deserialize, Serialize};
use std::any::Any;
use std::fmt;

use crate::{
backends::plonky2::primitives::merkletree,
Expand Down Expand Up @@ -608,13 +606,14 @@ impl Pod for MockMainPod {
#[cfg(test)]
pub mod tests {
use super::*;
use crate::backends::plonky2::mock::signedpod::MockSigner;
use crate::examples::{
great_boy_pod_full_flow, tickets_pod_full_flow, zu_kyc_pod_builder,
zu_kyc_sign_pod_builders,
use crate::{
backends::plonky2::mock::signedpod::MockSigner,
examples::{
great_boy_pod_full_flow, tickets_pod_full_flow, zu_kyc_pod_builder,
zu_kyc_sign_pod_builders,
},
middleware,
};
use crate::middleware;
use crate::middleware::containers::Set;

#[test]
fn test_mock_main_zu_kyc() -> Result<()> {
Expand Down
16 changes: 10 additions & 6 deletions src/backends/plonky2/mock/mainpod/operation.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
use super::Statement;
use std::{fmt, iter};

use anyhow::{anyhow, Result};
use plonky2::field::types::Field;
use serde::{Deserialize, Serialize};

use crate::{
backends::plonky2::primitives::merkletree::{self, kv_hash},
backends::plonky2::{
mock::mainpod::Statement,
primitives::merkletree::{self},
},
middleware::{self, Hash, OperationType, Params, ToFields, Value, EMPTY_HASH, EMPTY_VALUE, F},
};
use anyhow::{anyhow, Result};
use plonky2::field::types::{Field, PrimeField64};
use serde::{Deserialize, Serialize};
use std::{fmt, iter};

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum OperationArg {
Expand Down
3 changes: 2 additions & 1 deletion src/backends/plonky2/mock/mainpod/statement.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::fmt;

use anyhow::{anyhow, Result};
use serde::{Deserialize, Serialize};
use std::fmt;

use crate::middleware::{
self, AnchoredKey, NativePredicate, Params, Predicate, StatementArg, ToFields,
Expand Down
Loading
Loading