以太坊主网质押教程:基于Ubuntu与Teku客户端的完整指南

·

本文将详细介绍如何使用ConsenSys的Teku客户端参与以太坊主网质押。整个过程基于以下技术栈:

重要提示:参与质押需至少32 ETH及额外Gas费用。操作前请确保充分了解流程,切勿向未知地址发送ETH。本教程将指导你安全地将ETH存入官方合约。

先决条件与准备

参与以太坊质押需要一定的技术背景知识,包括:

硬件要求方面,建议配置:

注意:开始前请检查磁盘空间。即使使用大容量SSD,Ubuntu也可能只显示200GB可用空间。如遇此情况,请参考附录C的"扩展逻辑卷"方法。

质押流程概述

整个质押过程可分为五个关键阶段:

  1. 生成验证者密钥对和存款数据
  2. 配置Ubuntu服务器(包括防火墙和安全设置)
  3. 设置Eth1节点并同步区块链数据
  4. 配置Teku客户端并连接Eth1节点
  5. 存入ETH并激活验证者密钥

下面我们按步骤详细讲解每个环节的操作方法。

第一步:生成质押数据

首先需要确定运行验证者节点的数量,并生成相应的密钥文件。

注意:如果你已生成存款数据和验证者密钥对,可跳过此步骤。

每个验证者节点需要32 ETH,请确保MetaMask钱包中有足够资金。例如计划运行5个节点,则需要160 ETH(32×5)加上Gas费用。

下载存款CLI工具

访问以太坊官方GitHub发布页面下载最新版存款命令行工具。在"Assets"部分选择与你的操作系统匹配的版本(Windows、Mac或Linux桌面版)。

运行存款工具

解压下载的文件后,你会看到一个可执行文件。生成质押文件时会创建一组助记词,这需要绝对安全地保存。

推荐方案:将可执行文件复制到U盘,在从未联网的电脑上运行。

备选方案:在当前电脑断开网络连接后运行。

在终端(或Windows命令提示符)中执行以下命令,将``替换为验证者数量:

Linux/Mac系统:

./deposit new-mnemonic --num_validators --chain mainnet

Windows系统:

deposit.exe new-mnemonic --num_validators --chain mainnet

程序会提示你创建验证者密钥库密码,请妥善保存此密码,后续配置Teku验证者钱包时需要用到。

接着会生成一组助记词,这是恢复资金的关键,务必离线安全存储。丢失助记词意味着无法提取质押的ETH。

确认助记词已保存后,系统将生成验证者密钥对。新创建的文件包含:

将这些文件复制到Ubuntu服务器后,即可进行下一步操作。

特别注意:此时切勿立即存款!应先完成所有设置并验证无误。如果ETH存款已激活而质押设置未就绪,将会受到怠工惩罚。

第二步:服务器初始设置

使用SSH连接到你的Ubuntu服务器。如果使用root账户登录,建议创建新用户账户以提高安全性。

创建新用户(将``替换为用户名):

# adduser 

授予新用户sudo权限:

# usermod -aG sudo 

如需将SSH密钥从root用户转移到新用户:

# rsync --archive --chown=: ~/.ssh /home/

退出root账户,使用新创建的用户名重新登录。

第三步:系统更新

更新系统至最新软件版本:

$ sudo apt update && sudo apt upgrade
$ sudo apt dist-upgrade && sudo apt autoremove
$ sudo reboot

第四步:安全加固

服务器安全至关重要,以下是基础安全配置。

修改SSH默认端口

SSH默认端口22容易受到攻击,建议更换为1024-49151之间的端口号。

首先检查端口是否可用(将``替换为选定的端口号):

$ sudo ss -tulpn | grep ': '

无输出表示端口可用。然后编辑SSH配置:

$ sudo nano /etc/ssh/sshd_config

找到或添加Port 22行,在其下方添加新端口行:

Port 

保存退出后重启SSH服务:

$ sudo systemctl restart ssh

注销后使用新端口重新登录。

配置防火墙

Ubuntu 20.04使用UFW防火墙管理流量。

安装UFW:

$ sudo apt install ufw

设置默认规则:

$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing

允许SSH新端口(将``替换为你的端口号):

$ sudo ufw allow /tcp

禁用原SSH端口:

$ sudo ufw deny 22/tcp

允许Go Ethereum节点通信:

$ sudo ufw allow 30303

允许Teku客户端通信:

$ sudo ufw allow 9000

启用防火墙并检查配置:

$ sudo ufw enable
$ sudo ufw status numbered

第五步:时间同步配置

确保系统时间同步准确:

$ timedatectl

启用NTP时间同步服务:

$ sudo timedatectl set-ntp on

确保只运行一个时间同步服务。如已安装NTPD,请检查并移除:

$ ntpq -p
$ sudo apt-get remove ntp

第六步:Eth1节点设置

质押需要Eth1节点支持。你可以选择运行本地节点或使用第三方服务。本教程以Go Ethereum为例。

注意:Eth1节点需要约400GB存储空间。如磁盘空间不足,请参考附录C的扩展方法。

