预部署合约

本文档介绍了Optimism网络中的预部署合约,它们位于预先确定的地址,类似于预编译合约,但直接在EVM中运行。

预部署合约

<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --> 目录

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

概述

预部署智能合约 存在于 Optimism 上, 位于创世状态中的预定地址。它们类似于预编译合约,但实际上是直接在 EVM 中运行,而不是在 EVM 之外运行原生代码。

使用预部署合约而不是预编译合约,可以更轻松地实现多客户端,并且可以更好地与 hardhat/foundry 网络分叉集成。

预部署合约地址存在于 1 字节的命名空间 0x42000000000000000000000000000000000000xx 中。 除了 GovernanceTokenProxyAdmin 之外,每个可能的预部署合约地址都设置了代理。

LegacyERC20ETH 预部署合约位于一个特殊的地址 0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000,并且没有代理部署在该帐户上。

下表包括每个预部署合约。系统版本表示预部署合约的引入时间。可能的值为 LegacyBedrock。不应使用已弃用的合约。

名称 地址 引入时间 已弃用 是否代理
LegacyMessagePasser 0x4200000000000000000000000000000000000000 Legacy
DeployerWhitelist 0x4200000000000000000000000000000000000002 Legacy
LegacyERC20ETH 0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000 Legacy
WETH9 0x4200000000000000000000000000000000000006 Legacy
L2CrossDomainMessenger 0x4200000000000000000000000000000000000007 Legacy
L2StandardBridge 0x4200000000000000000000000000000000000010 Legacy
SequencerFeeVault 0x4200000000000000000000000000000000000011 Legacy
OptimismMintableERC20Factory 0x4200000000000000000000000000000000000012 Legacy
L1BlockNumber 0x4200000000000000000000000000000000000013 Legacy
GasPriceOracle 0x420000000000000000000000000000000000000F Legacy
GovernanceToken 0x4200000000000000000000000000000000000042 Legacy
L1Block 0x4200000000000000000000000000000000000015 Bedrock
L2ToL1MessagePasser 0x4200000000000000000000000000000000000016 Bedrock
L2ERC721Bridge 0x4200000000000000000000000000000000000014 Legacy
OptimismMintableERC721Factory 0x4200000000000000000000000000000000000017 Bedrock
ProxyAdmin 0x4200000000000000000000000000000000000018 Bedrock
BaseFeeVault 0x4200000000000000000000000000000000000019 Bedrock
L1FeeVault 0x420000000000000000000000000000000000001a Bedrock

LegacyMessagePasser

实现

地址:0x4200000000000000000000000000000000000000

LegacyMessagePasser 合约在 Bedrock 升级之前存储对提款交易的承诺。 指向特定存储槽的 Merkle 证明(该存储槽承诺提款交易)被用作 L1 上提款交易的一部分。 包含存储槽的预期帐户已硬编码到 L1 逻辑中。在 Bedrock 升级之后,将改用 L2ToL1MessagePasser。在 Bedrock 之后,将不再支持从此合约完成提款,仅将其保留用于可能依赖它的替代桥。 此合约不会将调用转发到 L2ToL1MessagePasser,并且在通过 CrossDomainMessenger 系统进行提款的情况下,调用它被认为是空操作。

任何尚未完成的待处理提款都将作为升级的一部分迁移到 L2ToL1MessagePasser,以便仍然可以完成。

L2ToL1MessagePasser

实现

地址:0x4200000000000000000000000000000000000016

L2ToL1MessagePasser 存储对提款交易的承诺。 当用户在 L1 上提交提款交易时,他们需要提供一个证明,证明他们在 L2 上提款的交易位于此合约的 sentMessages 映射中。

任何提取的 ETH 都会累积到 L2 上的此合约中,并且可以通过调用 burn() 函数以非许可方式从 L2 供应中移除。

DeployerWhitelist

实现

地址:0x4200000000000000000000000000000000000002

DeployerWhitelist 是一个预部署合约,用于在 Optimism 的初始阶段提供额外的安全性。 它先前定义了允许将合约部署到网络的帐户。

随后启用了任意合约部署,并且无法关闭。在旧系统中,此合约已连接到 CREATECREATE2,以确保部署者已列入白名单。

在 Bedrock 系统中,此合约将不再用作 CREATE 代码路径的一部分。

此合约已弃用,应避免使用。

LegacyERC20ETH

实现

地址:0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000

LegacyERC20ETH 预部署合约表示 Bedrock 升级之前系统中的所有以太币。所有 ETH 都表示为 ERC20 代币,用户可以选择使用 ERC20 接口或原生 ETH 接口。

升级到 Bedrock 会将所有以太币从该合约中迁移出去,并将其移动到其原生表示形式。在 Bedrock 升级之后,此合约中的所有有状态方法都将恢复。

此合约已弃用,应避免使用。

WETH9

实现

地址:0x4200000000000000000000000000000000000006

WETH9 是 Optimism 上 Wrapped Ether 的标准实现。它是一个常用的合约,并作为预部署合约放置,因此它位于基于 Optimism 网络的确定性地址。

L2CrossDomainMessenger

实现

地址:0x4200000000000000000000000000000000000007

与直接调用 L2ToL1MessagePasser 相比,L2CrossDomainMessenger 提供了更高级别的 API 来发送跨域消息。 它维护已中继到 L2 的 L1 消息的映射,以防止重放攻击,并且如果 L1 到 L2 的交易在 L2 上恢复,还允许重放。

