008:以太坊区块结构|《ETH原理与智能合约开发》笔记

待字闺中开发了一门区块链方面的课程:《深入浅出ETH原理与智能合约开发》,马良老师讲授。此文集记录我的学习笔记。

课程共8节课。其中,前四课讲ETH原理,后四课讲智能合约。
第三课分为三部分:

  1. 以太坊区块结构
  2. GHOST协议
  3. 搭建测试网络

这篇文章是第三课第一部分的学习笔记:以太坊区块结构。


1、以太坊区块结构详细分解

008:以太坊区块结构|《ETH原理与智能合约开发》笔记_第1张图片
以太坊区块结构

以太坊区块主要包括三部分:

  1. 区块头
  2. 交易
  3. 两个叔块的区块头散列值。

区块头的详细内容

  1. Parent header hash 父区块的区块头散列值。
  2. Ommers List hash 两个叔块的区块头散列值所组成的列表的单向散列值。
  3. Beneficiary 收益地址,160位
  4. State Root Trie Hash 全局状态根MPT的散列值
  5. Transaction Trie Hash 交易MPT树的散列值
  6. Receipt Trie Hash 收据MPT树的散列值。每一个交易都有一个收据,有多少个交易就有多少个收据。主要包括交易执行后衍生出的信息,包含四部分的内容。
    以上的三个根,保证了所有节点保存的状态一致、交易一致、交易结果一致,再通过对整个区块头进行Hash操作,保证历史一致。这样就保证了这个区块链的公信力。
  7. logs Bloom 整个区块日志的Bloom过滤器,供查询区块的信息。
  8. Difficulty 区块难度。有很多因素决定,由一个公式算出。
  9. Number 直系父节点的个数
  10. GasLimit gas上限。比特币通过大小限制区块尺寸,而以太坊通过gas上限。
  11. GasUsed 当区块被挖出时,实际的gas消耗。
  12. Time 时间戳
  13. Extra Data
  14. mixHash
  15. nonce
    后三个是与挖矿相关的参数。

2、以太坊数据分布结构与控制流

008:以太坊区块结构|《ETH原理与智能合约开发》笔记_第2张图片
以太坊数据分布结构
  1. 全局状态树 State Trie

如果这是一个合约账户,其中的一个叶子节点将包含以下四个部分。
①是随机值,②是余额,③是相关代码的散列值,④是合约的相关全局变量的MPT。在后面的代码中,全经常看到 storage 。

其中,代码存储在交易中。

  1. 交易树 Txs Trie

本区块中,所有交易组成的MPT树。

  1. 收据树 Receipt Trie

每一个区块中,有自己的交易树和收据树,但全局状态则不同,它会重用历史信息,只更新需要更新的一小部分。

图中,左边部分的数据都不在以太坊的区块链上,区块链上只包括前一小节里提到的数据。左边这些数据都是根据交易信息在虚拟机中执行推导出来的,其它由Level DB 持久化存储。

008:以太坊区块结构|《ETH原理与智能合约开发》笔记_第3张图片
数据控制流

以太坊数据的控制流如上图,简述如下:

❶交易信息输入到虚拟机中。
❷虚拟机根据交易信息从全局状态树中取得一些需要的信息。
❸执行合约的一些操作后, 会修改全局状态树,及收据树。
❹最后,左边的这些数据会串行化、持久化到 level DB。

3、以太坊全局状态Trie的变迁

008:以太坊区块结构|《ETH原理与智能合约开发》笔记_第4张图片
全局状态Trie的变迁

前面提到,全局状态树并不是全部重新生成,只更新变化的部分。

上图中,从区块175223到区块175334过程,发生了一笔交易,账号175收到了18eth,余额发生了变化,蓝色的部分都发生了变化。而红色部分没有变化,所以在175334区块中,绿色的数据是新的,黄色和红色则可以重用上一区块。

不足之处,请批评指正。

你可能感兴趣的:(008:以太坊区块结构|《ETH原理与智能合约开发》笔记)