作为一个前端开发人员为什么要研究区块链呢?因为它火,技术新,领域足够细分,赛道刚刚开辟。并且以太坊专门有一个团队负责研发JavaScript API 库,如Web3.js和Ethers.js。

区块链的本质是分布式数据库,它的数据结构类似于单向链表,每个区块包括2部分,区块头区块主体。这又有点像http请求,有请求头请求体

区块主体主要用于存储数据;
区块头存储的内容可以分为4个部分,分别是前一区块的根散列(前一区块Merkle树根节点存储的hash值)、Merkle树根散列(当前区块Merkle树根节点存储的hash值)、时间戳其他

区块主体没什么好说的,下面详细介绍一下区块头中的部分。

1、根散列是什么意思?

散列就是Hash(哈希),根指的是Merkle树的根节点,根散列就是指Merkle树根节点存的哈希值

2、哈希是什么意思?

将任意数据经过哈希运算后会得到一个固定长度的字符串,这个字符串就是该数据的哈希值,可以用来当作该数据的键,具有唯一性。最常用的哈希算法就是MD5加密。哈希表长这样

3、Merkle树是什么?

Merkle树也叫哈希树,它是一颗存储哈希值的完全树,大部分时候是完全二叉树,也可能多叉。其实哈希表就是一颗行高为2的多叉Merkle树。

(1)Merkle树是如何生成的

Merkle树每个节点存的都是哈希值,它是从叶子节点开始从下到上生成整棵树的。
叶子节点的哈希值像哈希表中的一样,存的是真实数据经过哈希运算后得到的哈希值。
向上运算的时候,两两哈希值相加,再做一次哈希运算,得到父级的哈希值,这样逐层运算最终得到根节点的哈希值,生成整棵树。

(2)Merkle树的常见应用

Merkle树主要被用来做数据校验,它最大的作用是保障安全。最常用的地方就是迅雷通过BT种子下载文件。这种下载方式属于分布式下载。首先将文件切割成n份,然后每一份经过哈希运算得到哈希值,这些哈希值作为叶子节点来生成一颗Merkle树,这颗树就存在BT种子里。等文件下载完成后,将下载的文件再做一次哈希运算,将此次运算后得到的哈希值与BT种子里的哈希值对比来进行校验。

(3)和哈希表相比,Merkle树的优势

和哈希表对比,Merkle树的优势在于它可以以树杈为单位进行局部数据的整体校验,而哈希表要么单独校验一个哈希值对应的数据,要么校验整个哈希表的数据。没有树结构这么方便。

4、请求头中的Merkle树根散列是怎么得来的呢?

首先将请求主体中的数据进行拆分然后逐个进行哈希运算,得到的哈希值作为叶子节点并逐层向上运算直到得到根节点,这个根节点存的哈希值就是Merkle树根散列了。

5、区块链为什么使用Merkle树根散列来链接区块?

上面讲Merkle树的时候说到了,Merkle树的最大作用就是可以灵活的进行数据校验。原理也说了,就是对比Hash值,一旦数据有异常那么新产生的哈希值与Merkle树根散列绝对不一致。

说到这你应该会想到区块链的一个特性,不可篡改。没错,不可篡改就是由Merkle树来实现的。