Skip to content

Commit da05455

Browse files
author
Ludo Galabru
authored
Merge pull request #250 from hirosystems/fix/pointer-ignored
fix: pointer ignored, performance improvements
2 parents 4e7bdc6 + 073f582 commit da05455

23 files changed

+792
-586
lines changed

Cargo.lock

+95-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/ordhook-cli/Cargo.toml

+2
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ clap = { version = "3.2.23", features = ["derive"], optional = true }
2424
clap_generate = { version = "3.0.3", optional = true }
2525
toml = { version = "0.5.6", features = ["preserve_order"], optional = true }
2626
ctrlc = { version = "3.2.2", optional = true }
27+
tcmalloc2 = { version = "0.1.2+2.13", optional = true }
2728

2829
[features]
2930
default = ["cli"]
3031
cli = ["clap", "clap_generate", "toml", "ctrlc", "hiro-system-kit/log"]
3132
debug = ["hiro-system-kit/debug"]
3233
release = ["hiro-system-kit/release"]
34+
tcmalloc = ["tcmalloc2"]

components/ordhook-cli/src/cli/mod.rs

+45-17
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ use ordhook::db::{
3232
use ordhook::download::download_ordinals_dataset_if_required;
3333
use ordhook::hex;
3434
use ordhook::scan::bitcoin::scan_bitcoin_chainstate_via_rpc_using_predicate;
35+
use ordhook::service::observers::initialize_observers_db;
3536
use ordhook::service::{start_observer_forwarding, Service};
3637
use reqwest::Client as HttpClient;
3738
use std::io::{BufReader, Read};
@@ -163,6 +164,8 @@ struct ScanTransactionCommand {
163164
pub block_height: u64,
164165
/// Inscription Id
165166
pub transaction_id: String,
167+
/// Input index
168+
pub input_index: usize,
166169
/// Target Regtest network
167170
#[clap(
168171
long = "regtest",
@@ -558,6 +561,9 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
558561
None,
559562
cmd.auth_token,
560563
)?;
564+
565+
let _ = initialize_observers_db(&config.expected_cache_path(), ctx);
566+
561567
scan_bitcoin_chainstate_via_rpc_using_predicate(
562568
&predicate_spec,
563569
&config,
@@ -575,15 +581,14 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
575581
while let Some(block_height) = block_range.pop_front() {
576582
let inscriptions =
577583
find_all_inscriptions_in_block(&block_height, &inscriptions_db_conn, ctx);
578-
let mut locations =
584+
let locations =
579585
find_all_transfers_in_block(&block_height, &inscriptions_db_conn, ctx);
580586

581587
let mut total_transfers_in_block = 0;
582588

583589
for (_, inscription) in inscriptions.iter() {
584590
println!("Inscription {} revealed at block #{} (inscription_number {}, ordinal_number {})", inscription.get_inscription_id(), block_height, inscription.inscription_number.jubilee, inscription.ordinal_number);
585-
if let Some(transfers) = locations.remove(&inscription.get_inscription_id())
586-
{
591+
if let Some(transfers) = locations.get(&inscription.ordinal_number) {
587592
for t in transfers.iter().skip(1) {
588593
total_transfers_in_block += 1;
589594
println!(
@@ -672,18 +677,21 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
672677
.await?;
673678
let transaction_identifier = TransactionIdentifier::new(&cmd.transaction_id);
674679
let cache = new_traversals_lazy_cache(100);
675-
let (res, mut back_trace) = compute_satoshi_number(
680+
let (res, _, mut back_trace) = compute_satoshi_number(
676681
&config.get_ordhook_config().db_path,
677682
&block.block_identifier,
678683
&transaction_identifier,
684+
cmd.input_index,
679685
0,
680686
&Arc::new(cache),
687+
config.resources.ulimit,
688+
config.resources.memory_available,
681689
true,
682690
ctx,
683691
)?;
684692
back_trace.reverse();
685-
for (block_height, tx) in back_trace.iter() {
686-
println!("{}\t{}", block_height, hex::encode(tx));
693+
for (block_height, tx, index) in back_trace.iter() {
694+
println!("{}\t{}:{}", block_height, hex::encode(tx), index);
687695
}
688696
println!("{:?}", res);
689697
}
@@ -707,7 +715,13 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
707715
let last_known_block =
708716
find_latest_inscription_block_height(&inscriptions_db_conn, ctx)?;
709717
if last_known_block.is_none() {
710-
open_ordhook_db_conn_rocks_db_loop(true, &config.expected_cache_path(), ctx);
718+
open_ordhook_db_conn_rocks_db_loop(
719+
true,
720+
&config.expected_cache_path(),
721+
config.resources.ulimit,
722+
config.resources.memory_available,
723+
ctx,
724+
);
711725
}
712726

713727
let ordhook_config = config.get_ordhook_config();
@@ -766,7 +780,13 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
766780
Command::Db(OrdhookDbCommand::New(cmd)) => {
767781
let config = ConfigFile::default(false, false, false, &cmd.config_path)?;
768782
initialize_ordhook_db(&config.expected_cache_path(), ctx);
769-
open_ordhook_db_conn_rocks_db_loop(true, &config.expected_cache_path(), ctx);
783+
open_ordhook_db_conn_rocks_db_loop(
784+
true,
785+
&config.expected_cache_path(),
786+
config.resources.ulimit,
787+
config.resources.memory_available,
788+
ctx,
789+
);
770790
}
771791
Command::Db(OrdhookDbCommand::Sync(cmd)) => {
772792
let config = ConfigFile::default(false, false, false, &cmd.config_path)?;
@@ -779,10 +799,7 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
779799
let config = ConfigFile::default(false, false, false, &cmd.config_path)?;
780800
let mut ordhook_config = config.get_ordhook_config();
781801
if let Some(network_threads) = cmd.network_threads {
782-
ordhook_config.network_thread_max = network_threads;
783-
}
784-
if let Some(network_threads) = cmd.network_threads {
785-
ordhook_config.network_thread_max = network_threads;
802+
ordhook_config.resources.bitcoind_rpc_threads = network_threads;
786803
}
787804
let blocks = cmd.get_blocks();
788805
let block_ingestion_processor =
@@ -800,6 +817,8 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
800817
let blocks_db = open_ordhook_db_conn_rocks_db_loop(
801818
false,
802819
&config.get_ordhook_config().db_path,
820+
config.resources.ulimit,
821+
config.resources.memory_available,
803822
ctx,
804823
);
805824
for i in cmd.get_blocks().into_iter() {
@@ -819,7 +838,7 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
819838
let config = ConfigFile::default(false, false, false, &cmd.config_path)?;
820839
let mut ordhook_config = config.get_ordhook_config();
821840
if let Some(network_threads) = cmd.network_threads {
822-
ordhook_config.network_thread_max = network_threads;
841+
ordhook_config.resources.bitcoind_rpc_threads = network_threads;
823842
}
824843
let block_post_processor = match cmd.repair_observers {
825844
Some(true) => {
@@ -870,8 +889,12 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
870889
Command::Db(OrdhookDbCommand::Check(cmd)) => {
871890
let config = ConfigFile::default(false, false, false, &cmd.config_path)?;
872891
{
873-
let blocks_db =
874-
open_readonly_ordhook_db_conn_rocks_db(&config.expected_cache_path(), ctx)?;
892+
let blocks_db = open_readonly_ordhook_db_conn_rocks_db(
893+
&config.expected_cache_path(),
894+
config.resources.ulimit,
895+
config.resources.memory_available,
896+
ctx,
897+
)?;
875898
let tip = find_last_block_inserted(&blocks_db);
876899
println!("Tip: {}", tip);
877900
let missing_blocks = find_missing_blocks(&blocks_db, 1, tip, ctx);
@@ -880,8 +903,13 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
880903
}
881904
Command::Db(OrdhookDbCommand::Drop(cmd)) => {
882905
let config = ConfigFile::default(false, false, false, &cmd.config_path)?;
883-
let blocks_db =
884-
open_ordhook_db_conn_rocks_db_loop(true, &config.expected_cache_path(), ctx);
906+
let blocks_db = open_ordhook_db_conn_rocks_db_loop(
907+
true,
908+
&config.expected_cache_path(),
909+
config.resources.ulimit,
910+
config.resources.memory_available,
911+
ctx,
912+
);
885913
let inscriptions_db_conn_rw =
886914
open_readwrite_ordhook_db_conn(&config.expected_cache_path(), ctx)?;
887915

0 commit comments

Comments
 (0)