Skip to content

Commit

Permalink
tx fees, policy: periodically flush fee estimates to fee_estimates.dat
Browse files Browse the repository at this point in the history
This reduces chances of having old estimates in fee_estimates.dat.
  • Loading branch information
ismaelsadeeq committed Jun 14, 2023
1 parent 681ecac commit 5b886f2
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1253,7 +1253,13 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
assert(!node.fee_estimator);
// Don't initialize fee estimation with old data if we don't relay transactions,
// as they would never get updated.
if (!ignores_incoming_txs) node.fee_estimator = std::make_unique<CBlockPolicyEstimator>(FeeestPath(args));
if (!ignores_incoming_txs) {
node.fee_estimator = std::make_unique<CBlockPolicyEstimator>(FeeestPath(args));

// Flush estimates to disk periodically
CBlockPolicyEstimator* fee_estimator = node.fee_estimator.get();
node.scheduler->scheduleEvery([fee_estimator] { fee_estimator->FlushFeeEstimates(); }, FEE_FLUSH_INTERVAL);
}

// Check port numbers
for (const std::string port_option : {
Expand Down
6 changes: 6 additions & 0 deletions src/policy/fees.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -903,10 +903,16 @@ CFeeRate CBlockPolicyEstimator::estimateSmartFee(int confTarget, FeeCalculation

void CBlockPolicyEstimator::Flush() {
FlushUnconfirmed();
FlushFeeEstimates();
}

void CBlockPolicyEstimator::FlushFeeEstimates()
{
AutoFile est_file{fsbridge::fopen(m_estimation_filepath, "wb")};
if (est_file.IsNull() || !Write(est_file)) {
LogPrintf("Failed to write fee estimates to %s. Continue anyway.\n", fs::PathToString(m_estimation_filepath));
} else {
LogPrintf("Flushed fee estimates to %s.\n", fs::PathToString(m_estimation_filepath.filename()));
}
}

Expand Down
9 changes: 9 additions & 0 deletions src/policy/fees.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,17 @@
#include <util/fs.h>

#include <array>
#include <chrono>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <vector>


// How often to flush fee estimates to fee_estimates.dat.
static constexpr std::chrono::hours FEE_FLUSH_INTERVAL{1};

class AutoFile;
class CTxMemPoolEntry;
class TxConfirmStats;
Expand Down Expand Up @@ -239,6 +244,10 @@ class CBlockPolicyEstimator
void Flush()
EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator);

/** Record current fee estimations. */
void FlushFeeEstimates()
EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator);

private:
mutable Mutex m_cs_fee_estimator;

Expand Down

0 comments on commit 5b886f2

Please sign in to comment.