1 // Copyright (c) 2022-present The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 #ifndef BITCOIN_KERNEL_MEMPOOL_LIMITS_H
5 #define BITCOIN_KERNEL_MEMPOOL_LIMITS_H
6 7 #include <policy/policy.h>
8 9 #include <cstdint>
10 11 namespace kernel {
12 /**
13 * Options struct containing limit options for a CTxMemPool. Default constructor
14 * populates the struct with sane default values which can be modified.
15 *
16 * Most of the time, this struct should be referenced as CTxMemPool::Limits.
17 */
18 struct MemPoolLimits {
19 //! The maximum number of transactions in a cluster
20 unsigned cluster_count{DEFAULT_CLUSTER_LIMIT};
21 //! The maximum allowed size in virtual bytes of a cluster.
22 int64_t cluster_size_vbytes{DEFAULT_CLUSTER_SIZE_LIMIT_KVB * 1'000};
23 //! The maximum allowed number of transactions in a package including the entry and its ancestors.
24 int64_t ancestor_count{DEFAULT_ANCESTOR_LIMIT};
25 //! The maximum allowed number of transactions in a package including the entry and its descendants.
26 int64_t descendant_count{DEFAULT_DESCENDANT_LIMIT};
27 28 /**
29 * @return MemPoolLimits with all the limits set to the maximum
30 */
31 static constexpr MemPoolLimits NoLimits()
32 {
33 int64_t no_limit{std::numeric_limits<int64_t>::max()};
34 return {std::numeric_limits<unsigned>::max(), no_limit, no_limit, no_limit};
35 }
36 };
37 } // namespace kernel
38 39 #endif // BITCOIN_KERNEL_MEMPOOL_LIMITS_H
40