bitviewd 0.12.2

The self-hostable Bitview Bitcoin data daemon
Documentation
use bitview::ImportContext;
use bitview_default::DefaultPlugins;
use bitview_plugin::PluginId;
use bitview_query::Vecs;
use bitview_types::SeriesName;
use brk_reader::Reader;
use brk_rpc::{Auth, Client};
use brk_types::Index;

#[test]
fn derives_mutable_series_gates_from_vec_type() {
    std::thread::Builder::new()
        .stack_size(8 * 1024 * 1024)
        .spawn(assert_mutable_series_gates_from_vec_type)
        .unwrap()
        .join()
        .unwrap();
}

fn assert_mutable_series_gates_from_vec_type() {
    let directory = tempfile::tempdir().unwrap();
    let client = Client::new("http://127.0.0.1:1", Auth::None).unwrap();
    let reader = Reader::new_without_rlimit(directory.path().join("blocks"), &client);
    let context = ImportContext::new(directory.path());
    let plugins = DefaultPlugins::import(context, &reader).unwrap();
    let vecs = Vecs::build(&plugins);

    let txin_index = SeriesName::from("txin_index");
    let spent = vecs.entry(&txin_index, Index::TxOutIndex).unwrap();
    let outputs = spent.plugin();
    assert_eq!(outputs.id(), PluginId::new("outputs"));
    assert!(spent.vec().is_mutable());
    assert!(spent.requires_gate());

    let identity = vecs.entry(&txin_index, Index::TxInIndex).unwrap();
    let mappings = identity.plugin();
    assert_eq!(mappings.id(), PluginId::new("mappings"));
    assert!(!identity.vec().is_mutable());
    assert!(!identity.requires_gate());

    let reported_metric = vecs
        .entry(
            &SeriesName::from("utxos_over_5m_old_transfer_volume_average_1y_cents"),
            Index::Day1,
        )
        .unwrap();
    assert!(!reported_metric.vec().is_mutable());
    assert!(!reported_metric.requires_gate());

    let addr_state = SeriesName::from("addr_state");
    let address = vecs.entry(&addr_state, Index::P2AAddrIndex).unwrap();
    let distribution = address.plugin();
    assert_eq!(distribution.id(), PluginId::new("distribution"));
    assert!(address.vec().is_mutable());
    assert!(address.requires_gate());
}