Skip to content

Commit

Permalink
feat: return local result when known
Browse files Browse the repository at this point in the history
  • Loading branch information
lgalabru committed Apr 12, 2023
1 parent 3bd308f commit 5441851
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 5 deletions.
34 changes: 34 additions & 0 deletions components/chainhook-event-observer/src/hord/db/mod.rs
Expand Up @@ -549,6 +549,40 @@ pub fn find_inscription_with_ordinal_number(
return None;
}

pub fn find_inscription_with_id(
inscription_id: &str,
block_hash: &str,
inscriptions_db_conn: &Connection,
_ctx: &Context,
) -> Option<TraversalResult> {
let args: &[&dyn ToSql] = &[&inscription_id.to_sql().unwrap()];
let mut stmt = inscriptions_db_conn
.prepare("SELECT inscription_number, ordinal_number, block_height, inscription_id, block_hash FROM inscriptions WHERE inscription_id = ?")
.unwrap();
let mut rows = stmt.query(args).unwrap();
while let Ok(Some(row)) = rows.next() {
let inscription_block_hash: String = row.get(4).unwrap();
if block_hash.eq(&inscription_block_hash) {
let inscription_number: u64 = row.get(0).unwrap();
let ordinal_number: u64 = row.get(1).unwrap();
let block_height: u64 = row.get(2).unwrap();
let transaction_id = {
let inscription_id: String = row.get(3).unwrap();
TransactionIdentifier {
hash: format!("0x{}", &inscription_id[0..inscription_id.len() - 2]),
}
};
let traversal = TraversalResult {
inscription_number,
ordinal_number,
transfers: 0,
};
return Some(traversal);
}
}
return None;
}

pub fn find_all_inscriptions(
inscriptions_db_conn: &Connection,
) -> BTreeMap<u64, Vec<(TransactionIdentifier, TraversalResult)>> {
Expand Down
21 changes: 16 additions & 5 deletions components/chainhook-event-observer/src/hord/mod.rs
Expand Up @@ -29,8 +29,8 @@ use crate::{
};

use self::db::{
open_readonly_hord_db_conn_rocks_db, remove_entry_from_blocks, remove_entry_from_inscriptions,
TraversalResult, WatchedSatpoint,
find_inscription_with_id, open_readonly_hord_db_conn_rocks_db, remove_entry_from_blocks,
remove_entry_from_inscriptions, TraversalResult, WatchedSatpoint,
};

pub fn revert_hord_db_with_augmented_bitcoin_block(
Expand Down Expand Up @@ -102,16 +102,27 @@ pub fn update_hord_db_and_augment_bitcoin_block(
}

let mut transactions_ids = vec![];
let mut traversals = HashMap::new();

for new_tx in new_block.transactions.iter_mut().skip(1) {
// Have a new inscription been revealed, if so, are looking at a re-inscription
for ordinal_event in new_tx.metadata.ordinal_operations.iter_mut() {
if let OrdinalOperation::InscriptionRevealed(_) = ordinal_event {
transactions_ids.push(new_tx.transaction_identifier.clone());
if let OrdinalOperation::InscriptionRevealed(inscription_data) = ordinal_event {
if let Some(traversal) = find_inscription_with_id(
&inscription_data.inscription_id,
&new_block.block_identifier.hash,
inscriptions_db_conn_rw,
ctx,
) {
traversals.insert(new_tx.transaction_identifier.clone(), traversal);
} else {
// Enqueue for traversals
transactions_ids.push(new_tx.transaction_identifier.clone());
}
}
}
}

let mut traversals = HashMap::new();
if !transactions_ids.is_empty() {
let expected_traversals = transactions_ids.len();
let (traversal_tx, traversal_rx) = channel::<(TransactionIdentifier, _)>();
Expand Down

0 comments on commit 5441851

Please sign in to comment.