aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Morcos <morcos@chaincode.com>2016-11-11 14:16:42 -0500
committerAlex Morcos <morcos@chaincode.com>2017-01-04 12:09:34 -0500
commitebafdcabb10a89b491cdb8430bc43b0220d436df (patch)
tree9202ddfb803496ab2de305dc29a4a866cb49747a
parentd825838e6472f73c491f93506cb003472f071602 (diff)
Pass pointers to existing CTxMemPoolEntries to fee estimation
-rw-r--r--src/policy/fees.cpp10
-rw-r--r--src/policy/fees.h4
-rw-r--r--src/txmempool.cpp4
3 files changed, 9 insertions, 9 deletions
diff --git a/src/policy/fees.cpp b/src/policy/fees.cpp
index eb9fdc77d3..cb83bcf716 100644
--- a/src/policy/fees.cpp
+++ b/src/policy/fees.cpp
@@ -334,9 +334,9 @@ void CBlockPolicyEstimator::processTransaction(const CTxMemPoolEntry& entry, boo
mapMemPoolTxs[hash].bucketIndex = feeStats.NewTx(txHeight, (double)feeRate.GetFeePerK());
}
-void CBlockPolicyEstimator::processBlockTx(unsigned int nBlockHeight, const CTxMemPoolEntry& entry)
+void CBlockPolicyEstimator::processBlockTx(unsigned int nBlockHeight, const CTxMemPoolEntry* entry)
{
- if (!removeTx(entry.GetTx().GetHash())) {
+ if (!removeTx(entry->GetTx().GetHash())) {
// This transaction wasn't being tracked for fee estimation
return;
}
@@ -344,7 +344,7 @@ void CBlockPolicyEstimator::processBlockTx(unsigned int nBlockHeight, const CTxM
// How many blocks did it take for miners to include this transaction?
// blocksToConfirm is 1-based, so a transaction included in the earliest
// possible block has confirmation count of 1
- int blocksToConfirm = nBlockHeight - entry.GetHeight();
+ int blocksToConfirm = nBlockHeight - entry->GetHeight();
if (blocksToConfirm <= 0) {
// This can't happen because we don't process transactions from a block with a height
// lower than our greatest seen height
@@ -353,13 +353,13 @@ void CBlockPolicyEstimator::processBlockTx(unsigned int nBlockHeight, const CTxM
}
// Feerates are stored and reported as BTC-per-kb:
- CFeeRate feeRate(entry.GetFee(), entry.GetTxSize());
+ CFeeRate feeRate(entry->GetFee(), entry->GetTxSize());
feeStats.Record(blocksToConfirm, (double)feeRate.GetFeePerK());
}
void CBlockPolicyEstimator::processBlock(unsigned int nBlockHeight,
- std::vector<CTxMemPoolEntry>& entries)
+ std::vector<const CTxMemPoolEntry*>& entries)
{
if (nBlockHeight <= nBestSeenHeight) {
// Ignore side chains and re-orgs; assuming they are random
diff --git a/src/policy/fees.h b/src/policy/fees.h
index a61ae18130..e1684ebcb9 100644
--- a/src/policy/fees.h
+++ b/src/policy/fees.h
@@ -203,10 +203,10 @@ public:
/** Process all the transactions that have been included in a block */
void processBlock(unsigned int nBlockHeight,
- std::vector<CTxMemPoolEntry>& entries);
+ std::vector<const CTxMemPoolEntry*>& entries);
/** Process a transaction confirmed in a block*/
- void processBlockTx(unsigned int nBlockHeight, const CTxMemPoolEntry& entry);
+ void processBlockTx(unsigned int nBlockHeight, const CTxMemPoolEntry* entry);
/** Process a transaction accepted to the mempool*/
void processTransaction(const CTxMemPoolEntry& entry, bool validFeeEstimate);
diff --git a/src/txmempool.cpp b/src/txmempool.cpp
index e97099eb28..4f4540a1fc 100644
--- a/src/txmempool.cpp
+++ b/src/txmempool.cpp
@@ -594,14 +594,14 @@ void CTxMemPool::removeConflicts(const CTransaction &tx)
void CTxMemPool::removeForBlock(const std::vector<CTransactionRef>& vtx, unsigned int nBlockHeight)
{
LOCK(cs);
- std::vector<CTxMemPoolEntry> entries;
+ 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);
+ entries.push_back(&*i);
}
// Before the txs in the new block have been removed from the mempool, update policy estimates
minerPolicyEstimator->processBlock(nBlockHeight, entries);