make Pod derive from Any (#205)
This commit is contained in:
parent
bf6d8aee8b
commit
58d3c6a236
7 changed files with 29 additions and 56 deletions
|
|
@ -188,6 +188,8 @@ impl SignedPodVerifyTarget {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod tests {
|
pub mod tests {
|
||||||
|
use std::any::Any;
|
||||||
|
|
||||||
use plonky2::plonk::{circuit_builder::CircuitBuilder, circuit_data::CircuitConfig};
|
use plonky2::plonk::{circuit_builder::CircuitBuilder, circuit_data::CircuitConfig};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
@ -218,7 +220,7 @@ pub mod tests {
|
||||||
let sk = SecretKey::new_rand();
|
let sk = SecretKey::new_rand();
|
||||||
let mut signer = Signer(sk);
|
let mut signer = Signer(sk);
|
||||||
let pod = pod.sign(&mut signer).unwrap();
|
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
|
// use the pod in the circuit
|
||||||
let config = CircuitConfig::standard_recursion_config();
|
let config = CircuitConfig::standard_recursion_config();
|
||||||
|
|
|
||||||
|
|
@ -293,8 +293,7 @@ impl PodProver for Prover {
|
||||||
.signed_pods
|
.signed_pods
|
||||||
.iter()
|
.iter()
|
||||||
.map(|p| {
|
.map(|p| {
|
||||||
let p = p
|
let p = (*p as &dyn Any)
|
||||||
.as_any()
|
|
||||||
.downcast_ref::<SignedPod>()
|
.downcast_ref::<SignedPod>()
|
||||||
.expect("type SignedPod");
|
.expect("type SignedPod");
|
||||||
p.clone()
|
p.clone()
|
||||||
|
|
@ -404,13 +403,6 @@ impl Pod for MainPod {
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn into_any(self: Box<Self>) -> Box<dyn Any> {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
fn as_any(&self) -> &dyn Any {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
fn serialized_proof(&self) -> String {
|
fn serialized_proof(&self) -> String {
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
@ -453,7 +445,7 @@ pub mod tests {
|
||||||
|
|
||||||
let mut prover = Prover {};
|
let mut prover = Prover {};
|
||||||
let kyc_pod = kyc_builder.prove(&mut prover, ¶ms)?;
|
let kyc_pod = kyc_builder.prove(&mut prover, ¶ms)?;
|
||||||
let pod = kyc_pod.pod.into_any().downcast::<MainPod>().unwrap();
|
let pod = (kyc_pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap();
|
||||||
|
|
||||||
pod.verify()
|
pod.verify()
|
||||||
}
|
}
|
||||||
|
|
@ -488,14 +480,16 @@ pub mod tests {
|
||||||
// Mock
|
// Mock
|
||||||
let mut prover = MockProver {};
|
let mut prover = MockProver {};
|
||||||
let kyc_pod = kyc_builder.prove(&mut prover, ¶ms).unwrap();
|
let kyc_pod = kyc_builder.prove(&mut prover, ¶ms).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();
|
pod.verify().unwrap();
|
||||||
println!("{:#}", pod);
|
println!("{:#}", pod);
|
||||||
|
|
||||||
// Real
|
// Real
|
||||||
let mut prover = Prover {};
|
let mut prover = Prover {};
|
||||||
let kyc_pod = kyc_builder.prove(&mut prover, ¶ms).unwrap();
|
let kyc_pod = kyc_builder.prove(&mut prover, ¶ms).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()
|
pod.verify().unwrap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
// MainPod
|
// MainPod
|
||||||
//
|
//
|
||||||
|
|
||||||
use std::{any::Any, fmt};
|
use std::fmt;
|
||||||
|
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
use base64::{prelude::BASE64_STANDARD, Engine};
|
use base64::{prelude::BASE64_STANDARD, Engine};
|
||||||
|
|
@ -277,13 +277,6 @@ impl Pod for MockMainPod {
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn into_any(self: Box<Self>) -> Box<dyn Any> {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
fn as_any(&self) -> &dyn Any {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
fn serialized_proof(&self) -> String {
|
fn serialized_proof(&self) -> String {
|
||||||
BASE64_STANDARD.encode(serde_json::to_string(self).unwrap())
|
BASE64_STANDARD.encode(serde_json::to_string(self).unwrap())
|
||||||
}
|
}
|
||||||
|
|
@ -291,6 +284,8 @@ impl Pod for MockMainPod {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod tests {
|
pub mod tests {
|
||||||
|
use std::any::Any;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::{
|
use crate::{
|
||||||
backends::plonky2::mock::signedpod::MockSigner,
|
backends::plonky2::mock::signedpod::MockSigner,
|
||||||
|
|
@ -323,7 +318,9 @@ pub mod tests {
|
||||||
|
|
||||||
let mut prover = MockProver {};
|
let mut prover = MockProver {};
|
||||||
let kyc_pod = kyc_builder.prove(&mut prover, ¶ms)?;
|
let kyc_pod = kyc_builder.prove(&mut prover, ¶ms)?;
|
||||||
let pod = kyc_pod.pod.into_any().downcast::<MockMainPod>().unwrap();
|
let pod = (kyc_pod.pod as Box<dyn Any>)
|
||||||
|
.downcast::<MockMainPod>()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
println!("{:#}", pod);
|
println!("{:#}", pod);
|
||||||
|
|
||||||
|
|
@ -340,9 +337,7 @@ pub mod tests {
|
||||||
|
|
||||||
let mut prover = MockProver {};
|
let mut prover = MockProver {};
|
||||||
let great_boy_pod = great_boy_builder.prove(&mut prover, ¶ms)?;
|
let great_boy_pod = great_boy_builder.prove(&mut prover, ¶ms)?;
|
||||||
let pod = great_boy_pod
|
let pod = (great_boy_pod.pod as Box<dyn Any>)
|
||||||
.pod
|
|
||||||
.into_any()
|
|
||||||
.downcast::<MockMainPod>()
|
.downcast::<MockMainPod>()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
|
@ -359,7 +354,9 @@ pub mod tests {
|
||||||
let tickets_builder = tickets_pod_full_flow()?;
|
let tickets_builder = tickets_pod_full_flow()?;
|
||||||
let mut prover = MockProver {};
|
let mut prover = MockProver {};
|
||||||
let proof_pod = tickets_builder.prove(&mut prover, ¶ms)?;
|
let proof_pod = tickets_builder.prove(&mut prover, ¶ms)?;
|
||||||
let pod = proof_pod.pod.into_any().downcast::<MockMainPod>().unwrap();
|
let pod = (proof_pod.pod as Box<dyn Any>)
|
||||||
|
.downcast::<MockMainPod>()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
println!("{}", pod);
|
println!("{}", pod);
|
||||||
pod.verify()?;
|
pod.verify()?;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use std::{any::Any, collections::HashMap};
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
|
@ -118,13 +118,6 @@ impl Pod for MockSignedPod {
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn into_any(self: Box<Self>) -> Box<dyn Any> {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
fn as_any(&self) -> &dyn Any {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
fn serialized_proof(&self) -> String {
|
fn serialized_proof(&self) -> String {
|
||||||
self.signature.to_string()
|
self.signature.to_string()
|
||||||
}
|
}
|
||||||
|
|
@ -132,7 +125,7 @@ impl Pod for MockSignedPod {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod tests {
|
pub mod tests {
|
||||||
use std::iter;
|
use std::{any::Any, iter};
|
||||||
|
|
||||||
use plonky2::field::types::Field;
|
use plonky2::field::types::Field;
|
||||||
|
|
||||||
|
|
@ -152,7 +145,9 @@ pub mod tests {
|
||||||
|
|
||||||
let mut signer = MockSigner { pk: "Molly".into() };
|
let mut signer = MockSigner { pk: "Molly".into() };
|
||||||
let pod = pod.sign(&mut signer).unwrap();
|
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()?;
|
pod.verify()?;
|
||||||
println!("id: {}", pod.id());
|
println!("id: {}", pod.id());
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use std::{any::Any, collections::HashMap};
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
|
@ -101,13 +101,6 @@ impl Pod for SignedPod {
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn into_any(self: Box<Self>) -> Box<dyn Any> {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
fn as_any(&self) -> &dyn Any {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
fn serialized_proof(&self) -> String {
|
fn serialized_proof(&self) -> String {
|
||||||
let mut buffer = Vec::new();
|
let mut buffer = Vec::new();
|
||||||
use plonky2::util::serialization::Write;
|
use plonky2::util::serialization::Write;
|
||||||
|
|
@ -118,7 +111,7 @@ impl Pod for SignedPod {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod tests {
|
pub mod tests {
|
||||||
use std::iter;
|
use std::{any::Any, iter};
|
||||||
|
|
||||||
use plonky2::field::types::Field;
|
use plonky2::field::types::Field;
|
||||||
|
|
||||||
|
|
@ -140,7 +133,7 @@ pub mod tests {
|
||||||
let sk = SecretKey::new_rand();
|
let sk = SecretKey::new_rand();
|
||||||
let mut signer = Signer(sk);
|
let mut signer = Signer(sk);
|
||||||
let pod = pod.sign(&mut signer).unwrap();
|
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()?;
|
pod.verify()?;
|
||||||
println!("id: {}", pod.id());
|
println!("id: {}", pod.id());
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
#![allow(clippy::get_first)]
|
#![allow(clippy::get_first)]
|
||||||
|
#![feature(trait_upcasting)]
|
||||||
|
|
||||||
pub mod backends;
|
pub mod backends;
|
||||||
pub mod constants;
|
pub mod constants;
|
||||||
|
|
|
||||||
|
|
@ -654,7 +654,7 @@ impl Params {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait Pod: fmt::Debug + DynClone {
|
pub trait Pod: fmt::Debug + DynClone + Any {
|
||||||
fn verify(&self) -> Result<()>;
|
fn verify(&self) -> Result<()>;
|
||||||
fn id(&self) -> PodId;
|
fn id(&self) -> PodId;
|
||||||
fn pub_statements(&self) -> Vec<Statement>;
|
fn pub_statements(&self) -> Vec<Statement>;
|
||||||
|
|
@ -668,9 +668,6 @@ pub trait Pod: fmt::Debug + DynClone {
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
// Used for downcasting
|
|
||||||
fn into_any(self: Box<Self>) -> Box<dyn Any>;
|
|
||||||
fn as_any(&self) -> &dyn Any;
|
|
||||||
// Front-end Pods keep references to middleware Pods. Most of the
|
// Front-end Pods keep references to middleware Pods. Most of the
|
||||||
// middleware data can be derived directly from front-end data, but 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
|
// "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<Statement> {
|
fn pub_statements(&self) -> Vec<Statement> {
|
||||||
Vec::new()
|
Vec::new()
|
||||||
}
|
}
|
||||||
fn into_any(self: Box<Self>) -> Box<dyn Any> {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
fn as_any(&self) -> &dyn Any {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
fn serialized_proof(&self) -> String {
|
fn serialized_proof(&self) -> String {
|
||||||
"".to_string()
|
"".to_string()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue