mirror of
https://github.com/alexgo-io/bitcoin-indexer.git
synced 2026-01-12 16:52:57 +08:00
fix: revert fix, avoid collision in traversals map
This commit is contained in:
@@ -172,7 +172,10 @@ pub async fn scan_bitcoin_chainstate_via_rpc_using_predicate(
|
||||
None => vec![],
|
||||
};
|
||||
for (transaction_identifier, traversal_result) in local_traverals.into_iter() {
|
||||
traversals.insert(transaction_identifier, traversal_result);
|
||||
traversals.insert(
|
||||
(transaction_identifier, traversal_result.input_index),
|
||||
traversal_result,
|
||||
);
|
||||
}
|
||||
|
||||
let _ = update_storage_and_augment_bitcoin_block_with_inscription_reveal_data(
|
||||
|
||||
@@ -457,9 +457,11 @@ pub fn find_inscription_with_id(
|
||||
let ordinal_number: u64 = row.get(1).unwrap();
|
||||
let inscription_offset: u64 = row.get(3).unwrap();
|
||||
let outpoint_to_watch: String = row.get(4).unwrap();
|
||||
let (_, input_index) = parse_inscription_id(inscription_id);
|
||||
let traversal = TraversalResult {
|
||||
inscription_number,
|
||||
ordinal_number,
|
||||
input_index,
|
||||
inscription_offset,
|
||||
outpoint_to_watch,
|
||||
transfers: 0,
|
||||
@@ -484,7 +486,7 @@ pub fn find_all_inscriptions_in_block(
|
||||
let inscription_number: i64 = row.get(0).unwrap();
|
||||
let ordinal_number: u64 = row.get(1).unwrap();
|
||||
let block_height: u64 = row.get(2).unwrap();
|
||||
let (transaction_id, _) = {
|
||||
let (transaction_id, input_index) = {
|
||||
let inscription_id: String = row.get(3).unwrap();
|
||||
parse_inscription_id(&inscription_id)
|
||||
};
|
||||
@@ -493,6 +495,7 @@ pub fn find_all_inscriptions_in_block(
|
||||
let traversal = TraversalResult {
|
||||
inscription_number,
|
||||
ordinal_number,
|
||||
input_index,
|
||||
transfers: 0,
|
||||
inscription_offset,
|
||||
outpoint_to_watch,
|
||||
@@ -847,6 +850,7 @@ pub async fn fetch_and_cache_blocks_in_hord_db(
|
||||
pub struct TraversalResult {
|
||||
pub inscription_number: i64,
|
||||
pub inscription_offset: u64,
|
||||
pub input_index: usize,
|
||||
pub outpoint_to_watch: String,
|
||||
pub ordinal_number: u64,
|
||||
pub transfers: u32,
|
||||
@@ -1019,6 +1023,7 @@ pub fn retrieve_satoshi_point_using_lazy_storage(
|
||||
ordinal_number: 0,
|
||||
transfers: 0,
|
||||
inscription_offset,
|
||||
input_index,
|
||||
outpoint_to_watch: format_outpoint_to_watch(
|
||||
&transaction_identifier,
|
||||
inscription_output_index,
|
||||
@@ -1149,6 +1154,7 @@ pub fn retrieve_satoshi_point_using_lazy_storage(
|
||||
ordinal_number: 0,
|
||||
transfers: 0,
|
||||
inscription_offset,
|
||||
input_index,
|
||||
outpoint_to_watch: format_outpoint_to_watch(
|
||||
&transaction_identifier,
|
||||
inscription_output_index,
|
||||
@@ -1159,13 +1165,14 @@ pub fn retrieve_satoshi_point_using_lazy_storage(
|
||||
}
|
||||
|
||||
let height = Height(ordinal_block_number.into());
|
||||
let ordinal_number = height.starting_sat().0 + ordinal_offset + inscription_offset;
|
||||
let ordinal_number = height.starting_sat().0 + ordinal_offset;
|
||||
|
||||
Ok(TraversalResult {
|
||||
inscription_number,
|
||||
ordinal_number,
|
||||
transfers: hops,
|
||||
inscription_offset,
|
||||
input_index,
|
||||
outpoint_to_watch: format_outpoint_to_watch(
|
||||
&transaction_identifier,
|
||||
inscription_output_index,
|
||||
|
||||
@@ -228,7 +228,7 @@ pub fn retrieve_inscribed_satoshi_points_from_block(
|
||||
DashMap<(u32, [u8; 8]), LazyBlockTransaction, BuildHasherDefault<FxHasher>>,
|
||||
>,
|
||||
ctx: &Context,
|
||||
) -> HashMap<TransactionIdentifier, TraversalResult> {
|
||||
) -> HashMap<(TransactionIdentifier, usize), TraversalResult> {
|
||||
let mut transactions_ids = vec![];
|
||||
let mut traversals = HashMap::new();
|
||||
|
||||
@@ -253,7 +253,13 @@ pub fn retrieve_inscribed_satoshi_points_from_block(
|
||||
inscriptions_db_conn,
|
||||
ctx,
|
||||
) {
|
||||
traversals.insert(tx.transaction_identifier.clone(), traversal);
|
||||
traversals.insert(
|
||||
(
|
||||
tx.transaction_identifier.clone(),
|
||||
inscription_data.inscription_input_index,
|
||||
),
|
||||
traversal,
|
||||
);
|
||||
} else {
|
||||
// Enqueue for traversals
|
||||
transactions_ids.push((
|
||||
@@ -320,7 +326,7 @@ pub fn retrieve_inscribed_satoshi_points_from_block(
|
||||
traversal.ordinal_number, traversal.get_ordinal_coinbase_height(), traversal.get_ordinal_coinbase_offset(), traversal.transfers
|
||||
)
|
||||
});
|
||||
traversals.insert(transaction_identifier, traversal);
|
||||
traversals.insert((transaction_identifier, traversal.input_index), traversal);
|
||||
}
|
||||
Err(e) => {
|
||||
ctx.try_log(|logger| {
|
||||
@@ -424,7 +430,7 @@ pub enum Storage<'a> {
|
||||
pub fn update_storage_and_augment_bitcoin_block_with_inscription_reveal_data(
|
||||
block: &mut BitcoinBlockData,
|
||||
storage: &mut Storage,
|
||||
traversals: &HashMap<TransactionIdentifier, TraversalResult>,
|
||||
traversals: &HashMap<(TransactionIdentifier, usize), TraversalResult>,
|
||||
inscriptions_db_conn: &Connection,
|
||||
ctx: &Context,
|
||||
) -> Result<bool, String> {
|
||||
@@ -469,7 +475,10 @@ pub fn update_storage_and_augment_bitcoin_block_with_inscription_reveal_data(
|
||||
latest_inscription_number
|
||||
};
|
||||
|
||||
let traversal = match traversals.get(&new_tx.transaction_identifier) {
|
||||
let transaction_identifier = new_tx.transaction_identifier.clone();
|
||||
let traversal = match traversals
|
||||
.get(&(transaction_identifier, inscription.inscription_input_index))
|
||||
{
|
||||
Some(traversal) => traversal,
|
||||
None => {
|
||||
ctx.try_log(|logger| {
|
||||
|
||||
Reference in New Issue
Block a user