在比特币网络中,数据会以文件的形式被永久记录,我们称这些文件为区块。一个区块是一些或所有最新比特币交易的记录集,且未被其他先前的区块记录。可以将区块想象为一个城市记录者其记录本上单独的一页纸(对房地产产权的变更记录),或者是股票交易所的总账本。在绝大多数情况下,新区块会被加入到记录的最后(在比特币中的名称为区块链),一旦写上,就再也不能改变和删除。每个区块记录了它被创建之前发生的所有事件。 一个区块的区块结构如下所示:
数据项 | 描述 | 长度 | Magic no(魔法数) | 总是0xD9B4BEF9 | 4字节 | Blocksize(区块大小) | 到区块结束的字节长度 | 4字节 | Blockheader(区块头) | 包含6个数据项 | 80字节 | Transaction counter(交易数量) | 正整数VI=VarInt | 1-9字节 | Transactions(交易) | 交易列表(非空) | <Transaction counter>-许多交易 |
每个区块都包括了一个被称为魔法数的常数、区块的大小、区块头、区块所包含的交易数量及部分或所有的近期新交易。在每个区块中,对整个区块链起决定作用的是区块头。 区块头描述:
数据项 | 目的 | 更新时间 | 大小(字节) | Version(版本) | 区块版本号 | 更新软件后,它指定了一个新的版本号 | 4 | hashPrevBlock(前一区块的Hash) | 前一区块的256位Hash值 | 新的区块进来时 | 32 | hashMerkleRoot Merkle(根节点Hash值) | 基于一个区块中所有交易的256位Hash值 | 接受一个交易时 | 32 | Time(时间戳) | 从1970-01-01 00:00 UTC开始到现在,以秒为单位的当前时间戳 | 每几秒就更新 | 4 | Bits(当前目标的Hash值) | 压缩格式的当前目标Hash值 | 当挖矿难度调整时 | 4 | Nonce(随机数) | 从0开始的32位随机数 | 产生Hash时(每次产生Hash随机数时都要增长) | 4
|
|