essential-app-utils 0.7.0

Utilities for building Essential applications
Documentation
use essential_types::{ContentAddress, Key, Value};

pub async fn query_state_head(
    conn: &essential_node::db::ConnectionPool,
    address: &ContentAddress,
    key: &Key,
) -> anyhow::Result<Option<Value>> {
    let mut c = conn.acquire().await?;
    let tx = c.transaction()?;
    let ca = essential_node_db::get_latest_finalized_block_address(&tx)?;
    let num = match ca {
        Some(ca) => essential_node_db::get_block_header(&tx, &ca)?
            .map(|h| h.number)
            .unwrap_or_default(),
        None => 0,
    };
    let r = essential_node_db::finalized::query_state_inclusive_block(&tx, address, key, num)?;
    Ok(r)
}

pub async fn validate_solution(
    conn: &essential_node::db::ConnectionPool,
    solution_set: essential_types::solution::SolutionSet,
) -> anyhow::Result<()> {
    let contract_registry_predicate = essential_node_types::BigBang::default().contract_registry;
    let program_registry_predicate = essential_node_types::BigBang::default().program_registry;
    essential_node::validate_solution_set_dry_run(
        conn,
        &contract_registry_predicate.contract,
        &program_registry_predicate.contract,
        solution_set,
    )
    .await?;
    Ok(())
}