主页 > imtoken新版本 > 通俗易懂,揭示比特币区块的内部结构

通俗易懂,揭示比特币区块的内部结构

imtoken新版本 2023-07-28 05:12:49

通过前面的研究,我们对区块链网络中各个节点的外部合作基本有了一个宏观的了解,接下来我们将开始从更微观的角度来学习区块链。

你有没有想过区块链中每个区块的内部是什么样子的?它将如何在全网存储如此复杂的数据?

本期带你一探究竟!

一、区块链整体结构

区块链之所以被称为区块链,是因为它实际上是一堆包含交易信息的区块。 ,而每一个block都是通过前后连接的链结构的链结构的一部分。

为什么积木可以来回连接?

因为每个区块通过一个值(父哈希值,下一节会讲到)指向上一个区块,以此类推,区块与区块形成一条链,可以一路追溯回到创世区块。

这又是一个大规模协作的例子,每个区块只需要执行自己的简单规则就可以形成一个复杂的系统。

二、一个区块的整体结构

每个区块主要包含两部分,区块头和区块体。区块头主要用来存放区块的一些相关属性,区块体用来存放真实的交易数据记录。

一个block前后连接父block和子block,如下图:

三、块体

让我们从块体开始,看看它是如何存储交易数据的。

以下是块体的结构图:

区块体包括经过验证的、区块创建过程中产生的当前区块的所有交易记录。这些记录经过默克尔树的哈希处理,生成一个唯一的默克尔根,记录在区块头中。

什么是默克尔根?

首先看一下默克尔树,一种哈希二叉树,一种用于快速归纳和检查大规模数据完整性的数据结构。这种二叉树包含加密哈希值,“树”一词在计算中经常用于描述分支数据结构。

在比特币网络中,默克尔树用于汇总一个区块中的所有交易,生成整个交易集的数字指纹,并提供一种检查区块是否存在的方法。有效的交易方式。

生成完整的 Merkle 树需要递归地对哈希节点对进行哈希运算,并将新生成的哈希节点插入到 Merkle 树中,直到只剩下一个哈希节点,即 Merkle 树的根节点。

用人类的话来说,默克尔树可以理解为倒立的树。这棵树的每个分支只能分成两个分支。最后第一枚比特币区块记录的是什么内容,每根最小的树枝上都会挂两片叶子。 .

这里的每个叶子都是一个交易记录,每个树分支的分叉点是一个hash值,每个hash值是按照树的分支划分的两个分支的分支。计算分叉或叶子的哈希值。

将这些分叉节点的哈希值聚合到上层的分叉点,然后进行哈希计算,生成哈希值。以此类推,最后收敛到树的根上,这个根计算出来的哈希值就是根哈希值。通过这种结构,可以快速定位其中一笔交易。

默克尔树的特点是底层数据的任何变化都会传递给它的父节点,一直传递到树的根节点。

了解了默克尔树,相信你会对上面的区块结构图有更深的理解。

四、区块头

区块头主要由三组数据组成,第一组是父区块的哈希值,父哈希值用于将该区块连接到其上一个区块;第二组数据与矿工的挖矿竞争有关,分别是难度、时间戳和Nonce(随机数);第三组是我们刚才提到的块体计算出来的根哈希值就是默克尔树根。

这里理解一个概念很重要,什么是父哈希值?

对区块中区块头的数据进行哈希运算会产生一个哈希值,区块头的任何数据变化都会导致哈希值发生变化,所以这个哈希值可以作为这个区块的唯一标识。

通过这个哈希值,可以在区块链中找到对应的区块,这个哈希值就是后面连接的新区块的父哈希值。

这里要注意一点,这个区块不会存储自己的哈希值,只会存储其父区块的哈希值,而自己的哈希值会存储在子区块中,作为子区块的父哈希.

因为每个区块的区块头都包含它的父哈希值,而父哈希值只有一个(因为区块链只有一条最长的链),每个区块都可以一直追溯到创世区块(第一个块)通过其父哈希。

引入父哈希的概念,不仅可以将块与块连接起来,还可以保证区块链的不变性。

由于区块头包含父区块的哈希值,当前区块的哈希值也受该值影响。如果父区块中的数据发生变化,其哈希值也必然发生变化,这样子区块就不能再通过原来的父哈希值连接到前一个区块。

所以,如果你想改变一个块的数据,你需要重新计算它之后的所有块。正是因为这样的重新计算需要大量的计算,几乎不可能实现,从而进一步保证了区块链网络的安全性。

区块头中的第二组数据,难度、时间戳和Nonce,后面我讲解挖矿的时候会详细介绍。这里我们只需要知道区块头包含这些东西,便于早期建立整体概念。

五、块为什么设计成这种结构

块的内部结构基本分析完了,但是你有没有想过这样的块设计对结构有什么好处?

首先,我们需要知道区块头是80字节,平均交易至少250字节,平均区块至少包含500多笔交易。因此,包含所有交易的完整块体比块头大 1000 倍。

区块链是一个分布式网络,因此需要在每个节点中存储数据,但比特币网络的完整数据可能加起来有几十个或几百个G,这不是一个普通的终端。许多比特币客户端价格实惠,旨在在空间和功率受限的设备上运行。

如:智能手机、平板电脑、嵌入式系统等,它们没有办法存储比特币网络的所有数据,我们该怎么办?

此时,可以看到块状结构的光彩。比特币网络中的许多节点主要用于验证交易。他们只需要下载区块头,不需要区块中的交易信息就可以完成交易验证。

这样一条没有交易信息的区块链只有完整区块链的千分之一大小,大大节省了终端使用的空间。

正是因为区块的内部结构,才可以实现一个终端,一个交易只能通过区块头的数据来验证。这是简单付款验证 (SPV)。称为SPV节点第一枚比特币区块记录的是什么内容,具体实现原理将在下一期讲解。

六、总结

块体与块头的紧密联系,块头与父子块的配合,各节点的互锁,实现了一条坚不可摧的链,对比特币的研究越深入,越强大可以实现,各种奇思妙想让人惊叹。

我们不研究代码,只是从整体设计思路上观察比特币区块的内部结构,希望这篇文章能让你理解。