当前位置: 首页 > article >正文

以太坊主网 PoS 节点搭建指南

以太坊主网 PoS 节点搭建指南

文章目录

  • 以太坊主网 PoS 节点搭建指南
    • 1. 以太坊节点架构概述
      • 1.1 执行层 (Execution Layer)
      • 1.2 共识层 (Consensus Layer)
    • 2. 节点类型
      • 2.1 全节点
      • 2.2 验证者节点
      • 2.3 归档节点
    • 3. 硬件要求
      • 3.1 全节点最低配置
      • 3.2 验证者节点推荐配置
    • 4. 软件准备
      • 4.1 操作系统
      • 4.2 系统更新与基础软件安装
    • 5. 执行层客户端安装
      • 5.1 客户端对比
      • 5.2 安装Geth (Go Ethereum)
        • 5.2.1 安装Geth
        • 5.2.2 创建服务账户
        • 5.2.3 创建JWT密钥
        • 5.2.4 配置Geth服务
        • 5.2.5 启动Geth服务
    • 6. 共识层客户端安装
      • 6.1 客户端对比
      • 6.2 安装Lighthouse
        • 6.2.1 安装Rust和依赖
        • 6.2.2 编译Lighthouse
        • 6.2.3 创建服务账户
        • 6.2.4 配置Lighthouse信标节点服务
        • 6.2.5 启动Lighthouse信标节点服务
    • 7. 验证者节点设置 (可选)
      • 7.1 生成验证者密钥
        • 7.1.1 安装以太坊质押CLI
        • 7.1.2 生成助记词和验证者密钥
      • 7.2 提交质押存款
      • 7.3 导入验证者密钥到Lighthouse
      • 7.4 配置验证者服务
      • 7.5 启动验证者服务
    • 8. 节点监控设置
      • 8.1 安装Prometheus和Grafana
      • 8.2 配置Prometheus
      • 8.3 启动监控服务
    • 9. 节点维护
      • 9.1 查看日志
      • 9.2 更新客户端
        • 更新Geth
        • 更新Lighthouse
      • 9.3 备份重要数据
    • 10. 常见问题与解决方案
      • 10.1 同步问题
      • 10.2 验证者未激活
      • 10.3 系统资源不足
    • 11. 资源链接
    • 12. 安全注意事项

1. 以太坊节点架构概述

自从以太坊在2022年9月完成"合并"(The Merge)升级后,以太坊网络已从工作量证明(PoW)转变为权益证明(PoS)共识机制。现代以太坊节点由两个主要层组成:

1.1 执行层 (Execution Layer)

  • 负责处理交易、执行智能合约、维护状态
  • 原来的以太坊1.0客户端,如Geth、Nethermind、Besu、Erigon等
  • 管理以太坊虚拟机(EVM)

1.2 共识层 (Consensus Layer)

  • 负责区块生成、验证和网络共识
  • 原来的以太坊2.0信标链客户端,如Lighthouse、Prysm、Nimbus、Teku等
  • 实现权益证明(PoS)机制

这两层需要通过引擎API进行通信,共同维护以太坊网络。

2. 节点类型

2.1 全节点

  • 存储完整的区块链数据
  • 验证所有交易和区块
  • 不参与区块生成
  • 不需要质押ETH

2.2 验证者节点

  • 全节点的所有功能
  • 参与区块生成和验证
  • 需要质押32 ETH
  • 获得质押奖励

2.3 归档节点

  • 存储完整的历史状态
  • 占用更多存储空间
  • 可以查询任何历史状态

3. 硬件要求

3.1 全节点最低配置

  • CPU: 4核心 / 8线程
  • 内存: 16GB RAM
  • 存储: 2TB SSD (NVMe SSD推荐)
  • 网络: 稳定的互联网连接,至少25Mbps上传/下载速度

3.2 验证者节点推荐配置

  • CPU: 8核心 / 16线程
  • 内存: 32GB RAM
  • 存储: 4TB NVMe SSD
  • 网络: 100Mbps以上的稳定连接
  • 电源: UPS备份电源

4. 软件准备

4.1 操作系统

推荐使用Ubuntu 22.04 LTS或更高版本。

4.2 系统更新与基础软件安装

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git curl software-properties-common

5. 执行层客户端安装

以太坊有多种执行层客户端可供选择,以下是几种主流客户端:

5.1 客户端对比

客户端语言资源占用同步速度特点
GethGo中等最流行,稳定
NethermindC#较高较快功能丰富
BesuJava较高中等企业级
ErigonGo较低非常快高效存储

5.2 安装Geth (Go Ethereum)

5.2.1 安装Geth
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt update
sudo apt install -y geth
5.2.2 创建服务账户
sudo useradd --no-create-home --shell /bin/false geth
sudo mkdir -p /var/lib/geth
sudo chown -R geth:geth /var/lib/geth
5.2.3 创建JWT密钥

