Blockchain Node Operations Skill
Expert blockchain node deployment and operations for Ethereum and EVM-compatible networks.
Capabilities
- Execution Clients: Deploy Geth, Nethermind, Besu, Erigon
- Consensus Clients: Configure Prysm, Lighthouse, Teku, Lodestar
- Validator Operations: Set up validators with proper key management
- Monitoring: Monitor sync status and performance
- MEV-Boost: Configure for validators
- Archive Nodes: Set up archive nodes for indexing
- Migrations: Handle node upgrades and migrations
Execution Client Setup
Geth Installation
# Install Geth
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
# Or download binary
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.13.0-xxx.tar.gz
tar -xvf geth-linux-amd64-*.tar.gz
sudo mv geth-linux-amd64-*/geth /usr/local/bin/
Geth Configuration
# Create data directory
mkdir -p /var/lib/geth
# Create service file
cat > /etc/systemd/system/geth.service << EOF
[Unit]
Description=Geth Execution Client
After=network.target
Wants=network.target
[Service]
User=geth
Group=geth
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/geth \
--mainnet \
--datadir /var/lib/geth \
--http \
--http.addr 0.0.0.0 \
--http.port 8545 \
--http.api eth,net,web3,engine,admin \
--ws \
--ws.addr 0.0.0.0 \
--ws.port 8546 \
--authrpc.addr localhost \
--authrpc.port 8551 \
--authrpc.vhosts localhost \
--authrpc.jwtsecret /var/lib/geth/jwt.hex \
--metrics \
--metrics.addr 0.0.0.0 \
--metrics.port 6060 \
--syncmode snap \
--maxpeers 50
[Install]
WantedBy=multi-user.target
EOF
# Generate JWT secret
openssl rand -hex 32 > /var/lib/geth/jwt.hex
# Start service
sudo systemctl daemon-reload
sudo systemctl enable geth
sudo systemctl start geth
Nethermind Configuration
cat > /etc/systemd/system/nethermind.service << EOF
[Unit]
Description=Nethermind Execution Client
After=network.target
[Service]
User=nethermind
Type=simple
Restart=always
ExecStart=/usr/local/bin/nethermind \
--config mainnet \
--datadir /var/lib/nethermind \
--JsonRpc.Enabled true \
--JsonRpc.Host 0.0.0.0 \
--JsonRpc.Port 8545 \
--JsonRpc.JwtSecretFile /var/lib/nethermind/jwt.hex \
--JsonRpc.EngineHost 127.0.0.1 \
--JsonRpc.EnginePort 8551 \
--Metrics.Enabled true \
--Metrics.ExposePort 6060 \
--Sync.SnapSync true
[Install]
WantedBy=multi-user.target
EOF
Consensus Client Setup
Lighthouse
# Install Lighthouse
curl -LO https://github.com/sigp/lighthouse/releases/download/v4.5.0/lighthouse-v4.5.0-x86_64-unknown-linux-gnu.tar.gz
tar -xvf lighthouse-*.tar.gz
sudo mv lighthouse /usr/local/bin/
# Beacon node service
cat > /etc/systemd/system/lighthouse-beacon.service << EOF
[Unit]
Description=Lighthouse Beacon Node
After=network.target geth.service
Wants=geth.service
[Service]
User=lighthouse
Type=simple
Restart=always
ExecStart=/usr/local/bin/lighthouse bn \
--network mainnet \
--datadir /var/lib/lighthouse \
--execution-endpoint http://localhost:8551 \
--execution-jwt /var/lib/geth/jwt.hex \
--checkpoint-sync-url https://beaconstate.ethstaker.cc \
--http \
--http-address 0.0.0.0 \
--http-port 5052 \
--metrics \
--metrics-address 0.0.0.0 \
--metrics-port 5054
[Install]
WantedBy=multi-user.target
EOF
Prysm
# Install Prysm
curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh
chmod +x prysm.sh
# Beacon node service
cat > /etc/systemd/system/prysm-beacon.service << EOF
[Unit]
Description=Prysm Beacon Node
After=network.target
[Service]
User=prysm
Type=simple
Restart=always
ExecStart=/usr/local/bin/prysm.sh beacon-chain \
--mainnet \
--datadir=/var/lib/prysm \
--execution-endpoint=http://localhost:8551 \
--jwt-secret=/var/lib/geth/jwt.hex \
--checkpoint-sync-url=https://beaconstate.ethstaker.cc \
--genesis-beacon-api-url=https://beaconstate.ethstaker.cc \
--grpc-gateway-host=0.0.0.0 \
--grpc-gateway-port=3500 \
--monitoring-host=0.0.0.0 \
--monitoring-port=8080
[Install]
WantedBy=multi-user.target
EOF
Validator Setup
Key Generation
# Install deposit-cli
wget https://github.com/ethereum/staking-deposit-cli/releases/download/v2.7.0/staking_deposit-cli-fdab65d-linux-amd64.tar.gz
tar -xvf staking_deposit-cli-*.tar.gz
# Generate validator keys
./deposit new-mnemonic --num_validators 1 --chain mainnet
# Import keys to Lighthouse
lighthouse account validator import \
--network mainnet \
--datadir /var/lib/lighthouse \
--directory validator_keys
# Import keys to Prysm
./prysm.sh validator accounts import \
--mainnet \
--keys-dir=validator_keys
Validator Client
# Lighthouse validator service
cat > /etc/systemd/system/lighthouse-validator.service << EOF
[Unit]
Description=Lighthouse Validator
After=lighthouse-beacon.service
Wants=lighthouse-beacon.service
[Service]
User=lighthouse
Type=simple
Restart=always
ExecStart=/usr/local/bin/lighthouse vc \
--network mainnet \
--datadir /var/lib/lighthouse \
--beacon-nodes http://localhost:5052 \
--graffiti "MyValidator" \
--metrics \
--metrics-address 0.0.0.0 \
--metrics-port 5064 \
--suggested-fee-recipient 0xYourAddress
[Install]
WantedBy=multi-user.target
EOF
MEV-Boost Setup
# Install MEV-Boost
go install github.com/flashbots/mev-boost@latest
# MEV-Boost service
cat > /etc/systemd/system/mev-boost.service << EOF
[Unit]
Description=MEV-Boost
After=network.target
[Service]
User=mevboost
Type=simple
Restart=always
ExecStart=/usr/local/bin/mev-boost \
-mainnet \
-relay-check \
-relay https://0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae@boost-relay.flashbots.net \
-relay https://0xa1559ace749633b997cb3fdacffb890aeebdb0f5a3b6aaa7eeeaf1a38af0a8fe88b9e4b1f61f236d2e64d95733327a62@relay.ultrasound.money
[Install]
WantedBy=multi-user.target
EOF
Monitoring
Prometheus Configuration
# prometheus.yml
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']
Useful Monitoring Commands
# Check Geth sync status
geth attach http://localhost:8545 --exec "eth.syncing"
# Check Lighthouse sync status
curl -s http://localhost:5052/eth/v1/node/syncing | jq
# Check validator status
curl -s http://localhost:5052/eth/v1/beacon/states/head/validators/0x... | jq
# Check peer count
geth attach --exec "admin.peers.length"
curl -s http://localhost:5052/eth/v1/node/peers | jq '.data | length'
Archive Node Configuration
# Geth archive mode
ExecStart=/usr/local/bin/geth \
--mainnet \
--datadir /var/lib/geth \
--gcmode archive \
--syncmode full \
# ... other flags
# Erigon (optimized for archive)
ExecStart=/usr/local/bin/erigon \
--datadir /var/lib/erigon \
--chain mainnet \
--prune=htc \
# ... other flags
Process Integration
| Process | Purpose |
|---------|---------|
| blockchain-node-setup.js | Node deployment |
| validator-node-operation.js | Validator setup |
| blockchain-indexer-development.js | Indexing infrastructure |
Best Practices
- Use checkpoint sync for faster initial sync
- Monitor disk space (archive nodes need TBs)
- Set up alerting for missed attestations
- Keep clients updated
- Use separate machines for execution and consensus
- Backup validator keys securely
See Also
agents/blockchain-infra/AGENT.md- Infrastructure expert- Ethereum.org Staking
- EthStaker