区块链数据结构图示教程

当前位置:首页 > 币圈百科 > 区块链数据结构图示教程

区块链数据结构图示教程

2022-11-14币圈百科371

自从中央电视台最近呼吁发展独立的区块链技术后,区块链领域再次陷入动荡。程是一个学习能力很强的群体,学习新技术是日常工作和生活的一部分。作为一个从事区块链相关产品创业的从业者,今天我们就从数据结构的角度来看区块链科技。个人水平有限,如有错误,欢迎留言。

区块链

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链,比特币的重要概念,本质上是一个去中心化的数据库。同时,作为比特币的底层技术,它是由密码学产生的一系列数据块。每个数据块包含一批比特币在线交易的信息,用于验证其信息的有效性(防伪)并生成下一个块。

乍一看,这个定义比较学术。对于那些刚到区块链的人来说,仍然很难理解区块链的真实面貌。但是我们可以看到几个关键词是分布式的,点对点,加密,共识等等。

具有以下特点:

区块链中的数据分布存储在各个节点中;

数据传输通过点对点进行,没有中心服务器;

通过加密和共识算法保证数据的完整性和安全性;

区块链是一种分布式、点对点的数据存储技术,那么这个数据库到底是什么样子的呢?我觉得从字面上看,区块链可以从块和链两个词来理解:逻辑上是一个链状结构,每个节点都是一个信息块,交易的蓑衣网小编2022 信息都存储在这个信息块中。

上图显示的是块高为4的区块链

。如你所见,这种结构与链表非常相似,除了最新的块通过包含前一个块的哈希值来反映这种链关系。

接下来我们来看看这些块的具体结构,以及如何保证块数据的安全性。

块结构Block

块数据结构主要包括块头和块体。块头包含父块的哈希值、merkle根、难度目标和nonce值。块体包含事务哈希列表。

image.png

块头

块的哈希值由块头中的信息计算得出。这个哈希值就是块的标识符,通过这个哈希值可以找到对应的块(当然也可以通过块高查询,但是当块分支时,块高可能对应多个块)。我们知道当前块包含了前一个块的哈希值,但是我们自己的块的哈希值并没有存储在当前的块结构中,而是由节点在收到块信息后进行计算,然后存储在一个独立的索引数据库中,这样可以方便检索。

Merkle根

要了解Merkle根,首先要了解Merkle树。Merkle树是一种散列二叉树。

因为一个块包含了大量的事务信息(用哈希值表示),所以这些事务信息用Merkle树表示。

那么怎么得到这棵树呢?Merkle树是自下而上构建的。假设块中有四条事务信息A、B、C、D,分别对这四条事务信息进行哈希运算,形成Merkle树的叶节点。

#?TxA?a交易信息(其他类似)#?计算完交易A 蓑衣网小编2022#的HAsh值ha后?就当是Merkle树的叶节点哈?=?hash(TxA)HB?=?hash(TxB)HC?=?哈希(TxC)高清?=?Hash (txd)

节点A的Hash和节点B的hash形成了它们的父节点HAB

#的hash值?节点A和节点B形成其父节点HAB`HAB的哈希?=?哈希(哈HB)HCD?=?Hash(HC HB)

最后,HAB节点和HCD节点组成根节点HABCD的hash

HABCD=hash(HAB HCD)

HABCD为Merkle root,汇总所有交易信息。

通过上面的计算可以得到一棵Merkle树。

可能有人会问,这是二叉树。如果一个块的交易数是奇数,如何计算?然后复制上一个事务,形成一个完整的二叉树。

这个Merkle树有什么用?首先要知道一个块中有上百个事务,这些事务信息可以通过Merkle树总结成一个哈希值(即Merkle root)。此外,在块头中存储这个Merkle根所需的空间非常小,只需要32个字节。

另外,节点可以使用这个Merkle树快速验证某个事务是否在这个块中。这个过程是这样的:只要能在这棵树上找到一条从叶子节点到Merkle根的路径,就能证明这个块中存在这个事务。结合下图理解

。如果一个节点要验证HK是否包含在块中,只需要生成一条HL-HIJ-HMNOP-HABCDEFGH(图中蓝色节点)的路径,这样HK和HL就可以生成HKL,同理,HIJKL,HIJKLMNOP,HABCDEFGHIJKLMNOP(图中虚线节点)。假设一个块中有n个事务,那么这个树的高度是log(n) 1。这个验证路径对于数百个交易来说是非常高效的。由于区块链的数据是点对点传输的,这种验证可以使节点在传输完块头和验证路径信息后,对块中的事务进行验证,而不需要下载整个块的数据,从而达到快速验证的效果。

最后,由于一个块包含了前一个块的hash值,如果一个节点篡改了块中的事务信息,如果这个块要被其他节点识别(即共识),就需要维护这个链结构,即该块的后续块信息也需要被篡改(因为块内容发生变化,导致该块的hash值也发生变化)。如果篡改块要被大多数节点接受,理论上需要控制51%的节点。对于大多数有诚实节点的网络来说,这几乎是不可能的。并且一个块的后续块越多,它被篡改的可能性就越小。因为需要篡改的块越多,需要控制的节点计算能力就越大。

汇总Merkle树的功能

汇总交易信息,节省空间

快速验证交易

保证数据安全

Nonce

一个交易发送到区块链网络需要打包成块,然后把

如何打包块信息?

这需要找到nonce值。Nonce是一个随机数,但是这个随机数不是随便给的。节点需要不断寻找合适的随机数,使这个块的哈希值小于难度目标值。只要一个节点找到一个合适的nonce,它就完成一个挖掘操作,建立一个完整合法的块,然后广播给对等网络。只要其他节点认可(即同意)这个块,那么已经完成挖掘的节点将因挖掘而得到奖励。这也是为了鼓励节点参与采矿,维护区块链的安全。

参与挖掘的节点是矿工。

寻找随机数竞争的是节点计算机的计算能力。谁的计算能力高,谁就能快速找到nonce。

难度目标值是在区块链网设置的,目的是为了调整挖矿的难度,保证挖矿速度在10分钟左右。难度目标每2016块重新计算一次。

新目标难度值=旧目标难度值*(前2016块产生的实际耗时分钟数/20160分钟)

这个挖掘算法就是PoW( 蓑衣网小编2022 ProofofWork),即工作量证明。这个过程会消耗大量的CPU(GPU)和电量。所以还有很多其他的共识算法。

总结

区块链是一种分布式、点对点的数据存储技术。它的数据结构可以简单的分为块头和块体。

在块头中,用前一个块的hash来维护链结构,用merkle根来汇总块中的事务信息。同时,节点可以使用merkle树快速验证事务。Nonce和难度目标值是给矿工在打包方块时采矿的。一旦矿工找到一个合适的nonce,他就可以获得采矿奖励。块主要包含数百条交易信息。交易发送到区块链网络后,将被打包成块。

区块链数据结构图示教程 | 分享给朋友: