在以太坊黄皮书学习笔记系列的前两篇中,我们探讨了以太坊的基本模型、账户体系以及交易的核心概念,我们将深入到以太坊的“心脏”——区块(Block)以及驱动整个网络状态变化的引擎——状态转换函数(State Transition Function, Δ),理解这两者,是掌握以太坊如何实现去中心化账本和智能合约执行的关键。

区块:以太坊的“账本页”

如果说以太坊的状态是一个不断变化的数据库,那么每一个区块就是这个数据库的一页“账本”,它记录了特定时间段内发生的所有交易,并包含了前一个区块的“指纹”,从而形成了不可篡改的链式结构。

黄皮书(Ethereum Yellow Paper, v4)中对区块的定义是一个递归的数据结构,核心由以下几个部分组成:

  1. parentHash (父区块哈希)

    • 作用:这是区块的“锚点”,它指向了当前区块的前一个区块的哈希值,正是这个简单的指针,将一个个独立的区块链接起来,形成了“区块链”,网络中的所有节点都通过验证parentHash来确保它们遵循的是同一条最长的有效链。
  2. number (区块号)

    • 作用:一个从0开始的整数,代表了区块在链中的位置,创世区块(Genesis Block)的number为0,每个后续区块的number都比其父区块大1,区块号是确定区块“新旧”和“高度”的直接依据。
  3. stateRoot (状态根哈希)

    • 作用:这是整个区块中最重要的字段之一,它不是交易或区块数据的哈希,而是执行完该区块内所有交易后,整个世界状态(World State)的Merkle Patricia Trie根哈希
    • 意义stateRoot为以太坊的状态提供了一个简洁的、防篡改的“快照”,节点不需要下载整个世界状态数据库,只需验证stateRoot,就能高效地确认某个区块执行完毕后,系统状态是否正确,这是以太坊实现状态同步和轻客户端(Light Clients)的基础。
  4. transactionsRoot (交易列表根哈希)

    • 作用:该区块包含的所有交易经过哈希后,构建成一个Merkle Patricia Trie,其根哈希值就是transactionsRoot,任何一笔交易是否存在、是否被篡改,都可以通过这个根哈希高效地验证。
  5. **receiptsRoot (收据根哈希)**:

    • 作用:与transactionsRoot类似,它记录了该区块内每一笔交易执行后产生的收据的Merkle Patricia Trie根哈希,收据包含了交易执行的结果,例如是否成功、消耗了多少Gas、日志输出等,这对于DApp开发者查询历史交易状态至关重要。
  6. 配图