global: snapshot

This commit is contained in:
nym21
2026-03-07 22:52:51 +01:00
parent 90f2d64019
commit 81ab1886d1
18 changed files with 703 additions and 1008 deletions

View File

@@ -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<BrkClientBase>, 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<BrkClientBase>, 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<BrkClientBase>, 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<StoredU64>,
pub sum: _1m1w1y24hPattern<StoredU64>,
}
impl MaxMinPattern {
impl HeightSumPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, 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<BrkClientBase>, 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<BrkClientBase>, 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<BrkClientBase>, 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<BrkClientBase>, 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<BrkClientBase>, 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<BrkClientBase>, 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()),
}
}
}

View File

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

View File

@@ -136,14 +136,13 @@ impl<M: CohortMetricsBase + Traversable> DynCohortVecs for UTXOCohortVecs<M> {
&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(())

View File

@@ -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<M: StorageMode = Rw> {
pub outputs: Box<OutputsMetrics<M>>,
pub activity: Box<ActivityFull<M>>,
pub realized: Box<RealizedFull<M>>,
pub cost_basis: Box<CostBasisWithExtended<M>>,
pub cost_basis: Box<CostBasis<M>>,
pub unrealized: Box<UnrealizedFull<M>>,
pub adjusted: Box<RealizedAdjusted<M>>,
pub relative: Box<RelativeForAll<M>>,
@@ -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),

View File

@@ -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<M: StorageMode = Rw> {
pub outputs: Box<OutputsMetrics<M>>,
pub activity: Box<ActivityBase<M>>,
pub realized: Box<RealizedBase<M>>,
pub cost_basis: Box<CostBasisBase<M>>,
pub unrealized: Box<UnrealizedBase<M>>,
pub relative: Box<RelativeToAll<M>>,
}
@@ -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),
})

View File

@@ -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<M: StorageMode = Rw> {
pub outputs: Box<OutputsMetrics<M>>,
pub activity: Box<ActivityFull<M>>,
pub realized: Box<RealizedFull<M>>,
pub cost_basis: Box<CostBasisWithExtended<M>>,
pub cost_basis: Box<CostBasis<M>>,
pub unrealized: Box<UnrealizedFull<M>>,
pub relative: Box<RelativeWithExtended<M>>,
pub dormancy: ComputedFromHeight<StoredF32, M>,
@@ -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)?,

View File

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

View File

@@ -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<M: StorageMode = Rw> {
/// Minimum cost basis for any UTXO at this height
pub min: Price<ComputedFromHeight<Cents, M>>,
/// Maximum cost basis for any UTXO at this height
pub max: Price<ComputedFromHeight<Cents, M>>,
}
impl CostBasisBase {
pub(crate) fn forced_import(cfg: &ImportConfig) -> Result<Self> {
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<RealizedState>,
) -> 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::<Vec<_>>(),
exit,
)?;
self.max.cents.height.compute_max_of_others(
starting_indexes.height,
&others
.iter()
.map(|v| &v.max.cents.height)
.collect::<Vec<_>>(),
exit,
)?;
Ok(())
}
}

View File

@@ -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<M: StorageMode = Rw> {
/// Cost basis percentiles (sat-weighted)
pub percentiles: PercentilesVecs<M>,
/// Invested capital percentiles (USD-weighted)
pub invested_capital: PercentilesVecs<M>,
}
impl CostBasisExtended {
pub(crate) fn forced_import(cfg: &ImportConfig) -> Result<Self> {
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<RealizedState>,
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(())
}
}

View File

@@ -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<RealizedState>,
_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<M: StorageMode = Rw> {
pub min: Price<ComputedFromHeight<Cents, M>>,
pub max: Price<ComputedFromHeight<Cents, M>>,
pub percentiles: PercentilesVecs<M>,
pub invested_capital: PercentilesVecs<M>,
}
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<Self> {
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<RealizedState>,
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
}
}

View File

@@ -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<M: StorageMode = Rw> {
#[deref]
#[deref_mut]
#[traversable(flatten)]
pub base: CostBasisBase<M>,
#[traversable(flatten)]
pub extended: CostBasisExtended<M>,
}
impl CostBasisWithExtended {
pub(crate) fn forced_import(cfg: &ImportConfig) -> Result<Self> {
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
}
}

View File

@@ -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<Realized = RealizedState> + 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<Realized = RealizedState> + 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<Realized = RealizedState> + 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<RealizedState>,
) -> 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<RealizedState>,
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<Realized = RealizedState> + 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<RealizedState>) -> Result<()> {
@@ -258,11 +232,6 @@ pub trait CohortMetricsBase: CohortMetricsState<Realized = RealizedState> + Send
&others.iter().map(|v| v.unrealized_base()).collect::<Vec<_>>(),
exit,
)?;
self.cost_basis_base_mut().compute_from_stateful(
starting_indexes,
&others.iter().map(|v| v.cost_basis_base()).collect::<Vec<_>>(),
exit,
)?;
Ok(())
}
}

View File

@@ -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<R: RealizedOps> CohortState<R> {
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<R: RealizedOps> CohortState<R> {
}
}
pub(crate) fn compute_percentiles(&mut self) -> Option<Percentiles> {
self.cost_basis_data.compute_percentiles()
}
pub(crate) fn cached_percentiles(&self) -> Option<Percentiles> {
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)
}

View File

@@ -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<CentsCompact, Sats>;
@@ -31,8 +31,6 @@ pub struct CostBasisData {
pending: FxHashMap<CentsCompact, (Sats, Sats)>,
pending_raw: PendingRaw,
cache: Option<CachedUnrealizedState>,
percentiles_dirty: bool,
cached_percentiles: Option<Percentiles>,
rounding_digits: Option<i32>,
/// 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<Percentiles> {
self.cached_percentiles
}
pub(crate) fn compute_percentiles(&mut self) -> Option<Percentiles> {
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 {

View File

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

View File

@@ -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<Self> {
if map.is_empty() {
return None;
}
// First pass: compute totals
let mut total_sats: u64 = 0;
let mut total_usd: u128 = 0;
for (&cents, &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 (&cents, &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,
})
}
}

View File

@@ -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<StoredU64>} height
* @property {_1m1w1y24hPattern<StoredU64>} 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'),

View File

@@ -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."""