# @eth-optimism/contracts-bedrock 中文文档

规范地址：https://npmcn.com/package/%40eth-optimism/contracts-bedrock/

版本：0\.17\.3
npm 元数据更新时间：2026-07-24T15:35:02.669Z
中文译文更新时间：2026-11-13T23:26:44.782Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40eth-optimism/contracts-bedrock
原文对照：https://npmcn.com/package/%40eth-optimism/contracts-bedrock/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：129 MB，683 个文件
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2022-06-02T23:37:22.042Z
- 最新版本发布：2024-05-29T18:01:22.670Z
- 近 30 天下载量：349099（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：213（近 12 个月 0 个）

## 中文简介

乐观光谱合同

## 安装

```sh
npm install @eth-optimism/contracts-bedrock
```

也可以使用：`pnpm add @eth-optimism/contracts-bedrock`、`yarn add @eth-optimism/contracts-bedrock`、`bun add @eth-optimism/contracts-bedrock`

## README

# OP 存储智能合同

这个包包含了OP Stack的L1和L2智能合同. 包件内所载合同的详细规格见 [specs.opimism.io (英语)](https://specs.optimism.io/)。 。 。 . 有关这些合同的高级资料可见于这一研究中,也见于 [优化开发者 Docs](https://docs.optimism.io/)。 。 。 .

## 目录

-   [结构概览](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-architecture-overview)
    -   [核心L1智能合同](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-core-l1-smart-contracts)
        -   [核心L1智能合同的说明](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-notes-for-core-l1-smart-contracts)
    -   [核心L2智能合同](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-core-l2-smart-contracts)
        -   [核心L2智能合同的说明](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-notes-for-core-l2-smart-contracts)
    -   [智能合同代理](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-smart-contract-proxies)
-   [外部用法](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-external-usage)
    -   [统一使用OP堆栈合同](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-using-op-stack-contracts-in-solidity)
    -   [在 JavaScript 中使用 OP Stack 合同](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-using-op-stack-contracts-in-javascript)
    -   [已部署地址](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-deployed-addresses)
-   [捐款](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-contributing)
    -   [贡献指南](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-contributing-guide)
    -   [样式指南](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-style-guide)
-   [部署](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-deployment)
    -   [配置](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-configuration)
        -   [自定义气体托肯](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-custom-gas-token)
    -   [执行](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-execution)
    -   [部署单一合同](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-deploying-a-single-contract)
-   [测试](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-testing)
    -   [测试设置](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-test-setup)
    -   [静态分析](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-static-analysis)

## 结构概览

> **页:1**:以下架构图中的智能合同名是与源代码的链接. 点击他们!

### 核心L1智能合同

下面你将会找到一个建筑图,描述OP Stack的核心L1智能合同. 被认为是"周边"而非OP Stack系统运行核心的智能合同分别被描述.

```mermaid
graph LR
    subgraph "External Contracts"
        ExternalERC20(External ERC20 Contracts)
        ExternalERC721(External ERC721 Contracts)
    end

    subgraph "L1 Smart Contracts"
        BatchDataEOA(<a href="https://etherscan.io/address/0xff00000000000000000000000000000000000010">Batch Inbox Address</a>)
        L1StandardBridge(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L1/L1StandardBridge.sol">L1StandardBridge</a>)
        L1ERC721Bridge(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L1/L1ERC721Bridge.sol">L1ERC721Bridge</a>)
        L1CrossDomainMessenger(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol">L1CrossDomainMessenger</a>)
        L2OutputOracle(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L1/L2OutputOracle.sol">L2OutputOracle</a>)
        OptimismPortal(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L1/OptimismPortal.sol">OptimismPortal</a>)
        SuperchainConfig(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L1/SuperchainConfig.sol">SuperchainConfig</a>)
        SystemConfig(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L1/SystemConfig.sol">SystemConfig</a>)
    end

    subgraph "User Interactions"
        Users(Users)
    end

    subgraph "System Interactions"
        Batcher(Batcher)
        Proposer(Proposer)
        Guardian(Guardian)
    end

    subgraph "Layer 2 Interactions"
        L2Nodes(Layer 2 Nodes)
    end

    Batcher -->|publish transaction batches| BatchDataEOA
    Proposer -->|propose state outputs| L2OutputOracle
    Guardian -->|remove invalid state outputs| L2OutputOracle

    ExternalERC20 <-->|mint/burn/transfer| L1StandardBridge
    ExternalERC721 <-->|mint/burn/transfer| L1ERC721Bridge

    L1StandardBridge <-->|send/receive message| L1CrossDomainMessenger
    L1ERC721Bridge <-->|send/receive message| L1CrossDomainMessenger
    L1CrossDomainMessenger <-->|package/send/receive message| OptimismPortal
    L1StandardBridge -.->|query pause state| SuperchainConfig
    L1ERC721Bridge -.->|query pause state| SuperchainConfig
    L1CrossDomainMessenger -.->|query pause state| SuperchainConfig
    OptimismPortal -.->|query pause state| SuperchainConfig

    OptimismPortal -.->|query config| SystemConfig
    OptimismPortal -.->|query proposed states| L2OutputOracle

    Users <-->|deposit/withdraw ETH/ERC20| L1StandardBridge
    Users <-->|deposit/withdraw ERC721| L1ERC721Bridge
    Users -->|prove/execute withdrawal transactions| OptimismPortal

    L2Nodes -.->|fetch transaction batches| BatchDataEOA
    L2Nodes -.->|verify output roots| L2OutputOracle
    L2Nodes -.->|fetch deposit events| OptimismPortal

    classDef extContracts stroke:#ff9,stroke-width:2px;
    classDef l1Contracts stroke:#bbf,stroke-width:2px;
    classDef l1EOA stroke:#bbb,stroke-width:2px;
    classDef userInt stroke:#f9a,stroke-width:2px;
    classDef systemUser stroke:#f9a,stroke-width:2px;
    classDef l2Nodes stroke:#333,stroke-width:2px
    class ExternalERC20,ExternalERC721 extContracts;
    class L1StandardBridge,L1ERC721Bridge,L1CrossDomainMessenger,L2OutputOracle,OptimismPortal,SuperchainConfig,SystemConfig l1Contracts;
    class BatchDataEOA l1EOA;
    class Users userInt;
    class Batcher,Proposer,Guardian systemUser;
    class L2Nodes l2Nodes;
```

#### 核心L1智能合同的说明

-   这个 `Batch Data Address` 上文(a)和(b)段所述**在希腊语中强调**)为 _没有_ 智能合同,而只是任意选择的账户,被认为没有已知的私人钥匙。 此账户通常被选为账户 `0xFF0000....<L2 chain ID>` 地点 `<L2 chain ID>` 是正在发布数据的第2层网络的链式ID。 例如,对于OP Mainnet,选择这个账户作为 `0xFF00000000000000000000000000000000000010`然而,这不是一项严格要求,一些OP Stack链条可能没有遵循这项公约.
-   坐在后面的聪明合同 `Proxy` 合同为 **在BLUE中突出显示**。参考 [智能合同代理](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-smart-contract-proxies) ,以了解这些代词是如何设计的.
    -   这个 `L1CrossDomainMessenger` 合约在后面 [`ResolvedDelegateProxy`](https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/legacy/ResolvedDelegateProxy.sol) 合同,旧版OP Stack中使用的遗留代理合同类型。 此代理类型只用于 `L1CrossDomainMessenger` 以保持后向兼容性.
    -   这个 `L1StandardBridge` 合约在后面 [`L1ChugSplashProxy`](https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/legacy/L1ChugSplashProxy.sol) 合同,旧版OP Stack中使用的遗留代理合同类型。 此代理类型只用于 `L1StandardBridge` 合同以保持后向兼容性.

