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
18    let rpc = Box::leak(Box::new(bitcoincore_rpc::Client::new(
19        "http://localhost:8332",
20        bitcoincore_rpc::Auth::CookieFile(bitcoin_dir.join(".cookie")),
21    )?));
22    let exit = Exit::new();
23
24    // Can't increase main thread's stack programatically, thus we need to use another thread
25    thread::Builder::new()
26        .stack_size(32 * 1024 * 1024)
27        .spawn(move || -> color_eyre::Result<()> {
28            let parser = Parser::new(bitcoin_dir.join("blocks"), rpc);
29
30            let _outputs_dir = default_brk_path().join("outputs");
31            let outputs_dir = _outputs_dir.as_path();
32            // let outputs_dir = Path::new("../../_outputs");
33
34            let format = Format::Raw;
35
36            let mut indexer = Indexer::new(outputs_dir, true)?;
37            indexer.import_stores()?;
38            indexer.import_vecs()?;
39
40            let fetcher = Fetcher::import(None)?;
41
42            let mut computer = Computer::new(outputs_dir, Some(fetcher), format);
43            computer.import_stores(&indexer)?;
44            computer.import_vecs(&indexer, Computation::Lazy)?;
45
46            let starting_indexes = indexer.index(&parser, rpc, &exit)?;
47
48            computer.compute(&mut indexer, starting_indexes, &exit)?;
49
50            Ok(())
51        })?
52        .join()
53        .unwrap()
54}