use brk_error::Result; use brk_traversable::Traversable; use brk_types::{BasisPoints16, Indexes, Version}; use vecdb::{Database, Exit, Rw, StorageMode}; use crate::{ indexes, internal::{PercentPerBlock, RatioU64Bp16}, outputs, }; use super::count::Vecs as CountVecs; #[derive(Traversable)] pub struct Vecs { pub taproot: PercentPerBlock, pub segwit: PercentPerBlock, } impl Vecs { pub(crate) fn forced_import( db: &Database, version: Version, indexes: &indexes::Vecs, ) -> Result { Ok(Self { taproot: PercentPerBlock::forced_import(db, "taproot_adoption", version, indexes)?, segwit: PercentPerBlock::forced_import(db, "segwit_adoption", version, indexes)?, }) } pub(crate) fn compute( &mut self, count: &CountVecs, outputs_count: &outputs::CountVecs, starting_indexes: &Indexes, exit: &Exit, ) -> Result<()> { self.taproot.compute_binary::<_, _, RatioU64Bp16>( starting_indexes.height, &count.p2tr.base.height, &outputs_count.total.full.sum, exit, )?; self.segwit.compute_binary::<_, _, RatioU64Bp16>( starting_indexes.height, &count.segwit.base.height, &outputs_count.total.full.sum, exit, )?; Ok(()) } }