aboutsummaryrefslogtreecommitdiff
path: root/src/txmempool.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/txmempool.h')
-rw-r--r--src/txmempool.h43
1 files changed, 27 insertions, 16 deletions
diff --git a/src/txmempool.h b/src/txmempool.h
index 9da51756e6..c9f6cdbfac 100644
--- a/src/txmempool.h
+++ b/src/txmempool.h
@@ -21,6 +21,7 @@
#include <util/epochguard.h>
#include <util/hasher.h>
#include <util/result.h>
+#include <util/feefrac.h>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/identity.hpp>
@@ -40,6 +41,7 @@
#include <vector>
class CChain;
+class ValidationSignals;
/** Fake height value used in Coin to signify they are only in the memory pool (since 0.8) */
static const uint32_t MEMPOOL_HEIGHT = 0x7FFFFFFF;
@@ -299,7 +301,6 @@ struct TxMempoolInfo
class CTxMemPool
{
protected:
- const int m_check_ratio; //!< Value n means that 1 times in n we check.
std::atomic<unsigned int> nTransactionsUpdated{0}; //!< Used by getblocktemplate to trigger CreateNewBlock() invocation
uint64_t totalTxSize GUARDED_BY(cs){0}; //!< sum of all mempool tx's virtual sizes. Differs from serialized tx size since witness data is discounted. Defined in BIP 141.
@@ -434,18 +435,7 @@ public:
using Options = kernel::MemPoolOptions;
- const int64_t m_max_size_bytes;
- const std::chrono::seconds m_expiry;
- const CFeeRate m_incremental_relay_feerate;
- const CFeeRate m_min_relay_feerate;
- const CFeeRate m_dust_relay_feerate;
- const bool m_permit_bare_multisig;
- const std::optional<unsigned> m_max_datacarrier_bytes;
- const bool m_require_standard;
- const bool m_full_rbf;
- const bool m_persist_v1_dat;
-
- const Limits m_limits;
+ const Options m_opts;
/** Create a new CTxMemPool.
* Sanity checks will be off by default for performance, because otherwise
@@ -485,7 +475,6 @@ public:
void removeForBlock(const std::vector<CTransactionRef>& vtx, unsigned int nBlockHeight) EXCLUSIVE_LOCKS_REQUIRED(cs);
bool CompareDepthAndScore(const uint256& hasha, const uint256& hashb, bool wtxid=false);
- void queryHashes(std::vector<uint256>& vtxid) const;
bool isSpent(const COutPoint& outpoint) const;
unsigned int GetTransactionsUpdated() const;
void AddTransactionsUpdated(unsigned int n);
@@ -522,7 +511,7 @@ public:
/** Translate a set of hashes into a set of pool iterators to avoid repeated lookups.
* Does not require that all of the hashes correspond to actual transactions in the mempool,
* only returns the ones that exist. */
- setEntries GetIterSet(const std::set<uint256>& hashes) const EXCLUSIVE_LOCKS_REQUIRED(cs);
+ setEntries GetIterSet(const std::set<Txid>& hashes) const EXCLUSIVE_LOCKS_REQUIRED(cs);
/** Translate a list of hashes into a list of mempool iterators to avoid repeated lookups.
* The nth element in txids becomes the nth element in the returned vector. If any of the txids
@@ -622,7 +611,7 @@ public:
* would otherwise be half of this, it is set to 0 instead.
*/
CFeeRate GetMinFee() const {
- return GetMinFee(m_max_size_bytes);
+ return GetMinFee(m_opts.max_size_bytes);
}
/** Remove transactions from the mempool until its dynamic size is <= sizelimit.
@@ -734,6 +723,28 @@ public:
return m_sequence_number;
}
+ /**
+ * Calculate the sorted chunks for the old and new mempool relating to the
+ * clusters that would be affected by a potential replacement transaction.
+ * (replacement_fees, replacement_vsize) values are gathered from a
+ * proposed set of replacement transactions that are considered as a single
+ * chunk, and represent their complete cluster. In other words, they have no
+ * in-mempool ancestors.
+ *
+ * @param[in] replacement_fees Package fees
+ * @param[in] replacement_vsize Package size (must be greater than 0)
+ * @param[in] direct_conflicts All transactions that would be removed directly by
+ * having a conflicting input with a proposed transaction
+ * @param[in] all_conflicts All transactions that would be removed
+ * @return old and new diagram pair respectively, or an error string if the conflicts don't match a calculable topology
+ */
+ util::Result<std::pair<std::vector<FeeFrac>, std::vector<FeeFrac>>> CalculateChunksForRBF(CAmount replacement_fees, int64_t replacement_vsize, const setEntries& direct_conflicts, const setEntries& all_conflicts) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ /* Check that all direct conflicts are in a cluster size of two or less. Each
+ * direct conflict may be in a separate cluster.
+ */
+ std::optional<std::string> CheckConflictTopology(const setEntries& direct_conflicts);
+
private:
/** UpdateForDescendants is used by UpdateTransactionsFromBlock to update
* the descendants for a single transaction that has been added to the