主页 > imtoken钱包下载地址 > BTC-数据结构(区块链技术与应用)

BTC-数据结构(区块链技术与应用)

imtoken钱包下载地址 2023-12-01 05:13:16

哈希指针和 Merkle 树

哈希指针

保存数据的地址和数据的哈希值,不仅可以通过哈希指针找到数据的位置,还可以检测数据是否被篡改

区块链

区块链是块的链表。

与普通链表的区别:

走到最后的区块是系统中产生的第一个区块(在区块链的末端,下图中最左边),称为创世块,最开始的区块是系统中最近产生的区块system Block(在区块链的头部,下图最右边)(最近的区块)。

每个区块都包含一个指向前一个区块的哈希指针btc区块链查,最后一个区块也有一个存储在系统中的哈希指针

取哈希是将整个区块的内容组合在一起取哈希,取前一个区块中所有内容的哈希(包括其中存储的指向下一个区块的哈希指针)。 (也就是取区块头的hash)

该属性意味着无论哪个区块发生变化,都会导致系统中存储的哈希值发生变化btc区块链查,即只要记录了哈希值,就可以检测到区块链中的任何一个位置都被篡改过。修改的。

因为修改某个区块的内容会导致前一个区块中保存的哈希值(与其新生成的区块相比)不一致,所以哈希值也必须改变,然后再向前改变

有了这个属性,某个用户就不需要保存系统中所有的区块,只保存最近的一些区块。 如果你想使用之前生成的块,你可以问别人。

默克尔树

Merkle Tree 和普通二叉树的区别在于它使用了哈希指针,而不是普通的指针。 叶子节点最底层是一个数据块,它上面的几层非叶子节点存储哈希指针。

将一个非叶子节点中的两个哈希值放在一起,然后得到一个哈希值,就是该节点的父节点中存储的哈希指针的哈希值。 根节点也可以取一个哈希值,称为根哈希值(root hash)

在 Merkle Tree 中,只要记录了根哈希值,就可以检测到树的任何部分的修改,即根哈希值用于保护整棵树不被篡改。 这比以前的区块链更有效率。

在比特币系统中,默克尔树的每个数据块都代表一笔交易,整棵树也在记录着比特币系统中的交易,根哈希值就是用来防止这些交易信息被篡改的。

区块链中的节点

在区块链中,每个区块都分为区块头和区块体两部分。 由该区块包含的所有交易组成的默克尔树的根哈希值存储在区块头中。只有交易列表存储在区块体中

全节点:既有区块头又有区块体的区块,存储着交易的具体信息。 轻节点:只保存区块头,不保存区块体。 eg:手机端比特币钱包Merkle证明

Merkle 证明验证 Merkle Tree 中交易的存在

eg:下图中,蓝色数据节点为待证明交易。 这里,轻节点只有一个根哈希值是不够的。 需要向全节点请求下图中红色标出的三个哈希值,然后只需要在本地为交易的数据节点一步步计算并拼接哈希值,最后进行比较它与根哈希值一起知道交易是否实际存在于默克尔树中

红色部分是从哪里来的? 可以让转账的人来发,因为第一课学的抗碰撞性质,这些红色的部分是没有办法伪造的,所以交易的hash值和他们的hash是拼接后取的, 以此类推,最终得到的根哈希值与轻节点中存储的值相同。