Skip to content

Commit 281f57f

Browse files
authored
move MainPod layouting to mainpod (#196)
* move MainPod layouting to mainpod * wip * use MerkleClaimAndProof in merkle circuit set_targets * fix empty mt proof
1 parent 0b5d4dd commit 281f57f

File tree

11 files changed

+815
-905
lines changed

11 files changed

+815
-905
lines changed

src/backends/plonky2/circuits/common.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use plonky2::{
1919
use crate::{
2020
backends::plonky2::{
2121
basetypes::D,
22-
mock::mainpod::{Operation, OperationArg, Statement},
22+
mainpod::{Operation, OperationArg, Statement},
2323
primitives::merkletree::MerkleClaimAndProofTarget,
2424
},
2525
middleware::{

src/backends/plonky2/circuits/mainpod.rs

Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@ use crate::{
1616
},
1717
signedpod::{SignedPodVerifyGadget, SignedPodVerifyTarget},
1818
},
19-
mock::{mainpod, mainpod::MerkleClaimAndProof},
20-
primitives::{
21-
merkletree,
22-
merkletree::{MerkleClaimAndProofTarget, MerkleProofGadget},
19+
mainpod,
20+
primitives::merkletree::{
21+
MerkleClaimAndProof, MerkleClaimAndProofTarget, MerkleProofGadget,
2322
},
2423
signedpod::SignedPod,
2524
},
@@ -495,20 +494,8 @@ impl MainPodVerifyTarget {
495494
}
496495
assert_eq!(input.merkle_proofs.len(), self.params.max_merkle_proofs);
497496
for (i, mp) in input.merkle_proofs.iter().enumerate() {
498-
assert_eq!(mp.siblings.len(), self.params.max_depth_mt_gadget);
499-
self.merkle_proofs[i].set_targets(
500-
pw,
501-
mp.enabled,
502-
mp.existence,
503-
mp.root,
504-
mp.clone().try_into().unwrap_or(merkletree::MerkleProof {
505-
existence: mp.existence,
506-
siblings: mp.siblings.clone(),
507-
other_leaf: None,
508-
}),
509-
mp.key,
510-
mp.value,
511-
)?;
497+
assert_eq!(mp.proof.siblings.len(), self.params.max_depth_mt_gadget);
498+
self.merkle_proofs[i].set_targets(pw, mp)?;
512499
}
513500
Ok(())
514501
}
@@ -531,26 +518,23 @@ impl MainPodVerifyCircuit {
531518

532519
#[cfg(test)]
533520
mod tests {
534-
use merkletree::MerkleTree;
535521
use plonky2::plonk::{circuit_builder::CircuitBuilder, circuit_data::CircuitConfig};
536522

537523
use super::*;
538524
use crate::{
539525
backends::plonky2::{
540526
basetypes::C,
541-
mock::{
542-
mainpod,
543-
mainpod::{OperationArg, OperationAux},
544-
},
527+
mainpod::{OperationArg, OperationAux},
528+
primitives::merkletree::{MerkleClaimAndProof, MerkleTree},
545529
},
546-
middleware::{OperationType, PodId, RawValue},
530+
middleware::{Hash, OperationType, PodId, RawValue},
547531
};
548532

549533
fn operation_verify(
550534
st: mainpod::Statement,
551535
op: mainpod::Operation,
552536
prev_statements: Vec<mainpod::Statement>,
553-
merkle_proofs: Vec<mainpod::MerkleClaimAndProof>,
537+
merkle_proofs: Vec<MerkleClaimAndProof>,
554538
) -> Result<()> {
555539
let params = Params::default();
556540
let mp_gadget = MerkleProofGadget {
@@ -595,15 +579,7 @@ mod tests {
595579
for (merkle_proof_target, merkle_proof) in
596580
merkle_proofs_target.iter().zip(merkle_proofs.iter())
597581
{
598-
merkle_proof_target.set_targets(
599-
&mut pw,
600-
merkle_proof.enabled,
601-
merkle_proof.existence,
602-
merkle_proof.root,
603-
merkle_proof.clone().try_into()?,
604-
merkle_proof.key,
605-
merkle_proof.value,
606-
)?
582+
merkle_proof_target.set_targets(&mut pw, &merkle_proof)?
607583
}
608584

609585
// generate & verify proof
@@ -730,10 +706,10 @@ mod tests {
730706
OperationAux::MerkleProofIndex(0),
731707
);
732708

733-
let merkle_proofs = vec![mainpod::MerkleClaimAndProof::try_from_middleware(
734-
&params,
735-
&root.raw(),
736-
&key,
709+
let merkle_proofs = vec![MerkleClaimAndProof::new(
710+
params.max_depth_mt_gadget,
711+
Hash::from(root.raw()),
712+
key,
737713
None,
738714
&no_key_pf,
739715
)?];

src/backends/plonky2/circuits/signedpod.rs

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@ use crate::{
1616
basetypes::D,
1717
circuits::common::{CircuitBuilderPod, StatementArgTarget, StatementTarget, ValueTarget},
1818
primitives::{
19-
merkletree::{MerkleProof, MerkleProofExistenceGadget, MerkleProofExistenceTarget},
19+
merkletree::{
20+
MerkleClaimAndProof, MerkleProofExistenceGadget, MerkleProofExistenceTarget,
21+
},
2022
signature::{PublicKey, SignatureVerifyGadget, SignatureVerifyTarget},
2123
},
2224
signedpod::SignedPod,
2325
},
2426
middleware::{
25-
hash_str, Key, NativePredicate, Params, PodType, Predicate, RawValue, ToFields, Value,
26-
EMPTY_VALUE, F, KEY_SIGNER, KEY_TYPE, SELF,
27+
hash_str, Key, NativePredicate, Params, PodType, Predicate, RawValue, ToFields, Value, F,
28+
KEY_SIGNER, KEY_TYPE, SELF,
2729
},
2830
};
2931

@@ -132,11 +134,13 @@ impl SignedPodVerifyTarget {
132134
let (v, proof) = pod.dict.prove(k)?;
133135
self.mt_proofs[i].set_targets(
134136
pw,
135-
true,
136-
pod.dict.commitment(),
137-
proof,
138-
k.raw(),
139-
v.raw(),
137+
&MerkleClaimAndProof::new(
138+
self.params.max_depth_mt_gadget,
139+
pod.dict.commitment(),
140+
k.raw(),
141+
Some(v.raw()),
142+
&proof,
143+
)?,
140144
)?;
141145
Ok(v)
142146
})
@@ -156,32 +160,24 @@ impl SignedPodVerifyTarget {
156160

157161
self.mt_proofs[curr].set_targets(
158162
pw,
159-
true,
160-
pod.dict.commitment(),
161-
proof,
162-
k.raw(),
163-
v.raw(),
163+
&MerkleClaimAndProof::new(
164+
self.params.max_depth_mt_gadget,
165+
pod.dict.commitment(),
166+
k.raw(),
167+
Some(v.raw()),
168+
&proof,
169+
)?,
164170
)?;
165171
curr += 1;
166172
}
167173
// sanity check
168174
assert!(curr <= self.params.max_signed_pod_values);
169175

170176
// add the proofs of empty leaves (if needed), till the max_signed_pod_values
177+
let mut mp = MerkleClaimAndProof::empty(self.params.max_depth_mt_gadget);
178+
mp.root = pod.dict.commitment();
171179
for i in curr..self.params.max_signed_pod_values {
172-
self.mt_proofs[i].set_targets(
173-
pw,
174-
false, // disable verification
175-
pod.dict.commitment(),
176-
// use an empty proof:
177-
MerkleProof {
178-
existence: true,
179-
siblings: vec![],
180-
other_leaf: None,
181-
},
182-
EMPTY_VALUE,
183-
EMPTY_VALUE,
184-
)?;
180+
self.mt_proofs[i].set_targets(pw, &mp)?;
185181
}
186182

187183
// get the signer pk

0 commit comments

Comments
 (0)