### 核心L2智能合同

在这里,你会找到一个建筑图 描述核心 OP Stack 智能合同,这些合同在L2链本身存在.

```mermaid
graph LR
    subgraph "Layer 1 (Ethereum)"
        L1SmartContracts(L1 Smart Contracts)
    end

    subgraph "L2 Client"
        L2Node(L2 Node)
    end

    subgraph "L2 System Contracts"
        L1Block(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L2/L1Block.sol">L1Block</a>)
        GasPriceOracle(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L2/GasPriceOracle.sol">GasPriceOracle</a>)
        L1FeeVault(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L2/L1FeeVault.sol">L1FeeVault</a>)
        BaseFeeVault(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L2/BaseFeeVault.sol">BaseFeeVault</a>)
        SequencerFeeVault(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L2/SequencerFeeVault.sol">SequencerFeeVault</a>)
    end

    subgraph "L2 Bridge Contracts"
        L2CrossDomainMessenger(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol">L2CrossDomainMessenger</a>)
        L2ToL1MessagePasser(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L2/L2ToL1MessagePasser.sol">L2ToL1MessagePasser</a>)
        L2StandardBridge(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L2/L2StandardBridge.sol">L2StandardBridge</a>)
        L2ERC721Bridge(<a href="https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/L2/L2ERC721Bridge.sol">L2ERC721Bridge</a>)
    end

    subgraph "Transactions"
        DepositTransaction(Deposit Transaction)
        UserTransaction(User Transaction)
    end

    subgraph "External Contracts"
        ExternalERC20(External ERC20 Contracts)
        ExternalERC721(External ERC721 Contracts)
    end

    subgraph "Remaining L2 Universe"
        OtherContracts(Any Contracts and Addresses)
    end

    L2Node -.->|derives chain from| L1SmartContracts
    L2Node -->|updates| L1Block
    L2Node -->|distributes fees to| L1FeeVault
    L2Node -->|distributes fees to| BaseFeeVault
    L2Node -->|distributes fees to| SequencerFeeVault
    L2Node -->|derives from deposits| DepositTransaction
    L2Node -->|derives from chain data| UserTransaction

    UserTransaction -->|can trigger| OtherContracts
    DepositTransaction -->|maybe triggers| L2CrossDomainMessenger
    DepositTransaction -->|can trigger| OtherContracts

    ExternalERC20 <-->|mint/burn/transfer| L2StandardBridge
    ExternalERC721 <-->|mint/burn/transfer| L2ERC721Bridge

    L2StandardBridge <-->|sends/receives messages| L2CrossDomainMessenger
    L2ERC721Bridge <-->|sends/receives messages| L2CrossDomainMessenger
    GasPriceOracle -.->|queries| L1Block
    L2CrossDomainMessenger -->|sends messages| L2ToL1MessagePasser

    classDef extContracts stroke:#ff9,stroke-width:2px;
    classDef l2Contracts stroke:#bbf,stroke-width:2px;
    classDef transactions stroke:#fba,stroke-width:2px;
    classDef l2Node stroke:#f9a,stroke-width:2px;

    class ExternalERC20,ExternalERC721 extContracts;
    class L2CrossDomainMessenger,L2ToL1MessagePasser,L2StandardBridge,L2ERC721Bridge l2Contracts;
    class L1Block,L1FeeVault,BaseFeeVault,SequencerFeeVault,GasPriceOracle l2Contracts;
    class UserTransaction,DepositTransaction transactions;
    class L2Node l2Node;
```

