Bitcoin Core 31.99.0
P2P Digital Currency
Classes | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
CBlockPolicyEstimator Class Reference

The BlockPolicyEstimator is used for estimating the feerate needed for a transaction to be included in a block within a certain number of blocks. More...

#include <block_policy_estimator.h>

Collaboration diagram for CBlockPolicyEstimator:
[legend]

Classes

struct  TxStatsInfo
 

Public Member Functions

 CBlockPolicyEstimator (const fs::path &estimation_filepath, bool read_stale_estimates)
 Create new BlockPolicyEstimator and initialize stats tracking classes with default values. More...
 
virtual ~CBlockPolicyEstimator ()
 
void processBlock (const std::vector< RemovedMempoolTransactionInfo > &txs_removed_for_block, unsigned int nBlockHeight) EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Process all the transactions that have been included in a block. More...
 
void processTransaction (const NewMempoolTransactionInfo &tx) EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Process a transaction accepted to the mempool. More...
 
bool removeTx (Txid hash) EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Remove a transaction from the mempool tracking stats for non BLOCK removal reasons. More...
 
CFeeRate estimateFee (int confTarget) const EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 DEPRECATED. More...
 
virtual CFeeRate estimateSmartFee (int confTarget, FeeCalculation *feeCalc, bool conservative) const EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Estimate feerate needed to get be included in a block within confTarget blocks. More...
 
CFeeRate estimateRawFee (int confTarget, double successThreshold, FeeEstimateHorizon horizon, EstimationResult *result=nullptr) const EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Return a specific fee estimate calculation with a given success threshold and time horizon, and optionally return detailed data about calculation. More...
 
bool Write (AutoFile &fileout) const EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Write estimation data to a file. More...
 
bool Read (AutoFile &filein) EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Read estimation data from a file. More...
 
void FlushUnconfirmed () EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Empty mempool transactions on shutdown to record failure to confirm for txs still in mempool. More...
 
virtual unsigned int HighestTargetTracked (FeeEstimateHorizon horizon) const EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Calculation of highest target that estimates are tracked for. More...
 
void Flush () EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Drop still unconfirmed transactions and record current estimations, if the fee estimation file is present. More...
 
void FlushFeeEstimates () EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Record current fee estimations. More...
 
std::chrono::hours GetFeeEstimatorFileAge ()
 Calculates the age of the file, since last modified. More...
 
unsigned int MaximumTarget () const EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Return the highest confirmation target for which an estimate can be provided. More...
 
util::Expected< FeeRateEstimation, FeeRateEstimationErrorEstimateFeeRate (int target, bool conservative) const EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator)
 Estimate the feerate needed to confirm within target blocks; wraps estimateSmartFee into a FeeRateEstimation. More...
 

Private Member Functions

unsigned int nBestSeenHeight GUARDED_BY (m_cs_fee_estimator)
 
unsigned int firstRecordedHeight GUARDED_BY (m_cs_fee_estimator)
 
unsigned int historicalFirst GUARDED_BY (m_cs_fee_estimator)
 
unsigned int historicalBest GUARDED_BY (m_cs_fee_estimator)
 
std::map< Txid, TxStatsInfo > mapMemPoolTxs GUARDED_BY (m_cs_fee_estimator)
 
std::unique_ptr< TxConfirmStats > feeStats PT_GUARDED_BY (m_cs_fee_estimator)
 Classes to track historical data on transaction confirmations. More...
 
std::unique_ptr< TxConfirmStats > shortStats PT_GUARDED_BY (m_cs_fee_estimator)
 
std::unique_ptr< TxConfirmStats > longStats PT_GUARDED_BY (m_cs_fee_estimator)
 
unsigned int trackedTxs GUARDED_BY (m_cs_fee_estimator)
 
unsigned int untrackedTxs GUARDED_BY (m_cs_fee_estimator)
 
std::vector< double > buckets GUARDED_BY (m_cs_fee_estimator)
 
std::map< double, unsigned int > bucketMap GUARDED_BY (m_cs_fee_estimator)
 
bool processBlockTx (unsigned int nBlockHeight, const RemovedMempoolTransactionInfo &tx) EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator)
 Process a transaction confirmed in a block. More...
 
double estimateCombinedFee (unsigned int confTarget, double successThreshold, bool checkShorterHorizon, EstimationResult *result) const EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator)
 Helper for estimateSmartFee. More...
 
