From 81ab1886d1cfad600205ac9d20b2173ac9569f8d Mon Sep 17 00:00:00 2001 From: nym21 Date: Sat, 7 Mar 2026 22:52:51 +0100 Subject: [PATCH] global: snapshot --- crates/brk_client/src/lib.rs | 420 +++++++++-------- .../distribution/cohorts/utxo/percentiles.rs | 50 +- .../src/distribution/cohorts/utxo/vecs.rs | 5 +- .../src/distribution/metrics/cohort/all.rs | 24 +- .../src/distribution/metrics/cohort/basic.rs | 6 +- .../distribution/metrics/cohort/extended.rs | 24 +- .../metrics/cohort/extended_adjusted.rs | 13 +- .../distribution/metrics/cost_basis/base.rs | 88 ---- .../metrics/cost_basis/extended.rs | 102 ---- .../distribution/metrics/cost_basis/mod.rs | 122 +++-- .../metrics/cost_basis/with_extended.rs | 34 -- .../src/distribution/metrics/mod.rs | 39 +- .../src/distribution/state/cohort/base.rs | 22 +- .../src/distribution/state/cost_basis/data.rs | 48 +- .../src/distribution/state/cost_basis/mod.rs | 2 - .../state/cost_basis/percentiles.rs | 69 --- modules/brk-client/index.js | 434 +++++++++--------- packages/brk_client/brk_client/__init__.py | 209 +++++---- 18 files changed, 703 insertions(+), 1008 deletions(-) delete mode 100644 crates/brk_computer/src/distribution/metrics/cost_basis/base.rs delete mode 100644 crates/brk_computer/src/distribution/metrics/cost_basis/extended.rs delete mode 100644 crates/brk_computer/src/distribution/metrics/cost_basis/with_extended.rs delete mode 100644 crates/brk_computer/src/distribution/state/cost_basis/percentiles.rs diff --git a/crates/brk_client/src/lib.rs b/crates/brk_client/src/lib.rs index 2224928cb..3b633b20e 100644 --- a/crates/brk_client/src/lib.rs +++ b/crates/brk_client/src/lib.rs @@ -1931,32 +1931,6 @@ impl _10y2y3y4y5y6y8yPattern { } } -/// Pattern struct for repeated tree structure. -pub struct ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern { - pub activity: CoinblocksCoindaysSentPattern, - pub cost_basis: MaxMinPattern, - pub outputs: UtxoPattern, - pub realized: MvrvNegNetRealizedSentSoprValuePattern, - pub relative: SupplyPattern2, - pub supply: DeltaHalvedTotalPattern, - pub unrealized: InvestedInvestorNegNetSupplyUnrealizedPattern, -} - -impl ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - activity: CoinblocksCoindaysSentPattern::new(client.clone(), acc.clone()), - cost_basis: MaxMinPattern::new(client.clone(), _m(&acc, "cost_basis")), - outputs: UtxoPattern::new(client.clone(), _m(&acc, "utxo_count")), - realized: MvrvNegNetRealizedSentSoprValuePattern::new(client.clone(), acc.clone()), - relative: SupplyPattern2::new(client.clone(), _m(&acc, "supply")), - supply: DeltaHalvedTotalPattern::new(client.clone(), _m(&acc, "supply")), - unrealized: InvestedInvestorNegNetSupplyUnrealizedPattern::new(client.clone(), acc.clone()), - } - } -} - /// Pattern struct for repeated tree structure. pub struct ActivityAddrOutputsRealizedSupplyUnrealizedPattern { pub activity: SentPattern, @@ -1985,6 +1959,30 @@ impl ActivityAddrOutputsRealizedSupplyUnrealizedPattern { /// Pattern struct for repeated tree structure. pub struct ActivityOutputsRealizedRelativeSupplyUnrealizedPattern { + pub activity: CoinblocksCoindaysSentPattern, + pub outputs: UtxoPattern, + pub realized: MvrvNegNetRealizedSentSoprValuePattern, + pub relative: SupplyPattern2, + pub supply: DeltaHalvedTotalPattern, + pub unrealized: InvestedInvestorNegNetSupplyUnrealizedPattern, +} + +impl ActivityOutputsRealizedRelativeSupplyUnrealizedPattern { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { + Self { + activity: CoinblocksCoindaysSentPattern::new(client.clone(), acc.clone()), + outputs: UtxoPattern::new(client.clone(), _m(&acc, "utxo_count")), + realized: MvrvNegNetRealizedSentSoprValuePattern::new(client.clone(), acc.clone()), + relative: SupplyPattern2::new(client.clone(), _m(&acc, "supply")), + supply: DeltaHalvedTotalPattern::new(client.clone(), _m(&acc, "supply")), + unrealized: InvestedInvestorNegNetSupplyUnrealizedPattern::new(client.clone(), acc.clone()), + } + } +} + +/// Pattern struct for repeated tree structure. +pub struct ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 { pub activity: SentPattern, pub outputs: UtxoPattern, pub realized: MvrvNegNetRealizedSoprValuePattern, @@ -1993,7 +1991,7 @@ pub struct ActivityOutputsRealizedRelativeSupplyUnrealizedPattern { pub unrealized: NegNetSupplyUnrealizedPattern, } -impl ActivityOutputsRealizedRelativeSupplyUnrealizedPattern { +impl ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 { /// Create a new pattern node with accumulated metric name. pub fn new(client: Arc, acc: String) -> Self { Self { @@ -2602,17 +2600,17 @@ impl ChangeRatePattern2 { } /// Pattern struct for repeated tree structure. -pub struct MaxMinPattern { - pub max: CentsSatsUsdPattern, - pub min: CentsSatsUsdPattern, +pub struct HeightSumPattern { + pub height: MetricPattern18, + pub sum: _1m1w1y24hPattern, } -impl MaxMinPattern { +impl HeightSumPattern { /// Create a new pattern node with accumulated metric name. pub fn new(client: Arc, acc: String) -> Self { Self { - max: CentsSatsUsdPattern::new(client.clone(), _m(&acc, "max")), - min: CentsSatsUsdPattern::new(client.clone(), _m(&acc, "min")), + height: MetricPattern18::new(client.clone(), acc.clone()), + sum: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "sum")), } } } @@ -5744,215 +5742,215 @@ impl MetricsTree_Distribution_UtxoCohorts_Lth { /// Metrics tree node. pub struct MetricsTree_Distribution_UtxoCohorts_AgeRange { - pub up_to_1h: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _1h_to_1d: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _1d_to_1w: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _1w_to_1m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _1m_to_2m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2m_to_3m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _3m_to_4m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _4m_to_5m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _5m_to_6m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _6m_to_1y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _1y_to_2y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2y_to_3y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _3y_to_4y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _4y_to_5y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _5y_to_6y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _6y_to_7y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _7y_to_8y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _8y_to_10y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _10y_to_12y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _12y_to_15y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, - pub from_15y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern, + pub up_to_1h: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _1h_to_1d: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _1d_to_1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _1w_to_1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _1m_to_2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _2m_to_3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _3m_to_4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _4m_to_5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _5m_to_6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _6m_to_1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _1y_to_2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _2y_to_3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _3y_to_4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _4y_to_5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _5y_to_6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _6y_to_7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _7y_to_8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _8y_to_10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _10y_to_12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _12y_to_15y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub from_15y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, } impl MetricsTree_Distribution_UtxoCohorts_AgeRange { pub fn new(client: Arc, base_path: String) -> Self { Self { - up_to_1h: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_1h_old".to_string()), - _1h_to_1d: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_1h_to_1d_old".to_string()), - _1d_to_1w: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_1d_to_1w_old".to_string()), - _1w_to_1m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_1w_to_1m_old".to_string()), - _1m_to_2m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_1m_to_2m_old".to_string()), - _2m_to_3m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_2m_to_3m_old".to_string()), - _3m_to_4m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_3m_to_4m_old".to_string()), - _4m_to_5m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_4m_to_5m_old".to_string()), - _5m_to_6m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_5m_to_6m_old".to_string()), - _6m_to_1y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_6m_to_1y_old".to_string()), - _1y_to_2y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_1y_to_2y_old".to_string()), - _2y_to_3y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_2y_to_3y_old".to_string()), - _3y_to_4y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_3y_to_4y_old".to_string()), - _4y_to_5y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_4y_to_5y_old".to_string()), - _5y_to_6y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_5y_to_6y_old".to_string()), - _6y_to_7y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_6y_to_7y_old".to_string()), - _7y_to_8y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_7y_to_8y_old".to_string()), - _8y_to_10y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_8y_to_10y_old".to_string()), - _10y_to_12y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_10y_to_12y_old".to_string()), - _12y_to_15y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_12y_to_15y_old".to_string()), - from_15y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_15y_old".to_string()), + up_to_1h: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_1h_old".to_string()), + _1h_to_1d: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_1h_to_1d_old".to_string()), + _1d_to_1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_1d_to_1w_old".to_string()), + _1w_to_1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_1w_to_1m_old".to_string()), + _1m_to_2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_1m_to_2m_old".to_string()), + _2m_to_3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_2m_to_3m_old".to_string()), + _3m_to_4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_3m_to_4m_old".to_string()), + _4m_to_5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_4m_to_5m_old".to_string()), + _5m_to_6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_5m_to_6m_old".to_string()), + _6m_to_1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_6m_to_1y_old".to_string()), + _1y_to_2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_1y_to_2y_old".to_string()), + _2y_to_3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_2y_to_3y_old".to_string()), + _3y_to_4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_3y_to_4y_old".to_string()), + _4y_to_5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_4y_to_5y_old".to_string()), + _5y_to_6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_5y_to_6y_old".to_string()), + _6y_to_7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_6y_to_7y_old".to_string()), + _7y_to_8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_7y_to_8y_old".to_string()), + _8y_to_10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_8y_to_10y_old".to_string()), + _10y_to_12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_10y_to_12y_old".to_string()), + _12y_to_15y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_12y_to_15y_old".to_string()), + from_15y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_15y_old".to_string()), } } } /// Metrics tree node. pub struct MetricsTree_Distribution_UtxoCohorts_MaxAge { - pub _1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _15y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _15y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, } impl MetricsTree_Distribution_UtxoCohorts_MaxAge { pub fn new(client: Arc, base_path: String) -> Self { Self { - _1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_1w_old".to_string()), - _1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_1m_old".to_string()), - _2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_2m_old".to_string()), - _3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_3m_old".to_string()), - _4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_4m_old".to_string()), - _5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_5m_old".to_string()), - _6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_6m_old".to_string()), - _1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_1y_old".to_string()), - _2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_2y_old".to_string()), - _3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_3y_old".to_string()), - _4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_4y_old".to_string()), - _5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_5y_old".to_string()), - _6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_6y_old".to_string()), - _7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_7y_old".to_string()), - _8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_8y_old".to_string()), - _10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_10y_old".to_string()), - _12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_12y_old".to_string()), - _15y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_under_15y_old".to_string()), + _1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_1w_old".to_string()), + _1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_1m_old".to_string()), + _2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_2m_old".to_string()), + _3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_3m_old".to_string()), + _4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_4m_old".to_string()), + _5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_5m_old".to_string()), + _6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_6m_old".to_string()), + _1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_1y_old".to_string()), + _2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_2y_old".to_string()), + _3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_3y_old".to_string()), + _4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_4y_old".to_string()), + _5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_5y_old".to_string()), + _6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_6y_old".to_string()), + _7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_7y_old".to_string()), + _8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_8y_old".to_string()), + _10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_10y_old".to_string()), + _12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_12y_old".to_string()), + _15y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_under_15y_old".to_string()), } } } /// Metrics tree node. pub struct MetricsTree_Distribution_UtxoCohorts_MinAge { - pub _1d: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _1d: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, } impl MetricsTree_Distribution_UtxoCohorts_MinAge { pub fn new(client: Arc, base_path: String) -> Self { Self { - _1d: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_1d_old".to_string()), - _1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_1w_old".to_string()), - _1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_1m_old".to_string()), - _2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_2m_old".to_string()), - _3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_3m_old".to_string()), - _4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_4m_old".to_string()), - _5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_5m_old".to_string()), - _6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_6m_old".to_string()), - _1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_1y_old".to_string()), - _2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_2y_old".to_string()), - _3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_3y_old".to_string()), - _4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_4y_old".to_string()), - _5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_5y_old".to_string()), - _6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_6y_old".to_string()), - _7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_7y_old".to_string()), - _8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_8y_old".to_string()), - _10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_10y_old".to_string()), - _12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "utxos_over_12y_old".to_string()), + _1d: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_1d_old".to_string()), + _1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_1w_old".to_string()), + _1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_1m_old".to_string()), + _2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_2m_old".to_string()), + _3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_3m_old".to_string()), + _4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_4m_old".to_string()), + _5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_5m_old".to_string()), + _6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_6m_old".to_string()), + _1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_1y_old".to_string()), + _2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_2y_old".to_string()), + _3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_3y_old".to_string()), + _4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_4y_old".to_string()), + _5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_5y_old".to_string()), + _6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_6y_old".to_string()), + _7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_7y_old".to_string()), + _8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_8y_old".to_string()), + _10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_10y_old".to_string()), + _12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "utxos_over_12y_old".to_string()), } } } /// Metrics tree node. pub struct MetricsTree_Distribution_UtxoCohorts_Epoch { - pub _0: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _1: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _3: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _4: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _0: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _1: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _3: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _4: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, } impl MetricsTree_Distribution_UtxoCohorts_Epoch { pub fn new(client: Arc, base_path: String) -> Self { Self { - _0: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "epoch_0".to_string()), - _1: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "epoch_1".to_string()), - _2: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "epoch_2".to_string()), - _3: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "epoch_3".to_string()), - _4: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "epoch_4".to_string()), + _0: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "epoch_0".to_string()), + _1: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "epoch_1".to_string()), + _2: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "epoch_2".to_string()), + _3: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "epoch_3".to_string()), + _4: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "epoch_4".to_string()), } } } /// Metrics tree node. pub struct MetricsTree_Distribution_UtxoCohorts_Class { - pub _2009: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2010: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2011: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2012: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2013: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2014: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2015: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2016: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2017: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2018: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2019: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2020: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2021: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2022: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2023: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2024: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2025: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, - pub _2026: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern, + pub _2009: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2010: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2011: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2012: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2013: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2014: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2015: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2016: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2017: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2018: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2019: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2020: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2021: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2022: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2023: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2024: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2025: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, + pub _2026: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2, } impl MetricsTree_Distribution_UtxoCohorts_Class { pub fn new(client: Arc, base_path: String) -> Self { Self { - _2009: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2009".to_string()), - _2010: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2010".to_string()), - _2011: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2011".to_string()), - _2012: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2012".to_string()), - _2013: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2013".to_string()), - _2014: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2014".to_string()), - _2015: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2015".to_string()), - _2016: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2016".to_string()), - _2017: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2017".to_string()), - _2018: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2018".to_string()), - _2019: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2019".to_string()), - _2020: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2020".to_string()), - _2021: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2021".to_string()), - _2022: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2022".to_string()), - _2023: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2023".to_string()), - _2024: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2024".to_string()), - _2025: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2025".to_string()), - _2026: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern::new(client.clone(), "class_2026".to_string()), + _2009: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2009".to_string()), + _2010: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2010".to_string()), + _2011: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2011".to_string()), + _2012: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2012".to_string()), + _2013: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2013".to_string()), + _2014: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2014".to_string()), + _2015: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2015".to_string()), + _2016: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2016".to_string()), + _2017: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2017".to_string()), + _2018: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2018".to_string()), + _2019: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2019".to_string()), + _2020: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2020".to_string()), + _2021: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2021".to_string()), + _2022: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2022".to_string()), + _2023: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2023".to_string()), + _2024: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2024".to_string()), + _2025: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2025".to_string()), + _2026: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2::new(client.clone(), "class_2026".to_string()), } } } @@ -6268,29 +6266,29 @@ impl MetricsTree_Distribution_AddressActivity { /// Metrics tree node. pub struct MetricsTree_Distribution_NewAddrCount { - pub all: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern, - pub p2pk65: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern, - pub p2pk33: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern, - pub p2pkh: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern, - pub p2sh: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern, - pub p2wpkh: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern, - pub p2wsh: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern, - pub p2tr: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern, - pub p2a: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern, + pub all: HeightSumPattern, + pub p2pk65: HeightSumPattern, + pub p2pk33: HeightSumPattern, + pub p2pkh: HeightSumPattern, + pub p2sh: HeightSumPattern, + pub p2wpkh: HeightSumPattern, + pub p2wsh: HeightSumPattern, + pub p2tr: HeightSumPattern, + pub p2a: HeightSumPattern, } impl MetricsTree_Distribution_NewAddrCount { pub fn new(client: Arc, base_path: String) -> Self { Self { - all: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern::new(client.clone(), "new_addr_count".to_string()), - p2pk65: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern::new(client.clone(), "p2pk65_new_addr_count".to_string()), - p2pk33: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern::new(client.clone(), "p2pk33_new_addr_count".to_string()), - p2pkh: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern::new(client.clone(), "p2pkh_new_addr_count".to_string()), - p2sh: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern::new(client.clone(), "p2sh_new_addr_count".to_string()), - p2wpkh: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern::new(client.clone(), "p2wpkh_new_addr_count".to_string()), - p2wsh: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern::new(client.clone(), "p2wsh_new_addr_count".to_string()), - p2tr: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern::new(client.clone(), "p2tr_new_addr_count".to_string()), - p2a: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern::new(client.clone(), "p2a_new_addr_count".to_string()), + all: HeightSumPattern::new(client.clone(), "new_addr_count".to_string()), + p2pk65: HeightSumPattern::new(client.clone(), "p2pk65_new_addr_count".to_string()), + p2pk33: HeightSumPattern::new(client.clone(), "p2pk33_new_addr_count".to_string()), + p2pkh: HeightSumPattern::new(client.clone(), "p2pkh_new_addr_count".to_string()), + p2sh: HeightSumPattern::new(client.clone(), "p2sh_new_addr_count".to_string()), + p2wpkh: HeightSumPattern::new(client.clone(), "p2wpkh_new_addr_count".to_string()), + p2wsh: HeightSumPattern::new(client.clone(), "p2wsh_new_addr_count".to_string()), + p2tr: HeightSumPattern::new(client.clone(), "p2tr_new_addr_count".to_string()), + p2a: HeightSumPattern::new(client.clone(), "p2a_new_addr_count".to_string()), } } } diff --git a/crates/brk_computer/src/distribution/cohorts/utxo/percentiles.rs b/crates/brk_computer/src/distribution/cohorts/utxo/percentiles.rs index 63b31b7ba..d673c4941 100644 --- a/crates/brk_computer/src/distribution/cohorts/utxo/percentiles.rs +++ b/crates/brk_computer/src/distribution/cohorts/utxo/percentiles.rs @@ -6,7 +6,7 @@ use brk_types::{Cents, CentsCompact, CostBasisDistribution, Date, Height, Sats}; use crate::internal::{PERCENTILES, PERCENTILES_LEN}; -use crate::distribution::metrics::{CohortMetricsBase, CostBasisExtended}; +use crate::distribution::metrics::{CohortMetricsBase, CostBasis}; use super::groups::UTXOCohorts; @@ -16,11 +16,14 @@ const COST_BASIS_PRICE_DIGITS: i32 = 5; pub(super) struct CachedPercentiles { sat_result: [Cents; PERCENTILES_LEN], usd_result: [Cents; PERCENTILES_LEN], + min_price: Cents, + max_price: Cents, } impl CachedPercentiles { - fn push(&self, height: Height, ext: &mut CostBasisExtended) -> Result<()> { - ext.push_arrays(height, &self.sat_result, &self.usd_result) + fn push(&self, height: Height, cost_basis: &mut CostBasis) -> Result<()> { + cost_basis.truncate_push_minmax(height, self.min_price, self.max_price)?; + cost_basis.truncate_push_percentiles(height, &self.sat_result, &self.usd_result) } } @@ -114,13 +117,13 @@ impl UTXOCohorts { self.percentile_cache .all - .push(height, &mut self.all.metrics.cost_basis.extended)?; + .push(height, &mut self.all.metrics.cost_basis)?; self.percentile_cache .sth - .push(height, &mut self.sth.metrics.cost_basis.extended)?; + .push(height, &mut self.sth.metrics.cost_basis)?; self.percentile_cache .lth - .push(height, &mut self.lth.metrics.cost_basis.extended)?; + .push(height, &mut self.lth.metrics.cost_basis)?; // Serialize full distribution at day boundaries if let Some(date) = date_opt { @@ -136,13 +139,13 @@ impl UTXOCohorts { fn push_cached_percentiles(&mut self, height: Height) -> Result<()> { self.percentile_cache .all - .push(height, &mut self.all.metrics.cost_basis.extended)?; + .push(height, &mut self.all.metrics.cost_basis)?; self.percentile_cache .sth - .push(height, &mut self.sth.metrics.cost_basis.extended)?; + .push(height, &mut self.sth.metrics.cost_basis)?; self.percentile_cache .lth - .push(height, &mut self.lth.metrics.cost_basis.extended)?; + .push(height, &mut self.lth.metrics.cost_basis)?; Ok(()) } } @@ -269,6 +272,8 @@ struct PercTarget { usd_result: [Cents; PERCENTILES_LEN], price_sats: u64, price_usd: u128, + min_price: Cents, + max_price: Cents, merged: Vec<(CentsCompact, Sats)>, } @@ -295,6 +300,8 @@ impl PercTarget { usd_result: [Cents::ZERO; PERCENTILES_LEN], price_sats: 0, price_usd: 0, + min_price: Cents::ZERO, + max_price: Cents::ZERO, merged: Vec::with_capacity(merged_cap), } } @@ -303,6 +310,8 @@ impl PercTarget { CachedPercentiles { sat_result: self.sat_result, usd_result: self.usd_result, + min_price: self.min_price, + max_price: self.max_price, } } @@ -313,14 +322,21 @@ impl PercTarget { } fn finalize_price(&mut self, price: Cents, collect_merged: bool) { - if collect_merged && self.price_sats > 0 { - let rounded: CentsCompact = price.round_to_dollar(COST_BASIS_PRICE_DIGITS).into(); - if let Some((lp, ls)) = self.merged.last_mut() - && *lp == rounded - { - *ls += Sats::from(self.price_sats); - } else { - self.merged.push((rounded, Sats::from(self.price_sats))); + if self.price_sats > 0 { + if self.min_price == Cents::ZERO { + self.min_price = price; + } + self.max_price = price; + + if collect_merged { + let rounded: CentsCompact = price.round_to_dollar(COST_BASIS_PRICE_DIGITS).into(); + if let Some((lp, ls)) = self.merged.last_mut() + && *lp == rounded + { + *ls += Sats::from(self.price_sats); + } else { + self.merged.push((rounded, Sats::from(self.price_sats))); + } } } diff --git a/crates/brk_computer/src/distribution/cohorts/utxo/vecs.rs b/crates/brk_computer/src/distribution/cohorts/utxo/vecs.rs index 10168021e..96b119868 100644 --- a/crates/brk_computer/src/distribution/cohorts/utxo/vecs.rs +++ b/crates/brk_computer/src/distribution/cohorts/utxo/vecs.rs @@ -136,14 +136,13 @@ impl DynCohortVecs for UTXOCohortVecs { &mut self, height: Height, height_price: Cents, - is_day_boundary: bool, + _is_day_boundary: bool, ) -> Result<()> { if let Some(state) = self.state.as_mut() { - self.metrics.compute_then_truncate_push_unrealized_states( + self.metrics.compute_and_push_unrealized( height, height_price, state, - is_day_boundary, )?; } Ok(()) diff --git a/crates/brk_computer/src/distribution/metrics/cohort/all.rs b/crates/brk_computer/src/distribution/metrics/cohort/all.rs index 0b4382780..a0eb55ec9 100644 --- a/crates/brk_computer/src/distribution/metrics/cohort/all.rs +++ b/crates/brk_computer/src/distribution/metrics/cohort/all.rs @@ -13,7 +13,7 @@ use crate::{blocks, prices}; use crate::internal::{ComputedFromHeight, RollingDeltaExcept1m}; use crate::distribution::metrics::{ - ActivityFull, CohortMetricsBase, CostBasisWithExtended, ImportConfig, OutputsMetrics, + ActivityFull, CohortMetricsBase, CostBasis, ImportConfig, OutputsMetrics, RealizedAdjusted, RealizedFull, RelativeForAll, SupplyMetrics, UnrealizedFull, }; @@ -28,7 +28,7 @@ pub struct AllCohortMetrics { pub outputs: Box>, pub activity: Box>, pub realized: Box>, - pub cost_basis: Box>, + pub cost_basis: Box>, pub unrealized: Box>, pub adjusted: Box>, pub relative: Box>, @@ -43,10 +43,26 @@ impl CohortMetricsBase for AllCohortMetrics { type ActivityVecs = ActivityFull; type RealizedVecs = RealizedFull; type UnrealizedVecs = UnrealizedFull; - type CostBasisVecs = CostBasisWithExtended; impl_cohort_accessors!(); + fn validate_computed_versions(&mut self, base_version: Version) -> Result<()> { + self.supply.validate_computed_versions(base_version)?; + self.activity.validate_computed_versions(base_version)?; + self.cost_basis.validate_computed_versions(base_version)?; + Ok(()) + } + + fn min_stateful_height_len(&self) -> usize { + self.supply + .min_len() + .min(self.outputs.min_len()) + .min(self.activity.min_len()) + .min(self.realized.min_stateful_height_len()) + .min(self.unrealized.min_stateful_height_len()) + .min(self.cost_basis.min_stateful_height_len()) + } + fn collect_all_vecs_mut(&mut self) -> Vec<&mut dyn AnyStoredVec> { let mut vecs: Vec<&mut dyn AnyStoredVec> = Vec::new(); vecs.extend(self.supply.collect_vecs_mut()); @@ -82,7 +98,7 @@ impl AllCohortMetrics { outputs: Box::new(OutputsMetrics::forced_import(cfg)?), activity: Box::new(ActivityFull::forced_import(cfg)?), realized: Box::new(realized), - cost_basis: Box::new(CostBasisWithExtended::forced_import(cfg)?), + cost_basis: Box::new(CostBasis::forced_import(cfg)?), unrealized: Box::new(unrealized), adjusted: Box::new(adjusted), relative: Box::new(relative), diff --git a/crates/brk_computer/src/distribution/metrics/cohort/basic.rs b/crates/brk_computer/src/distribution/metrics/cohort/basic.rs index 1767b1663..c9c6fe67d 100644 --- a/crates/brk_computer/src/distribution/metrics/cohort/basic.rs +++ b/crates/brk_computer/src/distribution/metrics/cohort/basic.rs @@ -7,7 +7,7 @@ use vecdb::{AnyStoredVec, Exit, ReadableVec, Rw, StorageMode}; use crate::{blocks, prices}; use crate::distribution::metrics::{ - ActivityBase, CohortMetricsBase, CostBasisBase, ImportConfig, OutputsMetrics, RealizedBase, + ActivityBase, CohortMetricsBase, ImportConfig, OutputsMetrics, RealizedBase, RelativeToAll, SupplyMetrics, UnrealizedBase, }; @@ -21,7 +21,6 @@ pub struct BasicCohortMetrics { pub outputs: Box>, pub activity: Box>, pub realized: Box>, - pub cost_basis: Box>, pub unrealized: Box>, pub relative: Box>, } @@ -30,7 +29,6 @@ impl CohortMetricsBase for BasicCohortMetrics { type ActivityVecs = ActivityBase; type RealizedVecs = RealizedBase; type UnrealizedVecs = UnrealizedBase; - type CostBasisVecs = CostBasisBase; impl_cohort_accessors!(); @@ -40,7 +38,6 @@ impl CohortMetricsBase for BasicCohortMetrics { vecs.extend(self.outputs.collect_vecs_mut()); vecs.extend(self.activity.collect_vecs_mut()); vecs.extend(self.realized.collect_vecs_mut()); - vecs.extend(self.cost_basis.collect_vecs_mut()); vecs.extend(self.unrealized.collect_vecs_mut()); vecs } @@ -60,7 +57,6 @@ impl BasicCohortMetrics { outputs: Box::new(OutputsMetrics::forced_import(cfg)?), activity: Box::new(ActivityBase::forced_import(cfg)?), realized: Box::new(realized), - cost_basis: Box::new(CostBasisBase::forced_import(cfg)?), unrealized: Box::new(unrealized), relative: Box::new(relative), }) diff --git a/crates/brk_computer/src/distribution/metrics/cohort/extended.rs b/crates/brk_computer/src/distribution/metrics/cohort/extended.rs index 2768ac723..507371e70 100644 --- a/crates/brk_computer/src/distribution/metrics/cohort/extended.rs +++ b/crates/brk_computer/src/distribution/metrics/cohort/extended.rs @@ -12,7 +12,7 @@ use crate::{blocks, prices}; use crate::internal::{ComputedFromHeight, RollingDeltaExcept1m}; use crate::distribution::metrics::{ - ActivityFull, CohortMetricsBase, CostBasisWithExtended, ImportConfig, OutputsMetrics, + ActivityFull, CohortMetricsBase, CostBasis, ImportConfig, OutputsMetrics, RealizedFull, RelativeWithExtended, SupplyMetrics, UnrealizedFull, }; @@ -26,7 +26,7 @@ pub struct ExtendedCohortMetrics { pub outputs: Box>, pub activity: Box>, pub realized: Box>, - pub cost_basis: Box>, + pub cost_basis: Box>, pub unrealized: Box>, pub relative: Box>, pub dormancy: ComputedFromHeight, @@ -40,10 +40,26 @@ impl CohortMetricsBase for ExtendedCohortMetrics { type ActivityVecs = ActivityFull; type RealizedVecs = RealizedFull; type UnrealizedVecs = UnrealizedFull; - type CostBasisVecs = CostBasisWithExtended; impl_cohort_accessors!(); + fn validate_computed_versions(&mut self, base_version: Version) -> Result<()> { + self.supply.validate_computed_versions(base_version)?; + self.activity.validate_computed_versions(base_version)?; + self.cost_basis.validate_computed_versions(base_version)?; + Ok(()) + } + + fn min_stateful_height_len(&self) -> usize { + self.supply + .min_len() + .min(self.outputs.min_len()) + .min(self.activity.min_len()) + .min(self.realized.min_stateful_height_len()) + .min(self.unrealized.min_stateful_height_len()) + .min(self.cost_basis.min_stateful_height_len()) + } + fn collect_all_vecs_mut(&mut self) -> Vec<&mut dyn AnyStoredVec> { let mut vecs: Vec<&mut dyn AnyStoredVec> = Vec::new(); vecs.extend(self.supply.collect_vecs_mut()); @@ -72,7 +88,7 @@ impl ExtendedCohortMetrics { outputs: Box::new(OutputsMetrics::forced_import(cfg)?), activity: Box::new(ActivityFull::forced_import(cfg)?), realized: Box::new(realized), - cost_basis: Box::new(CostBasisWithExtended::forced_import(cfg)?), + cost_basis: Box::new(CostBasis::forced_import(cfg)?), unrealized: Box::new(unrealized), relative: Box::new(relative), dormancy: cfg.import("dormancy", Version::ONE)?, diff --git a/crates/brk_computer/src/distribution/metrics/cohort/extended_adjusted.rs b/crates/brk_computer/src/distribution/metrics/cohort/extended_adjusted.rs index f701a70ab..9d864d34f 100644 --- a/crates/brk_computer/src/distribution/metrics/cohort/extended_adjusted.rs +++ b/crates/brk_computer/src/distribution/metrics/cohort/extended_adjusted.rs @@ -1,13 +1,13 @@ use brk_error::Result; use brk_traversable::Traversable; -use brk_types::{Cents, Dollars, Height, Indexes, Sats}; +use brk_types::{Cents, Dollars, Height, Indexes, Sats, Version}; use derive_more::{Deref, DerefMut}; use vecdb::{AnyStoredVec, Exit, ReadableVec, Rw, StorageMode}; use crate::{blocks, prices}; use crate::distribution::metrics::{ - ActivityFull, CohortMetricsBase, CostBasisWithExtended, ImportConfig, RealizedAdjusted, + ActivityFull, CohortMetricsBase, ImportConfig, RealizedAdjusted, RealizedFull, UnrealizedFull, }; @@ -30,10 +30,17 @@ impl CohortMetricsBase for ExtendedAdjustedCohortMetrics { type ActivityVecs = ActivityFull; type RealizedVecs = RealizedFull; type UnrealizedVecs = UnrealizedFull; - type CostBasisVecs = CostBasisWithExtended; impl_cohort_accessors!(); + fn validate_computed_versions(&mut self, base_version: Version) -> Result<()> { + self.inner.validate_computed_versions(base_version) + } + + fn min_stateful_height_len(&self) -> usize { + self.inner.min_stateful_height_len() + } + fn collect_all_vecs_mut(&mut self) -> Vec<&mut dyn AnyStoredVec> { self.inner.collect_all_vecs_mut() } diff --git a/crates/brk_computer/src/distribution/metrics/cost_basis/base.rs b/crates/brk_computer/src/distribution/metrics/cost_basis/base.rs deleted file mode 100644 index adaace583..000000000 --- a/crates/brk_computer/src/distribution/metrics/cost_basis/base.rs +++ /dev/null @@ -1,88 +0,0 @@ -use brk_error::Result; -use brk_traversable::Traversable; -use brk_types::{Cents, Height, Indexes, Version}; -use vecdb::{AnyStoredVec, AnyVec, Exit, Rw, StorageMode, WritableVec}; - -use crate::{ - distribution::state::{CohortState, RealizedState}, - internal::{ComputedFromHeight, Price}, -}; - -use crate::distribution::metrics::ImportConfig; - -/// Base cost basis metrics (always computed). -#[derive(Traversable)] -pub struct CostBasisBase { - /// Minimum cost basis for any UTXO at this height - pub min: Price>, - - /// Maximum cost basis for any UTXO at this height - pub max: Price>, -} - -impl CostBasisBase { - pub(crate) fn forced_import(cfg: &ImportConfig) -> Result { - Ok(Self { - min: cfg.import("cost_basis_min", Version::ZERO)?, - max: cfg.import("cost_basis_max", Version::ZERO)?, - }) - } - - pub(crate) fn min_stateful_height_len(&self) -> usize { - self.min.cents.height.len().min(self.max.cents.height.len()) - } - - pub(crate) fn truncate_push_minmax( - &mut self, - height: Height, - state: &CohortState, - ) -> Result<()> { - self.min.cents.height.truncate_push( - height, - state - .cost_basis_data_first_key_value() - .map(|(cents, _)| cents) - .unwrap_or(Cents::ZERO), - )?; - self.max.cents.height.truncate_push( - height, - state - .cost_basis_data_last_key_value() - .map(|(cents, _)| cents) - .unwrap_or(Cents::ZERO), - )?; - Ok(()) - } - - pub(crate) fn collect_vecs_mut(&mut self) -> Vec<&mut dyn AnyStoredVec> { - vec![ - &mut self.min.cents.height as &mut dyn AnyStoredVec, - &mut self.max.cents.height, - ] - } - - pub(crate) fn compute_from_stateful( - &mut self, - starting_indexes: &Indexes, - others: &[&Self], - exit: &Exit, - ) -> Result<()> { - self.min.cents.height.compute_min_of_others( - starting_indexes.height, - &others - .iter() - .map(|v| &v.min.cents.height) - .collect::>(), - exit, - )?; - self.max.cents.height.compute_max_of_others( - starting_indexes.height, - &others - .iter() - .map(|v| &v.max.cents.height) - .collect::>(), - exit, - )?; - Ok(()) - } -} diff --git a/crates/brk_computer/src/distribution/metrics/cost_basis/extended.rs b/crates/brk_computer/src/distribution/metrics/cost_basis/extended.rs deleted file mode 100644 index 15b148774..000000000 --- a/crates/brk_computer/src/distribution/metrics/cost_basis/extended.rs +++ /dev/null @@ -1,102 +0,0 @@ -use brk_error::Result; -use brk_traversable::Traversable; -use brk_types::{Cents, Height, Version}; -use vecdb::{AnyStoredVec, Rw, StorageMode}; - -use crate::{ - distribution::state::{CohortState, RealizedState}, - internal::{PERCENTILES_LEN, PercentilesVecs}, -}; - -use crate::distribution::metrics::ImportConfig; - -/// Extended cost basis metrics (only for extended cohorts). -#[derive(Traversable)] -pub struct CostBasisExtended { - /// Cost basis percentiles (sat-weighted) - pub percentiles: PercentilesVecs, - - /// Invested capital percentiles (USD-weighted) - pub invested_capital: PercentilesVecs, -} - -impl CostBasisExtended { - pub(crate) fn forced_import(cfg: &ImportConfig) -> Result { - Ok(Self { - percentiles: PercentilesVecs::forced_import( - cfg.db, - &cfg.name("cost_basis"), - cfg.version, - cfg.indexes, - )?, - invested_capital: PercentilesVecs::forced_import( - cfg.db, - &cfg.name("invested_capital"), - cfg.version, - cfg.indexes, - )?, - }) - } - - pub(crate) fn truncate_push_percentiles( - &mut self, - height: Height, - state: &mut CohortState, - is_day_boundary: bool, - ) -> Result<()> { - let computed = if is_day_boundary { - state.compute_percentiles() - } else { - state.cached_percentiles() - }; - - let sat_prices = computed - .as_ref() - .map(|p| p.sat_weighted) - .unwrap_or([Cents::ZERO; PERCENTILES_LEN]); - let usd_prices = computed - .as_ref() - .map(|p| p.usd_weighted) - .unwrap_or([Cents::ZERO; PERCENTILES_LEN]); - - self.push_arrays(height, &sat_prices, &usd_prices) - } - - /// Push pre-computed percentile arrays. - /// Shared by both individual cohort and aggregate (K-way merge) paths. - pub(crate) fn push_arrays( - &mut self, - height: Height, - sat_prices: &[Cents; PERCENTILES_LEN], - usd_prices: &[Cents; PERCENTILES_LEN], - ) -> Result<()> { - self.percentiles.truncate_push(height, sat_prices)?; - self.invested_capital.truncate_push(height, usd_prices)?; - Ok(()) - } - - pub(crate) fn collect_vecs_mut(&mut self) -> Vec<&mut dyn AnyStoredVec> { - let mut vecs: Vec<&mut dyn AnyStoredVec> = Vec::new(); - vecs.extend( - self.percentiles - .vecs - .iter_mut() - .map(|v| &mut v.cents.height as &mut dyn AnyStoredVec), - ); - vecs.extend( - self.invested_capital - .vecs - .iter_mut() - .map(|v| &mut v.cents.height as &mut dyn AnyStoredVec), - ); - vecs - } - - pub(crate) fn validate_computed_versions(&mut self, base_version: Version) -> Result<()> { - self.percentiles - .validate_computed_version_or_reset(base_version)?; - self.invested_capital - .validate_computed_version_or_reset(base_version)?; - Ok(()) - } -} diff --git a/crates/brk_computer/src/distribution/metrics/cost_basis/mod.rs b/crates/brk_computer/src/distribution/metrics/cost_basis/mod.rs index bf8278078..df85318a3 100644 --- a/crates/brk_computer/src/distribution/metrics/cost_basis/mod.rs +++ b/crates/brk_computer/src/distribution/metrics/cost_basis/mod.rs @@ -1,51 +1,93 @@ -mod base; -mod extended; -mod with_extended; - -pub use base::CostBasisBase; -pub use extended::CostBasisExtended; -pub use with_extended::CostBasisWithExtended; - use brk_error::Result; -use brk_types::{Height, Version}; +use brk_traversable::Traversable; +use brk_types::{Cents, Height, Version}; +use vecdb::{AnyStoredVec, AnyVec, Rw, StorageMode, WritableVec}; -use crate::distribution::state::{CohortState, RealizedState}; +use crate::internal::{ComputedFromHeight, PercentilesVecs, Price, PERCENTILES_LEN}; -/// Polymorphic dispatch for cost basis metric types. -/// -/// `CostBasisBase` has no version validation or percentiles (no-op defaults). -/// `CostBasisWithExtended` validates versions and pushes percentiles. -pub trait CostBasisLike: Send + Sync { - fn as_base(&self) -> &CostBasisBase; - fn as_base_mut(&mut self) -> &mut CostBasisBase; - fn validate_computed_versions(&mut self, _base_version: Version) -> Result<()> { Ok(()) } - fn truncate_push_percentiles( - &mut self, - _height: Height, - _state: &mut CohortState, - _is_day_boundary: bool, - ) -> Result<()> { - Ok(()) - } +use super::ImportConfig; + +/// Cost basis metrics: min/max + percentiles. +/// Used by all/sth/lth cohorts only. +#[derive(Traversable)] +pub struct CostBasis { + pub min: Price>, + pub max: Price>, + pub percentiles: PercentilesVecs, + pub invested_capital: PercentilesVecs, } -impl CostBasisLike for CostBasisBase { - fn as_base(&self) -> &CostBasisBase { self } - fn as_base_mut(&mut self) -> &mut CostBasisBase { self } -} - -impl CostBasisLike for CostBasisWithExtended { - fn as_base(&self) -> &CostBasisBase { &self.base } - fn as_base_mut(&mut self) -> &mut CostBasisBase { &mut self.base } - fn validate_computed_versions(&mut self, base_version: Version) -> Result<()> { - self.extended.validate_computed_versions(base_version) +impl CostBasis { + pub(crate) fn forced_import(cfg: &ImportConfig) -> Result { + Ok(Self { + min: cfg.import("cost_basis_min", Version::ZERO)?, + max: cfg.import("cost_basis_max", Version::ZERO)?, + percentiles: PercentilesVecs::forced_import( + cfg.db, + &cfg.name("cost_basis"), + cfg.version, + cfg.indexes, + )?, + invested_capital: PercentilesVecs::forced_import( + cfg.db, + &cfg.name("invested_capital"), + cfg.version, + cfg.indexes, + )?, + }) } - fn truncate_push_percentiles( + + pub(crate) fn min_stateful_height_len(&self) -> usize { + self.min.cents.height.len().min(self.max.cents.height.len()) + } + + pub(crate) fn truncate_push_minmax( &mut self, height: Height, - state: &mut CohortState, - is_day_boundary: bool, + min_price: Cents, + max_price: Cents, ) -> Result<()> { - self.extended.truncate_push_percentiles(height, state, is_day_boundary) + self.min.cents.height.truncate_push(height, min_price)?; + self.max.cents.height.truncate_push(height, max_price)?; + Ok(()) + } + + pub(crate) fn truncate_push_percentiles( + &mut self, + height: Height, + sat_prices: &[Cents; PERCENTILES_LEN], + usd_prices: &[Cents; PERCENTILES_LEN], + ) -> Result<()> { + self.percentiles.truncate_push(height, sat_prices)?; + self.invested_capital.truncate_push(height, usd_prices)?; + Ok(()) + } + + pub(crate) fn validate_computed_versions(&mut self, base_version: Version) -> Result<()> { + self.percentiles + .validate_computed_version_or_reset(base_version)?; + self.invested_capital + .validate_computed_version_or_reset(base_version)?; + Ok(()) + } + + pub(crate) fn collect_vecs_mut(&mut self) -> Vec<&mut dyn AnyStoredVec> { + let mut vecs: Vec<&mut dyn AnyStoredVec> = vec![ + &mut self.min.cents.height, + &mut self.max.cents.height, + ]; + vecs.extend( + self.percentiles + .vecs + .iter_mut() + .map(|v| &mut v.cents.height as &mut dyn AnyStoredVec), + ); + vecs.extend( + self.invested_capital + .vecs + .iter_mut() + .map(|v| &mut v.cents.height as &mut dyn AnyStoredVec), + ); + vecs } } diff --git a/crates/brk_computer/src/distribution/metrics/cost_basis/with_extended.rs b/crates/brk_computer/src/distribution/metrics/cost_basis/with_extended.rs deleted file mode 100644 index f8f6b3e4b..000000000 --- a/crates/brk_computer/src/distribution/metrics/cost_basis/with_extended.rs +++ /dev/null @@ -1,34 +0,0 @@ -use brk_error::Result; -use brk_traversable::Traversable; -use derive_more::{Deref, DerefMut}; -use vecdb::{AnyStoredVec, Rw, StorageMode}; - -use crate::distribution::metrics::ImportConfig; - -use super::{CostBasisBase, CostBasisExtended}; - -/// Cost basis metrics with guaranteed extended (no Option). -#[derive(Deref, DerefMut, Traversable)] -pub struct CostBasisWithExtended { - #[deref] - #[deref_mut] - #[traversable(flatten)] - pub base: CostBasisBase, - #[traversable(flatten)] - pub extended: CostBasisExtended, -} - -impl CostBasisWithExtended { - pub(crate) fn forced_import(cfg: &ImportConfig) -> Result { - Ok(Self { - base: CostBasisBase::forced_import(cfg)?, - extended: CostBasisExtended::forced_import(cfg)?, - }) - } - - pub(crate) fn collect_vecs_mut(&mut self) -> Vec<&mut dyn AnyStoredVec> { - let mut vecs = self.base.collect_vecs_mut(); - vecs.extend(self.extended.collect_vecs_mut()); - vecs - } -} diff --git a/crates/brk_computer/src/distribution/metrics/mod.rs b/crates/brk_computer/src/distribution/metrics/mod.rs index 17d466095..063c4ce3e 100644 --- a/crates/brk_computer/src/distribution/metrics/mod.rs +++ b/crates/brk_computer/src/distribution/metrics/mod.rs @@ -14,7 +14,7 @@ mod activity; /// Accessor methods for `CohortMetricsBase` implementations. /// /// All cohort metric types share the same field names (`filter`, `supply`, `outputs`, -/// `activity`, `realized`, `unrealized`, `cost_basis`). For wrapper types like +/// `activity`, `realized`, `unrealized`). For wrapper types like /// `ExtendedAdjustedCohortMetrics`, Rust's auto-deref resolves these through `Deref`. macro_rules! impl_cohort_accessors { () => { @@ -29,8 +29,6 @@ macro_rules! impl_cohort_accessors { fn realized_mut(&mut self) -> &mut Self::RealizedVecs { &mut self.realized } fn unrealized(&self) -> &Self::UnrealizedVecs { &self.unrealized } fn unrealized_mut(&mut self) -> &mut Self::UnrealizedVecs { &mut self.unrealized } - fn cost_basis(&self) -> &Self::CostBasisVecs { &self.cost_basis } - fn cost_basis_mut(&mut self) -> &mut Self::CostBasisVecs { &mut self.cost_basis } }; } @@ -49,7 +47,7 @@ pub use cohort::{ ExtendedCohortMetrics, MinimalCohortMetrics, }; pub use config::ImportConfig; -pub use cost_basis::{CostBasisBase, CostBasisExtended, CostBasisLike, CostBasisWithExtended}; +pub use cost_basis::CostBasis; pub use outputs::OutputsMetrics; pub use realized::{ RealizedAdjusted, RealizedBase, RealizedCore, RealizedFull, RealizedLike, RealizedMinimal, @@ -94,7 +92,6 @@ pub trait CohortMetricsBase: CohortMetricsState + Send type ActivityVecs: ActivityLike; type RealizedVecs: RealizedLike; type UnrealizedVecs: UnrealizedLike; - type CostBasisVecs: CostBasisLike; fn filter(&self) -> &Filter; fn supply(&self) -> &SupplyMetrics; @@ -107,8 +104,6 @@ pub trait CohortMetricsBase: CohortMetricsState + Send fn realized_mut(&mut self) -> &mut Self::RealizedVecs; fn unrealized(&self) -> &Self::UnrealizedVecs; fn unrealized_mut(&mut self) -> &mut Self::UnrealizedVecs; - fn cost_basis(&self) -> &Self::CostBasisVecs; - fn cost_basis_mut(&mut self) -> &mut Self::CostBasisVecs; /// Convenience: access activity as `&ActivityBase` (via `ActivityLike::as_base`). fn activity_base(&self) -> &ActivityBase { self.activity().as_base() } @@ -122,46 +117,26 @@ pub trait CohortMetricsBase: CohortMetricsState + Send fn unrealized_base(&self) -> &UnrealizedBase { self.unrealized().as_base() } fn unrealized_base_mut(&mut self) -> &mut UnrealizedBase { self.unrealized_mut().as_base_mut() } - /// Convenience: access cost basis as `&CostBasisBase` (via `CostBasisLike::as_base`). - fn cost_basis_base(&self) -> &CostBasisBase { self.cost_basis().as_base() } - fn cost_basis_base_mut(&mut self) -> &mut CostBasisBase { self.cost_basis_mut().as_base_mut() } - fn validate_computed_versions(&mut self, base_version: Version) -> Result<()> { self.supply_mut().validate_computed_versions(base_version)?; self.activity_mut().validate_computed_versions(base_version)?; - self.cost_basis_mut().validate_computed_versions(base_version)?; Ok(()) } - /// Apply pending, push min/max cost basis, compute and push unrealized state. - fn compute_and_push_unrealized_base( + /// Apply pending state, compute and push unrealized state. + fn compute_and_push_unrealized( &mut self, height: Height, height_price: Cents, state: &mut CohortState, ) -> Result<()> { state.apply_pending(); - self.cost_basis_base_mut() - .truncate_push_minmax(height, state)?; let unrealized_state = state.compute_unrealized_state(height_price); self.unrealized_mut() .truncate_push(height, &unrealized_state)?; Ok(()) } - /// Compute and push unrealized states + cost basis percentiles (no-op for base types). - fn compute_then_truncate_push_unrealized_states( - &mut self, - height: Height, - height_price: Cents, - state: &mut CohortState, - is_day_boundary: bool, - ) -> Result<()> { - self.compute_and_push_unrealized_base(height, height_price, state)?; - self.cost_basis_mut().truncate_push_percentiles(height, state, is_day_boundary)?; - Ok(()) - } - fn collect_all_vecs_mut(&mut self) -> Vec<&mut dyn AnyStoredVec>; fn min_stateful_height_len(&self) -> usize { @@ -171,7 +146,6 @@ pub trait CohortMetricsBase: CohortMetricsState + Send .min(self.activity().min_len()) .min(self.realized().min_stateful_height_len()) .min(self.unrealized().min_stateful_height_len()) - .min(self.cost_basis_base().min_stateful_height_len()) } fn truncate_push(&mut self, height: Height, state: &CohortState) -> Result<()> { @@ -258,11 +232,6 @@ pub trait CohortMetricsBase: CohortMetricsState + Send &others.iter().map(|v| v.unrealized_base()).collect::>(), exit, )?; - self.cost_basis_base_mut().compute_from_stateful( - starting_indexes, - &others.iter().map(|v| v.cost_basis_base()).collect::>(), - exit, - )?; Ok(()) } } diff --git a/crates/brk_computer/src/distribution/state/cohort/base.rs b/crates/brk_computer/src/distribution/state/cohort/base.rs index 8fc6d0e7c..8c864fd73 100644 --- a/crates/brk_computer/src/distribution/state/cohort/base.rs +++ b/crates/brk_computer/src/distribution/state/cohort/base.rs @@ -3,7 +3,7 @@ use std::{collections::BTreeMap, path::Path}; use brk_error::Result; use brk_types::{Age, Cents, CentsCompact, CentsSats, CentsSquaredSats, CostBasisSnapshot, Height, Sats, SupplyState}; -use super::super::cost_basis::{CostBasisData, Percentiles, RealizedOps, UnrealizedState}; +use super::super::cost_basis::{CostBasisData, RealizedOps, UnrealizedState}; pub struct SendPrecomputed { pub sats: Sats, @@ -97,18 +97,6 @@ impl CohortState { self.cost_basis_data.apply_pending(); } - pub(crate) fn cost_basis_data_first_key_value(&self) -> Option<(Cents, &Sats)> { - self.cost_basis_data - .first_key_value() - .map(|(k, v)| (k.into(), v)) - } - - pub(crate) fn cost_basis_data_last_key_value(&self) -> Option<(Cents, &Sats)> { - self.cost_basis_data - .last_key_value() - .map(|(k, v)| (k.into(), v)) - } - pub(crate) fn reset_single_iteration_values(&mut self) { self.sent = Sats::ZERO; self.satdays_destroyed = Sats::ZERO; @@ -288,14 +276,6 @@ impl CohortState { } } - pub(crate) fn compute_percentiles(&mut self) -> Option { - self.cost_basis_data.compute_percentiles() - } - - pub(crate) fn cached_percentiles(&self) -> Option { - self.cost_basis_data.cached_percentiles() - } - pub(crate) fn compute_unrealized_state(&mut self, height_price: Cents) -> UnrealizedState { self.cost_basis_data.compute_unrealized_state(height_price) } diff --git a/crates/brk_computer/src/distribution/state/cost_basis/data.rs b/crates/brk_computer/src/distribution/state/cost_basis/data.rs index 4aa15608c..c8862cc08 100644 --- a/crates/brk_computer/src/distribution/state/cost_basis/data.rs +++ b/crates/brk_computer/src/distribution/state/cost_basis/data.rs @@ -11,7 +11,7 @@ use brk_types::{ use rustc_hash::FxHashMap; use vecdb::{Bytes, unlikely}; -use super::{CachedUnrealizedState, Percentiles, UnrealizedState}; +use super::{CachedUnrealizedState, UnrealizedState}; /// Type alias for the price-to-sats map used in cost basis data. pub(super) type CostBasisMap = BTreeMap; @@ -31,8 +31,6 @@ pub struct CostBasisData { pending: FxHashMap, pending_raw: PendingRaw, cache: Option, - percentiles_dirty: bool, - cached_percentiles: Option, rounding_digits: Option, /// Monotonically increasing counter, bumped on each apply_pending with actual changes. generation: u64, @@ -48,8 +46,6 @@ impl CostBasisData { pending: FxHashMap::default(), pending_raw: PendingRaw::default(), cache: None, - percentiles_dirty: true, - cached_percentiles: None, rounding_digits: None, generation: 0, } @@ -77,8 +73,6 @@ impl CostBasisData { self.pending.clear(); self.pending_raw = PendingRaw::default(); self.cache = None; - self.percentiles_dirty = true; - self.cached_percentiles = None; Ok(height) } @@ -105,28 +99,6 @@ impl CostBasisData { self.pending.is_empty() && self.state.as_ref().unwrap().base.map.is_empty() } - pub(crate) fn first_key_value(&self) -> Option<(CentsCompact, &Sats)> { - self.assert_pending_empty(); - self.state - .as_ref() - .unwrap() - .base - .map - .first_key_value() - .map(|(&k, v)| (k, v)) - } - - pub(crate) fn last_key_value(&self) -> Option<(CentsCompact, &Sats)> { - self.assert_pending_empty(); - self.state - .as_ref() - .unwrap() - .base - .map - .last_key_value() - .map(|(&k, v)| (k, v)) - } - /// Get the exact cap_raw value (not recomputed from map). pub(crate) fn cap_raw(&self) -> CentsSats { self.assert_pending_empty(); @@ -184,7 +156,6 @@ impl CostBasisData { return; } self.generation = self.generation.wrapping_add(1); - self.percentiles_dirty = true; let map = &mut self.state.as_mut().unwrap().base.map; for (cents, (inc, dec)) in self.pending.drain() { match map.entry(cents) { @@ -273,23 +244,6 @@ impl CostBasisData { self.pending.clear(); self.pending_raw = PendingRaw::default(); self.cache = None; - self.percentiles_dirty = true; - self.cached_percentiles = None; - } - - pub(crate) fn cached_percentiles(&self) -> Option { - self.cached_percentiles - } - - pub(crate) fn compute_percentiles(&mut self) -> Option { - self.assert_pending_empty(); - if !self.percentiles_dirty { - return self.cached_percentiles; - } - self.cached_percentiles = - Percentiles::compute_from_map(&self.state.as_ref().unwrap().base.map); - self.percentiles_dirty = false; - self.cached_percentiles } pub(crate) fn compute_unrealized_state(&mut self, height_price: Cents) -> UnrealizedState { diff --git a/crates/brk_computer/src/distribution/state/cost_basis/mod.rs b/crates/brk_computer/src/distribution/state/cost_basis/mod.rs index a1fdaa93d..51a02a6c4 100644 --- a/crates/brk_computer/src/distribution/state/cost_basis/mod.rs +++ b/crates/brk_computer/src/distribution/state/cost_basis/mod.rs @@ -1,10 +1,8 @@ mod data; -mod percentiles; mod realized; mod unrealized; pub use data::*; -pub use percentiles::*; pub use realized::*; pub use unrealized::UnrealizedState; diff --git a/crates/brk_computer/src/distribution/state/cost_basis/percentiles.rs b/crates/brk_computer/src/distribution/state/cost_basis/percentiles.rs deleted file mode 100644 index 73b9ed8f0..000000000 --- a/crates/brk_computer/src/distribution/state/cost_basis/percentiles.rs +++ /dev/null @@ -1,69 +0,0 @@ -use brk_types::Cents; - -use crate::internal::{PERCENTILES, PERCENTILES_LEN}; - -use super::CostBasisMap; - -#[derive(Clone, Copy, Debug)] -pub struct Percentiles { - /// Sat-weighted: percentiles by coin count - pub sat_weighted: [Cents; PERCENTILES_LEN], - /// USD-weighted: percentiles by invested capital (sats × price) - pub usd_weighted: [Cents; PERCENTILES_LEN], -} - -impl Percentiles { - /// Compute both sat-weighted and USD-weighted percentiles in two passes over the BTreeMap. - /// Avoids intermediate Vec allocation by iterating the map directly. - pub(crate) fn compute_from_map(map: &CostBasisMap) -> Option { - if map.is_empty() { - return None; - } - - // First pass: compute totals - let mut total_sats: u64 = 0; - let mut total_usd: u128 = 0; - for (¢s, &sats) in map.iter() { - total_sats += u64::from(sats); - total_usd += cents.as_u128() * sats.as_u128(); - } - - if total_sats == 0 { - return None; - } - - // Precompute targets to avoid repeated multiplication in the inner loop - let sat_targets: [u64; PERCENTILES_LEN] = - PERCENTILES.map(|p| total_sats * u64::from(p) / 100); - let usd_targets: [u128; PERCENTILES_LEN] = - PERCENTILES.map(|p| total_usd * u128::from(p) / 100); - - let mut sat_weighted = [Cents::ZERO; PERCENTILES_LEN]; - let mut usd_weighted = [Cents::ZERO; PERCENTILES_LEN]; - let mut cumsum_sats: u64 = 0; - let mut cumsum_usd: u128 = 0; - let mut sat_idx = 0; - let mut usd_idx = 0; - - // Second pass: compute percentiles - for (¢s, &sats) in map.iter() { - cumsum_sats += u64::from(sats); - cumsum_usd += cents.as_u128() * sats.as_u128(); - - while sat_idx < PERCENTILES_LEN && cumsum_sats >= sat_targets[sat_idx] { - sat_weighted[sat_idx] = cents.into(); - sat_idx += 1; - } - - while usd_idx < PERCENTILES_LEN && cumsum_usd >= usd_targets[usd_idx] { - usd_weighted[usd_idx] = cents.into(); - usd_idx += 1; - } - } - - Some(Self { - sat_weighted, - usd_weighted, - }) - } -} diff --git a/modules/brk-client/index.js b/modules/brk-client/index.js index 92acfa600..b5c5a4f71 100644 --- a/modules/brk-client/index.js +++ b/modules/brk-client/index.js @@ -2640,35 +2640,6 @@ function create_10y2y3y4y5y6y8yPattern(client, acc) { }; } -/** - * @typedef {Object} ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern - * @property {CoinblocksCoindaysSentPattern} activity - * @property {MaxMinPattern} costBasis - * @property {UtxoPattern} outputs - * @property {MvrvNegNetRealizedSentSoprValuePattern} realized - * @property {SupplyPattern2} relative - * @property {DeltaHalvedTotalPattern} supply - * @property {InvestedInvestorNegNetSupplyUnrealizedPattern} unrealized - */ - -/** - * Create a ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern pattern node - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} - */ -function createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, acc) { - return { - activity: createCoinblocksCoindaysSentPattern(client, acc), - costBasis: createMaxMinPattern(client, _m(acc, 'cost_basis')), - outputs: createUtxoPattern(client, _m(acc, 'utxo_count')), - realized: createMvrvNegNetRealizedSentSoprValuePattern(client, acc), - relative: createSupplyPattern2(client, _m(acc, 'supply')), - supply: createDeltaHalvedTotalPattern(client, _m(acc, 'supply')), - unrealized: createInvestedInvestorNegNetSupplyUnrealizedPattern(client, acc), - }; -} - /** * @typedef {Object} ActivityAddrOutputsRealizedSupplyUnrealizedPattern * @property {SentPattern} activity @@ -2700,12 +2671,12 @@ function createActivityAddrOutputsRealizedSupplyUnrealizedPattern(client, acc) { /** * @typedef {Object} ActivityOutputsRealizedRelativeSupplyUnrealizedPattern - * @property {SentPattern} activity + * @property {CoinblocksCoindaysSentPattern} activity * @property {UtxoPattern} outputs - * @property {MvrvNegNetRealizedSoprValuePattern} realized + * @property {MvrvNegNetRealizedSentSoprValuePattern} realized * @property {SupplyPattern2} relative * @property {DeltaHalvedTotalPattern} supply - * @property {NegNetSupplyUnrealizedPattern} unrealized + * @property {InvestedInvestorNegNetSupplyUnrealizedPattern} unrealized */ /** @@ -2715,6 +2686,33 @@ function createActivityAddrOutputsRealizedSupplyUnrealizedPattern(client, acc) { * @returns {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} */ function createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, acc) { + return { + activity: createCoinblocksCoindaysSentPattern(client, acc), + outputs: createUtxoPattern(client, _m(acc, 'utxo_count')), + realized: createMvrvNegNetRealizedSentSoprValuePattern(client, acc), + relative: createSupplyPattern2(client, _m(acc, 'supply')), + supply: createDeltaHalvedTotalPattern(client, _m(acc, 'supply')), + unrealized: createInvestedInvestorNegNetSupplyUnrealizedPattern(client, acc), + }; +} + +/** + * @typedef {Object} ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 + * @property {SentPattern} activity + * @property {UtxoPattern} outputs + * @property {MvrvNegNetRealizedSoprValuePattern} realized + * @property {SupplyPattern2} relative + * @property {DeltaHalvedTotalPattern} supply + * @property {NegNetSupplyUnrealizedPattern} unrealized + */ + +/** + * Create a ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 pattern node + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} + */ +function createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, acc) { return { activity: createSentPattern(client, _m(acc, 'sent')), outputs: createUtxoPattern(client, _m(acc, 'utxo_count')), @@ -3425,21 +3423,21 @@ function createChangeRatePattern2(client, acc) { } /** - * @typedef {Object} MaxMinPattern - * @property {CentsSatsUsdPattern} max - * @property {CentsSatsUsdPattern} min + * @typedef {Object} HeightSumPattern + * @property {MetricPattern18} height + * @property {_1m1w1y24hPattern} sum */ /** - * Create a MaxMinPattern pattern node + * Create a HeightSumPattern pattern node * @param {BrkClientBase} client * @param {string} acc - Accumulated metric name - * @returns {MaxMinPattern} + * @returns {HeightSumPattern} */ -function createMaxMinPattern(client, acc) { +function createHeightSumPattern(client, acc) { return { - max: createCentsSatsUsdPattern(client, _m(acc, 'max')), - min: createCentsSatsUsdPattern(client, _m(acc, 'min')), + height: createMetricPattern18(client, acc), + sum: create_1m1w1y24hPattern(client, _m(acc, 'sum')), }; } @@ -4921,102 +4919,102 @@ function create_24hPattern(client, acc) { /** * @typedef {Object} MetricsTree_Distribution_UtxoCohorts_AgeRange - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} upTo1h - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _1hTo1d - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _1dTo1w - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _1wTo1m - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _1mTo2m - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _2mTo3m - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _3mTo4m - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _4mTo5m - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _5mTo6m - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _6mTo1y - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _1yTo2y - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _2yTo3y - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _3yTo4y - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _4yTo5y - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _5yTo6y - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _6yTo7y - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _7yTo8y - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _8yTo10y - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _10yTo12y - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} _12yTo15y - * @property {ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern} from15y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} upTo1h + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1hTo1d + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1dTo1w + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1wTo1m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1mTo2m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2mTo3m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _3mTo4m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _4mTo5m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _5mTo6m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _6mTo1y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1yTo2y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2yTo3y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _3yTo4y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _4yTo5y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _5yTo6y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _6yTo7y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _7yTo8y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _8yTo10y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _10yTo12y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _12yTo15y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} from15y */ /** * @typedef {Object} MetricsTree_Distribution_UtxoCohorts_MaxAge - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1w - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1m - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2m - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _3m - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _4m - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _5m - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _6m - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _3y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _4y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _5y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _6y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _7y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _8y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _10y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _12y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _15y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _1w + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _1m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _3m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _4m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _5m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _6m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _1y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _3y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _4y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _5y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _6y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _7y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _8y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _10y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _12y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _15y */ /** * @typedef {Object} MetricsTree_Distribution_UtxoCohorts_MinAge - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1d - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1w - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1m - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2m - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _3m - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _4m - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _5m - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _6m - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _3y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _4y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _5y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _6y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _7y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _8y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _10y - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _12y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _1d + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _1w + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _1m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _3m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _4m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _5m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _6m + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _1y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _3y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _4y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _5y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _6y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _7y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _8y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _10y + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _12y */ /** * @typedef {Object} MetricsTree_Distribution_UtxoCohorts_Epoch - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _0 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _1 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _3 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _4 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _0 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _1 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _3 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _4 */ /** * @typedef {Object} MetricsTree_Distribution_UtxoCohorts_Class - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2009 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2010 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2011 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2012 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2013 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2014 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2015 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2016 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2017 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2018 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2019 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2020 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2021 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2022 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2023 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2024 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2025 - * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern} _2026 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2009 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2010 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2011 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2012 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2013 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2014 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2015 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2016 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2017 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2018 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2019 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2020 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2021 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2022 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2023 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2024 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2025 + * @property {ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2} _2026 */ /** @@ -5162,15 +5160,15 @@ function create_24hPattern(client, acc) { /** * @typedef {Object} MetricsTree_Distribution_NewAddrCount - * @property {AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern} all - * @property {AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern} p2pk65 - * @property {AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern} p2pk33 - * @property {AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern} p2pkh - * @property {AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern} p2sh - * @property {AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern} p2wpkh - * @property {AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern} p2wsh - * @property {AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern} p2tr - * @property {AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern} p2a + * @property {HeightSumPattern} all + * @property {HeightSumPattern} p2pk65 + * @property {HeightSumPattern} p2pk33 + * @property {HeightSumPattern} p2pkh + * @property {HeightSumPattern} p2sh + * @property {HeightSumPattern} p2wpkh + * @property {HeightSumPattern} p2wsh + * @property {HeightSumPattern} p2tr + * @property {HeightSumPattern} p2a */ /** @@ -7133,94 +7131,94 @@ class BrkClient extends BrkClientBase { utxoCountDeltaExtended: create_24hChangeRatePattern(this, 'lth_utxo_count_delta'), }, ageRange: { - upTo1h: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_1h_old'), - _1hTo1d: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_1h_to_1d_old'), - _1dTo1w: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_1d_to_1w_old'), - _1wTo1m: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_1w_to_1m_old'), - _1mTo2m: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_1m_to_2m_old'), - _2mTo3m: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_2m_to_3m_old'), - _3mTo4m: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_3m_to_4m_old'), - _4mTo5m: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_4m_to_5m_old'), - _5mTo6m: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_5m_to_6m_old'), - _6mTo1y: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_6m_to_1y_old'), - _1yTo2y: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_1y_to_2y_old'), - _2yTo3y: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_2y_to_3y_old'), - _3yTo4y: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_3y_to_4y_old'), - _4yTo5y: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_4y_to_5y_old'), - _5yTo6y: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_5y_to_6y_old'), - _6yTo7y: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_6y_to_7y_old'), - _7yTo8y: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_7y_to_8y_old'), - _8yTo10y: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_8y_to_10y_old'), - _10yTo12y: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_10y_to_12y_old'), - _12yTo15y: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_12y_to_15y_old'), - from15y: createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_15y_old'), + upTo1h: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_1h_old'), + _1hTo1d: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_1h_to_1d_old'), + _1dTo1w: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_1d_to_1w_old'), + _1wTo1m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_1w_to_1m_old'), + _1mTo2m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_1m_to_2m_old'), + _2mTo3m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_2m_to_3m_old'), + _3mTo4m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_3m_to_4m_old'), + _4mTo5m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_4m_to_5m_old'), + _5mTo6m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_5m_to_6m_old'), + _6mTo1y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_6m_to_1y_old'), + _1yTo2y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_1y_to_2y_old'), + _2yTo3y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_2y_to_3y_old'), + _3yTo4y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_3y_to_4y_old'), + _4yTo5y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_4y_to_5y_old'), + _5yTo6y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_5y_to_6y_old'), + _6yTo7y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_6y_to_7y_old'), + _7yTo8y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_7y_to_8y_old'), + _8yTo10y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_8y_to_10y_old'), + _10yTo12y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_10y_to_12y_old'), + _12yTo15y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_12y_to_15y_old'), + from15y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_15y_old'), }, maxAge: { - _1w: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_1w_old'), - _1m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_1m_old'), - _2m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_2m_old'), - _3m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_3m_old'), - _4m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_4m_old'), - _5m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_5m_old'), - _6m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_6m_old'), - _1y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_1y_old'), - _2y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_2y_old'), - _3y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_3y_old'), - _4y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_4y_old'), - _5y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_5y_old'), - _6y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_6y_old'), - _7y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_7y_old'), - _8y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_8y_old'), - _10y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_10y_old'), - _12y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_12y_old'), - _15y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_under_15y_old'), + _1w: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_1w_old'), + _1m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_1m_old'), + _2m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_2m_old'), + _3m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_3m_old'), + _4m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_4m_old'), + _5m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_5m_old'), + _6m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_6m_old'), + _1y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_1y_old'), + _2y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_2y_old'), + _3y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_3y_old'), + _4y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_4y_old'), + _5y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_5y_old'), + _6y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_6y_old'), + _7y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_7y_old'), + _8y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_8y_old'), + _10y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_10y_old'), + _12y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_12y_old'), + _15y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_under_15y_old'), }, minAge: { - _1d: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_1d_old'), - _1w: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_1w_old'), - _1m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_1m_old'), - _2m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_2m_old'), - _3m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_3m_old'), - _4m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_4m_old'), - _5m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_5m_old'), - _6m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_6m_old'), - _1y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_1y_old'), - _2y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_2y_old'), - _3y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_3y_old'), - _4y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_4y_old'), - _5y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_5y_old'), - _6y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_6y_old'), - _7y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_7y_old'), - _8y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_8y_old'), - _10y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_10y_old'), - _12y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'utxos_over_12y_old'), + _1d: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_1d_old'), + _1w: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_1w_old'), + _1m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_1m_old'), + _2m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_2m_old'), + _3m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_3m_old'), + _4m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_4m_old'), + _5m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_5m_old'), + _6m: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_6m_old'), + _1y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_1y_old'), + _2y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_2y_old'), + _3y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_3y_old'), + _4y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_4y_old'), + _5y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_5y_old'), + _6y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_6y_old'), + _7y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_7y_old'), + _8y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_8y_old'), + _10y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_10y_old'), + _12y: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'utxos_over_12y_old'), }, epoch: { - _0: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'epoch_0'), - _1: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'epoch_1'), - _2: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'epoch_2'), - _3: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'epoch_3'), - _4: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'epoch_4'), + _0: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'epoch_0'), + _1: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'epoch_1'), + _2: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'epoch_2'), + _3: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'epoch_3'), + _4: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'epoch_4'), }, class: { - _2009: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2009'), - _2010: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2010'), - _2011: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2011'), - _2012: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2012'), - _2013: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2013'), - _2014: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2014'), - _2015: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2015'), - _2016: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2016'), - _2017: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2017'), - _2018: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2018'), - _2019: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2019'), - _2020: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2020'), - _2021: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2021'), - _2022: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2022'), - _2023: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2023'), - _2024: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2024'), - _2025: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2025'), - _2026: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(this, 'class_2026'), + _2009: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2009'), + _2010: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2010'), + _2011: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2011'), + _2012: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2012'), + _2013: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2013'), + _2014: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2014'), + _2015: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2015'), + _2016: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2016'), + _2017: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2017'), + _2018: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2018'), + _2019: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2019'), + _2020: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2020'), + _2021: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2021'), + _2022: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2022'), + _2023: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2023'), + _2024: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2024'), + _2025: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2025'), + _2026: createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(this, 'class_2026'), }, geAmount: { _1sat: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_1sat'), @@ -7347,15 +7345,15 @@ class BrkClient extends BrkClientBase { }, totalAddrCount: createAllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern(this, 'total_addr_count'), newAddrCount: { - all: createAverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(this, 'new_addr_count'), - p2pk65: createAverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(this, 'p2pk65_new_addr_count'), - p2pk33: createAverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(this, 'p2pk33_new_addr_count'), - p2pkh: createAverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(this, 'p2pkh_new_addr_count'), - p2sh: createAverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(this, 'p2sh_new_addr_count'), - p2wpkh: createAverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(this, 'p2wpkh_new_addr_count'), - p2wsh: createAverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(this, 'p2wsh_new_addr_count'), - p2tr: createAverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(this, 'p2tr_new_addr_count'), - p2a: createAverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(this, 'p2a_new_addr_count'), + all: createHeightSumPattern(this, 'new_addr_count'), + p2pk65: createHeightSumPattern(this, 'p2pk65_new_addr_count'), + p2pk33: createHeightSumPattern(this, 'p2pk33_new_addr_count'), + p2pkh: createHeightSumPattern(this, 'p2pkh_new_addr_count'), + p2sh: createHeightSumPattern(this, 'p2sh_new_addr_count'), + p2wpkh: createHeightSumPattern(this, 'p2wpkh_new_addr_count'), + p2wsh: createHeightSumPattern(this, 'p2wsh_new_addr_count'), + p2tr: createHeightSumPattern(this, 'p2tr_new_addr_count'), + p2a: createHeightSumPattern(this, 'p2a_new_addr_count'), }, delta: { all: createChangeRatePattern2(this, 'addr_count'), diff --git a/packages/brk_client/brk_client/__init__.py b/packages/brk_client/brk_client/__init__.py index 20fae3ca0..49cd6abe6 100644 --- a/packages/brk_client/brk_client/__init__.py +++ b/packages/brk_client/brk_client/__init__.py @@ -2562,19 +2562,6 @@ class _10y2y3y4y5y6y8yPattern: self._6y: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, '6y')) self._8y: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, '8y')) -class ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern: - """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self.activity: CoinblocksCoindaysSentPattern = CoinblocksCoindaysSentPattern(client, acc) - self.cost_basis: MaxMinPattern = MaxMinPattern(client, _m(acc, 'cost_basis')) - self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count')) - self.realized: MvrvNegNetRealizedSentSoprValuePattern = MvrvNegNetRealizedSentSoprValuePattern(client, acc) - self.relative: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply')) - self.supply: DeltaHalvedTotalPattern = DeltaHalvedTotalPattern(client, _m(acc, 'supply')) - self.unrealized: InvestedInvestorNegNetSupplyUnrealizedPattern = InvestedInvestorNegNetSupplyUnrealizedPattern(client, acc) - class ActivityAddrOutputsRealizedSupplyUnrealizedPattern: """Pattern struct for repeated tree structure.""" @@ -2591,6 +2578,18 @@ class ActivityAddrOutputsRealizedSupplyUnrealizedPattern: class ActivityOutputsRealizedRelativeSupplyUnrealizedPattern: """Pattern struct for repeated tree structure.""" + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.activity: CoinblocksCoindaysSentPattern = CoinblocksCoindaysSentPattern(client, acc) + self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count')) + self.realized: MvrvNegNetRealizedSentSoprValuePattern = MvrvNegNetRealizedSentSoprValuePattern(client, acc) + self.relative: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply')) + self.supply: DeltaHalvedTotalPattern = DeltaHalvedTotalPattern(client, _m(acc, 'supply')) + self.unrealized: InvestedInvestorNegNetSupplyUnrealizedPattern = InvestedInvestorNegNetSupplyUnrealizedPattern(client, acc) + +class ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2: + """Pattern struct for repeated tree structure.""" + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" self.activity: SentPattern = SentPattern(client, _m(acc, 'sent')) @@ -2897,13 +2896,13 @@ class ChangeRatePattern2: self.change: _1m1w1y24hPattern[StoredI64] = _1m1w1y24hPattern(client, _m(acc, 'change')) self.rate: _1m1w1y24hPattern2 = _1m1w1y24hPattern2(client, _m(acc, 'rate')) -class MaxMinPattern: +class HeightSumPattern: """Pattern struct for repeated tree structure.""" def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.max: CentsSatsUsdPattern = CentsSatsUsdPattern(client, _m(acc, 'max')) - self.min: CentsSatsUsdPattern = CentsSatsUsdPattern(client, _m(acc, 'min')) + self.height: MetricPattern18[StoredU64] = MetricPattern18(client, acc) + self.sum: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, _m(acc, 'sum')) class SdSmaPattern: """Pattern struct for repeated tree structure.""" @@ -4360,106 +4359,106 @@ class MetricsTree_Distribution_UtxoCohorts_AgeRange: """Metrics tree node.""" def __init__(self, client: BrkClientBase, base_path: str = ''): - self.up_to_1h: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_1h_old') - self._1h_to_1d: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1h_to_1d_old') - self._1d_to_1w: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1d_to_1w_old') - self._1w_to_1m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1w_to_1m_old') - self._1m_to_2m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1m_to_2m_old') - self._2m_to_3m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_2m_to_3m_old') - self._3m_to_4m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_3m_to_4m_old') - self._4m_to_5m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_4m_to_5m_old') - self._5m_to_6m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_5m_to_6m_old') - self._6m_to_1y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_6m_to_1y_old') - self._1y_to_2y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1y_to_2y_old') - self._2y_to_3y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_2y_to_3y_old') - self._3y_to_4y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_3y_to_4y_old') - self._4y_to_5y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_4y_to_5y_old') - self._5y_to_6y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_5y_to_6y_old') - self._6y_to_7y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_6y_to_7y_old') - self._7y_to_8y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_7y_to_8y_old') - self._8y_to_10y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_8y_to_10y_old') - self._10y_to_12y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_10y_to_12y_old') - self._12y_to_15y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_12y_to_15y_old') - self.from_15y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_15y_old') + self.up_to_1h: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_1h_old') + self._1h_to_1d: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1h_to_1d_old') + self._1d_to_1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1d_to_1w_old') + self._1w_to_1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1w_to_1m_old') + self._1m_to_2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1m_to_2m_old') + self._2m_to_3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_2m_to_3m_old') + self._3m_to_4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_3m_to_4m_old') + self._4m_to_5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_4m_to_5m_old') + self._5m_to_6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_5m_to_6m_old') + self._6m_to_1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_6m_to_1y_old') + self._1y_to_2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1y_to_2y_old') + self._2y_to_3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_2y_to_3y_old') + self._3y_to_4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_3y_to_4y_old') + self._4y_to_5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_4y_to_5y_old') + self._5y_to_6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_5y_to_6y_old') + self._6y_to_7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_6y_to_7y_old') + self._7y_to_8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_7y_to_8y_old') + self._8y_to_10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_8y_to_10y_old') + self._10y_to_12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_10y_to_12y_old') + self._12y_to_15y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_12y_to_15y_old') + self.from_15y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_15y_old') class MetricsTree_Distribution_UtxoCohorts_MaxAge: """Metrics tree node.""" def __init__(self, client: BrkClientBase, base_path: str = ''): - self._1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_1w_old') - self._1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_1m_old') - self._2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_2m_old') - self._3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_3m_old') - self._4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_4m_old') - self._5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_5m_old') - self._6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_6m_old') - self._1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_1y_old') - self._2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_2y_old') - self._3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_3y_old') - self._4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_4y_old') - self._5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_5y_old') - self._6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_6y_old') - self._7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_7y_old') - self._8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_8y_old') - self._10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_10y_old') - self._12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_12y_old') - self._15y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_15y_old') + self._1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_1w_old') + self._1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_1m_old') + self._2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_2m_old') + self._3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_3m_old') + self._4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_4m_old') + self._5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_5m_old') + self._6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_6m_old') + self._1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_1y_old') + self._2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_2y_old') + self._3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_3y_old') + self._4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_4y_old') + self._5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_5y_old') + self._6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_6y_old') + self._7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_7y_old') + self._8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_8y_old') + self._10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_10y_old') + self._12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_12y_old') + self._15y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_under_15y_old') class MetricsTree_Distribution_UtxoCohorts_MinAge: """Metrics tree node.""" def __init__(self, client: BrkClientBase, base_path: str = ''): - self._1d: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_1d_old') - self._1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_1w_old') - self._1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_1m_old') - self._2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_2m_old') - self._3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_3m_old') - self._4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_4m_old') - self._5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_5m_old') - self._6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_6m_old') - self._1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_1y_old') - self._2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_2y_old') - self._3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_3y_old') - self._4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_4y_old') - self._5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_5y_old') - self._6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_6y_old') - self._7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_7y_old') - self._8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_8y_old') - self._10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_10y_old') - self._12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_12y_old') + self._1d: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_1d_old') + self._1w: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_1w_old') + self._1m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_1m_old') + self._2m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_2m_old') + self._3m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_3m_old') + self._4m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_4m_old') + self._5m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_5m_old') + self._6m: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_6m_old') + self._1y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_1y_old') + self._2y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_2y_old') + self._3y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_3y_old') + self._4y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_4y_old') + self._5y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_5y_old') + self._6y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_6y_old') + self._7y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_7y_old') + self._8y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_8y_old') + self._10y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_10y_old') + self._12y: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'utxos_over_12y_old') class MetricsTree_Distribution_UtxoCohorts_Epoch: """Metrics tree node.""" def __init__(self, client: BrkClientBase, base_path: str = ''): - self._0: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'epoch_0') - self._1: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'epoch_1') - self._2: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'epoch_2') - self._3: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'epoch_3') - self._4: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'epoch_4') + self._0: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'epoch_0') + self._1: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'epoch_1') + self._2: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'epoch_2') + self._3: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'epoch_3') + self._4: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'epoch_4') class MetricsTree_Distribution_UtxoCohorts_Class: """Metrics tree node.""" def __init__(self, client: BrkClientBase, base_path: str = ''): - self._2009: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2009') - self._2010: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2010') - self._2011: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2011') - self._2012: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2012') - self._2013: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2013') - self._2014: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2014') - self._2015: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2015') - self._2016: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2016') - self._2017: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2017') - self._2018: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2018') - self._2019: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2019') - self._2020: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2020') - self._2021: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2021') - self._2022: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2022') - self._2023: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2023') - self._2024: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2024') - self._2025: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2025') - self._2026: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'class_2026') + self._2009: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2009') + self._2010: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2010') + self._2011: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2011') + self._2012: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2012') + self._2013: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2013') + self._2014: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2014') + self._2015: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2015') + self._2016: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2016') + self._2017: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2017') + self._2018: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2018') + self._2019: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2019') + self._2020: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2020') + self._2021: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2021') + self._2022: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2022') + self._2023: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2023') + self._2024: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2024') + self._2025: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2025') + self._2026: ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 = ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, 'class_2026') class MetricsTree_Distribution_UtxoCohorts_GeAmount: """Metrics tree node.""" @@ -4632,15 +4631,15 @@ class MetricsTree_Distribution_NewAddrCount: """Metrics tree node.""" def __init__(self, client: BrkClientBase, base_path: str = ''): - self.all: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern = AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, 'new_addr_count') - self.p2pk65: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern = AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, 'p2pk65_new_addr_count') - self.p2pk33: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern = AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, 'p2pk33_new_addr_count') - self.p2pkh: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern = AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, 'p2pkh_new_addr_count') - self.p2sh: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern = AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, 'p2sh_new_addr_count') - self.p2wpkh: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern = AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, 'p2wpkh_new_addr_count') - self.p2wsh: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern = AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, 'p2wsh_new_addr_count') - self.p2tr: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern = AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, 'p2tr_new_addr_count') - self.p2a: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern = AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, 'p2a_new_addr_count') + self.all: HeightSumPattern = HeightSumPattern(client, 'new_addr_count') + self.p2pk65: HeightSumPattern = HeightSumPattern(client, 'p2pk65_new_addr_count') + self.p2pk33: HeightSumPattern = HeightSumPattern(client, 'p2pk33_new_addr_count') + self.p2pkh: HeightSumPattern = HeightSumPattern(client, 'p2pkh_new_addr_count') + self.p2sh: HeightSumPattern = HeightSumPattern(client, 'p2sh_new_addr_count') + self.p2wpkh: HeightSumPattern = HeightSumPattern(client, 'p2wpkh_new_addr_count') + self.p2wsh: HeightSumPattern = HeightSumPattern(client, 'p2wsh_new_addr_count') + self.p2tr: HeightSumPattern = HeightSumPattern(client, 'p2tr_new_addr_count') + self.p2a: HeightSumPattern = HeightSumPattern(client, 'p2a_new_addr_count') class MetricsTree_Distribution_Delta: """Metrics tree node."""