执行层和共识层之间需要JWT密钥进行安全通信:

sudo mkdir -p /var/lib/ethereum
openssl rand -hex 32 | sudo tee /var/lib/ethereum/jwtsecret > /dev/null
sudo chmod 644 /var/lib/ethereum/jwtsecret
5.2.4 配置Geth服务

创建systemd服务文件:

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

添加以下内容:

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

[Service]
User=geth
Group=geth
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/bin/geth \
    --mainnet \
    --http \
    --http.api eth,net,engine,admin \
    --http.addr 127.0.0.1 \
    --http.corsdomain "*" \
    --http.vhosts "*" \
    --authrpc.jwtsecret=/var/lib/ethereum/jwtsecret \
    --datadir /var/lib/geth \
    --metrics \
    --metrics.addr 127.0.0.1 \
    --metrics.port 6060

[Install]
WantedBy=default.target
5.2.5 启动Geth服务
sudo systemctl daemon-reload
sudo systemctl enable geth
sudo systemctl start geth
sudo systemctl status geth

6. 共识层客户端安装

以太坊有多种共识层客户端可供选择,以下是几种主流客户端:

6.1 客户端对比

客户端语言资源占用特点
LighthouseRust中等高效,安全
PrysmGo中等用户友好
NimbusNim轻量级
TekuJava较高企业级

6.2 安装Lighthouse

6.2.1 安装Rust和依赖
# 添加Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env

# 安装依赖
sudo apt install -y cmake pkg-config libssl-dev git gcc build-essential
6.2.2 编译Lighthouse
git clone https://github.com/sigp/lighthouse.git
cd lighthouse
git checkout stable
make
6.2.3 创建服务账户
sudo useradd --no-create-home --shell /bin/false lighthouse
sudo mkdir -p /var/lib/lighthouse
sudo chown -R lighthouse:lighthouse /var/lib/lighthouse
6.2.4 配置Lighthouse信标节点服务

创建systemd服务文件:

sudo nano /etc/systemd/system/lighthouse-beacon.service

添加以下内容:

[Unit]
Description=Lighthouse Ethereum Consensus Client Beacon Node
After=network.target
Wants=network.target

[Service]
User=lighthouse
Group=lighthouse
Type=simple
Restart=always
RestartSec=5
ExecStart=/path/to/lighthouse/target/release/lighthouse bn \
    --network mainnet \
    --datadir /var/lib/lighthouse \
    --http \
    --execution-endpoint http://127.0.0.1:8551 \
    --execution-jwt /var/lib/ethereum/jwtsecret \
    --checkpoint-sync-url https://mainnet.checkpoint.sigp.io \
    --metrics \
    --metrics-address 127.0.0.1 \
    --metrics-port 5054 \
    --port 9000 \
    --discovery-port 9000

[Install]
WantedBy=default.target
6.2.5 启动Lighthouse信标节点服务
sudo systemctl daemon-reload
sudo systemctl enable lighthouse-beacon
sudo systemctl start lighthouse-beacon
sudo systemctl status lighthouse-beacon

7. 验证者节点设置 (可选)

如果您想成为验证者并质押32 ETH,需要完成以下额外步骤:

7.1 生成验证者密钥

7.1.1 安装以太坊质押CLI
mkdir -p ~/staking-deposit-cli
cd ~/staking-deposit-cli
curl -LO https://github.com/ethereum/staking-deposit-cli/releases/download/v2.5.0/staking_deposit-cli-76ed782-linux-amd64.tar.gz
tar -xzf staking_deposit-cli-76ed782-linux-amd64.tar.gz
cd staking_deposit-cli-76ed782-linux-amd64
7.1.2 生成助记词和验证者密钥
./deposit new-mnemonic --num_validators 1 --chain mainnet

按照提示完成操作,保存好助记词和密码。这将生成两个重要文件:

  • deposit_data-*.json: 用于提交质押存款
  • validator_keys/: 包含验证者密钥

7.2 提交质押存款

  1. 访问官方质押启动板: https://launchpad.ethereum.org/
  2. 按照指引上传deposit_data-*.json文件
  3. 连接钱包并存入32 ETH

7.3 导入验证者密钥到Lighthouse

sudo mkdir -p /var/lib/lighthouse/validators
sudo chown -R lighthouse:lighthouse /var/lib/lighthouse/validators

# 导入验证者密钥
lighthouse account validator import \
  --network mainnet \
  --datadir /var/lib/lighthouse \
  --directory ~/staking-deposit-cli/validator_keys

7.4 配置验证者服务

创建systemd服务文件:

sudo nano /etc/systemd/system/lighthouse-validator.service

添加以下内容:

[Unit]
Description=Lighthouse Ethereum Consensus Client Validator
After=network.target lighthouse-beacon.service
Wants=network.target lighthouse-beacon.service

