Page MenuHomePhabricator

D15790.id46499.diff
No OneTemporary

D15790.id46499.diff

diff --git a/src/bench/mempool_eviction.cpp b/src/bench/mempool_eviction.cpp
--- a/src/bench/mempool_eviction.cpp
+++ b/src/bench/mempool_eviction.cpp
@@ -4,6 +4,7 @@
#include <bench/bench.h>
#include <consensus/amount.h>
+#include <kernel/txmempool_entry.h>
#include <policy/policy.h>
#include <test/util/setup_common.h>
#include <txmempool.h>
diff --git a/src/bench/mempool_stress.cpp b/src/bench/mempool_stress.cpp
--- a/src/bench/mempool_stress.cpp
+++ b/src/bench/mempool_stress.cpp
@@ -3,6 +3,7 @@
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <bench/bench.h>
+#include <kernel/txmempool_entry.h>
#include <policy/policy.h>
#include <random.h>
#include <test/util/setup_common.h>
diff --git a/src/bench/rpc_mempool.cpp b/src/bench/rpc_mempool.cpp
--- a/src/bench/rpc_mempool.cpp
+++ b/src/bench/rpc_mempool.cpp
@@ -5,6 +5,7 @@
#include <bench/bench.h>
#include <chainparamsbase.h>
#include <consensus/amount.h>
+#include <kernel/txmempool_entry.h>
#include <rpc/mempool.h>
#include <test/util/setup_common.h>
#include <txmempool.h>
diff --git a/src/kernel/txmempool_entry.h b/src/kernel/txmempool_entry.h
new file mode 100644
--- /dev/null
+++ b/src/kernel/txmempool_entry.h
@@ -0,0 +1,154 @@
+// Copyright (c) 2009-2022 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#ifndef BITCOIN_KERNEL_TXMEMPOOL_ENTRY_H
+#define BITCOIN_KERNEL_TXMEMPOOL_ENTRY_H
+
+#include <consensus/amount.h>
+#include <core_memusage.h>
+#include <policy/policy.h>
+#include <policy/settings.h>
+#include <primitives/transaction.h>
+#include <rcu.h>
+
+#include <chrono>
+#include <cstddef>
+#include <cstdint>
+#include <functional>
+#include <memory>
+#include <set>
+
+struct LockPoints {
+ // Will be set to the blockchain height and median time past values that
+ // would be necessary to satisfy all relative locktime constraints (BIP68)
+ // of this tx given our view of block chain history
+ int height{0};
+ int64_t time{0};
+};
+
+struct CompareIteratorById {
+ // SFINAE for T where T is either a std::reference_wrapper<T> (e.g. a
+ // CTxMemPoolEntryRef) or an iterator to a pointer type (e.g., a txiter)
+ template <typename T>
+ bool operator()(const std::reference_wrapper<T> &a,
+ const std::reference_wrapper<T> &b) const {
+ return a.get()->GetTx().GetId() < b.get()->GetTx().GetId();
+ }
+ template <typename T> bool operator()(const T &a, const T &b) const {
+ return (*a)->GetTx().GetId() < (*b)->GetTx().GetId();
+ }
+};
+/** Iterate txs in reverse-topological order */
+struct CompareIteratorByRevEntryId {
+ template <typename T>
+ bool operator()(const std::reference_wrapper<T> &a,
+ const std::reference_wrapper<T> &b) const {
+ return a.get()->GetEntryId() > b.get()->GetEntryId();
+ }
+
+ template <typename T> bool operator()(const T &a, const T &b) const {
+ return (*a)->GetEntryId() > (*b)->GetEntryId();
+ }
+};
+
+class CTxMemPoolEntry;
+using CTxMemPoolEntryRef = RCUPtr<CTxMemPoolEntry>;
+
+/** \class CTxMemPoolEntry
+ *
+ * CTxMemPoolEntry stores data about the corresponding transaction, as well as
+ * data about all in-mempool transactions that depend on the transaction
+ * ("descendant" transactions).
+ */
+
+class CTxMemPoolEntry {
+public:
+ // two aliases, should the types ever diverge
+ typedef std::set<std::reference_wrapper<const CTxMemPoolEntryRef>,
+ CompareIteratorById>
+ Parents;
+ typedef std::set<std::reference_wrapper<const CTxMemPoolEntryRef>,
+ CompareIteratorById>
+ Children;
+
+private:
+ //! Unique identifier -- used for topological sorting
+ uint64_t entryId = 0;
+
+ const CTransactionRef tx;
+ mutable Parents m_parents;
+ mutable Children m_children;
+ //! Cached to avoid expensive parent-transaction lookups
+ const Amount nFee;
+ //! ... and avoid recomputing tx size
+ const size_t nTxSize;
+ //! ... and total memory usage
+ const size_t nUsageSize;
+ //! Local time when entering the mempool
+ const int64_t nTime;
+ //! Chain height when entering the mempool
+ const unsigned int entryHeight;
+ //! Total sigChecks
+ const int64_t sigChecks;
+ //! Used for determining the priority of the transaction for mining in a
+ //! block
+ Amount feeDelta{Amount::zero()};
+ //! Track the height and time at which tx was final
+ LockPoints lockPoints;
+
+ IMPLEMENT_RCU_REFCOUNT(uint64_t);
+
+public:
+ CTxMemPoolEntry(const CTransactionRef &_tx, const Amount fee, int64_t time,
+ unsigned int entry_height, int64_t sigchecks, LockPoints lp)
+ : tx{_tx}, nFee{fee},
+ nTxSize(tx->GetTotalSize()), nUsageSize{RecursiveDynamicUsage(tx)},
+ nTime(time), entryHeight{entry_height}, sigChecks(sigchecks),
+ lockPoints(lp) {}
+
+ CTxMemPoolEntry(const CTxMemPoolEntry &other) = delete;
+ CTxMemPoolEntry(CTxMemPoolEntry &&other)
+ : entryId(other.entryId), tx(std::move(other.tx)),
+ m_parents(std::move(other.m_parents)),
+ m_children(std::move(other.m_children)), nFee(other.nFee),
+ nTxSize(other.nTxSize), nUsageSize(other.nUsageSize),
+ nTime(other.nTime), entryHeight(other.entryHeight),
+ sigChecks(other.sigChecks), feeDelta(other.feeDelta),
+ lockPoints(std::move(other.lockPoints)),
+ refcount(other.refcount.load()){};
+
+ uint64_t GetEntryId() const { return entryId; }
+ //! This should only be set by addUnchecked() before entry insertion into
+ //! mempool
+ void SetEntryId(uint64_t eid) { entryId = eid; }
+
+ const CTransaction &GetTx() const { return *this->tx; }
+ CTransactionRef GetSharedTx() const { return this->tx; }
+ Amount GetFee() const { return nFee; }
+ size_t GetTxSize() const { return nTxSize; }
+ size_t GetTxVirtualSize() const {
+ return GetVirtualTransactionSize(nTxSize, sigChecks,
+ ::nBytesPerSigCheck);
+ }
+
+ std::chrono::seconds GetTime() const { return std::chrono::seconds{nTime}; }
+ unsigned int GetHeight() const { return entryHeight; }
+ int64_t GetSigChecks() const { return sigChecks; }
+ Amount GetModifiedFee() const { return nFee + feeDelta; }
+ CFeeRate GetModifiedFeeRate() const {
+ return CFeeRate(GetModifiedFee(), GetTxVirtualSize());
+ }
+ size_t DynamicMemoryUsage() const { return nUsageSize; }
+ const LockPoints &GetLockPoints() const { return lockPoints; }
+
+ // Updates the fee delta used for mining priority score
+ void UpdateFeeDelta(Amount newFeeDelta) { feeDelta = newFeeDelta; }
+
+ const Parents &GetMemPoolParentsConst() const { return m_parents; }
+ const Children &GetMemPoolChildrenConst() const { return m_children; }
+ Parents &GetMemPoolParents() const { return m_parents; }
+ Children &GetMemPoolChildren() const { return m_children; }
+};
+
+#endif // BITCOIN_KERNEL_TXMEMPOOL_ENTRY_H
diff --git a/src/net_processing.cpp b/src/net_processing.cpp
--- a/src/net_processing.cpp
+++ b/src/net_processing.cpp
@@ -5,6 +5,8 @@
#include <net_processing.h>
+#include <kernel/txmempool_entry.h>
+
#include <addrman.h>
#include <avalanche/avalanche.h>
#include <avalanche/compactproofs.h>
diff --git a/src/node/interfaces.cpp b/src/node/interfaces.cpp
--- a/src/node/interfaces.cpp
+++ b/src/node/interfaces.cpp
@@ -12,6 +12,7 @@
#include <interfaces/handler.h>
#include <interfaces/node.h>
#include <interfaces/wallet.h>
+#include <kernel/txmempool_entry.h>
#include <mapport.h>
#include <net.h>
#include <net_processing.h>
diff --git a/src/rpc/mempool.cpp b/src/rpc/mempool.cpp
--- a/src/rpc/mempool.cpp
+++ b/src/rpc/mempool.cpp
@@ -4,6 +4,7 @@
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <kernel/mempool_persist.h>
+#include <kernel/txmempool_entry.h>
#include <core_io.h>
#include <fs.h>
diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp
--- a/src/test/util/setup_common.cpp
+++ b/src/test/util/setup_common.cpp
@@ -4,6 +4,7 @@
#include <test/util/setup_common.h>
+#include <kernel/txmempool_entry.h>
#include <kernel/validation_cache_sizes.h>
#include <addrman.h>
diff --git a/src/txmempool.h b/src/txmempool.h
--- a/src/txmempool.h
+++ b/src/txmempool.h
@@ -11,10 +11,10 @@
#include <core_memusage.h>
#include <indirectmap.h>
#include <kernel/mempool_options.h>
+#include <kernel/txmempool_entry.h>
#include <policy/packages.h>
#include <primitives/transaction.h>
#include <radix.h>
-#include <rcu.h>
#include <sync.h>
#include <uint256radixkey.h>
#include <util/hasher.h>
@@ -45,132 +45,6 @@
*/
static const uint32_t MEMPOOL_HEIGHT = 0x7FFFFFFF;
-struct LockPoints {
- // Will be set to the blockchain height and median time past values that
- // would be necessary to satisfy all relative locktime constraints (BIP68)
- // of this tx given our view of block chain history
- int height{0};
- int64_t time{0};
-};
-
-struct CompareIteratorById {
- // SFINAE for T where T is either a std::reference_wrapper<T> (e.g. a
- // CTxMemPoolEntryRef) or an iterator to a pointer type (e.g., a txiter)
- template <typename T>
- bool operator()(const std::reference_wrapper<T> &a,
- const std::reference_wrapper<T> &b) const {
- return a.get()->GetTx().GetId() < b.get()->GetTx().GetId();
- }
- template <typename T> bool operator()(const T &a, const T &b) const {
- return (*a)->GetTx().GetId() < (*b)->GetTx().GetId();
- }
-};
-/** Iterate txs in reverse-topological order */
-struct CompareIteratorByRevEntryId {
- template <typename T>
- bool operator()(const std::reference_wrapper<T> &a,
- const std::reference_wrapper<T> &b) const {
- return a.get()->GetEntryId() > b.get()->GetEntryId();
- }
-
- template <typename T> bool operator()(const T &a, const T &b) const {
- return (*a)->GetEntryId() > (*b)->GetEntryId();
- }
-};
-
-class CTxMemPoolEntry;
-using CTxMemPoolEntryRef = RCUPtr<CTxMemPoolEntry>;
-
-/** \class CTxMemPoolEntry
- *
- * CTxMemPoolEntry stores data about the corresponding transaction, as well as
- * data about all in-mempool transactions that depend on the transaction
- * ("descendant" transactions).
- */
-
-class CTxMemPoolEntry {
-public:
- // two aliases, should the types ever diverge
- typedef std::set<std::reference_wrapper<const CTxMemPoolEntryRef>,
- CompareIteratorById>
- Parents;
- typedef std::set<std::reference_wrapper<const CTxMemPoolEntryRef>,
- CompareIteratorById>
- Children;
-
-private:
- //! Unique identifier -- used for topological sorting
- uint64_t entryId = 0;
-
- const CTransactionRef tx;
- mutable Parents m_parents;
- mutable Children m_children;
- //! Cached to avoid expensive parent-transaction lookups
- const Amount nFee;
- //! ... and avoid recomputing tx size
- const size_t nTxSize;
- //! ... and total memory usage
- const size_t nUsageSize;
- //! Local time when entering the mempool
- const int64_t nTime;
- //! Chain height when entering the mempool
- const unsigned int entryHeight;
- //! Total sigChecks
- const int64_t sigChecks;
- //! Used for determining the priority of the transaction for mining in a
- //! block
- Amount feeDelta{Amount::zero()};
- //! Track the height and time at which tx was final
- LockPoints lockPoints;
-
- IMPLEMENT_RCU_REFCOUNT(uint64_t);
-
-public:
- CTxMemPoolEntry(const CTransactionRef &_tx, const Amount fee, int64_t time,
- unsigned int entry_height, int64_t sigchecks,
- LockPoints lp);
-
- CTxMemPoolEntry(const CTxMemPoolEntry &other) = delete;
- CTxMemPoolEntry(CTxMemPoolEntry &&other)
- : entryId(other.entryId), tx(std::move(other.tx)),
- m_parents(std::move(other.m_parents)),
- m_children(std::move(other.m_children)), nFee(other.nFee),
- nTxSize(other.nTxSize), nUsageSize(other.nUsageSize),
- nTime(other.nTime), entryHeight(other.entryHeight),
- sigChecks(other.sigChecks), feeDelta(other.feeDelta),
- lockPoints(std::move(other.lockPoints)),
- refcount(other.refcount.load()){};
-
- uint64_t GetEntryId() const { return entryId; }
- //! This should only be set by addUnchecked() before entry insertion into
- //! mempool
- void SetEntryId(uint64_t eid) { entryId = eid; }
-
- const CTransaction &GetTx() const { return *this->tx; }
- CTransactionRef GetSharedTx() const { return this->tx; }
- Amount GetFee() const { return nFee; }
- size_t GetTxSize() const { return nTxSize; }
- size_t GetTxVirtualSize() const;
-
- std::chrono::seconds GetTime() const { return std::chrono::seconds{nTime}; }
- unsigned int GetHeight() const { return entryHeight; }
- int64_t GetSigChecks() const { return sigChecks; }
- Amount GetModifiedFee() const { return nFee + feeDelta; }
- CFeeRate GetModifiedFeeRate() const {
- return CFeeRate(GetModifiedFee(), GetTxVirtualSize());
- }
- size_t DynamicMemoryUsage() const { return nUsageSize; }
- const LockPoints &GetLockPoints() const { return lockPoints; }
-
- // Updates the fee delta used for mining priority score
- void UpdateFeeDelta(Amount feeDelta);
-
- const Parents &GetMemPoolParentsConst() const { return m_parents; }
- const Children &GetMemPoolChildrenConst() const { return m_children; }
- Parents &GetMemPoolParents() const { return m_parents; }
- Children &GetMemPoolChildren() const { return m_children; }
-};
-
// extracts a transaction id from CTxMemPoolEntry or CTransactionRef
struct mempoolentry_txid {
typedef TxId result_type;
diff --git a/src/txmempool.cpp b/src/txmempool.cpp
--- a/src/txmempool.cpp
+++ b/src/txmempool.cpp
@@ -15,7 +15,6 @@
#include <consensus/validation.h>
#include <policy/fees.h>
#include <policy/policy.h>
-#include <policy/settings.h>
#include <reverse_iterator.h>
#include <undo.h>
#include <util/moneystr.h>
@@ -29,22 +28,6 @@
#include <cmath>
#include <limits>
-CTxMemPoolEntry::CTxMemPoolEntry(const CTransactionRef &_tx, const Amount fee,
- int64_t time, unsigned int entry_height,
- int64_t _sigChecks, LockPoints lp)
- : tx{_tx}, nFee{fee},
- nTxSize(tx->GetTotalSize()), nUsageSize{RecursiveDynamicUsage(tx)},
- nTime(time), entryHeight{entry_height}, sigChecks(_sigChecks),
- lockPoints(lp) {}
-
-size_t CTxMemPoolEntry::GetTxVirtualSize() const {
- return GetVirtualTransactionSize(nTxSize, sigChecks, ::nBytesPerSigCheck);
-}
-
-void CTxMemPoolEntry::UpdateFeeDelta(Amount newFeeDelta) {
- feeDelta = newFeeDelta;
-}
-
bool CTxMemPool::CalculateAncestors(
setEntries &setAncestors,
CTxMemPoolEntry::Parents &staged_ancestors) const {
diff --git a/src/validation.cpp b/src/validation.cpp
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -7,6 +7,7 @@
#include <validation.h>
#include <kernel/mempool_persist.h>
+#include <kernel/txmempool_entry.h>
#include <arith_uint256.h>
#include <avalanche/avalanche.h>

File Metadata

Mime Type
text/plain
Expires
Sat, Apr 26, 11:31 (16 h, 37 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5573410
Default Alt Text
D15790.id46499.diff (15 KB)

Event Timeline