Skip to main content

query/
query.rs

1use std::{env, fs, path::Path, thread};
2
3use brk_computer::Computer;
4use brk_error::Result;
5use brk_indexer::Indexer;
6use brk_mempool::Mempool;
7use brk_query::Query;
8use brk_reader::Reader;
9use brk_rpc::{Auth, Client};
10use brk_types::{Address, OutputType};
11use vecdb::Exit;
12
13pub fn main() -> Result<()> {
14    // Can't increase main thread's stack size, thus we need to use another thread
15    thread::Builder::new()
16        .stack_size(512 * 1024 * 1024)
17        .spawn(run)?
18        .join()
19        .unwrap()
20}
21
22fn run() -> Result<()> {
23    let bitcoin_dir = Client::default_bitcoin_path();
24    // let bitcoin_dir = Path::new("/Volumes/WD_BLACK1/bitcoin");
25
26    let blocks_dir = bitcoin_dir.join("blocks");
27
28    let outputs_dir = Path::new(&env::var("HOME").unwrap()).join(".brk");
29    fs::create_dir_all(&outputs_dir)?;
30    // let outputs_dir = Path::new("/Volumes/WD_BLACK1/brk");
31
32    let client = Client::new(
33        Client::default_url(),
34        Auth::CookieFile(bitcoin_dir.join(".cookie")),
35    )?;
36
37    let outputs_dir = Path::new(&env::var("HOME").unwrap()).join(".brk");
38    // let outputs_dir = Path::new("../../_outputs");
39
40    let exit = Exit::new();
41    exit.set_ctrlc_handler();
42
43    let reader = Reader::new(blocks_dir, &client);
44
45    let indexer = Indexer::forced_import(&outputs_dir)?;
46
47    let computer = Computer::forced_import(&outputs_dir, &indexer, None)?;
48
49    let mempool = Mempool::new(&client);
50    let mempool_clone = mempool.clone();
51    thread::spawn(move || {
52        mempool_clone.start();
53    });
54
55    let query = Query::build(&reader, &indexer, &computer, Some(mempool));
56
57    dbg!(
58        indexer
59            .stores
60            .addresstype_to_addresshash_to_addressindex
61            .get_unwrap(OutputType::P2WSH)
62            .approximate_len()
63    );
64
65    let _ = dbg!(query.address(Address::from(
66        "bc1qwzrryqr3ja8w7hnja2spmkgfdcgvqwp5swz4af4ngsjecfz0w0pqud7k38".to_string(),
67    )));
68
69    let _ = dbg!(query.address_txids(
70        Address::from("bc1qwzrryqr3ja8w7hnja2spmkgfdcgvqwp5swz4af4ngsjecfz0w0pqud7k38".to_string()),
71        None,
72        25
73    ));
74
75    let _ = dbg!(query.address_utxos(Address::from(
76        "bc1qwzrryqr3ja8w7hnja2spmkgfdcgvqwp5swz4af4ngsjecfz0w0pqud7k38".to_string()
77    )));
78
79    // dbg!(query.search_and_format(MetricSelection {
80    //     index: Index::Height,
81    //     metrics: vec!["date"].into(),
82    //     range: DataRangeFormat::default().set_from(-1),
83    // })?);
84    // dbg!(query.search_and_format(MetricSelection {
85    //     index: Index::Height,
86    //     metrics: vec!["date", "timestamp"].into(),
87    //     range: DataRangeFormat::default().set_from(-10).set_count(5),
88    // })?);
89
90    Ok(())
91}