essential_app_utils/
deploy.rs

1use essential_node_types::{register_contract_solution, register_program_solution};
2use essential_types::{
3    contract::Contract,
4    solution::{Solution, SolutionSet},
5    ContentAddress, PredicateAddress, Program,
6};
7
8pub async fn register_contract_and_programs(
9    builder_conn: &essential_builder_db::ConnectionPool,
10    contract_registry: &PredicateAddress,
11    program_registry: &PredicateAddress,
12    contract: &Contract,
13    programs: Vec<Program>,
14) -> anyhow::Result<ContentAddress> {
15    let solutions = register_contract_solution(contract_registry.clone(), contract)
16        .into_iter()
17        .chain(
18            programs
19                .iter()
20                .map(|p| register_program_solution(program_registry.clone(), p)),
21        )
22        .collect();
23    let solution_set = std::sync::Arc::new(SolutionSet { solutions });
24    let r = builder_conn
25        .insert_solution_set_submission(
26            solution_set,
27            std::time::SystemTime::now()
28                .duration_since(std::time::UNIX_EPOCH)
29                .unwrap(),
30        )
31        .await?;
32    Ok(r)
33}
34
35pub fn registered_contract_solution(
36    contract: &Contract,
37    contract_registry: &PredicateAddress,
38) -> Solution {
39    register_contract_solution(contract_registry.clone(), contract).unwrap()
40}
41
42pub fn registered_program_solution(
43    program: &Program,
44    predicate_registry: &PredicateAddress,
45) -> Solution {
46    register_program_solution(predicate_registry.clone(), program)
47}