double estimateConservativeFee (unsigned int doubleTarget, EstimationResult *result) const EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator)
 Helper for estimateSmartFee. More...
 
unsigned int BlockSpan () const EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator)
 Number of blocks of data recorded while fee estimates have been running. More...
 
unsigned int HistoricalBlockSpan () const EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator)
 Number of blocks of recorded fee estimate data represented in saved data file. More...
 
unsigned int MaxUsableEstimate () const EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator)
 Calculation of highest target that reasonable estimate can be provided for. More...
 
bool _removeTx (const Txid &hash, bool inBlock) EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator)
 A non-thread-safe helper for the removeTx function. More...
 

Private Attributes

const fs::path m_estimation_filepath
 
Mutex m_cs_fee_estimator
 

Static Private Attributes

static constexpr unsigned int SHORT_BLOCK_PERIODS = 12
 Track confirm delays up to 12 blocks for short horizon. More...
 
static constexpr unsigned int SHORT_SCALE = 1
 
static constexpr unsigned int MED_BLOCK_PERIODS = 24
 Track confirm delays up to 48 blocks for medium horizon. More...
 
static constexpr unsigned int MED_SCALE = 2
 
static constexpr unsigned int LONG_BLOCK_PERIODS = 42
 Track confirm delays up to 1008 blocks for long horizon. More...
 
static constexpr unsigned int LONG_SCALE = 24
 
static constexpr unsigned int OLDEST_ESTIMATE_HISTORY {6 * 1008}
 Historical estimates that are older than this aren't valid. More...
 
static constexpr double SHORT_DECAY = .962
 Decay of .962 is a half-life of 18 blocks or about 3 hours. More...
 
static constexpr double MED_DECAY = .9952
 Decay of .9952 is a half-life of 144 blocks or about 1 day. More...
 
static constexpr double LONG_DECAY = .99931
 Decay of .99931 is a half-life of 1008 blocks or about 1 week. More...
 
static constexpr double HALF_SUCCESS_PCT = .6
 Require greater than 60% of X feerate transactions to be confirmed within Y/2 blocks. More...
 
static constexpr double SUCCESS_PCT = .85
 Require greater than 85% of X feerate transactions to be confirmed within Y blocks. More...
 
static constexpr double DOUBLE_SUCCESS_PCT = .95
 Require greater than 95% of X feerate transactions to be confirmed within 2 * Y blocks. More...
 
static constexpr double SUFFICIENT_FEETXS = 0.1
 Require an avg of 0.1 tx in the combined feerate bucket per block to have stat significance. More...
 
static constexpr double SUFFICIENT_TXS_SHORT = 0.5
 Require an avg of 0.5 tx when using short decay since there are fewer blocks considered. More...
 
static constexpr double MIN_BUCKET_FEERATE = 100
 Minimum and Maximum values for tracking feerates The MIN_BUCKET_FEERATE should just be set to the lowest reasonable feerate. More...
 
static constexpr double MAX_BUCKET_FEERATE = 1e7
 
static constexpr double FEE_SPACING = 1.05
 Spacing of FeeRate buckets We have to lump transactions into buckets based on feerate, but we want to be able to give accurate estimates over a large range of potential feerates Therefore it makes sense to exponentially space the buckets. More...
 

Detailed Description

The BlockPolicyEstimator is used for estimating the feerate needed for a transaction to be included in a block within a certain number of blocks.

At a high level the algorithm works by grouping transactions into buckets based on having similar feerates and then tracking how long it takes transactions in the various buckets to be mined. It operates under the assumption that in general transactions of higher feerate will be included in blocks before transactions of lower feerate. So for example if you wanted to know what feerate you should put on a transaction to be included in a block within the next 5 blocks, you would start by looking at the bucket with the highest feerate transactions and verifying that a sufficiently high percentage of them were confirmed within 5 blocks and then you would look at the next highest feerate bucket, and so on, stopping at the last bucket to pass the test. The average feerate of transactions in this bucket will give you an indication of the lowest feerate you can put on a transaction and still have a sufficiently high chance of being confirmed within your desired 5 blocks.