[Service]
User=lighthouse
Group=lighthouse
Type=simple
Restart=always
RestartSec=5
ExecStart=/path/to/lighthouse/target/release/lighthouse vc \
    --network mainnet \
    --datadir /var/lib/lighthouse \
    --beacon-node http://127.0.0.1:5052 \
    --graffiti "YOUR_GRAFFITI_HERE" \
    --metrics \
    --metrics-address 127.0.0.1 \
    --metrics-port 5064

[Install]
WantedBy=default.target

7.5 启动验证者服务

sudo systemctl daemon-reload
sudo systemctl enable lighthouse-validator
sudo systemctl start lighthouse-validator
sudo systemctl status lighthouse-validator

8. 节点监控设置

8.1 安装Prometheus和Grafana

# 安装Prometheus
sudo apt-get install -y prometheus

# 安装Grafana
sudo apt-get install -y apt-transport-https software-properties-common
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/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install -y grafana

8.2 配置Prometheus

sudo nano /etc/prometheus/prometheus.yml

添加以下内容:

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'geth'
    static_configs:
      - targets: ['localhost:6060']
  
  - job_name: 'lighthouse_beacon'
    static_configs:
      - targets: ['localhost:5054']
  
  - job_name: 'lighthouse_validator'
    static_configs:
      - targets: ['localhost:5064']

8.3 启动监控服务

sudo systemctl restart prometheus
sudo systemctl enable prometheus
sudo systemctl restart grafana-server
sudo systemctl enable grafana-server

访问Grafana: http://your_server_ip:3000 (默认用户名/密码: admin/admin)

9. 节点维护

9.1 查看日志

# 查看Geth日志
sudo journalctl -fu geth

# 查看Lighthouse信标节点日志
sudo journalctl -fu lighthouse-beacon

# 查看Lighthouse验证者日志
sudo journalctl -fu lighthouse-validator

9.2 更新客户端

定期更新客户端以获取最新功能和安全补丁:

更新Geth
sudo apt update
sudo apt upgrade geth
sudo systemctl restart geth
更新Lighthouse
cd lighthouse
git fetch
git checkout stable
git pull
make
sudo systemctl restart lighthouse-beacon
sudo systemctl restart lighthouse-validator

9.3 备份重要数据

定期备份验证者密钥和助记词,存储在安全的离线位置。

10. 常见问题与解决方案

10.1 同步问题

  • 问题: 节点同步缓慢或停滞
  • 解决方案:
    • 检查网络连接
    • 确保SSD性能良好
    • 考虑使用快照同步: geth --syncmode snap

10.2 验证者未激活

  • 问题: 质押后验证者未显示激活
  • 解决方案: 验证者激活需要排队等待,可能需要几天到几周时间

10.3 系统资源不足

  • 问题: 系统内存或CPU使用率过高
  • 解决方案:
    • 增加系统资源
    • 调整客户端参数减少资源使用
    • 考虑使用资源占用更低的客户端

11. 资源链接

  • 以太坊官方文档
  • 以太坊质押启动板
  • Geth文档
  • Lighthouse文档
  • 以太坊节点健康检查
  • Beaconcha.in浏览器

12. 安全注意事项

  • 使用强密码和SSH密钥
  • 配置防火墙,只开放必要端口
  • 定期更新系统和客户端
  • 备份验证者密钥和助记词
  • 考虑使用硬件安全模块(HSM)存储验证者密钥
  • 监控节点性能和安全

免责声明: 运行验证者节点需要持续在线,任何离线时间都可能导致惩罚。确保您的系统安全、稳定且有备份电源。质押32 ETH是一项长期承诺,请在开始前充分了解风险和责任。


http://www.kler.cn/a/612987.html

相关文章:

  • NC,GFS、ICON 数据气象信息可视化--降雨量的实现
  • .NET 9 中的 WebAPI 文档 重新添加Swagger或改用Scalar
  • 如何用AI技术轻松生成高质量PPT,节省时间提高效率
  • 【Linux】深度解析Linux进程间通信:匿名管道原理、实战进程池与高频问题排查。
  • vue3为什么不需要时间切片
  • 将任何网站变成独立的桌面应用 开源免费 Tuboshu
  • IvorySQL 初始化(initdb)过程深度解析
  • UniApp开发多端应用——流式语音交互场景优化
  • 分布式ID生成器:雪花算法原理与应用解析
  • Spring-CacheKey 设置注意事项
  • 正则表达式-万能表达式
  • PDF 文本提取为何如此困难?– 原因和解决方案
  • string模拟实现-C++
  • 数据结构之约瑟夫环的问题
  • Causal Effect Inference withDeep Latent-Variable Models
  • 聚焦交易能力提升!EagleTrader 模拟交易系统打造交易成长新路径
  • LabVIEW从需求快速开发的方法
  • 5-管理员-维护权限
  • 【PyTorch】
  • JAVASE知识梳理(一)