比特币为什么只有2100万枚

2014年比特币大火的时候简单了解了一些比特币相关的信息,也买了一点点,可惜后来跌的时候都卖掉了。最近经常看到相关信息,通过一些问题总结下相关基础知识。

1. 比特币为什么只有2100万枚?

中本聪规定:比特币最小可以细分到小数点后8位小数(聪),比特币每10分钟产生一个区块,每个区块发行50个比特币(矿工奖励),每21万个区块后,每个区块的产量减半。
当比特币进行到第33次减半的时候,每个区块的奖励将降至1聪以下,无法继续分割减半,网络便会停止产生新币(50/2^33=0.000000005820766<0.00000001)。此时比特币总量为50 * 21万+50/2 * 21万+50/4 * 21万+…+50/2^32 * 21万。根据等比数列求和公式计算50 * 21万 * (1+1/2+1/4+…+1/2^32)≈50 * 21万 * 2,即是2100万。

2. 比特币如何保证数据不可修改?

比特币系统中使用的数据结构主要是以下两种:
哈希指针(hash pointers)
默克尔树(merkle tree)
哈希指针用于区块之间的连接作用,而默克尔树用于每个区块内部交易之间的连接作用。
每个区块中会对整个区块计算哈希值,并存储在区块头中,每个区块头会存有上一个区块的哈希值,直到创世纪块(genesis block)。
通过哈希指针的链式结构,可以知道区块内容是否被篡改,因为只要某个区块A被篡改,它的哈希值就会改变,它之后区块B的哈希指针就不会指向A了,这样系统会很快知道A被篡改。或者篡改者从区块A一直改到最新区块,到最后最新区块的哈希值也会改变,跟系统中保存的最近区块哈希值H(recent block)对比,也就很快发现是否被篡改。
默克尔树跟二叉树很类似,只不过把普通指针同样换成了哈希指针。在每个区块内部将各个交易连接起来了。这个树的最下面是的叶子节点是区块体(block body)里的所有交易,每个交易取哈希值,相邻交易的哈希值结合起来一起取哈希,层层往上取哈希,直到得到最后一个哈希值,这个哈希值也就是根哈希值(root hash),并存在区块头(block header)。只要记住了根哈希值(root hash),就可以检测出对树的任何节点的修改。要想改变其他节点的哈希值同时保证根哈希值的不变,就必须人为制造哈希碰撞,但通过哈希的性质知道,这是不可能的。

3. 比特币是否可以取代传统交易系统?

比特币每10分钟产生一个数据块,1个数据块大小是1M,每笔交易平均约250字节(交易长度不固定,具体分析可见:如何解析比特币中的交易原始数据rawData),由此可以计算每10分钟交易总量上限为:10^6/250=4000,除去数据头等占用,实际可用交易笔数不到3000。3000/10/60=5,也即是平均每秒交易笔数上限大约为5笔,和支付宝等传统交易系统相比差距太大。当然,区块链领域也采用了很多扩容手段,比如Bitcoin Cash把区块容量改为了32M,但是相比传统支付系统峰值几十万笔/秒来讲还是远远不够。另外,关于比特币扩容之争挺有意思,具体可以参看这篇文章:比特币扩容之争始末
所以至少从目前来讲,比特币无法取代传统交易系统。

4. 比特币是怎么控制10分钟产生一个数据块的?

10分钟并不是通过代码硬性设定为10分钟的,比特币数据块产生是通过工作量证明机制来管理的。
工作量证明最常用的技术原理是Hash函数。由于输入Hash函数h的任意值n,会对应到一个h(n)结果,而n只要变动一个位元,就会引起雪崩效应,所以几乎无法从h(n)反推回n ,因此借由指定寻找h(n)的特征,让使用者进行大量的穷举运算,就可以达成工作量证明。
我们若指定h(n)的16进位值的前四值,求n,这样统计上平均约要运行2^16次Hash运算,才会得到答案,但验算只要进行一次就可以了。如果想要增加难度,那就增加指定的位数即可。以SHA256函数举例,假设我们要处理资料Hello World,并找出h(n)前四值为0000的 ,如果从Hello World0开始加上一个十进位数ASCII进行穷举猜测,到Hello World107105时才会得到符合条件的h(h):0000BFE6AF4232F78B0C8EBA37A6BA6C17B9B8671473B0B82305880BE077EDD9
验算时只要将Hello World107105代入SHA256函式一次即可。
比特币网络当前计算能力总量是已知的,所以只需要控制hash结果计算难度,便可以大致控制区块生成时间。
系统每隔两周(即经过 2016 个区块)会根据上一周期的挖矿时间来调整挖矿难度(通过调整限制数的大小),来调节生成区块的时间稳定在 10 分钟左右。为了避免震荡,每次调整的最大幅度为 4 倍。历史上最快的出块时间小于 10s,最慢的出块时间超过 1 个小时。
但是这个也有一个问题,由于Hash计算并未产生实际收益,相当于对计算资源的浪费。所以ETH从工作量证明转向了权益证明

5. 什么是50%攻击,为什么存在50%攻击?

当某一个区块计算出上述的hash值后会生成新块,并广播给其他节点进行验证。如果有若干个节点验证通过,则新块会在网络中传播,并开始计算下一个区块hash值。如果某人掌握全部算力的50%以上,便可控制节点拒绝其他节点的计算结果,使用自己伪造的合法新块,便可达到篡改数据的目的(此处为本人理解,详细可见:挖矿与共识)。

比特币为什么只有2100万枚

https://blog.lyuku.tech/2019/10/30/bitcoin/

Author

Lyuku

Posted on

2019-10-30

Licensed under