Erigon 是 Ethereum(执行客户端)的一个实现,在效率前沿,用 Go 编写。
系统要求
用法
主要特征
文档
常问问题
取得联系
已知的问题
注意!In-depth links are marked by the microscope sign ()
免责声明:该软件目前是技术预览版。我们将尽最大努力保持它的稳定并且不进行重大更改,但我们不保证任何事情。事情可以而且将会破裂。
Alpha/Beta Designation has been discontinued. For release version numbering, please see this blog post
对于以太坊主网的存档节点,我们建议 >=3TB 存储空间:1.8TB 状态(截至 2022 年 3 月),200GB 临时文件(可以符号链接或挂载文件夹
到另一个磁盘)。以太坊主网全节点(见--prune*
标志):400Gb(2022 年 4 月)。
Goerli 全节点(见--prune*
标志):Beta 版 189GB,Alpha 版 114GB(2022 年 4 月)。
BSC 档案:7TB。BSC 全:1TB。
Polygon 主网存档:5TB。多边形孟买档案:1TB。
SSD 或 NVMe。不推荐 HDD - 在 HDD 上 Erigon 将始终在链尖后面停留 N 个块,但不会落后。请记住,SSD 性能在接近容量时会下降。
RAM:>=16GB,64 位架构。
Golang 版本 >= 1.18。
海湾合作委员会 10+。
more details on disk storage here and here.
用于构建最新的稳定版本(这适用于大多数只想运行节点的用户):
git clone --branch stable --single-branch https://github.com/ledgerwatch/erigon.git
cd erigon
make erigon
./build/bin/erigon
您可以查看发行列表以获取发行说明。
构建前沿开发分支:
git clone --recurse-submodules https://github.com/ledgerwatch/erigon.git
cd erigon
git checkout devel
make erigon
./build/bin/erigon
, ,的默认--snapshots
值。其他网络现在有默认. 通过 flag 提高下载速度。mainnet
goerli
bsc
--snapshots=false
--torrent.download.rate=20mb
See Downloader docs
用于--datadir
选择存储数据的位置。
用于--chain=bor-mainnet
Polygon 主网和--chain=mumbai
Polygon 孟买。
运行make help
将列出并描述Makefile中可用的便利命令。
标志:
verbosity
log.console.verbosity
(覆盖别名verbosity
)log.json
log.console.json
(别名log.json
)log.dir.path
log.dir.verbosity
log.dir.json
为了只记录到 stdout/stderr,--verbosity
(或log.console.verbosity
)标志可用于提供指定最高输出日志级别的 int 值:
LvlCrit = 0
LvlError = 1
LvlWarn = 2
LvlInfo = 3
LvlDebug = 4
LvlTrace = 5
要为磁盘上收集的日志设置输出目录,请设置--log.dir.path
. 该标志--log.dir.verbosity
也可用于控制此日志记录的详细程度,具有与上面相同的 int 值,或字符串值,例如 'debug' 或 'info'。对于磁盘日志记录,默认详细程度为“调试”(4)。
日志格式可以通过使用布尔标志log.json
or设置为 json log.console.json
,或者用于磁盘输出--log.dir.json
。
默认情况下,Erigon 是“多合一二进制”解决方案,但可以将 TxPool 作为单独的进程启动。同样适用于:JSON RPC 层 (RPCDaemon)、p2p 层 (Sentry)、历史下载层 (Downloader)、共识。不要将服务作为单独的进程启动,除非您有明确的理由:资源限制、规模、由您自己的实现替换、安全性。如何将 Erigon 的服务作为单独的进程启动,请参阅docker-compose.yml。
默认情况下,在以太坊主网、Görli 和 Sepolia 上,引擎 API 被禁用,以支持 Erigon 原生嵌入式共识层。如果您想使用外部共识层,请使用 flag 运行 Erigon --externalcl
。 警告:嵌入式 CL 无法进行质押(块生产)——请--externalcl
改用。
有一个可选阶段可以通过标志启用:
--watch-the-burn
, 启用 WatchTheBurn 阶段,跟踪 ETH 发行并需要使用erigon_watchTheBurn
。如果您想尝试一下 Erigon,但您的驱动器上没有 2TB 的备用空间,一个不错的选择是开始同步公共测试网之一 Görli。它同步得更快,并且不占用太多磁盘空间:
git clone --recurse-submodules -j8 https://github.com/ledgerwatch/erigon.git
cd erigon
make erigon
./build/bin/erigon --datadir= --chain=goerli
请注意--datadir
允许您将 Erigon 文件存储在非默认位置的选项,在本例中goerli
为当前目录的子目录。目录名称--datadir
不必与--chain
.
免责声明:不支持/测试多边形网络(进行中)
仅支持远程矿工。
--mine --miner.etherbase=...
或--mine --miner.miner.sigkey=...
标记。--miner.extradata
, --miner.notify
, --miner.gaslimit
, --miner.gasprice
,--miner.gastarget
Detailed mining explanation is here.
Windows 用户可以通过 3 种可能的方式运行 erigon:
wmake.ps1
使用提供的PowerShell 脚本为 Windows 本地构建可执行二进制文件。使用语法与命令相同,make
因此您必须运行.\wmake.ps1 [-target]
. 示例:.\wmake.ps1 erigon
构建 erigon 可执行文件。所有二进制文件都放在.\build\bin\
子文件夹中。在 Windows 上成功进行本机构建有一些要求:
chocolatey
包管理器 - 请参阅以下内容).\wmake.ps1 db-tools
),则必须安装适用于 Windows 的Chocolatey 程序包管理器。By Chocolatey 你需要安装以下组件:cmake
, make
, mingw
by choco install cmake make mingw
。确保 Windows 系统“路径”变量具有:C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin关于反病毒的重要说明 在 MinGW 的编译器检测阶段,会生成一些临时可执行文件来测试编译器功能。据报道,某些防病毒程序检测到这些文件可能已被Win64/Kryptic.CIS
特洛伊木马(或其变体)感染。尽管这些都是误报,但我们无法控制 100 多家 Windows 安全产品供应商及其各自的检测算法,我们知道这可能会让您的 Windows 构建体验感到不舒服。要解决此问题,您可以为您的防病毒软件专门针对build\bin\mdbx\CMakeFiles
克隆存储库的子文件夹设置排除项,或者您可以使用以下其他两个选项运行 erigon
使用 Docker:参见docker-compose.yml
严格在版本 2 上使用 WSL(适用于 Linux 的 Windows 子系统)。在此选项下,您可以像在常规 Linux 发行版上一样构建 Erigon。您也可以将您的数据指向任何已安装的 Windows 分区(例如/mnt/c/[...]
,/mnt/d/[...]
等),但在这种情况下,请注意性能会受到影响:这是因为这些安装点使用DrvFS
的是网络文件系统 ,此外,MDBX锁定数据库以进行独占访问,这意味着一次只有一个进程可以访问数据。rpcdaemon
这对必须配置为远程数据库的运行产生影响,即使它是在同一台计算机上执行的。相反,如果您的数据托管在本机 Linux 文件系统上,则不受限制。 另请注意,默认 WSL2 环境有其自己的 IP 地址,与 Windows 主机的网络接口之一不匹配:在路由器上为端口 30303 配置 NAT 时请考虑这一点。
您可以通过带有标志的 YAML 或 TOML 配置文件设置 Erigon 标志--config
。在配置文件中设置的标志可以通过直接在 Erigon 命令行上写入标志来覆盖
`./build/bin/erigon --config ./config.yaml --chain=goerli
假设我们有chain : "mainnet" in our configuration file, by adding
--chain=goerli 允许覆盖 yaml 配置文件中的标志并将链设置为 goerli
设置 TOML 配置文件的示例
`datadir = 'your datadir'
port = 1111
chain = "mainnet"
http = true
"private.api.addr"="localhost:9090"
"http.api" = ["eth","debug","net"]
设置 YAML 配置文件的示例
datadir : 'your datadir'
port : 1111
chain : "mainnet"
http : true
private.api.addr : "localhost:9090"
http.api : ["eth","debug","net"]
Erigon 可用作共识层客户端 (CL) 的执行层 (EL)。默认配置没问题。
如果您的 CL 客户端在不同的设备上,请添加--authrpc.addr 0.0.0.0
(引擎 API默认在本地主机上侦听)以及--authrpc.vhosts
.
为了在共识层和执行层之间建立安全连接,会自动生成一个 JWT 密钥。
默认情况下,JWT 密钥将出现在数据目录中的名称下jwt.hex
,其路径可以用标志指定--authrpc.jwtsecret
。
为了成功建立连接,这条信息也需要在共识层中指定。可以在此处找到更多信息。
Erigon 运行后,您需要将 CL 客户端指向运行
Erigon的设备的 IP 地址
或localhost
IP 地址,同时指向 Erigon 创建的 JWT 秘密路径。
定义 6 个标志以避免冲突:--datadir --port --http.port --authrpc.port --torrent.port --private.api.addr
. 同一台机器上的多个链的示例:
# mainnet
./build/bin/erigon --datadir="" --chain=mainnet --port=30303 --http.port=8545 --authrpc.port=8551 --torrent.port=42069 --private.api.addr=127.0.0.1:9090 --http --ws --http.api=eth,debug,net,trace,web3,erigon
# rinkeby
./build/bin/erigon --datadir="" --chain=rinkeby --port=30304 --http.port=8546 --authrpc.port=8552 --torrent.port=42068 --private.api.addr=127.0.0.1:9091 --http --ws --http.api=eth,debug,net,trace,web3,erigon
如果有空格,请引用您的路径。
Detailed explanation is DEV_CHAIN.
See more detailed overview of functionality and current limitations. It is being updated on recurring basis.
平面 KV 存储。Erigon 使用键值数据库并以简单的方式存储帐户和存储。
See our detailed DB walkthrough here.
预处理。对于某些操作,Erigon 在将数据插入主数据库之前使用临时文件对数据进行预处理。这减少了写入放大,并且数据库插入速度快了几个数量级。
See our detailed ETL explanation here.
朴素的状态。
单一账户/状态特里。Erigon 对帐户和存储使用单个 Merkle trie。
Erigon 使用来自 Go-Ethereum的重新架构的完全同步算法,该算法分为“阶段”。
See more detailed explanation in the Staged Sync Readme
它使用相同的网络原语,并与使用完全同步的常规 go-ethereum 节点兼容,您不需要任何特殊的同步功能即可让 Erigon 进行同步。
在重新构想完全同步时,重点放在一起批处理数据并最大限度地减少数据库覆盖。如果你有足够快的网络连接和 SSD 驱动器,这使得在 2 天内同步以太坊主网成为可能。
阶段的例子是:
下载标题;
下载块体;
恢复发件人地址;
执行块;
为状态 Merkle trie 验证根哈希并构建中间哈希;
[...]
Erigon 的大部分组件(哨兵、txpool、快照下载器)都可以在 Erigon 内部作为独立进程运行。
启用内置 RPC 服务器:--http
和--ws
(与 http 共享相同的端口)
将 RPCDaemon 作为单独的进程运行:此守护进程可以使用本地数据库(运行 Erigon 或在数据库快照上)或远程数据库(在另一台服务器上运行)。 See RPC-Daemon docs
对于远程数据库
无论 RPC 守护进程与 Erigon 在同一台计算机上还是在不同的计算机上,这都有效。它们使用 TPC 套接字连接在它们之间传递数据。要使用此模式,请在一个终端窗口中运行 Erigon
make erigon
./build/bin/erigon --private.api.addr=localhost:9090 --http=false
make rpcdaemon
./build/bin/rpcdaemon --private.api.addr=localhost:9090 --http.api=eth,erigon,web3,net,debug,trace,txpool
gRPC 端口
9090
erigon, 9091
sentry,9092
共识引擎, 9093
torrent 下载器,9094
交易池
支持的 JSON-RPC 调用(eth、debug 、net、web3):
各命令的执行情况详见下表。
Docker 允许通过容器构建和运行 Erigon。这减轻了将构建依赖项安装到主机操作系统的需要。
可选:设置专用用户
用户 UID/GID 需要在主机操作系统和容器之间同步,以便使用正确的权限写入文件。
您可能希望在主机操作系统上设置专用用户/组,在这种情况下,以下make
目标可用。
# create "erigon" user
make user_linux
# or
make user_macos
环境变量
.env.example
回购的根目录中有一个文件。
DOCKER_UID
- docker用户的UIDDOCKER_GID
- docker 用户的 GIDXDG_DATA_HOME
- 将挂载到 docker 容器的数据目录如果未指定,UID/GID 将使用当前用户。
一个不错的选择XDG_DATA_HOME
是使用~erigon/.ethereum
帮助目标make user_linux
或创建的目录make user_macos
。
检查:权限
在所有情况下,XDG_DATA_HOME
(指定或默认)必须可由 docker 中的用户 UID/GID 写入,这将在构建时由DOCKER_UID
和确定。DOCKER_GID
如果由于权限问题导致构建或服务启动失败,请检查这些环境变量控制的所有目录、UID 和 GID 是否正确。
跑步
接下来命令启动:Erigon 在 30303 端口,rpcdaemon 在 8545 端口,prometheus 在 9090 端口,grafana 在 3000 端口。
#
# Will mount ~/.local/share/erigon to /home/erigon/.local/share/erigon inside container
#
make docker-compose
#
# or
#
# if you want to use a custom data directory
# or, if you want to use different uid/gid for a dedicated user
#
# To solve this, pass in the uid/gid parameters into the container.
#
# DOCKER_UID: the user id
# DOCKER_GID: the group id
# XDG_DATA_HOME: the data directory (default: ~/.local/share)
#
# Note: /preferred/data/folder must be read/writeable on host OS by user with UID/GID given
# if you followed above instructions
#
# Note: uid/gid syntax below will automatically use uid/gid of running user so this syntax
# is intended to be run via the dedicated user setup earlier
#
DOCKER_UID=$(id -u) DOCKER_GID=$(id -g) XDG_DATA_HOME=/preferred/data/folder DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose
#
# if you want to run the docker, but you are not logged in as the $ERIGON_USER
# then you'll need to adjust the syntax above to grab the correct uid/gid
#
# To run the command via another user, use
#
ERIGON_USER=erigon
sudo -u ${ERIGON_USER} DOCKER_UID=$(id -u ${ERIGON_USER}) DOCKER_GID=$(id -g ${ERIGON_USER}) XDG_DATA_HOME=~${ERIGON_USER}/.ethereum DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose
Makefile 为 erigon、prometheus 和 grafana 创建初始目录。PID 命名空间在 erigon 和 rpcdaemon 之间共享,这是从另一个进程(RPCDaemon 本地模式)打开 Erigon 的数据库所必需的。请参阅:https ://github.com/ledgerwatch/erigon/pull/2392/files
如果您的 docker 安装要求 docker 守护进程以 root 身份运行(默认情况下),您需要在上面的命令前加上sudo
. 但是,出于安全原因,有时建议以非 root 用户身份运行 docker(及其容器)。有关如何执行此操作的更多信息,请参阅 本文。
Windows 对 docker-compose 的支持还没有准备好。请帮助我们处理 .ps1 端口。
docker-compose up prometheus grafana
,详细文档.
默认情况下禁用。启用查看./build/bin/erigon --help
标志--prune
该./docs
目录包含许多有用但已过时的文档。对于位于该./cmd
目录中的代码,可以在./cmd/*/README.md
. 可以在 Erigon 博客中找到有关 Erigon 最新发展和事件的整理。
详细解释: ./docs/programmers_guide/ db_faq.md
erigon
端口
港口 | 协议 | 目的 | 暴露 |
---|---|---|---|
30303 | 传输协议与传输协议 | eth/66 对等 | 上市 |
30304 | 传输协议与传输协议 | eth/67 对等 | 上市 |
9090 | TCP | gRPC 连接 | 私人的 |
42069 | 传输协议与传输协议 | 快照同步(Bittorrent) | 上市 |
6060 | TCP | 指标或 Pprof | 私人的 |
8551 | TCP | 引擎 API(JWT 授权) | 私人的 |
通常,30303 和 30304 暴露在互联网上以允许传入的对等连接。9090 仅在内部为 rpcdaemon 或其他连接公开(例如 rpcdaemon -> erigon)。端口 8551(经过 JWT 身份验证)仅在内部公开,用于来自共识层节点的引擎 API JSON-RPC 查询。
RPC
端口
港口 | 协议 | 目的 | 暴露 |
---|---|---|---|
8545 | TCP | HTTP 和网络套接字 | 私人的 |
通常,8545 仅在内部公开用于 JSON-RPC 查询。HTTP 和 WebSocket 连接都在同一个端口上。
sentry
端口
港口 | 协议 | 目的 | 暴露 |
---|---|---|---|
30303 | 传输协议与传输协议 | 对等 | 上市 |
9091 | TCP | gRPC 连接 | 私人的 |
通常,哨兵进程将运行一个 eth/xx 协议(例如 eth/66),并将在 30303 上暴露给互联网。端口 9091 用于内部 gRCP 连接(例如 erigon -> sentry)。
sentinel
端口
港口 | 协议 | 目的 | 暴露 |
---|---|---|---|
4000 | UDP协议 | 对等 | 上市 |
4001 | TCP | 对等 | 上市 |
7777 | TCP | gRPC 连接 | 私人的 |
其他港口
港口 | 协议 | 目的 | 暴露 |
---|---|---|---|
6060 | TCP | pprof | 私人的 |
6060 | TCP | 指标 | 私人的 |
可以启用启用 pprof 或指标(或两者)的可选标志 - 但是,默认情况下它们都在 6060 上运行,因此如果您想同时运行两者,则必须更改其中一个。与二进制文件一起使用--help
以获取更多信息。
保留供将来使用:gRPC 端口:9092
共识引擎、9093
快照下载器、9094
TxPool
Hetzner 可能需要严格的防火墙规则,例如:
0.0.0.0/8 "This" Network RFC 1122, Section 3.2.1.3
10.0.0.0/8 Private-Use Networks RFC 1918
100.64.0.0/10 Carrier-Grade NAT (CGN) RFC 6598, Section 7
127.0.0.0/8 Loopback RFC 1122, Section 3.2.1.3
169.254.0.0/16 Link Local RFC 3927
172.16.0.0/12 Private-Use Networks RFC 1918
192.0.0.0/24 IETF Protocol Assignments RFC 5736
192.0.2.0/24 TEST-NET-1 RFC 5737
192.88.99.0/24 6to4 Relay Anycast RFC 3068
192.168.0.0/16 Private-Use Networks RFC 1918
198.18.0.0/15 Network Interconnect
Device Benchmark Testing RFC 2544
198.51.100.0/24 TEST-NET-2 RFC 5737
203.0.113.0/24 TEST-NET-3 RFC 5737
224.0.0.0/4 Multicast RFC 3171
240.0.0.0/4 Reserved for Future Use RFC 1112, Section 4
255.255.255.255/32 Limited Broadcast RFC 919, Section 7
RFC 922, Section 7
kill -SIGUSR1
,获取跟踪并停止:kill -6
--pprof flag
运行go tool pprof -png http://127.0.0.1:6060/debug/pprof/profile\?seconds\=20 > cpu.png
--pprof flag
运行go tool pprof -inuse_space -png http://127.0.0.1:6060/debug/pprof/heap > mem.png
Detailed explanation is here.
Docker 使用 UID/GID 为 1000 的用户 erigon(出于安全原因)。您可以在 Dockerfile 中看到正在创建此用户。可以通过授予主机用户文件夹所有权来修复,其中主机的用户 UID/GID 与 docker 的用户 UID/GID (1000) 相同。帖子中有更多详细信息
GitHub - mathMakesArt/Erigon-on-RPi-4: Step-by-step guide to running an Erigon archive node (Ethereum) on an 8GB Raspberry Pi 4. Recommended minimum 4 TB SSD (SATA III) with Ubuntu Server 21.
链接:GitHub - ledgerwatch/erigon: Ethereum implementation on the efficiency frontier