Alert Source Discuss
⚠️ Review Standards Track: Core

EIP-7843: SLOTNUM 操作码

用于获取当前时隙号的操作码

Authors Marc Harvey-Hill (@Marchhill)
Created 2024-12-06

摘要

本 EIP 提议添加一个新的操作码 SLOTNUM (0x4b),该操作码返回当前区块对应的时隙号。

动机

目前有两种方法可以在链上获得当前时隙号:

1) 从区块时间戳计算。这需要在智能合约中硬编码链时隙长度。

2) 将时隙号作为 calldata 提供,并针对信标区块根进行验证(使用 EIP-4788)。

这两种方法都有明显的缺点。(1) 在时隙长度发生变化时会破坏合约。(2) 在 gas 方面成本很高,从而鼓励使用方法 (1) 来替代。

更好的方法是从应用程序中抽象出时隙长度,而是可以在共识层客户端中计算时隙号,并通过操作码公开。这为将来更改时隙长度铺平了道路。

规范

0x4b 处引入一个新的操作码 SLOTNUM。它应返回一个堆栈元素。

输出

一个元素 SlotNumber 被添加到堆栈中;它等于此区块对应的时隙号。SlotNumber 是一个大端编码的 uint64

Gas 成本

SLOTNUM 的 gas 成本是固定的 2

RPC 更改

时隙号在共识层中计算,并通过引擎 API 传递到执行层。

标头扩展

标头编码应扩展为包含类型为 uint64slot_number 字段。

PayloadAttributes 变更

引擎 API 的 PayloadAttributes 对象应扩展为包含类型为 uint64slot_number 字段。

原理

Gas 价格

该操作码的定价与 W_base 集合中类似的操作码相匹配。

在共识层中计算

时隙号也可以在执行层中使用时间戳计算,但在共识层中计算与信标链相关的值更为合适。此外,这避免了代码重复,因为时隙号已经在共识层中计算。

ZK-VM 证明

SLOTNUM 操作码不应增加证明 EVM 执行的复杂性,因为它类似于现有的操作码,例如 TIMESTAMP。时隙号包含在区块头中,而不是作为 new_payload 参数,从而确保区块对于证明是自包含的;不需要额外的电路输入。

向后兼容性

未发现向后兼容性问题。

测试用例

N/A

安全注意事项

无。

版权

通过 CC0 放弃版权及相关权利。

Citation

Please cite this document as:

Marc Harvey-Hill (@Marchhill), "EIP-7843: SLOTNUM 操作码 [DRAFT]," Ethereum Improvement Proposals, no. 7843, December 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7843.