use super::*;
use snarkvm_synthesizer_error::*;
impl<N: Network> Process<N> {
#[inline]
pub fn deploy<A: circuit::Aleo<Network = N>, R: Rng + CryptoRng>(
&self,
program: &Program<N>,
rng: &mut R,
) -> Result<Deployment<N>, ProcessDeployError> {
let timer = timer!("Process::deploy");
let stack = Stack::new(self, program)?;
lap!(timer, "Compute the stack");
let deployment = stack.deploy::<A, R>(rng)?;
lap!(timer, "Construct the deployment");
finish!(timer);
Ok(deployment)
}
#[inline]
pub fn load_deployment(&mut self, deployment: &Deployment<N>) -> Result<()> {
let timer = timer!("Process::load_deployment");
let version = deployment.version()?;
let stack = match version {
DeploymentVersion::V1 | DeploymentVersion::V2 => {
let mut stack = Stack::new(self, deployment.program())?;
lap!(timer, "Compute the stack");
stack.set_program_owner(deployment.program_owner());
stack
}
DeploymentVersion::V3 => {
let existing_stack = self.get_stack(deployment.program_id())?;
let mut stack = Stack::new_raw(self, deployment.program(), *existing_stack.program_edition())?;
stack.initialize_and_check(self)?;
lap!(timer, "Compute the stack");
stack.set_program_owner(*existing_stack.program_owner());
stack
}
};
for (name, (verifying_key, _)) in deployment.verifying_keys() {
stack.insert_verifying_key(name, verifying_key.clone())?;
}
lap!(timer, "Insert the verifying keys");
self.add_stack(stack);
finish!(timer);
Ok(())
}
}