ethereum-optimism/optimism

GitHub: ethereum-optimism/optimism

以太坊 Optimistic Rollup 扩容方案的完整 OP Stack 实现,提供从共识层客户端、批量提交器、故障证明到智能合约的全套 Layer 2 基础设施组件。

Stars: 6422 | Forks: 3946



Optimism

Optimism is Ethereum, scaled.


**目录** - [什么是 Optimism?](#what-is-optimism) - [文档](#documentation) - [规范](#specification) - [社区](#community) - [贡献](#contributing) - [安全策略与漏洞报告](#security-policy-and-vulnerability-reporting) - [目录结构](#directory-structure) - [开发与发布流程](#development-and-release-process) - [概述](#overview) - [生产版本发布](#production-releases) - [开发分支](#development-branch) - [许可证](#license) ## 什么是 Optimism? [Optimism](https://www.optimism.io/) 是一个致力于扩展以太坊技术并增强其协调全球人员能力,以构建高效去中心化经济和治理系统的项目。[Optimism Collective](https://www.optimism.io/vision) 构建为可扩展区块链提供动力的开源软件,旨在解决更广泛的以太坊生态系统中的关键治理和经济挑战。Optimism 的运行原则是 **影响=利润**,即对 Collective 产生积极影响的个人应获得相应的利润回报。**改变激励机制,就能改变世界。** 在这个代码库中,您会找到 OP Stack 的众多核心组件,这是由 Optimism Collective 维护的去中心化软件栈,它为 Optimism 提供动力,并构成了 [OP Mainnet](https://explorer.optimism.io/) 和 [Base](https://base.org) 等区块链的骨干。OP Stack 的设计理念是极度开放源代码 —— 欢迎您探索、修改和扩展这些代码。 ## 文档 - 如果您想在 OP Mainnet 之上进行构建,请参阅 [Optimism 文档](https://docs.optimism.io) - 如果您想构建自己的基于 OP Stack 的区块链,请参阅 [OP Stack 指南](https://docs.optimism.io/stack/getting-started),并确保了解本代码库的 [开发与发布流程](#development-and-release-process) ## 规范 有关 OP Stack 的详细规范可以在 [OP Stack Specs](https://github.com/ethereum-optimism/specs) 代码库中找到。 ## 安全策略与漏洞报告 有关如何报告此代码库中漏洞的详细信息,请参阅权威的 [安全策略](https://github.com/ethereum-optimism/.github/blob/master/SECURITY.md) 文档。 鼓励漏洞赏金猎人查看 [Optimism Immunefi 漏洞赏金计划](https://immunefi.com/bounty/optimism/)。 Optimism Immunefi 计划为范围内的严重漏洞提供高达 $2,000,042 的奖励。 ## 目录结构

├── cannon: 用于故障证明的链上 MIPS 指令模拟器

├── docs: 包含审计和事后分析的文档集合

│   └── public-docs: docs.optimism.io 的公开开发者文档

├── op-acceptance-tests: OP Stack 的验收测试和配置

├── op-alt-da: 替代数据可用性模式(测试版)

├── op-batcher: L2-Batch 提交器,将批次捆绑提交到 L1

├── op-chain-ops: 状态手术实用工具

├── op-challenger: 争议游戏挑战代理

├── op-conductor: 高可用排序器服务

├── op-deployer: 用于部署和升级 OP Stack 智能合约的 CLI 工具

├── op-devstack: 用于集成和验收测试的灵活测试前端

├── op-dispute-mon: 用于监控争议游戏的链下服务

├── op-dripper: 受控代币分发服务

├── op-e2e: Go 语言中所有 bedrock 组件的端到端测试

├── op-faucet: 支持多链的开发水龙头

├── op-fetcher: 数据获取实用工具

├── op-interop-mon: 互操作性监控服务

├── op-node: Rollup 共识层客户端

├── op-preimage: Preimage Oracle 的 Go 绑定

├── op-program: 故障证明程序

├── op-proposer: L2-Output 提交器,将提案提交到 L1

├── op-service: 通用代码库实用工具

├── op-supervisor: 监控链并确定跨链消息安全性的服务

├── op-sync-tester: 同步测试实用工具

├── op-test-sequencer: 用于开发的测试排序器

├── op-up: 部署和管理实用工具

├── op-validator: 用于验证 Optimism 链配置和部署的工具

├── op-wheel: 数据库实用工具

├── ops: 各种运维包

├── packages

│   ├── contracts-bedrock: OP Stack 智能合约

## 开发与发布流程

### 概述

如果您打算 fork 本代码库或频繁向其提交 PR,请仔细阅读本节。

### 生产版本发布

生产版本的发布始终是标签,版本格式为 `/v`。

例如,`op-node` 的发布版本可能是 `op-node/v1.1.2`,而智能合约的发布版本可能是 `op-contracts/v1.0.0`。

发布候选版本的格式为 `op-node/v1.1.2-rc.1`。

我们总是从 `rc.1` 开始,而不是 `rc`。

对于合约发布,请参阅特定版本的 GitHub 发布说明,其中会列出正在发布的具体合约。并非所有合约在发布时都被视为生产就绪,许多合约仍在积极开发中。

格式为 `v` 的标签(例如 `v1.1.4`)仅表示所有 Go 代码的发布,且 **不** 包含智能合约。

这种命名方案是 Golang 要求的。

在上述列表中,这意味着这些 `v` 版本包含所有 `op-*` 组件,并排除所有 `contracts-*` 组件。

`op-geth` 将上游 geth 的版本嵌入到其自身版本中,格式如下:`vMAJOR.GETH_MAJOR GETH_MINOR GETH_PATCH.PATCH`。

基本上,geth 的版本就是我们的次要版本。

例如,如果 geth 版本为 `v1.12.0`,则相应的 op-geth 版本将为 `v1.101200.0`。

请注意,对于 geth 的次要版本,我们将其填充至三个字符,对于 geth 的补丁版本,填充至两个字符。

由于我们无法使用零进行左侧填充,因此 geth 的主要版本未作填充。

有关最新节点组件发布的更多信息,请参阅文档中的 [节点软件发布](https://docs.optimism.io/builders/node-operators/releases) 页面。

拥有发布版本的完整组件集为:

- `op-batcher`
- `op-contracts`
- `op-challenger`
- `op-node`
- `op-proposer`

所有其他组件和包应仅被视为开发组件,不进行发布。

### 开发分支

主要的开发分支是 [`develop`](https://github.com/ethereum-optimism/optimism/tree/develop/)。

`develop` 包含了最新的软件,且与最新的实验性[网络部署](https://docs.optimism.io/chain/networks)保持向后兼容。

如果您要进行向后兼容的更改,请将您的拉取请求指向 `develop`。

**对 `packages/contracts-bedrock/src` 中合约的更改通常不被视为向后兼容。**

此规则存在一些例外情况,即在我们绝对必须在一个标签已经完全部署之后部署某些新合约时。

如果您正在更改或添加合约,并且不确定应向哪个分支提交 PR,请默认使用功能分支。

当两个涉及相同代码的项目发生冲突时,通常会使用功能分支,以避免两者都合并到 `develop` 时产生冲突。

## 下载和浅克隆 Monorepo

如果您想将 monorepo 用作依赖项(例如在 CI 中),可以通过直接从 Github 将其作为存档下载而不是作为 git 仓库克隆,或者进行浅克隆,从而极大地加快获取过程。

这避免了下载完整的 monorepo git 历史记录,遗憾的是其大小有几个 GB,但这在许多用例(如 CI)中也是不需要的。

要获取特定提交/分支/标签 `$REF` 处的 monorepo,请使用以下命令下载并解压


```
curl -L https://github.com/ethereum-optimism/optimism/archive/$REF.tar.gz | tar xz
```


请注意,如果您需要其任何子模块,则还需要手动下载它们。

如果您想对最新的 `develop` 进行浅 git 克隆,只需执行


```
git clone --depth 1 --shallow-submodules https://github.com/ethereum-optimism/optimism.git
```


在良好的网络连接下,这只需几秒钟。

如果您想浅克隆特定的分支或标签 `$REF`,请执行


```
git clone --no-checkout --depth 1 --shallow-submodules https://github.com/ethereum-optimism/optimism.git

cd optimism

git fetch --depth 1 origin "$REF"

git checkout "$REF"
```


这也应该只需几秒钟。

## 许可证

除非另有说明,本代码库中的所有其他文件均按 [MIT 许可证](https://github.com/ethereum-optimism/optimism/blob/master/LICENSE) 授权。
标签:Base链, EVTX分析, Layer 2, OP Stack, Optimism, Optimistic Rollup, Rollup, Web3, 代币经济学, 以太坊, 公链, 加密货币, 区块链, 区块链基础设施, 去中心化, 去中心化治理, 去中心化经济, 开源, 扩容, 扩容解决方案, 日志审计, 智能合约