use super::*;
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>> {
let stack = Stack::new(self, program)?;
stack.deploy::<A, R>(rng)
}
#[inline]
pub fn verify_deployment<A: circuit::Aleo<Network = N>, R: Rng + CryptoRng>(
&self,
deployment: &Deployment<N>,
rng: &mut R,
) -> Result<()> {
let program_id = deployment.program().id();
ensure!(!self.contains_program(program_id), "Program '{program_id}' already exists");
let stack = Stack::new(self, deployment.program())?;
stack.verify_deployment::<A, R>(deployment, rng)
}
#[inline]
pub fn finalize_deployment<P: ProgramStorage<N>>(
&mut self,
store: &ProgramStore<N, P>,
deployment: &Deployment<N>,
) -> Result<()> {
let stack = Stack::new(self, deployment.program())?;
for (function_name, (verifying_key, _)) in deployment.verifying_keys() {
stack.insert_verifying_key(function_name, verifying_key.clone())?;
}
let program_id = deployment.program_id();
for mapping in deployment.program().mappings().values() {
store.initialize_mapping(program_id, mapping.name())?;
}
self.stacks.insert(*deployment.program_id(), stack);
Ok(())
}
#[inline]
pub(crate) fn load_deployment(&mut self, deployment: &Deployment<N>) -> Result<()> {
let stack = Stack::new(self, deployment.program())?;
for (function_name, (verifying_key, _)) in deployment.verifying_keys() {
stack.insert_verifying_key(function_name, verifying_key.clone())?;
}
self.stacks.insert(*deployment.program_id(), stack);
Ok(())
}
}