Skip to content

Commit adb1b98

Browse files
author
Ludo Galabru
committed
feat: ability to tolerate corrupted data
1 parent 9e14fce commit adb1b98

File tree

2 files changed

+24
-21
lines changed

2 files changed

+24
-21
lines changed

components/chainhook-sdk/src/hord/db/mod.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -463,8 +463,7 @@ pub fn find_inscription_with_id(
463463
let ordinal_number: u64 = row.get(1).unwrap();
464464
let inscription_offset_intra_output: u64 = row.get(3).unwrap();
465465
let outpoint_to_watch: String = row.get(4).unwrap();
466-
let (_, output_index) =
467-
parse_outpoint_to_watch(&outpoint_to_watch);
466+
let (_, output_index) = parse_outpoint_to_watch(&outpoint_to_watch);
468467
let (transaction_identifier, input_index) = parse_inscription_id(inscription_id);
469468
let traversal = TraversalResult {
470469
inscription_number,
@@ -1164,8 +1163,7 @@ pub fn retrieve_satoshi_point_using_lazy_storage(
11641163
}
11651164

11661165
let height = Height(ordinal_block_number.into());
1167-
let ordinal_number =
1168-
height.starting_sat().0 + ordinal_offset + inscription_offset_intra_output;
1166+
let ordinal_number = height.starting_sat().0 + ordinal_offset + inscription_offset_intra_output;
11691167

11701168
Ok(TraversalResult {
11711169
inscription_number,

components/chainhook-sdk/src/hord/mod.rs

+22-17
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ pub fn retrieve_inscribed_satoshi_points_from_block(
232232
}
233233
};
234234
if let Some(inscriptions_db_conn) = inscriptions_db_conn {
235+
// TODO: introduce scanning context
235236
if let Some(traversal) = find_inscription_with_id(
236237
&inscription_data.inscription_id,
237238
&block.block_identifier.hash,
@@ -485,10 +486,6 @@ pub fn update_storage_and_augment_bitcoin_block_with_inscription_reveal_data(
485486
};
486487

487488
let outputs = new_tx.metadata.outputs.clone();
488-
ctx.try_log(|logger| {
489-
slog::info!(logger, "=> {:?} / {:?}", traversal, outputs);
490-
});
491-
492489
inscription.ordinal_offset = traversal.get_ordinal_coinbase_offset();
493490
inscription.ordinal_block_height = traversal.get_ordinal_coinbase_height();
494491
inscription.ordinal_number = traversal.ordinal_number;
@@ -501,20 +498,28 @@ pub fn update_storage_and_augment_bitcoin_block_with_inscription_reveal_data(
501498
traversal.output_index,
502499
traversal.inscription_offset_intra_output
503500
);
504-
inscription.inscription_output_value =
505-
new_tx.metadata.outputs[traversal.output_index].value;
506-
inscription.inscriber_address = {
507-
let script_pub_key =
508-
new_tx.metadata.outputs[traversal.output_index].get_script_pubkey_hex();
509-
match Script::from_hex(&script_pub_key) {
510-
Ok(script) => match Address::from_script(&script, network) {
511-
Ok(a) => Some(a.to_string()),
501+
if let Some(output) = new_tx.metadata.outputs.get(traversal.output_index) {
502+
inscription.inscription_output_value = output.value;
503+
inscription.inscriber_address = {
504+
let script_pub_key = output.get_script_pubkey_hex();
505+
match Script::from_hex(&script_pub_key) {
506+
Ok(script) => match Address::from_script(&script, network) {
507+
Ok(a) => Some(a.to_string()),
508+
_ => None,
509+
},
512510
_ => None,
513-
},
514-
_ => None,
515-
}
516-
};
517-
511+
}
512+
};
513+
} else {
514+
ctx.try_log(|logger| {
515+
slog::warn!(
516+
logger,
517+
"Database corrupted, skipping cursed inscription => {:?} / {:?}",
518+
traversal,
519+
outputs
520+
);
521+
});
522+
}
518523
match storage {
519524
Storage::Sqlite(rw_hord_db_conn) => {
520525
if traversal.ordinal_number == 0 {

0 commit comments

Comments
 (0)