计算机行业新技术 —— 区块链

在IT界流传了一句话,“区块链技术被认为是继蒸汽机,电力,网络之后的又一颠覆性技术。如果说蒸汽机使人们的劳动力得到了解放,电力使人们生活需求得到了改善,网络彻底改变了人们信息传递的方式,那么区块链则会彻底改变人类社会的价值传递方式。”

在很早之前,人与人之间信任靠的完全是招牌,品质,口碑,国家机构,而区块链技术则通过技术手段实现了新的信任机制,而这种信任机制是可以被量化、可以在技术手段上完美实现的。所以说区块链技术最核心的特性就是改变了人类落后的信任体制。

什么是区块链

百度文库称 区块链技术(BT)被称为是“分布式账本技术”,是一种互联网数据库技术,它最大的特点就是去中心化,所有数据完全公开,每个人都可以成为数据库的记录者。用通俗的话阐述:如果我们把数据库假设成一本账本,读写数据库就可以看做一种记账的行为,区块链技术的原理就是在一段时间内找出记账最快最好的人,由这个人来记账,然后将账本的这一页信息发给整个系统里的其他所有人。这也就相当于改变数据库所有的记录,发给全网的其他每个节点,所以区块链技术也称为分布式账本(distributed ledger)。

简单来说,区块链技术的本质就是一个分布式账本,任何人都可以对它进行记录和查验,因为区块链最大的特点就是去中心化,因此不存在单一的用户对其控制,即不存在管理员机制,区块链系统中所有的用户必须按照严格的规则和共识来对区块链数据进行修改和管理。

 

举例理解区块链

下面我们通过一系列的举例来简单的介绍一下区块链技术。

如果甲用户借给了乙用户1000块钱,按照区块链的规则,那么甲用户就需要在人群里大喊“我是甲用户,我今天借给了乙用户1000块钱!”  与此同时,乙用户也要在人群中喊“我是乙用户,今天我向甲用户借了1000块钱!”  这时候路人听见了,就拿小本本记录“今天甲用户借给了乙用户1000块钱。”  就像下面这张图一样。

 

 

在上边这个案例的系统中,没有银行系统,没有担保机构,没有第三方平台作证,甚至不需要人与人之间的信任。如果乙用户突然大喊“我没有欠甲用户钱!”  这时候就会有人跳出来说“不对,我记得你借了甲用户1000块钱!”  这就是一个去中心化的体系结构,区块链里面的所有用户都是数据的参与者和维护者,这样,整个系统中没有了权威的中心化代理,信息的可信度和准确性便会面临问题。

其实在上边的系统中,甲乙用户的1000块钱已经变得不重要了,也就是说,所有的东西在这个场景里面都可以被用来交换记录,甚至是一个虚无不存在的东西,只要区块链中的所有用户都承认这个事实,那他就是真的,就是可以流通的。

再比如,我在人群中大喊一声“我创造了十个AA!”  我根本就不需要知道什么是AA,也不需要关心这个世界上到底有没有AA这个东西,只要在人群中有人听到我的喊话,并且在他的小本本上写下“王佳伟有十个AA。” 然后我就真的有了十个AA,如果以后我说我给了某人一个AA,只要被人群记录下来并且得到了所有人的认可,那我就真的给了某人一个AA,这笔交易完成!! 就像下图一样。

 

 

 

不难发现,一段时间后,AA开始在区块链系统中流行起来了,大家都认可了AA。但是也出现了一个问题,AA的数量只有十个,如果有人故意耍坏,在人群中大喊 “我有十个AA!” 那该怎么办呢?如果人群中有人记下来他有10个AA,那不就出现伪造数据了吗?因此,为了防止这种事情的发生,我在创造AA的同时,给我的AA打上一个标记,这样在交易AA的时候,我只需要大喊 “我给了某人一个AA,这个AA的来源记为0001的那条记录,我现在说的这句话记为0002。”简单点说,就是把说的话规范化为 “这句话的编号是XXX,上句话的编号是XXX,我给了某人一个AA。”这样解决了伪造数据的问题。

 

 

接下来又出现问题了,“凭啥帮你把东西记在我的小本本上?”所以为了鼓励大家帮忙记录交易数据参与到区块链的大家族中来,我决定给第一个听到我喊话并且帮我记录的人一个奖励,我分给他一个AA,作为帮我记录的奖励,而你记录下来之后,要快速的告诉其他人你记录下来了,让别人放弃记录这条消息,并且把你的记录进行编号,可以让别人查到,然后你再把我说的话加上的你的记录编号一起喊出来,让下一个人记录,以此类推。

在这种规则之下,就会有很多人时刻监听别人的消息,抢占第一个记录的权利!比如:比特币挖矿!

 

 

在区块链系统中,如果我和一个用户丙同时喊出一句话“我获得了一个AA!”因为位置的不同,一定会有一个人最先听到我的喊话,也一定会有一个人最先听到用户丙的喊话,那么一部分认为这句话是我喊得,开始帮我记录,同样另一帮人也会帮丙记录,这样的话,原本一条唯一的信息链在我们喊出“我获得了一个AA!”的时候,出现了分支。

 

 

 

区块链是一条吧所有数据全部串联起来的锁链,每个人记录的东西都是统一的,出现分支,数据的确定性统一性真实性就会出现问题,因此,为了解决掉这样的问题,设计出了新的规则,增加记录编码的难度,保证记录的唯一性(保证节点之间的同步)。

区块链的应用

