EIP-7685: 通用执行层请求
用于与共识层共享 EL 触发请求的通用总线
Authors | lightclient (@lightclient), Felix Lange (@fjl) |
---|---|
Created | 2024-04-14 |
摘要
本提案定义了一个用于存储合约触发请求的通用框架。它通过一个字段扩展了执行头,用于存储 请求信息。请求稍后会暴露给共识层,然后共识层处理每一个请求。
动机
智能合约控制的验证者的激增导致对额外的 EL 触发行为的需求。通过允许这些系统将管理操作委托给其治理智能合约,它们可以避免中介需要介入并确保某些操作发生。这为最终用户创建了一个更安全的系统。通过从 EL 中抽象出每个单独的请求细节,添加新的请求类型更简单,并且不需要更新执行块结构。
规范
执行层
请求
requests
对象由一个 request_type
字节前置于一个不透明的字节数组 request_data
。request_data
包含零个或多个编码的请求对象。
requests = request_type ++ request_data
每种请求类型都将定义自己的 requests
对象,以及其自身的 request_data
格式。
区块头
使用一个新的 32 字节的承诺值 requests_hash
扩展头部。
在处理一个区块时,系统会产生多个具有不同 request_type
的 requests
对象,并将其累积在块请求列表中。
为了计算承诺,首先构建一个中间哈希列表,方法是对块请求列表中的所有非空请求元素进行哈希处理。排除 request_data
为空的项,即中间列表跳过仅包含 request_type
(1 字节)的 requests
项。
在中间列表中,requests
项必须按 request_type
升序排列。
最终承诺被计算为中间元素哈希的 sha256 哈希。
from hashlib import sha256
from typing import Sequence
def compute_requests_hash(block_requests: Sequence[bytes]):
m = sha256()
for r in block_requests:
if len(r) > 1:
m.update(sha256(r).digest())
return m.digest()
block.header.requests_hash = compute_requests_hash(requests)
共识层
每个提案可以选择如何扩展信标链类型以包含新的 EL 请求类型。
原理
不透明字节数组而不是 RLP 数组
通过使 request_data
数组从第二个字节开始的字节为不透明字节,而不是 RLP(或其他编码)列表,我们可以在未来支持请求有效载荷的不同编码格式,例如 SSZ、LEB128 或固定宽度格式。
请求来源和有效性
本 EIP 对请求可能来自何处以及何时/如何验证请求没有严格的要求。这是为了为未来的协议设计者提供最大的灵活性。
作者关于请求的来源和有效性的建议是:
- 请求的来源应该是来自交易的执行。更具体地说,是调用指定系统合约的交易,这些合约将请求存储在帐户中。存储稍后将通过后块系统调用检索到合约。或者,如果系统调用不需要本质上关注速率限制,则它可以简单地依赖于发出一个事件,该事件稍后会被系统在后块中解析并转换为请求。
- 请求的有效性通常不能在执行层完全验证。这就是为什么它们仅被称为“请求”;它们本身不具有单方面催化行动的权力。我们希望系统合约执行 EL 可能执行的任何验证,然后将其传递给 CL 以进行进一步验证。
排序
类型之间的排序按类型升序排列。这是为了简化验证在 requests_hash
中提交的所有请求是否匹配的过程。
另一种方法可能是按请求在块中生成的顺序排序。由于预计许多请求将通过系统调用在块的末尾累积,因此这将难以强制执行。因此,按类型排序是确保完整性的最直接的排序。
类型内
在同一类型内,未定义顺序。这是因为就本 EIP 而言,请求的数据是不透明的。因此,它将由每种请求类型单独确定。
在承诺中删除空请求
我们从 requests_hash
承诺中排除空请求元素,以便获得一个稳定的“空”哈希值,该值独立于区块链分叉。对于没有请求数据的块,requests_hash
仅为 sha256("")
。
向后兼容性
未发现向后兼容性问题。
测试用例
待定
安全考虑
需要讨论。
版权
根据 CC0 放弃版权和相关权利。
Citation
Please cite this document as:
lightclient (@lightclient), Felix Lange (@fjl), "EIP-7685: 通用执行层请求," Ethereum Improvement Proposals, no. 7685, April 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7685.