比特币总量控制
比特币的总量是有上限的,最多只会有2100万个比特币,所以比特币挖矿得到的数量会越来越少。
但是我们都知道比特币是一个去中心化的分布式账本,这意味着没有一个机构来限制发币的上限,所以只能在比特币设计之初就通过协议来控制上限。
要了解比特币是怎么控制总量上限的,首先要知道在比特币系统中,新的比特币是如何产生的
出块奖励
比特币网络中要产生新的比特币的方式只有一种,那就是当一个节点向比特币网络中添加一个新的区块的时候,可以在交易信息中添加一个铸币交易,这个铸币交易可以发行凭空产生比特币并转移到指定账户中,用于激励节点主动打包交易添加到区块中,得到的奖励称为出块奖励。
这种添加新的区块并获得出块的奖励的过程被称为挖矿。
比特币总量上限
如果每次添加一个区块获得的奖励都一样多的话,那随着不断向区块链中不断添加新的区块,产生的比特币应该会不断减少才对。那为什么说比特币的总量是有上限的呢?
这是因为中本聪在设计比特币协议的时候就规定了,最开始发布区块的时候,每添加一个新的区块可以发行50个比特币,之后每过21万个区块,出块奖励减半,并且比特币被设计为平均10分钟产生一个块。
根据上面的两个条件,可以得到比特币总量的计算公式为:
所以比特币的总量上限为2100万
出块速度控制
上面说了比特币控制数量上限的方法是通过限制产生新的区块时奖励比特币的数量以及产生区块的速度,那么比特币是怎么控制这些的呢?
先说下比特币是怎么控制产生区块的速度的。简单讲就是,比特币通过调整挖矿难度来控制出块速度的。
我们都知道,要产生新的区块其实就需要不断地求解一个nonce值,使得Hash(BlockHeader)的值小于一个目标值。所以调整难度就是调整目标空间在整个输出空间中所占的比例,所占的比例越低,难度越高。
比特币使用的Hash函数是SHA-256,所以整个输出空间有\(2^{256}\),调整目标空间所占的比例,通俗的讲就是调整target,要求target前面至少要有多少个0
挖矿难度和目标阈值target成反比:
\(diffifulty-1-target\) 的值挖矿难度等于1的目标阈值
通过调整挖矿难度来控制出块速度,出块速度太快容易导致系统中出现很多分叉,分叉过多会导致系统很难达成共识,系统的算力被分散,危害系统的安全性。
如何调整出块难度
要调整出块难度,就需要调整target, 那要如何确定target呢?
比特币中规定,每隔2016个区块重新调整target(为什么是2016个不知道,可能是经验)
目标阈值的迭代公式为:
\(expectedTime = 2016 \times 10\)
\(actualTime\):最近2016个区块实际花费的时间
在实际运行中,目标阈值一次最多不会增大超过4倍,一次减少不会小于原来的1/4
如何保证所有节点都遵循规定
比特币中假设比特币网络中的大部分节点是诚实的,即51%以上的算力是掌握在诚实节点中的,诚实节点在接收到新的区块的时候,会检查这些新的区块是否符合规定,如果不符合这些规定就不接收这个区块。
浙公网安备 33010602011771号