essential_app_utils/
deploy.rs1use 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}