Skip to content

Commit 9db3dc9

Browse files
committed
Code review
1 parent b3077c6 commit 9db3dc9

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

src/backends/plonky2/primitives/merkletree_circuit.rs

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,9 @@ impl<const MAX_DEPTH: usize> MerkleProofCircuit<MAX_DEPTH> {
7979

8080
// define the case_i_selector as true when both existence and
8181
// case_ii_selector are false:
82-
// case_i_selector = (1 - existence) * (1 - case_ii_selector)
83-
let one = builder.one();
84-
let existence_inv = builder.sub(one, existence.target);
85-
let case_ii_inv = builder.sub(one, case_ii_selector.target);
86-
let case_i_selector = BoolTarget::new_unsafe(builder.mul(existence_inv, case_ii_inv));
82+
let not_existence = builder.not(existence);
83+
let not_case_ii_selector = builder.not(case_ii_selector);
84+
let case_i_selector = builder.and(not_existence, not_case_ii_selector);
8785

8886
// use (key,value) or (other_key, other_value) depending if it's a proof
8987
// of existence or of non-existence, ie:
@@ -141,8 +139,8 @@ impl<const MAX_DEPTH: usize> MerkleProofCircuit<MAX_DEPTH> {
141139
value: Value,
142140
) -> Result<()> {
143141
pw.set_hash_target(self.root, HashOut::from_vec(root.0.to_vec()))?;
144-
pw.set_target_arr(&self.key, &key.0.to_vec())?;
145-
pw.set_target_arr(&self.value, &value.0.to_vec())?;
142+
pw.set_target_arr(&self.key, &key.0)?;
143+
pw.set_target_arr(&self.value, &value.0)?;
146144
pw.set_bool_target(self.existence, existence)?;
147145

148146
// pad siblings with zeros to length MAX_DEPTH
@@ -154,16 +152,19 @@ impl<const MAX_DEPTH: usize> MerkleProofCircuit<MAX_DEPTH> {
154152
pw.set_hash_target(self.siblings[i], HashOut::from_vec(sibling.0.to_vec()))?;
155153
}
156154

157-
if !existence && proof.other_leaf.is_some() {
158-
// non-existence case ii) expected leaf does exist but it has a different key
159-
pw.set_bool_target(self.case_ii_selector, true)?;
160-
pw.set_target_arr(&self.other_key, &proof.other_leaf.unwrap().0 .0.to_vec())?;
161-
pw.set_target_arr(&self.other_value, &proof.other_leaf.unwrap().1 .0.to_vec())?;
162-
} else {
163-
// existence & non-existence case i) expected leaf does not exist
164-
pw.set_bool_target(self.case_ii_selector, false)?;
165-
pw.set_target_arr(&self.other_key, &EMPTY_VALUE.0.to_vec())?;
166-
pw.set_target_arr(&self.other_value, &EMPTY_VALUE.0.to_vec())?;
155+
match proof.other_leaf {
156+
Some((k, v)) if !existence => {
157+
// non-existence case ii) expected leaf does exist but it has a different key
158+
pw.set_bool_target(self.case_ii_selector, true)?;
159+
pw.set_target_arr(&self.other_key, &k.0)?;
160+
pw.set_target_arr(&self.other_value, &v.0)?;
161+
}
162+
_ => {
163+
// existence & non-existence case i) expected leaf does not exist
164+
pw.set_bool_target(self.case_ii_selector, false)?;
165+
pw.set_target_arr(&self.other_key, &EMPTY_VALUE.0)?;
166+
pw.set_target_arr(&self.other_value, &EMPTY_VALUE.0)?;
167+
}
167168
}
168169

169170
Ok(())
@@ -217,8 +218,8 @@ impl<const MAX_DEPTH: usize> MerkleProofExistenceCircuit<MAX_DEPTH> {
217218
value: Value,
218219
) -> Result<()> {
219220
pw.set_hash_target(self.root, HashOut::from_vec(root.0.to_vec()))?;
220-
pw.set_target_arr(&self.key, &key.0.to_vec())?;
221-
pw.set_target_arr(&self.value, &value.0.to_vec())?;
221+
pw.set_target_arr(&self.key, &key.0)?;
222+
pw.set_target_arr(&self.value, &value.0)?;
222223

223224
// pad siblings with zeros to length MAX_DEPTH
224225
let mut siblings = proof.siblings.clone();
@@ -377,7 +378,7 @@ pub mod tests {
377378
}
378379

379380
// assign the input values to the targets
380-
pw.set_target_arr(&key_targ, &key.0.to_vec())?;
381+
pw.set_target_arr(&key_targ, &key.0)?;
381382
for i in 0..MD {
382383
pw.set_bool_target(expected_path_targ[i], expected_path[i])?;
383384
}
@@ -410,8 +411,8 @@ pub mod tests {
410411
builder.connect_hashes(computed_h, h_targ);
411412

412413
// assign the input values to the targets
413-
pw.set_target_arr(&key_targ, &key.0.to_vec())?;
414-
pw.set_target_arr(&value_targ, &value.0.to_vec())?;
414+
pw.set_target_arr(&key_targ, &key.0)?;
415+
pw.set_target_arr(&value_targ, &value.0)?;
415416
pw.set_hash_target(h_targ, HashOut::from_vec(h.0.to_vec()))?;
416417

417418
// generate & verify proof

0 commit comments

Comments
 (0)