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