美文网首页比特币源码学习笔记
比特币源码阅读(区块-CBlock)

比特币源码阅读(区块-CBlock)

作者: 坠叶飘香 | 来源:发表于2018-07-26 20:26 被阅读0次
  1. CBlock


    CBlock

源码:
src/primitives/block.h

class CBlock : public CBlockHeader
{
public:
    // network and disk
    std::vector<CTransactionRef> vtx; //vector<CTransaction> 比CBlockHeader多了这个

    // memory only
    mutable bool fChecked;

    CBlock()
    {
        SetNull();
    }

    CBlock(const CBlockHeader &header)
    {
        SetNull();
        *(static_cast<CBlockHeader*>(this)) = header; //强制转换
    }

    ADD_SERIALIZE_METHODS;

    template <typename Stream, typename Operation>
    inline void SerializationOp(Stream& s, Operation ser_action) {
        READWRITEAS(CBlockHeader, *this);
        READWRITE(vtx);
    }

    void SetNull()
    {
        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;
};

2.区块hash的取值规则:

计算hash时不算vtx
具体计算规则可参考:https://en.bitcoin.it/wiki/Block_hashing_algorithm
src/primitives/block.cpp

#include <primitives/block.h>

#include <hash.h>
#include <tinyformat.h>
#include <utilstrencodings.h>
#include <crypto/common.h>

uint256 CBlockHeader::GetHash() const
{
    return SerializeHash(*this); //前面看到this的赋值是header对象 (具体实现呢?)
}

std::string CBlock::ToString() const
{
    std::stringstream s;
    s << strprintf("CBlock(hash=%s, ver=0x%08x, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%u)\n",
        GetHash().ToString(),
        nVersion,
        hashPrevBlock.ToString(),
        hashMerkleRoot.ToString(),
        nTime, nBits, nNonce,
        vtx.size());
    for (const auto& tx : vtx) {
        s << "  " << tx->ToString() << "\n";
    }
    return s.str();
}

相关文章

  • 比特币源码阅读(区块-CBlock)

    CBlockCBlock 源码:src/primitives/block.h 2.区块hash的取值规则: 计算h...

  • 比特币源码阅读计划

    刚开始参加比特币源码阅读计划,之前对区块链以及比特币底层技术接触不多,希望借这个机会能深层次的了解区块链技术,所以...

  • 比特币源码研读之一

    作者:区块链研习比特币源码研读班 菜菜子 一、源码下载 本文比特币源码下载地址为:https://github.c...

  • 比特币源码研读

    forest21000版 比特币源码研读之一比特币源码研读之二比特币源码研读之三比特币源码研读之四比特币源码研读之...

  • 区块链

    推荐阅读:区块链100问(小视频) 比特币采用区块链技术,但是区块链并不等同于比特币。比特币和黄金一样,总量有限。...

  • 比特币源码研读之一

    比特币源码研读之一——区块链研习社 《比特币源码研读班》 一看文件夹结构 和 github编译依赖,分析的依赖库 ...

  • 比特币源码阅读(区块-CBlockHeader)

    源码:src/primitives/block.h

  • 01:比特币源码编译|比特币源码研读

    2018年8月报名了区块链研习社的「比特币源码研读班」(5期)。首先要准备比特币源码的编译,因为对这块几乎是小白水...

  • 比特币生成创世区块-构造交易-挖矿-写入区块链代码演示

    基于比特币源码,摘取生成创世区块、构造CoinBase交易和普通交易、打包至区块、挖矿、写入区块链等模块代码,重新...

  • 比特币白皮书解读

    没有比特币就没有区块链,没有区块链就没有比特币。 可见,比特币是区块链是多么的密切相关,而且比特币也可以说是区块链...

网友评论

    本文标题:比特币源码阅读(区块-CBlock)

    本文链接:https://www.haomeiwen.com/subject/lllimftx.html