mirror of
https://github.com/alexgo-io/bitcoin-indexer.git
synced 2026-01-12 08:34:17 +08:00
feat: return local result when known
This commit is contained in:
@@ -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)>> {
|
||||
|
||||
@@ -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(
|
||||
@@ -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, _)>();
|
||||
|
||||
Reference in New Issue
Block a user