essential_app_utils/
node.rs

1use essential_types::{ContentAddress, Key, Value};
2
3pub async fn query_state_head(
4    conn: &essential_node::db::ConnectionPool,
5    address: &ContentAddress,
6    key: &Key,
7) -> anyhow::Result<Option<Value>> {
8    let mut c = conn.acquire().await?;
9    let tx = c.transaction()?;
10    let ca = essential_node_db::get_latest_finalized_block_address(&tx)?;
11    let num = match ca {
12        Some(ca) => essential_node_db::get_block_header(&tx, &ca)?
13            .map(|h| h.number)
14            .unwrap_or_default(),
15        None => 0,
16    };
17    let r = essential_node_db::finalized::query_state_inclusive_block(&tx, address, key, num)?;
18    Ok(r)
19}
20
21pub async fn validate_solution(
22    conn: &essential_node::db::ConnectionPool,
23    solution_set: essential_types::solution::SolutionSet,
24) -> anyhow::Result<()> {
25    let contract_registry_predicate = essential_node_types::BigBang::default().contract_registry;
26    let program_registry_predicate = essential_node_types::BigBang::default().program_registry;
27    essential_node::validate_solution_set_dry_run(
28        conn,
29        &contract_registry_predicate.contract,
30        &program_registry_predicate.contract,
31        solution_set,
32    )
33    .await?;
34    Ok(())
35}