当前位置: 首页 > 科技观察

全球火热的区块链怎么了?本文将带你了解

时间:2023-03-21 14:37:46 科技观察

区块链是当下的热门话题,新闻媒体纷纷报道,宣称它将创造未来。但是通俗易懂的介绍性文章很少。区块链到底是什么,它有什么特别之处,很少有人解释。接下来,我会尝试写一个我看懂的区块链教程。毕竟不是什么难事,核心概念很简单,三言两语就能说清楚。希望大家看完这篇文章,不仅能了解区块链,还能了解什么是挖矿,为什么挖矿越来越难。应该指出的是,我不是这个领域的专家。虽然很早就关注了,但是从今年年初开始,我开始认真了解区块链。文章中的任何错误和不准确之处,欢迎指正。一、区块链的本质什么是区块链?总之,它是一个特殊的分布式数据库。首先,区块链的主要作用是存储信息。任何需要保存的信息都可以写入区块链,也可以从中读取,所以它是一个数据库。其次,任何人都可以架设服务器,加入区块链网络,成为节点。在区块链世界中,没有中心节点,每个节点都是平等的,他们都保存着整个数据库。你可以向任意节点写/读数据,因为所有节点肯定会同步,保证区块链一致。二、区块链的独特性分布式数据库并不是什么新发明,市场上早就有这样的产品。然而,区块链有一个革命性的特点。区块链没有管理员,它是完全去中心化的。其他数据库有管理员,但区块链没有。如果有人想在区块链中添加审计,他们做不到,因为它旨在防止中央权威。正是因为无法管理,区块链才无法控制。否则,一旦大公司、大集团掌握了管理权,他们就控制了整个平台,其他用户就必须服从他们。但是,没有管理员,任何人都可以向其中写入数据。如何保证数据可信?被坏人改了怎么办?请继续阅读,这就是区块链的神奇之处。3.区块链区块链是由区块组成的。块与数据库记录非常相似。每次写入数据时,都会创建一个块。每个块由两部分组成。区块头(Head):记录当前区块的元信息区块体(Body):实际的数据块头,包含当前区块的多种元信息。实际数据(即区块体)的生成时间Hash上一个区块的Hash...在这里,你需要了解什么是Hash,这是了解区块链所必需的。所谓Hash,就是计算机可以为任意内容计算出一个等长的特征值。区块链的Hash长度为256位,也就是说无论原始内容是什么,黑客都会计算出一个256位的二进制数。并且可以保证只要原始内容不同,对应的Hash就一定不同。比如字符串123的Hash是a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0(十六进制),转成二进制是256位,只有123才能得到这个Hash。因此,有两个重要的推论。推论1:每个区块的Hash不同,可以通过Hash来识别区块。推论2:如果区块内容发生变化,其Hash一定会发生变化。4、Hash的不变性区块和Hash是一一对应的,每个区块的Hash都是为“区块头”计算的。Hash=SHA256(区块头)以上是区块Hash的计算公式,Hash由区块头唯一确定,SHA256是区块链的Hash算法。前面说过,区块头包含很多内容,包括当前区块体的Hash(注意是“区块体”的Hash,而不是整个区块的Hash),以及上一个区块的Hash。这意味着如果当前区块的内容发生变化,或者前一个区块的Hash发生变化,那么肯定会导致当前区块的Hash发生变化。这对区块链有重大影响。如果有人修改了一个块,该块的哈希值就会改变。为了让后面的区块连接到它,这个人必须同时修改所有下面的区块,否则被修改的区块就会从区块链中分离出来。由于后文提到的原因,Hash的计算非常耗时,同时修改多个区块几乎是不可能的,除非有人掌握了全网51%以上的算力。正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。这就像历史一样,已经发生的就是已经发生的,从此无法改变。每个块都连接到前一个块,这就是“区块链”名称的来源。5.挖矿由于要保证节点间的同步,所以添加新区块的速度不能太快。想象一下,你刚刚同步了一个区块,准备根据它生成下一个区块,但是此时另一个节点生成了一个新的区块,你不得不放弃一半的计算重新同步。因为每个块只能跟一个块,所以你只能在第一个块之后生成下一个块。因此,您别无选择,只能在听到信号后立即同步。因此,区块链的领导者中本聪(这是化名,但他的真实身份仍然未知)故意让添加新区块变得困难。他的设计是,平均每10分钟,全网可以产生一个新的区块,一个小时只有六个。这种输出速度不是通过命令来实现的,而是通过刻意设置的海量计算来实现的。也就是说,只有通过极其大量的计算,才能得到当前区块的有效Hash,从而将新区块加入到区块链中。由于计算量大,无法快速起来。这个过程称为挖矿,因为计算一个有效的Hash的难度就像在全世界的沙子中找到一粒符合要求的沙子。计算Hash的机器称为矿机,操作矿机的人称为矿工。6.难度因素看完这里,你可能会有一个疑问。都说挖矿难,但挖矿不就是用电脑算个Hash吗?这就是电脑的强项。怎么会变得这么难?想不通?事实证明,不是任何Hash都是可以接受的,只有满足条件的Hash才会被区块链接受。这个条件太苛刻了,大部分哈希都不符合要求,必须重新计算。原来区块头中包含一个难度系数(difficulty),决定了计算Hash的难度。例如,区块100,000的难度系数是14484.16236122。区块链协议规定目标值(target)可以通过一个常数除以难度系数得到。显然,难度系数越大,目标值越小。Hash的有效性与目标值密切相关。只有小于目标值的Hash才有效,否则Hash无效,必须重新计算。由于目标值很小,Hash小于这个值的可能性极小,可能计算10亿次才算一次。这就是挖矿如此缓慢的根本原因。区块头中还有一个Nonce值,记录了Hash重新计算的次数。第100000个区块的Nonce值为274148111,即经过2.74亿次计算,得到一个有效的Hash,即可将区块加入区块链。7.难度系数动态调整即使挖矿难度大,也不能保证十分钟出块,有时一分钟出块,有时几小时出不来。一般来说,随着硬件设备的提升,矿机数量的增加,计算速度肯定会越来越快。为了让输出速率保持在十分钟不变,中本聪还设计了难度系数动态调整机制。他规定难度系数每两周调整一次(2016个区块)。如果这两周平均出块速度为9分钟,即比法定速度快10%,那么难度系数会增加10%;如果平均生成速度为11分钟,说明比法定速度慢了10%,所以难度系数会下调10%。难度系数调的越来越高(目标值越来越小),使得挖矿难度越来越大。8、区块链的分叉即使区块链是可靠的,还有一个问题没有解决:如果两个人同时向区块链写入数据,即同时添加两个区块,因为它们如果连接到前一个区块,就形成了一个分叉。此时应该采用哪个块?目前的规则是新节点总是采用最长的区块链。如果区块链出现分叉,它会看分叉点后面是哪个分支,先达到6个新区块(称为“六确认”)。按照10分钟一个区块计算,一个小时就可以确认。由于新区块的生成速度是由算力决定的,所以这条规则意味着算力最大的分支就是真正的比特链。9.总结作为一个非托管的分布式数据库,区块链从2009年开始运行了8年,没有出现过什么大问题。这证明它有效。但是,为了保证数据的可靠性,区块链也有其自身的价格。一是效率。等待数据写入区块链至少需要十分钟,所有节点同步数据需要更多时间;另一个是能源消耗。区块的产生需要矿工进行无数无意义的计算。非常耗能。因此,区块链的适用场景其实非常有限。没有所有成员信任的管理权限。写入的数据不需要实时使用。挖矿的收入可以覆盖其自身的成本。如果不能满足以上条件,那么传统数据库是更好的解决方案。目前,区块链最好的应用场景(也可能是唯一的应用场景)是以比特币为代表的加密货币。在下一篇文章中,我将介绍比特币的入门知识。10.请参阅Howdoesblockchainreallywork?,作者:SeanHanBitcoinminingthehardway:thealgorithms,protocols,andbytes,作者:KenShirriff