use super::*;
#[derive(Clone)]
pub struct OfflineExecution<N: Network> {
execution: Execution<N>,
response: Option<Response<N>>,
trace: Trace<N>,
public_outputs: Option<Vec<Value<N>>>,
}
impl<N: Network> OfflineExecution<N> {
pub(crate) fn new(
execution: Execution<N>,
response: Option<Response<N>>,
trace: Trace<N>,
public_outputs: Option<Vec<Value<N>>>,
) -> Self {
Self { execution, response, trace, public_outputs }
}
pub fn execution(&self) -> &Execution<N> {
&self.execution
}
pub fn execution_id(&self) -> Result<Field<N>> {
self.execution.to_execution_id()
}
pub fn execution_proof(&self) -> Option<&Proof<N>> {
self.execution.proof()
}
pub fn outputs(&self) -> Option<Vec<Value<N>>> {
self.response.as_ref().map(|r| r.outputs().to_vec())
}
pub fn public_outputs(&self) -> Option<Vec<Value<N>>> {
self.public_outputs.clone()
}
pub fn trace(&self) -> &Trace<N> {
&self.trace
}
#[allow(clippy::type_complexity)]
pub fn verify_execution_proof(
&self,
locator: &str,
verifier_inputs: Vec<(VerifyingKey<N>, Vec<Vec<N::Field>>)>,
execution: &Execution<N>,
) -> Result<(), String> {
Trace::verify_execution_proof(locator, verifier_inputs, execution).map_err(|e| e.to_string())
}
}