Bitcoin Core
32.99.0
P2P Digital Currency
Loading...
Searching...
No Matches
src
test
fuzz
policy_estimator_io.cpp
Go to the documentation of this file.
1
// Copyright (c) 2020-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
5
#include <
policy/fees/block_policy_estimator.h
>
6
#include <
policy/fees/estimator_args.h
>
7
#include <
policy/fees/mempool_estimator.h
>
8
#include <
streams.h
>
9
#include <
test/fuzz/FuzzedDataProvider.h
>
10
#include <
test/fuzz/fuzz.h
>
11
#include <
test/fuzz/util.h
>
12
#include <
test/fuzz/util/reachability.h
>
13
#include <
test/util/setup_common.h
>
14
15
#include <memory>
16
17
namespace
{
18
const
TestingSetup
*
g_setup
;
19
constexpr
ReachabilityGoal
BLOCK_POLICY_ESTIMATOR_READ_SUCCEEDS
{
"block policy estimator reading succeeds"
};
20
}
// namespace
21
22
void
initialize_policy_estimator_io
()
23
{
24
RegisterReachabilityGoal
(
BLOCK_POLICY_ESTIMATOR_READ_SUCCEEDS
);
25
static
const
auto
testing_setup{
26
MakeNoLogFileContext<const TestingSetup>
(
ChainType::REGTEST
,
TestOpts
{.
setup_net
=
false
})};
27
g_setup
= testing_setup.get();
28
}
29
30
FUZZ_TARGET
(
policy_estimator_io
, .
init
=
initialize_policy_estimator_io
)
31
{
32
FuzzedDataProvider
fuzzed_data_provider
(buffer.data(), buffer.size());
33
FuzzedFileProvider
fuzzed_file_provider
{
fuzzed_data_provider
};
34
// Reuse estimators across runs to avoid costly object creation.
35
static
CBlockPolicyEstimator
block_policy_estimator
{
36
BlockPolicyFeeEstPath
(*
g_setup
->
m_node
.
args
),
DEFAULT_ACCEPT_STALE_FEE_ESTIMATES
};
37
bool
block_policy_read_success
{
false
};
38
{
39
AutoFile
fuzzed_auto_file_block_policy
{
fuzzed_file_provider
.open()};
40
block_policy_read_success
=
block_policy_estimator
.Read(
fuzzed_auto_file_block_policy
);
41
if
(
block_policy_read_success
) {
42
block_policy_estimator
.Write(
fuzzed_auto_file_block_policy
);
43
}
44
(
void
)
fuzzed_auto_file_block_policy
.
fclose
();
45
}
46
static
MemPoolFeeRateEstimator
mempool_feerate_estimator
{
47
MempoolPolicyEstimatorPath
(*
g_setup
->
m_node
.
args
),
48
*
g_setup
->
m_node
.
mempool
,
49
*
g_setup
->
m_node
.
chainman
};
50
{
51
AutoFile
fuzzed_auto_file_mempool_policy
{
fuzzed_file_provider
.open()};
52
if
(
mempool_feerate_estimator
.Read(
fuzzed_auto_file_mempool_policy
)) {
53
mempool_feerate_estimator
.Write(
fuzzed_auto_file_mempool_policy
);
54
}
55
// Write() does not take ownership; close explicitly because it may
56
// have written to the fuzzed file.
57
(
void
)
fuzzed_auto_file_mempool_policy
.
fclose
();
58
}
59
ObserveReachabilityGoal
(
block_policy_read_success
,
BLOCK_POLICY_ESTIMATOR_READ_SUCCEEDS
);
60
}
FuzzedDataProvider.h
g_setup
const TestingSetup * g_setup
Definition
block_index_tree.cpp:23
block_policy_estimator.h
DEFAULT_ACCEPT_STALE_FEE_ESTIMATES
constexpr bool DEFAULT_ACCEPT_STALE_FEE_ESTIMATES
Definition
block_policy_estimator.h:34
ChainType::REGTEST
@ REGTEST
AutoFile
Non-refcounted RAII wrapper for FILE*.
Definition
streams.h:395
AutoFile::fclose
int fclose()
Definition
streams.h:429
CBlockPolicyEstimator
The BlockPolicyEstimator is used for estimating the feerate needed for a transaction to be included i...
Definition
block_policy_estimator.h:146
FuzzedDataProvider
Definition
FuzzedDataProvider.h:32
FuzzedFileProvider
Definition
util.h:289
MemPoolFeeRateEstimator
Estimate the fee rate required for a transaction to be included in the next block.
Definition
mempool_estimator.h:88
MempoolPolicyEstimatorPath
fs::path MempoolPolicyEstimatorPath(const ArgsManager &argsman)
Definition
estimator_args.cpp:57
BlockPolicyFeeEstPath
fs::path BlockPolicyFeeEstPath(const ArgsManager &argsman)
Definition
estimator_args.cpp:52
estimator_args.h
fuzz.h
FUZZ_TARGET
#define FUZZ_TARGET(...)
Definition
fuzz.h:35
mempool_estimator.h
init
Definition
basic.cpp:11
initialize_policy_estimator_io
void initialize_policy_estimator_io()
Definition
policy_estimator_io.cpp:22
ObserveReachabilityGoal
void ObserveReachabilityGoal(bool reached, const ReachabilityGoal &goal)
Record whether a registered goal is satisfied by at least one fuzz input.
Definition
reachability.cpp:103
RegisterReachabilityGoal
void RegisterReachabilityGoal(const ReachabilityGoal &goal)
Register a goal before executing any fuzz inputs.
Definition
reachability.cpp:98
reachability.h
setup_common.h
streams.h
BasicTestingSetup::m_node
node::NodeContext m_node
Definition
setup_common.h:60
ReachabilityGoal
A reachability condition explicitly registered by a fuzz target.
Definition
reachability.h:16
TestOpts
Definition
setup_common.h:46
TestOpts::setup_net
bool setup_net
Definition
setup_common.h:50
TestingSetup
Testing setup that configures a complete environment.
Definition
setup_common.h:119
node::NodeContext::mempool
std::unique_ptr< CTxMemPool > mempool
Definition
context.h:69
node::NodeContext::chainman
std::unique_ptr< ChainstateManager > chainman
Definition
context.h:74
node::NodeContext::args
ArgsManager * args
Definition
context.h:76
util.h
Ticks
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.
Definition
time.h:82
fuzzed_data_provider
FuzzedDataProvider & fuzzed_data_provider
Definition
fees.cpp:46
Generated on Mon Nov 2 2026 20:00:31 for Bitcoin Core by
1.9.8