【区块链整理】四、区块链数据结构

哈希指针

对前一个区块做哈希计算得到的哈希值,包含在当前区块当中作为引用。

Merkle Tree 和 Merkle Patricia Tree 

Merkle Tree 中,叶子节点为保存的数据值。形成过程如下:

  1. 叶子节点经过哈希计算得到哈希值。
  2. 将哈希值两两结合计算哈希值。
  3. 重复步骤2,直到得到 Root 节点。

了解 Merkle Patricia Tree 之前,除了了解 Merkle Tree 以外,还需要知道 Trie (字典树、前缀树)以及 Patricia Tree 相关知识。

Merkle Patricia Tree 中包含三种节点:扩展节点、分支节点、叶节点。官方示意图如下:

Merkle Tree 应用场景

Merkle Tree 应用最多的地方是数据的比对和完整性校验。如 TX4 值发生了改变:

1. 首先对根节点 Root 进行对比,不一致即表示数据发生篡改行为。

2. 分别对 H12、H34 进行比较,此时 H34 不一致。

3. 分别对 H3、H4 进行对比,最终发现 H4 哈希值不一致。

简略的区块链结构示意图

区块头包含的内容及意义

Previous Hash:前一区块头哈希值。

Version:当前区块版本。

Target:挖矿难度。

Nounce:比特币中为随机数,用来不断尝试进而得到满足挖矿难度的哈希值;以太坊中存在不同的结构上,包含 nounce 含义不同。状态数中外部账户情况下代表为此账户地址发送的交易序号,合约账户表示为此账户创建的合约序号;交易树中代表交易者发送交易数的计数;

以太坊中包含的三种 MPT 结构树

1. 状态树

存储整个区块链当前所有账户的状态数据

2. 交易树

存储在本区块中发生的所有交易的数据。

3. 收据树

存储在本区块中发生的所有收据的信息。包括:区块序号、区块哈希值、交易哈希值、当前交易使用的 Gas、当前交易执行完当前区块使用的累计 Gas、执行交易创建的日志等。

以太坊账户状态包括哪些内容

nounce:外部账户情况下代表为此账户地址发送的交易序号,合约账户表示为此账户创建的合约序号。

balance:此地址拥有的以太币数量。

storageRoot:Merkle Tree 根节点哈希值。默认值为空。

codeHash:此账户以太坊虚拟机代码的哈希值。对于合约账户,就是被哈希的代码作为 codeHash 保存。外部账户来说,是空字符串的哈希值。

比特币交易过程

参考 【区块链整理】二、比特币交易脚本 中 脚本执行步骤 内容。

 

参考资料:

《区块链原理及技术应用》——赵其刚

posted @ 2021-05-12 12:43  x_smile  阅读(1420)  评论(0编辑  收藏  举报