move MainPod layouting to mainpod (#196)

* move MainPod layouting to mainpod

* wip

* use MerkleClaimAndProof in merkle circuit set_targets

* fix empty mt proof
This commit is contained in:
Eduard S. 2025-04-17 13:31:44 +02:00 committed by GitHub
parent 0b5d4dd802
commit 281f57f0a0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 814 additions and 904 deletions

View file

@ -16,10 +16,9 @@ use crate::{
},
signedpod::{SignedPodVerifyGadget, SignedPodVerifyTarget},
},
mock::{mainpod, mainpod::MerkleClaimAndProof},
primitives::{
merkletree,
merkletree::{MerkleClaimAndProofTarget, MerkleProofGadget},
mainpod,
primitives::merkletree::{
MerkleClaimAndProof, MerkleClaimAndProofTarget, MerkleProofGadget,
},
signedpod::SignedPod,
},
@ -495,20 +494,8 @@ impl MainPodVerifyTarget {
}
assert_eq!(input.merkle_proofs.len(), self.params.max_merkle_proofs);
for (i, mp) in input.merkle_proofs.iter().enumerate() {
assert_eq!(mp.siblings.len(), self.params.max_depth_mt_gadget);
self.merkle_proofs[i].set_targets(
pw,
mp.enabled,
mp.existence,
mp.root,
mp.clone().try_into().unwrap_or(merkletree::MerkleProof {
existence: mp.existence,
siblings: mp.siblings.clone(),
other_leaf: None,
}),
mp.key,
mp.value,
)?;
assert_eq!(mp.proof.siblings.len(), self.params.max_depth_mt_gadget);
self.merkle_proofs[i].set_targets(pw, mp)?;
}
Ok(())
}
@ -531,26 +518,23 @@ impl MainPodVerifyCircuit {
#[cfg(test)]
mod tests {
use merkletree::MerkleTree;
use plonky2::plonk::{circuit_builder::CircuitBuilder, circuit_data::CircuitConfig};
use super::*;
use crate::{
backends::plonky2::{
basetypes::C,
mock::{
mainpod,
mainpod::{OperationArg, OperationAux},
},
mainpod::{OperationArg, OperationAux},
primitives::merkletree::{MerkleClaimAndProof, MerkleTree},
},
middleware::{OperationType, PodId, RawValue},
middleware::{Hash, OperationType, PodId, RawValue},
};
fn operation_verify(
st: mainpod::Statement,
op: mainpod::Operation,
prev_statements: Vec<mainpod::Statement>,
merkle_proofs: Vec<mainpod::MerkleClaimAndProof>,
merkle_proofs: Vec<MerkleClaimAndProof>,
) -> Result<()> {
let params = Params::default();
let mp_gadget = MerkleProofGadget {
@ -595,15 +579,7 @@ mod tests {
for (merkle_proof_target, merkle_proof) in
merkle_proofs_target.iter().zip(merkle_proofs.iter())
{
merkle_proof_target.set_targets(
&mut pw,
merkle_proof.enabled,
merkle_proof.existence,
merkle_proof.root,
merkle_proof.clone().try_into()?,
merkle_proof.key,
merkle_proof.value,
)?
merkle_proof_target.set_targets(&mut pw, &merkle_proof)?
}
// generate & verify proof
@ -730,10 +706,10 @@ mod tests {
OperationAux::MerkleProofIndex(0),
);
let merkle_proofs = vec![mainpod::MerkleClaimAndProof::try_from_middleware(
&params,
&root.raw(),
&key,
let merkle_proofs = vec![MerkleClaimAndProof::new(
params.max_depth_mt_gadget,
Hash::from(root.raw()),
key,
None,
&no_key_pf,
)?];