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

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 临时文件(可以符号链接或挂载文件夹<datadir>/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=<your_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] <targetname>. 示例:.\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 <CL host>.

为了在共识层和执行层之间建立安全连接,会自动生成一个 JWT 密钥。

默认情况下,JWT 密钥将出现在数据目录中的名称下jwt.hex,其路径可以用标志指定--authrpc.jwtsecret

为了成功建立连接,这条信息也需要在共识层中指定。可以在此处找到更多信息。

Erigon 运行后,您需要将 CL 客户端指向运行<erigon address>:8551Erigon的设备的 IP 地址<erigon address>localhostIP 地址,同时指向 Erigon 创建的 JWT 秘密路径。

多实例/一台机器

定义 6 个标志以避免冲突:--datadir --port --http.port --authrpc.port --torrent.port --private.api.addr. 同一台机器上的多个链的示例:

# mainnet
./build/bin/erigon --datadir="<your_mainnet_data_path>" --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="<your_rinkeby_data_path>" --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 调用(ethdebug 、netweb3):

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

通过 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 对等上市
9090TCPgRPC 连接私人的
42069传输协议与传输协议快照同步(Bittorrent)上市
6060TCP指标或 Pprof私人的
8551TCP引擎 API(JWT 授权)私人的

通常,30303 和 30304 暴露在互联网上以允许传入的对等连接。9090 仅在内部为 rpcdaemon 或其他连接公开(例如 rpcdaemon -> erigon)。端口 8551(经过 JWT 身份验证)仅在内部公开,用于来自共识层节点的引擎 API JSON-RPC 查询。

RPC端口

港口协议目的暴露
8545TCPHTTP 和网络套接字私人的

通常,8545 仅在内部公开用于 JSON-RPC 查询。HTTP 和 WebSocket 连接都在同一个端口上。

sentry端口

港口协议目的暴露
30303传输协议与传输协议对等上市
9091TCPgRPC 连接私人的

通常,哨兵进程将运行一个 eth/xx 协议(例如 eth/66),并将在 30303 上暴露给互联网。端口 9091 用于内部 gRCP 连接(例如 erigon -> sentry)。

sentinel端口

港口协议目的暴露
4000UDP协议对等上市
4001TCP对等上市
7777TCPgRPC 连接私人的

其他港口

港口协议目的暴露
6060TCPpprof私人的
6060TCP指标私人的

可以启用启用 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 <pid>,获取跟踪并停止:kill -6 <pid>
  • 获取 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北纬32.6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值