比特币是基于区块链的,这一点大家都知道。但是这个区块链是什么呢?更准确地说,区块链的各个组成部分是什么呢?
区块链是一个数据块。每个块可以看作是分类帐中的一个。单个块由几个组件组成。大致可以将它们区分为块的头部(块头)和块的身体(块体)。
块头
块头为六个部分:
· 软件的版本号
· 前一个块的哈希值
· Merkle树的根哈希值
· 世界时自1970-01-01以来以秒为单位的时间
· 当前困难的目标
· 特定场合
软件的版本号
在大多数情况下,软件版本号并不重要。但是,具有特定版本号的挖掘程序可以指示它支持哪个协议决。
前一个块的哈希值
前一个块的哈希值,也可以说是块的链。因为前一个块的哈希值包含在新块的哈希值中,所以区块链的块都是在彼此的基础上构建的。如果没有这个组件,每个块之间就不会有连接。
Merkle树的根哈希值
块中包含的所有事务都可以聚合到哈希值中。这就是Merkle树的根哈希。
自1970-01-01 T00: 00 UTC以来的秒数
块本身中的时间戳。时间自1970年1月1日起以秒为单位给出。
当前困难的目标
指示新哈希值必须小到什么程度才能声明有效性。换句话说,每个哈希值都有一个位大小。位的目标越低,就越难找到匹配的哈希值。
特定场合
特定场合是由工作量证明增加的变量。通过这种方式,挖掘器猜测一个有效的哈希值,一个比目标值小的哈希值。
这六个组件构成了块头。区头在比特币中扮演着重要角色,因为它将所有区块连接在一起。你可以把它想象成卡车的驾驶舱。这些是卡车通过网络控制时所带的重要文件。
块体
块体可以想象成卡车的装载空间。它包含与块确认的所有事务。
当挖掘程序构造一个块时,它会验证事务。也就是说,他主要检查寄件人是否有足够的钱。他可以很容易地从区块链中读取这些信息。如果发件人想发送10个比特币,他会查看过去的数据块,看看发送者是否已经收到10个比特币。
块中的事务不仅在列表中,而且在所谓的Merkle树中。
什么是Merkle树?
Merkle树的名字来源于数学家Ralph Merkle。许多信息可以用一个哈希值表示。为此,首先会对数据本身进行分发哈希值。然后哈希直再次被分发并合并。最后,Merkle树被合并到一个哈希值中。最后一个哈希值也称为根哈希值,即树的根。它在一个相对较短的字符串中表示其“叶”(单个事务)和“分支”(叶的哈希值)的所有信息。
只要知道所有的分支和叶节点,创建根哈希就非常简单快捷。就像哈希值函数一样:它在一个方向上工作得清晰而迅速,在另一个方向上是不可能分解的。如果根哈希值已知,但事务未知,则不可能猜测事务。
因此,仅使用根哈希值是不够的,必须保存块的其余部分。因此,通过再次哈希值块中包含的信息,挖掘器可以在任何时候验证根哈希值。只要哈希值函数相同,对于给定的数据输入,矿工们总是会得到相同的哈希。这非常方便,因为它们只能检查它们是否与哈希值处于同一级别即可。
挖掘:搜索特殊哈希值
在这种背景下,更容易理解工作量证明的挖掘。在挖掘时,块的块头会被增量地更改以获得一个特殊的哈希值。头由五个常量和一个变量组成。常量是软件的版本号、前一个块的哈希值、Merkle树的根哈希值、时间戳和搜索哈希值的目标大小(以字节为单位)
变量是nonce。nonce是由1提出的数字。然后挖掘器对数据进行分发哈希值,并检查数据是否产生了低于搜索目标值的哈希值。如果哈希值大于目标值,挖掘器将重复该过程;因此,它将nonce增加1,哈希值会再次检查。它重复这个过程,直到找到低于目标的哈希值,或者从另一个低于目标值的网络工作者那里获得另一个块。然后获取这个新块并将其用作下一个块的基(使用新哈希值作为“上一个块的哈希值”)。
挖掘是一个超重复的过程,其目标是找到一个特殊的哈希值。一旦找到哈希值,游戏就重新开始。找到特殊哈希值的概率取决于难度。比特币平均每十分钟就会发现一个新的区块。这个难度一直在变化,所以这个平均值保持不变。
这个过程的特殊之处在于,只有通过猜测才能找到特殊的哈希值。这个速率会消耗计算能力和能量。查看特殊哈希值就足以看出它是特殊的,因为它以0开头。
下面是一个来自比特币区块链的哈希值例子:
000000000000000000094 bfa4edb1245c347e42452e4418e9fe5a1d24e335b16
哈希值表:区块链的matryoshka
块可以简化为matryoshka想象的那样。最小的玩偶是未标价的交易。下一个信封是这个事务的哈希值形式。此后,两个哈希值事务被哈希在一起。所以哈希值会被合并得越来越多。最后,只剩下一个哈希值,即根哈希值或最大的matryoshka。