#### 核心L2智能合同的说明

-   被强调为"L2系统合同"的合同,作为链导过程的一部分被自动更新或变换. 用户通常不会直接变更这些合同,除非 `FeeVault` (c) 任何用户可能触发将收取的费用撤回到预先确定的退出地址的合同.
-   坐在后面的聪明合同 `Proxy` 合同为 **在BLUE中突出显示**。参考 [智能合同代理](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-smart-contract-proxies) ,以了解这些代词是如何设计的.
-   “L2 Bridge Contracts”的用户互动从这个图中省略了,但基本上沿用了结构图中描述的用户互动 [核心L1智能合同](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/#readme-core-l1-smart-contracts)。 。 。 .

### 智能合同代理

大多数L1和L2智能合同 OP Stack链今天坐后 `Proxy` 合同本身由a/ `ProxyAdmin` 合同. 这个 `ProxyAdmin` 合同由某些人控制 `owner` 地址可以是任何EOA或智能合同. 下面你会找到一个图表来解释典型代理合同的行为.

```mermaid
graph LR
    ProxyAdminOwner(Proxy Admin Owner)
    ProxyAdmin(<a href="https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/ProxyAdmin.sol">ProxyAdmin</a>)

    subgraph "Logical Smart Contract"
        Proxy(<a href="https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/Proxy.sol">Proxy</a>)
        Implementation(Implementation)
    end

    ProxyAdminOwner -->|manages| ProxyAdmin
    ProxyAdmin -->|upgrades| Proxy
    Proxy -->|delegatecall| Implementation

    classDef l1Contracts stroke:#bbf,stroke-width:2px;
    classDef systemUser stroke:#f9a,stroke-width:2px;
    class Proxy l1Contracts;
    class ProxyAdminOwner systemUser;
```

## 外部用法

### 统一使用OP堆栈合同

OP Stack智能合同向国家预防机制发布,可通过下列方式安装:

```sh
npm install @eth-optimism/contracts-bedrock.
```

参见 [优化开发者 Docs](https://docs.optimism.io/builders/dapp-developers/contracts/system-contracts#using-system-contracts-in-solidity) 以获取关于如何使用此软件包的更多信息.

### 在 JavaScript 中使用 OP Stack 合同

Contract ABIs和地址以单独的包形式发布给国家预防机制,可通过下列方式安装:

```sh
npm install @eth-optimism/contracts-ts
```

参见 [优化开发者 Docs](https://docs.optimism.io/builders/dapp-developers/contracts/system-contracts#using-system-contracts-in-javascript) 以获取关于如何使用此软件包的更多信息.

### 已部署地址

见 [优化开发者 Docs](https://docs.optimism.io/chain/addresses) 这些智能合同的地址 OP Mainnet和OP Sepolia.

## 捐款

### 贡献指南

对OP Stack的贡献始终受到欢迎. 请参看 [捐款额](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/CONTRIBUTING.md) 关于如何为OP Stack智能合同做出贡献的更多信息.

### 样式指南

OP Stack智能合同应当按照 [(简体中文). md](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/STYLE_GUIDE.md) 在此仓库中找到 . 保持一致的代码风格使得代码更容易被审查和维护,最终使开发过程更加安全.

## 部署

使用 `foundry` 带有 `hardhat-deploy` 相容层. 当合同部署时, 将临时文件写入磁盘,然后将其格式化为 `hardhat-deploy` 通过调用另一个脚本来调用样式文物 .

地址载于 `deployments` 目录将根据后端的链式id被读入脚本. 要手动定义脚本中使用的地址集,请设置 `CONTRACT_ADDRESSES_PATH` 进入当地一条道路 文件系统指向一个充满密钥值对的 JSON 文件,其中密钥为合同名称和 数值是地址。 这和JSON的文件很合用 `superchain-ops`。 。 。 .

### 配置

创建或修改文件 `<network-name>.json` 内部 [`deploy-config`](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/deploy-config/) 文件夹. 使用环境 var `DEPLOY_CONFIG_PATH` 在运行时使用特定配置文件.

#### 自定义气体托肯

Custom Gas Token特性是麻省理工学院许可的OP Stack的一个Beta特性. 虽然它已收到核心贡献者的初步审查,但它仍在测试中,可能存在错误或其他问题.

### 执行

在部署合同之前,您可以使用 `runWithStateDiff()` 产生内部输出的函数签名 [`snapshots/state-diff/`](https://npmcn.com/package/%40eth-optimism/contracts-bedrock/snapshots/state-diff)。 。 。 . 通过执行 : `forge script -vvv scripts/Deploy.s.sol:Deploy --sig 'runWithStateDiff()' --rpc-url $ETH_RPC_URL --broadcast --private-key $PRIVATE_KEY`。 。 。 .

1.  设入地 vars `ETH_RPC_URL`, (中文(简体) ), `PRIVATE_KEY` 财务报告和审定财务报表 `ETHERSCAN_API_KEY` 如果需要核查合同.
2.  设定 `DEPLOY_CONFIG_PATH` env var 到文件系统中指向部署配置的路径.
3.  与 `forge script -vvv scripts/Deploy.s.sol:Deploy --rpc-url $ETH_RPC_URL --broadcast --private-key $PRIVATE_KEY` 通过 `--verify` 旗下可自动与 Etherscan 验证部署.

### 部署单一合同

部署单一合同的所有职能是: `public` 意思是说 `--sig` 参数到 `forge script` 可用于 以部署单一合同为目标.

## 测试

### 测试设置

固态单元测试使用相同的密码来设置生产中使用的状态. 同样的L1部署脚本用于部署L1内存测试合同 并且L2状态的设置使用相同的L2起源生成代码,用于生产,然后通过铸造 `vm.loadAllocs` 作弊码。 这有帮助 减少维持多种方式来建立国家的间接费用,并增加合同部署的“实际”方式的覆盖面.

L1合同地址为: `deployments/hardhat/.deploy` l2 测试状态在 `.testdata` 目录。 L1 地址用于创建 L2 状态 并且可以将已死地址拉入L2状态,导致测试失败. 如果 L1 部署顺序不同, 可能会出现 Stale 地址 由于一些合同是使用 `CREATE`运行 `pnpm clean` 如果测试因不明原因失败,则重新运行.

### 静态分析

`contracts-bedrock` 用途 [剪线](https://github.com/crytic/slither) 作为其主要的静态分析工具. 斯利特将作为CI的一部分对公关进行查处,并将报告新的调查结果,作为对公关的评论. 如果出现Repo设置中配置的中度或更高度的新发现, CI 将会失败 > 代码安全分析 > 代码扫描 > 保护规则设置.

CI中有两个对应的工作:一个叫"Slither Analysis",一个叫"Code sclassing results / Slither". 如果斯利特成功运行,前者将永远通过,如果有任何中等或更严重的新发现,后者将失败.

现有发现见repo的安全标签 > [代码扫描](https://github.com/ethereum-optimism/optimism/security/code-scanning) 节. 您可以使用 `pr:{number}` 过滤器, 如 [`pr:9405`](https://github.com/ethereum-optimism/optimism/security/code-scanning?query=is:open+pr:9405)。 。 。 .

对于每个发现,要么在本地进行修复并推进新的承诺,要么通过PR评论的UI予以驳回.

注意您可以通过运行在本地运行 slider `slither .`,但因为它并不包含 GitHub 的三分结果,所以会很吵. 相反,你应该跑 `slither ./path/to/contract.sol` 运行到特定文件.

## 常见问题

### @eth-optimism/contracts-bedrock 是什么？

乐观光谱合同

### 如何安装 @eth-optimism/contracts-bedrock？

在项目目录运行 npm install @eth-optimism/contracts-bedrock，或使用 pnpm add / yarn add / bun add。

### @eth-optimism/contracts-bedrock 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/eth-optimism\_\_contracts-bedrock 是否存在。

### @eth-optimism/contracts-bedrock 可以商用吗？

@eth-optimism/contracts-bedrock 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @eth-optimism/contracts-bedrock 的下载量有多少？

根据 npm 官方下载统计，@eth-optimism/contracts-bedrock 在 2026/10/14 – 2026/11/12 这 30 天内被下载 349,099 次，日均约 11,637 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @eth-optimism/contracts-bedrock 还在维护吗？

最新版本 0\.17\.3 发布于 2024/05/30（2 年前）；至今共发布 213 个版本，其中过去 12 个月发布了 0 个；首次发布于 2022/06/03。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

