mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-04-24 06:39:58 -07:00
readme: add disclaimer
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -371,7 +371,6 @@ name = "brk_fetcher"
|
||||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"brk_core",
|
||||
"brk_indexer",
|
||||
"brk_logger",
|
||||
"color-eyre",
|
||||
"jiff",
|
||||
|
||||
101
README.md
101
README.md
@@ -1,13 +1,82 @@
|
||||
<a href="https://kibo.money" target="_blank">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/kibo-money/kibo/main/_assets/logo-long-text-dark.svg">
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/kibo-money/kibo/main/_assets/logo-long-text-light.svg">
|
||||
<img alt="kibō" src="https://raw.githubusercontent.com/kibo-money/kibo/main/_assets/logo-long-text-light.svg" width="210" height="auto">
|
||||
</picture>
|
||||
</a>
|
||||
# Bitcoin Research Kit
|
||||
|
||||
> ⚠️ In the middle of a massive rewrite, use very carefully ⚠️
|
||||
> Everything is still a work in progress
|
||||
|
||||
## Description
|
||||
|
||||
The Bitcoin Research Kit is a suite of tools designed to help you extract, explore and analyze the data stored from your Bitcoin Core node.
|
||||
|
||||
## Crates
|
||||
|
||||
`brk`
|
||||
|
||||
Wrapper around all other `brk-*` crates.
|
||||
|
||||
> Status: ⚠️
|
||||
|
||||
`brk_cli`
|
||||
|
||||
A command line interface to interact with the Bitcoin Research Kit.
|
||||
|
||||
> Status: ❌
|
||||
|
||||
`brk_computer`
|
||||
|
||||
A Bitcoin dataset computer, built on top of brk_indexer.
|
||||
|
||||
> Status: ⚠️
|
||||
|
||||
`brk_core`
|
||||
|
||||
The Core (Structs and Errors) of the Bitcoin Research Kit.
|
||||
|
||||
> Status: ✅
|
||||
|
||||
`brk_fetcher`
|
||||
|
||||
A Bitcoin price fetcher.
|
||||
|
||||
> Status: ⚠️
|
||||
|
||||
`brk_indexer`
|
||||
|
||||
A Bitcoin Core indexer built on top of brk_parser.
|
||||
|
||||
> Status: ⚠️
|
||||
|
||||
`brk_logger`
|
||||
|
||||
A clean logger used in the Bitcoin Research Kit.
|
||||
|
||||
> Status: ✅
|
||||
|
||||
`brk_parser`
|
||||
|
||||
A very fast Bitcoin Core block parser and iterator built on top of bitcoin-rust.
|
||||
|
||||
> Status: ✅
|
||||
|
||||
`brk_server`
|
||||
|
||||
A server that serves Bitcoin data and swappable front-ends, built on top of brk_indexer, brk_fetcher and brk_computer.
|
||||
|
||||
> Status: ⚠️
|
||||
|
||||
`hodor`
|
||||
|
||||
Hold the door, an exit blocker built on top of ctrlc.
|
||||
|
||||
> Status: ✅
|
||||
|
||||
`storable_vec`
|
||||
|
||||
A very small, fast, efficient and simple storable Vec.
|
||||
|
||||
> Status: ✅
|
||||
|
||||
## Old README
|
||||
|
||||
[**kibō**](https://kibo.money) (_hope_ in japanese) is primarily an open source Bitcoin Core data extractor and visualizer (similar to [Glassnode](https://glassnode.com)) which goal is to empower anybody with data about Bitcoin for free.
|
||||
|
||||
The project is split in 3 parts:
|
||||
@@ -25,13 +94,11 @@ If you are a user of [mempool.space](https://mempool.space), you'll find this to
|
||||
|
||||
## Instances
|
||||
|
||||
| URL | Type | Version | Status | Last Height | Up Time Ratio |
|
||||
| URL | Front-end | Version | Status | Last Height | Up Time Ratio |
|
||||
| ------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| [kibo.money](https://kibo.money) | Main |  |  |  |  |
|
||||
| [backup.kibo.money](https://backup.kibo.money) | Backup |  |  |  |  |
|
||||
| [preview.kibo.money](https://preview.kibo.money) | Dev |  |  |  |  |
|
||||
| [kibo.money](https://kibo.money) | kibo.money |  |  |  |  |
|
||||
|
||||
Please open an issue if you want to add another instance
|
||||
Feel free to open an issue if you want to add another instance
|
||||
|
||||
## Endpoints
|
||||
|
||||
@@ -48,16 +115,6 @@ Please open an issue if you want to add another instance
|
||||
- [/api/date-to-close.csv?chunk=2009](https://kibo.money/api/date-to-close.csv?chunk=2009)
|
||||
- [/api/date-to-close.csv?all=true](https://kibo.money/api/date-to-close.csv?all=true)
|
||||
|
||||
## Roadmap
|
||||
|
||||
- **More Datasets/Charts**
|
||||
- **Simulations**
|
||||
- **Nostr integration**
|
||||
- **API Documentation**
|
||||
- **Descriptions**
|
||||
- **Docker support**
|
||||
- **Start9 support**
|
||||
|
||||
## Setup
|
||||
|
||||
### Requirements
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
use std::{fs, path::Path};
|
||||
|
||||
use brk_core::{Addressindex, Date, Dateindex, Feerate, Height, Sats, Timestamp, Txindex, Txinindex, Txoutindex};
|
||||
use brk_core::{
|
||||
Addressindex, Cents, Close, Date, Dateindex, Dollars, Feerate, Height, High, Low, Open, Sats, Timestamp, Txindex,
|
||||
Txinindex, Txoutindex,
|
||||
};
|
||||
use storable_vec::{StorableVec, Version};
|
||||
|
||||
// mod base;
|
||||
@@ -11,6 +14,22 @@ pub struct StorableVecs<const MODE: u8> {
|
||||
pub dateindex_to_first_height: StorableVec<Dateindex, Height, MODE>,
|
||||
// pub dateindex_to_last_height: StorableVec<Dateindex, Height, MODE>,
|
||||
// pub height_to_block_interval: StorableVec<Height, Timestamp, MODE>,
|
||||
pub dateindex_to_close_in_cents: StorableVec<Dateindex, Close<Cents>, MODE>,
|
||||
pub dateindex_to_close_in_dollars: StorableVec<Dateindex, Close<Dollars>, MODE>,
|
||||
pub dateindex_to_high_in_cents: StorableVec<Dateindex, High<Cents>, MODE>,
|
||||
pub dateindex_to_high_in_dollars: StorableVec<Dateindex, High<Dollars>, MODE>,
|
||||
pub dateindex_to_low_in_cents: StorableVec<Dateindex, Low<Cents>, MODE>,
|
||||
pub dateindex_to_low_in_dollars: StorableVec<Dateindex, Low<Dollars>, MODE>,
|
||||
pub dateindex_to_open_in_cents: StorableVec<Dateindex, Open<Cents>, MODE>,
|
||||
pub dateindex_to_open_in_dollars: StorableVec<Dateindex, Open<Dollars>, MODE>,
|
||||
pub height_to_close_in_cents: StorableVec<Height, Close<Cents>, MODE>,
|
||||
pub height_to_close_in_dollars: StorableVec<Height, Close<Dollars>, MODE>,
|
||||
pub height_to_high_in_cents: StorableVec<Height, High<Cents>, MODE>,
|
||||
pub height_to_high_in_dollars: StorableVec<Height, High<Dollars>, MODE>,
|
||||
pub height_to_low_in_cents: StorableVec<Height, Low<Cents>, MODE>,
|
||||
pub height_to_low_in_dollars: StorableVec<Height, Low<Dollars>, MODE>,
|
||||
pub height_to_open_in_cents: StorableVec<Height, Open<Cents>, MODE>,
|
||||
pub height_to_open_in_dollars: StorableVec<Height, Open<Dollars>, MODE>,
|
||||
pub height_to_date: StorableVec<Height, Date, MODE>,
|
||||
pub height_to_dateindex: StorableVec<Height, Dateindex, MODE>,
|
||||
// pub height_to_fee: StorableVec<Txindex, Amount, MODE>,
|
||||
@@ -47,6 +66,46 @@ impl<const MODE: u8> StorableVecs<MODE> {
|
||||
Version::from(1),
|
||||
)?,
|
||||
// height_to_block_interval: StorableVec::forced_import(&path.join("height_to_block_interval"), Version::from(1))?,
|
||||
dateindex_to_close_in_cents: StorableVec::import(
|
||||
&path.join("dateindex_to_close_in_cents"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
dateindex_to_close_in_dollars: StorableVec::import(
|
||||
&path.join("dateindex_to_close_in_dollars"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
dateindex_to_high_in_cents: StorableVec::import(
|
||||
&path.join("dateindex_to_high_in_cents"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
dateindex_to_high_in_dollars: StorableVec::import(
|
||||
&path.join("dateindex_to_high_in_dollars"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
dateindex_to_low_in_cents: StorableVec::import(&path.join("dateindex_to_low_in_cents"), Version::from(1))?,
|
||||
dateindex_to_low_in_dollars: StorableVec::import(
|
||||
&path.join("dateindex_to_low_in_dollars"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
dateindex_to_open_in_cents: StorableVec::import(
|
||||
&path.join("dateindex_to_open_in_cents"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
dateindex_to_open_in_dollars: StorableVec::import(
|
||||
&path.join("dateindex_to_open_in_dollars"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
height_to_close_in_cents: StorableVec::import(&path.join("height_to_close_in_cents"), Version::from(1))?,
|
||||
height_to_close_in_dollars: StorableVec::import(
|
||||
&path.join("height_to_close_in_dollars"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
height_to_high_in_cents: StorableVec::import(&path.join("height_to_high_in_cents"), Version::from(1))?,
|
||||
height_to_high_in_dollars: StorableVec::import(&path.join("height_to_high_in_dollars"), Version::from(1))?,
|
||||
height_to_low_in_cents: StorableVec::import(&path.join("height_to_low_in_cents"), Version::from(1))?,
|
||||
height_to_low_in_dollars: StorableVec::import(&path.join("height_to_low_in_dollars"), Version::from(1))?,
|
||||
height_to_open_in_cents: StorableVec::import(&path.join("height_to_open_in_cents"), Version::from(1))?,
|
||||
height_to_open_in_dollars: StorableVec::import(&path.join("height_to_open_in_dollars"), Version::from(1))?,
|
||||
height_to_date: StorableVec::forced_import(&path.join("height_to_date"), Version::from(1))?,
|
||||
height_to_dateindex: StorableVec::forced_import(&path.join("height_to_dateindex"), Version::from(1))?,
|
||||
// height_to_fee: StorableVec::forced_import(&path.join("height_to_fee"), Version::from(1))?,
|
||||
@@ -90,10 +149,44 @@ impl<const MODE: u8> StorableVecs<MODE> {
|
||||
}
|
||||
|
||||
// pub fn as_slice(&self) -> [&dyn AnyComputedStorableVec; 1] {
|
||||
// [&self.dateindex_to_first_height]
|
||||
// [
|
||||
// &self.dateindex_to_close_in_cents as &dyn AnyJsonStorableVec,
|
||||
// &self.dateindex_to_close_in_dollars,
|
||||
// &self.dateindex_to_high_in_cents,
|
||||
// &self.dateindex_to_high_in_dollars,
|
||||
// &self.dateindex_to_low_in_cents,
|
||||
// &self.dateindex_to_low_in_dollars,
|
||||
// &self.dateindex_to_open_in_cents,
|
||||
// &self.dateindex_to_open_in_dollars,
|
||||
// &self.height_to_close_in_cents,
|
||||
// &self.height_to_close_in_dollars,
|
||||
// &self.height_to_high_in_cents,
|
||||
// &self.height_to_high_in_dollars,
|
||||
// &self.height_to_low_in_cents,
|
||||
// &self.height_to_low_in_dollars,
|
||||
// &self.height_to_open_in_cents,
|
||||
// &self.height_to_open_in_dollars,
|
||||
// ]
|
||||
// }
|
||||
|
||||
// pub fn as_mut_slice(&mut self) -> [&mut dyn AnyComputedStorableVec; 1] {
|
||||
// [&mut self.dateindex_to_first_height]
|
||||
// [
|
||||
// &mut self.dateindex_to_close_in_cents as &mut dyn AnyStorableVec,
|
||||
// &mut self.dateindex_to_close_in_dollars,
|
||||
// &mut self.dateindex_to_high_in_cents,
|
||||
// &mut self.dateindex_to_high_in_dollars,
|
||||
// &mut self.dateindex_to_low_in_cents,
|
||||
// &mut self.dateindex_to_low_in_dollars,
|
||||
// &mut self.dateindex_to_open_in_cents,
|
||||
// &mut self.dateindex_to_open_in_dollars,
|
||||
// &mut self.height_to_close_in_cents,
|
||||
// &mut self.height_to_close_in_dollars,
|
||||
// &mut self.height_to_high_in_cents,
|
||||
// &mut self.height_to_high_in_dollars,
|
||||
// &mut self.height_to_low_in_cents,
|
||||
// &mut self.height_to_low_in_dollars,
|
||||
// &mut self.height_to_open_in_cents,
|
||||
// &mut self.height_to_open_in_dollars,
|
||||
// ]
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
use byteview::ByteView;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Unit();
|
||||
pub struct Unit;
|
||||
|
||||
impl From<ByteView> for Unit {
|
||||
fn from(_: ByteView) -> Self {
|
||||
Self()
|
||||
Self
|
||||
}
|
||||
}
|
||||
impl From<Unit> for ByteView {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "brk_fetcher"
|
||||
description = "A Bitcoin price fetcher built on top of brk_indexer"
|
||||
description = "A Bitcoin price fetcher"
|
||||
version.workspace = true
|
||||
edition.workspace = true
|
||||
license.workspace = true
|
||||
@@ -8,7 +8,6 @@ repository.workspace = true
|
||||
|
||||
[dependencies]
|
||||
brk_core = { workspace = true }
|
||||
brk_indexer = { workspace = true }
|
||||
brk_logger = { workspace = true }
|
||||
color-eyre = { workspace = true }
|
||||
jiff = { workspace = true }
|
||||
|
||||
@@ -9,32 +9,14 @@ use color_eyre::eyre::Error;
|
||||
|
||||
mod fetchers;
|
||||
|
||||
use brk_indexer::Indexer;
|
||||
// use brk_indexer::Indexer;
|
||||
pub use fetchers::*;
|
||||
use storable_vec::{AnyJsonStorableVec, AnyStorableVec, SINGLE_THREAD, StorableVec, Version};
|
||||
|
||||
pub struct Pricer<const MODE: u8> {
|
||||
path: PathBuf,
|
||||
binance: Binance,
|
||||
kraken: Kraken,
|
||||
kibo: Kibo,
|
||||
|
||||
pub dateindex_to_close_in_cents: StorableVec<Dateindex, Close<Cents>, MODE>,
|
||||
pub dateindex_to_close_in_dollars: StorableVec<Dateindex, Close<Dollars>, MODE>,
|
||||
pub dateindex_to_high_in_cents: StorableVec<Dateindex, High<Cents>, MODE>,
|
||||
pub dateindex_to_high_in_dollars: StorableVec<Dateindex, High<Dollars>, MODE>,
|
||||
pub dateindex_to_low_in_cents: StorableVec<Dateindex, Low<Cents>, MODE>,
|
||||
pub dateindex_to_low_in_dollars: StorableVec<Dateindex, Low<Dollars>, MODE>,
|
||||
pub dateindex_to_open_in_cents: StorableVec<Dateindex, Open<Cents>, MODE>,
|
||||
pub dateindex_to_open_in_dollars: StorableVec<Dateindex, Open<Dollars>, MODE>,
|
||||
pub height_to_close_in_cents: StorableVec<Height, Close<Cents>, MODE>,
|
||||
pub height_to_close_in_dollars: StorableVec<Height, Close<Dollars>, MODE>,
|
||||
pub height_to_high_in_cents: StorableVec<Height, High<Cents>, MODE>,
|
||||
pub height_to_high_in_dollars: StorableVec<Height, High<Dollars>, MODE>,
|
||||
pub height_to_low_in_cents: StorableVec<Height, Low<Cents>, MODE>,
|
||||
pub height_to_low_in_dollars: StorableVec<Height, Low<Dollars>, MODE>,
|
||||
pub height_to_open_in_cents: StorableVec<Height, Open<Cents>, MODE>,
|
||||
pub height_to_open_in_dollars: StorableVec<Height, Open<Dollars>, MODE>,
|
||||
}
|
||||
|
||||
impl<const MODE: u8> Pricer<MODE> {
|
||||
@@ -42,61 +24,19 @@ impl<const MODE: u8> Pricer<MODE> {
|
||||
fs::create_dir_all(path)?;
|
||||
|
||||
Ok(Self {
|
||||
path: path.to_owned(),
|
||||
binance: Binance::init(path),
|
||||
kraken: Kraken::default(),
|
||||
kibo: Kibo::default(),
|
||||
|
||||
dateindex_to_close_in_cents: StorableVec::import(
|
||||
&path.join("dateindex_to_close_in_cents"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
dateindex_to_close_in_dollars: StorableVec::import(
|
||||
&path.join("dateindex_to_close_in_dollars"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
dateindex_to_high_in_cents: StorableVec::import(
|
||||
&path.join("dateindex_to_high_in_cents"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
dateindex_to_high_in_dollars: StorableVec::import(
|
||||
&path.join("dateindex_to_high_in_dollars"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
dateindex_to_low_in_cents: StorableVec::import(&path.join("dateindex_to_low_in_cents"), Version::from(1))?,
|
||||
dateindex_to_low_in_dollars: StorableVec::import(
|
||||
&path.join("dateindex_to_low_in_dollars"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
dateindex_to_open_in_cents: StorableVec::import(
|
||||
&path.join("dateindex_to_open_in_cents"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
dateindex_to_open_in_dollars: StorableVec::import(
|
||||
&path.join("dateindex_to_open_in_dollars"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
height_to_close_in_cents: StorableVec::import(&path.join("height_to_close_in_cents"), Version::from(1))?,
|
||||
height_to_close_in_dollars: StorableVec::import(
|
||||
&path.join("height_to_close_in_dollars"),
|
||||
Version::from(1),
|
||||
)?,
|
||||
height_to_high_in_cents: StorableVec::import(&path.join("height_to_high_in_cents"), Version::from(1))?,
|
||||
height_to_high_in_dollars: StorableVec::import(&path.join("height_to_high_in_dollars"), Version::from(1))?,
|
||||
height_to_low_in_cents: StorableVec::import(&path.join("height_to_low_in_cents"), Version::from(1))?,
|
||||
height_to_low_in_dollars: StorableVec::import(&path.join("height_to_low_in_dollars"), Version::from(1))?,
|
||||
height_to_open_in_cents: StorableVec::import(&path.join("height_to_open_in_cents"), Version::from(1))?,
|
||||
height_to_open_in_dollars: StorableVec::import(&path.join("height_to_open_in_dollars"), Version::from(1))?,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn compute_if_needed(&mut self, indexer: &mut Indexer<SINGLE_THREAD>) {
|
||||
pub fn compute_if_needed(&mut self) {
|
||||
// TODO: Remove all outdated
|
||||
|
||||
indexer
|
||||
.vecs
|
||||
.height_to_timestamp
|
||||
.iter_from(Height::default(), |v| Ok(()));
|
||||
// indexer
|
||||
// .vecs
|
||||
// .height_to_timestamp
|
||||
// .iter_from(Height::default(), |v| Ok(()));
|
||||
|
||||
// self.open
|
||||
// .multi_insert_simple_transform(heights, dates, &mut self.ohlc, &|ohlc| ohlc.open);
|
||||
@@ -227,46 +167,4 @@ impl<const MODE: u8> Pricer<MODE> {
|
||||
|
||||
Ok(final_ohlc)
|
||||
}
|
||||
|
||||
pub fn as_any_json_vec_slice(&self) -> [&dyn AnyJsonStorableVec; 16] {
|
||||
[
|
||||
&self.dateindex_to_close_in_cents as &dyn AnyJsonStorableVec,
|
||||
&self.dateindex_to_close_in_dollars,
|
||||
&self.dateindex_to_high_in_cents,
|
||||
&self.dateindex_to_high_in_dollars,
|
||||
&self.dateindex_to_low_in_cents,
|
||||
&self.dateindex_to_low_in_dollars,
|
||||
&self.dateindex_to_open_in_cents,
|
||||
&self.dateindex_to_open_in_dollars,
|
||||
&self.height_to_close_in_cents,
|
||||
&self.height_to_close_in_dollars,
|
||||
&self.height_to_high_in_cents,
|
||||
&self.height_to_high_in_dollars,
|
||||
&self.height_to_low_in_cents,
|
||||
&self.height_to_low_in_dollars,
|
||||
&self.height_to_open_in_cents,
|
||||
&self.height_to_open_in_dollars,
|
||||
]
|
||||
}
|
||||
|
||||
pub fn as_mut_any_vec_slice(&mut self) -> [&mut dyn AnyStorableVec; 16] {
|
||||
[
|
||||
&mut self.dateindex_to_close_in_cents as &mut dyn AnyStorableVec,
|
||||
&mut self.dateindex_to_close_in_dollars,
|
||||
&mut self.dateindex_to_high_in_cents,
|
||||
&mut self.dateindex_to_high_in_dollars,
|
||||
&mut self.dateindex_to_low_in_cents,
|
||||
&mut self.dateindex_to_low_in_dollars,
|
||||
&mut self.dateindex_to_open_in_cents,
|
||||
&mut self.dateindex_to_open_in_dollars,
|
||||
&mut self.height_to_close_in_cents,
|
||||
&mut self.height_to_close_in_dollars,
|
||||
&mut self.height_to_high_in_cents,
|
||||
&mut self.height_to_high_in_dollars,
|
||||
&mut self.height_to_low_in_cents,
|
||||
&mut self.height_to_low_in_dollars,
|
||||
&mut self.height_to_open_in_cents,
|
||||
&mut self.height_to_open_in_dollars,
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "hodor"
|
||||
description = "Hold the door, an exit blocker that can wait until a task is completed"
|
||||
description = "Hold the door, an exit blocker built on top of ctrlc"
|
||||
version = "0.1.1"
|
||||
edition.workspace = true
|
||||
license.workspace = true
|
||||
|
||||
Reference in New Issue
Block a user