Here is a brief description of the implementation: When a transaction enters the mempool, we track the height of the block chain at entry. All further calculations are conducted only on this set of "seen" transactions. Whenever a block comes in, we count the number of transactions in each bucket and the total amount of feerate paid in each bucket. Then we calculate how many blocks Y it took each transaction to be mined. We convert from a number of blocks to a number of periods Y' each encompassing "scale" blocks. This is tracked in 3 different data sets each up to a maximum number of periods. Within each data set we have an array of counters in each feerate bucket and we increment all the counters from Y' up to max periods representing that a tx was successfully confirmed in less than or equal to that many periods. We want to save a history of this information, so at any time we have a counter of the total number of transactions that happened in a given feerate bucket and the total number that were confirmed in each of the periods or less for any bucket. We save this history by keeping an exponentially decaying moving average of each one of these stats. This is done for a different decay in each of the 3 data sets to keep relevant data from different time horizons. Furthermore we also keep track of the number unmined (in mempool or left mempool without being included in a block) transactions in each bucket and for how many blocks they have been outstanding and use both of these numbers to increase the number of transactions we've seen in that feerate bucket when calculating an estimate for any number of confirmations below the number of blocks they've been outstanding.

We want to be able to estimate feerates that are needed on tx's to be included in a certain number of blocks. Every time a block is added to the best chain, this class records stats on the transactions included in that block

Definition at line 145 of file block_policy_estimator.h.

Constructor & Destructor Documentation

◆ CBlockPolicyEstimator()

CBlockPolicyEstimator::CBlockPolicyEstimator ( const fs::path estimation_filepath,
bool  read_stale_estimates 
)

Create new BlockPolicyEstimator and initialize stats tracking classes with default values.

Definition at line 561 of file block_policy_estimator.cpp.

Here is the call graph for this function:

◆ ~CBlockPolicyEstimator()

CBlockPolicyEstimator::~CBlockPolicyEstimator ( )
virtualdefault

Member Function Documentation

◆ _removeTx()

bool CBlockPolicyEstimator::_removeTx ( const Txid hash,
bool  inBlock 
)
private

A non-thread-safe helper for the removeTx function.

Definition at line 546 of file block_policy_estimator.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ BlockSpan()

unsigned int CBlockPolicyEstimator::BlockSpan ( ) const
private

Number of blocks of data recorded while fee estimates have been running.

Definition at line 783 of file block_policy_estimator.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ estimateCombinedFee()

double CBlockPolicyEstimator::estimateCombinedFee ( unsigned int  confTarget,
double  successThreshold,
bool  checkShorterHorizon,
EstimationResult result 
) const
private

Helper for estimateSmartFee.

Return a fee estimate at the required successThreshold from the shortest time horizon which tracks confirmations up to the desired target.

If checkShorterHorizon is requested, also allow short time horizon estimates for a lower target to reduce the given answer

Definition at line 811 of file block_policy_estimator.cpp.

Here is the caller graph for this function:

◆ estimateConservativeFee()

double CBlockPolicyEstimator::estimateConservativeFee ( unsigned int  doubleTarget,
EstimationResult result 
) const
private

Helper for estimateSmartFee.

Ensure that for a conservative estimate, the DOUBLE_SUCCESS_PCT is also met at 2 * target for any longer time horizons.

Definition at line 850 of file block_policy_estimator.cpp.

Here is the caller graph for this function:

◆ estimateFee()

CFeeRate CBlockPolicyEstimator::estimateFee ( int  confTarget) const

DEPRECATED.

Return a feerate estimate

Definition at line 721 of file block_policy_estimator.cpp.

Here is the call graph for this function:

◆ EstimateFeeRate()

util::Expected< FeeRateEstimation, FeeRateEstimationError > CBlockPolicyEstimator::EstimateFeeRate ( int  target,
bool  conservative 
) const

Estimate the feerate needed to confirm within target blocks; wraps estimateSmartFee into a FeeRateEstimation.

Definition at line 963 of file block_policy_estimator.cpp.

Here is the call graph for this function:

◆ estimateRawFee()

CFeeRate CBlockPolicyEstimator::estimateRawFee ( int  confTarget,
double  successThreshold,
FeeEstimateHorizon  horizon,
EstimationResult result = nullptr 
) const

Return a specific fee estimate calculation with a given success threshold and time horizon, and optionally return detailed data about calculation.

Definition at line 730 of file block_policy_estimator.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ estimateSmartFee()

CFeeRate CBlockPolicyEstimator::estimateSmartFee ( int  confTarget,
FeeCalculation feeCalc,
bool  conservative 
) const
virtual

Estimate feerate needed to get be included in a block within confTarget blocks.

