Erigon 最新执行客户端安装教程

Erigon 是 Ethereum(执行客户端)的一个实现,在效率前沿,用 Go 编写。

  • 系统要求

  • 用法

    • 入门
    • 记录
    • 测试网
    • 矿业
    • 视窗
    • GoDoc
    • 信标链
    • 开发链
  • 主要特征

    • 更高效的状态存储
    • 更快的初始同步
    • JSON-RPC 守护进程
    • 通过 docker-compose 运行所有组件
    • 格拉法纳仪表盘
  • 文档

  • 常问问题

  • 取得联系

    • Erigon Discord 服务器
    • 报告安全问题/疑虑
    • 团队
  • 已知的问题

    • htop显示不正确的内存使用情况

注意!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 临时文件(可以符号链接或挂载文件夹/temp到另一个磁盘)。以太坊主网全节点(见--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 提高下载速度。mainnetgoerlibsc--snapshots=false--torrent.download.rate=20mb See Downloader docs

用于--datadir选择存储数据的位置。

用于--chain=bor-mainnetPolygon 主网和--chain=mumbaiPolygon 孟买。

运行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.jsonor设置为 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
  • JSON-RPC 支持方法:eth_coinbase、eth_hashrate、eth_mining、eth_getWork、eth_submitWork、eth_submitHashrate
  • JSON-RPC 支持 websocket 方法:newPendingTransaction
  • 去做:
    • 我们还没有将挖出的区块广播到 p2p 网络,但这很容易实现
    • eth_newPendingTransactionFilter
    • eth_newBlockFilter
    • eth_new过滤器
    • 网络套接字日志

Detailed mining explanation is here.

视窗

Windows 用户可以通过 3 种可能的方式运行 erigon:

  • wmake.ps1使用提供的PowerShell 脚本为 Windows 本地构建可执行二进制文件。使用语法与命令相同,make因此您必须运行.\wmake.ps1 [-target] . 示例:.\wmake.ps1 erigon构建 erigon 可执行文件。所有二进制文件都放在.\build\bin\子文件夹中。在 Windows 上成功进行本机构建有一些要求:

    • 必须安装适用于 Windows 的Git 。如果您正在克隆此存储库,则很可能您已经拥有它
    • 必须安装GO 编程语言。最低要求版本为 1.18
    • GNU CC Compiler 至少版本 10(强烈建议您安装chocolatey包管理器 - 请参阅以下内容)
    • 如果您需要构建 MDBX 工具(即.\wmake.ps1 db-tools),则必须安装适用于 Windows 的Chocolatey 程序包管理器。By Chocolatey 你需要安装以下组件:cmakemakemingwby 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 时请考虑这一点。

使用 TOML 或 YAML 配置文件

您可以通过带有标志的 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

设置 TOML 配置文件的示例

`datadir = 'your datadir'
port = 1111
chain = "mainnet"
http = true
"private.api.addr"="localhost:9090"

"http.api" = ["eth","debug","net"]

YAML

设置 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 客户端指向运行:8551Erigon的设备的 IP 地址localhostIP 地址,同时指向 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 验证根哈希并构建中间哈希;

  • [...]

JSON-RPC 守护进程

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 端口

9090erigon, 9091sentry,9092共识引擎, 9093torrent 下载器,9094交易池

支持的 JSON-RPC 调用(eth、debug 、net、web3):

各命令的执行情况详见下表。

通过 docker-compose 运行所有组件

Docker 允许通过容器构建和运行 Erigon。这减轻了将构建依赖项安装到主机操作系统的需要。

可选:设置专用用户

用户 UID/GID 需要在主机操作系统和容器之间同步,以便使用正确的权限写入文件。

您可能希望在主机操作系统上设置专用用户/组,在这种情况下,以下make目标可用。

# create "erigon" user
make user_linux
# or
make user_macos

环境变量

.env.example回购的根目录中有一个文件。

  • DOCKER_UID- docker用户的UID
  • DOCKER_GID- docker 用户的 GID
  • XDG_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 最新发展和事件的整理。

常问问题

我需要多少内存

  • 基准(ext4 SSD):16Gb RAM 同步需要 6 天,32Gb - 5 天,64Gb - 4 天
  • +1 天“zfs 压缩=关闭”。+2 天“zfs compression=on”(2 倍压缩率)。在 btrfs 上 +3 天。
  • NVMe 上 -1 天

详细解释: ./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快照下载器、9094TxPool

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
  • 获取 CPU 分析:添加--pprof flag 运行go tool pprof -png http://127.0.0.1:6060/debug/pprof/profile\?seconds\=20 > cpu.png
  • 获取 RAM 分析:添加--pprof flag 运行go tool pprof -inuse_space -png http://127.0.0.1:6060/debug/pprof/heap > mem.png

如何运行本地devnet?

Detailed explanation is here.

Docker 权限错误

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

你可能感兴趣的:(以太坊,Erigon节点安装教程)