明白第六课:挖矿难度调整——《区块链技术与应用》一课学习笔记2021/7/22 1:26:13

1 0
6 天前
显示全部楼层

马上注册,结交更多SEO好友,可查看高清图片。

您需要 登录 才可以下载或查看,没有帐号?加入SEO研究中心

x

3 K6 f0 h0 M4 y/ D2 n$ y  Z挖矿就是不断地尝试blockheader里的nonce值,使整个blockheader的哈希值小于等于给定的目标阈值target。我认为去中心化钱包到底是什么?如何使用该种钱包 - 使用教程 - 去中心化钱包一定可以成为行业的领导者,翘首高端产品之列。
5 q. X$ u, q) J
! Z; V9 R9 ]/ D' d% ]) z1 x% T3 I% N8 X
一、挖矿难度的调整+ f  u3 R: A3 N2 _5 Z! r" @

. ~0 E2 L' s. w& G4 Z( D- I; kTarget越小,挖矿难度越大。调整挖矿难度就是调整目标空间在整个输出空间中所占的比例。比特币用的哈希算法是SHA256位。整个输出空间是2的256次方可能的取值。* i3 u( x- b% a: a: B) ^& K% o

2 t+ r1 O& ^9 I/ |调整这个比例,有时通俗地说,就是哈希值前面有多少个0,如256位的哈希值,要是合法的区块,要求算出来的哈希,前面至少有70个0。这是一个通俗的说法,不是特别的准确。
# x, y6 v( G2 c: L9 R  A2 s! ^  K% L- J: X1 [$ |
因为这个目标位置并不是说前面都是0,后面某个位置开始都变成了1,因此严格地说,还是要从上面的定义来看这个问题。
" |' x, p. z& h# y& Y, u
& Y; ^( M2 r7 x" @挖矿难度跟目标阈值是成反比的,实际比特币代码中使用的参数是目标阈值。. X( }$ P/ N4 X8 T) B

8 Z( v" v) n; H- j# [上图公式中,Difficult1target是指挖矿难度等于1时的目标阈值。挖矿难度最小就是1,这时对应的目标阈值非常大。
/ P4 x' |6 Z% c
( C% i6 O% d4 i! C二、调整挖矿难度的意义& M3 c; w$ t3 O# j$ [  _2 n
7 a3 A, O/ O3 o; d' f( i3 R* F; Q
1、出块时间短导致的问题多分叉出现( D( M% O: f) @# M0 a" X
% o1 T  V; g/ _$ |: V/ R8 N
我们为什么要调整挖矿难度?
. I/ K6 p( Y: m- {+ c  d2 K3 X' A0 s
如果不调,系统总算力越来越强,出块时间越来越短,有人觉得这是好事,时间越来越短,发布的交易很快就被写入区块中,提高了系统的相应速度。
8 Y* ?& g8 H) v% n1 k4 G5 L) \1 W7 }- I4 h! [4 y
但出块时间短会存在问题:1个区块产生,需要几十秒的时间才能让其他节点都收到,别的区块没收到这个信息时,还是按着已有的节点往下扩展,如果两个节点,差不多同时收到这个区块,又差不多同时发布了一个区块,那这时就会出现分叉。
6 f0 y: |  D/ L8 Z0 b# ~/ c+ G+ @% C" I0 x0 w
如果出块时间短,这个分叉就会变成常态,且不仅仅是二分叉,还可能出现很多个分叉。分叉如果过多,对于系统达成共识是没有好处的,而且也威胁到系统的安全性。  i- Z: G% ^* K5 _( W

( j! w- B, d; c/ {( n+ F2、分叉过多易诱发恶意算力攻击0 i& P3 X) a* U; m! Q9 j

1 N6 v* S. ~$ @4 }( b: f比特币协议假设大部分算力掌握在诚实的矿工手里,系统中总算力越强,安全性越强。因为你要发动51%之攻击,所需要的算力就越大。这个叫做51%percentattack。
2 W9 l7 {. K) D0 t1 m" H9 g6 d7 f$ q7 ^1 z& k
51%攻击意味着系统中的有恶意的算力占51%以上,这就意味着它可以干各种各样的坏事,包括我们前面讲过的分叉攻击。
  o- x, T8 d1 @- v4 f. p
! s$ n- o7 V# [5 B如果分叉过多,那么算力就会被分散,而有恶意的算力就可以集中扩展它的分叉,很快就可以使它的分叉变成最长合法链,那么这个时候就不需要51%的算力发动攻击,可能百分之十几就够了。所以出块时间不是越短越好。
9 q' A& B0 A& E" Y
  T6 @8 I/ Z" N3、平均出块时间的控制
, _1 L" d- u# d; f7 l* n  w+ b
5 L1 ~* ]9 k% H1 A% U! \; D2 V但10分钟并不是指比特币系统中最优时间,没有这样的检验,这个数据放着是说要有个常数的时间,不能不断地变动下去。也有人认为10分钟的时间对于支付工具而言也太长了。$ s2 I( l+ f, D9 Y3 o8 t0 E
2 u. l' E, X. W2 c/ A" X
以太坊中的出块时间就降低到了15秒,所以以太坊的出块速度是比特币的四十倍。这个出块时间大幅度下降以后,以太坊就要设计一个新的共识协议,叫ghost,在这个协议中,这些分叉产生的这些orphanblock,这些orphanblock就不能被简单地丢弃掉,而是也要给它一些奖励,叫Unclereward。* P( I3 }  b) f9 H* W: [7 R! }
# z. r# {/ Z+ D% w1 u
以太坊中同样需要调整挖矿难度,使挖矿时间保持稳定,当它降到15秒以后,15秒也要使它保持稳定。
1 Q0 Y0 N/ K$ A) v8 Z2 T
( z; Q% x* ^3 b所以平均出块时间要设立多长,这没有一定之规,但不论设立多长,都要保持稳定,而不能无限地减少下去。+ A: W( C, k' q
6 m" b5 T5 Q, u/ s* w
三、挖矿难度调整方式
4 h' S! F3 ]* f( T/ b% d/ p4 P" b7 {; [& m
我们怎么调整挖矿难度?比特币协议中规定了每隔2021个区块,就要调整一下目标阈值,这个大概是每两个星期调整一下,2021*10(60*24)14。" C# P; G  h: \- c+ e' ]$ W6 W: W
( N  [- \& D( v0 c, i8 W# Y
(一)挖矿难度调整公式) c" A- E0 Q% P( ^

& R$ g! t& N& J$ }9 h7 o! x3 a; D以下是taget目标阈值迭代更新的方法。
' k, K1 t7 [8 V. z; h$ |! b
2 a/ F$ U5 p. N0 I9 t* [$ DExpectedtime是指每十分钟产生一个区块,产生2021个区块需花费的预期时间,即为两个星期。; O$ o7 I# y# j! m7 a9 a4 h

! k8 b7 C7 n3 Q; ~& qActualtime是系统中产生最近2021个区块实际花费的时间。
3 f4 N8 x  t% _/ u1 _& q/ X- ?% d2 \- u) B0 S7 q
如实际时间大于两星期,则分数大于1,最后的target值则相应调大,降低挖矿难度。反之则调小,调高挖矿难度。
4 E; G/ ~3 [" @! i0 O! k* Q: c; a( V  `7 c7 V$ e
实际代码中,上调和下调都是有四倍的限度。实际时间如非常长,超过了8个星期,那计算时也按8个星期算,actualtimeexpectedtime分数最大只有4倍,这是为了避免系统出现意外情况,导致目标阈值有特别大的波动。实际如非常短,小于半个星期,那计算时也按半个星期算,分数最小也只有四分之一。, P- X; _6 h5 K( L

8 J4 v. K" V$ s1 Z( Z(二)矿工不调整目标阈值的后果诚实矿工不认同其所发布区块
- l$ M/ z& `, X* ^6 i# H% b
+ R0 b# o+ s2 u% {  A1 F# J如何让矿工同时调整目标阈值?毕竟这是一个去中心化的系统。这个公式写在比特币系统代码里,每挖到2021个区块,就会自动调整,所以矿工不得不听。
  |7 c) x/ D4 a* x# F+ [% N1 W% I* b) @
但代码是公开的,有恶意的节点可以故意不调,但如果不调,它发布的区块,诚实的矿工就不会认同。
6 ~. l3 v8 S. R0 ^+ S. {/ S9 c. P7 h$ }. S6 d! Y  w
nBits是target的一个编码版本,blockheader不会存储这个编码,因为这个域有256位,直接存它要有32个字节,nBits在header只有4字节,可以认为它是一个压缩编码。0 J; M# E' b$ j2 O9 V# Z

$ G+ r& y3 e( a/ D恶意矿工如故意不调,这个时候检查区块合法性就通不过,因为每个节点要独立验证发布区块的合法性,检查的内容包括nBits是否与目标阈值对不对,如果恶意矿工设立一个过大的目标阈值,使得其挖矿能力提高,但别人检查这个区块不对,那么这个区块就不会被接受。# @2 x% C9 Y. U! a4 Z

# _8 Z0 [3 H9 ]以太坊中的挖矿难度调整不是指每隔多少个区块进行调整,而是每发布一个区块都有可能进行调整,而且调整的方法也比这里复杂多。
4 v, j5 e3 u0 ^/ \3 Y. x
& Q* ]# t2 G  @/ q+ H5 o5 C7 r(三)比特币系统参数的选定
+ \% t. W3 @) ^3 o) o; z
0 @3 J$ P: Z$ ~2021这个值是怎么来的?我觉得是中本聪是自己做决定的,没有什么论文的支持。9 c1 F; B# G& Q2 n; ^5 R0 B

/ q8 _+ R9 }. o* h8 f其实比特币以前有很多加密货币都是失败的。比特币不是因为它更实用,而是因为它更不实用所有才成功。
8 k* e. Q) [  w7 h, F3 p, Z* K. c  w8 v; j
以前的加密货币都是现实货币的电子支付渠道,你必须要有真的货币,在线上流通并不方便,它有一个线上的版本。比特币没有任何法币保证金,而是凭空制造的一个货币。3 p; g* c' g' C

1 u1 G* U6 n5 K8 ^我觉得中本聪在选定这些数时,是看过一些调研、经过一些思考,他选的这些数都makesense,是比较合理的,但是不是最优还存在争议,比特币系统的设计总的来说是比较保守的。
7 g% M6 h6 u5 m0 k" \! @1 k7 l/ |# m( K- e
比特币社区的hardcock支持者也是比较保守的,可能是因为他已经有了很多比特币,所以不愿意来危及他的财富,要改什么东西都是很难的,所以为什么后面有以太坊各种各样新的货币出现,就是这个原因造成的。8 `/ J& c: ~: W- E% g
% V% t1 J- p/ [" k4 L
我不知道这个参数是不是经过严格的论证,可能他自己想出来的,还是比较合理的。
  m: i/ ^# {2 w
1 L, b* Z8 ]: {8 b7 O; d四、挖矿难度增长与算力增长相一致/ v* V& f/ }. J% F
! F0 e4 d/ U+ u7 `3 a( f
比特币系统中的实际情况:挖矿难度增长与算力的增长是保持一致的。挖矿变得越来越容易不是好事,说明大家对币的热情降低了,这个币慢慢地就会退出市场。
2 ?* C9 I; u; |; b" m
: b. d% ]/ `# J/ j课程学习笔记往期索引:
! c$ ^1 ~8 f0 G0 q
" _* v! ]  y# D6 x, P3 \! B第五课:比特币网络《区块链技术与应用》一课学习笔记
2 g/ D5 ]' x  _1 b* k8 ?! U" s$ k. N; o& }) D5 q$ E3 B! q) |
第四课:比特币系统的实现《区块链技术与应用》一课学习笔记
  t, b9 C* e" k6 X: K' {3 q1 m3 h1 o4 U2 h2 E
第三课:共识协议《区块链技术与应用》一课学习笔记. X4 Y( t8 k2 t& J
; x  i; t# Y) f6 ^0 w+ B
第二课:数据结构《区块链技术与应用》一课学习笔记
& R$ w9 e8 P' [1 Q3 ?" ^% v* ^7 a
* o. x; x; f: U8 c第一课:密码学原理《区块链技术与应用》一课学习笔记