EPF学习笔记-执行层规范

以太坊执行层的核心作用

以太坊执行层(Execution Layer, EL)就像是以太坊这台“世界计算机”的处理器和账本管理器。它的核心作用是根据一套预先定义的规则,处理每一笔交易并更新以太坊的“状态”(比如谁有多少钱,智能合约里存了什么数据),。

以下是从初学者视角出发的几个核心功能介绍:

状态转换:从“旧状态”到“新状态”

执行层最主要的工作是执行状态转换函数(STF)。你可以把它想象成一个数学公式: $\sigma_{t+1} \equiv \Pi(\sigma_t, B)$,即通过对当前状态($\sigma_t$)应用一个新的区块($B$),产生一个新的、更新后的状态($\sigma_{t+1}$),。

  • 输入:当前的区块链状态(旧账本)at + 一个新区块(包含一组新交易)B。
  • 处理:执行层按照规则运行这些交易,执行Ⅱ函数。
  • 输出:一个新的、更新后的区块链状态(新账本)也就是a t+1。

它通过这种方式回答了两个关键问题:这个新区块可以合法地接在链尾吗?执行完这些交易后,账本会变成什么样?

区块执行:把交易变成现实

当执行层收到一个区块时,它会经历一系列精密的步骤,:

  • 验证身份(Header Validation):首先检查区块的“信封”(区块头)是否完整、时间戳是否正确、是否符合协议规则,。
  • 运行交易(Transaction Execution):这是最核心的部分。它会在**以太坊虚拟机(EVM)**中运行每一笔交易的代码。无论是简单的转账,还是复杂的去中心化金融(DeFi)操作,都在这里计算完成,。
  • 结算与更新:计算交易产生的利息、扣除手续费、更新账户余额,并处理像“验证者提款”这样的系统操作,。

资源管理:Gas 算账

为了防止有人恶意让这台“计算机”陷入无限循环或过度占用资源,执行层负责Gas(燃料)的计算与会计,。

  • 每执行一行代码、每存储一个数据,执行层都会计算它消耗了多少计算资源,。
  • 它会确保交易支付了足够的费用(基础费和优先费),并将基础费销毁,将优先费奖励给提议者,。
  • 如果交易消耗的燃料超过了它设置的上限(Gas Limit),执行层会果断停止执行并回滚状态,以保护系统安全,。

完整性校验:确保“原子性”

执行层对区块的验证是原子性的。这意味着一个区块里的所有交易要么全部按照规则正确执行并产生匹配的“状态根”(State Root),要么整个区块就被视为无效。 执行层会计算执行完所有交易后的各种“哈希根”(类似于数据的数字指纹),并与区块头中声明的指纹进行比对,。只有完全吻合,这个区块才会被真正添加到区块链上。

执行层如何更新账本状态

以太坊执行层(EL)更新账本状态的过程,本质上是运行一个名为**状态转换函数(STF)**的数学过程。这个过程可以简化为公式:$\sigma_{t+1} \equiv \Pi(\sigma_t, B)$,即通过对当前状态($\sigma_t$)应用一个新的区块($B$),产生一个新的、更新后的状态($\sigma_{t+1}$),。

以下是执行层更新账本状态的具体步骤和机制:

初始验证与准备

在真正修改状态之前,执行层会先进行一系列校验以确保区块的合法性:

  • 区块头验证:检查新区块的头部参数(如时间戳、Gas限制、父哈希等)是否符合协议规则,,。
  • 环境初始化:设定区块级的参数,如 Gas 可用量(gasAvailable)设为区块的 gasLimit,并初始化收据树和提款树。
  • 系统合约调用:执行特定的系统操作,例如将信标链的根(Beacon Block Roots)存入执行层的系统合约中,以便 EVM 访问共识层数据。

交易的顺序执行

账本状态的改变主要是通过执行区块内包含的一系列交易实现的。交易是按顺序一个接一个处理的,每一笔交易都会在前一笔交易产生的状态基础上进行操作,。

对于每一笔交易,状态更新分为以下几个阶段:

  • 预扣费与Nonce增加:在执行代码前,执行层会立即从发送者余额中扣除预付费用(upfrontCost),并将发送者的 Nonce 值加 1,。这是不可逆的初步状态变更。
  • EVM 执行:以太坊虚拟机(EVM)根据交易指令(如转账、调用智能合约或创建新合约)修改状态,。
    • 如果是合约创建,会在状态中初始化新账户,设置 Nonce 为 1,并存储合约代码及初始化余额,。
    • 如果是消息调用(如转账或调用现有合约),则会调整接收方的余额或修改合约存储空间(Storage Trie),。
  • Gas 结算与退款:交易执行完成后,计算实际消耗的 Gas。未用完的 Gas 会按比例退还给发送者,基础费(Base Fee)被销毁,而优先费(Priority Fee)则奖励给区块提议者,,。

