Bitcoin Core  22.99.0
P2P Digital Currency
chain.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2021 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #ifndef BITCOIN_CHAIN_H
7 #define BITCOIN_CHAIN_H
8 
9 #include <arith_uint256.h>
10 #include <consensus/params.h>
11 #include <flatfile.h>
12 #include <primitives/block.h>
13 #include <sync.h>
14 #include <tinyformat.h>
15 #include <uint256.h>
16 
17 #include <vector>
18 
23 static constexpr int64_t MAX_FUTURE_BLOCK_TIME = 2 * 60 * 60;
24 
31 static constexpr int64_t TIMESTAMP_WINDOW = MAX_FUTURE_BLOCK_TIME;
32 
39 static constexpr int64_t MAX_BLOCK_TIME_GAP = 90 * 60;
40 
41 extern RecursiveMutex cs_main;
42 
44 {
45 public:
46  unsigned int nBlocks;
47  unsigned int nSize;
48  unsigned int nUndoSize;
49  unsigned int nHeightFirst;
50  unsigned int nHeightLast;
51  uint64_t nTimeFirst;
52  uint64_t nTimeLast;
53 
55  {
56  READWRITE(VARINT(obj.nBlocks));
57  READWRITE(VARINT(obj.nSize));
58  READWRITE(VARINT(obj.nUndoSize));
59  READWRITE(VARINT(obj.nHeightFirst));
60  READWRITE(VARINT(obj.nHeightLast));
61  READWRITE(VARINT(obj.nTimeFirst));
62  READWRITE(VARINT(obj.nTimeLast));
63  }
64 
65  void SetNull()
66  {
67  nBlocks = 0;
68  nSize = 0;
69  nUndoSize = 0;
70  nHeightFirst = 0;
71  nHeightLast = 0;
72  nTimeFirst = 0;
73  nTimeLast = 0;
74  }
75 
77  {
78  SetNull();
79  }
80 
81  std::string ToString() const;
82 
84  void AddBlock(unsigned int nHeightIn, uint64_t nTimeIn)
85  {
86  if (nBlocks == 0 || nHeightFirst > nHeightIn)
87  nHeightFirst = nHeightIn;
88  if (nBlocks == 0 || nTimeFirst > nTimeIn)
89  nTimeFirst = nTimeIn;
90  nBlocks++;
91  if (nHeightIn > nHeightLast)
92  nHeightLast = nHeightIn;
93  if (nTimeIn > nTimeLast)
94  nTimeLast = nTimeIn;
95  }
96 };
97 
98 enum BlockStatus : uint32_t {
101 
104 
108 
115 
119 
122 
126 
130 
134 
136 
144 };
145 
152 {
153 public:
155  const uint256* phashBlock{nullptr};
156 
158  CBlockIndex* pprev{nullptr};
159 
161  CBlockIndex* pskip{nullptr};
162 
164  int nHeight{0};
165 
167  int nFile GUARDED_BY(::cs_main){0};
168 
170  unsigned int nDataPos GUARDED_BY(::cs_main){0};
171 
173  unsigned int nUndoPos GUARDED_BY(::cs_main){0};
174 
177 
183  unsigned int nTx{0};
184 
193  unsigned int nChainTx{0};
194 
201  uint32_t nStatus GUARDED_BY(::cs_main){0};
202 
204  int32_t nVersion{0};
206  uint32_t nTime{0};
207  uint32_t nBits{0};
208  uint32_t nNonce{0};
209 
211  int32_t nSequenceId{0};
212 
214  unsigned int nTimeMax{0};
215 
217  {
218  }
219 
220  explicit CBlockIndex(const CBlockHeader& block)
221  : nVersion{block.nVersion},
222  hashMerkleRoot{block.hashMerkleRoot},
223  nTime{block.nTime},
224  nBits{block.nBits},
225  nNonce{block.nNonce}
226  {
227  }
228 
230  {
232  FlatFilePos ret;
233  if (nStatus & BLOCK_HAVE_DATA) {
234  ret.nFile = nFile;
235  ret.nPos = nDataPos;
236  }
237  return ret;
238  }
239 
241  {
243  FlatFilePos ret;
244  if (nStatus & BLOCK_HAVE_UNDO) {
245  ret.nFile = nFile;
246  ret.nPos = nUndoPos;
247  }
248  return ret;
249  }
250 
252  {
253  CBlockHeader block;
254  block.nVersion = nVersion;
255  if (pprev)
256  block.hashPrevBlock = pprev->GetBlockHash();
258  block.nTime = nTime;
259  block.nBits = nBits;
260  block.nNonce = nNonce;
261  return block;
262  }
263 
265  {
266  return *phashBlock;
267  }
268 
276  bool HaveTxsDownloaded() const { return nChainTx != 0; }
277 
278  int64_t GetBlockTime() const
279  {
280  return (int64_t)nTime;
281  }
282 
283  int64_t GetBlockTimeMax() const
284  {
285  return (int64_t)nTimeMax;
286  }
287 
288  static constexpr int nMedianTimeSpan = 11;
289 
290  int64_t GetMedianTimePast() const
291  {
292  int64_t pmedian[nMedianTimeSpan];
293  int64_t* pbegin = &pmedian[nMedianTimeSpan];
294  int64_t* pend = &pmedian[nMedianTimeSpan];
295 
296  const CBlockIndex* pindex = this;
297  for (int i = 0; i < nMedianTimeSpan && pindex; i++, pindex = pindex->pprev)
298  *(--pbegin) = pindex->GetBlockTime();
299 
300  std::sort(pbegin, pend);
301  return pbegin[(pend - pbegin) / 2];
302  }
303 
304  std::string ToString() const
305  {
306  return strprintf("CBlockIndex(pprev=%p, nHeight=%d, merkle=%s, hashBlock=%s)",
307  pprev, nHeight,
309  GetBlockHash().ToString());
310  }
311 
315  {
317  assert(!(nUpTo & ~BLOCK_VALID_MASK)); // Only validity flags allowed.
318  if (nStatus & BLOCK_FAILED_MASK)
319  return false;
320  return ((nStatus & BLOCK_VALID_MASK) >= nUpTo);
321  }
322 
326  {
328  return nStatus & BLOCK_ASSUMED_VALID;
329  }
330 
334  {
336  assert(!(nUpTo & ~BLOCK_VALID_MASK)); // Only validity flags allowed.
337  if (nStatus & BLOCK_FAILED_MASK) return false;
338 
339  if ((nStatus & BLOCK_VALID_MASK) < nUpTo) {
340  // If this block had been marked assumed-valid and we're raising
341  // its validity to a certain point, there is no longer an assumption.
342  if (nStatus & BLOCK_ASSUMED_VALID && nUpTo >= BLOCK_VALID_SCRIPTS) {
343  nStatus &= ~BLOCK_ASSUMED_VALID;
344  }
345 
346  nStatus = (nStatus & ~BLOCK_VALID_MASK) | nUpTo;
347  return true;
348  }
349  return false;
350  }
351 
353  void BuildSkip();
354 
356  CBlockIndex* GetAncestor(int height);
357  const CBlockIndex* GetAncestor(int height) const;
358 };
359 
362 int64_t GetBlockProofEquivalentTime(const CBlockIndex& to, const CBlockIndex& from, const CBlockIndex& tip, const Consensus::Params&);
364 const CBlockIndex* LastCommonAncestor(const CBlockIndex* pa, const CBlockIndex* pb);
365 
366 
369 {
370 public:
372 
374  {
375  hashPrev = uint256();
376  }
377 
378  explicit CDiskBlockIndex(const CBlockIndex* pindex) : CBlockIndex(*pindex)
379  {
380  hashPrev = (pprev ? pprev->GetBlockHash() : uint256());
381  }
382 
384  {
385  LOCK(::cs_main);
386  int _nVersion = s.GetVersion();
387  if (!(s.GetType() & SER_GETHASH)) READWRITE(VARINT_MODE(_nVersion, VarIntMode::NONNEGATIVE_SIGNED));
388 
390  READWRITE(VARINT(obj.nStatus));
391  READWRITE(VARINT(obj.nTx));
393  if (obj.nStatus & BLOCK_HAVE_DATA) READWRITE(VARINT(obj.nDataPos));
394  if (obj.nStatus & BLOCK_HAVE_UNDO) READWRITE(VARINT(obj.nUndoPos));
395 
396  // block header
397  READWRITE(obj.nVersion);
398  READWRITE(obj.hashPrev);
399  READWRITE(obj.hashMerkleRoot);
400  READWRITE(obj.nTime);
401  READWRITE(obj.nBits);
402  READWRITE(obj.nNonce);
403  }
404 
406  {
407  CBlockHeader block;
408  block.nVersion = nVersion;
409  block.hashPrevBlock = hashPrev;
411  block.nTime = nTime;
412  block.nBits = nBits;
413  block.nNonce = nNonce;
414  return block.GetHash();
415  }
416 
417 
418  std::string ToString() const
419  {
420  std::string str = "CDiskBlockIndex(";
421  str += CBlockIndex::ToString();
422  str += strprintf("\n hashBlock=%s, hashPrev=%s)",
424  hashPrev.ToString());
425  return str;
426  }
427 };
428 
430 class CChain
431 {
432 private:
433  std::vector<CBlockIndex*> vChain;
434 
435 public:
436  CChain() = default;
437  CChain(const CChain&) = delete;
438  CChain& operator=(const CChain&) = delete;
439 
442  {
443  return vChain.size() > 0 ? vChain[0] : nullptr;
444  }
445 
447  CBlockIndex* Tip() const
448  {
449  return vChain.size() > 0 ? vChain[vChain.size() - 1] : nullptr;
450  }
451 
454  {
455  if (nHeight < 0 || nHeight >= (int)vChain.size())
456  return nullptr;
457  return vChain[nHeight];
458  }
459 
461  bool Contains(const CBlockIndex* pindex) const
462  {
463  return (*this)[pindex->nHeight] == pindex;
464  }
465 
467  CBlockIndex* Next(const CBlockIndex* pindex) const
468  {
469  if (Contains(pindex))
470  return (*this)[pindex->nHeight + 1];
471  else
472  return nullptr;
473  }
474 
476  int Height() const
477  {
478  return vChain.size() - 1;
479  }
480 
482  void SetTip(CBlockIndex* pindex);
483 
485  CBlockLocator GetLocator(const CBlockIndex* pindex = nullptr) const;
486 
488  const CBlockIndex* FindFork(const CBlockIndex* pindex) const;
489 
491  CBlockIndex* FindEarliestAtLeast(int64_t nTime, int height) const;
492 };
493 
494 #endif // BITCOIN_CHAIN_H
CBlockIndex::RaiseValidity
bool RaiseValidity(enum BlockStatus nUpTo) EXCLUSIVE_LOCKS_REQUIRED(
Raise the validity level of this block index entry.
Definition: chain.h:333
MAX_FUTURE_BLOCK_TIME
static constexpr int64_t MAX_FUTURE_BLOCK_TIME
Maximum amount of time that a block timestamp is allowed to exceed the current network-adjusted time ...
Definition: chain.h:23
CBlockIndex::GetBlockTime
int64_t GetBlockTime() const
Definition: chain.h:278
FlatFilePos::nFile
int nFile
Definition: flatfile.h:16
block.h
arith_uint256.h
BLOCK_FAILED_MASK
@ BLOCK_FAILED_MASK
Definition: chain.h:133
CBlockFileInfo::nTimeFirst
uint64_t nTimeFirst
earliest time of block in file
Definition: chain.h:51
CBlockIndex::GetAncestor
CBlockIndex * GetAncestor(int height)
Efficiently find an ancestor of this block.
Definition: chain.cpp:114
assert
assert(!tx.IsCoinBase())
CBlockIndex::phashBlock
const uint256 * phashBlock
pointer to the hash of the block, if any. Memory is owned by this CBlockIndex
Definition: chain.h:155
CBlockIndex::nTime
uint32_t nTime
Definition: chain.h:206
CBlockHeader::hashMerkleRoot
uint256 hashMerkleRoot
Definition: block.h:26
BLOCK_VALID_UNKNOWN
@ BLOCK_VALID_UNKNOWN
Unused.
Definition: chain.h:100
CBlockHeader::nBits
uint32_t nBits
Definition: block.h:28
nHeight
unsigned int nHeight
Definition: mempool_eviction.cpp:14
MAX_BLOCK_TIME_GAP
static constexpr int64_t MAX_BLOCK_TIME_GAP
Maximum gap between node time and block time used for the "Catching up..." mode in GUI.
Definition: chain.h:39
CBlockHeader
Nodes collect new transactions into a block, hash them into a hash tree, and scan through nonce value...
Definition: block.h:20
CBlockIndex::nTx
unsigned int nTx
Number of transactions in this block.
Definition: chain.h:183
BLOCK_VALID_TREE
@ BLOCK_VALID_TREE
All parent headers found, difficulty matches, timestamp >= median previous, checkpoint.
Definition: chain.h:107
sync.h
CBlockHeader::nVersion
int32_t nVersion
Definition: block.h:24
VARINT_MODE
#define VARINT_MODE(obj, mode)
Definition: serialize.h:435
CBlockIndex::nBits
uint32_t nBits
Definition: chain.h:207
uint256.h
arith_uint256
256-bit unsigned big integer.
Definition: arith_uint256.h:250
flatfile.h
CBlockIndex::pprev
CBlockIndex * pprev
pointer to the index of the predecessor of this block
Definition: chain.h:158
CBlockIndex::nHeight
int nHeight
height of the entry in the chain. The genesis block has height 0
Definition: chain.h:164
CBlockIndex::GetBlockPos
FlatFilePos GetBlockPos() const EXCLUSIVE_LOCKS_REQUIRED(
Definition: chain.h:229
BLOCK_VALID_RESERVED
@ BLOCK_VALID_RESERVED
Reserved (was BLOCK_VALID_HEADER).
Definition: chain.h:103
CChain::CChain
CChain()=default
CBlockIndex::ToString
std::string ToString() const
Definition: chain.h:304
CDiskBlockIndex::CDiskBlockIndex
CDiskBlockIndex(const CBlockIndex *pindex)
Definition: chain.h:378
CBlockIndex::nChainWork
arith_uint256 nChainWork
(memory only) Total amount of work (expected number of hashes) in the chain up to and including this ...
Definition: chain.h:176
VarIntMode::NONNEGATIVE_SIGNED
@ NONNEGATIVE_SIGNED
AnnotatedMixin< std::recursive_mutex >
CBlockIndex::nChainTx
unsigned int nChainTx
(memory only) Number of transactions in the chain up to and including this block.
Definition: chain.h:193
CDiskBlockIndex
Used to marshal pointers into hashes for db storage.
Definition: chain.h:368
CBlockIndex::pskip
CBlockIndex * pskip
pointer to the index of some further predecessor of this block
Definition: chain.h:161
CChain::Tip
CBlockIndex * Tip() const
Returns the index entry for the tip of this chain, or nullptr if none.
Definition: chain.h:447
CBlockHeader::GetHash
uint256 GetHash() const
Definition: block.cpp:11
CChain::FindFork
const CBlockIndex * FindFork(const CBlockIndex *pindex) const
Find the last common block between this chain and a block index entry.
Definition: chain.cpp:54
AssertLockHeld
AssertLockHeld(pool.cs)
tinyformat.h
CBlockIndex::GetBlockTimeMax
int64_t GetBlockTimeMax() const
Definition: chain.h:283
CBlockHeader::nNonce
uint32_t nNonce
Definition: block.h:29
CChain::FindEarliestAtLeast
CBlockIndex * FindEarliestAtLeast(int64_t nTime, int height) const
Find the earliest block with timestamp equal or greater than the given time and height equal or great...
Definition: chain.cpp:65
BLOCK_FAILED_VALID
@ BLOCK_FAILED_VALID
stage after last reached validness failed
Definition: chain.h:131
CBlockIndex::GetBlockHeader
CBlockHeader GetBlockHeader() const
Definition: chain.h:251
Consensus::Params
Parameters that influence chain consensus.
Definition: params.h:70
CBlockFileInfo::nTimeLast
uint64_t nTimeLast
latest time of block in file
Definition: chain.h:52
CBlockFileInfo::CBlockFileInfo
CBlockFileInfo()
Definition: chain.h:76
CBlockFileInfo::nBlocks
unsigned int nBlocks
number of blocks stored in file
Definition: chain.h:46
CBlockIndex::GetMedianTimePast
int64_t GetMedianTimePast() const
Definition: chain.h:290
FlatFilePos
Definition: flatfile.h:14
VARINT
#define VARINT(obj)
Definition: serialize.h:436
BLOCK_VALID_SCRIPTS
@ BLOCK_VALID_SCRIPTS
Scripts & signatures ok. Implies all parents are also at least SCRIPTS.
Definition: chain.h:121
CBlockIndex::nVersion
int32_t nVersion
block header
Definition: chain.h:204
CBlockFileInfo::nHeightFirst
unsigned int nHeightFirst
lowest height of block in file
Definition: chain.h:49
CBlockIndex::nMedianTimeSpan
static constexpr int nMedianTimeSpan
Definition: chain.h:288
CBlockIndex::CBlockIndex
CBlockIndex()
Definition: chain.h:216
CBlockIndex::hashMerkleRoot
uint256 hashMerkleRoot
Definition: chain.h:205
BLOCK_VALID_TRANSACTIONS
@ BLOCK_VALID_TRANSACTIONS
Only first tx is coinbase, 2 <= coinbase input script length <= 100, transactions valid,...
Definition: chain.h:114
CDiskBlockIndex::ToString
std::string ToString() const
Definition: chain.h:418
CChain::GetLocator
CBlockLocator GetLocator(const CBlockIndex *pindex=nullptr) const
Return a CBlockLocator that refers to a block in this chain (by default the tip).
Definition: chain.cpp:26
BLOCK_ASSUMED_VALID
@ BLOCK_ASSUMED_VALID
If set, this indicates that the block index entry is assumed-valid.
Definition: chain.h:143
CBlockIndex::nTimeMax
unsigned int nTimeMax
(memory only) Maximum nTime in the chain up to and including this block.
Definition: chain.h:214
CBlockHeader::nTime
uint32_t nTime
Definition: block.h:27
base_blob::ToString
std::string ToString() const
Definition: uint256.cpp:64
uint256
256-bit opaque blob.
Definition: uint256.h:126
READWRITE
#define READWRITE(...)
Definition: serialize.h:140
CBlockFileInfo::nHeightLast
unsigned int nHeightLast
highest height of block in file
Definition: chain.h:50
CBlockFileInfo::AddBlock
void AddBlock(unsigned int nHeightIn, uint64_t nTimeIn)
update statistics (does not update nSize)
Definition: chain.h:84
BLOCK_VALID_MASK
@ BLOCK_VALID_MASK
All validity bits.
Definition: chain.h:124
CChain::SetTip
void SetTip(CBlockIndex *pindex)
Set/initialize a chain with a given tip.
Definition: chain.cpp:14
CBlockIndex::GetBlockHash
uint256 GetBlockHash() const
Definition: chain.h:264
CBlockIndex::IsAssumedValid
bool IsAssumedValid() const EXCLUSIVE_LOCKS_REQUIRED(
Definition: chain.h:325
CChain::Height
int Height() const
Return the maximal height in the chain.
Definition: chain.h:476
CBlockHeader::hashPrevBlock
uint256 hashPrevBlock
Definition: block.h:25
strprintf
#define strprintf
Format arguments and return the string or write to given std::ostream (see tinyformat::format doc for...
Definition: tinyformat.h:1164
GetBlockProof
arith_uint256 GetBlockProof(const CBlockIndex &block)
Definition: chain.cpp:125
CChain
An in-memory indexed chain of blocks.
Definition: chain.h:430
EXCLUSIVE_LOCKS_REQUIRED
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: threadsafety.h:49
CBlockIndex::nSequenceId
int32_t nSequenceId
(memory only) Sequential id assigned to distinguish order in which blocks are received.
Definition: chain.h:211
LOCK
#define LOCK(cs)
Definition: sync.h:226
CBlockIndex::GUARDED_BY
unsigned int nDataPos GUARDED_BY(::cs_main)
Byte offset within blk?????.dat where this block's data is stored.
Definition: chain.h:170
CBlockIndex::BuildSkip
void BuildSkip()
Build the skiplist pointer for this entry.
Definition: chain.cpp:119
CBlockFileInfo
Definition: chain.h:43
CChain::vChain
std::vector< CBlockIndex * > vChain
Definition: chain.h:433
CBlockIndex::HaveTxsDownloaded
bool HaveTxsDownloaded() const
Check whether this block's and all previous blocks' transactions have been downloaded (and stored to ...
Definition: chain.h:276
params.h
CBlockIndex::nNonce
uint32_t nNonce
Definition: chain.h:208
BLOCK_HAVE_UNDO
@ BLOCK_HAVE_UNDO
undo data available in rev*.dat
Definition: chain.h:128
BlockStatus
BlockStatus
Definition: chain.h:98
CChain::Contains
bool Contains(const CBlockIndex *pindex) const
Efficiently check whether a block is present in this chain.
Definition: chain.h:461
CBlockIndex::GUARDED_BY
unsigned int nUndoPos GUARDED_BY(::cs_main)
Byte offset within rev?????.dat where this block's undo data is stored.
Definition: chain.h:173
CBlockFileInfo::SetNull
void SetNull()
Definition: chain.h:65
GetBlockProofEquivalentTime
int64_t GetBlockProofEquivalentTime(const CBlockIndex &to, const CBlockIndex &from, const CBlockIndex &tip, const Consensus::Params &)
Return the time it would take to redo the work difference between from and to, assuming the current h...
Definition: chain.cpp:140
CBlockFileInfo::nUndoSize
unsigned int nUndoSize
number of used bytes in the undo file
Definition: chain.h:48
CDiskBlockIndex::hashPrev
uint256 hashPrev
Definition: chain.h:371
CDiskBlockIndex::GetBlockHash
uint256 GetBlockHash() const
Definition: chain.h:405
CBlockIndex::CBlockIndex
CBlockIndex(const CBlockHeader &block)
Definition: chain.h:220
LastCommonAncestor
const CBlockIndex * LastCommonAncestor(const CBlockIndex *pa, const CBlockIndex *pb)
Find the forking point between two chain tips.
Definition: chain.cpp:159
FlatFilePos::nPos
unsigned int nPos
Definition: flatfile.h:17
CDiskBlockIndex::SERIALIZE_METHODS
SERIALIZE_METHODS(CDiskBlockIndex, obj)
Definition: chain.h:383
BLOCK_VALID_CHAIN
@ BLOCK_VALID_CHAIN
Outputs do not overspend inputs, no double spends, coinbase output ok, no immature coinbase spends,...
Definition: chain.h:118
CBlockIndex::GUARDED_BY
int nFile GUARDED_BY(::cs_main)
Which # file this block is stored in (blk?????.dat)
Definition: chain.h:167
CBlockFileInfo::ToString
std::string ToString() const
Definition: chain.cpp:9
CDiskBlockIndex::CDiskBlockIndex
CDiskBlockIndex()
Definition: chain.h:373
BLOCK_OPT_WITNESS
@ BLOCK_OPT_WITNESS
block data in blk*.dat was received with a witness-enforcing client
Definition: chain.h:135
CBlockIndex::IsValid
bool IsValid(enum BlockStatus nUpTo=BLOCK_VALID_TRANSACTIONS) const EXCLUSIVE_LOCKS_REQUIRED(
Check whether this block index entry is valid up to the passed validity level.
Definition: chain.h:313
BLOCK_HAVE_DATA
@ BLOCK_HAVE_DATA
full block available in blk*.dat
Definition: chain.h:127
CBlockLocator
Describes a place in the block chain to another node such that if the other node doesn't have the sam...
Definition: block.h:114
cs_main
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
Definition: validation.cpp:138
CBlockIndex
The block chain is a tree shaped structure starting with the genesis block at the root,...
Definition: chain.h:151
BLOCK_HAVE_MASK
@ BLOCK_HAVE_MASK
Definition: chain.h:129
CChain::operator[]
CBlockIndex * operator[](int nHeight) const
Returns the index entry at a particular height in this chain, or nullptr if no such height exists.
Definition: chain.h:453
CBlockFileInfo::nSize
unsigned int nSize
number of used bytes of block file
Definition: chain.h:47
SER_GETHASH
@ SER_GETHASH
Definition: serialize.h:133
CChain::operator=
CChain & operator=(const CChain &)=delete
CChain::Next
CBlockIndex * Next(const CBlockIndex *pindex) const
Find the successor of a block in this chain, or nullptr if the given index is not found or is the tip...
Definition: chain.h:467
CBlockIndex::GetUndoPos
FlatFilePos GetUndoPos() const EXCLUSIVE_LOCKS_REQUIRED(
Definition: chain.h:240
CChain::Genesis
CBlockIndex * Genesis() const
Returns the index entry for the genesis block of this chain, or nullptr if none.
Definition: chain.h:441
CBlockIndex::GUARDED_BY
uint32_t nStatus GUARDED_BY(::cs_main)
Verification status of this block.
Definition: chain.h:201
TIMESTAMP_WINDOW
static constexpr int64_t TIMESTAMP_WINDOW
Timestamp window used as a grace period by code that compares external timestamps (such as timestamps...
Definition: chain.h:31
BLOCK_FAILED_CHILD
@ BLOCK_FAILED_CHILD
descends from failed block
Definition: chain.h:132
CBlockFileInfo::SERIALIZE_METHODS
SERIALIZE_METHODS(CBlockFileInfo, obj)
Definition: chain.h:54