区块链基础知识解析
区块链是眼下的大热点,大众媒体很多报道,宣称它将创造将来。
可是,简单易懂的基础知识文章却极少。区块链到底是什么,有什么特别之处,极少有讲解。
下面,我就来尝试,写一篇最好懂的区块链课程。毕竟它更不是非常难的东西,核心定义很简单,几句话就能说了解。我期望读完本文,你不仅能够理解区块链,还会了解什么是挖矿、为何挖矿愈加难等问题。
需要说明的是,我并不是这方面的专家。虽然非常早就关注,但仔细地知道区块链,还是从今年初开始。文中的错误和不准确的地方,欢迎大伙指正。
1、区块链的本质
区块链是什么?一句话,它是一种特殊的分布式数据库。

第一,区块链的主要用途是储存信息。任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库。
第二,其他人都可以架设服务器,加入区块链互联网,成为一个节点。区块链的世界里面,没中心节点,每一个节点都是平等的,都保存着整个数据库。你可以向任何一个节点,写入/读取数据,由于所有节点最后都会同步,保证区块链一致。
2、区块链的最大特征
分布式数据库并不是新创造,市场上早有此类商品。但,区块链有一个革命性特征。
区块链没管理员,它是彻底无中心的。其他的数据库都有管理员,但区块链没。假如有人想对区块链添加审核,也达成不了,由于它的设计目的就是预防出现居于中心地位的管理当局。
正是由于没办法管理,区块链才能做到没办法被控制。不然一旦大公司大集团控制了管理权,他们就会控制整个平台,其他用户就都需要听命于他们了。
但,没了管理员,每人都可以往里面写入数据,如何才能保证数据是可信的呢?被坏人改了如何解决?请接着往下读,这就是区块链奇妙的地方。
3、区块
区块链由一个个区块组成。区块非常像数据库的记录,每次写入数据,就是创建一个区块。

每一个区块包括两个部分。
- 区块头:记录目前区块的元信息
- 区块体:实质数据
区块头包括了目前区块的多项元信息。
- 生成时间
- 实质数据的 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 的计算非常耗时,同时修改多个区块几乎不可能发生,除非有人学会了全网51%以上的计算能力。
正是通过这种联动机制,区块链保证了自己的靠谱性,数据一旦写入,就没办法被篡改。这就像历史一样,发生了就是发生了,从此再没办法改变。

每一个区块都连着上一个区块,这也是”区块链”这个名字的起源。
5、采矿
因为需要保证节点之间的同步,所以新区块的添加速度不可以太快。试想一下,你刚刚同步了一个区块,筹备基于它生成下一个区块,但这个时候别的节点又有新区块生成,你不能不舍弃做了一半的计算,第三去同步。由于每一个区块的后面,只能跟着一个区块,你永远只能在最新区块的后面,生成下一个区块。所以,你别无选择,一听到信号,就需要立刻同步。
所以,区块链的创造者中本聪故意让添加新区块,变得非常困难。他的设计是,平均每10分钟,全网才能生成一个新区块,一小时也就六个。
这种产出速度不是通过命令达成的,而是故意设置了大量的计算。也就是说,只有通过极其很多的计算,才能得到目前区块的有效 Hash,从而把新区块添加到区块链。因为计算量太大,所以快不起来。
这个过程就叫做采矿,由于计算有效 Hash 的困难程度,好比在全世界的沙子里面,找到一粒符合条件的沙子。计算 Hash 的机器就叫做矿机,操作矿机的人就叫做矿工。
6、困难程度系数
读到这里,你或许会有一个疑问,大家都说采矿非常难,可是采矿不就是用计算机算出一个 Hash 吗,这正是计算机的强项啊,如何会变得非常难,迟迟算不出来呢?
原来不是任意一个 Hash 都可以,只有满足条件的 Hash 才会被区块链同意。这个条件特别苛刻,致使绝大多数 Hash 都不满足需要,需要重算。
原来,区块头包括一个困难程度系数,这个值决定了计算 Hash 的困难程度。举例来讲,第100000个区块的困难程度系数是 14484.16236122。

区块链协议规定,用一个常量除以困难程度系数,可以得到目的值。显然,困难程度系数越大,目的值就越小。

Hash 的有效性跟目的值密切有关,只有小于目的值的 Hash 才是有效的,不然 Hash 无效,需要重算。因为目的值很小,Hash 小于该值的机会极其渺茫,可能计算10亿次,才算中一次。这就是采矿这样之慢的根本缘由。
区块头里面还有一个 Nonce 值,记录了 Hash 重算的次数。第 100000 个区块的 Nonce 值是274148111,即计算了 2.74 亿次,才得到了一个有效的 Hash,该区块才能加入区块链。
7、困难程度系数的动态调节
即使采矿非常难,但也没法保证,正好十分钟产出一个区块,有时一分钟即使出来了,有时几个小时可能也没结果。总体来看,伴随硬件设施的提高,与矿机的数目增长,计算速度必然会愈加快。
为了将产出速率恒定在十分钟,中本聪还设计了困难程度系数的动态调节机制。他规定,困难程度系数每两周调整一次。假如这两周里面,区块的平均生成速度是9分钟,就意味着比法定速度快了10%,因此困难程度系数就要调高10%;假如平均生成速度是11分钟,就意味着比法定速度慢了10%,因此困难程度系数就要调低10%。
困难程度系数越调越高,致使了采矿愈加难。
8、区块链的分叉
即便区块链是靠谱的,目前还有一个问题没解决:假如两个人同时向区块链写入数据,也就是说,同时有两个区块加入,由于它们都连着前一个区块,就形成了分叉。这个时候应该采纳哪一个区块呢?

目前的规则是,新节点一直使用最长的那条区块链。假如区块链有分叉,将看什么分支在分叉点后面,先达到6个新区块。根据10分钟一个区块计算,一小时就能确认。

因为新区块的生成速度由计算能力决定,所以这条规则就是说,拥有大部分计算能力的那条分支,就是正宗的比特链。
9、总结
区块链作为无人管理的分布式数据库,从2009年开始已经运行了8年,没出现大的问题。这证明它是可行的。
但,为了保证数据的靠谱性,区块链也有我们的代价。一是效率,数据写入区块链,最少要等待十分钟,所有节点都同步数据,则需要更多的时间;二是能耗,区块的生成需要矿工进行无数无意义的计算,这是很耗费能源的。
因此,区块链的适用场景,其实很有限。
- 没有所有成员都信赖的管理当局
- 写入的数据不需要实时用
- 挖矿的收益可以弥补本身的本钱
假如没办法满足上述的条件,那样传统的数据库是更好的解决方法。

现在,区块链最大的应用场景,就是以BTC为代表的数字货币。
下一篇:没有了
免责声明:
1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。
2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。









