Front-end

区块链学习笔记2-哈希与区块

之前提到了区块链中有很多概念,接下来将逐一介绍这些概念,但不一定会按顺序。本篇主要介绍哈希和区块的概念。

哈希(Hash)

哈希值是通过哈希函数(Hash Function)生成的,哈希函数(Hash Function)可以将一组数据映射到唯一的哈希值。这个生成的哈希值就是这组数据的唯一标识符。

哈希函数的特点:

相同的数据总是会生成相同的哈希值,即使只修改一比特(bit)的原始数据,生成的哈希值也会完全不同。
哈希值通常以十六进制表示。
因为以上特点,哈希值可以作为一段数据的数字指纹,也是区块链的基础。

SHA256哈希函数

SHA256是哈希函数中的一种。其中SHA代表安全哈希算法(Secure Hash Algorithm),256代表算法输出的是256位数,以二进制来算的256位数换成十六进制,就是64位数,形如e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
比特币使用的哈希算法就是SHA256,用SHA256算法为区块链上的每个区块创建一个唯一的哈希值,作为每个区块的标识。

区块(Block)

概念

区块是区块链的基本组成部分。区块是一个包含一系列交易信息容器,区块链就是由一个个区块组成的。

区块的组成部分

  1. Block Header(区块头)
    区块头中包括以下几个部分:
    • 前一个区块的Hash值(Previous Block Hash)
    • 时间戳:区块创建的时间
    • Merkle Root,这个有点复杂,简单来讲就是将区块中的所有交易数据两两配对,对每个配对后的数据进行哈希,然后再次循环,知道只剩下一个hash值,这个hash值就是此区块中所有交易的的信息的数字签名。(之后展开来讲)
    • Nonce:一个和挖矿相关的随机数,起名nonce是因为这个值只能使用一次。我们都听过,比特币会根据全网的算力来调整挖矿的难度,挖矿的过程实际上就是在寻找一个随机数Nonce,使 此区块的哈希值 + Nonce = 某一个符合要求的哈希值,挖矿的演示过程可以参照此网页,满足开头四位为0,就是此次挖矿的要求,数据变化时,Nonce就会随之变化,这个Nonce的值就是对于给定数据的一个解。
      markdown/20180920141404.png
    • 目标难度(目标难度):(这里课程里并没有介绍,之后回来填坑吧,目前不知道究竟是一个hash值还是一个代表计算次数的浮点数)
  2. Block Body:交易信息
  3. Block Size:区块的大小
  4. Hash Value:当前区块的哈希值,这个值并不是直接存储在区块中,而是根据GetHash计算而得。(据说这个也没有存在区块中,回来填坑)

区块的图示

markdown/20180920151441.png

参考资料

  1. 哈希算法的演示
    不同的数据生成完全不同的哈希值;
    已有数据只修改很小一部分,输出结果就完全不同
  2. wiki
  3. 挖矿的演示过程