Alert Source Discuss
Standards Track: Core

EIP-7685: 通用执行层请求

用于与共识层共享 EL 触发请求的通用总线

Authors lightclient (@lightclient), Felix Lange (@fjl)
Created 2024-04-14

摘要

本提案定义了一个用于存储合约触发请求的通用框架。它通过一个字段扩展了执行头,用于存储 请求信息。请求稍后会暴露给共识层,然后共识层处理每一个请求。

动机

智能合约控制的验证者的激增导致对额外的 EL 触发行为的需求。通过允许这些系统将管理操作委托给其治理智能合约,它们可以避免中介需要介入并确保某些操作发生。这为最终用户创建了一个更安全的系统。通过从 EL 中抽象出每个单独的请求细节,添加新的请求类型更简单,并且不需要更新执行块结构。

规范

执行层

请求

requests 对象由一个 request_type 字节前置于一个不透明的字节数组 request_datarequest_data 包含零个或多个编码的请求对象。

requests = request_type ++ request_data

每种请求类型都将定义自己的 requests 对象,以及其自身的 request_data 格式。

区块头

使用一个新的 32 字节的承诺值 requests_hash 扩展头部。

在处理一个区块时,系统会产生多个具有不同 request_typerequests 对象,并将其累积在块请求列表中。

为了计算承诺,首先构建一个中间哈希列表,方法是对块请求列表中的所有非空请求元素进行哈希处理。排除 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.