9#include <blockfilter.h>
46#define FUZZ_TARGET_DESERIALIZE(name, code) \
47 FUZZ_TARGET(name, .init = initialize_deserialize) \
51 } catch (const invalid_fuzzing_input_exception&) { \
57struct invalid_fuzzing_input_exception :
public std::exception {
60template <
typename T,
typename P>
89 }
catch (
const std::ios_base::failure&) {
90 throw invalid_fuzzing_input_exception();
103 }
catch (
const std::ios_base::failure&) {
104 throw invalid_fuzzing_input_exception();
108template <
typename T,
typename P>
109void AssertEqualAfterSerializeDeserialize(
const T& obj,
const P& params)
114void AssertEqualAfterSerializeDeserialize(
const T& obj)
123 DeserializeFromFuzzingInput(buffer, block_filter);
132 DeserializeFromFuzzingInput(buffer, block_file_info);
136 DeserializeFromFuzzingInput(buffer, block_header_and_short_txids);
140 DeserializeFromFuzzingInput(buffer, fee_rate);
141 AssertEqualAfterSerializeDeserialize(fee_rate);
145 DeserializeFromFuzzingInput(buffer, merkle_block);
149 DeserializeFromFuzzingInput(buffer, out_point);
150 AssertEqualAfterSerializeDeserialize(out_point);
154 DeserializeFromFuzzingInput(buffer, partial_merkle_tree);
158 DeserializeFromFuzzingInput(buffer, pub_key);
159 AssertEqualAfterSerializeDeserialize(pub_key);
163 DeserializeFromFuzzingInput(buffer,
script);
167 DeserializeFromFuzzingInput(buffer, tx_in);
168 AssertEqualAfterSerializeDeserialize(tx_in);
172 DeserializeFromFuzzingInput(buffer, flat_file_pos);
173 AssertEqualAfterSerializeDeserialize(flat_file_pos);
177 DeserializeFromFuzzingInput(buffer, key_origin_info);
178 AssertEqualAfterSerializeDeserialize(key_origin_info);
181 PartiallySignedTransaction partially_signed_transaction = DeserializeConstructFromFuzzingInput<PartiallySignedTransaction>(buffer);
185 DeserializeFromFuzzingInput(buffer, prefilled_transaction);
189 DeserializeFromFuzzingInput(buffer, psbt_input);
193 DeserializeFromFuzzingInput(buffer, psbt_output);
201 DeserializeFromFuzzingInput(buffer, bl);
211 DeserializeFromFuzzingInput(buffer, bh);
215 DeserializeFromFuzzingInput(buffer, tu);
219 DeserializeFromFuzzingInput(buffer, bu);
223 DeserializeFromFuzzingInput(buffer, coin);
229 if (!maybe_na)
return;
241 if (!maybe_s)
return;
243 if (
s.IsAddrV1Compatible()) {
248 assert(
s.IsAddrV1Compatible());
253 DeserializeFromFuzzingInput(buffer, mh);
261 if (!maybe_a)
return;
283 DeserializeFromFuzzingInput(buffer, i);
287 DeserializeFromFuzzingInput(buffer, bf);
291 DeserializeFromFuzzingInput(buffer, dbi);
295 auto toc = Using<TxOutCompression>(to);
296 DeserializeFromFuzzingInput(buffer, toc);
300 DeserializeFromFuzzingInput(buffer, bt);
304 DeserializeFromFuzzingInput(buffer, btr);
309 DeserializeFromFuzzingInput(buffer, snapshot_metadata);
313 DeserializeFromFuzzingInput(buffer, u160);
314 AssertEqualAfterSerializeDeserialize(u160);
318 DeserializeFromFuzzingInput(buffer, u256);
319 AssertEqualAfterSerializeDeserialize(u256);
const CChainParams & Params()
Return the currently selected parameters.
Complete block filter struct as defined in BIP 157.
A CService with information about it as peer.
static constexpr SerParams V1_NETWORK
static constexpr SerParams V2_NETWORK
static constexpr SerParams V1_DISK
static constexpr SerParams V2_DISK
Undo information for a CBlock.
BloomFilter is a probabilistic filter which SPV clients provide so that we can filter the transaction...
const MessageStartChars & MessageStart() const
Used to marshal pointers into hashes for db storage.
Fee rate in satoshis per virtualbyte: CAmount / vB the feerate is represented internally as FeeFrac.
Used to relay blocks as header + vector<merkle branch> to filtered nodes.
static constexpr SerParams V1
static constexpr SerParams V2
bool IsAddrV1Compatible() const
Check if the current object can be serialized in pre-ADDRv2/BIP155 format.
An outpoint - a combination of a transaction hash and an index n into its vout.
Data structure that represents a partial merkle tree.
An encapsulated public key.
Serialized script, used inside transaction inputs and outputs.
A combination of a network address (CNetAddr) and a (TCP) port.
An input of a transaction.
An output of a transaction.
Undo information for a CTransaction.
Double ended buffer combining vector and stream-like interfaces.
A structure for PSBTs which contains per output information.
A version of CTransaction with the PSBT format.
Minimal stream for reading from an existing byte array by std::span.
uint256 BlockMerkleRoot(const CBlock &block, bool *mutated)
#define FUZZ_TARGET_DESERIALIZE(name, code)
void initialize_deserialize()
std::span< const uint8_t > FuzzBufferType
#define T(expected, seed, data)
LineReader reader("GET / HTTP/1.0\r\nHost: ", MAX_HEADERS_SIZE)
constexpr TransactionSerParams TX_WITH_WITNESS
void Serialize(Stream &, V)=delete
constexpr deserialize_type deserialize
std::unique_ptr< T > MakeNoLogFileContext(const ChainType chain_type=ChainType::REGTEST, TestOpts opts={})
Make a test setup that has disk access to the debug.log file disabled.
Describes a place in the block chain to another node such that if the other node doesn't have the sam...
P ConsumeDeserializationParams(FuzzedDataProvider &fuzzed_data_provider) noexcept
std::optional< T > ConsumeDeserializable(FuzzedDataProvider &fuzzed_data_provider, const P ¶ms, const std::optional< size_t > &max_length=std::nullopt) noexcept
transaction_identifier< false > Txid
Txid commits to all transaction fields except the witness.