0x01:分布式数据库

利用高速网络将物理上分散的多个数据存储单元连接起来组成一个逻辑上统一的数据库。而那些分散的数据存储单元被称为节点,分布式数据库的基本思想是将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上,以获得更大的存储容量和更高的并发访问量。

0x02:什么是区块链

区块链是一种特殊的分布式数据库
为什么说是特殊的分布式数据库呢?因为通常的分布式数据库都至少有一个中心节点,而在区块链中,各个节点的地位是平等的,也就是说,区块链没有管理员。而且人人都可以向区块链中写入数据。
那么数据库的作用是什么呢?当然是存储数据,区块链也不例外。

0x03:区块

区块链由一个个区块组成,是一条通过添加新的区块不断增长的链

每个区块包含两部分:(感觉结构有点像链表)

  • 区块头:记录当前的特征值
  • 区块体:详细的数据

区块头里面记录了

1
2
3
上一个区块的哈希值
当前区块的哈希(当前区块的哈希是针对区块头计算的)
Nonce值

因为当前区块的区块头里面记录由上一个区块的哈希值,而当前区块的哈希值又是由区块头计算得出,因此如果上一个区块的哈希改变,那么我们的哈希头中记录的上一个区块的哈希值就会改变,从而又会引起我们当前区块哈希值的改变,如果当前区块后面还有区块,那么就会引起后面的区块的哈希都改变。因此数据一旦写入就不能更改了,如果要更改的话,就需要修改该区块后面所有区块的哈希值。

区块体里面记录了

1
2


哈希的计算

1
HASH = SHA256(数据)

0x04:新区块的产生

区块链的发明者中本聪,设计每十分钟全网才能产生一个区块,也就是一个小时产生6个区块
那么为什么要这样设计呢?其实这样做的目的是为了保证节点之间的同步,所以新区块的添加速度不能太快。如果太快,则可能出现下面这种情况,因为每个区块后面只能跟着一个区块,所以可能会产生A计算下一个区块算了一半,而B已经算成功了,因此A不得不丢算了一半的区块。
当然这种十分钟产生一个新的区块不是通过命令实现的,而是通过海量计算来达成的。而海量计算是通过难度系数来实现的,也就是必须算出达到要求的哈希值才行,具体就是要计算出小于目标值的哈希。

0x05:难度系数

随着硬件设备的提升,以及矿机数量的增长,计算速度一定会越来越快。那么为了保证十分钟只能产生一个区块,在区块链中设置了一个难度系数。
难度系数设置在区块头中,这个值决定了计算哈希的难度。具体是用一个常数来除以难度系数来得到一个目标值,当难度系数越大,目标值就越小,那么就越难以计算出满足要求的哈希。那么就会算非常多次才能计算出符合要求的哈希值,而难度系数的调整(每两周一次)就是为了保持每10分钟只能计算出一个符合要求的哈希。

0x06:Nonce值

Nonce是存在于区块头中的一个随机值,改值用于矿工计算哈希。因为区块头中其它项的值都是固定的,所以只能通过增加一个随机项来改变区块的哈希,然后当哈希符合目标值那么一个新的区块就产生了。

0x07:区块链的分叉

如果有两个人同时计算出了目标值,那么我们应该将哪一个作为新的区块呢?为了解决这个问题,设计了一个规则,这个规则就是这两个区块都继续往下产生,先达到6个新区块的那条链就是新的区块,另外一条就作废。由于新区块的生成速度是有计算能力决定的,所以说这条规则就是拥有大多数计算能力的那条分支就是正宗的区块链。

最后更新: 2018年07月28日 12:31

原始链接: http://drac0nids.top/2018/07/02/区块链入门/

× 请我吃糖~
打赏二维码