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 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 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}