最近这几天区块链又粉墨登场了,新闻媒体也一直在大量报道,宣称可能要在金融界掀起一番浪潮。甚至有人说很久之前中国就出现了区块链的产物——麻将。那么区块链到底是什么,麻将和区块链又有什么关系呢?
笔者这两天也阅读了相关文献和资料,下图是我学习的一个路径,本文也是按照自己了解区块链的路径做的一些总结,篇幅较长,写这篇文章的目的也是希望能简单地向对区块链技术不了解但是想知道区块链是什么的人介绍区块链技术,因为自己在区块链方面也是一个小白,如果有错误的地方,还望各位留言指正。
区块链 -> 比特币
首先我们得先知道,区块链和比特币之间并不等同,如果要论辈分,区块链应该是比特币的爸爸,为什么这么说呢?我们先来了解下区块链是什么,以及区块链是用来干嘛的。
什么是区块链?区块链是做什么的?
一提到区块链,相信很多人都会想到什么去中心化、分布式、不可篡改之类的名词。说实话我刚开始由于姿势水平不够看到这些名词的时候也是一头雾水,《区块链技术发展现状与展望》一文给出如下定义:
狭义来讲,区块链是一种按照时间顺序将数据区块以链条的方式组合成特定数据结构, 并以密码学方式保证的不可篡改和不可伪造的去中心化共享总账(Decentralized shared ledger),能够安全存储简单的、有先后关系的、能在系统内验证的数据。广义的区块链技术则是利用加密链式区块结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用自动化脚本代码(智能合约)来编程和操作数据的一种全新的去中心化基础架构与分布式计算范式。
上面的文字毕竟太过学院派了,如果用一句话来概括,区块链其实就是一种数据结构(栈和队列也是一种数据结构),既然他是一种数据结构,那区块链的作用自然也就不言而喻了:组织并存储数据。剩下的一些定语如「去中心化」、「分布式」这些无非就是对这种数据结构的修饰罢了。比特币就是应用这种技术制作的数字货币。
区块+链=区块链?
既然他和栈一样是一种数据结构,那我们总得知道这个数据结构长什么样子吧。我们把区块链拆分成「区块」和「链」就会明白区块链长什么样子了。
区块
上图是一个区块(Block)示意图,每个区块包含两个部分:
- 区块头(Block Header):记录当前区块的特征值(里面存放的内容我们稍后再说)
- 区块体(Block Body):存放的数据
所以,区块就是一种存放数据的东西,可以近似的理解为链表中的节点。
链
把许多上图那样的区块连接在一起就形成了区块链,如下图所示:
想要形成一个链,那总得有头吧,链头的区块学名叫做创世区块(Genesis Block)。前一个区块称为后一个区块的父区块,反之则称为子区块。 所以,其实区块链就长上面那样,没什么神秘的。
这时我想肯定会有人问了,你说把区块连接在一起他们就能连接在一起了吗?他们之间是怎么连接的呢?
如何链接
这里我也不卖关子了,子区块与父区块是通过父区块的 哈希(Hash) 值建立链接的。这里又引入一个新的概念,什么是哈希呢?
所谓「哈希」就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的哈希长度是256位,这就是说,不管原始内容是什么,最后都会计算出一个256位的二进制数字。而且可以保证,只要原始内容不同,对应的哈希一定是不同的。因此我们可以得到两个推论:
- 推论1:每个区块的哈希都是不一样的,可以通过哈希唯一标识区块。
- 推论2:如果区块的内容变了,它的哈希一定会改变。
所以我们只需要在每个区块的区块头存放上个区块的哈希值即可。就是下图红线标注的地方。
至于如何计算出这个哈希值,不同的区块链有不同的计算方法,这里不多说。
下面这篇文章介绍了比特币是如何计算Block Hash的,有兴趣的可以阅读了解下。👇
为什么需要区块链?
看了上面的内容后相信你应该就明白什么是区块链了。但是肯定就会有人说,说到底这不就是链表吗,为什么国家还要大力发展区块链产业,甚至上升到了到战略层面呢?
的确,区块链的技术原理并不复杂,但是他的『社会意义』却是巨大的。
区块链本质上是一种解决信任问题、降低信任成本的技术方案,其目的就是为了去中心化。
好了,这里又出现了一个新的概念,去中心化?这个名词只要一提到区块链就一定会被提到,所以你一定想知道去中心化到底是什么。不急,在谈去中心化之前,我们先谈一下另一个词——信任。
信任
对于信任一词,维基百科给出的定义如下:
可能你还是不太能理解,我们再来举个很常见的例子:
近视的人想要摘下眼镜一般都需要做手术,但是你不清楚这个手术做了之后是否真的可以恢复视力,所以你去找专家,这个专家是全国非常有名的眼科医生,他告诉你这个手术做完是可以恢复视力的,所以你就去做手术了。
还有一种情况是,你在做手术之前问了之前做过这个手术的亲戚朋友,他们都说这个手术做完之后可以恢复到正常视力,你觉得他们都成功了,所以你就去做手术了。
但如果一个小诊所的医生告诉你,我们诊所也可以帮你做这个手术,做完也能帮你恢复视力,你会信吗?我想你可能就要好好考虑下了。
这就是所谓的信任的力量。你不会信任一个没有足够信用度的单独个体,但你会信任一堆个体或者有足够信用度的单独个体。
在金融领域,我们平常能接触到的银行就是这个有足够信用度的个体(中心)。
去中心化
仔细想一下上面那个例子,为什么我们会相信眼科专家而不相信小诊所的医生,因为相较于小诊所的医生,眼科专家有更多的信用成本,所以我们往往要为眼科专家付更多的费用。
对于银行来说,作为信用中介也是需要成本的,而我们普通大众就要为这庞大的信用成本买单。所以才会造就金融业是最赚钱的行业。
所以如果想要去除银行类等中心机构的信用背书? 那就可以用我们上面提到过的「一堆个体」,这也是区块链技术的核心——去中心化。
用一句非常洗脑的广告语来描述去中心化就是:没有中间商赚差价。
如何实现去中心化——分布式账本
我们先来建立一个去中心化的系统,为了方便理解,我们来看一个简单的去中心化借贷模型:如果A借了B 100块钱,这个时候,A在人群中大喊“我是A,我借给了B 100块钱!”,B也在人群中大喊“我是B,A借给了我100块钱!”,此时路人甲乙丙丁都听到了这些消息,因此所有人都在心中默默记下了“A借给了B100块钱”。你看,这个时候一个去中心化的系统就建立起来了,这个系统中不需要银行,也不需要借贷协议和收据,严格来说,甚至不需要人与人长久的信任关系(比如B突然又改口说“我不欠A钱!”,这个时候人民群众就会站出来说“不对,我的小本本上记录了你某天借了A100块钱!”)。
上述例子中A君、B君和路人甲乙丙丁每个人的小本本上都有 A 借给 B 100块钱这条记录了,那些小本本就是这个去中心化系统中的分布式账本。
那如果发生了很多次交易呢?很简单,那就在小本本上面再添加一条记录就可以了啊。
久而久之,这个小本本上面就会有很多交易记录了,有没有让你想到什么东西?不错,就是区块链,一条记录就是一个区块,这个小本本就是一个区块链。看到这里你应该就可以理解为什么提到区块链就会提到分布式账本了吧。
如何操作区块链?
上文说过比特币就是应用区块链技术制作的数字货币,这里的话我们就以比特币交易为例来看看区块链具体是如何操作的。再介绍流程前,我们先来了解一个概念:节点/矿工。
什么是节点?在上个例子中,路人甲乙丙丁都有一个小账本用于记账,每个记账的都是一个 节点,外号 矿工。
操作流程
1. 挖矿
什么是挖矿?每增加一笔交易,即形成一个区块的过程,就是所谓的挖矿。
2. 广播
如果我们想要新增一笔交易(也就是在区块链中新增一个区块),我们需要广播到整个区块链网络中,让所有的节点都承认这条记录 。那么应该如何实现广播的呢?
区块链的广播机制
下图画出了区块链广播机制的一个流程:
- 节点A收到一个区块,对其进行验证并将其广播给其附近的区块;
- 节点B收到inv消息后,如果他之前没有接收过这个区块,则向节点A发送一个getdata消息;
- 节点A收到getdata消息后,就会把区块和交际记录的具体信息发送给节点B。
- 此时节点B也就收到了一个区块,重复1、2、3操作给其附近的区块的。
3. 记录
一旦A节点新增一条记录并广播到网络中,网络中的其他节点如B、C、D等都会在自己的小本本上新增这条记录。一旦记录,之后就不可撤销,且不能随意销毁。为什么不可修改呢?
区块链的不可修改
这里就引出了一个区块链的特性——不可修改。之所以没有在前面介绍区块链的时候介绍这个特性就是想结合上面的例子来说。试想一下如果有人想修改的其中一条记录,就得先修改自己的这个账本上的这条记录以及这条记录后的所有记录,然后还得按照同样的方式修改别人的账本。这个难度是可想而知的。
区块链的激励机制
这一节会介绍下区块链的激励机制,因为比特币已经十分成熟,这里会以比特币作为例子讲解。
为什么要挖矿?
整个系统看似很和谐,但是有一个问题不可避免,“凭啥你让我记账我就记账?我的小本本不要钱么?”
以比特币举例,矿工会把每十分钟(这是比特币系统规定的)产生的交易打包到一个区块之中,一旦生成区块成功,矿工就会收到两种形式的奖励,也就是出块奖励和手续费,奖励过程是程序自动完成的。
出块奖励
为了鼓励矿工的服务,对于其所记录和确认的交易,系统为矿工提供25个比特币作为奖励。(这个奖励数量,系统设定每4年减半)
手续费
交易双方为了交易被区块链尽早记录会提供给矿工一笔交易费用作为激励。
谁来发行货币?
既然我可以收到比特币奖励,那货币究竟是怎么发行出来的?出块奖励是系统生成新币的唯一方式。比特币是通过挖矿来生成并进入流通的,这个过程要消耗很多电力和硬件资源,跟采金矿很类似。生产货币的过程伴随着记账和出块的过程,这就是为何比特币的记账过程被叫做挖矿了。大家都会争着去生成区块,因为只有最快的人才最有可能获得生产这个区块的权力,也才能得到经济激励。
谁可以收到奖励?
既然我们知道了挖矿是为了获取奖励、也知道了奖励是从哪来的,这时候就会有新的问题了,奖励到哪去?
因为没有中心分配奖励,而且每个矿工都会新增一个区块,那奖励该怎么给?难不成每人一份?答案当然是no!
奖励只有一份,想要确定奖励对象(即记账权归属的问题),这就要涉及区块链中另一个概念了——共识机制。
共识机制
共识机制是区块链网络最核心的秘密。简单来说,共识机制是区块链节点就区块信息达成全网一致共识的机制,可以保证最新区块被准确添加至区块链、节点存储的区块链信息一致不分叉甚至可以抵御恶意攻击。实践中要达到这样的效果需要满足两方面条件:一是选择一个独特的节点来产生一个区块,二是使分布式数据记录不可逆。
上图为当前主流的共识机制,主要包括:工作量证明/POW(Proof of Work)、权益证明/POS(Proof of Stake)、工作量证明与权益证明混合(POS+POW)、股份授权证明/DPOS(Delegated Proof-of-Stake)、实用拜占庭容错(PBFT)、瑞波共识协议等。其中比特币使用的是工作量证明机制。
POW机制
这里简单说下POW机制的工作流程:
- 节点监听全网数据记录,通过基本合法性验证的数据记录将进行暂存;
- 节点消耗自身算力尝试不同的随机数(nonce),进行指定的哈希计算,并不断重复该过程直到找到合理的随机数,这一过程也被称为“挖矿”;
- 找到合理的随机数后,生成区块信息(块头+块身);
- 节点对外部广播出新产生的区块,其他节点验证通过后,连接至区块链中,主链高度加一,然后所有节点切换至新区块后继续进行下一轮挖矿。
尽管工作量证明机制解决了记账权归属问题,但是上面的描述实在是太复杂了,我们可以简单的理解为谁记录的快谁就可以获得奖励。
记录的速度一样快怎么办?
因为整个系统是分布式的,所以有很多机率会出现一样快的情况,所以为了保证节点之间的同步,新区块的添加速度不能太快。试想一下,你刚刚同步了一个区块,准备基于它生成下一个区块,但这时别的节点又有新区块生成,你不得不放弃做了一半的计算,再次去同步。因为每个区块的后面,只能跟着一个区块,你永远只能在最新区块的后面,生成下一个区块。所以,你别无选择,一听到信号,就必须立刻同步。
因此,区块链的发明者中本聪(这是假名,真实身份至今未知)故意让添加新区块,变得很困难。他的设计是,平均每10分钟,全网才能生成一个新区块,一小时也就六个。
这种产出速度不是通过命令达成的,而是故意设置了海量的计算。也就是说,只有通过极其大量的计算,才能得到当前区块的有效哈希,从而把新区块添加到区块链。由于计算量太大,所以快不起来。
若两个人同时上传,虽然这个概率很小,但是若发生,我们就看最后的区块链哪条更长,短的那条就失效。这就是区块链中的“双花问题”(同一笔钱花两次)。
如果想造假怎么办?
如何判断交易是否真实?我们遵循的是少数服从多数原则,对于要制作虚假交易,除非你说服了整个网络中超过51%的矿工都更改某一笔账目,否则你的篡改都是无效的。 网络中参与人数越多,实现造假可能性越低。
这也是集体维护和监督的优越性,伪造成本最大化。说服51%的人造假还是灰常灰常难的。这就是经常提到的51%攻击。
脑洞突然大开,我们每个人的记忆不就是个区块链,分布记账法的模式吗。 如果有件事情发生了,有51%以上的人记住了写在自己的脑子里,那这件事情就真的发生了,成为了记忆。相反,如果只有少数的人看到了这件事情的发生,就算发生了也可能会被当成没发生吧。
为什么比特币成功了?其他山寨币失败了?
过去几年比特币网络的算力悄无声息的增长到了无比之大,这大大增加了比特币成功的可能性。反之也可以解释为什么山寨币不靠谱,太容易被51%攻击。在依赖密码学的数字货币领域,先发优秀是非常明显的。所以51%攻击对于比特币来说并不是一个什么大问题(早在2013年7月,比特币全网算力已经达到世界前500强超级计算机算力之和的20倍),即使有政府集全国之力秘密造出一台超级计算机,用来击溃比特币来挽救自己的货币发行体系,它会发现使用该能力进行挖矿便可垄断比特币的发行权,其收益远大于击溃比特币,动机也就不复存在了。
比特币是有限的吗?发行结束了怎么办?
比特币是一个无通胀的货币,发行是有上限的。系统规定,比特币的出块奖励每四年会减半,到2140年,比特币发行总量到达2100万之后,就不会有出块奖励了,手续费会成为唯一的奖励形式。很多人担心比特币完成了2100万的发行量之后,单纯靠手续费不足以弥补矿工的挖矿支出,这会给比特币带来危机。实际中真的会这样的吗?
首先,出块奖励消失的过程是非常缓慢的。每四年减半一次,2020年会减半到6.75个,到一百多年后的2140年才会真的消失。社区有几十年的时间去逐步适应这个问题,不会一下子造成巨大的网络震荡。其次比特币的持有者也会因为期待比特币升值,会非常有动力的去推广比特币,然后不断产生手续费,不断产生收益。
一个有趣的例子
其实上面就是挖矿的流程和一些问题整理了,我之前在网上看到一个有关比特币挖矿的非常有趣的例子,在这里分享出来:
单身汪们要找女票,国民岳母说我有好多女儿,这样吧我给你们出点题目,解出一个就给其中一个姑娘的微信号。单身汪们疯狂竞争,想破脑袋去解题。只要其中一只汪解出一道题,就立马得意洋洋地昭告天下,示威全部单身汪,这个姑娘是我的啦,你们放弃吧。其他单身汪们即使不服也没有办法,惆怅懊恼也不是个事儿啊,还是麻溜地立马去解下一道题目吧。这只喜赢姑娘的幸运小汪被岳母认可后还能得到25个货币单位的彩礼,简直人生赢家。
麻将和区块链
看了这么多,想必你也已经有些累了,不妨让我们回到文章开头的问题,麻将到底和区块链又有什么关系呢?
麻将是中国传统的区块链项目。他拥有以下几个特征:
- 去中心化。不像斗牛闲家只能赢庄家的钱,麻将谁的牌都能胡。
- 比赛挖矿。四个矿工一桌,最先正确组合出13张牌的矿工将获得奖励。
- 不可篡改。打错了牌绝不能反悔,其他人指定不同意。
- 公开透明。都是桌上现金交易,没有暗箱操作。
最后
最后我们总结下,区块链主要有以下核心内容:
1. 去中心化
这是区块链颠覆性特点,不存在任何中心机构和中心服务器,所有交易都发生在每个人电脑或手机上安装的客户端应用程序中。
实现点对点直接交互,既节约资源,使交易自主化、简易化,又排除被中心化代理控制的风险。
2. 开放性
区块链可以理解为一种公共记账的技术方案,系统是完全开放透明的,
账簿对所有人公开,实现数据共享,任何人都可以查账。
3. 不可撤销、不可篡改和加密安全性
区块链采取单向哈希算法,每个新产生的区块严格按照时间线形顺序推进,时间的不可逆性、不可撤销导致任何试图入侵篡改区块链内数据信息的行为易被追溯,
导致被其他节点的排斥,造假成本极高,从而可以限制相关不法行为。