之前提到了区块链中有很多概念,接下来将逐一介绍这些概念,但不一定会按顺序。本篇主要介绍哈希和区块的概念。
哈希(Hash)
哈希值是通过哈希函数(Hash Function)生成的,哈希函数(Hash Function)可以将一组数据映射到唯一的哈希值。这个生成的哈希值就是这组数据的唯一标识符。
哈希函数的特点:
相同的数据总是会生成相同的哈希值,即使只修改一比特(bit)的原始数据,生成的哈希值也会完全不同。
哈希值通常以十六进制表示。
因为以上特点,哈希值可以作为一段数据的数字指纹,也是区块链的基础。
SHA256哈希函数
SHA256是哈希函数中的一种。其中SHA代表安全哈希算法(Secure Hash Algorithm),256代表算法输出的是256位数,以二进制来算的256位数换成十六进制,就是64位数,形如e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
。
比特币使用的哈希算法就是SHA256,用SHA256算法为区块链上的每个区块创建一个唯一的哈希值,作为每个区块的标识。
区块(Block)
概念
区块是区块链的基本组成部分。区块是一个包含一系列交易信息容器,区块链就是由一个个区块组成的。
区块的组成部分
- Block Header(区块头)
区块头中包括以下几个部分:- 前一个区块的Hash值(Previous Block Hash)
- 时间戳:区块创建的时间
- Merkle Root,这个有点复杂,简单来讲就是将区块中的所有交易数据两两配对,对每个配对后的数据进行哈希,然后再次循环,知道只剩下一个hash值,这个hash值就是此区块中所有交易的的信息的数字签名。(之后展开来讲)
- Nonce:一个和挖矿相关的随机数,起名nonce是因为这个值只能使用一次。我们都听过,比特币会根据全网的算力来调整挖矿的难度,挖矿的过程实际上就是在寻找一个随机数Nonce,使 此区块的哈希值 + Nonce = 某一个符合要求的哈希值,挖矿的演示过程可以参照此网页,满足开头四位为0,就是此次挖矿的要求,数据变化时,Nonce就会随之变化,这个Nonce的值就是对于给定数据的一个解。
- 目标难度(目标难度):(这里课程里并没有介绍,之后回来填坑吧,目前不知道究竟是一个hash值还是一个代表计算次数的浮点数)
- Block Body:交易信息
- Block Size:区块的大小
- Hash Value:当前区块的哈希值,这个值并不是直接存储在区块中,而是根据GetHash计算而得。(据说这个也没有存在区块中,回来填坑)
区块的图示