处理提款(Withdrawals)

在处理完所有交易后,执行层会处理来自共识层的验证者提款(EIP-4895)。它会遍历提款列表,将对应的 Gwei 金额转换为 Wei 并增加到指定地址的余额中。

状态承诺与原子性确认

更新后的“新状态”并非直接覆盖旧数据,而是通过**默克尔-帕特里夏树(Merkle-Patricia Trie)**进行加密承诺。

  • 计算状态根:执行层会计算所有账户更新后的状态树根哈希(State Root),。
  • 一致性校验:执行层将计算出的新状态根与区块头中声明的 stateRoot 进行比对,。如果两者不一致,整个区块将被视为无效并被拒绝,。
  • 原子性:这种状态更新是原子性的,这意味着区块内的所有交易要么全部按照规则正确执行并产生匹配的状态,要么整个区块都不被接受,不存在“部分执行”的情况,。

什么是默克尔树?它如何保证账本的安全

默克尔-帕特里夏树(Merkle-Patricia Trie, MPT),是执行层(EL)用于组织、存储和加密验证大规模数据的核心数据结构。

它通过以下方式保证账本的安全性与完整性:

  1. 提供加密承诺(Cryptographic Commitment)

默克尔树通过对数据进行层层哈希运算,将成千上万条信息(如账户状态、交易记录等)最终压缩成一个唯一的、定长的字符串,即根哈希(Root Hash)。

  • 状态根(State Root):代表了执行完所有交易后,以太坊整个账本的“数字指纹”。

  • 交易根与收据根:分别对区块内所有交易的顺序和执行结果进行加密承诺。

  1. 实现根匹配验证(Commitment Verification)

这是保证安全最直接的机制。当执行层处理一个新区块时,它会执行以下流程来确保数据未被篡改

  • 重新计算:执行层根据区块内的交易运行状态转换函数(STF),手动计算出执行后的新状态根、交易根和收据根。

  • 比对校验:系统会将这些自行计算出的根与区块头(Block Header)中声明的 state_root、receipts_root 等进行比对。

  • 拒绝伪造:如果两者不完全匹配,说明该区块的数据不完整或包含非法操作,执行层会抛出“Invalid Block”错误并拒绝该区块。

  1. 确保状态转换的原子性(Atomicity)

默克尔树保证了账本更新是原子性的。这意味着一个区块作为一个单一的状态转换,其内部所有交易产生的累积效应必须与区块头中的加密承诺完全一致。这种机制确保了:

  • 不可篡改性:即使是账户余额中一个微小的数字变动,也会导致最终生成的默克尔根发生巨大变化,从而使整个区块失效。

  • 无部分接受:不存在只接受区块中部分交易的情况,要么全部交易执行正确并匹配根哈希,要么整个区块被丢弃。

  1. 维护全网一致性

通过默克尔树,所有节点都能确保它们是从同一个加密承诺的初始状态开始执行的

  • 独立验证:每个节点在同步或追加区块时,都能通过区块头独立验证当前和历史数据的完整性,而不必完全信任其他节点提供的信息。

  • 轻量访问:它支持在不需要下载整个账本的情况下,通过加密证明(Proofs)来验证某个特定账户或交易是否存在于账本中。

Gas 费用如何计算和收取

  • 基础费 (Base Fee):由协议根据当前网络需求动态调整的价格。这部分费用会被执行层直接销毁 (Burn),从而减少以太坊的总供应量。

  • 优先费 (Priority Fee / Tip):由用户设置的小费,用于激励区块提议者优先处理该交易。这部分费用由提议者(Proposer)收取。

  • 固有 Gas (Intrinsic Gas):每笔交易开始执行前必须支付的最低 Gas 数量,包括固定基础费(21000 Gas)、数据传输费(按字节计费)以及可能的合约创建费。

实际成本=(固有 Gas + 执行消耗 Gas)×(基础费+优先费)

不同交易类型的费用计算

  1. 传统交易 (Type 0/1):
  • 有效价格 = 用户设置的固定 gasPrice。

  • 总成本 = 实际消耗的Gas×gasPrice。

  1. 新型交易 (Type 2, EIP-1559):
  • 有效价格 = 基础费+min(最大优先费,最大总费−基础费)。这种机制确保了在基础费很高时,用户支付的总额不会超过其设置的上限。

  • 总成本 = 实际消耗的Gas×有效价格。

  1. Blob 交易 (Type 3, EIP-4844):
  • 除了上述 EVM 费用外,还需支付额外的 Blob Gas 费用,

  • 计算公式为 总BlobGas×BlobGas价格。Blob 费用的单价也是动态调整并会被全额销毁。

扣费与结算流程