estimateSmartFee returns the max of the feerates calculated with a 60% threshold required at target / 2, an 85% threshold required at target and a 95% threshold required at 2 * target.

If no answer can be given at confTarget, return an estimate at the closest target where one can be given. 'conservative' estimates are valid over longer time horizons also.

Each calculation is performed at the shortest time horizon which tracks the required target. Conservative estimates, however, required the 95% threshold at 2 * target be met for any longer time horizons also.

true is passed to estimateCombined fee for target/2 and target so that we check the max confirms for shorter time horizons as well. This is necessary to preserve monotonically increasing estimates. For non-conservative estimates we do the same thing for 2*target, but for conservative estimates we want to skip these shorter horizons checks for 2*target because we are taking the max over all time horizons so we already have monotonically increasing estimates and the purpose of conservative estimates is not to let short term fluctuations lower our estimates by too much.

Note: In certain rare edge cases, monotonically increasing estimates may not be guaranteed. Specifically, given two targets N and M, where M > N, if a sub-estimate for target N fails to return a valid fee rate, while target M has valid fee rate for that sub-estimate, target M may result in a higher fee rate estimate than target N.

See: https://github.com/bitcoin/bitcoin/issues/11800#issuecomment-349697807

Definition at line 874 of file block_policy_estimator.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Flush()

void CBlockPolicyEstimator::Flush ( )

Drop still unconfirmed transactions and record current estimations, if the fee estimation file is present.

Definition at line 978 of file block_policy_estimator.cpp.

Here is the call graph for this function:

◆ FlushFeeEstimates()

void CBlockPolicyEstimator::FlushFeeEstimates ( )

Record current fee estimations.

Definition at line 983 of file block_policy_estimator.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ FlushUnconfirmed()

void CBlockPolicyEstimator::FlushUnconfirmed ( )

Empty mempool transactions on shutdown to record failure to confirm for txs still in mempool.

Definition at line 1093 of file block_policy_estimator.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetFeeEstimatorFileAge()

std::chrono::hours CBlockPolicyEstimator::GetFeeEstimatorFileAge ( )

Calculates the age of the file, since last modified.

Definition at line 1107 of file block_policy_estimator.cpp.

Here is the caller graph for this function:

◆ GUARDED_BY() [1/9]

unsigned int nBestSeenHeight CBlockPolicyEstimator::GUARDED_BY ( m_cs_fee_estimator  )
inlineprivate

Definition at line 276 of file block_policy_estimator.h.

◆ GUARDED_BY() [2/9]

unsigned int firstRecordedHeight CBlockPolicyEstimator::GUARDED_BY ( m_cs_fee_estimator  )
inlineprivate

Definition at line 277 of file block_policy_estimator.h.

◆ GUARDED_BY() [3/9]

unsigned int historicalFirst CBlockPolicyEstimator::GUARDED_BY ( m_cs_fee_estimator  )
inlineprivate

Definition at line 278 of file block_policy_estimator.h.

◆ GUARDED_BY() [4/9]

unsigned int historicalBest CBlockPolicyEstimator::GUARDED_BY ( m_cs_fee_estimator  )
inlineprivate

Definition at line 279 of file block_policy_estimator.h.

◆ GUARDED_BY() [5/9]

std::map< Txid, TxStatsInfo > mapMemPoolTxs CBlockPolicyEstimator::GUARDED_BY ( m_cs_fee_estimator  )
private

◆ GUARDED_BY() [6/9]

unsigned int trackedTxs CBlockPolicyEstimator::GUARDED_BY ( m_cs_fee_estimator  )
inlineprivate

Definition at line 296 of file block_policy_estimator.h.

◆ GUARDED_BY() [7/9]

unsigned int untrackedTxs CBlockPolicyEstimator::GUARDED_BY ( m_cs_fee_estimator  )
inlineprivate

Definition at line 297 of file block_policy_estimator.h.

◆ GUARDED_BY() [8/9]

std::vector< double > buckets CBlockPolicyEstimator::GUARDED_BY ( m_cs_fee_estimator  )
private

◆ GUARDED_BY() [9/9]

std::map< double, unsigned int > bucketMap CBlockPolicyEstimator::GUARDED_BY ( m_cs_fee_estimator  )
private

◆ HighestTargetTracked()

unsigned int CBlockPolicyEstimator::HighestTargetTracked ( FeeEstimateHorizon  horizon) const
virtual

