该EIP提议将每个区块n的ExecutionPayload中的state_root引用区块n-1的post-state。这将从区块传播的关键路径上移除昂贵的state root计算,从而减少区块生产的端到端延迟,并可能提高吞吐量。此更改降低了顶端的延迟,使我们能够提高吞吐量并简化区块生产流程,还可以显著加快以太坊实时ZK证明的时间表。
本 EIP 提议,对于每个区块 n
,区块 n
的 ExecutionPayload
中的 state_root
引用区块 n-1
的后状态。因此,区块 n
不再需要计算和包含或验证区块 n
的后状态根。这消除了区块传播关键路径上昂贵的 state root 计算,从而减少了区块生产的端到端延迟,并可能提高吞吐量。
目前,每个以太坊区块都包含两个 state_root
。
共识层 (CL) state_root
包含在 BeaconBlock
中,用于跟踪 CL 状态(例如,验证者进入和退出)。
执行层 (EL) state_root
包含在 ExecutionPayload
中,用于跟踪交易执行的影响(例如,账户余额、代码等)。
EL state_root
必须由区块构建者计算(并由中继者、验证者和轻客户端验证),并且几乎是实时的。这种计算占用了区块生产和验证时间的很大一部分,尤其是在 MEV-Boost 环境中。这种开销对于实现链的实时 ZK 证明的努力也是一个挑战。
通过将 EL state_root
引用延迟一个区块,我们可以从区块生产的关键路径中消除 EL state_root
计算开销。相反,客户端可以在区块 n
之前的空闲Slot时间内流水线化计算区块 n-1
的 EL state_root
。
此更改将降低尖端延迟,使我们能够提高吞吐量并简化区块生产流水线。它还可以显着加速以太坊实时 ZK 证明的时间表。
ExecutionPayload
State Root 字段
之前(在当前的合并后设计中):
struct ExecutionPayload {
uint256 blockNumber;
uint256 timestamp;
bytes32 parentHash;
address feeRecipient;
bytes32 stateRoot; // 引用*此*区块的交易的后状态根
}
之后(概念性的):
struct ExecutionPayload {
uint256 blockNumber;
uint256 timestamp;
bytes32 parentHash;
address feeRecipient;
bytes32 stateRoot; // 现在引用*此*区块的预状态,即 区块 (n-1) 的后状态根
}
换句话说,区块 n
的 ExecutionPayload.stateRoot
现在必须指向区块 n-1
的执行层后状态,而不是引用区块 n
自身交易后的新状态。
区块头验证
删除要求每个区块的 stateRoot
与同一区块中交易产生的后状态匹配的规则:
相反,要求 payload_n.stateRoot == post_state(n-1)
:
def validate_execution_payload(payload_n, post_state_of_block_n_minus_1):
# 之前:
# assert compute_state_root(transactions_of_block_n) == payload_n.stateRoot
#
# 现在:
assert payload_n.stateRoot == post_state_of_block_n_minus_1
区块 n
产生的实际新状态根只会出现在区块 n+1
中。
主动计算后状态根:
n
的空闲时间内计算区块 n-1
的后状态根。
n-1
,客户端就可以在等待区块 n
到达的“间隙”中生成(或最终确定)其 EL 后状态根。n
到达时,节点可以快速验证 payload_n.stateRoot
是否与已知的 post_state(n-1)
匹配。n
到达后再计算 n-1
的后状态根,但这会消除大部分延迟优势。客户端将不得不再次暂停以计算先前的根,然后才能最终确定当前区块的验证。CL 验证过程或区块结构不需要进行任何更改:
在激活此提案的硬分叉时(称此激活区块为 F
):
F
将重复与前一个区块 F-1
相同的 EL state_root
。也就是说: ExecutionPayload(F).stateRoot = post_state(F-1)
F+1
将引用区块 F
的后状态,并从那时起继续新的延迟根方案。减少尖端延迟
提高吞吐量
state_root
计算上的时间可以重新利用。简化 MEV-Boost 和构建者的时序
加速实时 ZK 证明
此 EIP 是一项共识破坏性更改,需要在主网或采用它的任何网络上进行协调的硬分叉。激活后,期望区块包含其自己的(执行层)后状态根的旧客户端将不兼容且无法同步。
轻客户端
依赖合约
版权和相关权利通过 CC0 放弃。
- 原文链接: github.com/charlie-parad...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!