区块链入门笔记

1.本质

特殊的分布式数据库,主要用于储存信息,任何信息都可以在区块链中进行读写。

2.特点

区块链没有管理员,实现了无中心化,它的设计目标就是防止出现居于中心地位的管理当局。

3.区块

区块链由区块(Block)组成
区块像是数据库的记录,每次写入一个数据,创建一个区块

区块由两个部分组成
区块

  • 区块头(Head):记录当前区块的元信息
  • 区块体(Body):实际数据

区块头包含了当前区块的多项元信息

  • 生成时间
  • 实际数据(区块体)的 Hash,不是整个区块
  • 上一个区块的 Hash

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

因此有两个推论

  • 每个区块的 Hash 都是不一样的,可以通过 Hash 标示区块
  • 如果区块的内容变了,它的 Hash 一定会改变

4.Hash 的不可修改性

区块 与 Hash 一一对应,每个区块的 Hash 都是针对“区块头(Head)”计算的

计算公式:Hash = SHA256(区块头)

SHA256 是区块链的 Hash 算法

如果一个区块被修改,则该区块的 Hash 改变,为了链接后面的区块,后面的区块也必须改变,上一个也得变。
而 Hash 的计算又非常耗时,所以除非一个人掌握了全网 51% 的计算能力,否则无法同时修改多个区块。

这种联动机制使数据一旦被写入,就无法被修改

5.采矿

由于必须保证节点之间的同步,新区块的添加速度不能太快,每个区块后只能跟着一个区块,采矿的人永远只能跟在最新的区块之后。一听到信号,必须同步

区块链的发明者(假名:中本聪)故意让添加新区块非常困难。他的设计规则:一个新区块 / 10min,也就是 1 小时 6 个。

只有经过大量的运算,才能计算出当前区块的有效 Hash,所以快不起来。

这个过程就叫做采矿(mining)

6.难度系数

只有满足条件的 Hash 才会被区块链接受。

区块头包含一个难度系数(difficulty)

目标值(target)= targetmax / difficulty

image.png

Hash 的有效性跟目标值密切相关,只有小于目标值的 Hash 才是有效的,否则 Hash 无效,必须重算。由于目标值非常小,Hash 小于该值的机会极其渺茫,可能计算10亿次,才算中一次。这就是采矿如此之慢的根本原因。

区块头里面还有一个 Nonce 值,记录了 Hash 重算的次数。第 100000 个区块的 Nonce 值是274148111,即计算了 2.74 亿次,才得到了一个有效的 Hash,该区块才能加入区块链。

7.难度系数的动态调节

为了保证 一个区块 / 10min,中本聪 设计了难度系数的动态调节机制

每两周调整一次难度系数

难度系数越高 -> 目标值越小 -> 采矿越难

8.区块链的分叉

当两个人同时向区块链写入数据,新节点总是采用最长的那条区块链(哪个分支后面先打到 6 个区块,就采用哪个分叉)。

9.总结

区块链数据可靠,但是耗时耗能。

使用场景有限

  • 不存在所有成员都信任的管理当局
  • 写入的数据不要去实时使用
  • 挖矿的收益 > 本身成本

欢迎关注我的博客简书CSDNGitHub