Skip to content

Commit f2d6796

Browse files
committed
make Pod derive from Any
1 parent 26a6b2d commit f2d6796

File tree

7 files changed

+29
-56
lines changed

7 files changed

+29
-56
lines changed

src/backends/plonky2/circuits/signedpod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ impl SignedPodVerifyTarget {
188188

189189
#[cfg(test)]
190190
pub mod tests {
191+
use std::any::Any;
192+
191193
use plonky2::plonk::{circuit_builder::CircuitBuilder, circuit_data::CircuitConfig};
192194

193195
use super::*;
@@ -218,7 +220,7 @@ pub mod tests {
218220
let sk = SecretKey::new_rand();
219221
let mut signer = Signer(sk);
220222
let pod = pod.sign(&mut signer).unwrap();
221-
let signed_pod = pod.pod.into_any().downcast::<SignedPod>().unwrap();
223+
let signed_pod = (pod.pod as Box<dyn Any>).downcast::<SignedPod>().unwrap();
222224

223225
// use the pod in the circuit
224226
let config = CircuitConfig::standard_recursion_config();

src/backends/plonky2/mainpod/mod.rs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,7 @@ impl PodProver for Prover {
293293
.signed_pods
294294
.iter()
295295
.map(|p| {
296-
let p = p
297-
.as_any()
296+
let p = (*p as &dyn Any)
298297
.downcast_ref::<SignedPod>()
299298
.expect("type SignedPod");
300299
p.clone()
@@ -404,13 +403,6 @@ impl Pod for MainPod {
404403
.collect()
405404
}
406405

407-
fn into_any(self: Box<Self>) -> Box<dyn Any> {
408-
self
409-
}
410-
fn as_any(&self) -> &dyn Any {
411-
self
412-
}
413-
414406
fn serialized_proof(&self) -> String {
415407
todo!()
416408
}
@@ -453,7 +445,7 @@ pub mod tests {
453445

454446
let mut prover = Prover {};
455447
let kyc_pod = kyc_builder.prove(&mut prover, &params)?;
456-
let pod = kyc_pod.pod.into_any().downcast::<MainPod>().unwrap();
448+
let pod = (kyc_pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap();
457449

458450
pod.verify()
459451
}
@@ -488,14 +480,16 @@ pub mod tests {
488480
// Mock
489481
let mut prover = MockProver {};
490482
let kyc_pod = kyc_builder.prove(&mut prover, &params).unwrap();
491-
let pod = kyc_pod.pod.into_any().downcast::<MockMainPod>().unwrap();
483+
let pod = (kyc_pod.pod as Box<dyn Any>)
484+
.downcast::<MockMainPod>()
485+
.unwrap();
492486
pod.verify().unwrap();
493487
println!("{:#}", pod);
494488

495489
// Real
496490
let mut prover = Prover {};
497491
let kyc_pod = kyc_builder.prove(&mut prover, &params).unwrap();
498-
let pod = kyc_pod.pod.into_any().downcast::<MainPod>().unwrap();
492+
let pod = (kyc_pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap();
499493
pod.verify().unwrap()
500494
}
501495
}

src/backends/plonky2/mock/mainpod.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// MainPod
33
//
44

5-
use std::{any::Any, fmt};
5+
use std::fmt;
66

77
use anyhow::{anyhow, Result};
88

@@ -274,13 +274,6 @@ impl Pod for MockMainPod {
274274
.collect()
275275
}
276276

277-
fn into_any(self: Box<Self>) -> Box<dyn Any> {
278-
self
279-
}
280-
fn as_any(&self) -> &dyn Any {
281-
self
282-
}
283-
284277
fn serialized_proof(&self) -> String {
285278
todo!()
286279
// BASE64_STANDARD.encode(serde_json::to_string(self).unwrap())
@@ -289,6 +282,8 @@ impl Pod for MockMainPod {
289282

290283
#[cfg(test)]
291284
pub mod tests {
285+
use std::any::Any;
286+
292287
use super::*;
293288
use crate::{
294289
backends::plonky2::mock::signedpod::MockSigner,
@@ -321,7 +316,9 @@ pub mod tests {
321316

322317
let mut prover = MockProver {};
323318
let kyc_pod = kyc_builder.prove(&mut prover, &params)?;
324-
let pod = kyc_pod.pod.into_any().downcast::<MockMainPod>().unwrap();
319+
let pod = (kyc_pod.pod as Box<dyn Any>)
320+
.downcast::<MockMainPod>()
321+
.unwrap();
325322

326323
println!("{:#}", pod);
327324

@@ -338,9 +335,7 @@ pub mod tests {
338335

339336
let mut prover = MockProver {};
340337
let great_boy_pod = great_boy_builder.prove(&mut prover, &params)?;
341-
let pod = great_boy_pod
342-
.pod
343-
.into_any()
338+
let pod = (great_boy_pod.pod as Box<dyn Any>)
344339
.downcast::<MockMainPod>()
345340
.unwrap();
346341

@@ -357,7 +352,9 @@ pub mod tests {
357352
let tickets_builder = tickets_pod_full_flow()?;
358353
let mut prover = MockProver {};
359354
let proof_pod = tickets_builder.prove(&mut prover, &params)?;
360-
let pod = proof_pod.pod.into_any().downcast::<MockMainPod>().unwrap();
355+
let pod = (proof_pod.pod as Box<dyn Any>)
356+
.downcast::<MockMainPod>()
357+
.unwrap();
361358

362359
println!("{}", pod);
363360
pod.verify()?;

src/backends/plonky2/mock/signedpod.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{any::Any, collections::HashMap};
1+
use std::collections::HashMap;
22

33
use anyhow::{anyhow, Result};
44
use itertools::Itertools;
@@ -122,21 +122,14 @@ impl Pod for MockSignedPod {
122122
.collect()
123123
}
124124

125-
fn into_any(self: Box<Self>) -> Box<dyn Any> {
126-
self
127-
}
128-
fn as_any(&self) -> &dyn Any {
129-
self
130-
}
131-
132125
fn serialized_proof(&self) -> String {
133126
self.signature.to_string()
134127
}
135128
}
136129

137130
#[cfg(test)]
138131
pub mod tests {
139-
use std::iter;
132+
use std::{any::Any, iter};
140133

141134
use plonky2::field::types::Field;
142135

@@ -156,7 +149,9 @@ pub mod tests {
156149

157150
let mut signer = MockSigner { pk: "Molly".into() };
158151
let pod = pod.sign(&mut signer).unwrap();
159-
let pod = pod.pod.into_any().downcast::<MockSignedPod>().unwrap();
152+
let pod = (pod.pod as Box<dyn Any>)
153+
.downcast::<MockSignedPod>()
154+
.unwrap();
160155

161156
pod.verify()?;
162157
println!("id: {}", pod.id());

src/backends/plonky2/signedpod.rs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{any::Any, collections::HashMap};
1+
use std::collections::HashMap;
22

33
use anyhow::{anyhow, Result};
44
use itertools::Itertools;
@@ -101,13 +101,6 @@ impl Pod for SignedPod {
101101
.collect()
102102
}
103103

104-
fn into_any(self: Box<Self>) -> Box<dyn Any> {
105-
self
106-
}
107-
fn as_any(&self) -> &dyn Any {
108-
self
109-
}
110-
111104
fn serialized_proof(&self) -> String {
112105
let mut buffer = Vec::new();
113106
use plonky2::util::serialization::Write;
@@ -118,7 +111,7 @@ impl Pod for SignedPod {
118111

119112
#[cfg(test)]
120113
pub mod tests {
121-
use std::iter;
114+
use std::{any::Any, iter};
122115

123116
use plonky2::field::types::Field;
124117

@@ -140,7 +133,7 @@ pub mod tests {
140133
let sk = SecretKey::new_rand();
141134
let mut signer = Signer(sk);
142135
let pod = pod.sign(&mut signer).unwrap();
143-
let pod = pod.pod.into_any().downcast::<SignedPod>().unwrap();
136+
let pod = (pod.pod as Box<dyn Any>).downcast::<SignedPod>().unwrap();
144137

145138
pod.verify()?;
146139
println!("id: {}", pod.id());

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#![allow(clippy::get_first)]
2+
#![feature(trait_upcasting)]
23

34
pub mod backends;
45
pub mod constants;

src/middleware/mod.rs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ impl Params {
487487
}
488488
}
489489

490-
pub trait Pod: fmt::Debug + DynClone {
490+
pub trait Pod: fmt::Debug + DynClone + Any {
491491
fn verify(&self) -> Result<()>;
492492
fn id(&self) -> PodId;
493493
fn pub_statements(&self) -> Vec<Statement>;
@@ -501,9 +501,6 @@ pub trait Pod: fmt::Debug + DynClone {
501501
})
502502
.collect()
503503
}
504-
// Used for downcasting
505-
fn into_any(self: Box<Self>) -> Box<dyn Any>;
506-
fn as_any(&self) -> &dyn Any;
507504
// Front-end Pods keep references to middleware Pods. Most of the
508505
// middleware data can be derived directly from front-end data, but the
509506
// "proof" data is only created at the point of proving/signing, and
@@ -537,12 +534,6 @@ impl Pod for NonePod {
537534
fn pub_statements(&self) -> Vec<Statement> {
538535
Vec::new()
539536
}
540-
fn into_any(self: Box<Self>) -> Box<dyn Any> {
541-
self
542-
}
543-
fn as_any(&self) -> &dyn Any {
544-
self
545-
}
546537
fn serialized_proof(&self) -> String {
547538
"".to_string()
548539
}

0 commit comments

Comments
 (0)