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