mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-06-13 00:13:31 -07:00
global: snapshot
This commit is contained in:
@@ -7,6 +7,7 @@ pub use iterator::rpc;
|
||||
mod storage;
|
||||
mod structs;
|
||||
|
||||
use pricer::Date;
|
||||
use storable_vec::SINGLE_THREAD;
|
||||
use storage::{Fjalls, StorableVecs};
|
||||
pub use structs::*;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use std::{fs, path::Path};
|
||||
|
||||
use indexer::{Addressindex, Amount, Height, Timestamp, Txindex, Txinindex, Txoutindex};
|
||||
use indexer::{Addressindex, Height, Sats, Timestamp, Txindex, Txinindex, Txoutindex};
|
||||
use pricer::{Date, Dateindex};
|
||||
use storable_vec::{StorableVec, Version};
|
||||
|
||||
use crate::{
|
||||
structs::{Date, Feerate},
|
||||
Dateindex,
|
||||
};
|
||||
use crate::structs::Feerate;
|
||||
|
||||
// mod base;
|
||||
|
||||
@@ -30,16 +28,16 @@ pub struct StorableVecs<const MODE: u8> {
|
||||
// pub height_to_subsidy: StorableVec<Height, u32, MODE>,
|
||||
// pub height_to_totalfees: StorableVec<Height, Amount, MODE>,
|
||||
// pub height_to_txcount: StorableVec<Height, u32, MODE>,
|
||||
pub txindex_to_fee: StorableVec<Txindex, Amount, MODE>,
|
||||
pub txindex_to_fee: StorableVec<Txindex, Sats, MODE>,
|
||||
pub txindex_to_height: StorableVec<Txindex, Height, MODE>,
|
||||
pub txindex_to_is_coinbase: StorableVec<Txindex, bool, MODE>,
|
||||
// pub txindex_to_feerate: StorableVec<Txindex, Feerate, MODE>,
|
||||
pub txindex_to_inputs_count: StorableVec<Txindex, u32, MODE>,
|
||||
pub txindex_to_inputs_sum: StorableVec<Txindex, Amount, MODE>,
|
||||
pub txindex_to_inputs_sum: StorableVec<Txindex, Sats, MODE>,
|
||||
pub txindex_to_last_txinindex: StorableVec<Txindex, Txinindex, MODE>,
|
||||
pub txindex_to_last_txoutindex: StorableVec<Txindex, Txoutindex, MODE>,
|
||||
pub txindex_to_outputs_count: StorableVec<Txindex, u32, MODE>,
|
||||
pub txindex_to_outputs_sum: StorableVec<Txindex, Amount, MODE>,
|
||||
pub txindex_to_outputs_sum: StorableVec<Txindex, Sats, MODE>,
|
||||
}
|
||||
|
||||
impl<const MODE: u8> StorableVecs<MODE> {
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
use indexer::Sats;
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy)]
|
||||
pub struct Bitcoin(f64);
|
||||
|
||||
impl Bitcoin {
|
||||
const ONE: Self = Self(100_000_000.0);
|
||||
}
|
||||
|
||||
impl From<Sats> for Bitcoin {
|
||||
fn from(value: Sats) -> Self {
|
||||
Self((*value as f64) / Self::ONE.0)
|
||||
}
|
||||
}
|
||||
@@ -1,83 +0,0 @@
|
||||
use std::ops::Add;
|
||||
|
||||
use color_eyre::eyre::eyre;
|
||||
use indexer::Timestamp;
|
||||
use jiff::{civil::Date as Date_, tz::TimeZone, Span};
|
||||
use zerocopy::{FromBytes, Immutable, IntoBytes, KnownLayout};
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromBytes, Immutable, IntoBytes, KnownLayout)]
|
||||
pub struct Date(u32);
|
||||
|
||||
impl Date {
|
||||
const INDEX_ZERO: Self = Self(20090103);
|
||||
const INDEX_ZERO_: Date_ = Date_::constant(2009, 1, 3);
|
||||
const INDEX_ONE: Self = Self(20090109);
|
||||
const INDEX_ONE_: Date_ = Date_::constant(2009, 1, 9);
|
||||
|
||||
pub fn year(&self) -> u16 {
|
||||
(self.0 / 1_00_00) as u16
|
||||
}
|
||||
|
||||
pub fn month(&self) -> u8 {
|
||||
((self.0 % 1_00_00) / 1_00) as u8
|
||||
}
|
||||
|
||||
pub fn day(&self) -> u8 {
|
||||
(self.0 % 1_00) as u8
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for Date {
|
||||
fn default() -> Self {
|
||||
Self::INDEX_ZERO
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Date_> for Date {
|
||||
fn from(value: Date_) -> Self {
|
||||
Self(value.year() as u32 * 1_00_00 + value.month() as u32 * 1_00 + value.day() as u32)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Date> for Date_ {
|
||||
fn from(value: Date) -> Self {
|
||||
Self::new(value.year() as i16, value.month() as i8, value.day() as i8).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Timestamp> for Date {
|
||||
fn from(value: Timestamp) -> Self {
|
||||
Self::from(Date_::from(jiff::Timestamp::from(value).to_zoned(TimeZone::UTC)))
|
||||
}
|
||||
}
|
||||
|
||||
// impl TryFrom<Date> for usize {
|
||||
// type Error = color_eyre::Report;
|
||||
// fn try_from(value: Date) -> Result<Self, Self::Error> {
|
||||
// let value_ = Date_::from(value);
|
||||
// if value_ < Date::INDEX_ZERO_ {
|
||||
// Err(eyre!("Date is too early"))
|
||||
// } else if value == Date::INDEX_ZERO {
|
||||
// Ok(0)
|
||||
// } else if value_ < Date::INDEX_ONE_ {
|
||||
// Err(eyre!("Date is between first and second"))
|
||||
// } else if value == Date::INDEX_ONE {
|
||||
// Ok(1)
|
||||
// } else {
|
||||
// Ok(Date_::from(Date::INDEX_ONE).until(value_)?.get_days() as usize + 1)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// impl From<usize> for Date {
|
||||
// fn from(value: usize) -> Self {
|
||||
// Self::from(Self::INDEX_ZERO_.checked_add(Span::new().days(value as i64)).unwrap())
|
||||
// }
|
||||
// }
|
||||
|
||||
// impl Add<usize> for Date {
|
||||
// type Output = Self;
|
||||
// fn add(self, rhs: usize) -> Self::Output {
|
||||
// Self::from(Date_::from(self).checked_add(Span::new().days(rhs as i64)).unwrap())
|
||||
// }
|
||||
// }
|
||||
@@ -1,25 +0,0 @@
|
||||
use std::ops::Add;
|
||||
|
||||
use zerocopy::{FromBytes, Immutable, IntoBytes, KnownLayout};
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, FromBytes, Immutable, IntoBytes, KnownLayout)]
|
||||
pub struct Dateindex(u16);
|
||||
|
||||
impl From<Dateindex> for usize {
|
||||
fn from(value: Dateindex) -> Self {
|
||||
value.0 as usize
|
||||
}
|
||||
}
|
||||
|
||||
impl From<usize> for Dateindex {
|
||||
fn from(value: usize) -> Self {
|
||||
Self(value as u16)
|
||||
}
|
||||
}
|
||||
|
||||
impl Add<usize> for Dateindex {
|
||||
type Output = Self;
|
||||
fn add(self, rhs: usize) -> Self::Output {
|
||||
Self(self.0 + rhs as u16)
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
mod addressindextxoutindex;
|
||||
mod date;
|
||||
mod dateindex;
|
||||
mod bitcoin;
|
||||
mod feerate;
|
||||
mod ohlc;
|
||||
mod unit;
|
||||
|
||||
pub use addressindextxoutindex::*;
|
||||
pub use date::*;
|
||||
pub use dateindex::*;
|
||||
pub use bitcoin::*;
|
||||
pub use feerate::*;
|
||||
pub use ohlc::*;
|
||||
pub use unit::*;
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
use serde::Serialize;
|
||||
use zerocopy::{FromBytes, Immutable, IntoBytes, KnownLayout};
|
||||
|
||||
use super::{Cents, Close, High, Low, Open};
|
||||
|
||||
// #[derive(Debug, Default, Clone, Copy, FromBytes, Immutable, IntoBytes, KnownLayout, Serialize)]
|
||||
// #[repr(C)]
|
||||
// pub struct OHLCCents(OHLC<Cents>);
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy, FromBytes, Immutable, IntoBytes, KnownLayout, Serialize)]
|
||||
#[repr(C)]
|
||||
pub struct OHLCCents(Open<Cents>, High<Cents>, Low<Cents>, Close<Cents>);
|
||||
|
||||
impl OHLCCents {
|
||||
pub fn open(&self) -> Open<Cents> {
|
||||
self.0
|
||||
}
|
||||
|
||||
pub fn high(&self) -> High<Cents> {
|
||||
self.1
|
||||
}
|
||||
|
||||
pub fn low(&self) -> Low<Cents> {
|
||||
self.2
|
||||
}
|
||||
|
||||
pub fn close(&self) -> Close<Cents> {
|
||||
self.3
|
||||
}
|
||||
}
|
||||
|
||||
impl From<(Open<Cents>, High<Cents>, Low<Cents>, Close<Cents>)> for OHLCCents {
|
||||
fn from(value: (Open<Cents>, High<Cents>, Low<Cents>, Close<Cents>)) -> Self {
|
||||
Self(value.0, value.1, value.2, value.3)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user