区块的生成
-
矿工在挖矿前要组建区块
将coinbase交易打包进区块
-
将交易池中高优先级的交易打包进区块
优先级 = 交易的额度 * UTXO的深度/交易的size
- 防粉尘攻击
-
创建区块的头部
版本号
|父区块哈希
|Merkle树根
|时间戳
|难度值
|Nonce
挖矿成功后,将计算出来的随机数noncet填入区块头部,向临近节点传播
区块的验证链接
验证过程
- 相邻节点收到新区快后,立即做以下检查
- 验证Pow的nonce值是否符合难度值
- 检查时间戳是否小于当前时间2小时(10分钟一个块)
- 检查Merkle树根是否正确
- 检查区块size要小于区块size的上限
- 第一笔交易必须是coinbase的交易
- 验证每笔交易
Merkle Tree结构
二叉树
-
树--由多个节点组成的一种数据结构
- 每个节点存储数据
- 根节点root
- 父节点,子节点,兄弟节点
-
构建二叉搜索数
-
12
5
2
18
19
15
17
16
9
-
Merkle Tree
防止数据篡改
快速验证某个交易是否存在
节点存储Hash值
-
从子节点构造树
Merkle Path - 验证路径
-
只需log2(N)个已知数,即可验证K是否被包含在区块中
H[^K]为查找交易
H[^ABCDEFGH]和H[^MNOP]及H[^IJ] 为临近已知父节点
-
H[^L]为相邻节点交易Hash