use anyhow::Result;
mod risczero;
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>;
}
pub trait ZKAgent {
fn execute(&self, input: &[u8], program: &dyn ZKProgram) -> Result<Box<dyn ZKExe>>;
fn verify(&self, proof: &dyn ZKExe) -> Result<Vec<u8>>;
}