2.区块(block):
比特币区块就是比特币交易的集合,由矿工创建,然后收集比特币交易放入区块中。一个区块大小限制为1 Mbyte,平均一个比特币交易至少是250Byte,所以一个区块最多可容纳4000左右个交易。
- 区块结构:
大小 |
字段 |
描述 |
4 Byte |
区块大小 |
用字节表示的该字段之后的区块大小 |
80 Byte |
区块头 |
区块头结构 |
1-9 Byte |
交易数 |
比特币交易的数量 |
可变的 |
交易 |
记录在区块里的交易信息 |
- 区块头结构:
大小 |
字段 |
描述 |
4 Byte |
版本 |
版本号,用于跟踪软件/协议的更新 |
32 Byte |
父区块哈希值 |
引用区块链中父区块的哈希值 |
32 Byte |
Merkle根 |
该区块中交易的merkle树根的哈希值 |
4 Byte |
时间戳 |
该区块产生的近似时间(精确到秒的Unix时间戳) |
4 Byte |
难度目标 |
该区块工作量证明算法的难度目标 |
4 Byte |
Nonce |
用于工作量证明的随机数值 |
父区块哈希值,这组数据用于将该区块与区块链中前一区块相连接。
难度目标、时间戳、和nonce,与挖矿竞争相关。
merkle树根,一个用来总结区块中所有交易的哈希值。
- Merkle树根:
在比特币网络中,Merkle树被用来归纳一个区块中的所有交易,同时生成整个交易集合的数字指纹(哈希值),且提供了一种校验区块是否存在某笔交易的高效途径。
生成一棵完整的Merkle树需要递归地对哈希节点对进行哈希,并将新生成的哈希节点插入到Merkle树中,直到只剩一个哈希节点,该节点就是Merkle树的根。
在比特币的Merkle树中使用两次SHA256算法,因此其哈希算法也被称为double-SHA256。
当N个数据插入Merkle树时,至多计算2*log2 (N)次就能检查出任意某数据元素是否在该树中,这使得该数据结构非常高效。
若交易数不是偶数时,复制最后一笔交易以完成Merkle树
- 创币交易:
区块中的第一笔交易(序号为0),称为创币交易或者Coinbase交易。
这个交易是由矿工节点建构,矿工节点会创建“向矿工自己的地址支付一笔比特币”这样的一个交易,作为挖掘区块的奖励发送到自己的钱包。创币交易不会包含输入,仅有一个被称为 coinbase 的输入,用来创建新的 Bitcoin,而输出为此胜利矿工的 bitcoin address。奖励金额是Coinbase奖励(目前为12.5个全新的比特币)和区块中全部交易小费的总和。
Coinbase奖励额的计算是基于区块高度的,以每个区块50个比特币为开始,每产生210,000个区块(约四年)减半一次。2017/9 的奖励额是12.5个比特币。到最后将不会再有新的比特币产生。
创币交易结构:
长度 |
字段 |
描述 |
32 Byte |
交易哈希值 |
不引用任何一个交易,值全部为0 |
4 Byte |
交易输出序号 |
不引用任何一个交易,值全部为1 |
1-9 Byte |
Coinbase数据长度 |
Coinbase数据长度 |
可变长度 |
Coinbase数据 |
在v2版本的区块中,除了需要以区块高度开始外,其他资料可以任意填写,用于extra nonce和挖矿标签 |
4 Byte |
顺序号 |
值全部为1,0xFFFFFFFF |
以区块277,316为例:
Coinbase数据字段值为:03443b0403858402062f503253482f
- 第一个字节是03,表后面3个字节0x443b04,是以小端格式(litter ending,最低有效字节在先)编码的区块高度。翻转字节序得到0x043b44,表示为十进制是277,316。
- 紧接着的5 byte十六进制数(0385840206)用于extra nonce是一个随机值,以改变这5 byte,进而改变Merkle根值,配合区块头的4byte nonce,从而使区块头之哈希值小于难度目标,而解得适当的工作量证明。
- 结尾部分(2f503253482f)是ASCII编码字符 /P2SH/,表示挖出这个区块的挖矿节点支持BIP0016所定义的pay-to-script-hash(P2SH)改进方案。
3.链(chain):
区块链顾名思义,链其实就是链接区块的链。
仅为个人理解,如有不足,请指教。 https://blog.csdn.net/weixin_35811044