Hardware Requirements
OS: Ubuntu 24.04 or later
RAM - 16 GB
CPU - 4-cores
Disk - upto 1 TB
To open these ports in the Google Cloud Platform (GCP) firewall, follow these steps:
1. Go to GCP Firewall Rules Page:
Go to the GCP Firewall Rules Page.
Make sure you are in the correct project.
2. Create a New Firewall Rule:
Click on "Create Firewall Rule."
Name: sepolia-node-firewall
Network: Choose the correct network (usually default).
Priority: Set a lower number (1000 or less) for higher priority.
Direction of Traffic: Ingress
Action on Match: Allow
Targets: Apply to all instances in the network (or select specific targets).
Source IP Ranges: 0.0.0.0/0 (allow traffic from any IP).
Protocols and Ports: Choose "Specified protocols and ports" and add:
TCP: 22, 8545, 8546, 8551, 3500, 4000, 30303
UDP: 30303
sudo -i
usermod -aG sudo your-yourusername
1. sudo apt-get update && sudo apt-get upgrade -y
2. sudo apt install curl iptables build-essential git wget lz4 jq make gcc nano automake autoconf
tmux htop nvme-cli libgbm1 pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu
unzip libleveldb-dev -y
3. sudo apt update -y && sudo apt upgrade -y
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo
apt-get remove $pkg; done
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o
/etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg]
https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update -y && sudo apt upgrade -y
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
docker-compose-plugin
# Test Docker
sudo docker run hello-world
sudo systemctl enable docker
sudo systemctl restart docker
4. mkdir -p /root/ethereum/execution
mkdir -p /root/ethereum/consensus
5. openssl rand -hex 32 > /root/ethereum/jwt.hex
6. cd /root/ethereum
7. nano docker-compose.yml
services:
geth:
image: ethereum/client-go:stable
container_name: geth
restart: unless-stopped
ports:
- 30303:30303
- 30303:30303/udp
- 8545:8545
- 8546:8546
- 8551:8551
volumes:
- /root/ethereum/execution:/data
- /root/ethereum/jwt.hex:/data/jwt.hex
command:
- --sepolia
- --http
- --http.api=eth,net,web3
- --http.addr=0.0.0.0
- --authrpc.addr=0.0.0.0
- --authrpc.vhosts=*
- --authrpc.jwtsecret=/data/jwt.hex
- --authrpc.port=8551
- --syncmode=snap
- --datadir=/data
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
prysm:
image: gcr.io/prysmaticlabs/prysm/beacon-chain
container_name: prysm
restart: unless-stopped
volumes:
- /root/ethereum/consensus:/data
- /root/ethereum/jwt.hex:/data/jwt.hex
depends_on:
- geth
ports:
- 4000:4000
- 3500:3500
command:
- --sepolia
- --accept-terms-of-use
- --datadir=/data
- --disable-monitoring
- --rpc-host=0.0.0.0
- --execution-endpoint=http://geth:8551
- --jwt-secret=/data/jwt.hex
- --rpc-port=4000
- --grpc-gateway-corsdomain=*
- --grpc-gateway-host=0.0.0.0
- --grpc-gateway-port=3500
- --min-sync-peers=7
- --checkpoint-sync-url=https://checkpoint-sync.sepolia.ethpandaops.io
- --genesis-beacon-api-url=https://checkpoint-sync.sepolia.ethpandaops.io
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
8. sudo apt update
sudo apt install net-tools
9. sudo netstat -tuln | grep -E '30303|8545|8546|8551|4000|3500'
10. docker compose up -d
11. docker compose logs -fn 100
12. sudo ufw allow 22
sudo ufw allow ssh
sudo ufw enable
13. sudo ufw allow 8545/tcp # Geth HTTP RPC
sudo ufw allow 3500/tcp # Prysm HTTP API
sudo ufw allow 30303/tcp # Geth P2P
sudo ufw allow 30303/udp # Geth P2P
-------------------------------------------------------------------------------------------------------------------------------
---------------
usable commands -
1. curl -X POST -H "Content-Type: application/json" --data
✅
'{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' http://localhost:8545
Response if fully synced:
🚫
{"jsonrpc":"2.0","id":1,"result":false}
Response if still syncing:
{"jsonrpc":"2.0","id":1,"result":{"currentBlock":"0x1a2b3c","highestBlock":"0x1a2b4d","startingBlo
ck":"0x0"}}
✅
2. curl http://localhost:3500/eth/v1/node/syncing
Response if fully synced:
🚫
{"data":{"head_slot":"12345","sync_distance":"0","is_syncing":false}}
Response if still syncing:
{"data":{"head_slot":"12345","sync_distance":"100","is_syncing":true}}
Execution Node (Geth)
Geth provides an HTTP RPC endpoint for interacting with the execution layer of Ethereum.
Based on docker-compose.yml setup, Geth exposes port 8545 for HTTP RPC. The endpoints
are:
http://<vps-ip>:8545 (replace <vps-ip> with your VPS’s public IP address, e.g.,
http://203.0.113.5:8545).
Aztec Sequencer Execution RPC: http://<vps-ip>:8545. Since the Aztec Sequencer uses a
bridge network to isolate docker container, you can NOT access Geth via localhost.
Beacon Node (Prysm)
Prysm, as the beacon node, offers an HTTP gateway on port 3500. the endpoints are:
http://<vps-ip>:3500 (e.g., http://203.0.113.5:3500).
Aztec Sequencer Consensus Beacon RPC: http://<vps-ip>:3500. Since the Aztec Sequencer
uses a bridge network to isolate docker container, you can NOT access Prysm via localhost.