May 27

Установка  RPC  Sepolia и Beacon на GETH и Pryzm

Требования к серверу:

  • VPS с 8 vCPU, 16 ГБ RAM, 800+ ГБ NVMe
  • Ubuntu 22.04+

я предпочитаю на xorek.cloud

Установка RPC

1. Устанавливаем зависимости

sudo apt update && sudo apt install -y curl wget gnupg nano ufw docker.io systemd-timesyncd
sudo systemctl enable --now docker.service
sudo systemctl enable --now systemd-timesyncd.service

Запускаем (Firewall)

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 8546/tcp
sudo ufw allow 8551/tcp     
sudo ufw allow 30303/tcp    
sudo ufw allow 30303/udp
sudo ufw allow 5053/tcp
sudo ufw allow 40401/tcp 
sudo ufw allow 8080/tcp

2. Устанавливаем Geth (Execution Layer)

GETH_VER="1.15.10-2bf8a789"
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-$GETH_VER.tar.gz
tar -xf geth-linux-amd64-$GETH_VER.tar.gz
sudo mv geth-linux-amd64-$GETH_VER/geth /usr/local/bin/
sudo chmod +x /usr/local/bin/geth

3. Создаем JWT для Engine API

mkdir -p ~/sepolia-node
openssl rand -hex 32 > ~/sepolia-node/jwt.hex

4. Создаем systemd сервис для Geth

sudo tee /etc/systemd/system/sepolia-geth.service > /dev/null <<EOF
[Unit]
Description=Sepolia Geth Node
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/root/sepolia-node
ExecStart=/usr/local/bin/geth --sepolia \
--datadir /root/sepolia-node/geth \
--syncmode snap \
--cache 4096 \
--http --http.addr 127.0.0.1 --http.port 8545 \
--http.api eth,net,engine,web3,txpool,debug \
--authrpc.addr 0.0.0.0 --authrpc.port 8551 \
--authrpc.jwtsecret /root/sepolia-node/jwt.hex \
--authrpc.vhosts=* \
--metrics --pprof --pprof.addr 0.0.0.0 --pprof.port 6060
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

Запускаем сервис

sudo systemctl daemon-reload
sudo systemctl enable --now sepolia-geth

5. Установливаем Prysm он же Beacon

sudo install -d -o $USER /opt/prysm
curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh -o /opt/prysm/prysm.sh
chmod +x /opt/prysm/prysm.sh

6. Systemd сервис для Prysm

sudo tee /etc/systemd/system/sepolia-prysm.service > /dev/null <<EOF
[Unit]
Description=Sepolia Prysm Beacon Node
After=network.target sepolia-geth.service
Requires=sepolia-geth.service

[Service]
Type=simple
User=root
WorkingDirectory=/root/sepolia-node
ExecStart=/opt/prysm/prysm.sh beacon-chain \
--sepolia \
--datadir=/root/sepolia-node/prysm \
--execution-endpoint=http://localhost:8551 \
--jwt-secret=/root/sepolia-node/jwt.hex \
--genesis-beacon-api-url=https://lodestar-sepolia.chainsafe.io \
--checkpoint-sync-url=https://sepolia.checkpoint-sync.ethpandaops.io \
--accept-terms-of-use \
--rpc-host=127.0.0.1 \
--rpc-port=5052 \
--grpc-gateway-host=127.0.0.1 \
--grpc-gateway-port=3500
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now sepolia-prysm

RPC начнет синхронизацию, которая занимает порядка 12 часов может больше.

Проверка логов запущенных сервисов

Лог Geth:

journalctl -u sepolia-geth -f

Увидите процесс синхронизации

Лог Prysm (Beacon):

journalctl -u sepolia-prysm -f

Так же будут логи работы без ошибок

Проверка статуса синхронизации

curl -s -X POST http://localhost:8545 \
  -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
curl http://127.0.0.1:3500/eth/v1/node/syncing

Если синхронизация в процессе:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"startingBlock": "0x74c200",
"currentBlock": "0x75b30a",
"highestBlock": "0x806abc"
}
}

Если синхронизация завершена:

RPC выдаст актуальные блоки и можно закидывать RPC в конфиг aztec

--l1-rpc-urls http://127.0.0.1:8545
--l1-consensus-host-urls http://127.0.0.1:3500

Настройка

7. Если Aztec на другом сервере настраиваем защиту NGINX (если все локально NGINX не нужен так как вы не открываетесь в наружу)

ВНИМАНИЕ!!! AZTEC не принимает авторизацию через ЛОГИН ПАРОЛЬ, по этому делайте авторизацию через IP или токен.

В гайди пример через IP

sudo apt install nginx apache2-utils

Cоздаем конфиг для Geth

(строка allow IP СЕРВЕРА AZTEC" указываем IP где стоит нода aztec)

sudo tee /etc/nginx/sites-available/geth-rpc > /dev/null <<EOF
server {
listen 8546;
server_name _;

location / {
allow 127.0.0.1;
allow IP СЕРВЕРА AZTEC;
deny all;

proxy_pass http://127.0.0.1:8545;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
}
EOF

Конфиг для Prysm (Beacon → 5053):

(строка allow IP СЕРВЕРА AZTEC" указываем IP где стоит нода aztec)

sudo tee /etc/nginx/sites-available/beacon-rpc > /dev/null <<EOF
server {
listen 5053;

location / {
allow 127.0.0.1;
allow IP СЕРВЕРА AZTEC;
deny all;

proxy_pass http://127.0.0.1:3500;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
}
EOF

Активируем и перезапускаем NGINX:

sudo ln -s /etc/nginx/sites-available/geth-rpc /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/beacon-rpc /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Проверяем ответ снаружи.

Заходим на сервер aztec ноды

curl http://IP сервера RPC:8546 \
  -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
curl http://IP сервера RPC:5053/eth/v1/node/syncing

вывод должен быть такой же как и в случае с локальным выводом, далее добавляем в конфиг адрес RPC

--l1-rpc-urls http://IP сервера RPC:8546
--l1-consensus-host-urls http://IP сервера RPC:5053