主页 > imtoken官网网址 > 比特币源码分析(七)——数据结构——区块

比特币源码分析(七)——数据结构——区块

imtoken官网网址 2023-11-16 05:08:55

比特币源码分析(七)——数据结构——区块

0x00 摘要

区块是区块链的基本结构,是交易信息的载体。 矿工通过挖矿产生新的区块并获得奖励。 产生新区块的过程也是交易打包的过程。 只有系统中的交易才会被系统中的所有其他节点识别并有效。

0x01 CBlockHeader

/** 
 * 网络中的节点不断收集新的交易,然后一个Merkle树的形式打包进区块中,
 * 打包的过程就是要完成工作量证明的要求,当节点解出了当前的随机数时,
 * 它就把当前的区块广播到其他所有节点,并且加到区块链上。
 * 区块中的第一笔交易称之为CoinBase交易,是产生的新币,发送给区块的产生者
 */
class CBlockHeader
{
public:
    // header
    int32_t nVersion;  // 版本
    uint256 hashPrevBlock; //前一个区块的hash
    uint256 hashMerkleRoot; // Merkle树根
    uint32_t nTime;  // 时间戳
    uint32_t nBits; // POW难度

比特币交易所java源码_比特币钱包源码_比特币源码分析

uint32_t nNonce; // 要找的随机数 CBlockHeader() { SetNull(); } ADD_SERIALIZE_METHODS; template inline void SerializationOp(Stream& s, Operation ser_action) { READWRITE(this->nVersion); READWRITE(hashPrevBlock); READWRITE(hashMerkleRoot); READWRITE(nTime); READWRITE(nBits); READWRITE(nNonce); }

比特币源码分析_比特币钱包源码_比特币交易所java源码

void SetNull() { nVersion = 0; hashPrevBlock.SetNull(); hashMerkleRoot.SetNull(); nTime = 0; nBits = 0; nNonce = 0; } bool IsNull() const { return (nBits == 0); } uint256 GetHash() const;

比特币钱包源码_比特币交易所java源码_比特币源码分析

int64_t GetBlockTime() const { return (int64_t)nTime; } };

0x02 C块

class CBlock : public CBlockHeader
{
public:
    // network and disk
    std::vector vtx; // 所有的交易
    // memory only
    mutable bool fChecked;  // 交易是否验证过并构成Merkle树
    CBlock()
    {

比特币交易所java源码_比特币源码分析_比特币钱包源码

SetNull(); } CBlock(const CBlockHeader &header) { SetNull(); *((CBlockHeader*)this) = header; } ADD_SERIALIZE_METHODS; template inline void SerializationOp(Stream& s, Operation ser_action) { READWRITE(*(CBlockHeader*)this); READWRITE(vtx); } void SetNull()

比特币源码分析_比特币交易所java源码_比特币钱包源码

{ CBlockHeader::SetNull(); vtx.clear(); fChecked = false; } CBlockHeader GetBlockHeader() const { CBlockHeader block; block.nVersion = nVersion; block.hashPrevBlock = hashPrevBlock; block.hashMerkleRoot = hashMerkleRoot; block.nTime = nTime; block.nBits = nBits; block.nNonce = nNonce; return block; } std::string ToString() const; };