computer: snap

This commit is contained in:
nym21
2026-04-11 22:11:48 +02:00
parent 286256ebf0
commit 18d9c166d8
8 changed files with 57 additions and 152 deletions

View File

@@ -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,
)?;

View File

@@ -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,
)?;

View File

@@ -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)?),
})
}
}

View File

@@ -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)?,

View File

@@ -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);

View File

@@ -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)?),
})

View File

@@ -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),

View File

@@ -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),
})
}
}