Calculation of highest target that estimates are tracked for.

Definition at line 766 of file block_policy_estimator.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ HistoricalBlockSpan()

unsigned int CBlockPolicyEstimator::HistoricalBlockSpan ( ) const
private

Number of blocks of recorded fee estimate data represented in saved data file.

Definition at line 791 of file block_policy_estimator.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MaximumTarget()

unsigned int CBlockPolicyEstimator::MaximumTarget ( ) const

Return the highest confirmation target for which an estimate can be provided.

Definition at line 973 of file block_policy_estimator.cpp.

Here is the call graph for this function:

◆ MaxUsableEstimate()

unsigned int CBlockPolicyEstimator::MaxUsableEstimate ( ) const
private

Calculation of highest target that reasonable estimate can be provided for.

Definition at line 801 of file block_policy_estimator.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ processBlock()

void CBlockPolicyEstimator::processBlock ( const std::vector< RemovedMempoolTransactionInfo > &  txs_removed_for_block,
unsigned int  nBlockHeight 
)

Process all the transactions that have been included in a block.

Definition at line 672 of file block_policy_estimator.cpp.

Here is the call graph for this function:

◆ processBlockTx()

bool CBlockPolicyEstimator::processBlockTx ( unsigned int  nBlockHeight,
const RemovedMempoolTransactionInfo tx 
)
private

Process a transaction confirmed in a block.

Definition at line 644 of file block_policy_estimator.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ processTransaction()

void CBlockPolicyEstimator::processTransaction ( const NewMempoolTransactionInfo tx)

Process a transaction accepted to the mempool.

Definition at line 599 of file block_policy_estimator.cpp.

Here is the call graph for this function:

◆ PT_GUARDED_BY() [1/3]

std::unique_ptr< TxConfirmStats > feeStats CBlockPolicyEstimator::PT_GUARDED_BY ( m_cs_fee_estimator  )
private

Classes to track historical data on transaction confirmations.

◆ PT_GUARDED_BY() [2/3]

std::unique_ptr< TxConfirmStats > shortStats CBlockPolicyEstimator::PT_GUARDED_BY ( m_cs_fee_estimator  )
private

◆ PT_GUARDED_BY() [3/3]

std::unique_ptr< TxConfirmStats > longStats CBlockPolicyEstimator::PT_GUARDED_BY ( m_cs_fee_estimator  )
private

◆ Read()

bool CBlockPolicyEstimator::Read ( AutoFile filein)

Read estimation data from a file.

Definition at line 1031 of file block_policy_estimator.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ removeTx()

bool CBlockPolicyEstimator::removeTx ( Txid  hash)

Remove a transaction from the mempool tracking stats for non BLOCK removal reasons.

Definition at line 540 of file block_policy_estimator.cpp.

Here is the call graph for this function:

◆ Write()

bool CBlockPolicyEstimator::Write ( AutoFile fileout) const

Write estimation data to a file.

Definition at line 1007 of file block_policy_estimator.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ DOUBLE_SUCCESS_PCT

constexpr double CBlockPolicyEstimator::DOUBLE_SUCCESS_PCT = .95
staticconstexprprivate

Require greater than 95% of X feerate transactions to be confirmed within 2 * Y blocks.

Definition at line 172 of file block_policy_estimator.h.

◆ FEE_SPACING

constexpr double CBlockPolicyEstimator::FEE_SPACING = 1.05
staticconstexprprivate

Spacing of FeeRate buckets We have to lump transactions into buckets based on feerate, but we want to be able to give accurate estimates over a large range of potential feerates Therefore it makes sense to exponentially space the buckets.

Definition at line 196 of file block_policy_estimator.h.

◆ HALF_SUCCESS_PCT

constexpr double CBlockPolicyEstimator::HALF_SUCCESS_PCT = .6
staticconstexprprivate

Require greater than 60% of X feerate transactions to be confirmed within Y/2 blocks.

Definition at line 168 of file block_policy_estimator.h.

◆ LONG_BLOCK_PERIODS

constexpr unsigned int CBlockPolicyEstimator::LONG_BLOCK_PERIODS = 42
staticconstexprprivate

Track confirm delays up to 1008 blocks for long horizon.

Definition at line 155 of file block_policy_estimator.h.

◆ LONG_DECAY

constexpr double CBlockPolicyEstimator::LONG_DECAY = .99931
staticconstexprprivate

