mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-04-24 06:39:58 -07:00
computer: snap
This commit is contained in:
@@ -30,7 +30,7 @@ impl Vecs {
|
||||
|
||||
self.blocks_to_retarget.height.compute_transform(
|
||||
starting_indexes.height,
|
||||
&indexes.height.identity,
|
||||
&indexes.height.epoch,
|
||||
|(h, ..)| (h, StoredU32::from(h.left_before_next_diff_adj())),
|
||||
exit,
|
||||
)?;
|
||||
|
||||
@@ -21,7 +21,7 @@ impl Vecs {
|
||||
|
||||
self.blocks_to_halving.height.compute_transform(
|
||||
starting_indexes.height,
|
||||
&indexes.height.identity,
|
||||
&indexes.height.halving,
|
||||
|(h, ..)| (h, StoredU32::from(h.left_before_next_halving())),
|
||||
exit,
|
||||
)?;
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
use brk_traversable::Traversable;
|
||||
use brk_types::{Date, Day1, Height, Version};
|
||||
use vecdb::{CachedVec, Database, EagerVec, ImportableVec, PcoVec, Rw, StorageMode};
|
||||
|
||||
use brk_error::Result;
|
||||
|
||||
#[derive(Traversable)]
|
||||
pub struct Vecs<M: StorageMode = Rw> {
|
||||
pub identity: M::Stored<EagerVec<PcoVec<Day1, Day1>>>,
|
||||
pub date: M::Stored<EagerVec<PcoVec<Day1, Date>>>,
|
||||
pub first_height: CachedVec<M::Stored<EagerVec<PcoVec<Day1, Height>>>>,
|
||||
}
|
||||
|
||||
impl Vecs {
|
||||
pub(crate) fn forced_import(db: &Database, version: Version) -> Result<Self> {
|
||||
Ok(Self {
|
||||
identity: EagerVec::forced_import(db, "day1_index", version)?,
|
||||
date: EagerVec::forced_import(db, "date", version + Version::ONE)?,
|
||||
first_height: CachedVec::wrap(EagerVec::forced_import(db, "first_height", version)?),
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,6 @@ use brk_error::Result;
|
||||
|
||||
#[derive(Traversable)]
|
||||
pub struct Vecs<M: StorageMode = Rw> {
|
||||
pub identity: M::Stored<EagerVec<PcoVec<Height, Height>>>,
|
||||
pub minute10: M::Stored<EagerVec<PcoVec<Height, Minute10>>>,
|
||||
pub minute30: M::Stored<EagerVec<PcoVec<Height, Minute30>>>,
|
||||
pub hour1: M::Stored<EagerVec<PcoVec<Height, Hour1>>>,
|
||||
@@ -31,7 +30,6 @@ pub struct Vecs<M: StorageMode = Rw> {
|
||||
impl Vecs {
|
||||
pub(crate) fn forced_import(db: &Database, version: Version) -> Result<Self> {
|
||||
Ok(Self {
|
||||
identity: EagerVec::forced_import(db, "height", version)?,
|
||||
minute10: EagerVec::forced_import(db, "minute10", version)?,
|
||||
minute30: EagerVec::forced_import(db, "minute30", version)?,
|
||||
hour1: EagerVec::forced_import(db, "hour1", version)?,
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
mod addr;
|
||||
mod day1;
|
||||
mod height;
|
||||
mod resolution;
|
||||
pub mod timestamp;
|
||||
@@ -22,9 +21,8 @@ use vecdb::{Database, Exit, ReadableVec, Rw, StorageMode};
|
||||
use crate::internal::db_utils::{finalize_db, open_db};
|
||||
|
||||
pub use addr::Vecs as AddrVecs;
|
||||
pub use day1::Vecs as Day1Vecs;
|
||||
pub use height::Vecs as HeightVecs;
|
||||
pub use resolution::{CachedResolutionVecs, DatedResolutionVecs, ResolutionVecs};
|
||||
pub use resolution::{DatedResolutionVecs, ResolutionVecs};
|
||||
pub use timestamp::Timestamps;
|
||||
pub use tx_heights::TxHeights;
|
||||
pub use tx_index::Vecs as TxIndexVecs;
|
||||
@@ -36,9 +34,10 @@ pub type Minute30Vecs<M = Rw> = ResolutionVecs<Minute30, M>;
|
||||
pub type Hour1Vecs<M = Rw> = ResolutionVecs<Hour1, M>;
|
||||
pub type Hour4Vecs<M = Rw> = ResolutionVecs<Hour4, M>;
|
||||
pub type Hour12Vecs<M = Rw> = ResolutionVecs<Hour12, M>;
|
||||
pub type Day3Vecs<M = Rw> = ResolutionVecs<Day3, M>;
|
||||
pub type EpochVecs<M = Rw> = CachedResolutionVecs<Epoch, M>;
|
||||
pub type HalvingVecs<M = Rw> = CachedResolutionVecs<Halving, M>;
|
||||
pub type Day1Vecs<M = Rw> = DatedResolutionVecs<Day1, M>;
|
||||
pub type Day3Vecs<M = Rw> = DatedResolutionVecs<Day3, M>;
|
||||
pub type EpochVecs<M = Rw> = ResolutionVecs<Epoch, M>;
|
||||
pub type HalvingVecs<M = Rw> = ResolutionVecs<Halving, M>;
|
||||
pub type Week1Vecs<M = Rw> = DatedResolutionVecs<Week1, M>;
|
||||
pub type Month1Vecs<M = Rw> = DatedResolutionVecs<Month1, M>;
|
||||
pub type Month3Vecs<M = Rw> = DatedResolutionVecs<Month3, M>;
|
||||
@@ -88,21 +87,21 @@ impl Vecs {
|
||||
|
||||
let addr = AddrVecs::forced_import(version, indexer);
|
||||
let height = HeightVecs::forced_import(&db, version)?;
|
||||
let epoch = CachedResolutionVecs::forced_import(&db, "epoch", version)?;
|
||||
let halving = CachedResolutionVecs::forced_import(&db, "halving", version)?;
|
||||
let minute10 = ResolutionVecs::forced_import(&db, "minute10_index", version)?;
|
||||
let minute30 = ResolutionVecs::forced_import(&db, "minute30_index", version)?;
|
||||
let hour1 = ResolutionVecs::forced_import(&db, "hour1_index", version)?;
|
||||
let hour4 = ResolutionVecs::forced_import(&db, "hour4_index", version)?;
|
||||
let hour12 = ResolutionVecs::forced_import(&db, "hour12_index", version)?;
|
||||
let epoch = ResolutionVecs::forced_import(&db, version)?;
|
||||
let halving = ResolutionVecs::forced_import(&db, version)?;
|
||||
let minute10 = ResolutionVecs::forced_import(&db, version)?;
|
||||
let minute30 = ResolutionVecs::forced_import(&db, version)?;
|
||||
let hour1 = ResolutionVecs::forced_import(&db, version)?;
|
||||
let hour4 = ResolutionVecs::forced_import(&db, version)?;
|
||||
let hour12 = ResolutionVecs::forced_import(&db, version)?;
|
||||
let day1 = Day1Vecs::forced_import(&db, version)?;
|
||||
let day3 = ResolutionVecs::forced_import(&db, "day3_index", version)?;
|
||||
let week1 = DatedResolutionVecs::forced_import(&db, "week1_index", version)?;
|
||||
let month1 = DatedResolutionVecs::forced_import(&db, "month1_index", version)?;
|
||||
let month3 = DatedResolutionVecs::forced_import(&db, "month3_index", version)?;
|
||||
let month6 = DatedResolutionVecs::forced_import(&db, "month6_index", version)?;
|
||||
let year1 = DatedResolutionVecs::forced_import(&db, "year1_index", version)?;
|
||||
let year10 = DatedResolutionVecs::forced_import(&db, "year10_index", version)?;
|
||||
let day3 = DatedResolutionVecs::forced_import(&db, version)?;
|
||||
let week1 = DatedResolutionVecs::forced_import(&db, version)?;
|
||||
let month1 = DatedResolutionVecs::forced_import(&db, version)?;
|
||||
let month3 = DatedResolutionVecs::forced_import(&db, version)?;
|
||||
let month6 = DatedResolutionVecs::forced_import(&db, version)?;
|
||||
let year1 = DatedResolutionVecs::forced_import(&db, version)?;
|
||||
let year10 = DatedResolutionVecs::forced_import(&db, version)?;
|
||||
let tx_index = TxIndexVecs::forced_import(&db, version, indexer)?;
|
||||
let txin_index = TxInIndexVecs::forced_import(version, indexer);
|
||||
let txout_index = TxOutIndexVecs::forced_import(version, indexer);
|
||||
@@ -226,11 +225,6 @@ impl Vecs {
|
||||
&indexer.vecs.transactions.txid,
|
||||
exit,
|
||||
)?;
|
||||
self.height.identity.compute_from_index(
|
||||
starting_indexes.height,
|
||||
&indexer.vecs.blocks.weight,
|
||||
exit,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -286,7 +280,7 @@ impl Vecs {
|
||||
starting_day1
|
||||
};
|
||||
|
||||
self.compute_epoch(indexer, starting_indexes, prev_height, exit)?;
|
||||
self.compute_epoch(indexer, starting_indexes, exit)?;
|
||||
|
||||
self.height.week1.compute_transform(
|
||||
starting_indexes.height,
|
||||
@@ -332,15 +326,8 @@ impl Vecs {
|
||||
&mut self,
|
||||
indexer: &Indexer,
|
||||
starting_indexes: &Indexes,
|
||||
prev_height: Height,
|
||||
exit: &Exit,
|
||||
) -> Result<()> {
|
||||
let starting_difficulty = self
|
||||
.height
|
||||
.epoch
|
||||
.collect_one(prev_height)
|
||||
.unwrap_or_default();
|
||||
|
||||
self.height.epoch.compute_from_index(
|
||||
starting_indexes.height,
|
||||
&indexer.vecs.blocks.weight,
|
||||
@@ -351,16 +338,6 @@ impl Vecs {
|
||||
&self.height.epoch,
|
||||
exit,
|
||||
)?;
|
||||
self.epoch.identity.inner.compute_from_index(
|
||||
starting_difficulty,
|
||||
&self.epoch.first_height,
|
||||
exit,
|
||||
)?;
|
||||
let starting_halving = self
|
||||
.height
|
||||
.halving
|
||||
.collect_one(prev_height)
|
||||
.unwrap_or_default();
|
||||
|
||||
self.height.halving.compute_from_index(
|
||||
starting_indexes.height,
|
||||
@@ -372,12 +349,6 @@ impl Vecs {
|
||||
&self.height.halving,
|
||||
exit,
|
||||
)?;
|
||||
self.halving.identity.inner.compute_from_index(
|
||||
starting_halving,
|
||||
&self.halving.first_height,
|
||||
exit,
|
||||
)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -395,14 +366,6 @@ impl Vecs {
|
||||
&self.height.$period,
|
||||
exit,
|
||||
)?;
|
||||
self.$period.identity.compute_from_index(
|
||||
self.height
|
||||
.$period
|
||||
.collect_one(prev_height)
|
||||
.unwrap_or_default(),
|
||||
&self.$period.first_height,
|
||||
exit,
|
||||
)?;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -411,19 +374,15 @@ impl Vecs {
|
||||
basic_period!(hour1);
|
||||
basic_period!(hour4);
|
||||
basic_period!(hour12);
|
||||
basic_period!(day3);
|
||||
|
||||
self.day1.first_height.inner.compute_first_per_index(
|
||||
starting_indexes.height,
|
||||
&self.height.day1,
|
||||
exit,
|
||||
)?;
|
||||
self.day1
|
||||
.identity
|
||||
.compute_from_index(starting_day1, &self.day1.first_height, exit)?;
|
||||
self.day1.date.compute_transform(
|
||||
starting_day1,
|
||||
&self.day1.identity,
|
||||
&self.day1.first_height,
|
||||
|(di, ..)| (di, Date::from(di)),
|
||||
exit,
|
||||
)?;
|
||||
@@ -441,11 +400,6 @@ impl Vecs {
|
||||
.$period
|
||||
.collect_one(prev_height)
|
||||
.unwrap_or_default();
|
||||
self.$period.identity.compute_from_index(
|
||||
start,
|
||||
&self.$period.first_height,
|
||||
exit,
|
||||
)?;
|
||||
self.$period.date.compute_transform(
|
||||
start,
|
||||
&self.$period.first_height,
|
||||
@@ -455,6 +409,7 @@ impl Vecs {
|
||||
}};
|
||||
}
|
||||
|
||||
dated_period!(day3);
|
||||
dated_period!(week1);
|
||||
dated_period!(month1);
|
||||
dated_period!(month3);
|
||||
|
||||
@@ -5,62 +5,30 @@ use vecdb::{
|
||||
CachedVec, Database, EagerVec, ImportableVec, PcoVec, PcoVecValue, Rw, StorageMode, VecIndex,
|
||||
};
|
||||
|
||||
/// Resolution with identity mapping and cached first-height lookup.
|
||||
/// Resolution with cached first-height lookup.
|
||||
#[derive(Traversable)]
|
||||
pub struct ResolutionVecs<I: VecIndex + PcoVecValue, M: StorageMode = Rw> {
|
||||
pub identity: M::Stored<EagerVec<PcoVec<I, I>>>,
|
||||
pub first_height: CachedVec<M::Stored<EagerVec<PcoVec<I, Height>>>>,
|
||||
}
|
||||
|
||||
/// Resolution with both identity and first-height cached (halving, epoch).
|
||||
#[derive(Traversable)]
|
||||
pub struct CachedResolutionVecs<I: VecIndex + PcoVecValue, M: StorageMode = Rw> {
|
||||
pub identity: CachedVec<M::Stored<EagerVec<PcoVec<I, I>>>>,
|
||||
pub first_height: CachedVec<M::Stored<EagerVec<PcoVec<I, Height>>>>,
|
||||
}
|
||||
|
||||
impl<I: VecIndex + PcoVecValue> CachedResolutionVecs<I> {
|
||||
pub(crate) fn forced_import(
|
||||
db: &Database,
|
||||
identity_name: &str,
|
||||
version: Version,
|
||||
) -> Result<Self> {
|
||||
Ok(Self {
|
||||
identity: CachedVec::wrap(EagerVec::forced_import(db, identity_name, version)?),
|
||||
first_height: CachedVec::wrap(EagerVec::forced_import(db, "first_height", version)?),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl<I: VecIndex + PcoVecValue> ResolutionVecs<I> {
|
||||
pub(crate) fn forced_import(
|
||||
db: &Database,
|
||||
identity_name: &str,
|
||||
version: Version,
|
||||
) -> Result<Self> {
|
||||
pub(crate) fn forced_import(db: &Database, version: Version) -> Result<Self> {
|
||||
Ok(Self {
|
||||
identity: EagerVec::forced_import(db, identity_name, version)?,
|
||||
first_height: CachedVec::wrap(EagerVec::forced_import(db, "first_height", version)?),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/// Resolution with identity, date, and cached first-height lookup.
|
||||
/// Resolution with date and cached first-height lookup.
|
||||
#[derive(Traversable)]
|
||||
pub struct DatedResolutionVecs<I: VecIndex + PcoVecValue, M: StorageMode = Rw> {
|
||||
pub identity: M::Stored<EagerVec<PcoVec<I, I>>>,
|
||||
pub date: M::Stored<EagerVec<PcoVec<I, Date>>>,
|
||||
pub first_height: CachedVec<M::Stored<EagerVec<PcoVec<I, Height>>>>,
|
||||
}
|
||||
|
||||
impl<I: VecIndex + PcoVecValue> DatedResolutionVecs<I> {
|
||||
pub(crate) fn forced_import(
|
||||
db: &Database,
|
||||
identity_name: &str,
|
||||
version: Version,
|
||||
) -> Result<Self> {
|
||||
pub(crate) fn forced_import(db: &Database, version: Version) -> Result<Self> {
|
||||
Ok(Self {
|
||||
identity: EagerVec::forced_import(db, identity_name, version)?,
|
||||
date: EagerVec::forced_import(db, "date", version)?,
|
||||
first_height: CachedVec::wrap(EagerVec::forced_import(db, "first_height", version)?),
|
||||
})
|
||||
|
||||
@@ -15,22 +15,22 @@ pub struct ConstantVecs<T>
|
||||
where
|
||||
T: VecValue + Formattable + Serialize + JsonSchema,
|
||||
{
|
||||
pub height: LazyVecFrom1<Height, T, Height, Height>,
|
||||
pub minute10: LazyVecFrom1<Minute10, T, Minute10, Minute10>,
|
||||
pub minute30: LazyVecFrom1<Minute30, T, Minute30, Minute30>,
|
||||
pub hour1: LazyVecFrom1<Hour1, T, Hour1, Hour1>,
|
||||
pub hour4: LazyVecFrom1<Hour4, T, Hour4, Hour4>,
|
||||
pub hour12: LazyVecFrom1<Hour12, T, Hour12, Hour12>,
|
||||
pub day1: LazyVecFrom1<Day1, T, Day1, Day1>,
|
||||
pub day3: LazyVecFrom1<Day3, T, Day3, Day3>,
|
||||
pub week1: LazyVecFrom1<Week1, T, Week1, Week1>,
|
||||
pub month1: LazyVecFrom1<Month1, T, Month1, Month1>,
|
||||
pub month3: LazyVecFrom1<Month3, T, Month3, Month3>,
|
||||
pub month6: LazyVecFrom1<Month6, T, Month6, Month6>,
|
||||
pub year1: LazyVecFrom1<Year1, T, Year1, Year1>,
|
||||
pub year10: LazyVecFrom1<Year10, T, Year10, Year10>,
|
||||
pub halving: LazyVecFrom1<Halving, T, Halving, Halving>,
|
||||
pub epoch: LazyVecFrom1<Epoch, T, Epoch, Epoch>,
|
||||
pub height: LazyVecFrom1<Height, T, Height, Minute10>,
|
||||
pub minute10: LazyVecFrom1<Minute10, T, Minute10, Height>,
|
||||
pub minute30: LazyVecFrom1<Minute30, T, Minute30, Height>,
|
||||
pub hour1: LazyVecFrom1<Hour1, T, Hour1, Height>,
|
||||
pub hour4: LazyVecFrom1<Hour4, T, Hour4, Height>,
|
||||
pub hour12: LazyVecFrom1<Hour12, T, Hour12, Height>,
|
||||
pub day1: LazyVecFrom1<Day1, T, Day1, Height>,
|
||||
pub day3: LazyVecFrom1<Day3, T, Day3, Height>,
|
||||
pub week1: LazyVecFrom1<Week1, T, Week1, Height>,
|
||||
pub month1: LazyVecFrom1<Month1, T, Month1, Height>,
|
||||
pub month3: LazyVecFrom1<Month3, T, Month3, Height>,
|
||||
pub month6: LazyVecFrom1<Month6, T, Month6, Height>,
|
||||
pub year1: LazyVecFrom1<Year1, T, Year1, Height>,
|
||||
pub year10: LazyVecFrom1<Year10, T, Year10, Height>,
|
||||
pub halving: LazyVecFrom1<Halving, T, Halving, Height>,
|
||||
pub epoch: LazyVecFrom1<Epoch, T, Epoch, Height>,
|
||||
}
|
||||
|
||||
impl<T: VecValue + Formattable + Serialize + JsonSchema> ConstantVecs<T> {
|
||||
@@ -55,16 +55,22 @@ impl<T: VecValue + Formattable + Serialize + JsonSchema> ConstantVecs<T> {
|
||||
{
|
||||
macro_rules! period {
|
||||
($idx:ident) => {
|
||||
LazyVecFrom1::transformed::<F>(
|
||||
LazyVecFrom1::init(
|
||||
name,
|
||||
version,
|
||||
indexes.$idx.identity.read_only_boxed_clone(),
|
||||
indexes.$idx.first_height.read_only_boxed_clone(),
|
||||
|idx, _: Height| F::apply(idx),
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
Self {
|
||||
height: period!(height),
|
||||
height: LazyVecFrom1::init(
|
||||
name,
|
||||
version,
|
||||
indexes.height.minute10.read_only_boxed_clone(),
|
||||
|idx, _| F::apply(idx),
|
||||
),
|
||||
minute10: period!(minute10),
|
||||
minute30: period!(minute30),
|
||||
hour1: period!(hour1),
|
||||
|
||||
@@ -81,8 +81,8 @@ pub struct Resolutions<T>(
|
||||
LazyAggVec<Month6, Option<T>, Height, Height, T>,
|
||||
LazyAggVec<Year1, Option<T>, Height, Height, T>,
|
||||
LazyAggVec<Year10, Option<T>, Height, Height, T>,
|
||||
LazyAggVec<Halving, T, Height, Halving, T, CoarserIndex<Halving>>,
|
||||
LazyAggVec<Epoch, T, Height, Epoch, T, CoarserIndex<Epoch>>,
|
||||
LazyAggVec<Halving, T, Height, Height, T, CoarserIndex<Halving>>,
|
||||
LazyAggVec<Epoch, T, Height, Height, T, CoarserIndex<Epoch>>,
|
||||
>,
|
||||
)
|
||||
where
|
||||
@@ -142,8 +142,8 @@ where
|
||||
month6: res!(indexes.month6.first_height),
|
||||
year1: res!(indexes.year1.first_height),
|
||||
year10: res!(indexes.year10.first_height),
|
||||
halving: res!(indexes.halving.identity),
|
||||
epoch: res!(indexes.epoch.identity),
|
||||
halving: res!(indexes.halving.first_height),
|
||||
epoch: res!(indexes.epoch.first_height),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user