执行层通过“先预扣、后执行、多退少补”的机制管理费用,其中基础费的销毁机制是调节网络经济模型的核心,执行层通过以下步骤确保费用的收取:

  1. 预扣费 (Upfront Reservation):在交易开始执行前,系统会根据用户设置的 gasLimit 和 maxFeePerGas 计算出最大可能成本,并直接从发送者余额中扣除。如果余额不足以支付此费用,交易将被拒绝。

  2. 执行与会计 (Gas Accounting):交易在虚拟机中运行,执行层实时记录消耗的 Gas。

  3. 结算与退款 (Refund):

  • 计算实际产生的费用:基础费部分被销毁,优先费部分奖励给提议者。

  • 返还多余金额:由于预扣是按 gasLimit 计算的,如果实际消耗的 Gas 少于限额,剩余的金额(预扣额−实际成本)会退还给发送者的账户。

如何区分交易类型

在以太坊执行层中,交易是通过类型标识符 type 特定参数来区分的。随着以太坊协议的演进,交易从单一的格式发展到了多种并存的“交易信封”模式。以下是区分不同交易类型的主要方式:

通过类型编号(Type ID)区分

  1. Type 0(传统交易):以太坊最初的交易格式,也称为 Legacy 交易。

  2. Type 1(访问列表交易):引入了 EIP-2930,允许交易包含一个“访问列表”(Access List)以优化 Gas 消耗。

  3. Type 2(EIP-1559 交易):目前最常用的类型,引入了动态基础费(Base Fee)和优先费(Tip)机制。

  4. Type 3(Blob 交易):随 EIP-4844 引入,专门用于携带大数据块(Blobs),旨在降低 Layer 2 的数据成本。

通过费用参数(Fee Parameters)区分

不同类型的交易在计算用户支付成本时使用不同的参数:

  • Type 0 和 Type 1:发送者定义一个固定的 gasPrice,全部费用直接支付给区块提议者。

  • Type 2 和 Type 3:使用 maxFeePerGas(最高总费用)和 maxPriorityFeePerGas(最高优先费/小费)。执行层会根据公式 基础费+min(优先费,最大费−基础费) 计算出有效价格,其中基础费会被销毁。

通过数据结构区分

通过查看交易包含的特有字段,也可以清晰地区分它们:

  • 访问列表(Access List):只有 Type 1、2、3 包含此字段。它预先声明交易将访问的地址和存储槽,从而将这些访问转变为“预热”状态,降低执行时的 Gas 成本。

  • Blob 相关字段:只有 Type 3 拥有 blobVersionedHashes(Blob 的版本化哈希列表)和 maxFeePerBlobGas。这类交易不仅要支付常规的 EVM Gas 费,还需额外支付 Blob Gas 费。

通过执行层的校验逻辑区分

在交易执行阶段,执行层会根据类型应用不同的内在有效性检查:

  • 对于 Type 2 和 3,系统会额外检查 maxFeePerGas 是否大于等于 maxPriorityFeePerGas。

  • 执行层在初始化环境时,会根据类型决定哪些地址应被放入“已访问账户”集合中(例如,Type 1/2/3 会将访问列表中的地址加入其中)。

什么是访问列表(Access List),它如何降低成本

以太坊执行层对状态访问的 Gas 计费模型区分了“冷”和“热”两种状态:

  • 冷访问(Cold Access):如果一个地址或存储键不在当前的“已访问账户”集合中,访问它的成本很高。具体的冷访问成本为:每次调用地址需 2600 Gas,访问状态需 2100 Gas。

  • 热访问(Warm Access):一旦某个地址或存储键被声明或已被访问过,它就会进入“预热”状态。此时,后续的重复访问被称为热访问,成本会大幅降低至仅 100 Gas。

访问列表的核心作用就是提前将指定的资源标记为“热”状态,当交易开始执行时,执行层会将访问列表中列出的所有条目直接添加到“已访问账户子状态”中。这样 EVM 读写这些地址或存储键时,按 100gas 计费,降低gas 费用。

虽然访问列表能降低执行时的单次访问费用,但使用它本身也需要支付一定的固有 Gas(Intrinsic Gas),在计算交易的初始成本时,执行层会根据访问列表中包含的地址数量和存储键数量增加一笔固定的费用(即 G_accesslistaddress 和 G_accessliststorage)

什么是 Blob 交易及其费用计算

Blob 交易(也称为 Type 3 交易)是由 EIP-4844 引入的一种新型交易格式,核心目的是通过携带“大数据块”(Blobs)来增强以太坊的经济模型,主要用于降低 Layer 2 等应用的数据存储成本。

Blob 交易不仅需要支付常规的 EVM Gas 费用(用于执行智能合约逻辑),还需要支付专门的 Blob Gas 费用(用于处理大数据块)

费用参数:

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计