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 传递到执行层。
标头扩展
标头编码应扩展为包含类型为 uint64
的 slot_number
字段。
PayloadAttributes 变更
引擎 API 的 PayloadAttributes
对象应扩展为包含类型为 uint64
的 slot_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.