erigontech/erigon
金融用 Go 实现的以太坊执行层节点,内置共识层,面向高效同步和大规模节点运维。
项目定位
Erigon 是以 Go 编写的以太坊执行层客户端,并内置可嵌入的共识层 Caplin。它的设计重心是批量处理区块和不可变文件存储,而不是传统键值数据库。这对运维意味着:Erigon3 同步时下载约 99% 的 LatestState 和历史,而不是从创世块重新执行;历史保留到单笔交易粒度;大部分数据存在 segment/snapshot 文件中,chaindata 可以删除后重新生成,状态目录可软链接或挂载到高速盘,历史放在便宜盘上(README 第 38-54 行)。
仓库 README 面向代码贡献者;实际运行节点所需的安装方式、参数、修剪模式、端口和质押说明在文档站和安装指南。
适用对象
- 需要为以太坊主网或 Gnosis Chain 运行执行层的节点运维者,可以搭配内置 Caplin,也可以外接 CL 客户端(JWT 与外接 CL 配置)。
- 验证者:支持出块,
--internalcl默认开启(README 第 67-76 行)。 - 基于 JSON-RPC、GraphQL 或 gRPC 接口开发的开发者(与 Erigon 交互),或需要把 RPC daemon 作为独立进程运行的场景(RPC daemon 文档)。
- 需要编译、测试和修改客户端本身的贡献者。
构建与运行
构建需要 Go >= 1.26、GCC 11+ 或 Clang 13+、64 位架构,Linux 内核需大于 v4。x86-64 构建以 x86-64-v2 为基线(需要 SSE4.2、POPCNT),更老的 CPU 不受支持(README 第 93-114 行)。
git clone https://github.com/erigontech/erigon.git
cd erigon
make erigon
编译产物位于 ./build/bin。可用 -j<n> 并行编译,make all 构建完整套件,make help 列出所有目标。要构建某个已发布版本而非 main,请切换到对应 tag。预编译二进制、Docker 镜像和各平台安装步骤见安装页;Windows 可原生编译或使用 WSL2(原生编译、WSL2)。
其余可执行文件包括 rpcdaemon、sentry、txpool、downloader、integration、evm 和 MCP server;make all 还会构建 caplin、capcli、snapshots、rpctest 和 pics(README 第 115-131 行)。若要以独立用户身份从 build/bin 运行,需要先安装,例如 make DIST=/opt/erigon install(README 第 181-189 行)。
测试目标:make test-short、make test-all、make test-fixtures-cl(另有 EEST 和 zkevm fixture 套件)和 make lint(README 第 132-143 行)。发布前的增量同步验证是另一项工作,见 docs/TESTING.md。
使用约束
- 同步和存储行为随版本变化:Erigon3 调整了历史粒度、不再存储 Logs(Receipts),历史交易改为重新执行,
--prune语义也有变化。修剪模式包括archive、full、blocks、minimal(修剪模式),完整参数见 CLI 参考。 - Caplin 默认启用;要外接共识层客户端需设置
--externalcl。 - 日志分开存放:downloader 的 torrent 客户端始终写入
logs/torrent.log,级别取--torrent.verbosity与 WARN 中更详细的一档(README 第 60-66 行)。 - 生产环境需要配置端口和防火墙,Hetzner 要求严格规则(防火墙说明)。
- 作为库使用时,应固定分支名或 commit hash,而不是 tag:
go get github.com/erigontech/erigon@main(README 第 144-150 行)。 - 许可证为 LGPL-3.0(COPYING)。
HotRepo 点评
Erigon 的价值在架构取舍而非表面包装:单交易粒度的历史、基于快照的同步、内置共识层,都是为大规模节点运行而非最小占用而做的选择。仓库现有 3,629 star、1,580 fork;2026-11-15 的 Go 语言日榜记录中当天新增 3 star,位列该语言榜第 10。这只是单日记录,不构成趋势,也没有更长时间序列可供判断热度走向。更值得注意的是大量运维文档和拆分为 rpcdaemon、sentry、txpool、downloader 的进程设计——这更适合需要分离组件、逐项调优的运维者。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。