mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-04-27 08:09:58 -07:00
5911 lines
336 KiB
Python
5911 lines
336 KiB
Python
# Auto-generated BRK Python client
|
||
# Do not edit manually
|
||
|
||
from __future__ import annotations
|
||
from dataclasses import dataclass
|
||
from typing import TypeVar, Generic, Any, Optional, List, Literal, TypedDict, Union, Protocol, overload, Iterator, Tuple, TYPE_CHECKING
|
||
from http.client import HTTPSConnection, HTTPConnection
|
||
from urllib.parse import urlparse
|
||
from datetime import date, timedelta
|
||
import json
|
||
|
||
if TYPE_CHECKING:
|
||
import pandas as pd # type: ignore[import-not-found]
|
||
import polars as pl # type: ignore[import-not-found]
|
||
|
||
T = TypeVar('T')
|
||
|
||
# Type definitions
|
||
|
||
# Bitcoin address string
|
||
Address = str
|
||
# Satoshis
|
||
Sats = int
|
||
# Index within its type (e.g., 0 for first P2WPKH address)
|
||
TypeIndex = int
|
||
# Transaction ID (hash)
|
||
Txid = str
|
||
# Unified index for any address type (funded or empty)
|
||
AnyAddressIndex = TypeIndex
|
||
# Bitcoin amount as floating point (1 BTC = 100,000,000 satoshis)
|
||
Bitcoin = float
|
||
# Position within a .blk file, encoding file index and byte offset
|
||
BlkPosition = int
|
||
# Block height
|
||
Height = int
|
||
# UNIX timestamp in seconds
|
||
Timestamp = int
|
||
# Block hash
|
||
BlockHash = str
|
||
TxIndex = int
|
||
# Transaction or block weight in weight units (WU)
|
||
Weight = int
|
||
# Cents × Sats (u128) - price in cents multiplied by amount in sats.
|
||
# Uses u128 because large amounts at any price can overflow u64.
|
||
CentsSats = int
|
||
# Raw cents squared (u128) - stores cents² × sats without division.
|
||
# Used for precise accumulation of investor cap values: Σ(price² × sats).
|
||
# investor_price = investor_cap_raw / realized_cap_raw
|
||
CentsSquaredSats = int
|
||
# Unsigned cents (u64) - for values that should never be negative.
|
||
# Used for invested capital, realized cap, etc.
|
||
CentsUnsigned = int
|
||
# Closing price value for a time period
|
||
Close = CentsUnsigned
|
||
# Cohort identifier for cost basis distribution.
|
||
Cohort = str
|
||
# Bucket type for cost basis aggregation.
|
||
# Options: raw (no aggregation), lin200/lin500/lin1000 (linear $200/$500/$1000),
|
||
# log10/log50/log100/log200 (logarithmic with 10/50/100/200 buckets per decade).
|
||
CostBasisBucket = Literal["raw", "lin200", "lin500", "lin1000", "log10", "log50", "log100", "log200"]
|
||
# Value type for cost basis distribution.
|
||
# Options: supply (BTC), realized (USD, price × supply), unrealized (USD, spot × supply).
|
||
CostBasisValue = Literal["supply", "realized", "unrealized"]
|
||
# Output format for API responses
|
||
Format = Literal["json", "csv"]
|
||
# Maximum number of results to return. Defaults to 100 if not specified.
|
||
Limit = int
|
||
# Date in YYYYMMDD format stored as u32
|
||
Date = int
|
||
DateIndex = int
|
||
DecadeIndex = int
|
||
DifficultyEpoch = int
|
||
# US Dollar amount as floating point
|
||
Dollars = float
|
||
EmptyAddressIndex = TypeIndex
|
||
EmptyOutputIndex = TypeIndex
|
||
# Fee rate in sats/vB
|
||
FeeRate = float
|
||
FundedAddressIndex = TypeIndex
|
||
HalvingEpoch = int
|
||
# Hex-encoded string
|
||
Hex = str
|
||
# Highest price value for a time period
|
||
High = CentsUnsigned
|
||
# Lowest price value for a time period
|
||
Low = CentsUnsigned
|
||
# Virtual size in vbytes (weight / 4, rounded up)
|
||
VSize = int
|
||
# Metric name
|
||
Metric = str
|
||
# Comma-separated list of metric names
|
||
Metrics = str
|
||
MonthIndex = int
|
||
# Opening price value for a time period
|
||
Open = CentsUnsigned
|
||
OpReturnIndex = TypeIndex
|
||
OutPoint = int
|
||
# Type (P2PKH, P2WPKH, P2SH, P2TR, etc.)
|
||
OutputType = Literal["p2pk65", "p2pk33", "p2pkh", "p2ms", "p2sh", "opreturn", "p2wpkh", "p2wsh", "p2tr", "p2a", "empty", "unknown"]
|
||
P2AAddressIndex = TypeIndex
|
||
U8x2 = List[int]
|
||
P2ABytes = U8x2
|
||
P2MSOutputIndex = TypeIndex
|
||
P2PK33AddressIndex = TypeIndex
|
||
U8x33 = str
|
||
P2PK33Bytes = U8x33
|
||
P2PK65AddressIndex = TypeIndex
|
||
U8x65 = str
|
||
P2PK65Bytes = U8x65
|
||
P2PKHAddressIndex = TypeIndex
|
||
U8x20 = List[int]
|
||
P2PKHBytes = U8x20
|
||
P2SHAddressIndex = TypeIndex
|
||
P2SHBytes = U8x20
|
||
P2TRAddressIndex = TypeIndex
|
||
U8x32 = List[int]
|
||
P2TRBytes = U8x32
|
||
P2WPKHAddressIndex = TypeIndex
|
||
P2WPKHBytes = U8x20
|
||
P2WSHAddressIndex = TypeIndex
|
||
P2WSHBytes = U8x32
|
||
PoolSlug = Literal["unknown", "blockfills", "ultimuspool", "terrapool", "luxor", "onethash", "btccom", "bitfarms", "huobipool", "wayicn", "canoepool", "btctop", "bitcoincom", "pool175btc", "gbminers", "axbt", "asicminer", "bitminter", "bitcoinrussia", "btcserv", "simplecoinus", "btcguild", "eligius", "ozcoin", "eclipsemc", "maxbtc", "triplemining", "coinlab", "pool50btc", "ghashio", "stminingcorp", "bitparking", "mmpool", "polmine", "kncminer", "bitalo", "f2pool", "hhtt", "megabigpower", "mtred", "nmcbit", "yourbtcnet", "givemecoins", "braiinspool", "antpool", "multicoinco", "bcpoolio", "cointerra", "kanopool", "solock", "ckpool", "nicehash", "bitclub", "bitcoinaffiliatenetwork", "btcc", "bwpool", "exxbw", "bitsolo", "bitfury", "twentyoneinc", "digitalbtc", "eightbaochi", "mybtccoinpool", "tbdice", "hashpool", "nexious", "bravomining", "hotpool", "okexpool", "bcmonster", "onehash", "bixin", "tatmaspool", "viabtc", "connectbtc", "batpool", "waterhole", "dcexploration", "dcex", "btpool", "fiftyeightcoin", "bitcoinindia", "shawnp0wers", "phashio", "rigpool", "haozhuzhu", "sevenpool", "miningkings", "hashbx", "dpool", "rawpool", "haominer", "helix", "bitcoinukraine", "poolin", "secretsuperstar", "tigerpoolnet", "sigmapoolcom", "okpooltop", "hummerpool", "tangpool", "bytepool", "spiderpool", "novablock", "miningcity", "binancepool", "minerium", "lubiancom", "okkong", "aaopool", "emcdpool", "foundryusa", "sbicrypto", "arkpool", "purebtccom", "marapool", "kucoinpool", "entrustcharitypool", "okminer", "titan", "pegapool", "btcnuggets", "cloudhashing", "digitalxmintsy", "telco214", "btcpoolparty", "multipool", "transactioncoinmining", "btcdig", "trickysbtcpool", "btcmp", "eobot", "unomp", "patels", "gogreenlight", "ekanembtc", "canoe", "tiger", "onem1x", "zulupool", "secpool", "ocean", "whitepool", "wk057", "futurebitapollosolo", "carbonnegative", "portlandhodl", "phoenix", "neopool", "maxipool", "bitfufupool", "luckypool", "miningdutch", "publicpool", "miningsquared", "innopolistech", "btclab", "parasite"]
|
||
QuarterIndex = int
|
||
# Transaction locktime
|
||
RawLockTime = int
|
||
# Fractional satoshis (f64) - for representing USD prices in sats
|
||
#
|
||
# Formula: `sats_fract = usd_value * 100_000_000 / btc_price`
|
||
#
|
||
# When BTC is $100,000:
|
||
# - $1 = 1,000 sats
|
||
# - $0.001 = 1 sat
|
||
# - $0.0001 = 0.1 sats (fractional)
|
||
SatsFract = float
|
||
# Signed satoshis (i64) - for values that can be negative.
|
||
# Used for changes, deltas, profit/loss calculations, etc.
|
||
SatsSigned = int
|
||
SemesterIndex = int
|
||
# Fixed-size boolean value optimized for on-disk storage (stored as u8)
|
||
StoredBool = int
|
||
# Stored 32-bit floating point value
|
||
StoredF32 = float
|
||
# Fixed-size 64-bit floating point value optimized for on-disk storage
|
||
StoredF64 = float
|
||
StoredI8 = int
|
||
StoredU16 = int
|
||
# Fixed-size 32-bit unsigned integer optimized for on-disk storage
|
||
StoredU32 = int
|
||
# Fixed-size 64-bit unsigned integer optimized for on-disk storage
|
||
StoredU64 = int
|
||
# Time period for mining statistics.
|
||
#
|
||
# Used to specify the lookback window for pool statistics, hashrate calculations,
|
||
# and other time-based mining metrics.
|
||
TimePeriod = Literal["24h", "3d", "1w", "1m", "3m", "6m", "1y", "2y", "3y"]
|
||
# Index of the output being spent in the previous transaction
|
||
Vout = int
|
||
# Transaction version number
|
||
TxVersion = int
|
||
TxInIndex = int
|
||
TxOutIndex = int
|
||
# Input index in the spending transaction
|
||
Vin = int
|
||
UnknownOutputIndex = TypeIndex
|
||
WeekIndex = int
|
||
YearIndex = int
|
||
# Aggregation dimension for querying metrics. Includes time-based (date, week, month, year),
|
||
# block-based (height, txindex), and address/output type indexes.
|
||
Index = Literal["dateindex", "decadeindex", "difficultyepoch", "emptyoutputindex", "halvingepoch", "height", "txinindex", "monthindex", "opreturnindex", "txoutindex", "p2aaddressindex", "p2msoutputindex", "p2pk33addressindex", "p2pk65addressindex", "p2pkhaddressindex", "p2shaddressindex", "p2traddressindex", "p2wpkhaddressindex", "p2wshaddressindex", "quarterindex", "semesterindex", "txindex", "unknownoutputindex", "weekindex", "yearindex", "fundedaddressindex", "emptyaddressindex", "pairoutputindex"]
|
||
# Hierarchical tree node for organizing metrics into categories
|
||
TreeNode = Union[dict[str, "TreeNode"], "MetricLeafWithSchema"]
|
||
class AddressChainStats(TypedDict):
|
||
"""
|
||
Address statistics on the blockchain (confirmed transactions only)
|
||
|
||
Based on mempool.space's format with type_index extension.
|
||
|
||
Attributes:
|
||
funded_txo_count: Total number of transaction outputs that funded this address
|
||
funded_txo_sum: Total amount in satoshis received by this address across all funded outputs
|
||
spent_txo_count: Total number of transaction outputs spent from this address
|
||
spent_txo_sum: Total amount in satoshis spent from this address
|
||
tx_count: Total number of confirmed transactions involving this address
|
||
type_index: Index of this address within its type on the blockchain
|
||
"""
|
||
funded_txo_count: int
|
||
funded_txo_sum: Sats
|
||
spent_txo_count: int
|
||
spent_txo_sum: Sats
|
||
tx_count: int
|
||
type_index: TypeIndex
|
||
|
||
class AddressMempoolStats(TypedDict):
|
||
"""
|
||
Address statistics in the mempool (unconfirmed transactions only)
|
||
|
||
Based on mempool.space's format.
|
||
|
||
Attributes:
|
||
funded_txo_count: Number of unconfirmed transaction outputs funding this address
|
||
funded_txo_sum: Total amount in satoshis being received in unconfirmed transactions
|
||
spent_txo_count: Number of unconfirmed transaction inputs spending from this address
|
||
spent_txo_sum: Total amount in satoshis being spent in unconfirmed transactions
|
||
tx_count: Number of unconfirmed transactions involving this address
|
||
"""
|
||
funded_txo_count: int
|
||
funded_txo_sum: Sats
|
||
spent_txo_count: int
|
||
spent_txo_sum: Sats
|
||
tx_count: int
|
||
|
||
class AddressParam(TypedDict):
|
||
address: Address
|
||
|
||
class AddressStats(TypedDict):
|
||
"""
|
||
Address information compatible with mempool.space API format
|
||
|
||
Attributes:
|
||
address: Bitcoin address string
|
||
chain_stats: Statistics for confirmed transactions on the blockchain
|
||
mempool_stats: Statistics for unconfirmed transactions in the mempool
|
||
"""
|
||
address: Address
|
||
chain_stats: AddressChainStats
|
||
mempool_stats: Union[AddressMempoolStats, None]
|
||
|
||
class AddressTxidsParam(TypedDict):
|
||
"""
|
||
Attributes:
|
||
after_txid: Txid to paginate from (return transactions before this one)
|
||
limit: Maximum number of results to return. Defaults to 25 if not specified.
|
||
"""
|
||
after_txid: Union[Txid, None]
|
||
limit: int
|
||
|
||
class AddressValidation(TypedDict):
|
||
"""
|
||
Address validation result
|
||
|
||
Attributes:
|
||
isvalid: Whether the address is valid
|
||
address: The validated address
|
||
scriptPubKey: The scriptPubKey in hex
|
||
isscript: Whether this is a script address (P2SH)
|
||
iswitness: Whether this is a witness address
|
||
witness_version: Witness version (0 for P2WPKH/P2WSH, 1 for P2TR)
|
||
witness_program: Witness program in hex
|
||
"""
|
||
isvalid: bool
|
||
address: Optional[str]
|
||
scriptPubKey: Optional[str]
|
||
isscript: Optional[bool]
|
||
iswitness: Optional[bool]
|
||
witness_version: Optional[int]
|
||
witness_program: Optional[str]
|
||
|
||
class BlockCountParam(TypedDict):
|
||
"""
|
||
Attributes:
|
||
block_count: Number of recent blocks to include
|
||
"""
|
||
block_count: int
|
||
|
||
class BlockFeesEntry(TypedDict):
|
||
"""
|
||
A single block fees data point.
|
||
"""
|
||
avgHeight: Height
|
||
timestamp: Timestamp
|
||
avgFees: Sats
|
||
|
||
class BlockHashParam(TypedDict):
|
||
hash: BlockHash
|
||
|
||
class BlockHashStartIndex(TypedDict):
|
||
"""
|
||
Attributes:
|
||
hash: Bitcoin block hash
|
||
start_index: Starting transaction index within the block (0-based)
|
||
"""
|
||
hash: BlockHash
|
||
start_index: TxIndex
|
||
|
||
class BlockHashTxIndex(TypedDict):
|
||
"""
|
||
Attributes:
|
||
hash: Bitcoin block hash
|
||
index: Transaction index within the block (0-based)
|
||
"""
|
||
hash: BlockHash
|
||
index: TxIndex
|
||
|
||
class BlockInfo(TypedDict):
|
||
"""
|
||
Block information returned by the API
|
||
|
||
Attributes:
|
||
id: Block hash
|
||
height: Block height
|
||
tx_count: Number of transactions in the block
|
||
size: Block size in bytes
|
||
weight: Block weight in weight units
|
||
timestamp: Block timestamp (Unix time)
|
||
difficulty: Block difficulty as a floating point number
|
||
"""
|
||
id: BlockHash
|
||
height: Height
|
||
tx_count: int
|
||
size: int
|
||
weight: Weight
|
||
timestamp: Timestamp
|
||
difficulty: float
|
||
|
||
class BlockRewardsEntry(TypedDict):
|
||
"""
|
||
A single block rewards data point.
|
||
"""
|
||
avgHeight: int
|
||
timestamp: int
|
||
avgRewards: int
|
||
|
||
class BlockSizeEntry(TypedDict):
|
||
"""
|
||
A single block size data point.
|
||
"""
|
||
avgHeight: int
|
||
timestamp: int
|
||
avgSize: int
|
||
|
||
class BlockWeightEntry(TypedDict):
|
||
"""
|
||
A single block weight data point.
|
||
"""
|
||
avgHeight: int
|
||
timestamp: int
|
||
avgWeight: int
|
||
|
||
class BlockSizesWeights(TypedDict):
|
||
"""
|
||
Combined block sizes and weights response.
|
||
"""
|
||
sizes: List[BlockSizeEntry]
|
||
weights: List[BlockWeightEntry]
|
||
|
||
class BlockStatus(TypedDict):
|
||
"""
|
||
Block status indicating whether block is in the best chain
|
||
|
||
Attributes:
|
||
in_best_chain: Whether this block is in the best chain
|
||
height: Block height (only if in best chain)
|
||
next_best: Hash of the next block in the best chain (only if in best chain and not tip)
|
||
"""
|
||
in_best_chain: bool
|
||
height: Union[Height, None]
|
||
next_best: Union[BlockHash, None]
|
||
|
||
class BlockTimestamp(TypedDict):
|
||
"""
|
||
Block information returned for timestamp queries
|
||
|
||
Attributes:
|
||
height: Block height
|
||
hash: Block hash
|
||
timestamp: Block timestamp in ISO 8601 format
|
||
"""
|
||
height: Height
|
||
hash: BlockHash
|
||
timestamp: str
|
||
|
||
class CostBasisCohortParam(TypedDict):
|
||
"""
|
||
Path parameters for cost basis dates endpoint.
|
||
"""
|
||
cohort: Cohort
|
||
|
||
class CostBasisParams(TypedDict):
|
||
"""
|
||
Path parameters for cost basis distribution endpoint.
|
||
"""
|
||
cohort: Cohort
|
||
date: str
|
||
|
||
class CostBasisQuery(TypedDict):
|
||
"""
|
||
Query parameters for cost basis distribution endpoint.
|
||
|
||
Attributes:
|
||
bucket: Bucket type for aggregation. Default: raw (no aggregation).
|
||
value: Value type to return. Default: supply.
|
||
"""
|
||
bucket: CostBasisBucket
|
||
value: CostBasisValue
|
||
|
||
class DataRangeFormat(TypedDict):
|
||
"""
|
||
Data range with output format for API query parameters
|
||
|
||
Attributes:
|
||
start: Inclusive starting index, if negative counts from end
|
||
end: Exclusive ending index, if negative counts from end
|
||
limit: Maximum number of values to return (ignored if `end` is set)
|
||
format: Format of the output
|
||
"""
|
||
start: Optional[int]
|
||
end: Optional[int]
|
||
limit: Union[Limit, None]
|
||
format: Format
|
||
|
||
class DifficultyAdjustment(TypedDict):
|
||
"""
|
||
Difficulty adjustment information.
|
||
|
||
Attributes:
|
||
progressPercent: Progress through current difficulty epoch (0-100%)
|
||
difficultyChange: Estimated difficulty change at next retarget (%)
|
||
estimatedRetargetDate: Estimated Unix timestamp of next retarget
|
||
remainingBlocks: Blocks remaining until retarget
|
||
remainingTime: Estimated seconds until retarget
|
||
previousRetarget: Previous difficulty adjustment (%)
|
||
nextRetargetHeight: Height of next retarget
|
||
timeAvg: Average block time in current epoch (seconds)
|
||
adjustedTimeAvg: Time-adjusted average (accounting for timestamp manipulation)
|
||
timeOffset: Time offset from expected schedule (seconds)
|
||
"""
|
||
progressPercent: float
|
||
difficultyChange: float
|
||
estimatedRetargetDate: int
|
||
remainingBlocks: int
|
||
remainingTime: int
|
||
previousRetarget: float
|
||
nextRetargetHeight: Height
|
||
timeAvg: int
|
||
adjustedTimeAvg: int
|
||
timeOffset: int
|
||
|
||
class DifficultyAdjustmentEntry(TypedDict):
|
||
"""
|
||
A single difficulty adjustment entry.
|
||
Serializes as array: [timestamp, height, difficulty, change_percent]
|
||
"""
|
||
timestamp: Timestamp
|
||
height: Height
|
||
difficulty: float
|
||
change_percent: float
|
||
|
||
class DifficultyEntry(TypedDict):
|
||
"""
|
||
A single difficulty data point.
|
||
|
||
Attributes:
|
||
timestamp: Unix timestamp of the difficulty adjustment.
|
||
difficulty: Difficulty value.
|
||
height: Block height of the adjustment.
|
||
"""
|
||
timestamp: Timestamp
|
||
difficulty: float
|
||
height: Height
|
||
|
||
class DiskUsage(TypedDict):
|
||
"""
|
||
Disk usage of the indexed data
|
||
|
||
Attributes:
|
||
brk: Human-readable brk data size (e.g., "48.8 GiB")
|
||
brk_bytes: brk data size in bytes
|
||
bitcoin: Human-readable Bitcoin blocks directory size
|
||
bitcoin_bytes: Bitcoin blocks directory size in bytes
|
||
ratio: brk as percentage of Bitcoin data
|
||
"""
|
||
brk: str
|
||
brk_bytes: int
|
||
bitcoin: str
|
||
bitcoin_bytes: int
|
||
ratio: float
|
||
|
||
class EmptyAddressData(TypedDict):
|
||
"""
|
||
Data of an empty address
|
||
|
||
Attributes:
|
||
tx_count: Total transaction count
|
||
funded_txo_count: Total funded/spent transaction output count (equal since address is empty)
|
||
transfered: Total satoshis transferred
|
||
"""
|
||
tx_count: int
|
||
funded_txo_count: int
|
||
transfered: Sats
|
||
|
||
class FundedAddressData(TypedDict):
|
||
"""
|
||
Data for a funded (non-empty) address with current balance
|
||
|
||
Attributes:
|
||
tx_count: Total transaction count
|
||
funded_txo_count: Number of transaction outputs funded to this address
|
||
spent_txo_count: Number of transaction outputs spent by this address
|
||
received: Satoshis received by this address
|
||
sent: Satoshis sent by this address
|
||
realized_cap_raw: The realized capitalization: Σ(price × sats)
|
||
investor_cap_raw: The investor capitalization: Σ(price² × sats)
|
||
"""
|
||
tx_count: int
|
||
funded_txo_count: int
|
||
spent_txo_count: int
|
||
received: Sats
|
||
sent: Sats
|
||
realized_cap_raw: CentsSats
|
||
investor_cap_raw: CentsSquaredSats
|
||
|
||
class HashrateEntry(TypedDict):
|
||
"""
|
||
A single hashrate data point.
|
||
|
||
Attributes:
|
||
timestamp: Unix timestamp.
|
||
avgHashrate: Average hashrate (H/s).
|
||
"""
|
||
timestamp: Timestamp
|
||
avgHashrate: int
|
||
|
||
class HashrateSummary(TypedDict):
|
||
"""
|
||
Summary of network hashrate and difficulty data.
|
||
|
||
Attributes:
|
||
hashrates: Historical hashrate data points.
|
||
difficulty: Historical difficulty adjustments.
|
||
currentHashrate: Current network hashrate (H/s).
|
||
currentDifficulty: Current network difficulty.
|
||
"""
|
||
hashrates: List[HashrateEntry]
|
||
difficulty: List[DifficultyEntry]
|
||
currentHashrate: int
|
||
currentDifficulty: float
|
||
|
||
class Health(TypedDict):
|
||
"""
|
||
Server health status
|
||
|
||
Attributes:
|
||
started_at: Server start time (ISO 8601)
|
||
uptime_seconds: Uptime in seconds
|
||
"""
|
||
status: str
|
||
service: str
|
||
timestamp: str
|
||
started_at: str
|
||
uptime_seconds: int
|
||
|
||
class HeightParam(TypedDict):
|
||
height: Height
|
||
|
||
class IndexInfo(TypedDict):
|
||
"""
|
||
Information about an available index and its query aliases
|
||
|
||
Attributes:
|
||
index: The canonical index name
|
||
aliases: All Accepted query aliases
|
||
"""
|
||
index: Index
|
||
aliases: List[str]
|
||
|
||
class LimitParam(TypedDict):
|
||
limit: Limit
|
||
|
||
class MempoolBlock(TypedDict):
|
||
"""
|
||
Block info in a mempool.space like format for fee estimation.
|
||
|
||
Attributes:
|
||
blockSize: Total block size in weight units
|
||
blockVSize: Total block virtual size in vbytes
|
||
nTx: Number of transactions in the projected block
|
||
totalFees: Total fees in satoshis
|
||
medianFee: Median fee rate in sat/vB
|
||
feeRange: Fee rate range: [min, 10%, 25%, 50%, 75%, 90%, max]
|
||
"""
|
||
blockSize: int
|
||
blockVSize: float
|
||
nTx: int
|
||
totalFees: Sats
|
||
medianFee: FeeRate
|
||
feeRange: List[FeeRate]
|
||
|
||
class MempoolInfo(TypedDict):
|
||
"""
|
||
Mempool statistics
|
||
|
||
Attributes:
|
||
count: Number of transactions in the mempool
|
||
vsize: Total virtual size of all transactions in the mempool (vbytes)
|
||
total_fee: Total fees of all transactions in the mempool (satoshis)
|
||
"""
|
||
count: int
|
||
vsize: VSize
|
||
total_fee: Sats
|
||
|
||
class MetricCount(TypedDict):
|
||
"""
|
||
Metric count statistics - distinct metrics and total metric-index combinations
|
||
|
||
Attributes:
|
||
distinct_metrics: Number of unique metrics available (e.g., realized_price, market_cap)
|
||
total_endpoints: Total number of metric-index combinations across all timeframes
|
||
lazy_endpoints: Number of lazy (computed on-the-fly) metric-index combinations
|
||
stored_endpoints: Number of eager (stored on disk) metric-index combinations
|
||
"""
|
||
distinct_metrics: int
|
||
total_endpoints: int
|
||
lazy_endpoints: int
|
||
stored_endpoints: int
|
||
|
||
class MetricParam(TypedDict):
|
||
metric: Metric
|
||
|
||
class MetricSelection(TypedDict):
|
||
"""
|
||
Selection of metrics to query
|
||
|
||
Attributes:
|
||
metrics: Requested metrics
|
||
index: Index to query
|
||
start: Inclusive starting index, if negative counts from end
|
||
end: Exclusive ending index, if negative counts from end
|
||
limit: Maximum number of values to return (ignored if `end` is set)
|
||
format: Format of the output
|
||
"""
|
||
metrics: Metrics
|
||
index: Index
|
||
start: Optional[int]
|
||
end: Optional[int]
|
||
limit: Union[Limit, None]
|
||
format: Format
|
||
|
||
class MetricSelectionLegacy(TypedDict):
|
||
"""
|
||
Legacy metric selection parameters (deprecated)
|
||
|
||
Attributes:
|
||
start: Inclusive starting index, if negative counts from end
|
||
end: Exclusive ending index, if negative counts from end
|
||
limit: Maximum number of values to return (ignored if `end` is set)
|
||
format: Format of the output
|
||
"""
|
||
index: Index
|
||
ids: Metrics
|
||
start: Optional[int]
|
||
end: Optional[int]
|
||
limit: Union[Limit, None]
|
||
format: Format
|
||
|
||
class MetricWithIndex(TypedDict):
|
||
"""
|
||
Attributes:
|
||
metric: Metric name
|
||
index: Aggregation index
|
||
"""
|
||
metric: Metric
|
||
index: Index
|
||
|
||
class OHLCCentsUnsigned(TypedDict):
|
||
"""
|
||
OHLC (Open, High, Low, Close) data in cents
|
||
"""
|
||
open: Open
|
||
high: High
|
||
low: Low
|
||
close: Close
|
||
|
||
class OHLCDollars(TypedDict):
|
||
"""
|
||
OHLC (Open, High, Low, Close) data in dollars
|
||
"""
|
||
open: Open
|
||
high: High
|
||
low: Low
|
||
close: Close
|
||
|
||
class OHLCSats(TypedDict):
|
||
"""
|
||
OHLC (Open, High, Low, Close) data in satoshis
|
||
"""
|
||
open: Open
|
||
high: High
|
||
low: Low
|
||
close: Close
|
||
|
||
class PaginatedMetrics(TypedDict):
|
||
"""
|
||
A paginated list of available metric names (1000 per page)
|
||
|
||
Attributes:
|
||
current_page: Current page number (0-indexed)
|
||
max_page: Maximum valid page index (0-indexed)
|
||
metrics: List of metric names (max 1000 per page)
|
||
"""
|
||
current_page: int
|
||
max_page: int
|
||
metrics: List[str]
|
||
|
||
class Pagination(TypedDict):
|
||
"""
|
||
Pagination parameters for paginated API endpoints
|
||
|
||
Attributes:
|
||
page: Pagination index
|
||
"""
|
||
page: Optional[int]
|
||
|
||
class PoolBlockCounts(TypedDict):
|
||
"""
|
||
Block counts for different time periods
|
||
|
||
Attributes:
|
||
all: Total blocks mined (all time)
|
||
_24h: Blocks mined in last 24 hours
|
||
_1w: Blocks mined in last week
|
||
"""
|
||
all: int
|
||
_24h: int
|
||
_1w: int
|
||
|
||
class PoolBlockShares(TypedDict):
|
||
"""
|
||
Pool's share of total blocks for different time periods
|
||
|
||
Attributes:
|
||
all: Share of all blocks (0.0 - 1.0)
|
||
_24h: Share of blocks in last 24 hours
|
||
_1w: Share of blocks in last week
|
||
"""
|
||
all: float
|
||
_24h: float
|
||
_1w: float
|
||
|
||
class PoolDetailInfo(TypedDict):
|
||
"""
|
||
Pool information for detail view
|
||
|
||
Attributes:
|
||
id: Unique pool identifier
|
||
name: Pool name
|
||
link: Pool website URL
|
||
addresses: Known payout addresses
|
||
regexes: Coinbase tag patterns (regexes)
|
||
slug: URL-friendly pool identifier
|
||
"""
|
||
id: int
|
||
name: str
|
||
link: str
|
||
addresses: List[str]
|
||
regexes: List[str]
|
||
slug: PoolSlug
|
||
|
||
class PoolDetail(TypedDict):
|
||
"""
|
||
Detailed pool information with statistics across time periods
|
||
|
||
Attributes:
|
||
pool: Pool information
|
||
blockCount: Block counts for different time periods
|
||
blockShare: Pool's share of total blocks for different time periods
|
||
estimatedHashrate: Estimated hashrate based on blocks mined
|
||
reportedHashrate: Self-reported hashrate (if available)
|
||
"""
|
||
pool: PoolDetailInfo
|
||
blockCount: PoolBlockCounts
|
||
blockShare: PoolBlockShares
|
||
estimatedHashrate: int
|
||
reportedHashrate: Optional[int]
|
||
|
||
class PoolInfo(TypedDict):
|
||
"""
|
||
Basic pool information for listing all pools
|
||
|
||
Attributes:
|
||
name: Pool name
|
||
slug: URL-friendly pool identifier
|
||
unique_id: Unique numeric pool identifier
|
||
"""
|
||
name: str
|
||
slug: PoolSlug
|
||
unique_id: int
|
||
|
||
class PoolSlugParam(TypedDict):
|
||
slug: PoolSlug
|
||
|
||
class PoolStats(TypedDict):
|
||
"""
|
||
Mining pool with block statistics for a time period
|
||
|
||
Attributes:
|
||
poolId: Unique pool identifier
|
||
name: Pool name
|
||
link: Pool website URL
|
||
blockCount: Number of blocks mined in the time period
|
||
rank: Pool ranking by block count (1 = most blocks)
|
||
emptyBlocks: Number of empty blocks mined
|
||
slug: URL-friendly pool identifier
|
||
share: Pool's share of total blocks (0.0 - 1.0)
|
||
"""
|
||
poolId: int
|
||
name: str
|
||
link: str
|
||
blockCount: int
|
||
rank: int
|
||
emptyBlocks: int
|
||
slug: PoolSlug
|
||
share: float
|
||
|
||
class PoolsSummary(TypedDict):
|
||
"""
|
||
Mining pools response for a time period
|
||
|
||
Attributes:
|
||
pools: List of pools sorted by block count descending
|
||
blockCount: Total blocks in the time period
|
||
lastEstimatedHashrate: Estimated network hashrate (hashes per second)
|
||
"""
|
||
pools: List[PoolStats]
|
||
blockCount: int
|
||
lastEstimatedHashrate: int
|
||
|
||
class RecommendedFees(TypedDict):
|
||
"""
|
||
Recommended fee rates in sat/vB
|
||
|
||
Attributes:
|
||
fastestFee: Fee rate for fastest confirmation (next block)
|
||
halfHourFee: Fee rate for confirmation within ~30 minutes (3 blocks)
|
||
hourFee: Fee rate for confirmation within ~1 hour (6 blocks)
|
||
economyFee: Fee rate for economical confirmation
|
||
minimumFee: Minimum relay fee rate
|
||
"""
|
||
fastestFee: FeeRate
|
||
halfHourFee: FeeRate
|
||
hourFee: FeeRate
|
||
economyFee: FeeRate
|
||
minimumFee: FeeRate
|
||
|
||
class RewardStats(TypedDict):
|
||
"""
|
||
Block reward statistics over a range of blocks
|
||
|
||
Attributes:
|
||
startBlock: First block in the range
|
||
endBlock: Last block in the range
|
||
"""
|
||
startBlock: Height
|
||
endBlock: Height
|
||
totalReward: Sats
|
||
totalFee: Sats
|
||
totalTx: int
|
||
|
||
class SupplyState(TypedDict):
|
||
"""
|
||
Current supply state tracking UTXO count and total value
|
||
|
||
Attributes:
|
||
utxo_count: Number of unspent transaction outputs
|
||
value: Total value in satoshis
|
||
"""
|
||
utxo_count: int
|
||
value: Sats
|
||
|
||
class SyncStatus(TypedDict):
|
||
"""
|
||
Sync status of the indexer
|
||
|
||
Attributes:
|
||
indexed_height: Height of the last indexed block
|
||
tip_height: Height of the chain tip (from Bitcoin node)
|
||
blocks_behind: Number of blocks behind the tip
|
||
last_indexed_at: Human-readable timestamp of the last indexed block (ISO 8601)
|
||
last_indexed_at_unix: Unix timestamp of the last indexed block
|
||
"""
|
||
indexed_height: Height
|
||
tip_height: Height
|
||
blocks_behind: Height
|
||
last_indexed_at: str
|
||
last_indexed_at_unix: Timestamp
|
||
|
||
class TimePeriodParam(TypedDict):
|
||
time_period: TimePeriod
|
||
|
||
class TimestampParam(TypedDict):
|
||
timestamp: Timestamp
|
||
|
||
class TxOut(TypedDict):
|
||
"""
|
||
Transaction output
|
||
|
||
Attributes:
|
||
scriptpubkey: Script pubkey (locking script)
|
||
value: Value of the output in satoshis
|
||
"""
|
||
scriptpubkey: str
|
||
value: Sats
|
||
|
||
class TxIn(TypedDict):
|
||
"""
|
||
Transaction input
|
||
|
||
Attributes:
|
||
txid: Transaction ID of the output being spent
|
||
prevout: Information about the previous output being spent
|
||
scriptsig: Signature script (for non-SegWit inputs)
|
||
scriptsig_asm: Signature script in assembly format
|
||
is_coinbase: Whether this input is a coinbase (block reward) input
|
||
sequence: Input sequence number
|
||
inner_redeemscript_asm: Inner redeemscript in assembly format (for P2SH-wrapped SegWit)
|
||
"""
|
||
txid: Txid
|
||
vout: Vout
|
||
prevout: Union[TxOut, None]
|
||
scriptsig: str
|
||
scriptsig_asm: str
|
||
is_coinbase: bool
|
||
sequence: int
|
||
inner_redeemscript_asm: Optional[str]
|
||
|
||
class TxStatus(TypedDict):
|
||
"""
|
||
Transaction confirmation status
|
||
|
||
Attributes:
|
||
confirmed: Whether the transaction is confirmed
|
||
block_height: Block height (only present if confirmed)
|
||
block_hash: Block hash (only present if confirmed)
|
||
block_time: Block timestamp (only present if confirmed)
|
||
"""
|
||
confirmed: bool
|
||
block_height: Union[Height, None]
|
||
block_hash: Union[BlockHash, None]
|
||
block_time: Union[Timestamp, None]
|
||
|
||
class Transaction(TypedDict):
|
||
"""
|
||
Transaction information compatible with mempool.space API format
|
||
|
||
Attributes:
|
||
size: Transaction size in bytes
|
||
weight: Transaction weight
|
||
sigops: Number of signature operations
|
||
fee: Transaction fee in satoshis
|
||
vin: Transaction inputs
|
||
vout: Transaction outputs
|
||
"""
|
||
index: Union[TxIndex, None]
|
||
txid: Txid
|
||
version: TxVersion
|
||
locktime: RawLockTime
|
||
size: int
|
||
weight: Weight
|
||
sigops: int
|
||
fee: Sats
|
||
vin: List[TxIn]
|
||
vout: List[TxOut]
|
||
status: TxStatus
|
||
|
||
class TxOutspend(TypedDict):
|
||
"""
|
||
Status of an output indicating whether it has been spent
|
||
|
||
Attributes:
|
||
spent: Whether the output has been spent
|
||
txid: Transaction ID of the spending transaction (only present if spent)
|
||
vin: Input index in the spending transaction (only present if spent)
|
||
status: Status of the spending transaction (only present if spent)
|
||
"""
|
||
spent: bool
|
||
txid: Union[Txid, None]
|
||
vin: Union[Vin, None]
|
||
status: Union[TxStatus, None]
|
||
|
||
class TxidParam(TypedDict):
|
||
txid: Txid
|
||
|
||
class TxidVout(TypedDict):
|
||
"""
|
||
Transaction output reference (txid + output index)
|
||
|
||
Attributes:
|
||
txid: Transaction ID
|
||
vout: Output index
|
||
"""
|
||
txid: Txid
|
||
vout: Vout
|
||
|
||
class Utxo(TypedDict):
|
||
"""
|
||
Unspent transaction output
|
||
"""
|
||
txid: Txid
|
||
vout: Vout
|
||
status: TxStatus
|
||
value: Sats
|
||
|
||
class ValidateAddressParam(TypedDict):
|
||
"""
|
||
Attributes:
|
||
address: Bitcoin address to validate (can be any string)
|
||
"""
|
||
address: str
|
||
|
||
class MetricLeafWithSchema(TypedDict):
|
||
"""
|
||
MetricLeaf with JSON Schema for client generation
|
||
|
||
Attributes:
|
||
name: The metric name/identifier
|
||
kind: The Rust type (e.g., "Sats", "StoredF64")
|
||
indexes: Available indexes for this metric
|
||
type: JSON Schema type (e.g., "integer", "number", "string", "boolean", "array", "object")
|
||
"""
|
||
name: str
|
||
kind: str
|
||
indexes: List[Index]
|
||
type: str
|
||
|
||
|
||
class BrkError(Exception):
|
||
"""Custom error class for BRK client errors."""
|
||
|
||
def __init__(self, message: str, status: Optional[int] = None):
|
||
super().__init__(message)
|
||
self.status = status
|
||
|
||
|
||
class BrkClientBase:
|
||
"""Base HTTP client for making requests."""
|
||
|
||
def __init__(self, base_url: str, timeout: float = 30.0):
|
||
parsed = urlparse(base_url)
|
||
self._host = parsed.netloc
|
||
self._secure = parsed.scheme == 'https'
|
||
self._timeout = timeout
|
||
self._conn: Optional[Union[HTTPSConnection, HTTPConnection]] = None
|
||
|
||
def _connect(self) -> Union[HTTPSConnection, HTTPConnection]:
|
||
"""Get or create HTTP connection."""
|
||
if self._conn is None:
|
||
if self._secure:
|
||
self._conn = HTTPSConnection(self._host, timeout=self._timeout)
|
||
else:
|
||
self._conn = HTTPConnection(self._host, timeout=self._timeout)
|
||
return self._conn
|
||
|
||
def get(self, path: str) -> bytes:
|
||
"""Make a GET request and return raw bytes."""
|
||
try:
|
||
conn = self._connect()
|
||
conn.request("GET", path)
|
||
res = conn.getresponse()
|
||
data = res.read()
|
||
if res.status >= 400:
|
||
raise BrkError(f"HTTP error: {res.status}", res.status)
|
||
return data
|
||
except (ConnectionError, OSError, TimeoutError) as e:
|
||
self._conn = None
|
||
raise BrkError(str(e))
|
||
|
||
def get_json(self, path: str) -> Any:
|
||
"""Make a GET request and return JSON."""
|
||
return json.loads(self.get(path))
|
||
|
||
def get_text(self, path: str) -> str:
|
||
"""Make a GET request and return text."""
|
||
return self.get(path).decode()
|
||
|
||
def close(self):
|
||
"""Close the HTTP client."""
|
||
if self._conn:
|
||
self._conn.close()
|
||
self._conn = None
|
||
|
||
def __enter__(self):
|
||
return self
|
||
|
||
def __exit__(self, exc_type, exc_val, exc_tb):
|
||
self.close()
|
||
|
||
|
||
def _m(acc: str, s: str) -> str:
|
||
"""Build metric name with suffix."""
|
||
if not s: return acc
|
||
return f"{acc}_{s}" if acc else s
|
||
|
||
|
||
def _p(prefix: str, acc: str) -> str:
|
||
"""Build metric name with prefix."""
|
||
return f"{prefix}_{acc}" if acc else prefix
|
||
|
||
|
||
# Date conversion constants
|
||
_GENESIS = date(2009, 1, 3) # dateindex 0, weekindex 0
|
||
_DAY_ONE = date(2009, 1, 9) # dateindex 1 (6 day gap after genesis)
|
||
_DATE_INDEXES = frozenset(['dateindex', 'weekindex', 'monthindex', 'yearindex', 'quarterindex', 'semesterindex', 'decadeindex'])
|
||
|
||
def is_date_index(index: str) -> bool:
|
||
"""Check if an index type is date-based."""
|
||
return index in _DATE_INDEXES
|
||
|
||
def index_to_date(index: str, i: int) -> date:
|
||
"""Convert an index value to a date for date-based indexes."""
|
||
if index == 'dateindex':
|
||
return _GENESIS if i == 0 else _DAY_ONE + timedelta(days=i - 1)
|
||
elif index == 'weekindex':
|
||
return _GENESIS + timedelta(weeks=i)
|
||
elif index == 'monthindex':
|
||
return date(2009 + i // 12, i % 12 + 1, 1)
|
||
elif index == 'yearindex':
|
||
return date(2009 + i, 1, 1)
|
||
elif index == 'quarterindex':
|
||
m = i * 3
|
||
return date(2009 + m // 12, m % 12 + 1, 1)
|
||
elif index == 'semesterindex':
|
||
m = i * 6
|
||
return date(2009 + m // 12, m % 12 + 1, 1)
|
||
elif index == 'decadeindex':
|
||
return date(2009 + i * 10, 1, 1)
|
||
else:
|
||
raise ValueError(f"{index} is not a date-based index")
|
||
|
||
|
||
@dataclass
|
||
class MetricData(Generic[T]):
|
||
"""Metric data with range information."""
|
||
version: int
|
||
index: Index
|
||
total: int
|
||
start: int
|
||
end: int
|
||
stamp: str
|
||
data: List[T]
|
||
|
||
def dates(self) -> List[date]:
|
||
"""Convert index range to dates. Only works for date-based indexes."""
|
||
return [index_to_date(self.index, i) for i in range(self.start, self.end)]
|
||
|
||
def indexes(self) -> List[int]:
|
||
"""Get index range as list."""
|
||
return list(range(self.start, self.end))
|
||
|
||
def to_date_dict(self) -> dict[date, T]:
|
||
"""Return data as {date: value} dict. Only works for date-based indexes."""
|
||
return dict(zip(self.dates(), self.data))
|
||
|
||
def to_index_dict(self) -> dict[int, T]:
|
||
"""Return data as {index: value} dict."""
|
||
return dict(zip(range(self.start, self.end), self.data))
|
||
|
||
def date_items(self) -> List[Tuple[date, T]]:
|
||
"""Return data as [(date, value), ...] pairs. Only works for date-based indexes."""
|
||
return list(zip(self.dates(), self.data))
|
||
|
||
def index_items(self) -> List[Tuple[int, T]]:
|
||
"""Return data as [(index, value), ...] pairs."""
|
||
return list(zip(range(self.start, self.end), self.data))
|
||
|
||
def iter(self) -> Iterator[Tuple[int, T]]:
|
||
"""Iterate over (index, value) pairs."""
|
||
return iter(zip(range(self.start, self.end), self.data))
|
||
|
||
def iter_dates(self) -> Iterator[Tuple[date, T]]:
|
||
"""Iterate over (date, value) pairs. Date-based indexes only."""
|
||
return iter(zip(self.dates(), self.data))
|
||
|
||
def __iter__(self) -> Iterator[Tuple[int, T]]:
|
||
"""Default iteration over (index, value) pairs."""
|
||
return self.iter()
|
||
|
||
def to_polars(self, with_dates: bool = True) -> pl.DataFrame:
|
||
"""Convert to Polars DataFrame. Requires polars to be installed.
|
||
|
||
Returns a DataFrame with columns:
|
||
- 'date' (date) and 'value' (T) if with_dates=True and index is date-based
|
||
- 'index' (int) and 'value' (T) otherwise
|
||
"""
|
||
try:
|
||
import polars as pl # type: ignore[import-not-found]
|
||
except ImportError:
|
||
raise ImportError("polars is required: pip install polars")
|
||
if with_dates and self.index in _DATE_INDEXES:
|
||
return pl.DataFrame({"date": self.dates(), "value": self.data})
|
||
return pl.DataFrame({"index": list(range(self.start, self.end)), "value": self.data})
|
||
|
||
def to_pandas(self, with_dates: bool = True) -> pd.DataFrame:
|
||
"""Convert to Pandas DataFrame. Requires pandas to be installed.
|
||
|
||
Returns a DataFrame with columns:
|
||
- 'date' (date) and 'value' (T) if with_dates=True and index is date-based
|
||
- 'index' (int) and 'value' (T) otherwise
|
||
"""
|
||
try:
|
||
import pandas as pd # type: ignore[import-not-found]
|
||
except ImportError:
|
||
raise ImportError("pandas is required: pip install pandas")
|
||
if with_dates and self.index in _DATE_INDEXES:
|
||
return pd.DataFrame({"date": self.dates(), "value": self.data})
|
||
return pd.DataFrame({"index": list(range(self.start, self.end)), "value": self.data})
|
||
|
||
|
||
# Type alias for non-generic usage
|
||
AnyMetricData = MetricData[Any]
|
||
|
||
|
||
class _EndpointConfig:
|
||
"""Shared endpoint configuration."""
|
||
client: BrkClientBase
|
||
name: str
|
||
index: Index
|
||
start: Optional[int]
|
||
end: Optional[int]
|
||
|
||
def __init__(self, client: BrkClientBase, name: str, index: Index,
|
||
start: Optional[int] = None, end: Optional[int] = None):
|
||
self.client = client
|
||
self.name = name
|
||
self.index = index
|
||
self.start = start
|
||
self.end = end
|
||
|
||
def path(self) -> str:
|
||
return f"/api/metric/{self.name}/{self.index}"
|
||
|
||
def _build_path(self, format: Optional[str] = None) -> str:
|
||
params = []
|
||
if self.start is not None:
|
||
params.append(f"start={self.start}")
|
||
if self.end is not None:
|
||
params.append(f"end={self.end}")
|
||
if format is not None:
|
||
params.append(f"format={format}")
|
||
query = "&".join(params)
|
||
p = self.path()
|
||
return f"{p}?{query}" if query else p
|
||
|
||
def get_metric(self) -> MetricData:
|
||
return MetricData(**self.client.get_json(self._build_path()))
|
||
|
||
def get_csv(self) -> str:
|
||
return self.client.get_text(self._build_path(format='csv'))
|
||
|
||
|
||
class RangeBuilder(Generic[T]):
|
||
"""Builder with range specified."""
|
||
|
||
def __init__(self, config: _EndpointConfig):
|
||
self._config = config
|
||
|
||
def fetch(self) -> MetricData[T]:
|
||
"""Fetch the range as parsed JSON."""
|
||
return self._config.get_metric()
|
||
|
||
def fetch_csv(self) -> str:
|
||
"""Fetch the range as CSV string."""
|
||
return self._config.get_csv()
|
||
|
||
|
||
class SingleItemBuilder(Generic[T]):
|
||
"""Builder for single item access."""
|
||
|
||
def __init__(self, config: _EndpointConfig):
|
||
self._config = config
|
||
|
||
def fetch(self) -> MetricData[T]:
|
||
"""Fetch the single item."""
|
||
return self._config.get_metric()
|
||
|
||
def fetch_csv(self) -> str:
|
||
"""Fetch as CSV."""
|
||
return self._config.get_csv()
|
||
|
||
|
||
class SkippedBuilder(Generic[T]):
|
||
"""Builder after calling skip(n). Chain with take() to specify count."""
|
||
|
||
def __init__(self, config: _EndpointConfig):
|
||
self._config = config
|
||
|
||
def take(self, n: int) -> RangeBuilder[T]:
|
||
"""Take n items after the skipped position."""
|
||
start = self._config.start or 0
|
||
return RangeBuilder(_EndpointConfig(
|
||
self._config.client, self._config.name, self._config.index,
|
||
start, start + n
|
||
))
|
||
|
||
def fetch(self) -> MetricData[T]:
|
||
"""Fetch from skipped position to end."""
|
||
return self._config.get_metric()
|
||
|
||
def fetch_csv(self) -> str:
|
||
"""Fetch as CSV."""
|
||
return self._config.get_csv()
|
||
|
||
|
||
class MetricEndpointBuilder(Generic[T]):
|
||
"""Builder for metric endpoint queries.
|
||
|
||
Use method chaining to specify the data range, then call fetch() or fetch_csv() to execute.
|
||
|
||
Examples:
|
||
# Fetch all data
|
||
data = endpoint.fetch()
|
||
|
||
# Single item access
|
||
data = endpoint[5].fetch()
|
||
|
||
# Slice syntax (Python-native)
|
||
data = endpoint[:10].fetch() # First 10
|
||
data = endpoint[-5:].fetch() # Last 5
|
||
data = endpoint[100:110].fetch() # Range
|
||
|
||
# Convenience methods (pandas-style)
|
||
data = endpoint.head().fetch() # First 10 (default)
|
||
data = endpoint.head(20).fetch() # First 20
|
||
data = endpoint.tail(5).fetch() # Last 5
|
||
|
||
# Iterator-style chaining
|
||
data = endpoint.skip(100).take(10).fetch()
|
||
"""
|
||
|
||
def __init__(self, client: BrkClientBase, name: str, index: Index):
|
||
self._config = _EndpointConfig(client, name, index)
|
||
|
||
@overload
|
||
def __getitem__(self, key: int) -> SingleItemBuilder[T]: ...
|
||
@overload
|
||
def __getitem__(self, key: slice) -> RangeBuilder[T]: ...
|
||
|
||
def __getitem__(self, key: Union[int, slice]) -> Union[SingleItemBuilder[T], RangeBuilder[T]]:
|
||
"""Access single item or slice.
|
||
|
||
Examples:
|
||
endpoint[5] # Single item at index 5
|
||
endpoint[:10] # First 10
|
||
endpoint[-5:] # Last 5
|
||
endpoint[100:110] # Range 100-109
|
||
"""
|
||
if isinstance(key, int):
|
||
return SingleItemBuilder(_EndpointConfig(
|
||
self._config.client, self._config.name, self._config.index,
|
||
key, key + 1
|
||
))
|
||
return RangeBuilder(_EndpointConfig(
|
||
self._config.client, self._config.name, self._config.index,
|
||
key.start, key.stop
|
||
))
|
||
|
||
def head(self, n: int = 10) -> RangeBuilder[T]:
|
||
"""Get the first n items (pandas-style)."""
|
||
return RangeBuilder(_EndpointConfig(
|
||
self._config.client, self._config.name, self._config.index,
|
||
None, n
|
||
))
|
||
|
||
def tail(self, n: int = 10) -> RangeBuilder[T]:
|
||
"""Get the last n items (pandas-style)."""
|
||
start, end = (None, 0) if n == 0 else (-n, None)
|
||
return RangeBuilder(_EndpointConfig(
|
||
self._config.client, self._config.name, self._config.index,
|
||
start, end
|
||
))
|
||
|
||
def skip(self, n: int) -> SkippedBuilder[T]:
|
||
"""Skip the first n items. Chain with take() to get a range."""
|
||
return SkippedBuilder(_EndpointConfig(
|
||
self._config.client, self._config.name, self._config.index,
|
||
n, None
|
||
))
|
||
|
||
def fetch(self) -> MetricData[T]:
|
||
"""Fetch all data as parsed JSON."""
|
||
return self._config.get_metric()
|
||
|
||
def fetch_csv(self) -> str:
|
||
"""Fetch all data as CSV string."""
|
||
return self._config.get_csv()
|
||
|
||
def path(self) -> str:
|
||
"""Get the base endpoint path."""
|
||
return self._config.path()
|
||
|
||
|
||
# Type alias for non-generic usage
|
||
AnyMetricEndpointBuilder = MetricEndpointBuilder[Any]
|
||
|
||
|
||
class MetricPattern(Protocol[T]):
|
||
"""Protocol for metric patterns with different index sets."""
|
||
|
||
@property
|
||
def name(self) -> str:
|
||
"""Get the metric name."""
|
||
...
|
||
|
||
def indexes(self) -> List[str]:
|
||
"""Get the list of available indexes for this metric."""
|
||
...
|
||
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]:
|
||
"""Get an endpoint builder for a specific index, if supported."""
|
||
...
|
||
|
||
|
||
# Static index tuples
|
||
_i1 = ('dateindex', 'decadeindex', 'difficultyepoch', 'height', 'monthindex', 'quarterindex', 'semesterindex', 'weekindex', 'yearindex')
|
||
_i2 = ('dateindex', 'decadeindex', 'difficultyepoch', 'monthindex', 'quarterindex', 'semesterindex', 'weekindex', 'yearindex')
|
||
_i3 = ('dateindex', 'decadeindex', 'height', 'monthindex', 'quarterindex', 'semesterindex', 'weekindex', 'yearindex')
|
||
_i4 = ('dateindex', 'decadeindex', 'monthindex', 'quarterindex', 'semesterindex', 'weekindex', 'yearindex')
|
||
_i5 = ('dateindex', 'height')
|
||
_i6 = ('dateindex',)
|
||
_i7 = ('decadeindex',)
|
||
_i8 = ('difficultyepoch',)
|
||
_i9 = ('emptyoutputindex',)
|
||
_i10 = ('halvingepoch',)
|
||
_i11 = ('height',)
|
||
_i12 = ('txinindex',)
|
||
_i13 = ('monthindex',)
|
||
_i14 = ('opreturnindex',)
|
||
_i15 = ('txoutindex',)
|
||
_i16 = ('p2aaddressindex',)
|
||
_i17 = ('p2msoutputindex',)
|
||
_i18 = ('p2pk33addressindex',)
|
||
_i19 = ('p2pk65addressindex',)
|
||
_i20 = ('p2pkhaddressindex',)
|
||
_i21 = ('p2shaddressindex',)
|
||
_i22 = ('p2traddressindex',)
|
||
_i23 = ('p2wpkhaddressindex',)
|
||
_i24 = ('p2wshaddressindex',)
|
||
_i25 = ('quarterindex',)
|
||
_i26 = ('semesterindex',)
|
||
_i27 = ('txindex',)
|
||
_i28 = ('unknownoutputindex',)
|
||
_i29 = ('weekindex',)
|
||
_i30 = ('yearindex',)
|
||
_i31 = ('fundedaddressindex',)
|
||
_i32 = ('emptyaddressindex',)
|
||
|
||
def _ep(c: BrkClientBase, n: str, i: Index) -> MetricEndpointBuilder[Any]:
|
||
return MetricEndpointBuilder(c, n, i)
|
||
|
||
# Index accessor classes
|
||
|
||
class _MetricPattern1By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def dateindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'dateindex')
|
||
def decadeindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'decadeindex')
|
||
def difficultyepoch(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'difficultyepoch')
|
||
def height(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'height')
|
||
def monthindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'monthindex')
|
||
def quarterindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'quarterindex')
|
||
def semesterindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'semesterindex')
|
||
def weekindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'weekindex')
|
||
def yearindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'yearindex')
|
||
|
||
class MetricPattern1(Generic[T]):
|
||
by: _MetricPattern1By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern1By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i1)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i1 else None
|
||
|
||
class _MetricPattern2By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def dateindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'dateindex')
|
||
def decadeindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'decadeindex')
|
||
def difficultyepoch(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'difficultyepoch')
|
||
def monthindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'monthindex')
|
||
def quarterindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'quarterindex')
|
||
def semesterindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'semesterindex')
|
||
def weekindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'weekindex')
|
||
def yearindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'yearindex')
|
||
|
||
class MetricPattern2(Generic[T]):
|
||
by: _MetricPattern2By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern2By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i2)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i2 else None
|
||
|
||
class _MetricPattern3By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def dateindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'dateindex')
|
||
def decadeindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'decadeindex')
|
||
def height(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'height')
|
||
def monthindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'monthindex')
|
||
def quarterindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'quarterindex')
|
||
def semesterindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'semesterindex')
|
||
def weekindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'weekindex')
|
||
def yearindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'yearindex')
|
||
|
||
class MetricPattern3(Generic[T]):
|
||
by: _MetricPattern3By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern3By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i3)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i3 else None
|
||
|
||
class _MetricPattern4By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def dateindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'dateindex')
|
||
def decadeindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'decadeindex')
|
||
def monthindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'monthindex')
|
||
def quarterindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'quarterindex')
|
||
def semesterindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'semesterindex')
|
||
def weekindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'weekindex')
|
||
def yearindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'yearindex')
|
||
|
||
class MetricPattern4(Generic[T]):
|
||
by: _MetricPattern4By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern4By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i4)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i4 else None
|
||
|
||
class _MetricPattern5By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def dateindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'dateindex')
|
||
def height(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'height')
|
||
|
||
class MetricPattern5(Generic[T]):
|
||
by: _MetricPattern5By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern5By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i5)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i5 else None
|
||
|
||
class _MetricPattern6By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def dateindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'dateindex')
|
||
|
||
class MetricPattern6(Generic[T]):
|
||
by: _MetricPattern6By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern6By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i6)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i6 else None
|
||
|
||
class _MetricPattern7By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def decadeindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'decadeindex')
|
||
|
||
class MetricPattern7(Generic[T]):
|
||
by: _MetricPattern7By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern7By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i7)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i7 else None
|
||
|
||
class _MetricPattern8By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def difficultyepoch(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'difficultyepoch')
|
||
|
||
class MetricPattern8(Generic[T]):
|
||
by: _MetricPattern8By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern8By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i8)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i8 else None
|
||
|
||
class _MetricPattern9By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def emptyoutputindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'emptyoutputindex')
|
||
|
||
class MetricPattern9(Generic[T]):
|
||
by: _MetricPattern9By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern9By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i9)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i9 else None
|
||
|
||
class _MetricPattern10By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def halvingepoch(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'halvingepoch')
|
||
|
||
class MetricPattern10(Generic[T]):
|
||
by: _MetricPattern10By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern10By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i10)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i10 else None
|
||
|
||
class _MetricPattern11By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def height(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'height')
|
||
|
||
class MetricPattern11(Generic[T]):
|
||
by: _MetricPattern11By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern11By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i11)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i11 else None
|
||
|
||
class _MetricPattern12By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def txinindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'txinindex')
|
||
|
||
class MetricPattern12(Generic[T]):
|
||
by: _MetricPattern12By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern12By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i12)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i12 else None
|
||
|
||
class _MetricPattern13By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def monthindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'monthindex')
|
||
|
||
class MetricPattern13(Generic[T]):
|
||
by: _MetricPattern13By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern13By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i13)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i13 else None
|
||
|
||
class _MetricPattern14By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def opreturnindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'opreturnindex')
|
||
|
||
class MetricPattern14(Generic[T]):
|
||
by: _MetricPattern14By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern14By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i14)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i14 else None
|
||
|
||
class _MetricPattern15By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def txoutindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'txoutindex')
|
||
|
||
class MetricPattern15(Generic[T]):
|
||
by: _MetricPattern15By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern15By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i15)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i15 else None
|
||
|
||
class _MetricPattern16By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def p2aaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2aaddressindex')
|
||
|
||
class MetricPattern16(Generic[T]):
|
||
by: _MetricPattern16By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern16By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i16)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i16 else None
|
||
|
||
class _MetricPattern17By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def p2msoutputindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2msoutputindex')
|
||
|
||
class MetricPattern17(Generic[T]):
|
||
by: _MetricPattern17By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern17By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i17)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i17 else None
|
||
|
||
class _MetricPattern18By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def p2pk33addressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2pk33addressindex')
|
||
|
||
class MetricPattern18(Generic[T]):
|
||
by: _MetricPattern18By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern18By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i18)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i18 else None
|
||
|
||
class _MetricPattern19By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def p2pk65addressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2pk65addressindex')
|
||
|
||
class MetricPattern19(Generic[T]):
|
||
by: _MetricPattern19By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern19By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i19)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i19 else None
|
||
|
||
class _MetricPattern20By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def p2pkhaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2pkhaddressindex')
|
||
|
||
class MetricPattern20(Generic[T]):
|
||
by: _MetricPattern20By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern20By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i20)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i20 else None
|
||
|
||
class _MetricPattern21By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def p2shaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2shaddressindex')
|
||
|
||
class MetricPattern21(Generic[T]):
|
||
by: _MetricPattern21By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern21By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i21)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i21 else None
|
||
|
||
class _MetricPattern22By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def p2traddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2traddressindex')
|
||
|
||
class MetricPattern22(Generic[T]):
|
||
by: _MetricPattern22By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern22By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i22)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i22 else None
|
||
|
||
class _MetricPattern23By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def p2wpkhaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2wpkhaddressindex')
|
||
|
||
class MetricPattern23(Generic[T]):
|
||
by: _MetricPattern23By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern23By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i23)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i23 else None
|
||
|
||
class _MetricPattern24By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def p2wshaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'p2wshaddressindex')
|
||
|
||
class MetricPattern24(Generic[T]):
|
||
by: _MetricPattern24By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern24By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i24)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i24 else None
|
||
|
||
class _MetricPattern25By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def quarterindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'quarterindex')
|
||
|
||
class MetricPattern25(Generic[T]):
|
||
by: _MetricPattern25By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern25By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i25)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i25 else None
|
||
|
||
class _MetricPattern26By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def semesterindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'semesterindex')
|
||
|
||
class MetricPattern26(Generic[T]):
|
||
by: _MetricPattern26By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern26By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i26)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i26 else None
|
||
|
||
class _MetricPattern27By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def txindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'txindex')
|
||
|
||
class MetricPattern27(Generic[T]):
|
||
by: _MetricPattern27By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern27By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i27)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i27 else None
|
||
|
||
class _MetricPattern28By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def unknownoutputindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'unknownoutputindex')
|
||
|
||
class MetricPattern28(Generic[T]):
|
||
by: _MetricPattern28By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern28By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i28)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i28 else None
|
||
|
||
class _MetricPattern29By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def weekindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'weekindex')
|
||
|
||
class MetricPattern29(Generic[T]):
|
||
by: _MetricPattern29By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern29By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i29)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i29 else None
|
||
|
||
class _MetricPattern30By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def yearindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'yearindex')
|
||
|
||
class MetricPattern30(Generic[T]):
|
||
by: _MetricPattern30By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern30By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i30)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i30 else None
|
||
|
||
class _MetricPattern31By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def fundedaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'fundedaddressindex')
|
||
|
||
class MetricPattern31(Generic[T]):
|
||
by: _MetricPattern31By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern31By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i31)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i31 else None
|
||
|
||
class _MetricPattern32By(Generic[T]):
|
||
def __init__(self, c: BrkClientBase, n: str): self._c, self._n = c, n
|
||
def emptyaddressindex(self) -> MetricEndpointBuilder[T]: return _ep(self._c, self._n, 'emptyaddressindex')
|
||
|
||
class MetricPattern32(Generic[T]):
|
||
by: _MetricPattern32By[T]
|
||
def __init__(self, c: BrkClientBase, n: str): self._n, self.by = n, _MetricPattern32By(c, n)
|
||
@property
|
||
def name(self) -> str: return self._n
|
||
def indexes(self) -> List[str]: return list(_i32)
|
||
def get(self, index: Index) -> Optional[MetricEndpointBuilder[T]]: return _ep(self.by._c, self._n, index) if index in _i32 else None
|
||
|
||
# Reusable structural pattern classes
|
||
|
||
class AdjustedCapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.adjusted_sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'adjusted_sopr'))
|
||
self.adjusted_sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'adjusted_sopr_30d_ema'))
|
||
self.adjusted_sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'adjusted_sopr_7d_ema'))
|
||
self.adjusted_value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'adjusted_value_created'))
|
||
self.adjusted_value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'adjusted_value_destroyed'))
|
||
self.cap_raw: MetricPattern11[CentsSats] = MetricPattern11(client, _m(acc, 'cap_raw'))
|
||
self.capitulation_flow: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'capitulation_flow'))
|
||
self.investor_cap_raw: MetricPattern11[CentsSquaredSats] = MetricPattern11(client, _m(acc, 'investor_cap_raw'))
|
||
self.investor_price: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'investor_price'))
|
||
self.investor_price_cents: MetricPattern1[CentsUnsigned] = MetricPattern1(client, _m(acc, 'investor_price_cents'))
|
||
self.investor_price_extra: RatioPattern = RatioPattern(client, _m(acc, 'investor_price_ratio'))
|
||
self.loss_value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'loss_value_created'))
|
||
self.loss_value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'loss_value_destroyed'))
|
||
self.lower_price_band: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'lower_price_band'))
|
||
self.mvrv: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'mvrv'))
|
||
self.neg_realized_loss: CumulativeSumPattern2[Dollars] = CumulativeSumPattern2(client, _m(acc, 'neg_realized_loss'))
|
||
self.net_realized_pnl: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'net_realized_pnl'))
|
||
self.net_realized_pnl_7d_ema: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'net_realized_pnl_7d_ema'))
|
||
self.net_realized_pnl_cumulative_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta'))
|
||
self.net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_market_cap'))
|
||
self.net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap'))
|
||
self.net_realized_pnl_rel_to_realized_cap: CumulativeSumPattern[StoredF32] = CumulativeSumPattern(client, _m(acc, 'net_realized_pnl_rel_to_realized_cap'))
|
||
self.peak_regret: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'realized_peak_regret'))
|
||
self.peak_regret_rel_to_realized_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'peak_regret_rel_to_realized_cap'))
|
||
self.profit_flow: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'profit_flow'))
|
||
self.profit_value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'profit_value_created'))
|
||
self.profit_value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'profit_value_destroyed'))
|
||
self.realized_cap: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_cap'))
|
||
self.realized_cap_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_cap_30d_delta'))
|
||
self.realized_cap_cents: MetricPattern1[CentsUnsigned] = MetricPattern1(client, _m(acc, 'realized_cap_cents'))
|
||
self.realized_cap_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'realized_cap_rel_to_own_market_cap'))
|
||
self.realized_loss: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'realized_loss'))
|
||
self.realized_loss_7d_ema: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_loss_7d_ema'))
|
||
self.realized_loss_rel_to_realized_cap: CumulativeSumPattern[StoredF32] = CumulativeSumPattern(client, _m(acc, 'realized_loss_rel_to_realized_cap'))
|
||
self.realized_price: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'realized_price'))
|
||
self.realized_price_extra: RatioPattern = RatioPattern(client, _m(acc, 'realized_price_ratio'))
|
||
self.realized_profit: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'realized_profit'))
|
||
self.realized_profit_7d_ema: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_profit_7d_ema'))
|
||
self.realized_profit_rel_to_realized_cap: CumulativeSumPattern[StoredF32] = CumulativeSumPattern(client, _m(acc, 'realized_profit_rel_to_realized_cap'))
|
||
self.realized_profit_to_loss_ratio: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'realized_profit_to_loss_ratio'))
|
||
self.realized_value: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_value'))
|
||
self.sell_side_risk_ratio: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio'))
|
||
self.sell_side_risk_ratio_30d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_30d_ema'))
|
||
self.sell_side_risk_ratio_7d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_7d_ema'))
|
||
self.sent_in_loss: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, _m(acc, 'sent_in_loss'))
|
||
self.sent_in_loss_14d_ema: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _m(acc, 'sent_in_loss_14d_ema'))
|
||
self.sent_in_profit: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, _m(acc, 'sent_in_profit'))
|
||
self.sent_in_profit_14d_ema: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _m(acc, 'sent_in_profit_14d_ema'))
|
||
self.sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr'))
|
||
self.sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_30d_ema'))
|
||
self.sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_7d_ema'))
|
||
self.total_realized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_realized_pnl'))
|
||
self.upper_price_band: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'upper_price_band'))
|
||
self.value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_created'))
|
||
self.value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_destroyed'))
|
||
|
||
class AdjustedCapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern2:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.adjusted_sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'adjusted_sopr'))
|
||
self.adjusted_sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'adjusted_sopr_30d_ema'))
|
||
self.adjusted_sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'adjusted_sopr_7d_ema'))
|
||
self.adjusted_value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'adjusted_value_created'))
|
||
self.adjusted_value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'adjusted_value_destroyed'))
|
||
self.cap_raw: MetricPattern11[CentsSats] = MetricPattern11(client, _m(acc, 'cap_raw'))
|
||
self.capitulation_flow: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'capitulation_flow'))
|
||
self.investor_cap_raw: MetricPattern11[CentsSquaredSats] = MetricPattern11(client, _m(acc, 'investor_cap_raw'))
|
||
self.investor_price: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'investor_price'))
|
||
self.investor_price_cents: MetricPattern1[CentsUnsigned] = MetricPattern1(client, _m(acc, 'investor_price_cents'))
|
||
self.investor_price_extra: RatioPattern2 = RatioPattern2(client, _m(acc, 'investor_price_ratio'))
|
||
self.loss_value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'loss_value_created'))
|
||
self.loss_value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'loss_value_destroyed'))
|
||
self.lower_price_band: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'lower_price_band'))
|
||
self.mvrv: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'mvrv'))
|
||
self.neg_realized_loss: CumulativeSumPattern2[Dollars] = CumulativeSumPattern2(client, _m(acc, 'neg_realized_loss'))
|
||
self.net_realized_pnl: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'net_realized_pnl'))
|
||
self.net_realized_pnl_7d_ema: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'net_realized_pnl_7d_ema'))
|
||
self.net_realized_pnl_cumulative_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta'))
|
||
self.net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_market_cap'))
|
||
self.net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap'))
|
||
self.net_realized_pnl_rel_to_realized_cap: CumulativeSumPattern[StoredF32] = CumulativeSumPattern(client, _m(acc, 'net_realized_pnl_rel_to_realized_cap'))
|
||
self.peak_regret: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'realized_peak_regret'))
|
||
self.peak_regret_rel_to_realized_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'peak_regret_rel_to_realized_cap'))
|
||
self.profit_flow: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'profit_flow'))
|
||
self.profit_value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'profit_value_created'))
|
||
self.profit_value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'profit_value_destroyed'))
|
||
self.realized_cap: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_cap'))
|
||
self.realized_cap_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_cap_30d_delta'))
|
||
self.realized_cap_cents: MetricPattern1[CentsUnsigned] = MetricPattern1(client, _m(acc, 'realized_cap_cents'))
|
||
self.realized_loss: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'realized_loss'))
|
||
self.realized_loss_7d_ema: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_loss_7d_ema'))
|
||
self.realized_loss_rel_to_realized_cap: CumulativeSumPattern[StoredF32] = CumulativeSumPattern(client, _m(acc, 'realized_loss_rel_to_realized_cap'))
|
||
self.realized_price: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'realized_price'))
|
||
self.realized_price_extra: RatioPattern2 = RatioPattern2(client, _m(acc, 'realized_price_ratio'))
|
||
self.realized_profit: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'realized_profit'))
|
||
self.realized_profit_7d_ema: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_profit_7d_ema'))
|
||
self.realized_profit_rel_to_realized_cap: CumulativeSumPattern[StoredF32] = CumulativeSumPattern(client, _m(acc, 'realized_profit_rel_to_realized_cap'))
|
||
self.realized_value: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_value'))
|
||
self.sell_side_risk_ratio: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio'))
|
||
self.sell_side_risk_ratio_30d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_30d_ema'))
|
||
self.sell_side_risk_ratio_7d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_7d_ema'))
|
||
self.sent_in_loss: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, _m(acc, 'sent_in_loss'))
|
||
self.sent_in_loss_14d_ema: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _m(acc, 'sent_in_loss_14d_ema'))
|
||
self.sent_in_profit: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, _m(acc, 'sent_in_profit'))
|
||
self.sent_in_profit_14d_ema: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _m(acc, 'sent_in_profit_14d_ema'))
|
||
self.sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr'))
|
||
self.sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_30d_ema'))
|
||
self.sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_7d_ema'))
|
||
self.total_realized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_realized_pnl'))
|
||
self.upper_price_band: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'upper_price_band'))
|
||
self.value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_created'))
|
||
self.value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_destroyed'))
|
||
|
||
class CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern2:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.cap_raw: MetricPattern11[CentsSats] = MetricPattern11(client, _m(acc, 'cap_raw'))
|
||
self.capitulation_flow: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'capitulation_flow'))
|
||
self.investor_cap_raw: MetricPattern11[CentsSquaredSats] = MetricPattern11(client, _m(acc, 'investor_cap_raw'))
|
||
self.investor_price: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'investor_price'))
|
||
self.investor_price_cents: MetricPattern1[CentsUnsigned] = MetricPattern1(client, _m(acc, 'investor_price_cents'))
|
||
self.investor_price_extra: RatioPattern = RatioPattern(client, _m(acc, 'investor_price_ratio'))
|
||
self.loss_value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'loss_value_created'))
|
||
self.loss_value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'loss_value_destroyed'))
|
||
self.lower_price_band: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'lower_price_band'))
|
||
self.mvrv: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'mvrv'))
|
||
self.neg_realized_loss: CumulativeSumPattern2[Dollars] = CumulativeSumPattern2(client, _m(acc, 'neg_realized_loss'))
|
||
self.net_realized_pnl: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'net_realized_pnl'))
|
||
self.net_realized_pnl_7d_ema: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'net_realized_pnl_7d_ema'))
|
||
self.net_realized_pnl_cumulative_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta'))
|
||
self.net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_market_cap'))
|
||
self.net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap'))
|
||
self.net_realized_pnl_rel_to_realized_cap: CumulativeSumPattern[StoredF32] = CumulativeSumPattern(client, _m(acc, 'net_realized_pnl_rel_to_realized_cap'))
|
||
self.peak_regret: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'realized_peak_regret'))
|
||
self.peak_regret_rel_to_realized_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'peak_regret_rel_to_realized_cap'))
|
||
self.profit_flow: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'profit_flow'))
|
||
self.profit_value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'profit_value_created'))
|
||
self.profit_value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'profit_value_destroyed'))
|
||
self.realized_cap: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_cap'))
|
||
self.realized_cap_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_cap_30d_delta'))
|
||
self.realized_cap_cents: MetricPattern1[CentsUnsigned] = MetricPattern1(client, _m(acc, 'realized_cap_cents'))
|
||
self.realized_cap_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'realized_cap_rel_to_own_market_cap'))
|
||
self.realized_loss: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'realized_loss'))
|
||
self.realized_loss_7d_ema: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_loss_7d_ema'))
|
||
self.realized_loss_rel_to_realized_cap: CumulativeSumPattern[StoredF32] = CumulativeSumPattern(client, _m(acc, 'realized_loss_rel_to_realized_cap'))
|
||
self.realized_price: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'realized_price'))
|
||
self.realized_price_extra: RatioPattern = RatioPattern(client, _m(acc, 'realized_price_ratio'))
|
||
self.realized_profit: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'realized_profit'))
|
||
self.realized_profit_7d_ema: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_profit_7d_ema'))
|
||
self.realized_profit_rel_to_realized_cap: CumulativeSumPattern[StoredF32] = CumulativeSumPattern(client, _m(acc, 'realized_profit_rel_to_realized_cap'))
|
||
self.realized_profit_to_loss_ratio: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'realized_profit_to_loss_ratio'))
|
||
self.realized_value: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_value'))
|
||
self.sell_side_risk_ratio: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio'))
|
||
self.sell_side_risk_ratio_30d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_30d_ema'))
|
||
self.sell_side_risk_ratio_7d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_7d_ema'))
|
||
self.sent_in_loss: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, _m(acc, 'sent_in_loss'))
|
||
self.sent_in_loss_14d_ema: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _m(acc, 'sent_in_loss_14d_ema'))
|
||
self.sent_in_profit: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, _m(acc, 'sent_in_profit'))
|
||
self.sent_in_profit_14d_ema: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _m(acc, 'sent_in_profit_14d_ema'))
|
||
self.sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr'))
|
||
self.sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_30d_ema'))
|
||
self.sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_7d_ema'))
|
||
self.total_realized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_realized_pnl'))
|
||
self.upper_price_band: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'upper_price_band'))
|
||
self.value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_created'))
|
||
self.value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_destroyed'))
|
||
|
||
class CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.cap_raw: MetricPattern11[CentsSats] = MetricPattern11(client, _m(acc, 'cap_raw'))
|
||
self.capitulation_flow: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'capitulation_flow'))
|
||
self.investor_cap_raw: MetricPattern11[CentsSquaredSats] = MetricPattern11(client, _m(acc, 'investor_cap_raw'))
|
||
self.investor_price: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'investor_price'))
|
||
self.investor_price_cents: MetricPattern1[CentsUnsigned] = MetricPattern1(client, _m(acc, 'investor_price_cents'))
|
||
self.investor_price_extra: RatioPattern2 = RatioPattern2(client, _m(acc, 'investor_price_ratio'))
|
||
self.loss_value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'loss_value_created'))
|
||
self.loss_value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'loss_value_destroyed'))
|
||
self.lower_price_band: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'lower_price_band'))
|
||
self.mvrv: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'mvrv'))
|
||
self.neg_realized_loss: CumulativeSumPattern2[Dollars] = CumulativeSumPattern2(client, _m(acc, 'neg_realized_loss'))
|
||
self.net_realized_pnl: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'net_realized_pnl'))
|
||
self.net_realized_pnl_7d_ema: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'net_realized_pnl_7d_ema'))
|
||
self.net_realized_pnl_cumulative_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta'))
|
||
self.net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_market_cap'))
|
||
self.net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap'))
|
||
self.net_realized_pnl_rel_to_realized_cap: CumulativeSumPattern[StoredF32] = CumulativeSumPattern(client, _m(acc, 'net_realized_pnl_rel_to_realized_cap'))
|
||
self.peak_regret: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'realized_peak_regret'))
|
||
self.peak_regret_rel_to_realized_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'peak_regret_rel_to_realized_cap'))
|
||
self.profit_flow: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'profit_flow'))
|
||
self.profit_value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'profit_value_created'))
|
||
self.profit_value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'profit_value_destroyed'))
|
||
self.realized_cap: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_cap'))
|
||
self.realized_cap_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_cap_30d_delta'))
|
||
self.realized_cap_cents: MetricPattern1[CentsUnsigned] = MetricPattern1(client, _m(acc, 'realized_cap_cents'))
|
||
self.realized_loss: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'realized_loss'))
|
||
self.realized_loss_7d_ema: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_loss_7d_ema'))
|
||
self.realized_loss_rel_to_realized_cap: CumulativeSumPattern[StoredF32] = CumulativeSumPattern(client, _m(acc, 'realized_loss_rel_to_realized_cap'))
|
||
self.realized_price: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'realized_price'))
|
||
self.realized_price_extra: RatioPattern2 = RatioPattern2(client, _m(acc, 'realized_price_ratio'))
|
||
self.realized_profit: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'realized_profit'))
|
||
self.realized_profit_7d_ema: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_profit_7d_ema'))
|
||
self.realized_profit_rel_to_realized_cap: CumulativeSumPattern[StoredF32] = CumulativeSumPattern(client, _m(acc, 'realized_profit_rel_to_realized_cap'))
|
||
self.realized_value: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_value'))
|
||
self.sell_side_risk_ratio: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio'))
|
||
self.sell_side_risk_ratio_30d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_30d_ema'))
|
||
self.sell_side_risk_ratio_7d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_7d_ema'))
|
||
self.sent_in_loss: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, _m(acc, 'sent_in_loss'))
|
||
self.sent_in_loss_14d_ema: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _m(acc, 'sent_in_loss_14d_ema'))
|
||
self.sent_in_profit: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, _m(acc, 'sent_in_profit'))
|
||
self.sent_in_profit_14d_ema: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _m(acc, 'sent_in_profit_14d_ema'))
|
||
self.sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr'))
|
||
self.sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_30d_ema'))
|
||
self.sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_7d_ema'))
|
||
self.total_realized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_realized_pnl'))
|
||
self.upper_price_band: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'upper_price_band'))
|
||
self.value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_created'))
|
||
self.value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_destroyed'))
|
||
|
||
class _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self._0sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, '0sd_usd'))
|
||
self.m0_5sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'm0_5sd'))
|
||
self.m0_5sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'm0_5sd_usd'))
|
||
self.m1_5sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'm1_5sd'))
|
||
self.m1_5sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'm1_5sd_usd'))
|
||
self.m1sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'm1sd'))
|
||
self.m1sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'm1sd_usd'))
|
||
self.m2_5sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'm2_5sd'))
|
||
self.m2_5sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'm2_5sd_usd'))
|
||
self.m2sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'm2sd'))
|
||
self.m2sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'm2sd_usd'))
|
||
self.m3sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'm3sd'))
|
||
self.m3sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'm3sd_usd'))
|
||
self.p0_5sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'p0_5sd'))
|
||
self.p0_5sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'p0_5sd_usd'))
|
||
self.p1_5sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'p1_5sd'))
|
||
self.p1_5sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'p1_5sd_usd'))
|
||
self.p1sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'p1sd'))
|
||
self.p1sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'p1sd_usd'))
|
||
self.p2_5sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'p2_5sd'))
|
||
self.p2_5sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'p2_5sd_usd'))
|
||
self.p2sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'p2sd'))
|
||
self.p2sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'p2sd_usd'))
|
||
self.p3sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'p3sd'))
|
||
self.p3sd_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'p3sd_usd'))
|
||
self.sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'sd'))
|
||
self.sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'sma'))
|
||
self.zscore: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'zscore'))
|
||
|
||
class InvestedNegNetNuplSupplyUnrealizedPattern4:
|
||
"""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_pct: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'invested_capital_in_loss_pct'))
|
||
self.invested_capital_in_profit_pct: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'invested_capital_in_profit_pct'))
|
||
self.neg_unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_market_cap'))
|
||
self.neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_market_cap'))
|
||
self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_total_unrealized_pnl'))
|
||
self.net_unrealized_pnl_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_market_cap'))
|
||
self.net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap'))
|
||
self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_total_unrealized_pnl'))
|
||
self.nupl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'nupl'))
|
||
self.supply_in_loss_rel_to_circulating_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply'))
|
||
self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply'))
|
||
self.supply_in_profit_rel_to_circulating_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply'))
|
||
self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply'))
|
||
self.supply_rel_to_circulating_supply: MetricPattern4[StoredF64] = MetricPattern4(client, _m(acc, 'supply_rel_to_circulating_supply'))
|
||
self.unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_market_cap'))
|
||
self.unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap'))
|
||
self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_total_unrealized_pnl'))
|
||
self.unrealized_peak_regret_rel_to_market_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'unrealized_peak_regret_rel_to_market_cap'))
|
||
self.unrealized_profit_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_market_cap'))
|
||
self.unrealized_profit_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap'))
|
||
self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_total_unrealized_pnl'))
|
||
|
||
class PriceRatioPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.price: DollarsSatsPattern2 = DollarsSatsPattern2(client, acc)
|
||
self.ratio: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio'))
|
||
self.ratio_1m_sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_1m_sma'))
|
||
self.ratio_1w_sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_1w_sma'))
|
||
self.ratio_1y_sd: _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern = _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern(client, _m(acc, 'ratio_1y'))
|
||
self.ratio_2y_sd: _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern = _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern(client, _m(acc, 'ratio_2y'))
|
||
self.ratio_4y_sd: _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern = _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern(client, _m(acc, 'ratio_4y'))
|
||
self.ratio_pct1: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_pct1'))
|
||
self.ratio_pct1_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'ratio_pct1_usd'))
|
||
self.ratio_pct2: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_pct2'))
|
||
self.ratio_pct2_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'ratio_pct2_usd'))
|
||
self.ratio_pct5: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_pct5'))
|
||
self.ratio_pct5_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'ratio_pct5_usd'))
|
||
self.ratio_pct95: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_pct95'))
|
||
self.ratio_pct95_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'ratio_pct95_usd'))
|
||
self.ratio_pct98: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_pct98'))
|
||
self.ratio_pct98_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'ratio_pct98_usd'))
|
||
self.ratio_pct99: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_pct99'))
|
||
self.ratio_pct99_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'ratio_pct99_usd'))
|
||
self.ratio_sd: _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern = _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern(client, _m(acc, 'ratio'))
|
||
|
||
class Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.pct05: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct05'))
|
||
self.pct10: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct10'))
|
||
self.pct15: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct15'))
|
||
self.pct20: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct20'))
|
||
self.pct25: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct25'))
|
||
self.pct30: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct30'))
|
||
self.pct35: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct35'))
|
||
self.pct40: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct40'))
|
||
self.pct45: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct45'))
|
||
self.pct50: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct50'))
|
||
self.pct55: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct55'))
|
||
self.pct60: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct60'))
|
||
self.pct65: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct65'))
|
||
self.pct70: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct70'))
|
||
self.pct75: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct75'))
|
||
self.pct80: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct80'))
|
||
self.pct85: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct85'))
|
||
self.pct90: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct90'))
|
||
self.pct95: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct95'))
|
||
|
||
class RatioPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.ratio: MetricPattern4[StoredF32] = MetricPattern4(client, acc)
|
||
self.ratio_1m_sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, '1m_sma'))
|
||
self.ratio_1w_sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, '1w_sma'))
|
||
self.ratio_1y_sd: _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern = _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern(client, _m(acc, '1y'))
|
||
self.ratio_2y_sd: _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern = _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern(client, _m(acc, '2y'))
|
||
self.ratio_4y_sd: _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern = _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern(client, _m(acc, '4y'))
|
||
self.ratio_pct1: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'pct1'))
|
||
self.ratio_pct1_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct1_usd'))
|
||
self.ratio_pct2: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'pct2'))
|
||
self.ratio_pct2_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct2_usd'))
|
||
self.ratio_pct5: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'pct5'))
|
||
self.ratio_pct5_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct5_usd'))
|
||
self.ratio_pct95: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'pct95'))
|
||
self.ratio_pct95_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct95_usd'))
|
||
self.ratio_pct98: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'pct98'))
|
||
self.ratio_pct98_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct98_usd'))
|
||
self.ratio_pct99: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'pct99'))
|
||
self.ratio_pct99_usd: DollarsSatsPattern2 = DollarsSatsPattern2(client, _m(acc, 'pct99_usd'))
|
||
self.ratio_sd: _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern = _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdSmaZscorePattern(client, acc)
|
||
|
||
class GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.greed_index: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'greed_index'))
|
||
self.invested_capital_in_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'invested_capital_in_loss'))
|
||
self.invested_capital_in_loss_raw: MetricPattern11[CentsSats] = MetricPattern11(client, _m(acc, 'invested_capital_in_loss_raw'))
|
||
self.invested_capital_in_profit: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'invested_capital_in_profit'))
|
||
self.invested_capital_in_profit_raw: MetricPattern11[CentsSats] = MetricPattern11(client, _m(acc, 'invested_capital_in_profit_raw'))
|
||
self.investor_cap_in_loss_raw: MetricPattern11[CentsSquaredSats] = MetricPattern11(client, _m(acc, 'investor_cap_in_loss_raw'))
|
||
self.investor_cap_in_profit_raw: MetricPattern11[CentsSquaredSats] = MetricPattern11(client, _m(acc, 'investor_cap_in_profit_raw'))
|
||
self.neg_unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss'))
|
||
self.net_sentiment: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'net_sentiment'))
|
||
self.net_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl'))
|
||
self.pain_index: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'pain_index'))
|
||
self.peak_regret: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'unrealized_peak_regret'))
|
||
self.supply_in_loss: BitcoinDollarsSatsPattern4 = BitcoinDollarsSatsPattern4(client, _m(acc, 'supply_in_loss'))
|
||
self.supply_in_profit: BitcoinDollarsSatsPattern4 = BitcoinDollarsSatsPattern4(client, _m(acc, 'supply_in_profit'))
|
||
self.total_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_unrealized_pnl'))
|
||
self.unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_loss'))
|
||
self.unrealized_profit: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_profit'))
|
||
|
||
class GreedInvestedInvestorNegNetPainSupplyTotalUnrealizedPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.greed_index: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'greed_index'))
|
||
self.invested_capital_in_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'invested_capital_in_loss'))
|
||
self.invested_capital_in_loss_raw: MetricPattern11[CentsSats] = MetricPattern11(client, _m(acc, 'invested_capital_in_loss_raw'))
|
||
self.invested_capital_in_profit: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'invested_capital_in_profit'))
|
||
self.invested_capital_in_profit_raw: MetricPattern11[CentsSats] = MetricPattern11(client, _m(acc, 'invested_capital_in_profit_raw'))
|
||
self.investor_cap_in_loss_raw: MetricPattern11[CentsSquaredSats] = MetricPattern11(client, _m(acc, 'investor_cap_in_loss_raw'))
|
||
self.investor_cap_in_profit_raw: MetricPattern11[CentsSquaredSats] = MetricPattern11(client, _m(acc, 'investor_cap_in_profit_raw'))
|
||
self.neg_unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss'))
|
||
self.net_sentiment: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'net_sentiment'))
|
||
self.net_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl'))
|
||
self.pain_index: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'pain_index'))
|
||
self.supply_in_loss: BitcoinDollarsSatsPattern4 = BitcoinDollarsSatsPattern4(client, _m(acc, 'supply_in_loss'))
|
||
self.supply_in_profit: BitcoinDollarsSatsPattern4 = BitcoinDollarsSatsPattern4(client, _m(acc, 'supply_in_profit'))
|
||
self.total_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_unrealized_pnl'))
|
||
self.unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_loss'))
|
||
self.unrealized_profit: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_profit'))
|
||
|
||
class _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self._1m_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1(client, _m(acc, '1m_blocks_mined'))
|
||
self._1m_dominance: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, '1m_dominance'))
|
||
self._1w_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1(client, _m(acc, '1w_blocks_mined'))
|
||
self._1w_dominance: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, '1w_dominance'))
|
||
self._1y_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1(client, _m(acc, '1y_blocks_mined'))
|
||
self._1y_dominance: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, '1y_dominance'))
|
||
self._24h_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1(client, _m(acc, '24h_blocks_mined'))
|
||
self._24h_dominance: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, '24h_dominance'))
|
||
self.blocks_mined: CumulativeSumPattern[StoredU32] = CumulativeSumPattern(client, _m(acc, 'blocks_mined'))
|
||
self.blocks_since_block: MetricPattern1[StoredU32] = MetricPattern1(client, _m(acc, 'blocks_since_block'))
|
||
self.coinbase: BitcoinDollarsSatsPattern6 = BitcoinDollarsSatsPattern6(client, _m(acc, 'coinbase'))
|
||
self.days_since_block: MetricPattern4[StoredU16] = MetricPattern4(client, _m(acc, 'days_since_block'))
|
||
self.dominance: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'dominance'))
|
||
self.fee: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, _m(acc, 'fee'))
|
||
self.subsidy: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, _m(acc, 'subsidy'))
|
||
|
||
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_pct: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'invested_capital_in_loss_pct'))
|
||
self.invested_capital_in_profit_pct: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'invested_capital_in_profit_pct'))
|
||
self.neg_unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_market_cap'))
|
||
self.net_unrealized_pnl_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(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: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply'))
|
||
self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply'))
|
||
self.supply_in_profit_rel_to_circulating_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply'))
|
||
self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply'))
|
||
self.supply_rel_to_circulating_supply: MetricPattern4[StoredF64] = MetricPattern4(client, _m(acc, 'supply_rel_to_circulating_supply'))
|
||
self.unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_market_cap'))
|
||
self.unrealized_peak_regret_rel_to_market_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'unrealized_peak_regret_rel_to_market_cap'))
|
||
self.unrealized_profit_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_market_cap'))
|
||
|
||
class _10y1m1w1y2y3m3y4y5y6m6y8yPattern3:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self._10y: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _p('10y', acc))
|
||
self._1m: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _p('1m', acc))
|
||
self._1w: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _p('1w', acc))
|
||
self._1y: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _p('1y', acc))
|
||
self._2y: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _p('2y', acc))
|
||
self._3m: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _p('3m', acc))
|
||
self._3y: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _p('3y', acc))
|
||
self._4y: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _p('4y', acc))
|
||
self._5y: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _p('5y', acc))
|
||
self._6m: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _p('6m', acc))
|
||
self._6y: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _p('6y', acc))
|
||
self._8y: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _p('8y', acc))
|
||
|
||
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_pct: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'invested_capital_in_loss_pct'))
|
||
self.invested_capital_in_profit_pct: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'invested_capital_in_profit_pct'))
|
||
self.neg_unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_market_cap'))
|
||
self.net_unrealized_pnl_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(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: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply'))
|
||
self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply'))
|
||
self.supply_in_profit_rel_to_circulating_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply'))
|
||
self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply'))
|
||
self.supply_rel_to_circulating_supply: MetricPattern4[StoredF64] = MetricPattern4(client, _m(acc, 'supply_rel_to_circulating_supply'))
|
||
self.unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_market_cap'))
|
||
self.unrealized_profit_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_market_cap'))
|
||
|
||
class InvestedNegNetSupplyUnrealizedPattern:
|
||
"""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_pct: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'invested_capital_in_loss_pct'))
|
||
self.invested_capital_in_profit_pct: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'invested_capital_in_profit_pct'))
|
||
self.neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_market_cap'))
|
||
self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_total_unrealized_pnl'))
|
||
self.net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap'))
|
||
self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_total_unrealized_pnl'))
|
||
self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply'))
|
||
self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply'))
|
||
self.unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap'))
|
||
self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_total_unrealized_pnl'))
|
||
self.unrealized_profit_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap'))
|
||
self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_total_unrealized_pnl'))
|
||
|
||
class _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(Generic[T]):
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self._10y: MetricPattern4[T] = MetricPattern4(client, _p('10y', acc))
|
||
self._1m: MetricPattern4[T] = MetricPattern4(client, _p('1m', acc))
|
||
self._1w: MetricPattern4[T] = MetricPattern4(client, _p('1w', acc))
|
||
self._1y: MetricPattern4[T] = MetricPattern4(client, _p('1y', acc))
|
||
self._2y: MetricPattern4[T] = MetricPattern4(client, _p('2y', acc))
|
||
self._3m: MetricPattern4[T] = MetricPattern4(client, _p('3m', acc))
|
||
self._3y: MetricPattern4[T] = MetricPattern4(client, _p('3y', acc))
|
||
self._4y: MetricPattern4[T] = MetricPattern4(client, _p('4y', acc))
|
||
self._5y: MetricPattern4[T] = MetricPattern4(client, _p('5y', acc))
|
||
self._6m: MetricPattern4[T] = MetricPattern4(client, _p('6m', acc))
|
||
self._6y: MetricPattern4[T] = MetricPattern4(client, _p('6y', acc))
|
||
self._8y: MetricPattern4[T] = MetricPattern4(client, _p('8y', acc))
|
||
|
||
class _201520162017201820192020202120222023202420252026Pattern2(Generic[T]):
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self._2015: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2015_returns'))
|
||
self._2016: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2016_returns'))
|
||
self._2017: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2017_returns'))
|
||
self._2018: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2018_returns'))
|
||
self._2019: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2019_returns'))
|
||
self._2020: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2020_returns'))
|
||
self._2021: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2021_returns'))
|
||
self._2022: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2022_returns'))
|
||
self._2023: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2023_returns'))
|
||
self._2024: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2024_returns'))
|
||
self._2025: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2025_returns'))
|
||
self._2026: MetricPattern4[T] = MetricPattern4(client, _m(acc, '2026_returns'))
|
||
|
||
class AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.average: MetricPattern2[Bitcoin] = MetricPattern2(client, _m(acc, 'average'))
|
||
self.base: MetricPattern11[Bitcoin] = MetricPattern11(client, acc)
|
||
self.cumulative: MetricPattern2[Bitcoin] = MetricPattern2(client, _m(acc, 'cumulative'))
|
||
self.max: MetricPattern2[Bitcoin] = MetricPattern2(client, _m(acc, 'max'))
|
||
self.median: MetricPattern6[Bitcoin] = MetricPattern6(client, _m(acc, 'median'))
|
||
self.min: MetricPattern2[Bitcoin] = MetricPattern2(client, _m(acc, 'min'))
|
||
self.pct10: MetricPattern6[Bitcoin] = MetricPattern6(client, _m(acc, 'pct10'))
|
||
self.pct25: MetricPattern6[Bitcoin] = MetricPattern6(client, _m(acc, 'pct25'))
|
||
self.pct75: MetricPattern6[Bitcoin] = MetricPattern6(client, _m(acc, 'pct75'))
|
||
self.pct90: MetricPattern6[Bitcoin] = MetricPattern6(client, _m(acc, 'pct90'))
|
||
self.sum: MetricPattern2[Bitcoin] = MetricPattern2(client, _m(acc, 'sum'))
|
||
|
||
class AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(Generic[T]):
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.average: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'average'))
|
||
self.base: MetricPattern11[T] = MetricPattern11(client, acc)
|
||
self.cumulative: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'cumulative'))
|
||
self.max: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'max'))
|
||
self.median: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'median'))
|
||
self.min: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'min'))
|
||
self.pct10: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct10'))
|
||
self.pct25: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct25'))
|
||
self.pct75: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct75'))
|
||
self.pct90: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct90'))
|
||
self.sum: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'sum'))
|
||
|
||
class AverageCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(Generic[T]):
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.average: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'average'))
|
||
self.cumulative: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'cumulative'))
|
||
self.max: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'max'))
|
||
self.median: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'median'))
|
||
self.min: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'min'))
|
||
self.pct10: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct10'))
|
||
self.pct25: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct25'))
|
||
self.pct75: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct75'))
|
||
self.pct90: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct90'))
|
||
self.sum: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'sum'))
|
||
|
||
class ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.activity: CoinblocksCoindaysSatblocksSatdaysSentPattern = CoinblocksCoindaysSatblocksSatdaysSentPattern(client, acc)
|
||
self.addr_count: MetricPattern1[StoredU64] = MetricPattern1(client, _m(acc, 'addr_count'))
|
||
self.addr_count_30d_change: MetricPattern4[StoredF64] = MetricPattern4(client, _m(acc, 'addr_count_30d_change'))
|
||
self.cost_basis: MaxMinPattern = MaxMinPattern(client, acc)
|
||
self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count'))
|
||
self.realized: CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern = CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern(client, acc)
|
||
self.relative: InvestedNegNetNuplSupplyUnrealizedPattern = InvestedNegNetNuplSupplyUnrealizedPattern(client, acc)
|
||
self.supply: _30dHalvedTotalPattern = _30dHalvedTotalPattern(client, acc)
|
||
self.unrealized: GreedInvestedInvestorNegNetPainSupplyTotalUnrealizedPattern = GreedInvestedInvestorNegNetPainSupplyTotalUnrealizedPattern(client, acc)
|
||
|
||
class AllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.all: _30dCountPattern = _30dCountPattern(client, acc)
|
||
self.p2a: _30dCountPattern = _30dCountPattern(client, _p('p2a', acc))
|
||
self.p2pk33: _30dCountPattern = _30dCountPattern(client, _p('p2pk33', acc))
|
||
self.p2pk65: _30dCountPattern = _30dCountPattern(client, _p('p2pk65', acc))
|
||
self.p2pkh: _30dCountPattern = _30dCountPattern(client, _p('p2pkh', acc))
|
||
self.p2sh: _30dCountPattern = _30dCountPattern(client, _p('p2sh', acc))
|
||
self.p2tr: _30dCountPattern = _30dCountPattern(client, _p('p2tr', acc))
|
||
self.p2wpkh: _30dCountPattern = _30dCountPattern(client, _p('p2wpkh', acc))
|
||
self.p2wsh: _30dCountPattern = _30dCountPattern(client, _p('p2wsh', acc))
|
||
|
||
class AverageMaxMedianMinPct10Pct25Pct75Pct90TxindexPattern(Generic[T]):
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.average: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'average'))
|
||
self.max: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'max'))
|
||
self.median: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'median'))
|
||
self.min: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'min'))
|
||
self.pct10: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct10'))
|
||
self.pct25: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct25'))
|
||
self.pct75: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct75'))
|
||
self.pct90: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct90'))
|
||
self.txindex: MetricPattern27[T] = MetricPattern27(client, acc)
|
||
|
||
class AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(Generic[T]):
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.average: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'average'))
|
||
self.base: MetricPattern11[T] = MetricPattern11(client, acc)
|
||
self.max: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'max'))
|
||
self.median: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'median'))
|
||
self.min: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'min'))
|
||
self.pct10: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct10'))
|
||
self.pct25: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct25'))
|
||
self.pct75: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct75'))
|
||
self.pct90: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct90'))
|
||
|
||
class _10y2y3y4y5y6y8yPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self._10y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('10y', acc))
|
||
self._2y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('2y', acc))
|
||
self._3y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('3y', acc))
|
||
self._4y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('4y', acc))
|
||
self._5y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('5y', acc))
|
||
self._6y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('6y', acc))
|
||
self._8y: MetricPattern4[StoredF32] = MetricPattern4(client, _p('8y', acc))
|
||
|
||
class ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.activity: CoinblocksCoindaysSatblocksSatdaysSentPattern = CoinblocksCoindaysSatblocksSatdaysSentPattern(client, acc)
|
||
self.cost_basis: InvestedMaxMinPercentilesSpotPattern = InvestedMaxMinPercentilesSpotPattern(client, acc)
|
||
self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count'))
|
||
self.realized: CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern2 = CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern2(client, acc)
|
||
self.relative: InvestedNegNetSupplyUnrealizedPattern = InvestedNegNetSupplyUnrealizedPattern(client, acc)
|
||
self.supply: _30dHalvedTotalPattern = _30dHalvedTotalPattern(client, acc)
|
||
self.unrealized: GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern = GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern(client, acc)
|
||
|
||
class ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.activity: CoinblocksCoindaysSatblocksSatdaysSentPattern = CoinblocksCoindaysSatblocksSatdaysSentPattern(client, acc)
|
||
self.cost_basis: MaxMinPattern = MaxMinPattern(client, acc)
|
||
self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count'))
|
||
self.realized: AdjustedCapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern2 = AdjustedCapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern2(client, acc)
|
||
self.relative: InvestedNegNetNuplSupplyUnrealizedPattern3 = InvestedNegNetNuplSupplyUnrealizedPattern3(client, acc)
|
||
self.supply: _30dHalvedTotalPattern = _30dHalvedTotalPattern(client, acc)
|
||
self.unrealized: GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern = GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern(client, acc)
|
||
|
||
class ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.activity: CoinblocksCoindaysSatblocksSatdaysSentPattern = CoinblocksCoindaysSatblocksSatdaysSentPattern(client, acc)
|
||
self.cost_basis: MaxMinPattern = MaxMinPattern(client, acc)
|
||
self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count'))
|
||
self.realized: CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern = CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern(client, acc)
|
||
self.relative: InvestedNegNetNuplSupplyUnrealizedPattern = InvestedNegNetNuplSupplyUnrealizedPattern(client, acc)
|
||
self.supply: _30dHalvedTotalPattern = _30dHalvedTotalPattern(client, acc)
|
||
self.unrealized: GreedInvestedInvestorNegNetPainSupplyTotalUnrealizedPattern = GreedInvestedInvestorNegNetPainSupplyTotalUnrealizedPattern(client, acc)
|
||
|
||
class ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.activity: CoinblocksCoindaysSatblocksSatdaysSentPattern = CoinblocksCoindaysSatblocksSatdaysSentPattern(client, acc)
|
||
self.cost_basis: MaxMinPattern = MaxMinPattern(client, acc)
|
||
self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count'))
|
||
self.realized: CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern = CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern(client, acc)
|
||
self.relative: InvestedNegNetNuplSupplyUnrealizedPattern3 = InvestedNegNetNuplSupplyUnrealizedPattern3(client, acc)
|
||
self.supply: _30dHalvedTotalPattern = _30dHalvedTotalPattern(client, acc)
|
||
self.unrealized: GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern = GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern(client, acc)
|
||
|
||
class ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.activity: CoinblocksCoindaysSatblocksSatdaysSentPattern = CoinblocksCoindaysSatblocksSatdaysSentPattern(client, acc)
|
||
self.cost_basis: MaxMinPattern = MaxMinPattern(client, acc)
|
||
self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count'))
|
||
self.realized: CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern = CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern(client, acc)
|
||
self.relative: InvestedSupplyPattern = InvestedSupplyPattern(client, acc)
|
||
self.supply: _30dHalvedTotalPattern = _30dHalvedTotalPattern(client, acc)
|
||
self.unrealized: GreedInvestedInvestorNegNetPainSupplyTotalUnrealizedPattern = GreedInvestedInvestorNegNetPainSupplyTotalUnrealizedPattern(client, acc)
|
||
|
||
class ActivityCostOutputsRealizedSupplyUnrealizedPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.activity: CoinblocksCoindaysSatblocksSatdaysSentPattern = CoinblocksCoindaysSatblocksSatdaysSentPattern(client, acc)
|
||
self.cost_basis: MaxMinPattern = MaxMinPattern(client, acc)
|
||
self.outputs: UtxoPattern = UtxoPattern(client, _m(acc, 'utxo_count'))
|
||
self.realized: CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern = CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern(client, acc)
|
||
self.supply: _30dHalvedTotalPattern = _30dHalvedTotalPattern(client, acc)
|
||
self.unrealized: GreedInvestedInvestorNegNetPainSupplyTotalUnrealizedPattern = GreedInvestedInvestorNegNetPainSupplyTotalUnrealizedPattern(client, acc)
|
||
|
||
class BalanceBothReactivatedReceivingSendingPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.balance_decreased: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredU32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'balance_decreased'))
|
||
self.balance_increased: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredU32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'balance_increased'))
|
||
self.both: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredU32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'both'))
|
||
self.reactivated: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredU32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'reactivated'))
|
||
self.receiving: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredU32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'receiving'))
|
||
self.sending: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredU32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, 'sending'))
|
||
|
||
class CoinblocksCoindaysSatblocksSatdaysSentPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.coinblocks_destroyed: CumulativeSumPattern[StoredF64] = CumulativeSumPattern(client, _m(acc, 'coinblocks_destroyed'))
|
||
self.coindays_destroyed: CumulativeSumPattern[StoredF64] = CumulativeSumPattern(client, _m(acc, 'coindays_destroyed'))
|
||
self.satblocks_destroyed: MetricPattern11[Sats] = MetricPattern11(client, _m(acc, 'satblocks_destroyed'))
|
||
self.satdays_destroyed: MetricPattern11[Sats] = MetricPattern11(client, _m(acc, 'satdays_destroyed'))
|
||
self.sent: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, _m(acc, 'sent'))
|
||
self.sent_14d_ema: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _m(acc, 'sent_14d_ema'))
|
||
|
||
class InvestedMaxMinPercentilesSpotPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.invested_capital: Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern = Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern(client, _m(acc, 'invested_capital'))
|
||
self.max: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'max_cost_basis'))
|
||
self.min: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'min_cost_basis'))
|
||
self.percentiles: Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern = Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern(client, _m(acc, 'cost_basis'))
|
||
self.spot_cost_basis_percentile: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'spot_cost_basis_percentile'))
|
||
self.spot_invested_capital_percentile: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'spot_invested_capital_percentile'))
|
||
|
||
class InvestedSupplyPattern:
|
||
"""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_pct: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'invested_capital_in_loss_pct'))
|
||
self.invested_capital_in_profit_pct: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'invested_capital_in_profit_pct'))
|
||
self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply'))
|
||
self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply'))
|
||
|
||
class CloseHighLowOpenPattern2(Generic[T]):
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.close: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'close'))
|
||
self.high: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'high'))
|
||
self.low: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'low'))
|
||
self.open: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'open'))
|
||
|
||
class _30dHalvedTotalPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self._30d_change: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, _m(acc, '_30d_change'))
|
||
self.halved: BitcoinDollarsSatsPattern4 = BitcoinDollarsSatsPattern4(client, _m(acc, 'supply_halved'))
|
||
self.total: BitcoinDollarsSatsPattern4 = BitcoinDollarsSatsPattern4(client, _m(acc, 'supply'))
|
||
|
||
class BaseCumulativeSumPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.base: MetricPattern11[StoredF32] = MetricPattern11(client, acc)
|
||
self.cumulative: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, 'cumulative'))
|
||
self.sum: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, 'sum'))
|
||
|
||
class BitcoinDollarsSatsPattern2:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.bitcoin: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, _m(acc, 'btc'))
|
||
self.dollars: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[Dollars] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, _m(acc, 'usd'))
|
||
self.sats: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[Sats] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, acc)
|
||
|
||
class BitcoinDollarsSatsPattern4:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.bitcoin: MetricPattern1[Bitcoin] = MetricPattern1(client, _m(acc, 'btc'))
|
||
self.dollars: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'usd'))
|
||
self.sats: MetricPattern1[Sats] = MetricPattern1(client, acc)
|
||
|
||
class BitcoinDollarsSatsPattern5:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.bitcoin: MetricPattern4[Bitcoin] = MetricPattern4(client, _m(acc, 'btc'))
|
||
self.dollars: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'usd'))
|
||
self.sats: MetricPattern4[Sats] = MetricPattern4(client, acc)
|
||
|
||
class BitcoinDollarsSatsPattern6:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.bitcoin: CumulativeSumPattern[Bitcoin] = CumulativeSumPattern(client, _m(acc, 'btc'))
|
||
self.dollars: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'usd'))
|
||
self.sats: CumulativeSumPattern[Sats] = CumulativeSumPattern(client, acc)
|
||
|
||
class BitcoinDollarsSatsPattern3:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.bitcoin: CumulativeSumPattern2[Bitcoin] = CumulativeSumPattern2(client, _m(acc, 'btc'))
|
||
self.dollars: CumulativeSumPattern[Dollars] = CumulativeSumPattern(client, _m(acc, 'usd'))
|
||
self.sats: CumulativeSumPattern[Sats] = CumulativeSumPattern(client, acc)
|
||
|
||
class _30dCountPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self._30d_change: MetricPattern4[StoredF64] = MetricPattern4(client, _m(acc, '30d_change'))
|
||
self.count: MetricPattern1[StoredU64] = MetricPattern1(client, acc)
|
||
|
||
class DollarsSatsPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.dollars: MetricPattern1[Dollars] = MetricPattern1(client, acc)
|
||
self.sats: MetricPattern1[SatsFract] = MetricPattern1(client, _m(acc, 'sats'))
|
||
|
||
class DollarsSatsPattern2:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.dollars: MetricPattern4[Dollars] = MetricPattern4(client, acc)
|
||
self.sats: MetricPattern4[SatsFract] = MetricPattern4(client, _m(acc, 'sats'))
|
||
|
||
class MaxMinPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.max: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'max_cost_basis'))
|
||
self.min: DollarsSatsPattern = DollarsSatsPattern(client, _m(acc, 'min_cost_basis'))
|
||
|
||
class SdSmaPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'sd'))
|
||
self.sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'sma'))
|
||
|
||
class UtxoPattern:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.utxo_count: MetricPattern1[StoredU64] = MetricPattern1(client, acc)
|
||
self.utxo_count_30d_change: MetricPattern4[StoredF64] = MetricPattern4(client, _m(acc, '30d_change'))
|
||
|
||
class CumulativeSumPattern(Generic[T]):
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.cumulative: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'cumulative'))
|
||
self.sum: MetricPattern1[T] = MetricPattern1(client, acc)
|
||
|
||
class CumulativeSumPattern2(Generic[T]):
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.cumulative: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'cumulative'))
|
||
self.sum: MetricPattern1[T] = MetricPattern1(client, acc)
|
||
|
||
class OhlcSplitPattern2(Generic[T]):
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.ohlc: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'ohlc_sats'))
|
||
self.split: CloseHighLowOpenPattern2[T] = CloseHighLowOpenPattern2(client, _m(acc, 'sats'))
|
||
|
||
class RatioPattern2:
|
||
"""Pattern struct for repeated tree structure."""
|
||
|
||
def __init__(self, client: BrkClientBase, acc: str):
|
||
"""Create pattern node with accumulated metric name."""
|
||
self.ratio: MetricPattern4[StoredF32] = MetricPattern4(client, acc)
|
||
|
||
# Metrics tree classes
|
||
|
||
class MetricsTree_Blocks_Difficulty:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.raw: MetricPattern1[StoredF64] = MetricPattern1(client, 'difficulty')
|
||
self.as_hash: MetricPattern1[StoredF32] = MetricPattern1(client, 'difficulty_as_hash')
|
||
self.adjustment: MetricPattern1[StoredF32] = MetricPattern1(client, 'difficulty_adjustment')
|
||
self.epoch: MetricPattern4[DifficultyEpoch] = MetricPattern4(client, 'difficultyepoch')
|
||
self.blocks_before_next_adjustment: MetricPattern1[StoredU32] = MetricPattern1(client, 'blocks_before_next_difficulty_adjustment')
|
||
self.days_before_next_adjustment: MetricPattern1[StoredF32] = MetricPattern1(client, 'days_before_next_difficulty_adjustment')
|
||
|
||
class MetricsTree_Blocks_Time:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.timestamp: MetricPattern1[Timestamp] = MetricPattern1(client, 'timestamp')
|
||
self.date: MetricPattern11[Date] = MetricPattern11(client, 'date')
|
||
self.timestamp_monotonic: MetricPattern11[Timestamp] = MetricPattern11(client, 'timestamp_monotonic')
|
||
|
||
class MetricsTree_Blocks_Count:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.block_count_target: MetricPattern4[StoredU64] = MetricPattern4(client, 'block_count_target')
|
||
self.block_count: CumulativeSumPattern[StoredU32] = CumulativeSumPattern(client, 'block_count')
|
||
self._24h_start: MetricPattern11[Height] = MetricPattern11(client, '24h_start')
|
||
self._1w_start: MetricPattern11[Height] = MetricPattern11(client, '1w_start')
|
||
self._1m_start: MetricPattern11[Height] = MetricPattern11(client, '1m_start')
|
||
self._1y_start: MetricPattern11[Height] = MetricPattern11(client, '1y_start')
|
||
self._24h_block_count: MetricPattern1[StoredU32] = MetricPattern1(client, '24h_block_count')
|
||
self._1w_block_count: MetricPattern1[StoredU32] = MetricPattern1(client, '1w_block_count')
|
||
self._1m_block_count: MetricPattern1[StoredU32] = MetricPattern1(client, '1m_block_count')
|
||
self._1y_block_count: MetricPattern1[StoredU32] = MetricPattern1(client, '1y_block_count')
|
||
|
||
class MetricsTree_Blocks_Mining:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.hash_rate: MetricPattern1[StoredF64] = MetricPattern1(client, 'hash_rate')
|
||
self.hash_rate_1w_sma: MetricPattern4[StoredF64] = MetricPattern4(client, 'hash_rate_1w_sma')
|
||
self.hash_rate_1m_sma: MetricPattern4[StoredF32] = MetricPattern4(client, 'hash_rate_1m_sma')
|
||
self.hash_rate_2m_sma: MetricPattern4[StoredF32] = MetricPattern4(client, 'hash_rate_2m_sma')
|
||
self.hash_rate_1y_sma: MetricPattern4[StoredF32] = MetricPattern4(client, 'hash_rate_1y_sma')
|
||
self.hash_rate_ath: MetricPattern1[StoredF64] = MetricPattern1(client, 'hash_rate_ath')
|
||
self.hash_rate_drawdown: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_rate_drawdown')
|
||
self.hash_price_ths: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_price_ths')
|
||
self.hash_price_ths_min: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_price_ths_min')
|
||
self.hash_price_phs: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_price_phs')
|
||
self.hash_price_phs_min: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_price_phs_min')
|
||
self.hash_price_rebound: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_price_rebound')
|
||
self.hash_value_ths: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_value_ths')
|
||
self.hash_value_ths_min: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_value_ths_min')
|
||
self.hash_value_phs: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_value_phs')
|
||
self.hash_value_phs_min: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_value_phs_min')
|
||
self.hash_value_rebound: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_value_rebound')
|
||
|
||
class MetricsTree_Blocks_Rewards_24hCoinbaseSum:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.sats: MetricPattern11[Sats] = MetricPattern11(client, '24h_coinbase_sum')
|
||
self.bitcoin: MetricPattern11[Bitcoin] = MetricPattern11(client, '24h_coinbase_sum_btc')
|
||
self.dollars: MetricPattern11[Dollars] = MetricPattern11(client, '24h_coinbase_sum_usd')
|
||
|
||
class MetricsTree_Blocks_Rewards:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._24h_coinbase_sum: MetricsTree_Blocks_Rewards_24hCoinbaseSum = MetricsTree_Blocks_Rewards_24hCoinbaseSum(client)
|
||
self.coinbase: BitcoinDollarsSatsPattern2 = BitcoinDollarsSatsPattern2(client, 'coinbase')
|
||
self.subsidy: BitcoinDollarsSatsPattern2 = BitcoinDollarsSatsPattern2(client, 'subsidy')
|
||
self.unclaimed_rewards: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, 'unclaimed_rewards')
|
||
self.fee_dominance: MetricPattern6[StoredF32] = MetricPattern6(client, 'fee_dominance')
|
||
self.subsidy_dominance: MetricPattern6[StoredF32] = MetricPattern6(client, 'subsidy_dominance')
|
||
self.subsidy_usd_1y_sma: MetricPattern4[Dollars] = MetricPattern4(client, 'subsidy_usd_1y_sma')
|
||
|
||
class MetricsTree_Blocks_Halving:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.epoch: MetricPattern4[HalvingEpoch] = MetricPattern4(client, 'halvingepoch')
|
||
self.blocks_before_next_halving: MetricPattern1[StoredU32] = MetricPattern1(client, 'blocks_before_next_halving')
|
||
self.days_before_next_halving: MetricPattern1[StoredF32] = MetricPattern1(client, 'days_before_next_halving')
|
||
|
||
class MetricsTree_Blocks_Size:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.cumulative: MetricPattern1[StoredU64] = MetricPattern1(client, 'block_size_cumulative')
|
||
self.average: MetricPattern2[StoredU64] = MetricPattern2(client, 'block_size_average')
|
||
self.min: MetricPattern2[StoredU64] = MetricPattern2(client, 'block_size_min')
|
||
self.max: MetricPattern2[StoredU64] = MetricPattern2(client, 'block_size_max')
|
||
self.pct10: MetricPattern6[StoredU64] = MetricPattern6(client, 'block_size_pct10')
|
||
self.pct25: MetricPattern6[StoredU64] = MetricPattern6(client, 'block_size_pct25')
|
||
self.median: MetricPattern6[StoredU64] = MetricPattern6(client, 'block_size_median')
|
||
self.pct75: MetricPattern6[StoredU64] = MetricPattern6(client, 'block_size_pct75')
|
||
self.pct90: MetricPattern6[StoredU64] = MetricPattern6(client, 'block_size_pct90')
|
||
self.sum: MetricPattern2[StoredU64] = MetricPattern2(client, 'block_size_sum')
|
||
|
||
class MetricsTree_Blocks:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.blockhash: MetricPattern11[BlockHash] = MetricPattern11(client, 'blockhash')
|
||
self.difficulty: MetricsTree_Blocks_Difficulty = MetricsTree_Blocks_Difficulty(client)
|
||
self.time: MetricsTree_Blocks_Time = MetricsTree_Blocks_Time(client)
|
||
self.total_size: MetricPattern11[StoredU64] = MetricPattern11(client, 'total_size')
|
||
self.weight: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[Weight] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'block_weight')
|
||
self.count: MetricsTree_Blocks_Count = MetricsTree_Blocks_Count(client)
|
||
self.interval: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[Timestamp] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, 'block_interval')
|
||
self.mining: MetricsTree_Blocks_Mining = MetricsTree_Blocks_Mining(client)
|
||
self.rewards: MetricsTree_Blocks_Rewards = MetricsTree_Blocks_Rewards(client)
|
||
self.halving: MetricsTree_Blocks_Halving = MetricsTree_Blocks_Halving(client)
|
||
self.vbytes: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'block_vbytes')
|
||
self.size: MetricsTree_Blocks_Size = MetricsTree_Blocks_Size(client)
|
||
self.fullness: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredF32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, 'block_fullness')
|
||
|
||
class MetricsTree_Transactions_Count:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.tx_count: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'tx_count')
|
||
self.is_coinbase: MetricPattern27[StoredBool] = MetricPattern27(client, 'is_coinbase')
|
||
|
||
class MetricsTree_Transactions_Size:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.vsize: AverageMaxMedianMinPct10Pct25Pct75Pct90TxindexPattern[VSize] = AverageMaxMedianMinPct10Pct25Pct75Pct90TxindexPattern(client, 'tx_vsize')
|
||
self.weight: AverageMaxMedianMinPct10Pct25Pct75Pct90TxindexPattern[Weight] = AverageMaxMedianMinPct10Pct25Pct75Pct90TxindexPattern(client, 'tx_weight')
|
||
|
||
class MetricsTree_Transactions_Fees_Fee:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.txindex: MetricPattern27[Sats] = MetricPattern27(client, 'fee')
|
||
self.sats: AverageCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[Sats] = AverageCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'fee')
|
||
self.bitcoin: AverageCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[Bitcoin] = AverageCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'fee_btc')
|
||
self.dollars: AverageCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[Dollars] = AverageCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'fee_usd')
|
||
|
||
class MetricsTree_Transactions_Fees:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.input_value: MetricPattern27[Sats] = MetricPattern27(client, 'input_value')
|
||
self.output_value: MetricPattern27[Sats] = MetricPattern27(client, 'output_value')
|
||
self.fee: MetricsTree_Transactions_Fees_Fee = MetricsTree_Transactions_Fees_Fee(client)
|
||
self.fee_rate: AverageMaxMedianMinPct10Pct25Pct75Pct90TxindexPattern[FeeRate] = AverageMaxMedianMinPct10Pct25Pct75Pct90TxindexPattern(client, 'fee_rate')
|
||
|
||
class MetricsTree_Transactions_Versions:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.v1: CumulativeSumPattern[StoredU64] = CumulativeSumPattern(client, 'tx_v1')
|
||
self.v2: CumulativeSumPattern[StoredU64] = CumulativeSumPattern(client, 'tx_v2')
|
||
self.v3: CumulativeSumPattern[StoredU64] = CumulativeSumPattern(client, 'tx_v3')
|
||
|
||
class MetricsTree_Transactions_Volume:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.sent_sum: BitcoinDollarsSatsPattern4 = BitcoinDollarsSatsPattern4(client, 'sent_sum')
|
||
self.received_sum: BitcoinDollarsSatsPattern4 = BitcoinDollarsSatsPattern4(client, 'received_sum')
|
||
self.annualized_volume: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'annualized_volume')
|
||
self.tx_per_sec: MetricPattern4[StoredF32] = MetricPattern4(client, 'tx_per_sec')
|
||
self.outputs_per_sec: MetricPattern4[StoredF32] = MetricPattern4(client, 'outputs_per_sec')
|
||
self.inputs_per_sec: MetricPattern4[StoredF32] = MetricPattern4(client, 'inputs_per_sec')
|
||
|
||
class MetricsTree_Transactions:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.first_txindex: MetricPattern11[TxIndex] = MetricPattern11(client, 'first_txindex')
|
||
self.height: MetricPattern27[Height] = MetricPattern27(client, 'height')
|
||
self.txid: MetricPattern27[Txid] = MetricPattern27(client, 'txid')
|
||
self.txversion: MetricPattern27[TxVersion] = MetricPattern27(client, 'txversion')
|
||
self.rawlocktime: MetricPattern27[RawLockTime] = MetricPattern27(client, 'rawlocktime')
|
||
self.base_size: MetricPattern27[StoredU32] = MetricPattern27(client, 'base_size')
|
||
self.total_size: MetricPattern27[StoredU32] = MetricPattern27(client, 'total_size')
|
||
self.is_explicitly_rbf: MetricPattern27[StoredBool] = MetricPattern27(client, 'is_explicitly_rbf')
|
||
self.first_txinindex: MetricPattern27[TxInIndex] = MetricPattern27(client, 'first_txinindex')
|
||
self.first_txoutindex: MetricPattern27[TxOutIndex] = MetricPattern27(client, 'first_txoutindex')
|
||
self.count: MetricsTree_Transactions_Count = MetricsTree_Transactions_Count(client)
|
||
self.size: MetricsTree_Transactions_Size = MetricsTree_Transactions_Size(client)
|
||
self.fees: MetricsTree_Transactions_Fees = MetricsTree_Transactions_Fees(client)
|
||
self.versions: MetricsTree_Transactions_Versions = MetricsTree_Transactions_Versions(client)
|
||
self.volume: MetricsTree_Transactions_Volume = MetricsTree_Transactions_Volume(client)
|
||
|
||
class MetricsTree_Inputs_Spent:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.txoutindex: MetricPattern12[TxOutIndex] = MetricPattern12(client, 'txoutindex')
|
||
self.value: MetricPattern12[Sats] = MetricPattern12(client, 'value')
|
||
|
||
class MetricsTree_Inputs:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.first_txinindex: MetricPattern11[TxInIndex] = MetricPattern11(client, 'first_txinindex')
|
||
self.outpoint: MetricPattern12[OutPoint] = MetricPattern12(client, 'outpoint')
|
||
self.txindex: MetricPattern12[TxIndex] = MetricPattern12(client, 'txindex')
|
||
self.outputtype: MetricPattern12[OutputType] = MetricPattern12(client, 'outputtype')
|
||
self.typeindex: MetricPattern12[TypeIndex] = MetricPattern12(client, 'typeindex')
|
||
self.spent: MetricsTree_Inputs_Spent = MetricsTree_Inputs_Spent(client)
|
||
self.count: AverageCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'input_count')
|
||
|
||
class MetricsTree_Outputs_Spent:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.txinindex: MetricPattern15[TxInIndex] = MetricPattern15(client, 'txinindex')
|
||
|
||
class MetricsTree_Outputs_Count:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.total_count: AverageCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'output_count')
|
||
self.utxo_count: MetricPattern1[StoredU64] = MetricPattern1(client, 'exact_utxo_count')
|
||
|
||
class MetricsTree_Outputs:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.first_txoutindex: MetricPattern11[TxOutIndex] = MetricPattern11(client, 'first_txoutindex')
|
||
self.value: MetricPattern15[Sats] = MetricPattern15(client, 'value')
|
||
self.outputtype: MetricPattern15[OutputType] = MetricPattern15(client, 'outputtype')
|
||
self.typeindex: MetricPattern15[TypeIndex] = MetricPattern15(client, 'typeindex')
|
||
self.txindex: MetricPattern15[TxIndex] = MetricPattern15(client, 'txindex')
|
||
self.spent: MetricsTree_Outputs_Spent = MetricsTree_Outputs_Spent(client)
|
||
self.count: MetricsTree_Outputs_Count = MetricsTree_Outputs_Count(client)
|
||
|
||
class MetricsTree_Addresses:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.first_p2pk65addressindex: MetricPattern11[P2PK65AddressIndex] = MetricPattern11(client, 'first_p2pk65addressindex')
|
||
self.first_p2pk33addressindex: MetricPattern11[P2PK33AddressIndex] = MetricPattern11(client, 'first_p2pk33addressindex')
|
||
self.first_p2pkhaddressindex: MetricPattern11[P2PKHAddressIndex] = MetricPattern11(client, 'first_p2pkhaddressindex')
|
||
self.first_p2shaddressindex: MetricPattern11[P2SHAddressIndex] = MetricPattern11(client, 'first_p2shaddressindex')
|
||
self.first_p2wpkhaddressindex: MetricPattern11[P2WPKHAddressIndex] = MetricPattern11(client, 'first_p2wpkhaddressindex')
|
||
self.first_p2wshaddressindex: MetricPattern11[P2WSHAddressIndex] = MetricPattern11(client, 'first_p2wshaddressindex')
|
||
self.first_p2traddressindex: MetricPattern11[P2TRAddressIndex] = MetricPattern11(client, 'first_p2traddressindex')
|
||
self.first_p2aaddressindex: MetricPattern11[P2AAddressIndex] = MetricPattern11(client, 'first_p2aaddressindex')
|
||
self.p2pk65bytes: MetricPattern19[P2PK65Bytes] = MetricPattern19(client, 'p2pk65bytes')
|
||
self.p2pk33bytes: MetricPattern18[P2PK33Bytes] = MetricPattern18(client, 'p2pk33bytes')
|
||
self.p2pkhbytes: MetricPattern20[P2PKHBytes] = MetricPattern20(client, 'p2pkhbytes')
|
||
self.p2shbytes: MetricPattern21[P2SHBytes] = MetricPattern21(client, 'p2shbytes')
|
||
self.p2wpkhbytes: MetricPattern23[P2WPKHBytes] = MetricPattern23(client, 'p2wpkhbytes')
|
||
self.p2wshbytes: MetricPattern24[P2WSHBytes] = MetricPattern24(client, 'p2wshbytes')
|
||
self.p2trbytes: MetricPattern22[P2TRBytes] = MetricPattern22(client, 'p2trbytes')
|
||
self.p2abytes: MetricPattern16[P2ABytes] = MetricPattern16(client, 'p2abytes')
|
||
|
||
class MetricsTree_Scripts_Count:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.p2a: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2a_count')
|
||
self.p2ms: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2ms_count')
|
||
self.p2pk33: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2pk33_count')
|
||
self.p2pk65: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2pk65_count')
|
||
self.p2pkh: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2pkh_count')
|
||
self.p2sh: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2sh_count')
|
||
self.p2tr: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2tr_count')
|
||
self.p2wpkh: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2wpkh_count')
|
||
self.p2wsh: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2wsh_count')
|
||
self.opreturn: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'opreturn_count')
|
||
self.emptyoutput: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'emptyoutput_count')
|
||
self.unknownoutput: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'unknownoutput_count')
|
||
self.segwit: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'segwit_count')
|
||
self.taproot_adoption: BaseCumulativeSumPattern = BaseCumulativeSumPattern(client, 'taproot_adoption')
|
||
self.segwit_adoption: BaseCumulativeSumPattern = BaseCumulativeSumPattern(client, 'segwit_adoption')
|
||
|
||
class MetricsTree_Scripts_Value:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.opreturn: BitcoinDollarsSatsPattern2 = BitcoinDollarsSatsPattern2(client, 'opreturn_value')
|
||
|
||
class MetricsTree_Scripts:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.first_emptyoutputindex: MetricPattern11[EmptyOutputIndex] = MetricPattern11(client, 'first_emptyoutputindex')
|
||
self.first_opreturnindex: MetricPattern11[OpReturnIndex] = MetricPattern11(client, 'first_opreturnindex')
|
||
self.first_p2msoutputindex: MetricPattern11[P2MSOutputIndex] = MetricPattern11(client, 'first_p2msoutputindex')
|
||
self.first_unknownoutputindex: MetricPattern11[UnknownOutputIndex] = MetricPattern11(client, 'first_unknownoutputindex')
|
||
self.empty_to_txindex: MetricPattern9[TxIndex] = MetricPattern9(client, 'txindex')
|
||
self.opreturn_to_txindex: MetricPattern14[TxIndex] = MetricPattern14(client, 'txindex')
|
||
self.p2ms_to_txindex: MetricPattern17[TxIndex] = MetricPattern17(client, 'txindex')
|
||
self.unknown_to_txindex: MetricPattern28[TxIndex] = MetricPattern28(client, 'txindex')
|
||
self.count: MetricsTree_Scripts_Count = MetricsTree_Scripts_Count(client)
|
||
self.value: MetricsTree_Scripts_Value = MetricsTree_Scripts_Value(client)
|
||
|
||
class MetricsTree_Positions:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.block_position: MetricPattern11[BlkPosition] = MetricPattern11(client, 'position')
|
||
self.tx_position: MetricPattern27[BlkPosition] = MetricPattern27(client, 'position')
|
||
|
||
class MetricsTree_Cointime_Activity:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.coinblocks_created: CumulativeSumPattern[StoredF64] = CumulativeSumPattern(client, 'coinblocks_created')
|
||
self.coinblocks_stored: CumulativeSumPattern[StoredF64] = CumulativeSumPattern(client, 'coinblocks_stored')
|
||
self.liveliness: MetricPattern1[StoredF64] = MetricPattern1(client, 'liveliness')
|
||
self.vaultedness: MetricPattern1[StoredF64] = MetricPattern1(client, 'vaultedness')
|
||
self.activity_to_vaultedness_ratio: MetricPattern1[StoredF64] = MetricPattern1(client, 'activity_to_vaultedness_ratio')
|
||
|
||
class MetricsTree_Cointime_Supply:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.vaulted_supply: BitcoinDollarsSatsPattern4 = BitcoinDollarsSatsPattern4(client, 'vaulted_supply')
|
||
self.active_supply: BitcoinDollarsSatsPattern4 = BitcoinDollarsSatsPattern4(client, 'active_supply')
|
||
|
||
class MetricsTree_Cointime_Value:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.cointime_value_destroyed: CumulativeSumPattern[StoredF64] = CumulativeSumPattern(client, 'cointime_value_destroyed')
|
||
self.cointime_value_created: CumulativeSumPattern[StoredF64] = CumulativeSumPattern(client, 'cointime_value_created')
|
||
self.cointime_value_stored: CumulativeSumPattern[StoredF64] = CumulativeSumPattern(client, 'cointime_value_stored')
|
||
self.vocdd: CumulativeSumPattern[StoredF64] = CumulativeSumPattern(client, 'vocdd')
|
||
|
||
class MetricsTree_Cointime_Cap:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.thermo_cap: MetricPattern1[Dollars] = MetricPattern1(client, 'thermo_cap')
|
||
self.investor_cap: MetricPattern1[Dollars] = MetricPattern1(client, 'investor_cap')
|
||
self.vaulted_cap: MetricPattern1[Dollars] = MetricPattern1(client, 'vaulted_cap')
|
||
self.active_cap: MetricPattern1[Dollars] = MetricPattern1(client, 'active_cap')
|
||
self.cointime_cap: MetricPattern1[Dollars] = MetricPattern1(client, 'cointime_cap')
|
||
|
||
class MetricsTree_Cointime_Pricing:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.vaulted_price: DollarsSatsPattern = DollarsSatsPattern(client, 'vaulted_price')
|
||
self.vaulted_price_ratio: RatioPattern = RatioPattern(client, 'vaulted_price_ratio')
|
||
self.active_price: DollarsSatsPattern = DollarsSatsPattern(client, 'active_price')
|
||
self.active_price_ratio: RatioPattern = RatioPattern(client, 'active_price_ratio')
|
||
self.true_market_mean: DollarsSatsPattern = DollarsSatsPattern(client, 'true_market_mean')
|
||
self.true_market_mean_ratio: RatioPattern = RatioPattern(client, 'true_market_mean_ratio')
|
||
self.cointime_price: DollarsSatsPattern = DollarsSatsPattern(client, 'cointime_price')
|
||
self.cointime_price_ratio: RatioPattern = RatioPattern(client, 'cointime_price_ratio')
|
||
|
||
class MetricsTree_Cointime_Adjusted:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.cointime_adj_inflation_rate: MetricPattern4[StoredF32] = MetricPattern4(client, 'cointime_adj_inflation_rate')
|
||
self.cointime_adj_tx_btc_velocity: MetricPattern4[StoredF64] = MetricPattern4(client, 'cointime_adj_tx_btc_velocity')
|
||
self.cointime_adj_tx_usd_velocity: MetricPattern4[StoredF64] = MetricPattern4(client, 'cointime_adj_tx_usd_velocity')
|
||
|
||
class MetricsTree_Cointime_ReserveRisk:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.vocdd_365d_median: MetricPattern6[StoredF64] = MetricPattern6(client, 'vocdd_365d_median')
|
||
self.hodl_bank: MetricPattern6[StoredF64] = MetricPattern6(client, 'hodl_bank')
|
||
self.reserve_risk: MetricPattern4[StoredF64] = MetricPattern4(client, 'reserve_risk')
|
||
|
||
class MetricsTree_Cointime:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.activity: MetricsTree_Cointime_Activity = MetricsTree_Cointime_Activity(client)
|
||
self.supply: MetricsTree_Cointime_Supply = MetricsTree_Cointime_Supply(client)
|
||
self.value: MetricsTree_Cointime_Value = MetricsTree_Cointime_Value(client)
|
||
self.cap: MetricsTree_Cointime_Cap = MetricsTree_Cointime_Cap(client)
|
||
self.pricing: MetricsTree_Cointime_Pricing = MetricsTree_Cointime_Pricing(client)
|
||
self.adjusted: MetricsTree_Cointime_Adjusted = MetricsTree_Cointime_Adjusted(client)
|
||
self.reserve_risk: MetricsTree_Cointime_ReserveRisk = MetricsTree_Cointime_ReserveRisk(client)
|
||
|
||
class MetricsTree_Constants:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.constant_0: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_0')
|
||
self.constant_1: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_1')
|
||
self.constant_2: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_2')
|
||
self.constant_3: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_3')
|
||
self.constant_4: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_4')
|
||
self.constant_20: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_20')
|
||
self.constant_30: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_30')
|
||
self.constant_38_2: MetricPattern1[StoredF32] = MetricPattern1(client, 'constant_38_2')
|
||
self.constant_50: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_50')
|
||
self.constant_61_8: MetricPattern1[StoredF32] = MetricPattern1(client, 'constant_61_8')
|
||
self.constant_70: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_70')
|
||
self.constant_80: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_80')
|
||
self.constant_100: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_100')
|
||
self.constant_600: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_600')
|
||
self.constant_minus_1: MetricPattern1[StoredI8] = MetricPattern1(client, 'constant_minus_1')
|
||
self.constant_minus_2: MetricPattern1[StoredI8] = MetricPattern1(client, 'constant_minus_2')
|
||
self.constant_minus_3: MetricPattern1[StoredI8] = MetricPattern1(client, 'constant_minus_3')
|
||
self.constant_minus_4: MetricPattern1[StoredI8] = MetricPattern1(client, 'constant_minus_4')
|
||
|
||
class MetricsTree_Indexes_Address_P2pk33:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern18[P2PK33AddressIndex] = MetricPattern18(client, 'p2pk33addressindex')
|
||
|
||
class MetricsTree_Indexes_Address_P2pk65:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern19[P2PK65AddressIndex] = MetricPattern19(client, 'p2pk65addressindex')
|
||
|
||
class MetricsTree_Indexes_Address_P2pkh:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern20[P2PKHAddressIndex] = MetricPattern20(client, 'p2pkhaddressindex')
|
||
|
||
class MetricsTree_Indexes_Address_P2sh:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern21[P2SHAddressIndex] = MetricPattern21(client, 'p2shaddressindex')
|
||
|
||
class MetricsTree_Indexes_Address_P2tr:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern22[P2TRAddressIndex] = MetricPattern22(client, 'p2traddressindex')
|
||
|
||
class MetricsTree_Indexes_Address_P2wpkh:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern23[P2WPKHAddressIndex] = MetricPattern23(client, 'p2wpkhaddressindex')
|
||
|
||
class MetricsTree_Indexes_Address_P2wsh:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern24[P2WSHAddressIndex] = MetricPattern24(client, 'p2wshaddressindex')
|
||
|
||
class MetricsTree_Indexes_Address_P2a:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern16[P2AAddressIndex] = MetricPattern16(client, 'p2aaddressindex')
|
||
|
||
class MetricsTree_Indexes_Address_P2ms:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern17[P2MSOutputIndex] = MetricPattern17(client, 'p2msoutputindex')
|
||
|
||
class MetricsTree_Indexes_Address_Empty:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern9[EmptyOutputIndex] = MetricPattern9(client, 'emptyoutputindex')
|
||
|
||
class MetricsTree_Indexes_Address_Unknown:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern28[UnknownOutputIndex] = MetricPattern28(client, 'unknownoutputindex')
|
||
|
||
class MetricsTree_Indexes_Address_Opreturn:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern14[OpReturnIndex] = MetricPattern14(client, 'opreturnindex')
|
||
|
||
class MetricsTree_Indexes_Address:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.p2pk33: MetricsTree_Indexes_Address_P2pk33 = MetricsTree_Indexes_Address_P2pk33(client)
|
||
self.p2pk65: MetricsTree_Indexes_Address_P2pk65 = MetricsTree_Indexes_Address_P2pk65(client)
|
||
self.p2pkh: MetricsTree_Indexes_Address_P2pkh = MetricsTree_Indexes_Address_P2pkh(client)
|
||
self.p2sh: MetricsTree_Indexes_Address_P2sh = MetricsTree_Indexes_Address_P2sh(client)
|
||
self.p2tr: MetricsTree_Indexes_Address_P2tr = MetricsTree_Indexes_Address_P2tr(client)
|
||
self.p2wpkh: MetricsTree_Indexes_Address_P2wpkh = MetricsTree_Indexes_Address_P2wpkh(client)
|
||
self.p2wsh: MetricsTree_Indexes_Address_P2wsh = MetricsTree_Indexes_Address_P2wsh(client)
|
||
self.p2a: MetricsTree_Indexes_Address_P2a = MetricsTree_Indexes_Address_P2a(client)
|
||
self.p2ms: MetricsTree_Indexes_Address_P2ms = MetricsTree_Indexes_Address_P2ms(client)
|
||
self.empty: MetricsTree_Indexes_Address_Empty = MetricsTree_Indexes_Address_Empty(client)
|
||
self.unknown: MetricsTree_Indexes_Address_Unknown = MetricsTree_Indexes_Address_Unknown(client)
|
||
self.opreturn: MetricsTree_Indexes_Address_Opreturn = MetricsTree_Indexes_Address_Opreturn(client)
|
||
|
||
class MetricsTree_Indexes_Height:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern11[Height] = MetricPattern11(client, 'height')
|
||
self.dateindex: MetricPattern11[DateIndex] = MetricPattern11(client, 'dateindex')
|
||
self.difficultyepoch: MetricPattern11[DifficultyEpoch] = MetricPattern11(client, 'difficultyepoch')
|
||
self.halvingepoch: MetricPattern11[HalvingEpoch] = MetricPattern11(client, 'halvingepoch')
|
||
self.txindex_count: MetricPattern11[StoredU64] = MetricPattern11(client, 'txindex_count')
|
||
|
||
class MetricsTree_Indexes_Difficultyepoch:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern8[DifficultyEpoch] = MetricPattern8(client, 'difficultyepoch')
|
||
self.first_height: MetricPattern8[Height] = MetricPattern8(client, 'first_height')
|
||
self.height_count: MetricPattern8[StoredU64] = MetricPattern8(client, 'height_count')
|
||
|
||
class MetricsTree_Indexes_Halvingepoch:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern10[HalvingEpoch] = MetricPattern10(client, 'halvingepoch')
|
||
self.first_height: MetricPattern10[Height] = MetricPattern10(client, 'first_height')
|
||
|
||
class MetricsTree_Indexes_Dateindex:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern6[DateIndex] = MetricPattern6(client, 'dateindex')
|
||
self.date: MetricPattern6[Date] = MetricPattern6(client, 'date')
|
||
self.first_height: MetricPattern6[Height] = MetricPattern6(client, 'first_height')
|
||
self.height_count: MetricPattern6[StoredU64] = MetricPattern6(client, 'height_count')
|
||
self.weekindex: MetricPattern6[WeekIndex] = MetricPattern6(client, 'weekindex')
|
||
self.monthindex: MetricPattern6[MonthIndex] = MetricPattern6(client, 'monthindex')
|
||
|
||
class MetricsTree_Indexes_Weekindex:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern29[WeekIndex] = MetricPattern29(client, 'weekindex')
|
||
self.date: MetricPattern29[Date] = MetricPattern29(client, 'date')
|
||
self.first_dateindex: MetricPattern29[DateIndex] = MetricPattern29(client, 'first_dateindex')
|
||
self.dateindex_count: MetricPattern29[StoredU64] = MetricPattern29(client, 'dateindex_count')
|
||
|
||
class MetricsTree_Indexes_Monthindex:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern13[MonthIndex] = MetricPattern13(client, 'monthindex')
|
||
self.date: MetricPattern13[Date] = MetricPattern13(client, 'date')
|
||
self.first_dateindex: MetricPattern13[DateIndex] = MetricPattern13(client, 'first_dateindex')
|
||
self.dateindex_count: MetricPattern13[StoredU64] = MetricPattern13(client, 'dateindex_count')
|
||
self.quarterindex: MetricPattern13[QuarterIndex] = MetricPattern13(client, 'quarterindex')
|
||
self.semesterindex: MetricPattern13[SemesterIndex] = MetricPattern13(client, 'semesterindex')
|
||
self.yearindex: MetricPattern13[YearIndex] = MetricPattern13(client, 'yearindex')
|
||
|
||
class MetricsTree_Indexes_Quarterindex:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern25[QuarterIndex] = MetricPattern25(client, 'quarterindex')
|
||
self.date: MetricPattern25[Date] = MetricPattern25(client, 'date')
|
||
self.first_monthindex: MetricPattern25[MonthIndex] = MetricPattern25(client, 'first_monthindex')
|
||
self.monthindex_count: MetricPattern25[StoredU64] = MetricPattern25(client, 'monthindex_count')
|
||
|
||
class MetricsTree_Indexes_Semesterindex:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern26[SemesterIndex] = MetricPattern26(client, 'semesterindex')
|
||
self.date: MetricPattern26[Date] = MetricPattern26(client, 'date')
|
||
self.first_monthindex: MetricPattern26[MonthIndex] = MetricPattern26(client, 'first_monthindex')
|
||
self.monthindex_count: MetricPattern26[StoredU64] = MetricPattern26(client, 'monthindex_count')
|
||
|
||
class MetricsTree_Indexes_Yearindex:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern30[YearIndex] = MetricPattern30(client, 'yearindex')
|
||
self.date: MetricPattern30[Date] = MetricPattern30(client, 'date')
|
||
self.first_monthindex: MetricPattern30[MonthIndex] = MetricPattern30(client, 'first_monthindex')
|
||
self.monthindex_count: MetricPattern30[StoredU64] = MetricPattern30(client, 'monthindex_count')
|
||
self.decadeindex: MetricPattern30[DecadeIndex] = MetricPattern30(client, 'decadeindex')
|
||
|
||
class MetricsTree_Indexes_Decadeindex:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern7[DecadeIndex] = MetricPattern7(client, 'decadeindex')
|
||
self.date: MetricPattern7[Date] = MetricPattern7(client, 'date')
|
||
self.first_yearindex: MetricPattern7[YearIndex] = MetricPattern7(client, 'first_yearindex')
|
||
self.yearindex_count: MetricPattern7[StoredU64] = MetricPattern7(client, 'yearindex_count')
|
||
|
||
class MetricsTree_Indexes_Txindex:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern27[TxIndex] = MetricPattern27(client, 'txindex')
|
||
self.input_count: MetricPattern27[StoredU64] = MetricPattern27(client, 'input_count')
|
||
self.output_count: MetricPattern27[StoredU64] = MetricPattern27(client, 'output_count')
|
||
|
||
class MetricsTree_Indexes_Txinindex:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern12[TxInIndex] = MetricPattern12(client, 'txinindex')
|
||
|
||
class MetricsTree_Indexes_Txoutindex:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.identity: MetricPattern15[TxOutIndex] = MetricPattern15(client, 'txoutindex')
|
||
|
||
class MetricsTree_Indexes:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.address: MetricsTree_Indexes_Address = MetricsTree_Indexes_Address(client)
|
||
self.height: MetricsTree_Indexes_Height = MetricsTree_Indexes_Height(client)
|
||
self.difficultyepoch: MetricsTree_Indexes_Difficultyepoch = MetricsTree_Indexes_Difficultyepoch(client)
|
||
self.halvingepoch: MetricsTree_Indexes_Halvingepoch = MetricsTree_Indexes_Halvingepoch(client)
|
||
self.dateindex: MetricsTree_Indexes_Dateindex = MetricsTree_Indexes_Dateindex(client)
|
||
self.weekindex: MetricsTree_Indexes_Weekindex = MetricsTree_Indexes_Weekindex(client)
|
||
self.monthindex: MetricsTree_Indexes_Monthindex = MetricsTree_Indexes_Monthindex(client)
|
||
self.quarterindex: MetricsTree_Indexes_Quarterindex = MetricsTree_Indexes_Quarterindex(client)
|
||
self.semesterindex: MetricsTree_Indexes_Semesterindex = MetricsTree_Indexes_Semesterindex(client)
|
||
self.yearindex: MetricsTree_Indexes_Yearindex = MetricsTree_Indexes_Yearindex(client)
|
||
self.decadeindex: MetricsTree_Indexes_Decadeindex = MetricsTree_Indexes_Decadeindex(client)
|
||
self.txindex: MetricsTree_Indexes_Txindex = MetricsTree_Indexes_Txindex(client)
|
||
self.txinindex: MetricsTree_Indexes_Txinindex = MetricsTree_Indexes_Txinindex(client)
|
||
self.txoutindex: MetricsTree_Indexes_Txoutindex = MetricsTree_Indexes_Txoutindex(client)
|
||
|
||
class MetricsTree_Market_Ath:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.price_ath: DollarsSatsPattern = DollarsSatsPattern(client, 'price_ath')
|
||
self.price_drawdown: MetricPattern3[StoredF32] = MetricPattern3(client, 'price_drawdown')
|
||
self.days_since_price_ath: MetricPattern4[StoredU16] = MetricPattern4(client, 'days_since_price_ath')
|
||
self.years_since_price_ath: MetricPattern4[StoredF32] = MetricPattern4(client, 'years_since_price_ath')
|
||
self.max_days_between_price_aths: MetricPattern4[StoredU16] = MetricPattern4(client, 'max_days_between_price_aths')
|
||
self.max_years_between_price_aths: MetricPattern4[StoredF32] = MetricPattern4(client, 'max_years_between_price_aths')
|
||
|
||
class MetricsTree_Market_Lookback:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._1d: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_1d_ago')
|
||
self._1w: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_1w_ago')
|
||
self._1m: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_1m_ago')
|
||
self._3m: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_3m_ago')
|
||
self._6m: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_6m_ago')
|
||
self._1y: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_1y_ago')
|
||
self._2y: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_2y_ago')
|
||
self._3y: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_3y_ago')
|
||
self._4y: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_4y_ago')
|
||
self._5y: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_5y_ago')
|
||
self._6y: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_6y_ago')
|
||
self._8y: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_8y_ago')
|
||
self._10y: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_10y_ago')
|
||
|
||
class MetricsTree_Market_Returns_PriceReturns:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._1d: MetricPattern4[StoredF32] = MetricPattern4(client, '1d_price_returns')
|
||
self._1w: MetricPattern4[StoredF32] = MetricPattern4(client, '1w_price_returns')
|
||
self._1m: MetricPattern4[StoredF32] = MetricPattern4(client, '1m_price_returns')
|
||
self._3m: MetricPattern4[StoredF32] = MetricPattern4(client, '3m_price_returns')
|
||
self._6m: MetricPattern4[StoredF32] = MetricPattern4(client, '6m_price_returns')
|
||
self._1y: MetricPattern4[StoredF32] = MetricPattern4(client, '1y_price_returns')
|
||
self._2y: MetricPattern4[StoredF32] = MetricPattern4(client, '2y_price_returns')
|
||
self._3y: MetricPattern4[StoredF32] = MetricPattern4(client, '3y_price_returns')
|
||
self._4y: MetricPattern4[StoredF32] = MetricPattern4(client, '4y_price_returns')
|
||
self._5y: MetricPattern4[StoredF32] = MetricPattern4(client, '5y_price_returns')
|
||
self._6y: MetricPattern4[StoredF32] = MetricPattern4(client, '6y_price_returns')
|
||
self._8y: MetricPattern4[StoredF32] = MetricPattern4(client, '8y_price_returns')
|
||
self._10y: MetricPattern4[StoredF32] = MetricPattern4(client, '10y_price_returns')
|
||
|
||
class MetricsTree_Market_Returns:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.price_returns: MetricsTree_Market_Returns_PriceReturns = MetricsTree_Market_Returns_PriceReturns(client)
|
||
self.cagr: _10y2y3y4y5y6y8yPattern = _10y2y3y4y5y6y8yPattern(client, 'cagr')
|
||
self._1d_returns_1w_sd: SdSmaPattern = SdSmaPattern(client, '1d_returns_1w_sd')
|
||
self._1d_returns_1m_sd: SdSmaPattern = SdSmaPattern(client, '1d_returns_1m_sd')
|
||
self._1d_returns_1y_sd: SdSmaPattern = SdSmaPattern(client, '1d_returns_1y_sd')
|
||
self.downside_returns: MetricPattern6[StoredF32] = MetricPattern6(client, 'downside_returns')
|
||
self.downside_1w_sd: SdSmaPattern = SdSmaPattern(client, 'downside_1w_sd')
|
||
self.downside_1m_sd: SdSmaPattern = SdSmaPattern(client, 'downside_1m_sd')
|
||
self.downside_1y_sd: SdSmaPattern = SdSmaPattern(client, 'downside_1y_sd')
|
||
|
||
class MetricsTree_Market_Volatility:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.price_1w_volatility: MetricPattern4[StoredF32] = MetricPattern4(client, 'price_1w_volatility')
|
||
self.price_1m_volatility: MetricPattern4[StoredF32] = MetricPattern4(client, 'price_1m_volatility')
|
||
self.price_1y_volatility: MetricPattern4[StoredF32] = MetricPattern4(client, 'price_1y_volatility')
|
||
self.sharpe_1w: MetricPattern6[StoredF32] = MetricPattern6(client, 'sharpe_1w')
|
||
self.sharpe_1m: MetricPattern6[StoredF32] = MetricPattern6(client, 'sharpe_1m')
|
||
self.sharpe_1y: MetricPattern6[StoredF32] = MetricPattern6(client, 'sharpe_1y')
|
||
self.sortino_1w: MetricPattern6[StoredF32] = MetricPattern6(client, 'sortino_1w')
|
||
self.sortino_1m: MetricPattern6[StoredF32] = MetricPattern6(client, 'sortino_1m')
|
||
self.sortino_1y: MetricPattern6[StoredF32] = MetricPattern6(client, 'sortino_1y')
|
||
|
||
class MetricsTree_Market_Range:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.price_1w_min: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_1w_min')
|
||
self.price_1w_max: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_1w_max')
|
||
self.price_2w_min: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_2w_min')
|
||
self.price_2w_max: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_2w_max')
|
||
self.price_1m_min: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_1m_min')
|
||
self.price_1m_max: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_1m_max')
|
||
self.price_1y_min: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_1y_min')
|
||
self.price_1y_max: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_1y_max')
|
||
self.price_true_range: MetricPattern6[StoredF32] = MetricPattern6(client, 'price_true_range')
|
||
self.price_true_range_2w_sum: MetricPattern6[StoredF32] = MetricPattern6(client, 'price_true_range_2w_sum')
|
||
self.price_2w_choppiness_index: MetricPattern4[StoredF32] = MetricPattern4(client, 'price_2w_choppiness_index')
|
||
|
||
class MetricsTree_Market_MovingAverage:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.price_1w_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_1w_sma')
|
||
self.price_8d_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_8d_sma')
|
||
self.price_13d_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_13d_sma')
|
||
self.price_21d_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_21d_sma')
|
||
self.price_1m_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_1m_sma')
|
||
self.price_34d_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_34d_sma')
|
||
self.price_55d_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_55d_sma')
|
||
self.price_89d_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_89d_sma')
|
||
self.price_111d_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_111d_sma')
|
||
self.price_144d_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_144d_sma')
|
||
self.price_200d_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_200d_sma')
|
||
self.price_350d_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_350d_sma')
|
||
self.price_1y_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_1y_sma')
|
||
self.price_2y_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_2y_sma')
|
||
self.price_200w_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_200w_sma')
|
||
self.price_4y_sma: PriceRatioPattern = PriceRatioPattern(client, 'price_4y_sma')
|
||
self.price_1w_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_1w_ema')
|
||
self.price_8d_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_8d_ema')
|
||
self.price_12d_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_12d_ema')
|
||
self.price_13d_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_13d_ema')
|
||
self.price_21d_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_21d_ema')
|
||
self.price_26d_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_26d_ema')
|
||
self.price_1m_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_1m_ema')
|
||
self.price_34d_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_34d_ema')
|
||
self.price_55d_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_55d_ema')
|
||
self.price_89d_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_89d_ema')
|
||
self.price_144d_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_144d_ema')
|
||
self.price_200d_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_200d_ema')
|
||
self.price_1y_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_1y_ema')
|
||
self.price_2y_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_2y_ema')
|
||
self.price_200w_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_200w_ema')
|
||
self.price_4y_ema: PriceRatioPattern = PriceRatioPattern(client, 'price_4y_ema')
|
||
self.price_200d_sma_x2_4: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_200d_sma_x2_4')
|
||
self.price_200d_sma_x0_8: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_200d_sma_x0_8')
|
||
self.price_350d_sma_x2: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'price_350d_sma_x2')
|
||
|
||
class MetricsTree_Market_Dca_PeriodAveragePrice:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._1w: DollarsSatsPattern2 = DollarsSatsPattern2(client, '1w_dca_average_price')
|
||
self._1m: DollarsSatsPattern2 = DollarsSatsPattern2(client, '1m_dca_average_price')
|
||
self._3m: DollarsSatsPattern2 = DollarsSatsPattern2(client, '3m_dca_average_price')
|
||
self._6m: DollarsSatsPattern2 = DollarsSatsPattern2(client, '6m_dca_average_price')
|
||
self._1y: DollarsSatsPattern2 = DollarsSatsPattern2(client, '1y_dca_average_price')
|
||
self._2y: DollarsSatsPattern2 = DollarsSatsPattern2(client, '2y_dca_average_price')
|
||
self._3y: DollarsSatsPattern2 = DollarsSatsPattern2(client, '3y_dca_average_price')
|
||
self._4y: DollarsSatsPattern2 = DollarsSatsPattern2(client, '4y_dca_average_price')
|
||
self._5y: DollarsSatsPattern2 = DollarsSatsPattern2(client, '5y_dca_average_price')
|
||
self._6y: DollarsSatsPattern2 = DollarsSatsPattern2(client, '6y_dca_average_price')
|
||
self._8y: DollarsSatsPattern2 = DollarsSatsPattern2(client, '8y_dca_average_price')
|
||
self._10y: DollarsSatsPattern2 = DollarsSatsPattern2(client, '10y_dca_average_price')
|
||
|
||
class MetricsTree_Market_Dca_ClassStack:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._2015: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'dca_class_2015_stack')
|
||
self._2016: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'dca_class_2016_stack')
|
||
self._2017: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'dca_class_2017_stack')
|
||
self._2018: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'dca_class_2018_stack')
|
||
self._2019: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'dca_class_2019_stack')
|
||
self._2020: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'dca_class_2020_stack')
|
||
self._2021: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'dca_class_2021_stack')
|
||
self._2022: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'dca_class_2022_stack')
|
||
self._2023: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'dca_class_2023_stack')
|
||
self._2024: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'dca_class_2024_stack')
|
||
self._2025: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'dca_class_2025_stack')
|
||
self._2026: BitcoinDollarsSatsPattern5 = BitcoinDollarsSatsPattern5(client, 'dca_class_2026_stack')
|
||
|
||
class MetricsTree_Market_Dca_ClassAveragePrice:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._2015: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'dca_class_2015_average_price')
|
||
self._2016: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'dca_class_2016_average_price')
|
||
self._2017: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'dca_class_2017_average_price')
|
||
self._2018: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'dca_class_2018_average_price')
|
||
self._2019: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'dca_class_2019_average_price')
|
||
self._2020: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'dca_class_2020_average_price')
|
||
self._2021: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'dca_class_2021_average_price')
|
||
self._2022: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'dca_class_2022_average_price')
|
||
self._2023: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'dca_class_2023_average_price')
|
||
self._2024: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'dca_class_2024_average_price')
|
||
self._2025: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'dca_class_2025_average_price')
|
||
self._2026: DollarsSatsPattern2 = DollarsSatsPattern2(client, 'dca_class_2026_average_price')
|
||
|
||
class MetricsTree_Market_Dca_ClassDaysInProfit:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._2015: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2015_days_in_profit')
|
||
self._2016: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2016_days_in_profit')
|
||
self._2017: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2017_days_in_profit')
|
||
self._2018: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2018_days_in_profit')
|
||
self._2019: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2019_days_in_profit')
|
||
self._2020: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2020_days_in_profit')
|
||
self._2021: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2021_days_in_profit')
|
||
self._2022: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2022_days_in_profit')
|
||
self._2023: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2023_days_in_profit')
|
||
self._2024: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2024_days_in_profit')
|
||
self._2025: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2025_days_in_profit')
|
||
self._2026: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2026_days_in_profit')
|
||
|
||
class MetricsTree_Market_Dca_ClassDaysInLoss:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._2015: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2015_days_in_loss')
|
||
self._2016: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2016_days_in_loss')
|
||
self._2017: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2017_days_in_loss')
|
||
self._2018: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2018_days_in_loss')
|
||
self._2019: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2019_days_in_loss')
|
||
self._2020: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2020_days_in_loss')
|
||
self._2021: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2021_days_in_loss')
|
||
self._2022: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2022_days_in_loss')
|
||
self._2023: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2023_days_in_loss')
|
||
self._2024: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2024_days_in_loss')
|
||
self._2025: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2025_days_in_loss')
|
||
self._2026: MetricPattern4[StoredU32] = MetricPattern4(client, 'dca_class_2026_days_in_loss')
|
||
|
||
class MetricsTree_Market_Dca_ClassMinReturn:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._2015: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2015_min_return')
|
||
self._2016: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2016_min_return')
|
||
self._2017: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2017_min_return')
|
||
self._2018: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2018_min_return')
|
||
self._2019: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2019_min_return')
|
||
self._2020: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2020_min_return')
|
||
self._2021: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2021_min_return')
|
||
self._2022: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2022_min_return')
|
||
self._2023: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2023_min_return')
|
||
self._2024: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2024_min_return')
|
||
self._2025: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2025_min_return')
|
||
self._2026: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2026_min_return')
|
||
|
||
class MetricsTree_Market_Dca_ClassMaxReturn:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._2015: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2015_max_return')
|
||
self._2016: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2016_max_return')
|
||
self._2017: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2017_max_return')
|
||
self._2018: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2018_max_return')
|
||
self._2019: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2019_max_return')
|
||
self._2020: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2020_max_return')
|
||
self._2021: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2021_max_return')
|
||
self._2022: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2022_max_return')
|
||
self._2023: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2023_max_return')
|
||
self._2024: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2024_max_return')
|
||
self._2025: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2025_max_return')
|
||
self._2026: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2026_max_return')
|
||
|
||
class MetricsTree_Market_Dca:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.period_stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3 = _10y1m1w1y2y3m3y4y5y6m6y8yPattern3(client, 'dca_stack')
|
||
self.period_average_price: MetricsTree_Market_Dca_PeriodAveragePrice = MetricsTree_Market_Dca_PeriodAveragePrice(client)
|
||
self.period_returns: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2[StoredF32] = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'dca_returns')
|
||
self.period_cagr: _10y2y3y4y5y6y8yPattern = _10y2y3y4y5y6y8yPattern(client, 'dca_cagr')
|
||
self.period_days_in_profit: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2[StoredU32] = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'dca_days_in_profit')
|
||
self.period_days_in_loss: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2[StoredU32] = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'dca_days_in_loss')
|
||
self.period_min_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2[StoredF32] = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'dca_min_return')
|
||
self.period_max_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2[StoredF32] = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'dca_max_return')
|
||
self.period_lump_sum_stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3 = _10y1m1w1y2y3m3y4y5y6m6y8yPattern3(client, 'lump_sum_stack')
|
||
self.period_lump_sum_returns: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2[StoredF32] = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'lump_sum_returns')
|
||
self.period_lump_sum_days_in_profit: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2[StoredU32] = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'lump_sum_days_in_profit')
|
||
self.period_lump_sum_days_in_loss: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2[StoredU32] = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'lump_sum_days_in_loss')
|
||
self.period_lump_sum_min_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2[StoredF32] = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'lump_sum_min_return')
|
||
self.period_lump_sum_max_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2[StoredF32] = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'lump_sum_max_return')
|
||
self.class_stack: MetricsTree_Market_Dca_ClassStack = MetricsTree_Market_Dca_ClassStack(client)
|
||
self.class_average_price: MetricsTree_Market_Dca_ClassAveragePrice = MetricsTree_Market_Dca_ClassAveragePrice(client)
|
||
self.class_returns: _201520162017201820192020202120222023202420252026Pattern2[StoredF32] = _201520162017201820192020202120222023202420252026Pattern2(client, 'dca_class')
|
||
self.class_days_in_profit: MetricsTree_Market_Dca_ClassDaysInProfit = MetricsTree_Market_Dca_ClassDaysInProfit(client)
|
||
self.class_days_in_loss: MetricsTree_Market_Dca_ClassDaysInLoss = MetricsTree_Market_Dca_ClassDaysInLoss(client)
|
||
self.class_min_return: MetricsTree_Market_Dca_ClassMinReturn = MetricsTree_Market_Dca_ClassMinReturn(client)
|
||
self.class_max_return: MetricsTree_Market_Dca_ClassMaxReturn = MetricsTree_Market_Dca_ClassMaxReturn(client)
|
||
|
||
class MetricsTree_Market_Indicators:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.puell_multiple: MetricPattern4[StoredF32] = MetricPattern4(client, 'puell_multiple')
|
||
self.nvt: MetricPattern4[StoredF32] = MetricPattern4(client, 'nvt')
|
||
self.rsi_gains: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_gains')
|
||
self.rsi_losses: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_losses')
|
||
self.rsi_average_gain_14d: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_average_gain_14d')
|
||
self.rsi_average_loss_14d: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_average_loss_14d')
|
||
self.rsi_14d: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_14d')
|
||
self.rsi_14d_min: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_14d_min')
|
||
self.rsi_14d_max: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_14d_max')
|
||
self.stoch_rsi: MetricPattern6[StoredF32] = MetricPattern6(client, 'stoch_rsi')
|
||
self.stoch_rsi_k: MetricPattern6[StoredF32] = MetricPattern6(client, 'stoch_rsi_k')
|
||
self.stoch_rsi_d: MetricPattern6[StoredF32] = MetricPattern6(client, 'stoch_rsi_d')
|
||
self.stoch_k: MetricPattern6[StoredF32] = MetricPattern6(client, 'stoch_k')
|
||
self.stoch_d: MetricPattern6[StoredF32] = MetricPattern6(client, 'stoch_d')
|
||
self.pi_cycle: MetricPattern6[StoredF32] = MetricPattern6(client, 'pi_cycle')
|
||
self.macd_line: MetricPattern6[StoredF32] = MetricPattern6(client, 'macd_line')
|
||
self.macd_signal: MetricPattern6[StoredF32] = MetricPattern6(client, 'macd_signal')
|
||
self.macd_histogram: MetricPattern6[StoredF32] = MetricPattern6(client, 'macd_histogram')
|
||
self.gini: MetricPattern6[StoredF32] = MetricPattern6(client, 'gini')
|
||
|
||
class MetricsTree_Market:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.ath: MetricsTree_Market_Ath = MetricsTree_Market_Ath(client)
|
||
self.lookback: MetricsTree_Market_Lookback = MetricsTree_Market_Lookback(client)
|
||
self.returns: MetricsTree_Market_Returns = MetricsTree_Market_Returns(client)
|
||
self.volatility: MetricsTree_Market_Volatility = MetricsTree_Market_Volatility(client)
|
||
self.range: MetricsTree_Market_Range = MetricsTree_Market_Range(client)
|
||
self.moving_average: MetricsTree_Market_MovingAverage = MetricsTree_Market_MovingAverage(client)
|
||
self.dca: MetricsTree_Market_Dca = MetricsTree_Market_Dca(client)
|
||
self.indicators: MetricsTree_Market_Indicators = MetricsTree_Market_Indicators(client)
|
||
|
||
class MetricsTree_Pools_Vecs:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.unknown: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'unknown')
|
||
self.blockfills: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'blockfills')
|
||
self.ultimuspool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'ultimuspool')
|
||
self.terrapool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'terrapool')
|
||
self.luxor: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'luxor')
|
||
self.onethash: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'onethash')
|
||
self.btccom: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'btccom')
|
||
self.bitfarms: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitfarms')
|
||
self.huobipool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'huobipool')
|
||
self.wayicn: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'wayicn')
|
||
self.canoepool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'canoepool')
|
||
self.btctop: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'btctop')
|
||
self.bitcoincom: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitcoincom')
|
||
self.pool175btc: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'pool175btc')
|
||
self.gbminers: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'gbminers')
|
||
self.axbt: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'axbt')
|
||
self.asicminer: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'asicminer')
|
||
self.bitminter: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitminter')
|
||
self.bitcoinrussia: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitcoinrussia')
|
||
self.btcserv: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'btcserv')
|
||
self.simplecoinus: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'simplecoinus')
|
||
self.btcguild: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'btcguild')
|
||
self.eligius: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'eligius')
|
||
self.ozcoin: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'ozcoin')
|
||
self.eclipsemc: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'eclipsemc')
|
||
self.maxbtc: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'maxbtc')
|
||
self.triplemining: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'triplemining')
|
||
self.coinlab: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'coinlab')
|
||
self.pool50btc: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'pool50btc')
|
||
self.ghashio: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'ghashio')
|
||
self.stminingcorp: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'stminingcorp')
|
||
self.bitparking: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitparking')
|
||
self.mmpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'mmpool')
|
||
self.polmine: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'polmine')
|
||
self.kncminer: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'kncminer')
|
||
self.bitalo: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitalo')
|
||
self.f2pool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'f2pool')
|
||
self.hhtt: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'hhtt')
|
||
self.megabigpower: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'megabigpower')
|
||
self.mtred: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'mtred')
|
||
self.nmcbit: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'nmcbit')
|
||
self.yourbtcnet: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'yourbtcnet')
|
||
self.givemecoins: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'givemecoins')
|
||
self.braiinspool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'braiinspool')
|
||
self.antpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'antpool')
|
||
self.multicoinco: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'multicoinco')
|
||
self.bcpoolio: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bcpoolio')
|
||
self.cointerra: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'cointerra')
|
||
self.kanopool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'kanopool')
|
||
self.solock: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'solock')
|
||
self.ckpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'ckpool')
|
||
self.nicehash: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'nicehash')
|
||
self.bitclub: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitclub')
|
||
self.bitcoinaffiliatenetwork: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitcoinaffiliatenetwork')
|
||
self.btcc: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'btcc')
|
||
self.bwpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bwpool')
|
||
self.exxbw: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'exxbw')
|
||
self.bitsolo: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitsolo')
|
||
self.bitfury: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitfury')
|
||
self.twentyoneinc: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'twentyoneinc')
|
||
self.digitalbtc: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'digitalbtc')
|
||
self.eightbaochi: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'eightbaochi')
|
||
self.mybtccoinpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'mybtccoinpool')
|
||
self.tbdice: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'tbdice')
|
||
self.hashpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'hashpool')
|
||
self.nexious: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'nexious')
|
||
self.bravomining: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bravomining')
|
||
self.hotpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'hotpool')
|
||
self.okexpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'okexpool')
|
||
self.bcmonster: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bcmonster')
|
||
self.onehash: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'onehash')
|
||
self.bixin: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bixin')
|
||
self.tatmaspool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'tatmaspool')
|
||
self.viabtc: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'viabtc')
|
||
self.connectbtc: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'connectbtc')
|
||
self.batpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'batpool')
|
||
self.waterhole: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'waterhole')
|
||
self.dcexploration: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'dcexploration')
|
||
self.dcex: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'dcex')
|
||
self.btpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'btpool')
|
||
self.fiftyeightcoin: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'fiftyeightcoin')
|
||
self.bitcoinindia: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitcoinindia')
|
||
self.shawnp0wers: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'shawnp0wers')
|
||
self.phashio: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'phashio')
|
||
self.rigpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'rigpool')
|
||
self.haozhuzhu: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'haozhuzhu')
|
||
self.sevenpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'sevenpool')
|
||
self.miningkings: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'miningkings')
|
||
self.hashbx: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'hashbx')
|
||
self.dpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'dpool')
|
||
self.rawpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'rawpool')
|
||
self.haominer: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'haominer')
|
||
self.helix: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'helix')
|
||
self.bitcoinukraine: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitcoinukraine')
|
||
self.poolin: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'poolin')
|
||
self.secretsuperstar: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'secretsuperstar')
|
||
self.tigerpoolnet: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'tigerpoolnet')
|
||
self.sigmapoolcom: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'sigmapoolcom')
|
||
self.okpooltop: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'okpooltop')
|
||
self.hummerpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'hummerpool')
|
||
self.tangpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'tangpool')
|
||
self.bytepool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bytepool')
|
||
self.spiderpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'spiderpool')
|
||
self.novablock: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'novablock')
|
||
self.miningcity: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'miningcity')
|
||
self.binancepool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'binancepool')
|
||
self.minerium: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'minerium')
|
||
self.lubiancom: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'lubiancom')
|
||
self.okkong: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'okkong')
|
||
self.aaopool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'aaopool')
|
||
self.emcdpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'emcdpool')
|
||
self.foundryusa: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'foundryusa')
|
||
self.sbicrypto: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'sbicrypto')
|
||
self.arkpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'arkpool')
|
||
self.purebtccom: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'purebtccom')
|
||
self.marapool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'marapool')
|
||
self.kucoinpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'kucoinpool')
|
||
self.entrustcharitypool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'entrustcharitypool')
|
||
self.okminer: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'okminer')
|
||
self.titan: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'titan')
|
||
self.pegapool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'pegapool')
|
||
self.btcnuggets: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'btcnuggets')
|
||
self.cloudhashing: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'cloudhashing')
|
||
self.digitalxmintsy: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'digitalxmintsy')
|
||
self.telco214: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'telco214')
|
||
self.btcpoolparty: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'btcpoolparty')
|
||
self.multipool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'multipool')
|
||
self.transactioncoinmining: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'transactioncoinmining')
|
||
self.btcdig: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'btcdig')
|
||
self.trickysbtcpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'trickysbtcpool')
|
||
self.btcmp: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'btcmp')
|
||
self.eobot: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'eobot')
|
||
self.unomp: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'unomp')
|
||
self.patels: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'patels')
|
||
self.gogreenlight: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'gogreenlight')
|
||
self.ekanembtc: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'ekanembtc')
|
||
self.canoe: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'canoe')
|
||
self.tiger: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'tiger')
|
||
self.onem1x: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'onem1x')
|
||
self.zulupool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'zulupool')
|
||
self.secpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'secpool')
|
||
self.ocean: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'ocean')
|
||
self.whitepool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'whitepool')
|
||
self.wk057: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'wk057')
|
||
self.futurebitapollosolo: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'futurebitapollosolo')
|
||
self.carbonnegative: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'carbonnegative')
|
||
self.portlandhodl: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'portlandhodl')
|
||
self.phoenix: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'phoenix')
|
||
self.neopool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'neopool')
|
||
self.maxipool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'maxipool')
|
||
self.bitfufupool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'bitfufupool')
|
||
self.luckypool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'luckypool')
|
||
self.miningdutch: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'miningdutch')
|
||
self.publicpool: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'publicpool')
|
||
self.miningsquared: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'miningsquared')
|
||
self.innopolistech: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'innopolistech')
|
||
self.btclab: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'btclab')
|
||
self.parasite: _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern = _1m1w1y24hBlocksCoinbaseDaysDominanceFeeSubsidyPattern(client, 'parasite')
|
||
|
||
class MetricsTree_Pools:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.height_to_pool: MetricPattern11[PoolSlug] = MetricPattern11(client, 'pool')
|
||
self.vecs: MetricsTree_Pools_Vecs = MetricsTree_Pools_Vecs(client)
|
||
|
||
class MetricsTree_Price_Cents_Split:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.open: MetricPattern5[CentsUnsigned] = MetricPattern5(client, 'price_open_cents')
|
||
self.high: MetricPattern5[CentsUnsigned] = MetricPattern5(client, 'price_high_cents')
|
||
self.low: MetricPattern5[CentsUnsigned] = MetricPattern5(client, 'price_low_cents')
|
||
self.close: MetricPattern5[CentsUnsigned] = MetricPattern5(client, 'price_close_cents')
|
||
|
||
class MetricsTree_Price_Cents:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.split: MetricsTree_Price_Cents_Split = MetricsTree_Price_Cents_Split(client)
|
||
self.ohlc: MetricPattern5[OHLCCentsUnsigned] = MetricPattern5(client, 'ohlc_cents')
|
||
|
||
class MetricsTree_Price_Usd:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.split: CloseHighLowOpenPattern2[Dollars] = CloseHighLowOpenPattern2(client, 'price')
|
||
self.ohlc: MetricPattern1[OHLCDollars] = MetricPattern1(client, 'price_ohlc')
|
||
|
||
class MetricsTree_Price_Oracle:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.price_cents: MetricPattern11[CentsUnsigned] = MetricPattern11(client, 'oracle_price_cents')
|
||
self.ohlc_cents: MetricPattern6[OHLCCentsUnsigned] = MetricPattern6(client, 'oracle_ohlc_cents')
|
||
self.split: CloseHighLowOpenPattern2[CentsUnsigned] = CloseHighLowOpenPattern2(client, 'oracle_price')
|
||
self.ohlc: MetricPattern1[OHLCCentsUnsigned] = MetricPattern1(client, 'oracle_price_ohlc')
|
||
self.ohlc_dollars: MetricPattern1[OHLCDollars] = MetricPattern1(client, 'oracle_ohlc_dollars')
|
||
|
||
class MetricsTree_Price:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.cents: MetricsTree_Price_Cents = MetricsTree_Price_Cents(client)
|
||
self.usd: MetricsTree_Price_Usd = MetricsTree_Price_Usd(client)
|
||
self.sats: OhlcSplitPattern2[OHLCSats] = OhlcSplitPattern2(client, 'price')
|
||
self.oracle: MetricsTree_Price_Oracle = MetricsTree_Price_Oracle(client)
|
||
|
||
class MetricsTree_Distribution_AnyAddressIndexes:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.p2a: MetricPattern16[AnyAddressIndex] = MetricPattern16(client, 'anyaddressindex')
|
||
self.p2pk33: MetricPattern18[AnyAddressIndex] = MetricPattern18(client, 'anyaddressindex')
|
||
self.p2pk65: MetricPattern19[AnyAddressIndex] = MetricPattern19(client, 'anyaddressindex')
|
||
self.p2pkh: MetricPattern20[AnyAddressIndex] = MetricPattern20(client, 'anyaddressindex')
|
||
self.p2sh: MetricPattern21[AnyAddressIndex] = MetricPattern21(client, 'anyaddressindex')
|
||
self.p2tr: MetricPattern22[AnyAddressIndex] = MetricPattern22(client, 'anyaddressindex')
|
||
self.p2wpkh: MetricPattern23[AnyAddressIndex] = MetricPattern23(client, 'anyaddressindex')
|
||
self.p2wsh: MetricPattern24[AnyAddressIndex] = MetricPattern24(client, 'anyaddressindex')
|
||
|
||
class MetricsTree_Distribution_AddressesData:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.funded: MetricPattern31[FundedAddressData] = MetricPattern31(client, 'fundedaddressdata')
|
||
self.empty: MetricPattern32[EmptyAddressData] = MetricPattern32(client, 'emptyaddressdata')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_All_Relative:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, 'supply_in_profit_rel_to_own_supply')
|
||
self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, 'supply_in_loss_rel_to_own_supply')
|
||
self.unrealized_profit_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, 'unrealized_profit_rel_to_market_cap')
|
||
self.unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, 'unrealized_loss_rel_to_market_cap')
|
||
self.neg_unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, 'neg_unrealized_loss_rel_to_market_cap')
|
||
self.net_unrealized_pnl_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, 'net_unrealized_pnl_rel_to_market_cap')
|
||
self.nupl: MetricPattern1[StoredF32] = MetricPattern1(client, 'nupl')
|
||
self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, 'unrealized_profit_rel_to_own_total_unrealized_pnl')
|
||
self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, 'unrealized_loss_rel_to_own_total_unrealized_pnl')
|
||
self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, 'neg_unrealized_loss_rel_to_own_total_unrealized_pnl')
|
||
self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, 'net_unrealized_pnl_rel_to_own_total_unrealized_pnl')
|
||
self.invested_capital_in_profit_pct: MetricPattern1[StoredF32] = MetricPattern1(client, 'invested_capital_in_profit_pct')
|
||
self.invested_capital_in_loss_pct: MetricPattern1[StoredF32] = MetricPattern1(client, 'invested_capital_in_loss_pct')
|
||
self.unrealized_peak_regret_rel_to_market_cap: MetricPattern4[StoredF32] = MetricPattern4(client, 'unrealized_peak_regret_rel_to_market_cap')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_All:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.supply: _30dHalvedTotalPattern = _30dHalvedTotalPattern(client, '')
|
||
self.outputs: UtxoPattern = UtxoPattern(client, 'utxo_count')
|
||
self.activity: CoinblocksCoindaysSatblocksSatdaysSentPattern = CoinblocksCoindaysSatblocksSatdaysSentPattern(client, '')
|
||
self.realized: AdjustedCapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern = AdjustedCapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern(client, '')
|
||
self.unrealized: GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern = GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern(client, '')
|
||
self.cost_basis: InvestedMaxMinPercentilesSpotPattern = InvestedMaxMinPercentilesSpotPattern(client, '')
|
||
self.relative: MetricsTree_Distribution_UtxoCohorts_All_Relative = MetricsTree_Distribution_UtxoCohorts_All_Relative(client)
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_AgeRange:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.up_to_1h: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_under_1h_old')
|
||
self._1h_to_1d: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1h_to_1d_old')
|
||
self._1d_to_1w: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1d_to_1w_old')
|
||
self._1w_to_1m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1w_to_1m_old')
|
||
self._1m_to_2m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1m_to_2m_old')
|
||
self._2m_to_3m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_2m_to_3m_old')
|
||
self._3m_to_4m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_3m_to_4m_old')
|
||
self._4m_to_5m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_4m_to_5m_old')
|
||
self._5m_to_6m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_5m_to_6m_old')
|
||
self._6m_to_1y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_6m_to_1y_old')
|
||
self._1y_to_2y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_1y_to_2y_old')
|
||
self._2y_to_3y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_2y_to_3y_old')
|
||
self._3y_to_4y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_3y_to_4y_old')
|
||
self._4y_to_5y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_4y_to_5y_old')
|
||
self._5y_to_6y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_5y_to_6y_old')
|
||
self._6y_to_7y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_6y_to_7y_old')
|
||
self._7y_to_8y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_7y_to_8y_old')
|
||
self._8y_to_10y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_8y_to_10y_old')
|
||
self._10y_to_12y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_10y_to_12y_old')
|
||
self._12y_to_15y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_12y_to_15y_old')
|
||
self.from_15y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'utxos_over_15y_old')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_Epoch:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._0: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'epoch_0')
|
||
self._1: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'epoch_1')
|
||
self._2: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'epoch_2')
|
||
self._3: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'epoch_3')
|
||
self._4: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'epoch_4')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_Year:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._2009: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2009')
|
||
self._2010: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2010')
|
||
self._2011: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2011')
|
||
self._2012: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2012')
|
||
self._2013: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2013')
|
||
self._2014: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2014')
|
||
self._2015: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2015')
|
||
self._2016: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2016')
|
||
self._2017: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2017')
|
||
self._2018: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2018')
|
||
self._2019: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2019')
|
||
self._2020: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2020')
|
||
self._2021: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2021')
|
||
self._2022: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2022')
|
||
self._2023: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2023')
|
||
self._2024: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2024')
|
||
self._2025: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2025')
|
||
self._2026: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'year_2026')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_MinAge:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._1d: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_1d_old')
|
||
self._1w: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_1w_old')
|
||
self._1m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_1m_old')
|
||
self._2m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_2m_old')
|
||
self._3m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_3m_old')
|
||
self._4m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_4m_old')
|
||
self._5m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_5m_old')
|
||
self._6m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_6m_old')
|
||
self._1y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_1y_old')
|
||
self._2y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_2y_old')
|
||
self._3y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_3y_old')
|
||
self._4y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_4y_old')
|
||
self._5y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_5y_old')
|
||
self._6y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_6y_old')
|
||
self._7y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_7y_old')
|
||
self._8y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_8y_old')
|
||
self._10y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_10y_old')
|
||
self._12y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern6(client, 'utxos_over_12y_old')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_GeAmount:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._1sat: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_1sat')
|
||
self._10sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_10sats')
|
||
self._100sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_100sats')
|
||
self._1k_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_1k_sats')
|
||
self._10k_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_10k_sats')
|
||
self._100k_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_100k_sats')
|
||
self._1m_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_1m_sats')
|
||
self._10m_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_10m_sats')
|
||
self._1btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_1btc')
|
||
self._10btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_10btc')
|
||
self._100btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_100btc')
|
||
self._1k_btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_1k_btc')
|
||
self._10k_btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_over_10k_btc')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_AmountRange:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._0sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_with_0sats')
|
||
self._1sat_to_10sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_1sat_under_10sats')
|
||
self._10sats_to_100sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_10sats_under_100sats')
|
||
self._100sats_to_1k_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_100sats_under_1k_sats')
|
||
self._1k_sats_to_10k_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_1k_sats_under_10k_sats')
|
||
self._10k_sats_to_100k_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_10k_sats_under_100k_sats')
|
||
self._100k_sats_to_1m_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_100k_sats_under_1m_sats')
|
||
self._1m_sats_to_10m_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_1m_sats_under_10m_sats')
|
||
self._10m_sats_to_1btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_10m_sats_under_1btc')
|
||
self._1btc_to_10btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_1btc_under_10btc')
|
||
self._10btc_to_100btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_10btc_under_100btc')
|
||
self._100btc_to_1k_btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_100btc_under_1k_btc')
|
||
self._1k_btc_to_10k_btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_1k_btc_under_10k_btc')
|
||
self._10k_btc_to_100k_btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_10k_btc_under_100k_btc')
|
||
self._100k_btc_or_more: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'utxos_above_100k_btc')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_Term_Short:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.supply: _30dHalvedTotalPattern = _30dHalvedTotalPattern(client, 'sth')
|
||
self.outputs: UtxoPattern = UtxoPattern(client, 'sth_utxo_count')
|
||
self.activity: CoinblocksCoindaysSatblocksSatdaysSentPattern = CoinblocksCoindaysSatblocksSatdaysSentPattern(client, 'sth')
|
||
self.realized: AdjustedCapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern = AdjustedCapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern(client, 'sth')
|
||
self.unrealized: GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern = GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern(client, 'sth')
|
||
self.cost_basis: InvestedMaxMinPercentilesSpotPattern = InvestedMaxMinPercentilesSpotPattern(client, 'sth')
|
||
self.relative: InvestedNegNetNuplSupplyUnrealizedPattern4 = InvestedNegNetNuplSupplyUnrealizedPattern4(client, 'sth')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_Term_Long:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.supply: _30dHalvedTotalPattern = _30dHalvedTotalPattern(client, 'lth')
|
||
self.outputs: UtxoPattern = UtxoPattern(client, 'lth_utxo_count')
|
||
self.activity: CoinblocksCoindaysSatblocksSatdaysSentPattern = CoinblocksCoindaysSatblocksSatdaysSentPattern(client, 'lth')
|
||
self.realized: CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern2 = CapCapitulationInvestorLossLowerMvrvNegNetPeakProfitRealizedSellSentSoprTotalUpperValuePattern2(client, 'lth')
|
||
self.unrealized: GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern = GreedInvestedInvestorNegNetPainPeakSupplyTotalUnrealizedPattern(client, 'lth')
|
||
self.cost_basis: InvestedMaxMinPercentilesSpotPattern = InvestedMaxMinPercentilesSpotPattern(client, 'lth')
|
||
self.relative: InvestedNegNetNuplSupplyUnrealizedPattern4 = InvestedNegNetNuplSupplyUnrealizedPattern4(client, 'lth')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_Term:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.short: MetricsTree_Distribution_UtxoCohorts_Term_Short = MetricsTree_Distribution_UtxoCohorts_Term_Short(client)
|
||
self.long: MetricsTree_Distribution_UtxoCohorts_Term_Long = MetricsTree_Distribution_UtxoCohorts_Term_Long(client)
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_Type:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.p2pk65: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'p2pk65')
|
||
self.p2pk33: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'p2pk33')
|
||
self.p2pkh: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'p2pkh')
|
||
self.p2ms: ActivityCostOutputsRealizedSupplyUnrealizedPattern = ActivityCostOutputsRealizedSupplyUnrealizedPattern(client, 'p2ms')
|
||
self.p2sh: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'p2sh')
|
||
self.p2wpkh: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'p2wpkh')
|
||
self.p2wsh: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'p2wsh')
|
||
self.p2tr: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'p2tr')
|
||
self.p2a: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern3(client, 'p2a')
|
||
self.unknown: ActivityCostOutputsRealizedSupplyUnrealizedPattern = ActivityCostOutputsRealizedSupplyUnrealizedPattern(client, 'unknown_outputs')
|
||
self.empty: ActivityCostOutputsRealizedSupplyUnrealizedPattern = ActivityCostOutputsRealizedSupplyUnrealizedPattern(client, 'empty_outputs')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_MaxAge:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._1w: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_1w_old')
|
||
self._1m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_1m_old')
|
||
self._2m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_2m_old')
|
||
self._3m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_3m_old')
|
||
self._4m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_4m_old')
|
||
self._5m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_5m_old')
|
||
self._6m: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_6m_old')
|
||
self._1y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_1y_old')
|
||
self._2y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_2y_old')
|
||
self._3y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_3y_old')
|
||
self._4y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_4y_old')
|
||
self._5y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_5y_old')
|
||
self._6y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_6y_old')
|
||
self._7y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_7y_old')
|
||
self._8y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_8y_old')
|
||
self._10y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_10y_old')
|
||
self._12y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_12y_old')
|
||
self._15y: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern5(client, 'utxos_under_15y_old')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts_LtAmount:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._10sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_10sats')
|
||
self._100sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_100sats')
|
||
self._1k_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_1k_sats')
|
||
self._10k_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_10k_sats')
|
||
self._100k_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_100k_sats')
|
||
self._1m_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_1m_sats')
|
||
self._10m_sats: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_10m_sats')
|
||
self._1btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_1btc')
|
||
self._10btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_10btc')
|
||
self._100btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_100btc')
|
||
self._1k_btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_1k_btc')
|
||
self._10k_btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_10k_btc')
|
||
self._100k_btc: ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4 = ActivityCostOutputsRealizedRelativeSupplyUnrealizedPattern4(client, 'utxos_under_100k_btc')
|
||
|
||
class MetricsTree_Distribution_UtxoCohorts:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.all: MetricsTree_Distribution_UtxoCohorts_All = MetricsTree_Distribution_UtxoCohorts_All(client)
|
||
self.age_range: MetricsTree_Distribution_UtxoCohorts_AgeRange = MetricsTree_Distribution_UtxoCohorts_AgeRange(client)
|
||
self.epoch: MetricsTree_Distribution_UtxoCohorts_Epoch = MetricsTree_Distribution_UtxoCohorts_Epoch(client)
|
||
self.year: MetricsTree_Distribution_UtxoCohorts_Year = MetricsTree_Distribution_UtxoCohorts_Year(client)
|
||
self.min_age: MetricsTree_Distribution_UtxoCohorts_MinAge = MetricsTree_Distribution_UtxoCohorts_MinAge(client)
|
||
self.ge_amount: MetricsTree_Distribution_UtxoCohorts_GeAmount = MetricsTree_Distribution_UtxoCohorts_GeAmount(client)
|
||
self.amount_range: MetricsTree_Distribution_UtxoCohorts_AmountRange = MetricsTree_Distribution_UtxoCohorts_AmountRange(client)
|
||
self.term: MetricsTree_Distribution_UtxoCohorts_Term = MetricsTree_Distribution_UtxoCohorts_Term(client)
|
||
self.type_: MetricsTree_Distribution_UtxoCohorts_Type = MetricsTree_Distribution_UtxoCohorts_Type(client)
|
||
self.max_age: MetricsTree_Distribution_UtxoCohorts_MaxAge = MetricsTree_Distribution_UtxoCohorts_MaxAge(client)
|
||
self.lt_amount: MetricsTree_Distribution_UtxoCohorts_LtAmount = MetricsTree_Distribution_UtxoCohorts_LtAmount(client)
|
||
|
||
class MetricsTree_Distribution_AddressCohorts_GeAmount:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._1sat: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_1sat')
|
||
self._10sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_10sats')
|
||
self._100sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_100sats')
|
||
self._1k_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_1k_sats')
|
||
self._10k_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_10k_sats')
|
||
self._100k_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_100k_sats')
|
||
self._1m_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_1m_sats')
|
||
self._10m_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_10m_sats')
|
||
self._1btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_1btc')
|
||
self._10btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_10btc')
|
||
self._100btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_100btc')
|
||
self._1k_btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_1k_btc')
|
||
self._10k_btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_over_10k_btc')
|
||
|
||
class MetricsTree_Distribution_AddressCohorts_AmountRange:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._0sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_with_0sats')
|
||
self._1sat_to_10sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_1sat_under_10sats')
|
||
self._10sats_to_100sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_10sats_under_100sats')
|
||
self._100sats_to_1k_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_100sats_under_1k_sats')
|
||
self._1k_sats_to_10k_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_1k_sats_under_10k_sats')
|
||
self._10k_sats_to_100k_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_10k_sats_under_100k_sats')
|
||
self._100k_sats_to_1m_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_100k_sats_under_1m_sats')
|
||
self._1m_sats_to_10m_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_1m_sats_under_10m_sats')
|
||
self._10m_sats_to_1btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_10m_sats_under_1btc')
|
||
self._1btc_to_10btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_1btc_under_10btc')
|
||
self._10btc_to_100btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_10btc_under_100btc')
|
||
self._100btc_to_1k_btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_100btc_under_1k_btc')
|
||
self._1k_btc_to_10k_btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_1k_btc_under_10k_btc')
|
||
self._10k_btc_to_100k_btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_10k_btc_under_100k_btc')
|
||
self._100k_btc_or_more: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_above_100k_btc')
|
||
|
||
class MetricsTree_Distribution_AddressCohorts_LtAmount:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self._10sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_10sats')
|
||
self._100sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_100sats')
|
||
self._1k_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_1k_sats')
|
||
self._10k_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_10k_sats')
|
||
self._100k_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_100k_sats')
|
||
self._1m_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_1m_sats')
|
||
self._10m_sats: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_10m_sats')
|
||
self._1btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_1btc')
|
||
self._10btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_10btc')
|
||
self._100btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_100btc')
|
||
self._1k_btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_1k_btc')
|
||
self._10k_btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_10k_btc')
|
||
self._100k_btc: ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern = ActivityAddrCostOutputsRealizedRelativeSupplyUnrealizedPattern(client, 'addrs_under_100k_btc')
|
||
|
||
class MetricsTree_Distribution_AddressCohorts:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.ge_amount: MetricsTree_Distribution_AddressCohorts_GeAmount = MetricsTree_Distribution_AddressCohorts_GeAmount(client)
|
||
self.amount_range: MetricsTree_Distribution_AddressCohorts_AmountRange = MetricsTree_Distribution_AddressCohorts_AmountRange(client)
|
||
self.lt_amount: MetricsTree_Distribution_AddressCohorts_LtAmount = MetricsTree_Distribution_AddressCohorts_LtAmount(client)
|
||
|
||
class MetricsTree_Distribution_AddressActivity:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.all: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'address_activity')
|
||
self.p2pk65: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2pk65_address_activity')
|
||
self.p2pk33: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2pk33_address_activity')
|
||
self.p2pkh: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2pkh_address_activity')
|
||
self.p2sh: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2sh_address_activity')
|
||
self.p2wpkh: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2wpkh_address_activity')
|
||
self.p2wsh: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2wsh_address_activity')
|
||
self.p2tr: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2tr_address_activity')
|
||
self.p2a: BalanceBothReactivatedReceivingSendingPattern = BalanceBothReactivatedReceivingSendingPattern(client, 'p2a_address_activity')
|
||
|
||
class MetricsTree_Distribution_TotalAddrCount:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.all: MetricPattern1[StoredU64] = MetricPattern1(client, 'total_addr_count')
|
||
self.p2pk65: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2pk65_total_addr_count')
|
||
self.p2pk33: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2pk33_total_addr_count')
|
||
self.p2pkh: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2pkh_total_addr_count')
|
||
self.p2sh: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2sh_total_addr_count')
|
||
self.p2wpkh: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2wpkh_total_addr_count')
|
||
self.p2wsh: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2wsh_total_addr_count')
|
||
self.p2tr: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2tr_total_addr_count')
|
||
self.p2a: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2a_total_addr_count')
|
||
|
||
class MetricsTree_Distribution_NewAddrCount:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.all: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'new_addr_count')
|
||
self.p2pk65: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2pk65_new_addr_count')
|
||
self.p2pk33: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2pk33_new_addr_count')
|
||
self.p2pkh: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2pkh_new_addr_count')
|
||
self.p2sh: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2sh_new_addr_count')
|
||
self.p2wpkh: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2wpkh_new_addr_count')
|
||
self.p2wsh: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2wsh_new_addr_count')
|
||
self.p2tr: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2tr_new_addr_count')
|
||
self.p2a: AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2[StoredU64] = AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, 'p2a_new_addr_count')
|
||
|
||
class MetricsTree_Distribution_GrowthRate:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.all: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredF32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, 'growth_rate')
|
||
self.p2pk65: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredF32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, 'p2pk65_growth_rate')
|
||
self.p2pk33: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredF32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, 'p2pk33_growth_rate')
|
||
self.p2pkh: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredF32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, 'p2pkh_growth_rate')
|
||
self.p2sh: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredF32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, 'p2sh_growth_rate')
|
||
self.p2wpkh: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredF32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, 'p2wpkh_growth_rate')
|
||
self.p2wsh: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredF32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, 'p2wsh_growth_rate')
|
||
self.p2tr: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredF32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, 'p2tr_growth_rate')
|
||
self.p2a: AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern[StoredF32] = AverageBaseMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, 'p2a_growth_rate')
|
||
|
||
class MetricsTree_Distribution:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.supply_state: MetricPattern11[SupplyState] = MetricPattern11(client, 'supply_state')
|
||
self.any_address_indexes: MetricsTree_Distribution_AnyAddressIndexes = MetricsTree_Distribution_AnyAddressIndexes(client)
|
||
self.addresses_data: MetricsTree_Distribution_AddressesData = MetricsTree_Distribution_AddressesData(client)
|
||
self.utxo_cohorts: MetricsTree_Distribution_UtxoCohorts = MetricsTree_Distribution_UtxoCohorts(client)
|
||
self.address_cohorts: MetricsTree_Distribution_AddressCohorts = MetricsTree_Distribution_AddressCohorts(client)
|
||
self.addr_count: AllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern = AllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern(client, 'addr_count')
|
||
self.empty_addr_count: AllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern = AllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern(client, 'empty_addr_count')
|
||
self.address_activity: MetricsTree_Distribution_AddressActivity = MetricsTree_Distribution_AddressActivity(client)
|
||
self.total_addr_count: MetricsTree_Distribution_TotalAddrCount = MetricsTree_Distribution_TotalAddrCount(client)
|
||
self.new_addr_count: MetricsTree_Distribution_NewAddrCount = MetricsTree_Distribution_NewAddrCount(client)
|
||
self.growth_rate: MetricsTree_Distribution_GrowthRate = MetricsTree_Distribution_GrowthRate(client)
|
||
self.fundedaddressindex: MetricPattern31[FundedAddressIndex] = MetricPattern31(client, 'fundedaddressindex')
|
||
self.emptyaddressindex: MetricPattern32[EmptyAddressIndex] = MetricPattern32(client, 'emptyaddressindex')
|
||
|
||
class MetricsTree_Supply_Circulating:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.sats: MetricPattern3[Sats] = MetricPattern3(client, 'circulating_supply')
|
||
self.bitcoin: MetricPattern3[Bitcoin] = MetricPattern3(client, 'circulating_supply_btc')
|
||
self.dollars: MetricPattern3[Dollars] = MetricPattern3(client, 'circulating_supply_usd')
|
||
|
||
class MetricsTree_Supply_Burned:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.opreturn: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, 'opreturn_supply')
|
||
self.unspendable: BitcoinDollarsSatsPattern3 = BitcoinDollarsSatsPattern3(client, 'unspendable_supply')
|
||
|
||
class MetricsTree_Supply_Velocity:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.btc: MetricPattern4[StoredF64] = MetricPattern4(client, 'btc_velocity')
|
||
self.usd: MetricPattern4[StoredF64] = MetricPattern4(client, 'usd_velocity')
|
||
|
||
class MetricsTree_Supply:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.circulating: MetricsTree_Supply_Circulating = MetricsTree_Supply_Circulating(client)
|
||
self.burned: MetricsTree_Supply_Burned = MetricsTree_Supply_Burned(client)
|
||
self.inflation: MetricPattern4[StoredF32] = MetricPattern4(client, 'inflation_rate')
|
||
self.velocity: MetricsTree_Supply_Velocity = MetricsTree_Supply_Velocity(client)
|
||
self.market_cap: MetricPattern1[Dollars] = MetricPattern1(client, 'market_cap')
|
||
self.market_cap_growth_rate: MetricPattern4[StoredF32] = MetricPattern4(client, 'market_cap_growth_rate')
|
||
self.realized_cap_growth_rate: MetricPattern4[StoredF32] = MetricPattern4(client, 'realized_cap_growth_rate')
|
||
self.cap_growth_rate_diff: MetricPattern6[StoredF32] = MetricPattern6(client, 'cap_growth_rate_diff')
|
||
|
||
class MetricsTree:
|
||
"""Metrics tree node."""
|
||
|
||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||
self.blocks: MetricsTree_Blocks = MetricsTree_Blocks(client)
|
||
self.transactions: MetricsTree_Transactions = MetricsTree_Transactions(client)
|
||
self.inputs: MetricsTree_Inputs = MetricsTree_Inputs(client)
|
||
self.outputs: MetricsTree_Outputs = MetricsTree_Outputs(client)
|
||
self.addresses: MetricsTree_Addresses = MetricsTree_Addresses(client)
|
||
self.scripts: MetricsTree_Scripts = MetricsTree_Scripts(client)
|
||
self.positions: MetricsTree_Positions = MetricsTree_Positions(client)
|
||
self.cointime: MetricsTree_Cointime = MetricsTree_Cointime(client)
|
||
self.constants: MetricsTree_Constants = MetricsTree_Constants(client)
|
||
self.indexes: MetricsTree_Indexes = MetricsTree_Indexes(client)
|
||
self.market: MetricsTree_Market = MetricsTree_Market(client)
|
||
self.pools: MetricsTree_Pools = MetricsTree_Pools(client)
|
||
self.price: MetricsTree_Price = MetricsTree_Price(client)
|
||
self.distribution: MetricsTree_Distribution = MetricsTree_Distribution(client)
|
||
self.supply: MetricsTree_Supply = MetricsTree_Supply(client)
|
||
|
||
class BrkClient(BrkClientBase):
|
||
"""Main BRK client with metrics tree and API methods."""
|
||
|
||
VERSION = "v0.1.9"
|
||
|
||
INDEXES = [
|
||
"dateindex",
|
||
"decadeindex",
|
||
"difficultyepoch",
|
||
"emptyoutputindex",
|
||
"halvingepoch",
|
||
"height",
|
||
"txinindex",
|
||
"monthindex",
|
||
"opreturnindex",
|
||
"txoutindex",
|
||
"p2aaddressindex",
|
||
"p2msoutputindex",
|
||
"p2pk33addressindex",
|
||
"p2pk65addressindex",
|
||
"p2pkhaddressindex",
|
||
"p2shaddressindex",
|
||
"p2traddressindex",
|
||
"p2wpkhaddressindex",
|
||
"p2wshaddressindex",
|
||
"quarterindex",
|
||
"semesterindex",
|
||
"txindex",
|
||
"unknownoutputindex",
|
||
"weekindex",
|
||
"yearindex",
|
||
"fundedaddressindex",
|
||
"emptyaddressindex",
|
||
"pairoutputindex"
|
||
]
|
||
|
||
POOL_ID_TO_POOL_NAME = {
|
||
"aaopool": "AAO Pool",
|
||
"antpool": "AntPool",
|
||
"arkpool": "ArkPool",
|
||
"asicminer": "ASICMiner",
|
||
"axbt": "A-XBT",
|
||
"batpool": "BATPOOL",
|
||
"bcmonster": "BCMonster",
|
||
"bcpoolio": "bcpool.io",
|
||
"binancepool": "Binance Pool",
|
||
"bitalo": "Bitalo",
|
||
"bitclub": "BitClub",
|
||
"bitcoinaffiliatenetwork": "Bitcoin Affiliate Network",
|
||
"bitcoincom": "Bitcoin.com",
|
||
"bitcoinindia": "Bitcoin India",
|
||
"bitcoinrussia": "BitcoinRussia",
|
||
"bitcoinukraine": "Bitcoin-Ukraine",
|
||
"bitfarms": "Bitfarms",
|
||
"bitfufupool": "BitFuFuPool",
|
||
"bitfury": "BitFury",
|
||
"bitminter": "BitMinter",
|
||
"bitparking": "Bitparking",
|
||
"bitsolo": "Bitsolo",
|
||
"bixin": "Bixin",
|
||
"blockfills": "BlockFills",
|
||
"braiinspool": "Braiins Pool",
|
||
"bravomining": "Bravo Mining",
|
||
"btcc": "BTCC",
|
||
"btccom": "BTC.com",
|
||
"btcdig": "BTCDig",
|
||
"btcguild": "BTC Guild",
|
||
"btclab": "BTCLab",
|
||
"btcmp": "BTCMP",
|
||
"btcnuggets": "BTC Nuggets",
|
||
"btcpoolparty": "BTC Pool Party",
|
||
"btcserv": "BTCServ",
|
||
"btctop": "BTC.TOP",
|
||
"btpool": "BTPOOL",
|
||
"bwpool": "BWPool",
|
||
"bytepool": "BytePool",
|
||
"canoe": "CANOE",
|
||
"canoepool": "CanoePool",
|
||
"carbonnegative": "Carbon Negative",
|
||
"ckpool": "CKPool",
|
||
"cloudhashing": "CloudHashing",
|
||
"coinlab": "CoinLab",
|
||
"cointerra": "Cointerra",
|
||
"connectbtc": "ConnectBTC",
|
||
"dcex": "DCEX",
|
||
"dcexploration": "DCExploration",
|
||
"digitalbtc": "digitalBTC",
|
||
"digitalxmintsy": "digitalX Mintsy",
|
||
"dpool": "DPOOL",
|
||
"eclipsemc": "EclipseMC",
|
||
"eightbaochi": "8baochi",
|
||
"ekanembtc": "EkanemBTC",
|
||
"eligius": "Eligius",
|
||
"emcdpool": "EMCDPool",
|
||
"entrustcharitypool": "Entrust Charity Pool",
|
||
"eobot": "Eobot",
|
||
"exxbw": "EXX&BW",
|
||
"f2pool": "F2Pool",
|
||
"fiftyeightcoin": "58COIN",
|
||
"foundryusa": "Foundry USA",
|
||
"futurebitapollosolo": "FutureBit Apollo Solo",
|
||
"gbminers": "GBMiners",
|
||
"ghashio": "GHash.IO",
|
||
"givemecoins": "Give Me Coins",
|
||
"gogreenlight": "GoGreenLight",
|
||
"haominer": "haominer",
|
||
"haozhuzhu": "HAOZHUZHU",
|
||
"hashbx": "HashBX",
|
||
"hashpool": "HASHPOOL",
|
||
"helix": "Helix",
|
||
"hhtt": "HHTT",
|
||
"hotpool": "HotPool",
|
||
"hummerpool": "Hummerpool",
|
||
"huobipool": "Huobi.pool",
|
||
"innopolistech": "Innopolis Tech",
|
||
"kanopool": "KanoPool",
|
||
"kncminer": "KnCMiner",
|
||
"kucoinpool": "KuCoinPool",
|
||
"lubiancom": "Lubian.com",
|
||
"luckypool": "luckyPool",
|
||
"luxor": "Luxor",
|
||
"marapool": "MARA Pool",
|
||
"maxbtc": "MaxBTC",
|
||
"maxipool": "MaxiPool",
|
||
"megabigpower": "MegaBigPower",
|
||
"minerium": "Minerium",
|
||
"miningcity": "MiningCity",
|
||
"miningdutch": "Mining-Dutch",
|
||
"miningkings": "MiningKings",
|
||
"miningsquared": "Mining Squared",
|
||
"mmpool": "mmpool",
|
||
"mtred": "Mt Red",
|
||
"multicoinco": "MultiCoin.co",
|
||
"multipool": "Multipool",
|
||
"mybtccoinpool": "myBTCcoin Pool",
|
||
"neopool": "Neopool",
|
||
"nexious": "Nexious",
|
||
"nicehash": "NiceHash",
|
||
"nmcbit": "NMCbit",
|
||
"novablock": "NovaBlock",
|
||
"ocean": "OCEAN",
|
||
"okexpool": "OKExPool",
|
||
"okkong": "OKKONG",
|
||
"okminer": "OKMINER",
|
||
"okpooltop": "okpool.top",
|
||
"onehash": "1Hash",
|
||
"onem1x": "1M1X",
|
||
"onethash": "1THash",
|
||
"ozcoin": "OzCoin",
|
||
"parasite": "Parasite",
|
||
"patels": "Patels",
|
||
"pegapool": "PEGA Pool",
|
||
"phashio": "PHash.IO",
|
||
"phoenix": "Phoenix",
|
||
"polmine": "Polmine",
|
||
"pool175btc": "175btc",
|
||
"pool50btc": "50BTC",
|
||
"poolin": "Poolin",
|
||
"portlandhodl": "Portland.HODL",
|
||
"publicpool": "Public Pool",
|
||
"purebtccom": "PureBTC.COM",
|
||
"rawpool": "Rawpool",
|
||
"rigpool": "RigPool",
|
||
"sbicrypto": "SBI Crypto",
|
||
"secpool": "SECPOOL",
|
||
"secretsuperstar": "SecretSuperstar",
|
||
"sevenpool": "7pool",
|
||
"shawnp0wers": "shawnp0wers",
|
||
"sigmapoolcom": "Sigmapool.com",
|
||
"simplecoinus": "simplecoin.us",
|
||
"solock": "Solo CK",
|
||
"spiderpool": "SpiderPool",
|
||
"stminingcorp": "ST Mining Corp",
|
||
"tangpool": "Tangpool",
|
||
"tatmaspool": "TATMAS Pool",
|
||
"tbdice": "TBDice",
|
||
"telco214": "Telco 214",
|
||
"terrapool": "Terra Pool",
|
||
"tiger": "tiger",
|
||
"tigerpoolnet": "tigerpool.net",
|
||
"titan": "Titan",
|
||
"transactioncoinmining": "transactioncoinmining",
|
||
"trickysbtcpool": "Tricky's BTC Pool",
|
||
"triplemining": "TripleMining",
|
||
"twentyoneinc": "21 Inc.",
|
||
"ultimuspool": "ULTIMUSPOOL",
|
||
"unknown": "Unknown",
|
||
"unomp": "UNOMP",
|
||
"viabtc": "ViaBTC",
|
||
"waterhole": "Waterhole",
|
||
"wayicn": "WAYI.CN",
|
||
"whitepool": "WhitePool",
|
||
"wk057": "wk057",
|
||
"yourbtcnet": "Yourbtc.net",
|
||
"zulupool": "Zulupool"
|
||
}
|
||
|
||
TERM_NAMES = {
|
||
"short": {
|
||
"id": "sth",
|
||
"short": "STH",
|
||
"long": "Short Term Holders"
|
||
},
|
||
"long": {
|
||
"id": "lth",
|
||
"short": "LTH",
|
||
"long": "Long Term Holders"
|
||
}
|
||
}
|
||
|
||
EPOCH_NAMES = {
|
||
"_0": {
|
||
"id": "epoch_0",
|
||
"short": "0",
|
||
"long": "Epoch 0"
|
||
},
|
||
"_1": {
|
||
"id": "epoch_1",
|
||
"short": "1",
|
||
"long": "Epoch 1"
|
||
},
|
||
"_2": {
|
||
"id": "epoch_2",
|
||
"short": "2",
|
||
"long": "Epoch 2"
|
||
},
|
||
"_3": {
|
||
"id": "epoch_3",
|
||
"short": "3",
|
||
"long": "Epoch 3"
|
||
},
|
||
"_4": {
|
||
"id": "epoch_4",
|
||
"short": "4",
|
||
"long": "Epoch 4"
|
||
}
|
||
}
|
||
|
||
YEAR_NAMES = {
|
||
"_2009": {
|
||
"id": "year_2009",
|
||
"short": "2009",
|
||
"long": "Year 2009"
|
||
},
|
||
"_2010": {
|
||
"id": "year_2010",
|
||
"short": "2010",
|
||
"long": "Year 2010"
|
||
},
|
||
"_2011": {
|
||
"id": "year_2011",
|
||
"short": "2011",
|
||
"long": "Year 2011"
|
||
},
|
||
"_2012": {
|
||
"id": "year_2012",
|
||
"short": "2012",
|
||
"long": "Year 2012"
|
||
},
|
||
"_2013": {
|
||
"id": "year_2013",
|
||
"short": "2013",
|
||
"long": "Year 2013"
|
||
},
|
||
"_2014": {
|
||
"id": "year_2014",
|
||
"short": "2014",
|
||
"long": "Year 2014"
|
||
},
|
||
"_2015": {
|
||
"id": "year_2015",
|
||
"short": "2015",
|
||
"long": "Year 2015"
|
||
},
|
||
"_2016": {
|
||
"id": "year_2016",
|
||
"short": "2016",
|
||
"long": "Year 2016"
|
||
},
|
||
"_2017": {
|
||
"id": "year_2017",
|
||
"short": "2017",
|
||
"long": "Year 2017"
|
||
},
|
||
"_2018": {
|
||
"id": "year_2018",
|
||
"short": "2018",
|
||
"long": "Year 2018"
|
||
},
|
||
"_2019": {
|
||
"id": "year_2019",
|
||
"short": "2019",
|
||
"long": "Year 2019"
|
||
},
|
||
"_2020": {
|
||
"id": "year_2020",
|
||
"short": "2020",
|
||
"long": "Year 2020"
|
||
},
|
||
"_2021": {
|
||
"id": "year_2021",
|
||
"short": "2021",
|
||
"long": "Year 2021"
|
||
},
|
||
"_2022": {
|
||
"id": "year_2022",
|
||
"short": "2022",
|
||
"long": "Year 2022"
|
||
},
|
||
"_2023": {
|
||
"id": "year_2023",
|
||
"short": "2023",
|
||
"long": "Year 2023"
|
||
},
|
||
"_2024": {
|
||
"id": "year_2024",
|
||
"short": "2024",
|
||
"long": "Year 2024"
|
||
},
|
||
"_2025": {
|
||
"id": "year_2025",
|
||
"short": "2025",
|
||
"long": "Year 2025"
|
||
},
|
||
"_2026": {
|
||
"id": "year_2026",
|
||
"short": "2026",
|
||
"long": "Year 2026"
|
||
}
|
||
}
|
||
|
||
SPENDABLE_TYPE_NAMES = {
|
||
"p2pk65": {
|
||
"id": "p2pk65",
|
||
"short": "P2PK65",
|
||
"long": "Pay to Public Key (65 bytes)"
|
||
},
|
||
"p2pk33": {
|
||
"id": "p2pk33",
|
||
"short": "P2PK33",
|
||
"long": "Pay to Public Key (33 bytes)"
|
||
},
|
||
"p2pkh": {
|
||
"id": "p2pkh",
|
||
"short": "P2PKH",
|
||
"long": "Pay to Public Key Hash"
|
||
},
|
||
"p2ms": {
|
||
"id": "p2ms",
|
||
"short": "P2MS",
|
||
"long": "Pay to Multisig"
|
||
},
|
||
"p2sh": {
|
||
"id": "p2sh",
|
||
"short": "P2SH",
|
||
"long": "Pay to Script Hash"
|
||
},
|
||
"p2wpkh": {
|
||
"id": "p2wpkh",
|
||
"short": "P2WPKH",
|
||
"long": "Pay to Witness Public Key Hash"
|
||
},
|
||
"p2wsh": {
|
||
"id": "p2wsh",
|
||
"short": "P2WSH",
|
||
"long": "Pay to Witness Script Hash"
|
||
},
|
||
"p2tr": {
|
||
"id": "p2tr",
|
||
"short": "P2TR",
|
||
"long": "Pay to Taproot"
|
||
},
|
||
"p2a": {
|
||
"id": "p2a",
|
||
"short": "P2A",
|
||
"long": "Pay to Anchor"
|
||
},
|
||
"unknown": {
|
||
"id": "unknown_outputs",
|
||
"short": "Unknown",
|
||
"long": "Unknown Output Type"
|
||
},
|
||
"empty": {
|
||
"id": "empty_outputs",
|
||
"short": "Empty",
|
||
"long": "Empty Output"
|
||
}
|
||
}
|
||
|
||
AGE_RANGE_NAMES = {
|
||
"up_to_1h": {
|
||
"id": "under_1h_old",
|
||
"short": "<1h",
|
||
"long": "Under 1 Hour Old"
|
||
},
|
||
"_1h_to_1d": {
|
||
"id": "1h_to_1d_old",
|
||
"short": "1h-1d",
|
||
"long": "1 Hour to 1 Day Old"
|
||
},
|
||
"_1d_to_1w": {
|
||
"id": "1d_to_1w_old",
|
||
"short": "1d-1w",
|
||
"long": "1 Day to 1 Week Old"
|
||
},
|
||
"_1w_to_1m": {
|
||
"id": "1w_to_1m_old",
|
||
"short": "1w-1m",
|
||
"long": "1 Week to 1 Month Old"
|
||
},
|
||
"_1m_to_2m": {
|
||
"id": "1m_to_2m_old",
|
||
"short": "1m-2m",
|
||
"long": "1 to 2 Months Old"
|
||
},
|
||
"_2m_to_3m": {
|
||
"id": "2m_to_3m_old",
|
||
"short": "2m-3m",
|
||
"long": "2 to 3 Months Old"
|
||
},
|
||
"_3m_to_4m": {
|
||
"id": "3m_to_4m_old",
|
||
"short": "3m-4m",
|
||
"long": "3 to 4 Months Old"
|
||
},
|
||
"_4m_to_5m": {
|
||
"id": "4m_to_5m_old",
|
||
"short": "4m-5m",
|
||
"long": "4 to 5 Months Old"
|
||
},
|
||
"_5m_to_6m": {
|
||
"id": "5m_to_6m_old",
|
||
"short": "5m-6m",
|
||
"long": "5 to 6 Months Old"
|
||
},
|
||
"_6m_to_1y": {
|
||
"id": "6m_to_1y_old",
|
||
"short": "6m-1y",
|
||
"long": "6 Months to 1 Year Old"
|
||
},
|
||
"_1y_to_2y": {
|
||
"id": "1y_to_2y_old",
|
||
"short": "1y-2y",
|
||
"long": "1 to 2 Years Old"
|
||
},
|
||
"_2y_to_3y": {
|
||
"id": "2y_to_3y_old",
|
||
"short": "2y-3y",
|
||
"long": "2 to 3 Years Old"
|
||
},
|
||
"_3y_to_4y": {
|
||
"id": "3y_to_4y_old",
|
||
"short": "3y-4y",
|
||
"long": "3 to 4 Years Old"
|
||
},
|
||
"_4y_to_5y": {
|
||
"id": "4y_to_5y_old",
|
||
"short": "4y-5y",
|
||
"long": "4 to 5 Years Old"
|
||
},
|
||
"_5y_to_6y": {
|
||
"id": "5y_to_6y_old",
|
||
"short": "5y-6y",
|
||
"long": "5 to 6 Years Old"
|
||
},
|
||
"_6y_to_7y": {
|
||
"id": "6y_to_7y_old",
|
||
"short": "6y-7y",
|
||
"long": "6 to 7 Years Old"
|
||
},
|
||
"_7y_to_8y": {
|
||
"id": "7y_to_8y_old",
|
||
"short": "7y-8y",
|
||
"long": "7 to 8 Years Old"
|
||
},
|
||
"_8y_to_10y": {
|
||
"id": "8y_to_10y_old",
|
||
"short": "8y-10y",
|
||
"long": "8 to 10 Years Old"
|
||
},
|
||
"_10y_to_12y": {
|
||
"id": "10y_to_12y_old",
|
||
"short": "10y-12y",
|
||
"long": "10 to 12 Years Old"
|
||
},
|
||
"_12y_to_15y": {
|
||
"id": "12y_to_15y_old",
|
||
"short": "12y-15y",
|
||
"long": "12 to 15 Years Old"
|
||
},
|
||
"from_15y": {
|
||
"id": "over_15y_old",
|
||
"short": "15y+",
|
||
"long": "15+ Years Old"
|
||
}
|
||
}
|
||
|
||
MAX_AGE_NAMES = {
|
||
"_1w": {
|
||
"id": "under_1w_old",
|
||
"short": "<1w",
|
||
"long": "Under 1 Week Old"
|
||
},
|
||
"_1m": {
|
||
"id": "under_1m_old",
|
||
"short": "<1m",
|
||
"long": "Under 1 Month Old"
|
||
},
|
||
"_2m": {
|
||
"id": "under_2m_old",
|
||
"short": "<2m",
|
||
"long": "Under 2 Months Old"
|
||
},
|
||
"_3m": {
|
||
"id": "under_3m_old",
|
||
"short": "<3m",
|
||
"long": "Under 3 Months Old"
|
||
},
|
||
"_4m": {
|
||
"id": "under_4m_old",
|
||
"short": "<4m",
|
||
"long": "Under 4 Months Old"
|
||
},
|
||
"_5m": {
|
||
"id": "under_5m_old",
|
||
"short": "<5m",
|
||
"long": "Under 5 Months Old"
|
||
},
|
||
"_6m": {
|
||
"id": "under_6m_old",
|
||
"short": "<6m",
|
||
"long": "Under 6 Months Old"
|
||
},
|
||
"_1y": {
|
||
"id": "under_1y_old",
|
||
"short": "<1y",
|
||
"long": "Under 1 Year Old"
|
||
},
|
||
"_2y": {
|
||
"id": "under_2y_old",
|
||
"short": "<2y",
|
||
"long": "Under 2 Years Old"
|
||
},
|
||
"_3y": {
|
||
"id": "under_3y_old",
|
||
"short": "<3y",
|
||
"long": "Under 3 Years Old"
|
||
},
|
||
"_4y": {
|
||
"id": "under_4y_old",
|
||
"short": "<4y",
|
||
"long": "Under 4 Years Old"
|
||
},
|
||
"_5y": {
|
||
"id": "under_5y_old",
|
||
"short": "<5y",
|
||
"long": "Under 5 Years Old"
|
||
},
|
||
"_6y": {
|
||
"id": "under_6y_old",
|
||
"short": "<6y",
|
||
"long": "Under 6 Years Old"
|
||
},
|
||
"_7y": {
|
||
"id": "under_7y_old",
|
||
"short": "<7y",
|
||
"long": "Under 7 Years Old"
|
||
},
|
||
"_8y": {
|
||
"id": "under_8y_old",
|
||
"short": "<8y",
|
||
"long": "Under 8 Years Old"
|
||
},
|
||
"_10y": {
|
||
"id": "under_10y_old",
|
||
"short": "<10y",
|
||
"long": "Under 10 Years Old"
|
||
},
|
||
"_12y": {
|
||
"id": "under_12y_old",
|
||
"short": "<12y",
|
||
"long": "Under 12 Years Old"
|
||
},
|
||
"_15y": {
|
||
"id": "under_15y_old",
|
||
"short": "<15y",
|
||
"long": "Under 15 Years Old"
|
||
}
|
||
}
|
||
|
||
MIN_AGE_NAMES = {
|
||
"_1d": {
|
||
"id": "over_1d_old",
|
||
"short": "1d+",
|
||
"long": "Over 1 Day Old"
|
||
},
|
||
"_1w": {
|
||
"id": "over_1w_old",
|
||
"short": "1w+",
|
||
"long": "Over 1 Week Old"
|
||
},
|
||
"_1m": {
|
||
"id": "over_1m_old",
|
||
"short": "1m+",
|
||
"long": "Over 1 Month Old"
|
||
},
|
||
"_2m": {
|
||
"id": "over_2m_old",
|
||
"short": "2m+",
|
||
"long": "Over 2 Months Old"
|
||
},
|
||
"_3m": {
|
||
"id": "over_3m_old",
|
||
"short": "3m+",
|
||
"long": "Over 3 Months Old"
|
||
},
|
||
"_4m": {
|
||
"id": "over_4m_old",
|
||
"short": "4m+",
|
||
"long": "Over 4 Months Old"
|
||
},
|
||
"_5m": {
|
||
"id": "over_5m_old",
|
||
"short": "5m+",
|
||
"long": "Over 5 Months Old"
|
||
},
|
||
"_6m": {
|
||
"id": "over_6m_old",
|
||
"short": "6m+",
|
||
"long": "Over 6 Months Old"
|
||
},
|
||
"_1y": {
|
||
"id": "over_1y_old",
|
||
"short": "1y+",
|
||
"long": "Over 1 Year Old"
|
||
},
|
||
"_2y": {
|
||
"id": "over_2y_old",
|
||
"short": "2y+",
|
||
"long": "Over 2 Years Old"
|
||
},
|
||
"_3y": {
|
||
"id": "over_3y_old",
|
||
"short": "3y+",
|
||
"long": "Over 3 Years Old"
|
||
},
|
||
"_4y": {
|
||
"id": "over_4y_old",
|
||
"short": "4y+",
|
||
"long": "Over 4 Years Old"
|
||
},
|
||
"_5y": {
|
||
"id": "over_5y_old",
|
||
"short": "5y+",
|
||
"long": "Over 5 Years Old"
|
||
},
|
||
"_6y": {
|
||
"id": "over_6y_old",
|
||
"short": "6y+",
|
||
"long": "Over 6 Years Old"
|
||
},
|
||
"_7y": {
|
||
"id": "over_7y_old",
|
||
"short": "7y+",
|
||
"long": "Over 7 Years Old"
|
||
},
|
||
"_8y": {
|
||
"id": "over_8y_old",
|
||
"short": "8y+",
|
||
"long": "Over 8 Years Old"
|
||
},
|
||
"_10y": {
|
||
"id": "over_10y_old",
|
||
"short": "10y+",
|
||
"long": "Over 10 Years Old"
|
||
},
|
||
"_12y": {
|
||
"id": "over_12y_old",
|
||
"short": "12y+",
|
||
"long": "Over 12 Years Old"
|
||
}
|
||
}
|
||
|
||
AMOUNT_RANGE_NAMES = {
|
||
"_0sats": {
|
||
"id": "with_0sats",
|
||
"short": "0 sats",
|
||
"long": "0 Sats"
|
||
},
|
||
"_1sat_to_10sats": {
|
||
"id": "above_1sat_under_10sats",
|
||
"short": "1-10 sats",
|
||
"long": "1-10 Sats"
|
||
},
|
||
"_10sats_to_100sats": {
|
||
"id": "above_10sats_under_100sats",
|
||
"short": "10-100 sats",
|
||
"long": "10-100 Sats"
|
||
},
|
||
"_100sats_to_1k_sats": {
|
||
"id": "above_100sats_under_1k_sats",
|
||
"short": "100-1k sats",
|
||
"long": "100-1K Sats"
|
||
},
|
||
"_1k_sats_to_10k_sats": {
|
||
"id": "above_1k_sats_under_10k_sats",
|
||
"short": "1k-10k sats",
|
||
"long": "1K-10K Sats"
|
||
},
|
||
"_10k_sats_to_100k_sats": {
|
||
"id": "above_10k_sats_under_100k_sats",
|
||
"short": "10k-100k sats",
|
||
"long": "10K-100K Sats"
|
||
},
|
||
"_100k_sats_to_1m_sats": {
|
||
"id": "above_100k_sats_under_1m_sats",
|
||
"short": "100k-1M sats",
|
||
"long": "100K-1M Sats"
|
||
},
|
||
"_1m_sats_to_10m_sats": {
|
||
"id": "above_1m_sats_under_10m_sats",
|
||
"short": "1M-10M sats",
|
||
"long": "1M-10M Sats"
|
||
},
|
||
"_10m_sats_to_1btc": {
|
||
"id": "above_10m_sats_under_1btc",
|
||
"short": "0.1-1 BTC",
|
||
"long": "0.1-1 BTC"
|
||
},
|
||
"_1btc_to_10btc": {
|
||
"id": "above_1btc_under_10btc",
|
||
"short": "1-10 BTC",
|
||
"long": "1-10 BTC"
|
||
},
|
||
"_10btc_to_100btc": {
|
||
"id": "above_10btc_under_100btc",
|
||
"short": "10-100 BTC",
|
||
"long": "10-100 BTC"
|
||
},
|
||
"_100btc_to_1k_btc": {
|
||
"id": "above_100btc_under_1k_btc",
|
||
"short": "100-1k BTC",
|
||
"long": "100-1K BTC"
|
||
},
|
||
"_1k_btc_to_10k_btc": {
|
||
"id": "above_1k_btc_under_10k_btc",
|
||
"short": "1k-10k BTC",
|
||
"long": "1K-10K BTC"
|
||
},
|
||
"_10k_btc_to_100k_btc": {
|
||
"id": "above_10k_btc_under_100k_btc",
|
||
"short": "10k-100k BTC",
|
||
"long": "10K-100K BTC"
|
||
},
|
||
"_100k_btc_or_more": {
|
||
"id": "above_100k_btc",
|
||
"short": "100k+ BTC",
|
||
"long": "100K+ BTC"
|
||
}
|
||
}
|
||
|
||
GE_AMOUNT_NAMES = {
|
||
"_1sat": {
|
||
"id": "over_1sat",
|
||
"short": "1+ sats",
|
||
"long": "Over 1 Sat"
|
||
},
|
||
"_10sats": {
|
||
"id": "over_10sats",
|
||
"short": "10+ sats",
|
||
"long": "Over 10 Sats"
|
||
},
|
||
"_100sats": {
|
||
"id": "over_100sats",
|
||
"short": "100+ sats",
|
||
"long": "Over 100 Sats"
|
||
},
|
||
"_1k_sats": {
|
||
"id": "over_1k_sats",
|
||
"short": "1k+ sats",
|
||
"long": "Over 1K Sats"
|
||
},
|
||
"_10k_sats": {
|
||
"id": "over_10k_sats",
|
||
"short": "10k+ sats",
|
||
"long": "Over 10K Sats"
|
||
},
|
||
"_100k_sats": {
|
||
"id": "over_100k_sats",
|
||
"short": "100k+ sats",
|
||
"long": "Over 100K Sats"
|
||
},
|
||
"_1m_sats": {
|
||
"id": "over_1m_sats",
|
||
"short": "1M+ sats",
|
||
"long": "Over 1M Sats"
|
||
},
|
||
"_10m_sats": {
|
||
"id": "over_10m_sats",
|
||
"short": "0.1+ BTC",
|
||
"long": "Over 0.1 BTC"
|
||
},
|
||
"_1btc": {
|
||
"id": "over_1btc",
|
||
"short": "1+ BTC",
|
||
"long": "Over 1 BTC"
|
||
},
|
||
"_10btc": {
|
||
"id": "over_10btc",
|
||
"short": "10+ BTC",
|
||
"long": "Over 10 BTC"
|
||
},
|
||
"_100btc": {
|
||
"id": "over_100btc",
|
||
"short": "100+ BTC",
|
||
"long": "Over 100 BTC"
|
||
},
|
||
"_1k_btc": {
|
||
"id": "over_1k_btc",
|
||
"short": "1k+ BTC",
|
||
"long": "Over 1K BTC"
|
||
},
|
||
"_10k_btc": {
|
||
"id": "over_10k_btc",
|
||
"short": "10k+ BTC",
|
||
"long": "Over 10K BTC"
|
||
}
|
||
}
|
||
|
||
LT_AMOUNT_NAMES = {
|
||
"_10sats": {
|
||
"id": "under_10sats",
|
||
"short": "<10 sats",
|
||
"long": "Under 10 Sats"
|
||
},
|
||
"_100sats": {
|
||
"id": "under_100sats",
|
||
"short": "<100 sats",
|
||
"long": "Under 100 Sats"
|
||
},
|
||
"_1k_sats": {
|
||
"id": "under_1k_sats",
|
||
"short": "<1k sats",
|
||
"long": "Under 1K Sats"
|
||
},
|
||
"_10k_sats": {
|
||
"id": "under_10k_sats",
|
||
"short": "<10k sats",
|
||
"long": "Under 10K Sats"
|
||
},
|
||
"_100k_sats": {
|
||
"id": "under_100k_sats",
|
||
"short": "<100k sats",
|
||
"long": "Under 100K Sats"
|
||
},
|
||
"_1m_sats": {
|
||
"id": "under_1m_sats",
|
||
"short": "<1M sats",
|
||
"long": "Under 1M Sats"
|
||
},
|
||
"_10m_sats": {
|
||
"id": "under_10m_sats",
|
||
"short": "<0.1 BTC",
|
||
"long": "Under 0.1 BTC"
|
||
},
|
||
"_1btc": {
|
||
"id": "under_1btc",
|
||
"short": "<1 BTC",
|
||
"long": "Under 1 BTC"
|
||
},
|
||
"_10btc": {
|
||
"id": "under_10btc",
|
||
"short": "<10 BTC",
|
||
"long": "Under 10 BTC"
|
||
},
|
||
"_100btc": {
|
||
"id": "under_100btc",
|
||
"short": "<100 BTC",
|
||
"long": "Under 100 BTC"
|
||
},
|
||
"_1k_btc": {
|
||
"id": "under_1k_btc",
|
||
"short": "<1k BTC",
|
||
"long": "Under 1K BTC"
|
||
},
|
||
"_10k_btc": {
|
||
"id": "under_10k_btc",
|
||
"short": "<10k BTC",
|
||
"long": "Under 10K BTC"
|
||
},
|
||
"_100k_btc": {
|
||
"id": "under_100k_btc",
|
||
"short": "<100k BTC",
|
||
"long": "Under 100K BTC"
|
||
}
|
||
}
|
||
|
||
def __init__(self, base_url: str = 'http://localhost:3000', timeout: float = 30.0):
|
||
super().__init__(base_url, timeout)
|
||
self.metrics = MetricsTree(self)
|
||
|
||
def metric(self, metric: str, index: Index) -> MetricEndpointBuilder[Any]:
|
||
"""Create a dynamic metric endpoint builder for any metric/index combination.
|
||
|
||
Use this for programmatic access when the metric name is determined at runtime.
|
||
For type-safe access, use the `metrics` tree instead.
|
||
"""
|
||
return MetricEndpointBuilder(self, metric, index)
|
||
|
||
def index_to_date(self, index: Index, i: int) -> date:
|
||
"""Convert an index value to a date for date-based indexes."""
|
||
return index_to_date(index, i)
|
||
|
||
def is_date_index(self, index: Index) -> bool:
|
||
"""Check if an index type is date-based."""
|
||
return is_date_index(index)
|
||
|
||
def get_api(self) -> Any:
|
||
"""Compact OpenAPI specification.
|
||
|
||
Compact OpenAPI specification optimized for LLM consumption. Removes redundant fields while preserving essential API information. Full spec available at `/openapi.json`.
|
||
|
||
Endpoint: `GET /api.json`"""
|
||
return self.get_json('/api.json')
|
||
|
||
def get_address(self, address: Address) -> AddressStats:
|
||
"""Address information.
|
||
|
||
Retrieve address information including balance and transaction counts. Supports all standard Bitcoin address types (P2PKH, P2SH, P2WPKH, P2WSH, P2TR).
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-address)*
|
||
|
||
Endpoint: `GET /api/address/{address}`"""
|
||
return self.get_json(f'/api/address/{address}')
|
||
|
||
def get_address_txs(self, address: Address, after_txid: Optional[str] = None, limit: Optional[float] = None) -> List[Txid]:
|
||
"""Address transaction IDs.
|
||
|
||
Get transaction IDs for an address, newest first. Use after_txid for pagination.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-address-transactions)*
|
||
|
||
Endpoint: `GET /api/address/{address}/txs`"""
|
||
params = []
|
||
if after_txid is not None: params.append(f'after_txid={after_txid}')
|
||
if limit is not None: params.append(f'limit={limit}')
|
||
query = '&'.join(params)
|
||
path = f'/api/address/{address}/txs{"?" + query if query else ""}'
|
||
return self.get_json(path)
|
||
|
||
def get_address_confirmed_txs(self, address: Address, after_txid: Optional[str] = None, limit: Optional[float] = None) -> List[Txid]:
|
||
"""Address confirmed transactions.
|
||
|
||
Get confirmed transaction IDs for an address, 25 per page. Use ?after_txid=<txid> for pagination.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-address-transactions-chain)*
|
||
|
||
Endpoint: `GET /api/address/{address}/txs/chain`"""
|
||
params = []
|
||
if after_txid is not None: params.append(f'after_txid={after_txid}')
|
||
if limit is not None: params.append(f'limit={limit}')
|
||
query = '&'.join(params)
|
||
path = f'/api/address/{address}/txs/chain{"?" + query if query else ""}'
|
||
return self.get_json(path)
|
||
|
||
def get_address_mempool_txs(self, address: Address) -> List[Txid]:
|
||
"""Address mempool transactions.
|
||
|
||
Get unconfirmed transaction IDs for an address from the mempool (up to 50).
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-address-transactions-mempool)*
|
||
|
||
Endpoint: `GET /api/address/{address}/txs/mempool`"""
|
||
return self.get_json(f'/api/address/{address}/txs/mempool')
|
||
|
||
def get_address_utxos(self, address: Address) -> List[Utxo]:
|
||
"""Address UTXOs.
|
||
|
||
Get unspent transaction outputs (UTXOs) for an address. Returns txid, vout, value, and confirmation status for each UTXO.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-address-utxo)*
|
||
|
||
Endpoint: `GET /api/address/{address}/utxo`"""
|
||
return self.get_json(f'/api/address/{address}/utxo')
|
||
|
||
def get_block_by_height(self, height: Height) -> BlockInfo:
|
||
"""Block by height.
|
||
|
||
Retrieve block information by block height. Returns block metadata including hash, timestamp, difficulty, size, weight, and transaction count.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-block-height)*
|
||
|
||
Endpoint: `GET /api/block-height/{height}`"""
|
||
return self.get_json(f'/api/block-height/{height}')
|
||
|
||
def get_block(self, hash: BlockHash) -> BlockInfo:
|
||
"""Block information.
|
||
|
||
Retrieve block information by block hash. Returns block metadata including height, timestamp, difficulty, size, weight, and transaction count.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-block)*
|
||
|
||
Endpoint: `GET /api/block/{hash}`"""
|
||
return self.get_json(f'/api/block/{hash}')
|
||
|
||
def get_block_raw(self, hash: BlockHash) -> List[float]:
|
||
"""Raw block.
|
||
|
||
Returns the raw block data in binary format.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-block-raw)*
|
||
|
||
Endpoint: `GET /api/block/{hash}/raw`"""
|
||
return self.get_json(f'/api/block/{hash}/raw')
|
||
|
||
def get_block_status(self, hash: BlockHash) -> BlockStatus:
|
||
"""Block status.
|
||
|
||
Retrieve the status of a block. Returns whether the block is in the best chain and, if so, its height and the hash of the next block.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-block-status)*
|
||
|
||
Endpoint: `GET /api/block/{hash}/status`"""
|
||
return self.get_json(f'/api/block/{hash}/status')
|
||
|
||
def get_block_txid(self, hash: BlockHash, index: TxIndex) -> Txid:
|
||
"""Transaction ID at index.
|
||
|
||
Retrieve a single transaction ID at a specific index within a block. Returns plain text txid.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-block-transaction-id)*
|
||
|
||
Endpoint: `GET /api/block/{hash}/txid/{index}`"""
|
||
return self.get_json(f'/api/block/{hash}/txid/{index}')
|
||
|
||
def get_block_txids(self, hash: BlockHash) -> List[Txid]:
|
||
"""Block transaction IDs.
|
||
|
||
Retrieve all transaction IDs in a block. Returns an array of txids in block order.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-block-transaction-ids)*
|
||
|
||
Endpoint: `GET /api/block/{hash}/txids`"""
|
||
return self.get_json(f'/api/block/{hash}/txids')
|
||
|
||
def get_block_txs(self, hash: BlockHash, start_index: TxIndex) -> List[Transaction]:
|
||
"""Block transactions (paginated).
|
||
|
||
Retrieve transactions in a block by block hash, starting from the specified index. Returns up to 25 transactions at a time.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-block-transactions)*
|
||
|
||
Endpoint: `GET /api/block/{hash}/txs/{start_index}`"""
|
||
return self.get_json(f'/api/block/{hash}/txs/{start_index}')
|
||
|
||
def get_blocks(self) -> List[BlockInfo]:
|
||
"""Recent blocks.
|
||
|
||
Retrieve the last 10 blocks. Returns block metadata for each block.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-blocks)*
|
||
|
||
Endpoint: `GET /api/blocks`"""
|
||
return self.get_json('/api/blocks')
|
||
|
||
def get_blocks_from_height(self, height: Height) -> List[BlockInfo]:
|
||
"""Blocks from height.
|
||
|
||
Retrieve up to 10 blocks going backwards from the given height. For example, height=100 returns blocks 100, 99, 98, ..., 91. Height=0 returns only block 0.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-blocks)*
|
||
|
||
Endpoint: `GET /api/blocks/{height}`"""
|
||
return self.get_json(f'/api/blocks/{height}')
|
||
|
||
def get_mempool(self) -> MempoolInfo:
|
||
"""Mempool statistics.
|
||
|
||
Get current mempool statistics including transaction count, total vsize, and total fees.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-mempool)*
|
||
|
||
Endpoint: `GET /api/mempool/info`"""
|
||
return self.get_json('/api/mempool/info')
|
||
|
||
def get_live_price(self) -> Dollars:
|
||
"""Live BTC/USD price.
|
||
|
||
Returns the current BTC/USD price in dollars, derived from on-chain round-dollar output patterns in the last 12 blocks plus mempool.
|
||
|
||
Endpoint: `GET /api/mempool/price`"""
|
||
return self.get_json('/api/mempool/price')
|
||
|
||
def get_mempool_txids(self) -> List[Txid]:
|
||
"""Mempool transaction IDs.
|
||
|
||
Get all transaction IDs currently in the mempool.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-mempool-transaction-ids)*
|
||
|
||
Endpoint: `GET /api/mempool/txids`"""
|
||
return self.get_json('/api/mempool/txids')
|
||
|
||
def get_metric_info(self, metric: Metric) -> List[Index]:
|
||
"""Get supported indexes for a metric.
|
||
|
||
Returns the list of indexes supported by the specified metric. For example, `realized_price` might be available on dateindex, weekindex, and monthindex.
|
||
|
||
Endpoint: `GET /api/metric/{metric}`"""
|
||
return self.get_json(f'/api/metric/{metric}')
|
||
|
||
def get_metric(self, metric: Metric, index: Index, start: Optional[float] = None, end: Optional[float] = None, limit: Optional[str] = None, format: Optional[Format] = None) -> Union[AnyMetricData, str]:
|
||
"""Get metric data.
|
||
|
||
Fetch data for a specific metric at the given index. Use query parameters to filter by date range and format (json/csv).
|
||
|
||
Endpoint: `GET /api/metric/{metric}/{index}`"""
|
||
params = []
|
||
if start is not None: params.append(f'start={start}')
|
||
if end is not None: params.append(f'end={end}')
|
||
if limit is not None: params.append(f'limit={limit}')
|
||
if format is not None: params.append(f'format={format}')
|
||
query = '&'.join(params)
|
||
path = f'/api/metric/{metric}/{index}{"?" + query if query else ""}'
|
||
if format == 'csv':
|
||
return self.get_text(path)
|
||
return self.get_json(path)
|
||
|
||
def get_metrics_tree(self) -> TreeNode:
|
||
"""Metrics catalog.
|
||
|
||
Returns the complete hierarchical catalog of available metrics organized as a tree structure. Metrics are grouped by categories and subcategories.
|
||
|
||
Endpoint: `GET /api/metrics`"""
|
||
return self.get_json('/api/metrics')
|
||
|
||
def get_metrics(self, metrics: Metrics, index: Index, start: Optional[float] = None, end: Optional[float] = None, limit: Optional[str] = None, format: Optional[Format] = None) -> Union[List[AnyMetricData], str]:
|
||
"""Bulk metric data.
|
||
|
||
Fetch multiple metrics in a single request. Supports filtering by index and date range. Returns an array of MetricData objects. For a single metric, use `get_metric` instead.
|
||
|
||
Endpoint: `GET /api/metrics/bulk`"""
|
||
params = []
|
||
params.append(f'metrics={metrics}')
|
||
params.append(f'index={index}')
|
||
if start is not None: params.append(f'start={start}')
|
||
if end is not None: params.append(f'end={end}')
|
||
if limit is not None: params.append(f'limit={limit}')
|
||
if format is not None: params.append(f'format={format}')
|
||
query = '&'.join(params)
|
||
path = f'/api/metrics/bulk{"?" + query if query else ""}'
|
||
if format == 'csv':
|
||
return self.get_text(path)
|
||
return self.get_json(path)
|
||
|
||
def get_cost_basis_cohorts(self) -> List[str]:
|
||
"""Available cost basis cohorts.
|
||
|
||
List available cohorts for cost basis distribution.
|
||
|
||
Endpoint: `GET /api/metrics/cost-basis`"""
|
||
return self.get_json('/api/metrics/cost-basis')
|
||
|
||
def get_cost_basis_dates(self, cohort: Cohort) -> List[Date]:
|
||
"""Available cost basis dates.
|
||
|
||
List available dates for a cohort's cost basis distribution.
|
||
|
||
Endpoint: `GET /api/metrics/cost-basis/{cohort}/dates`"""
|
||
return self.get_json(f'/api/metrics/cost-basis/{cohort}/dates')
|
||
|
||
def get_cost_basis(self, cohort: Cohort, date: str, bucket: Optional[CostBasisBucket] = None, value: Optional[CostBasisValue] = None) -> dict:
|
||
"""Cost basis distribution.
|
||
|
||
Get the cost basis distribution for a cohort on a specific date.
|
||
|
||
Query params:
|
||
- `bucket`: raw (default), lin200, lin500, lin1000, log10, log50, log100
|
||
- `value`: supply (default, in BTC), realized (USD), unrealized (USD)
|
||
|
||
Endpoint: `GET /api/metrics/cost-basis/{cohort}/{date}`"""
|
||
params = []
|
||
if bucket is not None: params.append(f'bucket={bucket}')
|
||
if value is not None: params.append(f'value={value}')
|
||
query = '&'.join(params)
|
||
path = f'/api/metrics/cost-basis/{cohort}/{date}{"?" + query if query else ""}'
|
||
return self.get_json(path)
|
||
|
||
def get_metrics_count(self) -> List[MetricCount]:
|
||
"""Metric count.
|
||
|
||
Returns the number of metrics available per index type.
|
||
|
||
Endpoint: `GET /api/metrics/count`"""
|
||
return self.get_json('/api/metrics/count')
|
||
|
||
def get_indexes(self) -> List[IndexInfo]:
|
||
"""List available indexes.
|
||
|
||
Returns all available indexes with their accepted query aliases. Use any alias when querying metrics.
|
||
|
||
Endpoint: `GET /api/metrics/indexes`"""
|
||
return self.get_json('/api/metrics/indexes')
|
||
|
||
def list_metrics(self, page: Optional[float] = None) -> PaginatedMetrics:
|
||
"""Metrics list.
|
||
|
||
Paginated flat list of all available metric names. Use `page` query param for pagination.
|
||
|
||
Endpoint: `GET /api/metrics/list`"""
|
||
params = []
|
||
if page is not None: params.append(f'page={page}')
|
||
query = '&'.join(params)
|
||
path = f'/api/metrics/list{"?" + query if query else ""}'
|
||
return self.get_json(path)
|
||
|
||
def search_metrics(self, metric: Metric, limit: Optional[Limit] = None) -> List[Metric]:
|
||
"""Search metrics.
|
||
|
||
Fuzzy search for metrics by name. Supports partial matches and typos.
|
||
|
||
Endpoint: `GET /api/metrics/search/{metric}`"""
|
||
params = []
|
||
if limit is not None: params.append(f'limit={limit}')
|
||
query = '&'.join(params)
|
||
path = f'/api/metrics/search/{metric}{"?" + query if query else ""}'
|
||
return self.get_json(path)
|
||
|
||
def get_disk_usage(self) -> DiskUsage:
|
||
"""Disk usage.
|
||
|
||
Returns the disk space used by BRK and Bitcoin data.
|
||
|
||
Endpoint: `GET /api/server/disk`"""
|
||
return self.get_json('/api/server/disk')
|
||
|
||
def get_sync_status(self) -> SyncStatus:
|
||
"""Sync status.
|
||
|
||
Returns the sync status of the indexer, including indexed height, tip height, blocks behind, and last indexed timestamp.
|
||
|
||
Endpoint: `GET /api/server/sync`"""
|
||
return self.get_json('/api/server/sync')
|
||
|
||
def get_tx(self, txid: Txid) -> Transaction:
|
||
"""Transaction information.
|
||
|
||
Retrieve complete transaction data by transaction ID (txid). Returns inputs, outputs, fee, size, and confirmation status.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-transaction)*
|
||
|
||
Endpoint: `GET /api/tx/{txid}`"""
|
||
return self.get_json(f'/api/tx/{txid}')
|
||
|
||
def get_tx_hex(self, txid: Txid) -> Hex:
|
||
"""Transaction hex.
|
||
|
||
Retrieve the raw transaction as a hex-encoded string. Returns the serialized transaction in hexadecimal format.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-transaction-hex)*
|
||
|
||
Endpoint: `GET /api/tx/{txid}/hex`"""
|
||
return self.get_json(f'/api/tx/{txid}/hex')
|
||
|
||
def get_tx_outspend(self, txid: Txid, vout: Vout) -> TxOutspend:
|
||
"""Output spend status.
|
||
|
||
Get the spending status of a transaction output. Returns whether the output has been spent and, if so, the spending transaction details.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-transaction-outspend)*
|
||
|
||
Endpoint: `GET /api/tx/{txid}/outspend/{vout}`"""
|
||
return self.get_json(f'/api/tx/{txid}/outspend/{vout}')
|
||
|
||
def get_tx_outspends(self, txid: Txid) -> List[TxOutspend]:
|
||
"""All output spend statuses.
|
||
|
||
Get the spending status of all outputs in a transaction. Returns an array with the spend status for each output.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-transaction-outspends)*
|
||
|
||
Endpoint: `GET /api/tx/{txid}/outspends`"""
|
||
return self.get_json(f'/api/tx/{txid}/outspends')
|
||
|
||
def get_tx_status(self, txid: Txid) -> TxStatus:
|
||
"""Transaction status.
|
||
|
||
Retrieve the confirmation status of a transaction. Returns whether the transaction is confirmed and, if so, the block height, hash, and timestamp.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-transaction-status)*
|
||
|
||
Endpoint: `GET /api/tx/{txid}/status`"""
|
||
return self.get_json(f'/api/tx/{txid}/status')
|
||
|
||
def get_difficulty_adjustment(self) -> DifficultyAdjustment:
|
||
"""Difficulty adjustment.
|
||
|
||
Get current difficulty adjustment information including progress through the current epoch, estimated retarget date, and difficulty change prediction.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-difficulty-adjustment)*
|
||
|
||
Endpoint: `GET /api/v1/difficulty-adjustment`"""
|
||
return self.get_json('/api/v1/difficulty-adjustment')
|
||
|
||
def get_mempool_blocks(self) -> List[MempoolBlock]:
|
||
"""Projected mempool blocks.
|
||
|
||
Get projected blocks from the mempool for fee estimation. Each block contains statistics about transactions that would be included if a block were mined now.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-mempool-blocks-fees)*
|
||
|
||
Endpoint: `GET /api/v1/fees/mempool-blocks`"""
|
||
return self.get_json('/api/v1/fees/mempool-blocks')
|
||
|
||
def get_recommended_fees(self) -> RecommendedFees:
|
||
"""Recommended fees.
|
||
|
||
Get recommended fee rates for different confirmation targets based on current mempool state.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-recommended-fees)*
|
||
|
||
Endpoint: `GET /api/v1/fees/recommended`"""
|
||
return self.get_json('/api/v1/fees/recommended')
|
||
|
||
def get_block_fee_rates(self, time_period: TimePeriod) -> Any:
|
||
"""Block fee rates (WIP).
|
||
|
||
**Work in progress.** Get block fee rate percentiles (min, 10th, 25th, median, 75th, 90th, max) for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-block-feerates)*
|
||
|
||
Endpoint: `GET /api/v1/mining/blocks/fee-rates/{time_period}`"""
|
||
return self.get_json(f'/api/v1/mining/blocks/fee-rates/{time_period}')
|
||
|
||
def get_block_fees(self, time_period: TimePeriod) -> List[BlockFeesEntry]:
|
||
"""Block fees.
|
||
|
||
Get average block fees for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-block-fees)*
|
||
|
||
Endpoint: `GET /api/v1/mining/blocks/fees/{time_period}`"""
|
||
return self.get_json(f'/api/v1/mining/blocks/fees/{time_period}')
|
||
|
||
def get_block_rewards(self, time_period: TimePeriod) -> List[BlockRewardsEntry]:
|
||
"""Block rewards.
|
||
|
||
Get average block rewards (coinbase = subsidy + fees) for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-block-rewards)*
|
||
|
||
Endpoint: `GET /api/v1/mining/blocks/rewards/{time_period}`"""
|
||
return self.get_json(f'/api/v1/mining/blocks/rewards/{time_period}')
|
||
|
||
def get_block_sizes_weights(self, time_period: TimePeriod) -> BlockSizesWeights:
|
||
"""Block sizes and weights.
|
||
|
||
Get average block sizes and weights for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-sizes-weights)*
|
||
|
||
Endpoint: `GET /api/v1/mining/blocks/sizes-weights/{time_period}`"""
|
||
return self.get_json(f'/api/v1/mining/blocks/sizes-weights/{time_period}')
|
||
|
||
def get_block_by_timestamp(self, timestamp: Timestamp) -> BlockTimestamp:
|
||
"""Block by timestamp.
|
||
|
||
Find the block closest to a given UNIX timestamp.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-block-timestamp)*
|
||
|
||
Endpoint: `GET /api/v1/mining/blocks/timestamp/{timestamp}`"""
|
||
return self.get_json(f'/api/v1/mining/blocks/timestamp/{timestamp}')
|
||
|
||
def get_difficulty_adjustments(self) -> List[DifficultyAdjustmentEntry]:
|
||
"""Difficulty adjustments (all time).
|
||
|
||
Get historical difficulty adjustments including timestamp, block height, difficulty value, and percentage change.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-difficulty-adjustments)*
|
||
|
||
Endpoint: `GET /api/v1/mining/difficulty-adjustments`"""
|
||
return self.get_json('/api/v1/mining/difficulty-adjustments')
|
||
|
||
def get_difficulty_adjustments_by_period(self, time_period: TimePeriod) -> List[DifficultyAdjustmentEntry]:
|
||
"""Difficulty adjustments.
|
||
|
||
Get historical difficulty adjustments for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-difficulty-adjustments)*
|
||
|
||
Endpoint: `GET /api/v1/mining/difficulty-adjustments/{time_period}`"""
|
||
return self.get_json(f'/api/v1/mining/difficulty-adjustments/{time_period}')
|
||
|
||
def get_hashrate(self) -> HashrateSummary:
|
||
"""Network hashrate (all time).
|
||
|
||
Get network hashrate and difficulty data for all time.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-hashrate)*
|
||
|
||
Endpoint: `GET /api/v1/mining/hashrate`"""
|
||
return self.get_json('/api/v1/mining/hashrate')
|
||
|
||
def get_hashrate_by_period(self, time_period: TimePeriod) -> HashrateSummary:
|
||
"""Network hashrate.
|
||
|
||
Get network hashrate and difficulty data for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-hashrate)*
|
||
|
||
Endpoint: `GET /api/v1/mining/hashrate/{time_period}`"""
|
||
return self.get_json(f'/api/v1/mining/hashrate/{time_period}')
|
||
|
||
def get_pool(self, slug: PoolSlug) -> PoolDetail:
|
||
"""Mining pool details.
|
||
|
||
Get detailed information about a specific mining pool including block counts and shares for different time periods.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-mining-pool)*
|
||
|
||
Endpoint: `GET /api/v1/mining/pool/{slug}`"""
|
||
return self.get_json(f'/api/v1/mining/pool/{slug}')
|
||
|
||
def get_pools(self) -> List[PoolInfo]:
|
||
"""List all mining pools.
|
||
|
||
Get list of all known mining pools with their identifiers.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-mining-pools)*
|
||
|
||
Endpoint: `GET /api/v1/mining/pools`"""
|
||
return self.get_json('/api/v1/mining/pools')
|
||
|
||
def get_pool_stats(self, time_period: TimePeriod) -> PoolsSummary:
|
||
"""Mining pool statistics.
|
||
|
||
Get mining pool statistics for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-mining-pools)*
|
||
|
||
Endpoint: `GET /api/v1/mining/pools/{time_period}`"""
|
||
return self.get_json(f'/api/v1/mining/pools/{time_period}')
|
||
|
||
def get_reward_stats(self, block_count: float) -> RewardStats:
|
||
"""Mining reward statistics.
|
||
|
||
Get mining reward statistics for the last N blocks including total rewards, fees, and transaction count.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-reward-stats)*
|
||
|
||
Endpoint: `GET /api/v1/mining/reward-stats/{block_count}`"""
|
||
return self.get_json(f'/api/v1/mining/reward-stats/{block_count}')
|
||
|
||
def validate_address(self, address: str) -> AddressValidation:
|
||
"""Validate address.
|
||
|
||
Validate a Bitcoin address and get information about its type and scriptPubKey.
|
||
|
||
*[Mempool.space docs](https://mempool.space/docs/api/rest#get-address-validate)*
|
||
|
||
Endpoint: `GET /api/v1/validate-address/{address}`"""
|
||
return self.get_json(f'/api/v1/validate-address/{address}')
|
||
|
||
def get_health(self) -> Health:
|
||
"""Health check.
|
||
|
||
Returns the health status of the API server, including uptime information.
|
||
|
||
Endpoint: `GET /health`"""
|
||
return self.get_json('/health')
|
||
|
||
def get_openapi(self) -> Any:
|
||
"""OpenAPI specification.
|
||
|
||
Full OpenAPI 3.1 specification for this API.
|
||
|
||
Endpoint: `GET /openapi.json`"""
|
||
return self.get_json('/openapi.json')
|
||
|
||
def get_version(self) -> str:
|
||
"""API version.
|
||
|
||
Returns the current version of the API server
|
||
|
||
Endpoint: `GET /version`"""
|
||
return self.get_json('/version')
|
||
|