内容丨Ray
编辑 & 排版丨Yewlne、环环
以太坊的单独质押(Solo Staking)是保护网络安全和去中心化的黄金标准。通过运行自己的验证者节点,您可以直接参与网络共识,获得完整的质押奖励,并保持对资金的完全控制。本教程将为您提供详细的指导,帮助您在家中部署以太坊单独质押节点,确保安全性和稳定性。
首先,我们需要有这样的一个基本概念:要处理来自执行层的传入验证器存款,您需要运行执行客户端以及共识客户端。这意味着我们至少需要部署两个客户端程序(在本教程中,为三个,共识客户端按照功能进行了拆分)。
如果想了解更多执行客户端和共识客户端的差异及功能职责,可以点击阅读:
以太坊生态的客户端种类非常丰富,执行客户端和共识客户端都有多种不同语言的实现,如使用 Go 语言实现的 Geth, 使用 Rust 语言实现的 Reth 等。你可以根据自己喜好,选择不同的客户端,整体流程是类似的,只是不同客户端实现涉及的命令不同。在这里,我们不能对所有的客户端都面面俱到的给出部署教程,教程内选择的是 Reth 作为执行客户端(纯属个人喜好,不做性能最优保证)。
另外,教程选用了从源码编译的方式进行部署,实际上基本每个客户端都提供了基于 docker 的部署方式,你可以自行选择。不过个人推荐使用源码编译的方式进行,它有利于在遇到问题且文档没有提供有效帮助时,可以通过查看源代码来寻找问题产生的原因并解决问题。
1)build-essential
sudo apt install build-essential
2)gcc, g++, make, cmake, clang
sudo apt install gcc g++ make cmake clang
3)Rust
curl --proto '=https' --tlsv1.2 -sSf| sh
1)下载 Reth 源代码
git clone <https://github.com/paradigmxyz/reth>cd reth
2)切换成 v1.1.1 版本
git checkout v1.1.1
3)编译并安装 Reth
可执行程序
cargo install --locked --path bin/reth --bin reth
编译完成后,可以通过命令行以 reth 的形式访问二进制文件,并且该二进制文件存在于默认的 .cargo/bin 文件夹下。
1)以全节点的方式运行Reth
reth node --full
执行输出如下:
图中画红圈的三个路径可以留意一下。其分别代表:
区块数据存储目录
Reth 的节点运行配置
JWT 认证文件
其中 JWT 认证文件,在运行共识客户端时,也需要指定为这一个路径。
另外,当你停止程序运行时,你会看到这样一行输出:
^C2024-11-08T06:21:58.643464Z INFO Wrote network peers to file peers_file="/root/.local/share/reth/mainnet/known-peers.json"
该文件记录当前发现的一些已知道节点,内容示例如下:
2)启动 Holesky 测试网的节点
目前 Reth
从命令行级别直接支持的网络有:
mainnet,sepolia,holesky,dev
其中 mainnet
为主网,holesky
为 ETH Sepolia
测试网络,dev
为本地网络。
运行以下命令启动 holesky
测试网络的全节点:
/path/to/secret 记得更换为自己的路径。从reth的输出中,可以获取到jwt.hex的具体路径。reth node --full --chain holesky \
--authrpc.jwtsecret /path/to/secret \
--authrpc.addr 127.0.0.1 \
--authrpc.port 8551 \
--metrics 127.0.0.1:9001
这里我们选择 Lighthouse
作为共识客户端,它同样使用 Rust 语言实现。
sudo apt update && sudo apt install -y git gcc g++ make cmake pkg-config llvm-dev libclang-dev clang
其中部分软件包我们在安装执行客户端时,已经安装了,可以剔除。
另外,Rust 的开发环境也是必须的,不过我们在上面已经安装了,所以这里没有列出来。
1)下载 Lighthouse 源代码
git clone https://github.com/sigp/lighthouse.git
cd lighthousecargo install --locked --path bin/reth --bin reth
2)切换为 stable 版本
git checkout stable
3)编译
make
和 Reth
一样,lighthouse
也支持多个网络,包含:
mainnet, holesky, sepolia, chiado, gnosis
这里我们必须选择和执行客户端同样网络,才能使得两者正确的协同工作。
执行以下命令启动 lighthouse 并设置为 holesky
网络:
/path/to/secret 记得使用和reth一样的jwt.hex路径
lighthouse bn --network holesky \
--checkpoint-sync-url https://holesky.beaconstate.info \
--execution-endpoint http://localhost:8551 \
--execution-jwt /path/to/secret
一旦共识客户端成功启动,在等待一小段时间后,在执行客户端 Reth
处,将看到类似日志:
此时,正在进行检查点的同步操作。一段时间后,将有以下输出:
这意味着 Reth
和 Lighthouse
协同成功。
在前面,我们通过 --metrics 127.0.0.1:9001
参数,开启了 Reth
的指标监控功能。
可以通过:
curl 127.0.0.1:9001
来验证,是否成功开启以及功能是否正常。它会输出很多的指标数据,不过这对于观察来说并不友好。我们需要安装 Prometheus 和 Grafana 来协助我们降低观察难度。
sudo apt install prometheus
grafana 不在官方的默认仓库中,因此需要额外添加一下源,然后再安装:
sudo wget -q -O - <https://packages.grafana.com/gpg.key> | sudo apt-key add -
echo "deb <https://packages.grafana.com/oss/deb> stable main" | sudo tee -a /etc/apt/sou
rces.list.d/grafana.listsudo apt-get update
sudo apt install grafana
sudo systemctl start prometheus
设置配置文件 & 解决端口占用问题:
这里可以使用 Reth
推荐的配置文件内容:
scrape_configs:
- job_name: reth
metrics_path: "/"
scrape_interval: 5s
static_configs:
- targets: ['reth:9001', 'localhost:9001', 'host.docker.internal:9001'] - job_name: ethereum-metrics-exporter
metrics_path: "/metrics"
scrape_interval: 5s
static_configs:
- targets: ['metrics-exporter:9091']
并将该内容写入 /opt/prometheus.yml
文件中(路径可以自由调整,在 prometheus.service 文件中同步调整即可)。
prometheus
默认运行在 :9090
端口。如果该端口被占用,可以自行修改 systemd
的配置文件来调整端口。
比如我的 prometheus.service
文件路径为:
/lib/systemd/system/prometheus.service
在该文件的的 ExecStart
配置项中,添加:
--config.file=/opt/prometheus.yml --web.listen-address=:9095
即可将服务端口设置为 9095。之后重新加载 systemd,然后再启动服务即可。
systemctl start grafana-server
grafana
的默认端口是 3000。再浏览器打开 ip:3000, 如果见到 grafana
页面就代表安装好了。
默认账号和密码都是 admin。登录后马上要求你改密码的。
1)添加刚才配置好的 Prometheus 作为数据源
操作路径为:Configuration -> Data Sources ->add data source -> Prometheus
注意设置这个端口为上面配置的对应端口号。
2)配置仪表板
要在 Grafana 中配置仪表板,请单击左上角的方块图标,然后单击“新建”,然后单击“导入”。从那里,单击“上传 JSON 文件”,然后选择中的示例文件reth/etc/grafana/dashboards/overview.json
最后,选择刚刚创建的 Prometheus 数据源,然后单击“导入”。
配置完成后的效果如下:
如果尚未连接到任何对等点,仪表板看起来将处于空状态,但一旦连接到对等点,您应该会看到它开始填充数据。
注意:需要准备 32 个 Holesky 网络的 ETH,才能完成下面的教程。
以太坊基金会提供了用于创建验证者密钥的 staking-deposit-cli
需要根据你自己的机器平台,下载对应的软件。
然后运行以下命令:
./deposit new-mnemonic
并按照说明生成密钥。当提示选择网络时,选择 holesky
来运行 Holesky 测试网验证器。在此过程中将生成一个新的助记符。基本上按照提示操作即可,最终成功运行时会出现如图提示:
重要提示:助记词(或种子短语)是在此过程中随机生成的 24 个单词的字符串。强烈建议记下助记词并离线保存。重要的是确保助记词永远不会以任何连接到互联网的数字形式(计算机、手机等)存储。还请对助记词进行一次或多次备份,以确保在数据丢失的情况下您的 ETH 不会丢失。保持助记词的私密性非常重要,因为它代表了您对 ETH 的最终控制权。
完成此步骤后,将创建文件 deposit_data-*.json
和 keystore-m_*.json
。从 staking-deposit-cli 生成的密钥可以很容易地加载到第三步中的 Lighthouse 验证器客户端(lighthouse vc
)中。事实上,这两个程序都是为相互配合而设计的。
顺便一提,在这个过程中会需要设置密码,这个密码需要记住,它在导入时需要输入。未来有不少操作,应该也需要用到这个密码。
启动的操作我们已经在上面完成了,主要是需要等待两个客户端之间的同步,并且需要追赶至主网最新高度。
运行以下命令,将刚刚生成的密钥导入 Lighthouse。
lighthouse --network holesky account validator import --directory /root/nodes/staking_deposit-cli-fdab65d-linux-amd64/validator_keys
别忘记替换为自己的本机路径。
另外,不要将同一个验证者密钥同于不同的客户端,否则将会受到惩罚。
导入密钥后,用户可以通过启动 Lighthouse 验证器客户端来开始执行其验证器职责:
lighthouse vc --network holesky --suggested-fee-recipient YourFeeRecipientAddress
别忘了将 YourFeeRecipientAddress 替换为你的收益接收地址。
当 lighthouse vc
启动时,检查验证者公钥是否出现作为 voting_pubkey
,如下所示:
INFO Enabled validator voting_pubkey: 0xa5e8702533f6d66422e042a0bf3471ab9b302ce115633fa6fdc5643f804b6b4f1c33baf95f125ec21969a3b1e0dd9e56
此日志出现(并且没有错误)后,lighthouse vc
应用程序 将确保验证人开始履行其职责并获得奖励 通过协议。
成功运行并同步执行客户端、信标节点和验证器客户端后,您现在可以继续提交存款。转到主网质押启动板
或测试网验证器的Holesky 质押启动板
并仔细完成成为验证器的步骤。准备就绪后,您可以通过向存款合约发送每个验证器 32 ETH 来提交存款。将步骤 1中生成的 deposit_data-*.json
文件上传到质押启动板。
Checklist 链接
请务必耐心的完成 CheckList, 这对于你的资产安全极其重要。
提交成为验证者交易后,尽管交易执行成功了,但验证者并不是立刻生效的。他需要一段等待时间,通常为 16 小时~一周的时间。可以根据使用 deposit_data-*.json
中的 pubkey,在 beaconcha.in 上查询进度。示例:
当等待期过了后,可以查看是否出于 Active 状态,出于 Active 状态即为成功。
验证器运行并履行职责后,保持验证器在线以继续累积奖励非常重要。但是,计算机、互联网或其他因素可能会出现问题,导致验证器离线。为此,最好订阅通知,例如通过beaconcha.in
它将发送有关错过的证明和/或提案的通知。您将收到有关验证器离线状态的通知,并能够迅速做出反应。
下一件重要的事情是及时了解 Lighthouse 和执行客户端的更新。更新会不时发布,通常每月发布一到两次。对于 Lighthouse 更新,您可以通过点击订阅 Github
Watch
上的通知。如果您只想收到新版本的通知,请选择 Custom
,然后选择 Releases
。
您还可以加入 Lighthouse Discord
我们会在有新版本发布时发布公告。
如果你还有兴趣,还可以尝试自己配置一个Siren
这是 Lighthouse 开发的用于监控验证器性能的 UI。
另外,验证者退出也有一个固定的流程,本教程尚未涉及,可以参考共识客户端的文档进行操作。异常的验证者退出流程可能导致资金损失,请务必仔细操作!
得益于以太坊客户端开发者的优秀工作,当你整体的跑了一遍教程,并进行了实际部署,你会发现,整个部署质押的流程并不复杂。欢迎尝试~~
另外,如果你想用于生产环境,请务必花费一些精力用于运维及监控的工作,它们对于保障你的资金安全非常重要(仅管单纯的离线惩罚非常低,但我想没有人会愿意接受莫名的损失)。配置好监控系统后,您不需要每天与它交互,只需要保持关注即可。祝您质押愉快!