mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-05-24 10:51:57 +02:00
Merge bitcoin/bitcoin#26250: fuzz: add mempool_utils.cpp
8a6b6dfcd8d26b62c3a13beba72440635fcc5e19 fuzz: pass max fee into ConsumeTxMemPoolEntry (fanquake)
eb155692804b4278f6638c74273c1d9d35cd6ab7 fuzz: add util/mempool/h.cpp (fanquake)
Pull request description:
Moving the heavy (Boost) mempool code out of fuzz/util.h. Means that (for ex) a crypto_common fuzz unit doesn't need to care about seeing endless Boost headers. This results in a ~10% speedup (for me) when compiling the fuzz tests. Your results may vary.
ACKs for top commit:
MarcoFalke:
review ACK 8a6b6dfcd8d26b62c3a13beba72440635fcc5e19 🍮
Tree-SHA512: 27dc9d9581ac0b1b319cc0dc08fe5f8fbf9269386a5cb23f6fd5d8231bf015ed942ab4414d8001220541be0013756354578ddab1fec607c6fba04daf421bc870
This commit is contained in:
commit
d3cdd37d92
@ -10,12 +10,13 @@ EXTRA_LIBRARIES += \
|
|||||||
TEST_FUZZ_H = \
|
TEST_FUZZ_H = \
|
||||||
test/fuzz/fuzz.h \
|
test/fuzz/fuzz.h \
|
||||||
test/fuzz/FuzzedDataProvider.h \
|
test/fuzz/FuzzedDataProvider.h \
|
||||||
test/fuzz/mempool_utils.h \
|
test/fuzz/util.h \
|
||||||
test/fuzz/util.h
|
test/fuzz/util/mempool.h
|
||||||
|
|
||||||
libtest_fuzz_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BOOST_CPPFLAGS)
|
libtest_fuzz_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BOOST_CPPFLAGS)
|
||||||
libtest_fuzz_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
libtest_fuzz_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||||
libtest_fuzz_a_SOURCES = \
|
libtest_fuzz_a_SOURCES = \
|
||||||
test/fuzz/fuzz.cpp \
|
test/fuzz/fuzz.cpp \
|
||||||
test/fuzz/util.cpp \
|
test/fuzz/util.cpp \
|
||||||
|
test/fuzz/util/mempool.cpp \
|
||||||
$(TEST_FUZZ_H)
|
$(TEST_FUZZ_H)
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include <key_io.h>
|
#include <key_io.h>
|
||||||
#include <memusage.h>
|
#include <memusage.h>
|
||||||
#include <netbase.h>
|
#include <netbase.h>
|
||||||
|
#include <policy/policy.h>
|
||||||
#include <policy/settings.h>
|
#include <policy/settings.h>
|
||||||
#include <pow.h>
|
#include <pow.h>
|
||||||
#include <protocol.h>
|
#include <protocol.h>
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include <test/fuzz/FuzzedDataProvider.h>
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
#include <test/fuzz/fuzz.h>
|
#include <test/fuzz/fuzz.h>
|
||||||
#include <test/fuzz/util.h>
|
#include <test/fuzz/util.h>
|
||||||
|
#include <test/fuzz/util/mempool.h>
|
||||||
#include <test/util/setup_common.h>
|
#include <test/util/setup_common.h>
|
||||||
#include <txmempool.h>
|
#include <txmempool.h>
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <test/fuzz/FuzzedDataProvider.h>
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
#include <test/fuzz/fuzz.h>
|
#include <test/fuzz/fuzz.h>
|
||||||
#include <test/fuzz/util.h>
|
#include <test/fuzz/util.h>
|
||||||
|
#include <test/fuzz/util/mempool.h>
|
||||||
#include <test/util/setup_common.h>
|
#include <test/util/setup_common.h>
|
||||||
#include <txmempool.h>
|
#include <txmempool.h>
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
#include <node/miner.h>
|
#include <node/miner.h>
|
||||||
#include <test/fuzz/FuzzedDataProvider.h>
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
#include <test/fuzz/fuzz.h>
|
#include <test/fuzz/fuzz.h>
|
||||||
#include <test/fuzz/mempool_utils.h>
|
|
||||||
#include <test/fuzz/util.h>
|
#include <test/fuzz/util.h>
|
||||||
|
#include <test/fuzz/util/mempool.h>
|
||||||
#include <test/util/mining.h>
|
#include <test/util/mining.h>
|
||||||
#include <test/util/script.h>
|
#include <test/util/script.h>
|
||||||
#include <test/util/setup_common.h>
|
#include <test/util/setup_common.h>
|
||||||
|
@ -478,21 +478,6 @@ CTxDestination ConsumeTxDestination(FuzzedDataProvider& fuzzed_data_provider) no
|
|||||||
return tx_destination;
|
return tx_destination;
|
||||||
}
|
}
|
||||||
|
|
||||||
CTxMemPoolEntry ConsumeTxMemPoolEntry(FuzzedDataProvider& fuzzed_data_provider, const CTransaction& tx) noexcept
|
|
||||||
{
|
|
||||||
// Avoid:
|
|
||||||
// policy/feerate.cpp:28:34: runtime error: signed integer overflow: 34873208148477500 * 1000 cannot be represented in type 'long'
|
|
||||||
//
|
|
||||||
// Reproduce using CFeeRate(348732081484775, 10).GetFeePerK()
|
|
||||||
const CAmount fee = std::min<CAmount>(ConsumeMoney(fuzzed_data_provider), std::numeric_limits<CAmount>::max() / static_cast<CAmount>(100000));
|
|
||||||
assert(MoneyRange(fee));
|
|
||||||
const int64_t time = fuzzed_data_provider.ConsumeIntegral<int64_t>();
|
|
||||||
const unsigned int entry_height = fuzzed_data_provider.ConsumeIntegral<unsigned int>();
|
|
||||||
const bool spends_coinbase = fuzzed_data_provider.ConsumeBool();
|
|
||||||
const unsigned int sig_op_cost = fuzzed_data_provider.ConsumeIntegralInRange<unsigned int>(0, MAX_BLOCK_SIGOPS_COST);
|
|
||||||
return CTxMemPoolEntry{MakeTransactionRef(tx), fee, time, entry_height, spends_coinbase, sig_op_cost, {}};
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ContainsSpentInput(const CTransaction& tx, const CCoinsViewCache& inputs) noexcept
|
bool ContainsSpentInput(const CTransaction& tx, const CCoinsViewCache& inputs) noexcept
|
||||||
{
|
{
|
||||||
for (const CTxIn& tx_in : tx.vin) {
|
for (const CTxIn& tx_in : tx.vin) {
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#include <test/fuzz/FuzzedDataProvider.h>
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
#include <test/fuzz/fuzz.h>
|
#include <test/fuzz/fuzz.h>
|
||||||
#include <test/util/net.h>
|
#include <test/util/net.h>
|
||||||
#include <txmempool.h>
|
|
||||||
#include <uint256.h>
|
#include <uint256.h>
|
||||||
#include <version.h>
|
#include <version.h>
|
||||||
|
|
||||||
@ -213,8 +212,6 @@ template <typename WeakEnumType, size_t size>
|
|||||||
return UintToArith256(ConsumeUInt256(fuzzed_data_provider));
|
return UintToArith256(ConsumeUInt256(fuzzed_data_provider));
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] CTxMemPoolEntry ConsumeTxMemPoolEntry(FuzzedDataProvider& fuzzed_data_provider, const CTransaction& tx) noexcept;
|
|
||||||
|
|
||||||
[[nodiscard]] CTxDestination ConsumeTxDestination(FuzzedDataProvider& fuzzed_data_provider) noexcept;
|
[[nodiscard]] CTxDestination ConsumeTxDestination(FuzzedDataProvider& fuzzed_data_provider) noexcept;
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
27
src/test/fuzz/util/mempool.cpp
Normal file
27
src/test/fuzz/util/mempool.cpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// Copyright (c) 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.
|
||||||
|
|
||||||
|
#include <consensus/amount.h>
|
||||||
|
#include <primitives/transaction.h>
|
||||||
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
|
#include <test/fuzz/util.h>
|
||||||
|
#include <test/fuzz/util/mempool.h>
|
||||||
|
#include <txmempool.h>
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
CTxMemPoolEntry ConsumeTxMemPoolEntry(FuzzedDataProvider& fuzzed_data_provider, const CTransaction& tx) noexcept
|
||||||
|
{
|
||||||
|
// Avoid:
|
||||||
|
// policy/feerate.cpp:28:34: runtime error: signed integer overflow: 34873208148477500 * 1000 cannot be represented in type 'long'
|
||||||
|
//
|
||||||
|
// Reproduce using CFeeRate(348732081484775, 10).GetFeePerK()
|
||||||
|
const CAmount fee{ConsumeMoney(fuzzed_data_provider, /*max=*/std::numeric_limits<CAmount>::max() / CAmount{100'000})};
|
||||||
|
assert(MoneyRange(fee));
|
||||||
|
const int64_t time = fuzzed_data_provider.ConsumeIntegral<int64_t>();
|
||||||
|
const unsigned int entry_height = fuzzed_data_provider.ConsumeIntegral<unsigned int>();
|
||||||
|
const bool spends_coinbase = fuzzed_data_provider.ConsumeBool();
|
||||||
|
const unsigned int sig_op_cost = fuzzed_data_provider.ConsumeIntegralInRange<unsigned int>(0, MAX_BLOCK_SIGOPS_COST);
|
||||||
|
return CTxMemPoolEntry{MakeTransactionRef(tx), fee, time, entry_height, spends_coinbase, sig_op_cost, {}};
|
||||||
|
}
|
@ -2,9 +2,12 @@
|
|||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#ifndef BITCOIN_TEST_FUZZ_MEMPOOL_UTILS_H
|
#ifndef BITCOIN_TEST_FUZZ_UTIL_MEMPOOL_H
|
||||||
#define BITCOIN_TEST_FUZZ_MEMPOOL_UTILS_H
|
#define BITCOIN_TEST_FUZZ_UTIL_MEMPOOL_H
|
||||||
|
|
||||||
|
#include <primitives/transaction.h>
|
||||||
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
|
#include <txmempool.h>
|
||||||
#include <validation.h>
|
#include <validation.h>
|
||||||
|
|
||||||
class DummyChainState final : public Chainstate
|
class DummyChainState final : public Chainstate
|
||||||
@ -16,4 +19,6 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BITCOIN_TEST_FUZZ_MEMPOOL_UTILS_H
|
[[nodiscard]] CTxMemPoolEntry ConsumeTxMemPoolEntry(FuzzedDataProvider& fuzzed_data_provider, const CTransaction& tx) noexcept;
|
||||||
|
|
||||||
|
#endif // BITCOIN_TEST_FUZZ_UTIL_MEMPOOL_H
|
@ -9,8 +9,8 @@
|
|||||||
#include <node/mempool_persist_args.h>
|
#include <node/mempool_persist_args.h>
|
||||||
#include <test/fuzz/FuzzedDataProvider.h>
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
#include <test/fuzz/fuzz.h>
|
#include <test/fuzz/fuzz.h>
|
||||||
#include <test/fuzz/mempool_utils.h>
|
|
||||||
#include <test/fuzz/util.h>
|
#include <test/fuzz/util.h>
|
||||||
|
#include <test/fuzz/util/mempool.h>
|
||||||
#include <test/util/setup_common.h>
|
#include <test/util/setup_common.h>
|
||||||
#include <txmempool.h>
|
#include <txmempool.h>
|
||||||
#include <util/time.h>
|
#include <util/time.h>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user