比特币源码解析(7)
来源:互联网 发布:深入浅出数据分析 下载 编辑:程序博客网 时间:2024/06/07 09:36
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难度 uint32_t nNonce; // 要找的随机数 CBlockHeader() { SetNull(); } ADD_SERIALIZE_METHODS; template <typename Stream, typename Operation> inline void SerializationOp(Stream& s, Operation ser_action) { READWRITE(this->nVersion); READWRITE(hashPrevBlock); READWRITE(hashMerkleRoot); READWRITE(nTime); READWRITE(nBits); READWRITE(nNonce); } void SetNull() { nVersion = 0; hashPrevBlock.SetNull(); hashMerkleRoot.SetNull(); nTime = 0; nBits = 0; nNonce = 0; } bool IsNull() const { return (nBits == 0); } uint256 GetHash() const; int64_t GetBlockTime() const { return (int64_t)nTime; }};
0x02 CBlock
class CBlock : public CBlockHeader{public: // network and disk std::vector<CTransactionRef> vtx; // 所有的交易 // memory only mutable bool fChecked; // 交易是否验证过并构成Merkle树 CBlock() { SetNull(); } CBlock(const CBlockHeader &header) { SetNull(); *((CBlockHeader*)this) = header; } ADD_SERIALIZE_METHODS; template <typename Stream, typename Operation> inline void SerializationOp(Stream& s, Operation ser_action) { READWRITE(*(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;};
阅读全文
1 0
- 比特币源码解析(7)
- 比特币源码解析(1)
- 比特币源码解析(2)
- 比特币源码解析(3)
- 比特币源码解析(4)
- 比特币源码解析(5)
- 比特币源码解析(6)
- 比特币源码解析(8)
- 比特币源码解析(9)
- 比特币源码解析(11)
- 比特币源码解析(12)
- 比特币源码解析(13)
- 比特币源码解析(14)
- 比特币源码解析(15)
- 比特币源码解析(16)
- 比特币源码解析(17)
- 比特币源码解析(18)
- 比特币源码解析(19)
- ROC与AUC
- Linux入门命令
- 自定义view+接口回调切换activity
- 1737:贪吃的大嘴
- makefile笔记(1)
- 比特币源码解析(7)
- 用单链表实现快速排序
- openldap安装使用
- Java中的阻塞队列
- spring配置datasource三种方式
- B树B+树
- BufferedReader与InputStreamReader比较
- UVA 10106
- UVa 10881 Piotr's Ants 题解