mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-04-24 06:39:58 -07:00
10250 lines
404 KiB
JavaScript
10250 lines
404 KiB
JavaScript
// Auto-generated BRK JavaScript client
|
||
// Do not edit manually
|
||
|
||
// Type definitions
|
||
|
||
/**
|
||
* Bitcoin address string
|
||
*
|
||
* @typedef {string} Addr
|
||
*/
|
||
/**
|
||
* Address statistics on the blockchain (confirmed transactions only)
|
||
*
|
||
* Based on mempool.space's format with type_index extension.
|
||
*
|
||
* @typedef {Object} AddrChainStats
|
||
* @property {number} fundedTxoCount - Total number of transaction outputs that funded this address
|
||
* @property {Sats} fundedTxoSum - Total amount in satoshis received by this address across all funded outputs
|
||
* @property {number} spentTxoCount - Total number of transaction outputs spent from this address
|
||
* @property {Sats} spentTxoSum - Total amount in satoshis spent from this address
|
||
* @property {number} txCount - Total number of confirmed transactions involving this address
|
||
* @property {TypeIndex} typeIndex - Index of this address within its type on the blockchain
|
||
*/
|
||
/**
|
||
* Address statistics in the mempool (unconfirmed transactions only)
|
||
*
|
||
* Based on mempool.space's format.
|
||
*
|
||
* @typedef {Object} AddrMempoolStats
|
||
* @property {number} fundedTxoCount - Number of unconfirmed transaction outputs funding this address
|
||
* @property {Sats} fundedTxoSum - Total amount in satoshis being received in unconfirmed transactions
|
||
* @property {number} spentTxoCount - Number of unconfirmed transaction inputs spending from this address
|
||
* @property {Sats} spentTxoSum - Total amount in satoshis being spent in unconfirmed transactions
|
||
* @property {number} txCount - Number of unconfirmed transactions involving this address
|
||
*/
|
||
/**
|
||
* @typedef {Object} AddrParam
|
||
* @property {Addr} address
|
||
*/
|
||
/**
|
||
* Address information compatible with mempool.space API format
|
||
*
|
||
* @typedef {Object} AddrStats
|
||
* @property {Addr} address - Bitcoin address string
|
||
* @property {AddrChainStats} chainStats - Statistics for confirmed transactions on the blockchain
|
||
* @property {(AddrMempoolStats|null)=} mempoolStats - Statistics for unconfirmed transactions in the mempool
|
||
*/
|
||
/**
|
||
* @typedef {Object} AddrTxidsParam
|
||
* @property {(Txid|null)=} afterTxid - Txid to paginate from (return transactions before this one)
|
||
*/
|
||
/**
|
||
* Address validation result
|
||
*
|
||
* @typedef {Object} AddrValidation
|
||
* @property {boolean} isvalid - Whether the address is valid
|
||
* @property {?string=} address - The validated address
|
||
* @property {?string=} scriptPubKey - The scriptPubKey in hex
|
||
* @property {?boolean=} isscript - Whether this is a script address (P2SH)
|
||
* @property {?boolean=} iswitness - Whether this is a witness address
|
||
* @property {?number=} witnessVersion - Witness version (0 for P2WPKH/P2WSH, 1 for P2TR)
|
||
* @property {?string=} witnessProgram - Witness program in hex
|
||
*/
|
||
/**
|
||
* Unified index for any address type (funded or empty)
|
||
*
|
||
* @typedef {TypeIndex} AnyAddrIndex
|
||
*/
|
||
/**
|
||
* Unsigned basis points stored as u16.
|
||
* 1 bp = 0.0001. Range: 0–6.5535.
|
||
* Use for bounded 0–1 ratios (dominance, adoption, liveliness, etc.).
|
||
* `u16::MAX` is reserved as a NaN sentinel.
|
||
*
|
||
* @typedef {number} BasisPoints16
|
||
*/
|
||
/**
|
||
* Unsigned basis points stored as u32.
|
||
* 1 bp = 0.0001. Range: 0–429,496.7295.
|
||
* Use for unbounded unsigned ratios (MVRV, NVT, SOPR, etc.).
|
||
* `u32::MAX` is reserved as a NaN sentinel.
|
||
*
|
||
* @typedef {number} BasisPoints32
|
||
*/
|
||
/**
|
||
* Signed basis points stored as i16.
|
||
* 1 bp = 0.0001. Range: -3.2767 to +3.2767.
|
||
* Use for signed bounded ratios (NUPL, net PnL ratios, etc.).
|
||
* `i16::MIN` is reserved as a NaN sentinel.
|
||
*
|
||
* @typedef {number} BasisPointsSigned16
|
||
*/
|
||
/**
|
||
* Signed basis points stored as i32.
|
||
* 1 bp = 0.0001. Range: -214,748.3647 to +214,748.3647.
|
||
* Use for unbounded signed values (returns, growth rates, volatility, z-scores, etc.).
|
||
* `i32::MIN` is reserved as a NaN sentinel.
|
||
*
|
||
* @typedef {number} BasisPointsSigned32
|
||
*/
|
||
/**
|
||
* Bitcoin amount as floating point (1 BTC = 100,000,000 satoshis)
|
||
*
|
||
* @typedef {number} Bitcoin
|
||
*/
|
||
/**
|
||
* Position within a .blk file, encoding file index and byte offset
|
||
*
|
||
* @typedef {number} BlkPosition
|
||
*/
|
||
/**
|
||
* @typedef {Object} BlockCountParam
|
||
* @property {number} blockCount - Number of recent blocks to include
|
||
*/
|
||
/**
|
||
* A single block fees data point.
|
||
*
|
||
* @typedef {Object} BlockFeesEntry
|
||
* @property {Height} avgHeight
|
||
* @property {Timestamp} timestamp
|
||
* @property {Sats} avgFees
|
||
*/
|
||
/**
|
||
* Block hash
|
||
*
|
||
* @typedef {string} BlockHash
|
||
*/
|
||
/**
|
||
* @typedef {Object} BlockHashParam
|
||
* @property {BlockHash} hash
|
||
*/
|
||
/**
|
||
* @typedef {Object} BlockHashStartIndex
|
||
* @property {BlockHash} hash - Bitcoin block hash
|
||
* @property {TxIndex} startIndex - Starting transaction index within the block (0-based)
|
||
*/
|
||
/**
|
||
* @typedef {Object} BlockHashTxIndex
|
||
* @property {BlockHash} hash - Bitcoin block hash
|
||
* @property {TxIndex} index - Transaction index within the block (0-based)
|
||
*/
|
||
/**
|
||
* Block information returned by the API
|
||
*
|
||
* @typedef {Object} BlockInfo
|
||
* @property {BlockHash} id - Block hash
|
||
* @property {Height} height - Block height
|
||
* @property {number} txCount - Number of transactions in the block
|
||
* @property {number} size - Block size in bytes
|
||
* @property {Weight} weight - Block weight in weight units
|
||
* @property {Timestamp} timestamp - Block timestamp (Unix time)
|
||
* @property {number} difficulty - Block difficulty as a floating point number
|
||
*/
|
||
/**
|
||
* A single block rewards data point.
|
||
*
|
||
* @typedef {Object} BlockRewardsEntry
|
||
* @property {number} avgHeight
|
||
* @property {number} timestamp
|
||
* @property {number} avgRewards
|
||
*/
|
||
/**
|
||
* A single block size data point.
|
||
*
|
||
* @typedef {Object} BlockSizeEntry
|
||
* @property {number} avgHeight
|
||
* @property {number} timestamp
|
||
* @property {number} avgSize
|
||
*/
|
||
/**
|
||
* Combined block sizes and weights response.
|
||
*
|
||
* @typedef {Object} BlockSizesWeights
|
||
* @property {BlockSizeEntry[]} sizes
|
||
* @property {BlockWeightEntry[]} weights
|
||
*/
|
||
/**
|
||
* Block status indicating whether block is in the best chain
|
||
*
|
||
* @typedef {Object} BlockStatus
|
||
* @property {boolean} inBestChain - Whether this block is in the best chain
|
||
* @property {(Height|null)=} height - Block height (only if in best chain)
|
||
* @property {(BlockHash|null)=} nextBest - Hash of the next block in the best chain (only if in best chain and not tip)
|
||
*/
|
||
/**
|
||
* Block information returned for timestamp queries
|
||
*
|
||
* @typedef {Object} BlockTimestamp
|
||
* @property {Height} height - Block height
|
||
* @property {BlockHash} hash - Block hash
|
||
* @property {string} timestamp - Block timestamp in ISO 8601 format
|
||
*/
|
||
/**
|
||
* A single block weight data point.
|
||
*
|
||
* @typedef {Object} BlockWeightEntry
|
||
* @property {number} avgHeight
|
||
* @property {number} timestamp
|
||
* @property {number} avgWeight
|
||
*/
|
||
/**
|
||
* Unsigned cents (u64) - for values that should never be negative.
|
||
* Used for invested capital, realized cap, etc.
|
||
*
|
||
* @typedef {number} Cents
|
||
*/
|
||
/**
|
||
* Cents × Sats (u128) - price in cents multiplied by amount in sats.
|
||
* Uses u128 because large amounts at any price can overflow u64.
|
||
*
|
||
* @typedef {number} CentsSats
|
||
*/
|
||
/**
|
||
* Signed cents (i64) - for values that can be negative.
|
||
* Used for profit/loss calculations, deltas, etc.
|
||
*
|
||
* @typedef {number} CentsSigned
|
||
*/
|
||
/**
|
||
* 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
|
||
*
|
||
* @typedef {number} CentsSquaredSats
|
||
*/
|
||
/**
|
||
* Closing price value for a time period
|
||
*
|
||
* @typedef {Dollars} Close
|
||
*/
|
||
/**
|
||
* Cohort identifier for cost basis distribution.
|
||
*
|
||
* @typedef {string} Cohort
|
||
*/
|
||
/**
|
||
* 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).
|
||
*
|
||
* @typedef {("raw"|"lin200"|"lin500"|"lin1000"|"log10"|"log50"|"log100"|"log200")} CostBasisBucket
|
||
*/
|
||
/**
|
||
* Path parameters for cost basis dates endpoint.
|
||
*
|
||
* @typedef {Object} CostBasisCohortParam
|
||
* @property {Cohort} cohort
|
||
*/
|
||
/**
|
||
* Path parameters for cost basis distribution endpoint.
|
||
*
|
||
* @typedef {Object} CostBasisParams
|
||
* @property {Cohort} cohort
|
||
* @property {string} date
|
||
*/
|
||
/**
|
||
* Query parameters for cost basis distribution endpoint.
|
||
*
|
||
* @typedef {Object} CostBasisQuery
|
||
* @property {CostBasisBucket=} bucket - Bucket type for aggregation. Default: raw (no aggregation).
|
||
* @property {CostBasisValue=} value - Value type to return. Default: supply.
|
||
*/
|
||
/**
|
||
* Value type for cost basis distribution.
|
||
* Options: supply (BTC), realized (USD, price × supply), unrealized (USD, spot × supply).
|
||
*
|
||
* @typedef {("supply"|"realized"|"unrealized")} CostBasisValue
|
||
*/
|
||
/**
|
||
* Data range with output format for API query parameters
|
||
*
|
||
* @typedef {Object} DataRangeFormat
|
||
* @property {(RangeIndex|null)=} start - Inclusive start: integer index, date (YYYY-MM-DD), or timestamp (ISO 8601). Negative integers count from end. Aliases: `from`, `f`, `s`
|
||
* @property {(RangeIndex|null)=} end - Exclusive end: integer index, date (YYYY-MM-DD), or timestamp (ISO 8601). Negative integers count from end. Aliases: `to`, `t`, `e`
|
||
* @property {(Limit|null)=} limit - Maximum number of values to return (ignored if `end` is set). Aliases: `count`, `c`, `l`
|
||
* @property {Format=} format - Format of the output
|
||
*/
|
||
/**
|
||
* Date in YYYYMMDD format stored as u32
|
||
*
|
||
* @typedef {number} Date
|
||
*/
|
||
/** @typedef {number} Day1 */
|
||
/** @typedef {number} Day3 */
|
||
/**
|
||
* Detailed series count with per-database breakdown
|
||
*
|
||
* @typedef {Object} DetailedSeriesCount
|
||
* @property {number} distinctSeries - Number of unique series available (e.g., realized_price, market_cap)
|
||
* @property {number} totalEndpoints - Total number of series-index combinations across all timeframes
|
||
* @property {number} lazyEndpoints - Number of lazy (computed on-the-fly) series-index combinations
|
||
* @property {number} storedEndpoints - Number of eager (stored on disk) series-index combinations
|
||
* @property {{ [key: string]: SeriesCount }} byDb - Per-database breakdown of counts
|
||
*/
|
||
/**
|
||
* Difficulty adjustment information.
|
||
*
|
||
* @typedef {Object} DifficultyAdjustment
|
||
* @property {number} progressPercent - Progress through current difficulty epoch (0-100%)
|
||
* @property {number} difficultyChange - Estimated difficulty change at next retarget (%)
|
||
* @property {number} estimatedRetargetDate - Estimated Unix timestamp of next retarget
|
||
* @property {number} remainingBlocks - Blocks remaining until retarget
|
||
* @property {number} remainingTime - Estimated seconds until retarget
|
||
* @property {number} previousRetarget - Previous difficulty adjustment (%)
|
||
* @property {Height} nextRetargetHeight - Height of next retarget
|
||
* @property {number} timeAvg - Average block time in current epoch (seconds)
|
||
* @property {number} adjustedTimeAvg - Time-adjusted average (accounting for timestamp manipulation)
|
||
* @property {number} timeOffset - Time offset from expected schedule (seconds)
|
||
*/
|
||
/**
|
||
* A single difficulty adjustment entry.
|
||
* Serializes as array: [timestamp, height, difficulty, change_percent]
|
||
*
|
||
* @typedef {Object} DifficultyAdjustmentEntry
|
||
* @property {Timestamp} timestamp
|
||
* @property {Height} height
|
||
* @property {number} difficulty
|
||
* @property {number} changePercent
|
||
*/
|
||
/**
|
||
* A single difficulty data point.
|
||
*
|
||
* @typedef {Object} DifficultyEntry
|
||
* @property {Timestamp} timestamp - Unix timestamp of the difficulty adjustment.
|
||
* @property {number} difficulty - Difficulty value.
|
||
* @property {Height} height - Block height of the adjustment.
|
||
*/
|
||
/**
|
||
* Disk usage of the indexed data
|
||
*
|
||
* @typedef {Object} DiskUsage
|
||
* @property {string} brk - Human-readable brk data size (e.g., "48.8 GiB")
|
||
* @property {number} brkBytes - brk data size in bytes
|
||
* @property {string} bitcoin - Human-readable Bitcoin blocks directory size
|
||
* @property {number} bitcoinBytes - Bitcoin blocks directory size in bytes
|
||
* @property {number} ratio - brk as percentage of Bitcoin data
|
||
*/
|
||
/**
|
||
* US Dollar amount as floating point
|
||
*
|
||
* @typedef {number} Dollars
|
||
*/
|
||
/**
|
||
* Data of an empty address
|
||
*
|
||
* @typedef {Object} EmptyAddrData
|
||
* @property {number} txCount - Total transaction count
|
||
* @property {number} fundedTxoCount - Total funded/spent transaction output count (equal since address is empty)
|
||
* @property {Sats} transfered - Total satoshis transferred
|
||
*/
|
||
/** @typedef {TypeIndex} EmptyAddrIndex */
|
||
/** @typedef {TypeIndex} EmptyOutputIndex */
|
||
/** @typedef {number} Epoch */
|
||
/**
|
||
* @typedef {Object} ErrorBody
|
||
* @property {ErrorDetail} error
|
||
*/
|
||
/**
|
||
* @typedef {Object} ErrorDetail
|
||
* @property {string} type - Error category: "invalid_request", "forbidden", "not_found", "unavailable", or "internal"
|
||
* @property {string} code - Machine-readable error code (e.g. "invalid_addr", "series_not_found")
|
||
* @property {string} message - Human-readable description
|
||
* @property {string} docUrl - Link to API documentation
|
||
*/
|
||
/**
|
||
* Fee rate in sats/vB
|
||
*
|
||
* @typedef {number} FeeRate
|
||
*/
|
||
/**
|
||
* Output format for API responses
|
||
*
|
||
* @typedef {("json"|"csv")} Format
|
||
*/
|
||
/**
|
||
* Data for a funded (non-empty) address with current balance
|
||
*
|
||
* @typedef {Object} FundedAddrData
|
||
* @property {number} txCount - Total transaction count
|
||
* @property {number} fundedTxoCount - Number of transaction outputs funded to this address
|
||
* @property {number} spentTxoCount - Number of transaction outputs spent by this address
|
||
* @property {Sats} received - Satoshis received by this address
|
||
* @property {Sats} sent - Satoshis sent by this address
|
||
* @property {CentsSats} realizedCapRaw - The realized capitalization: Σ(price × sats)
|
||
* @property {CentsSquaredSats} investorCapRaw - The investor capitalization: Σ(price² × sats)
|
||
*/
|
||
/** @typedef {TypeIndex} FundedAddrIndex */
|
||
/** @typedef {number} Halving */
|
||
/**
|
||
* A single hashrate data point.
|
||
*
|
||
* @typedef {Object} HashrateEntry
|
||
* @property {Timestamp} timestamp - Unix timestamp.
|
||
* @property {number} avgHashrate - Average hashrate (H/s).
|
||
*/
|
||
/**
|
||
* Summary of network hashrate and difficulty data.
|
||
*
|
||
* @typedef {Object} HashrateSummary
|
||
* @property {HashrateEntry[]} hashrates - Historical hashrate data points.
|
||
* @property {DifficultyEntry[]} difficulty - Historical difficulty adjustments.
|
||
* @property {number} currentHashrate - Current network hashrate (H/s).
|
||
* @property {number} currentDifficulty - Current network difficulty.
|
||
*/
|
||
/**
|
||
* Server health status
|
||
*
|
||
* @typedef {Object} Health
|
||
* @property {string} status
|
||
* @property {string} service
|
||
* @property {string} version
|
||
* @property {string} timestamp
|
||
* @property {string} startedAt - Server start time (ISO 8601)
|
||
* @property {number} uptimeSeconds - Uptime in seconds
|
||
* @property {Height} indexedHeight - Height of the last indexed block
|
||
* @property {Height} computedHeight - Height of the last computed block (series)
|
||
* @property {Height} tipHeight - Height of the chain tip (from Bitcoin node)
|
||
* @property {Height} blocksBehind - Number of blocks behind the tip
|
||
* @property {string} lastIndexedAt - Human-readable timestamp of the last indexed block (ISO 8601)
|
||
* @property {Timestamp} lastIndexedAtUnix - Unix timestamp of the last indexed block
|
||
*/
|
||
/**
|
||
* Block height
|
||
*
|
||
* @typedef {number} Height
|
||
*/
|
||
/**
|
||
* @typedef {Object} HeightParam
|
||
* @property {Height} height
|
||
*/
|
||
/**
|
||
* Hex-encoded string
|
||
*
|
||
* @typedef {string} Hex
|
||
*/
|
||
/**
|
||
* Highest price value for a time period
|
||
*
|
||
* @typedef {Dollars} High
|
||
*/
|
||
/** @typedef {number} Hour1 */
|
||
/** @typedef {number} Hour12 */
|
||
/** @typedef {number} Hour4 */
|
||
/**
|
||
* Aggregation dimension for querying series. Includes time-based (date, week, month, year),
|
||
* block-based (height, tx_index), and address/output type indexes.
|
||
*
|
||
* @typedef {("minute10"|"minute30"|"hour1"|"hour4"|"hour12"|"day1"|"day3"|"week1"|"month1"|"month3"|"month6"|"year1"|"year10"|"halving"|"epoch"|"height"|"tx_index"|"txin_index"|"txout_index"|"empty_output_index"|"op_return_index"|"p2a_addr_index"|"p2ms_output_index"|"p2pk33_addr_index"|"p2pk65_addr_index"|"p2pkh_addr_index"|"p2sh_addr_index"|"p2tr_addr_index"|"p2wpkh_addr_index"|"p2wsh_addr_index"|"unknown_output_index"|"funded_addr_index"|"empty_addr_index")} Index
|
||
*/
|
||
/**
|
||
* Information about an available index and its query aliases
|
||
*
|
||
* @typedef {Object} IndexInfo
|
||
* @property {Index} index - The canonical index name
|
||
* @property {string[]} aliases - All Accepted query aliases
|
||
*/
|
||
/**
|
||
* Legacy path parameter for `/api/metric/{metric}`
|
||
*
|
||
* @typedef {Object} LegacySeriesParam
|
||
* @property {SeriesName} metric
|
||
*/
|
||
/**
|
||
* Legacy path parameters for `/api/metric/{metric}/{index}`
|
||
*
|
||
* @typedef {Object} LegacySeriesWithIndex
|
||
* @property {SeriesName} metric
|
||
* @property {Index} index
|
||
*/
|
||
/**
|
||
* Maximum number of results to return. Defaults to 100 if not specified.
|
||
*
|
||
* @typedef {number} Limit
|
||
*/
|
||
/**
|
||
* Lowest price value for a time period
|
||
*
|
||
* @typedef {Dollars} Low
|
||
*/
|
||
/**
|
||
* Block info in a mempool.space like format for fee estimation.
|
||
*
|
||
* @typedef {Object} MempoolBlock
|
||
* @property {number} blockSize - Total block size in weight units
|
||
* @property {number} blockVSize - Total block virtual size in vbytes
|
||
* @property {number} nTx - Number of transactions in the projected block
|
||
* @property {Sats} totalFees - Total fees in satoshis
|
||
* @property {FeeRate} medianFee - Median fee rate in sat/vB
|
||
* @property {FeeRate[]} feeRange - Fee rate range: [min, 10%, 25%, 50%, 75%, 90%, max]
|
||
*/
|
||
/**
|
||
* Mempool statistics
|
||
*
|
||
* @typedef {Object} MempoolInfo
|
||
* @property {number} count - Number of transactions in the mempool
|
||
* @property {VSize} vsize - Total virtual size of all transactions in the mempool (vbytes)
|
||
* @property {Sats} totalFee - Total fees of all transactions in the mempool (satoshis)
|
||
*/
|
||
/** @typedef {number} Minute10 */
|
||
/** @typedef {number} Minute30 */
|
||
/** @typedef {number} Month1 */
|
||
/** @typedef {number} Month3 */
|
||
/** @typedef {number} Month6 */
|
||
/**
|
||
* OHLC (Open, High, Low, Close) data in cents
|
||
*
|
||
* @typedef {Object} OHLCCents
|
||
* @property {Open} open
|
||
* @property {High} high
|
||
* @property {Low} low
|
||
* @property {Close} close
|
||
*/
|
||
/**
|
||
* OHLC (Open, High, Low, Close) data in dollars
|
||
*
|
||
* @typedef {Object} OHLCDollars
|
||
* @property {Open} open
|
||
* @property {High} high
|
||
* @property {Low} low
|
||
* @property {Close} close
|
||
*/
|
||
/**
|
||
* OHLC (Open, High, Low, Close) data in satoshis
|
||
*
|
||
* @typedef {Object} OHLCSats
|
||
* @property {Open} open
|
||
* @property {High} high
|
||
* @property {Low} low
|
||
* @property {Close} close
|
||
*/
|
||
/** @typedef {TypeIndex} OpReturnIndex */
|
||
/**
|
||
* Opening price value for a time period
|
||
*
|
||
* @typedef {Dollars} Open
|
||
*/
|
||
/** @typedef {number} OutPoint */
|
||
/**
|
||
* Type (P2PKH, P2WPKH, P2SH, P2TR, etc.)
|
||
*
|
||
* @typedef {("p2pk65"|"p2pk33"|"p2pkh"|"p2ms"|"p2sh"|"opreturn"|"p2wpkh"|"p2wsh"|"p2tr"|"p2a"|"empty"|"unknown")} OutputType
|
||
*/
|
||
/** @typedef {TypeIndex} P2AAddrIndex */
|
||
/** @typedef {U8x2} P2ABytes */
|
||
/** @typedef {TypeIndex} P2MSOutputIndex */
|
||
/** @typedef {TypeIndex} P2PK33AddrIndex */
|
||
/** @typedef {U8x33} P2PK33Bytes */
|
||
/** @typedef {TypeIndex} P2PK65AddrIndex */
|
||
/** @typedef {U8x65} P2PK65Bytes */
|
||
/** @typedef {TypeIndex} P2PKHAddrIndex */
|
||
/** @typedef {U8x20} P2PKHBytes */
|
||
/** @typedef {TypeIndex} P2SHAddrIndex */
|
||
/** @typedef {U8x20} P2SHBytes */
|
||
/** @typedef {TypeIndex} P2TRAddrIndex */
|
||
/** @typedef {U8x32} P2TRBytes */
|
||
/** @typedef {TypeIndex} P2WPKHAddrIndex */
|
||
/** @typedef {U8x20} P2WPKHBytes */
|
||
/** @typedef {TypeIndex} P2WSHAddrIndex */
|
||
/** @typedef {U8x32} P2WSHBytes */
|
||
/**
|
||
* A paginated list of available series names (1000 per page)
|
||
*
|
||
* @typedef {Object} PaginatedSeries
|
||
* @property {number} currentPage - Current page number (0-indexed)
|
||
* @property {number} maxPage - Maximum valid page index (0-indexed)
|
||
* @property {number} totalCount - Total number of series
|
||
* @property {number} perPage - Results per page
|
||
* @property {boolean} hasMore - Whether more pages are available after the current one
|
||
* @property {string[]} series - List of series names
|
||
*/
|
||
/**
|
||
* Pagination parameters for paginated API endpoints
|
||
*
|
||
* @typedef {Object} Pagination
|
||
* @property {?number=} page - Pagination index
|
||
* @property {?number=} perPage - Results per page (default: 1000, max: 1000)
|
||
*/
|
||
/**
|
||
* Block counts for different time periods
|
||
*
|
||
* @typedef {Object} PoolBlockCounts
|
||
* @property {number} all - Total blocks mined (all time)
|
||
* @property {number} _24h - Blocks mined in last 24 hours
|
||
* @property {number} _1w - Blocks mined in last week
|
||
*/
|
||
/**
|
||
* Pool's share of total blocks for different time periods
|
||
*
|
||
* @typedef {Object} PoolBlockShares
|
||
* @property {number} all - Share of all blocks (0.0 - 1.0)
|
||
* @property {number} _24h - Share of blocks in last 24 hours
|
||
* @property {number} _1w - Share of blocks in last week
|
||
*/
|
||
/**
|
||
* Detailed pool information with statistics across time periods
|
||
*
|
||
* @typedef {Object} PoolDetail
|
||
* @property {PoolDetailInfo} pool - Pool information
|
||
* @property {PoolBlockCounts} blockCount - Block counts for different time periods
|
||
* @property {PoolBlockShares} blockShare - Pool's share of total blocks for different time periods
|
||
* @property {number} estimatedHashrate - Estimated hashrate based on blocks mined
|
||
* @property {?number=} reportedHashrate - Self-reported hashrate (if available)
|
||
*/
|
||
/**
|
||
* Pool information for detail view
|
||
*
|
||
* @typedef {Object} PoolDetailInfo
|
||
* @property {number} id - Unique pool identifier
|
||
* @property {string} name - Pool name
|
||
* @property {string} link - Pool website URL
|
||
* @property {string[]} addrs - Known payout addresses
|
||
* @property {string[]} regexes - Coinbase tag patterns (regexes)
|
||
* @property {PoolSlug} slug - URL-friendly pool identifier
|
||
*/
|
||
/**
|
||
* Basic pool information for listing all pools
|
||
*
|
||
* @typedef {Object} PoolInfo
|
||
* @property {string} name - Pool name
|
||
* @property {PoolSlug} slug - URL-friendly pool identifier
|
||
* @property {number} uniqueId - Unique numeric pool identifier
|
||
*/
|
||
/** @typedef {("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"|"bitcoinindiapool"|"ekanembtc"|"canoe"|"tiger"|"onem1x"|"zulupool"|"secpool"|"ocean"|"whitepool"|"wiz"|"wk057"|"futurebitapollosolo"|"carbonnegative"|"portlandhodl"|"phoenix"|"neopool"|"maxipool"|"bitfufupool"|"gdpool"|"miningdutch"|"publicpool"|"miningsquared"|"innopolistech"|"btclab"|"parasite"|"redrockpool"|"est3lar")} PoolSlug */
|
||
/**
|
||
* @typedef {Object} PoolSlugParam
|
||
* @property {PoolSlug} slug
|
||
*/
|
||
/**
|
||
* Mining pool with block statistics for a time period
|
||
*
|
||
* @typedef {Object} PoolStats
|
||
* @property {number} poolId - Unique pool identifier
|
||
* @property {string} name - Pool name
|
||
* @property {string} link - Pool website URL
|
||
* @property {number} blockCount - Number of blocks mined in the time period
|
||
* @property {number} rank - Pool ranking by block count (1 = most blocks)
|
||
* @property {number} emptyBlocks - Number of empty blocks mined
|
||
* @property {PoolSlug} slug - URL-friendly pool identifier
|
||
* @property {number} share - Pool's share of total blocks (0.0 - 1.0)
|
||
*/
|
||
/**
|
||
* Mining pools response for a time period
|
||
*
|
||
* @typedef {Object} PoolsSummary
|
||
* @property {PoolStats[]} pools - List of pools sorted by block count descending
|
||
* @property {number} blockCount - Total blocks in the time period
|
||
* @property {number} lastEstimatedHashrate - Estimated network hashrate (hashes per second)
|
||
*/
|
||
/**
|
||
* A range boundary: integer index, date, or timestamp.
|
||
*
|
||
* @typedef {(number|Date|Timestamp)} RangeIndex
|
||
*/
|
||
/**
|
||
* Transaction locktime
|
||
*
|
||
* @typedef {number} RawLockTime
|
||
*/
|
||
/**
|
||
* Recommended fee rates in sat/vB
|
||
*
|
||
* @typedef {Object} RecommendedFees
|
||
* @property {FeeRate} fastestFee - Fee rate for fastest confirmation (next block)
|
||
* @property {FeeRate} halfHourFee - Fee rate for confirmation within ~30 minutes (3 blocks)
|
||
* @property {FeeRate} hourFee - Fee rate for confirmation within ~1 hour (6 blocks)
|
||
* @property {FeeRate} economyFee - Fee rate for economical confirmation
|
||
* @property {FeeRate} minimumFee - Minimum relay fee rate
|
||
*/
|
||
/**
|
||
* Block reward statistics over a range of blocks
|
||
*
|
||
* @typedef {Object} RewardStats
|
||
* @property {Height} startBlock - First block in the range
|
||
* @property {Height} endBlock - Last block in the range
|
||
* @property {Sats} totalReward
|
||
* @property {Sats} totalFee
|
||
* @property {number} totalTx
|
||
*/
|
||
/**
|
||
* Satoshis
|
||
*
|
||
* @typedef {number} Sats
|
||
*/
|
||
/**
|
||
* 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)
|
||
*
|
||
* @typedef {number} SatsFract
|
||
*/
|
||
/**
|
||
* Signed satoshis (i64) - for values that can be negative.
|
||
* Used for changes, deltas, profit/loss calculations, etc.
|
||
*
|
||
* @typedef {number} SatsSigned
|
||
*/
|
||
/**
|
||
* @typedef {Object} SearchQuery
|
||
* @property {SeriesName} q - Search query string
|
||
* @property {Limit=} limit - Maximum number of results
|
||
*/
|
||
/**
|
||
* Series count statistics - distinct series and total series-index combinations
|
||
*
|
||
* @typedef {Object} SeriesCount
|
||
* @property {number} distinctSeries - Number of unique series available (e.g., realized_price, market_cap)
|
||
* @property {number} totalEndpoints - Total number of series-index combinations across all timeframes
|
||
* @property {number} lazyEndpoints - Number of lazy (computed on-the-fly) series-index combinations
|
||
* @property {number} storedEndpoints - Number of eager (stored on disk) series-index combinations
|
||
*/
|
||
/**
|
||
* Metadata about a series
|
||
*
|
||
* @typedef {Object} SeriesInfo
|
||
* @property {Index[]} indexes - Available indexes
|
||
* @property {string} type - Value type (e.g. "f32", "u64", "Sats")
|
||
*/
|
||
/**
|
||
* SeriesLeaf with JSON Schema for client generation
|
||
*
|
||
* @typedef {Object} SeriesLeafWithSchema
|
||
* @property {string} name - The series name/identifier
|
||
* @property {string} kind - The Rust type (e.g., "Sats", "StoredF64")
|
||
* @property {Index[]} indexes - Available indexes for this series
|
||
* @property {string} type - JSON Schema type (e.g., "integer", "number", "string", "boolean", "array", "object")
|
||
*/
|
||
/**
|
||
* Comma-separated list of series names
|
||
*
|
||
* @typedef {string} SeriesList
|
||
*/
|
||
/**
|
||
* Series name
|
||
*
|
||
* @typedef {string} SeriesName
|
||
*/
|
||
/**
|
||
* @typedef {Object} SeriesNameWithIndex
|
||
* @property {SeriesName} series - Series name
|
||
* @property {Index} index - Aggregation index
|
||
*/
|
||
/**
|
||
* @typedef {Object} SeriesParam
|
||
* @property {SeriesName} series
|
||
*/
|
||
/**
|
||
* Selection of series to query
|
||
*
|
||
* @typedef {Object} SeriesSelection
|
||
* @property {SeriesList} series - Requested series
|
||
* @property {Index} index - Index to query
|
||
* @property {(RangeIndex|null)=} start - Inclusive start: integer index, date (YYYY-MM-DD), or timestamp (ISO 8601). Negative integers count from end. Aliases: `from`, `f`, `s`
|
||
* @property {(RangeIndex|null)=} end - Exclusive end: integer index, date (YYYY-MM-DD), or timestamp (ISO 8601). Negative integers count from end. Aliases: `to`, `t`, `e`
|
||
* @property {(Limit|null)=} limit - Maximum number of values to return (ignored if `end` is set). Aliases: `count`, `c`, `l`
|
||
* @property {Format=} format - Format of the output
|
||
*/
|
||
/**
|
||
* Legacy series selection parameters (deprecated)
|
||
*
|
||
* @typedef {Object} SeriesSelectionLegacy
|
||
* @property {Index} index
|
||
* @property {SeriesList} ids
|
||
* @property {(RangeIndex|null)=} start - Inclusive start: integer index, date (YYYY-MM-DD), or timestamp (ISO 8601). Negative integers count from end. Aliases: `from`, `f`, `s`
|
||
* @property {(RangeIndex|null)=} end - Exclusive end: integer index, date (YYYY-MM-DD), or timestamp (ISO 8601). Negative integers count from end. Aliases: `to`, `t`, `e`
|
||
* @property {(Limit|null)=} limit - Maximum number of values to return (ignored if `end` is set). Aliases: `count`, `c`, `l`
|
||
* @property {Format=} format - Format of the output
|
||
*/
|
||
/** @typedef {boolean} StoredBool */
|
||
/**
|
||
* Stored 32-bit floating point value
|
||
*
|
||
* @typedef {number} StoredF32
|
||
*/
|
||
/**
|
||
* Fixed-size 64-bit floating point value optimized for on-disk storage
|
||
*
|
||
* @typedef {number} StoredF64
|
||
*/
|
||
/**
|
||
* Fixed-size 64-bit signed integer optimized for on-disk storage
|
||
*
|
||
* @typedef {number} StoredI64
|
||
*/
|
||
/** @typedef {number} StoredI8 */
|
||
/** @typedef {number} StoredU16 */
|
||
/**
|
||
* Fixed-size 32-bit unsigned integer optimized for on-disk storage
|
||
*
|
||
* @typedef {number} StoredU32
|
||
*/
|
||
/**
|
||
* Fixed-size 64-bit unsigned integer optimized for on-disk storage
|
||
*
|
||
* @typedef {number} StoredU64
|
||
*/
|
||
/**
|
||
* Current supply state tracking UTXO count and total value
|
||
*
|
||
* @typedef {Object} SupplyState
|
||
* @property {number} utxoCount - Number of unspent transaction outputs
|
||
* @property {Sats} value - Total value in satoshis
|
||
*/
|
||
/**
|
||
* Sync status of the indexer
|
||
*
|
||
* @typedef {Object} SyncStatus
|
||
* @property {Height} indexedHeight - Height of the last indexed block
|
||
* @property {Height} computedHeight - Height of the last computed block (series)
|
||
* @property {Height} tipHeight - Height of the chain tip (from Bitcoin node)
|
||
* @property {Height} blocksBehind - Number of blocks behind the tip
|
||
* @property {string} lastIndexedAt - Human-readable timestamp of the last indexed block (ISO 8601)
|
||
* @property {Timestamp} lastIndexedAtUnix - Unix timestamp of the last indexed block
|
||
*/
|
||
/**
|
||
* Time period for mining statistics.
|
||
*
|
||
* Used to specify the lookback window for pool statistics, hashrate calculations,
|
||
* and other time-based mining series.
|
||
*
|
||
* @typedef {("24h"|"3d"|"1w"|"1m"|"3m"|"6m"|"1y"|"2y"|"3y")} TimePeriod
|
||
*/
|
||
/**
|
||
* @typedef {Object} TimePeriodParam
|
||
* @property {TimePeriod} timePeriod
|
||
*/
|
||
/**
|
||
* UNIX timestamp in seconds
|
||
*
|
||
* @typedef {number} Timestamp
|
||
*/
|
||
/**
|
||
* @typedef {Object} TimestampParam
|
||
* @property {Timestamp} timestamp
|
||
*/
|
||
/**
|
||
* Transaction information compatible with mempool.space API format
|
||
*
|
||
* @typedef {Object} Transaction
|
||
* @property {(TxIndex|null)=} index
|
||
* @property {Txid} txid
|
||
* @property {TxVersion} version
|
||
* @property {RawLockTime} locktime
|
||
* @property {number} size - Transaction size in bytes
|
||
* @property {Weight} weight - Transaction weight
|
||
* @property {number} sigops - Number of signature operations
|
||
* @property {Sats} fee - Transaction fee in satoshis
|
||
* @property {TxIn[]} vin - Transaction inputs
|
||
* @property {TxOut[]} vout - Transaction outputs
|
||
* @property {TxStatus} status
|
||
*/
|
||
/**
|
||
* Hierarchical tree node for organizing series into categories
|
||
*
|
||
* @typedef {({ [key: string]: TreeNode }|SeriesLeafWithSchema)} TreeNode
|
||
*/
|
||
/**
|
||
* Transaction input
|
||
*
|
||
* @typedef {Object} TxIn
|
||
* @property {Txid} txid - Transaction ID of the output being spent
|
||
* @property {Vout} vout
|
||
* @property {(TxOut|null)=} prevout - Information about the previous output being spent
|
||
* @property {string} scriptsig - Signature script (for non-SegWit inputs)
|
||
* @property {string} scriptsigAsm - Signature script in assembly format
|
||
* @property {boolean} isCoinbase - Whether this input is a coinbase (block reward) input
|
||
* @property {number} sequence - Input sequence number
|
||
* @property {?string=} innerRedeemscriptAsm - Inner redeemscript in assembly format (for P2SH-wrapped SegWit)
|
||
*/
|
||
/** @typedef {number} TxInIndex */
|
||
/** @typedef {number} TxIndex */
|
||
/**
|
||
* Transaction output
|
||
*
|
||
* @typedef {Object} TxOut
|
||
* @property {string} scriptpubkey - Script pubkey (locking script)
|
||
* @property {Sats} value - Value of the output in satoshis
|
||
*/
|
||
/** @typedef {number} TxOutIndex */
|
||
/**
|
||
* Status of an output indicating whether it has been spent
|
||
*
|
||
* @typedef {Object} TxOutspend
|
||
* @property {boolean} spent - Whether the output has been spent
|
||
* @property {(Txid|null)=} txid - Transaction ID of the spending transaction (only present if spent)
|
||
* @property {(Vin|null)=} vin - Input index in the spending transaction (only present if spent)
|
||
* @property {(TxStatus|null)=} status - Status of the spending transaction (only present if spent)
|
||
*/
|
||
/**
|
||
* Transaction confirmation status
|
||
*
|
||
* @typedef {Object} TxStatus
|
||
* @property {boolean} confirmed - Whether the transaction is confirmed
|
||
* @property {(Height|null)=} blockHeight - Block height (only present if confirmed)
|
||
* @property {(BlockHash|null)=} blockHash - Block hash (only present if confirmed)
|
||
* @property {(Timestamp|null)=} blockTime - Block timestamp (only present if confirmed)
|
||
*/
|
||
/**
|
||
* Transaction version number
|
||
*
|
||
* @typedef {number} TxVersion
|
||
*/
|
||
/**
|
||
* Transaction ID (hash)
|
||
*
|
||
* @typedef {string} Txid
|
||
*/
|
||
/**
|
||
* @typedef {Object} TxidParam
|
||
* @property {Txid} txid
|
||
*/
|
||
/**
|
||
* Transaction output reference (txid + output index)
|
||
*
|
||
* @typedef {Object} TxidVout
|
||
* @property {Txid} txid - Transaction ID
|
||
* @property {Vout} vout - Output index
|
||
*/
|
||
/**
|
||
* Index within its type (e.g., 0 for first P2WPKH address)
|
||
*
|
||
* @typedef {number} TypeIndex
|
||
*/
|
||
/** @typedef {number[]} U8x2 */
|
||
/** @typedef {number[]} U8x20 */
|
||
/** @typedef {number[]} U8x32 */
|
||
/** @typedef {number[]} U8x33 */
|
||
/** @typedef {number[]} U8x65 */
|
||
/** @typedef {TypeIndex} UnknownOutputIndex */
|
||
/**
|
||
* Unspent transaction output
|
||
*
|
||
* @typedef {Object} Utxo
|
||
* @property {Txid} txid
|
||
* @property {Vout} vout
|
||
* @property {TxStatus} status
|
||
* @property {Sats} value
|
||
*/
|
||
/**
|
||
* Virtual size in vbytes (weight / 4, rounded up)
|
||
*
|
||
* @typedef {number} VSize
|
||
*/
|
||
/**
|
||
* @typedef {Object} ValidateAddrParam
|
||
* @property {string} address - Bitcoin address to validate (can be any string)
|
||
*/
|
||
/**
|
||
* Version tracking for data schema and computed values.
|
||
*
|
||
* Used to detect when stored data needs to be recomputed due to changes
|
||
* in computation logic or source data versions. Supports validation
|
||
* against persisted versions to ensure compatibility.
|
||
*
|
||
* @typedef {number} Version
|
||
*/
|
||
/**
|
||
* Input index in the spending transaction
|
||
*
|
||
* @typedef {number} Vin
|
||
*/
|
||
/**
|
||
* Index of the output being spent in the previous transaction
|
||
*
|
||
* @typedef {number} Vout
|
||
*/
|
||
/** @typedef {number} Week1 */
|
||
/**
|
||
* Transaction or block weight in weight units (WU)
|
||
*
|
||
* @typedef {number} Weight
|
||
*/
|
||
/** @typedef {number} Year1 */
|
||
/** @typedef {number} Year10 */
|
||
|
||
/**
|
||
* @typedef {Object} BrkClientOptions
|
||
* @property {string} baseUrl - Base URL for the API
|
||
* @property {number} [timeout] - Request timeout in milliseconds
|
||
* @property {string|boolean} [cache] - Enable browser cache with default name (true), custom name (string), or disable (false). No effect in Node.js. Default: true
|
||
*/
|
||
|
||
const _isBrowser = typeof window !== 'undefined' && 'caches' in window;
|
||
const _runIdle = (/** @type {VoidFunction} */ fn) => (globalThis.requestIdleCallback ?? setTimeout)(fn);
|
||
const _defaultCacheName = '__BRK_CLIENT__';
|
||
|
||
/**
|
||
* @param {string|boolean|undefined} cache
|
||
* @returns {Promise<Cache | null>}
|
||
*/
|
||
const _openCache = (cache) => {
|
||
if (!_isBrowser || cache === false) return Promise.resolve(null);
|
||
const name = typeof cache === 'string' ? cache : _defaultCacheName;
|
||
return caches.open(name).catch(() => null);
|
||
};
|
||
|
||
/**
|
||
* Custom error class for BRK client errors
|
||
*/
|
||
class BrkError extends Error {
|
||
/**
|
||
* @param {string} message
|
||
* @param {number} [status]
|
||
*/
|
||
constructor(message, status) {
|
||
super(message);
|
||
this.name = 'BrkError';
|
||
this.status = status;
|
||
}
|
||
}
|
||
|
||
// Date conversion constants and helpers
|
||
const _GENESIS = new Date(2009, 0, 3); // day1 0, week1 0
|
||
const _DAY_ONE = new Date(2009, 0, 9); // day1 1 (6 day gap after genesis)
|
||
const _MS_PER_DAY = 86400000;
|
||
const _MS_PER_WEEK = 7 * _MS_PER_DAY;
|
||
const _EPOCH_MS = 1230768000000;
|
||
const _DATE_INDEXES = new Set([
|
||
'minute10', 'minute30',
|
||
'hour1', 'hour4', 'hour12',
|
||
'day1', 'day3', 'week1',
|
||
'month1', 'month3', 'month6',
|
||
'year1', 'year10',
|
||
]);
|
||
|
||
/** @param {number} months @returns {globalThis.Date} */
|
||
const _addMonths = (months) => new Date(2009, months, 1);
|
||
|
||
/**
|
||
* Convert an index value to a Date for date-based indexes.
|
||
* @param {Index} index - The index type
|
||
* @param {number} i - The index value
|
||
* @returns {globalThis.Date}
|
||
*/
|
||
function indexToDate(index, i) {
|
||
switch (index) {
|
||
case 'minute10': return new Date(_EPOCH_MS + i * 600000);
|
||
case 'minute30': return new Date(_EPOCH_MS + i * 1800000);
|
||
case 'hour1': return new Date(_EPOCH_MS + i * 3600000);
|
||
case 'hour4': return new Date(_EPOCH_MS + i * 14400000);
|
||
case 'hour12': return new Date(_EPOCH_MS + i * 43200000);
|
||
case 'day1': return i === 0 ? _GENESIS : new Date(_DAY_ONE.getTime() + (i - 1) * _MS_PER_DAY);
|
||
case 'day3': return new Date(_EPOCH_MS - 86400000 + i * 259200000);
|
||
case 'week1': return new Date(_GENESIS.getTime() + i * _MS_PER_WEEK);
|
||
case 'month1': return _addMonths(i);
|
||
case 'month3': return _addMonths(i * 3);
|
||
case 'month6': return _addMonths(i * 6);
|
||
case 'year1': return new Date(2009 + i, 0, 1);
|
||
case 'year10': return new Date(2009 + i * 10, 0, 1);
|
||
default: throw new Error(`${index} is not a date-based index`);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Convert a Date to an index value for date-based indexes.
|
||
* Returns the floor index (latest index whose date is <= the given date).
|
||
* @param {Index} index - The index type
|
||
* @param {globalThis.Date} d - The date to convert
|
||
* @returns {number}
|
||
*/
|
||
function dateToIndex(index, d) {
|
||
const ms = d.getTime();
|
||
switch (index) {
|
||
case 'minute10': return Math.floor((ms - _EPOCH_MS) / 600000);
|
||
case 'minute30': return Math.floor((ms - _EPOCH_MS) / 1800000);
|
||
case 'hour1': return Math.floor((ms - _EPOCH_MS) / 3600000);
|
||
case 'hour4': return Math.floor((ms - _EPOCH_MS) / 14400000);
|
||
case 'hour12': return Math.floor((ms - _EPOCH_MS) / 43200000);
|
||
case 'day1': {
|
||
if (ms < _DAY_ONE.getTime()) return 0;
|
||
return 1 + Math.floor((ms - _DAY_ONE.getTime()) / _MS_PER_DAY);
|
||
}
|
||
case 'day3': return Math.floor((ms - _EPOCH_MS + 86400000) / 259200000);
|
||
case 'week1': return Math.floor((ms - _GENESIS.getTime()) / _MS_PER_WEEK);
|
||
case 'month1': return (d.getFullYear() - 2009) * 12 + d.getMonth();
|
||
case 'month3': return (d.getFullYear() - 2009) * 4 + Math.floor(d.getMonth() / 3);
|
||
case 'month6': return (d.getFullYear() - 2009) * 2 + Math.floor(d.getMonth() / 6);
|
||
case 'year1': return d.getFullYear() - 2009;
|
||
case 'year10': return Math.floor((d.getFullYear() - 2009) / 10);
|
||
default: throw new Error(`${index} is not a date-based index`);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Wrap raw series data with helper methods.
|
||
* @template T
|
||
* @param {SeriesData<T>} raw - Raw JSON response
|
||
* @returns {DateSeriesData<T>}
|
||
*/
|
||
function _wrapSeriesData(raw) {
|
||
const { index, start, end, data } = raw;
|
||
const _dateBased = _DATE_INDEXES.has(index);
|
||
return /** @type {DateSeriesData<T>} */ ({
|
||
...raw,
|
||
isDateBased: _dateBased,
|
||
indexes() {
|
||
/** @type {number[]} */
|
||
const result = [];
|
||
for (let i = start; i < end; i++) result.push(i);
|
||
return result;
|
||
},
|
||
keys() {
|
||
return this.indexes();
|
||
},
|
||
entries() {
|
||
/** @type {Array<[number, T]>} */
|
||
const result = [];
|
||
for (let i = 0; i < data.length; i++) result.push([start + i, data[i]]);
|
||
return result;
|
||
},
|
||
toMap() {
|
||
/** @type {Map<number, T>} */
|
||
const map = new Map();
|
||
for (let i = 0; i < data.length; i++) map.set(start + i, data[i]);
|
||
return map;
|
||
},
|
||
*[Symbol.iterator]() {
|
||
for (let i = 0; i < data.length; i++) yield /** @type {[number, T]} */ ([start + i, data[i]]);
|
||
},
|
||
// DateSeriesData methods (only meaningful for date-based indexes)
|
||
dates() {
|
||
/** @type {globalThis.Date[]} */
|
||
const result = [];
|
||
for (let i = start; i < end; i++) result.push(indexToDate(index, i));
|
||
return result;
|
||
},
|
||
dateEntries() {
|
||
/** @type {Array<[globalThis.Date, T]>} */
|
||
const result = [];
|
||
for (let i = 0; i < data.length; i++) result.push([indexToDate(index, start + i), data[i]]);
|
||
return result;
|
||
},
|
||
toDateMap() {
|
||
/** @type {Map<globalThis.Date, T>} */
|
||
const map = new Map();
|
||
for (let i = 0; i < data.length; i++) map.set(indexToDate(index, start + i), data[i]);
|
||
return map;
|
||
},
|
||
});
|
||
}
|
||
|
||
/**
|
||
* @template T
|
||
* @typedef {Object} SeriesDataBase
|
||
* @property {number} version - Version of the series data
|
||
* @property {Index} index - The index type used for this query
|
||
* @property {string} type - Value type (e.g. "f32", "u64", "Sats")
|
||
* @property {number} total - Total number of data points
|
||
* @property {number} start - Start index (inclusive)
|
||
* @property {number} end - End index (exclusive)
|
||
* @property {string} stamp - ISO 8601 timestamp of when the response was generated
|
||
* @property {T[]} data - The series data
|
||
* @property {boolean} isDateBased - Whether this series uses a date-based index
|
||
* @property {() => number[]} indexes - Get index numbers
|
||
* @property {() => number[]} keys - Get keys as index numbers (alias for indexes)
|
||
* @property {() => Array<[number, T]>} entries - Get [index, value] pairs
|
||
* @property {() => Map<number, T>} toMap - Convert to Map<index, value>
|
||
*/
|
||
|
||
/** @template T @typedef {SeriesDataBase<T> & Iterable<[number, T]>} SeriesData */
|
||
|
||
/**
|
||
* @template T
|
||
* @typedef {Object} DateSeriesDataExtras
|
||
* @property {() => globalThis.Date[]} dates - Get dates for each data point
|
||
* @property {() => Array<[globalThis.Date, T]>} dateEntries - Get [date, value] pairs
|
||
* @property {() => Map<globalThis.Date, T>} toDateMap - Convert to Map<date, value>
|
||
*/
|
||
|
||
/** @template T @typedef {SeriesData<T> & DateSeriesDataExtras<T>} DateSeriesData */
|
||
/** @typedef {SeriesData<any>} AnySeriesData */
|
||
|
||
/** @template T @typedef {(onfulfilled?: (value: SeriesData<T>) => any, onrejected?: (reason: Error) => never) => Promise<SeriesData<T>>} Thenable */
|
||
/** @template T @typedef {(onfulfilled?: (value: DateSeriesData<T>) => any, onrejected?: (reason: Error) => never) => Promise<DateSeriesData<T>>} DateThenable */
|
||
|
||
/**
|
||
* @template T
|
||
* @typedef {Object} SeriesEndpoint
|
||
* @property {(index: number) => SingleItemBuilder<T>} get - Get single item at index
|
||
* @property {(start?: number, end?: number) => RangeBuilder<T>} slice - Slice by index
|
||
* @property {(n: number) => RangeBuilder<T>} first - Get first n items
|
||
* @property {(n: number) => RangeBuilder<T>} last - Get last n items
|
||
* @property {(n: number) => SkippedBuilder<T>} skip - Skip first n items, chain with take()
|
||
* @property {(onUpdate?: (value: SeriesData<T>) => void) => Promise<SeriesData<T>>} fetch - Fetch all data
|
||
* @property {() => Promise<string>} fetchCsv - Fetch all data as CSV
|
||
* @property {Thenable<T>} then - Thenable (await endpoint)
|
||
* @property {string} path - The endpoint path
|
||
*/
|
||
|
||
/**
|
||
* @template T
|
||
* @typedef {Object} DateSeriesEndpoint
|
||
* @property {(index: number | globalThis.Date) => DateSingleItemBuilder<T>} get - Get single item at index or Date
|
||
* @property {(start?: number | globalThis.Date, end?: number | globalThis.Date) => DateRangeBuilder<T>} slice - Slice by index or Date
|
||
* @property {(n: number) => DateRangeBuilder<T>} first - Get first n items
|
||
* @property {(n: number) => DateRangeBuilder<T>} last - Get last n items
|
||
* @property {(n: number) => DateSkippedBuilder<T>} skip - Skip first n items, chain with take()
|
||
* @property {(onUpdate?: (value: DateSeriesData<T>) => void) => Promise<DateSeriesData<T>>} fetch - Fetch all data
|
||
* @property {() => Promise<string>} fetchCsv - Fetch all data as CSV
|
||
* @property {DateThenable<T>} then - Thenable (await endpoint)
|
||
* @property {string} path - The endpoint path
|
||
*/
|
||
|
||
/** @typedef {SeriesEndpoint<any>} AnySeriesEndpoint */
|
||
|
||
/** @template T @typedef {Object} SingleItemBuilder
|
||
* @property {(onUpdate?: (value: SeriesData<T>) => void) => Promise<SeriesData<T>>} fetch - Fetch the item
|
||
* @property {() => Promise<string>} fetchCsv - Fetch as CSV
|
||
* @property {Thenable<T>} then - Thenable
|
||
*/
|
||
|
||
/** @template T @typedef {Object} DateSingleItemBuilder
|
||
* @property {(onUpdate?: (value: DateSeriesData<T>) => void) => Promise<DateSeriesData<T>>} fetch - Fetch the item
|
||
* @property {() => Promise<string>} fetchCsv - Fetch as CSV
|
||
* @property {DateThenable<T>} then - Thenable
|
||
*/
|
||
|
||
/** @template T @typedef {Object} SkippedBuilder
|
||
* @property {(n: number) => RangeBuilder<T>} take - Take n items after skipped position
|
||
* @property {(onUpdate?: (value: SeriesData<T>) => void) => Promise<SeriesData<T>>} fetch - Fetch from skipped position to end
|
||
* @property {() => Promise<string>} fetchCsv - Fetch as CSV
|
||
* @property {Thenable<T>} then - Thenable
|
||
*/
|
||
|
||
/** @template T @typedef {Object} DateSkippedBuilder
|
||
* @property {(n: number) => DateRangeBuilder<T>} take - Take n items after skipped position
|
||
* @property {(onUpdate?: (value: DateSeriesData<T>) => void) => Promise<DateSeriesData<T>>} fetch - Fetch from skipped position to end
|
||
* @property {() => Promise<string>} fetchCsv - Fetch as CSV
|
||
* @property {DateThenable<T>} then - Thenable
|
||
*/
|
||
|
||
/** @template T @typedef {Object} RangeBuilder
|
||
* @property {(onUpdate?: (value: SeriesData<T>) => void) => Promise<SeriesData<T>>} fetch - Fetch the range
|
||
* @property {() => Promise<string>} fetchCsv - Fetch as CSV
|
||
* @property {Thenable<T>} then - Thenable
|
||
*/
|
||
|
||
/** @template T @typedef {Object} DateRangeBuilder
|
||
* @property {(onUpdate?: (value: DateSeriesData<T>) => void) => Promise<DateSeriesData<T>>} fetch - Fetch the range
|
||
* @property {() => Promise<string>} fetchCsv - Fetch as CSV
|
||
* @property {DateThenable<T>} then - Thenable
|
||
*/
|
||
|
||
/**
|
||
* @template T
|
||
* @typedef {Object} SeriesPattern
|
||
* @property {string} name - The series name
|
||
* @property {Readonly<Partial<Record<Index, SeriesEndpoint<T>>>>} by - Index endpoints as lazy getters
|
||
* @property {() => readonly Index[]} indexes - Get the list of available indexes
|
||
* @property {(index: Index) => SeriesEndpoint<T>|undefined} get - Get an endpoint for a specific index
|
||
*/
|
||
|
||
/** @typedef {SeriesPattern<any>} AnySeriesPattern */
|
||
|
||
/**
|
||
* Create a series endpoint builder with typestate pattern.
|
||
* @template T
|
||
* @param {BrkClientBase} client
|
||
* @param {string} name - The series vec name
|
||
* @param {Index} index - The index name
|
||
* @returns {DateSeriesEndpoint<T>}
|
||
*/
|
||
function _endpoint(client, name, index) {
|
||
const p = `/api/series/${name}/${index}`;
|
||
|
||
/**
|
||
* @param {number} [start]
|
||
* @param {number} [end]
|
||
* @param {string} [format]
|
||
* @returns {string}
|
||
*/
|
||
const buildPath = (start, end, format) => {
|
||
const params = new URLSearchParams();
|
||
if (start !== undefined) params.set('start', String(start));
|
||
if (end !== undefined) params.set('end', String(end));
|
||
if (format) params.set('format', format);
|
||
const query = params.toString();
|
||
return query ? `${p}?${query}` : p;
|
||
};
|
||
|
||
/**
|
||
* @param {number} [start]
|
||
* @param {number} [end]
|
||
* @returns {DateRangeBuilder<T>}
|
||
*/
|
||
const rangeBuilder = (start, end) => ({
|
||
fetch(onUpdate) { return client._fetchSeriesData(buildPath(start, end), onUpdate); },
|
||
fetchCsv() { return client.getText(buildPath(start, end, 'csv')); },
|
||
then(resolve, reject) { return this.fetch().then(resolve, reject); },
|
||
});
|
||
|
||
/**
|
||
* @param {number} idx
|
||
* @returns {DateSingleItemBuilder<T>}
|
||
*/
|
||
const singleItemBuilder = (idx) => ({
|
||
fetch(onUpdate) { return client._fetchSeriesData(buildPath(idx, idx + 1), onUpdate); },
|
||
fetchCsv() { return client.getText(buildPath(idx, idx + 1, 'csv')); },
|
||
then(resolve, reject) { return this.fetch().then(resolve, reject); },
|
||
});
|
||
|
||
/**
|
||
* @param {number} start
|
||
* @returns {DateSkippedBuilder<T>}
|
||
*/
|
||
const skippedBuilder = (start) => ({
|
||
take(n) { return rangeBuilder(start, start + n); },
|
||
fetch(onUpdate) { return client._fetchSeriesData(buildPath(start, undefined), onUpdate); },
|
||
fetchCsv() { return client.getText(buildPath(start, undefined, 'csv')); },
|
||
then(resolve, reject) { return this.fetch().then(resolve, reject); },
|
||
});
|
||
|
||
/** @type {DateSeriesEndpoint<T>} */
|
||
const endpoint = {
|
||
get(idx) { if (idx instanceof Date) idx = dateToIndex(index, idx); return singleItemBuilder(idx); },
|
||
slice(start, end) {
|
||
if (start instanceof Date) start = dateToIndex(index, start);
|
||
if (end instanceof Date) end = dateToIndex(index, end);
|
||
return rangeBuilder(start, end);
|
||
},
|
||
first(n) { return rangeBuilder(undefined, n); },
|
||
last(n) { return n === 0 ? rangeBuilder(undefined, 0) : rangeBuilder(-n, undefined); },
|
||
skip(n) { return skippedBuilder(n); },
|
||
fetch(onUpdate) { return client._fetchSeriesData(buildPath(), onUpdate); },
|
||
fetchCsv() { return client.getText(buildPath(undefined, undefined, 'csv')); },
|
||
then(resolve, reject) { return this.fetch().then(resolve, reject); },
|
||
get path() { return p; },
|
||
};
|
||
|
||
return endpoint;
|
||
}
|
||
|
||
/**
|
||
* Base HTTP client for making requests with caching support
|
||
*/
|
||
class BrkClientBase {
|
||
/**
|
||
* @param {BrkClientOptions|string} options
|
||
*/
|
||
constructor(options) {
|
||
const isString = typeof options === 'string';
|
||
const rawUrl = isString ? options : options.baseUrl;
|
||
this.baseUrl = rawUrl.endsWith('/') ? rawUrl.slice(0, -1) : rawUrl;
|
||
this.timeout = isString ? 5000 : (options.timeout ?? 5000);
|
||
/** @type {Promise<Cache | null>} */
|
||
this._cachePromise = _openCache(isString ? undefined : options.cache);
|
||
/** @type {Cache | null} */
|
||
this._cache = null;
|
||
this._cachePromise.then(c => this._cache = c);
|
||
}
|
||
|
||
/**
|
||
* @param {string} path
|
||
* @returns {Promise<Response>}
|
||
*/
|
||
async get(path) {
|
||
const url = `${this.baseUrl}${path}`;
|
||
const res = await fetch(url, { signal: AbortSignal.timeout(this.timeout) });
|
||
if (!res.ok) throw new BrkError(`HTTP ${res.status}: ${url}`, res.status);
|
||
return res;
|
||
}
|
||
|
||
/**
|
||
* Make a GET request - races cache vs network, first to resolve calls onUpdate
|
||
* @template T
|
||
* @param {string} path
|
||
* @param {(value: T) => void} [onUpdate] - Called when data is available (may be called twice: cache then network)
|
||
* @returns {Promise<T>}
|
||
*/
|
||
async getJson(path, onUpdate) {
|
||
const url = `${this.baseUrl}${path}`;
|
||
const cache = this._cache ?? await this._cachePromise;
|
||
|
||
let resolved = false;
|
||
/** @type {Response | null} */
|
||
let cachedRes = null;
|
||
|
||
// Race cache vs network - first to resolve calls onUpdate
|
||
const cachePromise = cache?.match(url).then(async (res) => {
|
||
cachedRes = res ?? null;
|
||
if (!res) return null;
|
||
const json = await res.json();
|
||
if (!resolved && onUpdate) {
|
||
resolved = true;
|
||
onUpdate(json);
|
||
}
|
||
return json;
|
||
});
|
||
|
||
const networkPromise = this.get(path).then(async (res) => {
|
||
const cloned = res.clone();
|
||
const json = await res.json();
|
||
// Skip update if ETag matches and cache already delivered
|
||
if (cachedRes?.headers.get('ETag') === res.headers.get('ETag')) {
|
||
if (!resolved && onUpdate) {
|
||
resolved = true;
|
||
onUpdate(json);
|
||
}
|
||
return json;
|
||
}
|
||
resolved = true;
|
||
if (onUpdate) {
|
||
onUpdate(json);
|
||
}
|
||
if (cache) _runIdle(() => cache.put(url, cloned));
|
||
return json;
|
||
});
|
||
|
||
try {
|
||
return await networkPromise;
|
||
} catch (e) {
|
||
// Network failed - wait for cache
|
||
const cachedJson = await cachePromise?.catch(() => null);
|
||
if (cachedJson) return cachedJson;
|
||
throw e;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Make a GET request and return raw text (for CSV responses)
|
||
* @param {string} path
|
||
* @returns {Promise<string>}
|
||
*/
|
||
async getText(path) {
|
||
const res = await this.get(path);
|
||
return res.text();
|
||
}
|
||
|
||
/**
|
||
* Fetch series data and wrap with helper methods (internal)
|
||
* @template T
|
||
* @param {string} path
|
||
* @param {(value: DateSeriesData<T>) => void} [onUpdate]
|
||
* @returns {Promise<DateSeriesData<T>>}
|
||
*/
|
||
async _fetchSeriesData(path, onUpdate) {
|
||
const wrappedOnUpdate = onUpdate ? (/** @type {SeriesData<T>} */ raw) => onUpdate(_wrapSeriesData(raw)) : undefined;
|
||
const raw = await this.getJson(path, wrappedOnUpdate);
|
||
return _wrapSeriesData(raw);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Build series name with suffix.
|
||
* @param {string} acc - Accumulated prefix
|
||
* @param {string} s - Series suffix
|
||
* @returns {string}
|
||
*/
|
||
const _m = (acc, s) => s ? (acc ? `${acc}_${s}` : s) : acc;
|
||
|
||
/**
|
||
* Build series name with prefix.
|
||
* @param {string} prefix - Prefix to prepend
|
||
* @param {string} acc - Accumulated name
|
||
* @returns {string}
|
||
*/
|
||
const _p = (prefix, acc) => acc ? `${prefix}_${acc}` : prefix;
|
||
|
||
|
||
// Index group constants and factory
|
||
|
||
const _i1 = /** @type {const} */ (["minute10", "minute30", "hour1", "hour4", "hour12", "day1", "day3", "week1", "month1", "month3", "month6", "year1", "year10", "halving", "epoch", "height"]);
|
||
const _i2 = /** @type {const} */ (["minute10", "minute30", "hour1", "hour4", "hour12", "day1", "day3", "week1", "month1", "month3", "month6", "year1", "year10", "halving", "epoch"]);
|
||
const _i3 = /** @type {const} */ (["minute10"]);
|
||
const _i4 = /** @type {const} */ (["minute30"]);
|
||
const _i5 = /** @type {const} */ (["hour1"]);
|
||
const _i6 = /** @type {const} */ (["hour4"]);
|
||
const _i7 = /** @type {const} */ (["hour12"]);
|
||
const _i8 = /** @type {const} */ (["day1"]);
|
||
const _i9 = /** @type {const} */ (["day3"]);
|
||
const _i10 = /** @type {const} */ (["week1"]);
|
||
const _i11 = /** @type {const} */ (["month1"]);
|
||
const _i12 = /** @type {const} */ (["month3"]);
|
||
const _i13 = /** @type {const} */ (["month6"]);
|
||
const _i14 = /** @type {const} */ (["year1"]);
|
||
const _i15 = /** @type {const} */ (["year10"]);
|
||
const _i16 = /** @type {const} */ (["halving"]);
|
||
const _i17 = /** @type {const} */ (["epoch"]);
|
||
const _i18 = /** @type {const} */ (["height"]);
|
||
const _i19 = /** @type {const} */ (["tx_index"]);
|
||
const _i20 = /** @type {const} */ (["txin_index"]);
|
||
const _i21 = /** @type {const} */ (["txout_index"]);
|
||
const _i22 = /** @type {const} */ (["empty_output_index"]);
|
||
const _i23 = /** @type {const} */ (["op_return_index"]);
|
||
const _i24 = /** @type {const} */ (["p2a_addr_index"]);
|
||
const _i25 = /** @type {const} */ (["p2ms_output_index"]);
|
||
const _i26 = /** @type {const} */ (["p2pk33_addr_index"]);
|
||
const _i27 = /** @type {const} */ (["p2pk65_addr_index"]);
|
||
const _i28 = /** @type {const} */ (["p2pkh_addr_index"]);
|
||
const _i29 = /** @type {const} */ (["p2sh_addr_index"]);
|
||
const _i30 = /** @type {const} */ (["p2tr_addr_index"]);
|
||
const _i31 = /** @type {const} */ (["p2wpkh_addr_index"]);
|
||
const _i32 = /** @type {const} */ (["p2wsh_addr_index"]);
|
||
const _i33 = /** @type {const} */ (["unknown_output_index"]);
|
||
const _i34 = /** @type {const} */ (["funded_addr_index"]);
|
||
const _i35 = /** @type {const} */ (["empty_addr_index"]);
|
||
|
||
/**
|
||
* Generic series pattern factory.
|
||
* @template T
|
||
* @param {BrkClientBase} client
|
||
* @param {string} name - The series vec name
|
||
* @param {readonly Index[]} indexes - The supported indexes
|
||
*/
|
||
function _mp(client, name, indexes) {
|
||
const by = {};
|
||
for (const idx of indexes) {
|
||
Object.defineProperty(by, idx, {
|
||
get() { return _endpoint(client, name, idx); },
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
}
|
||
return {
|
||
name,
|
||
by,
|
||
/** @returns {readonly Index[]} */
|
||
indexes() { return indexes; },
|
||
/** @param {Index} index @returns {SeriesEndpoint<T>|undefined} */
|
||
get(index) { return indexes.includes(index) ? _endpoint(client, name, index) : undefined; }
|
||
};
|
||
}
|
||
|
||
/** @template T @typedef {{ name: string, by: { readonly minute10: DateSeriesEndpoint<T>, readonly minute30: DateSeriesEndpoint<T>, readonly hour1: DateSeriesEndpoint<T>, readonly hour4: DateSeriesEndpoint<T>, readonly hour12: DateSeriesEndpoint<T>, readonly day1: DateSeriesEndpoint<T>, readonly day3: DateSeriesEndpoint<T>, readonly week1: DateSeriesEndpoint<T>, readonly month1: DateSeriesEndpoint<T>, readonly month3: DateSeriesEndpoint<T>, readonly month6: DateSeriesEndpoint<T>, readonly year1: DateSeriesEndpoint<T>, readonly year10: DateSeriesEndpoint<T>, readonly halving: SeriesEndpoint<T>, readonly epoch: SeriesEndpoint<T>, readonly height: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern1 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern1<T>} */
|
||
function createSeriesPattern1(client, name) { return /** @type {SeriesPattern1<T>} */ (_mp(client, name, _i1)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly minute10: DateSeriesEndpoint<T>, readonly minute30: DateSeriesEndpoint<T>, readonly hour1: DateSeriesEndpoint<T>, readonly hour4: DateSeriesEndpoint<T>, readonly hour12: DateSeriesEndpoint<T>, readonly day1: DateSeriesEndpoint<T>, readonly day3: DateSeriesEndpoint<T>, readonly week1: DateSeriesEndpoint<T>, readonly month1: DateSeriesEndpoint<T>, readonly month3: DateSeriesEndpoint<T>, readonly month6: DateSeriesEndpoint<T>, readonly year1: DateSeriesEndpoint<T>, readonly year10: DateSeriesEndpoint<T>, readonly halving: SeriesEndpoint<T>, readonly epoch: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern2 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern2<T>} */
|
||
function createSeriesPattern2(client, name) { return /** @type {SeriesPattern2<T>} */ (_mp(client, name, _i2)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly minute10: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern3 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern3<T>} */
|
||
function createSeriesPattern3(client, name) { return /** @type {SeriesPattern3<T>} */ (_mp(client, name, _i3)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly minute30: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern4 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern4<T>} */
|
||
function createSeriesPattern4(client, name) { return /** @type {SeriesPattern4<T>} */ (_mp(client, name, _i4)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly hour1: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern5 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern5<T>} */
|
||
function createSeriesPattern5(client, name) { return /** @type {SeriesPattern5<T>} */ (_mp(client, name, _i5)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly hour4: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern6 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern6<T>} */
|
||
function createSeriesPattern6(client, name) { return /** @type {SeriesPattern6<T>} */ (_mp(client, name, _i6)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly hour12: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern7 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern7<T>} */
|
||
function createSeriesPattern7(client, name) { return /** @type {SeriesPattern7<T>} */ (_mp(client, name, _i7)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly day1: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern8 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern8<T>} */
|
||
function createSeriesPattern8(client, name) { return /** @type {SeriesPattern8<T>} */ (_mp(client, name, _i8)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly day3: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern9 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern9<T>} */
|
||
function createSeriesPattern9(client, name) { return /** @type {SeriesPattern9<T>} */ (_mp(client, name, _i9)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly week1: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern10 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern10<T>} */
|
||
function createSeriesPattern10(client, name) { return /** @type {SeriesPattern10<T>} */ (_mp(client, name, _i10)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly month1: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern11 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern11<T>} */
|
||
function createSeriesPattern11(client, name) { return /** @type {SeriesPattern11<T>} */ (_mp(client, name, _i11)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly month3: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern12 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern12<T>} */
|
||
function createSeriesPattern12(client, name) { return /** @type {SeriesPattern12<T>} */ (_mp(client, name, _i12)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly month6: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern13 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern13<T>} */
|
||
function createSeriesPattern13(client, name) { return /** @type {SeriesPattern13<T>} */ (_mp(client, name, _i13)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly year1: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern14 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern14<T>} */
|
||
function createSeriesPattern14(client, name) { return /** @type {SeriesPattern14<T>} */ (_mp(client, name, _i14)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly year10: DateSeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern15 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern15<T>} */
|
||
function createSeriesPattern15(client, name) { return /** @type {SeriesPattern15<T>} */ (_mp(client, name, _i15)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly halving: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern16 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern16<T>} */
|
||
function createSeriesPattern16(client, name) { return /** @type {SeriesPattern16<T>} */ (_mp(client, name, _i16)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly epoch: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern17 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern17<T>} */
|
||
function createSeriesPattern17(client, name) { return /** @type {SeriesPattern17<T>} */ (_mp(client, name, _i17)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly height: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern18 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern18<T>} */
|
||
function createSeriesPattern18(client, name) { return /** @type {SeriesPattern18<T>} */ (_mp(client, name, _i18)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly tx_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern19 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern19<T>} */
|
||
function createSeriesPattern19(client, name) { return /** @type {SeriesPattern19<T>} */ (_mp(client, name, _i19)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly txin_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern20 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern20<T>} */
|
||
function createSeriesPattern20(client, name) { return /** @type {SeriesPattern20<T>} */ (_mp(client, name, _i20)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly txout_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern21 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern21<T>} */
|
||
function createSeriesPattern21(client, name) { return /** @type {SeriesPattern21<T>} */ (_mp(client, name, _i21)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly empty_output_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern22 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern22<T>} */
|
||
function createSeriesPattern22(client, name) { return /** @type {SeriesPattern22<T>} */ (_mp(client, name, _i22)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly op_return_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern23 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern23<T>} */
|
||
function createSeriesPattern23(client, name) { return /** @type {SeriesPattern23<T>} */ (_mp(client, name, _i23)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly p2a_addr_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern24 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern24<T>} */
|
||
function createSeriesPattern24(client, name) { return /** @type {SeriesPattern24<T>} */ (_mp(client, name, _i24)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly p2ms_output_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern25 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern25<T>} */
|
||
function createSeriesPattern25(client, name) { return /** @type {SeriesPattern25<T>} */ (_mp(client, name, _i25)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly p2pk33_addr_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern26 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern26<T>} */
|
||
function createSeriesPattern26(client, name) { return /** @type {SeriesPattern26<T>} */ (_mp(client, name, _i26)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly p2pk65_addr_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern27 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern27<T>} */
|
||
function createSeriesPattern27(client, name) { return /** @type {SeriesPattern27<T>} */ (_mp(client, name, _i27)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly p2pkh_addr_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern28 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern28<T>} */
|
||
function createSeriesPattern28(client, name) { return /** @type {SeriesPattern28<T>} */ (_mp(client, name, _i28)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly p2sh_addr_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern29 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern29<T>} */
|
||
function createSeriesPattern29(client, name) { return /** @type {SeriesPattern29<T>} */ (_mp(client, name, _i29)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly p2tr_addr_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern30 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern30<T>} */
|
||
function createSeriesPattern30(client, name) { return /** @type {SeriesPattern30<T>} */ (_mp(client, name, _i30)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly p2wpkh_addr_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern31 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern31<T>} */
|
||
function createSeriesPattern31(client, name) { return /** @type {SeriesPattern31<T>} */ (_mp(client, name, _i31)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly p2wsh_addr_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern32 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern32<T>} */
|
||
function createSeriesPattern32(client, name) { return /** @type {SeriesPattern32<T>} */ (_mp(client, name, _i32)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly unknown_output_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern33 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern33<T>} */
|
||
function createSeriesPattern33(client, name) { return /** @type {SeriesPattern33<T>} */ (_mp(client, name, _i33)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly funded_addr_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern34 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern34<T>} */
|
||
function createSeriesPattern34(client, name) { return /** @type {SeriesPattern34<T>} */ (_mp(client, name, _i34)); }
|
||
/** @template T @typedef {{ name: string, by: { readonly empty_addr_index: SeriesEndpoint<T> }, indexes: () => readonly Index[], get: (index: Index) => SeriesEndpoint<T>|undefined }} SeriesPattern35 */
|
||
/** @template T @param {BrkClientBase} client @param {string} name @returns {SeriesPattern35<T>} */
|
||
function createSeriesPattern35(client, name) { return /** @type {SeriesPattern35<T>} */ (_mp(client, name, _i35)); }
|
||
|
||
// Reusable structural pattern factories
|
||
|
||
/**
|
||
* @typedef {Object} Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern
|
||
* @property {CentsSatsUsdPattern} pct05
|
||
* @property {CentsSatsUsdPattern} pct10
|
||
* @property {CentsSatsUsdPattern} pct15
|
||
* @property {CentsSatsUsdPattern} pct20
|
||
* @property {CentsSatsUsdPattern} pct25
|
||
* @property {CentsSatsUsdPattern} pct30
|
||
* @property {CentsSatsUsdPattern} pct35
|
||
* @property {CentsSatsUsdPattern} pct40
|
||
* @property {CentsSatsUsdPattern} pct45
|
||
* @property {CentsSatsUsdPattern} pct50
|
||
* @property {CentsSatsUsdPattern} pct55
|
||
* @property {CentsSatsUsdPattern} pct60
|
||
* @property {CentsSatsUsdPattern} pct65
|
||
* @property {CentsSatsUsdPattern} pct70
|
||
* @property {CentsSatsUsdPattern} pct75
|
||
* @property {CentsSatsUsdPattern} pct80
|
||
* @property {CentsSatsUsdPattern} pct85
|
||
* @property {CentsSatsUsdPattern} pct90
|
||
* @property {CentsSatsUsdPattern} pct95
|
||
*/
|
||
|
||
/**
|
||
* Create a Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern}
|
||
*/
|
||
function createPct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern(client, acc) {
|
||
return {
|
||
pct05: createCentsSatsUsdPattern(client, _m(acc, 'pct05')),
|
||
pct10: createCentsSatsUsdPattern(client, _m(acc, 'pct10')),
|
||
pct15: createCentsSatsUsdPattern(client, _m(acc, 'pct15')),
|
||
pct20: createCentsSatsUsdPattern(client, _m(acc, 'pct20')),
|
||
pct25: createCentsSatsUsdPattern(client, _m(acc, 'pct25')),
|
||
pct30: createCentsSatsUsdPattern(client, _m(acc, 'pct30')),
|
||
pct35: createCentsSatsUsdPattern(client, _m(acc, 'pct35')),
|
||
pct40: createCentsSatsUsdPattern(client, _m(acc, 'pct40')),
|
||
pct45: createCentsSatsUsdPattern(client, _m(acc, 'pct45')),
|
||
pct50: createCentsSatsUsdPattern(client, _m(acc, 'pct50')),
|
||
pct55: createCentsSatsUsdPattern(client, _m(acc, 'pct55')),
|
||
pct60: createCentsSatsUsdPattern(client, _m(acc, 'pct60')),
|
||
pct65: createCentsSatsUsdPattern(client, _m(acc, 'pct65')),
|
||
pct70: createCentsSatsUsdPattern(client, _m(acc, 'pct70')),
|
||
pct75: createCentsSatsUsdPattern(client, _m(acc, 'pct75')),
|
||
pct80: createCentsSatsUsdPattern(client, _m(acc, 'pct80')),
|
||
pct85: createCentsSatsUsdPattern(client, _m(acc, 'pct85')),
|
||
pct90: createCentsSatsUsdPattern(client, _m(acc, 'pct90')),
|
||
pct95: createCentsSatsUsdPattern(client, _m(acc, 'pct95')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdZscorePattern
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} _10y1m1w1y2y3m3y4y5y6m6y8yPattern2
|
||
* @property {BpsPercentRatioPattern} _10y
|
||
* @property {BpsPercentRatioPattern} _1m
|
||
* @property {BpsPercentRatioPattern} _1w
|
||
* @property {BpsPercentRatioPattern} _1y
|
||
* @property {BpsPercentRatioPattern} _2y
|
||
* @property {BpsPercentRatioPattern} _3m
|
||
* @property {BpsPercentRatioPattern} _3y
|
||
* @property {BpsPercentRatioPattern} _4y
|
||
* @property {BpsPercentRatioPattern} _5y
|
||
* @property {BpsPercentRatioPattern} _6m
|
||
* @property {BpsPercentRatioPattern} _6y
|
||
* @property {BpsPercentRatioPattern} _8y
|
||
*/
|
||
|
||
/**
|
||
* Create a _10y1m1w1y2y3m3y4y5y6m6y8yPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_10y1m1w1y2y3m3y4y5y6m6y8yPattern2}
|
||
*/
|
||
function create_10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, acc) {
|
||
return {
|
||
_10y: createBpsPercentRatioPattern(client, _m(acc, '10y')),
|
||
_1m: createBpsPercentRatioPattern(client, _m(acc, '1m')),
|
||
_1w: createBpsPercentRatioPattern(client, _m(acc, '1w')),
|
||
_1y: createBpsPercentRatioPattern(client, _m(acc, '1y')),
|
||
_2y: createBpsPercentRatioPattern(client, _m(acc, '2y')),
|
||
_3m: createBpsPercentRatioPattern(client, _m(acc, '3m')),
|
||
_3y: createBpsPercentRatioPattern(client, _m(acc, '3y')),
|
||
_4y: createBpsPercentRatioPattern(client, _m(acc, '4y')),
|
||
_5y: createBpsPercentRatioPattern(client, _m(acc, '5y')),
|
||
_6m: createBpsPercentRatioPattern(client, _m(acc, '6m')),
|
||
_6y: createBpsPercentRatioPattern(client, _m(acc, '6y')),
|
||
_8y: createBpsPercentRatioPattern(client, _m(acc, '8y')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _10y1m1w1y2y3m3y4y5y6m6y8yPattern3
|
||
* @property {BtcCentsSatsUsdPattern2} _10y
|
||
* @property {BtcCentsSatsUsdPattern2} _1m
|
||
* @property {BtcCentsSatsUsdPattern2} _1w
|
||
* @property {BtcCentsSatsUsdPattern2} _1y
|
||
* @property {BtcCentsSatsUsdPattern2} _2y
|
||
* @property {BtcCentsSatsUsdPattern2} _3m
|
||
* @property {BtcCentsSatsUsdPattern2} _3y
|
||
* @property {BtcCentsSatsUsdPattern2} _4y
|
||
* @property {BtcCentsSatsUsdPattern2} _5y
|
||
* @property {BtcCentsSatsUsdPattern2} _6m
|
||
* @property {BtcCentsSatsUsdPattern2} _6y
|
||
* @property {BtcCentsSatsUsdPattern2} _8y
|
||
*/
|
||
|
||
/**
|
||
* Create a _10y1m1w1y2y3m3y4y5y6m6y8yPattern3 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_10y1m1w1y2y3m3y4y5y6m6y8yPattern3}
|
||
*/
|
||
function create_10y1m1w1y2y3m3y4y5y6m6y8yPattern3(client, acc) {
|
||
return {
|
||
_10y: createBtcCentsSatsUsdPattern2(client, _m(acc, '10y')),
|
||
_1m: createBtcCentsSatsUsdPattern2(client, _m(acc, '1m')),
|
||
_1w: createBtcCentsSatsUsdPattern2(client, _m(acc, '1w')),
|
||
_1y: createBtcCentsSatsUsdPattern2(client, _m(acc, '1y')),
|
||
_2y: createBtcCentsSatsUsdPattern2(client, _m(acc, '2y')),
|
||
_3m: createBtcCentsSatsUsdPattern2(client, _m(acc, '3m')),
|
||
_3y: createBtcCentsSatsUsdPattern2(client, _m(acc, '3y')),
|
||
_4y: createBtcCentsSatsUsdPattern2(client, _m(acc, '4y')),
|
||
_5y: createBtcCentsSatsUsdPattern2(client, _m(acc, '5y')),
|
||
_6m: createBtcCentsSatsUsdPattern2(client, _m(acc, '6m')),
|
||
_6y: createBtcCentsSatsUsdPattern2(client, _m(acc, '6y')),
|
||
_8y: createBtcCentsSatsUsdPattern2(client, _m(acc, '8y')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CapGrossInvestorLossMvrvNetPeakPriceProfitSellSoprPattern
|
||
* @property {CentsDeltaToUsdPattern} cap
|
||
* @property {BaseCumulativeSumPattern} grossPnl
|
||
* @property {PricePattern} investor
|
||
* @property {BaseCumulativeNegativeSumToPattern} loss
|
||
* @property {SeriesPattern1<StoredF32>} mvrv
|
||
* @property {BaseChangeCumulativeDeltaSumToPattern} netPnl
|
||
* @property {BaseCumulativeSumToPattern} peakRegret
|
||
* @property {BpsCentsPercentilesRatioSatsSmaStdUsdPattern} price
|
||
* @property {BaseCumulativeSumToPattern} profit
|
||
* @property {_1m1w1y24hPattern<StoredF64>} profitToLossRatio
|
||
* @property {_1m1w1y24hPattern7} sellSideRiskRatio
|
||
* @property {AdjustedRatioValuePattern} sopr
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2
|
||
* @property {_1m1w1y24hPattern<StoredF32>} average
|
||
* @property {SeriesPattern1<StoredU64>} base
|
||
* @property {SeriesPattern1<StoredU64>} cumulative
|
||
* @property {_1m1w1y24hPattern<StoredU64>} max
|
||
* @property {_1m1w1y24hPattern<StoredU64>} median
|
||
* @property {_1m1w1y24hPattern<StoredU64>} min
|
||
* @property {_1m1w1y24hPattern<StoredU64>} pct10
|
||
* @property {_1m1w1y24hPattern<StoredU64>} pct25
|
||
* @property {_1m1w1y24hPattern<StoredU64>} pct75
|
||
* @property {_1m1w1y24hPattern<StoredU64>} pct90
|
||
* @property {_1m1w1y24hPattern<StoredU64>} sum
|
||
*/
|
||
|
||
/**
|
||
* Create a AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2}
|
||
*/
|
||
function createAverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(client, acc) {
|
||
return {
|
||
average: create_1m1w1y24hPattern(client, _m(acc, 'average')),
|
||
base: createSeriesPattern1(client, acc),
|
||
cumulative: createSeriesPattern1(client, _m(acc, 'cumulative')),
|
||
max: create_1m1w1y24hPattern(client, _m(acc, 'max')),
|
||
median: create_1m1w1y24hPattern(client, _m(acc, 'median')),
|
||
min: create_1m1w1y24hPattern(client, _m(acc, 'min')),
|
||
pct10: create_1m1w1y24hPattern(client, _m(acc, 'pct10')),
|
||
pct25: create_1m1w1y24hPattern(client, _m(acc, 'pct25')),
|
||
pct75: create_1m1w1y24hPattern(client, _m(acc, 'pct75')),
|
||
pct90: create_1m1w1y24hPattern(client, _m(acc, 'pct90')),
|
||
sum: create_1m1w1y24hPattern(client, _m(acc, 'sum')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @template T
|
||
* @typedef {Object} AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern
|
||
* @property {_1m1w1y24hPattern<T>} average
|
||
* @property {SeriesPattern18<T>} base
|
||
* @property {SeriesPattern1<T>} cumulative
|
||
* @property {_1m1w1y24hPattern<T>} max
|
||
* @property {_1m1w1y24hPattern<T>} median
|
||
* @property {_1m1w1y24hPattern<T>} min
|
||
* @property {_1m1w1y24hPattern<T>} pct10
|
||
* @property {_1m1w1y24hPattern<T>} pct25
|
||
* @property {_1m1w1y24hPattern<T>} pct75
|
||
* @property {_1m1w1y24hPattern<T>} pct90
|
||
* @property {_1m1w1y24hPattern<T>} sum
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} AverageGainsLossesRsiStochPattern
|
||
* @property {SeriesPattern1<StoredF32>} averageGain
|
||
* @property {SeriesPattern1<StoredF32>} averageLoss
|
||
* @property {SeriesPattern1<StoredF32>} gains
|
||
* @property {SeriesPattern1<StoredF32>} losses
|
||
* @property {BpsPercentRatioPattern3} rsi
|
||
* @property {BpsPercentRatioPattern3} rsiMax
|
||
* @property {BpsPercentRatioPattern3} rsiMin
|
||
* @property {BpsPercentRatioPattern3} stochRsi
|
||
* @property {BpsPercentRatioPattern3} stochRsiD
|
||
* @property {BpsPercentRatioPattern3} stochRsiK
|
||
*/
|
||
|
||
/**
|
||
* Create a AverageGainsLossesRsiStochPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @param {string} disc - Discriminator suffix
|
||
* @returns {AverageGainsLossesRsiStochPattern}
|
||
*/
|
||
function createAverageGainsLossesRsiStochPattern(client, acc, disc) {
|
||
return {
|
||
averageGain: createSeriesPattern1(client, _m(_m(acc, 'average_gain'), disc)),
|
||
averageLoss: createSeriesPattern1(client, _m(_m(acc, 'average_loss'), disc)),
|
||
gains: createSeriesPattern1(client, _m(_m(acc, 'gains'), disc)),
|
||
losses: createSeriesPattern1(client, _m(_m(acc, 'losses'), disc)),
|
||
rsi: createBpsPercentRatioPattern3(client, _m(acc, disc)),
|
||
rsiMax: createBpsPercentRatioPattern3(client, _m(_m(acc, 'max'), disc)),
|
||
rsiMin: createBpsPercentRatioPattern3(client, _m(_m(acc, 'min'), disc)),
|
||
stochRsi: createBpsPercentRatioPattern3(client, _m(_m(acc, 'stoch'), disc)),
|
||
stochRsiD: createBpsPercentRatioPattern3(client, _m(_m(acc, 'stoch_d'), disc)),
|
||
stochRsiK: createBpsPercentRatioPattern3(client, _m(_m(acc, 'stoch_k'), disc)),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} AllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern3
|
||
* @property {SeriesPattern1<StoredU64>} all
|
||
* @property {SeriesPattern1<StoredU64>} p2a
|
||
* @property {SeriesPattern1<StoredU64>} p2pk33
|
||
* @property {SeriesPattern1<StoredU64>} p2pk65
|
||
* @property {SeriesPattern1<StoredU64>} p2pkh
|
||
* @property {SeriesPattern1<StoredU64>} p2sh
|
||
* @property {SeriesPattern1<StoredU64>} p2tr
|
||
* @property {SeriesPattern1<StoredU64>} p2wpkh
|
||
* @property {SeriesPattern1<StoredU64>} p2wsh
|
||
*/
|
||
|
||
/**
|
||
* Create a AllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern3 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {AllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern3}
|
||
*/
|
||
function createAllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern3(client, acc) {
|
||
return {
|
||
all: createSeriesPattern1(client, acc),
|
||
p2a: createSeriesPattern1(client, _p('p2a', acc)),
|
||
p2pk33: createSeriesPattern1(client, _p('p2pk33', acc)),
|
||
p2pk65: createSeriesPattern1(client, _p('p2pk65', acc)),
|
||
p2pkh: createSeriesPattern1(client, _p('p2pkh', acc)),
|
||
p2sh: createSeriesPattern1(client, _p('p2sh', acc)),
|
||
p2tr: createSeriesPattern1(client, _p('p2tr', acc)),
|
||
p2wpkh: createSeriesPattern1(client, _p('p2wpkh', acc)),
|
||
p2wsh: createSeriesPattern1(client, _p('p2wsh', acc)),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern
|
||
* @property {_1m1w1y24hPattern<StoredF32>} average
|
||
* @property {_1m1w1y24hPattern<StoredU64>} max
|
||
* @property {_1m1w1y24hPattern<StoredU64>} median
|
||
* @property {_1m1w1y24hPattern<StoredU64>} min
|
||
* @property {_1m1w1y24hPattern<StoredU64>} pct10
|
||
* @property {_1m1w1y24hPattern<StoredU64>} pct25
|
||
* @property {_1m1w1y24hPattern<StoredU64>} pct75
|
||
* @property {_1m1w1y24hPattern<StoredU64>} pct90
|
||
* @property {_1m1w1y24hPattern<StoredU64>} sum
|
||
*/
|
||
|
||
/**
|
||
* Create a AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern}
|
||
*/
|
||
function createAverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, acc) {
|
||
return {
|
||
average: create_1m1w1y24hPattern(client, _m(acc, 'average')),
|
||
max: create_1m1w1y24hPattern(client, _m(acc, 'max')),
|
||
median: create_1m1w1y24hPattern(client, _m(acc, 'median')),
|
||
min: create_1m1w1y24hPattern(client, _m(acc, 'min')),
|
||
pct10: create_1m1w1y24hPattern(client, _m(acc, 'pct10')),
|
||
pct25: create_1m1w1y24hPattern(client, _m(acc, 'pct25')),
|
||
pct75: create_1m1w1y24hPattern(client, _m(acc, 'pct75')),
|
||
pct90: create_1m1w1y24hPattern(client, _m(acc, 'pct90')),
|
||
sum: create_1m1w1y24hPattern(client, _m(acc, 'sum')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} GrossInvestedInvestorLossNetNuplProfitSentimentPattern2
|
||
* @property {CentsUsdPattern2} grossPnl
|
||
* @property {InPattern} investedCapital
|
||
* @property {SeriesPattern18<CentsSquaredSats>} investorCapInLossRaw
|
||
* @property {SeriesPattern18<CentsSquaredSats>} investorCapInProfitRaw
|
||
* @property {CentsNegativeToUsdPattern2} loss
|
||
* @property {CentsToUsdPattern3} netPnl
|
||
* @property {BpsRatioPattern} nupl
|
||
* @property {CentsToUsdPattern4} profit
|
||
* @property {GreedNetPainPattern} sentiment
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} BpsCentsPercentilesRatioSatsSmaStdUsdPattern
|
||
* @property {SeriesPattern1<BasisPoints32>} bps
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {Pct1Pct2Pct5Pct95Pct98Pct99Pattern} percentiles
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
* @property {SeriesPattern1<SatsFract>} sats
|
||
* @property {_1m1w1y2y4yAllPattern} sma
|
||
* @property {_1y2y4yAllPattern} stdDev
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} _10y2y3y4y5y6y8yPattern
|
||
* @property {BpsPercentRatioPattern} _10y
|
||
* @property {BpsPercentRatioPattern} _2y
|
||
* @property {BpsPercentRatioPattern} _3y
|
||
* @property {BpsPercentRatioPattern} _4y
|
||
* @property {BpsPercentRatioPattern} _5y
|
||
* @property {BpsPercentRatioPattern} _6y
|
||
* @property {BpsPercentRatioPattern} _8y
|
||
*/
|
||
|
||
/**
|
||
* Create a _10y2y3y4y5y6y8yPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_10y2y3y4y5y6y8yPattern}
|
||
*/
|
||
function create_10y2y3y4y5y6y8yPattern(client, acc) {
|
||
return {
|
||
_10y: createBpsPercentRatioPattern(client, _m(acc, '10y')),
|
||
_2y: createBpsPercentRatioPattern(client, _m(acc, '2y')),
|
||
_3y: createBpsPercentRatioPattern(client, _m(acc, '3y')),
|
||
_4y: createBpsPercentRatioPattern(client, _m(acc, '4y')),
|
||
_5y: createBpsPercentRatioPattern(client, _m(acc, '5y')),
|
||
_6y: createBpsPercentRatioPattern(client, _m(acc, '6y')),
|
||
_8y: createBpsPercentRatioPattern(client, _m(acc, '8y')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _1m1w1y24hBpsPercentRatioPattern
|
||
* @property {BpsPercentRatioPattern3} _1m
|
||
* @property {BpsPercentRatioPattern3} _1w
|
||
* @property {BpsPercentRatioPattern3} _1y
|
||
* @property {BpsPercentRatioPattern3} _24h
|
||
* @property {SeriesPattern1<BasisPoints16>} bps
|
||
* @property {SeriesPattern1<StoredF32>} percent
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
*/
|
||
|
||
/**
|
||
* Create a _1m1w1y24hBpsPercentRatioPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_1m1w1y24hBpsPercentRatioPattern}
|
||
*/
|
||
function create_1m1w1y24hBpsPercentRatioPattern(client, acc) {
|
||
return {
|
||
_1m: createBpsPercentRatioPattern3(client, _m(acc, '1m')),
|
||
_1w: createBpsPercentRatioPattern3(client, _m(acc, '1w')),
|
||
_1y: createBpsPercentRatioPattern3(client, _m(acc, '1y')),
|
||
_24h: createBpsPercentRatioPattern3(client, _m(acc, '24h')),
|
||
bps: createSeriesPattern1(client, _m(acc, 'bps')),
|
||
percent: createSeriesPattern1(client, acc),
|
||
ratio: createSeriesPattern1(client, _m(acc, 'ratio')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CapLossMvrvNetPriceProfitSoprPattern
|
||
* @property {CentsDeltaUsdPattern} cap
|
||
* @property {BaseCumulativeNegativeSumPattern} loss
|
||
* @property {SeriesPattern1<StoredF32>} mvrv
|
||
* @property {BaseCumulativeDeltaSumPattern} netPnl
|
||
* @property {BpsCentsRatioSatsUsdPattern} price
|
||
* @property {BaseCumulativeSumPattern} profit
|
||
* @property {RatioValuePattern} sopr
|
||
*/
|
||
|
||
/**
|
||
* Create a CapLossMvrvNetPriceProfitSoprPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CapLossMvrvNetPriceProfitSoprPattern}
|
||
*/
|
||
function createCapLossMvrvNetPriceProfitSoprPattern(client, acc) {
|
||
return {
|
||
cap: createCentsDeltaUsdPattern(client, _m(acc, 'realized_cap')),
|
||
loss: createBaseCumulativeNegativeSumPattern(client, acc),
|
||
mvrv: createSeriesPattern1(client, _m(acc, 'mvrv')),
|
||
netPnl: createBaseCumulativeDeltaSumPattern(client, _m(acc, 'net_realized_pnl')),
|
||
price: createBpsCentsRatioSatsUsdPattern(client, _m(acc, 'realized_price')),
|
||
profit: createBaseCumulativeSumPattern(client, _m(acc, 'realized_profit')),
|
||
sopr: createRatioValuePattern(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} InMaxMinPerSupplyPattern
|
||
* @property {PerPattern} inLoss
|
||
* @property {PerPattern} inProfit
|
||
* @property {CentsSatsUsdPattern} max
|
||
* @property {CentsSatsUsdPattern} min
|
||
* @property {Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern} perCoin
|
||
* @property {Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern} perDollar
|
||
* @property {BpsPercentRatioPattern3} supplyDensity
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} MaxMedianMinPct10Pct25Pct75Pct90Pattern2
|
||
* @property {SeriesPattern18<Weight>} max
|
||
* @property {SeriesPattern18<Weight>} median
|
||
* @property {SeriesPattern18<Weight>} min
|
||
* @property {SeriesPattern18<Weight>} pct10
|
||
* @property {SeriesPattern18<Weight>} pct25
|
||
* @property {SeriesPattern18<Weight>} pct75
|
||
* @property {SeriesPattern18<Weight>} pct90
|
||
*/
|
||
|
||
/**
|
||
* Create a MaxMedianMinPct10Pct25Pct75Pct90Pattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {MaxMedianMinPct10Pct25Pct75Pct90Pattern2}
|
||
*/
|
||
function createMaxMedianMinPct10Pct25Pct75Pct90Pattern2(client, acc) {
|
||
return {
|
||
max: createSeriesPattern18(client, _m(acc, 'max')),
|
||
median: createSeriesPattern18(client, _m(acc, 'median')),
|
||
min: createSeriesPattern18(client, _m(acc, 'min')),
|
||
pct10: createSeriesPattern18(client, _m(acc, 'pct10')),
|
||
pct25: createSeriesPattern18(client, _m(acc, 'pct25')),
|
||
pct75: createSeriesPattern18(client, _m(acc, 'pct75')),
|
||
pct90: createSeriesPattern18(client, _m(acc, 'pct90')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @template T
|
||
* @typedef {Object} MaxMedianMinPct10Pct25Pct75Pct90Pattern
|
||
* @property {SeriesPattern1<T>} max
|
||
* @property {SeriesPattern1<T>} median
|
||
* @property {SeriesPattern1<T>} min
|
||
* @property {SeriesPattern1<T>} pct10
|
||
* @property {SeriesPattern1<T>} pct25
|
||
* @property {SeriesPattern1<T>} pct75
|
||
* @property {SeriesPattern1<T>} pct90
|
||
*/
|
||
|
||
/**
|
||
* Create a MaxMedianMinPct10Pct25Pct75Pct90Pattern pattern node
|
||
* @template T
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {MaxMedianMinPct10Pct25Pct75Pct90Pattern<T>}
|
||
*/
|
||
function createMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, acc) {
|
||
return {
|
||
max: createSeriesPattern1(client, _m(acc, 'max')),
|
||
median: createSeriesPattern1(client, _m(acc, 'median')),
|
||
min: createSeriesPattern1(client, _m(acc, 'min')),
|
||
pct10: createSeriesPattern1(client, _m(acc, 'pct10')),
|
||
pct25: createSeriesPattern1(client, _m(acc, 'pct25')),
|
||
pct75: createSeriesPattern1(client, _m(acc, 'pct75')),
|
||
pct90: createSeriesPattern1(client, _m(acc, 'pct90')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _1m1w1y2y4yAllPattern
|
||
* @property {BpsRatioPattern2} _1m
|
||
* @property {BpsRatioPattern2} _1w
|
||
* @property {BpsRatioPattern2} _1y
|
||
* @property {BpsRatioPattern2} _2y
|
||
* @property {BpsRatioPattern2} _4y
|
||
* @property {BpsRatioPattern2} all
|
||
*/
|
||
|
||
/**
|
||
* Create a _1m1w1y2y4yAllPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_1m1w1y2y4yAllPattern}
|
||
*/
|
||
function create_1m1w1y2y4yAllPattern(client, acc) {
|
||
return {
|
||
_1m: createBpsRatioPattern2(client, _m(acc, '1m')),
|
||
_1w: createBpsRatioPattern2(client, _m(acc, '1w')),
|
||
_1y: createBpsRatioPattern2(client, _m(acc, '1y')),
|
||
_2y: createBpsRatioPattern2(client, _m(acc, '2y')),
|
||
_4y: createBpsRatioPattern2(client, _m(acc, '4y')),
|
||
all: createBpsRatioPattern2(client, _m(acc, 'all')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} ActivityAddrOutputsRealizedSupplyUnrealizedPattern
|
||
* @property {TransferPattern} activity
|
||
* @property {BaseDeltaPattern} addrCount
|
||
* @property {UnspentPattern} outputs
|
||
* @property {CapLossMvrvPriceProfitPattern} realized
|
||
* @property {DeltaHalfTotalPattern} supply
|
||
* @property {NuplPattern} unrealized
|
||
*/
|
||
|
||
/**
|
||
* Create a ActivityAddrOutputsRealizedSupplyUnrealizedPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {ActivityAddrOutputsRealizedSupplyUnrealizedPattern}
|
||
*/
|
||
function createActivityAddrOutputsRealizedSupplyUnrealizedPattern(client, acc) {
|
||
return {
|
||
activity: createTransferPattern(client, _m(acc, 'transfer_volume')),
|
||
addrCount: createBaseDeltaPattern(client, _m(acc, 'addr_count')),
|
||
outputs: createUnspentPattern(client, _m(acc, 'utxo_count')),
|
||
realized: createCapLossMvrvPriceProfitPattern(client, acc),
|
||
supply: createDeltaHalfTotalPattern(client, _m(acc, 'supply')),
|
||
unrealized: createNuplPattern(client, _m(acc, 'nupl')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} AverageBaseCumulativeInSumPattern
|
||
* @property {_1m1w1y24hPattern3} average
|
||
* @property {BtcCentsSatsUsdPattern2} base
|
||
* @property {BtcCentsSatsUsdPattern2} cumulative
|
||
* @property {AverageBaseCumulativeSumPattern3} inLoss
|
||
* @property {AverageBaseCumulativeSumPattern3} inProfit
|
||
* @property {_1m1w1y24hPattern4} sum
|
||
*/
|
||
|
||
/**
|
||
* Create a AverageBaseCumulativeInSumPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {AverageBaseCumulativeInSumPattern}
|
||
*/
|
||
function createAverageBaseCumulativeInSumPattern(client, acc) {
|
||
return {
|
||
average: create_1m1w1y24hPattern3(client, _m(acc, 'average')),
|
||
base: createBtcCentsSatsUsdPattern2(client, acc),
|
||
cumulative: createBtcCentsSatsUsdPattern2(client, _m(acc, 'cumulative')),
|
||
inLoss: createAverageBaseCumulativeSumPattern3(client, _m(acc, 'in_loss')),
|
||
inProfit: createAverageBaseCumulativeSumPattern3(client, _m(acc, 'in_profit')),
|
||
sum: create_1m1w1y24hPattern4(client, _m(acc, 'sum')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BaseChangeCumulativeDeltaSumToPattern
|
||
* @property {CentsUsdPattern} base
|
||
* @property {ToPattern} change1m
|
||
* @property {CentsUsdPattern} cumulative
|
||
* @property {AbsoluteRatePattern2} delta
|
||
* @property {_1m1w1y24hPattern5} sum
|
||
* @property {BpsPercentRatioPattern} toRcap
|
||
*/
|
||
|
||
/**
|
||
* Create a BaseChangeCumulativeDeltaSumToPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BaseChangeCumulativeDeltaSumToPattern}
|
||
*/
|
||
function createBaseChangeCumulativeDeltaSumToPattern(client, acc) {
|
||
return {
|
||
base: createCentsUsdPattern(client, _m(acc, 'realized_pnl')),
|
||
change1m: createToPattern(client, _m(acc, 'pnl_change_1m_to')),
|
||
cumulative: createCentsUsdPattern(client, _m(acc, 'realized_pnl_cumulative')),
|
||
delta: createAbsoluteRatePattern2(client, _m(acc, 'realized_pnl_delta')),
|
||
sum: create_1m1w1y24hPattern5(client, _m(acc, 'realized_pnl_sum')),
|
||
toRcap: createBpsPercentRatioPattern(client, _m(acc, 'realized_pnl_to_rcap')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BpsCentsPercentilesRatioSatsUsdPattern
|
||
* @property {SeriesPattern1<BasisPoints32>} bps
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {Pct1Pct2Pct5Pct95Pct98Pct99Pattern} percentiles
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
* @property {SeriesPattern1<SatsFract>} sats
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a BpsCentsPercentilesRatioSatsUsdPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BpsCentsPercentilesRatioSatsUsdPattern}
|
||
*/
|
||
function createBpsCentsPercentilesRatioSatsUsdPattern(client, acc) {
|
||
return {
|
||
bps: createSeriesPattern1(client, _m(acc, 'ratio_bps')),
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
percentiles: createPct1Pct2Pct5Pct95Pct98Pct99Pattern(client, acc),
|
||
ratio: createSeriesPattern1(client, _m(acc, 'ratio')),
|
||
sats: createSeriesPattern1(client, _m(acc, 'sats')),
|
||
usd: createSeriesPattern1(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BtcCentsSatsToUsdPattern3
|
||
* @property {SeriesPattern1<Bitcoin>} btc
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<Sats>} sats
|
||
* @property {BpsPercentRatioPattern3} toCirculating
|
||
* @property {BpsPercentRatioPattern3} toOwn
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a BtcCentsSatsToUsdPattern3 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BtcCentsSatsToUsdPattern3}
|
||
*/
|
||
function createBtcCentsSatsToUsdPattern3(client, acc) {
|
||
return {
|
||
btc: createSeriesPattern1(client, acc),
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
sats: createSeriesPattern1(client, _m(acc, 'sats')),
|
||
toCirculating: createBpsPercentRatioPattern3(client, _m(acc, 'to_circulating')),
|
||
toOwn: createBpsPercentRatioPattern3(client, _m(acc, 'to_own')),
|
||
usd: createSeriesPattern1(client, _m(acc, 'usd')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CentsNegativeToUsdPattern2
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<Dollars>} negative
|
||
* @property {BpsPercentRatioPattern3} toMcap
|
||
* @property {BpsPercentRatioPattern3} toOwnGrossPnl
|
||
* @property {BpsPercentRatioPattern4} toOwnMcap
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a CentsNegativeToUsdPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CentsNegativeToUsdPattern2}
|
||
*/
|
||
function createCentsNegativeToUsdPattern2(client, acc) {
|
||
return {
|
||
cents: createSeriesPattern1(client, _m(acc, 'unrealized_loss_cents')),
|
||
negative: createSeriesPattern1(client, _m(acc, 'neg_unrealized_loss')),
|
||
toMcap: createBpsPercentRatioPattern3(client, _m(acc, 'unrealized_loss_to_mcap')),
|
||
toOwnGrossPnl: createBpsPercentRatioPattern3(client, _m(acc, 'unrealized_loss_to_own_gross_pnl')),
|
||
toOwnMcap: createBpsPercentRatioPattern4(client, _m(acc, 'unrealized_loss_to_own_mcap')),
|
||
usd: createSeriesPattern1(client, _m(acc, 'unrealized_loss')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} DeltaHalfInToTotalPattern
|
||
* @property {AbsoluteRatePattern} delta
|
||
* @property {BtcCentsSatsUsdPattern2} half
|
||
* @property {BtcCentsSatsToUsdPattern} inLoss
|
||
* @property {BtcCentsSatsToUsdPattern} inProfit
|
||
* @property {BpsPercentRatioPattern3} toCirculating
|
||
* @property {BtcCentsSatsUsdPattern2} total
|
||
*/
|
||
|
||
/**
|
||
* Create a DeltaHalfInToTotalPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {DeltaHalfInToTotalPattern}
|
||
*/
|
||
function createDeltaHalfInToTotalPattern(client, acc) {
|
||
return {
|
||
delta: createAbsoluteRatePattern(client, _m(acc, 'delta')),
|
||
half: createBtcCentsSatsUsdPattern2(client, _m(acc, 'half')),
|
||
inLoss: createBtcCentsSatsToUsdPattern(client, _m(acc, 'in_loss')),
|
||
inProfit: createBtcCentsSatsToUsdPattern(client, _m(acc, 'in_profit')),
|
||
toCirculating: createBpsPercentRatioPattern3(client, _m(acc, 'to_circulating')),
|
||
total: createBtcCentsSatsUsdPattern2(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} DeltaHalfInToTotalPattern2
|
||
* @property {AbsoluteRatePattern} delta
|
||
* @property {BtcCentsSatsUsdPattern2} half
|
||
* @property {BtcCentsSatsToUsdPattern3} inLoss
|
||
* @property {BtcCentsSatsToUsdPattern3} inProfit
|
||
* @property {BpsPercentRatioPattern3} toCirculating
|
||
* @property {BtcCentsSatsUsdPattern2} total
|
||
*/
|
||
|
||
/**
|
||
* Create a DeltaHalfInToTotalPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {DeltaHalfInToTotalPattern2}
|
||
*/
|
||
function createDeltaHalfInToTotalPattern2(client, acc) {
|
||
return {
|
||
delta: createAbsoluteRatePattern(client, _m(acc, 'delta')),
|
||
half: createBtcCentsSatsUsdPattern2(client, _m(acc, 'half')),
|
||
inLoss: createBtcCentsSatsToUsdPattern3(client, _m(acc, 'in_loss')),
|
||
inProfit: createBtcCentsSatsToUsdPattern3(client, _m(acc, 'in_profit')),
|
||
toCirculating: createBpsPercentRatioPattern3(client, _m(acc, 'to_circulating')),
|
||
total: createBtcCentsSatsUsdPattern2(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} Pct1Pct2Pct5Pct95Pct98Pct99Pattern
|
||
* @property {BpsPriceRatioPattern} pct1
|
||
* @property {BpsPriceRatioPattern} pct2
|
||
* @property {BpsPriceRatioPattern} pct5
|
||
* @property {BpsPriceRatioPattern} pct95
|
||
* @property {BpsPriceRatioPattern} pct98
|
||
* @property {BpsPriceRatioPattern} pct99
|
||
*/
|
||
|
||
/**
|
||
* Create a Pct1Pct2Pct5Pct95Pct98Pct99Pattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {Pct1Pct2Pct5Pct95Pct98Pct99Pattern}
|
||
*/
|
||
function createPct1Pct2Pct5Pct95Pct98Pct99Pattern(client, acc) {
|
||
return {
|
||
pct1: createBpsPriceRatioPattern(client, acc, 'pct1'),
|
||
pct2: createBpsPriceRatioPattern(client, acc, 'pct2'),
|
||
pct5: createBpsPriceRatioPattern(client, acc, 'pct5'),
|
||
pct95: createBpsPriceRatioPattern(client, acc, 'pct95'),
|
||
pct98: createBpsPriceRatioPattern(client, acc, 'pct98'),
|
||
pct99: createBpsPriceRatioPattern(client, acc, 'pct99'),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _1m1w1y24hBasePattern
|
||
* @property {SeriesPattern1<StoredF32>} _1m
|
||
* @property {SeriesPattern1<StoredF32>} _1w
|
||
* @property {SeriesPattern1<StoredF32>} _1y
|
||
* @property {SeriesPattern1<StoredF32>} _24h
|
||
* @property {SeriesPattern18<StoredU32>} base
|
||
*/
|
||
|
||
/**
|
||
* Create a _1m1w1y24hBasePattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_1m1w1y24hBasePattern}
|
||
*/
|
||
function create_1m1w1y24hBasePattern(client, acc) {
|
||
return {
|
||
_1m: createSeriesPattern1(client, _m(acc, 'average_1m')),
|
||
_1w: createSeriesPattern1(client, _m(acc, 'average_1w')),
|
||
_1y: createSeriesPattern1(client, _m(acc, 'average_1y')),
|
||
_24h: createSeriesPattern1(client, _m(acc, 'average_24h')),
|
||
base: createSeriesPattern18(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} ActivityOutputsRealizedSupplyUnrealizedPattern
|
||
* @property {CoindaysTransferPattern} activity
|
||
* @property {UnspentPattern} outputs
|
||
* @property {CapLossMvrvNetPriceProfitSoprPattern} realized
|
||
* @property {DeltaHalfInToTotalPattern} supply
|
||
* @property {LossNetNuplProfitPattern} unrealized
|
||
*/
|
||
|
||
/**
|
||
* Create a ActivityOutputsRealizedSupplyUnrealizedPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {ActivityOutputsRealizedSupplyUnrealizedPattern}
|
||
*/
|
||
function createActivityOutputsRealizedSupplyUnrealizedPattern(client, acc) {
|
||
return {
|
||
activity: createCoindaysTransferPattern(client, acc),
|
||
outputs: createUnspentPattern(client, _m(acc, 'utxo_count')),
|
||
realized: createCapLossMvrvNetPriceProfitSoprPattern(client, acc),
|
||
supply: createDeltaHalfInToTotalPattern(client, _m(acc, 'supply')),
|
||
unrealized: createLossNetNuplProfitPattern(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} ActivityOutputsRealizedSupplyUnrealizedPattern3
|
||
* @property {TransferPattern} activity
|
||
* @property {UnspentPattern} outputs
|
||
* @property {CapLossMvrvPriceProfitPattern} realized
|
||
* @property {DeltaHalfInTotalPattern2} supply
|
||
* @property {LossNuplProfitPattern} unrealized
|
||
*/
|
||
|
||
/**
|
||
* Create a ActivityOutputsRealizedSupplyUnrealizedPattern3 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {ActivityOutputsRealizedSupplyUnrealizedPattern3}
|
||
*/
|
||
function createActivityOutputsRealizedSupplyUnrealizedPattern3(client, acc) {
|
||
return {
|
||
activity: createTransferPattern(client, _m(acc, 'transfer_volume')),
|
||
outputs: createUnspentPattern(client, _m(acc, 'utxo_count')),
|
||
realized: createCapLossMvrvPriceProfitPattern(client, acc),
|
||
supply: createDeltaHalfInTotalPattern2(client, _m(acc, 'supply')),
|
||
unrealized: createLossNuplProfitPattern(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} ActivityOutputsRealizedSupplyUnrealizedPattern2
|
||
* @property {TransferPattern} activity
|
||
* @property {UnspentPattern} outputs
|
||
* @property {CapLossMvrvPriceProfitPattern} realized
|
||
* @property {DeltaHalfTotalPattern} supply
|
||
* @property {NuplPattern} unrealized
|
||
*/
|
||
|
||
/**
|
||
* Create a ActivityOutputsRealizedSupplyUnrealizedPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {ActivityOutputsRealizedSupplyUnrealizedPattern2}
|
||
*/
|
||
function createActivityOutputsRealizedSupplyUnrealizedPattern2(client, acc) {
|
||
return {
|
||
activity: createTransferPattern(client, _m(acc, 'transfer_volume')),
|
||
outputs: createUnspentPattern(client, _m(acc, 'utxo_count')),
|
||
realized: createCapLossMvrvPriceProfitPattern(client, acc),
|
||
supply: createDeltaHalfTotalPattern(client, _m(acc, 'supply')),
|
||
unrealized: createNuplPattern(client, _m(acc, 'nupl')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BaseCumulativeNegativeSumToPattern
|
||
* @property {CentsUsdPattern2} base
|
||
* @property {CentsUsdPattern2} cumulative
|
||
* @property {BaseSumPattern} negative
|
||
* @property {_1m1w1y24hPattern6} sum
|
||
* @property {BpsPercentRatioPattern4} toRcap
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} BpsCentsRatioSatsUsdPattern
|
||
* @property {SeriesPattern1<BasisPoints32>} bps
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
* @property {SeriesPattern1<SatsFract>} sats
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a BpsCentsRatioSatsUsdPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BpsCentsRatioSatsUsdPattern}
|
||
*/
|
||
function createBpsCentsRatioSatsUsdPattern(client, acc) {
|
||
return {
|
||
bps: createSeriesPattern1(client, _m(acc, 'ratio_bps')),
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
ratio: createSeriesPattern1(client, _m(acc, 'ratio')),
|
||
sats: createSeriesPattern1(client, _m(acc, 'sats')),
|
||
usd: createSeriesPattern1(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BtcCentsDeltaSatsUsdPattern
|
||
* @property {SeriesPattern1<Bitcoin>} btc
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {AbsoluteRatePattern} delta
|
||
* @property {SeriesPattern1<Sats>} sats
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a BtcCentsDeltaSatsUsdPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BtcCentsDeltaSatsUsdPattern}
|
||
*/
|
||
function createBtcCentsDeltaSatsUsdPattern(client, acc) {
|
||
return {
|
||
btc: createSeriesPattern1(client, acc),
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
delta: createAbsoluteRatePattern(client, _m(acc, 'delta')),
|
||
sats: createSeriesPattern1(client, _m(acc, 'sats')),
|
||
usd: createSeriesPattern1(client, _m(acc, 'usd')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BtcCentsSatsToUsdPattern
|
||
* @property {SeriesPattern1<Bitcoin>} btc
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<Sats>} sats
|
||
* @property {BpsPercentRatioPattern3} toCirculating
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a BtcCentsSatsToUsdPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BtcCentsSatsToUsdPattern}
|
||
*/
|
||
function createBtcCentsSatsToUsdPattern(client, acc) {
|
||
return {
|
||
btc: createSeriesPattern1(client, acc),
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
sats: createSeriesPattern1(client, _m(acc, 'sats')),
|
||
toCirculating: createBpsPercentRatioPattern3(client, _m(acc, 'to_circulating')),
|
||
usd: createSeriesPattern1(client, _m(acc, 'usd')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BtcCentsSatsToUsdPattern2
|
||
* @property {SeriesPattern1<Bitcoin>} btc
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<Sats>} sats
|
||
* @property {BpsPercentRatioPattern3} toOwn
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a BtcCentsSatsToUsdPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BtcCentsSatsToUsdPattern2}
|
||
*/
|
||
function createBtcCentsSatsToUsdPattern2(client, acc) {
|
||
return {
|
||
btc: createSeriesPattern1(client, acc),
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
sats: createSeriesPattern1(client, _m(acc, 'sats')),
|
||
toOwn: createBpsPercentRatioPattern3(client, _m(acc, 'to_own')),
|
||
usd: createSeriesPattern1(client, _m(acc, 'usd')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CapLossMvrvPriceProfitPattern
|
||
* @property {CentsDeltaUsdPattern} cap
|
||
* @property {BaseCumulativeSumPattern} loss
|
||
* @property {SeriesPattern1<StoredF32>} mvrv
|
||
* @property {BpsCentsRatioSatsUsdPattern} price
|
||
* @property {BaseCumulativeSumPattern} profit
|
||
*/
|
||
|
||
/**
|
||
* Create a CapLossMvrvPriceProfitPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CapLossMvrvPriceProfitPattern}
|
||
*/
|
||
function createCapLossMvrvPriceProfitPattern(client, acc) {
|
||
return {
|
||
cap: createCentsDeltaUsdPattern(client, _m(acc, 'realized_cap')),
|
||
loss: createBaseCumulativeSumPattern(client, _m(acc, 'realized_loss')),
|
||
mvrv: createSeriesPattern1(client, _m(acc, 'mvrv')),
|
||
price: createBpsCentsRatioSatsUsdPattern(client, _m(acc, 'realized_price')),
|
||
profit: createBaseCumulativeSumPattern(client, _m(acc, 'realized_profit')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CentsToUsdPattern4
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {BpsPercentRatioPattern3} toMcap
|
||
* @property {BpsPercentRatioPattern3} toOwnGrossPnl
|
||
* @property {BpsPercentRatioPattern3} toOwnMcap
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a CentsToUsdPattern4 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CentsToUsdPattern4}
|
||
*/
|
||
function createCentsToUsdPattern4(client, acc) {
|
||
return {
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
toMcap: createBpsPercentRatioPattern3(client, _m(acc, 'to_mcap')),
|
||
toOwnGrossPnl: createBpsPercentRatioPattern3(client, _m(acc, 'to_own_gross_pnl')),
|
||
toOwnMcap: createBpsPercentRatioPattern3(client, _m(acc, 'to_own_mcap')),
|
||
usd: createSeriesPattern1(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} DeltaHalfInTotalPattern2
|
||
* @property {AbsoluteRatePattern} delta
|
||
* @property {BtcCentsSatsUsdPattern2} half
|
||
* @property {BtcCentsSatsUsdPattern2} inLoss
|
||
* @property {BtcCentsSatsUsdPattern2} inProfit
|
||
* @property {BtcCentsSatsUsdPattern2} total
|
||
*/
|
||
|
||
/**
|
||
* Create a DeltaHalfInTotalPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {DeltaHalfInTotalPattern2}
|
||
*/
|
||
function createDeltaHalfInTotalPattern2(client, acc) {
|
||
return {
|
||
delta: createAbsoluteRatePattern(client, _m(acc, 'delta')),
|
||
half: createBtcCentsSatsUsdPattern2(client, _m(acc, 'half')),
|
||
inLoss: createBtcCentsSatsUsdPattern2(client, _m(acc, 'in_loss')),
|
||
inProfit: createBtcCentsSatsUsdPattern2(client, _m(acc, 'in_profit')),
|
||
total: createBtcCentsSatsUsdPattern2(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} EmaHistogramLineSignalPattern
|
||
* @property {SeriesPattern1<StoredF32>} emaFast
|
||
* @property {SeriesPattern1<StoredF32>} emaSlow
|
||
* @property {SeriesPattern1<StoredF32>} histogram
|
||
* @property {SeriesPattern1<StoredF32>} line
|
||
* @property {SeriesPattern1<StoredF32>} signal
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} PhsReboundThsPattern
|
||
* @property {SeriesPattern1<StoredF32>} phs
|
||
* @property {SeriesPattern1<StoredF32>} phsMin
|
||
* @property {BpsPercentRatioPattern} rebound
|
||
* @property {SeriesPattern1<StoredF32>} ths
|
||
* @property {SeriesPattern1<StoredF32>} thsMin
|
||
*/
|
||
|
||
/**
|
||
* Create a PhsReboundThsPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {PhsReboundThsPattern}
|
||
*/
|
||
function createPhsReboundThsPattern(client, acc) {
|
||
return {
|
||
phs: createSeriesPattern1(client, _m(acc, 'phs')),
|
||
phsMin: createSeriesPattern1(client, _m(acc, 'phs_min')),
|
||
rebound: createBpsPercentRatioPattern(client, _m(acc, 'rebound')),
|
||
ths: createSeriesPattern1(client, _m(acc, 'ths')),
|
||
thsMin: createSeriesPattern1(client, _m(acc, 'ths_min')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _1m1w1y24hPattern2
|
||
* @property {BpsPercentRatioPattern} _1m
|
||
* @property {BpsPercentRatioPattern} _1w
|
||
* @property {BpsPercentRatioPattern} _1y
|
||
* @property {BpsPercentRatioPattern} _24h
|
||
*/
|
||
|
||
/**
|
||
* Create a _1m1w1y24hPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_1m1w1y24hPattern2}
|
||
*/
|
||
function create_1m1w1y24hPattern2(client, acc) {
|
||
return {
|
||
_1m: createBpsPercentRatioPattern(client, _m(acc, '1m_rate')),
|
||
_1w: createBpsPercentRatioPattern(client, _m(acc, '1w_rate')),
|
||
_1y: createBpsPercentRatioPattern(client, _m(acc, '1y_rate')),
|
||
_24h: createBpsPercentRatioPattern(client, _m(acc, '24h_rate')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _1m1w1y24hPattern7
|
||
* @property {BpsPercentRatioPattern4} _1m
|
||
* @property {BpsPercentRatioPattern4} _1w
|
||
* @property {BpsPercentRatioPattern4} _1y
|
||
* @property {BpsPercentRatioPattern4} _24h
|
||
*/
|
||
|
||
/**
|
||
* Create a _1m1w1y24hPattern7 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_1m1w1y24hPattern7}
|
||
*/
|
||
function create_1m1w1y24hPattern7(client, acc) {
|
||
return {
|
||
_1m: createBpsPercentRatioPattern4(client, _m(acc, '1m')),
|
||
_1w: createBpsPercentRatioPattern4(client, _m(acc, '1w')),
|
||
_1y: createBpsPercentRatioPattern4(client, _m(acc, '1y')),
|
||
_24h: createBpsPercentRatioPattern4(client, _m(acc, '24h')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _1m1w1y24hPattern3
|
||
* @property {BtcCentsSatsUsdPattern} _1m
|
||
* @property {BtcCentsSatsUsdPattern} _1w
|
||
* @property {BtcCentsSatsUsdPattern} _1y
|
||
* @property {BtcCentsSatsUsdPattern} _24h
|
||
*/
|
||
|
||
/**
|
||
* Create a _1m1w1y24hPattern3 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_1m1w1y24hPattern3}
|
||
*/
|
||
function create_1m1w1y24hPattern3(client, acc) {
|
||
return {
|
||
_1m: createBtcCentsSatsUsdPattern(client, _m(acc, '1m')),
|
||
_1w: createBtcCentsSatsUsdPattern(client, _m(acc, '1w')),
|
||
_1y: createBtcCentsSatsUsdPattern(client, _m(acc, '1y')),
|
||
_24h: createBtcCentsSatsUsdPattern(client, _m(acc, '24h')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _1m1w1y24hPattern4
|
||
* @property {BtcCentsSatsUsdPattern2} _1m
|
||
* @property {BtcCentsSatsUsdPattern2} _1w
|
||
* @property {BtcCentsSatsUsdPattern2} _1y
|
||
* @property {BtcCentsSatsUsdPattern2} _24h
|
||
*/
|
||
|
||
/**
|
||
* Create a _1m1w1y24hPattern4 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_1m1w1y24hPattern4}
|
||
*/
|
||
function create_1m1w1y24hPattern4(client, acc) {
|
||
return {
|
||
_1m: createBtcCentsSatsUsdPattern2(client, _m(acc, '1m')),
|
||
_1w: createBtcCentsSatsUsdPattern2(client, _m(acc, '1w')),
|
||
_1y: createBtcCentsSatsUsdPattern2(client, _m(acc, '1y')),
|
||
_24h: createBtcCentsSatsUsdPattern2(client, _m(acc, '24h')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _1m1w1y2wPattern
|
||
* @property {CentsSatsUsdPattern} _1m
|
||
* @property {CentsSatsUsdPattern} _1w
|
||
* @property {CentsSatsUsdPattern} _1y
|
||
* @property {CentsSatsUsdPattern} _2w
|
||
*/
|
||
|
||
/**
|
||
* Create a _1m1w1y2wPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_1m1w1y2wPattern}
|
||
*/
|
||
function create_1m1w1y2wPattern(client, acc) {
|
||
return {
|
||
_1m: createCentsSatsUsdPattern(client, _m(acc, '1m')),
|
||
_1w: createCentsSatsUsdPattern(client, _m(acc, '1w')),
|
||
_1y: createCentsSatsUsdPattern(client, _m(acc, '1y')),
|
||
_2w: createCentsSatsUsdPattern(client, _m(acc, '2w')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _1m1w1y24hPattern5
|
||
* @property {CentsUsdPattern} _1m
|
||
* @property {CentsUsdPattern} _1w
|
||
* @property {CentsUsdPattern} _1y
|
||
* @property {CentsUsdPattern} _24h
|
||
*/
|
||
|
||
/**
|
||
* Create a _1m1w1y24hPattern5 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_1m1w1y24hPattern5}
|
||
*/
|
||
function create_1m1w1y24hPattern5(client, acc) {
|
||
return {
|
||
_1m: createCentsUsdPattern(client, _m(acc, '1m')),
|
||
_1w: createCentsUsdPattern(client, _m(acc, '1w')),
|
||
_1y: createCentsUsdPattern(client, _m(acc, '1y')),
|
||
_24h: createCentsUsdPattern(client, _m(acc, '24h')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _1m1w1y24hPattern6
|
||
* @property {CentsUsdPattern2} _1m
|
||
* @property {CentsUsdPattern2} _1w
|
||
* @property {CentsUsdPattern2} _1y
|
||
* @property {CentsUsdPattern2} _24h
|
||
*/
|
||
|
||
/**
|
||
* Create a _1m1w1y24hPattern6 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_1m1w1y24hPattern6}
|
||
*/
|
||
function create_1m1w1y24hPattern6(client, acc) {
|
||
return {
|
||
_1m: createCentsUsdPattern2(client, _m(acc, '1m')),
|
||
_1w: createCentsUsdPattern2(client, _m(acc, '1w')),
|
||
_1y: createCentsUsdPattern2(client, _m(acc, '1y')),
|
||
_24h: createCentsUsdPattern2(client, _m(acc, '24h')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _1y2y4yAllPattern
|
||
* @property {_0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdZscorePattern} _1y
|
||
* @property {_0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdZscorePattern} _2y
|
||
* @property {_0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdZscorePattern} _4y
|
||
* @property {_0sdM0M1M1sdM2M2sdM3sdP0P1P1sdP2P2sdP3sdSdZscorePattern} all
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} AverageBaseCumulativeSumPattern2
|
||
* @property {_1m1w1y24hPattern<StoredF32>} average
|
||
* @property {SeriesPattern1<StoredU32>} base
|
||
* @property {SeriesPattern1<StoredU64>} cumulative
|
||
* @property {_1m1w1y24hPattern<StoredU64>} sum
|
||
*/
|
||
|
||
/**
|
||
* Create a AverageBaseCumulativeSumPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {AverageBaseCumulativeSumPattern2}
|
||
*/
|
||
function createAverageBaseCumulativeSumPattern2(client, acc) {
|
||
return {
|
||
average: create_1m1w1y24hPattern(client, _m(acc, 'average')),
|
||
base: createSeriesPattern1(client, acc),
|
||
cumulative: createSeriesPattern1(client, _m(acc, 'cumulative')),
|
||
sum: create_1m1w1y24hPattern(client, _m(acc, 'sum')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} AverageBaseCumulativeSumPattern3
|
||
* @property {_1m1w1y24hPattern3} average
|
||
* @property {BtcCentsSatsUsdPattern2} base
|
||
* @property {BtcCentsSatsUsdPattern2} cumulative
|
||
* @property {_1m1w1y24hPattern4} sum
|
||
*/
|
||
|
||
/**
|
||
* Create a AverageBaseCumulativeSumPattern3 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {AverageBaseCumulativeSumPattern3}
|
||
*/
|
||
function createAverageBaseCumulativeSumPattern3(client, acc) {
|
||
return {
|
||
average: create_1m1w1y24hPattern3(client, _m(acc, 'average')),
|
||
base: createBtcCentsSatsUsdPattern2(client, acc),
|
||
cumulative: createBtcCentsSatsUsdPattern2(client, _m(acc, 'cumulative')),
|
||
sum: create_1m1w1y24hPattern4(client, _m(acc, 'sum')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BaseCumulativeDeltaSumPattern
|
||
* @property {CentsUsdPattern} base
|
||
* @property {CentsUsdPattern} cumulative
|
||
* @property {AbsoluteRatePattern2} delta
|
||
* @property {_1m1w1y24hPattern5} sum
|
||
*/
|
||
|
||
/**
|
||
* Create a BaseCumulativeDeltaSumPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BaseCumulativeDeltaSumPattern}
|
||
*/
|
||
function createBaseCumulativeDeltaSumPattern(client, acc) {
|
||
return {
|
||
base: createCentsUsdPattern(client, acc),
|
||
cumulative: createCentsUsdPattern(client, _m(acc, 'cumulative')),
|
||
delta: createAbsoluteRatePattern2(client, _m(acc, 'delta')),
|
||
sum: create_1m1w1y24hPattern5(client, _m(acc, 'sum')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BaseCumulativeNegativeSumPattern
|
||
* @property {CentsUsdPattern2} base
|
||
* @property {CentsUsdPattern2} cumulative
|
||
* @property {BaseSumPattern} negative
|
||
* @property {_1m1w1y24hPattern6} sum
|
||
*/
|
||
|
||
/**
|
||
* Create a BaseCumulativeNegativeSumPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BaseCumulativeNegativeSumPattern}
|
||
*/
|
||
function createBaseCumulativeNegativeSumPattern(client, acc) {
|
||
return {
|
||
base: createCentsUsdPattern2(client, _m(acc, 'realized_loss')),
|
||
cumulative: createCentsUsdPattern2(client, _m(acc, 'realized_loss_cumulative')),
|
||
negative: createBaseSumPattern(client, _m(acc, 'neg_realized_loss')),
|
||
sum: create_1m1w1y24hPattern6(client, _m(acc, 'realized_loss_sum')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BaseCumulativeSumToPattern
|
||
* @property {CentsUsdPattern2} base
|
||
* @property {CentsUsdPattern2} cumulative
|
||
* @property {_1m1w1y24hPattern6} sum
|
||
* @property {BpsPercentRatioPattern4} toRcap
|
||
*/
|
||
|
||
/**
|
||
* Create a BaseCumulativeSumToPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BaseCumulativeSumToPattern}
|
||
*/
|
||
function createBaseCumulativeSumToPattern(client, acc) {
|
||
return {
|
||
base: createCentsUsdPattern2(client, acc),
|
||
cumulative: createCentsUsdPattern2(client, _m(acc, 'cumulative')),
|
||
sum: create_1m1w1y24hPattern6(client, _m(acc, 'sum')),
|
||
toRcap: createBpsPercentRatioPattern4(client, _m(acc, 'to_rcap')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BothReactivatedReceivingSendingPattern
|
||
* @property {_1m1w1y24hBasePattern} both
|
||
* @property {_1m1w1y24hBasePattern} reactivated
|
||
* @property {_1m1w1y24hBasePattern} receiving
|
||
* @property {_1m1w1y24hBasePattern} sending
|
||
*/
|
||
|
||
/**
|
||
* Create a BothReactivatedReceivingSendingPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BothReactivatedReceivingSendingPattern}
|
||
*/
|
||
function createBothReactivatedReceivingSendingPattern(client, acc) {
|
||
return {
|
||
both: create_1m1w1y24hBasePattern(client, _m(acc, 'both')),
|
||
reactivated: create_1m1w1y24hBasePattern(client, _m(acc, 'reactivated')),
|
||
receiving: create_1m1w1y24hBasePattern(client, _m(acc, 'receiving')),
|
||
sending: create_1m1w1y24hBasePattern(client, _m(acc, 'sending')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BtcCentsSatsUsdPattern2
|
||
* @property {SeriesPattern1<Bitcoin>} btc
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<Sats>} sats
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a BtcCentsSatsUsdPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BtcCentsSatsUsdPattern2}
|
||
*/
|
||
function createBtcCentsSatsUsdPattern2(client, acc) {
|
||
return {
|
||
btc: createSeriesPattern1(client, acc),
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
sats: createSeriesPattern1(client, _m(acc, 'sats')),
|
||
usd: createSeriesPattern1(client, _m(acc, 'usd')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BtcCentsSatsUsdPattern
|
||
* @property {SeriesPattern1<Bitcoin>} btc
|
||
* @property {SeriesPattern1<StoredF32>} cents
|
||
* @property {SeriesPattern1<StoredF32>} sats
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a BtcCentsSatsUsdPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BtcCentsSatsUsdPattern}
|
||
*/
|
||
function createBtcCentsSatsUsdPattern(client, acc) {
|
||
return {
|
||
btc: createSeriesPattern1(client, acc),
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
sats: createSeriesPattern1(client, _m(acc, 'sats')),
|
||
usd: createSeriesPattern1(client, _m(acc, 'usd')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CentsDeltaToUsdPattern
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {AbsoluteRatePattern2} delta
|
||
* @property {BpsPercentRatioPattern4} toOwnMcap
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a CentsDeltaToUsdPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CentsDeltaToUsdPattern}
|
||
*/
|
||
function createCentsDeltaToUsdPattern(client, acc) {
|
||
return {
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
delta: createAbsoluteRatePattern2(client, _m(acc, 'delta')),
|
||
toOwnMcap: createBpsPercentRatioPattern4(client, _m(acc, 'to_own_mcap')),
|
||
usd: createSeriesPattern1(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CentsToUsdPattern3
|
||
* @property {SeriesPattern1<CentsSigned>} cents
|
||
* @property {BpsPercentRatioPattern} toOwnGrossPnl
|
||
* @property {BpsPercentRatioPattern} toOwnMcap
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a CentsToUsdPattern3 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CentsToUsdPattern3}
|
||
*/
|
||
function createCentsToUsdPattern3(client, acc) {
|
||
return {
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
toOwnGrossPnl: createBpsPercentRatioPattern(client, _m(acc, 'to_own_gross_pnl')),
|
||
toOwnMcap: createBpsPercentRatioPattern(client, _m(acc, 'to_own_mcap')),
|
||
usd: createSeriesPattern1(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CoindaysCoinyearsDormancyTransferPattern
|
||
* @property {AverageBaseCumulativeSumPattern<StoredF64>} coindaysDestroyed
|
||
* @property {SeriesPattern1<StoredF64>} coinyearsDestroyed
|
||
* @property {_1m1w1y24hPattern<StoredF32>} dormancy
|
||
* @property {AverageBaseCumulativeInSumPattern} transferVolume
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} LossNetNuplProfitPattern
|
||
* @property {CentsNegativeUsdPattern} loss
|
||
* @property {CentsUsdPattern} netPnl
|
||
* @property {BpsRatioPattern} nupl
|
||
* @property {CentsUsdPattern2} profit
|
||
*/
|
||
|
||
/**
|
||
* Create a LossNetNuplProfitPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {LossNetNuplProfitPattern}
|
||
*/
|
||
function createLossNetNuplProfitPattern(client, acc) {
|
||
return {
|
||
loss: createCentsNegativeUsdPattern(client, acc),
|
||
netPnl: createCentsUsdPattern(client, _m(acc, 'net_unrealized_pnl')),
|
||
nupl: createBpsRatioPattern(client, _m(acc, 'nupl')),
|
||
profit: createCentsUsdPattern2(client, _m(acc, 'unrealized_profit')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @template T
|
||
* @typedef {Object} _1m1w1y24hPattern
|
||
* @property {SeriesPattern1<T>} _1m
|
||
* @property {SeriesPattern1<T>} _1w
|
||
* @property {SeriesPattern1<T>} _1y
|
||
* @property {SeriesPattern1<T>} _24h
|
||
*/
|
||
|
||
/**
|
||
* Create a _1m1w1y24hPattern pattern node
|
||
* @template T
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_1m1w1y24hPattern<T>}
|
||
*/
|
||
function create_1m1w1y24hPattern(client, acc) {
|
||
return {
|
||
_1m: createSeriesPattern1(client, _m(acc, '1m')),
|
||
_1w: createSeriesPattern1(client, _m(acc, '1w')),
|
||
_1y: createSeriesPattern1(client, _m(acc, '1y')),
|
||
_24h: createSeriesPattern1(client, _m(acc, '24h')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @template T
|
||
* @typedef {Object} AverageBaseCumulativeSumPattern
|
||
* @property {_1m1w1y24hPattern<T>} average
|
||
* @property {SeriesPattern1<T>} base
|
||
* @property {SeriesPattern1<T>} cumulative
|
||
* @property {_1m1w1y24hPattern<T>} sum
|
||
*/
|
||
|
||
/**
|
||
* Create a AverageBaseCumulativeSumPattern pattern node
|
||
* @template T
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {AverageBaseCumulativeSumPattern<T>}
|
||
*/
|
||
function createAverageBaseCumulativeSumPattern(client, acc) {
|
||
return {
|
||
average: create_1m1w1y24hPattern(client, _m(acc, 'average')),
|
||
base: createSeriesPattern1(client, acc),
|
||
cumulative: createSeriesPattern1(client, _m(acc, 'cumulative')),
|
||
sum: create_1m1w1y24hPattern(client, _m(acc, 'sum')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} AdjustedRatioValuePattern
|
||
* @property {RatioTransferValuePattern} adjusted
|
||
* @property {_1m1w1y24hPattern<StoredF64>} ratio
|
||
* @property {AverageBaseCumulativeSumPattern<Cents>} valueDestroyed
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} BaseCumulativeSumPattern
|
||
* @property {CentsUsdPattern2} base
|
||
* @property {CentsUsdPattern2} cumulative
|
||
* @property {_1m1w1y24hPattern6} sum
|
||
*/
|
||
|
||
/**
|
||
* Create a BaseCumulativeSumPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BaseCumulativeSumPattern}
|
||
*/
|
||
function createBaseCumulativeSumPattern(client, acc) {
|
||
return {
|
||
base: createCentsUsdPattern2(client, acc),
|
||
cumulative: createCentsUsdPattern2(client, _m(acc, 'cumulative')),
|
||
sum: create_1m1w1y24hPattern6(client, _m(acc, 'sum')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BlocksDominanceRewardsPattern
|
||
* @property {AverageBaseCumulativeSumPattern2} blocksMined
|
||
* @property {_1m1w1y24hBpsPercentRatioPattern} dominance
|
||
* @property {AverageBaseCumulativeSumPattern3} rewards
|
||
*/
|
||
|
||
/**
|
||
* Create a BlocksDominanceRewardsPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BlocksDominanceRewardsPattern}
|
||
*/
|
||
function createBlocksDominanceRewardsPattern(client, acc) {
|
||
return {
|
||
blocksMined: createAverageBaseCumulativeSumPattern2(client, _m(acc, 'blocks_mined')),
|
||
dominance: create_1m1w1y24hBpsPercentRatioPattern(client, _m(acc, 'dominance')),
|
||
rewards: createAverageBaseCumulativeSumPattern3(client, _m(acc, 'rewards')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BpsPercentRatioPattern3
|
||
* @property {SeriesPattern1<BasisPoints16>} bps
|
||
* @property {SeriesPattern1<StoredF32>} percent
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
*/
|
||
|
||
/**
|
||
* Create a BpsPercentRatioPattern3 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BpsPercentRatioPattern3}
|
||
*/
|
||
function createBpsPercentRatioPattern3(client, acc) {
|
||
return {
|
||
bps: createSeriesPattern1(client, _m(acc, 'bps')),
|
||
percent: createSeriesPattern1(client, acc),
|
||
ratio: createSeriesPattern1(client, _m(acc, 'ratio')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BpsPercentRatioPattern4
|
||
* @property {SeriesPattern1<BasisPoints32>} bps
|
||
* @property {SeriesPattern1<StoredF32>} percent
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
*/
|
||
|
||
/**
|
||
* Create a BpsPercentRatioPattern4 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BpsPercentRatioPattern4}
|
||
*/
|
||
function createBpsPercentRatioPattern4(client, acc) {
|
||
return {
|
||
bps: createSeriesPattern1(client, _m(acc, 'bps')),
|
||
percent: createSeriesPattern1(client, acc),
|
||
ratio: createSeriesPattern1(client, _m(acc, 'ratio')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BpsPriceRatioPattern
|
||
* @property {SeriesPattern1<BasisPoints32>} bps
|
||
* @property {CentsSatsUsdPattern} price
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
*/
|
||
|
||
/**
|
||
* Create a BpsPriceRatioPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @param {string} disc - Discriminator suffix
|
||
* @returns {BpsPriceRatioPattern}
|
||
*/
|
||
function createBpsPriceRatioPattern(client, acc, disc) {
|
||
return {
|
||
bps: createSeriesPattern1(client, _m(acc, `ratio_${disc}_bps`)),
|
||
price: createCentsSatsUsdPattern(client, _m(acc, disc)),
|
||
ratio: createSeriesPattern1(client, _m(_m(acc, 'ratio'), disc)),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BpsPercentRatioPattern5
|
||
* @property {SeriesPattern1<BasisPointsSigned16>} bps
|
||
* @property {SeriesPattern1<StoredF32>} percent
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
*/
|
||
|
||
/**
|
||
* Create a BpsPercentRatioPattern5 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BpsPercentRatioPattern5}
|
||
*/
|
||
function createBpsPercentRatioPattern5(client, acc) {
|
||
return {
|
||
bps: createSeriesPattern1(client, _m(acc, 'bps')),
|
||
percent: createSeriesPattern1(client, acc),
|
||
ratio: createSeriesPattern1(client, _m(acc, 'ratio')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BpsPercentRatioPattern
|
||
* @property {SeriesPattern1<BasisPointsSigned32>} bps
|
||
* @property {SeriesPattern1<StoredF32>} percent
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
*/
|
||
|
||
/**
|
||
* Create a BpsPercentRatioPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BpsPercentRatioPattern}
|
||
*/
|
||
function createBpsPercentRatioPattern(client, acc) {
|
||
return {
|
||
bps: createSeriesPattern1(client, _m(acc, 'bps')),
|
||
percent: createSeriesPattern1(client, acc),
|
||
ratio: createSeriesPattern1(client, _m(acc, 'ratio')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CentsSatsUsdPattern3
|
||
* @property {SeriesPattern2<Cents>} cents
|
||
* @property {SeriesPattern2<Sats>} sats
|
||
* @property {SeriesPattern2<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a CentsSatsUsdPattern3 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CentsSatsUsdPattern3}
|
||
*/
|
||
function createCentsSatsUsdPattern3(client, acc) {
|
||
return {
|
||
cents: createSeriesPattern2(client, _m(acc, 'cents')),
|
||
sats: createSeriesPattern2(client, _m(acc, 'sats')),
|
||
usd: createSeriesPattern2(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CentsDeltaUsdPattern
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {AbsoluteRatePattern2} delta
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a CentsDeltaUsdPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CentsDeltaUsdPattern}
|
||
*/
|
||
function createCentsDeltaUsdPattern(client, acc) {
|
||
return {
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
delta: createAbsoluteRatePattern2(client, _m(acc, 'delta')),
|
||
usd: createSeriesPattern1(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CentsNegativeUsdPattern
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<Dollars>} negative
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a CentsNegativeUsdPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CentsNegativeUsdPattern}
|
||
*/
|
||
function createCentsNegativeUsdPattern(client, acc) {
|
||
return {
|
||
cents: createSeriesPattern1(client, _m(acc, 'unrealized_loss_cents')),
|
||
negative: createSeriesPattern1(client, _m(acc, 'neg_unrealized_loss')),
|
||
usd: createSeriesPattern1(client, _m(acc, 'unrealized_loss')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CentsSatsUsdPattern
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<SatsFract>} sats
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a CentsSatsUsdPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CentsSatsUsdPattern}
|
||
*/
|
||
function createCentsSatsUsdPattern(client, acc) {
|
||
return {
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
sats: createSeriesPattern1(client, _m(acc, 'sats')),
|
||
usd: createSeriesPattern1(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CumulativeRollingSumPattern
|
||
* @property {SeriesPattern1<StoredU64>} cumulative
|
||
* @property {AverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern} rolling
|
||
* @property {SeriesPattern1<StoredU64>} sum
|
||
*/
|
||
|
||
/**
|
||
* Create a CumulativeRollingSumPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CumulativeRollingSumPattern}
|
||
*/
|
||
function createCumulativeRollingSumPattern(client, acc) {
|
||
return {
|
||
cumulative: createSeriesPattern1(client, _m(acc, 'cumulative')),
|
||
rolling: createAverageMaxMedianMinPct10Pct25Pct75Pct90SumPattern(client, acc),
|
||
sum: createSeriesPattern1(client, _m(acc, 'sum')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} DeltaHalfTotalPattern
|
||
* @property {AbsoluteRatePattern} delta
|
||
* @property {BtcCentsSatsUsdPattern2} half
|
||
* @property {BtcCentsSatsUsdPattern2} total
|
||
*/
|
||
|
||
/**
|
||
* Create a DeltaHalfTotalPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {DeltaHalfTotalPattern}
|
||
*/
|
||
function createDeltaHalfTotalPattern(client, acc) {
|
||
return {
|
||
delta: createAbsoluteRatePattern(client, _m(acc, 'delta')),
|
||
half: createBtcCentsSatsUsdPattern2(client, _m(acc, 'half')),
|
||
total: createBtcCentsSatsUsdPattern2(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} GreedNetPainPattern
|
||
* @property {CentsUsdPattern2} greedIndex
|
||
* @property {CentsUsdPattern} net
|
||
* @property {CentsUsdPattern2} painIndex
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} LossNuplProfitPattern
|
||
* @property {CentsNegativeUsdPattern} loss
|
||
* @property {BpsRatioPattern} nupl
|
||
* @property {CentsUsdPattern2} profit
|
||
*/
|
||
|
||
/**
|
||
* Create a LossNuplProfitPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {LossNuplProfitPattern}
|
||
*/
|
||
function createLossNuplProfitPattern(client, acc) {
|
||
return {
|
||
loss: createCentsNegativeUsdPattern(client, acc),
|
||
nupl: createBpsRatioPattern(client, _m(acc, 'nupl')),
|
||
profit: createCentsUsdPattern2(client, _m(acc, 'unrealized_profit')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} NuplRealizedSupplyPattern
|
||
* @property {BpsRatioPattern} nupl
|
||
* @property {AllSthPattern} realizedCap
|
||
* @property {AllSthPattern2} supply
|
||
*/
|
||
|
||
/**
|
||
* Create a NuplRealizedSupplyPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {NuplRealizedSupplyPattern}
|
||
*/
|
||
function createNuplRealizedSupplyPattern(client, acc) {
|
||
return {
|
||
nupl: createBpsRatioPattern(client, _m(acc, 'nupl')),
|
||
realizedCap: createAllSthPattern(client, acc),
|
||
supply: createAllSthPattern2(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} RatioTransferValuePattern
|
||
* @property {_1m1w1y24hPattern<StoredF64>} ratio
|
||
* @property {AverageBaseCumulativeSumPattern<Cents>} transferVolume
|
||
* @property {AverageBaseCumulativeSumPattern<Cents>} valueDestroyed
|
||
*/
|
||
|
||
/**
|
||
* @template T
|
||
* @typedef {Object} _6bBlockTxPattern
|
||
* @property {MaxMedianMinPct10Pct25Pct75Pct90Pattern<T>} _6b
|
||
* @property {MaxMedianMinPct10Pct25Pct75Pct90Pattern<T>} block
|
||
* @property {SeriesPattern19<T>} txIndex
|
||
*/
|
||
|
||
/**
|
||
* Create a _6bBlockTxPattern pattern node
|
||
* @template T
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_6bBlockTxPattern<T>}
|
||
*/
|
||
function create_6bBlockTxPattern(client, acc) {
|
||
return {
|
||
_6b: createMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, _m(acc, '6b')),
|
||
block: createMaxMedianMinPct10Pct25Pct75Pct90Pattern(client, acc),
|
||
txIndex: createSeriesPattern19(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} AbsoluteRatePattern
|
||
* @property {_1m1w1y24hPattern<StoredI64>} absolute
|
||
* @property {_1m1w1y24hPattern2} rate
|
||
*/
|
||
|
||
/**
|
||
* Create a AbsoluteRatePattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {AbsoluteRatePattern}
|
||
*/
|
||
function createAbsoluteRatePattern(client, acc) {
|
||
return {
|
||
absolute: create_1m1w1y24hPattern(client, acc),
|
||
rate: create_1m1w1y24hPattern2(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} AbsoluteRatePattern2
|
||
* @property {_1m1w1y24hPattern5} absolute
|
||
* @property {_1m1w1y24hPattern2} rate
|
||
*/
|
||
|
||
/**
|
||
* Create a AbsoluteRatePattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {AbsoluteRatePattern2}
|
||
*/
|
||
function createAbsoluteRatePattern2(client, acc) {
|
||
return {
|
||
absolute: create_1m1w1y24hPattern5(client, acc),
|
||
rate: create_1m1w1y24hPattern2(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} AllSthPattern2
|
||
* @property {BtcCentsDeltaSatsUsdPattern} all
|
||
* @property {BtcCentsSatsUsdPattern2} sth
|
||
*/
|
||
|
||
/**
|
||
* Create a AllSthPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {AllSthPattern2}
|
||
*/
|
||
function createAllSthPattern2(client, acc) {
|
||
return {
|
||
all: createBtcCentsDeltaSatsUsdPattern(client, _m(acc, 'supply')),
|
||
sth: createBtcCentsSatsUsdPattern2(client, _m(acc, 'sth_supply')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} AllSthPattern
|
||
* @property {SeriesPattern1<Dollars>} all
|
||
* @property {SeriesPattern1<Dollars>} sth
|
||
*/
|
||
|
||
/**
|
||
* Create a AllSthPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {AllSthPattern}
|
||
*/
|
||
function createAllSthPattern(client, acc) {
|
||
return {
|
||
all: createSeriesPattern1(client, _m(acc, 'realized_cap')),
|
||
sth: createSeriesPattern1(client, _m(acc, 'sth_realized_cap')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BaseSumPattern
|
||
* @property {SeriesPattern1<Dollars>} base
|
||
* @property {_1m1w1y24hPattern<Dollars>} sum
|
||
*/
|
||
|
||
/**
|
||
* Create a BaseSumPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BaseSumPattern}
|
||
*/
|
||
function createBaseSumPattern(client, acc) {
|
||
return {
|
||
base: createSeriesPattern1(client, acc),
|
||
sum: create_1m1w1y24hPattern(client, _m(acc, 'sum')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BaseDeltaPattern
|
||
* @property {SeriesPattern1<StoredU64>} base
|
||
* @property {AbsoluteRatePattern} delta
|
||
*/
|
||
|
||
/**
|
||
* Create a BaseDeltaPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BaseDeltaPattern}
|
||
*/
|
||
function createBaseDeltaPattern(client, acc) {
|
||
return {
|
||
base: createSeriesPattern1(client, acc),
|
||
delta: createAbsoluteRatePattern(client, _m(acc, 'delta')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BlocksDominancePattern
|
||
* @property {AverageBaseCumulativeSumPattern2} blocksMined
|
||
* @property {BpsPercentRatioPattern3} dominance
|
||
*/
|
||
|
||
/**
|
||
* Create a BlocksDominancePattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BlocksDominancePattern}
|
||
*/
|
||
function createBlocksDominancePattern(client, acc) {
|
||
return {
|
||
blocksMined: createAverageBaseCumulativeSumPattern2(client, _m(acc, 'blocks_mined')),
|
||
dominance: createBpsPercentRatioPattern3(client, _m(acc, 'dominance')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BpsRatioPattern2
|
||
* @property {SeriesPattern1<BasisPoints32>} bps
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
*/
|
||
|
||
/**
|
||
* Create a BpsRatioPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BpsRatioPattern2}
|
||
*/
|
||
function createBpsRatioPattern2(client, acc) {
|
||
return {
|
||
bps: createSeriesPattern1(client, _m(acc, 'bps')),
|
||
ratio: createSeriesPattern1(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} BpsRatioPattern
|
||
* @property {SeriesPattern1<BasisPointsSigned32>} bps
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
*/
|
||
|
||
/**
|
||
* Create a BpsRatioPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {BpsRatioPattern}
|
||
*/
|
||
function createBpsRatioPattern(client, acc) {
|
||
return {
|
||
bps: createSeriesPattern1(client, _m(acc, 'bps')),
|
||
ratio: createSeriesPattern1(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CentsUsdPattern2
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a CentsUsdPattern2 pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CentsUsdPattern2}
|
||
*/
|
||
function createCentsUsdPattern2(client, acc) {
|
||
return {
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
usd: createSeriesPattern1(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CentsUsdPattern
|
||
* @property {SeriesPattern1<CentsSigned>} cents
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
*/
|
||
|
||
/**
|
||
* Create a CentsUsdPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CentsUsdPattern}
|
||
*/
|
||
function createCentsUsdPattern(client, acc) {
|
||
return {
|
||
cents: createSeriesPattern1(client, _m(acc, 'cents')),
|
||
usd: createSeriesPattern1(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} CoindaysTransferPattern
|
||
* @property {AverageBaseCumulativeSumPattern<StoredF64>} coindaysDestroyed
|
||
* @property {AverageBaseCumulativeInSumPattern} transferVolume
|
||
*/
|
||
|
||
/**
|
||
* Create a CoindaysTransferPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {CoindaysTransferPattern}
|
||
*/
|
||
function createCoindaysTransferPattern(client, acc) {
|
||
return {
|
||
coindaysDestroyed: createAverageBaseCumulativeSumPattern(client, _m(acc, 'coindays_destroyed')),
|
||
transferVolume: createAverageBaseCumulativeInSumPattern(client, _m(acc, 'transfer_volume')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} InPattern
|
||
* @property {CentsUsdPattern2} inLoss
|
||
* @property {CentsUsdPattern2} inProfit
|
||
*/
|
||
|
||
/**
|
||
* Create a InPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {InPattern}
|
||
*/
|
||
function createInPattern(client, acc) {
|
||
return {
|
||
inLoss: createCentsUsdPattern2(client, _m(acc, 'loss')),
|
||
inProfit: createCentsUsdPattern2(client, _m(acc, 'profit')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} PerPattern
|
||
* @property {CentsSatsUsdPattern} perCoin
|
||
* @property {CentsSatsUsdPattern} perDollar
|
||
*/
|
||
|
||
/**
|
||
* Create a PerPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {PerPattern}
|
||
*/
|
||
function createPerPattern(client, acc) {
|
||
return {
|
||
perCoin: createCentsSatsUsdPattern(client, _m(acc, 'coin')),
|
||
perDollar: createCentsSatsUsdPattern(client, _m(acc, 'dollar')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} PriceRatioPattern
|
||
* @property {CentsSatsUsdPattern} price
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
*/
|
||
|
||
/**
|
||
* Create a PriceRatioPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @param {string} disc - Discriminator suffix
|
||
* @returns {PriceRatioPattern}
|
||
*/
|
||
function createPriceRatioPattern(client, acc, disc) {
|
||
return {
|
||
price: createCentsSatsUsdPattern(client, _m(acc, disc)),
|
||
ratio: createSeriesPattern1(client, _m(_m(acc, 'ratio'), disc)),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} RatioValuePattern
|
||
* @property {_24hPattern} ratio
|
||
* @property {AverageBaseCumulativeSumPattern<Cents>} valueDestroyed
|
||
*/
|
||
|
||
/**
|
||
* Create a RatioValuePattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {RatioValuePattern}
|
||
*/
|
||
function createRatioValuePattern(client, acc) {
|
||
return {
|
||
ratio: create_24hPattern(client, _m(acc, 'sopr_24h')),
|
||
valueDestroyed: createAverageBaseCumulativeSumPattern(client, _m(acc, 'value_destroyed')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} SdSmaPattern
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} sma
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} ToPattern
|
||
* @property {BpsPercentRatioPattern} toMcap
|
||
* @property {BpsPercentRatioPattern} toRcap
|
||
*/
|
||
|
||
/**
|
||
* Create a ToPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {ToPattern}
|
||
*/
|
||
function createToPattern(client, acc) {
|
||
return {
|
||
toMcap: createBpsPercentRatioPattern(client, _m(acc, 'mcap')),
|
||
toRcap: createBpsPercentRatioPattern(client, _m(acc, 'rcap')),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} _24hPattern
|
||
* @property {SeriesPattern1<StoredF64>} _24h
|
||
*/
|
||
|
||
/**
|
||
* Create a _24hPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {_24hPattern}
|
||
*/
|
||
function create_24hPattern(client, acc) {
|
||
return {
|
||
_24h: createSeriesPattern1(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} NuplPattern
|
||
* @property {BpsRatioPattern} nupl
|
||
*/
|
||
|
||
/**
|
||
* Create a NuplPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {NuplPattern}
|
||
*/
|
||
function createNuplPattern(client, acc) {
|
||
return {
|
||
nupl: createBpsRatioPattern(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} PricePattern
|
||
* @property {BpsCentsPercentilesRatioSatsUsdPattern} price
|
||
*/
|
||
|
||
/**
|
||
* Create a PricePattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {PricePattern}
|
||
*/
|
||
function createPricePattern(client, acc) {
|
||
return {
|
||
price: createBpsCentsPercentilesRatioSatsUsdPattern(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} TransferPattern
|
||
* @property {AverageBaseCumulativeSumPattern3} transferVolume
|
||
*/
|
||
|
||
/**
|
||
* Create a TransferPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {TransferPattern}
|
||
*/
|
||
function createTransferPattern(client, acc) {
|
||
return {
|
||
transferVolume: createAverageBaseCumulativeSumPattern3(client, acc),
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @typedef {Object} UnspentPattern
|
||
* @property {BaseDeltaPattern} unspentCount
|
||
*/
|
||
|
||
/**
|
||
* Create a UnspentPattern pattern node
|
||
* @param {BrkClientBase} client
|
||
* @param {string} acc - Accumulated series name
|
||
* @returns {UnspentPattern}
|
||
*/
|
||
function createUnspentPattern(client, acc) {
|
||
return {
|
||
unspentCount: createBaseDeltaPattern(client, acc),
|
||
};
|
||
}
|
||
|
||
// Catalog tree typedefs
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree
|
||
* @property {SeriesTree_Blocks} blocks
|
||
* @property {SeriesTree_Transactions} transactions
|
||
* @property {SeriesTree_Inputs} inputs
|
||
* @property {SeriesTree_Outputs} outputs
|
||
* @property {SeriesTree_Addrs} addrs
|
||
* @property {SeriesTree_Scripts} scripts
|
||
* @property {SeriesTree_Mining} mining
|
||
* @property {SeriesTree_Positions} positions
|
||
* @property {SeriesTree_Cointime} cointime
|
||
* @property {SeriesTree_Constants} constants
|
||
* @property {SeriesTree_Indexes} indexes
|
||
* @property {SeriesTree_Indicators} indicators
|
||
* @property {SeriesTree_Market} market
|
||
* @property {SeriesTree_Pools} pools
|
||
* @property {SeriesTree_Prices} prices
|
||
* @property {SeriesTree_Supply} supply
|
||
* @property {SeriesTree_Cohorts} cohorts
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Blocks
|
||
* @property {SeriesPattern18<BlockHash>} blockhash
|
||
* @property {SeriesTree_Blocks_Difficulty} difficulty
|
||
* @property {SeriesTree_Blocks_Time} time
|
||
* @property {SeriesTree_Blocks_Size} size
|
||
* @property {SeriesTree_Blocks_Weight} weight
|
||
* @property {SeriesTree_Blocks_Count} count
|
||
* @property {SeriesTree_Blocks_Lookback} lookback
|
||
* @property {SeriesTree_Blocks_Interval} interval
|
||
* @property {AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2} vbytes
|
||
* @property {SeriesTree_Blocks_Fullness} fullness
|
||
* @property {SeriesTree_Blocks_Halving} halving
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Blocks_Difficulty
|
||
* @property {SeriesPattern1<StoredF64>} value
|
||
* @property {SeriesPattern1<StoredF64>} hashrate
|
||
* @property {BpsPercentRatioPattern} adjustment
|
||
* @property {SeriesPattern1<Epoch>} epoch
|
||
* @property {SeriesPattern1<StoredU32>} blocksToRetarget
|
||
* @property {SeriesPattern1<StoredF32>} daysToRetarget
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Blocks_Time
|
||
* @property {SeriesPattern1<Timestamp>} timestamp
|
||
* @property {SeriesPattern18<Date>} date
|
||
* @property {SeriesPattern18<Timestamp>} timestampMonotonic
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Blocks_Size
|
||
* @property {SeriesPattern18<StoredU64>} base
|
||
* @property {SeriesPattern1<StoredU64>} cumulative
|
||
* @property {_1m1w1y24hPattern<StoredU64>} sum
|
||
* @property {_1m1w1y24hPattern<StoredF32>} average
|
||
* @property {_1m1w1y24hPattern<StoredU64>} min
|
||
* @property {_1m1w1y24hPattern<StoredU64>} max
|
||
* @property {_1m1w1y24hPattern<StoredU64>} pct10
|
||
* @property {_1m1w1y24hPattern<StoredU64>} pct25
|
||
* @property {_1m1w1y24hPattern<StoredU64>} median
|
||
* @property {_1m1w1y24hPattern<StoredU64>} pct75
|
||
* @property {_1m1w1y24hPattern<StoredU64>} pct90
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Blocks_Weight
|
||
* @property {SeriesPattern18<Weight>} base
|
||
* @property {SeriesPattern1<Weight>} cumulative
|
||
* @property {_1m1w1y24hPattern<Weight>} sum
|
||
* @property {_1m1w1y24hPattern<StoredF32>} average
|
||
* @property {_1m1w1y24hPattern<Weight>} min
|
||
* @property {_1m1w1y24hPattern<Weight>} max
|
||
* @property {_1m1w1y24hPattern<Weight>} pct10
|
||
* @property {_1m1w1y24hPattern<Weight>} pct25
|
||
* @property {_1m1w1y24hPattern<Weight>} median
|
||
* @property {_1m1w1y24hPattern<Weight>} pct75
|
||
* @property {_1m1w1y24hPattern<Weight>} pct90
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Blocks_Count
|
||
* @property {_1m1w1y24hPattern<StoredU64>} target
|
||
* @property {AverageBaseCumulativeSumPattern2} total
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Blocks_Lookback
|
||
* @property {SeriesPattern18<Height>} _1h
|
||
* @property {SeriesPattern18<Height>} _24h
|
||
* @property {SeriesPattern18<Height>} _3d
|
||
* @property {SeriesPattern18<Height>} _1w
|
||
* @property {SeriesPattern18<Height>} _8d
|
||
* @property {SeriesPattern18<Height>} _9d
|
||
* @property {SeriesPattern18<Height>} _12d
|
||
* @property {SeriesPattern18<Height>} _13d
|
||
* @property {SeriesPattern18<Height>} _2w
|
||
* @property {SeriesPattern18<Height>} _21d
|
||
* @property {SeriesPattern18<Height>} _26d
|
||
* @property {SeriesPattern18<Height>} _1m
|
||
* @property {SeriesPattern18<Height>} _34d
|
||
* @property {SeriesPattern18<Height>} _55d
|
||
* @property {SeriesPattern18<Height>} _2m
|
||
* @property {SeriesPattern18<Height>} _9w
|
||
* @property {SeriesPattern18<Height>} _12w
|
||
* @property {SeriesPattern18<Height>} _89d
|
||
* @property {SeriesPattern18<Height>} _3m
|
||
* @property {SeriesPattern18<Height>} _14w
|
||
* @property {SeriesPattern18<Height>} _111d
|
||
* @property {SeriesPattern18<Height>} _144d
|
||
* @property {SeriesPattern18<Height>} _6m
|
||
* @property {SeriesPattern18<Height>} _26w
|
||
* @property {SeriesPattern18<Height>} _200d
|
||
* @property {SeriesPattern18<Height>} _9m
|
||
* @property {SeriesPattern18<Height>} _350d
|
||
* @property {SeriesPattern18<Height>} _12m
|
||
* @property {SeriesPattern18<Height>} _1y
|
||
* @property {SeriesPattern18<Height>} _14m
|
||
* @property {SeriesPattern18<Height>} _2y
|
||
* @property {SeriesPattern18<Height>} _26m
|
||
* @property {SeriesPattern18<Height>} _3y
|
||
* @property {SeriesPattern18<Height>} _200w
|
||
* @property {SeriesPattern18<Height>} _4y
|
||
* @property {SeriesPattern18<Height>} _5y
|
||
* @property {SeriesPattern18<Height>} _6y
|
||
* @property {SeriesPattern18<Height>} _8y
|
||
* @property {SeriesPattern18<Height>} _9y
|
||
* @property {SeriesPattern18<Height>} _10y
|
||
* @property {SeriesPattern18<Height>} _12y
|
||
* @property {SeriesPattern18<Height>} _14y
|
||
* @property {SeriesPattern18<Height>} _26y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Blocks_Interval
|
||
* @property {SeriesPattern18<Timestamp>} base
|
||
* @property {SeriesPattern1<StoredF32>} _24h
|
||
* @property {SeriesPattern1<StoredF32>} _1w
|
||
* @property {SeriesPattern1<StoredF32>} _1m
|
||
* @property {SeriesPattern1<StoredF32>} _1y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Blocks_Fullness
|
||
* @property {SeriesPattern18<BasisPoints16>} bps
|
||
* @property {SeriesPattern18<StoredF32>} ratio
|
||
* @property {SeriesPattern18<StoredF32>} percent
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Blocks_Halving
|
||
* @property {SeriesPattern1<Halving>} epoch
|
||
* @property {SeriesPattern1<StoredU32>} blocksToHalving
|
||
* @property {SeriesPattern1<StoredF32>} daysToHalving
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Transactions
|
||
* @property {SeriesTree_Transactions_Raw} raw
|
||
* @property {SeriesTree_Transactions_Count} count
|
||
* @property {SeriesTree_Transactions_Size} size
|
||
* @property {SeriesTree_Transactions_Fees} fees
|
||
* @property {SeriesTree_Transactions_Versions} versions
|
||
* @property {SeriesTree_Transactions_Volume} volume
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Transactions_Raw
|
||
* @property {SeriesPattern18<TxIndex>} firstTxIndex
|
||
* @property {SeriesPattern19<Height>} height
|
||
* @property {SeriesPattern19<Txid>} txid
|
||
* @property {SeriesPattern19<TxVersion>} txVersion
|
||
* @property {SeriesPattern19<RawLockTime>} rawLocktime
|
||
* @property {SeriesPattern19<StoredU32>} baseSize
|
||
* @property {SeriesPattern19<StoredU32>} totalSize
|
||
* @property {SeriesPattern19<StoredBool>} isExplicitlyRbf
|
||
* @property {SeriesPattern19<TxInIndex>} firstTxinIndex
|
||
* @property {SeriesPattern19<TxOutIndex>} firstTxoutIndex
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Transactions_Count
|
||
* @property {AverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2} total
|
||
* @property {SeriesPattern19<StoredBool>} isCoinbase
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Transactions_Size
|
||
* @property {_6bBlockTxPattern<VSize>} vsize
|
||
* @property {SeriesTree_Transactions_Size_Weight} weight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Transactions_Size_Weight
|
||
* @property {SeriesPattern19<Weight>} txIndex
|
||
* @property {MaxMedianMinPct10Pct25Pct75Pct90Pattern2} block
|
||
* @property {MaxMedianMinPct10Pct25Pct75Pct90Pattern2} _6b
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Transactions_Fees
|
||
* @property {SeriesPattern19<Sats>} inputValue
|
||
* @property {SeriesPattern19<Sats>} outputValue
|
||
* @property {_6bBlockTxPattern<Sats>} fee
|
||
* @property {_6bBlockTxPattern<FeeRate>} feeRate
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Transactions_Versions
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} v1
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} v2
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} v3
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Transactions_Volume
|
||
* @property {AverageBaseCumulativeSumPattern3} transferVolume
|
||
* @property {_1m1w1y24hPattern<StoredF32>} txPerSec
|
||
* @property {_1m1w1y24hPattern<StoredF32>} outputsPerSec
|
||
* @property {_1m1w1y24hPattern<StoredF32>} inputsPerSec
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Inputs
|
||
* @property {SeriesTree_Inputs_Raw} raw
|
||
* @property {SeriesTree_Inputs_Spent} spent
|
||
* @property {CumulativeRollingSumPattern} count
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Inputs_Raw
|
||
* @property {SeriesPattern18<TxInIndex>} firstTxinIndex
|
||
* @property {SeriesPattern20<OutPoint>} outpoint
|
||
* @property {SeriesPattern20<TxIndex>} txIndex
|
||
* @property {SeriesPattern20<OutputType>} outputType
|
||
* @property {SeriesPattern20<TypeIndex>} typeIndex
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Inputs_Spent
|
||
* @property {SeriesPattern20<TxOutIndex>} txoutIndex
|
||
* @property {SeriesPattern20<Sats>} value
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Outputs
|
||
* @property {SeriesTree_Outputs_Raw} raw
|
||
* @property {SeriesTree_Outputs_Spent} spent
|
||
* @property {SeriesTree_Outputs_Count} count
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Outputs_Raw
|
||
* @property {SeriesPattern18<TxOutIndex>} firstTxoutIndex
|
||
* @property {SeriesPattern21<Sats>} value
|
||
* @property {SeriesPattern21<OutputType>} outputType
|
||
* @property {SeriesPattern21<TypeIndex>} typeIndex
|
||
* @property {SeriesPattern21<TxIndex>} txIndex
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Outputs_Spent
|
||
* @property {SeriesPattern21<TxInIndex>} txinIndex
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Outputs_Count
|
||
* @property {CumulativeRollingSumPattern} total
|
||
* @property {SeriesPattern1<StoredU64>} unspent
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs
|
||
* @property {SeriesTree_Addrs_Raw} raw
|
||
* @property {SeriesTree_Addrs_Indexes} indexes
|
||
* @property {SeriesTree_Addrs_Data} data
|
||
* @property {AllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern3} funded
|
||
* @property {AllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern3} empty
|
||
* @property {SeriesTree_Addrs_Activity} activity
|
||
* @property {AllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern3} total
|
||
* @property {SeriesTree_Addrs_New} new
|
||
* @property {SeriesTree_Addrs_Delta} delta
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Raw
|
||
* @property {SeriesTree_Addrs_Raw_P2pk65} p2pk65
|
||
* @property {SeriesTree_Addrs_Raw_P2pk33} p2pk33
|
||
* @property {SeriesTree_Addrs_Raw_P2pkh} p2pkh
|
||
* @property {SeriesTree_Addrs_Raw_P2sh} p2sh
|
||
* @property {SeriesTree_Addrs_Raw_P2wpkh} p2wpkh
|
||
* @property {SeriesTree_Addrs_Raw_P2wsh} p2wsh
|
||
* @property {SeriesTree_Addrs_Raw_P2tr} p2tr
|
||
* @property {SeriesTree_Addrs_Raw_P2a} p2a
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Raw_P2pk65
|
||
* @property {SeriesPattern18<P2PK65AddrIndex>} firstIndex
|
||
* @property {SeriesPattern27<P2PK65Bytes>} bytes
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Raw_P2pk33
|
||
* @property {SeriesPattern18<P2PK33AddrIndex>} firstIndex
|
||
* @property {SeriesPattern26<P2PK33Bytes>} bytes
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Raw_P2pkh
|
||
* @property {SeriesPattern18<P2PKHAddrIndex>} firstIndex
|
||
* @property {SeriesPattern28<P2PKHBytes>} bytes
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Raw_P2sh
|
||
* @property {SeriesPattern18<P2SHAddrIndex>} firstIndex
|
||
* @property {SeriesPattern29<P2SHBytes>} bytes
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Raw_P2wpkh
|
||
* @property {SeriesPattern18<P2WPKHAddrIndex>} firstIndex
|
||
* @property {SeriesPattern31<P2WPKHBytes>} bytes
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Raw_P2wsh
|
||
* @property {SeriesPattern18<P2WSHAddrIndex>} firstIndex
|
||
* @property {SeriesPattern32<P2WSHBytes>} bytes
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Raw_P2tr
|
||
* @property {SeriesPattern18<P2TRAddrIndex>} firstIndex
|
||
* @property {SeriesPattern30<P2TRBytes>} bytes
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Raw_P2a
|
||
* @property {SeriesPattern18<P2AAddrIndex>} firstIndex
|
||
* @property {SeriesPattern24<P2ABytes>} bytes
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Indexes
|
||
* @property {SeriesPattern24<AnyAddrIndex>} p2a
|
||
* @property {SeriesPattern26<AnyAddrIndex>} p2pk33
|
||
* @property {SeriesPattern27<AnyAddrIndex>} p2pk65
|
||
* @property {SeriesPattern28<AnyAddrIndex>} p2pkh
|
||
* @property {SeriesPattern29<AnyAddrIndex>} p2sh
|
||
* @property {SeriesPattern30<AnyAddrIndex>} p2tr
|
||
* @property {SeriesPattern31<AnyAddrIndex>} p2wpkh
|
||
* @property {SeriesPattern32<AnyAddrIndex>} p2wsh
|
||
* @property {SeriesPattern34<FundedAddrIndex>} funded
|
||
* @property {SeriesPattern35<EmptyAddrIndex>} empty
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Data
|
||
* @property {SeriesPattern34<FundedAddrData>} funded
|
||
* @property {SeriesPattern35<EmptyAddrData>} empty
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Activity
|
||
* @property {BothReactivatedReceivingSendingPattern} all
|
||
* @property {BothReactivatedReceivingSendingPattern} p2pk65
|
||
* @property {BothReactivatedReceivingSendingPattern} p2pk33
|
||
* @property {BothReactivatedReceivingSendingPattern} p2pkh
|
||
* @property {BothReactivatedReceivingSendingPattern} p2sh
|
||
* @property {BothReactivatedReceivingSendingPattern} p2wpkh
|
||
* @property {BothReactivatedReceivingSendingPattern} p2wsh
|
||
* @property {BothReactivatedReceivingSendingPattern} p2tr
|
||
* @property {BothReactivatedReceivingSendingPattern} p2a
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_New
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} all
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2pk65
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2pk33
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2pkh
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2sh
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2wpkh
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2wsh
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2tr
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2a
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Addrs_Delta
|
||
* @property {AbsoluteRatePattern} all
|
||
* @property {AbsoluteRatePattern} p2pk65
|
||
* @property {AbsoluteRatePattern} p2pk33
|
||
* @property {AbsoluteRatePattern} p2pkh
|
||
* @property {AbsoluteRatePattern} p2sh
|
||
* @property {AbsoluteRatePattern} p2wpkh
|
||
* @property {AbsoluteRatePattern} p2wsh
|
||
* @property {AbsoluteRatePattern} p2tr
|
||
* @property {AbsoluteRatePattern} p2a
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Scripts
|
||
* @property {SeriesTree_Scripts_Raw} raw
|
||
* @property {SeriesTree_Scripts_Count} count
|
||
* @property {SeriesTree_Scripts_Value} value
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Scripts_Raw
|
||
* @property {SeriesTree_Scripts_Raw_Empty} empty
|
||
* @property {SeriesTree_Scripts_Raw_OpReturn} opReturn
|
||
* @property {SeriesTree_Scripts_Raw_P2ms} p2ms
|
||
* @property {SeriesTree_Scripts_Raw_Unknown} unknown
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Scripts_Raw_Empty
|
||
* @property {SeriesPattern18<EmptyOutputIndex>} firstIndex
|
||
* @property {SeriesPattern22<TxIndex>} toTxIndex
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Scripts_Raw_OpReturn
|
||
* @property {SeriesPattern18<OpReturnIndex>} firstIndex
|
||
* @property {SeriesPattern23<TxIndex>} toTxIndex
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Scripts_Raw_P2ms
|
||
* @property {SeriesPattern18<P2MSOutputIndex>} firstIndex
|
||
* @property {SeriesPattern25<TxIndex>} toTxIndex
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Scripts_Raw_Unknown
|
||
* @property {SeriesPattern18<UnknownOutputIndex>} firstIndex
|
||
* @property {SeriesPattern33<TxIndex>} toTxIndex
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Scripts_Count
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2a
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2ms
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2pk33
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2pk65
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2pkh
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2sh
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2tr
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2wpkh
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} p2wsh
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} opReturn
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} emptyOutput
|
||
* @property {AverageBaseCumulativeSumPattern<StoredU64>} unknownOutput
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Scripts_Value
|
||
* @property {AverageBaseCumulativeSumPattern3} opReturn
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Mining
|
||
* @property {SeriesTree_Mining_Rewards} rewards
|
||
* @property {SeriesTree_Mining_Hashrate} hashrate
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Mining_Rewards
|
||
* @property {AverageBaseCumulativeSumPattern3} coinbase
|
||
* @property {SeriesTree_Mining_Rewards_Subsidy} subsidy
|
||
* @property {SeriesTree_Mining_Rewards_Fees} fees
|
||
* @property {SeriesTree_Mining_Rewards_Unclaimed} unclaimed
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Mining_Rewards_Subsidy
|
||
* @property {BtcCentsSatsUsdPattern2} base
|
||
* @property {BtcCentsSatsUsdPattern2} cumulative
|
||
* @property {_1m1w1y24hPattern4} sum
|
||
* @property {_1m1w1y24hPattern3} average
|
||
* @property {_1m1w1y24hBpsPercentRatioPattern} dominance
|
||
* @property {CentsUsdPattern2} sma1y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Mining_Rewards_Fees
|
||
* @property {BtcCentsSatsUsdPattern2} base
|
||
* @property {BtcCentsSatsUsdPattern2} cumulative
|
||
* @property {_1m1w1y24hPattern4} sum
|
||
* @property {_1m1w1y24hPattern3} average
|
||
* @property {_1m1w1y24hPattern4} min
|
||
* @property {_1m1w1y24hPattern4} max
|
||
* @property {_1m1w1y24hPattern4} pct10
|
||
* @property {_1m1w1y24hPattern4} pct25
|
||
* @property {_1m1w1y24hPattern4} median
|
||
* @property {_1m1w1y24hPattern4} pct75
|
||
* @property {_1m1w1y24hPattern4} pct90
|
||
* @property {_1m1w1y24hBpsPercentRatioPattern} dominance
|
||
* @property {SeriesTree_Mining_Rewards_Fees_ToSubsidyRatio} toSubsidyRatio
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Mining_Rewards_Fees_ToSubsidyRatio
|
||
* @property {BpsRatioPattern2} _24h
|
||
* @property {BpsRatioPattern2} _1w
|
||
* @property {BpsRatioPattern2} _1m
|
||
* @property {BpsRatioPattern2} _1y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Mining_Rewards_Unclaimed
|
||
* @property {BtcCentsSatsUsdPattern2} base
|
||
* @property {BtcCentsSatsUsdPattern2} cumulative
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Mining_Hashrate
|
||
* @property {SeriesTree_Mining_Hashrate_Rate} rate
|
||
* @property {PhsReboundThsPattern} price
|
||
* @property {PhsReboundThsPattern} value
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Mining_Hashrate_Rate
|
||
* @property {SeriesPattern1<StoredF64>} base
|
||
* @property {SeriesTree_Mining_Hashrate_Rate_Sma} sma
|
||
* @property {SeriesPattern1<StoredF64>} ath
|
||
* @property {BpsPercentRatioPattern5} drawdown
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Mining_Hashrate_Rate_Sma
|
||
* @property {SeriesPattern1<StoredF64>} _1w
|
||
* @property {SeriesPattern1<StoredF64>} _1m
|
||
* @property {SeriesPattern1<StoredF64>} _2m
|
||
* @property {SeriesPattern1<StoredF64>} _1y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Positions
|
||
* @property {SeriesPattern18<BlkPosition>} block
|
||
* @property {SeriesPattern19<BlkPosition>} tx
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cointime
|
||
* @property {SeriesTree_Cointime_Activity} activity
|
||
* @property {SeriesTree_Cointime_Supply} supply
|
||
* @property {SeriesTree_Cointime_Value} value
|
||
* @property {SeriesTree_Cointime_Cap} cap
|
||
* @property {SeriesTree_Cointime_Prices} prices
|
||
* @property {SeriesTree_Cointime_Adjusted} adjusted
|
||
* @property {SeriesTree_Cointime_ReserveRisk} reserveRisk
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cointime_Activity
|
||
* @property {AverageBaseCumulativeSumPattern<StoredF64>} coinblocksCreated
|
||
* @property {AverageBaseCumulativeSumPattern<StoredF64>} coinblocksStored
|
||
* @property {SeriesPattern1<StoredF64>} liveliness
|
||
* @property {SeriesPattern1<StoredF64>} vaultedness
|
||
* @property {SeriesPattern1<StoredF64>} ratio
|
||
* @property {AverageBaseCumulativeSumPattern<StoredF64>} coinblocksDestroyed
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cointime_Supply
|
||
* @property {BtcCentsSatsUsdPattern2} vaulted
|
||
* @property {BtcCentsSatsUsdPattern2} active
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cointime_Value
|
||
* @property {AverageBaseCumulativeSumPattern<StoredF64>} destroyed
|
||
* @property {AverageBaseCumulativeSumPattern<StoredF64>} created
|
||
* @property {AverageBaseCumulativeSumPattern<StoredF64>} stored
|
||
* @property {AverageBaseCumulativeSumPattern<StoredF64>} vocdd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cointime_Cap
|
||
* @property {CentsUsdPattern2} thermo
|
||
* @property {CentsUsdPattern2} investor
|
||
* @property {CentsUsdPattern2} vaulted
|
||
* @property {CentsUsdPattern2} active
|
||
* @property {CentsUsdPattern2} cointime
|
||
* @property {BpsRatioPattern2} aviv
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cointime_Prices
|
||
* @property {BpsCentsPercentilesRatioSatsUsdPattern} vaulted
|
||
* @property {BpsCentsPercentilesRatioSatsUsdPattern} active
|
||
* @property {BpsCentsPercentilesRatioSatsUsdPattern} trueMarketMean
|
||
* @property {BpsCentsPercentilesRatioSatsUsdPattern} cointime
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cointime_Adjusted
|
||
* @property {BpsPercentRatioPattern} inflationRate
|
||
* @property {SeriesPattern1<StoredF64>} txVelocityNative
|
||
* @property {SeriesPattern1<StoredF64>} txVelocityFiat
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cointime_ReserveRisk
|
||
* @property {SeriesPattern1<StoredF64>} value
|
||
* @property {SeriesPattern18<StoredF64>} vocddMedian1y
|
||
* @property {SeriesPattern18<StoredF64>} hodlBank
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Constants
|
||
* @property {SeriesPattern1<StoredU16>} _0
|
||
* @property {SeriesPattern1<StoredU16>} _1
|
||
* @property {SeriesPattern1<StoredU16>} _2
|
||
* @property {SeriesPattern1<StoredU16>} _3
|
||
* @property {SeriesPattern1<StoredU16>} _4
|
||
* @property {SeriesPattern1<StoredU16>} _20
|
||
* @property {SeriesPattern1<StoredU16>} _30
|
||
* @property {SeriesPattern1<StoredF32>} _382
|
||
* @property {SeriesPattern1<StoredU16>} _50
|
||
* @property {SeriesPattern1<StoredF32>} _618
|
||
* @property {SeriesPattern1<StoredU16>} _70
|
||
* @property {SeriesPattern1<StoredU16>} _80
|
||
* @property {SeriesPattern1<StoredU16>} _100
|
||
* @property {SeriesPattern1<StoredU16>} _600
|
||
* @property {SeriesPattern1<StoredI8>} minus1
|
||
* @property {SeriesPattern1<StoredI8>} minus2
|
||
* @property {SeriesPattern1<StoredI8>} minus3
|
||
* @property {SeriesPattern1<StoredI8>} minus4
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes
|
||
* @property {SeriesTree_Indexes_Addr} addr
|
||
* @property {SeriesTree_Indexes_Height} height
|
||
* @property {SeriesTree_Indexes_Epoch} epoch
|
||
* @property {SeriesTree_Indexes_Halving} halving
|
||
* @property {SeriesTree_Indexes_Minute10} minute10
|
||
* @property {SeriesTree_Indexes_Minute30} minute30
|
||
* @property {SeriesTree_Indexes_Hour1} hour1
|
||
* @property {SeriesTree_Indexes_Hour4} hour4
|
||
* @property {SeriesTree_Indexes_Hour12} hour12
|
||
* @property {SeriesTree_Indexes_Day1} day1
|
||
* @property {SeriesTree_Indexes_Day3} day3
|
||
* @property {SeriesTree_Indexes_Week1} week1
|
||
* @property {SeriesTree_Indexes_Month1} month1
|
||
* @property {SeriesTree_Indexes_Month3} month3
|
||
* @property {SeriesTree_Indexes_Month6} month6
|
||
* @property {SeriesTree_Indexes_Year1} year1
|
||
* @property {SeriesTree_Indexes_Year10} year10
|
||
* @property {SeriesTree_Indexes_TxIndex} txIndex
|
||
* @property {SeriesTree_Indexes_TxinIndex} txinIndex
|
||
* @property {SeriesTree_Indexes_TxoutIndex} txoutIndex
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr
|
||
* @property {SeriesTree_Indexes_Addr_P2pk33} p2pk33
|
||
* @property {SeriesTree_Indexes_Addr_P2pk65} p2pk65
|
||
* @property {SeriesTree_Indexes_Addr_P2pkh} p2pkh
|
||
* @property {SeriesTree_Indexes_Addr_P2sh} p2sh
|
||
* @property {SeriesTree_Indexes_Addr_P2tr} p2tr
|
||
* @property {SeriesTree_Indexes_Addr_P2wpkh} p2wpkh
|
||
* @property {SeriesTree_Indexes_Addr_P2wsh} p2wsh
|
||
* @property {SeriesTree_Indexes_Addr_P2a} p2a
|
||
* @property {SeriesTree_Indexes_Addr_P2ms} p2ms
|
||
* @property {SeriesTree_Indexes_Addr_Empty} empty
|
||
* @property {SeriesTree_Indexes_Addr_Unknown} unknown
|
||
* @property {SeriesTree_Indexes_Addr_OpReturn} opReturn
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr_P2pk33
|
||
* @property {SeriesPattern26<P2PK33AddrIndex>} identity
|
||
* @property {SeriesPattern26<Addr>} addr
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr_P2pk65
|
||
* @property {SeriesPattern27<P2PK65AddrIndex>} identity
|
||
* @property {SeriesPattern27<Addr>} addr
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr_P2pkh
|
||
* @property {SeriesPattern28<P2PKHAddrIndex>} identity
|
||
* @property {SeriesPattern28<Addr>} addr
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr_P2sh
|
||
* @property {SeriesPattern29<P2SHAddrIndex>} identity
|
||
* @property {SeriesPattern29<Addr>} addr
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr_P2tr
|
||
* @property {SeriesPattern30<P2TRAddrIndex>} identity
|
||
* @property {SeriesPattern30<Addr>} addr
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr_P2wpkh
|
||
* @property {SeriesPattern31<P2WPKHAddrIndex>} identity
|
||
* @property {SeriesPattern31<Addr>} addr
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr_P2wsh
|
||
* @property {SeriesPattern32<P2WSHAddrIndex>} identity
|
||
* @property {SeriesPattern32<Addr>} addr
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr_P2a
|
||
* @property {SeriesPattern24<P2AAddrIndex>} identity
|
||
* @property {SeriesPattern24<Addr>} addr
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr_P2ms
|
||
* @property {SeriesPattern25<P2MSOutputIndex>} identity
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr_Empty
|
||
* @property {SeriesPattern22<EmptyOutputIndex>} identity
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr_Unknown
|
||
* @property {SeriesPattern33<UnknownOutputIndex>} identity
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Addr_OpReturn
|
||
* @property {SeriesPattern23<OpReturnIndex>} identity
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Height
|
||
* @property {SeriesPattern18<Height>} identity
|
||
* @property {SeriesPattern18<Minute10>} minute10
|
||
* @property {SeriesPattern18<Minute30>} minute30
|
||
* @property {SeriesPattern18<Hour1>} hour1
|
||
* @property {SeriesPattern18<Hour4>} hour4
|
||
* @property {SeriesPattern18<Hour12>} hour12
|
||
* @property {SeriesPattern18<Day1>} day1
|
||
* @property {SeriesPattern18<Day3>} day3
|
||
* @property {SeriesPattern18<Epoch>} epoch
|
||
* @property {SeriesPattern18<Halving>} halving
|
||
* @property {SeriesPattern18<Week1>} week1
|
||
* @property {SeriesPattern18<Month1>} month1
|
||
* @property {SeriesPattern18<Month3>} month3
|
||
* @property {SeriesPattern18<Month6>} month6
|
||
* @property {SeriesPattern18<Year1>} year1
|
||
* @property {SeriesPattern18<Year10>} year10
|
||
* @property {SeriesPattern18<StoredU64>} txIndexCount
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Epoch
|
||
* @property {SeriesPattern17<Epoch>} identity
|
||
* @property {SeriesPattern17<Height>} firstHeight
|
||
* @property {SeriesPattern17<StoredU64>} heightCount
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Halving
|
||
* @property {SeriesPattern16<Halving>} identity
|
||
* @property {SeriesPattern16<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Minute10
|
||
* @property {SeriesPattern3<Minute10>} identity
|
||
* @property {SeriesPattern3<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Minute30
|
||
* @property {SeriesPattern4<Minute30>} identity
|
||
* @property {SeriesPattern4<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Hour1
|
||
* @property {SeriesPattern5<Hour1>} identity
|
||
* @property {SeriesPattern5<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Hour4
|
||
* @property {SeriesPattern6<Hour4>} identity
|
||
* @property {SeriesPattern6<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Hour12
|
||
* @property {SeriesPattern7<Hour12>} identity
|
||
* @property {SeriesPattern7<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Day1
|
||
* @property {SeriesPattern8<Day1>} identity
|
||
* @property {SeriesPattern8<Date>} date
|
||
* @property {SeriesPattern8<Height>} firstHeight
|
||
* @property {SeriesPattern8<StoredU64>} heightCount
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Day3
|
||
* @property {SeriesPattern9<Day3>} identity
|
||
* @property {SeriesPattern9<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Week1
|
||
* @property {SeriesPattern10<Week1>} identity
|
||
* @property {SeriesPattern10<Date>} date
|
||
* @property {SeriesPattern10<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Month1
|
||
* @property {SeriesPattern11<Month1>} identity
|
||
* @property {SeriesPattern11<Date>} date
|
||
* @property {SeriesPattern11<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Month3
|
||
* @property {SeriesPattern12<Month3>} identity
|
||
* @property {SeriesPattern12<Date>} date
|
||
* @property {SeriesPattern12<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Month6
|
||
* @property {SeriesPattern13<Month6>} identity
|
||
* @property {SeriesPattern13<Date>} date
|
||
* @property {SeriesPattern13<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Year1
|
||
* @property {SeriesPattern14<Year1>} identity
|
||
* @property {SeriesPattern14<Date>} date
|
||
* @property {SeriesPattern14<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_Year10
|
||
* @property {SeriesPattern15<Year10>} identity
|
||
* @property {SeriesPattern15<Date>} date
|
||
* @property {SeriesPattern15<Height>} firstHeight
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_TxIndex
|
||
* @property {SeriesPattern19<TxIndex>} identity
|
||
* @property {SeriesPattern19<StoredU64>} inputCount
|
||
* @property {SeriesPattern19<StoredU64>} outputCount
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_TxinIndex
|
||
* @property {SeriesPattern20<TxInIndex>} identity
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indexes_TxoutIndex
|
||
* @property {SeriesPattern21<TxOutIndex>} identity
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indicators
|
||
* @property {BpsRatioPattern2} puellMultiple
|
||
* @property {BpsRatioPattern2} nvt
|
||
* @property {BpsPercentRatioPattern3} gini
|
||
* @property {BpsRatioPattern2} rhodlRatio
|
||
* @property {BpsRatioPattern2} thermoCapMultiple
|
||
* @property {SeriesPattern1<StoredF32>} coindaysDestroyedSupplyAdjusted
|
||
* @property {SeriesPattern1<StoredF32>} coinyearsDestroyedSupplyAdjusted
|
||
* @property {SeriesTree_Indicators_Dormancy} dormancy
|
||
* @property {SeriesPattern1<StoredF32>} stockToFlow
|
||
* @property {SeriesPattern1<StoredF32>} sellerExhaustion
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Indicators_Dormancy
|
||
* @property {SeriesPattern1<StoredF32>} supplyAdjusted
|
||
* @property {SeriesPattern1<StoredF32>} flow
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market
|
||
* @property {SeriesTree_Market_Ath} ath
|
||
* @property {SeriesTree_Market_Lookback} lookback
|
||
* @property {SeriesTree_Market_Returns} returns
|
||
* @property {_1m1w1y24hPattern<StoredF32>} volatility
|
||
* @property {SeriesTree_Market_Range} range
|
||
* @property {SeriesTree_Market_MovingAverage} movingAverage
|
||
* @property {SeriesTree_Market_Dca} dca
|
||
* @property {SeriesTree_Market_Technical} technical
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Ath
|
||
* @property {CentsSatsUsdPattern} high
|
||
* @property {BpsPercentRatioPattern5} drawdown
|
||
* @property {SeriesPattern1<StoredF32>} daysSince
|
||
* @property {SeriesPattern1<StoredF32>} yearsSince
|
||
* @property {SeriesPattern1<StoredF32>} maxDaysBetween
|
||
* @property {SeriesPattern1<StoredF32>} maxYearsBetween
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Lookback
|
||
* @property {CentsSatsUsdPattern} _24h
|
||
* @property {CentsSatsUsdPattern} _1w
|
||
* @property {CentsSatsUsdPattern} _1m
|
||
* @property {CentsSatsUsdPattern} _3m
|
||
* @property {CentsSatsUsdPattern} _6m
|
||
* @property {CentsSatsUsdPattern} _1y
|
||
* @property {CentsSatsUsdPattern} _2y
|
||
* @property {CentsSatsUsdPattern} _3y
|
||
* @property {CentsSatsUsdPattern} _4y
|
||
* @property {CentsSatsUsdPattern} _5y
|
||
* @property {CentsSatsUsdPattern} _6y
|
||
* @property {CentsSatsUsdPattern} _8y
|
||
* @property {CentsSatsUsdPattern} _10y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Returns
|
||
* @property {SeriesTree_Market_Returns_Periods} periods
|
||
* @property {_10y2y3y4y5y6y8yPattern} cagr
|
||
* @property {SeriesTree_Market_Returns_Sd24h} sd24h
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Returns_Periods
|
||
* @property {BpsPercentRatioPattern} _24h
|
||
* @property {BpsPercentRatioPattern} _1w
|
||
* @property {BpsPercentRatioPattern} _1m
|
||
* @property {BpsPercentRatioPattern} _3m
|
||
* @property {BpsPercentRatioPattern} _6m
|
||
* @property {BpsPercentRatioPattern} _1y
|
||
* @property {BpsPercentRatioPattern} _2y
|
||
* @property {BpsPercentRatioPattern} _3y
|
||
* @property {BpsPercentRatioPattern} _4y
|
||
* @property {BpsPercentRatioPattern} _5y
|
||
* @property {BpsPercentRatioPattern} _6y
|
||
* @property {BpsPercentRatioPattern} _8y
|
||
* @property {BpsPercentRatioPattern} _10y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Returns_Sd24h
|
||
* @property {SeriesTree_Market_Returns_Sd24h_24h} _24h
|
||
* @property {SeriesTree_Market_Returns_Sd24h_1w} _1w
|
||
* @property {SeriesTree_Market_Returns_Sd24h_1m} _1m
|
||
* @property {SeriesTree_Market_Returns_Sd24h_1y} _1y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Returns_Sd24h_24h
|
||
* @property {SeriesPattern1<StoredF32>} sma
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Returns_Sd24h_1w
|
||
* @property {SeriesPattern1<StoredF32>} sma
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Returns_Sd24h_1m
|
||
* @property {SeriesPattern1<StoredF32>} sma
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Returns_Sd24h_1y
|
||
* @property {SeriesPattern1<StoredF32>} sma
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Range
|
||
* @property {_1m1w1y2wPattern} min
|
||
* @property {_1m1w1y2wPattern} max
|
||
* @property {SeriesPattern1<StoredF32>} trueRange
|
||
* @property {SeriesPattern1<StoredF32>} trueRangeSum2w
|
||
* @property {BpsPercentRatioPattern3} choppinessIndex2w
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_MovingAverage
|
||
* @property {SeriesTree_Market_MovingAverage_Sma} sma
|
||
* @property {SeriesTree_Market_MovingAverage_Ema} ema
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_MovingAverage_Sma
|
||
* @property {BpsCentsRatioSatsUsdPattern} _1w
|
||
* @property {BpsCentsRatioSatsUsdPattern} _8d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _13d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _21d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _1m
|
||
* @property {BpsCentsRatioSatsUsdPattern} _34d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _55d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _89d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _111d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _144d
|
||
* @property {SeriesTree_Market_MovingAverage_Sma_200d} _200d
|
||
* @property {SeriesTree_Market_MovingAverage_Sma_350d} _350d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _1y
|
||
* @property {BpsCentsRatioSatsUsdPattern} _2y
|
||
* @property {BpsCentsRatioSatsUsdPattern} _200w
|
||
* @property {BpsCentsRatioSatsUsdPattern} _4y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_MovingAverage_Sma_200d
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<SatsFract>} sats
|
||
* @property {SeriesPattern1<BasisPoints32>} bps
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
* @property {CentsSatsUsdPattern} x24
|
||
* @property {CentsSatsUsdPattern} x08
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_MovingAverage_Sma_350d
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<SatsFract>} sats
|
||
* @property {SeriesPattern1<BasisPoints32>} bps
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
* @property {CentsSatsUsdPattern} x2
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_MovingAverage_Ema
|
||
* @property {BpsCentsRatioSatsUsdPattern} _1w
|
||
* @property {BpsCentsRatioSatsUsdPattern} _8d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _12d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _13d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _21d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _26d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _1m
|
||
* @property {BpsCentsRatioSatsUsdPattern} _34d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _55d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _89d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _144d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _200d
|
||
* @property {BpsCentsRatioSatsUsdPattern} _1y
|
||
* @property {BpsCentsRatioSatsUsdPattern} _2y
|
||
* @property {BpsCentsRatioSatsUsdPattern} _200w
|
||
* @property {BpsCentsRatioSatsUsdPattern} _4y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Dca
|
||
* @property {SeriesPattern18<Sats>} satsPerDay
|
||
* @property {SeriesTree_Market_Dca_Period} period
|
||
* @property {SeriesTree_Market_Dca_Class} class
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Dca_Period
|
||
* @property {_10y1m1w1y2y3m3y4y5y6m6y8yPattern3} stack
|
||
* @property {SeriesTree_Market_Dca_Period_CostBasis} costBasis
|
||
* @property {_10y1m1w1y2y3m3y4y5y6m6y8yPattern2} return
|
||
* @property {_10y2y3y4y5y6y8yPattern} cagr
|
||
* @property {_10y1m1w1y2y3m3y4y5y6m6y8yPattern3} lumpSumStack
|
||
* @property {_10y1m1w1y2y3m3y4y5y6m6y8yPattern2} lumpSumReturn
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Dca_Period_CostBasis
|
||
* @property {CentsSatsUsdPattern} _1w
|
||
* @property {CentsSatsUsdPattern} _1m
|
||
* @property {CentsSatsUsdPattern} _3m
|
||
* @property {CentsSatsUsdPattern} _6m
|
||
* @property {CentsSatsUsdPattern} _1y
|
||
* @property {CentsSatsUsdPattern} _2y
|
||
* @property {CentsSatsUsdPattern} _3y
|
||
* @property {CentsSatsUsdPattern} _4y
|
||
* @property {CentsSatsUsdPattern} _5y
|
||
* @property {CentsSatsUsdPattern} _6y
|
||
* @property {CentsSatsUsdPattern} _8y
|
||
* @property {CentsSatsUsdPattern} _10y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Dca_Class
|
||
* @property {SeriesTree_Market_Dca_Class_Stack} stack
|
||
* @property {SeriesTree_Market_Dca_Class_CostBasis} costBasis
|
||
* @property {SeriesTree_Market_Dca_Class_Return} return
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Dca_Class_Stack
|
||
* @property {BtcCentsSatsUsdPattern2} from2015
|
||
* @property {BtcCentsSatsUsdPattern2} from2016
|
||
* @property {BtcCentsSatsUsdPattern2} from2017
|
||
* @property {BtcCentsSatsUsdPattern2} from2018
|
||
* @property {BtcCentsSatsUsdPattern2} from2019
|
||
* @property {BtcCentsSatsUsdPattern2} from2020
|
||
* @property {BtcCentsSatsUsdPattern2} from2021
|
||
* @property {BtcCentsSatsUsdPattern2} from2022
|
||
* @property {BtcCentsSatsUsdPattern2} from2023
|
||
* @property {BtcCentsSatsUsdPattern2} from2024
|
||
* @property {BtcCentsSatsUsdPattern2} from2025
|
||
* @property {BtcCentsSatsUsdPattern2} from2026
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Dca_Class_CostBasis
|
||
* @property {CentsSatsUsdPattern} from2015
|
||
* @property {CentsSatsUsdPattern} from2016
|
||
* @property {CentsSatsUsdPattern} from2017
|
||
* @property {CentsSatsUsdPattern} from2018
|
||
* @property {CentsSatsUsdPattern} from2019
|
||
* @property {CentsSatsUsdPattern} from2020
|
||
* @property {CentsSatsUsdPattern} from2021
|
||
* @property {CentsSatsUsdPattern} from2022
|
||
* @property {CentsSatsUsdPattern} from2023
|
||
* @property {CentsSatsUsdPattern} from2024
|
||
* @property {CentsSatsUsdPattern} from2025
|
||
* @property {CentsSatsUsdPattern} from2026
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Dca_Class_Return
|
||
* @property {BpsPercentRatioPattern} from2015
|
||
* @property {BpsPercentRatioPattern} from2016
|
||
* @property {BpsPercentRatioPattern} from2017
|
||
* @property {BpsPercentRatioPattern} from2018
|
||
* @property {BpsPercentRatioPattern} from2019
|
||
* @property {BpsPercentRatioPattern} from2020
|
||
* @property {BpsPercentRatioPattern} from2021
|
||
* @property {BpsPercentRatioPattern} from2022
|
||
* @property {BpsPercentRatioPattern} from2023
|
||
* @property {BpsPercentRatioPattern} from2024
|
||
* @property {BpsPercentRatioPattern} from2025
|
||
* @property {BpsPercentRatioPattern} from2026
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Technical
|
||
* @property {SeriesTree_Market_Technical_Rsi} rsi
|
||
* @property {BpsPercentRatioPattern3} stochK
|
||
* @property {BpsPercentRatioPattern3} stochD
|
||
* @property {BpsRatioPattern2} piCycle
|
||
* @property {SeriesTree_Market_Technical_Macd} macd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Technical_Rsi
|
||
* @property {AverageGainsLossesRsiStochPattern} _24h
|
||
* @property {AverageGainsLossesRsiStochPattern} _1w
|
||
* @property {AverageGainsLossesRsiStochPattern} _1m
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Technical_Macd
|
||
* @property {SeriesTree_Market_Technical_Macd_24h} _24h
|
||
* @property {SeriesTree_Market_Technical_Macd_1w} _1w
|
||
* @property {SeriesTree_Market_Technical_Macd_1m} _1m
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Technical_Macd_24h
|
||
* @property {SeriesPattern1<StoredF32>} emaFast
|
||
* @property {SeriesPattern1<StoredF32>} emaSlow
|
||
* @property {SeriesPattern1<StoredF32>} line
|
||
* @property {SeriesPattern1<StoredF32>} signal
|
||
* @property {SeriesPattern1<StoredF32>} histogram
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Technical_Macd_1w
|
||
* @property {SeriesPattern1<StoredF32>} emaFast
|
||
* @property {SeriesPattern1<StoredF32>} emaSlow
|
||
* @property {SeriesPattern1<StoredF32>} line
|
||
* @property {SeriesPattern1<StoredF32>} signal
|
||
* @property {SeriesPattern1<StoredF32>} histogram
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Market_Technical_Macd_1m
|
||
* @property {SeriesPattern1<StoredF32>} emaFast
|
||
* @property {SeriesPattern1<StoredF32>} emaSlow
|
||
* @property {SeriesPattern1<StoredF32>} line
|
||
* @property {SeriesPattern1<StoredF32>} signal
|
||
* @property {SeriesPattern1<StoredF32>} histogram
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Pools
|
||
* @property {SeriesPattern18<PoolSlug>} pool
|
||
* @property {SeriesTree_Pools_Major} major
|
||
* @property {SeriesTree_Pools_Minor} minor
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Pools_Major
|
||
* @property {BlocksDominanceRewardsPattern} unknown
|
||
* @property {BlocksDominanceRewardsPattern} luxor
|
||
* @property {BlocksDominanceRewardsPattern} btccom
|
||
* @property {BlocksDominanceRewardsPattern} btctop
|
||
* @property {BlocksDominanceRewardsPattern} btcguild
|
||
* @property {BlocksDominanceRewardsPattern} eligius
|
||
* @property {BlocksDominanceRewardsPattern} f2pool
|
||
* @property {BlocksDominanceRewardsPattern} braiinspool
|
||
* @property {BlocksDominanceRewardsPattern} antpool
|
||
* @property {BlocksDominanceRewardsPattern} btcc
|
||
* @property {BlocksDominanceRewardsPattern} bwpool
|
||
* @property {BlocksDominanceRewardsPattern} bitfury
|
||
* @property {BlocksDominanceRewardsPattern} viabtc
|
||
* @property {BlocksDominanceRewardsPattern} poolin
|
||
* @property {BlocksDominanceRewardsPattern} spiderpool
|
||
* @property {BlocksDominanceRewardsPattern} binancepool
|
||
* @property {BlocksDominanceRewardsPattern} foundryusa
|
||
* @property {BlocksDominanceRewardsPattern} sbicrypto
|
||
* @property {BlocksDominanceRewardsPattern} marapool
|
||
* @property {BlocksDominanceRewardsPattern} secpool
|
||
* @property {BlocksDominanceRewardsPattern} ocean
|
||
* @property {BlocksDominanceRewardsPattern} whitepool
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Pools_Minor
|
||
* @property {BlocksDominancePattern} blockfills
|
||
* @property {BlocksDominancePattern} ultimuspool
|
||
* @property {BlocksDominancePattern} terrapool
|
||
* @property {BlocksDominancePattern} onethash
|
||
* @property {BlocksDominancePattern} bitfarms
|
||
* @property {BlocksDominancePattern} huobipool
|
||
* @property {BlocksDominancePattern} wayicn
|
||
* @property {BlocksDominancePattern} canoepool
|
||
* @property {BlocksDominancePattern} bitcoincom
|
||
* @property {BlocksDominancePattern} pool175btc
|
||
* @property {BlocksDominancePattern} gbminers
|
||
* @property {BlocksDominancePattern} axbt
|
||
* @property {BlocksDominancePattern} asicminer
|
||
* @property {BlocksDominancePattern} bitminter
|
||
* @property {BlocksDominancePattern} bitcoinrussia
|
||
* @property {BlocksDominancePattern} btcserv
|
||
* @property {BlocksDominancePattern} simplecoinus
|
||
* @property {BlocksDominancePattern} ozcoin
|
||
* @property {BlocksDominancePattern} eclipsemc
|
||
* @property {BlocksDominancePattern} maxbtc
|
||
* @property {BlocksDominancePattern} triplemining
|
||
* @property {BlocksDominancePattern} coinlab
|
||
* @property {BlocksDominancePattern} pool50btc
|
||
* @property {BlocksDominancePattern} ghashio
|
||
* @property {BlocksDominancePattern} stminingcorp
|
||
* @property {BlocksDominancePattern} bitparking
|
||
* @property {BlocksDominancePattern} mmpool
|
||
* @property {BlocksDominancePattern} polmine
|
||
* @property {BlocksDominancePattern} kncminer
|
||
* @property {BlocksDominancePattern} bitalo
|
||
* @property {BlocksDominancePattern} hhtt
|
||
* @property {BlocksDominancePattern} megabigpower
|
||
* @property {BlocksDominancePattern} mtred
|
||
* @property {BlocksDominancePattern} nmcbit
|
||
* @property {BlocksDominancePattern} yourbtcnet
|
||
* @property {BlocksDominancePattern} givemecoins
|
||
* @property {BlocksDominancePattern} multicoinco
|
||
* @property {BlocksDominancePattern} bcpoolio
|
||
* @property {BlocksDominancePattern} cointerra
|
||
* @property {BlocksDominancePattern} kanopool
|
||
* @property {BlocksDominancePattern} solock
|
||
* @property {BlocksDominancePattern} ckpool
|
||
* @property {BlocksDominancePattern} nicehash
|
||
* @property {BlocksDominancePattern} bitclub
|
||
* @property {BlocksDominancePattern} bitcoinaffiliatenetwork
|
||
* @property {BlocksDominancePattern} exxbw
|
||
* @property {BlocksDominancePattern} bitsolo
|
||
* @property {BlocksDominancePattern} twentyoneinc
|
||
* @property {BlocksDominancePattern} digitalbtc
|
||
* @property {BlocksDominancePattern} eightbaochi
|
||
* @property {BlocksDominancePattern} mybtccoinpool
|
||
* @property {BlocksDominancePattern} tbdice
|
||
* @property {BlocksDominancePattern} hashpool
|
||
* @property {BlocksDominancePattern} nexious
|
||
* @property {BlocksDominancePattern} bravomining
|
||
* @property {BlocksDominancePattern} hotpool
|
||
* @property {BlocksDominancePattern} okexpool
|
||
* @property {BlocksDominancePattern} bcmonster
|
||
* @property {BlocksDominancePattern} onehash
|
||
* @property {BlocksDominancePattern} bixin
|
||
* @property {BlocksDominancePattern} tatmaspool
|
||
* @property {BlocksDominancePattern} connectbtc
|
||
* @property {BlocksDominancePattern} batpool
|
||
* @property {BlocksDominancePattern} waterhole
|
||
* @property {BlocksDominancePattern} dcexploration
|
||
* @property {BlocksDominancePattern} dcex
|
||
* @property {BlocksDominancePattern} btpool
|
||
* @property {BlocksDominancePattern} fiftyeightcoin
|
||
* @property {BlocksDominancePattern} bitcoinindia
|
||
* @property {BlocksDominancePattern} shawnp0wers
|
||
* @property {BlocksDominancePattern} phashio
|
||
* @property {BlocksDominancePattern} rigpool
|
||
* @property {BlocksDominancePattern} haozhuzhu
|
||
* @property {BlocksDominancePattern} sevenpool
|
||
* @property {BlocksDominancePattern} miningkings
|
||
* @property {BlocksDominancePattern} hashbx
|
||
* @property {BlocksDominancePattern} dpool
|
||
* @property {BlocksDominancePattern} rawpool
|
||
* @property {BlocksDominancePattern} haominer
|
||
* @property {BlocksDominancePattern} helix
|
||
* @property {BlocksDominancePattern} bitcoinukraine
|
||
* @property {BlocksDominancePattern} secretsuperstar
|
||
* @property {BlocksDominancePattern} tigerpoolnet
|
||
* @property {BlocksDominancePattern} sigmapoolcom
|
||
* @property {BlocksDominancePattern} okpooltop
|
||
* @property {BlocksDominancePattern} hummerpool
|
||
* @property {BlocksDominancePattern} tangpool
|
||
* @property {BlocksDominancePattern} bytepool
|
||
* @property {BlocksDominancePattern} novablock
|
||
* @property {BlocksDominancePattern} miningcity
|
||
* @property {BlocksDominancePattern} minerium
|
||
* @property {BlocksDominancePattern} lubiancom
|
||
* @property {BlocksDominancePattern} okkong
|
||
* @property {BlocksDominancePattern} aaopool
|
||
* @property {BlocksDominancePattern} emcdpool
|
||
* @property {BlocksDominancePattern} arkpool
|
||
* @property {BlocksDominancePattern} purebtccom
|
||
* @property {BlocksDominancePattern} kucoinpool
|
||
* @property {BlocksDominancePattern} entrustcharitypool
|
||
* @property {BlocksDominancePattern} okminer
|
||
* @property {BlocksDominancePattern} titan
|
||
* @property {BlocksDominancePattern} pegapool
|
||
* @property {BlocksDominancePattern} btcnuggets
|
||
* @property {BlocksDominancePattern} cloudhashing
|
||
* @property {BlocksDominancePattern} digitalxmintsy
|
||
* @property {BlocksDominancePattern} telco214
|
||
* @property {BlocksDominancePattern} btcpoolparty
|
||
* @property {BlocksDominancePattern} multipool
|
||
* @property {BlocksDominancePattern} transactioncoinmining
|
||
* @property {BlocksDominancePattern} btcdig
|
||
* @property {BlocksDominancePattern} trickysbtcpool
|
||
* @property {BlocksDominancePattern} btcmp
|
||
* @property {BlocksDominancePattern} eobot
|
||
* @property {BlocksDominancePattern} unomp
|
||
* @property {BlocksDominancePattern} patels
|
||
* @property {BlocksDominancePattern} gogreenlight
|
||
* @property {BlocksDominancePattern} bitcoinindiapool
|
||
* @property {BlocksDominancePattern} ekanembtc
|
||
* @property {BlocksDominancePattern} canoe
|
||
* @property {BlocksDominancePattern} tiger
|
||
* @property {BlocksDominancePattern} onem1x
|
||
* @property {BlocksDominancePattern} zulupool
|
||
* @property {BlocksDominancePattern} wiz
|
||
* @property {BlocksDominancePattern} wk057
|
||
* @property {BlocksDominancePattern} futurebitapollosolo
|
||
* @property {BlocksDominancePattern} carbonnegative
|
||
* @property {BlocksDominancePattern} portlandhodl
|
||
* @property {BlocksDominancePattern} phoenix
|
||
* @property {BlocksDominancePattern} neopool
|
||
* @property {BlocksDominancePattern} maxipool
|
||
* @property {BlocksDominancePattern} bitfufupool
|
||
* @property {BlocksDominancePattern} gdpool
|
||
* @property {BlocksDominancePattern} miningdutch
|
||
* @property {BlocksDominancePattern} publicpool
|
||
* @property {BlocksDominancePattern} miningsquared
|
||
* @property {BlocksDominancePattern} innopolistech
|
||
* @property {BlocksDominancePattern} btclab
|
||
* @property {BlocksDominancePattern} parasite
|
||
* @property {BlocksDominancePattern} redrockpool
|
||
* @property {BlocksDominancePattern} est3lar
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Prices
|
||
* @property {SeriesTree_Prices_Split} split
|
||
* @property {SeriesTree_Prices_Ohlc} ohlc
|
||
* @property {SeriesTree_Prices_Spot} spot
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Prices_Split
|
||
* @property {CentsSatsUsdPattern3} open
|
||
* @property {CentsSatsUsdPattern3} high
|
||
* @property {CentsSatsUsdPattern3} low
|
||
* @property {CentsSatsUsdPattern3} close
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Prices_Ohlc
|
||
* @property {SeriesPattern2<OHLCDollars>} usd
|
||
* @property {SeriesPattern2<OHLCCents>} cents
|
||
* @property {SeriesPattern2<OHLCSats>} sats
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Prices_Spot
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<Sats>} sats
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Supply
|
||
* @property {SeriesPattern18<SupplyState>} state
|
||
* @property {BtcCentsSatsUsdPattern2} circulating
|
||
* @property {AverageBaseCumulativeSumPattern3} burned
|
||
* @property {BpsPercentRatioPattern} inflationRate
|
||
* @property {SeriesTree_Supply_Velocity} velocity
|
||
* @property {CentsDeltaUsdPattern} marketCap
|
||
* @property {_1m1w1y24hPattern<BasisPointsSigned32>} marketMinusRealizedCapGrowthRate
|
||
* @property {BtcCentsSatsUsdPattern2} hodledOrLost
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Supply_Velocity
|
||
* @property {SeriesPattern1<StoredF64>} native
|
||
* @property {SeriesPattern1<StoredF64>} fiat
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts
|
||
* @property {SeriesTree_Cohorts_Utxo} utxo
|
||
* @property {SeriesTree_Cohorts_Addr} addr
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo
|
||
* @property {SeriesTree_Cohorts_Utxo_All} all
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth} sth
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth} lth
|
||
* @property {SeriesTree_Cohorts_Utxo_AgeRange} ageRange
|
||
* @property {SeriesTree_Cohorts_Utxo_UnderAge} underAge
|
||
* @property {SeriesTree_Cohorts_Utxo_OverAge} overAge
|
||
* @property {SeriesTree_Cohorts_Utxo_Epoch} epoch
|
||
* @property {SeriesTree_Cohorts_Utxo_Class} class
|
||
* @property {SeriesTree_Cohorts_Utxo_OverAmount} overAmount
|
||
* @property {SeriesTree_Cohorts_Utxo_AmountRange} amountRange
|
||
* @property {SeriesTree_Cohorts_Utxo_UnderAmount} underAmount
|
||
* @property {SeriesTree_Cohorts_Utxo_Type} type
|
||
* @property {SeriesTree_Cohorts_Utxo_Profitability} profitability
|
||
* @property {SeriesTree_Cohorts_Utxo_Matured} matured
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Supply} supply
|
||
* @property {UnspentPattern} outputs
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Activity} activity
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Realized} realized
|
||
* @property {SeriesTree_Cohorts_Utxo_All_CostBasis} costBasis
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Unrealized} unrealized
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Supply
|
||
* @property {BtcCentsSatsUsdPattern2} total
|
||
* @property {BtcCentsSatsUsdPattern2} half
|
||
* @property {AbsoluteRatePattern} delta
|
||
* @property {BtcCentsSatsToUsdPattern2} inProfit
|
||
* @property {BtcCentsSatsToUsdPattern2} inLoss
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Activity
|
||
* @property {AverageBaseCumulativeInSumPattern} transferVolume
|
||
* @property {AverageBaseCumulativeSumPattern<StoredF64>} coindaysDestroyed
|
||
* @property {SeriesPattern1<StoredF64>} coinyearsDestroyed
|
||
* @property {_1m1w1y24hPattern<StoredF32>} dormancy
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Realized
|
||
* @property {CentsDeltaToUsdPattern} cap
|
||
* @property {BaseCumulativeSumToPattern} profit
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Realized_Loss} loss
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Realized_Price} price
|
||
* @property {SeriesPattern1<StoredF32>} mvrv
|
||
* @property {BaseChangeCumulativeDeltaSumToPattern} netPnl
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Realized_Sopr} sopr
|
||
* @property {BaseCumulativeSumPattern} grossPnl
|
||
* @property {_1m1w1y24hPattern7} sellSideRiskRatio
|
||
* @property {BaseCumulativeSumToPattern} peakRegret
|
||
* @property {PricePattern} investor
|
||
* @property {_1m1w1y24hPattern<StoredF64>} profitToLossRatio
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Realized_Loss
|
||
* @property {CentsUsdPattern2} base
|
||
* @property {CentsUsdPattern2} cumulative
|
||
* @property {_1m1w1y24hPattern6} sum
|
||
* @property {BaseSumPattern} negative
|
||
* @property {BpsPercentRatioPattern4} toRcap
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Realized_Price
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<SatsFract>} sats
|
||
* @property {SeriesPattern1<BasisPoints32>} bps
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
* @property {Pct1Pct2Pct5Pct95Pct98Pct99Pattern} percentiles
|
||
* @property {_1m1w1y2y4yAllPattern} sma
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Realized_Price_StdDev} stdDev
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Realized_Price_StdDev
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Realized_Price_StdDev_All} all
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Realized_Price_StdDev_4y} _4y
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Realized_Price_StdDev_2y} _2y
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Realized_Price_StdDev_1y} _1y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Realized_Price_StdDev_All
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Realized_Price_StdDev_4y
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Realized_Price_StdDev_2y
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Realized_Price_StdDev_1y
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Realized_Sopr
|
||
* @property {AverageBaseCumulativeSumPattern<Cents>} valueDestroyed
|
||
* @property {_1m1w1y24hPattern<StoredF64>} ratio
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Realized_Sopr_Adjusted} adjusted
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Realized_Sopr_Adjusted
|
||
* @property {_1m1w1y24hPattern<StoredF64>} ratio
|
||
* @property {AverageBaseCumulativeSumPattern<Cents>} transferVolume
|
||
* @property {AverageBaseCumulativeSumPattern<Cents>} valueDestroyed
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_CostBasis
|
||
* @property {PerPattern} inProfit
|
||
* @property {PerPattern} inLoss
|
||
* @property {CentsSatsUsdPattern} min
|
||
* @property {CentsSatsUsdPattern} max
|
||
* @property {Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern} perCoin
|
||
* @property {Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern} perDollar
|
||
* @property {BpsPercentRatioPattern3} supplyDensity
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Unrealized
|
||
* @property {BpsRatioPattern} nupl
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Unrealized_Profit} profit
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Unrealized_Loss} loss
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Unrealized_NetPnl} netPnl
|
||
* @property {CentsUsdPattern2} grossPnl
|
||
* @property {InPattern} investedCapital
|
||
* @property {SeriesPattern18<CentsSquaredSats>} investorCapInProfitRaw
|
||
* @property {SeriesPattern18<CentsSquaredSats>} investorCapInLossRaw
|
||
* @property {SeriesTree_Cohorts_Utxo_All_Unrealized_Sentiment} sentiment
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Unrealized_Profit
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {BpsPercentRatioPattern3} toMcap
|
||
* @property {BpsPercentRatioPattern3} toOwnGrossPnl
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Unrealized_Loss
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<Dollars>} negative
|
||
* @property {BpsPercentRatioPattern3} toMcap
|
||
* @property {BpsPercentRatioPattern3} toOwnGrossPnl
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Unrealized_NetPnl
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
* @property {SeriesPattern1<CentsSigned>} cents
|
||
* @property {BpsPercentRatioPattern} toOwnGrossPnl
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_All_Unrealized_Sentiment
|
||
* @property {CentsUsdPattern2} painIndex
|
||
* @property {CentsUsdPattern2} greedIndex
|
||
* @property {CentsUsdPattern} net
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth
|
||
* @property {DeltaHalfInToTotalPattern2} supply
|
||
* @property {UnspentPattern} outputs
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Activity} activity
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Realized} realized
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_CostBasis} costBasis
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Unrealized} unrealized
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Activity
|
||
* @property {AverageBaseCumulativeInSumPattern} transferVolume
|
||
* @property {AverageBaseCumulativeSumPattern<StoredF64>} coindaysDestroyed
|
||
* @property {SeriesPattern1<StoredF64>} coinyearsDestroyed
|
||
* @property {_1m1w1y24hPattern<StoredF32>} dormancy
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Realized
|
||
* @property {CentsDeltaToUsdPattern} cap
|
||
* @property {BaseCumulativeSumToPattern} profit
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Realized_Loss} loss
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Realized_Price} price
|
||
* @property {SeriesPattern1<StoredF32>} mvrv
|
||
* @property {BaseChangeCumulativeDeltaSumToPattern} netPnl
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Realized_Sopr} sopr
|
||
* @property {BaseCumulativeSumPattern} grossPnl
|
||
* @property {_1m1w1y24hPattern7} sellSideRiskRatio
|
||
* @property {BaseCumulativeSumToPattern} peakRegret
|
||
* @property {PricePattern} investor
|
||
* @property {_1m1w1y24hPattern<StoredF64>} profitToLossRatio
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Realized_Loss
|
||
* @property {CentsUsdPattern2} base
|
||
* @property {CentsUsdPattern2} cumulative
|
||
* @property {_1m1w1y24hPattern6} sum
|
||
* @property {BaseSumPattern} negative
|
||
* @property {BpsPercentRatioPattern4} toRcap
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Realized_Price
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<SatsFract>} sats
|
||
* @property {SeriesPattern1<BasisPoints32>} bps
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
* @property {Pct1Pct2Pct5Pct95Pct98Pct99Pattern} percentiles
|
||
* @property {_1m1w1y2y4yAllPattern} sma
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Realized_Price_StdDev} stdDev
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Realized_Price_StdDev
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Realized_Price_StdDev_All} all
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Realized_Price_StdDev_4y} _4y
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Realized_Price_StdDev_2y} _2y
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Realized_Price_StdDev_1y} _1y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Realized_Price_StdDev_All
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Realized_Price_StdDev_4y
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Realized_Price_StdDev_2y
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Realized_Price_StdDev_1y
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Realized_Sopr
|
||
* @property {AverageBaseCumulativeSumPattern<Cents>} valueDestroyed
|
||
* @property {_1m1w1y24hPattern<StoredF64>} ratio
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Realized_Sopr_Adjusted} adjusted
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Realized_Sopr_Adjusted
|
||
* @property {_1m1w1y24hPattern<StoredF64>} ratio
|
||
* @property {AverageBaseCumulativeSumPattern<Cents>} transferVolume
|
||
* @property {AverageBaseCumulativeSumPattern<Cents>} valueDestroyed
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_CostBasis
|
||
* @property {PerPattern} inProfit
|
||
* @property {PerPattern} inLoss
|
||
* @property {CentsSatsUsdPattern} min
|
||
* @property {CentsSatsUsdPattern} max
|
||
* @property {Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern} perCoin
|
||
* @property {Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern} perDollar
|
||
* @property {BpsPercentRatioPattern3} supplyDensity
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Unrealized
|
||
* @property {BpsRatioPattern} nupl
|
||
* @property {CentsToUsdPattern4} profit
|
||
* @property {CentsNegativeToUsdPattern2} loss
|
||
* @property {CentsToUsdPattern3} netPnl
|
||
* @property {CentsUsdPattern2} grossPnl
|
||
* @property {InPattern} investedCapital
|
||
* @property {SeriesPattern18<CentsSquaredSats>} investorCapInProfitRaw
|
||
* @property {SeriesPattern18<CentsSquaredSats>} investorCapInLossRaw
|
||
* @property {SeriesTree_Cohorts_Utxo_Sth_Unrealized_Sentiment} sentiment
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Sth_Unrealized_Sentiment
|
||
* @property {CentsUsdPattern2} painIndex
|
||
* @property {CentsUsdPattern2} greedIndex
|
||
* @property {CentsUsdPattern} net
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth
|
||
* @property {DeltaHalfInToTotalPattern2} supply
|
||
* @property {UnspentPattern} outputs
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_Activity} activity
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_Realized} realized
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_CostBasis} costBasis
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_Unrealized} unrealized
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_Activity
|
||
* @property {AverageBaseCumulativeInSumPattern} transferVolume
|
||
* @property {AverageBaseCumulativeSumPattern<StoredF64>} coindaysDestroyed
|
||
* @property {SeriesPattern1<StoredF64>} coinyearsDestroyed
|
||
* @property {_1m1w1y24hPattern<StoredF32>} dormancy
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_Realized
|
||
* @property {CentsDeltaToUsdPattern} cap
|
||
* @property {BaseCumulativeSumToPattern} profit
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_Realized_Loss} loss
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_Realized_Price} price
|
||
* @property {SeriesPattern1<StoredF32>} mvrv
|
||
* @property {BaseChangeCumulativeDeltaSumToPattern} netPnl
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_Realized_Sopr} sopr
|
||
* @property {BaseCumulativeSumPattern} grossPnl
|
||
* @property {_1m1w1y24hPattern7} sellSideRiskRatio
|
||
* @property {BaseCumulativeSumToPattern} peakRegret
|
||
* @property {PricePattern} investor
|
||
* @property {_1m1w1y24hPattern<StoredF64>} profitToLossRatio
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_Realized_Loss
|
||
* @property {CentsUsdPattern2} base
|
||
* @property {CentsUsdPattern2} cumulative
|
||
* @property {_1m1w1y24hPattern6} sum
|
||
* @property {BaseSumPattern} negative
|
||
* @property {BpsPercentRatioPattern4} toRcap
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_Realized_Price
|
||
* @property {SeriesPattern1<Dollars>} usd
|
||
* @property {SeriesPattern1<Cents>} cents
|
||
* @property {SeriesPattern1<SatsFract>} sats
|
||
* @property {SeriesPattern1<BasisPoints32>} bps
|
||
* @property {SeriesPattern1<StoredF32>} ratio
|
||
* @property {Pct1Pct2Pct5Pct95Pct98Pct99Pattern} percentiles
|
||
* @property {_1m1w1y2y4yAllPattern} sma
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_Realized_Price_StdDev} stdDev
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_Realized_Price_StdDev
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_Realized_Price_StdDev_All} all
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_Realized_Price_StdDev_4y} _4y
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_Realized_Price_StdDev_2y} _2y
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_Realized_Price_StdDev_1y} _1y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_Realized_Price_StdDev_All
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_Realized_Price_StdDev_4y
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_Realized_Price_StdDev_2y
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_Realized_Price_StdDev_1y
|
||
* @property {SeriesPattern1<StoredF32>} sd
|
||
* @property {SeriesPattern1<StoredF32>} zscore
|
||
* @property {CentsSatsUsdPattern} _0sd
|
||
* @property {PriceRatioPattern} p05sd
|
||
* @property {PriceRatioPattern} p1sd
|
||
* @property {PriceRatioPattern} p15sd
|
||
* @property {PriceRatioPattern} p2sd
|
||
* @property {PriceRatioPattern} p25sd
|
||
* @property {PriceRatioPattern} p3sd
|
||
* @property {PriceRatioPattern} m05sd
|
||
* @property {PriceRatioPattern} m1sd
|
||
* @property {PriceRatioPattern} m15sd
|
||
* @property {PriceRatioPattern} m2sd
|
||
* @property {PriceRatioPattern} m25sd
|
||
* @property {PriceRatioPattern} m3sd
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_Realized_Sopr
|
||
* @property {AverageBaseCumulativeSumPattern<Cents>} valueDestroyed
|
||
* @property {_1m1w1y24hPattern<StoredF64>} ratio
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_CostBasis
|
||
* @property {PerPattern} inProfit
|
||
* @property {PerPattern} inLoss
|
||
* @property {CentsSatsUsdPattern} min
|
||
* @property {CentsSatsUsdPattern} max
|
||
* @property {Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern} perCoin
|
||
* @property {Pct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern} perDollar
|
||
* @property {BpsPercentRatioPattern3} supplyDensity
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_Unrealized
|
||
* @property {BpsRatioPattern} nupl
|
||
* @property {CentsToUsdPattern4} profit
|
||
* @property {CentsNegativeToUsdPattern2} loss
|
||
* @property {CentsToUsdPattern3} netPnl
|
||
* @property {CentsUsdPattern2} grossPnl
|
||
* @property {InPattern} investedCapital
|
||
* @property {SeriesPattern18<CentsSquaredSats>} investorCapInProfitRaw
|
||
* @property {SeriesPattern18<CentsSquaredSats>} investorCapInLossRaw
|
||
* @property {SeriesTree_Cohorts_Utxo_Lth_Unrealized_Sentiment} sentiment
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Lth_Unrealized_Sentiment
|
||
* @property {CentsUsdPattern2} painIndex
|
||
* @property {CentsUsdPattern2} greedIndex
|
||
* @property {CentsUsdPattern} net
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_AgeRange
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} under1h
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1hTo1d
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1dTo1w
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1wTo1m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1mTo2m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2mTo3m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _3mTo4m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _4mTo5m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _5mTo6m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _6mTo1y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1yTo2y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2yTo3y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _3yTo4y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _4yTo5y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _5yTo6y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _6yTo7y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _7yTo8y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _8yTo10y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _10yTo12y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _12yTo15y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} over15y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_UnderAge
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1w
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _3m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _4m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _5m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _6m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _3y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _4y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _5y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _6y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _7y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _8y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _10y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _12y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _15y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_OverAge
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1d
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1w
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _3m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _4m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _5m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _6m
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _3y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _4y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _5y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _6y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _7y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _8y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _10y
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _12y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Epoch
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _0
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _1
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _3
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _4
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Class
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2009
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2010
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2011
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2012
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2013
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2014
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2015
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2016
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2017
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2018
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2019
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2020
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2021
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2022
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2023
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2024
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2025
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern} _2026
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_OverAmount
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1sat
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10sats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _100sats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1kSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10kSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _100kSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1mSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10mSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1btc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10btc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _100btc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1kBtc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10kBtc
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_AmountRange
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _0sats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1satTo10sats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10satsTo100sats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _100satsTo1kSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1kSatsTo10kSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10kSatsTo100kSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _100kSatsTo1mSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1mSatsTo10mSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10mSatsTo1btc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1btcTo10btc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10btcTo100btc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _100btcTo1kBtc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1kBtcTo10kBtc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10kBtcTo100kBtc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} over100kBtc
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_UnderAmount
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10sats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _100sats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1kSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10kSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _100kSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1mSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10mSats
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1btc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10btc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _100btc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _1kBtc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _10kBtc
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern2} _100kBtc
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Type
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern3} p2pk65
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern3} p2pk33
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern3} p2pkh
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern3} p2ms
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern3} p2sh
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern3} p2wpkh
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern3} p2wsh
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern3} p2tr
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern3} p2a
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern3} unknown
|
||
* @property {ActivityOutputsRealizedSupplyUnrealizedPattern3} empty
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Profitability
|
||
* @property {SeriesTree_Cohorts_Utxo_Profitability_Range} range
|
||
* @property {SeriesTree_Cohorts_Utxo_Profitability_Profit} profit
|
||
* @property {SeriesTree_Cohorts_Utxo_Profitability_Loss} loss
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Profitability_Range
|
||
* @property {NuplRealizedSupplyPattern} over1000pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _500pctTo1000pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _300pctTo500pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _200pctTo300pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _100pctTo200pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _90pctTo100pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _80pctTo90pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _70pctTo80pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _60pctTo70pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _50pctTo60pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _40pctTo50pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _30pctTo40pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _20pctTo30pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _10pctTo20pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _0pctTo10pctInProfit
|
||
* @property {NuplRealizedSupplyPattern} _0pctTo10pctInLoss
|
||
* @property {NuplRealizedSupplyPattern} _10pctTo20pctInLoss
|
||
* @property {NuplRealizedSupplyPattern} _20pctTo30pctInLoss
|
||
* @property {NuplRealizedSupplyPattern} _30pctTo40pctInLoss
|
||
* @property {NuplRealizedSupplyPattern} _40pctTo50pctInLoss
|
||
* @property {NuplRealizedSupplyPattern} _50pctTo60pctInLoss
|
||
* @property {NuplRealizedSupplyPattern} _60pctTo70pctInLoss
|
||
* @property {NuplRealizedSupplyPattern} _70pctTo80pctInLoss
|
||
* @property {NuplRealizedSupplyPattern} _80pctTo90pctInLoss
|
||
* @property {NuplRealizedSupplyPattern} _90pctTo100pctInLoss
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Profitability_Profit
|
||
* @property {NuplRealizedSupplyPattern} all
|
||
* @property {NuplRealizedSupplyPattern} _10pct
|
||
* @property {NuplRealizedSupplyPattern} _20pct
|
||
* @property {NuplRealizedSupplyPattern} _30pct
|
||
* @property {NuplRealizedSupplyPattern} _40pct
|
||
* @property {NuplRealizedSupplyPattern} _50pct
|
||
* @property {NuplRealizedSupplyPattern} _60pct
|
||
* @property {NuplRealizedSupplyPattern} _70pct
|
||
* @property {NuplRealizedSupplyPattern} _80pct
|
||
* @property {NuplRealizedSupplyPattern} _90pct
|
||
* @property {NuplRealizedSupplyPattern} _100pct
|
||
* @property {NuplRealizedSupplyPattern} _200pct
|
||
* @property {NuplRealizedSupplyPattern} _300pct
|
||
* @property {NuplRealizedSupplyPattern} _500pct
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Profitability_Loss
|
||
* @property {NuplRealizedSupplyPattern} all
|
||
* @property {NuplRealizedSupplyPattern} _10pct
|
||
* @property {NuplRealizedSupplyPattern} _20pct
|
||
* @property {NuplRealizedSupplyPattern} _30pct
|
||
* @property {NuplRealizedSupplyPattern} _40pct
|
||
* @property {NuplRealizedSupplyPattern} _50pct
|
||
* @property {NuplRealizedSupplyPattern} _60pct
|
||
* @property {NuplRealizedSupplyPattern} _70pct
|
||
* @property {NuplRealizedSupplyPattern} _80pct
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Utxo_Matured
|
||
* @property {AverageBaseCumulativeSumPattern3} under1h
|
||
* @property {AverageBaseCumulativeSumPattern3} _1hTo1d
|
||
* @property {AverageBaseCumulativeSumPattern3} _1dTo1w
|
||
* @property {AverageBaseCumulativeSumPattern3} _1wTo1m
|
||
* @property {AverageBaseCumulativeSumPattern3} _1mTo2m
|
||
* @property {AverageBaseCumulativeSumPattern3} _2mTo3m
|
||
* @property {AverageBaseCumulativeSumPattern3} _3mTo4m
|
||
* @property {AverageBaseCumulativeSumPattern3} _4mTo5m
|
||
* @property {AverageBaseCumulativeSumPattern3} _5mTo6m
|
||
* @property {AverageBaseCumulativeSumPattern3} _6mTo1y
|
||
* @property {AverageBaseCumulativeSumPattern3} _1yTo2y
|
||
* @property {AverageBaseCumulativeSumPattern3} _2yTo3y
|
||
* @property {AverageBaseCumulativeSumPattern3} _3yTo4y
|
||
* @property {AverageBaseCumulativeSumPattern3} _4yTo5y
|
||
* @property {AverageBaseCumulativeSumPattern3} _5yTo6y
|
||
* @property {AverageBaseCumulativeSumPattern3} _6yTo7y
|
||
* @property {AverageBaseCumulativeSumPattern3} _7yTo8y
|
||
* @property {AverageBaseCumulativeSumPattern3} _8yTo10y
|
||
* @property {AverageBaseCumulativeSumPattern3} _10yTo12y
|
||
* @property {AverageBaseCumulativeSumPattern3} _12yTo15y
|
||
* @property {AverageBaseCumulativeSumPattern3} over15y
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Addr
|
||
* @property {SeriesTree_Cohorts_Addr_OverAmount} overAmount
|
||
* @property {SeriesTree_Cohorts_Addr_AmountRange} amountRange
|
||
* @property {SeriesTree_Cohorts_Addr_UnderAmount} underAmount
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Addr_OverAmount
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1sat
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10sats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _100sats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1kSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10kSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _100kSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1mSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10mSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1btc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10btc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _100btc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1kBtc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10kBtc
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Addr_AmountRange
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _0sats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1satTo10sats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10satsTo100sats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _100satsTo1kSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1kSatsTo10kSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10kSatsTo100kSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _100kSatsTo1mSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1mSatsTo10mSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10mSatsTo1btc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1btcTo10btc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10btcTo100btc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _100btcTo1kBtc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1kBtcTo10kBtc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10kBtcTo100kBtc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} over100kBtc
|
||
*/
|
||
|
||
/**
|
||
* @typedef {Object} SeriesTree_Cohorts_Addr_UnderAmount
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10sats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _100sats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1kSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10kSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _100kSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1mSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10mSats
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1btc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10btc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _100btc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _1kBtc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _10kBtc
|
||
* @property {ActivityAddrOutputsRealizedSupplyUnrealizedPattern} _100kBtc
|
||
*/
|
||
|
||
/**
|
||
* Main BRK client with series tree and API methods
|
||
* @extends BrkClientBase
|
||
*/
|
||
class BrkClient extends BrkClientBase {
|
||
VERSION = "v0.1.9";
|
||
|
||
INDEXES = /** @type {const} */ ([
|
||
"minute10",
|
||
"minute30",
|
||
"hour1",
|
||
"hour4",
|
||
"hour12",
|
||
"day1",
|
||
"day3",
|
||
"week1",
|
||
"month1",
|
||
"month3",
|
||
"month6",
|
||
"year1",
|
||
"year10",
|
||
"halving",
|
||
"epoch",
|
||
"height",
|
||
"tx_index",
|
||
"txin_index",
|
||
"txout_index",
|
||
"empty_output_index",
|
||
"op_return_index",
|
||
"p2a_addr_index",
|
||
"p2ms_output_index",
|
||
"p2pk33_addr_index",
|
||
"p2pk65_addr_index",
|
||
"p2pkh_addr_index",
|
||
"p2sh_addr_index",
|
||
"p2tr_addr_index",
|
||
"p2wpkh_addr_index",
|
||
"p2wsh_addr_index",
|
||
"unknown_output_index",
|
||
"funded_addr_index",
|
||
"empty_addr_index"
|
||
]);
|
||
|
||
POOL_ID_TO_POOL_NAME = /** @type {const} */ ({
|
||
"unknown": "Unknown",
|
||
"blockfills": "BlockFills",
|
||
"ultimuspool": "ULTIMUSPOOL",
|
||
"terrapool": "Terra Pool",
|
||
"luxor": "Luxor",
|
||
"onethash": "1THash",
|
||
"btccom": "BTC.com",
|
||
"bitfarms": "Bitfarms",
|
||
"huobipool": "Huobi.pool",
|
||
"wayicn": "WAYI.CN",
|
||
"canoepool": "CanoePool",
|
||
"btctop": "BTC.TOP",
|
||
"bitcoincom": "Bitcoin.com",
|
||
"pool175btc": "175btc",
|
||
"gbminers": "GBMiners",
|
||
"axbt": "A-XBT",
|
||
"asicminer": "ASICMiner",
|
||
"bitminter": "BitMinter",
|
||
"bitcoinrussia": "BitcoinRussia",
|
||
"btcserv": "BTCServ",
|
||
"simplecoinus": "simplecoin.us",
|
||
"btcguild": "BTC Guild",
|
||
"eligius": "Eligius",
|
||
"ozcoin": "OzCoin",
|
||
"eclipsemc": "EclipseMC",
|
||
"maxbtc": "MaxBTC",
|
||
"triplemining": "TripleMining",
|
||
"coinlab": "CoinLab",
|
||
"pool50btc": "50BTC",
|
||
"ghashio": "GHash.IO",
|
||
"stminingcorp": "ST Mining Corp",
|
||
"bitparking": "Bitparking",
|
||
"mmpool": "mmpool",
|
||
"polmine": "Polmine",
|
||
"kncminer": "KnCMiner",
|
||
"bitalo": "Bitalo",
|
||
"f2pool": "F2Pool",
|
||
"hhtt": "HHTT",
|
||
"megabigpower": "MegaBigPower",
|
||
"mtred": "Mt Red",
|
||
"nmcbit": "NMCbit",
|
||
"yourbtcnet": "Yourbtc.net",
|
||
"givemecoins": "Give Me Coins",
|
||
"braiinspool": "Braiins Pool",
|
||
"antpool": "AntPool",
|
||
"multicoinco": "MultiCoin.co",
|
||
"bcpoolio": "bcpool.io",
|
||
"cointerra": "Cointerra",
|
||
"kanopool": "KanoPool",
|
||
"solock": "Solo CK",
|
||
"ckpool": "CKPool",
|
||
"nicehash": "NiceHash",
|
||
"bitclub": "BitClub",
|
||
"bitcoinaffiliatenetwork": "Bitcoin Affiliate Network",
|
||
"btcc": "BTCC",
|
||
"bwpool": "BWPool",
|
||
"exxbw": "EXX&BW",
|
||
"bitsolo": "Bitsolo",
|
||
"bitfury": "BitFury",
|
||
"twentyoneinc": "21 Inc.",
|
||
"digitalbtc": "digitalBTC",
|
||
"eightbaochi": "8baochi",
|
||
"mybtccoinpool": "myBTCcoin Pool",
|
||
"tbdice": "TBDice",
|
||
"hashpool": "HASHPOOL",
|
||
"nexious": "Nexious",
|
||
"bravomining": "Bravo Mining",
|
||
"hotpool": "HotPool",
|
||
"okexpool": "OKExPool",
|
||
"bcmonster": "BCMonster",
|
||
"onehash": "1Hash",
|
||
"bixin": "Bixin",
|
||
"tatmaspool": "TATMAS Pool",
|
||
"viabtc": "ViaBTC",
|
||
"connectbtc": "ConnectBTC",
|
||
"batpool": "BATPOOL",
|
||
"waterhole": "Waterhole",
|
||
"dcexploration": "DCExploration",
|
||
"dcex": "DCEX",
|
||
"btpool": "BTPOOL",
|
||
"fiftyeightcoin": "58COIN",
|
||
"bitcoinindia": "Bitcoin India",
|
||
"shawnp0wers": "shawnp0wers",
|
||
"phashio": "PHash.IO",
|
||
"rigpool": "RigPool",
|
||
"haozhuzhu": "HAOZHUZHU",
|
||
"sevenpool": "7pool",
|
||
"miningkings": "MiningKings",
|
||
"hashbx": "HashBX",
|
||
"dpool": "DPOOL",
|
||
"rawpool": "Rawpool",
|
||
"haominer": "haominer",
|
||
"helix": "Helix",
|
||
"bitcoinukraine": "Bitcoin-Ukraine",
|
||
"poolin": "Poolin",
|
||
"secretsuperstar": "SecretSuperstar",
|
||
"tigerpoolnet": "tigerpool.net",
|
||
"sigmapoolcom": "Sigmapool.com",
|
||
"okpooltop": "okpool.top",
|
||
"hummerpool": "Hummerpool",
|
||
"tangpool": "Tangpool",
|
||
"bytepool": "BytePool",
|
||
"spiderpool": "SpiderPool",
|
||
"novablock": "NovaBlock",
|
||
"miningcity": "MiningCity",
|
||
"binancepool": "Binance Pool",
|
||
"minerium": "Minerium",
|
||
"lubiancom": "Lubian.com",
|
||
"okkong": "OKKONG",
|
||
"aaopool": "AAO Pool",
|
||
"emcdpool": "EMCDPool",
|
||
"foundryusa": "Foundry USA",
|
||
"sbicrypto": "SBI Crypto",
|
||
"arkpool": "ArkPool",
|
||
"purebtccom": "PureBTC.COM",
|
||
"marapool": "MARA Pool",
|
||
"kucoinpool": "KuCoinPool",
|
||
"entrustcharitypool": "Entrust Charity Pool",
|
||
"okminer": "OKMINER",
|
||
"titan": "Titan",
|
||
"pegapool": "PEGA Pool",
|
||
"btcnuggets": "BTC Nuggets",
|
||
"cloudhashing": "CloudHashing",
|
||
"digitalxmintsy": "digitalX Mintsy",
|
||
"telco214": "Telco 214",
|
||
"btcpoolparty": "BTC Pool Party",
|
||
"multipool": "Multipool",
|
||
"transactioncoinmining": "transactioncoinmining",
|
||
"btcdig": "BTCDig",
|
||
"trickysbtcpool": "Tricky's BTC Pool",
|
||
"btcmp": "BTCMP",
|
||
"eobot": "Eobot",
|
||
"unomp": "UNOMP",
|
||
"patels": "Patels",
|
||
"gogreenlight": "GoGreenLight",
|
||
"bitcoinindiapool": "BitcoinIndia",
|
||
"ekanembtc": "EkanemBTC",
|
||
"canoe": "CANOE",
|
||
"tiger": "tiger",
|
||
"onem1x": "1M1X",
|
||
"zulupool": "Zulupool",
|
||
"secpool": "SECPOOL",
|
||
"ocean": "OCEAN",
|
||
"whitepool": "WhitePool",
|
||
"wiz": "wiz",
|
||
"wk057": "wk057",
|
||
"futurebitapollosolo": "FutureBit Apollo Solo",
|
||
"carbonnegative": "Carbon Negative",
|
||
"portlandhodl": "Portland.HODL",
|
||
"phoenix": "Phoenix",
|
||
"neopool": "Neopool",
|
||
"maxipool": "MaxiPool",
|
||
"bitfufupool": "BitFuFuPool",
|
||
"gdpool": "GDPool",
|
||
"miningdutch": "Mining-Dutch",
|
||
"publicpool": "Public Pool",
|
||
"miningsquared": "Mining Squared",
|
||
"innopolistech": "Innopolis Tech",
|
||
"btclab": "BTCLab",
|
||
"parasite": "Parasite",
|
||
"redrockpool": "RedRock Pool",
|
||
"est3lar": "Est3lar"
|
||
});
|
||
|
||
TERM_NAMES = /** @type {const} */ ({
|
||
"short": {
|
||
"id": "sth",
|
||
"short": "STH",
|
||
"long": "Short Term Holders"
|
||
},
|
||
"long": {
|
||
"id": "lth",
|
||
"short": "LTH",
|
||
"long": "Long Term Holders"
|
||
}
|
||
});
|
||
|
||
EPOCH_NAMES = /** @type {const} */ ({
|
||
"_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"
|
||
}
|
||
});
|
||
|
||
CLASS_NAMES = /** @type {const} */ ({
|
||
"_2009": {
|
||
"id": "class_2009",
|
||
"short": "2009",
|
||
"long": "Class 2009"
|
||
},
|
||
"_2010": {
|
||
"id": "class_2010",
|
||
"short": "2010",
|
||
"long": "Class 2010"
|
||
},
|
||
"_2011": {
|
||
"id": "class_2011",
|
||
"short": "2011",
|
||
"long": "Class 2011"
|
||
},
|
||
"_2012": {
|
||
"id": "class_2012",
|
||
"short": "2012",
|
||
"long": "Class 2012"
|
||
},
|
||
"_2013": {
|
||
"id": "class_2013",
|
||
"short": "2013",
|
||
"long": "Class 2013"
|
||
},
|
||
"_2014": {
|
||
"id": "class_2014",
|
||
"short": "2014",
|
||
"long": "Class 2014"
|
||
},
|
||
"_2015": {
|
||
"id": "class_2015",
|
||
"short": "2015",
|
||
"long": "Class 2015"
|
||
},
|
||
"_2016": {
|
||
"id": "class_2016",
|
||
"short": "2016",
|
||
"long": "Class 2016"
|
||
},
|
||
"_2017": {
|
||
"id": "class_2017",
|
||
"short": "2017",
|
||
"long": "Class 2017"
|
||
},
|
||
"_2018": {
|
||
"id": "class_2018",
|
||
"short": "2018",
|
||
"long": "Class 2018"
|
||
},
|
||
"_2019": {
|
||
"id": "class_2019",
|
||
"short": "2019",
|
||
"long": "Class 2019"
|
||
},
|
||
"_2020": {
|
||
"id": "class_2020",
|
||
"short": "2020",
|
||
"long": "Class 2020"
|
||
},
|
||
"_2021": {
|
||
"id": "class_2021",
|
||
"short": "2021",
|
||
"long": "Class 2021"
|
||
},
|
||
"_2022": {
|
||
"id": "class_2022",
|
||
"short": "2022",
|
||
"long": "Class 2022"
|
||
},
|
||
"_2023": {
|
||
"id": "class_2023",
|
||
"short": "2023",
|
||
"long": "Class 2023"
|
||
},
|
||
"_2024": {
|
||
"id": "class_2024",
|
||
"short": "2024",
|
||
"long": "Class 2024"
|
||
},
|
||
"_2025": {
|
||
"id": "class_2025",
|
||
"short": "2025",
|
||
"long": "Class 2025"
|
||
},
|
||
"_2026": {
|
||
"id": "class_2026",
|
||
"short": "2026",
|
||
"long": "Class 2026"
|
||
}
|
||
});
|
||
|
||
SPENDABLE_TYPE_NAMES = /** @type {const} */ ({
|
||
"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 = /** @type {const} */ ({
|
||
"under1h": {
|
||
"id": "under_1h_old",
|
||
"short": "<1h",
|
||
"long": "Under 1 Hour Old"
|
||
},
|
||
"_1hTo1d": {
|
||
"id": "1h_to_1d_old",
|
||
"short": "1h-1d",
|
||
"long": "1 Hour to 1 Day Old"
|
||
},
|
||
"_1dTo1w": {
|
||
"id": "1d_to_1w_old",
|
||
"short": "1d-1w",
|
||
"long": "1 Day to 1 Week Old"
|
||
},
|
||
"_1wTo1m": {
|
||
"id": "1w_to_1m_old",
|
||
"short": "1w-1m",
|
||
"long": "1 Week to 1 Month Old"
|
||
},
|
||
"_1mTo2m": {
|
||
"id": "1m_to_2m_old",
|
||
"short": "1m-2m",
|
||
"long": "1 to 2 Months Old"
|
||
},
|
||
"_2mTo3m": {
|
||
"id": "2m_to_3m_old",
|
||
"short": "2m-3m",
|
||
"long": "2 to 3 Months Old"
|
||
},
|
||
"_3mTo4m": {
|
||
"id": "3m_to_4m_old",
|
||
"short": "3m-4m",
|
||
"long": "3 to 4 Months Old"
|
||
},
|
||
"_4mTo5m": {
|
||
"id": "4m_to_5m_old",
|
||
"short": "4m-5m",
|
||
"long": "4 to 5 Months Old"
|
||
},
|
||
"_5mTo6m": {
|
||
"id": "5m_to_6m_old",
|
||
"short": "5m-6m",
|
||
"long": "5 to 6 Months Old"
|
||
},
|
||
"_6mTo1y": {
|
||
"id": "6m_to_1y_old",
|
||
"short": "6m-1y",
|
||
"long": "6 Months to 1 Year Old"
|
||
},
|
||
"_1yTo2y": {
|
||
"id": "1y_to_2y_old",
|
||
"short": "1y-2y",
|
||
"long": "1 to 2 Years Old"
|
||
},
|
||
"_2yTo3y": {
|
||
"id": "2y_to_3y_old",
|
||
"short": "2y-3y",
|
||
"long": "2 to 3 Years Old"
|
||
},
|
||
"_3yTo4y": {
|
||
"id": "3y_to_4y_old",
|
||
"short": "3y-4y",
|
||
"long": "3 to 4 Years Old"
|
||
},
|
||
"_4yTo5y": {
|
||
"id": "4y_to_5y_old",
|
||
"short": "4y-5y",
|
||
"long": "4 to 5 Years Old"
|
||
},
|
||
"_5yTo6y": {
|
||
"id": "5y_to_6y_old",
|
||
"short": "5y-6y",
|
||
"long": "5 to 6 Years Old"
|
||
},
|
||
"_6yTo7y": {
|
||
"id": "6y_to_7y_old",
|
||
"short": "6y-7y",
|
||
"long": "6 to 7 Years Old"
|
||
},
|
||
"_7yTo8y": {
|
||
"id": "7y_to_8y_old",
|
||
"short": "7y-8y",
|
||
"long": "7 to 8 Years Old"
|
||
},
|
||
"_8yTo10y": {
|
||
"id": "8y_to_10y_old",
|
||
"short": "8y-10y",
|
||
"long": "8 to 10 Years Old"
|
||
},
|
||
"_10yTo12y": {
|
||
"id": "10y_to_12y_old",
|
||
"short": "10y-12y",
|
||
"long": "10 to 12 Years Old"
|
||
},
|
||
"_12yTo15y": {
|
||
"id": "12y_to_15y_old",
|
||
"short": "12y-15y",
|
||
"long": "12 to 15 Years Old"
|
||
},
|
||
"over15y": {
|
||
"id": "over_15y_old",
|
||
"short": "15y+",
|
||
"long": "15+ Years Old"
|
||
}
|
||
});
|
||
|
||
UNDER_AGE_NAMES = /** @type {const} */ ({
|
||
"_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"
|
||
}
|
||
});
|
||
|
||
OVER_AGE_NAMES = /** @type {const} */ ({
|
||
"_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 = /** @type {const} */ ({
|
||
"_0sats": {
|
||
"id": "0sats",
|
||
"short": "0 sats",
|
||
"long": "0 Sats"
|
||
},
|
||
"_1satTo10sats": {
|
||
"id": "1sat_to_10sats",
|
||
"short": "1-10 sats",
|
||
"long": "1-10 Sats"
|
||
},
|
||
"_10satsTo100sats": {
|
||
"id": "10sats_to_100sats",
|
||
"short": "10-100 sats",
|
||
"long": "10-100 Sats"
|
||
},
|
||
"_100satsTo1kSats": {
|
||
"id": "100sats_to_1k_sats",
|
||
"short": "100-1k sats",
|
||
"long": "100-1K Sats"
|
||
},
|
||
"_1kSatsTo10kSats": {
|
||
"id": "1k_sats_to_10k_sats",
|
||
"short": "1k-10k sats",
|
||
"long": "1K-10K Sats"
|
||
},
|
||
"_10kSatsTo100kSats": {
|
||
"id": "10k_sats_to_100k_sats",
|
||
"short": "10k-100k sats",
|
||
"long": "10K-100K Sats"
|
||
},
|
||
"_100kSatsTo1mSats": {
|
||
"id": "100k_sats_to_1m_sats",
|
||
"short": "100k-1M sats",
|
||
"long": "100K-1M Sats"
|
||
},
|
||
"_1mSatsTo10mSats": {
|
||
"id": "1m_sats_to_10m_sats",
|
||
"short": "1M-10M sats",
|
||
"long": "1M-10M Sats"
|
||
},
|
||
"_10mSatsTo1btc": {
|
||
"id": "10m_sats_to_1btc",
|
||
"short": "0.1-1 BTC",
|
||
"long": "0.1-1 BTC"
|
||
},
|
||
"_1btcTo10btc": {
|
||
"id": "1btc_to_10btc",
|
||
"short": "1-10 BTC",
|
||
"long": "1-10 BTC"
|
||
},
|
||
"_10btcTo100btc": {
|
||
"id": "10btc_to_100btc",
|
||
"short": "10-100 BTC",
|
||
"long": "10-100 BTC"
|
||
},
|
||
"_100btcTo1kBtc": {
|
||
"id": "100btc_to_1k_btc",
|
||
"short": "100-1k BTC",
|
||
"long": "100-1K BTC"
|
||
},
|
||
"_1kBtcTo10kBtc": {
|
||
"id": "1k_btc_to_10k_btc",
|
||
"short": "1k-10k BTC",
|
||
"long": "1K-10K BTC"
|
||
},
|
||
"_10kBtcTo100kBtc": {
|
||
"id": "10k_btc_to_100k_btc",
|
||
"short": "10k-100k BTC",
|
||
"long": "10K-100K BTC"
|
||
},
|
||
"over100kBtc": {
|
||
"id": "over_100k_btc",
|
||
"short": "100k+ BTC",
|
||
"long": "100K+ BTC"
|
||
}
|
||
});
|
||
|
||
OVER_AMOUNT_NAMES = /** @type {const} */ ({
|
||
"_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"
|
||
},
|
||
"_1kSats": {
|
||
"id": "over_1k_sats",
|
||
"short": "1k+ sats",
|
||
"long": "Over 1K Sats"
|
||
},
|
||
"_10kSats": {
|
||
"id": "over_10k_sats",
|
||
"short": "10k+ sats",
|
||
"long": "Over 10K Sats"
|
||
},
|
||
"_100kSats": {
|
||
"id": "over_100k_sats",
|
||
"short": "100k+ sats",
|
||
"long": "Over 100K Sats"
|
||
},
|
||
"_1mSats": {
|
||
"id": "over_1m_sats",
|
||
"short": "1M+ sats",
|
||
"long": "Over 1M Sats"
|
||
},
|
||
"_10mSats": {
|
||
"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"
|
||
},
|
||
"_1kBtc": {
|
||
"id": "over_1k_btc",
|
||
"short": "1k+ BTC",
|
||
"long": "Over 1K BTC"
|
||
},
|
||
"_10kBtc": {
|
||
"id": "over_10k_btc",
|
||
"short": "10k+ BTC",
|
||
"long": "Over 10K BTC"
|
||
}
|
||
});
|
||
|
||
UNDER_AMOUNT_NAMES = /** @type {const} */ ({
|
||
"_10sats": {
|
||
"id": "under_10sats",
|
||
"short": "<10 sats",
|
||
"long": "Under 10 Sats"
|
||
},
|
||
"_100sats": {
|
||
"id": "under_100sats",
|
||
"short": "<100 sats",
|
||
"long": "Under 100 Sats"
|
||
},
|
||
"_1kSats": {
|
||
"id": "under_1k_sats",
|
||
"short": "<1k sats",
|
||
"long": "Under 1K Sats"
|
||
},
|
||
"_10kSats": {
|
||
"id": "under_10k_sats",
|
||
"short": "<10k sats",
|
||
"long": "Under 10K Sats"
|
||
},
|
||
"_100kSats": {
|
||
"id": "under_100k_sats",
|
||
"short": "<100k sats",
|
||
"long": "Under 100K Sats"
|
||
},
|
||
"_1mSats": {
|
||
"id": "under_1m_sats",
|
||
"short": "<1M sats",
|
||
"long": "Under 1M Sats"
|
||
},
|
||
"_10mSats": {
|
||
"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"
|
||
},
|
||
"_1kBtc": {
|
||
"id": "under_1k_btc",
|
||
"short": "<1k BTC",
|
||
"long": "Under 1K BTC"
|
||
},
|
||
"_10kBtc": {
|
||
"id": "under_10k_btc",
|
||
"short": "<10k BTC",
|
||
"long": "Under 10K BTC"
|
||
},
|
||
"_100kBtc": {
|
||
"id": "under_100k_btc",
|
||
"short": "<100k BTC",
|
||
"long": "Under 100K BTC"
|
||
}
|
||
});
|
||
|
||
PROFITABILITY_RANGE_NAMES = /** @type {const} */ ({
|
||
"over1000pctInProfit": {
|
||
"id": "utxos_over_1000pct_in_profit",
|
||
"short": "+>1000%",
|
||
"long": "Over 1000% in Profit"
|
||
},
|
||
"_500pctTo1000pctInProfit": {
|
||
"id": "utxos_500pct_to_1000pct_in_profit",
|
||
"short": "+500-1000%",
|
||
"long": "500-1000% in Profit"
|
||
},
|
||
"_300pctTo500pctInProfit": {
|
||
"id": "utxos_300pct_to_500pct_in_profit",
|
||
"short": "+300-500%",
|
||
"long": "300-500% in Profit"
|
||
},
|
||
"_200pctTo300pctInProfit": {
|
||
"id": "utxos_200pct_to_300pct_in_profit",
|
||
"short": "+200-300%",
|
||
"long": "200-300% in Profit"
|
||
},
|
||
"_100pctTo200pctInProfit": {
|
||
"id": "utxos_100pct_to_200pct_in_profit",
|
||
"short": "+100-200%",
|
||
"long": "100-200% in Profit"
|
||
},
|
||
"_90pctTo100pctInProfit": {
|
||
"id": "utxos_90pct_to_100pct_in_profit",
|
||
"short": "+90-100%",
|
||
"long": "90-100% in Profit"
|
||
},
|
||
"_80pctTo90pctInProfit": {
|
||
"id": "utxos_80pct_to_90pct_in_profit",
|
||
"short": "+80-90%",
|
||
"long": "80-90% in Profit"
|
||
},
|
||
"_70pctTo80pctInProfit": {
|
||
"id": "utxos_70pct_to_80pct_in_profit",
|
||
"short": "+70-80%",
|
||
"long": "70-80% in Profit"
|
||
},
|
||
"_60pctTo70pctInProfit": {
|
||
"id": "utxos_60pct_to_70pct_in_profit",
|
||
"short": "+60-70%",
|
||
"long": "60-70% in Profit"
|
||
},
|
||
"_50pctTo60pctInProfit": {
|
||
"id": "utxos_50pct_to_60pct_in_profit",
|
||
"short": "+50-60%",
|
||
"long": "50-60% in Profit"
|
||
},
|
||
"_40pctTo50pctInProfit": {
|
||
"id": "utxos_40pct_to_50pct_in_profit",
|
||
"short": "+40-50%",
|
||
"long": "40-50% in Profit"
|
||
},
|
||
"_30pctTo40pctInProfit": {
|
||
"id": "utxos_30pct_to_40pct_in_profit",
|
||
"short": "+30-40%",
|
||
"long": "30-40% in Profit"
|
||
},
|
||
"_20pctTo30pctInProfit": {
|
||
"id": "utxos_20pct_to_30pct_in_profit",
|
||
"short": "+20-30%",
|
||
"long": "20-30% in Profit"
|
||
},
|
||
"_10pctTo20pctInProfit": {
|
||
"id": "utxos_10pct_to_20pct_in_profit",
|
||
"short": "+10-20%",
|
||
"long": "10-20% in Profit"
|
||
},
|
||
"_0pctTo10pctInProfit": {
|
||
"id": "utxos_0pct_to_10pct_in_profit",
|
||
"short": "+0-10%",
|
||
"long": "0-10% in Profit"
|
||
},
|
||
"_0pctTo10pctInLoss": {
|
||
"id": "utxos_0pct_to_10pct_in_loss",
|
||
"short": "-0-10%",
|
||
"long": "0-10% in Loss"
|
||
},
|
||
"_10pctTo20pctInLoss": {
|
||
"id": "utxos_10pct_to_20pct_in_loss",
|
||
"short": "-10-20%",
|
||
"long": "10-20% in Loss"
|
||
},
|
||
"_20pctTo30pctInLoss": {
|
||
"id": "utxos_20pct_to_30pct_in_loss",
|
||
"short": "-20-30%",
|
||
"long": "20-30% in Loss"
|
||
},
|
||
"_30pctTo40pctInLoss": {
|
||
"id": "utxos_30pct_to_40pct_in_loss",
|
||
"short": "-30-40%",
|
||
"long": "30-40% in Loss"
|
||
},
|
||
"_40pctTo50pctInLoss": {
|
||
"id": "utxos_40pct_to_50pct_in_loss",
|
||
"short": "-40-50%",
|
||
"long": "40-50% in Loss"
|
||
},
|
||
"_50pctTo60pctInLoss": {
|
||
"id": "utxos_50pct_to_60pct_in_loss",
|
||
"short": "-50-60%",
|
||
"long": "50-60% in Loss"
|
||
},
|
||
"_60pctTo70pctInLoss": {
|
||
"id": "utxos_60pct_to_70pct_in_loss",
|
||
"short": "-60-70%",
|
||
"long": "60-70% in Loss"
|
||
},
|
||
"_70pctTo80pctInLoss": {
|
||
"id": "utxos_70pct_to_80pct_in_loss",
|
||
"short": "-70-80%",
|
||
"long": "70-80% in Loss"
|
||
},
|
||
"_80pctTo90pctInLoss": {
|
||
"id": "utxos_80pct_to_90pct_in_loss",
|
||
"short": "-80-90%",
|
||
"long": "80-90% in Loss"
|
||
},
|
||
"_90pctTo100pctInLoss": {
|
||
"id": "utxos_90pct_to_100pct_in_loss",
|
||
"short": "-90-100%",
|
||
"long": "90-100% in Loss"
|
||
}
|
||
});
|
||
|
||
PROFIT_NAMES = /** @type {const} */ ({
|
||
"all": {
|
||
"id": "utxos_in_profit",
|
||
"short": "All",
|
||
"long": "In Profit"
|
||
},
|
||
"_10pct": {
|
||
"id": "utxos_over_10pct_in_profit",
|
||
"short": ">=10%",
|
||
"long": "Over 10% in Profit"
|
||
},
|
||
"_20pct": {
|
||
"id": "utxos_over_20pct_in_profit",
|
||
"short": ">=20%",
|
||
"long": "Over 20% in Profit"
|
||
},
|
||
"_30pct": {
|
||
"id": "utxos_over_30pct_in_profit",
|
||
"short": ">=30%",
|
||
"long": "Over 30% in Profit"
|
||
},
|
||
"_40pct": {
|
||
"id": "utxos_over_40pct_in_profit",
|
||
"short": ">=40%",
|
||
"long": "Over 40% in Profit"
|
||
},
|
||
"_50pct": {
|
||
"id": "utxos_over_50pct_in_profit",
|
||
"short": ">=50%",
|
||
"long": "Over 50% in Profit"
|
||
},
|
||
"_60pct": {
|
||
"id": "utxos_over_60pct_in_profit",
|
||
"short": ">=60%",
|
||
"long": "Over 60% in Profit"
|
||
},
|
||
"_70pct": {
|
||
"id": "utxos_over_70pct_in_profit",
|
||
"short": ">=70%",
|
||
"long": "Over 70% in Profit"
|
||
},
|
||
"_80pct": {
|
||
"id": "utxos_over_80pct_in_profit",
|
||
"short": ">=80%",
|
||
"long": "Over 80% in Profit"
|
||
},
|
||
"_90pct": {
|
||
"id": "utxos_over_90pct_in_profit",
|
||
"short": ">=90%",
|
||
"long": "Over 90% in Profit"
|
||
},
|
||
"_100pct": {
|
||
"id": "utxos_over_100pct_in_profit",
|
||
"short": ">=100%",
|
||
"long": "Over 100% in Profit"
|
||
},
|
||
"_200pct": {
|
||
"id": "utxos_over_200pct_in_profit",
|
||
"short": ">=200%",
|
||
"long": "Over 200% in Profit"
|
||
},
|
||
"_300pct": {
|
||
"id": "utxos_over_300pct_in_profit",
|
||
"short": ">=300%",
|
||
"long": "Over 300% in Profit"
|
||
},
|
||
"_500pct": {
|
||
"id": "utxos_over_500pct_in_profit",
|
||
"short": ">=500%",
|
||
"long": "Over 500% in Profit"
|
||
}
|
||
});
|
||
|
||
LOSS_NAMES = /** @type {const} */ ({
|
||
"all": {
|
||
"id": "utxos_in_loss",
|
||
"short": "All",
|
||
"long": "In Loss"
|
||
},
|
||
"_10pct": {
|
||
"id": "utxos_over_10pct_in_loss",
|
||
"short": ">=10%",
|
||
"long": "Over 10% in Loss"
|
||
},
|
||
"_20pct": {
|
||
"id": "utxos_over_20pct_in_loss",
|
||
"short": ">=20%",
|
||
"long": "Over 20% in Loss"
|
||
},
|
||
"_30pct": {
|
||
"id": "utxos_over_30pct_in_loss",
|
||
"short": ">=30%",
|
||
"long": "Over 30% in Loss"
|
||
},
|
||
"_40pct": {
|
||
"id": "utxos_over_40pct_in_loss",
|
||
"short": ">=40%",
|
||
"long": "Over 40% in Loss"
|
||
},
|
||
"_50pct": {
|
||
"id": "utxos_over_50pct_in_loss",
|
||
"short": ">=50%",
|
||
"long": "Over 50% in Loss"
|
||
},
|
||
"_60pct": {
|
||
"id": "utxos_over_60pct_in_loss",
|
||
"short": ">=60%",
|
||
"long": "Over 60% in Loss"
|
||
},
|
||
"_70pct": {
|
||
"id": "utxos_over_70pct_in_loss",
|
||
"short": ">=70%",
|
||
"long": "Over 70% in Loss"
|
||
},
|
||
"_80pct": {
|
||
"id": "utxos_over_80pct_in_loss",
|
||
"short": ">=80%",
|
||
"long": "Over 80% in Loss"
|
||
}
|
||
});
|
||
|
||
/**
|
||
* Convert an index value to a Date for date-based indexes.
|
||
* @param {Index} index - The index type
|
||
* @param {number} i - The index value
|
||
* @returns {globalThis.Date}
|
||
*/
|
||
indexToDate(index, i) {
|
||
return indexToDate(index, i);
|
||
}
|
||
|
||
/**
|
||
* Convert a Date to an index value for date-based indexes.
|
||
* @param {Index} index - The index type
|
||
* @param {globalThis.Date} d - The date to convert
|
||
* @returns {number}
|
||
*/
|
||
dateToIndex(index, d) {
|
||
return dateToIndex(index, d);
|
||
}
|
||
|
||
|
||
/**
|
||
* @param {BrkClientOptions|string} options
|
||
*/
|
||
constructor(options) {
|
||
super(options);
|
||
/** @type {SeriesTree} */
|
||
this.series = this._buildTree('');
|
||
}
|
||
|
||
/**
|
||
* @private
|
||
* @param {string} basePath
|
||
* @returns {SeriesTree}
|
||
*/
|
||
_buildTree(basePath) {
|
||
return {
|
||
blocks: {
|
||
blockhash: createSeriesPattern18(this, 'blockhash'),
|
||
difficulty: {
|
||
value: createSeriesPattern1(this, 'difficulty'),
|
||
hashrate: createSeriesPattern1(this, 'difficulty_hashrate'),
|
||
adjustment: createBpsPercentRatioPattern(this, 'difficulty_adjustment'),
|
||
epoch: createSeriesPattern1(this, 'difficulty_epoch'),
|
||
blocksToRetarget: createSeriesPattern1(this, 'blocks_to_retarget'),
|
||
daysToRetarget: createSeriesPattern1(this, 'days_to_retarget'),
|
||
},
|
||
time: {
|
||
timestamp: createSeriesPattern1(this, 'timestamp'),
|
||
date: createSeriesPattern18(this, 'date'),
|
||
timestampMonotonic: createSeriesPattern18(this, 'timestamp_monotonic'),
|
||
},
|
||
size: {
|
||
base: createSeriesPattern18(this, 'total_size'),
|
||
cumulative: createSeriesPattern1(this, 'block_size_cumulative'),
|
||
sum: create_1m1w1y24hPattern(this, 'block_size_sum'),
|
||
average: create_1m1w1y24hPattern(this, 'block_size_average'),
|
||
min: create_1m1w1y24hPattern(this, 'block_size_min'),
|
||
max: create_1m1w1y24hPattern(this, 'block_size_max'),
|
||
pct10: create_1m1w1y24hPattern(this, 'block_size_pct10'),
|
||
pct25: create_1m1w1y24hPattern(this, 'block_size_pct25'),
|
||
median: create_1m1w1y24hPattern(this, 'block_size_median'),
|
||
pct75: create_1m1w1y24hPattern(this, 'block_size_pct75'),
|
||
pct90: create_1m1w1y24hPattern(this, 'block_size_pct90'),
|
||
},
|
||
weight: {
|
||
base: createSeriesPattern18(this, 'block_weight'),
|
||
cumulative: createSeriesPattern1(this, 'block_weight_cumulative'),
|
||
sum: create_1m1w1y24hPattern(this, 'block_weight_sum'),
|
||
average: create_1m1w1y24hPattern(this, 'block_weight_average'),
|
||
min: create_1m1w1y24hPattern(this, 'block_weight_min'),
|
||
max: create_1m1w1y24hPattern(this, 'block_weight_max'),
|
||
pct10: create_1m1w1y24hPattern(this, 'block_weight_pct10'),
|
||
pct25: create_1m1w1y24hPattern(this, 'block_weight_pct25'),
|
||
median: create_1m1w1y24hPattern(this, 'block_weight_median'),
|
||
pct75: create_1m1w1y24hPattern(this, 'block_weight_pct75'),
|
||
pct90: create_1m1w1y24hPattern(this, 'block_weight_pct90'),
|
||
},
|
||
count: {
|
||
target: create_1m1w1y24hPattern(this, 'block_count_target'),
|
||
total: createAverageBaseCumulativeSumPattern2(this, 'block_count'),
|
||
},
|
||
lookback: {
|
||
_1h: createSeriesPattern18(this, 'height_1h_ago'),
|
||
_24h: createSeriesPattern18(this, 'height_24h_ago'),
|
||
_3d: createSeriesPattern18(this, 'height_3d_ago'),
|
||
_1w: createSeriesPattern18(this, 'height_1w_ago'),
|
||
_8d: createSeriesPattern18(this, 'height_8d_ago'),
|
||
_9d: createSeriesPattern18(this, 'height_9d_ago'),
|
||
_12d: createSeriesPattern18(this, 'height_12d_ago'),
|
||
_13d: createSeriesPattern18(this, 'height_13d_ago'),
|
||
_2w: createSeriesPattern18(this, 'height_2w_ago'),
|
||
_21d: createSeriesPattern18(this, 'height_21d_ago'),
|
||
_26d: createSeriesPattern18(this, 'height_26d_ago'),
|
||
_1m: createSeriesPattern18(this, 'height_1m_ago'),
|
||
_34d: createSeriesPattern18(this, 'height_34d_ago'),
|
||
_55d: createSeriesPattern18(this, 'height_55d_ago'),
|
||
_2m: createSeriesPattern18(this, 'height_2m_ago'),
|
||
_9w: createSeriesPattern18(this, 'height_9w_ago'),
|
||
_12w: createSeriesPattern18(this, 'height_12w_ago'),
|
||
_89d: createSeriesPattern18(this, 'height_89d_ago'),
|
||
_3m: createSeriesPattern18(this, 'height_3m_ago'),
|
||
_14w: createSeriesPattern18(this, 'height_14w_ago'),
|
||
_111d: createSeriesPattern18(this, 'height_111d_ago'),
|
||
_144d: createSeriesPattern18(this, 'height_144d_ago'),
|
||
_6m: createSeriesPattern18(this, 'height_6m_ago'),
|
||
_26w: createSeriesPattern18(this, 'height_26w_ago'),
|
||
_200d: createSeriesPattern18(this, 'height_200d_ago'),
|
||
_9m: createSeriesPattern18(this, 'height_9m_ago'),
|
||
_350d: createSeriesPattern18(this, 'height_350d_ago'),
|
||
_12m: createSeriesPattern18(this, 'height_12m_ago'),
|
||
_1y: createSeriesPattern18(this, 'height_1y_ago'),
|
||
_14m: createSeriesPattern18(this, 'height_14m_ago'),
|
||
_2y: createSeriesPattern18(this, 'height_2y_ago'),
|
||
_26m: createSeriesPattern18(this, 'height_26m_ago'),
|
||
_3y: createSeriesPattern18(this, 'height_3y_ago'),
|
||
_200w: createSeriesPattern18(this, 'height_200w_ago'),
|
||
_4y: createSeriesPattern18(this, 'height_4y_ago'),
|
||
_5y: createSeriesPattern18(this, 'height_5y_ago'),
|
||
_6y: createSeriesPattern18(this, 'height_6y_ago'),
|
||
_8y: createSeriesPattern18(this, 'height_8y_ago'),
|
||
_9y: createSeriesPattern18(this, 'height_9y_ago'),
|
||
_10y: createSeriesPattern18(this, 'height_10y_ago'),
|
||
_12y: createSeriesPattern18(this, 'height_12y_ago'),
|
||
_14y: createSeriesPattern18(this, 'height_14y_ago'),
|
||
_26y: createSeriesPattern18(this, 'height_26y_ago'),
|
||
},
|
||
interval: {
|
||
base: createSeriesPattern18(this, 'block_interval'),
|
||
_24h: createSeriesPattern1(this, 'block_interval_average_24h'),
|
||
_1w: createSeriesPattern1(this, 'block_interval_average_1w'),
|
||
_1m: createSeriesPattern1(this, 'block_interval_average_1m'),
|
||
_1y: createSeriesPattern1(this, 'block_interval_average_1y'),
|
||
},
|
||
vbytes: createAverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(this, 'block_vbytes'),
|
||
fullness: {
|
||
bps: createSeriesPattern18(this, 'block_fullness_bps'),
|
||
ratio: createSeriesPattern18(this, 'block_fullness_ratio'),
|
||
percent: createSeriesPattern18(this, 'block_fullness'),
|
||
},
|
||
halving: {
|
||
epoch: createSeriesPattern1(this, 'halving_epoch'),
|
||
blocksToHalving: createSeriesPattern1(this, 'blocks_to_halving'),
|
||
daysToHalving: createSeriesPattern1(this, 'days_to_halving'),
|
||
},
|
||
},
|
||
transactions: {
|
||
raw: {
|
||
firstTxIndex: createSeriesPattern18(this, 'first_tx_index'),
|
||
height: createSeriesPattern19(this, 'height'),
|
||
txid: createSeriesPattern19(this, 'txid'),
|
||
txVersion: createSeriesPattern19(this, 'tx_version'),
|
||
rawLocktime: createSeriesPattern19(this, 'raw_locktime'),
|
||
baseSize: createSeriesPattern19(this, 'base_size'),
|
||
totalSize: createSeriesPattern19(this, 'total_size'),
|
||
isExplicitlyRbf: createSeriesPattern19(this, 'is_explicitly_rbf'),
|
||
firstTxinIndex: createSeriesPattern19(this, 'first_txin_index'),
|
||
firstTxoutIndex: createSeriesPattern19(this, 'first_txout_index'),
|
||
},
|
||
count: {
|
||
total: createAverageBaseCumulativeMaxMedianMinPct10Pct25Pct75Pct90SumPattern2(this, 'tx_count'),
|
||
isCoinbase: createSeriesPattern19(this, 'is_coinbase'),
|
||
},
|
||
size: {
|
||
vsize: create_6bBlockTxPattern(this, 'tx_vsize'),
|
||
weight: {
|
||
txIndex: createSeriesPattern19(this, 'tx_weight'),
|
||
block: createMaxMedianMinPct10Pct25Pct75Pct90Pattern2(this, 'tx_weight'),
|
||
_6b: createMaxMedianMinPct10Pct25Pct75Pct90Pattern2(this, 'tx_weight_6b'),
|
||
},
|
||
},
|
||
fees: {
|
||
inputValue: createSeriesPattern19(this, 'input_value'),
|
||
outputValue: createSeriesPattern19(this, 'output_value'),
|
||
fee: create_6bBlockTxPattern(this, 'fee'),
|
||
feeRate: create_6bBlockTxPattern(this, 'fee_rate'),
|
||
},
|
||
versions: {
|
||
v1: createAverageBaseCumulativeSumPattern(this, 'tx_v1'),
|
||
v2: createAverageBaseCumulativeSumPattern(this, 'tx_v2'),
|
||
v3: createAverageBaseCumulativeSumPattern(this, 'tx_v3'),
|
||
},
|
||
volume: {
|
||
transferVolume: createAverageBaseCumulativeSumPattern3(this, 'transfer_volume_bis'),
|
||
txPerSec: create_1m1w1y24hPattern(this, 'tx_per_sec'),
|
||
outputsPerSec: create_1m1w1y24hPattern(this, 'outputs_per_sec'),
|
||
inputsPerSec: create_1m1w1y24hPattern(this, 'inputs_per_sec'),
|
||
},
|
||
},
|
||
inputs: {
|
||
raw: {
|
||
firstTxinIndex: createSeriesPattern18(this, 'first_txin_index'),
|
||
outpoint: createSeriesPattern20(this, 'outpoint'),
|
||
txIndex: createSeriesPattern20(this, 'tx_index'),
|
||
outputType: createSeriesPattern20(this, 'output_type'),
|
||
typeIndex: createSeriesPattern20(this, 'type_index'),
|
||
},
|
||
spent: {
|
||
txoutIndex: createSeriesPattern20(this, 'txout_index'),
|
||
value: createSeriesPattern20(this, 'value'),
|
||
},
|
||
count: createCumulativeRollingSumPattern(this, 'input_count'),
|
||
},
|
||
outputs: {
|
||
raw: {
|
||
firstTxoutIndex: createSeriesPattern18(this, 'first_txout_index'),
|
||
value: createSeriesPattern21(this, 'value'),
|
||
outputType: createSeriesPattern21(this, 'output_type'),
|
||
typeIndex: createSeriesPattern21(this, 'type_index'),
|
||
txIndex: createSeriesPattern21(this, 'tx_index'),
|
||
},
|
||
spent: {
|
||
txinIndex: createSeriesPattern21(this, 'txin_index'),
|
||
},
|
||
count: {
|
||
total: createCumulativeRollingSumPattern(this, 'output_count'),
|
||
unspent: createSeriesPattern1(this, 'utxo_count_bis'),
|
||
},
|
||
},
|
||
addrs: {
|
||
raw: {
|
||
p2pk65: {
|
||
firstIndex: createSeriesPattern18(this, 'first_p2pk65_addr_index'),
|
||
bytes: createSeriesPattern27(this, 'p2pk65_bytes'),
|
||
},
|
||
p2pk33: {
|
||
firstIndex: createSeriesPattern18(this, 'first_p2pk33_addr_index'),
|
||
bytes: createSeriesPattern26(this, 'p2pk33_bytes'),
|
||
},
|
||
p2pkh: {
|
||
firstIndex: createSeriesPattern18(this, 'first_p2pkh_addr_index'),
|
||
bytes: createSeriesPattern28(this, 'p2pkh_bytes'),
|
||
},
|
||
p2sh: {
|
||
firstIndex: createSeriesPattern18(this, 'first_p2sh_addr_index'),
|
||
bytes: createSeriesPattern29(this, 'p2sh_bytes'),
|
||
},
|
||
p2wpkh: {
|
||
firstIndex: createSeriesPattern18(this, 'first_p2wpkh_addr_index'),
|
||
bytes: createSeriesPattern31(this, 'p2wpkh_bytes'),
|
||
},
|
||
p2wsh: {
|
||
firstIndex: createSeriesPattern18(this, 'first_p2wsh_addr_index'),
|
||
bytes: createSeriesPattern32(this, 'p2wsh_bytes'),
|
||
},
|
||
p2tr: {
|
||
firstIndex: createSeriesPattern18(this, 'first_p2tr_addr_index'),
|
||
bytes: createSeriesPattern30(this, 'p2tr_bytes'),
|
||
},
|
||
p2a: {
|
||
firstIndex: createSeriesPattern18(this, 'first_p2a_addr_index'),
|
||
bytes: createSeriesPattern24(this, 'p2a_bytes'),
|
||
},
|
||
},
|
||
indexes: {
|
||
p2a: createSeriesPattern24(this, 'any_addr_index'),
|
||
p2pk33: createSeriesPattern26(this, 'any_addr_index'),
|
||
p2pk65: createSeriesPattern27(this, 'any_addr_index'),
|
||
p2pkh: createSeriesPattern28(this, 'any_addr_index'),
|
||
p2sh: createSeriesPattern29(this, 'any_addr_index'),
|
||
p2tr: createSeriesPattern30(this, 'any_addr_index'),
|
||
p2wpkh: createSeriesPattern31(this, 'any_addr_index'),
|
||
p2wsh: createSeriesPattern32(this, 'any_addr_index'),
|
||
funded: createSeriesPattern34(this, 'funded_addr_index'),
|
||
empty: createSeriesPattern35(this, 'empty_addr_index'),
|
||
},
|
||
data: {
|
||
funded: createSeriesPattern34(this, 'funded_addr_data'),
|
||
empty: createSeriesPattern35(this, 'empty_addr_data'),
|
||
},
|
||
funded: createAllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern3(this, 'addr_count'),
|
||
empty: createAllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern3(this, 'empty_addr_count'),
|
||
activity: {
|
||
all: createBothReactivatedReceivingSendingPattern(this, 'addr_activity'),
|
||
p2pk65: createBothReactivatedReceivingSendingPattern(this, 'p2pk65_addr_activity'),
|
||
p2pk33: createBothReactivatedReceivingSendingPattern(this, 'p2pk33_addr_activity'),
|
||
p2pkh: createBothReactivatedReceivingSendingPattern(this, 'p2pkh_addr_activity'),
|
||
p2sh: createBothReactivatedReceivingSendingPattern(this, 'p2sh_addr_activity'),
|
||
p2wpkh: createBothReactivatedReceivingSendingPattern(this, 'p2wpkh_addr_activity'),
|
||
p2wsh: createBothReactivatedReceivingSendingPattern(this, 'p2wsh_addr_activity'),
|
||
p2tr: createBothReactivatedReceivingSendingPattern(this, 'p2tr_addr_activity'),
|
||
p2a: createBothReactivatedReceivingSendingPattern(this, 'p2a_addr_activity'),
|
||
},
|
||
total: createAllP2aP2pk33P2pk65P2pkhP2shP2trP2wpkhP2wshPattern3(this, 'total_addr_count'),
|
||
new: {
|
||
all: createAverageBaseCumulativeSumPattern(this, 'new_addr_count'),
|
||
p2pk65: createAverageBaseCumulativeSumPattern(this, 'p2pk65_new_addr_count'),
|
||
p2pk33: createAverageBaseCumulativeSumPattern(this, 'p2pk33_new_addr_count'),
|
||
p2pkh: createAverageBaseCumulativeSumPattern(this, 'p2pkh_new_addr_count'),
|
||
p2sh: createAverageBaseCumulativeSumPattern(this, 'p2sh_new_addr_count'),
|
||
p2wpkh: createAverageBaseCumulativeSumPattern(this, 'p2wpkh_new_addr_count'),
|
||
p2wsh: createAverageBaseCumulativeSumPattern(this, 'p2wsh_new_addr_count'),
|
||
p2tr: createAverageBaseCumulativeSumPattern(this, 'p2tr_new_addr_count'),
|
||
p2a: createAverageBaseCumulativeSumPattern(this, 'p2a_new_addr_count'),
|
||
},
|
||
delta: {
|
||
all: createAbsoluteRatePattern(this, 'addr_count'),
|
||
p2pk65: createAbsoluteRatePattern(this, 'p2pk65_addr_count'),
|
||
p2pk33: createAbsoluteRatePattern(this, 'p2pk33_addr_count'),
|
||
p2pkh: createAbsoluteRatePattern(this, 'p2pkh_addr_count'),
|
||
p2sh: createAbsoluteRatePattern(this, 'p2sh_addr_count'),
|
||
p2wpkh: createAbsoluteRatePattern(this, 'p2wpkh_addr_count'),
|
||
p2wsh: createAbsoluteRatePattern(this, 'p2wsh_addr_count'),
|
||
p2tr: createAbsoluteRatePattern(this, 'p2tr_addr_count'),
|
||
p2a: createAbsoluteRatePattern(this, 'p2a_addr_count'),
|
||
},
|
||
},
|
||
scripts: {
|
||
raw: {
|
||
empty: {
|
||
firstIndex: createSeriesPattern18(this, 'first_empty_output_index'),
|
||
toTxIndex: createSeriesPattern22(this, 'tx_index'),
|
||
},
|
||
opReturn: {
|
||
firstIndex: createSeriesPattern18(this, 'first_op_return_index'),
|
||
toTxIndex: createSeriesPattern23(this, 'tx_index'),
|
||
},
|
||
p2ms: {
|
||
firstIndex: createSeriesPattern18(this, 'first_p2ms_output_index'),
|
||
toTxIndex: createSeriesPattern25(this, 'tx_index'),
|
||
},
|
||
unknown: {
|
||
firstIndex: createSeriesPattern18(this, 'first_unknown_output_index'),
|
||
toTxIndex: createSeriesPattern33(this, 'tx_index'),
|
||
},
|
||
},
|
||
count: {
|
||
p2a: createAverageBaseCumulativeSumPattern(this, 'p2a_count'),
|
||
p2ms: createAverageBaseCumulativeSumPattern(this, 'p2ms_count'),
|
||
p2pk33: createAverageBaseCumulativeSumPattern(this, 'p2pk33_count'),
|
||
p2pk65: createAverageBaseCumulativeSumPattern(this, 'p2pk65_count'),
|
||
p2pkh: createAverageBaseCumulativeSumPattern(this, 'p2pkh_count'),
|
||
p2sh: createAverageBaseCumulativeSumPattern(this, 'p2sh_count'),
|
||
p2tr: createAverageBaseCumulativeSumPattern(this, 'p2tr_count'),
|
||
p2wpkh: createAverageBaseCumulativeSumPattern(this, 'p2wpkh_count'),
|
||
p2wsh: createAverageBaseCumulativeSumPattern(this, 'p2wsh_count'),
|
||
opReturn: createAverageBaseCumulativeSumPattern(this, 'op_return_count'),
|
||
emptyOutput: createAverageBaseCumulativeSumPattern(this, 'empty_output_count'),
|
||
unknownOutput: createAverageBaseCumulativeSumPattern(this, 'unknown_output_count'),
|
||
},
|
||
value: {
|
||
opReturn: createAverageBaseCumulativeSumPattern3(this, 'op_return_value'),
|
||
},
|
||
},
|
||
mining: {
|
||
rewards: {
|
||
coinbase: createAverageBaseCumulativeSumPattern3(this, 'coinbase'),
|
||
subsidy: {
|
||
base: createBtcCentsSatsUsdPattern2(this, 'subsidy'),
|
||
cumulative: createBtcCentsSatsUsdPattern2(this, 'subsidy_cumulative'),
|
||
sum: create_1m1w1y24hPattern4(this, 'subsidy_sum'),
|
||
average: create_1m1w1y24hPattern3(this, 'subsidy_average'),
|
||
dominance: create_1m1w1y24hBpsPercentRatioPattern(this, 'subsidy_dominance'),
|
||
sma1y: createCentsUsdPattern2(this, 'subsidy_sma_1y'),
|
||
},
|
||
fees: {
|
||
base: createBtcCentsSatsUsdPattern2(this, 'fees'),
|
||
cumulative: createBtcCentsSatsUsdPattern2(this, 'fees_cumulative'),
|
||
sum: create_1m1w1y24hPattern4(this, 'fees_sum'),
|
||
average: create_1m1w1y24hPattern3(this, 'fees_average'),
|
||
min: create_1m1w1y24hPattern4(this, 'fees_min'),
|
||
max: create_1m1w1y24hPattern4(this, 'fees_max'),
|
||
pct10: create_1m1w1y24hPattern4(this, 'fees_pct10'),
|
||
pct25: create_1m1w1y24hPattern4(this, 'fees_pct25'),
|
||
median: create_1m1w1y24hPattern4(this, 'fees_median'),
|
||
pct75: create_1m1w1y24hPattern4(this, 'fees_pct75'),
|
||
pct90: create_1m1w1y24hPattern4(this, 'fees_pct90'),
|
||
dominance: create_1m1w1y24hBpsPercentRatioPattern(this, 'fee_dominance'),
|
||
toSubsidyRatio: {
|
||
_24h: createBpsRatioPattern2(this, 'fee_to_subsidy_ratio_24h'),
|
||
_1w: createBpsRatioPattern2(this, 'fee_to_subsidy_ratio_1w'),
|
||
_1m: createBpsRatioPattern2(this, 'fee_to_subsidy_ratio_1m'),
|
||
_1y: createBpsRatioPattern2(this, 'fee_to_subsidy_ratio_1y'),
|
||
},
|
||
},
|
||
unclaimed: {
|
||
base: createBtcCentsSatsUsdPattern2(this, 'unclaimed_rewards'),
|
||
cumulative: createBtcCentsSatsUsdPattern2(this, 'unclaimed_rewards_cumulative'),
|
||
},
|
||
},
|
||
hashrate: {
|
||
rate: {
|
||
base: createSeriesPattern1(this, 'hash_rate'),
|
||
sma: {
|
||
_1w: createSeriesPattern1(this, 'hash_rate_sma_1w'),
|
||
_1m: createSeriesPattern1(this, 'hash_rate_sma_1m'),
|
||
_2m: createSeriesPattern1(this, 'hash_rate_sma_2m'),
|
||
_1y: createSeriesPattern1(this, 'hash_rate_sma_1y'),
|
||
},
|
||
ath: createSeriesPattern1(this, 'hash_rate_ath'),
|
||
drawdown: createBpsPercentRatioPattern5(this, 'hash_rate_drawdown'),
|
||
},
|
||
price: createPhsReboundThsPattern(this, 'hash_price'),
|
||
value: createPhsReboundThsPattern(this, 'hash_value'),
|
||
},
|
||
},
|
||
positions: {
|
||
block: createSeriesPattern18(this, 'position'),
|
||
tx: createSeriesPattern19(this, 'position'),
|
||
},
|
||
cointime: {
|
||
activity: {
|
||
coinblocksCreated: createAverageBaseCumulativeSumPattern(this, 'coinblocks_created'),
|
||
coinblocksStored: createAverageBaseCumulativeSumPattern(this, 'coinblocks_stored'),
|
||
liveliness: createSeriesPattern1(this, 'liveliness'),
|
||
vaultedness: createSeriesPattern1(this, 'vaultedness'),
|
||
ratio: createSeriesPattern1(this, 'activity_to_vaultedness'),
|
||
coinblocksDestroyed: createAverageBaseCumulativeSumPattern(this, 'coinblocks_destroyed'),
|
||
},
|
||
supply: {
|
||
vaulted: createBtcCentsSatsUsdPattern2(this, 'vaulted_supply'),
|
||
active: createBtcCentsSatsUsdPattern2(this, 'active_supply'),
|
||
},
|
||
value: {
|
||
destroyed: createAverageBaseCumulativeSumPattern(this, 'cointime_value_destroyed'),
|
||
created: createAverageBaseCumulativeSumPattern(this, 'cointime_value_created'),
|
||
stored: createAverageBaseCumulativeSumPattern(this, 'cointime_value_stored'),
|
||
vocdd: createAverageBaseCumulativeSumPattern(this, 'vocdd'),
|
||
},
|
||
cap: {
|
||
thermo: createCentsUsdPattern2(this, 'thermo_cap'),
|
||
investor: createCentsUsdPattern2(this, 'investor_cap'),
|
||
vaulted: createCentsUsdPattern2(this, 'vaulted_cap'),
|
||
active: createCentsUsdPattern2(this, 'active_cap'),
|
||
cointime: createCentsUsdPattern2(this, 'cointime_cap'),
|
||
aviv: createBpsRatioPattern2(this, 'aviv_ratio'),
|
||
},
|
||
prices: {
|
||
vaulted: createBpsCentsPercentilesRatioSatsUsdPattern(this, 'vaulted_price'),
|
||
active: createBpsCentsPercentilesRatioSatsUsdPattern(this, 'active_price'),
|
||
trueMarketMean: createBpsCentsPercentilesRatioSatsUsdPattern(this, 'true_market_mean'),
|
||
cointime: createBpsCentsPercentilesRatioSatsUsdPattern(this, 'cointime_price'),
|
||
},
|
||
adjusted: {
|
||
inflationRate: createBpsPercentRatioPattern(this, 'cointime_adj_inflation_rate'),
|
||
txVelocityNative: createSeriesPattern1(this, 'cointime_adj_tx_velocity'),
|
||
txVelocityFiat: createSeriesPattern1(this, 'cointime_adj_tx_velocity_fiat'),
|
||
},
|
||
reserveRisk: {
|
||
value: createSeriesPattern1(this, 'reserve_risk'),
|
||
vocddMedian1y: createSeriesPattern18(this, 'vocdd_median_1y'),
|
||
hodlBank: createSeriesPattern18(this, 'hodl_bank'),
|
||
},
|
||
},
|
||
constants: {
|
||
_0: createSeriesPattern1(this, 'constant_0'),
|
||
_1: createSeriesPattern1(this, 'constant_1'),
|
||
_2: createSeriesPattern1(this, 'constant_2'),
|
||
_3: createSeriesPattern1(this, 'constant_3'),
|
||
_4: createSeriesPattern1(this, 'constant_4'),
|
||
_20: createSeriesPattern1(this, 'constant_20'),
|
||
_30: createSeriesPattern1(this, 'constant_30'),
|
||
_382: createSeriesPattern1(this, 'constant_38_2'),
|
||
_50: createSeriesPattern1(this, 'constant_50'),
|
||
_618: createSeriesPattern1(this, 'constant_61_8'),
|
||
_70: createSeriesPattern1(this, 'constant_70'),
|
||
_80: createSeriesPattern1(this, 'constant_80'),
|
||
_100: createSeriesPattern1(this, 'constant_100'),
|
||
_600: createSeriesPattern1(this, 'constant_600'),
|
||
minus1: createSeriesPattern1(this, 'constant_minus_1'),
|
||
minus2: createSeriesPattern1(this, 'constant_minus_2'),
|
||
minus3: createSeriesPattern1(this, 'constant_minus_3'),
|
||
minus4: createSeriesPattern1(this, 'constant_minus_4'),
|
||
},
|
||
indexes: {
|
||
addr: {
|
||
p2pk33: {
|
||
identity: createSeriesPattern26(this, 'p2pk33_addr_index'),
|
||
addr: createSeriesPattern26(this, 'p2pk33_addr'),
|
||
},
|
||
p2pk65: {
|
||
identity: createSeriesPattern27(this, 'p2pk65_addr_index'),
|
||
addr: createSeriesPattern27(this, 'p2pk65_addr'),
|
||
},
|
||
p2pkh: {
|
||
identity: createSeriesPattern28(this, 'p2pkh_addr_index'),
|
||
addr: createSeriesPattern28(this, 'p2pkh_addr'),
|
||
},
|
||
p2sh: {
|
||
identity: createSeriesPattern29(this, 'p2sh_addr_index'),
|
||
addr: createSeriesPattern29(this, 'p2sh_addr'),
|
||
},
|
||
p2tr: {
|
||
identity: createSeriesPattern30(this, 'p2tr_addr_index'),
|
||
addr: createSeriesPattern30(this, 'p2tr_addr'),
|
||
},
|
||
p2wpkh: {
|
||
identity: createSeriesPattern31(this, 'p2wpkh_addr_index'),
|
||
addr: createSeriesPattern31(this, 'p2wpkh_addr'),
|
||
},
|
||
p2wsh: {
|
||
identity: createSeriesPattern32(this, 'p2wsh_addr_index'),
|
||
addr: createSeriesPattern32(this, 'p2wsh_addr'),
|
||
},
|
||
p2a: {
|
||
identity: createSeriesPattern24(this, 'p2a_addr_index'),
|
||
addr: createSeriesPattern24(this, 'p2a_addr'),
|
||
},
|
||
p2ms: {
|
||
identity: createSeriesPattern25(this, 'p2ms_output_index'),
|
||
},
|
||
empty: {
|
||
identity: createSeriesPattern22(this, 'empty_output_index'),
|
||
},
|
||
unknown: {
|
||
identity: createSeriesPattern33(this, 'unknown_output_index'),
|
||
},
|
||
opReturn: {
|
||
identity: createSeriesPattern23(this, 'op_return_index'),
|
||
},
|
||
},
|
||
height: {
|
||
identity: createSeriesPattern18(this, 'height'),
|
||
minute10: createSeriesPattern18(this, 'minute10'),
|
||
minute30: createSeriesPattern18(this, 'minute30'),
|
||
hour1: createSeriesPattern18(this, 'hour1'),
|
||
hour4: createSeriesPattern18(this, 'hour4'),
|
||
hour12: createSeriesPattern18(this, 'hour12'),
|
||
day1: createSeriesPattern18(this, 'day1'),
|
||
day3: createSeriesPattern18(this, 'day3'),
|
||
epoch: createSeriesPattern18(this, 'epoch'),
|
||
halving: createSeriesPattern18(this, 'halving'),
|
||
week1: createSeriesPattern18(this, 'week1'),
|
||
month1: createSeriesPattern18(this, 'month1'),
|
||
month3: createSeriesPattern18(this, 'month3'),
|
||
month6: createSeriesPattern18(this, 'month6'),
|
||
year1: createSeriesPattern18(this, 'year1'),
|
||
year10: createSeriesPattern18(this, 'year10'),
|
||
txIndexCount: createSeriesPattern18(this, 'tx_index_count'),
|
||
},
|
||
epoch: {
|
||
identity: createSeriesPattern17(this, 'epoch'),
|
||
firstHeight: createSeriesPattern17(this, 'first_height'),
|
||
heightCount: createSeriesPattern17(this, 'height_count'),
|
||
},
|
||
halving: {
|
||
identity: createSeriesPattern16(this, 'halving'),
|
||
firstHeight: createSeriesPattern16(this, 'first_height'),
|
||
},
|
||
minute10: {
|
||
identity: createSeriesPattern3(this, 'minute10_index'),
|
||
firstHeight: createSeriesPattern3(this, 'first_height'),
|
||
},
|
||
minute30: {
|
||
identity: createSeriesPattern4(this, 'minute30_index'),
|
||
firstHeight: createSeriesPattern4(this, 'first_height'),
|
||
},
|
||
hour1: {
|
||
identity: createSeriesPattern5(this, 'hour1_index'),
|
||
firstHeight: createSeriesPattern5(this, 'first_height'),
|
||
},
|
||
hour4: {
|
||
identity: createSeriesPattern6(this, 'hour4_index'),
|
||
firstHeight: createSeriesPattern6(this, 'first_height'),
|
||
},
|
||
hour12: {
|
||
identity: createSeriesPattern7(this, 'hour12_index'),
|
||
firstHeight: createSeriesPattern7(this, 'first_height'),
|
||
},
|
||
day1: {
|
||
identity: createSeriesPattern8(this, 'day1_index'),
|
||
date: createSeriesPattern8(this, 'date'),
|
||
firstHeight: createSeriesPattern8(this, 'first_height'),
|
||
heightCount: createSeriesPattern8(this, 'height_count'),
|
||
},
|
||
day3: {
|
||
identity: createSeriesPattern9(this, 'day3_index'),
|
||
firstHeight: createSeriesPattern9(this, 'first_height'),
|
||
},
|
||
week1: {
|
||
identity: createSeriesPattern10(this, 'week1_index'),
|
||
date: createSeriesPattern10(this, 'date'),
|
||
firstHeight: createSeriesPattern10(this, 'first_height'),
|
||
},
|
||
month1: {
|
||
identity: createSeriesPattern11(this, 'month1_index'),
|
||
date: createSeriesPattern11(this, 'date'),
|
||
firstHeight: createSeriesPattern11(this, 'first_height'),
|
||
},
|
||
month3: {
|
||
identity: createSeriesPattern12(this, 'month3_index'),
|
||
date: createSeriesPattern12(this, 'date'),
|
||
firstHeight: createSeriesPattern12(this, 'first_height'),
|
||
},
|
||
month6: {
|
||
identity: createSeriesPattern13(this, 'month6_index'),
|
||
date: createSeriesPattern13(this, 'date'),
|
||
firstHeight: createSeriesPattern13(this, 'first_height'),
|
||
},
|
||
year1: {
|
||
identity: createSeriesPattern14(this, 'year1_index'),
|
||
date: createSeriesPattern14(this, 'date'),
|
||
firstHeight: createSeriesPattern14(this, 'first_height'),
|
||
},
|
||
year10: {
|
||
identity: createSeriesPattern15(this, 'year10_index'),
|
||
date: createSeriesPattern15(this, 'date'),
|
||
firstHeight: createSeriesPattern15(this, 'first_height'),
|
||
},
|
||
txIndex: {
|
||
identity: createSeriesPattern19(this, 'tx_index'),
|
||
inputCount: createSeriesPattern19(this, 'input_count'),
|
||
outputCount: createSeriesPattern19(this, 'output_count'),
|
||
},
|
||
txinIndex: {
|
||
identity: createSeriesPattern20(this, 'txin_index'),
|
||
},
|
||
txoutIndex: {
|
||
identity: createSeriesPattern21(this, 'txout_index'),
|
||
},
|
||
},
|
||
indicators: {
|
||
puellMultiple: createBpsRatioPattern2(this, 'puell_multiple'),
|
||
nvt: createBpsRatioPattern2(this, 'nvt'),
|
||
gini: createBpsPercentRatioPattern3(this, 'gini'),
|
||
rhodlRatio: createBpsRatioPattern2(this, 'rhodl_ratio'),
|
||
thermoCapMultiple: createBpsRatioPattern2(this, 'thermo_cap_multiple'),
|
||
coindaysDestroyedSupplyAdjusted: createSeriesPattern1(this, 'coindays_destroyed_supply_adjusted'),
|
||
coinyearsDestroyedSupplyAdjusted: createSeriesPattern1(this, 'coinyears_destroyed_supply_adjusted'),
|
||
dormancy: {
|
||
supplyAdjusted: createSeriesPattern1(this, 'dormancy_supply_adjusted'),
|
||
flow: createSeriesPattern1(this, 'dormancy_flow'),
|
||
},
|
||
stockToFlow: createSeriesPattern1(this, 'stock_to_flow'),
|
||
sellerExhaustion: createSeriesPattern1(this, 'seller_exhaustion'),
|
||
},
|
||
market: {
|
||
ath: {
|
||
high: createCentsSatsUsdPattern(this, 'price_ath'),
|
||
drawdown: createBpsPercentRatioPattern5(this, 'price_drawdown'),
|
||
daysSince: createSeriesPattern1(this, 'days_since_price_ath'),
|
||
yearsSince: createSeriesPattern1(this, 'years_since_price_ath'),
|
||
maxDaysBetween: createSeriesPattern1(this, 'max_days_between_price_ath'),
|
||
maxYearsBetween: createSeriesPattern1(this, 'max_years_between_price_ath'),
|
||
},
|
||
lookback: {
|
||
_24h: createCentsSatsUsdPattern(this, 'price_past_24h'),
|
||
_1w: createCentsSatsUsdPattern(this, 'price_past_1w'),
|
||
_1m: createCentsSatsUsdPattern(this, 'price_past_1m'),
|
||
_3m: createCentsSatsUsdPattern(this, 'price_past_3m'),
|
||
_6m: createCentsSatsUsdPattern(this, 'price_past_6m'),
|
||
_1y: createCentsSatsUsdPattern(this, 'price_past_1y'),
|
||
_2y: createCentsSatsUsdPattern(this, 'price_past_2y'),
|
||
_3y: createCentsSatsUsdPattern(this, 'price_past_3y'),
|
||
_4y: createCentsSatsUsdPattern(this, 'price_past_4y'),
|
||
_5y: createCentsSatsUsdPattern(this, 'price_past_5y'),
|
||
_6y: createCentsSatsUsdPattern(this, 'price_past_6y'),
|
||
_8y: createCentsSatsUsdPattern(this, 'price_past_8y'),
|
||
_10y: createCentsSatsUsdPattern(this, 'price_past_10y'),
|
||
},
|
||
returns: {
|
||
periods: {
|
||
_24h: createBpsPercentRatioPattern(this, 'price_return_24h'),
|
||
_1w: createBpsPercentRatioPattern(this, 'price_return_1w'),
|
||
_1m: createBpsPercentRatioPattern(this, 'price_return_1m'),
|
||
_3m: createBpsPercentRatioPattern(this, 'price_return_3m'),
|
||
_6m: createBpsPercentRatioPattern(this, 'price_return_6m'),
|
||
_1y: createBpsPercentRatioPattern(this, 'price_return_1y'),
|
||
_2y: createBpsPercentRatioPattern(this, 'price_return_2y'),
|
||
_3y: createBpsPercentRatioPattern(this, 'price_return_3y'),
|
||
_4y: createBpsPercentRatioPattern(this, 'price_return_4y'),
|
||
_5y: createBpsPercentRatioPattern(this, 'price_return_5y'),
|
||
_6y: createBpsPercentRatioPattern(this, 'price_return_6y'),
|
||
_8y: createBpsPercentRatioPattern(this, 'price_return_8y'),
|
||
_10y: createBpsPercentRatioPattern(this, 'price_return_10y'),
|
||
},
|
||
cagr: create_10y2y3y4y5y6y8yPattern(this, 'price_cagr'),
|
||
sd24h: {
|
||
_24h: {
|
||
sma: createSeriesPattern1(this, 'price_return_24h_sma_24h'),
|
||
sd: createSeriesPattern1(this, 'price_return_24h_sd_24h'),
|
||
},
|
||
_1w: {
|
||
sma: createSeriesPattern1(this, 'price_return_24h_sma_1w'),
|
||
sd: createSeriesPattern1(this, 'price_return_24h_sd_1w'),
|
||
},
|
||
_1m: {
|
||
sma: createSeriesPattern1(this, 'price_return_24h_sma_1m'),
|
||
sd: createSeriesPattern1(this, 'price_return_24h_sd_1m'),
|
||
},
|
||
_1y: {
|
||
sma: createSeriesPattern1(this, 'price_return_24h_sma_1y'),
|
||
sd: createSeriesPattern1(this, 'price_return_24h_sd_1y'),
|
||
},
|
||
},
|
||
},
|
||
volatility: create_1m1w1y24hPattern(this, 'price_volatility'),
|
||
range: {
|
||
min: create_1m1w1y2wPattern(this, 'price_min'),
|
||
max: create_1m1w1y2wPattern(this, 'price_max'),
|
||
trueRange: createSeriesPattern1(this, 'price_true_range'),
|
||
trueRangeSum2w: createSeriesPattern1(this, 'price_true_range_sum_2w'),
|
||
choppinessIndex2w: createBpsPercentRatioPattern3(this, 'price_choppiness_index_2w'),
|
||
},
|
||
movingAverage: {
|
||
sma: {
|
||
_1w: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_1w'),
|
||
_8d: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_8d'),
|
||
_13d: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_13d'),
|
||
_21d: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_21d'),
|
||
_1m: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_1m'),
|
||
_34d: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_34d'),
|
||
_55d: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_55d'),
|
||
_89d: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_89d'),
|
||
_111d: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_111d'),
|
||
_144d: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_144d'),
|
||
_200d: {
|
||
usd: createSeriesPattern1(this, 'price_sma_200d'),
|
||
cents: createSeriesPattern1(this, 'price_sma_200d_cents'),
|
||
sats: createSeriesPattern1(this, 'price_sma_200d_sats'),
|
||
bps: createSeriesPattern1(this, 'price_sma_200d_ratio_bps'),
|
||
ratio: createSeriesPattern1(this, 'price_sma_200d_ratio'),
|
||
x24: createCentsSatsUsdPattern(this, 'price_sma_200d_x2_4'),
|
||
x08: createCentsSatsUsdPattern(this, 'price_sma_200d_x0_8'),
|
||
},
|
||
_350d: {
|
||
usd: createSeriesPattern1(this, 'price_sma_350d'),
|
||
cents: createSeriesPattern1(this, 'price_sma_350d_cents'),
|
||
sats: createSeriesPattern1(this, 'price_sma_350d_sats'),
|
||
bps: createSeriesPattern1(this, 'price_sma_350d_ratio_bps'),
|
||
ratio: createSeriesPattern1(this, 'price_sma_350d_ratio'),
|
||
x2: createCentsSatsUsdPattern(this, 'price_sma_350d_x2'),
|
||
},
|
||
_1y: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_1y'),
|
||
_2y: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_2y'),
|
||
_200w: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_200w'),
|
||
_4y: createBpsCentsRatioSatsUsdPattern(this, 'price_sma_4y'),
|
||
},
|
||
ema: {
|
||
_1w: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_1w'),
|
||
_8d: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_8d'),
|
||
_12d: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_12d'),
|
||
_13d: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_13d'),
|
||
_21d: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_21d'),
|
||
_26d: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_26d'),
|
||
_1m: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_1m'),
|
||
_34d: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_34d'),
|
||
_55d: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_55d'),
|
||
_89d: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_89d'),
|
||
_144d: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_144d'),
|
||
_200d: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_200d'),
|
||
_1y: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_1y'),
|
||
_2y: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_2y'),
|
||
_200w: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_200w'),
|
||
_4y: createBpsCentsRatioSatsUsdPattern(this, 'price_ema_4y'),
|
||
},
|
||
},
|
||
dca: {
|
||
satsPerDay: createSeriesPattern18(this, 'dca_sats_per_day'),
|
||
period: {
|
||
stack: create_10y1m1w1y2y3m3y4y5y6m6y8yPattern3(this, 'dca_stack'),
|
||
costBasis: {
|
||
_1w: createCentsSatsUsdPattern(this, 'dca_cost_basis_1w'),
|
||
_1m: createCentsSatsUsdPattern(this, 'dca_cost_basis_1m'),
|
||
_3m: createCentsSatsUsdPattern(this, 'dca_cost_basis_3m'),
|
||
_6m: createCentsSatsUsdPattern(this, 'dca_cost_basis_6m'),
|
||
_1y: createCentsSatsUsdPattern(this, 'dca_cost_basis_1y'),
|
||
_2y: createCentsSatsUsdPattern(this, 'dca_cost_basis_2y'),
|
||
_3y: createCentsSatsUsdPattern(this, 'dca_cost_basis_3y'),
|
||
_4y: createCentsSatsUsdPattern(this, 'dca_cost_basis_4y'),
|
||
_5y: createCentsSatsUsdPattern(this, 'dca_cost_basis_5y'),
|
||
_6y: createCentsSatsUsdPattern(this, 'dca_cost_basis_6y'),
|
||
_8y: createCentsSatsUsdPattern(this, 'dca_cost_basis_8y'),
|
||
_10y: createCentsSatsUsdPattern(this, 'dca_cost_basis_10y'),
|
||
},
|
||
return: create_10y1m1w1y2y3m3y4y5y6m6y8yPattern2(this, 'dca_return'),
|
||
cagr: create_10y2y3y4y5y6y8yPattern(this, 'dca_cagr'),
|
||
lumpSumStack: create_10y1m1w1y2y3m3y4y5y6m6y8yPattern3(this, 'lump_sum_stack'),
|
||
lumpSumReturn: create_10y1m1w1y2y3m3y4y5y6m6y8yPattern2(this, 'lump_sum_return'),
|
||
},
|
||
class: {
|
||
stack: {
|
||
from2015: createBtcCentsSatsUsdPattern2(this, 'dca_stack_from_2015'),
|
||
from2016: createBtcCentsSatsUsdPattern2(this, 'dca_stack_from_2016'),
|
||
from2017: createBtcCentsSatsUsdPattern2(this, 'dca_stack_from_2017'),
|
||
from2018: createBtcCentsSatsUsdPattern2(this, 'dca_stack_from_2018'),
|
||
from2019: createBtcCentsSatsUsdPattern2(this, 'dca_stack_from_2019'),
|
||
from2020: createBtcCentsSatsUsdPattern2(this, 'dca_stack_from_2020'),
|
||
from2021: createBtcCentsSatsUsdPattern2(this, 'dca_stack_from_2021'),
|
||
from2022: createBtcCentsSatsUsdPattern2(this, 'dca_stack_from_2022'),
|
||
from2023: createBtcCentsSatsUsdPattern2(this, 'dca_stack_from_2023'),
|
||
from2024: createBtcCentsSatsUsdPattern2(this, 'dca_stack_from_2024'),
|
||
from2025: createBtcCentsSatsUsdPattern2(this, 'dca_stack_from_2025'),
|
||
from2026: createBtcCentsSatsUsdPattern2(this, 'dca_stack_from_2026'),
|
||
},
|
||
costBasis: {
|
||
from2015: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2015'),
|
||
from2016: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2016'),
|
||
from2017: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2017'),
|
||
from2018: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2018'),
|
||
from2019: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2019'),
|
||
from2020: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2020'),
|
||
from2021: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2021'),
|
||
from2022: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2022'),
|
||
from2023: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2023'),
|
||
from2024: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2024'),
|
||
from2025: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2025'),
|
||
from2026: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2026'),
|
||
},
|
||
return: {
|
||
from2015: createBpsPercentRatioPattern(this, 'dca_return_from_2015'),
|
||
from2016: createBpsPercentRatioPattern(this, 'dca_return_from_2016'),
|
||
from2017: createBpsPercentRatioPattern(this, 'dca_return_from_2017'),
|
||
from2018: createBpsPercentRatioPattern(this, 'dca_return_from_2018'),
|
||
from2019: createBpsPercentRatioPattern(this, 'dca_return_from_2019'),
|
||
from2020: createBpsPercentRatioPattern(this, 'dca_return_from_2020'),
|
||
from2021: createBpsPercentRatioPattern(this, 'dca_return_from_2021'),
|
||
from2022: createBpsPercentRatioPattern(this, 'dca_return_from_2022'),
|
||
from2023: createBpsPercentRatioPattern(this, 'dca_return_from_2023'),
|
||
from2024: createBpsPercentRatioPattern(this, 'dca_return_from_2024'),
|
||
from2025: createBpsPercentRatioPattern(this, 'dca_return_from_2025'),
|
||
from2026: createBpsPercentRatioPattern(this, 'dca_return_from_2026'),
|
||
},
|
||
},
|
||
},
|
||
technical: {
|
||
rsi: {
|
||
_24h: createAverageGainsLossesRsiStochPattern(this, 'rsi', '24h'),
|
||
_1w: createAverageGainsLossesRsiStochPattern(this, 'rsi', '1w'),
|
||
_1m: createAverageGainsLossesRsiStochPattern(this, 'rsi', '1m'),
|
||
},
|
||
stochK: createBpsPercentRatioPattern3(this, 'stoch_k'),
|
||
stochD: createBpsPercentRatioPattern3(this, 'stoch_d'),
|
||
piCycle: createBpsRatioPattern2(this, 'pi_cycle'),
|
||
macd: {
|
||
_24h: {
|
||
emaFast: createSeriesPattern1(this, 'macd_ema_fast_24h'),
|
||
emaSlow: createSeriesPattern1(this, 'macd_ema_slow_24h'),
|
||
line: createSeriesPattern1(this, 'macd_line_24h'),
|
||
signal: createSeriesPattern1(this, 'macd_signal_24h'),
|
||
histogram: createSeriesPattern1(this, 'macd_histogram_24h'),
|
||
},
|
||
_1w: {
|
||
emaFast: createSeriesPattern1(this, 'macd_ema_fast_1w'),
|
||
emaSlow: createSeriesPattern1(this, 'macd_ema_slow_1w'),
|
||
line: createSeriesPattern1(this, 'macd_line_1w'),
|
||
signal: createSeriesPattern1(this, 'macd_signal_1w'),
|
||
histogram: createSeriesPattern1(this, 'macd_histogram_1w'),
|
||
},
|
||
_1m: {
|
||
emaFast: createSeriesPattern1(this, 'macd_ema_fast_1m'),
|
||
emaSlow: createSeriesPattern1(this, 'macd_ema_slow_1m'),
|
||
line: createSeriesPattern1(this, 'macd_line_1m'),
|
||
signal: createSeriesPattern1(this, 'macd_signal_1m'),
|
||
histogram: createSeriesPattern1(this, 'macd_histogram_1m'),
|
||
},
|
||
},
|
||
},
|
||
},
|
||
pools: {
|
||
pool: createSeriesPattern18(this, 'pool'),
|
||
major: {
|
||
unknown: createBlocksDominanceRewardsPattern(this, 'unknown'),
|
||
luxor: createBlocksDominanceRewardsPattern(this, 'luxor'),
|
||
btccom: createBlocksDominanceRewardsPattern(this, 'btccom'),
|
||
btctop: createBlocksDominanceRewardsPattern(this, 'btctop'),
|
||
btcguild: createBlocksDominanceRewardsPattern(this, 'btcguild'),
|
||
eligius: createBlocksDominanceRewardsPattern(this, 'eligius'),
|
||
f2pool: createBlocksDominanceRewardsPattern(this, 'f2pool'),
|
||
braiinspool: createBlocksDominanceRewardsPattern(this, 'braiinspool'),
|
||
antpool: createBlocksDominanceRewardsPattern(this, 'antpool'),
|
||
btcc: createBlocksDominanceRewardsPattern(this, 'btcc'),
|
||
bwpool: createBlocksDominanceRewardsPattern(this, 'bwpool'),
|
||
bitfury: createBlocksDominanceRewardsPattern(this, 'bitfury'),
|
||
viabtc: createBlocksDominanceRewardsPattern(this, 'viabtc'),
|
||
poolin: createBlocksDominanceRewardsPattern(this, 'poolin'),
|
||
spiderpool: createBlocksDominanceRewardsPattern(this, 'spiderpool'),
|
||
binancepool: createBlocksDominanceRewardsPattern(this, 'binancepool'),
|
||
foundryusa: createBlocksDominanceRewardsPattern(this, 'foundryusa'),
|
||
sbicrypto: createBlocksDominanceRewardsPattern(this, 'sbicrypto'),
|
||
marapool: createBlocksDominanceRewardsPattern(this, 'marapool'),
|
||
secpool: createBlocksDominanceRewardsPattern(this, 'secpool'),
|
||
ocean: createBlocksDominanceRewardsPattern(this, 'ocean'),
|
||
whitepool: createBlocksDominanceRewardsPattern(this, 'whitepool'),
|
||
},
|
||
minor: {
|
||
blockfills: createBlocksDominancePattern(this, 'blockfills'),
|
||
ultimuspool: createBlocksDominancePattern(this, 'ultimuspool'),
|
||
terrapool: createBlocksDominancePattern(this, 'terrapool'),
|
||
onethash: createBlocksDominancePattern(this, 'onethash'),
|
||
bitfarms: createBlocksDominancePattern(this, 'bitfarms'),
|
||
huobipool: createBlocksDominancePattern(this, 'huobipool'),
|
||
wayicn: createBlocksDominancePattern(this, 'wayicn'),
|
||
canoepool: createBlocksDominancePattern(this, 'canoepool'),
|
||
bitcoincom: createBlocksDominancePattern(this, 'bitcoincom'),
|
||
pool175btc: createBlocksDominancePattern(this, 'pool175btc'),
|
||
gbminers: createBlocksDominancePattern(this, 'gbminers'),
|
||
axbt: createBlocksDominancePattern(this, 'axbt'),
|
||
asicminer: createBlocksDominancePattern(this, 'asicminer'),
|
||
bitminter: createBlocksDominancePattern(this, 'bitminter'),
|
||
bitcoinrussia: createBlocksDominancePattern(this, 'bitcoinrussia'),
|
||
btcserv: createBlocksDominancePattern(this, 'btcserv'),
|
||
simplecoinus: createBlocksDominancePattern(this, 'simplecoinus'),
|
||
ozcoin: createBlocksDominancePattern(this, 'ozcoin'),
|
||
eclipsemc: createBlocksDominancePattern(this, 'eclipsemc'),
|
||
maxbtc: createBlocksDominancePattern(this, 'maxbtc'),
|
||
triplemining: createBlocksDominancePattern(this, 'triplemining'),
|
||
coinlab: createBlocksDominancePattern(this, 'coinlab'),
|
||
pool50btc: createBlocksDominancePattern(this, 'pool50btc'),
|
||
ghashio: createBlocksDominancePattern(this, 'ghashio'),
|
||
stminingcorp: createBlocksDominancePattern(this, 'stminingcorp'),
|
||
bitparking: createBlocksDominancePattern(this, 'bitparking'),
|
||
mmpool: createBlocksDominancePattern(this, 'mmpool'),
|
||
polmine: createBlocksDominancePattern(this, 'polmine'),
|
||
kncminer: createBlocksDominancePattern(this, 'kncminer'),
|
||
bitalo: createBlocksDominancePattern(this, 'bitalo'),
|
||
hhtt: createBlocksDominancePattern(this, 'hhtt'),
|
||
megabigpower: createBlocksDominancePattern(this, 'megabigpower'),
|
||
mtred: createBlocksDominancePattern(this, 'mtred'),
|
||
nmcbit: createBlocksDominancePattern(this, 'nmcbit'),
|
||
yourbtcnet: createBlocksDominancePattern(this, 'yourbtcnet'),
|
||
givemecoins: createBlocksDominancePattern(this, 'givemecoins'),
|
||
multicoinco: createBlocksDominancePattern(this, 'multicoinco'),
|
||
bcpoolio: createBlocksDominancePattern(this, 'bcpoolio'),
|
||
cointerra: createBlocksDominancePattern(this, 'cointerra'),
|
||
kanopool: createBlocksDominancePattern(this, 'kanopool'),
|
||
solock: createBlocksDominancePattern(this, 'solock'),
|
||
ckpool: createBlocksDominancePattern(this, 'ckpool'),
|
||
nicehash: createBlocksDominancePattern(this, 'nicehash'),
|
||
bitclub: createBlocksDominancePattern(this, 'bitclub'),
|
||
bitcoinaffiliatenetwork: createBlocksDominancePattern(this, 'bitcoinaffiliatenetwork'),
|
||
exxbw: createBlocksDominancePattern(this, 'exxbw'),
|
||
bitsolo: createBlocksDominancePattern(this, 'bitsolo'),
|
||
twentyoneinc: createBlocksDominancePattern(this, 'twentyoneinc'),
|
||
digitalbtc: createBlocksDominancePattern(this, 'digitalbtc'),
|
||
eightbaochi: createBlocksDominancePattern(this, 'eightbaochi'),
|
||
mybtccoinpool: createBlocksDominancePattern(this, 'mybtccoinpool'),
|
||
tbdice: createBlocksDominancePattern(this, 'tbdice'),
|
||
hashpool: createBlocksDominancePattern(this, 'hashpool'),
|
||
nexious: createBlocksDominancePattern(this, 'nexious'),
|
||
bravomining: createBlocksDominancePattern(this, 'bravomining'),
|
||
hotpool: createBlocksDominancePattern(this, 'hotpool'),
|
||
okexpool: createBlocksDominancePattern(this, 'okexpool'),
|
||
bcmonster: createBlocksDominancePattern(this, 'bcmonster'),
|
||
onehash: createBlocksDominancePattern(this, 'onehash'),
|
||
bixin: createBlocksDominancePattern(this, 'bixin'),
|
||
tatmaspool: createBlocksDominancePattern(this, 'tatmaspool'),
|
||
connectbtc: createBlocksDominancePattern(this, 'connectbtc'),
|
||
batpool: createBlocksDominancePattern(this, 'batpool'),
|
||
waterhole: createBlocksDominancePattern(this, 'waterhole'),
|
||
dcexploration: createBlocksDominancePattern(this, 'dcexploration'),
|
||
dcex: createBlocksDominancePattern(this, 'dcex'),
|
||
btpool: createBlocksDominancePattern(this, 'btpool'),
|
||
fiftyeightcoin: createBlocksDominancePattern(this, 'fiftyeightcoin'),
|
||
bitcoinindia: createBlocksDominancePattern(this, 'bitcoinindia'),
|
||
shawnp0wers: createBlocksDominancePattern(this, 'shawnp0wers'),
|
||
phashio: createBlocksDominancePattern(this, 'phashio'),
|
||
rigpool: createBlocksDominancePattern(this, 'rigpool'),
|
||
haozhuzhu: createBlocksDominancePattern(this, 'haozhuzhu'),
|
||
sevenpool: createBlocksDominancePattern(this, 'sevenpool'),
|
||
miningkings: createBlocksDominancePattern(this, 'miningkings'),
|
||
hashbx: createBlocksDominancePattern(this, 'hashbx'),
|
||
dpool: createBlocksDominancePattern(this, 'dpool'),
|
||
rawpool: createBlocksDominancePattern(this, 'rawpool'),
|
||
haominer: createBlocksDominancePattern(this, 'haominer'),
|
||
helix: createBlocksDominancePattern(this, 'helix'),
|
||
bitcoinukraine: createBlocksDominancePattern(this, 'bitcoinukraine'),
|
||
secretsuperstar: createBlocksDominancePattern(this, 'secretsuperstar'),
|
||
tigerpoolnet: createBlocksDominancePattern(this, 'tigerpoolnet'),
|
||
sigmapoolcom: createBlocksDominancePattern(this, 'sigmapoolcom'),
|
||
okpooltop: createBlocksDominancePattern(this, 'okpooltop'),
|
||
hummerpool: createBlocksDominancePattern(this, 'hummerpool'),
|
||
tangpool: createBlocksDominancePattern(this, 'tangpool'),
|
||
bytepool: createBlocksDominancePattern(this, 'bytepool'),
|
||
novablock: createBlocksDominancePattern(this, 'novablock'),
|
||
miningcity: createBlocksDominancePattern(this, 'miningcity'),
|
||
minerium: createBlocksDominancePattern(this, 'minerium'),
|
||
lubiancom: createBlocksDominancePattern(this, 'lubiancom'),
|
||
okkong: createBlocksDominancePattern(this, 'okkong'),
|
||
aaopool: createBlocksDominancePattern(this, 'aaopool'),
|
||
emcdpool: createBlocksDominancePattern(this, 'emcdpool'),
|
||
arkpool: createBlocksDominancePattern(this, 'arkpool'),
|
||
purebtccom: createBlocksDominancePattern(this, 'purebtccom'),
|
||
kucoinpool: createBlocksDominancePattern(this, 'kucoinpool'),
|
||
entrustcharitypool: createBlocksDominancePattern(this, 'entrustcharitypool'),
|
||
okminer: createBlocksDominancePattern(this, 'okminer'),
|
||
titan: createBlocksDominancePattern(this, 'titan'),
|
||
pegapool: createBlocksDominancePattern(this, 'pegapool'),
|
||
btcnuggets: createBlocksDominancePattern(this, 'btcnuggets'),
|
||
cloudhashing: createBlocksDominancePattern(this, 'cloudhashing'),
|
||
digitalxmintsy: createBlocksDominancePattern(this, 'digitalxmintsy'),
|
||
telco214: createBlocksDominancePattern(this, 'telco214'),
|
||
btcpoolparty: createBlocksDominancePattern(this, 'btcpoolparty'),
|
||
multipool: createBlocksDominancePattern(this, 'multipool'),
|
||
transactioncoinmining: createBlocksDominancePattern(this, 'transactioncoinmining'),
|
||
btcdig: createBlocksDominancePattern(this, 'btcdig'),
|
||
trickysbtcpool: createBlocksDominancePattern(this, 'trickysbtcpool'),
|
||
btcmp: createBlocksDominancePattern(this, 'btcmp'),
|
||
eobot: createBlocksDominancePattern(this, 'eobot'),
|
||
unomp: createBlocksDominancePattern(this, 'unomp'),
|
||
patels: createBlocksDominancePattern(this, 'patels'),
|
||
gogreenlight: createBlocksDominancePattern(this, 'gogreenlight'),
|
||
bitcoinindiapool: createBlocksDominancePattern(this, 'bitcoinindiapool'),
|
||
ekanembtc: createBlocksDominancePattern(this, 'ekanembtc'),
|
||
canoe: createBlocksDominancePattern(this, 'canoe'),
|
||
tiger: createBlocksDominancePattern(this, 'tiger'),
|
||
onem1x: createBlocksDominancePattern(this, 'onem1x'),
|
||
zulupool: createBlocksDominancePattern(this, 'zulupool'),
|
||
wiz: createBlocksDominancePattern(this, 'wiz'),
|
||
wk057: createBlocksDominancePattern(this, 'wk057'),
|
||
futurebitapollosolo: createBlocksDominancePattern(this, 'futurebitapollosolo'),
|
||
carbonnegative: createBlocksDominancePattern(this, 'carbonnegative'),
|
||
portlandhodl: createBlocksDominancePattern(this, 'portlandhodl'),
|
||
phoenix: createBlocksDominancePattern(this, 'phoenix'),
|
||
neopool: createBlocksDominancePattern(this, 'neopool'),
|
||
maxipool: createBlocksDominancePattern(this, 'maxipool'),
|
||
bitfufupool: createBlocksDominancePattern(this, 'bitfufupool'),
|
||
gdpool: createBlocksDominancePattern(this, 'gdpool'),
|
||
miningdutch: createBlocksDominancePattern(this, 'miningdutch'),
|
||
publicpool: createBlocksDominancePattern(this, 'publicpool'),
|
||
miningsquared: createBlocksDominancePattern(this, 'miningsquared'),
|
||
innopolistech: createBlocksDominancePattern(this, 'innopolistech'),
|
||
btclab: createBlocksDominancePattern(this, 'btclab'),
|
||
parasite: createBlocksDominancePattern(this, 'parasite'),
|
||
redrockpool: createBlocksDominancePattern(this, 'redrockpool'),
|
||
est3lar: createBlocksDominancePattern(this, 'est3lar'),
|
||
},
|
||
},
|
||
prices: {
|
||
split: {
|
||
open: createCentsSatsUsdPattern3(this, 'price_open'),
|
||
high: createCentsSatsUsdPattern3(this, 'price_high'),
|
||
low: createCentsSatsUsdPattern3(this, 'price_low'),
|
||
close: createCentsSatsUsdPattern3(this, 'price_close'),
|
||
},
|
||
ohlc: {
|
||
usd: createSeriesPattern2(this, 'price_ohlc'),
|
||
cents: createSeriesPattern2(this, 'price_ohlc_cents'),
|
||
sats: createSeriesPattern2(this, 'price_ohlc_sats'),
|
||
},
|
||
spot: {
|
||
usd: createSeriesPattern1(this, 'price'),
|
||
cents: createSeriesPattern1(this, 'price_cents'),
|
||
sats: createSeriesPattern1(this, 'price_sats'),
|
||
},
|
||
},
|
||
supply: {
|
||
state: createSeriesPattern18(this, 'supply_state'),
|
||
circulating: createBtcCentsSatsUsdPattern2(this, 'circulating_supply'),
|
||
burned: createAverageBaseCumulativeSumPattern3(this, 'unspendable_supply'),
|
||
inflationRate: createBpsPercentRatioPattern(this, 'inflation_rate'),
|
||
velocity: {
|
||
native: createSeriesPattern1(this, 'velocity'),
|
||
fiat: createSeriesPattern1(this, 'velocity_fiat'),
|
||
},
|
||
marketCap: createCentsDeltaUsdPattern(this, 'market_cap'),
|
||
marketMinusRealizedCapGrowthRate: create_1m1w1y24hPattern(this, 'market_minus_realized_cap_growth_rate'),
|
||
hodledOrLost: createBtcCentsSatsUsdPattern2(this, 'hodled_or_lost_supply'),
|
||
},
|
||
cohorts: {
|
||
utxo: {
|
||
all: {
|
||
supply: {
|
||
total: createBtcCentsSatsUsdPattern2(this, 'supply'),
|
||
half: createBtcCentsSatsUsdPattern2(this, 'supply_half'),
|
||
delta: createAbsoluteRatePattern(this, 'supply_delta'),
|
||
inProfit: createBtcCentsSatsToUsdPattern2(this, 'supply_in_profit'),
|
||
inLoss: createBtcCentsSatsToUsdPattern2(this, 'supply_in_loss'),
|
||
},
|
||
outputs: createUnspentPattern(this, 'utxo_count'),
|
||
activity: {
|
||
transferVolume: createAverageBaseCumulativeInSumPattern(this, 'transfer_volume'),
|
||
coindaysDestroyed: createAverageBaseCumulativeSumPattern(this, 'coindays_destroyed'),
|
||
coinyearsDestroyed: createSeriesPattern1(this, 'coinyears_destroyed'),
|
||
dormancy: create_1m1w1y24hPattern(this, 'dormancy'),
|
||
},
|
||
realized: {
|
||
cap: createCentsDeltaToUsdPattern(this, 'realized_cap'),
|
||
profit: createBaseCumulativeSumToPattern(this, 'realized_profit'),
|
||
loss: {
|
||
base: createCentsUsdPattern2(this, 'realized_loss'),
|
||
cumulative: createCentsUsdPattern2(this, 'realized_loss_cumulative'),
|
||
sum: create_1m1w1y24hPattern6(this, 'realized_loss_sum'),
|
||
negative: createBaseSumPattern(this, 'neg_realized_loss'),
|
||
toRcap: createBpsPercentRatioPattern4(this, 'realized_loss_to_rcap'),
|
||
},
|
||
price: {
|
||
usd: createSeriesPattern1(this, 'realized_price'),
|
||
cents: createSeriesPattern1(this, 'realized_price_cents'),
|
||
sats: createSeriesPattern1(this, 'realized_price_sats'),
|
||
bps: createSeriesPattern1(this, 'realized_price_ratio_bps'),
|
||
ratio: createSeriesPattern1(this, 'realized_price_ratio'),
|
||
percentiles: createPct1Pct2Pct5Pct95Pct98Pct99Pattern(this, 'realized_price'),
|
||
sma: create_1m1w1y2y4yAllPattern(this, 'realized_price_ratio_sma'),
|
||
stdDev: {
|
||
all: {
|
||
sd: createSeriesPattern1(this, 'realized_price_ratio_sd'),
|
||
zscore: createSeriesPattern1(this, 'realized_price_ratio_zscore'),
|
||
_0sd: createCentsSatsUsdPattern(this, 'realized_price_0sd'),
|
||
p05sd: createPriceRatioPattern(this, 'realized_price', 'p0_5sd'),
|
||
p1sd: createPriceRatioPattern(this, 'realized_price', 'p1sd'),
|
||
p15sd: createPriceRatioPattern(this, 'realized_price', 'p1_5sd'),
|
||
p2sd: createPriceRatioPattern(this, 'realized_price', 'p2sd'),
|
||
p25sd: createPriceRatioPattern(this, 'realized_price', 'p2_5sd'),
|
||
p3sd: createPriceRatioPattern(this, 'realized_price', 'p3sd'),
|
||
m05sd: createPriceRatioPattern(this, 'realized_price', 'm0_5sd'),
|
||
m1sd: createPriceRatioPattern(this, 'realized_price', 'm1sd'),
|
||
m15sd: createPriceRatioPattern(this, 'realized_price', 'm1_5sd'),
|
||
m2sd: createPriceRatioPattern(this, 'realized_price', 'm2sd'),
|
||
m25sd: createPriceRatioPattern(this, 'realized_price', 'm2_5sd'),
|
||
m3sd: createPriceRatioPattern(this, 'realized_price', 'm3sd'),
|
||
},
|
||
_4y: {
|
||
sd: createSeriesPattern1(this, 'realized_price_ratio_sd_4y'),
|
||
zscore: createSeriesPattern1(this, 'realized_price_ratio_zscore_4y'),
|
||
_0sd: createCentsSatsUsdPattern(this, 'realized_price_0sd_4y'),
|
||
p05sd: createPriceRatioPattern(this, 'realized_price', 'p0_5sd_4y'),
|
||
p1sd: createPriceRatioPattern(this, 'realized_price', 'p1sd_4y'),
|
||
p15sd: createPriceRatioPattern(this, 'realized_price', 'p1_5sd_4y'),
|
||
p2sd: createPriceRatioPattern(this, 'realized_price', 'p2sd_4y'),
|
||
p25sd: createPriceRatioPattern(this, 'realized_price', 'p2_5sd_4y'),
|
||
p3sd: createPriceRatioPattern(this, 'realized_price', 'p3sd_4y'),
|
||
m05sd: createPriceRatioPattern(this, 'realized_price', 'm0_5sd_4y'),
|
||
m1sd: createPriceRatioPattern(this, 'realized_price', 'm1sd_4y'),
|
||
m15sd: createPriceRatioPattern(this, 'realized_price', 'm1_5sd_4y'),
|
||
m2sd: createPriceRatioPattern(this, 'realized_price', 'm2sd_4y'),
|
||
m25sd: createPriceRatioPattern(this, 'realized_price', 'm2_5sd_4y'),
|
||
m3sd: createPriceRatioPattern(this, 'realized_price', 'm3sd_4y'),
|
||
},
|
||
_2y: {
|
||
sd: createSeriesPattern1(this, 'realized_price_ratio_sd_2y'),
|
||
zscore: createSeriesPattern1(this, 'realized_price_ratio_zscore_2y'),
|
||
_0sd: createCentsSatsUsdPattern(this, 'realized_price_0sd_2y'),
|
||
p05sd: createPriceRatioPattern(this, 'realized_price', 'p0_5sd_2y'),
|
||
p1sd: createPriceRatioPattern(this, 'realized_price', 'p1sd_2y'),
|
||
p15sd: createPriceRatioPattern(this, 'realized_price', 'p1_5sd_2y'),
|
||
p2sd: createPriceRatioPattern(this, 'realized_price', 'p2sd_2y'),
|
||
p25sd: createPriceRatioPattern(this, 'realized_price', 'p2_5sd_2y'),
|
||
p3sd: createPriceRatioPattern(this, 'realized_price', 'p3sd_2y'),
|
||
m05sd: createPriceRatioPattern(this, 'realized_price', 'm0_5sd_2y'),
|
||
m1sd: createPriceRatioPattern(this, 'realized_price', 'm1sd_2y'),
|
||
m15sd: createPriceRatioPattern(this, 'realized_price', 'm1_5sd_2y'),
|
||
m2sd: createPriceRatioPattern(this, 'realized_price', 'm2sd_2y'),
|
||
m25sd: createPriceRatioPattern(this, 'realized_price', 'm2_5sd_2y'),
|
||
m3sd: createPriceRatioPattern(this, 'realized_price', 'm3sd_2y'),
|
||
},
|
||
_1y: {
|
||
sd: createSeriesPattern1(this, 'realized_price_ratio_sd_1y'),
|
||
zscore: createSeriesPattern1(this, 'realized_price_ratio_zscore_1y'),
|
||
_0sd: createCentsSatsUsdPattern(this, 'realized_price_0sd_1y'),
|
||
p05sd: createPriceRatioPattern(this, 'realized_price', 'p0_5sd_1y'),
|
||
p1sd: createPriceRatioPattern(this, 'realized_price', 'p1sd_1y'),
|
||
p15sd: createPriceRatioPattern(this, 'realized_price', 'p1_5sd_1y'),
|
||
p2sd: createPriceRatioPattern(this, 'realized_price', 'p2sd_1y'),
|
||
p25sd: createPriceRatioPattern(this, 'realized_price', 'p2_5sd_1y'),
|
||
p3sd: createPriceRatioPattern(this, 'realized_price', 'p3sd_1y'),
|
||
m05sd: createPriceRatioPattern(this, 'realized_price', 'm0_5sd_1y'),
|
||
m1sd: createPriceRatioPattern(this, 'realized_price', 'm1sd_1y'),
|
||
m15sd: createPriceRatioPattern(this, 'realized_price', 'm1_5sd_1y'),
|
||
m2sd: createPriceRatioPattern(this, 'realized_price', 'm2sd_1y'),
|
||
m25sd: createPriceRatioPattern(this, 'realized_price', 'm2_5sd_1y'),
|
||
m3sd: createPriceRatioPattern(this, 'realized_price', 'm3sd_1y'),
|
||
},
|
||
},
|
||
},
|
||
mvrv: createSeriesPattern1(this, 'mvrv'),
|
||
netPnl: createBaseChangeCumulativeDeltaSumToPattern(this, 'net'),
|
||
sopr: {
|
||
valueDestroyed: createAverageBaseCumulativeSumPattern(this, 'value_destroyed'),
|
||
ratio: create_1m1w1y24hPattern(this, 'sopr'),
|
||
adjusted: {
|
||
ratio: create_1m1w1y24hPattern(this, 'asopr'),
|
||
transferVolume: createAverageBaseCumulativeSumPattern(this, 'adj_value_created'),
|
||
valueDestroyed: createAverageBaseCumulativeSumPattern(this, 'adj_value_destroyed'),
|
||
},
|
||
},
|
||
grossPnl: createBaseCumulativeSumPattern(this, 'realized_gross_pnl'),
|
||
sellSideRiskRatio: create_1m1w1y24hPattern7(this, 'sell_side_risk_ratio'),
|
||
peakRegret: createBaseCumulativeSumToPattern(this, 'realized_peak_regret'),
|
||
investor: createPricePattern(this, 'investor_price'),
|
||
profitToLossRatio: create_1m1w1y24hPattern(this, 'realized_profit_to_loss_ratio'),
|
||
},
|
||
costBasis: {
|
||
inProfit: createPerPattern(this, 'cost_basis_in_profit_per'),
|
||
inLoss: createPerPattern(this, 'cost_basis_in_loss_per'),
|
||
min: createCentsSatsUsdPattern(this, 'cost_basis_min'),
|
||
max: createCentsSatsUsdPattern(this, 'cost_basis_max'),
|
||
perCoin: createPct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern(this, 'cost_basis_per_coin'),
|
||
perDollar: createPct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern(this, 'cost_basis_per_dollar'),
|
||
supplyDensity: createBpsPercentRatioPattern3(this, 'supply_density'),
|
||
},
|
||
unrealized: {
|
||
nupl: createBpsRatioPattern(this, 'nupl'),
|
||
profit: {
|
||
usd: createSeriesPattern1(this, 'unrealized_profit'),
|
||
cents: createSeriesPattern1(this, 'unrealized_profit_cents'),
|
||
toMcap: createBpsPercentRatioPattern3(this, 'unrealized_profit_to_mcap'),
|
||
toOwnGrossPnl: createBpsPercentRatioPattern3(this, 'unrealized_profit_to_own_gross_pnl'),
|
||
},
|
||
loss: {
|
||
usd: createSeriesPattern1(this, 'unrealized_loss'),
|
||
cents: createSeriesPattern1(this, 'unrealized_loss_cents'),
|
||
negative: createSeriesPattern1(this, 'neg_unrealized_loss'),
|
||
toMcap: createBpsPercentRatioPattern3(this, 'unrealized_loss_to_mcap'),
|
||
toOwnGrossPnl: createBpsPercentRatioPattern3(this, 'unrealized_loss_to_own_gross_pnl'),
|
||
},
|
||
netPnl: {
|
||
usd: createSeriesPattern1(this, 'net_unrealized_pnl'),
|
||
cents: createSeriesPattern1(this, 'net_unrealized_pnl_cents'),
|
||
toOwnGrossPnl: createBpsPercentRatioPattern(this, 'net_unrealized_pnl_to_own_gross_pnl'),
|
||
},
|
||
grossPnl: createCentsUsdPattern2(this, 'unrealized_gross_pnl'),
|
||
investedCapital: createInPattern(this, 'invested_capital_in'),
|
||
investorCapInProfitRaw: createSeriesPattern18(this, 'investor_cap_in_profit_raw'),
|
||
investorCapInLossRaw: createSeriesPattern18(this, 'investor_cap_in_loss_raw'),
|
||
sentiment: {
|
||
painIndex: createCentsUsdPattern2(this, 'pain_index'),
|
||
greedIndex: createCentsUsdPattern2(this, 'greed_index'),
|
||
net: createCentsUsdPattern(this, 'net_sentiment'),
|
||
},
|
||
},
|
||
},
|
||
sth: {
|
||
supply: createDeltaHalfInToTotalPattern2(this, 'sth_supply'),
|
||
outputs: createUnspentPattern(this, 'sth_utxo_count'),
|
||
activity: {
|
||
transferVolume: createAverageBaseCumulativeInSumPattern(this, 'sth_transfer_volume'),
|
||
coindaysDestroyed: createAverageBaseCumulativeSumPattern(this, 'sth_coindays_destroyed'),
|
||
coinyearsDestroyed: createSeriesPattern1(this, 'sth_coinyears_destroyed'),
|
||
dormancy: create_1m1w1y24hPattern(this, 'sth_dormancy'),
|
||
},
|
||
realized: {
|
||
cap: createCentsDeltaToUsdPattern(this, 'sth_realized_cap'),
|
||
profit: createBaseCumulativeSumToPattern(this, 'sth_realized_profit'),
|
||
loss: {
|
||
base: createCentsUsdPattern2(this, 'sth_realized_loss'),
|
||
cumulative: createCentsUsdPattern2(this, 'sth_realized_loss_cumulative'),
|
||
sum: create_1m1w1y24hPattern6(this, 'sth_realized_loss_sum'),
|
||
negative: createBaseSumPattern(this, 'sth_neg_realized_loss'),
|
||
toRcap: createBpsPercentRatioPattern4(this, 'sth_realized_loss_to_rcap'),
|
||
},
|
||
price: {
|
||
usd: createSeriesPattern1(this, 'sth_realized_price'),
|
||
cents: createSeriesPattern1(this, 'sth_realized_price_cents'),
|
||
sats: createSeriesPattern1(this, 'sth_realized_price_sats'),
|
||
bps: createSeriesPattern1(this, 'sth_realized_price_ratio_bps'),
|
||
ratio: createSeriesPattern1(this, 'sth_realized_price_ratio'),
|
||
percentiles: createPct1Pct2Pct5Pct95Pct98Pct99Pattern(this, 'sth_realized_price'),
|
||
sma: create_1m1w1y2y4yAllPattern(this, 'sth_realized_price_ratio_sma'),
|
||
stdDev: {
|
||
all: {
|
||
sd: createSeriesPattern1(this, 'sth_realized_price_ratio_sd'),
|
||
zscore: createSeriesPattern1(this, 'sth_realized_price_ratio_zscore'),
|
||
_0sd: createCentsSatsUsdPattern(this, 'sth_realized_price_0sd'),
|
||
p05sd: createPriceRatioPattern(this, 'sth_realized_price', 'p0_5sd'),
|
||
p1sd: createPriceRatioPattern(this, 'sth_realized_price', 'p1sd'),
|
||
p15sd: createPriceRatioPattern(this, 'sth_realized_price', 'p1_5sd'),
|
||
p2sd: createPriceRatioPattern(this, 'sth_realized_price', 'p2sd'),
|
||
p25sd: createPriceRatioPattern(this, 'sth_realized_price', 'p2_5sd'),
|
||
p3sd: createPriceRatioPattern(this, 'sth_realized_price', 'p3sd'),
|
||
m05sd: createPriceRatioPattern(this, 'sth_realized_price', 'm0_5sd'),
|
||
m1sd: createPriceRatioPattern(this, 'sth_realized_price', 'm1sd'),
|
||
m15sd: createPriceRatioPattern(this, 'sth_realized_price', 'm1_5sd'),
|
||
m2sd: createPriceRatioPattern(this, 'sth_realized_price', 'm2sd'),
|
||
m25sd: createPriceRatioPattern(this, 'sth_realized_price', 'm2_5sd'),
|
||
m3sd: createPriceRatioPattern(this, 'sth_realized_price', 'm3sd'),
|
||
},
|
||
_4y: {
|
||
sd: createSeriesPattern1(this, 'sth_realized_price_ratio_sd_4y'),
|
||
zscore: createSeriesPattern1(this, 'sth_realized_price_ratio_zscore_4y'),
|
||
_0sd: createCentsSatsUsdPattern(this, 'sth_realized_price_0sd_4y'),
|
||
p05sd: createPriceRatioPattern(this, 'sth_realized_price', 'p0_5sd_4y'),
|
||
p1sd: createPriceRatioPattern(this, 'sth_realized_price', 'p1sd_4y'),
|
||
p15sd: createPriceRatioPattern(this, 'sth_realized_price', 'p1_5sd_4y'),
|
||
p2sd: createPriceRatioPattern(this, 'sth_realized_price', 'p2sd_4y'),
|
||
p25sd: createPriceRatioPattern(this, 'sth_realized_price', 'p2_5sd_4y'),
|
||
p3sd: createPriceRatioPattern(this, 'sth_realized_price', 'p3sd_4y'),
|
||
m05sd: createPriceRatioPattern(this, 'sth_realized_price', 'm0_5sd_4y'),
|
||
m1sd: createPriceRatioPattern(this, 'sth_realized_price', 'm1sd_4y'),
|
||
m15sd: createPriceRatioPattern(this, 'sth_realized_price', 'm1_5sd_4y'),
|
||
m2sd: createPriceRatioPattern(this, 'sth_realized_price', 'm2sd_4y'),
|
||
m25sd: createPriceRatioPattern(this, 'sth_realized_price', 'm2_5sd_4y'),
|
||
m3sd: createPriceRatioPattern(this, 'sth_realized_price', 'm3sd_4y'),
|
||
},
|
||
_2y: {
|
||
sd: createSeriesPattern1(this, 'sth_realized_price_ratio_sd_2y'),
|
||
zscore: createSeriesPattern1(this, 'sth_realized_price_ratio_zscore_2y'),
|
||
_0sd: createCentsSatsUsdPattern(this, 'sth_realized_price_0sd_2y'),
|
||
p05sd: createPriceRatioPattern(this, 'sth_realized_price', 'p0_5sd_2y'),
|
||
p1sd: createPriceRatioPattern(this, 'sth_realized_price', 'p1sd_2y'),
|
||
p15sd: createPriceRatioPattern(this, 'sth_realized_price', 'p1_5sd_2y'),
|
||
p2sd: createPriceRatioPattern(this, 'sth_realized_price', 'p2sd_2y'),
|
||
p25sd: createPriceRatioPattern(this, 'sth_realized_price', 'p2_5sd_2y'),
|
||
p3sd: createPriceRatioPattern(this, 'sth_realized_price', 'p3sd_2y'),
|
||
m05sd: createPriceRatioPattern(this, 'sth_realized_price', 'm0_5sd_2y'),
|
||
m1sd: createPriceRatioPattern(this, 'sth_realized_price', 'm1sd_2y'),
|
||
m15sd: createPriceRatioPattern(this, 'sth_realized_price', 'm1_5sd_2y'),
|
||
m2sd: createPriceRatioPattern(this, 'sth_realized_price', 'm2sd_2y'),
|
||
m25sd: createPriceRatioPattern(this, 'sth_realized_price', 'm2_5sd_2y'),
|
||
m3sd: createPriceRatioPattern(this, 'sth_realized_price', 'm3sd_2y'),
|
||
},
|
||
_1y: {
|
||
sd: createSeriesPattern1(this, 'sth_realized_price_ratio_sd_1y'),
|
||
zscore: createSeriesPattern1(this, 'sth_realized_price_ratio_zscore_1y'),
|
||
_0sd: createCentsSatsUsdPattern(this, 'sth_realized_price_0sd_1y'),
|
||
p05sd: createPriceRatioPattern(this, 'sth_realized_price', 'p0_5sd_1y'),
|
||
p1sd: createPriceRatioPattern(this, 'sth_realized_price', 'p1sd_1y'),
|
||
p15sd: createPriceRatioPattern(this, 'sth_realized_price', 'p1_5sd_1y'),
|
||
p2sd: createPriceRatioPattern(this, 'sth_realized_price', 'p2sd_1y'),
|
||
p25sd: createPriceRatioPattern(this, 'sth_realized_price', 'p2_5sd_1y'),
|
||
p3sd: createPriceRatioPattern(this, 'sth_realized_price', 'p3sd_1y'),
|
||
m05sd: createPriceRatioPattern(this, 'sth_realized_price', 'm0_5sd_1y'),
|
||
m1sd: createPriceRatioPattern(this, 'sth_realized_price', 'm1sd_1y'),
|
||
m15sd: createPriceRatioPattern(this, 'sth_realized_price', 'm1_5sd_1y'),
|
||
m2sd: createPriceRatioPattern(this, 'sth_realized_price', 'm2sd_1y'),
|
||
m25sd: createPriceRatioPattern(this, 'sth_realized_price', 'm2_5sd_1y'),
|
||
m3sd: createPriceRatioPattern(this, 'sth_realized_price', 'm3sd_1y'),
|
||
},
|
||
},
|
||
},
|
||
mvrv: createSeriesPattern1(this, 'sth_mvrv'),
|
||
netPnl: createBaseChangeCumulativeDeltaSumToPattern(this, 'sth_net'),
|
||
sopr: {
|
||
valueDestroyed: createAverageBaseCumulativeSumPattern(this, 'sth_value_destroyed'),
|
||
ratio: create_1m1w1y24hPattern(this, 'sth_sopr'),
|
||
adjusted: {
|
||
ratio: create_1m1w1y24hPattern(this, 'sth_asopr'),
|
||
transferVolume: createAverageBaseCumulativeSumPattern(this, 'sth_adj_value_created'),
|
||
valueDestroyed: createAverageBaseCumulativeSumPattern(this, 'sth_adj_value_destroyed'),
|
||
},
|
||
},
|
||
grossPnl: createBaseCumulativeSumPattern(this, 'sth_realized_gross_pnl'),
|
||
sellSideRiskRatio: create_1m1w1y24hPattern7(this, 'sth_sell_side_risk_ratio'),
|
||
peakRegret: createBaseCumulativeSumToPattern(this, 'sth_realized_peak_regret'),
|
||
investor: createPricePattern(this, 'sth_investor_price'),
|
||
profitToLossRatio: create_1m1w1y24hPattern(this, 'sth_realized_profit_to_loss_ratio'),
|
||
},
|
||
costBasis: {
|
||
inProfit: createPerPattern(this, 'sth_cost_basis_in_profit_per'),
|
||
inLoss: createPerPattern(this, 'sth_cost_basis_in_loss_per'),
|
||
min: createCentsSatsUsdPattern(this, 'sth_cost_basis_min'),
|
||
max: createCentsSatsUsdPattern(this, 'sth_cost_basis_max'),
|
||
perCoin: createPct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern(this, 'sth_cost_basis_per_coin'),
|
||
perDollar: createPct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern(this, 'sth_cost_basis_per_dollar'),
|
||
supplyDensity: createBpsPercentRatioPattern3(this, 'sth_supply_density'),
|
||
},
|
||
unrealized: {
|
||
nupl: createBpsRatioPattern(this, 'sth_nupl'),
|
||
profit: createCentsToUsdPattern4(this, 'sth_unrealized_profit'),
|
||
loss: createCentsNegativeToUsdPattern2(this, 'sth'),
|
||
netPnl: createCentsToUsdPattern3(this, 'sth_net_unrealized_pnl'),
|
||
grossPnl: createCentsUsdPattern2(this, 'sth_unrealized_gross_pnl'),
|
||
investedCapital: createInPattern(this, 'sth_invested_capital_in'),
|
||
investorCapInProfitRaw: createSeriesPattern18(this, 'sth_investor_cap_in_profit_raw'),
|
||
investorCapInLossRaw: createSeriesPattern18(this, 'sth_investor_cap_in_loss_raw'),
|
||
sentiment: {
|
||
painIndex: createCentsUsdPattern2(this, 'sth_pain_index'),
|
||
greedIndex: createCentsUsdPattern2(this, 'sth_greed_index'),
|
||
net: createCentsUsdPattern(this, 'sth_net_sentiment'),
|
||
},
|
||
},
|
||
},
|
||
lth: {
|
||
supply: createDeltaHalfInToTotalPattern2(this, 'lth_supply'),
|
||
outputs: createUnspentPattern(this, 'lth_utxo_count'),
|
||
activity: {
|
||
transferVolume: createAverageBaseCumulativeInSumPattern(this, 'lth_transfer_volume'),
|
||
coindaysDestroyed: createAverageBaseCumulativeSumPattern(this, 'lth_coindays_destroyed'),
|
||
coinyearsDestroyed: createSeriesPattern1(this, 'lth_coinyears_destroyed'),
|
||
dormancy: create_1m1w1y24hPattern(this, 'lth_dormancy'),
|
||
},
|
||
realized: {
|
||
cap: createCentsDeltaToUsdPattern(this, 'lth_realized_cap'),
|
||
profit: createBaseCumulativeSumToPattern(this, 'lth_realized_profit'),
|
||
loss: {
|
||
base: createCentsUsdPattern2(this, 'lth_realized_loss'),
|
||
cumulative: createCentsUsdPattern2(this, 'lth_realized_loss_cumulative'),
|
||
sum: create_1m1w1y24hPattern6(this, 'lth_realized_loss_sum'),
|
||
negative: createBaseSumPattern(this, 'lth_neg_realized_loss'),
|
||
toRcap: createBpsPercentRatioPattern4(this, 'lth_realized_loss_to_rcap'),
|
||
},
|
||
price: {
|
||
usd: createSeriesPattern1(this, 'lth_realized_price'),
|
||
cents: createSeriesPattern1(this, 'lth_realized_price_cents'),
|
||
sats: createSeriesPattern1(this, 'lth_realized_price_sats'),
|
||
bps: createSeriesPattern1(this, 'lth_realized_price_ratio_bps'),
|
||
ratio: createSeriesPattern1(this, 'lth_realized_price_ratio'),
|
||
percentiles: createPct1Pct2Pct5Pct95Pct98Pct99Pattern(this, 'lth_realized_price'),
|
||
sma: create_1m1w1y2y4yAllPattern(this, 'lth_realized_price_ratio_sma'),
|
||
stdDev: {
|
||
all: {
|
||
sd: createSeriesPattern1(this, 'lth_realized_price_ratio_sd'),
|
||
zscore: createSeriesPattern1(this, 'lth_realized_price_ratio_zscore'),
|
||
_0sd: createCentsSatsUsdPattern(this, 'lth_realized_price_0sd'),
|
||
p05sd: createPriceRatioPattern(this, 'lth_realized_price', 'p0_5sd'),
|
||
p1sd: createPriceRatioPattern(this, 'lth_realized_price', 'p1sd'),
|
||
p15sd: createPriceRatioPattern(this, 'lth_realized_price', 'p1_5sd'),
|
||
p2sd: createPriceRatioPattern(this, 'lth_realized_price', 'p2sd'),
|
||
p25sd: createPriceRatioPattern(this, 'lth_realized_price', 'p2_5sd'),
|
||
p3sd: createPriceRatioPattern(this, 'lth_realized_price', 'p3sd'),
|
||
m05sd: createPriceRatioPattern(this, 'lth_realized_price', 'm0_5sd'),
|
||
m1sd: createPriceRatioPattern(this, 'lth_realized_price', 'm1sd'),
|
||
m15sd: createPriceRatioPattern(this, 'lth_realized_price', 'm1_5sd'),
|
||
m2sd: createPriceRatioPattern(this, 'lth_realized_price', 'm2sd'),
|
||
m25sd: createPriceRatioPattern(this, 'lth_realized_price', 'm2_5sd'),
|
||
m3sd: createPriceRatioPattern(this, 'lth_realized_price', 'm3sd'),
|
||
},
|
||
_4y: {
|
||
sd: createSeriesPattern1(this, 'lth_realized_price_ratio_sd_4y'),
|
||
zscore: createSeriesPattern1(this, 'lth_realized_price_ratio_zscore_4y'),
|
||
_0sd: createCentsSatsUsdPattern(this, 'lth_realized_price_0sd_4y'),
|
||
p05sd: createPriceRatioPattern(this, 'lth_realized_price', 'p0_5sd_4y'),
|
||
p1sd: createPriceRatioPattern(this, 'lth_realized_price', 'p1sd_4y'),
|
||
p15sd: createPriceRatioPattern(this, 'lth_realized_price', 'p1_5sd_4y'),
|
||
p2sd: createPriceRatioPattern(this, 'lth_realized_price', 'p2sd_4y'),
|
||
p25sd: createPriceRatioPattern(this, 'lth_realized_price', 'p2_5sd_4y'),
|
||
p3sd: createPriceRatioPattern(this, 'lth_realized_price', 'p3sd_4y'),
|
||
m05sd: createPriceRatioPattern(this, 'lth_realized_price', 'm0_5sd_4y'),
|
||
m1sd: createPriceRatioPattern(this, 'lth_realized_price', 'm1sd_4y'),
|
||
m15sd: createPriceRatioPattern(this, 'lth_realized_price', 'm1_5sd_4y'),
|
||
m2sd: createPriceRatioPattern(this, 'lth_realized_price', 'm2sd_4y'),
|
||
m25sd: createPriceRatioPattern(this, 'lth_realized_price', 'm2_5sd_4y'),
|
||
m3sd: createPriceRatioPattern(this, 'lth_realized_price', 'm3sd_4y'),
|
||
},
|
||
_2y: {
|
||
sd: createSeriesPattern1(this, 'lth_realized_price_ratio_sd_2y'),
|
||
zscore: createSeriesPattern1(this, 'lth_realized_price_ratio_zscore_2y'),
|
||
_0sd: createCentsSatsUsdPattern(this, 'lth_realized_price_0sd_2y'),
|
||
p05sd: createPriceRatioPattern(this, 'lth_realized_price', 'p0_5sd_2y'),
|
||
p1sd: createPriceRatioPattern(this, 'lth_realized_price', 'p1sd_2y'),
|
||
p15sd: createPriceRatioPattern(this, 'lth_realized_price', 'p1_5sd_2y'),
|
||
p2sd: createPriceRatioPattern(this, 'lth_realized_price', 'p2sd_2y'),
|
||
p25sd: createPriceRatioPattern(this, 'lth_realized_price', 'p2_5sd_2y'),
|
||
p3sd: createPriceRatioPattern(this, 'lth_realized_price', 'p3sd_2y'),
|
||
m05sd: createPriceRatioPattern(this, 'lth_realized_price', 'm0_5sd_2y'),
|
||
m1sd: createPriceRatioPattern(this, 'lth_realized_price', 'm1sd_2y'),
|
||
m15sd: createPriceRatioPattern(this, 'lth_realized_price', 'm1_5sd_2y'),
|
||
m2sd: createPriceRatioPattern(this, 'lth_realized_price', 'm2sd_2y'),
|
||
m25sd: createPriceRatioPattern(this, 'lth_realized_price', 'm2_5sd_2y'),
|
||
m3sd: createPriceRatioPattern(this, 'lth_realized_price', 'm3sd_2y'),
|
||
},
|
||
_1y: {
|
||
sd: createSeriesPattern1(this, 'lth_realized_price_ratio_sd_1y'),
|
||
zscore: createSeriesPattern1(this, 'lth_realized_price_ratio_zscore_1y'),
|
||
_0sd: createCentsSatsUsdPattern(this, 'lth_realized_price_0sd_1y'),
|
||
p05sd: createPriceRatioPattern(this, 'lth_realized_price', 'p0_5sd_1y'),
|
||
p1sd: createPriceRatioPattern(this, 'lth_realized_price', 'p1sd_1y'),
|
||
p15sd: createPriceRatioPattern(this, 'lth_realized_price', 'p1_5sd_1y'),
|
||
p2sd: createPriceRatioPattern(this, 'lth_realized_price', 'p2sd_1y'),
|
||
p25sd: createPriceRatioPattern(this, 'lth_realized_price', 'p2_5sd_1y'),
|
||
p3sd: createPriceRatioPattern(this, 'lth_realized_price', 'p3sd_1y'),
|
||
m05sd: createPriceRatioPattern(this, 'lth_realized_price', 'm0_5sd_1y'),
|
||
m1sd: createPriceRatioPattern(this, 'lth_realized_price', 'm1sd_1y'),
|
||
m15sd: createPriceRatioPattern(this, 'lth_realized_price', 'm1_5sd_1y'),
|
||
m2sd: createPriceRatioPattern(this, 'lth_realized_price', 'm2sd_1y'),
|
||
m25sd: createPriceRatioPattern(this, 'lth_realized_price', 'm2_5sd_1y'),
|
||
m3sd: createPriceRatioPattern(this, 'lth_realized_price', 'm3sd_1y'),
|
||
},
|
||
},
|
||
},
|
||
mvrv: createSeriesPattern1(this, 'lth_mvrv'),
|
||
netPnl: createBaseChangeCumulativeDeltaSumToPattern(this, 'lth_net'),
|
||
sopr: {
|
||
valueDestroyed: createAverageBaseCumulativeSumPattern(this, 'lth_value_destroyed'),
|
||
ratio: create_1m1w1y24hPattern(this, 'lth_sopr'),
|
||
},
|
||
grossPnl: createBaseCumulativeSumPattern(this, 'lth_realized_gross_pnl'),
|
||
sellSideRiskRatio: create_1m1w1y24hPattern7(this, 'lth_sell_side_risk_ratio'),
|
||
peakRegret: createBaseCumulativeSumToPattern(this, 'lth_realized_peak_regret'),
|
||
investor: createPricePattern(this, 'lth_investor_price'),
|
||
profitToLossRatio: create_1m1w1y24hPattern(this, 'lth_realized_profit_to_loss_ratio'),
|
||
},
|
||
costBasis: {
|
||
inProfit: createPerPattern(this, 'lth_cost_basis_in_profit_per'),
|
||
inLoss: createPerPattern(this, 'lth_cost_basis_in_loss_per'),
|
||
min: createCentsSatsUsdPattern(this, 'lth_cost_basis_min'),
|
||
max: createCentsSatsUsdPattern(this, 'lth_cost_basis_max'),
|
||
perCoin: createPct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern(this, 'lth_cost_basis_per_coin'),
|
||
perDollar: createPct05Pct10Pct15Pct20Pct25Pct30Pct35Pct40Pct45Pct50Pct55Pct60Pct65Pct70Pct75Pct80Pct85Pct90Pct95Pattern(this, 'lth_cost_basis_per_dollar'),
|
||
supplyDensity: createBpsPercentRatioPattern3(this, 'lth_supply_density'),
|
||
},
|
||
unrealized: {
|
||
nupl: createBpsRatioPattern(this, 'lth_nupl'),
|
||
profit: createCentsToUsdPattern4(this, 'lth_unrealized_profit'),
|
||
loss: createCentsNegativeToUsdPattern2(this, 'lth'),
|
||
netPnl: createCentsToUsdPattern3(this, 'lth_net_unrealized_pnl'),
|
||
grossPnl: createCentsUsdPattern2(this, 'lth_unrealized_gross_pnl'),
|
||
investedCapital: createInPattern(this, 'lth_invested_capital_in'),
|
||
investorCapInProfitRaw: createSeriesPattern18(this, 'lth_investor_cap_in_profit_raw'),
|
||
investorCapInLossRaw: createSeriesPattern18(this, 'lth_investor_cap_in_loss_raw'),
|
||
sentiment: {
|
||
painIndex: createCentsUsdPattern2(this, 'lth_pain_index'),
|
||
greedIndex: createCentsUsdPattern2(this, 'lth_greed_index'),
|
||
net: createCentsUsdPattern(this, 'lth_net_sentiment'),
|
||
},
|
||
},
|
||
},
|
||
ageRange: {
|
||
under1h: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_1h_old'),
|
||
_1hTo1d: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_1h_to_1d_old'),
|
||
_1dTo1w: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_1d_to_1w_old'),
|
||
_1wTo1m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_1w_to_1m_old'),
|
||
_1mTo2m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_1m_to_2m_old'),
|
||
_2mTo3m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_2m_to_3m_old'),
|
||
_3mTo4m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_3m_to_4m_old'),
|
||
_4mTo5m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_4m_to_5m_old'),
|
||
_5mTo6m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_5m_to_6m_old'),
|
||
_6mTo1y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_6m_to_1y_old'),
|
||
_1yTo2y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_1y_to_2y_old'),
|
||
_2yTo3y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_2y_to_3y_old'),
|
||
_3yTo4y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_3y_to_4y_old'),
|
||
_4yTo5y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_4y_to_5y_old'),
|
||
_5yTo6y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_5y_to_6y_old'),
|
||
_6yTo7y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_6y_to_7y_old'),
|
||
_7yTo8y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_7y_to_8y_old'),
|
||
_8yTo10y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_8y_to_10y_old'),
|
||
_10yTo12y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_10y_to_12y_old'),
|
||
_12yTo15y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_12y_to_15y_old'),
|
||
over15y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_15y_old'),
|
||
},
|
||
underAge: {
|
||
_1w: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_1w_old'),
|
||
_1m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_1m_old'),
|
||
_2m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_2m_old'),
|
||
_3m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_3m_old'),
|
||
_4m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_4m_old'),
|
||
_5m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_5m_old'),
|
||
_6m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_6m_old'),
|
||
_1y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_1y_old'),
|
||
_2y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_2y_old'),
|
||
_3y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_3y_old'),
|
||
_4y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_4y_old'),
|
||
_5y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_5y_old'),
|
||
_6y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_6y_old'),
|
||
_7y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_7y_old'),
|
||
_8y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_8y_old'),
|
||
_10y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_10y_old'),
|
||
_12y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_12y_old'),
|
||
_15y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_under_15y_old'),
|
||
},
|
||
overAge: {
|
||
_1d: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_1d_old'),
|
||
_1w: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_1w_old'),
|
||
_1m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_1m_old'),
|
||
_2m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_2m_old'),
|
||
_3m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_3m_old'),
|
||
_4m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_4m_old'),
|
||
_5m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_5m_old'),
|
||
_6m: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_6m_old'),
|
||
_1y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_1y_old'),
|
||
_2y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_2y_old'),
|
||
_3y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_3y_old'),
|
||
_4y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_4y_old'),
|
||
_5y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_5y_old'),
|
||
_6y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_6y_old'),
|
||
_7y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_7y_old'),
|
||
_8y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_8y_old'),
|
||
_10y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_10y_old'),
|
||
_12y: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'utxos_over_12y_old'),
|
||
},
|
||
epoch: {
|
||
_0: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'epoch_0'),
|
||
_1: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'epoch_1'),
|
||
_2: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'epoch_2'),
|
||
_3: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'epoch_3'),
|
||
_4: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'epoch_4'),
|
||
},
|
||
class: {
|
||
_2009: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2009'),
|
||
_2010: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2010'),
|
||
_2011: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2011'),
|
||
_2012: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2012'),
|
||
_2013: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2013'),
|
||
_2014: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2014'),
|
||
_2015: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2015'),
|
||
_2016: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2016'),
|
||
_2017: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2017'),
|
||
_2018: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2018'),
|
||
_2019: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2019'),
|
||
_2020: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2020'),
|
||
_2021: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2021'),
|
||
_2022: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2022'),
|
||
_2023: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2023'),
|
||
_2024: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2024'),
|
||
_2025: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2025'),
|
||
_2026: createActivityOutputsRealizedSupplyUnrealizedPattern(this, 'class_2026'),
|
||
},
|
||
overAmount: {
|
||
_1sat: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_1sat'),
|
||
_10sats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_10sats'),
|
||
_100sats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_100sats'),
|
||
_1kSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_1k_sats'),
|
||
_10kSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_10k_sats'),
|
||
_100kSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_100k_sats'),
|
||
_1mSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_1m_sats'),
|
||
_10mSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_10m_sats'),
|
||
_1btc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_1btc'),
|
||
_10btc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_10btc'),
|
||
_100btc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_100btc'),
|
||
_1kBtc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_1k_btc'),
|
||
_10kBtc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_10k_btc'),
|
||
},
|
||
amountRange: {
|
||
_0sats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_0sats'),
|
||
_1satTo10sats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_1sat_to_10sats'),
|
||
_10satsTo100sats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_10sats_to_100sats'),
|
||
_100satsTo1kSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_100sats_to_1k_sats'),
|
||
_1kSatsTo10kSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_1k_sats_to_10k_sats'),
|
||
_10kSatsTo100kSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_10k_sats_to_100k_sats'),
|
||
_100kSatsTo1mSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_100k_sats_to_1m_sats'),
|
||
_1mSatsTo10mSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_1m_sats_to_10m_sats'),
|
||
_10mSatsTo1btc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_10m_sats_to_1btc'),
|
||
_1btcTo10btc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_1btc_to_10btc'),
|
||
_10btcTo100btc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_10btc_to_100btc'),
|
||
_100btcTo1kBtc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_100btc_to_1k_btc'),
|
||
_1kBtcTo10kBtc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_1k_btc_to_10k_btc'),
|
||
_10kBtcTo100kBtc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_10k_btc_to_100k_btc'),
|
||
over100kBtc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_over_100k_btc'),
|
||
},
|
||
underAmount: {
|
||
_10sats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_10sats'),
|
||
_100sats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_100sats'),
|
||
_1kSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_1k_sats'),
|
||
_10kSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_10k_sats'),
|
||
_100kSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_100k_sats'),
|
||
_1mSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_1m_sats'),
|
||
_10mSats: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_10m_sats'),
|
||
_1btc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_1btc'),
|
||
_10btc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_10btc'),
|
||
_100btc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_100btc'),
|
||
_1kBtc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_1k_btc'),
|
||
_10kBtc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_10k_btc'),
|
||
_100kBtc: createActivityOutputsRealizedSupplyUnrealizedPattern2(this, 'utxos_under_100k_btc'),
|
||
},
|
||
type: {
|
||
p2pk65: createActivityOutputsRealizedSupplyUnrealizedPattern3(this, 'p2pk65'),
|
||
p2pk33: createActivityOutputsRealizedSupplyUnrealizedPattern3(this, 'p2pk33'),
|
||
p2pkh: createActivityOutputsRealizedSupplyUnrealizedPattern3(this, 'p2pkh'),
|
||
p2ms: createActivityOutputsRealizedSupplyUnrealizedPattern3(this, 'p2ms'),
|
||
p2sh: createActivityOutputsRealizedSupplyUnrealizedPattern3(this, 'p2sh'),
|
||
p2wpkh: createActivityOutputsRealizedSupplyUnrealizedPattern3(this, 'p2wpkh'),
|
||
p2wsh: createActivityOutputsRealizedSupplyUnrealizedPattern3(this, 'p2wsh'),
|
||
p2tr: createActivityOutputsRealizedSupplyUnrealizedPattern3(this, 'p2tr'),
|
||
p2a: createActivityOutputsRealizedSupplyUnrealizedPattern3(this, 'p2a'),
|
||
unknown: createActivityOutputsRealizedSupplyUnrealizedPattern3(this, 'unknown_outputs'),
|
||
empty: createActivityOutputsRealizedSupplyUnrealizedPattern3(this, 'empty_outputs'),
|
||
},
|
||
profitability: {
|
||
range: {
|
||
over1000pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_over_1000pct_in_profit'),
|
||
_500pctTo1000pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_500pct_to_1000pct_in_profit'),
|
||
_300pctTo500pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_300pct_to_500pct_in_profit'),
|
||
_200pctTo300pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_200pct_to_300pct_in_profit'),
|
||
_100pctTo200pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_100pct_to_200pct_in_profit'),
|
||
_90pctTo100pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_90pct_to_100pct_in_profit'),
|
||
_80pctTo90pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_80pct_to_90pct_in_profit'),
|
||
_70pctTo80pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_70pct_to_80pct_in_profit'),
|
||
_60pctTo70pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_60pct_to_70pct_in_profit'),
|
||
_50pctTo60pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_50pct_to_60pct_in_profit'),
|
||
_40pctTo50pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_40pct_to_50pct_in_profit'),
|
||
_30pctTo40pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_30pct_to_40pct_in_profit'),
|
||
_20pctTo30pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_20pct_to_30pct_in_profit'),
|
||
_10pctTo20pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_10pct_to_20pct_in_profit'),
|
||
_0pctTo10pctInProfit: createNuplRealizedSupplyPattern(this, 'utxos_0pct_to_10pct_in_profit'),
|
||
_0pctTo10pctInLoss: createNuplRealizedSupplyPattern(this, 'utxos_0pct_to_10pct_in_loss'),
|
||
_10pctTo20pctInLoss: createNuplRealizedSupplyPattern(this, 'utxos_10pct_to_20pct_in_loss'),
|
||
_20pctTo30pctInLoss: createNuplRealizedSupplyPattern(this, 'utxos_20pct_to_30pct_in_loss'),
|
||
_30pctTo40pctInLoss: createNuplRealizedSupplyPattern(this, 'utxos_30pct_to_40pct_in_loss'),
|
||
_40pctTo50pctInLoss: createNuplRealizedSupplyPattern(this, 'utxos_40pct_to_50pct_in_loss'),
|
||
_50pctTo60pctInLoss: createNuplRealizedSupplyPattern(this, 'utxos_50pct_to_60pct_in_loss'),
|
||
_60pctTo70pctInLoss: createNuplRealizedSupplyPattern(this, 'utxos_60pct_to_70pct_in_loss'),
|
||
_70pctTo80pctInLoss: createNuplRealizedSupplyPattern(this, 'utxos_70pct_to_80pct_in_loss'),
|
||
_80pctTo90pctInLoss: createNuplRealizedSupplyPattern(this, 'utxos_80pct_to_90pct_in_loss'),
|
||
_90pctTo100pctInLoss: createNuplRealizedSupplyPattern(this, 'utxos_90pct_to_100pct_in_loss'),
|
||
},
|
||
profit: {
|
||
all: createNuplRealizedSupplyPattern(this, 'utxos_in_profit'),
|
||
_10pct: createNuplRealizedSupplyPattern(this, 'utxos_over_10pct_in_profit'),
|
||
_20pct: createNuplRealizedSupplyPattern(this, 'utxos_over_20pct_in_profit'),
|
||
_30pct: createNuplRealizedSupplyPattern(this, 'utxos_over_30pct_in_profit'),
|
||
_40pct: createNuplRealizedSupplyPattern(this, 'utxos_over_40pct_in_profit'),
|
||
_50pct: createNuplRealizedSupplyPattern(this, 'utxos_over_50pct_in_profit'),
|
||
_60pct: createNuplRealizedSupplyPattern(this, 'utxos_over_60pct_in_profit'),
|
||
_70pct: createNuplRealizedSupplyPattern(this, 'utxos_over_70pct_in_profit'),
|
||
_80pct: createNuplRealizedSupplyPattern(this, 'utxos_over_80pct_in_profit'),
|
||
_90pct: createNuplRealizedSupplyPattern(this, 'utxos_over_90pct_in_profit'),
|
||
_100pct: createNuplRealizedSupplyPattern(this, 'utxos_over_100pct_in_profit'),
|
||
_200pct: createNuplRealizedSupplyPattern(this, 'utxos_over_200pct_in_profit'),
|
||
_300pct: createNuplRealizedSupplyPattern(this, 'utxos_over_300pct_in_profit'),
|
||
_500pct: createNuplRealizedSupplyPattern(this, 'utxos_over_500pct_in_profit'),
|
||
},
|
||
loss: {
|
||
all: createNuplRealizedSupplyPattern(this, 'utxos_in_loss'),
|
||
_10pct: createNuplRealizedSupplyPattern(this, 'utxos_over_10pct_in_loss'),
|
||
_20pct: createNuplRealizedSupplyPattern(this, 'utxos_over_20pct_in_loss'),
|
||
_30pct: createNuplRealizedSupplyPattern(this, 'utxos_over_30pct_in_loss'),
|
||
_40pct: createNuplRealizedSupplyPattern(this, 'utxos_over_40pct_in_loss'),
|
||
_50pct: createNuplRealizedSupplyPattern(this, 'utxos_over_50pct_in_loss'),
|
||
_60pct: createNuplRealizedSupplyPattern(this, 'utxos_over_60pct_in_loss'),
|
||
_70pct: createNuplRealizedSupplyPattern(this, 'utxos_over_70pct_in_loss'),
|
||
_80pct: createNuplRealizedSupplyPattern(this, 'utxos_over_80pct_in_loss'),
|
||
},
|
||
},
|
||
matured: {
|
||
under1h: createAverageBaseCumulativeSumPattern3(this, 'utxos_under_1h_old_matured_supply'),
|
||
_1hTo1d: createAverageBaseCumulativeSumPattern3(this, 'utxos_1h_to_1d_old_matured_supply'),
|
||
_1dTo1w: createAverageBaseCumulativeSumPattern3(this, 'utxos_1d_to_1w_old_matured_supply'),
|
||
_1wTo1m: createAverageBaseCumulativeSumPattern3(this, 'utxos_1w_to_1m_old_matured_supply'),
|
||
_1mTo2m: createAverageBaseCumulativeSumPattern3(this, 'utxos_1m_to_2m_old_matured_supply'),
|
||
_2mTo3m: createAverageBaseCumulativeSumPattern3(this, 'utxos_2m_to_3m_old_matured_supply'),
|
||
_3mTo4m: createAverageBaseCumulativeSumPattern3(this, 'utxos_3m_to_4m_old_matured_supply'),
|
||
_4mTo5m: createAverageBaseCumulativeSumPattern3(this, 'utxos_4m_to_5m_old_matured_supply'),
|
||
_5mTo6m: createAverageBaseCumulativeSumPattern3(this, 'utxos_5m_to_6m_old_matured_supply'),
|
||
_6mTo1y: createAverageBaseCumulativeSumPattern3(this, 'utxos_6m_to_1y_old_matured_supply'),
|
||
_1yTo2y: createAverageBaseCumulativeSumPattern3(this, 'utxos_1y_to_2y_old_matured_supply'),
|
||
_2yTo3y: createAverageBaseCumulativeSumPattern3(this, 'utxos_2y_to_3y_old_matured_supply'),
|
||
_3yTo4y: createAverageBaseCumulativeSumPattern3(this, 'utxos_3y_to_4y_old_matured_supply'),
|
||
_4yTo5y: createAverageBaseCumulativeSumPattern3(this, 'utxos_4y_to_5y_old_matured_supply'),
|
||
_5yTo6y: createAverageBaseCumulativeSumPattern3(this, 'utxos_5y_to_6y_old_matured_supply'),
|
||
_6yTo7y: createAverageBaseCumulativeSumPattern3(this, 'utxos_6y_to_7y_old_matured_supply'),
|
||
_7yTo8y: createAverageBaseCumulativeSumPattern3(this, 'utxos_7y_to_8y_old_matured_supply'),
|
||
_8yTo10y: createAverageBaseCumulativeSumPattern3(this, 'utxos_8y_to_10y_old_matured_supply'),
|
||
_10yTo12y: createAverageBaseCumulativeSumPattern3(this, 'utxos_10y_to_12y_old_matured_supply'),
|
||
_12yTo15y: createAverageBaseCumulativeSumPattern3(this, 'utxos_12y_to_15y_old_matured_supply'),
|
||
over15y: createAverageBaseCumulativeSumPattern3(this, 'utxos_over_15y_old_matured_supply'),
|
||
},
|
||
},
|
||
addr: {
|
||
overAmount: {
|
||
_1sat: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_1sat'),
|
||
_10sats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_10sats'),
|
||
_100sats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_100sats'),
|
||
_1kSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_1k_sats'),
|
||
_10kSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_10k_sats'),
|
||
_100kSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_100k_sats'),
|
||
_1mSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_1m_sats'),
|
||
_10mSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_10m_sats'),
|
||
_1btc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_1btc'),
|
||
_10btc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_10btc'),
|
||
_100btc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_100btc'),
|
||
_1kBtc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_1k_btc'),
|
||
_10kBtc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_10k_btc'),
|
||
},
|
||
amountRange: {
|
||
_0sats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_0sats'),
|
||
_1satTo10sats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_1sat_to_10sats'),
|
||
_10satsTo100sats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_10sats_to_100sats'),
|
||
_100satsTo1kSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_100sats_to_1k_sats'),
|
||
_1kSatsTo10kSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_1k_sats_to_10k_sats'),
|
||
_10kSatsTo100kSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_10k_sats_to_100k_sats'),
|
||
_100kSatsTo1mSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_100k_sats_to_1m_sats'),
|
||
_1mSatsTo10mSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_1m_sats_to_10m_sats'),
|
||
_10mSatsTo1btc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_10m_sats_to_1btc'),
|
||
_1btcTo10btc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_1btc_to_10btc'),
|
||
_10btcTo100btc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_10btc_to_100btc'),
|
||
_100btcTo1kBtc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_100btc_to_1k_btc'),
|
||
_1kBtcTo10kBtc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_1k_btc_to_10k_btc'),
|
||
_10kBtcTo100kBtc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_10k_btc_to_100k_btc'),
|
||
over100kBtc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_over_100k_btc'),
|
||
},
|
||
underAmount: {
|
||
_10sats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_10sats'),
|
||
_100sats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_100sats'),
|
||
_1kSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_1k_sats'),
|
||
_10kSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_10k_sats'),
|
||
_100kSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_100k_sats'),
|
||
_1mSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_1m_sats'),
|
||
_10mSats: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_10m_sats'),
|
||
_1btc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_1btc'),
|
||
_10btc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_10btc'),
|
||
_100btc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_100btc'),
|
||
_1kBtc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_1k_btc'),
|
||
_10kBtc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_10k_btc'),
|
||
_100kBtc: createActivityAddrOutputsRealizedSupplyUnrealizedPattern(this, 'addrs_under_100k_btc'),
|
||
},
|
||
},
|
||
},
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Create a dynamic series endpoint builder for any series/index combination.
|
||
*
|
||
* Use this for programmatic access when the series name is determined at runtime.
|
||
* For type-safe access, use the `series` tree instead.
|
||
*
|
||
* @param {string} series - The series name
|
||
* @param {Index} index - The index name
|
||
* @returns {SeriesEndpoint<unknown>}
|
||
*/
|
||
seriesEndpoint(series, index) {
|
||
return _endpoint(this, series, index);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
* @returns {Promise<*>}
|
||
*/
|
||
async getApi() {
|
||
return this.getJson(`/api.json`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {Addr} address
|
||
* @returns {Promise<AddrStats>}
|
||
*/
|
||
async getAddress(address) {
|
||
return this.getJson(`/api/address/${address}`);
|
||
}
|
||
|
||
/**
|
||
* Address transactions
|
||
*
|
||
* Get transaction history for an address, sorted with newest first. Returns up to 50 mempool transactions plus the first 25 confirmed transactions. Use ?after_txid=<txid> for pagination.
|
||
*
|
||
* *[Mempool.space docs](https://mempool.space/docs/api/rest#get-address-transactions)*
|
||
*
|
||
* Endpoint: `GET /api/address/{address}/txs`
|
||
*
|
||
* @param {Addr} address
|
||
* @param {Txid=} [after_txid] - Txid to paginate from (return transactions before this one)
|
||
* @returns {Promise<Transaction[]>}
|
||
*/
|
||
async getAddressTxs(address, after_txid) {
|
||
const params = new URLSearchParams();
|
||
if (after_txid !== undefined) params.set('after_txid', String(after_txid));
|
||
const query = params.toString();
|
||
const path = `/api/address/${address}/txs${query ? '?' + query : ''}`;
|
||
return this.getJson(path);
|
||
}
|
||
|
||
/**
|
||
* Address confirmed transactions
|
||
*
|
||
* Get confirmed transactions 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`
|
||
*
|
||
* @param {Addr} address
|
||
* @param {Txid=} [after_txid] - Txid to paginate from (return transactions before this one)
|
||
* @returns {Promise<Transaction[]>}
|
||
*/
|
||
async getAddressConfirmedTxs(address, after_txid) {
|
||
const params = new URLSearchParams();
|
||
if (after_txid !== undefined) params.set('after_txid', String(after_txid));
|
||
const query = params.toString();
|
||
const path = `/api/address/${address}/txs/chain${query ? '?' + query : ''}`;
|
||
return this.getJson(path);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
*
|
||
* @param {Addr} address
|
||
* @returns {Promise<Txid[]>}
|
||
*/
|
||
async getAddressMempoolTxs(address) {
|
||
return this.getJson(`/api/address/${address}/txs/mempool`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
*
|
||
* @param {Addr} address
|
||
* @returns {Promise<Utxo[]>}
|
||
*/
|
||
async getAddressUtxos(address) {
|
||
return this.getJson(`/api/address/${address}/utxo`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {Height} height
|
||
* @returns {Promise<BlockInfo>}
|
||
*/
|
||
async getBlockByHeight(height) {
|
||
return this.getJson(`/api/block-height/${height}`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {BlockHash} hash
|
||
* @returns {Promise<BlockInfo>}
|
||
*/
|
||
async getBlock(hash) {
|
||
return this.getJson(`/api/block/${hash}`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
*
|
||
* @param {BlockHash} hash
|
||
* @returns {Promise<number[]>}
|
||
*/
|
||
async getBlockRaw(hash) {
|
||
return this.getJson(`/api/block/${hash}/raw`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
*
|
||
* @param {BlockHash} hash
|
||
* @returns {Promise<BlockStatus>}
|
||
*/
|
||
async getBlockStatus(hash) {
|
||
return this.getJson(`/api/block/${hash}/status`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {BlockHash} hash - Bitcoin block hash
|
||
* @param {TxIndex} index - Transaction index within the block (0-based)
|
||
* @returns {Promise<Txid>}
|
||
*/
|
||
async getBlockTxid(hash, index) {
|
||
return this.getJson(`/api/block/${hash}/txid/${index}`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
*
|
||
* @param {BlockHash} hash
|
||
* @returns {Promise<Txid[]>}
|
||
*/
|
||
async getBlockTxids(hash) {
|
||
return this.getJson(`/api/block/${hash}/txids`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {BlockHash} hash - Bitcoin block hash
|
||
* @param {TxIndex} start_index - Starting transaction index within the block (0-based)
|
||
* @returns {Promise<Transaction[]>}
|
||
*/
|
||
async getBlockTxs(hash, start_index) {
|
||
return this.getJson(`/api/block/${hash}/txs/${start_index}`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
* @returns {Promise<BlockInfo[]>}
|
||
*/
|
||
async getBlocks() {
|
||
return this.getJson(`/api/blocks`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {Height} height
|
||
* @returns {Promise<BlockInfo[]>}
|
||
*/
|
||
async getBlocksFromHeight(height) {
|
||
return this.getJson(`/api/blocks/${height}`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
* @returns {Promise<MempoolInfo>}
|
||
*/
|
||
async getMempool() {
|
||
return this.getJson(`/api/mempool/info`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
* @returns {Promise<Dollars>}
|
||
*/
|
||
async getLivePrice() {
|
||
return this.getJson(`/api/mempool/price`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
* @returns {Promise<Txid[]>}
|
||
*/
|
||
async getMempoolTxids() {
|
||
return this.getJson(`/api/mempool/txids`);
|
||
}
|
||
|
||
/**
|
||
* Series catalog
|
||
*
|
||
* Returns the complete hierarchical catalog of available series organized as a tree structure. Series are grouped by categories and subcategories.
|
||
*
|
||
* Endpoint: `GET /api/series`
|
||
* @returns {Promise<TreeNode>}
|
||
*/
|
||
async getSeriesTree() {
|
||
return this.getJson(`/api/series`);
|
||
}
|
||
|
||
/**
|
||
* Bulk series data
|
||
*
|
||
* Fetch multiple series in a single request. Supports filtering by index and date range. Returns an array of SeriesData objects. For a single series, use `get_series` instead.
|
||
*
|
||
* Endpoint: `GET /api/series/bulk`
|
||
*
|
||
* @param {SeriesList} [series] - Requested series
|
||
* @param {Index} [index] - Index to query
|
||
* @param {RangeIndex=} [start] - Inclusive start: integer index, date (YYYY-MM-DD), or timestamp (ISO 8601). Negative integers count from end. Aliases: `from`, `f`, `s`
|
||
* @param {RangeIndex=} [end] - Exclusive end: integer index, date (YYYY-MM-DD), or timestamp (ISO 8601). Negative integers count from end. Aliases: `to`, `t`, `e`
|
||
* @param {Limit=} [limit] - Maximum number of values to return (ignored if `end` is set). Aliases: `count`, `c`, `l`
|
||
* @param {Format=} [format] - Format of the output
|
||
* @returns {Promise<AnySeriesData[] | string>}
|
||
*/
|
||
async getSeriesBulk(series, index, start, end, limit, format) {
|
||
const params = new URLSearchParams();
|
||
params.set('series', String(series));
|
||
params.set('index', String(index));
|
||
if (start !== undefined) params.set('start', String(start));
|
||
if (end !== undefined) params.set('end', String(end));
|
||
if (limit !== undefined) params.set('limit', String(limit));
|
||
if (format !== undefined) params.set('format', String(format));
|
||
const query = params.toString();
|
||
const path = `/api/series/bulk${query ? '?' + query : ''}`;
|
||
if (format === 'csv') {
|
||
return this.getText(path);
|
||
}
|
||
return this.getJson(path);
|
||
}
|
||
|
||
/**
|
||
* Available cost basis cohorts
|
||
*
|
||
* List available cohorts for cost basis distribution.
|
||
*
|
||
* Endpoint: `GET /api/series/cost-basis`
|
||
* @returns {Promise<string[]>}
|
||
*/
|
||
async getCostBasisCohorts() {
|
||
return this.getJson(`/api/series/cost-basis`);
|
||
}
|
||
|
||
/**
|
||
* Available cost basis dates
|
||
*
|
||
* List available dates for a cohort's cost basis distribution.
|
||
*
|
||
* Endpoint: `GET /api/series/cost-basis/{cohort}/dates`
|
||
*
|
||
* @param {Cohort} cohort
|
||
* @returns {Promise<Date[]>}
|
||
*/
|
||
async getCostBasisDates(cohort) {
|
||
return this.getJson(`/api/series/cost-basis/${cohort}/dates`);
|
||
}
|
||
|
||
/**
|
||
* 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/series/cost-basis/{cohort}/{date}`
|
||
*
|
||
* @param {Cohort} cohort
|
||
* @param {string} date
|
||
* @param {CostBasisBucket=} [bucket] - Bucket type for aggregation. Default: raw (no aggregation).
|
||
* @param {CostBasisValue=} [value] - Value type to return. Default: supply.
|
||
* @returns {Promise<Object>}
|
||
*/
|
||
async getCostBasis(cohort, date, bucket, value) {
|
||
const params = new URLSearchParams();
|
||
if (bucket !== undefined) params.set('bucket', String(bucket));
|
||
if (value !== undefined) params.set('value', String(value));
|
||
const query = params.toString();
|
||
const path = `/api/series/cost-basis/${cohort}/${date}${query ? '?' + query : ''}`;
|
||
return this.getJson(path);
|
||
}
|
||
|
||
/**
|
||
* Series count
|
||
*
|
||
* Returns the number of series available per index type.
|
||
*
|
||
* Endpoint: `GET /api/series/count`
|
||
* @returns {Promise<SeriesCount[]>}
|
||
*/
|
||
async getSeriesCount() {
|
||
return this.getJson(`/api/series/count`);
|
||
}
|
||
|
||
/**
|
||
* List available indexes
|
||
*
|
||
* Returns all available indexes with their accepted query aliases. Use any alias when querying series.
|
||
*
|
||
* Endpoint: `GET /api/series/indexes`
|
||
* @returns {Promise<IndexInfo[]>}
|
||
*/
|
||
async getIndexes() {
|
||
return this.getJson(`/api/series/indexes`);
|
||
}
|
||
|
||
/**
|
||
* Series list
|
||
*
|
||
* Paginated flat list of all available series names. Use `page` query param for pagination.
|
||
*
|
||
* Endpoint: `GET /api/series/list`
|
||
*
|
||
* @param {number=} [page] - Pagination index
|
||
* @param {number=} [per_page] - Results per page (default: 1000, max: 1000)
|
||
* @returns {Promise<PaginatedSeries>}
|
||
*/
|
||
async listSeries(page, per_page) {
|
||
const params = new URLSearchParams();
|
||
if (page !== undefined) params.set('page', String(page));
|
||
if (per_page !== undefined) params.set('per_page', String(per_page));
|
||
const query = params.toString();
|
||
const path = `/api/series/list${query ? '?' + query : ''}`;
|
||
return this.getJson(path);
|
||
}
|
||
|
||
/**
|
||
* Search series
|
||
*
|
||
* Fuzzy search for series by name. Supports partial matches and typos.
|
||
*
|
||
* Endpoint: `GET /api/series/search`
|
||
*
|
||
* @param {SeriesName} [q] - Search query string
|
||
* @param {Limit=} [limit] - Maximum number of results
|
||
* @returns {Promise<string[]>}
|
||
*/
|
||
async searchSeries(q, limit) {
|
||
const params = new URLSearchParams();
|
||
params.set('q', String(q));
|
||
if (limit !== undefined) params.set('limit', String(limit));
|
||
const query = params.toString();
|
||
const path = `/api/series/search${query ? '?' + query : ''}`;
|
||
return this.getJson(path);
|
||
}
|
||
|
||
/**
|
||
* Get series info
|
||
*
|
||
* Returns the supported indexes and value type for the specified series.
|
||
*
|
||
* Endpoint: `GET /api/series/{series}`
|
||
*
|
||
* @param {SeriesName} series
|
||
* @returns {Promise<SeriesInfo>}
|
||
*/
|
||
async getSeriesInfo(series) {
|
||
return this.getJson(`/api/series/${series}`);
|
||
}
|
||
|
||
/**
|
||
* Get series data
|
||
*
|
||
* Fetch data for a specific series at the given index. Use query parameters to filter by date range and format (json/csv).
|
||
*
|
||
* Endpoint: `GET /api/series/{series}/{index}`
|
||
*
|
||
* @param {SeriesName} series - Series name
|
||
* @param {Index} index - Aggregation index
|
||
* @param {RangeIndex=} [start] - Inclusive start: integer index, date (YYYY-MM-DD), or timestamp (ISO 8601). Negative integers count from end. Aliases: `from`, `f`, `s`
|
||
* @param {RangeIndex=} [end] - Exclusive end: integer index, date (YYYY-MM-DD), or timestamp (ISO 8601). Negative integers count from end. Aliases: `to`, `t`, `e`
|
||
* @param {Limit=} [limit] - Maximum number of values to return (ignored if `end` is set). Aliases: `count`, `c`, `l`
|
||
* @param {Format=} [format] - Format of the output
|
||
* @returns {Promise<AnySeriesData | string>}
|
||
*/
|
||
async getSeries(series, index, start, end, limit, format) {
|
||
const params = new URLSearchParams();
|
||
if (start !== undefined) params.set('start', String(start));
|
||
if (end !== undefined) params.set('end', String(end));
|
||
if (limit !== undefined) params.set('limit', String(limit));
|
||
if (format !== undefined) params.set('format', String(format));
|
||
const query = params.toString();
|
||
const path = `/api/series/${series}/${index}${query ? '?' + query : ''}`;
|
||
if (format === 'csv') {
|
||
return this.getText(path);
|
||
}
|
||
return this.getJson(path);
|
||
}
|
||
|
||
/**
|
||
* Get raw series data
|
||
*
|
||
* Returns just the data array without the SeriesData wrapper. Supports the same range and format parameters as the standard endpoint.
|
||
*
|
||
* Endpoint: `GET /api/series/{series}/{index}/data`
|
||
*
|
||
* @param {SeriesName} series - Series name
|
||
* @param {Index} index - Aggregation index
|
||
* @param {RangeIndex=} [start] - Inclusive start: integer index, date (YYYY-MM-DD), or timestamp (ISO 8601). Negative integers count from end. Aliases: `from`, `f`, `s`
|
||
* @param {RangeIndex=} [end] - Exclusive end: integer index, date (YYYY-MM-DD), or timestamp (ISO 8601). Negative integers count from end. Aliases: `to`, `t`, `e`
|
||
* @param {Limit=} [limit] - Maximum number of values to return (ignored if `end` is set). Aliases: `count`, `c`, `l`
|
||
* @param {Format=} [format] - Format of the output
|
||
* @returns {Promise<boolean[] | string>}
|
||
*/
|
||
async getSeriesData(series, index, start, end, limit, format) {
|
||
const params = new URLSearchParams();
|
||
if (start !== undefined) params.set('start', String(start));
|
||
if (end !== undefined) params.set('end', String(end));
|
||
if (limit !== undefined) params.set('limit', String(limit));
|
||
if (format !== undefined) params.set('format', String(format));
|
||
const query = params.toString();
|
||
const path = `/api/series/${series}/${index}/data${query ? '?' + query : ''}`;
|
||
if (format === 'csv') {
|
||
return this.getText(path);
|
||
}
|
||
return this.getJson(path);
|
||
}
|
||
|
||
/**
|
||
* Get latest series value
|
||
*
|
||
* Returns the single most recent value for a series, unwrapped (not inside a SeriesData object).
|
||
*
|
||
* Endpoint: `GET /api/series/{series}/{index}/latest`
|
||
*
|
||
* @param {SeriesName} series - Series name
|
||
* @param {Index} index - Aggregation index
|
||
* @returns {Promise<*>}
|
||
*/
|
||
async getSeriesLatest(series, index) {
|
||
return this.getJson(`/api/series/${series}/${index}/latest`);
|
||
}
|
||
|
||
/**
|
||
* Get series data length
|
||
*
|
||
* Returns the total number of data points for a series at the given index.
|
||
*
|
||
* Endpoint: `GET /api/series/{series}/{index}/len`
|
||
*
|
||
* @param {SeriesName} series - Series name
|
||
* @param {Index} index - Aggregation index
|
||
* @returns {Promise<number>}
|
||
*/
|
||
async getSeriesLen(series, index) {
|
||
return this.getJson(`/api/series/${series}/${index}/len`);
|
||
}
|
||
|
||
/**
|
||
* Get series version
|
||
*
|
||
* Returns the current version of a series. Changes when the series data is updated.
|
||
*
|
||
* Endpoint: `GET /api/series/{series}/{index}/version`
|
||
*
|
||
* @param {SeriesName} series - Series name
|
||
* @param {Index} index - Aggregation index
|
||
* @returns {Promise<Version>}
|
||
*/
|
||
async getSeriesVersion(series, index) {
|
||
return this.getJson(`/api/series/${series}/${index}/version`);
|
||
}
|
||
|
||
/**
|
||
* Disk usage
|
||
*
|
||
* Returns the disk space used by BRK and Bitcoin data.
|
||
*
|
||
* Endpoint: `GET /api/server/disk`
|
||
* @returns {Promise<DiskUsage>}
|
||
*/
|
||
async getDiskUsage() {
|
||
return this.getJson(`/api/server/disk`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
* @returns {Promise<SyncStatus>}
|
||
*/
|
||
async getSyncStatus() {
|
||
return this.getJson(`/api/server/sync`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {Txid} txid
|
||
* @returns {Promise<Transaction>}
|
||
*/
|
||
async getTx(txid) {
|
||
return this.getJson(`/api/tx/${txid}`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
*
|
||
* @param {Txid} txid
|
||
* @returns {Promise<Hex>}
|
||
*/
|
||
async getTxHex(txid) {
|
||
return this.getJson(`/api/tx/${txid}/hex`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {Txid} txid - Transaction ID
|
||
* @param {Vout} vout - Output index
|
||
* @returns {Promise<TxOutspend>}
|
||
*/
|
||
async getTxOutspend(txid, vout) {
|
||
return this.getJson(`/api/tx/${txid}/outspend/${vout}`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
*
|
||
* @param {Txid} txid
|
||
* @returns {Promise<TxOutspend[]>}
|
||
*/
|
||
async getTxOutspends(txid) {
|
||
return this.getJson(`/api/tx/${txid}/outspends`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
*
|
||
* @param {Txid} txid
|
||
* @returns {Promise<TxStatus>}
|
||
*/
|
||
async getTxStatus(txid) {
|
||
return this.getJson(`/api/tx/${txid}/status`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
* @returns {Promise<DifficultyAdjustment>}
|
||
*/
|
||
async getDifficultyAdjustment() {
|
||
return this.getJson(`/api/v1/difficulty-adjustment`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
* @returns {Promise<MempoolBlock[]>}
|
||
*/
|
||
async getMempoolBlocks() {
|
||
return this.getJson(`/api/v1/fees/mempool-blocks`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
* @returns {Promise<RecommendedFees>}
|
||
*/
|
||
async getRecommendedFees() {
|
||
return this.getJson(`/api/v1/fees/recommended`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {TimePeriod} time_period
|
||
* @returns {Promise<*>}
|
||
*/
|
||
async getBlockFeeRates(time_period) {
|
||
return this.getJson(`/api/v1/mining/blocks/fee-rates/${time_period}`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {TimePeriod} time_period
|
||
* @returns {Promise<BlockFeesEntry[]>}
|
||
*/
|
||
async getBlockFees(time_period) {
|
||
return this.getJson(`/api/v1/mining/blocks/fees/${time_period}`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {TimePeriod} time_period
|
||
* @returns {Promise<BlockRewardsEntry[]>}
|
||
*/
|
||
async getBlockRewards(time_period) {
|
||
return this.getJson(`/api/v1/mining/blocks/rewards/${time_period}`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {TimePeriod} time_period
|
||
* @returns {Promise<BlockSizesWeights>}
|
||
*/
|
||
async getBlockSizesWeights(time_period) {
|
||
return this.getJson(`/api/v1/mining/blocks/sizes-weights/${time_period}`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {Timestamp} timestamp
|
||
* @returns {Promise<BlockTimestamp>}
|
||
*/
|
||
async getBlockByTimestamp(timestamp) {
|
||
return this.getJson(`/api/v1/mining/blocks/timestamp/${timestamp}`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
* @returns {Promise<DifficultyAdjustmentEntry[]>}
|
||
*/
|
||
async getDifficultyAdjustments() {
|
||
return this.getJson(`/api/v1/mining/difficulty-adjustments`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {TimePeriod} time_period
|
||
* @returns {Promise<DifficultyAdjustmentEntry[]>}
|
||
*/
|
||
async getDifficultyAdjustmentsByPeriod(time_period) {
|
||
return this.getJson(`/api/v1/mining/difficulty-adjustments/${time_period}`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
* @returns {Promise<HashrateSummary>}
|
||
*/
|
||
async getHashrate() {
|
||
return this.getJson(`/api/v1/mining/hashrate`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {TimePeriod} time_period
|
||
* @returns {Promise<HashrateSummary>}
|
||
*/
|
||
async getHashrateByPeriod(time_period) {
|
||
return this.getJson(`/api/v1/mining/hashrate/${time_period}`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {PoolSlug} slug
|
||
* @returns {Promise<PoolDetail>}
|
||
*/
|
||
async getPool(slug) {
|
||
return this.getJson(`/api/v1/mining/pool/${slug}`);
|
||
}
|
||
|
||
/**
|
||
* 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`
|
||
* @returns {Promise<PoolInfo[]>}
|
||
*/
|
||
async getPools() {
|
||
return this.getJson(`/api/v1/mining/pools`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {TimePeriod} time_period
|
||
* @returns {Promise<PoolsSummary>}
|
||
*/
|
||
async getPoolStats(time_period) {
|
||
return this.getJson(`/api/v1/mining/pools/${time_period}`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {number} block_count - Number of recent blocks to include
|
||
* @returns {Promise<RewardStats>}
|
||
*/
|
||
async getRewardStats(block_count) {
|
||
return this.getJson(`/api/v1/mining/reward-stats/${block_count}`);
|
||
}
|
||
|
||
/**
|
||
* 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}`
|
||
*
|
||
* @param {string} address - Bitcoin address to validate (can be any string)
|
||
* @returns {Promise<AddrValidation>}
|
||
*/
|
||
async validateAddress(address) {
|
||
return this.getJson(`/api/v1/validate-address/${address}`);
|
||
}
|
||
|
||
/**
|
||
* Health check
|
||
*
|
||
* Returns the health status of the API server, including uptime information.
|
||
*
|
||
* Endpoint: `GET /health`
|
||
* @returns {Promise<Health>}
|
||
*/
|
||
async getHealth() {
|
||
return this.getJson(`/health`);
|
||
}
|
||
|
||
/**
|
||
* OpenAPI specification
|
||
*
|
||
* Full OpenAPI 3.1 specification for this API.
|
||
*
|
||
* Endpoint: `GET /openapi.json`
|
||
* @returns {Promise<*>}
|
||
*/
|
||
async getOpenapi() {
|
||
return this.getJson(`/openapi.json`);
|
||
}
|
||
|
||
/**
|
||
* API version
|
||
*
|
||
* Returns the current version of the API server
|
||
*
|
||
* Endpoint: `GET /version`
|
||
* @returns {Promise<string>}
|
||
*/
|
||
async getVersion() {
|
||
return this.getJson(`/version`);
|
||
}
|
||
|
||
}
|
||
|
||
export { BrkClient, BrkError };
|