# 以太坊单独质押实战教程：手把手教你完成部署

By [LXDAO](https://paragraph.com/@lxdao) · 2024-12-11

---

![](https://storage.googleapis.com/papyrus_images/b907cb5816f98211799a8b3caedaaa6659f187f2019c7f6e37afa30ec4557920.png)

内容丨Ray

编辑 & 排版丨Yewlne、环环

**以太坊的单独质押（Solo Staking）是保护网络安全和去中心化的黄金标准。通过运行自己的验证者节点，您可以直接参与网络共识，获得完整的质押奖励，并保持对资金的完全控制。本教程将为您提供详细的指导，帮助您在家中部署以太坊单独质押节点，确保安全性和稳定性。**

**前提概要**
--------

首先，我们需要有这样的一个基本概念：要处理来自执行层的传入验证器存款，您需要运行执行客户端以及共识客户端。这意味着我们至少需要部署两个客户端程序（在本教程中，为三个，共识客户端按照功能进行了拆分）。

![](https://storage.googleapis.com/papyrus_images/e1469d715bf43f4e1bc3b0471e5105e3f6cf708cd0db5fee215d2040173c4acf.png)

![](https://storage.googleapis.com/papyrus_images/70bc1eacc466c42e2a1d3da8104630966d91d1a0cc51b95e99206b4ff05b4f3f.png)

如果想了解更多执行客户端和共识客户端的差异及功能职责，可以点击阅读：

[https://ethereum.org/zh/developers/docs/networking-layer/](https://ethereum.org/zh/developers/docs/networking-layer/)

**一、选择执行客户端**
-------------

以太坊生态的客户端种类非常丰富，执行客户端和共识客户端都有多种不同语言的实现，如使用 Go 语言实现的 Geth, 使用 Rust 语言实现的 Reth 等。你可以根据自己喜好，选择不同的客户端，整体流程是类似的，只是不同客户端实现涉及的命令不同。在这里，我们不能对所有的客户端都面面俱到的给出部署教程，教程内选择的是 Reth 作为执行客户端（纯属个人喜好，不做性能最优保证）。

另外，教程选用了从源码编译的方式进行部署，实际上基本每个客户端都提供了基于 docker 的部署方式，你可以自行选择。不过个人推荐使用源码编译的方式进行，它有利于在遇到问题且文档没有提供有效帮助时，可以通过查看源代码来寻找问题产生的原因并解决问题。

### **1\. 构建基础开发环境**

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
    

### **2\. 从源码构建执行程序**

1）下载 Reth 源代码

    git clone <https://github.com/paradigmxyz/reth>cd reth
    

2）切换成 v1.1.1 版本

3）编译并安装 `Reth` 可执行程序

    cargo install --locked --path bin/reth --bin reth
    

编译完成后，可以通过命令行以 reth 的形式访问二进制文件，并且该二进制文件存在于默认的 .cargo/bin 文件夹下。

### **3\. 启动Reth**

1）以全节点的方式运行Reth

    reth node --full
    

执行输出如下：

![](https://storage.googleapis.com/papyrus_images/a4ed5d89179f27005a38b71901b3657093a394b5c1a1867f008727c985d8aade.png)

图中画红圈的三个路径可以留意一下。其分别代表：

1.  区块数据存储目录
    
2.  Reth 的节点运行配置
    
3.  JWT 认证文件
    

其中 JWT 认证文件，在运行共识客户端时，也需要指定为这一个路径。

另外，当你停止程序运行时，你会看到这样一行输出：

    ^C2024-11-08T06:21:58.643464Z  INFO Wrote network peers to file peers_file="/root/.local/share/reth/mainnet/known-peers.json"
    

该文件记录当前发现的一些已知道节点，内容示例如下：

![](https://storage.googleapis.com/papyrus_images/1164e6fea14313811172d75b6a54628ab7df7338be3c5f025c4b16bf21a33475.png)

2）启动 Holesky 测试网的节点

目前 `Reth` 从命令行级别直接支持的网络有：

其中 `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 语言实现。

### **1\. 构建基础编译环境**

    sudo apt update && sudo apt install -y git gcc g++ make cmake pkg-config llvm-dev libclang-dev clang 
    

其中部分软件包我们在安装执行客户端时，已经安装了，可以剔除。

另外，Rust 的开发环境也是必须的，不过我们在上面已经安装了，所以这里没有列出来。

### **2\. 从源码构建执行程序**

1）下载 Lighthouse 源代码

    git clone https://github.com/sigp/lighthouse.git 
    cd lighthousecargo install --locked --path bin/reth --bin reth 
    

2）切换为 stable 版本

3）编译

    make
    

### **3\. 启动 Lighthouse**

和 `Reth` 一样，`lighthouse` 也支持多个网络，包含：

这里我们必须选择和执行客户端同样网络，才能使得两者正确的协同工作。

执行以下命令启动 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` 处，将看到类似日志：

![](https://storage.googleapis.com/papyrus_images/17293470d45f731d50b227f8084e41368a04bf44e87f935bbb06b9e921c6da9c.png)

此时，正在进行检查点的同步操作。一段时间后，将有以下输出：

![](https://storage.googleapis.com/papyrus_images/5d3650d58ee6f7b6c37bb323013155c38402c49dc71eca51b94801fe9b41f3b7.png)

这意味着 `Reth` 和 `Lighthouse` 协同成功。

**三、配置 Reth 的指标监控(可选)**
-----------------------

在前面，我们通过 `--metrics 127.0.0.1:9001` 参数，开启了 `Reth` 的指标监控功能。

可以通过：

来验证，是否成功开启以及功能是否正常。它会输出很多的指标数据，不过这对于观察来说并不友好。我们需要安装 Prometheus 和 Grafana 来协助我们降低观察难度。

### **1\. 安装 Prometheus 和 Grafana**

**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
    

### **2.启动 prometheus**

    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，然后再启动服务即可。

### **3.启动 grafana**

    systemctl start grafana-server
    

`grafana` 的默认端口是 3000。再浏览器打开 ip:3000， 如果见到 `grafana` 页面就代表安装好了。

默认账号和密码都是 admin。登录后马上要求你改密码的。

1）添加刚才配置好的 Prometheus 作为数据源

操作路径为：Configuration -> Data Sources ->add data source -> Prometheus

![](https://storage.googleapis.com/papyrus_images/c9b8b675e4566268246bc6cd0472d3544985a83e4f70567f0c4dedce499eae5f.png)

![](https://storage.googleapis.com/papyrus_images/65e16c56f977d5a2237d71ec7757be2aa087f9e39628bacf3a04aac3d3d1c1ca.png)

![](https://storage.googleapis.com/papyrus_images/d2b26d2c2cab74ee051c855e63eba6827aded6ac4e3d2309f14c030564774872.png)

**注意**设置这个端口为上面配置的对应端口号。

2）配置仪表板

要在 Grafana 中配置仪表板，请单击左上角的方块图标，然后单击“新建”，然后单击“导入”。从那里，单击“上传 JSON 文件”，然后选择中的示例文件`reth/etc/grafana/dashboards/overview.json`

[https://github.com/paradigmxyz/reth/blob/main/etc/grafana/dashboards/overview.json](https://github.com/paradigmxyz/reth/blob/main/etc/grafana/dashboards/overview.json)

最后，选择刚刚创建的 Prometheus 数据源，然后单击“导入”。

配置完成后的效果如下：

![](https://storage.googleapis.com/papyrus_images/2ffd28aa6ce8c6e9033a26b01ce12ede6145e7bcac8125dbbb3d57f216be1d86.png)

![](https://storage.googleapis.com/papyrus_images/0451634bc17f577ac209720bcfbc5e68220aeff23c435f22ec240f59296175f1.png)

如果尚未连接到任何对等点，仪表板看起来将处于空状态，但一旦连接到对等点，您应该会看到它开始填充数据。

**成为验证者**
---------

**注意**：需要准备 32 个 Holesky 网络的 ETH，才能完成下面的教程。

### **1.创建验证者密钥**

以太坊基金会提供了用于创建验证者密钥的 staking-deposit-cli

[https://github.com/ethereum/staking-deposit-cli/releases](https://github.com/ethereum/staking-deposit-cli/releases)

需要根据你自己的机器平台，下载对应的软件。

然后运行以下命令：

    ./deposit new-mnemonic
    

并按照说明生成密钥。当提示选择网络时，选择 `holesky` 来运行 Holesky 测试网验证器。在此过程中将生成一个新的助记符。基本上按照提示操作即可，最终成功运行时会出现如图提示：

![](https://storage.googleapis.com/papyrus_images/fc8bdcaae3a04934a8b6af7be023a26f77d948b27b7e113ded76754cc71587fd.png)

**重要提示**：助记词（或种子短语）是在此过程中随机生成的 24 个单词的字符串。强烈建议记下助记词并离线保存。重要的是确保助记词永远不会以任何连接到互联网的数字形式（计算机、手机等）存储。还请对助记词进行一次或多次备份，以确保在数据丢失的情况下您的 ETH 不会丢失。保持助记词的私密性非常重要，因为它代表了您对 ETH 的最终控制权。

完成此步骤后，将创建文件 `deposit_data-*.json` 和 `keystore-m_*.json`。从 staking-deposit-cli 生成的密钥可以很容易地加载到第三步中的 Lighthouse 验证器客户端（`lighthouse vc`）中。事实上，这两个程序都是为相互配合而设计的。

顺便一提，在这个过程中会需要设置密码，这个密码需要记住，它在导入时需要输入。未来有不少操作，应该也需要用到这个密码。

### **2.启动 Reth 和 Lighthouse 并等待同步**

启动的操作我们已经在上面完成了，主要是需要等待两个客户端之间的同步，并且需要追赶至主网最新高度。

### **3.将验证器密钥导入 Lighthouse**

运行以下命令，将刚刚生成的密钥导入 Lighthouse。

    lighthouse --network holesky account validator import --directory /root/nodes/staking_deposit-cli-fdab65d-linux-amd64/validator_keys
    

**别忘记替换为自己的本机路径。**

另外，不要将同一个验证者密钥同于不同的客户端，否则将会受到惩罚。

### **4.启动 Lighthouse 验证器客户端**

导入密钥后，用户可以通过启动 Lighthouse 验证器客户端来开始执行其验证器职责：

    lighthouse vc --network holesky --suggested-fee-recipient YourFeeRecipientAddress
    

**别忘了将 YourFeeRecipientAddress 替换为你的收益接收地址。**

当 `lighthouse vc` 启动时，检查验证者公钥是否出现作为 `voting_pubkey`，如下所示：

    INFO Enabled validator       voting_pubkey: 0xa5e8702533f6d66422e042a0bf3471ab9b302ce115633fa6fdc5643f804b6b4f1c33baf95f125ec21969a3b1e0dd9e56
    

此日志出现（并且没有错误）后，`lighthouse vc` 应用程序 将确保验证人开始履行其职责并获得奖励 通过协议。

### **5.提交押金**

成功运行并同步执行客户端、信标节点和验证器客户端后，您现在可以继续提交存款。转到主网**质押启动板** 

[https://launchpad.ethereum.org/en/](https://launchpad.ethereum.org/en/)

或测试网验证器的**Holesky 质押启动板**

[https://holesky.launchpad.ethereum.org/en/](https://holesky.launchpad.ethereum.org/en/)

并仔细完成成为验证器的步骤。准备就绪后，您可以通过向存款合约发送每个验证器 32 ETH 来提交存款。将步骤 1中生成的 `deposit_data-*.json` 文件上传到质押启动板。

### **6.完成质押启动板的CheckList**

Checklist 链接

[https://holesky.launchpad.ethereum.org/en/checklist/#section-three](https://holesky.launchpad.ethereum.org/en/checklist/#section-three)

**请务必耐心的完成 CheckList, 这对于你的资产安全极其重要**。

### **7.查看验证者生效进度**

提交成为验证者交易后，尽管交易执行成功了，但验证者并不是立刻生效的。他需要一段等待时间，通常为 16 小时~一周的时间。可以根据使用 `deposit_data-*.json` 中的 pubkey，在 beaconcha.in 上查询进度。示例：

[https://holesky.beaconcha.in/validator/8168b57546614075587aa0e53698477d95c6ebdbbd953109b1305a0773f66307d2a455fe7d99b8c1e5d0507999ed0340#deposits](https://holesky.beaconcha.in/validator/8168b57546614075587aa0e53698477d95c6ebdbbd953109b1305a0773f66307d2a455fe7d99b8c1e5d0507999ed0340#deposits)

当等待期过了后，可以查看是否出于 Active 状态，出于 Active 状态即为成功。

![](https://storage.googleapis.com/papyrus_images/d0443ebe84e6ff41de770bc50c341800fd39ccc6d61dcb2469f67d2943cb986a.png)

### **8.下一步的工作**

验证器运行并履行职责后，保持验证器在线以继续累积奖励非常重要。但是，计算机、互联网或其他因素可能会出现问题，导致验证器离线。为此，最好订阅通知，例如通过**beaconcha.in**

[https://beaconcha.in/](https://beaconcha.in/)

它将发送有关错过的证明和/或提案的通知。您将收到有关验证器离线状态的通知，并能够迅速做出反应。

下一件重要的事情是及时了解 Lighthouse 和执行客户端的更新。更新会不时发布，通常每月发布一到两次。对于 Lighthouse 更新，您可以通过点击订阅 **Github**

[https://github.com/sigp/lighthouse](https://github.com/sigp/lighthouse)

 `Watch` 上的通知。如果您只想收到新版本的通知，请选择 `Custom`，然后选择 `Releases`。

您还可以加入 **Lighthouse Discord**

[https://discord.gg/cyAszAh](https://discord.gg/cyAszAh)

我们会在有新版本发布时发布公告。

如果你还有兴趣，还可以尝试自己配置一个**Siren**

[https://lighthouse-book.sigmaprime.io/lighthouse-ui.html](https://lighthouse-book.sigmaprime.io/lighthouse-ui.html)

这是 Lighthouse 开发的用于监控验证器性能的 UI。

另外，验证者退出也有一个固定的流程，本教程尚未涉及，可以参考共识客户端的文档进行操作。**异常的验证者退出流程可能导致资金损失，请务必仔细操作！**

**结束语**
-------

得益于以太坊客户端开发者的优秀工作，当你整体的跑了一遍教程，并进行了实际部署，你会发现，整个部署质押的流程并不复杂。欢迎尝试～～

另外，如果你想用于生产环境，请务必花费一些精力用于运维及监控的工作，它们对于保障你的资金安全非常重要（仅管单纯的离线惩罚非常低，但我想没有人会愿意接受莫名的损失）。配置好监控系统后，您不需要每天与它交互，只需要保持关注即可。祝您质押愉快！

---

*Originally published on [LXDAO](https://paragraph.com/@lxdao/TVtU0qaci32VVqbVFDSw)*
