在区块链网络当中,所有的数据都以区块的形式记录在各个节点上。而每个区块又以单独的文件保存在节点本地磁盘上,在比特币(Linux系统)中所有的区块信息都保存在~/.bitcoin/blocks/
目录下面,并以blk***.dat
文件名标示,如下图所示:
区块结构
根据https://en.bitcoin.it/wiki/Block所描述的,区块的结构如下:
Field | 描述 | 大小 |
---|---|---|
Magic no | ”魔法数“,常数0xD9B4BEF9 | 4 bytes |
Blocksize | 区块大小 | 4 bytes |
Blockheader | 区块头 | 80 bytes |
Transaction counter | 交易数量,正整数 | 1 - 9 bytes |
transactions | 交易列表 | -many transactions |
首先是一个“魔法数”,根据描述这是个常数占4个字节,然后是4个字节的区块大小,然后是区块头80字节,然后是1-9字节的交易数量,最后是所有的交易。但是在实际的比特币代码当中却并不是这么定义的,
class CBlock : public CBlockHeader
{
public:
// network and disk