安装Go Ethereum

通过PPA安装Geth客户端:

$ sudo add-apt-repository -y ppa:ethereum/ethereum
$ sudo apt update
$ sudo apt install geth

创建专用系统账户:

$ sudo useradd --no-create-home --shell /bin/false goeth

创建数据目录:

$ sudo mkdir -p /var/lib/goethereum

设置目录权限:

$ sudo chown -R goeth:goeth /var/lib/goethereum

创建systemd服务配置文件:

$ sudo nano /etc/systemd/system/geth.service

输入以下配置内容:

[Unit]
Description=Go Ethereum Client
After=network.target
Wants=network.target

[Service]
User=goeth
Group=goeth
Type=simple
Restart=always
RestartSec=5
ExecStart=geth --http --datadir /var/lib/goethereum --cache 2048 --maxpeers 30

[Install]
WantedBy=default.target

配置说明:

保存退出后重新加载systemd并启动服务:

$ sudo systemctl daemon-reload
$ sudo systemctl start geth
$ sudo systemctl status geth

设置开机自启:

$ sudo systemctl enable geth

查看同步状态:

$ sudo journalctl -fu geth.service

检查同步状态

连接到控制台检查同步状态:

geth attach http://127.0.0.1:8545
> eth.syncing

显示false表示同步完成,显示同步数据表示仍在同步。

检查连接节点数:

geth attach http://127.0.0.1:8545
> net.peerCount

添加启动节点(可选)

如同步节点过少,可添加启动节点加速同步。访问Gist页面获取最新节点列表。

停止服务并编辑配置:

$ sudo systemctl stop geth
$ sudo nano /etc/systemd/system/geth.service

ExecStart行添加--bootnodes参数(以逗号分隔节点列表):

ExecStart=geth --http --datadir /var/lib/goethereum --cache 2048 --maxpeers 30 --bootnodes "enode://...@IP:30303,enode://...@IP:30303"

保存后重启服务:

$ sudo systemctl daemon-reload
$ sudo systemctl start geth
$ sudo journalctl -fu geth.service

👉 获取最新以太坊节点列表

第七步:下载和安装Teku

Teku客户端包含信标链节点和验证者客户端两部分。

访问ConsenSys Teku发布页面找到最新版本,在"Downloads"部分选择"binary distribution"。

复制下载链接后执行(请替换URL为最新版本):

$ cd ~
$ sudo apt install curl
$ curl -Lo teku-20.11.0.tar.gz https://bintray.com/consensys/pegasys-repo/download_file?file_path=teku-20.11.0.tar.gz

解压并安装到系统目录:

$ tar xvf teku-20.11.0.tar.gz
$ sudo cp -a teku-20.11.0 /usr/local/bin/teku

安装Java运行环境:

$ sudo apt install default-jre

清理安装文件:

$ cd ~
$ sudo rm teku-20.11.0.tar.gz
$ sudo rm -r teku-20.11.0

第八步:导入验证者密钥

将之前生成的验证者密钥文件复制到服务器。可以使用U盘或SFTP方式传输。

创建存储目录并复制密钥文件:

$ sudo mkdir -p /var/lib/teku
$ sudo cp -a /$HOME/eth2deposit-cli/validator_keys /var/lib/teku

确保只复制keystore-m...json文件,删除可能误复制的deposit_data...json文件:

$ cd /var/lib/teku/validator_keys
$ ls
$ sudo rm deposit_data-*.json

创建密码文件

Teku需要密码文件访问每个验证者账户。每个keystore-m...json文件都需要对应的密码文件。

查看密钥文件列表:

$ ls /var/lib/teku/validator_keys

为每个json文件创建同名txt密码文件(将``替换为实际文件名):

$ sudo nano /var/lib/teku/validator_keys/.txt

在文件中输入该验证者密钥的密码(第一步中设置的密码),保存退出。

重复此过程为每个验证者密钥创建密码文件。

注意:目录中不应有deposit_data-*.json文件,否则会导致错误。

第九步:配置Teku服务

将Teku配置为系统服务以实现自动运行。

创建专用系统账户:

$ sudo useradd --no-create-home --shell /bin/false teku

设置目录权限:

$ sudo chown -R teku:teku /var/lib/teku
$ ls -dl /var/lib/teku

设置密钥文件权限:

$ sudo chmod -R 700 /var/lib/teku/validator_keys
$ sudo ls -lh /var/lib/teku/validator_keys

创建systemd服务配置文件:

$ sudo nano /etc/systemd/system/teku.service

输入以下配置内容:

[Unit]
Description=Teku Eth2 Client
Wants=network-online.target
After=network-online.target

[Service]
User=teku
Group=teku
Type=simple
Restart=always
RestartSec=5
Environment="JAVA_OPTS=-Xmx2g"
ExecStart=/usr/local/bin/teku/bin/teku --data-base-path=/var/lib/teku --eth1-endpoint=http://localhost:8545 --validator-keys=/var/lib/teku/validator_keys:/var/lib/teku/validator_keys --rest-api-enabled=true --rest-api-docs-enabled=true --metrics-enabled --validators-graffiti=" "

