global: snapshot

This commit is contained in:
nym21
2026-03-07 11:42:11 +01:00
parent 5a73f1a88e
commit bf07570848
31 changed files with 1151 additions and 1009 deletions
+315 -299
View File
@@ -1127,108 +1127,6 @@ impl _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern {
} }
} }
/// Pattern struct for repeated tree structure.
pub struct InvestedNegNetNuplSupplyUnrealizedPattern3 {
pub invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern,
pub invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern,
pub neg_unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern,
pub neg_unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern,
pub neg_unrealized_loss_rel_to_own_market_cap: BpsPercentRatioPattern,
pub net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern,
pub net_unrealized_pnl_rel_to_own_gross_pnl: BpsPercentRatioPattern,
pub net_unrealized_pnl_rel_to_own_market_cap: BpsPercentRatioPattern,
pub nupl: MetricPattern1<StoredF32>,
pub supply_in_loss_rel_to_circulating_supply: BpsPercentRatioPattern,
pub supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern,
pub supply_in_profit_rel_to_circulating_supply: BpsPercentRatioPattern,
pub supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern,
pub supply_rel_to_circulating_supply: BpsPercentRatioPattern,
pub unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern,
pub unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern,
pub unrealized_loss_rel_to_own_market_cap: BpsPercentRatioPattern,
pub unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern,
pub unrealized_profit_rel_to_own_gross_pnl: BpsPercentRatioPattern,
pub unrealized_profit_rel_to_own_market_cap: BpsPercentRatioPattern,
}
impl InvestedNegNetNuplSupplyUnrealizedPattern3 {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "invested_capital_in_loss_rel_to_realized_cap")),
invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "invested_capital_in_profit_rel_to_realized_cap")),
neg_unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "neg_unrealized_loss_rel_to_market_cap")),
neg_unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "neg_unrealized_loss_rel_to_own_gross_pnl")),
neg_unrealized_loss_rel_to_own_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "neg_unrealized_loss_rel_to_own_market_cap")),
net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_market_cap")),
net_unrealized_pnl_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_own_gross_pnl")),
net_unrealized_pnl_rel_to_own_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_own_market_cap")),
nupl: MetricPattern1::new(client.clone(), _m(&acc, "nupl")),
supply_in_loss_rel_to_circulating_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_circulating_supply")),
supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_own_supply")),
supply_in_profit_rel_to_circulating_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_circulating_supply")),
supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_own_supply")),
supply_rel_to_circulating_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_rel_to_circulating_supply")),
unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_market_cap")),
unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_own_gross_pnl")),
unrealized_loss_rel_to_own_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_own_market_cap")),
unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_market_cap")),
unrealized_profit_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_own_gross_pnl")),
unrealized_profit_rel_to_own_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_own_market_cap")),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct GrossMvrvNegNetRealizedSentSoprValuePattern {
pub gross_pnl: CentsUsdPattern,
pub mvrv: MetricPattern1<StoredF32>,
pub neg_realized_loss: MetricPattern1<Dollars>,
pub net_realized_pnl: CumulativeHeightPattern<CentsSigned>,
pub realized_cap: MetricPattern1<Dollars>,
pub realized_cap_cents: MetricPattern1<Cents>,
pub realized_cap_change_1m: MetricPattern1<CentsSigned>,
pub realized_loss: CumulativeHeightPattern<Cents>,
pub realized_price: CentsSatsUsdPattern,
pub realized_price_ratio: BpsRatioPattern,
pub realized_price_ratio_percentiles: RatioPattern,
pub realized_profit: CumulativeHeightPattern<Cents>,
pub sent_in_loss: BaseCumulativePattern,
pub sent_in_profit: BaseCumulativePattern,
pub sopr: _1m1w1y24hPattern<StoredF64>,
pub value_created: MetricPattern1<Cents>,
pub value_created_sum: _1m1w1y24hPattern<Cents>,
pub value_destroyed: MetricPattern1<Cents>,
pub value_destroyed_sum: _1m1w1y24hPattern<Cents>,
}
impl GrossMvrvNegNetRealizedSentSoprValuePattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
gross_pnl: CentsUsdPattern::new(client.clone(), _m(&acc, "realized_gross_pnl")),
mvrv: MetricPattern1::new(client.clone(), _m(&acc, "mvrv")),
neg_realized_loss: MetricPattern1::new(client.clone(), _m(&acc, "neg_realized_loss")),
net_realized_pnl: CumulativeHeightPattern::new(client.clone(), _m(&acc, "net_realized_pnl")),
realized_cap: MetricPattern1::new(client.clone(), _m(&acc, "realized_cap")),
realized_cap_cents: MetricPattern1::new(client.clone(), _m(&acc, "realized_cap_cents")),
realized_cap_change_1m: MetricPattern1::new(client.clone(), _m(&acc, "realized_cap_change_1m")),
realized_loss: CumulativeHeightPattern::new(client.clone(), _m(&acc, "realized_loss")),
realized_price: CentsSatsUsdPattern::new(client.clone(), _m(&acc, "realized_price")),
realized_price_ratio: BpsRatioPattern::new(client.clone(), _m(&acc, "realized_price_ratio")),
realized_price_ratio_percentiles: RatioPattern::new(client.clone(), _m(&acc, "realized_price_ratio")),
realized_profit: CumulativeHeightPattern::new(client.clone(), _m(&acc, "realized_profit")),
sent_in_loss: BaseCumulativePattern::new(client.clone(), _m(&acc, "sent_in_loss")),
sent_in_profit: BaseCumulativePattern::new(client.clone(), _m(&acc, "sent_in_profit")),
sopr: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "sopr")),
value_created: MetricPattern1::new(client.clone(), _m(&acc, "value_created")),
value_created_sum: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "value_created")),
value_destroyed: MetricPattern1::new(client.clone(), _m(&acc, "value_destroyed")),
value_destroyed_sum: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "value_destroyed")),
}
}
}
/// Pattern struct for repeated tree structure. /// Pattern struct for repeated tree structure.
pub struct Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern { pub struct Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern {
pub pct05: CentsSatsUsdPattern, pub pct05: CentsSatsUsdPattern,
@@ -1279,6 +1177,98 @@ impl Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75
} }
} }
/// Pattern struct for repeated tree structure.
pub struct InvestedNetNuplSupplyUnrealizedPattern3 {
pub invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern,
pub invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern,
pub net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern,
pub net_unrealized_pnl_rel_to_own_gross_pnl: BpsPercentRatioPattern,
pub net_unrealized_pnl_rel_to_own_market_cap: BpsPercentRatioPattern,
pub nupl: MetricPattern1<StoredF32>,
pub supply_in_loss_rel_to_circulating_supply: BpsPercentRatioPattern,
pub supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern,
pub supply_in_profit_rel_to_circulating_supply: BpsPercentRatioPattern,
pub supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern,
pub supply_rel_to_circulating_supply: BpsPercentRatioPattern,
pub unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern,
pub unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern,
pub unrealized_loss_rel_to_own_market_cap: BpsPercentRatioPattern,
pub unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern,
pub unrealized_profit_rel_to_own_gross_pnl: BpsPercentRatioPattern,
pub unrealized_profit_rel_to_own_market_cap: BpsPercentRatioPattern,
}
impl InvestedNetNuplSupplyUnrealizedPattern3 {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "invested_capital_in_loss_rel_to_realized_cap")),
invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "invested_capital_in_profit_rel_to_realized_cap")),
net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_market_cap")),
net_unrealized_pnl_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_own_gross_pnl")),
net_unrealized_pnl_rel_to_own_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_own_market_cap")),
nupl: MetricPattern1::new(client.clone(), _m(&acc, "nupl")),
supply_in_loss_rel_to_circulating_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_circulating_supply")),
supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_own_supply")),
supply_in_profit_rel_to_circulating_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_circulating_supply")),
supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_own_supply")),
supply_rel_to_circulating_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_rel_to_circulating_supply")),
unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_market_cap")),
unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_own_gross_pnl")),
unrealized_loss_rel_to_own_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_own_market_cap")),
unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_market_cap")),
unrealized_profit_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_own_gross_pnl")),
unrealized_profit_rel_to_own_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_own_market_cap")),
}
}
}
/// Pattern struct for repeated tree structure.
pub struct MvrvNegNetRealizedSentSoprValuePattern {
pub mvrv: MetricPattern1<StoredF32>,
pub neg_realized_loss: MetricPattern1<Dollars>,
pub net_realized_pnl: CumulativeHeightPattern<CentsSigned>,
pub realized_cap: MetricPattern1<Dollars>,
pub realized_cap_cents: MetricPattern1<Cents>,
pub realized_cap_change_1m: MetricPattern1<CentsSigned>,
pub realized_loss: CumulativeHeightPattern<Cents>,
pub realized_price: CentsSatsUsdPattern,
pub realized_price_ratio: BpsRatioPattern,
pub realized_profit: CumulativeHeightPattern<Cents>,
pub sent_in_loss: BaseCumulativePattern,
pub sent_in_profit: BaseCumulativePattern,
pub sopr: _1m1w1y24hPattern<StoredF64>,
pub value_created: MetricPattern1<Cents>,
pub value_created_sum: _1m1w1y24hPattern<Cents>,
pub value_destroyed: MetricPattern1<Cents>,
pub value_destroyed_sum: _1m1w1y24hPattern<Cents>,
}
impl MvrvNegNetRealizedSentSoprValuePattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
mvrv: MetricPattern1::new(client.clone(), _m(&acc, "mvrv")),
neg_realized_loss: MetricPattern1::new(client.clone(), _m(&acc, "neg_realized_loss")),
net_realized_pnl: CumulativeHeightPattern::new(client.clone(), _m(&acc, "net_realized_pnl")),
realized_cap: MetricPattern1::new(client.clone(), _m(&acc, "realized_cap")),
realized_cap_cents: MetricPattern1::new(client.clone(), _m(&acc, "realized_cap_cents")),
realized_cap_change_1m: MetricPattern1::new(client.clone(), _m(&acc, "realized_cap_change_1m")),
realized_loss: CumulativeHeightPattern::new(client.clone(), _m(&acc, "realized_loss")),
realized_price: CentsSatsUsdPattern::new(client.clone(), _m(&acc, "realized_price")),
realized_price_ratio: BpsRatioPattern::new(client.clone(), _m(&acc, "realized_price_ratio")),
realized_profit: CumulativeHeightPattern::new(client.clone(), _m(&acc, "realized_profit")),
sent_in_loss: BaseCumulativePattern::new(client.clone(), _m(&acc, "sent_in_loss")),
sent_in_profit: BaseCumulativePattern::new(client.clone(), _m(&acc, "sent_in_profit")),
sopr: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "sopr")),
value_created: MetricPattern1::new(client.clone(), _m(&acc, "value_created")),
value_created_sum: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "value_created")),
value_destroyed: MetricPattern1::new(client.clone(), _m(&acc, "value_destroyed")),
value_destroyed_sum: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "value_destroyed")),
}
}
}
/// Pattern struct for repeated tree structure. /// Pattern struct for repeated tree structure.
pub struct BpsRatioPattern2 { pub struct BpsRatioPattern2 {
pub bps: MetricPattern1<BasisPoints32>, pub bps: MetricPattern1<BasisPoints32>,
@@ -1479,42 +1469,6 @@ impl _10y1m1w1y2y3m3y4y5y6m6y8yPattern3 {
} }
} }
/// Pattern struct for repeated tree structure.
pub struct InvestedNegNetNuplSupplyUnrealizedPattern {
pub invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern,
pub invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern,
pub neg_unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern,
pub net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern,
pub nupl: MetricPattern1<StoredF32>,
pub supply_in_loss_rel_to_circulating_supply: BpsPercentRatioPattern,
pub supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern,
pub supply_in_profit_rel_to_circulating_supply: BpsPercentRatioPattern,
pub supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern,
pub supply_rel_to_circulating_supply: BpsPercentRatioPattern,
pub unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern,
pub unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern,
}
impl InvestedNegNetNuplSupplyUnrealizedPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "invested_capital_in_loss_rel_to_realized_cap")),
invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "invested_capital_in_profit_rel_to_realized_cap")),
neg_unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "neg_unrealized_loss_rel_to_market_cap")),
net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_market_cap")),
nupl: MetricPattern1::new(client.clone(), _m(&acc, "nupl")),
supply_in_loss_rel_to_circulating_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_circulating_supply")),
supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_own_supply")),
supply_in_profit_rel_to_circulating_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_circulating_supply")),
supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_own_supply")),
supply_rel_to_circulating_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_rel_to_circulating_supply")),
unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_market_cap")),
unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_market_cap")),
}
}
}
/// Pattern struct for repeated tree structure. /// Pattern struct for repeated tree structure.
pub struct _1m1w1y24hBaseBpsCumulativeHeightPercentRatioSumPattern { pub struct _1m1w1y24hBaseBpsCumulativeHeightPercentRatioSumPattern {
pub _1m: BpsPercentRatioPattern, pub _1m: BpsPercentRatioPattern,
@@ -1617,6 +1571,40 @@ impl AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern {
} }
} }
/// Pattern struct for repeated tree structure.
pub struct InvestedNetNuplSupplyUnrealizedPattern {
pub invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern,
pub invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern,
pub net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern,
pub nupl: MetricPattern1<StoredF32>,
pub supply_in_loss_rel_to_circulating_supply: BpsPercentRatioPattern,
pub supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern,
pub supply_in_profit_rel_to_circulating_supply: BpsPercentRatioPattern,
pub supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern,
pub supply_rel_to_circulating_supply: BpsPercentRatioPattern,
pub unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern,
pub unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern,
}
impl InvestedNetNuplSupplyUnrealizedPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "invested_capital_in_loss_rel_to_realized_cap")),
invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "invested_capital_in_profit_rel_to_realized_cap")),
net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "net_unrealized_pnl_rel_to_market_cap")),
nupl: MetricPattern1::new(client.clone(), _m(&acc, "nupl")),
supply_in_loss_rel_to_circulating_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_circulating_supply")),
supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_loss_rel_to_own_supply")),
supply_in_profit_rel_to_circulating_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_circulating_supply")),
supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_in_profit_rel_to_own_supply")),
supply_rel_to_circulating_supply: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "supply_rel_to_circulating_supply")),
unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_loss_rel_to_market_cap")),
unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), _m(&acc, "unrealized_profit_rel_to_market_cap")),
}
}
}
/// Pattern struct for repeated tree structure. /// Pattern struct for repeated tree structure.
pub struct AverageGainsLossesRsiStochPattern { pub struct AverageGainsLossesRsiStochPattern {
pub average_gain: MetricPattern1<StoredF32>, pub average_gain: MetricPattern1<StoredF32>,
@@ -1709,6 +1697,36 @@ impl AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2 {
} }
} }
/// Pattern struct for repeated tree structure.
pub struct AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern {
pub average: _1m1w1y24hPattern<BasisPoints16>,
pub height: MetricPattern18<BasisPoints16>,
pub max: _1m1w1y24hPattern<BasisPoints16>,
pub median: _1m1w1y24hPattern<BasisPoints16>,
pub min: _1m1w1y24hPattern<BasisPoints16>,
pub pct10: _1m1w1y24hPattern<BasisPoints16>,
pub pct25: _1m1w1y24hPattern<BasisPoints16>,
pub pct75: _1m1w1y24hPattern<BasisPoints16>,
pub pct90: _1m1w1y24hPattern<BasisPoints16>,
}
impl AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
average: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "average")),
height: MetricPattern18::new(client.clone(), acc.clone()),
max: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "max")),
median: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "median")),
min: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "min")),
pct10: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "p10")),
pct25: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "p25")),
pct75: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "p75")),
pct90: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "p90")),
}
}
}
/// Pattern struct for repeated tree structure. /// Pattern struct for repeated tree structure.
pub struct AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern { pub struct AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern {
pub average: _1m1w1y24hPattern<StoredU64>, pub average: _1m1w1y24hPattern<StoredU64>,
@@ -1739,36 +1757,6 @@ impl AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern {
} }
} }
/// Pattern struct for repeated tree structure.
pub struct AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<T> {
pub average: _1m1w1y24hPattern<T>,
pub height: MetricPattern18<T>,
pub max: _1m1w1y24hPattern<T>,
pub median: _1m1w1y24hPattern<T>,
pub min: _1m1w1y24hPattern<T>,
pub pct10: _1m1w1y24hPattern<T>,
pub pct25: _1m1w1y24hPattern<T>,
pub pct75: _1m1w1y24hPattern<T>,
pub pct90: _1m1w1y24hPattern<T>,
}
impl<T: DeserializeOwned> AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<T> {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
average: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "average")),
height: MetricPattern18::new(client.clone(), acc.clone()),
max: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "max")),
median: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "median")),
min: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "min")),
pct10: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "p10")),
pct25: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "p25")),
pct75: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "p75")),
pct90: _1m1w1y24hPattern::new(client.clone(), _m(&acc, "p90")),
}
}
}
/// Pattern struct for repeated tree structure. /// Pattern struct for repeated tree structure.
pub struct _1m1w1y24hBtcCentsSatsUsdPattern { pub struct _1m1w1y24hBtcCentsSatsUsdPattern {
pub _1m: BtcCentsSatsUsdPattern, pub _1m: BtcCentsSatsUsdPattern,
@@ -1884,8 +1872,8 @@ pub struct ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern {
pub activity: CoinblocksCoindaysSentPattern, pub activity: CoinblocksCoindaysSentPattern,
pub cost_basis: MaxMinPattern, pub cost_basis: MaxMinPattern,
pub outputs: UtxoPattern, pub outputs: UtxoPattern,
pub realized: GrossMvrvNegNetRealizedSentSoprValuePattern, pub realized: MvrvNegNetRealizedSentSoprValuePattern,
pub relative: InvestedNegNetNuplSupplyUnrealizedPattern, pub relative: InvestedNetNuplSupplyUnrealizedPattern,
pub supply: ChangeHalvedTotalPattern, pub supply: ChangeHalvedTotalPattern,
pub unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern, pub unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern,
} }
@@ -1897,40 +1885,14 @@ impl ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern {
activity: CoinblocksCoindaysSentPattern::new(client.clone(), acc.clone()), activity: CoinblocksCoindaysSentPattern::new(client.clone(), acc.clone()),
cost_basis: MaxMinPattern::new(client.clone(), _m(&acc, "cost_basis")), cost_basis: MaxMinPattern::new(client.clone(), _m(&acc, "cost_basis")),
outputs: UtxoPattern::new(client.clone(), _m(&acc, "utxo_count")), outputs: UtxoPattern::new(client.clone(), _m(&acc, "utxo_count")),
realized: GrossMvrvNegNetRealizedSentSoprValuePattern::new(client.clone(), acc.clone()), realized: MvrvNegNetRealizedSentSoprValuePattern::new(client.clone(), acc.clone()),
relative: InvestedNegNetNuplSupplyUnrealizedPattern::new(client.clone(), acc.clone()), relative: InvestedNetNuplSupplyUnrealizedPattern::new(client.clone(), acc.clone()),
supply: ChangeHalvedTotalPattern::new(client.clone(), _m(&acc, "supply")), supply: ChangeHalvedTotalPattern::new(client.clone(), _m(&acc, "supply")),
unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern::new(client.clone(), acc.clone()), unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern::new(client.clone(), acc.clone()),
} }
} }
} }
/// Pattern struct for repeated tree structure.
pub struct GrossNegNetSupplyUnrealizedPattern {
pub gross_pnl: CentsUsdPattern,
pub neg_unrealized_loss: MetricPattern1<Dollars>,
pub net_unrealized_pnl: CentsUsdPattern,
pub supply_in_loss: BtcCentsSatsUsdPattern,
pub supply_in_profit: BtcCentsSatsUsdPattern,
pub unrealized_loss: CentsUsdPattern,
pub unrealized_profit: CentsUsdPattern,
}
impl GrossNegNetSupplyUnrealizedPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
gross_pnl: CentsUsdPattern::new(client.clone(), _m(&acc, "unrealized_gross_pnl")),
neg_unrealized_loss: MetricPattern1::new(client.clone(), _m(&acc, "neg_unrealized_loss")),
net_unrealized_pnl: CentsUsdPattern::new(client.clone(), _m(&acc, "net_unrealized_pnl")),
supply_in_loss: BtcCentsSatsUsdPattern::new(client.clone(), _m(&acc, "supply_in_loss")),
supply_in_profit: BtcCentsSatsUsdPattern::new(client.clone(), _m(&acc, "supply_in_profit")),
unrealized_loss: CentsUsdPattern::new(client.clone(), _m(&acc, "unrealized_loss")),
unrealized_profit: CentsUsdPattern::new(client.clone(), _m(&acc, "unrealized_profit")),
}
}
}
/// Pattern struct for repeated tree structure. /// Pattern struct for repeated tree structure.
pub struct MvrvRealizedPattern { pub struct MvrvRealizedPattern {
pub mvrv: MetricPattern1<StoredF32>, pub mvrv: MetricPattern1<StoredF32>,
@@ -1957,38 +1919,14 @@ impl MvrvRealizedPattern {
} }
} }
/// Pattern struct for repeated tree structure.
pub struct _1m1w1y24hBaseCumulativePattern {
pub _1m: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2,
pub _1w: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2,
pub _1y: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2,
pub _24h: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2,
pub base: BtcCentsSatsUsdPattern,
pub cumulative: BtcCentsSatsUsdPattern,
}
impl _1m1w1y24hBaseCumulativePattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
_1m: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2::new(client.clone(), _m(&acc, "1m")),
_1w: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2::new(client.clone(), _m(&acc, "1w")),
_1y: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2::new(client.clone(), _m(&acc, "1y")),
_24h: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2::new(client.clone(), _m(&acc, "24h")),
base: BtcCentsSatsUsdPattern::new(client.clone(), acc.clone()),
cumulative: BtcCentsSatsUsdPattern::new(client.clone(), _m(&acc, "cumulative")),
}
}
}
/// Pattern struct for repeated tree structure. /// Pattern struct for repeated tree structure.
pub struct ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 { pub struct ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 {
pub activity: SentPattern, pub activity: SentPattern,
pub outputs: UtxoPattern, pub outputs: UtxoPattern,
pub realized: GrossMvrvNegNetRealizedSentSoprValuePattern, pub realized: MvrvNegNetRealizedSentSoprValuePattern,
pub relative: SupplyPattern3, pub relative: SupplyPattern3,
pub supply: ChangeHalvedTotalPattern, pub supply: ChangeHalvedTotalPattern,
pub unrealized: GrossNegNetSupplyUnrealizedPattern, pub unrealized: NegNetSupplyUnrealizedPattern,
} }
impl ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 { impl ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 {
@@ -1997,10 +1935,10 @@ impl ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 {
Self { Self {
activity: SentPattern::new(client.clone(), _m(&acc, "sent")), activity: SentPattern::new(client.clone(), _m(&acc, "sent")),
outputs: UtxoPattern::new(client.clone(), _m(&acc, "utxo_count")), outputs: UtxoPattern::new(client.clone(), _m(&acc, "utxo_count")),
realized: GrossMvrvNegNetRealizedSentSoprValuePattern::new(client.clone(), acc.clone()), realized: MvrvNegNetRealizedSentSoprValuePattern::new(client.clone(), acc.clone()),
relative: SupplyPattern3::new(client.clone(), _m(&acc, "supply")), relative: SupplyPattern3::new(client.clone(), _m(&acc, "supply")),
supply: ChangeHalvedTotalPattern::new(client.clone(), _m(&acc, "supply")), supply: ChangeHalvedTotalPattern::new(client.clone(), _m(&acc, "supply")),
unrealized: GrossNegNetSupplyUnrealizedPattern::new(client.clone(), acc.clone()), unrealized: NegNetSupplyUnrealizedPattern::new(client.clone(), acc.clone()),
} }
} }
} }
@@ -2030,25 +1968,25 @@ impl ActivityOutputsRealizedRelativeSupplyUnrealizedPattern {
} }
/// Pattern struct for repeated tree structure. /// Pattern struct for repeated tree structure.
pub struct BalanceBothReactivatedReceivingSendingPattern { pub struct NegNetSupplyUnrealizedPattern {
pub balance_decreased: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<StoredU32>, pub neg_unrealized_loss: MetricPattern1<Dollars>,
pub balance_increased: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<StoredU32>, pub net_unrealized_pnl: CentsUsdPattern,
pub both: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<StoredU32>, pub supply_in_loss: BtcCentsSatsUsdPattern,
pub reactivated: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<StoredU32>, pub supply_in_profit: BtcCentsSatsUsdPattern,
pub receiving: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<StoredU32>, pub unrealized_loss: CentsUsdPattern,
pub sending: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<StoredU32>, pub unrealized_profit: CentsUsdPattern,
} }
impl BalanceBothReactivatedReceivingSendingPattern { impl NegNetSupplyUnrealizedPattern {
/// Create a new pattern node with accumulated metric name. /// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self { pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self { Self {
balance_decreased: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern::new(client.clone(), _m(&acc, "balance_decreased")), neg_unrealized_loss: MetricPattern1::new(client.clone(), _m(&acc, "neg_unrealized_loss")),
balance_increased: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern::new(client.clone(), _m(&acc, "balance_increased")), net_unrealized_pnl: CentsUsdPattern::new(client.clone(), _m(&acc, "net_unrealized_pnl")),
both: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern::new(client.clone(), _m(&acc, "both")), supply_in_loss: BtcCentsSatsUsdPattern::new(client.clone(), _m(&acc, "supply_in_loss")),
reactivated: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern::new(client.clone(), _m(&acc, "reactivated")), supply_in_profit: BtcCentsSatsUsdPattern::new(client.clone(), _m(&acc, "supply_in_profit")),
receiving: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern::new(client.clone(), _m(&acc, "receiving")), unrealized_loss: CentsUsdPattern::new(client.clone(), _m(&acc, "unrealized_loss")),
sending: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern::new(client.clone(), _m(&acc, "sending")), unrealized_profit: CentsUsdPattern::new(client.clone(), _m(&acc, "unrealized_profit")),
} }
} }
} }
@@ -2119,6 +2057,28 @@ impl SupplyPattern3 {
} }
} }
/// Pattern struct for repeated tree structure.
pub struct _1m1w1y24hHeightPattern<T> {
pub _1m: MetricPattern1<T>,
pub _1w: MetricPattern1<T>,
pub _1y: MetricPattern1<T>,
pub _24h: MetricPattern1<T>,
pub height: MetricPattern18<T>,
}
impl<T: DeserializeOwned> _1m1w1y24hHeightPattern<T> {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
_1m: MetricPattern1::new(client.clone(), _m(&acc, "average_1m")),
_1w: MetricPattern1::new(client.clone(), _m(&acc, "average_1w")),
_1y: MetricPattern1::new(client.clone(), _m(&acc, "average_1y")),
_24h: MetricPattern1::new(client.clone(), _m(&acc, "average_24h")),
height: MetricPattern18::new(client.clone(), acc.clone()),
}
}
}
/// Pattern struct for repeated tree structure. /// Pattern struct for repeated tree structure.
pub struct _1m1w1y24hPattern6 { pub struct _1m1w1y24hPattern6 {
pub _1m: BaseBtcCentsSatsUsdPattern, pub _1m: BaseBtcCentsSatsUsdPattern,
@@ -2179,6 +2139,26 @@ impl _1m1w1y24hPattern5 {
} }
} }
/// Pattern struct for repeated tree structure.
pub struct BothReactivatedReceivingSendingPattern {
pub both: _1m1w1y24hHeightPattern<StoredU32>,
pub reactivated: _1m1w1y24hHeightPattern<StoredU32>,
pub receiving: _1m1w1y24hHeightPattern<StoredU32>,
pub sending: _1m1w1y24hHeightPattern<StoredU32>,
}
impl BothReactivatedReceivingSendingPattern {
/// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self {
both: _1m1w1y24hHeightPattern::new(client.clone(), _m(&acc, "both")),
reactivated: _1m1w1y24hHeightPattern::new(client.clone(), _m(&acc, "reactivated")),
receiving: _1m1w1y24hHeightPattern::new(client.clone(), _m(&acc, "receiving")),
sending: _1m1w1y24hHeightPattern::new(client.clone(), _m(&acc, "sending")),
}
}
}
/// Pattern struct for repeated tree structure. /// Pattern struct for repeated tree structure.
pub struct BtcCentsSatsUsdPattern { pub struct BtcCentsSatsUsdPattern {
pub btc: MetricPattern1<Bitcoin>, pub btc: MetricPattern1<Bitcoin>,
@@ -2298,13 +2278,13 @@ impl BaseCumulativeSumPattern {
} }
/// Pattern struct for repeated tree structure. /// Pattern struct for repeated tree structure.
pub struct BpsPercentRatioPattern2 { pub struct BpsPercentRatioPattern3 {
pub bps: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<BasisPoints16>, pub bps: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern,
pub percent: MetricPattern1<StoredF32>, pub percent: MetricPattern1<StoredF32>,
pub ratio: MetricPattern1<StoredF32>, pub ratio: MetricPattern1<StoredF32>,
} }
impl BpsPercentRatioPattern2 { impl BpsPercentRatioPattern3 {
/// Create a new pattern node with accumulated metric name. /// Create a new pattern node with accumulated metric name.
pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self { pub fn new(client: Arc<BrkClientBase>, acc: String) -> Self {
Self { Self {
@@ -2732,11 +2712,11 @@ pub struct MetricsTree_Blocks {
pub total_size: MetricPattern18<StoredU64>, pub total_size: MetricPattern18<StoredU64>,
pub weight: MetricsTree_Blocks_Weight, pub weight: MetricsTree_Blocks_Weight,
pub count: MetricsTree_Blocks_Count, pub count: MetricsTree_Blocks_Count,
pub interval: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<Timestamp>, pub interval: _1m1w1y24hHeightPattern<Timestamp>,
pub halving: MetricsTree_Blocks_Halving, pub halving: MetricsTree_Blocks_Halving,
pub vbytes: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern, pub vbytes: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern,
pub size: MetricsTree_Blocks_Size, pub size: MetricsTree_Blocks_Size,
pub fullness: BpsPercentRatioPattern2, pub fullness: MetricsTree_Blocks_Fullness,
} }
impl MetricsTree_Blocks { impl MetricsTree_Blocks {
@@ -2748,11 +2728,11 @@ impl MetricsTree_Blocks {
total_size: MetricPattern18::new(client.clone(), "total_size".to_string()), total_size: MetricPattern18::new(client.clone(), "total_size".to_string()),
weight: MetricsTree_Blocks_Weight::new(client.clone(), format!("{base_path}_weight")), weight: MetricsTree_Blocks_Weight::new(client.clone(), format!("{base_path}_weight")),
count: MetricsTree_Blocks_Count::new(client.clone(), format!("{base_path}_count")), count: MetricsTree_Blocks_Count::new(client.clone(), format!("{base_path}_count")),
interval: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern::new(client.clone(), "block_interval".to_string()), interval: _1m1w1y24hHeightPattern::new(client.clone(), "block_interval".to_string()),
halving: MetricsTree_Blocks_Halving::new(client.clone(), format!("{base_path}_halving")), halving: MetricsTree_Blocks_Halving::new(client.clone(), format!("{base_path}_halving")),
vbytes: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern::new(client.clone(), "block_vbytes".to_string()), vbytes: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern::new(client.clone(), "block_vbytes".to_string()),
size: MetricsTree_Blocks_Size::new(client.clone(), format!("{base_path}_size")), size: MetricsTree_Blocks_Size::new(client.clone(), format!("{base_path}_size")),
fullness: BpsPercentRatioPattern2::new(client.clone(), "block_fullness".to_string()), fullness: MetricsTree_Blocks_Fullness::new(client.clone(), format!("{base_path}_fullness")),
} }
} }
} }
@@ -2981,6 +2961,23 @@ impl MetricsTree_Blocks_Size {
} }
} }
/// Metrics tree node.
pub struct MetricsTree_Blocks_Fullness {
pub bps: _1m1w1y24hHeightPattern<BasisPoints16>,
pub ratio: MetricPattern1<StoredF32>,
pub percent: MetricPattern1<StoredF32>,
}
impl MetricsTree_Blocks_Fullness {
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
Self {
bps: _1m1w1y24hHeightPattern::new(client.clone(), "block_fullness_bps".to_string()),
ratio: MetricPattern1::new(client.clone(), "block_fullness_ratio".to_string()),
percent: MetricPattern1::new(client.clone(), "block_fullness".to_string()),
}
}
}
/// Metrics tree node. /// Metrics tree node.
pub struct MetricsTree_Transactions { pub struct MetricsTree_Transactions {
pub first_txindex: MetricPattern18<TxIndex>, pub first_txindex: MetricPattern18<TxIndex>,
@@ -3319,13 +3316,13 @@ impl MetricsTree_Scripts_Count {
/// Metrics tree node. /// Metrics tree node.
pub struct MetricsTree_Scripts_Value { pub struct MetricsTree_Scripts_Value {
pub opreturn: _1m1w1y24hBaseCumulativePattern, pub opreturn: BaseCumulativePattern,
} }
impl MetricsTree_Scripts_Value { impl MetricsTree_Scripts_Value {
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self { pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
Self { Self {
opreturn: _1m1w1y24hBaseCumulativePattern::new(client.clone(), "opreturn_value".to_string()), opreturn: BaseCumulativePattern::new(client.clone(), "opreturn_value".to_string()),
} }
} }
} }
@@ -3362,9 +3359,9 @@ impl MetricsTree_Mining {
/// Metrics tree node. /// Metrics tree node.
pub struct MetricsTree_Mining_Rewards { pub struct MetricsTree_Mining_Rewards {
pub coinbase: _1m1w1y24hBaseCumulativePattern, pub coinbase: BaseCumulativeSumPattern,
pub subsidy: _1m1w1y24hBaseCumulativePattern, pub subsidy: BaseCumulativePattern,
pub fees: _1m1w1y24hBaseCumulativePattern, pub fees: MetricsTree_Mining_Rewards_Fees,
pub unclaimed_rewards: BaseCumulativeSumPattern, pub unclaimed_rewards: BaseCumulativeSumPattern,
pub fee_dominance: BpsPercentRatioPattern, pub fee_dominance: BpsPercentRatioPattern,
pub fee_dominance_rolling: _1m1w1y24hPattern2, pub fee_dominance_rolling: _1m1w1y24hPattern2,
@@ -3376,9 +3373,9 @@ pub struct MetricsTree_Mining_Rewards {
impl MetricsTree_Mining_Rewards { impl MetricsTree_Mining_Rewards {
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self { pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
Self { Self {
coinbase: _1m1w1y24hBaseCumulativePattern::new(client.clone(), "coinbase".to_string()), coinbase: BaseCumulativeSumPattern::new(client.clone(), "coinbase".to_string()),
subsidy: _1m1w1y24hBaseCumulativePattern::new(client.clone(), "subsidy".to_string()), subsidy: BaseCumulativePattern::new(client.clone(), "subsidy".to_string()),
fees: _1m1w1y24hBaseCumulativePattern::new(client.clone(), "fees".to_string()), fees: MetricsTree_Mining_Rewards_Fees::new(client.clone(), format!("{base_path}_fees")),
unclaimed_rewards: BaseCumulativeSumPattern::new(client.clone(), "unclaimed_rewards".to_string()), unclaimed_rewards: BaseCumulativeSumPattern::new(client.clone(), "unclaimed_rewards".to_string()),
fee_dominance: BpsPercentRatioPattern::new(client.clone(), "fee_dominance".to_string()), fee_dominance: BpsPercentRatioPattern::new(client.clone(), "fee_dominance".to_string()),
fee_dominance_rolling: _1m1w1y24hPattern2::new(client.clone(), "fee_dominance".to_string()), fee_dominance_rolling: _1m1w1y24hPattern2::new(client.clone(), "fee_dominance".to_string()),
@@ -3389,6 +3386,29 @@ impl MetricsTree_Mining_Rewards {
} }
} }
/// Metrics tree node.
pub struct MetricsTree_Mining_Rewards_Fees {
pub base: BtcCentsSatsUsdPattern,
pub cumulative: BtcCentsSatsUsdPattern,
pub _24h: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2,
pub _1w: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2,
pub _1m: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2,
pub _1y: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2,
}
impl MetricsTree_Mining_Rewards_Fees {
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
Self {
base: BtcCentsSatsUsdPattern::new(client.clone(), "fees".to_string()),
cumulative: BtcCentsSatsUsdPattern::new(client.clone(), "fees_cumulative".to_string()),
_24h: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2::new(client.clone(), "fees_24h".to_string()),
_1w: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2::new(client.clone(), "fees_1w".to_string()),
_1m: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2::new(client.clone(), "fees_1m".to_string()),
_1y: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2::new(client.clone(), "fees_1y".to_string()),
}
}
}
/// Metrics tree node. /// Metrics tree node.
pub struct MetricsTree_Mining_Hashrate { pub struct MetricsTree_Mining_Hashrate {
pub hash_rate: MetricPattern1<StoredF64>, pub hash_rate: MetricPattern1<StoredF64>,
@@ -5552,7 +5572,6 @@ pub struct MetricsTree_Distribution_UtxoCohorts_All_Relative {
pub unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern, pub unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern,
pub unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern, pub unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern,
pub net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern, pub net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern,
pub neg_unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern,
pub nupl: MetricPattern1<StoredF32>, pub nupl: MetricPattern1<StoredF32>,
pub invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern, pub invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern,
pub invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern, pub invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern,
@@ -5560,7 +5579,6 @@ pub struct MetricsTree_Distribution_UtxoCohorts_All_Relative {
pub supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern, pub supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern,
pub unrealized_profit_rel_to_own_gross_pnl: BpsPercentRatioPattern, pub unrealized_profit_rel_to_own_gross_pnl: BpsPercentRatioPattern,
pub unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern, pub unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern,
pub neg_unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern,
pub net_unrealized_pnl_rel_to_own_gross_pnl: BpsPercentRatioPattern, pub net_unrealized_pnl_rel_to_own_gross_pnl: BpsPercentRatioPattern,
} }
@@ -5570,7 +5588,6 @@ impl MetricsTree_Distribution_UtxoCohorts_All_Relative {
unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), "unrealized_profit_rel_to_market_cap".to_string()), unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), "unrealized_profit_rel_to_market_cap".to_string()),
unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), "unrealized_loss_rel_to_market_cap".to_string()), unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), "unrealized_loss_rel_to_market_cap".to_string()),
net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), "net_unrealized_pnl_rel_to_market_cap".to_string()), net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), "net_unrealized_pnl_rel_to_market_cap".to_string()),
neg_unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern::new(client.clone(), "neg_unrealized_loss_rel_to_market_cap".to_string()),
nupl: MetricPattern1::new(client.clone(), "nupl".to_string()), nupl: MetricPattern1::new(client.clone(), "nupl".to_string()),
invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern::new(client.clone(), "invested_capital_in_profit_rel_to_realized_cap".to_string()), invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern::new(client.clone(), "invested_capital_in_profit_rel_to_realized_cap".to_string()),
invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern::new(client.clone(), "invested_capital_in_loss_rel_to_realized_cap".to_string()), invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern::new(client.clone(), "invested_capital_in_loss_rel_to_realized_cap".to_string()),
@@ -5578,7 +5595,6 @@ impl MetricsTree_Distribution_UtxoCohorts_All_Relative {
supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern::new(client.clone(), "supply_in_loss_rel_to_own_supply".to_string()), supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern::new(client.clone(), "supply_in_loss_rel_to_own_supply".to_string()),
unrealized_profit_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), "unrealized_profit_rel_to_own_gross_pnl".to_string()), unrealized_profit_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), "unrealized_profit_rel_to_own_gross_pnl".to_string()),
unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), "unrealized_loss_rel_to_own_gross_pnl".to_string()), unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), "unrealized_loss_rel_to_own_gross_pnl".to_string()),
neg_unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), "neg_unrealized_loss_rel_to_own_gross_pnl".to_string()),
net_unrealized_pnl_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), "net_unrealized_pnl_rel_to_own_gross_pnl".to_string()), net_unrealized_pnl_rel_to_own_gross_pnl: BpsPercentRatioPattern::new(client.clone(), "net_unrealized_pnl_rel_to_own_gross_pnl".to_string()),
} }
} }
@@ -5592,7 +5608,7 @@ pub struct MetricsTree_Distribution_UtxoCohorts_Sth {
pub realized: CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern, pub realized: CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern,
pub cost_basis: InvestedMaxMinPercentilesPattern, pub cost_basis: InvestedMaxMinPercentilesPattern,
pub unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern, pub unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern,
pub relative: InvestedNegNetNuplSupplyUnrealizedPattern3, pub relative: InvestedNetNuplSupplyUnrealizedPattern3,
pub dormancy: MetricPattern1<StoredF32>, pub dormancy: MetricPattern1<StoredF32>,
pub velocity: MetricPattern1<StoredF32>, pub velocity: MetricPattern1<StoredF32>,
pub adjusted_value_created: MetricPattern1<Cents>, pub adjusted_value_created: MetricPattern1<Cents>,
@@ -5612,7 +5628,7 @@ impl MetricsTree_Distribution_UtxoCohorts_Sth {
realized: CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern::new(client.clone(), "sth".to_string()), realized: CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern::new(client.clone(), "sth".to_string()),
cost_basis: InvestedMaxMinPercentilesPattern::new(client.clone(), "sth".to_string()), cost_basis: InvestedMaxMinPercentilesPattern::new(client.clone(), "sth".to_string()),
unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern::new(client.clone(), "sth".to_string()), unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern::new(client.clone(), "sth".to_string()),
relative: InvestedNegNetNuplSupplyUnrealizedPattern3::new(client.clone(), "sth".to_string()), relative: InvestedNetNuplSupplyUnrealizedPattern3::new(client.clone(), "sth".to_string()),
dormancy: MetricPattern1::new(client.clone(), "sth_dormancy".to_string()), dormancy: MetricPattern1::new(client.clone(), "sth_dormancy".to_string()),
velocity: MetricPattern1::new(client.clone(), "sth_velocity".to_string()), velocity: MetricPattern1::new(client.clone(), "sth_velocity".to_string()),
adjusted_value_created: MetricPattern1::new(client.clone(), "sth_adjusted_value_created".to_string()), adjusted_value_created: MetricPattern1::new(client.clone(), "sth_adjusted_value_created".to_string()),
@@ -5633,7 +5649,7 @@ pub struct MetricsTree_Distribution_UtxoCohorts_Lth {
pub realized: CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern, pub realized: CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern,
pub cost_basis: InvestedMaxMinPercentilesPattern, pub cost_basis: InvestedMaxMinPercentilesPattern,
pub unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern, pub unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern,
pub relative: InvestedNegNetNuplSupplyUnrealizedPattern3, pub relative: InvestedNetNuplSupplyUnrealizedPattern3,
pub dormancy: MetricPattern1<StoredF32>, pub dormancy: MetricPattern1<StoredF32>,
pub velocity: MetricPattern1<StoredF32>, pub velocity: MetricPattern1<StoredF32>,
} }
@@ -5647,7 +5663,7 @@ impl MetricsTree_Distribution_UtxoCohorts_Lth {
realized: CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern::new(client.clone(), "lth".to_string()), realized: CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern::new(client.clone(), "lth".to_string()),
cost_basis: InvestedMaxMinPercentilesPattern::new(client.clone(), "lth".to_string()), cost_basis: InvestedMaxMinPercentilesPattern::new(client.clone(), "lth".to_string()),
unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern::new(client.clone(), "lth".to_string()), unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern::new(client.clone(), "lth".to_string()),
relative: InvestedNegNetNuplSupplyUnrealizedPattern3::new(client.clone(), "lth".to_string()), relative: InvestedNetNuplSupplyUnrealizedPattern3::new(client.clone(), "lth".to_string()),
dormancy: MetricPattern1::new(client.clone(), "lth_dormancy".to_string()), dormancy: MetricPattern1::new(client.clone(), "lth_dormancy".to_string()),
velocity: MetricPattern1::new(client.clone(), "lth_velocity".to_string()), velocity: MetricPattern1::new(client.clone(), "lth_velocity".to_string()),
} }
@@ -6151,29 +6167,29 @@ impl MetricsTree_Distribution_AddressCohorts_LtAmount {
/// Metrics tree node. /// Metrics tree node.
pub struct MetricsTree_Distribution_AddressActivity { pub struct MetricsTree_Distribution_AddressActivity {
pub all: BalanceBothReactivatedReceivingSendingPattern, pub all: BothReactivatedReceivingSendingPattern,
pub p2pk65: BalanceBothReactivatedReceivingSendingPattern, pub p2pk65: BothReactivatedReceivingSendingPattern,
pub p2pk33: BalanceBothReactivatedReceivingSendingPattern, pub p2pk33: BothReactivatedReceivingSendingPattern,
pub p2pkh: BalanceBothReactivatedReceivingSendingPattern, pub p2pkh: BothReactivatedReceivingSendingPattern,
pub p2sh: BalanceBothReactivatedReceivingSendingPattern, pub p2sh: BothReactivatedReceivingSendingPattern,
pub p2wpkh: BalanceBothReactivatedReceivingSendingPattern, pub p2wpkh: BothReactivatedReceivingSendingPattern,
pub p2wsh: BalanceBothReactivatedReceivingSendingPattern, pub p2wsh: BothReactivatedReceivingSendingPattern,
pub p2tr: BalanceBothReactivatedReceivingSendingPattern, pub p2tr: BothReactivatedReceivingSendingPattern,
pub p2a: BalanceBothReactivatedReceivingSendingPattern, pub p2a: BothReactivatedReceivingSendingPattern,
} }
impl MetricsTree_Distribution_AddressActivity { impl MetricsTree_Distribution_AddressActivity {
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self { pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
Self { Self {
all: BalanceBothReactivatedReceivingSendingPattern::new(client.clone(), "address_activity".to_string()), all: BothReactivatedReceivingSendingPattern::new(client.clone(), "address_activity".to_string()),
p2pk65: BalanceBothReactivatedReceivingSendingPattern::new(client.clone(), "p2pk65_address_activity".to_string()), p2pk65: BothReactivatedReceivingSendingPattern::new(client.clone(), "p2pk65_address_activity".to_string()),
p2pk33: BalanceBothReactivatedReceivingSendingPattern::new(client.clone(), "p2pk33_address_activity".to_string()), p2pk33: BothReactivatedReceivingSendingPattern::new(client.clone(), "p2pk33_address_activity".to_string()),
p2pkh: BalanceBothReactivatedReceivingSendingPattern::new(client.clone(), "p2pkh_address_activity".to_string()), p2pkh: BothReactivatedReceivingSendingPattern::new(client.clone(), "p2pkh_address_activity".to_string()),
p2sh: BalanceBothReactivatedReceivingSendingPattern::new(client.clone(), "p2sh_address_activity".to_string()), p2sh: BothReactivatedReceivingSendingPattern::new(client.clone(), "p2sh_address_activity".to_string()),
p2wpkh: BalanceBothReactivatedReceivingSendingPattern::new(client.clone(), "p2wpkh_address_activity".to_string()), p2wpkh: BothReactivatedReceivingSendingPattern::new(client.clone(), "p2wpkh_address_activity".to_string()),
p2wsh: BalanceBothReactivatedReceivingSendingPattern::new(client.clone(), "p2wsh_address_activity".to_string()), p2wsh: BothReactivatedReceivingSendingPattern::new(client.clone(), "p2wsh_address_activity".to_string()),
p2tr: BalanceBothReactivatedReceivingSendingPattern::new(client.clone(), "p2tr_address_activity".to_string()), p2tr: BothReactivatedReceivingSendingPattern::new(client.clone(), "p2tr_address_activity".to_string()),
p2a: BalanceBothReactivatedReceivingSendingPattern::new(client.clone(), "p2a_address_activity".to_string()), p2a: BothReactivatedReceivingSendingPattern::new(client.clone(), "p2a_address_activity".to_string()),
} }
} }
} }
@@ -6238,29 +6254,29 @@ impl MetricsTree_Distribution_NewAddrCount {
/// Metrics tree node. /// Metrics tree node.
pub struct MetricsTree_Distribution_GrowthRate { pub struct MetricsTree_Distribution_GrowthRate {
pub all: BpsPercentRatioPattern2, pub all: BpsPercentRatioPattern3,
pub p2pk65: BpsPercentRatioPattern2, pub p2pk65: BpsPercentRatioPattern3,
pub p2pk33: BpsPercentRatioPattern2, pub p2pk33: BpsPercentRatioPattern3,
pub p2pkh: BpsPercentRatioPattern2, pub p2pkh: BpsPercentRatioPattern3,
pub p2sh: BpsPercentRatioPattern2, pub p2sh: BpsPercentRatioPattern3,
pub p2wpkh: BpsPercentRatioPattern2, pub p2wpkh: BpsPercentRatioPattern3,
pub p2wsh: BpsPercentRatioPattern2, pub p2wsh: BpsPercentRatioPattern3,
pub p2tr: BpsPercentRatioPattern2, pub p2tr: BpsPercentRatioPattern3,
pub p2a: BpsPercentRatioPattern2, pub p2a: BpsPercentRatioPattern3,
} }
impl MetricsTree_Distribution_GrowthRate { impl MetricsTree_Distribution_GrowthRate {
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self { pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
Self { Self {
all: BpsPercentRatioPattern2::new(client.clone(), "growth_rate".to_string()), all: BpsPercentRatioPattern3::new(client.clone(), "growth_rate".to_string()),
p2pk65: BpsPercentRatioPattern2::new(client.clone(), "p2pk65_growth_rate".to_string()), p2pk65: BpsPercentRatioPattern3::new(client.clone(), "p2pk65_growth_rate".to_string()),
p2pk33: BpsPercentRatioPattern2::new(client.clone(), "p2pk33_growth_rate".to_string()), p2pk33: BpsPercentRatioPattern3::new(client.clone(), "p2pk33_growth_rate".to_string()),
p2pkh: BpsPercentRatioPattern2::new(client.clone(), "p2pkh_growth_rate".to_string()), p2pkh: BpsPercentRatioPattern3::new(client.clone(), "p2pkh_growth_rate".to_string()),
p2sh: BpsPercentRatioPattern2::new(client.clone(), "p2sh_growth_rate".to_string()), p2sh: BpsPercentRatioPattern3::new(client.clone(), "p2sh_growth_rate".to_string()),
p2wpkh: BpsPercentRatioPattern2::new(client.clone(), "p2wpkh_growth_rate".to_string()), p2wpkh: BpsPercentRatioPattern3::new(client.clone(), "p2wpkh_growth_rate".to_string()),
p2wsh: BpsPercentRatioPattern2::new(client.clone(), "p2wsh_growth_rate".to_string()), p2wsh: BpsPercentRatioPattern3::new(client.clone(), "p2wsh_growth_rate".to_string()),
p2tr: BpsPercentRatioPattern2::new(client.clone(), "p2tr_growth_rate".to_string()), p2tr: BpsPercentRatioPattern3::new(client.clone(), "p2tr_growth_rate".to_string()),
p2a: BpsPercentRatioPattern2::new(client.clone(), "p2a_growth_rate".to_string()), p2a: BpsPercentRatioPattern3::new(client.clone(), "p2a_growth_rate".to_string()),
} }
} }
} }
@@ -3,7 +3,7 @@ use brk_types::Version;
use vecdb::Database; use vecdb::Database;
use super::Vecs; use super::Vecs;
use crate::{indexes, internal::ComputedFromHeightDistribution}; use crate::{indexes, internal::ComputedFromHeightRollingAverage};
impl Vecs { impl Vecs {
pub(crate) fn forced_import( pub(crate) fn forced_import(
@@ -11,8 +11,12 @@ impl Vecs {
version: Version, version: Version,
indexes: &indexes::Vecs, indexes: &indexes::Vecs,
) -> Result<Self> { ) -> Result<Self> {
let interval = let interval = ComputedFromHeightRollingAverage::forced_import(
ComputedFromHeightDistribution::forced_import(db, "block_interval", version, indexes)?; db,
"block_interval",
version,
indexes,
)?;
Ok(Self(interval)) Ok(Self(interval))
} }
@@ -4,9 +4,9 @@ use brk_traversable::Traversable;
use brk_types::Timestamp; use brk_types::Timestamp;
use vecdb::{Rw, StorageMode}; use vecdb::{Rw, StorageMode};
use crate::internal::ComputedFromHeightDistribution; use crate::internal::ComputedFromHeightRollingAverage;
#[derive(Deref, DerefMut, Traversable)] #[derive(Deref, DerefMut, Traversable)]
pub struct Vecs<M: StorageMode = Rw>( pub struct Vecs<M: StorageMode = Rw>(
#[traversable(flatten)] pub ComputedFromHeightDistribution<Timestamp, M>, #[traversable(flatten)] pub ComputedFromHeightRollingAverage<Timestamp, M>,
); );
@@ -5,7 +5,7 @@ use vecdb::Database;
use super::Vecs; use super::Vecs;
use crate::{ use crate::{
indexes, indexes,
internal::{ComputedHeightDerivedFull, PercentFromHeightDistribution}, internal::{ComputedHeightDerivedFull, PercentFromHeightRollingAverage},
}; };
impl Vecs { impl Vecs {
@@ -17,8 +17,12 @@ impl Vecs {
let weight = let weight =
ComputedHeightDerivedFull::forced_import(db, "block_weight", version, indexes)?; ComputedHeightDerivedFull::forced_import(db, "block_weight", version, indexes)?;
let fullness = let fullness = PercentFromHeightRollingAverage::forced_import(
PercentFromHeightDistribution::forced_import(db, "block_fullness", version, indexes)?; db,
"block_fullness",
version,
indexes,
)?;
Ok(Self { weight, fullness }) Ok(Self { weight, fullness })
} }
@@ -2,10 +2,10 @@ use brk_traversable::Traversable;
use brk_types::{BasisPoints16, Weight}; use brk_types::{BasisPoints16, Weight};
use vecdb::{Rw, StorageMode}; use vecdb::{Rw, StorageMode};
use crate::internal::{ComputedHeightDerivedFull, PercentFromHeightDistribution}; use crate::internal::{ComputedHeightDerivedFull, PercentFromHeightRollingAverage};
#[derive(Traversable)] #[derive(Traversable)]
pub struct Vecs<M: StorageMode = Rw> { pub struct Vecs<M: StorageMode = Rw> {
pub weight: ComputedHeightDerivedFull<Weight, M>, pub weight: ComputedHeightDerivedFull<Weight, M>,
pub fullness: PercentFromHeightDistribution<BasisPoints16, M>, pub fullness: PercentFromHeightRollingAverage<BasisPoints16, M>,
} }
@@ -8,11 +8,6 @@
//! | `sending` | Unique addresses that sent this block | //! | `sending` | Unique addresses that sent this block |
//! | `reactivated` | Addresses that were empty and now have funds | //! | `reactivated` | Addresses that were empty and now have funds |
//! | `both` | Addresses that both sent AND received same block | //! | `both` | Addresses that both sent AND received same block |
//! | `balance_increased` | Receive-only addresses (balance definitely increased) |
//! | `balance_decreased` | Send-only addresses (balance definitely decreased) |
//!
//! Note: `balance_increased` and `balance_decreased` exclude "both" addresses
//! since their net balance change requires more complex tracking.
use brk_cohort::ByAddressType; use brk_cohort::ByAddressType;
use brk_error::Result; use brk_error::Result;
@@ -24,14 +19,10 @@ use vecdb::{AnyStoredVec, AnyVec, Database, Exit, Rw, StorageMode, WritableVec};
use crate::{ use crate::{
indexes, indexes,
internal::{ComputedFromHeightDistribution, WindowStarts}, internal::{ComputedFromHeightRollingAverage, WindowStarts},
}; };
/// Per-block activity counts - reset each block. /// Per-block activity counts - reset each block.
///
/// Note: `balance_increased` and `balance_decreased` are derived:
/// - `balance_increased = receiving - both` (receive-only addresses)
/// - `balance_decreased = sending - both` (send-only addresses)
#[derive(Debug, Default, Clone)] #[derive(Debug, Default, Clone)]
pub struct BlockActivityCounts { pub struct BlockActivityCounts {
pub reactivated: u32, pub reactivated: u32,
@@ -74,12 +65,10 @@ impl AddressTypeToActivityCounts {
/// Activity count vectors for a single category (e.g., one address type or "all"). /// Activity count vectors for a single category (e.g., one address type or "all").
#[derive(Traversable)] #[derive(Traversable)]
pub struct ActivityCountVecs<M: StorageMode = Rw> { pub struct ActivityCountVecs<M: StorageMode = Rw> {
pub reactivated: ComputedFromHeightDistribution<StoredU32, M>, pub reactivated: ComputedFromHeightRollingAverage<StoredU32, M>,
pub sending: ComputedFromHeightDistribution<StoredU32, M>, pub sending: ComputedFromHeightRollingAverage<StoredU32, M>,
pub receiving: ComputedFromHeightDistribution<StoredU32, M>, pub receiving: ComputedFromHeightRollingAverage<StoredU32, M>,
pub balance_increased: ComputedFromHeightDistribution<StoredU32, M>, pub both: ComputedFromHeightRollingAverage<StoredU32, M>,
pub balance_decreased: ComputedFromHeightDistribution<StoredU32, M>,
pub both: ComputedFromHeightDistribution<StoredU32, M>,
} }
impl ActivityCountVecs { impl ActivityCountVecs {
@@ -90,37 +79,25 @@ impl ActivityCountVecs {
indexes: &indexes::Vecs, indexes: &indexes::Vecs,
) -> Result<Self> { ) -> Result<Self> {
Ok(Self { Ok(Self {
reactivated: ComputedFromHeightDistribution::forced_import( reactivated: ComputedFromHeightRollingAverage::forced_import(
db, db,
&format!("{name}_reactivated"), &format!("{name}_reactivated"),
version, version,
indexes, indexes,
)?, )?,
sending: ComputedFromHeightDistribution::forced_import( sending: ComputedFromHeightRollingAverage::forced_import(
db, db,
&format!("{name}_sending"), &format!("{name}_sending"),
version, version,
indexes, indexes,
)?, )?,
receiving: ComputedFromHeightDistribution::forced_import( receiving: ComputedFromHeightRollingAverage::forced_import(
db, db,
&format!("{name}_receiving"), &format!("{name}_receiving"),
version, version,
indexes, indexes,
)?, )?,
balance_increased: ComputedFromHeightDistribution::forced_import( both: ComputedFromHeightRollingAverage::forced_import(
db,
&format!("{name}_balance_increased"),
version,
indexes,
)?,
balance_decreased: ComputedFromHeightDistribution::forced_import(
db,
&format!("{name}_balance_decreased"),
version,
indexes,
)?,
both: ComputedFromHeightDistribution::forced_import(
db, db,
&format!("{name}_both"), &format!("{name}_both"),
version, version,
@@ -135,8 +112,6 @@ impl ActivityCountVecs {
.len() .len()
.min(self.sending.height.len()) .min(self.sending.height.len())
.min(self.receiving.height.len()) .min(self.receiving.height.len())
.min(self.balance_increased.height.len())
.min(self.balance_decreased.height.len())
.min(self.both.height.len()) .min(self.both.height.len())
} }
@@ -147,8 +122,6 @@ impl ActivityCountVecs {
&mut self.reactivated.height as &mut dyn AnyStoredVec, &mut self.reactivated.height as &mut dyn AnyStoredVec,
&mut self.sending.height as &mut dyn AnyStoredVec, &mut self.sending.height as &mut dyn AnyStoredVec,
&mut self.receiving.height as &mut dyn AnyStoredVec, &mut self.receiving.height as &mut dyn AnyStoredVec,
&mut self.balance_increased.height as &mut dyn AnyStoredVec,
&mut self.balance_decreased.height as &mut dyn AnyStoredVec,
&mut self.both.height as &mut dyn AnyStoredVec, &mut self.both.height as &mut dyn AnyStoredVec,
] ]
.into_par_iter() .into_par_iter()
@@ -158,8 +131,6 @@ impl ActivityCountVecs {
self.reactivated.height.reset()?; self.reactivated.height.reset()?;
self.sending.height.reset()?; self.sending.height.reset()?;
self.receiving.height.reset()?; self.receiving.height.reset()?;
self.balance_increased.height.reset()?;
self.balance_decreased.height.reset()?;
self.both.height.reset()?; self.both.height.reset()?;
Ok(()) Ok(())
} }
@@ -178,14 +149,6 @@ impl ActivityCountVecs {
self.receiving self.receiving
.height .height
.truncate_push(height, counts.receiving.into())?; .truncate_push(height, counts.receiving.into())?;
// Derived: balance_increased = receiving - both (receive-only addresses)
self.balance_increased
.height
.truncate_push(height, (counts.receiving - counts.both).into())?;
// Derived: balance_decreased = sending - both (send-only addresses)
self.balance_decreased
.height
.truncate_push(height, (counts.sending - counts.both).into())?;
self.both.height.truncate_push(height, counts.both.into())?; self.both.height.truncate_push(height, counts.both.into())?;
Ok(()) Ok(())
} }
@@ -199,10 +162,6 @@ impl ActivityCountVecs {
self.reactivated.compute_rest(max_from, windows, exit)?; self.reactivated.compute_rest(max_from, windows, exit)?;
self.sending.compute_rest(max_from, windows, exit)?; self.sending.compute_rest(max_from, windows, exit)?;
self.receiving.compute_rest(max_from, windows, exit)?; self.receiving.compute_rest(max_from, windows, exit)?;
self.balance_increased
.compute_rest(max_from, windows, exit)?;
self.balance_decreased
.compute_rest(max_from, windows, exit)?;
self.both.compute_rest(max_from, windows, exit)?; self.both.compute_rest(max_from, windows, exit)?;
Ok(()) Ok(())
} }
@@ -254,8 +213,6 @@ impl AddressTypeToActivityCountVecs {
vecs.push(&mut type_vecs.reactivated.height); vecs.push(&mut type_vecs.reactivated.height);
vecs.push(&mut type_vecs.sending.height); vecs.push(&mut type_vecs.sending.height);
vecs.push(&mut type_vecs.receiving.height); vecs.push(&mut type_vecs.receiving.height);
vecs.push(&mut type_vecs.balance_increased.height);
vecs.push(&mut type_vecs.balance_decreased.height);
vecs.push(&mut type_vecs.both.height); vecs.push(&mut type_vecs.both.height);
} }
vecs.into_par_iter() vecs.into_par_iter()
@@ -11,7 +11,6 @@ use crate::{
distribution::state::RealizedOps, distribution::state::RealizedOps,
internal::{ internal::{
ComputedFromHeight, ComputedFromHeightCumulative, ComputedFromHeight, ComputedFromHeightCumulative,
ComputedFromHeightRatioPercentiles, FiatFromHeight,
LazyFromHeight, NegCentsUnsignedToDollars, RatioCents64, LazyFromHeight, NegCentsUnsignedToDollars, RatioCents64,
RollingWindows, ValueFromHeightCumulative, RollingWindows, ValueFromHeightCumulative,
}, },
@@ -33,7 +32,6 @@ pub struct RealizedBase<M: StorageMode = Rw> {
pub neg_realized_loss: LazyFromHeight<Dollars, Cents>, pub neg_realized_loss: LazyFromHeight<Dollars, Cents>,
pub net_realized_pnl: ComputedFromHeightCumulative<CentsSigned, M>, pub net_realized_pnl: ComputedFromHeightCumulative<CentsSigned, M>,
pub gross_pnl: FiatFromHeight<Cents, M>,
pub value_created: ComputedFromHeight<Cents, M>, pub value_created: ComputedFromHeight<Cents, M>,
pub value_destroyed: ComputedFromHeight<Cents, M>, pub value_destroyed: ComputedFromHeight<Cents, M>,
@@ -41,8 +39,6 @@ pub struct RealizedBase<M: StorageMode = Rw> {
pub value_destroyed_sum: RollingWindows<Cents, M>, pub value_destroyed_sum: RollingWindows<Cents, M>,
pub sopr: RollingWindows<StoredF64, M>, pub sopr: RollingWindows<StoredF64, M>,
pub realized_price_ratio_percentiles: ComputedFromHeightRatioPercentiles<M>,
pub sent_in_profit: ValueFromHeightCumulative<M>, pub sent_in_profit: ValueFromHeightCumulative<M>,
pub sent_in_loss: ValueFromHeightCumulative<M>, pub sent_in_loss: ValueFromHeightCumulative<M>,
} }
@@ -62,7 +58,6 @@ impl RealizedBase {
); );
let net_realized_pnl = cfg.import("net_realized_pnl", v0)?; let net_realized_pnl = cfg.import("net_realized_pnl", v0)?;
let gross_pnl = cfg.import("realized_gross_pnl", v0)?;
let value_created = cfg.import("value_created", v0)?; let value_created = cfg.import("value_created", v0)?;
let value_destroyed = cfg.import("value_destroyed", v0)?; let value_destroyed = cfg.import("value_destroyed", v0)?;
@@ -70,26 +65,16 @@ impl RealizedBase {
let value_destroyed_sum = cfg.import("value_destroyed", v1)?; let value_destroyed_sum = cfg.import("value_destroyed", v1)?;
let sopr = cfg.import("sopr", v1)?; let sopr = cfg.import("sopr", v1)?;
let realized_price_ratio_percentiles =
ComputedFromHeightRatioPercentiles::forced_import(
cfg.db,
&cfg.name("realized_price"),
cfg.version + v1,
cfg.indexes,
)?;
Ok(Self { Ok(Self {
minimal, minimal,
realized_cap_change_1m: cfg.import("realized_cap_change_1m", v0)?, realized_cap_change_1m: cfg.import("realized_cap_change_1m", v0)?,
neg_realized_loss, neg_realized_loss,
net_realized_pnl, net_realized_pnl,
gross_pnl,
value_created, value_created,
value_destroyed, value_destroyed,
value_created_sum, value_created_sum,
value_destroyed_sum, value_destroyed_sum,
sopr, sopr,
realized_price_ratio_percentiles,
sent_in_profit: cfg.import("sent_in_profit", v0)?, sent_in_profit: cfg.import("sent_in_profit", v0)?,
sent_in_loss: cfg.import("sent_in_loss", v0)?, sent_in_loss: cfg.import("sent_in_loss", v0)?,
}) })
@@ -176,13 +161,6 @@ impl RealizedBase {
Ok(()) Ok(())
})?; })?;
self.gross_pnl.cents.height.compute_add(
starting_indexes.height,
&self.minimal.realized_profit.height,
&self.minimal.realized_loss.height,
exit,
)?;
Ok(()) Ok(())
} }
@@ -234,15 +212,6 @@ impl RealizedBase {
)?; )?;
} }
// Realized price ratio percentiles
self.realized_price_ratio_percentiles.compute(
blocks,
starting_indexes,
exit,
&self.minimal.realized_price_ratio.ratio.height,
&self.minimal.realized_price.cents.height,
)?;
Ok(()) Ok(())
} }
} }
@@ -14,7 +14,7 @@ use crate::{
blocks, blocks,
distribution::state::RealizedState, distribution::state::RealizedState,
internal::{ internal::{
CentsUnsignedToDollars, ComputedFromHeight, ComputedFromHeightCumulative, CentsUnsignedToDollars, ComputedFromHeight, ComputedFromHeightCumulative, FiatFromHeight,
ComputedFromHeightRatio, ComputedFromHeightRatioPercentiles, ComputedFromHeightRatio, ComputedFromHeightRatioPercentiles,
ComputedFromHeightRatioStdDevBands, LazyFromHeight, PercentFromHeight, ComputedFromHeightRatioStdDevBands, LazyFromHeight, PercentFromHeight,
PercentRollingEmas1w1m, PercentRollingWindows, Price, RatioCents64, RatioCentsBp32, PercentRollingEmas1w1m, PercentRollingWindows, Price, RatioCents64, RatioCentsBp32,
@@ -35,6 +35,8 @@ pub struct RealizedFull<M: StorageMode = Rw> {
#[traversable(flatten)] #[traversable(flatten)]
pub core: RealizedBase<M>, pub core: RealizedBase<M>,
pub gross_pnl: FiatFromHeight<Cents, M>,
pub realized_profit_rel_to_realized_cap: PercentFromHeight<BasisPoints32, M>, pub realized_profit_rel_to_realized_cap: PercentFromHeight<BasisPoints32, M>,
pub realized_loss_rel_to_realized_cap: PercentFromHeight<BasisPoints32, M>, pub realized_loss_rel_to_realized_cap: PercentFromHeight<BasisPoints32, M>,
pub net_realized_pnl_rel_to_realized_cap: PercentFromHeight<BasisPointsSigned32, M>, pub net_realized_pnl_rel_to_realized_cap: PercentFromHeight<BasisPointsSigned32, M>,
@@ -83,6 +85,7 @@ pub struct RealizedFull<M: StorageMode = Rw> {
pub sent_in_profit_ema: RollingEmas2w<M>, pub sent_in_profit_ema: RollingEmas2w<M>,
pub sent_in_loss_ema: RollingEmas2w<M>, pub sent_in_loss_ema: RollingEmas2w<M>,
pub realized_price_ratio_percentiles: ComputedFromHeightRatioPercentiles<M>,
pub realized_price_ratio_std_dev: ComputedFromHeightRatioStdDevBands<M>, pub realized_price_ratio_std_dev: ComputedFromHeightRatioStdDevBands<M>,
pub investor_price_ratio_percentiles: ComputedFromHeightRatioPercentiles<M>, pub investor_price_ratio_percentiles: ComputedFromHeightRatioPercentiles<M>,
} }
@@ -94,6 +97,8 @@ impl RealizedFull {
let core = RealizedBase::forced_import(cfg)?; let core = RealizedBase::forced_import(cfg)?;
let gross_pnl = cfg.import("realized_gross_pnl", v0)?;
let profit_value_created = cfg.import("profit_value_created", v0)?; let profit_value_created = cfg.import("profit_value_created", v0)?;
let profit_value_destroyed: ComputedFromHeight<Cents> = let profit_value_destroyed: ComputedFromHeight<Cents> =
cfg.import("profit_value_destroyed", v0)?; cfg.import("profit_value_destroyed", v0)?;
@@ -154,6 +159,7 @@ impl RealizedFull {
Ok(Self { Ok(Self {
core, core,
gross_pnl,
realized_profit_rel_to_realized_cap, realized_profit_rel_to_realized_cap,
realized_loss_rel_to_realized_cap, realized_loss_rel_to_realized_cap,
net_realized_pnl_rel_to_realized_cap, net_realized_pnl_rel_to_realized_cap,
@@ -191,6 +197,12 @@ impl RealizedFull {
sopr_24h_ema, sopr_24h_ema,
sent_in_profit_ema, sent_in_profit_ema,
sent_in_loss_ema, sent_in_loss_ema,
realized_price_ratio_percentiles: ComputedFromHeightRatioPercentiles::forced_import(
cfg.db,
&realized_price_name,
realized_price_version,
cfg.indexes,
)?,
realized_price_ratio_std_dev: ComputedFromHeightRatioStdDevBands::forced_import( realized_price_ratio_std_dev: ComputedFromHeightRatioStdDevBands::forced_import(
cfg.db, cfg.db,
&realized_price_name, &realized_price_name,
@@ -366,12 +378,19 @@ impl RealizedFull {
exit, exit,
)?; )?;
// Gross PnL rolling sum // Gross PnL
self.gross_pnl.cents.height.compute_add(
starting_indexes.height,
&self.core.minimal.realized_profit.height,
&self.core.minimal.realized_loss.height,
exit,
)?;
let window_starts = blocks.count.window_starts(); let window_starts = blocks.count.window_starts();
self.gross_pnl_sum.compute_rolling_sum( self.gross_pnl_sum.compute_rolling_sum(
starting_indexes.height, starting_indexes.height,
&window_starts, &window_starts,
&self.core.gross_pnl.cents.height, &self.gross_pnl.cents.height,
exit, exit,
)?; )?;
@@ -510,7 +529,14 @@ impl RealizedFull {
)?; )?;
} }
// Realized price stddev bands self.realized_price_ratio_percentiles.compute(
blocks,
starting_indexes,
exit,
&self.core.minimal.realized_price_ratio.ratio.height,
&self.core.minimal.realized_price.cents.height,
)?;
self.realized_price_ratio_std_dev.compute( self.realized_price_ratio_std_dev.compute(
blocks, blocks,
starting_indexes, starting_indexes,
@@ -3,9 +3,7 @@ use brk_traversable::Traversable;
use brk_types::{BasisPoints16, BasisPoints32, BasisPointsSigned32, Dollars, Height, Version}; use brk_types::{BasisPoints16, BasisPoints32, BasisPointsSigned32, Dollars, Height, Version};
use vecdb::{Exit, ReadableVec, Rw, StorageMode}; use vecdb::{Exit, ReadableVec, Rw, StorageMode};
use crate::internal::{ use crate::internal::{PercentFromHeight, RatioDollarsBp16, RatioDollarsBp32, RatioDollarsBps32};
NegRatioDollarsBps32, PercentFromHeight, RatioDollarsBp16, RatioDollarsBp32, RatioDollarsBps32,
};
use crate::distribution::metrics::{ImportConfig, UnrealizedFull}; use crate::distribution::metrics::{ImportConfig, UnrealizedFull};
@@ -14,7 +12,6 @@ use crate::distribution::metrics::{ImportConfig, UnrealizedFull};
pub struct RelativeExtendedOwnMarketCap<M: StorageMode = Rw> { pub struct RelativeExtendedOwnMarketCap<M: StorageMode = Rw> {
pub unrealized_profit_rel_to_own_market_cap: PercentFromHeight<BasisPoints16, M>, pub unrealized_profit_rel_to_own_market_cap: PercentFromHeight<BasisPoints16, M>,
pub unrealized_loss_rel_to_own_market_cap: PercentFromHeight<BasisPoints32, M>, pub unrealized_loss_rel_to_own_market_cap: PercentFromHeight<BasisPoints32, M>,
pub neg_unrealized_loss_rel_to_own_market_cap: PercentFromHeight<BasisPointsSigned32, M>,
pub net_unrealized_pnl_rel_to_own_market_cap: PercentFromHeight<BasisPointsSigned32, M>, pub net_unrealized_pnl_rel_to_own_market_cap: PercentFromHeight<BasisPointsSigned32, M>,
} }
@@ -27,8 +24,6 @@ impl RelativeExtendedOwnMarketCap {
.import("unrealized_profit_rel_to_own_market_cap", v2)?, .import("unrealized_profit_rel_to_own_market_cap", v2)?,
unrealized_loss_rel_to_own_market_cap: cfg unrealized_loss_rel_to_own_market_cap: cfg
.import("unrealized_loss_rel_to_own_market_cap", Version::new(3))?, .import("unrealized_loss_rel_to_own_market_cap", Version::new(3))?,
neg_unrealized_loss_rel_to_own_market_cap: cfg
.import("neg_unrealized_loss_rel_to_own_market_cap", Version::new(3))?,
net_unrealized_pnl_rel_to_own_market_cap: cfg net_unrealized_pnl_rel_to_own_market_cap: cfg
.import("net_unrealized_pnl_rel_to_own_market_cap", Version::new(3))?, .import("net_unrealized_pnl_rel_to_own_market_cap", Version::new(3))?,
}) })
@@ -55,13 +50,6 @@ impl RelativeExtendedOwnMarketCap {
own_market_cap, own_market_cap,
exit, exit,
)?; )?;
self.neg_unrealized_loss_rel_to_own_market_cap
.compute_binary::<Dollars, Dollars, NegRatioDollarsBps32>(
max_from,
&unrealized.unrealized_loss.usd.height,
own_market_cap,
exit,
)?;
self.net_unrealized_pnl_rel_to_own_market_cap self.net_unrealized_pnl_rel_to_own_market_cap
.compute_binary::<Dollars, Dollars, RatioDollarsBps32>( .compute_binary::<Dollars, Dollars, RatioDollarsBps32>(
max_from, max_from,
@@ -3,9 +3,7 @@ use brk_traversable::Traversable;
use brk_types::{BasisPoints16, BasisPointsSigned32, Dollars, Height, Version}; use brk_types::{BasisPoints16, BasisPointsSigned32, Dollars, Height, Version};
use vecdb::{Exit, Rw, StorageMode}; use vecdb::{Exit, Rw, StorageMode};
use crate::internal::{ use crate::internal::{PercentFromHeight, RatioDollarsBp16, RatioDollarsBps32};
NegRatioDollarsBps32, PercentFromHeight, RatioDollarsBp16, RatioDollarsBps32,
};
use crate::distribution::metrics::{ImportConfig, UnrealizedFull}; use crate::distribution::metrics::{ImportConfig, UnrealizedFull};
@@ -14,7 +12,6 @@ use crate::distribution::metrics::{ImportConfig, UnrealizedFull};
pub struct RelativeExtendedOwnPnl<M: StorageMode = Rw> { pub struct RelativeExtendedOwnPnl<M: StorageMode = Rw> {
pub unrealized_profit_rel_to_own_gross_pnl: PercentFromHeight<BasisPoints16, M>, pub unrealized_profit_rel_to_own_gross_pnl: PercentFromHeight<BasisPoints16, M>,
pub unrealized_loss_rel_to_own_gross_pnl: PercentFromHeight<BasisPoints16, M>, pub unrealized_loss_rel_to_own_gross_pnl: PercentFromHeight<BasisPoints16, M>,
pub neg_unrealized_loss_rel_to_own_gross_pnl: PercentFromHeight<BasisPointsSigned32, M>,
pub net_unrealized_pnl_rel_to_own_gross_pnl: PercentFromHeight<BasisPointsSigned32, M>, pub net_unrealized_pnl_rel_to_own_gross_pnl: PercentFromHeight<BasisPointsSigned32, M>,
} }
@@ -27,8 +24,6 @@ impl RelativeExtendedOwnPnl {
.import("unrealized_profit_rel_to_own_gross_pnl", v1)?, .import("unrealized_profit_rel_to_own_gross_pnl", v1)?,
unrealized_loss_rel_to_own_gross_pnl: cfg unrealized_loss_rel_to_own_gross_pnl: cfg
.import("unrealized_loss_rel_to_own_gross_pnl", v1)?, .import("unrealized_loss_rel_to_own_gross_pnl", v1)?,
neg_unrealized_loss_rel_to_own_gross_pnl: cfg
.import("neg_unrealized_loss_rel_to_own_gross_pnl", Version::new(2))?,
net_unrealized_pnl_rel_to_own_gross_pnl: cfg net_unrealized_pnl_rel_to_own_gross_pnl: cfg
.import("net_unrealized_pnl_rel_to_own_gross_pnl", Version::new(3))?, .import("net_unrealized_pnl_rel_to_own_gross_pnl", Version::new(3))?,
}) })
@@ -54,13 +49,6 @@ impl RelativeExtendedOwnPnl {
&unrealized.gross_pnl.usd.height, &unrealized.gross_pnl.usd.height,
exit, exit,
)?; )?;
self.neg_unrealized_loss_rel_to_own_gross_pnl
.compute_binary::<Dollars, Dollars, NegRatioDollarsBps32>(
max_from,
&unrealized.unrealized_loss.usd.height,
&unrealized.gross_pnl.usd.height,
exit,
)?;
self.net_unrealized_pnl_rel_to_own_gross_pnl self.net_unrealized_pnl_rel_to_own_gross_pnl
.compute_binary::<Dollars, Dollars, RatioDollarsBps32>( .compute_binary::<Dollars, Dollars, RatioDollarsBps32>(
max_from, max_from,
@@ -7,8 +7,7 @@ use derive_more::{Deref, DerefMut};
use vecdb::{Exit, ReadableCloneableVec, ReadableVec, Rw, StorageMode}; use vecdb::{Exit, ReadableCloneableVec, ReadableVec, Rw, StorageMode};
use crate::internal::{ use crate::internal::{
Bps32ToFloat, LazyFromHeight, NegRatioDollarsBps32, PercentFromHeight, RatioDollarsBp16, Bps32ToFloat, LazyFromHeight, PercentFromHeight, RatioDollarsBp16, RatioDollarsBps32,
RatioDollarsBps32,
}; };
use crate::distribution::metrics::{ImportConfig, RealizedBase, UnrealizedFull}; use crate::distribution::metrics::{ImportConfig, RealizedBase, UnrealizedFull};
@@ -26,7 +25,6 @@ pub struct RelativeFull<M: StorageMode = Rw> {
pub unrealized_profit_rel_to_market_cap: PercentFromHeight<BasisPoints16, M>, pub unrealized_profit_rel_to_market_cap: PercentFromHeight<BasisPoints16, M>,
pub unrealized_loss_rel_to_market_cap: PercentFromHeight<BasisPoints16, M>, pub unrealized_loss_rel_to_market_cap: PercentFromHeight<BasisPoints16, M>,
pub net_unrealized_pnl_rel_to_market_cap: PercentFromHeight<BasisPointsSigned32, M>, pub net_unrealized_pnl_rel_to_market_cap: PercentFromHeight<BasisPointsSigned32, M>,
pub neg_unrealized_loss_rel_to_market_cap: PercentFromHeight<BasisPointsSigned32, M>,
pub nupl: LazyFromHeight<StoredF32, BasisPointsSigned32>, pub nupl: LazyFromHeight<StoredF32, BasisPointsSigned32>,
pub invested_capital_in_profit_rel_to_realized_cap: PercentFromHeight<BasisPoints16, M>, pub invested_capital_in_profit_rel_to_realized_cap: PercentFromHeight<BasisPoints16, M>,
@@ -60,8 +58,6 @@ impl RelativeFull {
unrealized_loss_rel_to_market_cap: cfg unrealized_loss_rel_to_market_cap: cfg
.import("unrealized_loss_rel_to_market_cap", v2)?, .import("unrealized_loss_rel_to_market_cap", v2)?,
net_unrealized_pnl_rel_to_market_cap, net_unrealized_pnl_rel_to_market_cap,
neg_unrealized_loss_rel_to_market_cap: cfg
.import("neg_unrealized_loss_rel_to_market_cap", v3)?,
nupl, nupl,
invested_capital_in_profit_rel_to_realized_cap: cfg.import( invested_capital_in_profit_rel_to_realized_cap: cfg.import(
"invested_capital_in_profit_rel_to_realized_cap", "invested_capital_in_profit_rel_to_realized_cap",
@@ -111,14 +107,6 @@ impl RelativeFull {
market_cap, market_cap,
exit, exit,
)?; )?;
self.neg_unrealized_loss_rel_to_market_cap
.compute_binary::<Dollars, Dollars, NegRatioDollarsBps32>(
max_from,
&unrealized.unrealized_loss.usd.height,
market_cap,
exit,
)?;
self.invested_capital_in_profit_rel_to_realized_cap self.invested_capital_in_profit_rel_to_realized_cap
.compute_binary::<Dollars, Dollars, RatioDollarsBp16>( .compute_binary::<Dollars, Dollars, RatioDollarsBp16>(
max_from, max_from,
@@ -29,8 +29,6 @@ pub struct UnrealizedBase<M: StorageMode = Rw> {
pub neg_unrealized_loss: LazyFromHeight<Dollars, Cents>, pub neg_unrealized_loss: LazyFromHeight<Dollars, Cents>,
pub gross_pnl: FiatFromHeight<Cents, M>,
pub net_unrealized_pnl: FiatFromHeight<CentsSigned, M>, pub net_unrealized_pnl: FiatFromHeight<CentsSigned, M>,
} }
@@ -50,8 +48,6 @@ impl UnrealizedBase {
&unrealized_loss.cents, &unrealized_loss.cents,
); );
let gross_pnl = cfg.import("unrealized_gross_pnl", v0)?;
let net_unrealized_pnl = cfg.import("net_unrealized_pnl", v0)?; let net_unrealized_pnl = cfg.import("net_unrealized_pnl", v0)?;
Ok(Self { Ok(Self {
@@ -60,7 +56,6 @@ impl UnrealizedBase {
unrealized_profit, unrealized_profit,
unrealized_loss, unrealized_loss,
neg_unrealized_loss, neg_unrealized_loss,
gross_pnl,
net_unrealized_pnl, net_unrealized_pnl,
}) })
} }
@@ -131,13 +126,6 @@ impl UnrealizedBase {
starting_indexes: &Indexes, starting_indexes: &Indexes,
exit: &Exit, exit: &Exit,
) -> Result<()> { ) -> Result<()> {
self.gross_pnl.cents.height.compute_add(
starting_indexes.height,
&self.unrealized_profit.cents.height,
&self.unrealized_loss.cents.height,
exit,
)?;
self.net_unrealized_pnl self.net_unrealized_pnl
.cents .cents
.height .height
@@ -26,7 +26,8 @@ pub struct UnrealizedFull<M: StorageMode = Rw> {
#[traversable(flatten)] #[traversable(flatten)]
pub base: UnrealizedBase<M>, pub base: UnrealizedBase<M>,
// --- Source-only fields --- pub gross_pnl: FiatFromHeight<Cents, M>,
pub invested_capital_in_profit: FiatFromHeight<Cents, M>, pub invested_capital_in_profit: FiatFromHeight<Cents, M>,
pub invested_capital_in_loss: FiatFromHeight<Cents, M>, pub invested_capital_in_loss: FiatFromHeight<Cents, M>,
@@ -47,6 +48,8 @@ impl UnrealizedFull {
let base = UnrealizedBase::forced_import(cfg)?; let base = UnrealizedBase::forced_import(cfg)?;
let gross_pnl = cfg.import("unrealized_gross_pnl", v0)?;
let invested_capital_in_profit = cfg.import("invested_capital_in_profit", v0)?; let invested_capital_in_profit = cfg.import("invested_capital_in_profit", v0)?;
let invested_capital_in_loss = cfg.import("invested_capital_in_loss", v0)?; let invested_capital_in_loss = cfg.import("invested_capital_in_loss", v0)?;
@@ -62,6 +65,7 @@ impl UnrealizedFull {
Ok(Self { Ok(Self {
base, base,
gross_pnl,
invested_capital_in_profit, invested_capital_in_profit,
invested_capital_in_loss, invested_capital_in_loss,
invested_capital_in_profit_raw, invested_capital_in_profit_raw,
@@ -218,10 +222,16 @@ impl UnrealizedFull {
starting_indexes: &Indexes, starting_indexes: &Indexes,
exit: &Exit, exit: &Exit,
) -> Result<()> { ) -> Result<()> {
// Complete-tier: net_unrealized_pnl
self.base.compute_rest(starting_indexes, exit)?; self.base.compute_rest(starting_indexes, exit)?;
// Extended-only: Pain index (investor_price_of_losers - spot) self.gross_pnl.cents.height.compute_add(
starting_indexes.height,
&self.base.unrealized_profit.cents.height,
&self.base.unrealized_loss.cents.height,
exit,
)?;
// Pain index (investor_price_of_losers - spot)
self.pain_index.cents.height.compute_transform3( self.pain_index.cents.height.compute_transform3(
starting_indexes.height, starting_indexes.height,
&self.investor_cap_in_loss_raw, &self.investor_cap_in_loss_raw,
@@ -3,9 +3,11 @@ mod cumulative;
mod cumulative_sum; mod cumulative_sum;
mod distribution; mod distribution;
mod full; mod full;
mod rolling_average;
pub use aggregated::*; pub use aggregated::*;
pub use cumulative::*; pub use cumulative::*;
pub use cumulative_sum::*; pub use cumulative_sum::*;
pub use distribution::*; pub use distribution::*;
pub use full::*; pub use full::*;
pub use rolling_average::*;
@@ -0,0 +1,78 @@
//! ComputedFromHeight with rolling average (no distribution stats).
//!
//! Stored height data + 4-window rolling averages (24h, 1w, 1m, 1y).
//! Use instead of ComputedFromHeightDistribution when only the average
//! is analytically useful (e.g., block interval, activity counts).
use brk_error::Result;
use brk_traversable::Traversable;
use brk_types::{Height, Version};
use schemars::JsonSchema;
use vecdb::{Database, EagerVec, Exit, ImportableVec, PcoVec, Rw, StorageMode};
use crate::indexes;
use crate::internal::{NumericValue, RollingWindows, WindowStarts};
#[derive(Traversable)]
pub struct ComputedFromHeightRollingAverage<T, M: StorageMode = Rw>
where
T: NumericValue + JsonSchema,
{
pub height: M::Stored<EagerVec<PcoVec<Height, T>>>,
#[traversable(flatten)]
pub average: RollingWindows<T, M>,
}
impl<T> ComputedFromHeightRollingAverage<T>
where
T: NumericValue + JsonSchema,
{
pub(crate) fn forced_import(
db: &Database,
name: &str,
version: Version,
indexes: &indexes::Vecs,
) -> Result<Self> {
let height: EagerVec<PcoVec<Height, T>> = EagerVec::forced_import(db, name, version)?;
let average =
RollingWindows::forced_import(db, &format!("{name}_average"), version, indexes)?;
Ok(Self { height, average })
}
/// Compute height data via closure, then rolling averages.
pub(crate) fn compute(
&mut self,
max_from: Height,
windows: &WindowStarts<'_>,
exit: &Exit,
compute_height: impl FnOnce(&mut EagerVec<PcoVec<Height, T>>) -> Result<()>,
) -> Result<()>
where
T: Default,
f64: From<T>,
{
compute_height(&mut self.height)?;
self.compute_rest(max_from, windows, exit)
}
/// Compute rolling averages from already-populated height data.
pub(crate) fn compute_rest(
&mut self,
max_from: Height,
windows: &WindowStarts<'_>,
exit: &Exit,
) -> Result<()>
where
T: Default,
f64: From<T>,
{
for (w, starts) in self.average.0.as_mut_array().into_iter().zip(windows.as_array()) {
w.height
.compute_rolling_average(max_from, *starts, &self.height, exit)?;
}
Ok(())
}
}
@@ -1,5 +1,7 @@
mod base; mod base;
mod distribution; mod distribution;
mod rolling_average;
pub use base::*; pub use base::*;
pub use distribution::*; pub use distribution::*;
pub use rolling_average::*;
@@ -0,0 +1,69 @@
use brk_error::Result;
use brk_traversable::Traversable;
use brk_types::{Height, StoredF32, Version};
use vecdb::{Database, EagerVec, Exit, PcoVec, ReadableCloneableVec, Rw, StorageMode};
use crate::{
indexes,
internal::{BpsType, WindowStarts},
};
use crate::internal::{ComputedFromHeightRollingAverage, LazyFromHeight};
/// Like PercentFromHeight but with rolling average stats on the bps data.
#[derive(Traversable)]
pub struct PercentFromHeightRollingAverage<B: BpsType, M: StorageMode = Rw> {
pub bps: ComputedFromHeightRollingAverage<B, M>,
pub ratio: LazyFromHeight<StoredF32, B>,
pub percent: LazyFromHeight<StoredF32, B>,
}
impl<B: BpsType> PercentFromHeightRollingAverage<B> {
pub(crate) fn forced_import(
db: &Database,
name: &str,
version: Version,
indexes: &indexes::Vecs,
) -> Result<Self> {
let bps = ComputedFromHeightRollingAverage::forced_import(
db,
&format!("{name}_bps"),
version,
indexes,
)?;
let ratio = LazyFromHeight::from_height_source::<B::ToRatio>(
&format!("{name}_ratio"),
version,
bps.height.read_only_boxed_clone(),
indexes,
);
let percent = LazyFromHeight::from_height_source::<B::ToPercent>(
name,
version,
bps.height.read_only_boxed_clone(),
indexes,
);
Ok(Self {
bps,
ratio,
percent,
})
}
pub(crate) fn compute(
&mut self,
max_from: Height,
windows: &WindowStarts<'_>,
exit: &Exit,
compute_height: impl FnOnce(&mut EagerVec<PcoVec<Height, B>>) -> Result<()>,
) -> Result<()>
where
B: Default,
f64: From<B>,
{
self.bps.compute(max_from, windows, exit, compute_height)
}
}
@@ -1,7 +1,7 @@
use brk_error::Result; use brk_error::Result;
use brk_traversable::Traversable; use brk_traversable::Traversable;
use brk_types::{Cents, Height, Sats, Version}; use brk_types::{Cents, Height, Sats, Version};
use vecdb::{Database, Exit, Rw, StorageMode}; use vecdb::{Database, EagerVec, Exit, PcoVec, Rw, StorageMode};
use crate::{ use crate::{
indexes, indexes,
@@ -32,6 +32,17 @@ impl ValueFromHeightCumulative {
}) })
} }
pub(crate) fn compute_with(
&mut self,
max_from: Height,
prices: &prices::Vecs,
exit: &Exit,
compute_sats: impl FnOnce(&mut EagerVec<PcoVec<Height, Sats>>) -> Result<()>,
) -> Result<()> {
compute_sats(&mut self.base.sats.height)?;
self.compute(prices, max_from, exit)
}
pub(crate) fn compute( pub(crate) fn compute(
&mut self, &mut self,
prices: &prices::Vecs, prices: &prices::Vecs,
@@ -23,7 +23,7 @@ pub use derived::{
RatioCents64, TimesSqrt, RatioCents64, TimesSqrt,
}; };
pub use ratio::{ pub use ratio::{
NegRatioDollarsBps32, RatioCentsBp32, RatioCentsSignedCentsBps32, RatioCentsBp32, RatioCentsSignedCentsBps32,
RatioCentsSignedDollarsBps32, RatioDiffCentsBps32, RatioDiffDollarsBps32, RatioDiffF32Bps32, RatioCentsSignedDollarsBps32, RatioDiffCentsBps32, RatioDiffDollarsBps32, RatioDiffF32Bps32,
RatioDollarsBp16, RatioDollarsBp32, RatioDollarsBps32, RatioSatsBp16, RatioU32Bp16, RatioDollarsBp16, RatioDollarsBp32, RatioDollarsBps32, RatioSatsBp16, RatioU32Bp16,
RatioU64Bp16, RatioU64Bp16,
@@ -84,20 +84,6 @@ impl BinaryTransform<Dollars, Dollars, BasisPointsSigned32> for RatioDollarsBps3
} }
} }
pub struct NegRatioDollarsBps32;
impl BinaryTransform<Dollars, Dollars, BasisPointsSigned32> for NegRatioDollarsBps32 {
#[inline(always)]
fn apply(numerator: Dollars, denominator: Dollars) -> BasisPointsSigned32 {
let ratio = *(numerator / denominator);
if ratio.is_finite() {
BasisPointsSigned32::from(-ratio)
} else {
BasisPointsSigned32::ZERO
}
}
}
pub struct RatioCentsSignedCentsBps32; pub struct RatioCentsSignedCentsBps32;
impl BinaryTransform<CentsSigned, Cents, BasisPointsSigned32> for RatioCentsSignedCentsBps32 { impl BinaryTransform<CentsSigned, Cents, BasisPointsSigned32> for RatioCentsSignedCentsBps32 {
+2 -2
View File
@@ -32,8 +32,8 @@ impl Vecs {
self.hashrate.compute( self.hashrate.compute(
&blocks.count, &blocks.count,
&blocks.difficulty, &blocks.difficulty,
&self.rewards.coinbase.rolling._24h.sum.sats.height, &self.rewards.coinbase.sum._24h.sats.height,
&self.rewards.coinbase.rolling._24h.sum.usd.height, &self.rewards.coinbase.sum._24h.usd.height,
starting_indexes, starting_indexes,
exit, exit,
)?; )?;
@@ -76,29 +76,21 @@ impl Vecs {
}, },
)?; )?;
self.subsidy.compute( self.subsidy.base.sats.height.compute_transform2(
starting_indexes.height, starting_indexes.height,
&window_starts, &self.coinbase.base.sats.height,
prices, &self.fees.base.sats.height,
exit, |(height, coinbase, fees, ..)| {
|vec| { (
vec.compute_transform2( height,
starting_indexes.height, coinbase.checked_sub(fees).unwrap_or_else(|| {
&self.coinbase.base.sats.height, panic!("coinbase {coinbase:?} < fees {fees:?} at {height:?}")
&self.fees.base.sats.height, }),
|(height, coinbase, fees, ..)| { )
(
height,
coinbase.checked_sub(fees).unwrap_or_else(|| {
panic!("coinbase {coinbase:?} < fees {fees:?} at {height:?}")
}),
)
},
exit,
)?;
Ok(())
}, },
exit,
)?; )?;
self.subsidy.compute(prices, starting_indexes.height, exit)?;
self.unclaimed_rewards.compute( self.unclaimed_rewards.compute(
starting_indexes.height, starting_indexes.height,
@@ -135,12 +127,12 @@ impl Vecs {
.as_mut_array() .as_mut_array()
.into_iter() .into_iter()
.zip(self.fees.rolling.as_array()) .zip(self.fees.rolling.as_array())
.zip(self.coinbase.rolling.as_array()) .zip(self.coinbase.sum.as_array())
{ {
fee_dom.compute_binary::<Sats, Sats, RatioSatsBp16>( fee_dom.compute_binary::<Sats, Sats, RatioSatsBp16>(
starting_indexes.height, starting_indexes.height,
&fees_w.sum.sats.height, &fees_w.sum.sats.height,
&coinbase_w.sum.sats.height, &coinbase_w.sats.height,
exit, exit,
)?; )?;
} }
@@ -6,8 +6,8 @@ use super::Vecs;
use crate::{ use crate::{
indexes, indexes,
internal::{ internal::{
FiatFromHeight, PercentFromHeight, PercentRollingWindows, ValueFromHeightCumulativeSum, FiatFromHeight, PercentFromHeight, PercentRollingWindows, ValueFromHeightCumulative,
ValueFromHeightFull, ValueFromHeightCumulativeSum, ValueFromHeightFull,
}, },
}; };
@@ -18,8 +18,8 @@ impl Vecs {
indexes: &indexes::Vecs, indexes: &indexes::Vecs,
) -> Result<Self> { ) -> Result<Self> {
Ok(Self { Ok(Self {
coinbase: ValueFromHeightFull::forced_import(db, "coinbase", version, indexes)?, coinbase: ValueFromHeightCumulativeSum::forced_import(db, "coinbase", version, indexes)?,
subsidy: ValueFromHeightFull::forced_import(db, "subsidy", version, indexes)?, subsidy: ValueFromHeightCumulative::forced_import(db, "subsidy", version, indexes)?,
fees: ValueFromHeightFull::forced_import(db, "fees", version, indexes)?, fees: ValueFromHeightFull::forced_import(db, "fees", version, indexes)?,
unclaimed_rewards: ValueFromHeightCumulativeSum::forced_import( unclaimed_rewards: ValueFromHeightCumulativeSum::forced_import(
db, db,
@@ -3,14 +3,14 @@ use brk_types::{BasisPoints16, Cents};
use vecdb::{Rw, StorageMode}; use vecdb::{Rw, StorageMode};
use crate::internal::{ use crate::internal::{
FiatFromHeight, PercentFromHeight, PercentRollingWindows, ValueFromHeightCumulativeSum, FiatFromHeight, PercentFromHeight, PercentRollingWindows, ValueFromHeightCumulative,
ValueFromHeightFull, ValueFromHeightCumulativeSum, ValueFromHeightFull,
}; };
#[derive(Traversable)] #[derive(Traversable)]
pub struct Vecs<M: StorageMode = Rw> { pub struct Vecs<M: StorageMode = Rw> {
pub coinbase: ValueFromHeightFull<M>, pub coinbase: ValueFromHeightCumulativeSum<M>,
pub subsidy: ValueFromHeightFull<M>, pub subsidy: ValueFromHeightCumulative<M>,
pub fees: ValueFromHeightFull<M>, pub fees: ValueFromHeightFull<M>,
pub unclaimed_rewards: ValueFromHeightCumulativeSum<M>, pub unclaimed_rewards: ValueFromHeightCumulativeSum<M>,
pub fee_dominance: PercentFromHeight<BasisPoints16, M>, pub fee_dominance: PercentFromHeight<BasisPoints16, M>,
+1 -1
View File
@@ -21,7 +21,7 @@ impl Vecs {
.compute(indexer, &blocks.count, starting_indexes, exit)?; .compute(indexer, &blocks.count, starting_indexes, exit)?;
self.value self.value
.compute(indexer, &blocks.count, prices, starting_indexes, exit)?; .compute(indexer, prices, starting_indexes, exit)?;
self.adoption self.adoption
.compute(&self.count, &outputs.count, starting_indexes, exit)?; .compute(&self.count, &outputs.count, starting_indexes, exit)?;
@@ -4,22 +4,18 @@ use brk_types::{Height, Indexes, OutputType, Sats, TxOutIndex};
use vecdb::{AnyStoredVec, AnyVec, Exit, ReadableVec, VecIndex, WritableVec}; use vecdb::{AnyStoredVec, AnyVec, Exit, ReadableVec, VecIndex, WritableVec};
use super::Vecs; use super::Vecs;
use crate::{blocks, prices}; use crate::prices;
impl Vecs { impl Vecs {
pub(crate) fn compute( pub(crate) fn compute(
&mut self, &mut self,
indexer: &Indexer, indexer: &Indexer,
count_vecs: &blocks::CountVecs,
prices: &prices::Vecs, prices: &prices::Vecs,
starting_indexes: &Indexes, starting_indexes: &Indexes,
exit: &Exit, exit: &Exit,
) -> Result<()> { ) -> Result<()> {
let window_starts = count_vecs.window_starts(); self.opreturn.compute_with(
self.opreturn.compute(
starting_indexes.height, starting_indexes.height,
&window_starts,
prices, prices,
exit, exit,
|height_vec| { |height_vec| {
@@ -3,7 +3,7 @@ use brk_types::Version;
use vecdb::Database; use vecdb::Database;
use super::Vecs; use super::Vecs;
use crate::{indexes, internal::ValueFromHeightFull}; use crate::{indexes, internal::ValueFromHeightCumulative};
impl Vecs { impl Vecs {
pub(crate) fn forced_import( pub(crate) fn forced_import(
@@ -12,7 +12,12 @@ impl Vecs {
indexes: &indexes::Vecs, indexes: &indexes::Vecs,
) -> Result<Self> { ) -> Result<Self> {
Ok(Self { Ok(Self {
opreturn: ValueFromHeightFull::forced_import(db, "opreturn_value", version, indexes)?, opreturn: ValueFromHeightCumulative::forced_import(
db,
"opreturn_value",
version,
indexes,
)?,
}) })
} }
} }
@@ -1,9 +1,9 @@
use brk_traversable::Traversable; use brk_traversable::Traversable;
use vecdb::{Rw, StorageMode}; use vecdb::{Rw, StorageMode};
use crate::internal::ValueFromHeightFull; use crate::internal::ValueFromHeightCumulative;
#[derive(Traversable)] #[derive(Traversable)]
pub struct Vecs<M: StorageMode = Rw> { pub struct Vecs<M: StorageMode = Rw> {
pub opreturn: ValueFromHeightFull<M>, pub opreturn: ValueFromHeightCumulative<M>,
} }
@@ -1,39 +1,91 @@
use brk_error::Result; use brk_error::Result;
use brk_types::{BlockRewardsEntry, TimePeriod}; use brk_types::{BlockRewardsEntry, Height, Sats, TimePeriod};
use vecdb::{ReadableOptionVec, VecIndex}; use vecdb::{ReadableVec, VecIndex};
use super::day1_iter::Day1Iter;
use crate::Query; use crate::Query;
impl Query { impl Query {
pub fn block_rewards(&self, time_period: TimePeriod) -> Result<Vec<BlockRewardsEntry>> { pub fn block_rewards(&self, time_period: TimePeriod) -> Result<Vec<BlockRewardsEntry>> {
let computer = self.computer(); let computer = self.computer();
let current_height = self.height(); let indexer = self.indexer();
let start = current_height let current_height = self.height().to_usize();
.to_usize() let start = current_height.saturating_sub(time_period.block_count());
.saturating_sub(time_period.block_count());
let iter = Day1Iter::new(computer, start, current_height.to_usize()); let coinbase_vec = &computer.mining.rewards.coinbase.base.sats.height;
let timestamp_vec = &indexer.vecs.blocks.timestamp;
let rewards_vec = &computer match time_period {
.mining // Per-block, exact rewards
.rewards TimePeriod::Day | TimePeriod::ThreeDays => {
.coinbase let rewards: Vec<Sats> =
.rolling coinbase_vec.collect_range_at(start, current_height + 1);
._24h let timestamps: Vec<brk_types::Timestamp> =
.distribution timestamp_vec.collect_range_at(start, current_height + 1);
.average
.sats
.day1;
Ok(iter.collect(|di, ts, h| { Ok(rewards
rewards_vec .iter()
.collect_one_flat(di) .zip(timestamps.iter())
.map(|reward| BlockRewardsEntry { .enumerate()
avg_height: h.into(), .map(|(i, (reward, ts))| BlockRewardsEntry {
timestamp: *ts, avg_height: (start + i) as u32,
avg_rewards: *reward, timestamp: **ts,
}) avg_rewards: **reward,
})) })
.collect())
}
// Daily averages, sampled to ~200 points
_ => {
let first_height_vec = &computer.indexes.day1.first_height;
let day1_vec = &computer.indexes.height.day1;
let start_di = day1_vec
.collect_one(Height::from(start))
.unwrap_or_default();
let end_di = day1_vec
.collect_one(Height::from(current_height))
.unwrap_or_default();
let total_days =
end_di.to_usize().saturating_sub(start_di.to_usize()) + 1;
let step = (total_days / 200).max(1);
let mut entries = Vec::with_capacity(total_days / step + 1);
let mut di = start_di.to_usize();
while di <= end_di.to_usize() {
let day = brk_types::Day1::from(di);
let next_day = brk_types::Day1::from(di + 1);
if let Some(first_h) = first_height_vec.collect_one(day) {
let next_h = first_height_vec
.collect_one(next_day)
.unwrap_or(Height::from(current_height + 1));
let block_count = next_h.to_usize() - first_h.to_usize();
if block_count > 0 {
let sum = coinbase_vec.fold_range(
first_h,
next_h,
Sats::ZERO,
|acc, v| acc + v,
);
let avg = *sum / block_count as u64;
if let Some(ts) = timestamp_vec.collect_one(first_h) {
entries.push(BlockRewardsEntry {
avg_height: first_h.to_usize() as u32,
timestamp: *ts,
avg_rewards: avg,
});
}
}
}
di += step;
}
Ok(entries)
}
}
} }
} }
+327 -323
View File
@@ -1763,114 +1763,6 @@ function create_0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern(client
}; };
} }
/**
* @typedef {Object} InvestedNegNetNuplSupplyUnrealizedPattern3
* @property {BpsPercentRatioPattern} investedCapitalInLossRelToRealizedCap
* @property {BpsPercentRatioPattern} investedCapitalInProfitRelToRealizedCap
* @property {BpsPercentRatioPattern} negUnrealizedLossRelToMarketCap
* @property {BpsPercentRatioPattern} negUnrealizedLossRelToOwnGrossPnl
* @property {BpsPercentRatioPattern} negUnrealizedLossRelToOwnMarketCap
* @property {BpsPercentRatioPattern} netUnrealizedPnlRelToMarketCap
* @property {BpsPercentRatioPattern} netUnrealizedPnlRelToOwnGrossPnl
* @property {BpsPercentRatioPattern} netUnrealizedPnlRelToOwnMarketCap
* @property {MetricPattern1<StoredF32>} nupl
* @property {BpsPercentRatioPattern} supplyInLossRelToCirculatingSupply
* @property {BpsPercentRatioPattern} supplyInLossRelToOwnSupply
* @property {BpsPercentRatioPattern} supplyInProfitRelToCirculatingSupply
* @property {BpsPercentRatioPattern} supplyInProfitRelToOwnSupply
* @property {BpsPercentRatioPattern} supplyRelToCirculatingSupply
* @property {BpsPercentRatioPattern} unrealizedLossRelToMarketCap
* @property {BpsPercentRatioPattern} unrealizedLossRelToOwnGrossPnl
* @property {BpsPercentRatioPattern} unrealizedLossRelToOwnMarketCap
* @property {BpsPercentRatioPattern} unrealizedProfitRelToMarketCap
* @property {BpsPercentRatioPattern} unrealizedProfitRelToOwnGrossPnl
* @property {BpsPercentRatioPattern} unrealizedProfitRelToOwnMarketCap
*/
/**
* Create a InvestedNegNetNuplSupplyUnrealizedPattern3 pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {InvestedNegNetNuplSupplyUnrealizedPattern3}
*/
function createInvestedNegNetNuplSupplyUnrealizedPattern3(client, acc) {
return {
investedCapitalInLossRelToRealizedCap: createBpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_loss_rel_to_realized_cap')),
investedCapitalInProfitRelToRealizedCap: createBpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_profit_rel_to_realized_cap')),
negUnrealizedLossRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'neg_unrealized_loss_rel_to_market_cap')),
negUnrealizedLossRelToOwnGrossPnl: createBpsPercentRatioPattern(client, _m(acc, 'neg_unrealized_loss_rel_to_own_gross_pnl')),
negUnrealizedLossRelToOwnMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'neg_unrealized_loss_rel_to_own_market_cap')),
netUnrealizedPnlRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_market_cap')),
netUnrealizedPnlRelToOwnGrossPnl: createBpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_own_gross_pnl')),
netUnrealizedPnlRelToOwnMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap')),
nupl: createMetricPattern1(client, _m(acc, 'nupl')),
supplyInLossRelToCirculatingSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply')),
supplyInLossRelToOwnSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_own_supply')),
supplyInProfitRelToCirculatingSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply')),
supplyInProfitRelToOwnSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_own_supply')),
supplyRelToCirculatingSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_rel_to_circulating_supply')),
unrealizedLossRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_market_cap')),
unrealizedLossRelToOwnGrossPnl: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_own_gross_pnl')),
unrealizedLossRelToOwnMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap')),
unrealizedProfitRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_market_cap')),
unrealizedProfitRelToOwnGrossPnl: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_own_gross_pnl')),
unrealizedProfitRelToOwnMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap')),
};
}
/**
* @typedef {Object} GrossMvrvNegNetRealizedSentSoprValuePattern
* @property {CentsUsdPattern} grossPnl
* @property {MetricPattern1<StoredF32>} mvrv
* @property {MetricPattern1<Dollars>} negRealizedLoss
* @property {CumulativeHeightPattern<CentsSigned>} netRealizedPnl
* @property {MetricPattern1<Dollars>} realizedCap
* @property {MetricPattern1<Cents>} realizedCapCents
* @property {MetricPattern1<CentsSigned>} realizedCapChange1m
* @property {CumulativeHeightPattern<Cents>} realizedLoss
* @property {CentsSatsUsdPattern} realizedPrice
* @property {BpsRatioPattern} realizedPriceRatio
* @property {RatioPattern} realizedPriceRatioPercentiles
* @property {CumulativeHeightPattern<Cents>} realizedProfit
* @property {BaseCumulativePattern} sentInLoss
* @property {BaseCumulativePattern} sentInProfit
* @property {_1m1w1y24hPattern<StoredF64>} sopr
* @property {MetricPattern1<Cents>} valueCreated
* @property {_1m1w1y24hPattern<Cents>} valueCreatedSum
* @property {MetricPattern1<Cents>} valueDestroyed
* @property {_1m1w1y24hPattern<Cents>} valueDestroyedSum
*/
/**
* Create a GrossMvrvNegNetRealizedSentSoprValuePattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {GrossMvrvNegNetRealizedSentSoprValuePattern}
*/
function createGrossMvrvNegNetRealizedSentSoprValuePattern(client, acc) {
return {
grossPnl: createCentsUsdPattern(client, _m(acc, 'realized_gross_pnl')),
mvrv: createMetricPattern1(client, _m(acc, 'mvrv')),
negRealizedLoss: createMetricPattern1(client, _m(acc, 'neg_realized_loss')),
netRealizedPnl: createCumulativeHeightPattern(client, _m(acc, 'net_realized_pnl')),
realizedCap: createMetricPattern1(client, _m(acc, 'realized_cap')),
realizedCapCents: createMetricPattern1(client, _m(acc, 'realized_cap_cents')),
realizedCapChange1m: createMetricPattern1(client, _m(acc, 'realized_cap_change_1m')),
realizedLoss: createCumulativeHeightPattern(client, _m(acc, 'realized_loss')),
realizedPrice: createCentsSatsUsdPattern(client, _m(acc, 'realized_price')),
realizedPriceRatio: createBpsRatioPattern(client, _m(acc, 'realized_price_ratio')),
realizedPriceRatioPercentiles: createRatioPattern(client, _m(acc, 'realized_price_ratio')),
realizedProfit: createCumulativeHeightPattern(client, _m(acc, 'realized_profit')),
sentInLoss: createBaseCumulativePattern(client, _m(acc, 'sent_in_loss')),
sentInProfit: createBaseCumulativePattern(client, _m(acc, 'sent_in_profit')),
sopr: create_1m1w1y24hPattern(client, _m(acc, 'sopr')),
valueCreated: createMetricPattern1(client, _m(acc, 'value_created')),
valueCreatedSum: create_1m1w1y24hPattern(client, _m(acc, 'value_created')),
valueDestroyed: createMetricPattern1(client, _m(acc, 'value_destroyed')),
valueDestroyedSum: create_1m1w1y24hPattern(client, _m(acc, 'value_destroyed')),
};
}
/** /**
* @typedef {Object} Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern * @typedef {Object} Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern
* @property {CentsSatsUsdPattern} pct05 * @property {CentsSatsUsdPattern} pct05
@@ -1924,6 +1816,104 @@ function createPct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65
}; };
} }
/**
* @typedef {Object} InvestedNetNuplSupplyUnrealizedPattern3
* @property {BpsPercentRatioPattern} investedCapitalInLossRelToRealizedCap
* @property {BpsPercentRatioPattern} investedCapitalInProfitRelToRealizedCap
* @property {BpsPercentRatioPattern} netUnrealizedPnlRelToMarketCap
* @property {BpsPercentRatioPattern} netUnrealizedPnlRelToOwnGrossPnl
* @property {BpsPercentRatioPattern} netUnrealizedPnlRelToOwnMarketCap
* @property {MetricPattern1<StoredF32>} nupl
* @property {BpsPercentRatioPattern} supplyInLossRelToCirculatingSupply
* @property {BpsPercentRatioPattern} supplyInLossRelToOwnSupply
* @property {BpsPercentRatioPattern} supplyInProfitRelToCirculatingSupply
* @property {BpsPercentRatioPattern} supplyInProfitRelToOwnSupply
* @property {BpsPercentRatioPattern} supplyRelToCirculatingSupply
* @property {BpsPercentRatioPattern} unrealizedLossRelToMarketCap
* @property {BpsPercentRatioPattern} unrealizedLossRelToOwnGrossPnl
* @property {BpsPercentRatioPattern} unrealizedLossRelToOwnMarketCap
* @property {BpsPercentRatioPattern} unrealizedProfitRelToMarketCap
* @property {BpsPercentRatioPattern} unrealizedProfitRelToOwnGrossPnl
* @property {BpsPercentRatioPattern} unrealizedProfitRelToOwnMarketCap
*/
/**
* Create a InvestedNetNuplSupplyUnrealizedPattern3 pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {InvestedNetNuplSupplyUnrealizedPattern3}
*/
function createInvestedNetNuplSupplyUnrealizedPattern3(client, acc) {
return {
investedCapitalInLossRelToRealizedCap: createBpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_loss_rel_to_realized_cap')),
investedCapitalInProfitRelToRealizedCap: createBpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_profit_rel_to_realized_cap')),
netUnrealizedPnlRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_market_cap')),
netUnrealizedPnlRelToOwnGrossPnl: createBpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_own_gross_pnl')),
netUnrealizedPnlRelToOwnMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap')),
nupl: createMetricPattern1(client, _m(acc, 'nupl')),
supplyInLossRelToCirculatingSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply')),
supplyInLossRelToOwnSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_own_supply')),
supplyInProfitRelToCirculatingSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply')),
supplyInProfitRelToOwnSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_own_supply')),
supplyRelToCirculatingSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_rel_to_circulating_supply')),
unrealizedLossRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_market_cap')),
unrealizedLossRelToOwnGrossPnl: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_own_gross_pnl')),
unrealizedLossRelToOwnMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap')),
unrealizedProfitRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_market_cap')),
unrealizedProfitRelToOwnGrossPnl: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_own_gross_pnl')),
unrealizedProfitRelToOwnMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap')),
};
}
/**
* @typedef {Object} MvrvNegNetRealizedSentSoprValuePattern
* @property {MetricPattern1<StoredF32>} mvrv
* @property {MetricPattern1<Dollars>} negRealizedLoss
* @property {CumulativeHeightPattern<CentsSigned>} netRealizedPnl
* @property {MetricPattern1<Dollars>} realizedCap
* @property {MetricPattern1<Cents>} realizedCapCents
* @property {MetricPattern1<CentsSigned>} realizedCapChange1m
* @property {CumulativeHeightPattern<Cents>} realizedLoss
* @property {CentsSatsUsdPattern} realizedPrice
* @property {BpsRatioPattern} realizedPriceRatio
* @property {CumulativeHeightPattern<Cents>} realizedProfit
* @property {BaseCumulativePattern} sentInLoss
* @property {BaseCumulativePattern} sentInProfit
* @property {_1m1w1y24hPattern<StoredF64>} sopr
* @property {MetricPattern1<Cents>} valueCreated
* @property {_1m1w1y24hPattern<Cents>} valueCreatedSum
* @property {MetricPattern1<Cents>} valueDestroyed
* @property {_1m1w1y24hPattern<Cents>} valueDestroyedSum
*/
/**
* Create a MvrvNegNetRealizedSentSoprValuePattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {MvrvNegNetRealizedSentSoprValuePattern}
*/
function createMvrvNegNetRealizedSentSoprValuePattern(client, acc) {
return {
mvrv: createMetricPattern1(client, _m(acc, 'mvrv')),
negRealizedLoss: createMetricPattern1(client, _m(acc, 'neg_realized_loss')),
netRealizedPnl: createCumulativeHeightPattern(client, _m(acc, 'net_realized_pnl')),
realizedCap: createMetricPattern1(client, _m(acc, 'realized_cap')),
realizedCapCents: createMetricPattern1(client, _m(acc, 'realized_cap_cents')),
realizedCapChange1m: createMetricPattern1(client, _m(acc, 'realized_cap_change_1m')),
realizedLoss: createCumulativeHeightPattern(client, _m(acc, 'realized_loss')),
realizedPrice: createCentsSatsUsdPattern(client, _m(acc, 'realized_price')),
realizedPriceRatio: createBpsRatioPattern(client, _m(acc, 'realized_price_ratio')),
realizedProfit: createCumulativeHeightPattern(client, _m(acc, 'realized_profit')),
sentInLoss: createBaseCumulativePattern(client, _m(acc, 'sent_in_loss')),
sentInProfit: createBaseCumulativePattern(client, _m(acc, 'sent_in_profit')),
sopr: create_1m1w1y24hPattern(client, _m(acc, 'sopr')),
valueCreated: createMetricPattern1(client, _m(acc, 'value_created')),
valueCreatedSum: create_1m1w1y24hPattern(client, _m(acc, 'value_created')),
valueDestroyed: createMetricPattern1(client, _m(acc, 'value_destroyed')),
valueDestroyedSum: create_1m1w1y24hPattern(client, _m(acc, 'value_destroyed')),
};
}
/** /**
* @typedef {Object} BpsRatioPattern2 * @typedef {Object} BpsRatioPattern2
* @property {MetricPattern1<BasisPoints32>} bps * @property {MetricPattern1<BasisPoints32>} bps
@@ -2139,45 +2129,6 @@ function create_10y1m1w1y2y3m3y4y5y6m6y8yPattern3(client, acc) {
}; };
} }
/**
* @typedef {Object} InvestedNegNetNuplSupplyUnrealizedPattern
* @property {BpsPercentRatioPattern} investedCapitalInLossRelToRealizedCap
* @property {BpsPercentRatioPattern} investedCapitalInProfitRelToRealizedCap
* @property {BpsPercentRatioPattern} negUnrealizedLossRelToMarketCap
* @property {BpsPercentRatioPattern} netUnrealizedPnlRelToMarketCap
* @property {MetricPattern1<StoredF32>} nupl
* @property {BpsPercentRatioPattern} supplyInLossRelToCirculatingSupply
* @property {BpsPercentRatioPattern} supplyInLossRelToOwnSupply
* @property {BpsPercentRatioPattern} supplyInProfitRelToCirculatingSupply
* @property {BpsPercentRatioPattern} supplyInProfitRelToOwnSupply
* @property {BpsPercentRatioPattern} supplyRelToCirculatingSupply
* @property {BpsPercentRatioPattern} unrealizedLossRelToMarketCap
* @property {BpsPercentRatioPattern} unrealizedProfitRelToMarketCap
*/
/**
* Create a InvestedNegNetNuplSupplyUnrealizedPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {InvestedNegNetNuplSupplyUnrealizedPattern}
*/
function createInvestedNegNetNuplSupplyUnrealizedPattern(client, acc) {
return {
investedCapitalInLossRelToRealizedCap: createBpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_loss_rel_to_realized_cap')),
investedCapitalInProfitRelToRealizedCap: createBpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_profit_rel_to_realized_cap')),
negUnrealizedLossRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'neg_unrealized_loss_rel_to_market_cap')),
netUnrealizedPnlRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_market_cap')),
nupl: createMetricPattern1(client, _m(acc, 'nupl')),
supplyInLossRelToCirculatingSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply')),
supplyInLossRelToOwnSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_own_supply')),
supplyInProfitRelToCirculatingSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply')),
supplyInProfitRelToOwnSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_own_supply')),
supplyRelToCirculatingSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_rel_to_circulating_supply')),
unrealizedLossRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_market_cap')),
unrealizedProfitRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_market_cap')),
};
}
/** /**
* @typedef {Object} _1m1w1y24hBaseBpsCumulativeHeightPercentRatioSumPattern * @typedef {Object} _1m1w1y24hBaseBpsCumulativeHeightPercentRatioSumPattern
* @property {BpsPercentRatioPattern} _1m * @property {BpsPercentRatioPattern} _1m
@@ -2289,6 +2240,43 @@ function createAverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern
}; };
} }
/**
* @typedef {Object} InvestedNetNuplSupplyUnrealizedPattern
* @property {BpsPercentRatioPattern} investedCapitalInLossRelToRealizedCap
* @property {BpsPercentRatioPattern} investedCapitalInProfitRelToRealizedCap
* @property {BpsPercentRatioPattern} netUnrealizedPnlRelToMarketCap
* @property {MetricPattern1<StoredF32>} nupl
* @property {BpsPercentRatioPattern} supplyInLossRelToCirculatingSupply
* @property {BpsPercentRatioPattern} supplyInLossRelToOwnSupply
* @property {BpsPercentRatioPattern} supplyInProfitRelToCirculatingSupply
* @property {BpsPercentRatioPattern} supplyInProfitRelToOwnSupply
* @property {BpsPercentRatioPattern} supplyRelToCirculatingSupply
* @property {BpsPercentRatioPattern} unrealizedLossRelToMarketCap
* @property {BpsPercentRatioPattern} unrealizedProfitRelToMarketCap
*/
/**
* Create a InvestedNetNuplSupplyUnrealizedPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {InvestedNetNuplSupplyUnrealizedPattern}
*/
function createInvestedNetNuplSupplyUnrealizedPattern(client, acc) {
return {
investedCapitalInLossRelToRealizedCap: createBpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_loss_rel_to_realized_cap')),
investedCapitalInProfitRelToRealizedCap: createBpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_profit_rel_to_realized_cap')),
netUnrealizedPnlRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_market_cap')),
nupl: createMetricPattern1(client, _m(acc, 'nupl')),
supplyInLossRelToCirculatingSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply')),
supplyInLossRelToOwnSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_own_supply')),
supplyInProfitRelToCirculatingSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply')),
supplyInProfitRelToOwnSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_own_supply')),
supplyRelToCirculatingSupply: createBpsPercentRatioPattern(client, _m(acc, 'supply_rel_to_circulating_supply')),
unrealizedLossRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_market_cap')),
unrealizedProfitRelToMarketCap: createBpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_market_cap')),
};
}
/** /**
* @typedef {Object} AverageGainsLossesRsiStochPattern * @typedef {Object} AverageGainsLossesRsiStochPattern
* @property {MetricPattern1<StoredF32>} averageGain * @property {MetricPattern1<StoredF32>} averageGain
@@ -2390,6 +2378,39 @@ function createAverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, acc) {
}; };
} }
/**
* @typedef {Object} AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern
* @property {_1m1w1y24hPattern<BasisPoints16>} average
* @property {MetricPattern18<BasisPoints16>} height
* @property {_1m1w1y24hPattern<BasisPoints16>} max
* @property {_1m1w1y24hPattern<BasisPoints16>} median
* @property {_1m1w1y24hPattern<BasisPoints16>} min
* @property {_1m1w1y24hPattern<BasisPoints16>} pct10
* @property {_1m1w1y24hPattern<BasisPoints16>} pct25
* @property {_1m1w1y24hPattern<BasisPoints16>} pct75
* @property {_1m1w1y24hPattern<BasisPoints16>} pct90
*/
/**
* Create a AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern}
*/
function createAverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, acc) {
return {
average: create_1m1w1y24hPattern(client, _m(acc, 'average')),
height: createMetricPattern18(client, acc),
max: create_1m1w1y24hPattern(client, _m(acc, 'max')),
median: create_1m1w1y24hPattern(client, _m(acc, 'median')),
min: create_1m1w1y24hPattern(client, _m(acc, 'min')),
pct10: create_1m1w1y24hPattern(client, _m(acc, 'p10')),
pct25: create_1m1w1y24hPattern(client, _m(acc, 'p25')),
pct75: create_1m1w1y24hPattern(client, _m(acc, 'p75')),
pct90: create_1m1w1y24hPattern(client, _m(acc, 'p90')),
};
}
/** /**
* @typedef {Object} AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern * @typedef {Object} AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern
* @property {_1m1w1y24hPattern<StoredU64>} average * @property {_1m1w1y24hPattern<StoredU64>} average
@@ -2423,41 +2444,6 @@ function createAverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, acc) {
}; };
} }
/**
* @template T
* @typedef {Object} AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern
* @property {_1m1w1y24hPattern<T>} average
* @property {MetricPattern18<T>} height
* @property {_1m1w1y24hPattern<T>} max
* @property {_1m1w1y24hPattern<T>} median
* @property {_1m1w1y24hPattern<T>} min
* @property {_1m1w1y24hPattern<T>} pct10
* @property {_1m1w1y24hPattern<T>} pct25
* @property {_1m1w1y24hPattern<T>} pct75
* @property {_1m1w1y24hPattern<T>} pct90
*/
/**
* Create a AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern pattern node
* @template T
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<T>}
*/
function createAverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, acc) {
return {
average: create_1m1w1y24hPattern(client, _m(acc, 'average')),
height: createMetricPattern18(client, acc),
max: create_1m1w1y24hPattern(client, _m(acc, 'max')),
median: create_1m1w1y24hPattern(client, _m(acc, 'median')),
min: create_1m1w1y24hPattern(client, _m(acc, 'min')),
pct10: create_1m1w1y24hPattern(client, _m(acc, 'p10')),
pct25: create_1m1w1y24hPattern(client, _m(acc, 'p25')),
pct75: create_1m1w1y24hPattern(client, _m(acc, 'p75')),
pct90: create_1m1w1y24hPattern(client, _m(acc, 'p90')),
};
}
/** /**
* @typedef {Object} _1m1w1y24hBtcCentsSatsUsdPattern * @typedef {Object} _1m1w1y24hBtcCentsSatsUsdPattern
* @property {BtcCentsSatsUsdPattern} _1m * @property {BtcCentsSatsUsdPattern} _1m
@@ -2587,8 +2573,8 @@ function create_10y2y3y4y5y6y8yPattern(client, acc) {
* @property {CoinblocksCoindaysSentPattern} activity * @property {CoinblocksCoindaysSentPattern} activity
* @property {MaxMinPattern} costBasis * @property {MaxMinPattern} costBasis
* @property {UtxoPattern} outputs * @property {UtxoPattern} outputs
* @property {GrossMvrvNegNetRealizedSentSoprValuePattern} realized * @property {MvrvNegNetRealizedSentSoprValuePattern} realized
* @property {InvestedNegNetNuplSupplyUnrealizedPattern} relative * @property {InvestedNetNuplSupplyUnrealizedPattern} relative
* @property {ChangeHalvedTotalPattern} supply * @property {ChangeHalvedTotalPattern} supply
* @property {GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern} unrealized * @property {GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern} unrealized
*/ */
@@ -2604,42 +2590,13 @@ function createActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client
activity: createCoinblocksCoindaysSentPattern(client, acc), activity: createCoinblocksCoindaysSentPattern(client, acc),
costBasis: createMaxMinPattern(client, _m(acc, 'cost_basis')), costBasis: createMaxMinPattern(client, _m(acc, 'cost_basis')),
outputs: createUtxoPattern(client, _m(acc, 'utxo_count')), outputs: createUtxoPattern(client, _m(acc, 'utxo_count')),
realized: createGrossMvrvNegNetRealizedSentSoprValuePattern(client, acc), realized: createMvrvNegNetRealizedSentSoprValuePattern(client, acc),
relative: createInvestedNegNetNuplSupplyUnrealizedPattern(client, acc), relative: createInvestedNetNuplSupplyUnrealizedPattern(client, acc),
supply: createChangeHalvedTotalPattern(client, _m(acc, 'supply')), supply: createChangeHalvedTotalPattern(client, _m(acc, 'supply')),
unrealized: createGreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern(client, acc), unrealized: createGreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern(client, acc),
}; };
} }
/**
* @typedef {Object} GrossNegNetSupplyUnrealizedPattern
* @property {CentsUsdPattern} grossPnl
* @property {MetricPattern1<Dollars>} negUnrealizedLoss
* @property {CentsUsdPattern} netUnrealizedPnl
* @property {BtcCentsSatsUsdPattern} supplyInLoss
* @property {BtcCentsSatsUsdPattern} supplyInProfit
* @property {CentsUsdPattern} unrealizedLoss
* @property {CentsUsdPattern} unrealizedProfit
*/
/**
* Create a GrossNegNetSupplyUnrealizedPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {GrossNegNetSupplyUnrealizedPattern}
*/
function createGrossNegNetSupplyUnrealizedPattern(client, acc) {
return {
grossPnl: createCentsUsdPattern(client, _m(acc, 'unrealized_gross_pnl')),
negUnrealizedLoss: createMetricPattern1(client, _m(acc, 'neg_unrealized_loss')),
netUnrealizedPnl: createCentsUsdPattern(client, _m(acc, 'net_unrealized_pnl')),
supplyInLoss: createBtcCentsSatsUsdPattern(client, _m(acc, 'supply_in_loss')),
supplyInProfit: createBtcCentsSatsUsdPattern(client, _m(acc, 'supply_in_profit')),
unrealizedLoss: createCentsUsdPattern(client, _m(acc, 'unrealized_loss')),
unrealizedProfit: createCentsUsdPattern(client, _m(acc, 'unrealized_profit')),
};
}
/** /**
* @typedef {Object} MvrvRealizedPattern * @typedef {Object} MvrvRealizedPattern
* @property {MetricPattern1<StoredF32>} mvrv * @property {MetricPattern1<StoredF32>} mvrv
@@ -2669,41 +2626,14 @@ function createMvrvRealizedPattern(client, acc) {
}; };
} }
/**
* @typedef {Object} _1m1w1y24hBaseCumulativePattern
* @property {AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2} _1m
* @property {AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2} _1w
* @property {AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2} _1y
* @property {AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2} _24h
* @property {BtcCentsSatsUsdPattern} base
* @property {BtcCentsSatsUsdPattern} cumulative
*/
/**
* Create a _1m1w1y24hBaseCumulativePattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {_1m1w1y24hBaseCumulativePattern}
*/
function create_1m1w1y24hBaseCumulativePattern(client, acc) {
return {
_1m: createAverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, _m(acc, '1m')),
_1w: createAverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, _m(acc, '1w')),
_1y: createAverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, _m(acc, '1y')),
_24h: createAverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, _m(acc, '24h')),
base: createBtcCentsSatsUsdPattern(client, acc),
cumulative: createBtcCentsSatsUsdPattern(client, _m(acc, 'cumulative')),
};
}
/** /**
* @typedef {Object} ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2 * @typedef {Object} ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2
* @property {SentPattern} activity * @property {SentPattern} activity
* @property {UtxoPattern} outputs * @property {UtxoPattern} outputs
* @property {GrossMvrvNegNetRealizedSentSoprValuePattern} realized * @property {MvrvNegNetRealizedSentSoprValuePattern} realized
* @property {SupplyPattern3} relative * @property {SupplyPattern3} relative
* @property {ChangeHalvedTotalPattern} supply * @property {ChangeHalvedTotalPattern} supply
* @property {GrossNegNetSupplyUnrealizedPattern} unrealized * @property {NegNetSupplyUnrealizedPattern} unrealized
*/ */
/** /**
@@ -2716,10 +2646,10 @@ function createActivityOutputsRealizedRelativeSupplyUnrealizedPattern2(client, a
return { return {
activity: createSentPattern(client, _m(acc, 'sent')), activity: createSentPattern(client, _m(acc, 'sent')),
outputs: createUtxoPattern(client, _m(acc, 'utxo_count')), outputs: createUtxoPattern(client, _m(acc, 'utxo_count')),
realized: createGrossMvrvNegNetRealizedSentSoprValuePattern(client, acc), realized: createMvrvNegNetRealizedSentSoprValuePattern(client, acc),
relative: createSupplyPattern3(client, _m(acc, 'supply')), relative: createSupplyPattern3(client, _m(acc, 'supply')),
supply: createChangeHalvedTotalPattern(client, _m(acc, 'supply')), supply: createChangeHalvedTotalPattern(client, _m(acc, 'supply')),
unrealized: createGrossNegNetSupplyUnrealizedPattern(client, acc), unrealized: createNegNetSupplyUnrealizedPattern(client, acc),
}; };
} }
@@ -2751,29 +2681,29 @@ function createActivityOutputsRealizedRelativeSupplyUnrealizedPattern(client, ac
} }
/** /**
* @typedef {Object} BalanceBothReactivatedReceivingSendingPattern * @typedef {Object} NegNetSupplyUnrealizedPattern
* @property {AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<StoredU32>} balanceDecreased * @property {MetricPattern1<Dollars>} negUnrealizedLoss
* @property {AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<StoredU32>} balanceIncreased * @property {CentsUsdPattern} netUnrealizedPnl
* @property {AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<StoredU32>} both * @property {BtcCentsSatsUsdPattern} supplyInLoss
* @property {AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<StoredU32>} reactivated * @property {BtcCentsSatsUsdPattern} supplyInProfit
* @property {AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<StoredU32>} receiving * @property {CentsUsdPattern} unrealizedLoss
* @property {AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<StoredU32>} sending * @property {CentsUsdPattern} unrealizedProfit
*/ */
/** /**
* Create a BalanceBothReactivatedReceivingSendingPattern pattern node * Create a NegNetSupplyUnrealizedPattern pattern node
* @param {BrkClientBase} client * @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name * @param {string} acc - Accumulated metric name
* @returns {BalanceBothReactivatedReceivingSendingPattern} * @returns {NegNetSupplyUnrealizedPattern}
*/ */
function createBalanceBothReactivatedReceivingSendingPattern(client, acc) { function createNegNetSupplyUnrealizedPattern(client, acc) {
return { return {
balanceDecreased: createAverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'balance_decreased')), negUnrealizedLoss: createMetricPattern1(client, _m(acc, 'neg_unrealized_loss')),
balanceIncreased: createAverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'balance_increased')), netUnrealizedPnl: createCentsUsdPattern(client, _m(acc, 'net_unrealized_pnl')),
both: createAverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'both')), supplyInLoss: createBtcCentsSatsUsdPattern(client, _m(acc, 'supply_in_loss')),
reactivated: createAverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'reactivated')), supplyInProfit: createBtcCentsSatsUsdPattern(client, _m(acc, 'supply_in_profit')),
receiving: createAverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'receiving')), unrealizedLoss: createCentsUsdPattern(client, _m(acc, 'unrealized_loss')),
sending: createAverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'sending')), unrealizedProfit: createCentsUsdPattern(client, _m(acc, 'unrealized_profit')),
}; };
} }
@@ -2852,6 +2782,33 @@ function createSupplyPattern3(client, acc) {
}; };
} }
/**
* @template T
* @typedef {Object} _1m1w1y24hHeightPattern
* @property {MetricPattern1<T>} _1m
* @property {MetricPattern1<T>} _1w
* @property {MetricPattern1<T>} _1y
* @property {MetricPattern1<T>} _24h
* @property {MetricPattern18<T>} height
*/
/**
* Create a _1m1w1y24hHeightPattern pattern node
* @template T
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {_1m1w1y24hHeightPattern<T>}
*/
function create_1m1w1y24hHeightPattern(client, acc) {
return {
_1m: createMetricPattern1(client, _m(acc, 'average_1m')),
_1w: createMetricPattern1(client, _m(acc, 'average_1w')),
_1y: createMetricPattern1(client, _m(acc, 'average_1y')),
_24h: createMetricPattern1(client, _m(acc, 'average_24h')),
height: createMetricPattern18(client, acc),
};
}
/** /**
* @typedef {Object} _1m1w1y24hPattern6 * @typedef {Object} _1m1w1y24hPattern6
* @property {BaseBtcCentsSatsUsdPattern} _1m * @property {BaseBtcCentsSatsUsdPattern} _1m
@@ -2921,6 +2878,29 @@ function create_1m1w1y24hPattern5(client, acc) {
}; };
} }
/**
* @typedef {Object} BothReactivatedReceivingSendingPattern
* @property {_1m1w1y24hHeightPattern<StoredU32>} both
* @property {_1m1w1y24hHeightPattern<StoredU32>} reactivated
* @property {_1m1w1y24hHeightPattern<StoredU32>} receiving
* @property {_1m1w1y24hHeightPattern<StoredU32>} sending
*/
/**
* Create a BothReactivatedReceivingSendingPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {BothReactivatedReceivingSendingPattern}
*/
function createBothReactivatedReceivingSendingPattern(client, acc) {
return {
both: create_1m1w1y24hHeightPattern(client, _m(acc, 'both')),
reactivated: create_1m1w1y24hHeightPattern(client, _m(acc, 'reactivated')),
receiving: create_1m1w1y24hHeightPattern(client, _m(acc, 'receiving')),
sending: create_1m1w1y24hHeightPattern(client, _m(acc, 'sending')),
};
}
/** /**
* @typedef {Object} BtcCentsSatsUsdPattern * @typedef {Object} BtcCentsSatsUsdPattern
* @property {MetricPattern1<Bitcoin>} btc * @property {MetricPattern1<Bitcoin>} btc
@@ -3060,19 +3040,19 @@ function createBaseCumulativeSumPattern(client, acc) {
} }
/** /**
* @typedef {Object} BpsPercentRatioPattern2 * @typedef {Object} BpsPercentRatioPattern3
* @property {AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<BasisPoints16>} bps * @property {AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern} bps
* @property {MetricPattern1<StoredF32>} percent * @property {MetricPattern1<StoredF32>} percent
* @property {MetricPattern1<StoredF32>} ratio * @property {MetricPattern1<StoredF32>} ratio
*/ */
/** /**
* Create a BpsPercentRatioPattern2 pattern node * Create a BpsPercentRatioPattern3 pattern node
* @param {BrkClientBase} client * @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name * @param {string} acc - Accumulated metric name
* @returns {BpsPercentRatioPattern2} * @returns {BpsPercentRatioPattern3}
*/ */
function createBpsPercentRatioPattern2(client, acc) { function createBpsPercentRatioPattern3(client, acc) {
return { return {
bps: createAverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'bps')), bps: createAverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'bps')),
percent: createMetricPattern1(client, acc), percent: createMetricPattern1(client, acc),
@@ -3546,11 +3526,11 @@ function create_2wPattern(client, acc) {
* @property {MetricPattern18<StoredU64>} totalSize * @property {MetricPattern18<StoredU64>} totalSize
* @property {MetricsTree_Blocks_Weight} weight * @property {MetricsTree_Blocks_Weight} weight
* @property {MetricsTree_Blocks_Count} count * @property {MetricsTree_Blocks_Count} count
* @property {AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern<Timestamp>} interval * @property {_1m1w1y24hHeightPattern<Timestamp>} interval
* @property {MetricsTree_Blocks_Halving} halving * @property {MetricsTree_Blocks_Halving} halving
* @property {AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern} vbytes * @property {AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern} vbytes
* @property {MetricsTree_Blocks_Size} size * @property {MetricsTree_Blocks_Size} size
* @property {BpsPercentRatioPattern2} fullness * @property {MetricsTree_Blocks_Fullness} fullness
*/ */
/** /**
@@ -3656,6 +3636,13 @@ function create_2wPattern(client, acc) {
* @property {_1m1w1y24hPattern<StoredU64>} pct90 * @property {_1m1w1y24hPattern<StoredU64>} pct90
*/ */
/**
* @typedef {Object} MetricsTree_Blocks_Fullness
* @property {_1m1w1y24hHeightPattern<BasisPoints16>} bps
* @property {MetricPattern1<StoredF32>} ratio
* @property {MetricPattern1<StoredF32>} percent
*/
/** /**
* @typedef {Object} MetricsTree_Transactions * @typedef {Object} MetricsTree_Transactions
* @property {MetricPattern18<TxIndex>} firstTxindex * @property {MetricPattern18<TxIndex>} firstTxindex
@@ -3805,7 +3792,7 @@ function create_2wPattern(client, acc) {
/** /**
* @typedef {Object} MetricsTree_Scripts_Value * @typedef {Object} MetricsTree_Scripts_Value
* @property {_1m1w1y24hBaseCumulativePattern} opreturn * @property {BaseCumulativePattern} opreturn
*/ */
/** /**
@@ -3822,9 +3809,9 @@ function create_2wPattern(client, acc) {
/** /**
* @typedef {Object} MetricsTree_Mining_Rewards * @typedef {Object} MetricsTree_Mining_Rewards
* @property {_1m1w1y24hBaseCumulativePattern} coinbase * @property {BaseCumulativeSumPattern} coinbase
* @property {_1m1w1y24hBaseCumulativePattern} subsidy * @property {BaseCumulativePattern} subsidy
* @property {_1m1w1y24hBaseCumulativePattern} fees * @property {MetricsTree_Mining_Rewards_Fees} fees
* @property {BaseCumulativeSumPattern} unclaimedRewards * @property {BaseCumulativeSumPattern} unclaimedRewards
* @property {BpsPercentRatioPattern} feeDominance * @property {BpsPercentRatioPattern} feeDominance
* @property {_1m1w1y24hPattern2} feeDominanceRolling * @property {_1m1w1y24hPattern2} feeDominanceRolling
@@ -3833,6 +3820,16 @@ function create_2wPattern(client, acc) {
* @property {CentsUsdPattern} subsidySma1y * @property {CentsUsdPattern} subsidySma1y
*/ */
/**
* @typedef {Object} MetricsTree_Mining_Rewards_Fees
* @property {BtcCentsSatsUsdPattern} base
* @property {BtcCentsSatsUsdPattern} cumulative
* @property {AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2} _24h
* @property {AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2} _1w
* @property {AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2} _1m
* @property {AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2} _1y
*/
/** /**
* @typedef {Object} MetricsTree_Mining_Hashrate * @typedef {Object} MetricsTree_Mining_Hashrate
* @property {MetricPattern1<StoredF64>} hashRate * @property {MetricPattern1<StoredF64>} hashRate
@@ -4794,7 +4791,6 @@ function create_2wPattern(client, acc) {
* @property {BpsPercentRatioPattern} unrealizedProfitRelToMarketCap * @property {BpsPercentRatioPattern} unrealizedProfitRelToMarketCap
* @property {BpsPercentRatioPattern} unrealizedLossRelToMarketCap * @property {BpsPercentRatioPattern} unrealizedLossRelToMarketCap
* @property {BpsPercentRatioPattern} netUnrealizedPnlRelToMarketCap * @property {BpsPercentRatioPattern} netUnrealizedPnlRelToMarketCap
* @property {BpsPercentRatioPattern} negUnrealizedLossRelToMarketCap
* @property {MetricPattern1<StoredF32>} nupl * @property {MetricPattern1<StoredF32>} nupl
* @property {BpsPercentRatioPattern} investedCapitalInProfitRelToRealizedCap * @property {BpsPercentRatioPattern} investedCapitalInProfitRelToRealizedCap
* @property {BpsPercentRatioPattern} investedCapitalInLossRelToRealizedCap * @property {BpsPercentRatioPattern} investedCapitalInLossRelToRealizedCap
@@ -4802,7 +4798,6 @@ function create_2wPattern(client, acc) {
* @property {BpsPercentRatioPattern} supplyInLossRelToOwnSupply * @property {BpsPercentRatioPattern} supplyInLossRelToOwnSupply
* @property {BpsPercentRatioPattern} unrealizedProfitRelToOwnGrossPnl * @property {BpsPercentRatioPattern} unrealizedProfitRelToOwnGrossPnl
* @property {BpsPercentRatioPattern} unrealizedLossRelToOwnGrossPnl * @property {BpsPercentRatioPattern} unrealizedLossRelToOwnGrossPnl
* @property {BpsPercentRatioPattern} negUnrealizedLossRelToOwnGrossPnl
* @property {BpsPercentRatioPattern} netUnrealizedPnlRelToOwnGrossPnl * @property {BpsPercentRatioPattern} netUnrealizedPnlRelToOwnGrossPnl
*/ */
@@ -4814,7 +4809,7 @@ function create_2wPattern(client, acc) {
* @property {CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern} realized * @property {CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern} realized
* @property {InvestedMaxMinPercentilesPattern} costBasis * @property {InvestedMaxMinPercentilesPattern} costBasis
* @property {GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern} unrealized * @property {GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern} unrealized
* @property {InvestedNegNetNuplSupplyUnrealizedPattern3} relative * @property {InvestedNetNuplSupplyUnrealizedPattern3} relative
* @property {MetricPattern1<StoredF32>} dormancy * @property {MetricPattern1<StoredF32>} dormancy
* @property {MetricPattern1<StoredF32>} velocity * @property {MetricPattern1<StoredF32>} velocity
* @property {MetricPattern1<Cents>} adjustedValueCreated * @property {MetricPattern1<Cents>} adjustedValueCreated
@@ -4833,7 +4828,7 @@ function create_2wPattern(client, acc) {
* @property {CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern} realized * @property {CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern} realized
* @property {InvestedMaxMinPercentilesPattern} costBasis * @property {InvestedMaxMinPercentilesPattern} costBasis
* @property {GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern} unrealized * @property {GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern} unrealized
* @property {InvestedNegNetNuplSupplyUnrealizedPattern3} relative * @property {InvestedNetNuplSupplyUnrealizedPattern3} relative
* @property {MetricPattern1<StoredF32>} dormancy * @property {MetricPattern1<StoredF32>} dormancy
* @property {MetricPattern1<StoredF32>} velocity * @property {MetricPattern1<StoredF32>} velocity
*/ */
@@ -5068,15 +5063,15 @@ function create_2wPattern(client, acc) {
/** /**
* @typedef {Object} MetricsTree_Distribution_AddressActivity * @typedef {Object} MetricsTree_Distribution_AddressActivity
* @property {BalanceBothReactivatedReceivingSendingPattern} all * @property {BothReactivatedReceivingSendingPattern} all
* @property {BalanceBothReactivatedReceivingSendingPattern} p2pk65 * @property {BothReactivatedReceivingSendingPattern} p2pk65
* @property {BalanceBothReactivatedReceivingSendingPattern} p2pk33 * @property {BothReactivatedReceivingSendingPattern} p2pk33
* @property {BalanceBothReactivatedReceivingSendingPattern} p2pkh * @property {BothReactivatedReceivingSendingPattern} p2pkh
* @property {BalanceBothReactivatedReceivingSendingPattern} p2sh * @property {BothReactivatedReceivingSendingPattern} p2sh
* @property {BalanceBothReactivatedReceivingSendingPattern} p2wpkh * @property {BothReactivatedReceivingSendingPattern} p2wpkh
* @property {BalanceBothReactivatedReceivingSendingPattern} p2wsh * @property {BothReactivatedReceivingSendingPattern} p2wsh
* @property {BalanceBothReactivatedReceivingSendingPattern} p2tr * @property {BothReactivatedReceivingSendingPattern} p2tr
* @property {BalanceBothReactivatedReceivingSendingPattern} p2a * @property {BothReactivatedReceivingSendingPattern} p2a
*/ */
/** /**
@@ -5107,15 +5102,15 @@ function create_2wPattern(client, acc) {
/** /**
* @typedef {Object} MetricsTree_Distribution_GrowthRate * @typedef {Object} MetricsTree_Distribution_GrowthRate
* @property {BpsPercentRatioPattern2} all * @property {BpsPercentRatioPattern3} all
* @property {BpsPercentRatioPattern2} p2pk65 * @property {BpsPercentRatioPattern3} p2pk65
* @property {BpsPercentRatioPattern2} p2pk33 * @property {BpsPercentRatioPattern3} p2pk33
* @property {BpsPercentRatioPattern2} p2pkh * @property {BpsPercentRatioPattern3} p2pkh
* @property {BpsPercentRatioPattern2} p2sh * @property {BpsPercentRatioPattern3} p2sh
* @property {BpsPercentRatioPattern2} p2wpkh * @property {BpsPercentRatioPattern3} p2wpkh
* @property {BpsPercentRatioPattern2} p2wsh * @property {BpsPercentRatioPattern3} p2wsh
* @property {BpsPercentRatioPattern2} p2tr * @property {BpsPercentRatioPattern3} p2tr
* @property {BpsPercentRatioPattern2} p2a * @property {BpsPercentRatioPattern3} p2a
*/ */
/** /**
@@ -6165,7 +6160,7 @@ class BrkClient extends BrkClientBase {
height14yAgo: createMetricPattern18(this, 'height_14y_ago'), height14yAgo: createMetricPattern18(this, 'height_14y_ago'),
height26yAgo: createMetricPattern18(this, 'height_26y_ago'), height26yAgo: createMetricPattern18(this, 'height_26y_ago'),
}, },
interval: createAverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(this, 'block_interval'), interval: create_1m1w1y24hHeightPattern(this, 'block_interval'),
halving: { halving: {
epoch: createMetricPattern1(this, 'halving_epoch'), epoch: createMetricPattern1(this, 'halving_epoch'),
blocksBeforeNextHalving: createMetricPattern1(this, 'blocks_before_next_halving'), blocksBeforeNextHalving: createMetricPattern1(this, 'blocks_before_next_halving'),
@@ -6184,7 +6179,11 @@ class BrkClient extends BrkClientBase {
pct75: create_1m1w1y24hPattern(this, 'block_size_p75'), pct75: create_1m1w1y24hPattern(this, 'block_size_p75'),
pct90: create_1m1w1y24hPattern(this, 'block_size_p90'), pct90: create_1m1w1y24hPattern(this, 'block_size_p90'),
}, },
fullness: createBpsPercentRatioPattern2(this, 'block_fullness'), fullness: {
bps: create_1m1w1y24hHeightPattern(this, 'block_fullness_bps'),
ratio: createMetricPattern1(this, 'block_fullness_ratio'),
percent: createMetricPattern1(this, 'block_fullness'),
},
}, },
transactions: { transactions: {
firstTxindex: createMetricPattern18(this, 'first_txindex'), firstTxindex: createMetricPattern18(this, 'first_txindex'),
@@ -6294,7 +6293,7 @@ class BrkClient extends BrkClientBase {
segwit: createCumulativeHeightSumPattern(this, 'segwit_count'), segwit: createCumulativeHeightSumPattern(this, 'segwit_count'),
}, },
value: { value: {
opreturn: create_1m1w1y24hBaseCumulativePattern(this, 'opreturn_value'), opreturn: createBaseCumulativePattern(this, 'opreturn_value'),
}, },
adoption: { adoption: {
taproot: createBpsPercentRatioPattern(this, 'taproot_adoption'), taproot: createBpsPercentRatioPattern(this, 'taproot_adoption'),
@@ -6303,9 +6302,16 @@ class BrkClient extends BrkClientBase {
}, },
mining: { mining: {
rewards: { rewards: {
coinbase: create_1m1w1y24hBaseCumulativePattern(this, 'coinbase'), coinbase: createBaseCumulativeSumPattern(this, 'coinbase'),
subsidy: create_1m1w1y24hBaseCumulativePattern(this, 'subsidy'), subsidy: createBaseCumulativePattern(this, 'subsidy'),
fees: create_1m1w1y24hBaseCumulativePattern(this, 'fees'), fees: {
base: createBtcCentsSatsUsdPattern(this, 'fees'),
cumulative: createBtcCentsSatsUsdPattern(this, 'fees_cumulative'),
_24h: createAverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(this, 'fees_24h'),
_1w: createAverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(this, 'fees_1w'),
_1m: createAverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(this, 'fees_1m'),
_1y: createAverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(this, 'fees_1y'),
},
unclaimedRewards: createBaseCumulativeSumPattern(this, 'unclaimed_rewards'), unclaimedRewards: createBaseCumulativeSumPattern(this, 'unclaimed_rewards'),
feeDominance: createBpsPercentRatioPattern(this, 'fee_dominance'), feeDominance: createBpsPercentRatioPattern(this, 'fee_dominance'),
feeDominanceRolling: create_1m1w1y24hPattern2(this, 'fee_dominance'), feeDominanceRolling: create_1m1w1y24hPattern2(this, 'fee_dominance'),
@@ -7011,7 +7017,6 @@ class BrkClient extends BrkClientBase {
unrealizedProfitRelToMarketCap: createBpsPercentRatioPattern(this, 'unrealized_profit_rel_to_market_cap'), unrealizedProfitRelToMarketCap: createBpsPercentRatioPattern(this, 'unrealized_profit_rel_to_market_cap'),
unrealizedLossRelToMarketCap: createBpsPercentRatioPattern(this, 'unrealized_loss_rel_to_market_cap'), unrealizedLossRelToMarketCap: createBpsPercentRatioPattern(this, 'unrealized_loss_rel_to_market_cap'),
netUnrealizedPnlRelToMarketCap: createBpsPercentRatioPattern(this, 'net_unrealized_pnl_rel_to_market_cap'), netUnrealizedPnlRelToMarketCap: createBpsPercentRatioPattern(this, 'net_unrealized_pnl_rel_to_market_cap'),
negUnrealizedLossRelToMarketCap: createBpsPercentRatioPattern(this, 'neg_unrealized_loss_rel_to_market_cap'),
nupl: createMetricPattern1(this, 'nupl'), nupl: createMetricPattern1(this, 'nupl'),
investedCapitalInProfitRelToRealizedCap: createBpsPercentRatioPattern(this, 'invested_capital_in_profit_rel_to_realized_cap'), investedCapitalInProfitRelToRealizedCap: createBpsPercentRatioPattern(this, 'invested_capital_in_profit_rel_to_realized_cap'),
investedCapitalInLossRelToRealizedCap: createBpsPercentRatioPattern(this, 'invested_capital_in_loss_rel_to_realized_cap'), investedCapitalInLossRelToRealizedCap: createBpsPercentRatioPattern(this, 'invested_capital_in_loss_rel_to_realized_cap'),
@@ -7019,7 +7024,6 @@ class BrkClient extends BrkClientBase {
supplyInLossRelToOwnSupply: createBpsPercentRatioPattern(this, 'supply_in_loss_rel_to_own_supply'), supplyInLossRelToOwnSupply: createBpsPercentRatioPattern(this, 'supply_in_loss_rel_to_own_supply'),
unrealizedProfitRelToOwnGrossPnl: createBpsPercentRatioPattern(this, 'unrealized_profit_rel_to_own_gross_pnl'), unrealizedProfitRelToOwnGrossPnl: createBpsPercentRatioPattern(this, 'unrealized_profit_rel_to_own_gross_pnl'),
unrealizedLossRelToOwnGrossPnl: createBpsPercentRatioPattern(this, 'unrealized_loss_rel_to_own_gross_pnl'), unrealizedLossRelToOwnGrossPnl: createBpsPercentRatioPattern(this, 'unrealized_loss_rel_to_own_gross_pnl'),
negUnrealizedLossRelToOwnGrossPnl: createBpsPercentRatioPattern(this, 'neg_unrealized_loss_rel_to_own_gross_pnl'),
netUnrealizedPnlRelToOwnGrossPnl: createBpsPercentRatioPattern(this, 'net_unrealized_pnl_rel_to_own_gross_pnl'), netUnrealizedPnlRelToOwnGrossPnl: createBpsPercentRatioPattern(this, 'net_unrealized_pnl_rel_to_own_gross_pnl'),
}, },
dormancy: createMetricPattern1(this, 'dormancy'), dormancy: createMetricPattern1(this, 'dormancy'),
@@ -7032,7 +7036,7 @@ class BrkClient extends BrkClientBase {
realized: createCapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern(this, 'sth'), realized: createCapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern(this, 'sth'),
costBasis: createInvestedMaxMinPercentilesPattern(this, 'sth'), costBasis: createInvestedMaxMinPercentilesPattern(this, 'sth'),
unrealized: createGreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern(this, 'sth'), unrealized: createGreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern(this, 'sth'),
relative: createInvestedNegNetNuplSupplyUnrealizedPattern3(this, 'sth'), relative: createInvestedNetNuplSupplyUnrealizedPattern3(this, 'sth'),
dormancy: createMetricPattern1(this, 'sth_dormancy'), dormancy: createMetricPattern1(this, 'sth_dormancy'),
velocity: createMetricPattern1(this, 'sth_velocity'), velocity: createMetricPattern1(this, 'sth_velocity'),
adjustedValueCreated: createMetricPattern1(this, 'sth_adjusted_value_created'), adjustedValueCreated: createMetricPattern1(this, 'sth_adjusted_value_created'),
@@ -7049,7 +7053,7 @@ class BrkClient extends BrkClientBase {
realized: createCapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern(this, 'lth'), realized: createCapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern(this, 'lth'),
costBasis: createInvestedMaxMinPercentilesPattern(this, 'lth'), costBasis: createInvestedMaxMinPercentilesPattern(this, 'lth'),
unrealized: createGreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern(this, 'lth'), unrealized: createGreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern(this, 'lth'),
relative: createInvestedNegNetNuplSupplyUnrealizedPattern3(this, 'lth'), relative: createInvestedNetNuplSupplyUnrealizedPattern3(this, 'lth'),
dormancy: createMetricPattern1(this, 'lth_dormancy'), dormancy: createMetricPattern1(this, 'lth_dormancy'),
velocity: createMetricPattern1(this, 'lth_velocity'), velocity: createMetricPattern1(this, 'lth_velocity'),
}, },
@@ -7256,15 +7260,15 @@ class BrkClient extends BrkClientBase {
addrCount: createAllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern(this, 'addr_count'), addrCount: createAllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern(this, 'addr_count'),
emptyAddrCount: createAllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern(this, 'empty_addr_count'), emptyAddrCount: createAllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern(this, 'empty_addr_count'),
addressActivity: { addressActivity: {
all: createBalanceBothReactivatedReceivingSendingPattern(this, 'address_activity'), all: createBothReactivatedReceivingSendingPattern(this, 'address_activity'),
p2pk65: createBalanceBothReactivatedReceivingSendingPattern(this, 'p2pk65_address_activity'), p2pk65: createBothReactivatedReceivingSendingPattern(this, 'p2pk65_address_activity'),
p2pk33: createBalanceBothReactivatedReceivingSendingPattern(this, 'p2pk33_address_activity'), p2pk33: createBothReactivatedReceivingSendingPattern(this, 'p2pk33_address_activity'),
p2pkh: createBalanceBothReactivatedReceivingSendingPattern(this, 'p2pkh_address_activity'), p2pkh: createBothReactivatedReceivingSendingPattern(this, 'p2pkh_address_activity'),
p2sh: createBalanceBothReactivatedReceivingSendingPattern(this, 'p2sh_address_activity'), p2sh: createBothReactivatedReceivingSendingPattern(this, 'p2sh_address_activity'),
p2wpkh: createBalanceBothReactivatedReceivingSendingPattern(this, 'p2wpkh_address_activity'), p2wpkh: createBothReactivatedReceivingSendingPattern(this, 'p2wpkh_address_activity'),
p2wsh: createBalanceBothReactivatedReceivingSendingPattern(this, 'p2wsh_address_activity'), p2wsh: createBothReactivatedReceivingSendingPattern(this, 'p2wsh_address_activity'),
p2tr: createBalanceBothReactivatedReceivingSendingPattern(this, 'p2tr_address_activity'), p2tr: createBothReactivatedReceivingSendingPattern(this, 'p2tr_address_activity'),
p2a: createBalanceBothReactivatedReceivingSendingPattern(this, 'p2a_address_activity'), p2a: createBothReactivatedReceivingSendingPattern(this, 'p2a_address_activity'),
}, },
totalAddrCount: { totalAddrCount: {
all: createMetricPattern1(this, 'total_addr_count'), all: createMetricPattern1(this, 'total_addr_count'),
@@ -7289,15 +7293,15 @@ class BrkClient extends BrkClientBase {
p2a: createAverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(this, 'p2a_new_addr_count'), p2a: createAverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(this, 'p2a_new_addr_count'),
}, },
growthRate: { growthRate: {
all: createBpsPercentRatioPattern2(this, 'growth_rate'), all: createBpsPercentRatioPattern3(this, 'growth_rate'),
p2pk65: createBpsPercentRatioPattern2(this, 'p2pk65_growth_rate'), p2pk65: createBpsPercentRatioPattern3(this, 'p2pk65_growth_rate'),
p2pk33: createBpsPercentRatioPattern2(this, 'p2pk33_growth_rate'), p2pk33: createBpsPercentRatioPattern3(this, 'p2pk33_growth_rate'),
p2pkh: createBpsPercentRatioPattern2(this, 'p2pkh_growth_rate'), p2pkh: createBpsPercentRatioPattern3(this, 'p2pkh_growth_rate'),
p2sh: createBpsPercentRatioPattern2(this, 'p2sh_growth_rate'), p2sh: createBpsPercentRatioPattern3(this, 'p2sh_growth_rate'),
p2wpkh: createBpsPercentRatioPattern2(this, 'p2wpkh_growth_rate'), p2wpkh: createBpsPercentRatioPattern3(this, 'p2wpkh_growth_rate'),
p2wsh: createBpsPercentRatioPattern2(this, 'p2wsh_growth_rate'), p2wsh: createBpsPercentRatioPattern3(this, 'p2wsh_growth_rate'),
p2tr: createBpsPercentRatioPattern2(this, 'p2tr_growth_rate'), p2tr: createBpsPercentRatioPattern3(this, 'p2tr_growth_rate'),
p2a: createBpsPercentRatioPattern2(this, 'p2a_growth_rate'), p2a: createBpsPercentRatioPattern3(this, 'p2a_growth_rate'),
}, },
fundedaddressindex: createMetricPattern34(this, 'fundedaddressindex'), fundedaddressindex: createMetricPattern34(this, 'fundedaddressindex'),
emptyaddressindex: createMetricPattern35(this, 'emptyaddressindex'), emptyaddressindex: createMetricPattern35(this, 'emptyaddressindex'),
+157 -150
View File
@@ -2158,57 +2158,6 @@ class _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern:
self.sma: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'sma_4y')) self.sma: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'sma_4y'))
self.zscore: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'zscore_4y')) self.zscore: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'zscore_4y'))
class InvestedNegNetNuplSupplyUnrealizedPattern3:
"""Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name."""
self.invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_loss_rel_to_realized_cap'))
self.invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_profit_rel_to_realized_cap'))
self.neg_unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'neg_unrealized_loss_rel_to_market_cap'))
self.neg_unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'neg_unrealized_loss_rel_to_own_gross_pnl'))
self.neg_unrealized_loss_rel_to_own_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'neg_unrealized_loss_rel_to_own_market_cap'))
self.net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_market_cap'))
self.net_unrealized_pnl_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_own_gross_pnl'))
self.net_unrealized_pnl_rel_to_own_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap'))
self.nupl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'nupl'))
self.supply_in_loss_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply'))
self.supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_own_supply'))
self.supply_in_profit_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply'))
self.supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_own_supply'))
self.supply_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_rel_to_circulating_supply'))
self.unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_market_cap'))
self.unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_own_gross_pnl'))
self.unrealized_loss_rel_to_own_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap'))
self.unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_market_cap'))
self.unrealized_profit_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_own_gross_pnl'))
self.unrealized_profit_rel_to_own_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap'))
class GrossMvrvNegNetRealizedSentSoprValuePattern:
"""Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name."""
self.gross_pnl: CentsUsdPattern = CentsUsdPattern(client, _m(acc, 'realized_gross_pnl'))
self.mvrv: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'mvrv'))
self.neg_realized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'neg_realized_loss'))
self.net_realized_pnl: CumulativeHeightPattern[CentsSigned] = CumulativeHeightPattern(client, _m(acc, 'net_realized_pnl'))
self.realized_cap: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_cap'))
self.realized_cap_cents: MetricPattern1[Cents] = MetricPattern1(client, _m(acc, 'realized_cap_cents'))
self.realized_cap_change_1m: MetricPattern1[CentsSigned] = MetricPattern1(client, _m(acc, 'realized_cap_change_1m'))
self.realized_loss: CumulativeHeightPattern[Cents] = CumulativeHeightPattern(client, _m(acc, 'realized_loss'))
self.realized_price: CentsSatsUsdPattern = CentsSatsUsdPattern(client, _m(acc, 'realized_price'))
self.realized_price_ratio: BpsRatioPattern = BpsRatioPattern(client, _m(acc, 'realized_price_ratio'))
self.realized_price_ratio_percentiles: RatioPattern = RatioPattern(client, _m(acc, 'realized_price_ratio'))
self.realized_profit: CumulativeHeightPattern[Cents] = CumulativeHeightPattern(client, _m(acc, 'realized_profit'))
self.sent_in_loss: BaseCumulativePattern = BaseCumulativePattern(client, _m(acc, 'sent_in_loss'))
self.sent_in_profit: BaseCumulativePattern = BaseCumulativePattern(client, _m(acc, 'sent_in_profit'))
self.sopr: _1m1w1y24hPattern[StoredF64] = _1m1w1y24hPattern(client, _m(acc, 'sopr'))
self.value_created: MetricPattern1[Cents] = MetricPattern1(client, _m(acc, 'value_created'))
self.value_created_sum: _1m1w1y24hPattern[Cents] = _1m1w1y24hPattern(client, _m(acc, 'value_created'))
self.value_destroyed: MetricPattern1[Cents] = MetricPattern1(client, _m(acc, 'value_destroyed'))
self.value_destroyed_sum: _1m1w1y24hPattern[Cents] = _1m1w1y24hPattern(client, _m(acc, 'value_destroyed'))
class Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern: class Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
@@ -2234,6 +2183,52 @@ class Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct7
self.pct90: CentsSatsUsdPattern = CentsSatsUsdPattern(client, _m(acc, 'pct90')) self.pct90: CentsSatsUsdPattern = CentsSatsUsdPattern(client, _m(acc, 'pct90'))
self.pct95: CentsSatsUsdPattern = CentsSatsUsdPattern(client, _m(acc, 'pct95')) self.pct95: CentsSatsUsdPattern = CentsSatsUsdPattern(client, _m(acc, 'pct95'))
class InvestedNetNuplSupplyUnrealizedPattern3:
"""Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name."""
self.invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_loss_rel_to_realized_cap'))
self.invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_profit_rel_to_realized_cap'))
self.net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_market_cap'))
self.net_unrealized_pnl_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_own_gross_pnl'))
self.net_unrealized_pnl_rel_to_own_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap'))
self.nupl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'nupl'))
self.supply_in_loss_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply'))
self.supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_own_supply'))
self.supply_in_profit_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply'))
self.supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_own_supply'))
self.supply_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_rel_to_circulating_supply'))
self.unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_market_cap'))
self.unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_own_gross_pnl'))
self.unrealized_loss_rel_to_own_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap'))
self.unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_market_cap'))
self.unrealized_profit_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_own_gross_pnl'))
self.unrealized_profit_rel_to_own_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap'))
class MvrvNegNetRealizedSentSoprValuePattern:
"""Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name."""
self.mvrv: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'mvrv'))
self.neg_realized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'neg_realized_loss'))
self.net_realized_pnl: CumulativeHeightPattern[CentsSigned] = CumulativeHeightPattern(client, _m(acc, 'net_realized_pnl'))
self.realized_cap: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_cap'))
self.realized_cap_cents: MetricPattern1[Cents] = MetricPattern1(client, _m(acc, 'realized_cap_cents'))
self.realized_cap_change_1m: MetricPattern1[CentsSigned] = MetricPattern1(client, _m(acc, 'realized_cap_change_1m'))
self.realized_loss: CumulativeHeightPattern[Cents] = CumulativeHeightPattern(client, _m(acc, 'realized_loss'))
self.realized_price: CentsSatsUsdPattern = CentsSatsUsdPattern(client, _m(acc, 'realized_price'))
self.realized_price_ratio: BpsRatioPattern = BpsRatioPattern(client, _m(acc, 'realized_price_ratio'))
self.realized_profit: CumulativeHeightPattern[Cents] = CumulativeHeightPattern(client, _m(acc, 'realized_profit'))
self.sent_in_loss: BaseCumulativePattern = BaseCumulativePattern(client, _m(acc, 'sent_in_loss'))
self.sent_in_profit: BaseCumulativePattern = BaseCumulativePattern(client, _m(acc, 'sent_in_profit'))
self.sopr: _1m1w1y24hPattern[StoredF64] = _1m1w1y24hPattern(client, _m(acc, 'sopr'))
self.value_created: MetricPattern1[Cents] = MetricPattern1(client, _m(acc, 'value_created'))
self.value_created_sum: _1m1w1y24hPattern[Cents] = _1m1w1y24hPattern(client, _m(acc, 'value_created'))
self.value_destroyed: MetricPattern1[Cents] = MetricPattern1(client, _m(acc, 'value_destroyed'))
self.value_destroyed_sum: _1m1w1y24hPattern[Cents] = _1m1w1y24hPattern(client, _m(acc, 'value_destroyed'))
class BpsRatioPattern2: class BpsRatioPattern2:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
@@ -2334,24 +2329,6 @@ class _10y1m1w1y2y3m3y4y5y6m6y8yPattern3:
self._6y: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, '6y')) self._6y: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, '6y'))
self._8y: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, '8y')) self._8y: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, '8y'))
class InvestedNegNetNuplSupplyUnrealizedPattern:
"""Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name."""
self.invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_loss_rel_to_realized_cap'))
self.invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_profit_rel_to_realized_cap'))
self.neg_unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'neg_unrealized_loss_rel_to_market_cap'))
self.net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_market_cap'))
self.nupl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'nupl'))
self.supply_in_loss_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply'))
self.supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_own_supply'))
self.supply_in_profit_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply'))
self.supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_own_supply'))
self.supply_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_rel_to_circulating_supply'))
self.unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_market_cap'))
self.unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_market_cap'))
class _1m1w1y24hBaseBpsCumulativeHeightPercentRatioSumPattern: class _1m1w1y24hBaseBpsCumulativeHeightPercentRatioSumPattern:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
@@ -2403,6 +2380,23 @@ class AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern:
self.pct90: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, _m(acc, 'p90')) self.pct90: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, _m(acc, 'p90'))
self.sum: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, _m(acc, 'sum')) self.sum: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, _m(acc, 'sum'))
class InvestedNetNuplSupplyUnrealizedPattern:
"""Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name."""
self.invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_loss_rel_to_realized_cap'))
self.invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'invested_capital_in_profit_rel_to_realized_cap'))
self.net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'net_unrealized_pnl_rel_to_market_cap'))
self.nupl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'nupl'))
self.supply_in_loss_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply'))
self.supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_loss_rel_to_own_supply'))
self.supply_in_profit_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply'))
self.supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_in_profit_rel_to_own_supply'))
self.supply_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'supply_rel_to_circulating_supply'))
self.unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_loss_rel_to_market_cap'))
self.unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'unrealized_profit_rel_to_market_cap'))
class AverageGainsLossesRsiStochPattern: class AverageGainsLossesRsiStochPattern:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
@@ -2449,6 +2443,21 @@ class AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2:
self.pct90: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, 'p90')) self.pct90: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, 'p90'))
self.sum: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, 'sum')) self.sum: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, 'sum'))
class AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern:
"""Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name."""
self.average: _1m1w1y24hPattern[BasisPoints16] = _1m1w1y24hPattern(client, _m(acc, 'average'))
self.height: MetricPattern18[BasisPoints16] = MetricPattern18(client, acc)
self.max: _1m1w1y24hPattern[BasisPoints16] = _1m1w1y24hPattern(client, _m(acc, 'max'))
self.median: _1m1w1y24hPattern[BasisPoints16] = _1m1w1y24hPattern(client, _m(acc, 'median'))
self.min: _1m1w1y24hPattern[BasisPoints16] = _1m1w1y24hPattern(client, _m(acc, 'min'))
self.pct10: _1m1w1y24hPattern[BasisPoints16] = _1m1w1y24hPattern(client, _m(acc, 'p10'))
self.pct25: _1m1w1y24hPattern[BasisPoints16] = _1m1w1y24hPattern(client, _m(acc, 'p25'))
self.pct75: _1m1w1y24hPattern[BasisPoints16] = _1m1w1y24hPattern(client, _m(acc, 'p75'))
self.pct90: _1m1w1y24hPattern[BasisPoints16] = _1m1w1y24hPattern(client, _m(acc, 'p90'))
class AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern: class AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
@@ -2464,21 +2473,6 @@ class AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern:
self.pct90: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, _m(acc, 'p90')) self.pct90: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, _m(acc, 'p90'))
self.sum: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, _m(acc, 'sum')) self.sum: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, _m(acc, 'sum'))
class AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(Generic[T]):
"""Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name."""
self.average: _1m1w1y24hPattern[T] = _1m1w1y24hPattern(client, _m(acc, 'average'))
self.height: MetricPattern18[T] = MetricPattern18(client, acc)
self.max: _1m1w1y24hPattern[T] = _1m1w1y24hPattern(client, _m(acc, 'max'))
self.median: _1m1w1y24hPattern[T] = _1m1w1y24hPattern(client, _m(acc, 'median'))
self.min: _1m1w1y24hPattern[T] = _1m1w1y24hPattern(client, _m(acc, 'min'))
self.pct10: _1m1w1y24hPattern[T] = _1m1w1y24hPattern(client, _m(acc, 'p10'))
self.pct25: _1m1w1y24hPattern[T] = _1m1w1y24hPattern(client, _m(acc, 'p25'))
self.pct75: _1m1w1y24hPattern[T] = _1m1w1y24hPattern(client, _m(acc, 'p75'))
self.pct90: _1m1w1y24hPattern[T] = _1m1w1y24hPattern(client, _m(acc, 'p90'))
class _1m1w1y24hBtcCentsSatsUsdPattern: class _1m1w1y24hBtcCentsSatsUsdPattern:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
@@ -2542,24 +2536,11 @@ class ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern:
self.activity: CoinblocksCoindaysSentPattern = CoinblocksCoindaysSentPattern(client, acc) self.activity: CoinblocksCoindaysSentPattern = CoinblocksCoindaysSentPattern(client, acc)
self.cost_basis: MaxMinPattern = MaxMinPattern(client, _m(acc, 'cost_basis')) self.cost_basis: MaxMinPattern = MaxMinPattern(client, _m(acc, 'cost_basis'))
self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count')) self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count'))
self.realized: GrossMvrvNegNetRealizedSentSoprValuePattern = GrossMvrvNegNetRealizedSentSoprValuePattern(client, acc) self.realized: MvrvNegNetRealizedSentSoprValuePattern = MvrvNegNetRealizedSentSoprValuePattern(client, acc)
self.relative: InvestedNegNetNuplSupplyUnrealizedPattern = InvestedNegNetNuplSupplyUnrealizedPattern(client, acc) self.relative: InvestedNetNuplSupplyUnrealizedPattern = InvestedNetNuplSupplyUnrealizedPattern(client, acc)
self.supply: ChangeHalvedTotalPattern = ChangeHalvedTotalPattern(client, _m(acc, 'supply')) self.supply: ChangeHalvedTotalPattern = ChangeHalvedTotalPattern(client, _m(acc, 'supply'))
self.unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern = GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern(client, acc) self.unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern = GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern(client, acc)
class GrossNegNetSupplyUnrealizedPattern:
"""Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name."""
self.gross_pnl: CentsUsdPattern = CentsUsdPattern(client, _m(acc, 'unrealized_gross_pnl'))
self.neg_unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss'))
self.net_unrealized_pnl: CentsUsdPattern = CentsUsdPattern(client, _m(acc, 'net_unrealized_pnl'))
self.supply_in_loss: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, 'supply_in_loss'))
self.supply_in_profit: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, 'supply_in_profit'))
self.unrealized_loss: CentsUsdPattern = CentsUsdPattern(client, _m(acc, 'unrealized_loss'))
self.unrealized_profit: CentsUsdPattern = CentsUsdPattern(client, _m(acc, 'unrealized_profit'))
class MvrvRealizedPattern: class MvrvRealizedPattern:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
@@ -2573,18 +2554,6 @@ class MvrvRealizedPattern:
self.realized_price_ratio: BpsRatioPattern = BpsRatioPattern(client, _m(acc, 'realized_price_ratio')) self.realized_price_ratio: BpsRatioPattern = BpsRatioPattern(client, _m(acc, 'realized_price_ratio'))
self.realized_profit: CumulativeHeightPattern[Cents] = CumulativeHeightPattern(client, _m(acc, 'realized_profit')) self.realized_profit: CumulativeHeightPattern[Cents] = CumulativeHeightPattern(client, _m(acc, 'realized_profit'))
class _1m1w1y24hBaseCumulativePattern:
"""Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name."""
self._1m: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2 = AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, _m(acc, '1m'))
self._1w: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2 = AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, _m(acc, '1w'))
self._1y: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2 = AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, _m(acc, '1y'))
self._24h: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2 = AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, _m(acc, '24h'))
self.base: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, acc)
self.cumulative: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, 'cumulative'))
class ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2: class ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
@@ -2592,10 +2561,10 @@ class ActivityOutputsRealizedRelativeSupplyUnrealizedPattern2:
"""Create pattern node with accumulated metric name.""" """Create pattern node with accumulated metric name."""
self.activity: SentPattern = SentPattern(client, _m(acc, 'sent')) self.activity: SentPattern = SentPattern(client, _m(acc, 'sent'))
self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count')) self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count'))
self.realized: GrossMvrvNegNetRealizedSentSoprValuePattern = GrossMvrvNegNetRealizedSentSoprValuePattern(client, acc) self.realized: MvrvNegNetRealizedSentSoprValuePattern = MvrvNegNetRealizedSentSoprValuePattern(client, acc)
self.relative: SupplyPattern3 = SupplyPattern3(client, _m(acc, 'supply')) self.relative: SupplyPattern3 = SupplyPattern3(client, _m(acc, 'supply'))
self.supply: ChangeHalvedTotalPattern = ChangeHalvedTotalPattern(client, _m(acc, 'supply')) self.supply: ChangeHalvedTotalPattern = ChangeHalvedTotalPattern(client, _m(acc, 'supply'))
self.unrealized: GrossNegNetSupplyUnrealizedPattern = GrossNegNetSupplyUnrealizedPattern(client, acc) self.unrealized: NegNetSupplyUnrealizedPattern = NegNetSupplyUnrealizedPattern(client, acc)
class ActivityOutputsRealizedRelativeSupplyUnrealizedPattern: class ActivityOutputsRealizedRelativeSupplyUnrealizedPattern:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
@@ -2609,17 +2578,17 @@ class ActivityOutputsRealizedRelativeSupplyUnrealizedPattern:
self.supply: ChangeHalvedTotalPattern = ChangeHalvedTotalPattern(client, _m(acc, 'supply')) self.supply: ChangeHalvedTotalPattern = ChangeHalvedTotalPattern(client, _m(acc, 'supply'))
self.unrealized: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply_in')) self.unrealized: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply_in'))
class BalanceBothReactivatedReceivingSendingPattern: class NegNetSupplyUnrealizedPattern:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str): def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name.""" """Create pattern node with accumulated metric name."""
self.balance_decreased: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredU32] = AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'balance_decreased')) self.neg_unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss'))
self.balance_increased: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredU32] = AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'balance_increased')) self.net_unrealized_pnl: CentsUsdPattern = CentsUsdPattern(client, _m(acc, 'net_unrealized_pnl'))
self.both: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredU32] = AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'both')) self.supply_in_loss: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, 'supply_in_loss'))
self.reactivated: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredU32] = AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'reactivated')) self.supply_in_profit: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, 'supply_in_profit'))
self.receiving: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredU32] = AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'receiving')) self.unrealized_loss: CentsUsdPattern = CentsUsdPattern(client, _m(acc, 'unrealized_loss'))
self.sending: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredU32] = AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'sending')) self.unrealized_profit: CentsUsdPattern = CentsUsdPattern(client, _m(acc, 'unrealized_profit'))
class BaseBtcCentsSatsUsdPattern: class BaseBtcCentsSatsUsdPattern:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
@@ -2654,6 +2623,17 @@ class SupplyPattern3:
self.supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'in_profit_rel_to_own_supply')) self.supply_in_profit_rel_to_own_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'in_profit_rel_to_own_supply'))
self.supply_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'rel_to_circulating_supply')) self.supply_rel_to_circulating_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, _m(acc, 'rel_to_circulating_supply'))
class _1m1w1y24hHeightPattern(Generic[T]):
"""Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name."""
self._1m: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'average_1m'))
self._1w: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'average_1w'))
self._1y: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'average_1y'))
self._24h: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'average_24h'))
self.height: MetricPattern18[T] = MetricPattern18(client, acc)
class _1m1w1y24hPattern6: class _1m1w1y24hPattern6:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
@@ -2684,6 +2664,16 @@ class _1m1w1y24hPattern5:
self._1y: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, '1y')) self._1y: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, '1y'))
self._24h: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, '24h')) self._24h: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, '24h'))
class BothReactivatedReceivingSendingPattern:
"""Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name."""
self.both: _1m1w1y24hHeightPattern[StoredU32] = _1m1w1y24hHeightPattern(client, _m(acc, 'both'))
self.reactivated: _1m1w1y24hHeightPattern[StoredU32] = _1m1w1y24hHeightPattern(client, _m(acc, 'reactivated'))
self.receiving: _1m1w1y24hHeightPattern[StoredU32] = _1m1w1y24hHeightPattern(client, _m(acc, 'receiving'))
self.sending: _1m1w1y24hHeightPattern[StoredU32] = _1m1w1y24hHeightPattern(client, _m(acc, 'sending'))
class BtcCentsSatsUsdPattern: class BtcCentsSatsUsdPattern:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
@@ -2743,12 +2733,12 @@ class BaseCumulativeSumPattern:
self.cumulative: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, 'cumulative')) self.cumulative: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, _m(acc, 'cumulative'))
self.sum: _1m1w1y24hPattern5 = _1m1w1y24hPattern5(client, _m(acc, 'sum')) self.sum: _1m1w1y24hPattern5 = _1m1w1y24hPattern5(client, _m(acc, 'sum'))
class BpsPercentRatioPattern2: class BpsPercentRatioPattern3:
"""Pattern struct for repeated tree structure.""" """Pattern struct for repeated tree structure."""
def __init__(self, client: BrkClientBase, acc: str): def __init__(self, client: BrkClientBase, acc: str):
"""Create pattern node with accumulated metric name.""" """Create pattern node with accumulated metric name."""
self.bps: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern[BasisPoints16] = AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'bps')) self.bps: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern = AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'bps'))
self.percent: MetricPattern1[StoredF32] = MetricPattern1(client, acc) self.percent: MetricPattern1[StoredF32] = MetricPattern1(client, acc)
self.ratio: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'ratio')) self.ratio: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'ratio'))
@@ -3045,6 +3035,14 @@ class MetricsTree_Blocks_Size:
self.pct75: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, 'block_size_p75') self.pct75: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, 'block_size_p75')
self.pct90: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, 'block_size_p90') self.pct90: _1m1w1y24hPattern[StoredU64] = _1m1w1y24hPattern(client, 'block_size_p90')
class MetricsTree_Blocks_Fullness:
"""Metrics tree node."""
def __init__(self, client: BrkClientBase, base_path: str = ''):
self.bps: _1m1w1y24hHeightPattern[BasisPoints16] = _1m1w1y24hHeightPattern(client, 'block_fullness_bps')
self.ratio: MetricPattern1[StoredF32] = MetricPattern1(client, 'block_fullness_ratio')
self.percent: MetricPattern1[StoredF32] = MetricPattern1(client, 'block_fullness')
class MetricsTree_Blocks: class MetricsTree_Blocks:
"""Metrics tree node.""" """Metrics tree node."""
@@ -3055,11 +3053,11 @@ class MetricsTree_Blocks:
self.total_size: MetricPattern18[StoredU64] = MetricPattern18(client, 'total_size') self.total_size: MetricPattern18[StoredU64] = MetricPattern18(client, 'total_size')
self.weight: MetricsTree_Blocks_Weight = MetricsTree_Blocks_Weight(client) self.weight: MetricsTree_Blocks_Weight = MetricsTree_Blocks_Weight(client)
self.count: MetricsTree_Blocks_Count = MetricsTree_Blocks_Count(client) self.count: MetricsTree_Blocks_Count = MetricsTree_Blocks_Count(client)
self.interval: AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern[Timestamp] = AverageHeightMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, 'block_interval') self.interval: _1m1w1y24hHeightPattern[Timestamp] = _1m1w1y24hHeightPattern(client, 'block_interval')
self.halving: MetricsTree_Blocks_Halving = MetricsTree_Blocks_Halving(client) self.halving: MetricsTree_Blocks_Halving = MetricsTree_Blocks_Halving(client)
self.vbytes: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern = AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, 'block_vbytes') self.vbytes: AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern = AverageCumulativeHeightMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, 'block_vbytes')
self.size: MetricsTree_Blocks_Size = MetricsTree_Blocks_Size(client) self.size: MetricsTree_Blocks_Size = MetricsTree_Blocks_Size(client)
self.fullness: BpsPercentRatioPattern2 = BpsPercentRatioPattern2(client, 'block_fullness') self.fullness: MetricsTree_Blocks_Fullness = MetricsTree_Blocks_Fullness(client)
class MetricsTree_Transactions_Count: class MetricsTree_Transactions_Count:
"""Metrics tree node.""" """Metrics tree node."""
@@ -3210,7 +3208,7 @@ class MetricsTree_Scripts_Value:
"""Metrics tree node.""" """Metrics tree node."""
def __init__(self, client: BrkClientBase, base_path: str = ''): def __init__(self, client: BrkClientBase, base_path: str = ''):
self.opreturn: _1m1w1y24hBaseCumulativePattern = _1m1w1y24hBaseCumulativePattern(client, 'opreturn_value') self.opreturn: BaseCumulativePattern = BaseCumulativePattern(client, 'opreturn_value')
class MetricsTree_Scripts_Adoption: class MetricsTree_Scripts_Adoption:
"""Metrics tree node.""" """Metrics tree node."""
@@ -3235,13 +3233,24 @@ class MetricsTree_Scripts:
self.value: MetricsTree_Scripts_Value = MetricsTree_Scripts_Value(client) self.value: MetricsTree_Scripts_Value = MetricsTree_Scripts_Value(client)
self.adoption: MetricsTree_Scripts_Adoption = MetricsTree_Scripts_Adoption(client) self.adoption: MetricsTree_Scripts_Adoption = MetricsTree_Scripts_Adoption(client)
class MetricsTree_Mining_Rewards_Fees:
"""Metrics tree node."""
def __init__(self, client: BrkClientBase, base_path: str = ''):
self.base: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, 'fees')
self.cumulative: BtcCentsSatsUsdPattern = BtcCentsSatsUsdPattern(client, 'fees_cumulative')
self._24h: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2 = AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'fees_24h')
self._1w: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2 = AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'fees_1w')
self._1m: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2 = AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'fees_1m')
self._1y: AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2 = AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'fees_1y')
class MetricsTree_Mining_Rewards: class MetricsTree_Mining_Rewards:
"""Metrics tree node.""" """Metrics tree node."""
def __init__(self, client: BrkClientBase, base_path: str = ''): def __init__(self, client: BrkClientBase, base_path: str = ''):
self.coinbase: _1m1w1y24hBaseCumulativePattern = _1m1w1y24hBaseCumulativePattern(client, 'coinbase') self.coinbase: BaseCumulativeSumPattern = BaseCumulativeSumPattern(client, 'coinbase')
self.subsidy: _1m1w1y24hBaseCumulativePattern = _1m1w1y24hBaseCumulativePattern(client, 'subsidy') self.subsidy: BaseCumulativePattern = BaseCumulativePattern(client, 'subsidy')
self.fees: _1m1w1y24hBaseCumulativePattern = _1m1w1y24hBaseCumulativePattern(client, 'fees') self.fees: MetricsTree_Mining_Rewards_Fees = MetricsTree_Mining_Rewards_Fees(client)
self.unclaimed_rewards: BaseCumulativeSumPattern = BaseCumulativeSumPattern(client, 'unclaimed_rewards') self.unclaimed_rewards: BaseCumulativeSumPattern = BaseCumulativeSumPattern(client, 'unclaimed_rewards')
self.fee_dominance: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'fee_dominance') self.fee_dominance: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'fee_dominance')
self.fee_dominance_rolling: _1m1w1y24hPattern2 = _1m1w1y24hPattern2(client, 'fee_dominance') self.fee_dominance_rolling: _1m1w1y24hPattern2 = _1m1w1y24hPattern2(client, 'fee_dominance')
@@ -4251,7 +4260,6 @@ class MetricsTree_Distribution_UtxoCohorts_All_Relative:
self.unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'unrealized_profit_rel_to_market_cap') self.unrealized_profit_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'unrealized_profit_rel_to_market_cap')
self.unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'unrealized_loss_rel_to_market_cap') self.unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'unrealized_loss_rel_to_market_cap')
self.net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'net_unrealized_pnl_rel_to_market_cap') self.net_unrealized_pnl_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'net_unrealized_pnl_rel_to_market_cap')
self.neg_unrealized_loss_rel_to_market_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'neg_unrealized_loss_rel_to_market_cap')
self.nupl: MetricPattern1[StoredF32] = MetricPattern1(client, 'nupl') self.nupl: MetricPattern1[StoredF32] = MetricPattern1(client, 'nupl')
self.invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'invested_capital_in_profit_rel_to_realized_cap') self.invested_capital_in_profit_rel_to_realized_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'invested_capital_in_profit_rel_to_realized_cap')
self.invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'invested_capital_in_loss_rel_to_realized_cap') self.invested_capital_in_loss_rel_to_realized_cap: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'invested_capital_in_loss_rel_to_realized_cap')
@@ -4259,7 +4267,6 @@ class MetricsTree_Distribution_UtxoCohorts_All_Relative:
self.supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'supply_in_loss_rel_to_own_supply') self.supply_in_loss_rel_to_own_supply: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'supply_in_loss_rel_to_own_supply')
self.unrealized_profit_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'unrealized_profit_rel_to_own_gross_pnl') self.unrealized_profit_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'unrealized_profit_rel_to_own_gross_pnl')
self.unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'unrealized_loss_rel_to_own_gross_pnl') self.unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'unrealized_loss_rel_to_own_gross_pnl')
self.neg_unrealized_loss_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'neg_unrealized_loss_rel_to_own_gross_pnl')
self.net_unrealized_pnl_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'net_unrealized_pnl_rel_to_own_gross_pnl') self.net_unrealized_pnl_rel_to_own_gross_pnl: BpsPercentRatioPattern = BpsPercentRatioPattern(client, 'net_unrealized_pnl_rel_to_own_gross_pnl')
class MetricsTree_Distribution_UtxoCohorts_All: class MetricsTree_Distribution_UtxoCohorts_All:
@@ -4287,7 +4294,7 @@ class MetricsTree_Distribution_UtxoCohorts_Sth:
self.realized: CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern = CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern(client, 'sth') self.realized: CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern = CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern(client, 'sth')
self.cost_basis: InvestedMaxMinPercentilesPattern = InvestedMaxMinPercentilesPattern(client, 'sth') self.cost_basis: InvestedMaxMinPercentilesPattern = InvestedMaxMinPercentilesPattern(client, 'sth')
self.unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern = GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern(client, 'sth') self.unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern = GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern(client, 'sth')
self.relative: InvestedNegNetNuplSupplyUnrealizedPattern3 = InvestedNegNetNuplSupplyUnrealizedPattern3(client, 'sth') self.relative: InvestedNetNuplSupplyUnrealizedPattern3 = InvestedNetNuplSupplyUnrealizedPattern3(client, 'sth')
self.dormancy: MetricPattern1[StoredF32] = MetricPattern1(client, 'sth_dormancy') self.dormancy: MetricPattern1[StoredF32] = MetricPattern1(client, 'sth_dormancy')
self.velocity: MetricPattern1[StoredF32] = MetricPattern1(client, 'sth_velocity') self.velocity: MetricPattern1[StoredF32] = MetricPattern1(client, 'sth_velocity')
self.adjusted_value_created: MetricPattern1[Cents] = MetricPattern1(client, 'sth_adjusted_value_created') self.adjusted_value_created: MetricPattern1[Cents] = MetricPattern1(client, 'sth_adjusted_value_created')
@@ -4307,7 +4314,7 @@ class MetricsTree_Distribution_UtxoCohorts_Lth:
self.realized: CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern = CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern(client, 'lth') self.realized: CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern = CapCapitulationGrossInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprUpperValuePattern(client, 'lth')
self.cost_basis: InvestedMaxMinPercentilesPattern = InvestedMaxMinPercentilesPattern(client, 'lth') self.cost_basis: InvestedMaxMinPercentilesPattern = InvestedMaxMinPercentilesPattern(client, 'lth')
self.unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern = GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern(client, 'lth') self.unrealized: GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern = GreedGrossInvestedInvestorNegNetPainSupplyUnrealizedPattern(client, 'lth')
self.relative: InvestedNegNetNuplSupplyUnrealizedPattern3 = InvestedNegNetNuplSupplyUnrealizedPattern3(client, 'lth') self.relative: InvestedNetNuplSupplyUnrealizedPattern3 = InvestedNetNuplSupplyUnrealizedPattern3(client, 'lth')
self.dormancy: MetricPattern1[StoredF32] = MetricPattern1(client, 'lth_dormancy') self.dormancy: MetricPattern1[StoredF32] = MetricPattern1(client, 'lth_dormancy')
self.velocity: MetricPattern1[StoredF32] = MetricPattern1(client, 'lth_velocity') self.velocity: MetricPattern1[StoredF32] = MetricPattern1(client, 'lth_velocity')
@@ -4573,15 +4580,15 @@ class MetricsTree_Distribution_AddressActivity:
"""Metrics tree node.""" """Metrics tree node."""
def __init__(self, client: BrkClientBase, base_path: str = ''): def __init__(self, client: BrkClientBase, base_path: str = ''):
self.all: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'address_activity') self.all: BothReactivatedReceivingSendingPattern = BothReactivatedReceivingSendingPattern(client, 'address_activity')
self.p2pk65: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2pk65_address_activity') self.p2pk65: BothReactivatedReceivingSendingPattern = BothReactivatedReceivingSendingPattern(client, 'p2pk65_address_activity')
self.p2pk33: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2pk33_address_activity') self.p2pk33: BothReactivatedReceivingSendingPattern = BothReactivatedReceivingSendingPattern(client, 'p2pk33_address_activity')
self.p2pkh: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2pkh_address_activity') self.p2pkh: BothReactivatedReceivingSendingPattern = BothReactivatedReceivingSendingPattern(client, 'p2pkh_address_activity')
self.p2sh: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2sh_address_activity') self.p2sh: BothReactivatedReceivingSendingPattern = BothReactivatedReceivingSendingPattern(client, 'p2sh_address_activity')
self.p2wpkh: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2wpkh_address_activity') self.p2wpkh: BothReactivatedReceivingSendingPattern = BothReactivatedReceivingSendingPattern(client, 'p2wpkh_address_activity')
self.p2wsh: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2wsh_address_activity') self.p2wsh: BothReactivatedReceivingSendingPattern = BothReactivatedReceivingSendingPattern(client, 'p2wsh_address_activity')
self.p2tr: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2tr_address_activity') self.p2tr: BothReactivatedReceivingSendingPattern = BothReactivatedReceivingSendingPattern(client, 'p2tr_address_activity')
self.p2a: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2a_address_activity') self.p2a: BothReactivatedReceivingSendingPattern = BothReactivatedReceivingSendingPattern(client, 'p2a_address_activity')
class MetricsTree_Distribution_TotalAddrCount: class MetricsTree_Distribution_TotalAddrCount:
"""Metrics tree node.""" """Metrics tree node."""
@@ -4615,15 +4622,15 @@ class MetricsTree_Distribution_GrowthRate:
"""Metrics tree node.""" """Metrics tree node."""
def __init__(self, client: BrkClientBase, base_path: str = ''): def __init__(self, client: BrkClientBase, base_path: str = ''):
self.all: BpsPercentRatioPattern2 = BpsPercentRatioPattern2(client, 'growth_rate') self.all: BpsPercentRatioPattern3 = BpsPercentRatioPattern3(client, 'growth_rate')
self.p2pk65: BpsPercentRatioPattern2 = BpsPercentRatioPattern2(client, 'p2pk65_growth_rate') self.p2pk65: BpsPercentRatioPattern3 = BpsPercentRatioPattern3(client, 'p2pk65_growth_rate')
self.p2pk33: BpsPercentRatioPattern2 = BpsPercentRatioPattern2(client, 'p2pk33_growth_rate') self.p2pk33: BpsPercentRatioPattern3 = BpsPercentRatioPattern3(client, 'p2pk33_growth_rate')
self.p2pkh: BpsPercentRatioPattern2 = BpsPercentRatioPattern2(client, 'p2pkh_growth_rate') self.p2pkh: BpsPercentRatioPattern3 = BpsPercentRatioPattern3(client, 'p2pkh_growth_rate')
self.p2sh: BpsPercentRatioPattern2 = BpsPercentRatioPattern2(client, 'p2sh_growth_rate') self.p2sh: BpsPercentRatioPattern3 = BpsPercentRatioPattern3(client, 'p2sh_growth_rate')
self.p2wpkh: BpsPercentRatioPattern2 = BpsPercentRatioPattern2(client, 'p2wpkh_growth_rate') self.p2wpkh: BpsPercentRatioPattern3 = BpsPercentRatioPattern3(client, 'p2wpkh_growth_rate')
self.p2wsh: BpsPercentRatioPattern2 = BpsPercentRatioPattern2(client, 'p2wsh_growth_rate') self.p2wsh: BpsPercentRatioPattern3 = BpsPercentRatioPattern3(client, 'p2wsh_growth_rate')
self.p2tr: BpsPercentRatioPattern2 = BpsPercentRatioPattern2(client, 'p2tr_growth_rate') self.p2tr: BpsPercentRatioPattern3 = BpsPercentRatioPattern3(client, 'p2tr_growth_rate')
self.p2a: BpsPercentRatioPattern2 = BpsPercentRatioPattern2(client, 'p2a_growth_rate') self.p2a: BpsPercentRatioPattern3 = BpsPercentRatioPattern3(client, 'p2a_growth_rate')
class MetricsTree_Distribution: class MetricsTree_Distribution:
"""Metrics tree node.""" """Metrics tree node."""