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