diff --git a/src/backends/plonky2/circuits/signedpod.rs b/src/backends/plonky2/circuits/signedpod.rs index 1bd9c6d..73a0c37 100644 --- a/src/backends/plonky2/circuits/signedpod.rs +++ b/src/backends/plonky2/circuits/signedpod.rs @@ -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::().unwrap(); + let signed_pod = (pod.pod as Box).downcast::().unwrap(); // use the pod in the circuit let config = CircuitConfig::standard_recursion_config(); diff --git a/src/backends/plonky2/mainpod/mod.rs b/src/backends/plonky2/mainpod/mod.rs index d372e10..63d059f 100644 --- a/src/backends/plonky2/mainpod/mod.rs +++ b/src/backends/plonky2/mainpod/mod.rs @@ -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::() .expect("type SignedPod"); p.clone() @@ -404,13 +403,6 @@ impl Pod for MainPod { .collect() } - fn into_any(self: Box) -> Box { - 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, ¶ms)?; - let pod = kyc_pod.pod.into_any().downcast::().unwrap(); + let pod = (kyc_pod.pod as Box).downcast::().unwrap(); pod.verify() } @@ -488,14 +480,16 @@ pub mod tests { // Mock let mut prover = MockProver {}; let kyc_pod = kyc_builder.prove(&mut prover, ¶ms).unwrap(); - let pod = kyc_pod.pod.into_any().downcast::().unwrap(); + let pod = (kyc_pod.pod as Box) + .downcast::() + .unwrap(); pod.verify().unwrap(); println!("{:#}", pod); // Real let mut prover = Prover {}; let kyc_pod = kyc_builder.prove(&mut prover, ¶ms).unwrap(); - let pod = kyc_pod.pod.into_any().downcast::().unwrap(); + let pod = (kyc_pod.pod as Box).downcast::().unwrap(); pod.verify().unwrap() } } diff --git a/src/backends/plonky2/mock/mainpod.rs b/src/backends/plonky2/mock/mainpod.rs index f9abf66..9d744f5 100644 --- a/src/backends/plonky2/mock/mainpod.rs +++ b/src/backends/plonky2/mock/mainpod.rs @@ -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) -> Box { - 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, ¶ms)?; - let pod = kyc_pod.pod.into_any().downcast::().unwrap(); + let pod = (kyc_pod.pod as Box) + .downcast::() + .unwrap(); println!("{:#}", pod); @@ -340,9 +337,7 @@ pub mod tests { let mut prover = MockProver {}; let great_boy_pod = great_boy_builder.prove(&mut prover, ¶ms)?; - let pod = great_boy_pod - .pod - .into_any() + let pod = (great_boy_pod.pod as Box) .downcast::() .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, ¶ms)?; - let pod = proof_pod.pod.into_any().downcast::().unwrap(); + let pod = (proof_pod.pod as Box) + .downcast::() + .unwrap(); println!("{}", pod); pod.verify()?; diff --git a/src/backends/plonky2/mock/signedpod.rs b/src/backends/plonky2/mock/signedpod.rs index d79ba6b..90c0f5f 100644 --- a/src/backends/plonky2/mock/signedpod.rs +++ b/src/backends/plonky2/mock/signedpod.rs @@ -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) -> Box { - 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::().unwrap(); + let pod = (pod.pod as Box) + .downcast::() + .unwrap(); pod.verify()?; println!("id: {}", pod.id()); diff --git a/src/backends/plonky2/signedpod.rs b/src/backends/plonky2/signedpod.rs index 9158130..d6c10d7 100644 --- a/src/backends/plonky2/signedpod.rs +++ b/src/backends/plonky2/signedpod.rs @@ -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) -> Box { - 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::().unwrap(); + let pod = (pod.pod as Box).downcast::().unwrap(); pod.verify()?; println!("id: {}", pod.id()); diff --git a/src/lib.rs b/src/lib.rs index 48e89a9..f7823a5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,5 @@ #![allow(clippy::get_first)] +#![feature(trait_upcasting)] pub mod backends; pub mod constants; diff --git a/src/middleware/mod.rs b/src/middleware/mod.rs index 5c776bd..7f8c3fe 100644 --- a/src/middleware/mod.rs +++ b/src/middleware/mod.rs @@ -654,7 +654,7 @@ impl Params { } } -pub trait Pod: fmt::Debug + DynClone { +pub trait Pod: fmt::Debug + DynClone + Any { fn verify(&self) -> Result<()>; fn id(&self) -> PodId; fn pub_statements(&self) -> Vec; @@ -668,9 +668,6 @@ pub trait Pod: fmt::Debug + DynClone { }) .collect() } - // Used for downcasting - fn into_any(self: Box) -> Box; - fn as_any(&self) -> &dyn Any; // Front-end Pods keep references to middleware Pods. Most of the // middleware data can be derived directly from front-end data, but the // "proof" data is only created at the point of proving/signing, and @@ -704,12 +701,6 @@ impl Pod for NonePod { fn pub_statements(&self) -> Vec { Vec::new() } - fn into_any(self: Box) -> Box { - self - } - fn as_any(&self) -> &dyn Any { - self - } fn serialized_proof(&self) -> String { "".to_string() }