Skip to content

Commit 985b179

Browse files
committed
remove enable from MerkleClaimAndProof
1 parent 4635cd4 commit 985b179

File tree

7 files changed

+36
-59
lines changed

7 files changed

+36
-59
lines changed

src/backends/plonky2/circuits/mainpod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ impl MainPodVerifyTarget {
495495
assert_eq!(input.merkle_proofs.len(), self.params.max_merkle_proofs);
496496
for (i, mp) in input.merkle_proofs.iter().enumerate() {
497497
assert_eq!(mp.proof.siblings.len(), self.params.max_depth_mt_gadget);
498-
self.merkle_proofs[i].set_targets(pw, mp)?;
498+
self.merkle_proofs[i].set_targets(pw, true, mp)?;
499499
}
500500
Ok(())
501501
}

src/backends/plonky2/circuits/signedpod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ impl SignedPodVerifyTarget {
134134
let (v, proof) = pod.dict.prove(k)?;
135135
self.mt_proofs[i].set_targets(
136136
pw,
137+
true,
137138
&MerkleClaimAndProof::new(pod.dict.commitment(), k.raw(), Some(v.raw()), proof),
138139
)?;
139140
Ok(v)
@@ -154,6 +155,7 @@ impl SignedPodVerifyTarget {
154155

155156
self.mt_proofs[curr].set_targets(
156157
pw,
158+
true,
157159
&MerkleClaimAndProof::new(pod.dict.commitment(), k.raw(), Some(v.raw()), proof),
158160
)?;
159161
curr += 1;
@@ -165,7 +167,7 @@ impl SignedPodVerifyTarget {
165167
let mut mp = MerkleClaimAndProof::empty();
166168
mp.root = pod.dict.commitment();
167169
for i in curr..self.params.max_signed_pod_values {
168-
self.mt_proofs[i].set_targets(pw, &mp)?;
170+
self.mt_proofs[i].set_targets(pw, true, &mp)?;
169171
}
170172

171173
// get the signer pk

src/backends/plonky2/mainpod/mod.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use crate::{
1919
backends::plonky2::{
2020
basetypes::{C, D},
2121
circuits::mainpod::{MainPodVerifyCircuit, MainPodVerifyInput},
22-
primitives::{merkletree, merkletree::MerkleClaimAndProof},
22+
primitives::merkletree::MerkleClaimAndProof,
2323
signedpod::SignedPod,
2424
},
2525
middleware::{
@@ -113,12 +113,7 @@ fn find_op_aux(
113113
middleware::OperationAux::MerkleProof(pf_arg) => merkle_proofs
114114
.iter()
115115
.enumerate()
116-
.find_map(|(i, pf)| {
117-
pf.clone()
118-
.try_into()
119-
.ok()
120-
.and_then(|mid_pf: merkletree::MerkleProof| (&mid_pf == pf_arg).then_some(i))
121-
})
116+
.find_map(|(i, pf)| (pf.proof == *pf_arg).then_some(i))
122117
.map(OperationAux::MerkleProofIndex)
123118
.ok_or(anyhow!(
124119
"Merkle proof corresponding to op arg {} not found",

src/backends/plonky2/mainpod/operation.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -74,16 +74,15 @@ impl Operation {
7474
})
7575
.collect::<Result<Vec<_>>>()?;
7676
let deref_aux = match self.2 {
77-
OperationAux::None => Ok(crate::middleware::OperationAux::None),
78-
OperationAux::MerkleProofIndex(i) => merkle_proofs
79-
.get(i)
80-
.cloned()
81-
.ok_or(anyhow!("Missing Merkle proof index {}", i))
82-
.and_then(|mp| {
83-
mp.try_into()
84-
.map(crate::middleware::OperationAux::MerkleProof)
85-
}),
86-
}?;
77+
OperationAux::None => crate::middleware::OperationAux::None,
78+
OperationAux::MerkleProofIndex(i) => crate::middleware::OperationAux::MerkleProof(
79+
merkle_proofs
80+
.get(i)
81+
.ok_or(anyhow!("Missing Merkle proof index {}", i))?
82+
.proof
83+
.clone(),
84+
),
85+
};
8786
middleware::Operation::op(self.0.clone(), &deref_args, &deref_aux)
8887
}
8988
}

src/backends/plonky2/primitives/merkletree.rs

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,6 @@ impl MerkleProof {
262262

263263
#[derive(Clone, Debug, PartialEq)]
264264
pub struct MerkleClaimAndProof {
265-
/// `enabled` determines if the merkleproof verification is enabled
266-
pub enabled: bool,
267265
pub root: Hash,
268266
pub key: RawValue,
269267
pub value: RawValue,
@@ -273,7 +271,6 @@ pub struct MerkleClaimAndProof {
273271
impl MerkleClaimAndProof {
274272
pub fn empty() -> Self {
275273
Self {
276-
enabled: false,
277274
root: EMPTY_HASH,
278275
key: EMPTY_VALUE,
279276
value: EMPTY_VALUE,
@@ -286,7 +283,6 @@ impl MerkleClaimAndProof {
286283
}
287284
pub fn new(root: Hash, key: RawValue, value: Option<RawValue>, proof: MerkleProof) -> Self {
288285
Self {
289-
enabled: true,
290286
root,
291287
key,
292288
value: value.unwrap_or(EMPTY_VALUE),
@@ -295,36 +291,9 @@ impl MerkleClaimAndProof {
295291
}
296292
}
297293

298-
impl TryFrom<MerkleClaimAndProof> for MerkleProof {
299-
type Error = anyhow::Error;
300-
fn try_from(mp: MerkleClaimAndProof) -> Result<Self> {
301-
if !mp.enabled {
302-
return Err(anyhow!("Not a valid Merkle proof."));
303-
}
304-
Ok(MerkleProof {
305-
existence: mp.proof.existence,
306-
// Trim padding (if any).
307-
siblings: mp
308-
.proof
309-
.siblings
310-
.into_iter()
311-
.rev()
312-
.skip_while(|s| s == &EMPTY_HASH)
313-
.collect::<Vec<_>>()
314-
.into_iter()
315-
.rev()
316-
.collect(),
317-
other_leaf: mp.proof.other_leaf,
318-
})
319-
}
320-
}
321-
322294
impl fmt::Display for MerkleClaimAndProof {
323295
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
324-
match MerkleProof::try_from(self.clone()) {
325-
Err(_) => write!(f, "∅"),
326-
Ok(mp) => mp.fmt(f),
327-
}
296+
self.proof.fmt(f)
328297
}
329298
}
330299

src/backends/plonky2/primitives/merkletree_circuit.rs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,13 @@ impl MerkleProofGadget {
158158
impl MerkleClaimAndProofTarget {
159159
/// assigns the given values to the targets
160160
#[allow(clippy::too_many_arguments)]
161-
pub fn set_targets(&self, pw: &mut PartialWitness<F>, mp: &MerkleClaimAndProof) -> Result<()> {
162-
pw.set_bool_target(self.enabled, mp.enabled)?;
161+
pub fn set_targets(
162+
&self,
163+
pw: &mut PartialWitness<F>,
164+
enabled: bool,
165+
mp: &MerkleClaimAndProof,
166+
) -> Result<()> {
167+
pw.set_bool_target(self.enabled, enabled)?;
163168
pw.set_hash_target(self.root, HashOut::from_vec(mp.root.0.to_vec()))?;
164169
pw.set_target_arr(&self.key.elements, &mp.key.0)?;
165170
pw.set_target_arr(&self.value.elements, &mp.value.0)?;
@@ -263,10 +268,15 @@ impl MerkleProofExistenceGadget {
263268

264269
impl MerkleProofExistenceTarget {
265270
/// assigns the given values to the targets
266-
pub fn set_targets(&self, pw: &mut PartialWitness<F>, mp: &MerkleClaimAndProof) -> Result<()> {
271+
pub fn set_targets(
272+
&self,
273+
pw: &mut PartialWitness<F>,
274+
enabled: bool,
275+
mp: &MerkleClaimAndProof,
276+
) -> Result<()> {
267277
assert!(mp.proof.existence); // sanity check
268278

269-
pw.set_bool_target(self.enabled, mp.enabled)?;
279+
pw.set_bool_target(self.enabled, enabled)?;
270280
pw.set_hash_target(self.root, HashOut::from_vec(mp.root.0.to_vec()))?;
271281
pw.set_target_arr(&self.key.elements, &mp.key.0)?;
272282
pw.set_target_arr(&self.value.elements, &mp.value.0)?;
@@ -534,6 +544,7 @@ pub mod tests {
534544
let targets = MerkleProofGadget { max_depth }.eval(&mut builder)?;
535545
targets.set_targets(
536546
&mut pw,
547+
true,
537548
&MerkleClaimAndProof::new(tree.root(), key, Some(value), proof),
538549
)?;
539550

@@ -579,6 +590,7 @@ pub mod tests {
579590
let targets = MerkleProofExistenceGadget { max_depth }.eval(&mut builder)?;
580591
targets.set_targets(
581592
&mut pw,
593+
true,
582594
&MerkleClaimAndProof::new(tree.root(), key, Some(value), proof),
583595
)?;
584596

@@ -653,6 +665,7 @@ pub mod tests {
653665
let targets = MerkleProofGadget { max_depth }.eval(&mut builder)?;
654666
targets.set_targets(
655667
&mut pw,
668+
true,
656669
&MerkleClaimAndProof::new(tree.root(), key, Some(value), proof),
657670
)?;
658671

@@ -697,7 +710,7 @@ pub mod tests {
697710
let targets = MerkleProofGadget { max_depth }.eval(&mut builder)?;
698711
// verification enabled & proof of existence
699712
let mut mp = MerkleClaimAndProof::new(tree2.root(), key, Some(value), proof);
700-
targets.set_targets(&mut pw, &mp)?;
713+
targets.set_targets(&mut pw, true, &mp)?;
701714

702715
// generate proof, expecting it to fail (since we're using the wrong
703716
// root)
@@ -712,8 +725,7 @@ pub mod tests {
712725

713726
let targets = MerkleProofGadget { max_depth }.eval(&mut builder)?;
714727
// verification disabled & proof of existence
715-
mp.enabled = false;
716-
targets.set_targets(&mut pw, &mp)?;
728+
targets.set_targets(&mut pw, false, &mp)?;
717729

718730
// generate proof, should pass despite using wrong witness, since the
719731
// `enabled=false`

src/backends/plonky2/primitives/signature_circuit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ pub mod tests {
176176
use crate::{backends::plonky2::primitives::signature::SecretKey, middleware::Hash};
177177

178178
#[test]
179-
fn test_signature_gadget() -> Result<()> {
179+
fn test_signature_gadget_enabled() -> Result<()> {
180180
// generate a valid signature
181181
let sk = SecretKey::new_rand();
182182
let pk = sk.public_key();

0 commit comments

Comments
 (0)