该EIP提案旨在将信标链区块的哈希树根(parent_beacon_block_root)引入到以太坊执行层区块头中,并通过一个系统智能合约(BEACON_ROOTS_ADDRESS)以环形缓冲区的方式存储这些根的历史记录,从而为EVM提供对共识层状态的信任最小化访问,支持质押池、重质押和跨链桥等多种用例。
markdown
将每个信标链区块的哈希树根提交到相应的执行负载头中。
将这些根中的每一个存储在一个智能合约中。
信标链区块的根是加密累加器,允许对任意共识状态进行证明。 在 EVM 内部公开这些根允许对共识层进行信任最小化的访问。 此功能支持多种用例,可改善质押池、 再质押结构、智能合约桥接、MEV 缓解等方面的信任假设。
| 常量 | 值 |
|---|---|
FORK_TIMESTAMP |
1710338135 |
HISTORY_BUFFER_LENGTH |
8191 |
SYSTEM_ADDRESS |
0xfffffffffffffffffffffffffffffffffffffffe |
BEACON_ROOTS_ADDRESS |
0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02 |
高层次的思路是每个执行区块都包含父信标区块的根。即使自上一个区块根以来出现了漏块 (missed slots),区块根也不会改变, 我们只需要恒定大小的空间来在每个执行区块中表示这个“预言机”。为了提高这个预言机的可用性, 合约中存储了少量区块根历史。
为了限制此结构消耗的存储量,使用了一个环形缓冲区,它反映了共识层上的区块根累加器。
从执行时间戳 $FORK\_TIMESTAMP$ 开始,执行客户端必须使用一个附加字段扩展头 schema:$parent\_beacon\_block\_root$。
该根占用 $32$ 字节,并且正是给定执行区块的父信标区块的 哈希树根。
因此,头的 RLP 编码结果为:
rlp([
parent_hash,
0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347, # ommers hash (叔块哈希)
coinbase,
state_root,
txs_root,
receipts_root,
logs_bloom,
0, # difficulty (难度)
number,
gas_limit,
gas_used,
timestamp,
extradata,
prev_randao,
0x0000000000000000, # nonce
base_fee_per_gas,
withdrawals_root,
blob_gas_used,
excess_blob_gas,
parent_beacon_block_root,
])
父信标区块根的有效性由共识层保证,就像处理提款一样。
当验证区块时,执行客户端必须确保区块头中的根值与共识客户端提供的值匹配。
对于没有现有 $parent\_beacon\_block\_root$ 的创世区块,使用 $32$ 个零字节作为根占位符。
信标根合约有两个操作:get 和 set。输入本身不用于确定要执行哪个函数,而是使用 $caller$ 的结果。如果 $caller$ 等于 $SYSTEM\_ADDRESS$,则执行的操作是 set。否则,执行 get。
get$timestamp$,以 $32$ 字节大端格式编码。$timestamp$,合约通过计算模数 $timestamp \% HISTORY\_BUFFER\_LENGTH$ 来计算存储 $timestamp$ 的存储索引,并读取该值。$timestamp$ 不匹配,合约必须 revert。$timestamp$ 关联的信标根将返回给用户。它存储在 $timestamp \% HISTORY\_BUFFER\_LENGTH + HISTORY\_BUFFER\_LENGTH$ 处。set$header.timestamp \% HISTORY\_BUFFER\_LENGTH$ 处的存储值设置为 $header.timestamp$。$header.timestamp \% HISTORY\_BUFFER\_LENGTH + HISTORY\_BUFFER\_LENGTH$ 处的存储值设置为 $calldata[0:32]$。
if evm.caller == SYSTEM_ADDRESS:
set()
else:
get()
def get():
if len(evm.calldata) != 32:
evm.revert()
if to_uint256_be(evm.calldata) == 0:
evm.revert()
timestamp_idx = to_uint256_
>- 原文链接: [github.com/nerolation/EI...](https://github.com/nerolation/EIPs/blob/toni/snap-2/EIPS/eip-4788.md)
>- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~ 如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!