区块链是当下的热门话题,新闻媒体大量报道,声称它将创造未来。但是通俗易懂的入门文章很少。很少有人解释区块链是什么,它有什么特别之处。
接下来老男孩先生就来为你总结一下。如有错误或不准确之处,请指出。
区块链的精髓是什么?总之,它是一个特殊的分布式数据库。
首先,区块链的主要功能是储存信息。任何需要保存的信息都可以写入区块链或从中读取,所以它是一个数据库。
其次,任何人都可以建立一个服务器,加入区块链网络,成为一个节点。在区块链的世界里,没有中心节点。每个节点都是平等的,并且拥有整个数据库。您可以向任何节点写入/读取数据,因为所有节点最终都会同步,以确保区块链的一致性。
区块链最大的特点是分布式数据库不是一个新发明。这种产品在市场上已经存在很长时间了。然而,区块链有一个革命性的特点。
区块链没有管理员,完全是无中心的。其他数据库有管理员,但区块链没有。如果有人想在区块链中加入审计,那是不可能实现的,因为它的设计目标是防止出现一个中央管理机构。
因为无法管理,区块链可能无法控制。否则,一旦大公司、大集团控制了经营权,就控制了整个平台,其他用户就不得不服从。
但是,没有管理员,每个人都可以写数据过去。如何才能保证数据可信?万一被坏人改了呢?请继续读下去,这就是区块链的美妙之处。
区块链是由区块组成的。块非常类似于数据库记录。每次写入数据时,都会创建一个数据块。
每个区块包含两个部分。
1.块头:记录当前块的特征值。
2.块主体:实际数据
报头包含当前块的多个特征值。
1:生成时间
2.实际数据的散列(即块主体)
3:前一个块的散列
4:
在这里,你需要理解什么是散列,这是理解区块链所必需的。
所谓‘哈希’,就是计算机可以对任何内容计算出相同长度的特征值。区块链的哈希长度是256位,这意味着不管原始内容是什么,最后都会计算出一个256位的二进制数。而且可以保证,只要原始内容不一样,对应的hash就一定不一样。
比如字符串123的hash是a 8 FDC 205 a 9 f 19 cc 1c 7507 a 604 C4 f 01 b 13d 11d 7 FD 0(十六进制),换算成二进制就是256位,只有123能得到这个hash。(理论上其他字符串有可能得到这个hash,但是概率极低,可以近似认为不可能。)
因此,这里有两个重要的推论:
1:每个块的hash不一样,可以通过hash来识别块。
2:如果一个块的内容发生了变化,那么它的hash一定会发生变化。
hash的不可变块与hash一一对应,每个块的Hash都是为‘块头’计算的。也就是把块头的特征值按顺序连接在一起,形成一个很长的字符串,然后计算这个字符串的hash。
Hash=SHA256(块头)以上是块Hash的计算公式,SHA256是区块链的hash算法。注意,这个公式只包含块头,不包含块体,也就是说,哈希由块头唯一确定。
如前所述,块头包含很多内容,包括当前块的哈希和前一块的哈希。这意味着如果当前块的内容发生变化,或者前一块的hash发生变化,一定会引起当前块的hash发生变化。
这对区块链来说意义重大。如果有人修改了一个块,该块的散列也会改变。为了让后面的块连接到它(因为下一个块包含前一个块的散列),这个人必须依次修改所有后面的块,否则被改变的块将脱离区块链。由于后面要提到的原因,hash的计算比较耗时,短时间内修改多个块几乎是不可能的,除非有人掌握了全网51%以上的计算能力。
正是通过这种联系机制,区块链保证了自己的可靠性。数据一旦写入,就不能被篡改。就像历史一样。发生的事情就是发生的事情,从此无法改变。
每个街区都与前一个街区相连,这也是“区块链”这个名字的由来。
因为挖掘必须保证节点间的同步,所以添加新块的速度不能太快。假设您刚刚同步了一个块,并准备基于它生成下一个块,但是其他节点生成了新的块。你得放弃一半的计算,重新同步。因为每个块后面只能跟一个块,所以只能在最后一个块之后生成下一个块。所以,你别无选择,只能一听到信号就同步。
因此,中本聪,区块链的发明者(这是一个笔名,其真实身份是未知的,直到现在)故意使其难以添加新的块。他的设计是平均每10分钟,全网就能生成一个新块,一个小时只有6个块。
这种输出速度不是通过命令来实现的,而是通过刻意设置海量计算来实现的。也就是说,只有通过极其大量的计算才能得到当前块的有效hash,从而给区块链增加一个新的块。因为计算量太大,所以不能快速起来。
这个过程叫做挖掘,因为很难计算出一个有效的哈希,就像在世界的沙子里找到一粒合格的沙子一样。计算哈希的机器叫矿机,操作矿机的人叫矿工。
看到这里的难度系数,你可能会有疑问。人们都说挖掘难,但挖掘不就是用计算机算个哈希吗?这就是电脑的长处。怎么会变得很难,耽误计算呢?
事实证明,不是任何散列都可以使用,只有满足条件的散列才会被区块链接受。这个条件太苛刻了,大部分哈希都不符合要求,必须重新计算。
最初,块头包含一个难度系数,它决定了计算散列的难度。例如,第100,000块的难度系数是1440.0000000000001
区块链协议规定,目标值可以通过将常数除以难度系数来获得。显然,难度系数越大,目标值越小。
哈希的有效性与目标值密切相关。只有小于目标值的哈希才有效,否则哈希无效,必须重新计算。因为目标值很小,哈希小于这个值的几率极小,可能要计算10亿次才算一个。这是采矿如此缓慢的根本原因。
如前所述,当前块的哈希由块头唯一确定。如果对同一个块重复计算hash,就意味着块头必须不断变化,否则不可能计算出不同的hash。块头中的所有特征值都是固定的。为了使块头发生变化,中本聪故意添加了一个名为Nonce的随机项。
Nonce是一个随机值,矿工的作用其实就是猜测Nonce的值,让块头的hash可以小于目标值,从而能够写入区块链。随机数很难猜测。目前只能用穷举法一个个试错。根据协议,Nonce为32位二进制值,即最大值可达21.47亿。第100,000个块的Nonce值是274,148,111。可以理解为矿工从0开始已经计算了2.74亿次,才得到一个有效的Nonce值,这样计算出来的hash才能满足条件。
如果我们幸运的话,我们可能很快就会找到Nonce。运气不好的话,可能已经计算了21.47亿次,没有找到任何Nonce,也就是当前块不可能计算出满足条件的hash。此时,协议允许矿工改变区块并开始新的计算。
难度系数的动态调整前面提到了,挖矿是随机的,不可能保证十几分钟就产出一个区块。有时候,需要一分钟,有时候可能需要几个小时都没有结果。一般来说,随着硬件设备的完善,矿机的增多,计算速度会越来越快。
为了保持十分钟的输出速度不变,中本聪还设计了难度系数的动态调整机制。他规定每两周调整一次难度系数(2016块)。如果这两周的平均块生成速度是9分钟,说明比法定速度快了10%,那么接下来的难度系数会提高10%;如果平均生成速度是11分钟,就意味着比法定速度慢了10%,那么下一个难度系数就会下调10%。
难度系数越高(目标值越小),挖掘难度越大。
区块链的分叉即使区块链是可靠的,但还有一个问题没有解决:如果两个人同时向区块链写数据,也就是两个区块同时加入,因为都连接到前一个区块,就形成了分叉。这个时候应该采用哪个区块?
当前的规则是新节点总是采用最长的区块链。如果区块链有一个分叉,它将取决于哪个分支在分叉点后面,首先到达6个新块(称为“6个确认”)。按照10分钟一个街区计算,一个小时就能确认。
由于新块的生成速度是由计算能力决定的,所以这个规则意味着计算能力最强的分支就是真正的区块链。
总结区块链作为一个非托管的分布式数据库,从2009年开始已经运行了8年,没有出现大的问题。这证明是可行的。
但是,为了保证数据的可靠性,区块链也有自己的价格。第一,效率。当数据写入区块链时,至少需要等待十分钟。如果所有节点都同步数据,需要更多的时间;第二,能源消耗。区块的生成需要矿工无数次无意义的计算,非常耗费精力。
因此,区块链的适用场景实际上非常有限。
1.不存在所有成员都信任的管理机构。
2.写入的数据不需要实时使用。
3.采矿的收入可以弥补它自己的成本。
如果不能满足以上条件,那么传统数据库是一个较好的解决方案。
目前区块链最大的应用场景(可能是唯一的应用场景)是以比特币为代表的加密货币。