Bitcoin Core
28.99.0
P2P Digital Currency
src
test
fuzz
util
mempool.cpp
Go to the documentation of this file.
1
// Copyright (c) 2022 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 <
consensus/amount.h
>
6
#include <
consensus/consensus.h
>
7
#include <
kernel/mempool_entry.h
>
8
#include <
primitives/transaction.h
>
9
#include <
test/fuzz/FuzzedDataProvider.h
>
10
#include <
test/fuzz/util.h
>
11
#include <
test/fuzz/util/mempool.h
>
12
13
#include <cassert>
14
#include <cstdint>
15
#include <limits>
16
17
CTxMemPoolEntry
ConsumeTxMemPoolEntry
(
FuzzedDataProvider
& fuzzed_data_provider,
const
CTransaction
& tx)
noexcept
18
{
19
// Avoid:
20
// policy/feerate.cpp:28:34: runtime error: signed integer overflow: 34873208148477500 * 1000 cannot be represented in type 'long'
21
//
22
// Reproduce using CFeeRate(348732081484775, 10).GetFeePerK()
23
const
CAmount
fee
{
ConsumeMoney
(fuzzed_data_provider,
/*max=*/
std::numeric_limits<CAmount>::max() /
CAmount
{100'000})};
24
assert
(
MoneyRange
(
fee
));
25
const
int64_t time = fuzzed_data_provider.ConsumeIntegral<int64_t>();
26
const
uint64_t entry_sequence{fuzzed_data_provider.ConsumeIntegral<uint64_t>()};
27
const
unsigned
int
entry_height = fuzzed_data_provider.ConsumeIntegral<
unsigned
int
>();
28
const
bool
spends_coinbase = fuzzed_data_provider.ConsumeBool();
29
const
unsigned
int
sig_op_cost = fuzzed_data_provider.ConsumeIntegralInRange<
unsigned
int
>(0,
MAX_BLOCK_SIGOPS_COST
);
30
return
CTxMemPoolEntry
{
MakeTransactionRef
(tx),
fee
, time, entry_height, entry_sequence, spends_coinbase, sig_op_cost, {}};
31
}
FuzzedDataProvider.h
amount.h
MoneyRange
bool MoneyRange(const CAmount &nValue)
Definition:
amount.h:27
CAmount
int64_t CAmount
Amount in satoshis (Can be negative)
Definition:
amount.h:12
CTransaction
The basic transaction that is broadcasted on the network and contained in blocks.
Definition:
transaction.h:296
CTxMemPoolEntry
CTxMemPoolEntry stores data about the corresponding transaction, as well as data about all in-mempool...
Definition:
mempool_entry.h:66
FuzzedDataProvider
Definition:
FuzzedDataProvider.h:32
consensus.h
MAX_BLOCK_SIGOPS_COST
static const int64_t MAX_BLOCK_SIGOPS_COST
The maximum allowed number of signature check operations in a block (network rule)
Definition:
consensus.h:17
mempool_entry.h
fee
uint64_t fee
Definition:
mempool_ephemeral_spends.cpp:30
transaction.h
MakeTransactionRef
static CTransactionRef MakeTransactionRef(Tx &&txIn)
Definition:
transaction.h:424
ConsumeTxMemPoolEntry
CTxMemPoolEntry ConsumeTxMemPoolEntry(FuzzedDataProvider &fuzzed_data_provider, const CTransaction &tx) noexcept
Definition:
mempool.cpp:17
mempool.h
ConsumeMoney
CAmount ConsumeMoney(FuzzedDataProvider &fuzzed_data_provider, const std::optional< CAmount > &max) noexcept
Definition:
util.cpp:29
util.h
assert
assert(!tx.IsCoinBase())
Generated on Wed Dec 18 2024 20:00:13 for Bitcoin Core by
1.9.4