众所周知,比特币的block产生速度被设定为了10分钟,按着官方wiki所说,每一个节点需要一些时间来确认block(<10mins),但为什么是10分钟呢?和网络延迟有关系吗?和hash方程的难度有关系吗?; F' k! c2 G4 W d9 `' q
6 \$ C, O9 j3 X1 S9 i$ ~& T
* J% k9 a3 {6 R( p泛娱科技将围绕这些话题,为大家解读。
% \* M3 e6 O$ A7 X* U* ^; [: I/ A, d& _; ]' m
" N; h+ Y. f" V: g. W网友:为什么比特币的block产生速度被设定为10分钟?5 f3 b/ T, Z+ k
2 H$ a- C4 g& h M1 d
) E! {; ? A% R5 d4 s9 R和网络延迟有关系么?按着官方wiki所说, 每个节点需要一些时间来确认block(<10mins),但是为什么要10分钟?和hash方程的难度有关么?
6 Y/ E' b* N/ W4 g! B! J. y; Q# b- w, g b9 \8 i$ ?+ Q
) l. j* w% C* P; P, j, B1 k- C7 N
陈晓东:比特币选择10分钟来产生区块,也就是1/600 BPS (Blocks/Sec),这个是根据具体设计而制定的, 也是人为的选择。而比特币的交易处理速度最高为:7 TPS (Transactions/Sec), 这个是整个交易验证机制、共识机制,和P2P通讯机制,以及代码实现后所达到的一个技术上限。相比而言,以太坊目前是1/20 BPS和20 TPS,维基链是1/10 BPS和1000+TPS。对于POW共识机制的公链来说,BPS是通过变更挖矿的难度系数来动态调节的。然而对于DPOS机制的公链,BPS是恒定的。
5 z4 a) ]% n' ~4 [! B/ `6 C
# p! ?, @: F! [5 f( T
+ [' }/ e5 X$ i$ N. H那么具体谈一下比特币的BPS设计选择来由: 由于比特币采用了POW共识机制,也就是人人都可以成为矿工参与挖矿,而且可以随时退出挖矿。这样就导致了整个网络里面参与挖矿的矿工算力是动态变化的。当参与挖矿人数少的时候,算力低,挖矿难度系数根据算法相应自动降低;反之,当参与挖矿人数增多,算力增强,挖矿难度系数会根据固定算法来自动提升。通过难度系数的调整来确保相对固定的出块时间。但是由于难度系数不是在实时调整的,而是根据设计和代码实现每隔了2016块调整的,也就是差不多2周的时间(假如说绝对均匀时间出块:27天24小时/天3600/小时/600秒/块 = 1424*6=2016)所以调整难度系数有滞后,无法及时掌握总体算力的变化而调整,导致了每次算力调整后出块的时间有长有短,但是总体上是上下围绕10分钟波动的,而且不会有太大的偏差,也就是实现了一种统计学上的守衡。
2 }6 O- a* o. L6 l+ Y* y) }0 Z- W& M2 A
3 H4 a; y6 B0 P+ \( E5 ]- T
为了增加感性认识,参见以下网络统计出来的比特币区块生成的花费时间表:
B, u- @/ Z2 k$ {# L7 ]8 X1 M3 [7 x7 x4 T7 o {! k
# |8 w9 @* ^+ W( f D+ S; X7 W
<= 10 分钟5 p( ~- g T7 F
9 c6 m2 m) F+ _* E5 G0 W2 c9 F6 D. ^/ {
10分钟
- _4 C. ~& d$ I6 l5 P* S$ E/ h
0 I( T! o+ t! }$ v' M
5 c: t0 {& x9 J* \0 z% f20分钟! s: V+ o/ r& a: r
+ J N5 h$ t, r+ r( ^! @ ?) O) Y. l8 K; f2 K
1 小时
0 {; R4 W5 X2 s' Q) i9 g# k ?+ J- S0 @0 f9 Z; q+ H. g) W9 l
! H- f8 P8 C6 t+ z% p
63.2%. g6 k! ~7 h( F. E' L
* L; Q" Y) d3 n4 w) ~$ T. S& Q& A
/ o. g2 c+ z$ `: Q8 X U36.8%4 X5 _8 S2 y* r# D' z% t
2 P3 a- E. X: e. |7 ~
2 E' l5 x7 K) x8 j7 M, S& e" }4 r13.5%5 e/ A [$ b2 q1 j c9 g. I
( {: o& s# E( k$ W
. R' z6 Q( G% U& Z: J0.25%
" v( ~0 Y: O$ z5 ?5 U( {3 \, v1 D- k4 J8 ]. [
) j' s$ ^ n6 L那么为什么调节了难度系数可以确保BPS相对守衡呢?因为难度越大,越需要更多的算力参与才能在同样的时间里面算出答案,也就是挖到矿。反过来,要保持同样的时间来挖矿成功,就需要根据算力的总量来调节难度系数了。
0 |. V' k- P+ H* C, ?1 v0 A) n
$ W& k$ [& ^; a2 J* K$ a0 b( w4 n! e' I" U- h2 l. w
但是又为什么一定是10分钟呢?当初中本聪(Satoshi Nakamoto)做这样的选择,并没有明确说明,网络上也有很多的研究,但是并没有一个『官方』或者绝对权威的说法。根据笔者对区块链的研究,认为这个时间的长度是基于以下两个因素考虑的:
! o$ M. w# @+ I+ b: }* v6 @: Q% d+ O# k
# c! C/ U4 w6 s6 j; Q9 a% d
交易广播时间(Tb):所有参与挖矿的矿工都需要获得最新区块的信息并在这个基础上试图挖到连接的下一个块。根据研究表明,从一个节点广播一个消息到P2P全网节点的时间为下表统计所示:! } A2 R% u6 I+ G
50%节点覆盖
5 a4 C" x0 ?, ?4 m+ Z: p$ ?9 J) t6 p/ p
, \, Y5 }* }2 X5 o
90%节点覆盖
9 D4 Q3 R8 l: o$ O& ^ {; h4 C3 ?0 j4 E8 L7 J
1 g: j( w. F# y" c- M中位数0 o$ w. \4 }5 B( {
" u' C) u7 s4 ?' C. P' w- U" r2 D y
6.5秒
* \- q; N0 y: x/ H8 u5 B. ~8 R. s, B8 H1 X, p" ?
+ H' K: J# s4 t# p
40秒
# g+ P# {9 m4 h2 f) p2 [& r; G2 S
/ \+ D; X) I0 R; C# f- o6 p1 S+ g. e0 O
12.6秒! E* Y1 H8 f1 T- E0 L! N
. H0 z7 M3 i% D- X. P$ ^$ n- x h7 K
/ S# a1 e( r p! ]) s; V也就是说,平均全网每个节点获得一个新块的时间在12.6秒。比特币有10分钟的块产生间隔,也就是远大于广播覆盖全网节点的时间。 |