区块链的雏形在很早之前就已经诞生,比特币的设计原理就是基于此,如今,区块链已经开始逐渐应用到各个领域,金融,物流,公共服务,银行体系中逐渐引入区块链技术。中央银行在16年就表态支持区块链发展,同年11月,中国政府已经把区块链正式列入十三五规划纲要中。

 

 

区块链凭借去中心化,多方共识,交易溯源,不可篡改的特点使贵州超过3000亿的脱贫脱贫攻坚基金,要通过300多个单位的运作,惠及493万贫困人口,确保扶贫资金募款,投资,使用管理等环节正确运作。

 

 

马云在近两年中,所提及最多的概念就是信用体系,因为信用使得中国电子商务获得了突飞猛进的发展,互联网在未来将会像空气一样围绕在每个人的身边,因此一个合理可靠的信用体系显得尤为重要。为此,马云着力打造一个可靠的信用体系,二蚂蚁金服便是马云为之构想。

 

 

马云认为,未来人们的生活将无现金,并可以用信用兑换商品。这一实现,十分需要一种革命性的信用机制。这一机制在2016年的支付宝App里已经悄然 上线---蚂蚁区块链。

技术角度理解区块链

区块链的本质

区块链其实是一种特殊的分布式数据库。主要作用是用来存储信息,任何信息都可以写入区块链,也可以读取出区块链中的数据。

所有用户都可以建设服务器加入区块链网络中,变为一个节点。区块链中没有中心节点,所有的节点都是平等的,都保存着整个数据库,可以向任何节点读数据和取数据,因为所有的节点数据都会被同步,保证区块链的一致性和正确性。

 

 

区块链的特点

区块链的最大特点就是去中心化,而且是彻底的无中心。区块链没有管理员制度,也就代表了没有人可以使用上帝视角对区块链进行审核和随意的修改数据,人人都可以写入数据,那怎么保证区块链中数据的正确性呢?这就是区块链的魅力所在!

区块

区块链是由一个一个的区块相连接形成的。每个区块有两部分组成,分别是区块头和区块体,区块头用来记录区块的信息,区块体用来记录实际数据。

 

 

 

区块链头部包含了很多区块的元信息:

  • 区块生成时间
  • 实际数据(即区块体的)的Hash
  • 上一个区块的Hash
  • ……

 

 

 

Hash就是计算机可以对任意内容计算出一个长度相同的特征值,区块链的Hash长度为256位,不管什么数据都会计算出一个256位的二进制数字,并且可以保证只要数据内容不同,对应的Hash一定不同。

Hash的不可修改性

区块与Hash为一一对应的关系,每个区块的Hash 都是针对“区块头“计算的。

区块头包含着许多内容,这就说明如果当前的区块发生了数据变化,或者上一个区块的Hash变了,一定会引起后一个区块的Hash变化。

加入有人修改了一个区块,改区块的Hash就变化了,为了让后面的区块还能连接修改过的区块,必须修改后面所有的区块,否则修改的区块就脱离区块链了。因为Hash的计算很耗时间,所以说同时修改多个区块几乎不可能。

正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。这就像历史一样,发生了就是发生了,从此再无法改变。

 

 

采矿

为了保证区块链各个节点之间的同步性,新区块的添加速度都不能太快。例如,你刚同步好了一个区块,准备基于它生成一个新的区块,就在这时一个节点比你早一步进行了区块的生成,你不得不放弃进行一般的计算再次同步新生成的区块,毕竟,一个区块后边只能接一个区块,所以你别无选择,只能停下来立即同步。

 

 

 

于是,为了让添加新区块变得困难,故意设计了海量运算,只有通过大量的计算才可以得到当前区块的有效Hash,由于计算量太大,所以添加新区块变得异常的缓慢,平均每10分钟全网出一个区块,一个小时出六个。

其实这个过程就是采矿,因为计算有效 Hash 的难度,好比在全世界的沙子里面,找到一粒符合条件的沙子。计算 Hash 的机器就叫做矿机,操作矿机的人就叫做矿工。

难度系数

计算一个Hash就这么难吗?对,就这么难,计算机也不例外。因为Hash不是随便有个就行的,需要符合一定的条件才会被区块链认可从而添加为新区块,如果不符合条件,不好意思,回去重新算。

区块头包含一个难度系数,这个值决定了计算Hash的难度,比如第100000个区块的难度系数为 3,845,539,970,657 。

区块链协议规定,使用一个常数除以难度系数,可以得到目标值,显然难度系数越大,目标值越小。Hash的有效性与目标值有关,只有小于目标值的Hash才是有效的,否则无效,重新计算。由于目标值非常小,Hash小于该值得几率非常小,也许计算十亿次才算中一次,这就是采矿的难度。区块头里面还有一个Nonce的值记录了计算的次数,例如100000个区间的Nonce的值为0x9f63aafeec219854。

 

难度系数调节

其实根本没办法保证一定十分钟出一个区块,有的一分钟就出来了,有的要一个小时甚至几天几月。为了把产出率限制在十分钟一个,设计者设计出了难度系数动态调节机制,每两周调节一次,随着时间的推移,难度系数越调越高,导致了采矿越来越难。

区块链的分叉

区块链是可靠的,但是还有一个问题,如果两个人同时向区块链写入数据,出现分支怎么办?

现在的规则是,一长一短选长的。如果出现分支,看哪根分支在分叉点后先到达6个新区块。

 

 

为了保证数据的可靠性,区块链也有自己的代价。一是效率,数据写入区块链,最少要等待十分钟,所有节点都同步数据,则需要更多的时间;二是能耗,区块的生成需要矿工进行无数无意义的计算,这是非常耗费能源的。

 

 

原文地址:https://www.cnblogs.com/wjw1014/p/10725745.html