比特币与区块链

Posted by 咖啡不苦 on 2018-02-12

现在的区块链,已经火到必须蹭一波热度的程度了。网上有太多的关于比特币和区块链的文章,但把事情说得通俗明白的没几个(可能是我太low看不懂?)下面我也来尝试说说看。一方面希望能说得更明白,另一方面也整理一下自己的思路。

基本原理

首先明确两个概念:比特币它是一种电子货币,你可以和人民币,美元什么的类比。不同的是他是去中心化的,人民币央行说印多少就印多少,而比特币没有一个“央行”来印钱。至于区块链,其实可以理解为印钱的纸!它是支撑比特币系统运行的一种分布式数据库技术而已。

先说比特币。由于他是一种数字化的货币。没有实体的纸,那A要给B10个比特币该怎么做呢?因为A不存在一张10块的比特纸币可以给到B,所以就用转账(记账)的方式进行。我们人民币的转账,首先A和B都需要一个属于自己的账户,然后需要一个银行,因为所有人都认银行记的帐。这时候银行就是这个中心节点。而比特币是一种去中心化的货币,没有银行这个中心节点。那怎么办呢?办法就是将这笔转账告诉所有人,让所有人都记住它发生过,这样它就成事实了(想想日本教科书告诉所有日本人,他们没有侵略过中国,是个多么邪恶的事情!)。可问题又来了,所有人都记录,如果有人和B关系好说A给了B15个而不是10个比特币,该怎么办?账目乱套了,有人说10个,有人说15个,不知道该信谁的。所以比特币就规定说所有人接到一个要记账的请求(交易)时,首先要验证一下这个交易的有效性,比如“A给B10个比特币”首先要验下这是不是A说的而不是B或其他人说的(用非对称加密 数字签名就能验证,这技术很成熟了),还要验一下A现在有没有10个比特币的余额(每个人手里都有有史以来所有的转账记录(账本),通过账本可以计算出每个人当前的余额),如果这些基本信息都没问题的话,那就开始做一道特别难的数学题(不断做Hash计算,特别费CPU)。谁先算出这道题,就以谁记的为准,其他人的就都不算了。那问题又来了,又要验证这笔账的正确性,又要做特别难的题,那谁会愿意去记账呢?所以,比特币又规定说,只要谁记账成功了(最先验证完正确性和做出数学题)就给谁50个比特币做奖励(貌似还有一小部分A给的手续费)。而这个奖励的价值远大于解题所花的成本,这样就有人愿意来记账了。如果你从“记账员”的视角看一下这件事儿的话,就会发现记账员其实就是付出了一些劳动然后获得了一些报酬。这和挖矿是一样的!

细心的你可能已经发现,上面说的还有一个严重的问题。就是最开始的比特币是从哪来的?所以在系统启动的时候,中本聪发布了第一笔交易记录(第一个区块——创世块),但其实这里面并不是谁给谁转账,因为谁的账户里都还没有钱,没办法转账,事实上,这条记录里面只是当天泰晤士时报里的头条新闻标题(里面是啥根本不重要,就算写“博主最帅”也是一样的)然后就有人通过挖矿(记录这笔交易)获得了第一个比特币。然后这个系统就启动了。

待解决的问题

以上,就是比特币系统运行的最基本的原理。但实际运行中,还有很多问题需要解决。

怎么样将交易的信息告诉所有人?

这个问题其实相对简单,并不用每个人都要认识所有人,只要认识身边的人就行,采用一传十,十传百的方法。过一段时间整个网络里的人就都知道了。技术上,这里可以了解一下IRC协议。

怎么防止有人记假账?

首先,比特币是没办法100%保证不能作假的。但是他的机制可以让作假的成本非常非常高,高到几乎不可能。下面就来说说这个机制。首先,所有的账单(区块)都记录一下他的前一个账单的数字签名,这样整个账单(区块)就形成了一个链——区块链。上面那个例子“A给B10块钱”,假设现在记账的是C。他改成了“A给C10块钱”。因为记账是要解数学题的,C如果要保证账记成“A给C10块钱”的化,就要提高他的计算能力,至少要超过51%的人才有概率上稳定的记假账成功率。因为这个链的存在,我们可以发现,要篡改链中越早的记录越难。因为改了,数字签名就变了,数字签名变了后面的区块就不认了,要后面的区块认的话得把后面的区块也一并改了。这要求的算力就加倍了,相当于需要全网100%的算力,再往前需要更多。

两个人同时解题成功怎么办?

如果有AB两个人同时解题成功,那以谁的为准呢?首先我们考虑下,当你解题成功,你就得告诉全世界你解题成功了,剩下的人都别浪费时间了。从我的基础上记下一笔账,开始新的一轮解题吧。ok,收到的人就开始新的解题。因为AB两人是同时解题成功并分别向全世界广播的(一传十 十传百的方式,不是所有人同时知道这件事儿),所以有一些人会在A的基础上接着解题,有些人会在B的基础上接着解题。并且肯定会有新的解题成功的人出来,这时就简单了,后来的C是在谁的基础上解题成功的,就以谁的为准。但是,还是可能会有C和D同时分别从A和B基础上解出来的情况(概率比之前小了很多)。那怎么办呢?比特币规定,谁先在后面攒够6个区块,谁的就真正生效并获得奖励!(所以,挖矿有很多空欢喜的情况~)

