挖矿难度

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=targetdifficulty1target,分子指的是挖矿难度等于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

你可能感兴趣的:(区块链技术)