diff --git a/crates/brk_computer/src/chain.rs b/crates/brk_computer/src/chain.rs index a0f04f4c6..14966695a 100644 --- a/crates/brk_computer/src/chain.rs +++ b/crates/brk_computer/src/chain.rs @@ -10,7 +10,7 @@ use brk_structs::{ YearIndex, }; use vecdb::{ - AnyCloneableIterableVec, AnyCollectableVec, AnyIterableVec, Database, EagerVec, Exit, + AnyCloneableIterableVec, AnyCollectableVec, AnyIterableVec, AnyVec, Database, EagerVec, Exit, LazyVecFrom1, LazyVecFrom2, LazyVecFrom3, PAGE_SIZE, StoredIndex, VecIterator, }; @@ -74,6 +74,7 @@ pub struct Vecs { /// Value == 0 when Coinbase pub txindex_to_input_value: LazyVecFrom3, + pub indexes_to_sent: ComputedValueVecsFromHeight, // pub indexes_to_input_value: ComputedVecsFromTxindex, pub indexes_to_opreturn_count: ComputedVecsFromHeight, pub txindex_to_output_value: @@ -605,6 +606,15 @@ impl Vecs { indexes, VecBuilderOptions::default().add_sum().add_cumulative(), )?, + indexes_to_sent: ComputedValueVecsFromHeight::forced_import( + &db, + "sent", + Source::Compute, + version + VERSION + Version::ZERO, + VecBuilderOptions::default().add_sum(), + compute_dollars, + indexes, + )?, indexes_to_fee: ComputedValueVecsFromTxindex::forced_import( &db, "fee", @@ -1398,6 +1408,20 @@ impl Vecs { exit, )?; + self.indexes_to_sent + .compute_all(indexes, price, starting_indexes, exit, |v| { + dbg!(v.len()); + v.compute_sum_from_indexes( + starting_indexes.height, + &indexer.vecs.height_to_first_txindex, + &indexes.height_to_txindex_count, + &self.txindex_to_input_value, + exit, + )?; + dbg!(v.len()); + Ok(()) + })?; + self.indexes_to_fee.compute_rest( indexer, indexes, @@ -2147,6 +2171,7 @@ impl Vecs { .iter_any_collectable(), ), ); + iter = Box::new(iter.chain(self.indexes_to_sent.iter_any_collectable())); iter = Box::new(iter.chain(self.indexes_to_hash_price_ths.iter_any_collectable())); iter = Box::new(iter.chain(self.indexes_to_hash_price_phs.iter_any_collectable())); iter = Box::new(iter.chain(self.indexes_to_hash_value_ths.iter_any_collectable())); diff --git a/websites/bitview/packages/lightweight-charts/wrapper.js b/websites/bitview/packages/lightweight-charts/wrapper.js index b8eee5282..ba8f4bd08 100644 --- a/websites/bitview/packages/lightweight-charts/wrapper.js +++ b/websites/bitview/packages/lightweight-charts/wrapper.js @@ -143,9 +143,10 @@ function createChartElement({ }), ); - // ichart.priceScale("right").applyOptions({ - // minimumWidth: 80, - // }); + // Takes a bit more space sometimes but it's better UX than having the scale being resized on option change + ichart.priceScale("right").applyOptions({ + minimumWidth: 80, + }); ichart.panes().at(0)?.setStretchFactor(1); diff --git a/websites/bitview/scripts/main.js b/websites/bitview/scripts/main.js index 7f5ee6ac9..9b868f252 100644 --- a/websites/bitview/scripts/main.js +++ b/websites/bitview/scripts/main.js @@ -745,6 +745,7 @@ function createUtils() { (id.includes("in_sats") || (id.endsWith("supply") && !(id.endsWith("circulating_supply") || id.endsWith("_own_supply"))) || + id === "sent" || id.endsWith("supply_half") || id.endsWith("supply_breakeven") || id.endsWith("supply_in_profit") || diff --git a/websites/bitview/scripts/options.js b/websites/bitview/scripts/options.js index 3d6d878d8..e34a848fa 100644 --- a/websites/bitview/scripts/options.js +++ b/websites/bitview/scripts/options.js @@ -3519,6 +3519,24 @@ function createPartialOptions({ env, colors, vecIdToIndexes, pools }) { }, ), }, + { + name: "Volume", + title: "Transaction Volume", + bottom: [ + createBaseSeries({ + key: "sent", + name: "Sent", + }), + createBaseSeries({ + key: "sent_in_btc", + name: "Sent", + }), + createBaseSeries({ + key: "sent_in_usd", + name: "Sent", + }), + ], + }, { name: "Size", title: "Transaction Size",