目标值是一个数字, 矿工挖矿时对区块头数据进行哈希运算的结果必须低于该数字, 才能将区块添加到区块链上。
调整
初始目标值是:
0x00000000FFFF0000000000000000000000000000000000000000000000000000
之后每 2016 个区块(大约两周)进行调整, 以确保平均每 10 分钟挖掘一个区块。
新目标值 = 旧目标值 * (实际时间 / 期望时间)
- 实际时间: 2016 个区块的时间间隔(区块的时间戳 - 前一个区块的时间戳)总和
- 期望时间: 2016 * 10 分钟 = 1209600秒
若实际时间大于期望时间, 说明出块的速度慢, 实际时间除以期望时间结果会大于1, 新目标值会增大, 意味着挖矿难度降低。
新目标值相对于旧目标值存在一个上下限, 这个上下限在旧目标值的 0.25 到 4 倍之间, 也就是说本次调整的新目标值最大只能是旧目标值的 4 倍, 最小只能是旧目标值的 0.25 倍, 目的是防止从一个目标到下一个目标的过大调整。
难度值
目标值是矿工用于计算区块哈希值必须要低于的值, 无法直观的表示挖矿的难度。为了更好的表达挖矿的难度, 比特币网络引入了难度值的概念。难度值是相对于比特币网络最初难度的倍数。
目标值和难度值之间的关系是:
difficulty = difficulty_1_target / current_target
其中 difficulty_1_target
是难度为 1 时的目标值, 是比特币网络的创世区块的目标值, 即最大的目标值:
difficulty_1_target = 0x00000000FFFF0000000000000000000000000000000000000000000000000000
相关RPC
获取当前的难度值
返回值
名称 | 类型 | 描述 |
---|---|---|
n | number | 当前难度值 |