August 31, 2022

Erigon - ETH Full Node

Официальный гайд Erigon на Github

Гайд подготовлен при помощи @Andrii1890(за что ему большое спасибо), собран и структурирован с пояснениями @N1xxxon.

Краткое описание

Erigon (в прошлом — Turbo-Geth) представляет собой ответвление Go Ethereum, ориентированное на скорость и эффективность использования дискового пространства. Erigon — это полностью переработанная архитектура реализации Ethereum, написанная на Go, но с планируемыми реализациями на других языках. Цель Erigon — обеспечение быстрой, более модульной и более оптимизированной реализации Ethereum. Он может выполнить полную синхронизацию архивного узла, используя менее 2ТВ дискового пространства менее чем за 4 дня.

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

Минимальные требования: Ubuntu 20.04, 4 CPU(8threads), 16gb RAM, 3TB+ SSD
С 06.09.2022 необходимо наличие Consensus Layer клиента.

Оптимальный выбор: Hetzner, AX101 или аналоги с 7TB+ SSD NVME.

Остановимся на оптимальном, т.к. нам необходимо поднять CL клиент в будущем.

Сразу уточним, чем больше оперативной памяти, чем лучше диски(nvme, а не ssd, hdd не подойдут), тем быстрее пройдет синхронизация.

На данный момент Full-нода занимает примерно 1.6TB данных.

Официальные требования Erigon

Установка Erigon

Обновление + установка необходимых компонентов

sudo apt update
sudo apt-get install build-essential wget git make htop -y

Установим Golang, версии 1.18.2.
Если нужна версия "по-новее", поправьте цифры в скрипте, в соответствии с вашими требованиями. Все версии Golang можно посмотреть на сайте

if ! [ -x "$(command -v go)" ]; then
  ver="1.18.2"
  cd $HOME
  sudo wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz"
  sudo rm -rf /usr/local/go
  sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz"
  sudo rm "go$ver.linux-amd64.tar.gz"
  sudo echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> ~/.bash_profile
  source ~/.bash_profile
fi

Проверим, что установка прошла и у нас необходимая версия

go version

Скачаем Erigon Вместо --branch v2022.08.03 ниже, нужно подставить актуальную версию

sudo git clone https://github.com/ledgerwatch/erigon.git --branch v2022.08.03
cd erigon
git checkout alpha
make erigon

Создаем папки logs и .ethereum в папке /home/

sudo mkdir -p /home/{logs,.ethereum}

Перемещаем бинарник

sudo mv /root/erigon/build/bin/erigon /usr/local/bin/erigon

Создадим сервисный файл

sudo tee <<EOF >/dev/null /etc/systemd/system/erigon.service
[Unit]
Description=Erigon Node
Wants=network-online.target
After=network-online.target

[Service]
Restart=on-failure
RestartSec=15
Type=simple
ExecStart=/usr/local/bin/./erigon --datadir /home/.ethereum --http.vhosts '*' --http.port 8545 --http.addr 0.0.0.0 --http.corsdomain '*' --http.api 'eth,erigon,net,web3,trace,txpool' --ws --private.api.addr=localhost:9090 --metrics --metrics.port 6060 --metrics.addr 0.0.0.0 --authrpc.jwtsecret /home/.ethereum/jwt.hex

StandardOutput=append:/home/logs/erigon.log
StandardError=append:/home/logs/erigon.log

[Install]
WantedBy=multi-user.target
EOF

Перезагрузим "демона", включим службу Erigon'а и запустим его

sudo systemctl daemon-reload
sudo systemctl enable erigon
sudo systemctl restart erigon

Добавляем возможность смотреть логи по команде erigon.log

sudo echo 'alias erigon.log="tail -f /home/logs/erigon.log"' >> $HOME/.bash_profile
source $HOME/.bash_profile

Теперь мы можем смотреть логи

erigon.log

Установка и настройка фаервола UFW

Данный пункт необходим тем, кто поднимает ноду у хостера.

Те кто будут поднимать дома или "на локалке", где стоит роутер, надо будет пробросить порт 8545 только для Вашего доверенного ip, например, для сканера Forta.
В противном случае к Вашей ноде подключатся все кому не лень.

Если Вы ставите UFW впервые, прошу отнестись внимательно к следующим командам, чтобы случайно не обрубить себе связь с сервером по порту 22.
Как это было у меня в самый первый раз.

Установим UFW если его еще нет

sudo apt-get install ufw

Далее проверим статус UFW, должно выдать

sudo ufw status

Должно выдать

Status: inactive

Включим UFW

sudo ufw enable

Еще раз вводим

sudo ufw status

Должно выдать

Status: active

Установим политику по-умолчанию, запретив все входящие подключения и разрешив все исходящие

sudo ufw default deny incoming
sudo ufw default allow outgoing

Откроем порт 22 для доступа по SSH к серверу

sudo ufw allow 22/tcp

Проверим наличие OpenSSH(или 22/tcp) в списке разрешенных подключений

sudo ufw status verbose

Если есть, то всё ок. Продолжаем дальше.

Откроем доступ для нашего сканера Forta к порту 8545.

sudo ufw allow from <YourFortaIP> to any port 8545

Вместо <YourFortaIP> необходимо указать ip вашей доверенной ноды\сканера Forta.

Еще раз проверим, что наше "правило" добавилось

sudo ufw status verbose

Если всё ок, то я Вас поздравляю. Настройка закончена.

Возможные проблемы

Если случится так, что во время загрузки архива у Вас перезагрузится сервер, то может начать выдавать ошибку. Для этого необходимо удалить базу и снепшоты.

sudo systemctl stop erigon
sudo rm -rf /home/.ethereum/{chaindata,snapshots}

Не выполнять без необходимости! В противном случае Вы просто так удалите Вашу синхронизацию.

Удаление ноды

Если по какой-либо причине, Вам необходимо удалить ноду и все её файлы, просто выполните следующие команды

sudo systemctl stop erigon
sudo systemctl disable erigon
sudo rm -rf /home/{logs,.ethereum}
sudo rm -rf /usr/local/bin/erigon
sudo rm -rf /root/erigon/
sudo rm -rf /etc/systemd/system/erigon.service
sudo systemctl daemon-reload

Обновление

Актуальную версию можно посмотреть здесь https://github.com/ledgerwatch/erigon/releases

Чтобы установить актуальную версию, в коде ниже нужно заменить
--branch v2.30.0 на --branch с указанием актуальной версии(цифры поменяйте и все будет ок)

sudo systemctl stop erigon.service
sleep 10
cd $HOME
rm -rf erigon
git clone https://github.com/ledgerwatch/erigon.git --branch v2.30.0
cd erigon
git checkout alpha
make erigon
cd ./build/bin/
sudo cp erigon /usr/local/bin/
systemctl restart erigon.service
erigon -v #Проверим версию 2.30.0
eigon.log #Проверим логи

Благодарность

Выражаю огромную благодарность @Andrii1890 за помощь в создании данного гайда.