Bitcoin Core 22.99.0
P2P Digital Currency
chain.cpp
Go to the documentation of this file.
1// Copyright (c) 2020 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 <chain.h>
7#include <test/fuzz/fuzz.h>
8#include <test/fuzz/util.h>
9
10#include <cstdint>
11#include <optional>
12#include <vector>
13
15{
16 FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
17 std::optional<CDiskBlockIndex> disk_block_index = ConsumeDeserializable<CDiskBlockIndex>(fuzzed_data_provider);
18 if (!disk_block_index) {
19 return;
20 }
21
22 const uint256 zero{};
23 disk_block_index->phashBlock = &zero;
24 (void)disk_block_index->GetBlockHash();
25 (void)disk_block_index->GetBlockPos();
26 (void)disk_block_index->GetBlockTime();
27 (void)disk_block_index->GetBlockTimeMax();
28 (void)disk_block_index->GetMedianTimePast();
29 (void)disk_block_index->GetUndoPos();
30 (void)disk_block_index->HaveTxsDownloaded();
31 (void)disk_block_index->IsValid();
32 (void)disk_block_index->ToString();
33
34 const CBlockHeader block_header = disk_block_index->GetBlockHeader();
35 (void)CDiskBlockIndex{*disk_block_index};
36 (void)disk_block_index->BuildSkip();
37
38 while (fuzzed_data_provider.ConsumeBool()) {
39 const BlockStatus block_status = fuzzed_data_provider.PickValueInArray({
54 });
55 if (block_status & ~BLOCK_VALID_MASK) {
56 continue;
57 }
58 (void)disk_block_index->RaiseValidity(block_status);
59 }
60
61 CBlockIndex block_index{block_header};
62 block_index.phashBlock = &zero;
63 (void)block_index.GetBlockHash();
64 (void)block_index.ToString();
65}
BlockStatus
Definition: chain.h:92
@ BLOCK_VALID_CHAIN
Outputs do not overspend inputs, no double spends, coinbase output ok, no immature coinbase spends,...
Definition: chain.h:112
@ BLOCK_VALID_MASK
All validity bits.
Definition: chain.h:118
@ BLOCK_VALID_TRANSACTIONS
Only first tx is coinbase, 2 <= coinbase input script length <= 100, transactions valid,...
Definition: chain.h:108
@ BLOCK_VALID_SCRIPTS
Scripts & signatures ok. Implies all parents are also at least SCRIPTS.
Definition: chain.h:115
@ BLOCK_VALID_RESERVED
Reserved (was BLOCK_VALID_HEADER).
Definition: chain.h:97
@ BLOCK_VALID_TREE
All parent headers found, difficulty matches, timestamp >= median previous, checkpoint.
Definition: chain.h:101
@ BLOCK_HAVE_UNDO
undo data available in rev*.dat
Definition: chain.h:122
@ BLOCK_HAVE_DATA
full block available in blk*.dat
Definition: chain.h:121
@ BLOCK_FAILED_CHILD
descends from failed block
Definition: chain.h:126
@ BLOCK_FAILED_MASK
Definition: chain.h:127
@ BLOCK_FAILED_VALID
stage after last reached validness failed
Definition: chain.h:125
@ BLOCK_OPT_WITNESS
block data in blk*.dat was received with a witness-enforcing client
Definition: chain.h:129
@ BLOCK_HAVE_MASK
Definition: chain.h:123
@ BLOCK_VALID_UNKNOWN
Unused.
Definition: chain.h:94
Nodes collect new transactions into a block, hash them into a hash tree, and scan through nonce value...
Definition: block.h:21
The block chain is a tree shaped structure starting with the genesis block at the root,...
Definition: chain.h:146
void BuildSkip()
Build the skiplist pointer for this entry.
Definition: chain.cpp:116
Used to marshal pointers into hashes for db storage.
Definition: chain.h:352
T PickValueInArray(const T(&array)[size])
std::string ToString() const
Definition: uint256.cpp:64
256-bit opaque blob.
Definition: uint256.h:124
FUZZ_TARGET(chain)
Definition: chain.cpp:14