Bitcoin Core
31.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
src
test
util
validation.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 <
test/util/validation.h
>
6
7
#include <
node/blockstorage.h
>
8
#include <
util/check.h
>
9
#include <util/time.h>
10
#include <
validation.h
>
11
#include <
validationinterface.h
>
12
13
using
kernel::ChainstateRole
;
14
15
void
TestBlockManager::CleanupForFuzzing
()
16
{
17
m_dirty_blockindex
.clear();
18
m_dirty_fileinfo
.clear();
19
m_blockfile_info
.resize(1);
20
}
21
22
void
TestChainstateManager::DisableNextWrite
()
23
{
24
struct
TestChainstate :
public
Chainstate
{
25
void
ResetNextWrite() { m_next_write = NodeClock::time_point::max() - 1s; }
26
};
27
LOCK
(
::cs_main
);
28
for
(
const
auto
&
cs
: m_chainstates) {
29
static_cast<
TestChainstate&
>
(*cs).ResetNextWrite();
30
}
31
}
32
33
void
TestChainstateManager::ResetIbd
()
34
{
35
m_cached_is_ibd
=
true
;
36
assert
(
IsInitialBlockDownload
());
37
}
38
39
void
TestChainstateManager::JumpOutOfIbd
()
40
{
41
Assert
(
IsInitialBlockDownload
());
42
m_cached_is_ibd
=
false
;
43
Assert
(!
IsInitialBlockDownload
());
44
}
45
46
void
ValidationInterfaceTest::BlockConnected
(
47
const
ChainstateRole
& role,
48
CValidationInterface
& obj,
49
const
std::shared_ptr<const CBlock>& block,
50
const
CBlockIndex
* pindex)
51
{
52
obj.
BlockConnected
(role, block, pindex);
53
}
54
void
TestChainstateManager::InvalidBlockFound
(
CBlockIndex
* pindex,
const
BlockValidationState
& state)
55
{
56
struct
TestChainstate :
public
Chainstate
{
57
void
CallInvalidBlockFound(
CBlockIndex
* pindex,
const
BlockValidationState
& state)
EXCLUSIVE_LOCKS_REQUIRED
(
cs_main
)
58
{
59
InvalidBlockFound
(pindex, state);
60
}
61
};
62
63
static_cast<
TestChainstate*
>
(&
ActiveChainstate
())->CallInvalidBlockFound(pindex, state);
64
}
65
66
void
TestChainstateManager::InvalidChainFound
(
CBlockIndex
* pindexNew)
67
{
68
struct
TestChainstate :
public
Chainstate
{
69
void
CallInvalidChainFound(
CBlockIndex
* pindexNew)
EXCLUSIVE_LOCKS_REQUIRED
(
cs_main
)
70
{
71
InvalidChainFound
(pindexNew);
72
}
73
};
74
75
static_cast<
TestChainstate*
>
(&
ActiveChainstate
())->CallInvalidChainFound(pindexNew);
76
}
77
78
CBlockIndex
*
TestChainstateManager::FindMostWorkChain
()
79
{
80
struct
TestChainstate :
public
Chainstate
{
81
CBlockIndex
* CallFindMostWorkChain()
EXCLUSIVE_LOCKS_REQUIRED
(
cs_main
)
82
{
83
return
FindMostWorkChain
();
84
}
85
};
86
87
return
static_cast<
TestChainstate*
>
(&
ActiveChainstate
())->CallFindMostWorkChain();
88
}
89
90
void
TestChainstateManager::ResetBestInvalid
()
91
{
92
m_best_invalid =
nullptr
;
93
}
cs
static void pool cs
Definition
blockencodings.cpp:23
blockstorage.h
check.h
Assert
#define Assert(val)
Identity function.
Definition
check.h:113
BlockValidationState
Definition
validation.h:126
CBlockIndex
The block chain is a tree shaped structure starting with the genesis block at the root,...
Definition
chain.h:94
CValidationInterface
Implement this to subscribe to events generated in validation and mempool.
Definition
validationinterface.h:49
CValidationInterface::BlockConnected
virtual void BlockConnected(const kernel::ChainstateRole &role, const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex)
Notifies listeners of a block being connected.
Definition
validationinterface.h:123
ChainstateManager::IsInitialBlockDownload
bool IsInitialBlockDownload() const noexcept
Check whether we are doing an initial block download (synchronizing from disk or network).
Definition
validation.cpp:1937
ChainstateManager::ActiveChainstate
Chainstate & ActiveChainstate() const
Definition
validation.cpp:6098
ChainstateManager::m_cached_is_ibd
std::atomic_bool m_cached_is_ibd
Whether initial block download (IBD) is ongoing.
Definition
validation.h:1049
ChainstateManager::Chainstate
friend Chainstate
Definition
validation.h:972
ValidationInterfaceTest::BlockConnected
static void BlockConnected(const kernel::ChainstateRole &role, CValidationInterface &obj, const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex)
Definition
validation.cpp:46
node::BlockManager::m_dirty_fileinfo
std::set< int > m_dirty_fileinfo
Dirty block file entries.
Definition
blockstorage.h:313
node::BlockManager::m_dirty_blockindex
std::set< CBlockIndex * > m_dirty_blockindex
Dirty block index entries.
Definition
blockstorage.h:310
node::BlockManager::m_blockfile_info
std::vector< CBlockFileInfo > m_blockfile_info
Definition
blockstorage.h:307
cs_main
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
Definition
cs_main.cpp:8
TestBlockManager::CleanupForFuzzing
void CleanupForFuzzing()
Test-only method to clear internal state for fuzzing.
Definition
validation.cpp:15
TestChainstateManager::ResetBestInvalid
void ResetBestInvalid() EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition
validation.cpp:90
TestChainstateManager::InvalidChainFound
void InvalidChainFound(CBlockIndex *pindexNew) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition
validation.cpp:66
TestChainstateManager::FindMostWorkChain
CBlockIndex * FindMostWorkChain() EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition
validation.cpp:78
TestChainstateManager::DisableNextWrite
void DisableNextWrite()
Disable the next write of all chainstates.
Definition
validation.cpp:22
TestChainstateManager::InvalidBlockFound
void InvalidBlockFound(CBlockIndex *pindex, const BlockValidationState &state) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Wrappers that avoid making chainstatemanager internals public for tests.
Definition
validation.cpp:54
TestChainstateManager::JumpOutOfIbd
void JumpOutOfIbd()
Toggle IsInitialBlockDownload from true to false.
Definition
validation.cpp:39
TestChainstateManager::ResetIbd
void ResetIbd()
Reset the ibd cache to its initial state.
Definition
validation.cpp:33
kernel::ChainstateRole
Information about chainstate that notifications are sent from.
Definition
types.h:18
LOCK
#define LOCK(cs)
Definition
sync.h:258
validation.h
EXCLUSIVE_LOCKS_REQUIRED
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition
threadsafety.h:51
assert
assert(!tx.IsCoinBase())
validationinterface.h
Generated on
for Bitcoin Core by
1.16.1