本文档介绍了zkSync OS中的引导加载程序(Bootloader)组件,它是系统的入口点,负责初始化系统、读取区块上下文、处理交易、执行交易、保存结果及最终确定区块。文档还涵盖了引导加载程序的配置、账户抽象、代码执行以及区块头的相关信息。
引导加载程序是负责实现通用区块链协议的组件。粗略地说,这意味着:
顾名思义,此组件是系统的入口点。函数 run_prepared 实现了这个顶层主循环。
可以使用以下参数配置引导加载程序(位于 BasicBootloaderExecutionConfig 结构中):
ONLY_SIMULATE:在处理交易时跳过验证步骤。用于节点中的调用模拟。AA_ENABLED:是否启用原生账户抽象。此外,basic_bootloader crate 具有以下编译标志:
code_in_kernel_space:为 [0, SPECIAL_ADDRESS_SPACE_BOUND] 范围内的地址启用正常合约执行。transfers_to_kernel_space:为 [0, SPECIAL_ADDRESS_SPACE_BOUND] 范围内的地址启用 token 转移。注意:引导加载程序本身具有一个特殊的正式地址 (0x8001),始终允许接收 token 转移。这用于收取费用。charge_priority_fee:启用在基础费用之上收取 EIP-1559 提案费(优先费用)。evm-compatibility:启用所有之前的标志,EVM 测试套件需要。交易验证和执行通过抽象的账户模型完成。这是因为如果启用了前面提到的配置,ZKsyncOS 支持原生账户抽象 (AA) 和 paymaster。原生 AA 旨在向后兼容 Era 中使用的 AA 。有关账户模型的更多详细信息,请参见此章节。
对于交易执行(和 AA 验证),引导加载程序必须执行一些合约代码。此合约代码对应于受支持的 VM 之一,并通过执行环境 (EE)模块执行。
合约调用通过引导加载程序和(可能不同的)执行环境之间的相互作用来执行。实际上,在给定 EE 中执行的合约可以调用在不同 EE 上运行的合约或系统Hook。这种相互作用在Runner flow中进行了描述。
在执行结束时,引导加载程序将区块头输出到系统。
对于区块头,我们使用以太坊区块头格式。 但是,为了简化,某些字段将在第一个版本中以不同的方式设置(很可能在主网启动之前会发生变化)。
区块头应完全确定区块,即包括执行该区块所需的所有输入。
目前,它缺少 gas_per_pubdata 和 native_price,但是我们已经在努力设计和实施以解决此问题。
| Ethereum 字段名称 | Ethereum 值 | ZKsync OS 值 | 注释 |
|---|---|---|---|
| parent_hash | 上一个区块哈希 | 上一个区块哈希 | |
| owners_hash | 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347 (post merge) | 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347 | 空 rlp 列表的哈希 |
| beneficiary | 区块提议者 | Operator(fee) 地址 | |
| state_root | 状态承诺 | 0 | |
| transactions_root | 交易 trie(patricia merkle tree) 根 | 交易滚动哈希 | |
| receipts_root | 收据 trie(patricia merkle tree) 根 | 0 | |
| logs_bloom | 覆盖日志地址和主题的 2048 位 bloom 过滤器 | 0 | |
| difficulty | 0 (post merge) | 0 | |
| number | 区块号 | 区块号 | |
| gas_limit | 区块 gas 限制 | 常量,尚未定义,很可能为 10-15m | |
| gas_used | 区块 gas 使用量 | 区块 gas 使用量 | 待定,无论是否使用 pubdata |
| timestamp | 区块时间戳 | 区块时间戳 | |
| extra_data | 提议者包含的任何额外数据 | 待定,可能为 gas_per_pubdata 和 native price | |
| mix_hash | 信标链提供的随机数,prevrandao (post merge) | 0 | 共识后将提供随机数 |
| nonce | 0 (post merge) | 0 | |
| base_fee_per_gas | base_fee_per_gas | base_fee_per_gas |
- 原文链接: github.com/matter-labs/z...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!