mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-21 22:31:21 +02:00
tx fees, policy: update CBlockPolicyEstimator::processBlock
parameter
Update `processBlock` parameter to reference to a vector of `RemovedMempoolTransactionInfo`.
This commit is contained in:
parent
bfcd401368
commit
91532bd382
@ -618,10 +618,10 @@ void CBlockPolicyEstimator::processTransaction(const CTxMemPoolEntry& entry, boo
|
|||||||
assert(bucketIndex == bucketIndex3);
|
assert(bucketIndex == bucketIndex3);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CBlockPolicyEstimator::processBlockTx(unsigned int nBlockHeight, const CTxMemPoolEntry* entry)
|
bool CBlockPolicyEstimator::processBlockTx(unsigned int nBlockHeight, const RemovedMempoolTransactionInfo& tx)
|
||||||
{
|
{
|
||||||
AssertLockHeld(m_cs_fee_estimator);
|
AssertLockHeld(m_cs_fee_estimator);
|
||||||
if (!_removeTx(entry->GetTx().GetHash(), true)) {
|
if (!_removeTx(tx.info.m_tx->GetHash(), true)) {
|
||||||
// This transaction wasn't being tracked for fee estimation
|
// This transaction wasn't being tracked for fee estimation
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -629,7 +629,7 @@ bool CBlockPolicyEstimator::processBlockTx(unsigned int nBlockHeight, const CTxM
|
|||||||
// How many blocks did it take for miners to include this transaction?
|
// How many blocks did it take for miners to include this transaction?
|
||||||
// blocksToConfirm is 1-based, so a transaction included in the earliest
|
// blocksToConfirm is 1-based, so a transaction included in the earliest
|
||||||
// possible block has confirmation count of 1
|
// possible block has confirmation count of 1
|
||||||
int blocksToConfirm = nBlockHeight - entry->GetHeight();
|
int blocksToConfirm = nBlockHeight - tx.info.txHeight;
|
||||||
if (blocksToConfirm <= 0) {
|
if (blocksToConfirm <= 0) {
|
||||||
// This can't happen because we don't process transactions from a block with a height
|
// This can't happen because we don't process transactions from a block with a height
|
||||||
// lower than our greatest seen height
|
// lower than our greatest seen height
|
||||||
@ -638,7 +638,7 @@ bool CBlockPolicyEstimator::processBlockTx(unsigned int nBlockHeight, const CTxM
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Feerates are stored and reported as BTC-per-kb:
|
// Feerates are stored and reported as BTC-per-kb:
|
||||||
CFeeRate feeRate(entry->GetFee(), entry->GetTxSize());
|
CFeeRate feeRate(tx.info.m_fee, tx.info.m_virtual_transaction_size);
|
||||||
|
|
||||||
feeStats->Record(blocksToConfirm, static_cast<double>(feeRate.GetFeePerK()));
|
feeStats->Record(blocksToConfirm, static_cast<double>(feeRate.GetFeePerK()));
|
||||||
shortStats->Record(blocksToConfirm, static_cast<double>(feeRate.GetFeePerK()));
|
shortStats->Record(blocksToConfirm, static_cast<double>(feeRate.GetFeePerK()));
|
||||||
@ -646,8 +646,8 @@ bool CBlockPolicyEstimator::processBlockTx(unsigned int nBlockHeight, const CTxM
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBlockPolicyEstimator::processBlock(unsigned int nBlockHeight,
|
void CBlockPolicyEstimator::processBlock(const std::vector<RemovedMempoolTransactionInfo>& txs_removed_for_block,
|
||||||
std::vector<const CTxMemPoolEntry*>& entries)
|
unsigned int nBlockHeight)
|
||||||
{
|
{
|
||||||
LOCK(m_cs_fee_estimator);
|
LOCK(m_cs_fee_estimator);
|
||||||
if (nBlockHeight <= nBestSeenHeight) {
|
if (nBlockHeight <= nBestSeenHeight) {
|
||||||
@ -676,8 +676,8 @@ void CBlockPolicyEstimator::processBlock(unsigned int nBlockHeight,
|
|||||||
|
|
||||||
unsigned int countedTxs = 0;
|
unsigned int countedTxs = 0;
|
||||||
// Update averages with data points from current block
|
// Update averages with data points from current block
|
||||||
for (const auto& entry : entries) {
|
for (const auto& tx : txs_removed_for_block) {
|
||||||
if (processBlockTx(nBlockHeight, entry))
|
if (processBlockTx(nBlockHeight, tx))
|
||||||
countedTxs++;
|
countedTxs++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -688,7 +688,7 @@ void CBlockPolicyEstimator::processBlock(unsigned int nBlockHeight,
|
|||||||
|
|
||||||
|
|
||||||
LogPrint(BCLog::ESTIMATEFEE, "Blockpolicy estimates updated by %u of %u block txs, since last block %u of %u tracked, mempool map size %u, max target %u from %s\n",
|
LogPrint(BCLog::ESTIMATEFEE, "Blockpolicy estimates updated by %u of %u block txs, since last block %u of %u tracked, mempool map size %u, max target %u from %s\n",
|
||||||
countedTxs, entries.size(), trackedTxs, trackedTxs + untrackedTxs, mapMemPoolTxs.size(),
|
countedTxs, txs_removed_for_block.size(), trackedTxs, trackedTxs + untrackedTxs, mapMemPoolTxs.size(),
|
||||||
MaxUsableEstimate(), HistoricalBlockSpan() > BlockSpan() ? "historical" : "current");
|
MaxUsableEstimate(), HistoricalBlockSpan() > BlockSpan() ? "historical" : "current");
|
||||||
|
|
||||||
trackedTxs = 0;
|
trackedTxs = 0;
|
||||||
|
@ -37,6 +37,7 @@ static constexpr bool DEFAULT_ACCEPT_STALE_FEE_ESTIMATES{false};
|
|||||||
class AutoFile;
|
class AutoFile;
|
||||||
class CTxMemPoolEntry;
|
class CTxMemPoolEntry;
|
||||||
class TxConfirmStats;
|
class TxConfirmStats;
|
||||||
|
struct RemovedMempoolTransactionInfo;
|
||||||
|
|
||||||
/* Identifier for each of the 3 different TxConfirmStats which will track
|
/* Identifier for each of the 3 different TxConfirmStats which will track
|
||||||
* history over different time horizons. */
|
* history over different time horizons. */
|
||||||
@ -201,8 +202,8 @@ public:
|
|||||||
~CBlockPolicyEstimator();
|
~CBlockPolicyEstimator();
|
||||||
|
|
||||||
/** Process all the transactions that have been included in a block */
|
/** Process all the transactions that have been included in a block */
|
||||||
void processBlock(unsigned int nBlockHeight,
|
void processBlock(const std::vector<RemovedMempoolTransactionInfo>& txs_removed_for_block,
|
||||||
std::vector<const CTxMemPoolEntry*>& entries)
|
unsigned int nBlockHeight)
|
||||||
EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator);
|
EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator);
|
||||||
|
|
||||||
/** Process a transaction accepted to the mempool*/
|
/** Process a transaction accepted to the mempool*/
|
||||||
@ -290,7 +291,7 @@ private:
|
|||||||
std::map<double, unsigned int> bucketMap GUARDED_BY(m_cs_fee_estimator); // Map of bucket upper-bound to index into all vectors by bucket
|
std::map<double, unsigned int> bucketMap GUARDED_BY(m_cs_fee_estimator); // Map of bucket upper-bound to index into all vectors by bucket
|
||||||
|
|
||||||
/** Process a transaction confirmed in a block*/
|
/** Process a transaction confirmed in a block*/
|
||||||
bool processBlockTx(unsigned int nBlockHeight, const CTxMemPoolEntry* entry) EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator);
|
bool processBlockTx(unsigned int nBlockHeight, const RemovedMempoolTransactionInfo& tx) EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator);
|
||||||
|
|
||||||
/** Helper for estimateSmartFee */
|
/** Helper for estimateSmartFee */
|
||||||
double estimateCombinedFee(unsigned int confTarget, double successThreshold, bool checkShorterHorizon, EstimationResult *result) const EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator);
|
double estimateCombinedFee(unsigned int confTarget, double successThreshold, bool checkShorterHorizon, EstimationResult *result) const EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator);
|
||||||
|
@ -61,12 +61,12 @@ FUZZ_TARGET(policy_estimator, .init = initialize_policy_estimator)
|
|||||||
const CTransaction tx{*mtx};
|
const CTransaction tx{*mtx};
|
||||||
mempool_entries.push_back(ConsumeTxMemPoolEntry(fuzzed_data_provider, tx));
|
mempool_entries.push_back(ConsumeTxMemPoolEntry(fuzzed_data_provider, tx));
|
||||||
}
|
}
|
||||||
std::vector<const CTxMemPoolEntry*> ptrs;
|
std::vector<RemovedMempoolTransactionInfo> txs;
|
||||||
ptrs.reserve(mempool_entries.size());
|
txs.reserve(mempool_entries.size());
|
||||||
for (const CTxMemPoolEntry& mempool_entry : mempool_entries) {
|
for (const CTxMemPoolEntry& mempool_entry : mempool_entries) {
|
||||||
ptrs.push_back(&mempool_entry);
|
txs.emplace_back(mempool_entry);
|
||||||
}
|
}
|
||||||
block_policy_estimator.processBlock(fuzzed_data_provider.ConsumeIntegral<unsigned int>(), ptrs);
|
block_policy_estimator.processBlock(txs, fuzzed_data_provider.ConsumeIntegral<unsigned int>());
|
||||||
},
|
},
|
||||||
[&] {
|
[&] {
|
||||||
(void)block_policy_estimator.removeTx(ConsumeUInt256(fuzzed_data_provider), /*inBlock=*/fuzzed_data_provider.ConsumeBool());
|
(void)block_policy_estimator.removeTx(ConsumeUInt256(fuzzed_data_provider), /*inBlock=*/fuzzed_data_provider.ConsumeBool());
|
||||||
|
@ -643,17 +643,6 @@ void CTxMemPool::removeConflicts(const CTransaction &tx)
|
|||||||
void CTxMemPool::removeForBlock(const std::vector<CTransactionRef>& vtx, unsigned int nBlockHeight)
|
void CTxMemPool::removeForBlock(const std::vector<CTransactionRef>& vtx, unsigned int nBlockHeight)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs);
|
AssertLockHeld(cs);
|
||||||
std::vector<const CTxMemPoolEntry*> entries;
|
|
||||||
for (const auto& tx : vtx)
|
|
||||||
{
|
|
||||||
uint256 hash = tx->GetHash();
|
|
||||||
|
|
||||||
indexed_transaction_set::iterator i = mapTx.find(hash);
|
|
||||||
if (i != mapTx.end())
|
|
||||||
entries.push_back(&*i);
|
|
||||||
}
|
|
||||||
// Before the txs in the new block have been removed from the mempool, update policy estimates
|
|
||||||
if (minerPolicyEstimator) {minerPolicyEstimator->processBlock(nBlockHeight, entries);}
|
|
||||||
std::vector<RemovedMempoolTransactionInfo> txs_removed_for_block;
|
std::vector<RemovedMempoolTransactionInfo> txs_removed_for_block;
|
||||||
txs_removed_for_block.reserve(vtx.size());
|
txs_removed_for_block.reserve(vtx.size());
|
||||||
for (const auto& tx : vtx)
|
for (const auto& tx : vtx)
|
||||||
@ -668,6 +657,10 @@ void CTxMemPool::removeForBlock(const std::vector<CTransactionRef>& vtx, unsigne
|
|||||||
removeConflicts(*tx);
|
removeConflicts(*tx);
|
||||||
ClearPrioritisation(tx->GetHash());
|
ClearPrioritisation(tx->GetHash());
|
||||||
}
|
}
|
||||||
|
// Update policy estimates
|
||||||
|
if (minerPolicyEstimator) {
|
||||||
|
minerPolicyEstimator->processBlock(txs_removed_for_block, nBlockHeight);
|
||||||
|
}
|
||||||
GetMainSignals().MempoolTransactionsRemovedForBlock(txs_removed_for_block, nBlockHeight);
|
GetMainSignals().MempoolTransactionsRemovedForBlock(txs_removed_for_block, nBlockHeight);
|
||||||
lastRollingFeeUpdate = GetTime();
|
lastRollingFeeUpdate = GetTime();
|
||||||
blockSinceLastRollingFeeBump = true;
|
blockSinceLastRollingFeeBump = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user