Skip to content

Commit

Permalink
fix: transfer offset
Browse files Browse the repository at this point in the history
  • Loading branch information
lgalabru committed Feb 7, 2024
1 parent a5fee25 commit 1c3a5dd
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 26 deletions.
26 changes: 14 additions & 12 deletions components/ordhook-core/src/core/mod.rs
Expand Up @@ -77,10 +77,12 @@ pub fn resolve_absolute_pointer(inputs: &Vec<u64>, absolute_pointer_value: u64)
}

pub fn compute_next_satpoint_data(
_tx_index: usize,
input_index: usize,
inputs: &Vec<u64>,
outputs: &Vec<u64>,
relative_pointer_value: u64,
_ctx: Option<&Context>,
) -> SatPosition {
let mut absolute_offset_in_inputs = 0;
for (index, input_value) in inputs.iter().enumerate() {
Expand Down Expand Up @@ -216,52 +218,52 @@ pub fn should_sync_ordhook_db(
#[test]
fn test_identify_next_output_index_destination() {
assert_eq!(
compute_next_satpoint_data(0, &vec![20, 30, 45], &vec![20, 30, 45], 10),
compute_next_satpoint_data(0,0, &vec![20, 30, 45], &vec![20, 30, 45], 10, None),
SatPosition::Output((0, 10))
);
assert_eq!(
compute_next_satpoint_data(0, &vec![20, 30, 45], &vec![20, 30, 45], 20),
compute_next_satpoint_data(0,0, &vec![20, 30, 45], &vec![20, 30, 45], 20, None),
SatPosition::Output((1, 0))
);
assert_eq!(
compute_next_satpoint_data(1, &vec![20, 30, 45], &vec![20, 30, 45], 25),
compute_next_satpoint_data(0,1, &vec![20, 30, 45], &vec![20, 30, 45], 25, None),
SatPosition::Output((1, 25))
);
assert_eq!(
compute_next_satpoint_data(1, &vec![20, 30, 45], &vec![20, 5, 45], 26),
compute_next_satpoint_data(0,1, &vec![20, 30, 45], &vec![20, 5, 45], 26, None),
SatPosition::Output((2, 21))
);
assert_eq!(
compute_next_satpoint_data(1, &vec![10, 10, 10], &vec![30], 20),
compute_next_satpoint_data(0,1, &vec![10, 10, 10], &vec![30], 20, None),
SatPosition::Fee(0)
);
assert_eq!(
compute_next_satpoint_data(0, &vec![10, 10, 10], &vec![30], 30),
compute_next_satpoint_data(0,0, &vec![10, 10, 10], &vec![30], 30, None),
SatPosition::Fee(0)
);
assert_eq!(
compute_next_satpoint_data(0, &vec![10, 10, 10], &vec![30], 0),
compute_next_satpoint_data(0,0, &vec![10, 10, 10], &vec![30], 0, None),
SatPosition::Output((0, 0))
);
assert_eq!(
compute_next_satpoint_data(2, &vec![20, 30, 45], &vec![20, 30, 45], 95),
compute_next_satpoint_data(0,2, &vec![20, 30, 45], &vec![20, 30, 45], 95, None),
SatPosition::Fee(50)
);
assert_eq!(
compute_next_satpoint_data(
compute_next_satpoint_data(0,
2,
&vec![1000, 600, 546, 63034],
&vec![1600, 10000, 15000],
1600
1600, None
),
SatPosition::Output((1, 1600))
);
assert_eq!(
compute_next_satpoint_data(
compute_next_satpoint_data(0,
3,
&vec![6100, 148660, 103143, 7600],
&vec![81434, 173995],
257903
257903, None
),
SatPosition::Fee(260377)
);
Expand Down
Expand Up @@ -761,6 +761,7 @@ fn augment_transaction_with_ordinals_inscriptions_data(

let (destination, satpoint_post_transfer, output_value) = compute_satpoint_post_transfer(
&&*tx,
tx_index,
input_index,
relative_offset,
network,
Expand Down Expand Up @@ -876,6 +877,7 @@ fn consolidate_transaction_with_pre_computed_inscription_data(
// Compute satpoint_post_inscription
let (destination, satpoint_post_transfer, output_value) = compute_satpoint_post_transfer(
tx,
tx_index,
input_index,
relative_offset,
network,
Expand Down
6 changes: 4 additions & 2 deletions components/ordhook-core/src/core/protocol/satoshi_tracking.rs
Expand Up @@ -68,6 +68,7 @@ pub fn augment_block_with_ordinals_transfer_data(

pub fn compute_satpoint_post_transfer(
tx: &BitcoinTransactionData,
tx_index: usize,
input_index: usize,
relative_pointer_value: u64,
network: &Network,
Expand All @@ -85,7 +86,7 @@ pub fn compute_satpoint_post_transfer(
.collect::<_>();
let outputs = tx.metadata.outputs.iter().map(|o| o.value).collect::<_>();
let post_transfer_data =
compute_next_satpoint_data(input_index, &inputs, &outputs, relative_pointer_value);
compute_next_satpoint_data(tx_index, input_index, &inputs, &outputs, relative_pointer_value, Some(ctx));

let (outpoint_post_transfer, offset_post_transfer, destination, post_transfer_output_value) =
match post_transfer_data {
Expand Down Expand Up @@ -190,8 +191,9 @@ pub fn augment_transaction_with_ordinals_transfers_data(
let (destination, satpoint_post_transfer, post_transfer_output_value) =
compute_satpoint_post_transfer(
&&*tx,
tx_index,
input_index,
0,
watched_satpoint.offset,
network,
coinbase_txid,
coinbase_subsidy,
Expand Down
24 changes: 12 additions & 12 deletions components/ordhook-core/src/db/mod.rs
Expand Up @@ -82,27 +82,27 @@ pub fn initialize_ordhook_db(base_dir: &PathBuf, ctx: &Context) -> Connection {
"CREATE INDEX IF NOT EXISTS index_inscriptions_on_ordinal_number ON inscriptions(ordinal_number);",
[],
) {
ctx.try_log(|logger| warn!(logger, "unable to query hord.sqlite: {}", e.to_string()));
ctx.try_log(|logger| warn!(logger, "unable to create hord.sqlite: {}", e.to_string()));
}
if let Err(e) = conn.execute(
"CREATE INDEX IF NOT EXISTS index_inscriptions_on_jubilee_inscription_number ON inscriptions(jubilee_inscription_number);",
[],
) {
ctx.try_log(|logger| warn!(logger, "unable to query hord.sqlite: {}", e.to_string()));
ctx.try_log(|logger| warn!(logger, "unable to create hord.sqlite: {}", e.to_string()));
}

if let Err(e) = conn.execute(
"CREATE INDEX IF NOT EXISTS index_inscriptions_on_classic_inscription_number ON inscriptions(classic_inscription_number);",
[],
) {
ctx.try_log(|logger| warn!(logger, "unable to query hord.sqlite: {}", e.to_string()));
ctx.try_log(|logger| warn!(logger, "unable to create hord.sqlite: {}", e.to_string()));
}

if let Err(e) = conn.execute(
"CREATE INDEX IF NOT EXISTS index_inscriptions_on_block_height ON inscriptions(block_height);",
[],
) {
ctx.try_log(|logger| warn!(logger, "unable to query hord.sqlite: {}", e.to_string()));
ctx.try_log(|logger| warn!(logger, "unable to create hord.sqlite: {}", e.to_string()));
}
}
if let Err(e) = conn.execute(
Expand All @@ -112,7 +112,7 @@ pub fn initialize_ordhook_db(base_dir: &PathBuf, ctx: &Context) -> Connection {
tx_index INTEGER NOT NULL,
outpoint_to_watch TEXT NOT NULL,
offset INTEGER NOT NULL,
CONSTRAINT ordinal_number_outpoint_to_watch_offset_uniqueness UNIQUE (ordinal_number, outpoint_to_watch, offset)
CONSTRAINT ordinal_number_outpoint_to_watch_offset_uniqueness UNIQUE (ordinal_number, outpoint_to_watch)
)",
[],
) {
Expand All @@ -128,19 +128,19 @@ pub fn initialize_ordhook_db(base_dir: &PathBuf, ctx: &Context) -> Connection {
"CREATE INDEX IF NOT EXISTS locations_indexed_on_block_height ON locations(block_height);",
[],
) {
ctx.try_log(|logger| warn!(logger, "unable to query hord.sqlite: {}", e.to_string()));
ctx.try_log(|logger| warn!(logger, "unable to create hord.sqlite: {}", e.to_string()));
}
if let Err(e) = conn.execute(
"CREATE INDEX IF NOT EXISTS locations_indexed_on_outpoint_to_watch ON locations(outpoint_to_watch);",
[],
) {
ctx.try_log(|logger| warn!(logger, "unable to query hord.sqlite: {}", e.to_string()));
ctx.try_log(|logger| warn!(logger, "unable to create hord.sqlite: {}", e.to_string()));
}
if let Err(e) = conn.execute(
"CREATE INDEX IF NOT EXISTS locations_indexed_on_ordinal_number ON locations(ordinal_number);",
[],
) {
ctx.try_log(|logger| warn!(logger, "unable to query hord.sqlite: {}", e.to_string()));
ctx.try_log(|logger| warn!(logger, "unable to create hord.sqlite: {}", e.to_string()));
}
}

Expand All @@ -165,7 +165,7 @@ pub fn initialize_ordhook_db(base_dir: &PathBuf, ctx: &Context) -> Connection {
"CREATE INDEX IF NOT EXISTS sequence_metadata_indexed_on_block_height ON sequence_metadata(block_height);",
[],
) {
ctx.try_log(|logger| warn!(logger, "unable to query hord.sqlite: {}", e.to_string()));
ctx.try_log(|logger| warn!(logger, "unable to create hord.sqlite: {}", e.to_string()));
}
}

Expand Down Expand Up @@ -516,7 +516,7 @@ pub fn insert_entry_in_inscriptions(
"INSERT INTO inscriptions (inscription_id, ordinal_number, jubilee_inscription_number, classic_inscription_number, block_height, input_index) VALUES (?1, ?2, ?3, ?4, ?5, ?6)",
rusqlite::params![&inscription_data.inscription_id, &inscription_data.ordinal_number, &inscription_data.inscription_number.jubilee, &inscription_data.inscription_number.classic, &block_identifier.index, &inscription_data.inscription_input_index],
) {
ctx.try_log(|logger| warn!(logger, "unable to query hord.sqlite: {}", e.to_string()));
ctx.try_log(|logger| warn!(logger, "unable to insert inscription in hord.sqlite: {} - {:?}", e.to_string(), inscription_data));
std::thread::sleep(std::time::Duration::from_secs(1));
}
}
Expand All @@ -534,7 +534,7 @@ pub fn insert_inscription_in_locations(
"INSERT INTO locations (ordinal_number, outpoint_to_watch, offset, block_height, tx_index) VALUES (?1, ?2, ?3, ?4, ?5)",
rusqlite::params![&inscription_data.ordinal_number, &outpoint_to_watch, offset, &block_identifier.index, &inscription_data.tx_index],
) {
ctx.try_log(|logger| warn!(logger, "unable to query hord.sqlite: {}", e.to_string()));
ctx.try_log(|logger| warn!(logger, "unable to insert inscription in location in hord.sqlite: {} ({:?})", e.to_string(), inscription_data));
std::thread::sleep(std::time::Duration::from_secs(1));
}
}
Expand Down Expand Up @@ -658,7 +658,7 @@ pub fn insert_transfer_in_locations(
"INSERT INTO locations (ordinal_number, outpoint_to_watch, offset, block_height, tx_index) VALUES (?1, ?2, ?3, ?4, ?5)",
rusqlite::params![&transfer_data.ordinal_number, &outpoint_to_watch, offset, &block_identifier.index, &transfer_data.tx_index],
) {
ctx.try_log(|logger| warn!(logger, "unable to query hord.sqlite: {}", e.to_string()));
ctx.try_log(|logger| warn!(logger, "unable to insert location in hord.sqlite: {} ({:?})", e.to_string(), transfer_data));
std::thread::sleep(std::time::Duration::from_secs(1));
}
}
Expand Down

0 comments on commit 1c3a5dd

Please sign in to comment.