比特币源码阅读(0.16)(九)

CBlock

区块是一种被包含在公开账簿(区块链)里的聚合了交易信息的容器数据结构。它由一个包含元数据的区块头和紧跟其后的构成区块主体的一长串交易列表组成。区块头是80字节,平均每个交易至少是250字节,平均每个区块至少包含超过500个交易。因此,一个包含所有交易的完整区块比区块头大1000倍。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class CBlockHeader
{
public:
// 版本号,通常是1
int32_t nVersion;
// 父区块哈希值
uint256 hashPrevBlock;
//merkle树根(一种用来有效地总结区块中所有交易的数据结构)
uint256 hashMerkleRoot;
//时间戳
uint32_t nTime;
//难度目标,这个标记的值被存为系数/指数格式,前两位十六进制数字为幂(exponent),接下来得六位为系数(coefficient)。
uint32_t nBits;
//工作量证明算法的计数器
uint32_t nNonce;
};

class CBlock : public CBlockHeader
{
public:
// network and disk
std::vector<CTransactionRef> vtx;

// memory only
mutable bool fChecked;
};