mempool_limits.h
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