Bitcoin Core  31.0.0
P2P Digital Currency
block.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-present 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_PRIMITIVES_BLOCK_H
7 #define BITCOIN_PRIMITIVES_BLOCK_H
8 
10 #include <serialize.h>
11 #include <uint256.h>
12 #include <util/time.h>
13 
14 #include <cstdint>
15 #include <string>
16 #include <utility>
17 #include <vector>
18 
27 {
28 public:
29  // header
30  int32_t nVersion;
33  uint32_t nTime;
34  uint32_t nBits;
35  uint32_t nNonce;
36 
38  {
39  SetNull();
40  }
41 
42  SERIALIZE_METHODS(CBlockHeader, obj) { READWRITE(obj.nVersion, obj.hashPrevBlock, obj.hashMerkleRoot, obj.nTime, obj.nBits, obj.nNonce); }
43 
44  void SetNull()
45  {
46  nVersion = 0;
49  nTime = 0;
50  nBits = 0;
51  nNonce = 0;
52  }
53 
54  bool IsNull() const
55  {
56  return (nBits == 0);
57  }
58 
59  uint256 GetHash() const;
60 
61  NodeSeconds Time() const
62  {
63  return NodeSeconds{std::chrono::seconds{nTime}};
64  }
65 
66  int64_t GetBlockTime() const
67  {
68  return (int64_t)nTime;
69  }
70 };
71 
72 
73 class CBlock : public CBlockHeader
74 {
75 public:
76  // network and disk
77  std::vector<CTransactionRef> vtx;
78 
79  // Memory-only flags for caching expensive checks
80  mutable bool fChecked; // CheckBlock()
81  mutable bool m_checked_witness_commitment{false}; // CheckWitnessCommitment()
82  mutable bool m_checked_merkle_root{false}; // CheckMerkleRoot()
83 
85  {
86  SetNull();
87  }
88 
89  CBlock(const CBlockHeader &header)
90  {
91  SetNull();
92  *(static_cast<CBlockHeader*>(this)) = header;
93  }
94 
96  {
97  READWRITE(AsBase<CBlockHeader>(obj), obj.vtx);
98  }
99 
100  void SetNull()
101  {
103  vtx.clear();
104  fChecked = false;
106  m_checked_merkle_root = false;
107  }
108 
109  std::string ToString() const;
110 };
111 
117 {
125  static constexpr int DUMMY_VERSION = 70016;
126 
127  std::vector<uint256> vHave;
128 
129  CBlockLocator() = default;
130 
131  explicit CBlockLocator(std::vector<uint256>&& have) : vHave(std::move(have)) {}
132 
134  {
135  int nVersion = DUMMY_VERSION;
136  READWRITE(nVersion);
137  READWRITE(obj.vHave);
138  }
139 
140  void SetNull()
141  {
142  vHave.clear();
143  }
144 
145  bool IsNull() const
146  {
147  return vHave.empty();
148  }
149 };
150 
151 #endif // BITCOIN_PRIMITIVES_BLOCK_H
uint32_t nNonce
Definition: block.h:35
CBlockHeader()
Definition: block.h:37
SERIALIZE_METHODS(CBlockHeader, obj)
Definition: block.h:42
Describes a place in the block chain to another node such that if the other node doesn&#39;t have the sam...
Definition: block.h:116
SERIALIZE_METHODS(CBlockLocator, obj)
Definition: block.h:133
Definition: block.h:73
CBlock(const CBlockHeader &header)
Definition: block.h:89
static constexpr int DUMMY_VERSION
Historically CBlockLocator&#39;s version field has been written to network streams as the negotiated prot...
Definition: block.h:125
std::string ToString() const
Definition: block.cpp:20
Definition: common.h:29
bool IsNull() const
Definition: block.h:145
SERIALIZE_METHODS(CBlock, obj)
Definition: block.h:95
CBlock()
Definition: block.h:84
uint32_t nTime
Definition: block.h:33
CBlockLocator()=default
void SetNull()
Definition: block.h:140
uint256 hashMerkleRoot
Definition: block.h:32
uint256 hashPrevBlock
Definition: block.h:31
void SetNull()
Definition: block.h:44
std::vector< uint256 > vHave
Definition: block.h:127
int64_t GetBlockTime() const
Definition: block.h:66
uint256 GetHash() const
Definition: block.cpp:15
256-bit opaque blob.
Definition: uint256.h:195
std::vector< CTransactionRef > vtx
Definition: block.h:77
constexpr void SetNull()
Definition: uint256.h:55
void SetNull()
Definition: block.h:100
bool IsNull() const
Definition: block.h:54
NodeSeconds Time() const
Definition: block.h:61
std::chrono::time_point< NodeClock, std::chrono::seconds > NodeSeconds
Definition: time.h:25
bool m_checked_witness_commitment
Definition: block.h:81
bool fChecked
Definition: block.h:80
#define READWRITE(...)
Definition: serialize.h:145
CBlockLocator(std::vector< uint256 > &&have)
Definition: block.h:131
int32_t nVersion
Definition: block.h:30
Nodes collect new transactions into a block, hash them into a hash tree, and scan through nonce value...
Definition: block.h:26
bool m_checked_merkle_root
Definition: block.h:82
uint32_t nBits
Definition: block.h:34