use anyhow::Result;
pub mod prelude;
#[cfg(feature = "risc0")]
pub mod risc0;
#[cfg(feature = "sp1")]
pub mod sp1;
pub trait ZKAgent {
fn execute(&self, input: &[u8], program: &dyn ZKProgram) -> Result<Box<dyn ZKExe>>;
fn verify(&self, proof: &dyn ZKExe) -> Result<Vec<u8>>;
}
pub trait ZKProgram {
fn id(&self) -> &[u8; 32];
fn name(&self) -> Option<&str>;
fn elf(&self) -> &[u8];
fn agent(&self) -> Option<&dyn ZKAgent>;
}
pub trait ZKExe {
fn cipher_bytes(&self) -> &[u8];
fn program_id(&self) -> &[u8; 32];
fn agent(&self) -> Option<&dyn ZKAgent>;
fn program(&self) -> Option<&dyn ZKProgram>;
}