比特币系统有一些预置规则(Ref):
这些预置规则是比特币世界的「公理」,比特币的总数量可以通过它们得出。
我们通过计算区块奖励的总和便可以得到比特币的总数
所以总的区块奖励是:
\[\begin{equation} \begin{split} & \hspace{1.25 em} 50 \times 21000 + 50 \times \dfrac{1}{2} \times 21000 + 50 \times \dfrac{1}{2^2} \times 21000 + 50 \times \dfrac{1}{2^3} \times 21000 + ... \nonumber \\ &= 50 \times 21000 \times \left(1 + \dfrac{1}{2} + \dfrac{1}{2^2} + \dfrac{1}{2^3} + \cdots\right) \\ &= 50 \times 21000 \times \lim_{n \to \infty} \dfrac{1 - \left(\dfrac{1}{2}\right)^n}{1 - \dfrac{1}{2}} \\ &= 50 \times 21000 \times 2 \\ &= 21000000 \end{split} \end{equation}\](这里的计算用到了等比数列的求和公式)
区块接入区块链的顺序,叫做「高度」,从0开始。所以前210000个区块对应的高度值是从0到209999, 其余以此类推。
区块高度 | 区块奖励(BTC) | 起始时间(UTC+0800) | 结束时间(UTC+0800) | 起始区块 | 结束区块 |
---|---|---|---|---|---|
0 ~ 209999 | 50 | 2009-01-04 02:15:05 | 2012-11-28 23:01:40 | 000000000019d6689c085a…6f | 00000000000000f3819164…e1 |
210000 ~ 419999 | 25 | 2012-11-28 23:24:38 | 2016-05-09 21:56:18 | 000000000000048b95347e…2e | 0000000000000000036f6f…ab |
420000 ~ 629999 | 12 | 2016-07-10 00:46:13 | 2020-05-12 03:23:23 | 000000000000000002cce8…a1 | 0000000000000000000d65…1e |
630000 ~ 839999 | 6.25 | 2020-05-12 03:23:43 | 2024-04-20 08:05:33 | 000000000000000000024b…6d | 0000000000000000000172…ab |
840000 ~ 1049999 | 3.125 | 2024-04-20 08:09:27 | (2028) | 0000000000000000000320…a5 |
通过这张表也能看出每次奖励维持的时间大约是4年,因为过了这段时间之后,区块奖励会减半,所以一般也称「比特币的减半周期是4年」。中本聪预想的是每10种产生一个新的区块,但现实世界中矿机的运算能力是变动的,如果算力高,可能很快就能生成一个满足条件的区块,反之,超过10分钟也不一定能生成符合条件的区块。为了应对这种情况,中本聪设计了一个调节机制——每2016个区块后调整挖矿难度,如果前面生成区块太快,就提升难度降速,反之则降低难度。这就保证了生成区块的时间间隔大致在10分钟左右。我们假设现实中也是10分钟生成一个区块,则能计算出
通过这张表还课可以看到区块的 hash 值开头的0有越来越多的趋势,这反应了挖矿的难度随着时间的推移在增加。
注:
通过区块高度查区块的 hash 的方法。打开 Bitcoin Core Wallet,菜单路径是 Window -> Console, 再在命令行界面执行 getblockhash {height}
即可,如查看第一个区块和高度为630000的区块,可以通过下面的指令完成:
getblockhash 0
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
getblockhash 630000
000000000000000000024bead8df69990852c202db0e0097c1a12ea637d7e96d
如果查询还未产生的区块,会报错,如:
getblockhash 840000
Block height out of range (code -8)
已知区块的 hash 值,就可以在 https://mempool.space 上查到它比较详细的信息,如 https://mempool.space/block/000000000000000000024bead8df69990852c202db0e0097c1a12ea637d7e96d