解题能力越来越高,导致比特币发行越来越块,进而导致通货膨胀怎么办?

我们知道,挖矿解的是Hash运算的题,就是耗CPU的题,而由于摩尔定律得知,计算能力肯定是呈指数级增长的。如果记一笔就给一定奖励的话。比特币会被迅速发行,迅速贬值。为了解决这个问题,比特币首先规定。比特币一共就只发行2100万枚。由于总量的控制,决定了不会再有通货膨胀的问题。为了延长可发行时间,挖矿的奖励会进行递减。比如09年是50块,现在是12.5块。另外一个重要的控制发行速度的是解题的难度。比特币系统通过动态设置解题难度来达到每个区块产生的时间大约为10分钟。(如果发现区块产生越来越快(可能有庄家从CPU升级成了GPU^_^))就增大难度系数。反之的减小(可能庄家觉得没赚头,退场了)。通过这个规则可以计算出来(10分钟一个区块,产生区块的奖励递减)大概到2040年,挖矿将不能再获得新发行的比特币奖励。中本聪的设想是到那个时候,矿工们就靠手续费活着了。

区块链技术

从上面的分析可以看到,区块链本质上是一个分布式的数据库(区块链更多的是一种思想或者说协议),但世面上已经有很多分布式的数据库了,它有什么特点呢?

  • 他是开放的,任何人都可以给这个数据库添加节点并成为这个数据库的一部分。这点非常重要。决定了这个网络不会受任何一个人控制,因为任何一个人都控制不了别人通过往这个网络里增加节点来制衡你。
  • 由于挖矿难度的存在,和上面一点的原因,决定了这个数据库里的数据不能被某个人恶意篡改,一旦加入区块链,就成历史了,发生了就发生了,谁也改变不了。

区块

区块链就是一个个区块连成的链,如果说区块链是数据库的话,区块就像数据库里面的存储单元。每一个区块分为两部分:

  • 区块头:存储区块本身的元信息,比如创建时间,上一个区块的Hash区块体的Hash 等等
  • 区块体:就是这个区块里存储的数据了。

稍微了解Hash算法的人应该知道,只要改变了原文,Hash值就会发生变化,而每个区块的区块头里都记录了上一个区块的Hash。所以如果上一个区块的内容(包括区块头和区块体)有任何篡改的话,Hash值就会变,这条链就断了。所以要篡改某个区块里的数据的话,得将他后面的所有区块都改了才行。由于挖矿难度的原因,这几乎不可能。

挖矿和难度系数

通过设置难度系数来降低区块生成的原因有两个重要意义:

  • 增加数据篡改难度
  • 降低区块的产生速度从而降低分叉(两个人同时挖矿成功导致的冲突)的概率

这个难度系数从技术上来说是怎么实现的呢?挖矿其实就是计算Hash。这是CPU的基本工作,其实是很快的。难度系数就是规定不是计算出一个Hash就行,而是计算出的这个Hash要小于一个目标值才可以,而这个目标值=一个常数/难度系数。所以难度系数越大,目标值越小,计算出的Hash符合标准的概率就越小。可能要计算10亿次才能有一次是符合标准的。真的是非常难。而且可以通过调节这个难度系数的大小来调节Hash符合标准的概率——也就是难度。

区块链的容量,吞吐率和效率

区块链要求每一个节点都保存所有的数据,因为要验证交易有效性时需要追溯整个链条,计算余额。这点决定了这个数据库的容量不可能太大。目前比特币的大概是100G,但随着交易的大规模继续进行,这会是一个持续增加且不可逆转的过程,必然会有一天大到不可接受。(这点我现在还没想明白怎么解)

为了保证数据的一致性和不可篡改性,必须要让区块的产生维持在一个比较低的水平。那整个区块链作为数据库的写入效率就会很低。拿比特币来说,10分钟产生一个区块,一个区块1M,假设一笔交易需要1k。那这个数据库的TPS=1024/10/60=1.7 这对一般互联网应用来说,简直是无法接受的。所以为了增加系统的吞吐率,只能增加每个区块的体积,比如从1M变成100M就提升了100倍的TPS。但这也不能无限提升啊,因为区块越大,在区块未生成阶段包含的记录就越多,而这部分记录的状态是不确定的(可以理解为写入了内存但还没落盘),这会严重降低整个系统的稳定性。

这就提到了效率,由于数据写入区块链要等区块生成才算持久化成功。为了保证安全,甚至是几个区块生成之后才算成功,这个时间是很长的,(比特币规定6个区块之后才算确定,10分钟一个区块,6个就过去一小时了)所以用区块链做数据库的应用,必须不要求数据写入后实时读取才行。

谁愿意加入区块链来挖矿?

在比特币的应用场景中,挖矿是由比特币作为奖励的,根据目前的奖励$20000*12.5,折合人民币也有几百万了。所以很多人愿意去挖矿。那其他应用场景呢?必须要有一个合适的奖励,才会有不同的人来加入到这个网络中。否则,用区块链作为数据库就完全没有意义了。

总结

本文更多的是从技术层面去讨论比特币和区块链这个东西,并不涉及到比特币本身作为一种货币或金融工具的原理和价值。分析了一下区块链技术的思想和应用限制。最后有一个重要的事情我现在也没想通——为什么区块链就火了?很多人说他和互联网急速,AI技术这些东西是一样的存在,将是下一个能改变世界的东西。恕我眼拙没看到它潜力在哪!