H
(
b
l
o
c
k
h
e
a
d
e
r
)
⩽
t
a
r
g
e
t
H(block header) \leqslant target
H(blockheader)⩽target
t
a
r
g
e
targe
targe是目标阈值,
t
a
r
g
e
targe
targe越小,挖矿难度越大,调整挖矿难度,就是调整目标空间在整个输出空间的比例。
比特币用的hash算法是SHA-256,这产生的hash值是256位,所以整个输出空间的是 2 256 2^{256} 2256个可能的取值。
挖矿难度与目标阈值是称反比的: d i f f i c l t y = d i f f i c u l t y ( 1 ) t a r g e t t a r g e t difficlty=\frac{difficulty(1)target}{target} difficlty=targetdifficulty(1)target,分子指的是挖矿难度等于1的时候所对应的阈值。
通过调整挖矿难度,可以保持出块时间稳定。
比特币中规定,每个2016个区块,调整一下目标阈值,大概每两个星期调整一下。调整公式:
t
a
r
g
e
t
=
t
a
r
g
e
t
×
a
c
t
u
a
l
t
i
m
e
e
x
p
e
c
t
e
d
t
i
m
e
target = target \times \frac{actual \ time}{expected\ time}
target=target×expected timeactual time
其中:
e
x
p
e
c
t
e
d
t
i
m
e
=
2016
×
10
expected\ time = 2016 \times 10
expected time=2016×10大概位两个星期,
a
c
t
u
a
l
t
i
m
e
actual \ time
actual time就是系统最近的2016个块实际所花的时间。
也可以用挖矿难度来表示:
n
e
x
t
d
i
f
f
i
c
u
l
t
y
=
p
r
e
v
i
o
u
s
d
i
f
f
i
c
u
l
t
y
∗
(
2
w
e
e
k
s
)
/
(
t
i
m
e
t
o
i
m
i
n
e
l
a
s
t
2016
b
l
o
c
k
s
)
next \ \ difficulty = previous\ difficulty \ * (2 \ weeks)/(time \ to \ imine \ last \ 2016 \ blocks)
next difficulty=previous difficulty ∗(2 weeks)/(time to imine last 2016 blocks).
参考资料:https://www.bilibili.com/video/BV1Vt411X7JF?p=7