use snarkvm_errors::dpc::DPCError;
use rand::Rng;
pub trait Program: Clone {
type LocalData;
type PublicInput;
type PrivateWitness;
type ProvingParameters;
type VerificationParameters;
fn execute<R: Rng>(
&self,
proving_key: &Self::ProvingParameters,
verification_key: &Self::VerificationParameters,
local_data: &Self::LocalData,
position: u8,
rng: &mut R,
) -> Result<Self::PrivateWitness, DPCError>;
fn evaluate(&self, primary: &Self::PublicInput, witness: &Self::PrivateWitness) -> bool;
fn into_compact_repr(&self) -> Vec<u8>;
}