[Install]
WantedBy=multi-user.target

配置参数说明:

重新加载systemd配置:

$ sudo systemctl daemon-reload
注意:如运行本地Eth1节点(第六步),需等待其完全同步后再启动Teku。

启动服务并检查状态:

$ sudo systemctl start teku
$ sudo systemctl status teku

设置开机自启:

$ sudo systemctl enable teku

查看运行日志:

$ sudo journalctl -fu teku.service

同步过程可能需要数小时。同步完成后,验证者将自动开始参与网络共识。

你可以在beaconcha.in查看验证者状态,使用验证者公钥或MetaMask钱包地址搜索。

第十步:执行ETH存款

节点设置完成并运行后,需要将ETH存入官方质押合约。

注意:如已完成存款,可跳过此步骤。

访问以太坊2.0 Launchpad,按照指引完成以下步骤:

  1. 仔细阅读所有警告和说明
  2. 在"密钥对生成"部分选择验证者数量(与第一步生成的数量一致)
  3. 同意相关条款后继续
  4. 上传第一步生成的deposit_data-[timestamp].json文件
  5. 连接MetaMask钱包并确保有足够ETH余额
  6. 确认存款摘要信息
  7. 签署所有交易

交易确认后,质押存款即完成。

新验证者需要几小时到几天时间激活。你可以在beaconcha.in使用钱包地址查看激活状态。

至此,你已成功设置运行的信标链节点、验证者节点并完成主网存款。一旦存款激活,你将开始获得质押收益。

恭喜你正式成为以太坊网络验证者!

第十一步:监控维护

由于安全考虑,详细的监控方案将在未来补充到本教程中。目前建议:

常见问题

质押需要多少ETH?

每个验证者节点需要32 ETH,加上少量的Gas费用。运行多个验证者需要相应倍数的ETH。

节点离线或同步延迟会有什么后果?

节点离线或同步延迟会导致轻微的效能惩罚,但不会丢失质押的ETH。长期离线可能会逐渐减少余额,但重新上线后可以恢复。

如何提取质押的ETH?

目前以太坊2.0还不支持提取功能。根据开发路线图,提取功能将在后续阶段启用,需要用到第一步生成的助记词。

验证者节点对网络带宽要求是多少?

建议上传带宽不低于10Mbps,下载带宽不低于20Mbps。每月数据使用量约为1-2TB,具体取决于网络条件和节点数量。

如何确保质押设置的安全性?

使用防火墙限制访问、定期更新软件、使用强密码和密钥、在不同位置备份助记词、考虑使用硬件钱包管理存款地址。

收益大概是多少?

年化收益率取决于网络中共有多少ETH被质押。一般范围在5%-15%之间,随着质押总量增加,收益率会相应降低。

后续维护建议

附录A:更新Geth客户端

需要更新Geth时,按以下步骤操作:

$ sudo systemctl stop teku
$ sudo systemctl stop geth
$ sudo apt update && sudo apt upgrade
$ sudo systemctl start geth
$ sudo systemctl status geth  # 检查错误
$ sudo journalctl -fu geth    # 监控日志
$ sudo systemctl start teku
$ sudo systemctl status teku  # 检查错误
$ sudo journalctl -fu teku.service  # 监控日志

附录B:更新Teku客户端

更新Teku到最新版本的步骤:

  1. 访问Teku发布页面获取最新版本下载链接
  2. 下载新版本(替换URL为最新链接):

    $ cd ~
    $ sudo apt install curl
    $ curl -Lo teku-20.11.0.tar.gz https://bintray.com/consensys/pegasys-repo/download_file?file_path=teku-20.11.0.tar.gz
  3. 停止Teku服务:

    $ sudo systemctl stop teku
  4. 解压并替换旧文件:

    $ tar xvf teku-20.11.0.tar.gz
    $ sudo rm -r /usr/local/bin/teku
    $ sudo cp -a teku-20.11.0 /usr/local/bin/teku
  5. 重启服务并检查:

    $ sudo systemctl start teku
    $ sudo systemctl status teku  # 检查错误
    $ sudo journalctl -fu teku.service  # 监控日志
  6. 清理安装文件:

    $ cd ~
    $ sudo rm teku-20.11.0.tar.gz
    $ sudo rm -r teku-20.11.0

附录C:扩展逻辑卷

如果Ubuntu只分配了200GB空间,但你的SSD容量更大,可以通过以下步骤扩展逻辑卷:

$ sudo lvdisplay  # 检查当前逻辑卷大小
$ sudo lvm
> lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
> exit
$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
$ df -h  # 查看扩展结果

此操作会将磁盘空间扩展到最大可用容量。如遇到问题,建议在EthStaker Discord社区寻求帮助。

👉 查看实时节点监控工具

免责声明

本文仅供参考,不构成专业建议。作者不对文中信息的准确性、完整性作任何保证。读者应自行承担参考本文操作可能产生的风险。在开始前,请确保充分了解所有步骤和潜在风险。