区块链就是比特币世界这个村子的账本,谁挖到矿,谁就有权在这个账本翻开新的一页,并在新的一页记下“X年X日,本村某某挖矿得到比特币一枚,并得到奖励的手续费若干”。
比特币又火了。为什么要说又呢?因为比特币在 2013 年已经火过一次了。这次与 2013 年相同的是,比特币的价格一路飙升,让人咂舌。与 2013 年不同的是,这次人们不仅仅关注比特币的价格,也开始关注比特币背后的技术——区块链。
一夜之间,区块链从舞台背后站到了聚光灯下,成为了人们追捧的热点。物流、医药、版权…好像哪都可以凭借区块链脱胎换骨。那么,这么神奇的技术,到底是怎么回事?
本文就以最通俗的语言,不涉及任何高等数学和计算机知识,来介绍一下比特币和区块链系统。
说到区块链就不得不说比特币,比特币是区块链技术最好的载体,所以本文就以比特币为例来介绍区块链。
比特币很牛,牛在两个特点:去中心化、电子货币。
别小瞧这两点,这两点同时存在可不是一件容易事儿。
首先来说说去中心化,通常去中心化的货币一般都要追溯到很久以前了,远古时代人们自发地使用贝壳、石子做为雏形货币进行交易,这时候的货币可以看作是去中心化的货币——无需中央银行来组织发行、确认交易合法性。
但是使用这类货币的弊端也不必我多说,货币供给不稳定,取决于每年的贝类产量;货币质量不一,有的大有的小,有的是花蛤有的是文蛤;交易很繁琐,大宗交易动不动就要好几车的贝壳,这么多货币运来运去还容易被抢劫。
于是货币进化,信用货币时代到来,货币成了银行账户里的数字,上面的问题都解决了,但是我们必须需要银行来控制货币的发行、防伪,来进行交易结算,我们的财产权全掌握在了银行的手中。银行喜欢动不动搞点QE放点水,我们银行卡里的钱越来越贬值。
这时候,我们就希望能有一种货币,既能像使用贝壳一样无需银行插手,又能符合当前信息时代对货币功能的需求。于是,集这两种特点于一身的比特币诞生了。
比特币的基本原理
做为一种货币,通常就要满足几个特点:得有人发行它,得能持有它,人与人之间可以互相交换它。
持有
持有比特币非常简单,只要有一个收款地址,就可以持有比特币并接受比特币。所持有的比特币数量只是这个地址下的一个数字。
有人会问,这不跟银行账户一样么,确实很像,但实质又很不一样。银行系统是一个中心化的系统,账户的余额是由银行说了算的,哪天银行系统出错余额变成0,那你就真的从ATM机里取不出钱。
比特币不使用这种权威的中心机构,又需要一个稳定的记账系统,所以解决办法是每一个“矿工”都把比特币世界发生过的所有交易记录存在自己的硬盘上。有了全部的交易记录,推算每个人有多少余额也就很容易了。这个被保存在所有人电脑里的交易记录,学名就是区块链。黑客可以黑掉一些人保存的区块链,但是他做不到黑掉全世界大部分人,只要有大部分仍保存着正确的区块链,那么整个系统就可以通过纠错重新恢复正常。
就像打麻将时,我们有时候用记账方式来记录每回合的应收应付,比特币世界也通过记账来交易,每发生一笔交易都会公之于众,然后大家把这笔交易记录在自己的小账本上,这样每家有多少钱,大家在自己的小账本上都能查清楚。只不过当记账由4个人变成全比特币世界的村民时,这就需要一个稍微复杂点的系统了。
发行
再来看看发行。我们先看纸币是怎么发行的,很简单,央行开动印刷机,一瞬间出现大把“毛爷爷”。而做为一种去中心化的电子货币,比特币是没有央行的,那怎么发行呢?
比特币规定,人们可以去解答一个困难的问题,谁最先答出来,谁就可以发行一块比特币,也就是我们所谓的“挖矿”。
这个困难的问题是什么呢?是哈希(hashing)的问题。哈希是一个函数F,对输入X进行一些运算来得到哈希值Y。就是咱们高中学过的Y = F(X)。比特币让你解答的问题就是,告诉你哈希值Y和F,求X。
这时候你会说了,这不就是个反函数的事么。抱歉,哈希函数这个函数比较特殊,找不到合适的反函数,要想求出X,唯一的方法就是一个一个数来试,把每一个数都代入到F里,看看结果是不是Y,如果恰好蒙对了,那也就把这个问题解答出来了。
所以说所谓的货币发行、挖矿,实际上就是一帮人在用最好的计算机来撞大运蒙这个数。当一名矿工蒙对X后,也就是挖到矿后,他就获得了在原有的区块链末端创造一个新的交易区块的权利,在这个新创建的交易区块上,这位矿工可以附带一个由比特币世界作为付款人,收款人是任何人交易,这样,他就通过这个交易,创造并发行了一枚比特币。
区块链就是由一串交易区块组成的。我们来看看交易区块上包含什么。
一个交易区块会显示谁是它的父区块,包含本区块上的交易记录,以及本区块的哈希值。
这样,随着矿工们不断挖矿创建新的交易区块,一个接一个的区块就串成了一串,成为了名副其实的区块链!在比特币世界中,由于某些原因,区块链会发生分叉(为什么会分叉下文会提到),因而比特币世界规定:唯一合法的区块链是当前最长的区块链。
区块链就是比特币世界这个村子的账本,谁挖到矿,谁就有权在这个账本翻开新的一页,并在新的一页记下“X年X日,本村某某挖矿得到比特币一枚,并得到奖励的手续费若干”。这个账本很特殊,并不是由村支书管理,而是所有的村民人手一本,谁挖到矿以后,都可以自己翻页记账,并让全村人按照同样的方式做,以保证全村所有人的账本一致。当全村人的账本出现不一致时,规定谁家的账本最长就听谁的。
发行
比特币的关键点在于交易。对于一个去中心化的电子货币系统,交易是很有风险的。想象一下,你和另一个人的电子货币交易就类似于打欠条,而且这个欠条没有第三方公证人。如果其中一方突然翻脸,欠条的有效性是很难保障的。
由于不能使用类似银行结算中心的第三方公证人(使用了就是中心化系统了),所以比特币干脆就让全世界人做为公证人。
所有比特币的交易都不能偷偷摸摸进行,都需要将这笔交易通过互联网广播到全世界。如果C想给B 0.5个比特币,会向全世界广播“C给了B 0.5个比特币!”,这时所有挖矿的矿工们,会把这条交易记录加到他们正在挖的这个交易区块中。
他们为什么要加呢?因为当矿工挖出矿时,除了规定奖励的一枚比特币外,每加多一条交易记录,还会额外再多给一点点手续费。蚊子肉也是肉,辛勤的矿工们没有不喜欢的。
在把交易记录加到区块的过程中,矿工们首先会验证一下这笔交易合不合法,也就是查查村里的账本,当C名下货币不足0.5个时,这条交易记录就会被拒绝加入到区块中。
加入到区块中并不代表交易已经成功,只有当包含这个交易记录的区块的随机数X被某位矿工发现,并创造了新的交易区块链接在当前区块后,才能被认为是合法交易,这条交易记录也就成为被验证的交易。
B可能会问了,那也就是说C发了给我钱的广播后,我还不能马上确定我是不是收到钱了啊?
没错,C发广播,只相当于C站在村口朝全村人喊了一句 “我给B 五毛钱!”,只有当全村的人都听见,把这件事都记在了个自账本上,并且记下这件事的那页被矿工翻过去以后,B的户头上多了五毛钱这件事才真正得到了全村村民的认可。由于参与比特币挖矿的矿工众多,通常每笔交易所需的验证时间是非常短的,不会给交易带来延迟感。
由此比特币的发行和交易首尾相连扣在了一起。交易通过发布广播的形式进行,矿工们听到广播后把交易写在交易区块中;矿工们通过挖矿来确认历史交易的完成,并由此创建新的区块,延长区块链,发行新的比特币。
区块链的分叉
之前提到了区块链的分叉。为什么区块链会发生分叉呢?原因就在于去中心化。
没有中心,大家都各自维护账本,因此受困于网络的延时、交流的不充分,难免有出现分歧的时候。
举两个例子,一个是在挖矿时容易出现的问题:矿工B蒙对了随机数,挖矿成功,延长了区块链,注意,此时矿工B延长的区块链仅仅是自己的,其他人还都不知道这件事。当然,矿工B马上向全世界发布挖矿成功的消息,让大家按照他的方式延长区块链。
但是这时,另一位矿工C也蒙对了随机数,他或者因为网速延迟还没听到B的广播,或者听到广播但不甘心,存心想破坏规则,于是他也把自己的区块链延长了,并开始向全世界发广播。
因为网速的延迟,并不是所有人都先听到B的广播,此时就会出现一部分人按照B的指示更新区块链,一部分人按照C的指示更新区块链,而且因为网速的延迟,大家没办法确定到底是B还是C先发布的广播,从而引起区块链分叉。
就好比村里两位矿工B和C分别住在村东和村西,B和C差不多在同一时间挖矿成功,把自家账本翻页,在新的一页写下属于自己的宣言“X年X月,本村B(C)挖矿得到比特币一枚”,并开始向全村大喊让全村人翻页并写下这句话。由于他们分别住在村子的两头,结果村东头的人先听到B大喊于是按找B的话记账,村西头的人先听到C大喊于是按照C的话记账,导致全村的账本此时出现了两个版本。
第二种情况是双重交易,B与C进行交易,发布广播宣布付给C一枚比特币,但是B同时还跟D勾搭,几乎同时又发布广播宣布付给D一枚比特币,更糟糕的是,B宣布付出的是同一枚。
跟第一种情况一样,由于网速问题,一部分矿工先听到B与C交易的广播,并将这条交易记录计入到当前交易区块中,后听到B与D的交易,并判定不合法,拒不添加到交易区块。而另一部分矿工正相反,只把B与D的交易添加到交易区块中。
这两种情况并不是罕见的,由于比特币世界由全世界各地的人参与,有的地区用的是100M光宽带,有的地方用的是56K拨号上网,网速千差万别,而且又有很多人心怀不轨,存心作恶,因此区块链分叉几乎时时刻刻都在发生。此时,比特币世界的最高原则就起作用了:唯一合法的区块链是当前最长的区块链。
可是就上面两种分叉的情况来看,此时分叉的两个区块链一样长啊?没关系,这两条都合法,也都不合法,咱们搁置争议,继续开挖,看谁挖得快,谁先再蒙对新的X,让自己的区块链再进一步,谁的区块链就变成最长,也就成了唯一合法的了。这么一听,怎么感觉这个区块链系统这么随意,有些不靠谱的样子啊,如果大家都不守规则,随意分叉,世界岂不乱套。
别急,接下来咱们通过分析会发现,最终区块链肯定会恢复成稳定的一条。
让我们回到第一个情况矿工B和矿工C分歧问题中,假设B的链条再进一步,成为了最长链条,这条链条也就成为比特币世界认定的合法链条。此时C有两个选择,一是放弃努力,乖乖的扔掉自己的区块链,使用B的。另一种选择是不甘心失败,扔坚持自己的区块链,希望自己能很快继续追平B并反超。
选择前者是大家都开心的,比特币世界的区块链从此统一,选择后者实际上继续让区块链保持分叉状态。那么从理性角度,C应该如何做呢?实际上C此时应该果断放弃自己的链条。
我们可以分析一下,当B和C的链条分叉时,此时比特币世界存在4种矿工、两种势力,B和拥护B的吃瓜矿工,C和拥护C的吃瓜矿工。此时B势力与C势力大体相当,所以大家各挖各的。
当B势力先一步延长了B的链条后,此时C势力就会发生分化,绝大部分拥护C的吃瓜群众只要听到B链条延长的消息,马上会转投到B链条上,因为此时B链条更长,在更长的链条上继续挖矿显然更有前途。势力马上发生逆转,C会尴尬地发现,全世界都在与他为敌(哭)。所以C不得不放弃。
当然,假设是C的势力先延长了区块链,那么情形正好相反,全世界的矿工都会马上投入C的怀抱。尽管可能确实是B先挖到的矿,但此时B也不得不选择放弃自己的那条已经无人问津的区块链。按照这种理性的假设,全世界大部分矿工都会安分守己的选择在最长的链条上工作,所以偶尔的分叉也不是什么大不了的事。
当然仍存在一种极端情况,即B或C一个人的算力超过全世界算力的50%,这时候他们凭借一己之力就有可能反超。但是事实上,由于全世界都在参与,很难有人或组织有这么强的算力,其次即使C有这么强的算力,他老老实实地在最长链条上挖矿就好了,也没必要硬刚全世界,非要显示霸权只会让全世界都不陪他玩了,最后比特币失去价值,C损失更大。
上面所说的第二种分叉情况的解决办法与第一种情况同理,坚持“唯一合法的区块链是当前最长的区块链”原则不动摇,最终合法的一条区块链只会记录B与C交易或B与D交易的其中一个,具体原因读者可以自己想一想。
讲了这么多,大家可以发现,比特币凭借区块链的巧妙设计,使得交易与发行以一种非常稳定的状态进行,而保持稳定的核心力量是什么呢?就是无数矿工提供的算力。
只要矿工够多,算力够大,验证速度够快,比特币的交易就可以快速地被验证,不小心出现的区块链分叉状态可以很快结束,保证整个系统稳定运行。所以挖矿可不光只是费电,这些电能实际上转化成为维持整个系统稳定的能量!
这也告诉我们为什么比特币可以一个币价值数万,而有些新发行的各种币一文不值,因为比特币做为历史最长、受众最广的电子货币,也拥有数量最多、分布最广泛的矿工和算力,是最稳定的电子货币。
而新发行的货币矿工数量很少,参与的算力低,根本起不到稳定整个系统的作用,算力低也意味着每笔交易的验证时间会变长,从而降低货币的可用性,所以这样的新兴货币一文不值。
好了,关于比特币以及比特币系统所用到的区块链技术就介绍到这里,如有大牛对文中内容有异议,欢迎拍砖探讨!
参考文献:
Satoshi《Bitcoin: A Peer-to-Peer Electronic Cash System》
关于作者:
ChenJunXuan / CC,17 年硕士毕业于上海交大,目前在阿里达摩院做计算机视觉方向/智能医学影像相关的算法开发,喜欢 Python。