main/
main.rs

1use std::{path::Path, thread};
2
3use brk_computer::Computer;
4use brk_core::{default_bitcoin_path, default_brk_path};
5use brk_exit::Exit;
6use brk_fetcher::Fetcher;
7use brk_indexer::Indexer;
8use brk_parser::Parser;
9use brk_vec::{Computation, Format};
10
11pub fn main() -> color_eyre::Result<()> {
12    color_eyre::install()?;
13
14    brk_logger::init(Some(Path::new(".log")));
15
16    // let bitcoin_dir = default_bitcoin_path();
17    let bitcoin_dir = Path::new("/Volumes/WD_BLACK/bitcoin");
18
19    let rpc = Box::leak(Box::new(bitcoincore_rpc::Client::new(
20        "http://localhost:8332",
21        bitcoincore_rpc::Auth::CookieFile(bitcoin_dir.join(".cookie")),
22    )?));
23    let exit = Exit::new();
24
25    // Can't increase main thread's stack programatically, thus we need to use another thread
26    thread::Builder::new()
27        .stack_size(256 * 1024 * 1024)
28        .spawn(move || -> color_eyre::Result<()> {
29            let parser = Parser::new(bitcoin_dir.join("blocks"), rpc);
30
31            let _outputs_dir = Path::new("/Volumes/WD_BLACK/brk").join("outputs");
32            let outputs_dir = _outputs_dir.as_path();
33            // let outputs_dir = Path::new("../../_outputs");
34
35            let format = Format::Raw;
36
37            let mut indexer = Indexer::forced_import(outputs_dir)?;
38
39            let fetcher = Fetcher::import(None)?;
40
41            let mut computer = Computer::forced_import(
42                outputs_dir,
43                &indexer,
44                Computation::Lazy,
45                Some(fetcher),
46                format,
47            )?;
48
49            let starting_indexes = indexer.index(&parser, rpc, &exit, true)?;
50
51            computer.compute(&mut indexer, starting_indexes, &exit)?;
52
53            Ok(())
54        })?
55        .join()
56        .unwrap()
57}