主页 > imtoken转账手续费 > 通俗易懂,揭示比特币区块的内部结构

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

imtoken转账手续费 2023-01-18 11:03:46

通过前面的学习,我们基本上对区块链网络中各个节点对外协作有了一个宏观的认识,接下来我们就要从更微观的角度开始学习区块链了。

比特币之父能不能随意制造比特币_比特币第一个客户端_比特币期货对比特币影响

你有没有想过区块链中每个区块里面都有什么? 如此复杂的数据将如何在全网存储?

本期带你一探究竟!

一、区块链整体架构

区块链之所以被称为区块链,是因为它实际上是由包含交易信息的区块前后连接而成的链式结构。 每个区块都是链式结构中的一个环节。 .

为什么块可以来回连接?

因为每个区块都通过一个值(父哈希值,下节会解释)指向前一个区块,依此类推,将区块连接起来形成一条链,可以追溯到创世区块。

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

比特币之父能不能随意制造比特币_比特币期货对比特币影响_比特币第一个客户端

比特币之父能不能随意制造比特币_比特币期货对比特币影响_比特币第一个客户端

2. block的整体结构

每个区块主要由区块头和区块体两部分组成。 区块头主要用于存储区块的一些相关属性,区块体用于存储真实的交易数据记录。

一个块前后连接父块和子块,如下图所示:

比特币第一个客户端_比特币之父能不能随意制造比特币_比特币期货对比特币影响

3.块体

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

下面是一个块体的结构图:

比特币之父能不能随意制造比特币_比特币第一个客户端_比特币期货对比特币影响

比特币第一个客户端_比特币之父能不能随意制造比特币_比特币期货对比特币影响

区块体包括所有在区块创建过程中产生的、在当前区块中已经验证过的交易记录。 这些记录通过 Merkle 树、根和区块头中的记录的哈希过程生成一个唯一的 Merkle。

什么是默克尔根?

首先了解默克尔(merkle)树,默克尔树是一种哈希二叉树,是一种用于快速归纳和验证大规模数据完整性的数据结构。 这棵二叉树包含加密哈希值,术语“树”在计算机科学中经常用于描述具有分支的数据结构。

在比特币网络中,默克尔树用于汇总一个区块中的所有交易,同时生成整个交易集的数字指纹,为验证区块中是否存在某笔交易提供了一种高效的方式。

生成一棵完整的 Merkle 树需要递归地对哈希节点对进行哈希处理,并将新生成的哈希节点插入到 Merkle 树中,直到只剩下一个哈希节点,这就是 Merkle 树的根。

用人的话来说,默克尔树可以理解为一棵倒过来的树。 这棵树的每个树枝只能分成两个树枝,最终每个最小的树枝上都会挂上两片叶子。

这里的每一片叶子都是一条交易记录比特币第一个客户端,每一个树枝的分叉点就是一个哈希值,每个哈希值都是两个树枝的分叉点或者一个叶子值的哈希值计算出来的。

比特币期货对比特币影响_比特币第一个客户端_比特币之父能不能随意制造比特币

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

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

了解了Merkle树之后,相信大家会对上面的区块结构图有更深的理解。

4.区块头

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

比特币之父能不能随意制造比特币_比特币期货对比特币影响_比特币第一个客户端

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

对区块中区块头的数据进行哈希处理,会产生一个哈希值。 区块头中任何数据的变化都会引起哈希值的变化,因此这个哈希值可以作为区块的唯一标志。

比特币期货对比特币影响_比特币第一个客户端_比特币之父能不能随意制造比特币

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

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

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

父哈希概念的引入,不仅实现了区块与区块的连接,也保证了区块链不可篡改。

由于区块头包含父区块的哈希值,因此当前区块的哈希值也受此值影响。 如果父块中的数据发生变化,其哈希值也必须发生变化,这样子块就无法再通过原来的父块哈希值与前一个块相连。

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

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

5、block为什么要设计成这种结构?

比特币期货对比特币影响_比特币之父能不能随意制造比特币_比特币第一个客户端

block的内部结构基本分析完了,但是大家有没有想过用这种结构设计block的好处呢?

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

区块链是一个分布式网络,所以数据需要存储在各个节点,但是比特币网络完整的数据加起来可能有几十上百G,这不是一个普通终端可以承受的。 Coin 客户端设计用于在空间和功率受限的设备上运行。

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

这时候就可以看出块结构的巧妙之处了。 比特币网络中的许多节点主要用于验证交易。 他们只需要下载区块头,不需要下载每个区块包含的交易信息。 交易验证将完成。

这样一条不包含交易信息的区块链,体积只有完整区块链的千分之几,大大节省了终端使用的空间。

正是因为区块的内部结构,才可以实现一个终端,一笔交易只需要通过区块头的数据就可以得到验证。 这是简单付款验证 (SPV)。 这样的节点称为 SPV 节点。 具体实现原理 下期会讲解。

6.总结

块体与块头的紧密联系,块头与父子块的前后配合,各节点的环环相扣,实现了一条坚不可摧的链。 你对比特币研究得越深入,你就越能体会到它的强大。 在这里,各种巧妙的构思令人叹为观止。

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