Decay of .99931 is a half-life of 1008 blocks or about 1 week.

Definition at line 165 of file block_policy_estimator.h.

◆ LONG_SCALE

constexpr unsigned int CBlockPolicyEstimator::LONG_SCALE = 24
staticconstexprprivate

Definition at line 156 of file block_policy_estimator.h.

◆ m_cs_fee_estimator

Mutex CBlockPolicyEstimator::m_cs_fee_estimator
mutableprivate

Definition at line 274 of file block_policy_estimator.h.

◆ m_estimation_filepath

const fs::path CBlockPolicyEstimator::m_estimation_filepath
private

Definition at line 198 of file block_policy_estimator.h.

◆ MAX_BUCKET_FEERATE

constexpr double CBlockPolicyEstimator::MAX_BUCKET_FEERATE = 1e7
staticconstexprprivate

Definition at line 189 of file block_policy_estimator.h.

◆ MED_BLOCK_PERIODS

constexpr unsigned int CBlockPolicyEstimator::MED_BLOCK_PERIODS = 24
staticconstexprprivate

Track confirm delays up to 48 blocks for medium horizon.

Definition at line 152 of file block_policy_estimator.h.

◆ MED_DECAY

constexpr double CBlockPolicyEstimator::MED_DECAY = .9952
staticconstexprprivate

Decay of .9952 is a half-life of 144 blocks or about 1 day.

Definition at line 163 of file block_policy_estimator.h.

◆ MED_SCALE

constexpr unsigned int CBlockPolicyEstimator::MED_SCALE = 2
staticconstexprprivate

Definition at line 153 of file block_policy_estimator.h.

◆ MIN_BUCKET_FEERATE

constexpr double CBlockPolicyEstimator::MIN_BUCKET_FEERATE = 100
staticconstexprprivate

Minimum and Maximum values for tracking feerates The MIN_BUCKET_FEERATE should just be set to the lowest reasonable feerate.

MIN_BUCKET_FEERATE has historically inherited DEFAULT_MIN_RELAY_TX_FEE. It is hardcoded because changing it is disruptive, as it invalidates existing fee estimate files.

Whenever DEFAULT_MIN_RELAY_TX_FEE changes, this value should be updated accordingly. At the same time CURRENT_FEES_FILE_VERSION should be bumped.

Definition at line 188 of file block_policy_estimator.h.

◆ OLDEST_ESTIMATE_HISTORY

constexpr unsigned int CBlockPolicyEstimator::OLDEST_ESTIMATE_HISTORY {6 * 1008}
staticconstexprprivate

Historical estimates that are older than this aren't valid.

Definition at line 158 of file block_policy_estimator.h.

◆ SHORT_BLOCK_PERIODS

constexpr unsigned int CBlockPolicyEstimator::SHORT_BLOCK_PERIODS = 12
staticconstexprprivate

Track confirm delays up to 12 blocks for short horizon.

Definition at line 149 of file block_policy_estimator.h.

◆ SHORT_DECAY

constexpr double CBlockPolicyEstimator::SHORT_DECAY = .962
staticconstexprprivate

Decay of .962 is a half-life of 18 blocks or about 3 hours.

Definition at line 161 of file block_policy_estimator.h.

◆ SHORT_SCALE

constexpr unsigned int CBlockPolicyEstimator::SHORT_SCALE = 1
staticconstexprprivate

Definition at line 150 of file block_policy_estimator.h.

◆ SUCCESS_PCT

constexpr double CBlockPolicyEstimator::SUCCESS_PCT = .85
staticconstexprprivate

Require greater than 85% of X feerate transactions to be confirmed within Y blocks.

Definition at line 170 of file block_policy_estimator.h.

◆ SUFFICIENT_FEETXS

constexpr double CBlockPolicyEstimator::SUFFICIENT_FEETXS = 0.1
staticconstexprprivate

Require an avg of 0.1 tx in the combined feerate bucket per block to have stat significance.

Definition at line 175 of file block_policy_estimator.h.

◆ SUFFICIENT_TXS_SHORT

constexpr double CBlockPolicyEstimator::SUFFICIENT_TXS_SHORT = 0.5
staticconstexprprivate

Require an avg of 0.5 tx when using short decay since there are fewer blocks considered.

Definition at line 177 of file block_policy_estimator.h.


The documentation for this class was generated from the following files: