区块链/等级 II · 运作机制/2.3 区块与链/课程 4
工作量证明与目标值
一张要耗费能源才能买到、只需一次哈希即可验证的彩票
材料区块浏览器界面能够进行 SHA-256 计算的十六进制计算器或编程环境比特币开发者参考文档
好奇
- 为什么数值目标越低,找到有效哈希值就越困难?
- 一个四字节的值,如何能编码出一个大到足以约束2^256种可能性的数字?
- 当算力翻倍而目标值保持不变时,预期的出块时间会发生什么变化?
探索
- 只有解决了计算难题的区块才会被接受。矿工必须找到一个长度为80字节的区块头,使其双SHA-256哈希值的数值小于或等于某个特定阈值,即目标值。这一要求使得区块创建过程变成了在2^256种可能的哈希值中寻找稀有数值的过程。任何候选区块的有效性都完全取决于这个数学不等式。
- 目标值本身并不会以完整的32字节形式存储,因为那样会占用过多的头部空间。相反,它通过尾数-指数编码方式被压缩为4个字节,即“nBits”。这种格式属于有损压缩,仅保留3字节的尾数,因此目标值会有轻微的舍入误差,但实际上这并不会带来任何影响。解码这4个字节后,就可以重新得到那个用于定义合法哈希值上限的256位大数。
- 为了找到有效哈希,矿工会不断变换区块头字段的取值。最主要的变量是32位的nonce(随机数),每轮尝试大约提供43亿个不同取值。当硬件转瞬间就把这些组合全部试完时,矿工会修改coinbase交易中的额外随机数(extra-nonce)或调整时间戳,以生成新的默克尔根和区块头组合。每一次改动都会产生完全不同的哈希输出,相当于换了一张全新的“彩票”。
- 预期工作量与难度成正比上升,而目标值则反向变化:当算力增长后网络重新调整目标值时,目标值会下降,有效解在二进制表示中就需要更多的前导零。找到一个区块所需的预期哈希次数约为难度乘以2^32。这种伸缩机制确保无论是在笔记本电脑上还是在大型矿场中挖矿,平均出块间隔都能稳定在约十分钟。
- 验证与创建过程是不对称的。虽然找到一个有效的哈希值可能需要数十亿次尝试,但对其进行验证只需对区块头进行一次双SHA-256运算,然后与目标值进行比较即可。因此,工作量证明的验证过程几乎是即时的,不过要完全确认一个区块的有效性,仍需检查其中的每一笔交易。该安全模型正是利用了这种差异:创建有效哈希值需要大量成本,而验证这一哈希值则成本很低。
- 创世区块是在难度1下挖出的,这是规则允许的最低难度;即便如此,有效哈希也需要约32个前导零比特,大约每43亿次尝试才成功一次。由于全球算力已增长了许多个数量级,近期的区块需要多得多的前导零。将区块1哈希的十六进制表示与当前某个区块的哈希进行对比,就能看出搜索空间从宽阔开放到严格受限的巨大转变。
关键事实
- 有效的比特币区块头哈希值在数值上必须小于或等于其难度目标值。
- 目标值以尾数-指数编码的方式,紧凑地存储在4个字节中,即“nBits”。
- 矿工通过改变32位随机数、coinbase额外随机数以及时间戳来生成新的哈希值候选项。
- 难度定义为最大可能目标值除以当前目标值。
- 验证一个区块的工作量证明只需对区块头做一次双SHA-256运算并进行一次比较。
- 创世区块是在难度为1的情况下被挖出的。
练习 九、六、三、一
9收集列出比特币区块头工作量证明计算中涉及的9个不同组件或变量。
6归类根据这些项目是固定的、每次尝试时都会变化、每个周期都会变化、以紧凑形式编码、源自交易数据,还是用于验证,将这9个项目分为6类。
3提炼将这6组归纳为3条核心原则,说明难度如何随全网算力的变化而伸缩。
1凝结用一句话解释为什么工作量证明难以生成却易于验证。
事实核查
日期、数字及数据均依据下方列出的已发表资料进行核实。