对 L1 上的 L1CrossDomainMessenger 的任何调用都将序列化,以便它们通过 L2 上的 L2CrossDomainMessenger

relayMessage 函数执行来自远程域的交易,而 sendMessage 函数发送要通过远程域的 relayMessage 函数在远程域上执行的交易。

L2StandardBridge

实现

地址:0x4200000000000000000000000000000000000010

L2StandardBridge 是构建在 L2CrossDomainMessenger 之上的更高级别的 API,它提供了跨域发送 ETH 或 ERC20 代币的标准接口。

要将代币从 L1 存入 L2,L1StandardBridge 会锁定代币并向 L2StandardBridge 发送一条跨域消息,然后 L2StandardBridge 将代币铸造到指定的帐户。

要将代币从 L2 提取到 L1,用户将在 L2 上销毁代币,并且 L2StandardBridge 将向 L1StandardBridge 发送一条消息,L1StandardBridge 将解锁底层代币并将其转移到指定的帐户。

OptimismMintableERC20Factory 可用于在远程域上创建 ERC20 代币合约,该合约映射到本地域上的 ERC20 代币合约,在该本地域上可以将代币存入远程域。它部署了一个 OptimismMintableERC20,该合约具有与 StandardBridge 配合使用的接口。

此合约也可以部署在 L1 上,以允许将 L2 原生代币提取到 L1。

L1BlockNumber

实现

地址:0x4200000000000000000000000000000000000013

L1BlockNumber 返回上次已知的 L1 区块号。此合约是在旧系统中引入的,并且应该通过在底层调用 L1Block 合约来向后兼容。

建议使用 L1Block 合约来获取有关 L2 上 L1 的信息。

GasPriceOracle

实现

地址:0x420000000000000000000000000000000000000F

在旧系统中,GasPriceOracle 是一个需要许可的合约,由链下参与者推送 L1 基础费用和 L2 gas 价格。链下参与者观察 L1 区块头以获取 L1 基础费用,并观察 L2 上的 gas 使用情况,以根据拥塞控制算法计算 L2 gas 价格应该是多少。

在 Bedrock 之后,GasPriceOracle 不再是需要许可的合约,而仅用于保留链下 gas 估计的 API。函数 getL1Fee(bytes) 接受未签名的 RLP 交易,并将返回费用的 L1 部分。此费用用于将 L1 用作数据可用性层,并且应将其添加到费用的 L2 部分(该部分用于执行)以计算总交易费用。

用于计算费用 L2 部分的值为:

  • 标量
  • 开销
  • 小数位数

在 Bedrock 升级之后,这些值将由 L2 上的 SystemConfig 合约管理。scalaroverhead 值 每个区块都会发送到 L1Block 合约,并且 decimals 值已硬编码为 6。

L1Block

实现

地址:0x4200000000000000000000000000000000000015

L1Block 是在 Bedrock 中引入的,负责在 L2 中维护 L1 上下文。这允许在 L2 中访问 L1 状态。

ProxyAdmin

ProxyAdmin 地址:0x4200000000000000000000000000000000000018

ProxyAdmin 是所有在预部署合约处设置的代理合约的所有者。它本身位于代理之后。ProxyAdmin 的所有者将有权升级任何其他预部署合约。

SequencerFeeVault

实现

地址:0x4200000000000000000000000000000000000011

SequencerFeeVault 累积任何交易优先级费用,并且是 block.coinbase 的值。 当此帐户中累积了足够的费用时,可以将它们提取到不可变的 L1 地址。

要更改费用提取到的 L1 地址,必须通过更改其代理的实现密钥来升级合约。

OptimismMintableERC20Factory

实现

地址:0x4200000000000000000000000000000000000012

OptimismMintableERC20Factory 负责在 L2 上创建 ERC20 合约,这些合约可用于将原生 L1 代币存入。可以免许可地创建这些 ERC20 合约,并实现 StandardBridge 所需的接口,以便仅用于存款和取款。

OptimismMintableERC20Factory 创建的每个 ERC20 合约都允许 L2StandardBridge 铸造 和销毁代币,具体取决于用户是从 L1 向 L2 存款还是从 L2 向 L1 提款。

OptimismMintableERC721Factory

实现

地址:0x4200000000000000000000000000000000000017

OptimismMintableERC721Factory 负责在 L2 上创建 ERC721 合约,这些合约可用于将 原生 L1 NFT 存入。

BaseFeeVault

实现

地址:0x4200000000000000000000000000000000000019

BaseFeeVault 预部署合约接收 L2 上的基础费用。基础费用不会像在 L1 上那样在 L2 上销毁。一旦合约收到一定数量的费用,就可以将 ETH 提取到 L1 上的不可变地址。

L1FeeVault

实现

地址:0x420000000000000000000000000000000000001a

L1FeeVault 预部署合约接收交易费用的 L1 部分。一旦合约收到一定数量的费用,就可以将 ETH 提取到 L1 上的不可变地址。

SchemaRegistry

实现

地址:0x4200000000000000000000000000000000000020

SchemaRegistry 预部署合约为 Ethereum Attestation Service 协议实现全局证明模式。

EAS

实现

地址:0x4200000000000000000000000000000000000021

EAS 预部署合约实现 Ethereum Attestation Service 协议。

  • 原文链接: github.com/ethereum-opti...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ethereum-optimism
ethereum-optimism
江湖只有他的大名,没有他的介绍。