make Pod derive from Any (#205)

This commit is contained in:
Daniel Gulotta 2025-04-22 06:06:23 -06:00 committed by GitHub
parent bf6d8aee8b
commit 58d3c6a236
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 29 additions and 56 deletions

View file

@ -188,6 +188,8 @@ impl SignedPodVerifyTarget {
#[cfg(test)]
pub mod tests {
use std::any::Any;
use plonky2::plonk::{circuit_builder::CircuitBuilder, circuit_data::CircuitConfig};
use super::*;
@ -218,7 +220,7 @@ pub mod tests {
let sk = SecretKey::new_rand();
let mut signer = Signer(sk);
let pod = pod.sign(&mut signer).unwrap();
let signed_pod = pod.pod.into_any().downcast::<SignedPod>().unwrap();
let signed_pod = (pod.pod as Box<dyn Any>).downcast::<SignedPod>().unwrap();
// use the pod in the circuit
let config = CircuitConfig::standard_recursion_config();

View file

@ -293,8 +293,7 @@ impl PodProver for Prover {
.signed_pods
.iter()
.map(|p| {
let p = p
.as_any()
let p = (*p as &dyn Any)
.downcast_ref::<SignedPod>()
.expect("type SignedPod");
p.clone()
@ -404,13 +403,6 @@ impl Pod for MainPod {
.collect()
}
fn into_any(self: Box<Self>) -> Box<dyn Any> {
self
}
fn as_any(&self) -> &dyn Any {
self
}
fn serialized_proof(&self) -> String {
todo!()
}
@ -453,7 +445,7 @@ pub mod tests {
let mut prover = Prover {};
let kyc_pod = kyc_builder.prove(&mut prover, &params)?;
let pod = kyc_pod.pod.into_any().downcast::<MainPod>().unwrap();
let pod = (kyc_pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap();
pod.verify()
}
@ -488,14 +480,16 @@ pub mod tests {
// Mock
let mut prover = MockProver {};
let kyc_pod = kyc_builder.prove(&mut prover, &params).unwrap();
let pod = kyc_pod.pod.into_any().downcast::<MockMainPod>().unwrap();
let pod = (kyc_pod.pod as Box<dyn Any>)
.downcast::<MockMainPod>()
.unwrap();
pod.verify().unwrap();
println!("{:#}", pod);
// Real
let mut prover = Prover {};
let kyc_pod = kyc_builder.prove(&mut prover, &params).unwrap();
let pod = kyc_pod.pod.into_any().downcast::<MainPod>().unwrap();
let pod = (kyc_pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap();
pod.verify().unwrap()
}
}

View file

@ -2,7 +2,7 @@
// MainPod
//
use std::{any::Any, fmt};
use std::fmt;
use anyhow::{anyhow, Result};
use base64::{prelude::BASE64_STANDARD, Engine};
@ -277,13 +277,6 @@ impl Pod for MockMainPod {
.collect()
}
fn into_any(self: Box<Self>) -> Box<dyn Any> {
self
}
fn as_any(&self) -> &dyn Any {
self
}
fn serialized_proof(&self) -> String {
BASE64_STANDARD.encode(serde_json::to_string(self).unwrap())
}
@ -291,6 +284,8 @@ impl Pod for MockMainPod {
#[cfg(test)]
pub mod tests {
use std::any::Any;
use super::*;
use crate::{
backends::plonky2::mock::signedpod::MockSigner,
@ -323,7 +318,9 @@ pub mod tests {
let mut prover = MockProver {};
let kyc_pod = kyc_builder.prove(&mut prover, &params)?;
let pod = kyc_pod.pod.into_any().downcast::<MockMainPod>().unwrap();
let pod = (kyc_pod.pod as Box<dyn Any>)
.downcast::<MockMainPod>()
.unwrap();
println!("{:#}", pod);
@ -340,9 +337,7 @@ pub mod tests {
let mut prover = MockProver {};
let great_boy_pod = great_boy_builder.prove(&mut prover, &params)?;
let pod = great_boy_pod
.pod
.into_any()
let pod = (great_boy_pod.pod as Box<dyn Any>)
.downcast::<MockMainPod>()
.unwrap();
@ -359,7 +354,9 @@ pub mod tests {
let tickets_builder = tickets_pod_full_flow()?;
let mut prover = MockProver {};
let proof_pod = tickets_builder.prove(&mut prover, &params)?;
let pod = proof_pod.pod.into_any().downcast::<MockMainPod>().unwrap();
let pod = (proof_pod.pod as Box<dyn Any>)
.downcast::<MockMainPod>()
.unwrap();
println!("{}", pod);
pod.verify()?;

View file

@ -1,4 +1,4 @@
use std::{any::Any, collections::HashMap};
use std::collections::HashMap;
use anyhow::{anyhow, Result};
use itertools::Itertools;
@ -118,13 +118,6 @@ impl Pod for MockSignedPod {
.collect()
}
fn into_any(self: Box<Self>) -> Box<dyn Any> {
self
}
fn as_any(&self) -> &dyn Any {
self
}
fn serialized_proof(&self) -> String {
self.signature.to_string()
}
@ -132,7 +125,7 @@ impl Pod for MockSignedPod {
#[cfg(test)]
pub mod tests {
use std::iter;
use std::{any::Any, iter};
use plonky2::field::types::Field;
@ -152,7 +145,9 @@ pub mod tests {
let mut signer = MockSigner { pk: "Molly".into() };
let pod = pod.sign(&mut signer).unwrap();
let pod = pod.pod.into_any().downcast::<MockSignedPod>().unwrap();
let pod = (pod.pod as Box<dyn Any>)
.downcast::<MockSignedPod>()
.unwrap();
pod.verify()?;
println!("id: {}", pod.id());

View file

@ -1,4 +1,4 @@
use std::{any::Any, collections::HashMap};
use std::collections::HashMap;
use anyhow::{anyhow, Result};
use itertools::Itertools;
@ -101,13 +101,6 @@ impl Pod for SignedPod {
.collect()
}
fn into_any(self: Box<Self>) -> Box<dyn Any> {
self
}
fn as_any(&self) -> &dyn Any {
self
}
fn serialized_proof(&self) -> String {
let mut buffer = Vec::new();
use plonky2::util::serialization::Write;
@ -118,7 +111,7 @@ impl Pod for SignedPod {
#[cfg(test)]
pub mod tests {
use std::iter;
use std::{any::Any, iter};
use plonky2::field::types::Field;
@ -140,7 +133,7 @@ pub mod tests {
let sk = SecretKey::new_rand();
let mut signer = Signer(sk);
let pod = pod.sign(&mut signer).unwrap();
let pod = pod.pod.into_any().downcast::<SignedPod>().unwrap();
let pod = (pod.pod as Box<dyn Any>).downcast::<SignedPod>().unwrap();
pod.verify()?;
println!("id: {}", pod.id());