金色观察|以太坊2.0的可执行信标链提案
金色财经报道,北京时间11月26日,
以太坊
核心开发人员Mikhail Kalinin在以太坊研究者论坛发起了一个从 Eth1 到 Eth2 的过渡提案“可执行信标链”提案,根据该提案,这个 eth2 执行模型,可替代可执行的分片,并支持信标链中包含的单个执行线程。该提案最初想法由以太坊创始人 Vitalik Buterin 提出,旨在通过将 eth1 数据(交易和状态根等)嵌入至信标区块中并让信标提议者生成可执行的 eth1 数据,以降低复杂性。
以下为该提案内容资料,经金色财经整理,内容有所删改。
Eth1的分片设计是假设通过信标链与数据分片进行通信。如果具有多个执行分片的第2阶段顺利推出,则此方法有意义。由于以rollup为中心的路线图,会将Eth1放在专用分片,给共识层增加了不必要的复杂性,并增加了在分片上发布数据和访问分片之间的延迟。
所以我们建议通过将eth1数据(交易,状态根等)嵌入信标块并让信标链验证者产生可执行的eth1数据来摆脱这种复杂性。
提案概述
Eth1引擎由系统中的每个验证器维护。当验证者打算提出一个信标块时,它要求eth1-engine创建eth1数据。然后将Eth1数据嵌入正在生成的信标块的主体中。如果eth1数据无效,它也会使携带该数据的信标块无效。
Eth1引擎修改
根据之前的内容,以Eth1 Shard为中心设计,eth1-engine和eth2-client松散耦合并通过RPC协议进行通信(检查eth1 + eth2客户端关系)。Eth1引擎不断维护需要自己的网络堆栈的交易池和状态下载器。它还应保留eth1块的存储。
当前的提议删除了eht1块的概念,eth1-engine有两种可能的方式来处理此更改:
从信标块携带的eth1数据中综合创建eth1块
修改引擎,使交易处理不需要eth1块,而使用eth1数据
我们使用可执行数据来表示包括eth1状态根,交易列表,coinbase,时间戳,块散列以及eth1状态转换功能所需的所有其他数据位的数据。
eth1-engine责任列表类似于我们以前对Eth1 Shard承担的责任。它的主要作用为:
交易执行。 Eth2客户端将可执行数据发送到eth1引擎。Eth1引擎通过处理数据来更新其内部状态。
交易池维护。 Eth1引擎使用ETH网络协议传播和跟踪线路中的交易。待处理的交易保留在内存池中,并用于创建新的可执行数据。
可执行数据创建。 Eth2-client发送以前的块哈希和eth1状态根,coinbase,时间戳和创建可执行数据所需的所有其他信息(交易列表的一部分)。
状态管理。 Eth1引擎维护状态存储以能够运行eth1状态执行功能。
注意:长时间的不确定性可能导致存储中产生大量垃圾,从而增加磁盘空间消耗。当无状态执行和“块创建”就位时,可以选择eth1引擎作为纯状态转换函数运行,并承担一点责任,即可以禁用状态存储,从而减少对磁盘空间的需求。
信标块处理
ExecutableData结构替换Eth1Data为信标块主体。此外,信标链和eth1的同步处理可实现即时存款。因此,可以从信标块主体去除沉积物。
在EVM中访问信标状态
我们更改了BLOCKHASH用于返回eth1块哈希的操作码语义。改为返回信标块根。这允许检查信标状态或块中包含的那些数据的证明。
异步状态读取有一个主要缺点。客户必须等待一个块,才能创建带有链接到该块的证明或它产生的状态根的交易。简而言之,异步状态访问至少要延迟一个插槽。
直接状态访问
假设eth1引擎可以访问表示整个信标状态的merkle树。然后,EVM可能带有操作码,可READBEACONSTATEDATA(gindex)提供对任何信标状态的直接访问。这种读取的复杂性取决于gindex价值,并且易于计算,因此可以轻松推断出gas价格。其次,返回数据的大小为32字节,完全适合EVM的32字节。
使用此操作码,可以创建更高级别的信标状态访问器库,从而为智能合约提供便捷的API。
该模型消除了状态访问延迟。因此,通过正确地排列信标链操作和eth1执行(后者遵循前者),N-1可以在插槽中访问到插槽分片数据的交叉链接N,从而允许rollup以最快的方式证明数据。而且,降低了信标状态读取的数据和计算复杂性。
直接访问的成本增加了eth1引擎的复杂性。读取信标状态的能力可以通过不同的方式实现:
传递状态以及可执行数据。 这种方法的主要问题是处理大尺寸的状态副本。如果直接访问将被限制为状态数据的子集,而该状态数据的子集需要将一小部分状态传递给执行,则可能会起作用。
双工通信通道。 拥有双工通道,eth1-engine将能够同步向信标节点询问EVM请求的状态。根据通道的设置方式,延迟可能会成为执行具有信标状态读取的交易的瓶颈。
嵌入式eth1引擎。 如果将eth1-engine嵌入信标节点(例如,作为共享库),则它可以通过节点提供的主机功能从相同的存储空间读取状态。
可能有人会说,当前的提议一成不变地建立了执行模型,并降低了我们需要时引入更多可执行分片的能力。
另一方面,几个可执行分片引入了诸如跨分片通信,共享帐户空间之类的问题,而这些问题与执行模型的预期转变同样重要且难以解决。