Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
test
fuzz
block.cpp
Go to the documentation of this file.
1
// Copyright (c) 2019-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 <chainparams.h>
6
#include <
consensus/merkle.h
>
7
#include <
consensus/validation.h
>
8
#include <
core_io.h
>
9
#include <
core_memusage.h
>
10
#include <
primitives/block.h
>
11
#include <
pubkey.h
>
12
#include <
streams.h
>
13
#include <
test/fuzz/fuzz.h
>
14
#include <
util/chaintype.h
>
15
#include <
validation.h
>
16
17
#include <cassert>
18
#include <string>
19
20
void
initialize_block
()
21
{
22
SelectParams
(
ChainType::REGTEST
);
23
}
24
25
FUZZ_TARGET
(block, .
init
=
initialize_block
)
26
{
27
CBlock
block;
28
try
{
29
SpanReader
{buffer} >>
TX_WITH_WITNESS
(block);
30
}
catch
(
const
std::ios_base::failure&) {
31
return
;
32
}
33
const
Consensus::Params
& consensus_params =
Params
().
GetConsensus
();
34
BlockValidationState
validation_state_pow_and_merkle;
35
const
bool
valid_incl_pow_and_merkle =
CheckBlock
(block, validation_state_pow_and_merkle, consensus_params,
/* fCheckPOW= */
true
,
/* fCheckMerkleRoot= */
true
);
36
assert
(validation_state_pow_and_merkle.
IsValid
() || validation_state_pow_and_merkle.
IsInvalid
() || validation_state_pow_and_merkle.
IsError
());
37
(void)validation_state_pow_and_merkle.
Error
(
""
);
38
BlockValidationState
validation_state_pow;
39
const
bool
valid_incl_pow =
CheckBlock
(block, validation_state_pow, consensus_params,
/* fCheckPOW= */
true
,
/* fCheckMerkleRoot= */
false
);
40
assert
(validation_state_pow.
IsValid
() || validation_state_pow.
IsInvalid
() || validation_state_pow.
IsError
());
41
BlockValidationState
validation_state_merkle;
42
const
bool
valid_incl_merkle =
CheckBlock
(block, validation_state_merkle, consensus_params,
/* fCheckPOW= */
false
,
/* fCheckMerkleRoot= */
true
);
43
assert
(validation_state_merkle.
IsValid
() || validation_state_merkle.
IsInvalid
() || validation_state_merkle.
IsError
());
44
BlockValidationState
validation_state_none;
45
const
bool
valid_incl_none =
CheckBlock
(block, validation_state_none, consensus_params,
/* fCheckPOW= */
false
,
/* fCheckMerkleRoot= */
false
);
46
assert
(validation_state_none.
IsValid
() || validation_state_none.
IsInvalid
() || validation_state_none.
IsError
());
47
if
(valid_incl_pow_and_merkle) {
48
assert
(valid_incl_pow && valid_incl_merkle && valid_incl_none);
49
}
else
if
(valid_incl_merkle || valid_incl_pow) {
50
assert
(valid_incl_none);
51
}
52
(void)block.
GetHash
();
53
(void)block.
ToString
();
54
(void)
BlockMerkleRoot
(block);
55
if
(!block.
vtx
.empty()) {
56
(void)
BlockWitnessMerkleRoot
(block);
57
}
58
(void)
GetBlockWeight
(block);
59
(void)
GetWitnessCommitmentIndex
(block);
60
const
size_t
raw_memory_size =
RecursiveDynamicUsage
(block);
61
const
size_t
raw_memory_size_as_shared_ptr =
RecursiveDynamicUsage
(std::make_shared<CBlock>(block));
62
assert
(raw_memory_size_as_shared_ptr > raw_memory_size);
63
CBlock
block_copy = block;
64
block_copy.
SetNull
();
65
const
bool
is_null = block_copy.
IsNull
();
66
assert
(is_null);
67
}
block.h
SelectParams
void SelectParams(const ChainType chain)
Sets the params returned by Params() to those for the given chain type.
Definition
chainparams.cpp:140
Params
const CChainParams & Params()
Return the currently selected parameters.
Definition
chainparams.cpp:112
chaintype.h
ChainType::REGTEST
@ REGTEST
Definition
chaintype.h:15
BlockValidationState
Definition
validation.h:126
CBlockHeader::GetHash
uint256 GetHash() const
Definition
block.cpp:15
CBlockHeader::IsNull
bool IsNull() const
Definition
block.h:54
CBlock
Definition
block.h:74
CBlock::SetNull
void SetNull()
Definition
block.h:100
CBlock::ToString
std::string ToString() const
Definition
block.cpp:20
CBlock::vtx
std::vector< CTransactionRef > vtx
Definition
block.h:77
CChainParams::GetConsensus
const Consensus::Params & GetConsensus() const
Definition
chainparams.h:89
SpanReader
Minimal stream for reading from an existing byte array by std::span.
Definition
streams.h:83
ValidationState::IsValid
bool IsValid() const
Definition
validation.h:105
ValidationState::Error
bool Error(const std::string &reject_reason)
Definition
validation.h:98
ValidationState::IsError
bool IsError() const
Definition
validation.h:107
ValidationState::IsInvalid
bool IsInvalid() const
Definition
validation.h:106
BlockMerkleRoot
uint256 BlockMerkleRoot(const CBlock &block, bool *mutated)
Definition
merkle.cpp:66
BlockWitnessMerkleRoot
uint256 BlockWitnessMerkleRoot(const CBlock &block)
Definition
merkle.cpp:76
validation.h
GetBlockWeight
static int64_t GetBlockWeight(const CBlock &block)
Definition
validation.h:136
GetWitnessCommitmentIndex
int GetWitnessCommitmentIndex(const CBlock &block)
Compute at which vout of the block's coinbase transaction the witness commitment occurs,...
Definition
validation.h:147
core_io.h
core_memusage.h
RecursiveDynamicUsage
static size_t RecursiveDynamicUsage(const CScript &script)
Definition
core_memusage.h:12
fuzz.h
FUZZ_TARGET
#define FUZZ_TARGET(...)
Definition
fuzz.h:35
merkle.h
init
Definition
bitcoin-gui.cpp:17
TX_WITH_WITNESS
static constexpr TransactionSerParams TX_WITH_WITNESS
Definition
transaction.h:180
pubkey.h
streams.h
Consensus::Params
Parameters that influence chain consensus.
Definition
params.h:84
initialize_block
void initialize_block()
Definition
block.cpp:20
CheckBlock
bool CheckBlock(const CBlock &block, BlockValidationState &state, const Consensus::Params &consensusParams, bool fCheckPOW, bool fCheckMerkleRoot)
Functions for validating blocks and updating the block tree.
Definition
validation.cpp:3966
assert
assert(!tx.IsCoinBase())
validation.h
Generated on
for Bitcoin Core by
1.17.0