global: snapshot

This commit is contained in:
nym21
2026-03-10 11:53:46 +01:00
parent 5ede3dc416
commit 8f93a5947e
16 changed files with 2123 additions and 2015 deletions
@@ -5,7 +5,7 @@ use brk_types::{Bitcoin, Cents, Dollars, Height, Sats, Version};
use derive_more::{Deref, DerefMut};
use vecdb::UnaryTransform;
use crate::internal::{AmountPerBlock, LazyAmount, LazyAmountDerivedResolutions};
use crate::internal::{AmountPerBlock, Identity, LazyAmount, LazyAmountDerivedResolutions, SatsToBitcoin};
/// Lazy value wrapper with height + all derived last transforms from AmountPerBlock.
#[derive(Clone, Deref, DerefMut, Traversable)]
@@ -55,4 +55,10 @@ impl LazyAmountPerBlock {
resolutions: Box::new(resolutions),
}
}
pub(crate) fn identity(name: &str, source: &AmountPerBlock, version: Version) -> Self {
Self::from_block_source::<Identity<Sats>, SatsToBitcoin, Identity<Cents>, Identity<Dollars>>(
name, source, version,
)
}
}
@@ -1,8 +1,8 @@
use brk_error::Result;
use brk_traversable::Traversable;
use brk_types::Version;
use brk_types::{Height, Version};
use derive_more::{Deref, DerefMut};
use vecdb::{Database, Rw, StorageMode};
use vecdb::{BinaryTransform, Database, Exit, ReadableVec, Rw, StorageMode, VecValue};
use crate::{
indexes,
@@ -28,4 +28,30 @@ impl<B: BpsType> PercentRollingWindows<B> {
PercentPerBlock::forced_import(db, &format!("{name}_{suffix}"), version, indexes)
})?))
}
pub(crate) fn compute_binary<S1T, S2T, F, R1, R2>(
&mut self,
max_from: Height,
sources1: [&R1; 4],
sources2: [&R2; 4],
exit: &Exit,
) -> Result<()>
where
S1T: VecValue,
S2T: VecValue,
R1: ReadableVec<Height, S1T>,
R2: ReadableVec<Height, S2T>,
F: BinaryTransform<S1T, S2T, B>,
{
for ((target, s1), s2) in self
.0
.as_mut_array()
.into_iter()
.zip(sources1)
.zip(sources2)
{
target.compute_binary::<S1T, S2T, F>(max_from, s1, s2, exit)?;
}
Ok(())
}
}
@@ -3,9 +3,11 @@ mod extended;
mod percentiles;
mod price_extended;
mod std_dev_bands;
mod windows;
pub use base::*;
pub use extended::*;
pub use percentiles::*;
pub use price_extended::*;
pub use std_dev_bands::*;
pub use windows::*;
@@ -0,0 +1,57 @@
use brk_error::Result;
use brk_traversable::Traversable;
use brk_types::{Height, Version};
use derive_more::{Deref, DerefMut};
use vecdb::{BinaryTransform, Database, Exit, ReadableVec, Rw, StorageMode, VecValue};
use crate::{
indexes,
internal::{BpsType, RatioPerBlock, Windows},
};
/// 4 rolling window vecs (24h, 1w, 1m, 1y), each storing basis points
/// with a lazy ratio float view.
#[derive(Deref, DerefMut, Traversable)]
#[traversable(transparent)]
pub struct RatioRollingWindows<B: BpsType, M: StorageMode = Rw>(
pub Windows<RatioPerBlock<B, M>>,
);
impl<B: BpsType> RatioRollingWindows<B> {
pub(crate) fn forced_import(
db: &Database,
name: &str,
version: Version,
indexes: &indexes::Vecs,
) -> Result<Self> {
Ok(Self(Windows::try_from_fn(|suffix| {
RatioPerBlock::forced_import_raw(db, &format!("{name}_{suffix}"), version, indexes)
})?))
}
pub(crate) fn compute_binary<S1T, S2T, F, R1, R2>(
&mut self,
max_from: Height,
sources1: [&R1; 4],
sources2: [&R2; 4],
exit: &Exit,
) -> Result<()>
where
S1T: VecValue,
S2T: VecValue,
R1: ReadableVec<Height, S1T>,
R2: ReadableVec<Height, S2T>,
F: BinaryTransform<S1T, S2T, B>,
{
for ((target, s1), s2) in self
.0
.as_mut_array()
.into_iter()
.zip(sources1)
.zip(sources2)
{
target.bps.compute_binary::<S1T, S2T, F>(max_from, s1, s2, exit)?;
}
Ok(())
}
}