Skip to content

Commit d80388b

Browse files
authored
fix: also check config when looking for brc20 db connection (#347)
1 parent 7ee763a commit d80388b

File tree

4 files changed

+20
-24
lines changed

4 files changed

+20
-24
lines changed

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

+7-12
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use ordhook::scan::bitcoin::scan_bitcoin_chainstate_via_rpc_using_predicate;
3535
use ordhook::service::observers::initialize_observers_db;
3636
use ordhook::service::{start_observer_forwarding, Service};
3737
use ordhook::utils::bitcoind::bitcoind_get_block_height;
38-
use ordhook::{hex, initialize_db};
38+
use ordhook::{hex, initialize_databases};
3939
use reqwest::Client as HttpClient;
4040
use std::collections::HashSet;
4141
use std::io::{BufReader, Read};
@@ -586,7 +586,7 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
586586
let mut total_inscriptions = 0;
587587
let mut total_transfers = 0;
588588

589-
let db_connections = initialize_db(&config, ctx);
589+
let db_connections = initialize_databases(&config, ctx);
590590
let inscriptions_db_conn = db_connections.ordhook;
591591
while let Some(block_height) = block_range.pop_front() {
592592
let inscriptions =
@@ -704,16 +704,12 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
704704

705705
let config =
706706
ConfigFile::default(cmd.regtest, cmd.testnet, cmd.mainnet, &cmd.config_path)?;
707-
708-
initialize_db(&config, ctx);
709-
710-
let inscriptions_db_conn =
711-
open_readonly_ordhook_db_conn(&config.expected_cache_path(), ctx)?;
707+
let db_connections = initialize_databases(&config, ctx);
712708

713709
let last_known_block =
714-
find_latest_inscription_block_height(&inscriptions_db_conn, ctx)?;
710+
find_latest_inscription_block_height(&db_connections.ordhook, ctx)?;
715711
if last_known_block.is_none() {
716-
// Create DB
712+
// Create rocksdb
717713
open_ordhook_db_conn_rocks_db_loop(
718714
true,
719715
&config.expected_cache_path(),
@@ -746,7 +742,6 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
746742
};
747743

748744
let mut predicates = vec![];
749-
750745
for post_to in cmd.post_to.iter() {
751746
let predicate = build_predicate_from_cli(
752747
&config,
@@ -788,7 +783,7 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
788783
Command::Db(OrdhookDbCommand::New(cmd)) => {
789784
let config = ConfigFile::default(false, false, false, &cmd.config_path)?;
790785
// Create DB
791-
initialize_db(&config, ctx);
786+
initialize_databases(&config, ctx);
792787
open_ordhook_db_conn_rocks_db_loop(
793788
true,
794789
&config.expected_cache_path(),
@@ -799,7 +794,7 @@ async fn handle_command(opts: Opts, ctx: &Context) -> Result<(), String> {
799794
}
800795
Command::Db(OrdhookDbCommand::Sync(cmd)) => {
801796
let config = ConfigFile::default(false, false, false, &cmd.config_path)?;
802-
initialize_db(&config, ctx);
797+
initialize_databases(&config, ctx);
803798
let service = Service::new(config, ctx.clone());
804799
service.update_state(None).await?;
805800
}

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use chainhook_sdk::utils::Context;
1313
use crate::{
1414
config::{Config, LogConfig, MetaProtocolsConfig, ResourcesConfig},
1515
db::{find_pinned_block_bytes_at_block_height, open_ordhook_db_conn_rocks_db_loop},
16+
initialize_databases,
1617
utils::bitcoind::bitcoind_get_block_height,
1718
};
1819

@@ -152,7 +153,7 @@ pub fn should_sync_ordhook_db(
152153
let mut start_block = find_last_block_inserted(&blocks_db) as u64;
153154

154155
if start_block == 0 {
155-
let _ = initialize_ordhook_db(&config.expected_cache_path(), &ctx);
156+
let _ = initialize_databases(config, ctx);
156157
}
157158

158159
let inscriptions_db_conn = open_readonly_ordhook_db_conn(&config.expected_cache_path(), &ctx)?;

components/ordhook-core/src/lib.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ pub struct DbConnections {
3636
pub brc20: Option<Connection>,
3737
}
3838

39-
pub fn initialize_db(config: &Config, ctx: &Context) -> DbConnections {
39+
/// Initializes all SQLite databases required for Ordhook operation, depending if they are requested by the current `Config`.
40+
/// Returns a struct with all the open connections.
41+
pub fn initialize_databases(config: &Config, ctx: &Context) -> DbConnections {
4042
DbConnections {
4143
ordhook: initialize_ordhook_db(&config.expected_cache_path(), ctx),
4244
brc20: match config.meta_protocols.brc20 {

components/ordhook-core/src/scan/bitcoin.rs

+8-10
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use crate::core::protocol::inscription_parsing::{
77
use crate::core::protocol::inscription_sequencing::consolidate_block_with_pre_computed_ordinals_data;
88
use crate::db::{get_any_entry_in_ordinal_activities, open_readonly_ordhook_db_conn};
99
use crate::download::download_ordinals_dataset_if_required;
10+
use crate::initialize_databases;
1011
use crate::service::observers::{
1112
open_readwrite_observers_db_conn_or_panic, update_observer_progress,
1213
};
@@ -76,15 +77,14 @@ pub async fn scan_bitcoin_chainstate_via_rpc_using_predicate(
7677
let http_client = build_http_client();
7778

7879
while let Some(current_block_height) = block_heights_to_scan.pop_front() {
79-
let mut inscriptions_db_conn =
80-
open_readonly_ordhook_db_conn(&config.expected_cache_path(), ctx)?;
80+
// Open DB connections
81+
let db_connections = initialize_databases(&config, ctx);
82+
let mut inscriptions_db_conn = db_connections.ordhook;
8183
let brc20_db_conn = match predicate_spec.predicate {
84+
// Even if we have a valid BRC-20 DB connection, check if the predicate we're evaluating requires us to do the work.
8285
BitcoinPredicateType::OrdinalsProtocol(OrdinalOperations::InscriptionFeed(
8386
ref feed_data,
84-
)) if feed_data.meta_protocols.is_some() => Some(open_readonly_brc20_db_conn(
85-
&config.expected_cache_path(),
86-
ctx,
87-
)?),
87+
)) if feed_data.meta_protocols.is_some() => db_connections.brc20,
8888
_ => None,
8989
};
9090

@@ -232,9 +232,7 @@ pub async fn execute_predicates_action<'a>(
232232
BitcoinChainhookOccurrence::Http(request, _data) => {
233233
send_request(request, 60, 3, &ctx).await
234234
}
235-
BitcoinChainhookOccurrence::File(path, bytes) => {
236-
file_append(path, bytes, &ctx)
237-
}
235+
BitcoinChainhookOccurrence::File(path, bytes) => file_append(path, bytes, &ctx),
238236
BitcoinChainhookOccurrence::Data(payload) => {
239237
if let Some(ref tx) = config.data_handler_tx {
240238
match tx.send(DataHandlerEvent::Process(payload)) {
@@ -247,7 +245,7 @@ pub async fn execute_predicates_action<'a>(
247245
}
248246
};
249247
match result {
250-
Ok(_) => {},
248+
Ok(_) => {}
251249
Err(error) => return Err(error),
252250
}
253251
}

0 commit comments

Comments
 (0)